Unify vertical list widget layout (#24445)
> **Stack** (split of #24434, review bottom-up) > 1. #24444 Simplify widget rendering surfaces > 2. #24445 Unify vertical list widget layout > 3. #24446 Add widget layout settings flow ## Goal Make widgets predictable across record pages, side panels, and edit mode. This PR takes the **containers own layout** half of that. Based on #24444. ## What changes The layout container owns sizing, ordering, scrolling, drag-and-drop, and placement. `PageLayoutVerticalListViewer`, `PageLayoutVerticalListEditor`, and `PageLayoutSoloViewer` collapse into a single `PageLayoutVerticalList`, which removes the solo/stacked and view/edit rendering forks. Vertical-list widgets now have two explicit behaviors: - **Fit-content** widgets hug their content and use the tab scroll. - **Viewport-filling** widgets, meaning feeds and canvases, fill the available tab height. Feeds scroll within it, canvases keep their native interactions. A tab can stack fit-content widgets, followed by at most one viewport-filling widget. `isViewportFillingWidgetType` classifies them, `sortWidgetsWithViewportFillingLast` enforces the ordering, and `canVerticalListAcceptWidget` gates what a tab will take on drop and on insert. Together with the height removals in #24444, this replaces hard-coded heights and widget-specific scroll fixes with consistent behavior across every host. Solo presentation is no longer a stored layout mode. `getIsSingleWidgetTab` derives it from the tab's widgets, so the `@deprecated` marker on `PageLayoutTabLayoutMode.CANVAS` goes away along with `PageLayoutVerticalListViewerVariant` and `getPageLayoutVerticalListViewerVariant`. Scroll wrappers get a stable identity per page layout and record via `getScrollWrapperInstanceIdFromPageLayoutAndRecord`, and `WorkflowDiagramAllowPageScrollContext` lets the workflow canvas opt into page scroll when it is not the viewport-filling widget. The app page-layout manifests are updated to match, and the manifest tab integration spec covers the new ordering rules. --------- Co-authored-by: Félix Malfait <felix@twenty.com>
T
Thomas des Francs committed
d7dcc20b0340387b5742e12b7734316a2ac24725
Parent: 52f16a4
Committed by GitHub <noreply@github.com>
on 8/25/2026, 6:51:33 AM