* fix(app): rest the iPhone composer at the screen's bottom clearance
The composer sat 50pt above the bottom edge on every iPhone: the dock
padded the rectangular home-indicator safe area (34pt) and the composer
stacked another 16pt under it. On iPhone Duo that safe area is also
taller than needed; iOS 27.1's bottom-bar layout guide, which follows
the screen's corners, rests 26pt from the edge.
The native window-layout probe now publishes that clearance, and
WindowLayoutProvider overrides the safe-area context's bottom with it,
so every useSafeAreaInsets() consumer reads one bottom value and null
falls back to the system inset. The docked composer applies
max(bottom, 16) once and keeps 16pt above the keyboard through the
translate view's transform; the gap is not animated as padding because
layout updates through the keyboard transition are expensive on Android
Fabric.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): keep the Import session gap under the wide new workspace composer
The composer's own bottom spacing used to separate it from the Import
session pill on the wide form. With that spacing moved to the dock, the
centered slot padded below the pill instead, so the pill touched the
composer. The pill now owns its gap above.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
---------
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* feat(app): follow system vertical bars and fold divisions
Keep custom navigation controls outside system content areas and use active division regions for temporary panel allocation. Normal sidebar preferences resume when the division disappears.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): show window actions in the active portal scope
The bottom-sheet provider creates its own portal context. Register the window action host within that context so symbols reach the root host.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): hide workspace bar actions behind compact panels
Compact panels keep the workspace route focused while covering its content. Hide its portal actions until the workspace panel is active again.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): continue the sidebar surface across divisions
Keep the fold free of controls while painting it as part of the sidebar, with the shared divider at the workspace edge.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): omit tab count beside the full tab rail
The full tab rail already exposes navigation. Use the same compact/full header selection for the vertical action list.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): preserve folded navigation and bar action lifetime
Use resolved sidebar visibility for desktop activity, and keep bar controls mounted while compact panels cover them so pending menu work survives. Carry circular button chrome inside the portal and exercise the rendered boundary in Chromium.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* fix(app): own script actions across header placement changes
Keep one script action instance on the workspace screen so pending restarts survive removal of either menu. Pass activity through the bar portal so covered menus close their overlays without taking workflow state with them.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
* test(app): exercise script ownership through the workspace
Replace synthetic ownership fixtures with a real workspace, script menu and isolated terminal worker. Hold terminal exit until the compact header is removed so moving pending state back into the menu fails the regression. Exercise portal activity with production menu and header controls.
Co-authored-by: Elsa Granger <zeyugao@outlook.com>
---------
Co-authored-by: Elsa Granger <zeyugao@outlook.com>