Repository navigation
feat(pages): add a tabs widget whose tabs hold their own widgets - #3217
Open
rubenvdlinde wants to merge 2 commits into
Open
rubenvdlinde wants to merge 2 commits into
rubenvdlinde wants to merge 2 commits into
Conversation
rubenvdlinde
force-pushed
the
feat/noid/tabs-widget-ui
branch
from
November 4, 2026 08:51
7e2a1c0 to
2e55f28
Compare
rubenvdlinde
force-pushed
the
feat/noid/tabs-widget-ui
branch
from
November 5, 2026 11:59
2e55f28 to
1181602
Compare
A tabs widget puts several grids in the room of one: each tab holds its own widgets, tables and views included. The tab strip follows the tabs pattern for the keyboard, and in edit mode each tab can get widgets of its own, saved with parentIndex and parentTab. A table or view widget shows the description of its table or view behind a button. Co-authored-by: taiebot <13300652+taiebot@users.noreply.github.com> Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Ruben van der Linde <ruben@conduction.nl>
A data widget shows the title of its table in its own heading, the table inside no longer repeats it. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Ruben van der Linde <ruben@conduction.nl>
rubenvdlinde
force-pushed
the
feat/noid/tabs-widget-ui
branch
from
November 6, 2026 06:38
1181602 to
6472d8c
Compare
rubenvdlinde
marked this pull request as ready for review
November 6, 2026 08:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #3099, on top of #3216 (start page). The UI of the tabs widget from #3212: several grids in the room of one, each tab holding its own widgets, tables and views included. The tab strip and the description button come from #3091 by @taiebot, who is co-author of the commit; here they live in a widget instead of on the start page.
Like #3212, this can be dropped without affecting the others if the model of #3212 isn't wanted.
Size: 680 lines: 466 code and 214 tests.
What changes
parentIndexandparentTabfor the widgets in a tab. Removing a tabs widget removes the widgets in its tabs; a tabs widget that loses tabs moves their widgets into its last tab. The widget dialog doesn't offer Tabs inside a tab.aria-expanded,aria-controls) instead of above the rows, so tables in a widget keep their room.How it was tested
On Nextcloud 34 with PostgreSQL:
context-tabs-widget.spec.ts: tabs with a text and a table, the keyboard, the description button; adding a widget to a tab in edit mode and finding it after a reload.context-grid-pages.spec.tsagain.TabsWidget.cy.js(one grid per tab, keyboard, saving withparentIndex) andCollapsibleDescription.cy.jsnpm run lint,npm run stylelintandnpm run buildKnown gap: dragging a widget inside a tab with the mouse doesn't move it yet; the drag is taken by the grid of the page (GridStack nested in GridStack). Moving and resizing from the widget's menu works inside tabs, and dragging on the page itself works. This needs fixing before this pull request leaves draft.
🖼️ Screenshots
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)