SIGN IN SIGN UP

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