You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit fe7ad48
Browse filesBrowse the repository at this point in the historyBrowse files
`ctx.panels.register({ id, title, matches, order?, launcher?, toolbar?, component })`. An optional `toolbar` supplies live controls beside shell search in place of the static launcher. Its lifetime stays with its plugin, and shell render failures are isolated. Huddles is the first caller. IDs are local to the
102
106
plugin; the registry adds installation identity and revision and removes the
103
107
contribution when its Cordis scope ends. `primary: true` opts a page into shell
@@ -148,6 +152,52 @@ ctx.pages.register({
148
152
});
149
153
```
150
154
155
+
A page may replace the conversation sidebar while selected. Its component receives
156
+
the current read-only `OpenTarget` and, when present, shell-generated primary
157
+
Pages navigation as `children`. It supplies only its sidebar contents within the
158
+
existing sidebar slot. Wrap that content in the existing `shell-sidebar-default`
159
+
layout role to receive the default sidebar width and shell sizing constraints
160
+
(260px default width, 220px minimum, with the shell's available-width clamp). That
161
+
role provides outer slot geometry and its divider; it does not provide an inner
162
+
surface, frame, padding, or content layout. The contributor owns those details.
163
+
External authors use this CSS role and their own markup; internal source components
164
+
such as `SidebarFrame` are not part of the author SDK. The host owns the slot and
165
+
collapse/drawer interaction. A page may manage its own width preference. Pages do
166
+
not receive navigation completion authority or own routing. On wide layouts the
167
+
shell keeps its generic Show/Hide sidebar toggle; on narrow layouts the existing
Copy file name to clipboardExpand all lines: docs/shell-design.md
+13-4Lines changed: 13 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -79,10 +79,18 @@ semantic tokens, UI authoring rules and the local component reference.
79
79
the entire webview. Native traffic lights remain in their reserved titlebar
80
80
area. The shared compact dialog header centers its title and Close action
81
81
without a large empty band. Close and Escape return to the original workspace
82
-
visit, including after navigating through several Settings sections. `App.tsx` composes `PrimarySidebar` around `features/channel-navigation/ChannelInventory`. The inventory supplies channel rows,
82
+
visit, including after navigating through several Settings sections.
83
+
A selected page may replace the conversation sidebar through `Page.sidebar`.
84
+
It receives the admitted workspace target and shell-generated Pages navigation
85
+
as children, without navigation completion authority. Healthy sidebar state
86
+
survives target changes and stays mounted beneath Settings. A failed sidebar
87
+
shows an alert and scrollable page navigation in the standard frame; a new
88
+
workspace navigation request retries it independently of the page body.
89
+
Pages without a sidebar contribution keep the conversation sidebar.
90
+
`App.tsx` composes `PrimarySidebar` around `features/channel-navigation/ChannelInventory`. The inventory supplies channel rows,
83
91
notices, dialogs and scroll bindings through a render prop; PrimarySidebar owns
84
92
the common frame, Solo/Team arrangement and error fallback. The fallback retains
85
-
page navigation without remounting a failed inventory. There is no portal or plugin contract expansion.
93
+
page navigation without remounting a failed inventory. There is no portal.
86
94
Sidebar session state resets on scope/connection generation without remounting
87
95
unrelated pages. Its own error boundary keeps page navigation and Settings usable.
88
96
Page buttons use shared navigation rows and focus the main region on selection.
@@ -92,11 +100,12 @@ semantic tokens, UI authoring rules and the local component reference.
92
100
220px disclosure overlays content, supports Escape, and keeps sidebar state
93
101
mounted. A navigation selection closes the phone drawer and hands focus to the
94
102
main content for conversation selections. Settings owns its navigation inside
95
-
the modal instead. Messages, Agents and any selected primary page share an
103
+
the modal instead. Messages, Agents, any selected primary page, and pages with
104
+
a sidebar contribution share an
96
105
animated header toggle; hiding the sidebar preserves its mounted state and saved
97
106
width. The toggle uses "Hide sidebar" / "Show sidebar" on every page, and the
98
107
combined Solo and Team sidebar is labelled "Sidebar". Reduced motion disables the transition. Non-primary
99
-
desktop destinations retain the visible sidebar.
108
+
desktop destinations without a sidebar contribution retain the visible sidebar.
100
109
The same header keeps history and account/search actions, plus a segmented
101
110
navigation strip and full-page toolbar icons. Real control widths, native insets
102
111
and text scale determine whether header pages fit without overlap. Otherwise
0 commit comments