refactor(shell): retire the plugin's own right panel and free windows
DSH 0.1.5 owns the right column (its native Sidebar hosts every tab type this plugin registers), so the plugin's own right panel, its width drag / new-session seed prefs, and the free-window feature are gone. The bottom workbench is the only plugin-owned surface left, and its expand/collapse control is registered into DSH's session-header utilities list slot (the header's corner seat belongs to the native sidebar's own control). - state: one `bottomSplits` tree; `makeDefaultState()` takes no arguments; `toggleBottomPanel` / `openTabInBottomPane` are the only landing reducers; `setBottomHeight` and `sanitizeState` share the `CONVERSATION_MIN` cap (a persisted tall height no longer snaps on the first drag). - service: every landing in the workbench (creation or focus) expands it; `SIDEBAR_FEATURES` drops `'floatWindows'`; the open/close/activate tab pools cover the single tree. - shell: `Sidebar.tsx` renders only the bottom workbench; the toggle lives in `sidebar/bottom-toggle.tsx`; layout-push pushes height only (no width, no `--dsh-sidebar-width`). - prefs: `openByDefault` / `defaultWidthPercent` / `changesDiffFloat` removed from the schema, defaults, client parser, settings page, and all 20 dictionaries; the retired keys in stored documents are ignored. - tests: free-window specs deleted, panel/float assertions dropped, remaining suites adapted (124 files / 1287 tests); the mount lane asserts the header toggle and sweeps the native sidebar's guide page. - docs: README / README_EN / guide §0,§11 / AGENTS test map.
This commit is contained in:
+12
-47
@@ -1,44 +1,19 @@
|
||||
/**
|
||||
* Layout push: an open panel occupies layout instead of floating over it.
|
||||
* The right panel reserves padding inside the AppFrame three-column grid,
|
||||
* so the app sidebar, conversation, and details column all remain to its
|
||||
* left while the frame's border-box stays viewport-wide. Harness measures
|
||||
* that border-box to choose desktop versus narrow presentation; preserving
|
||||
* it prevents a desktop window from entering narrow mode merely because the
|
||||
* plugin panel opened.
|
||||
* Layout push: the bottom workbench occupies layout instead of floating over
|
||||
* the conversation. The right column belongs to DSH's native Sidebar, so this
|
||||
* stylesheet pushes no width — only the workbench's height.
|
||||
*
|
||||
* AppFrame positions its details drag handle from the measured border-box.
|
||||
* Move that handle left by the same reserved width so it stays on the details
|
||||
* column edge. The ordinary sidebar handle remains at its native coordinate.
|
||||
*
|
||||
* The bottom panel squeezes only the conversation column. The anchor is the
|
||||
* The workbench squeezes only the conversation column. The anchor is the
|
||||
* [data-dsh-center-col] tag the Sidebar shell's locator writes on the
|
||||
* frame's measured center grid item (Sidebar.tsx locate — not a positional
|
||||
* path: the frame also contains an overlay layer and drag handles). A
|
||||
* stretched grid item shrinks by its bottom margin, so the conversation
|
||||
* output and composer lift without touching either sidebar.
|
||||
*
|
||||
* Sizes ride CSS variables updated by the Sidebar shell (0 while collapsed).
|
||||
* Expand/collapse uses the host theme duration; drags disable transitions so
|
||||
* every reserved edge tracks the pointer.
|
||||
* The size rides a CSS variable updated by the Sidebar shell (0 while
|
||||
* collapsed). Expand/collapse uses the host theme duration; drags disable
|
||||
* transitions so the reserved edge tracks the pointer.
|
||||
*/
|
||||
/* Current shells expose [data-dsh-frame]; rc.8-era shells expose the same
|
||||
AppFrame only as the root slot's direct child. */
|
||||
#root [data-dsh-frame],
|
||||
#root > [data-slot="root"] > div {
|
||||
box-sizing: border-box;
|
||||
padding-right: var(--dsh-sidebar-width, 0px);
|
||||
transition: padding-right var(--ds-transition-duration-slow) var(--ds-ease-in-out);
|
||||
}
|
||||
|
||||
#root [data-dsh-frame] > [data-side="details"],
|
||||
#root > [data-slot="root"] > div > [data-side="details"] {
|
||||
transform: translateX(calc(0px - var(--dsh-sidebar-width, 0px)));
|
||||
transition:
|
||||
left var(--ds-transition-duration-slow) var(--ds-ease-in-out),
|
||||
transform var(--ds-transition-duration-slow) var(--ds-ease-in-out);
|
||||
}
|
||||
|
||||
/* The AppFrame's center column. The Sidebar shell's locator (Sidebar.tsx
|
||||
locate/measureCenter) tags the measured column node with
|
||||
[data-dsh-center-col] — one attribute write per node lifetime. The rule
|
||||
@@ -73,13 +48,7 @@ body[data-dsh-sidebar-collapsed] [data-slot="conversation.session.header"] > hea
|
||||
padding-right: 78px;
|
||||
}
|
||||
|
||||
body[data-dsh-sidebar-dragging] #root [data-dsh-frame],
|
||||
body[data-dsh-sidebar-dragging] #root > [data-slot="root"] > div,
|
||||
body[data-dsh-sidebar-dragging] #root [data-dsh-frame] > [data-side="details"],
|
||||
body[data-dsh-sidebar-dragging] #root > [data-slot="root"] > div > [data-side="details"],
|
||||
body[data-dsh-sidebar-dragging] #root [data-dsh-center-col],
|
||||
#root [data-dsh-frame][data-dragging] > [data-side="details"],
|
||||
#root > [data-slot="root"] > div[data-dragging] > [data-side="details"] {
|
||||
body[data-dsh-sidebar-dragging] #root [data-dsh-center-col] {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
@@ -103,10 +72,6 @@ body[data-dsh-sidebar-dragging] #root [data-dsh-center-col],
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
#root [data-dsh-frame],
|
||||
#root > [data-slot="root"] > div,
|
||||
#root [data-dsh-frame] > [data-side="details"],
|
||||
#root > [data-slot="root"] > div > [data-side="details"],
|
||||
#root [data-dsh-center-col] {
|
||||
transition: none;
|
||||
}
|
||||
@@ -117,10 +82,10 @@ body[data-dsh-sidebar-dragging] #root [data-dsh-center-col],
|
||||
* The ui-primitives Menu clamps its main portal list into the viewport but
|
||||
* positions nested submenus with static CSS only — anchored at the parent
|
||||
* row's bottom, growing UP and to the RIGHT — with no clamp whatsoever.
|
||||
* Docked on the window's right edge, both defaults are the worst case for
|
||||
* this panel: a tall "open with" submenu escapes past the viewport top when
|
||||
* the row menu opens near the top, and past the right edge on narrow panels
|
||||
* (PANEL_MIN 280 < card 218 + gap + submenu 165).
|
||||
* Both defaults are the worst case for our menus: a tall "open with" submenu
|
||||
* escapes past the viewport top when the row menu opens near the top, and
|
||||
* past the right edge in a narrow workbench pane (a pane can be far narrower
|
||||
* than the card 218 + gap + submenu 165 a submenu needs).
|
||||
*
|
||||
* menu-flip.ts publishes `data-dsh-sidebar-submenu` on <body> — with the
|
||||
* words "down" and/or "left" — for exactly the lifetime of one of OUR
|
||||
|
||||
Reference in New Issue
Block a user