@deepseek-ai/dsh-client-ui-sidebar 0.0.1-rc.2 → 0.0.1-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/client/ui-sidebar/README.md
5
- README.md: 4eb9eeb73f1f8398eb9d16434996840182ba79a9
6
- README.zh.md: a9fb927305d0bab5fb4d27adbfdbec90dfa1dd6d
5
+ README.md: 9974118f69901de985e012e1b62f95a0bcee64c2
6
+ README.zh.md: 11b0aa142cf62626ab6105e2c405d506e35349b0
package/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- Sidebar plugin: real Host Workspaces in stable Host order, each containing its `sessionIds` in Workspace order with `parentId` nesting; Sessions outside every Workspace appear in a trailing `Ungrouped` section. Search, state dots, and collapse into the layout-owned 56px rail are presentation-local. Contract: the [slot system standard](../../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md).
5
+ Sidebar shell plugin: the wordmark, New Session action, layout-owned collapse control, scroll-aware region seat, and bottom-pinned Settings seat. [ui-workspace](../ui-workspace/README.md) owns the Workspace and Session browser rendered into `sidebar.workspaces`; this package neither derives its rows nor owns its view preferences. Collapse into the layout-owned 56px rail remains presentation-local. Contract: the [slot system standard](../../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md).
6
6
 
7
- New Session starts the runtime's page-local frontend Session Intent; a real Workspace's "+" starts one targeted to that Workspace. The Workspace header "+" opens ui-workspace's shared picker, whose selection also targets a frontend Session. A Workspace Intent does not appear in the sidebar.
7
+ New Session starts the runtime's page-local frontend Session Intent. The runtime targets the explicit Workspace used by a scoped action, otherwise the current Session's Workspace, otherwise the most recently active Workspace; when none exists it clears into the blank New Session page. Workspace-specific controls and the shared picker belong to ui-workspace.
8
8
 
9
- `SidebarRootComponentProps` composes the layout owner share, the global `useSessions` and `useWorkspaces` hooks, the declared `sidebar.workspace` and `sidebar.settings` child slots, and injected `startSession`, `open`, and sidebar-toggle callbacks. There is no plugin store: `deriveGroups` consumes object-layer snapshots and component-local expansion/search state.
9
+ `SidebarRootComponentProps` composes the layout owner share, the global `useSessions` and `useWorkspaces` hooks, the declared `sidebar.workspaces` and `sidebar.settings` child slots, and injected `startSession` plus sidebar-toggle callbacks. There is no plugin store.
10
10
 
11
11
  Scrollbars in the column are a pointer affordance: the shell rebinds ui-theme's [scrollbar indirection](../ui-theme/README.md) to `transparent` whenever the pointer is outside it, and keeps the thumb drawn for 2s after the pointer leaves, so a list nobody is pointing at carries no bar. The reservation that keeps rows from moving belongs to the scrolling region ([ui-workspace](../ui-workspace/README.md)), so revealing a thumb never reflows.
12
12
 
@@ -25,5 +25,5 @@ None; this package neither assembles nor sends a provider request.
25
25
  ## Known Limitations and Deferred Work
26
26
 
27
27
  - **Session state-dot rendering is owned by [ui-workspace](../ui-workspace/README.md)** — no done/error notification sources are available.
28
- - **Group-by supports Workspace only** — Update and Status are not available strategies.
28
+ - **Workspace browser behavior is composition-owned** — grouping, ordering, search, and row state belong to [ui-workspace](../ui-workspace/README.md), not this shell.
29
29
  - **"New task completed" unread marking is local viewing state** — completion-time > last-seen never reaches the host.
package/README.zh.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- 侧边栏插件:真实 Host Workspace 按稳定的 Host 顺序排列;每个 Workspace 按自身顺序包含其 `sessionIds`,并以 `parentId` 嵌套;不属于任何 Workspace 的会话显示在末尾的 `Ungrouped` 分区。搜索、状态点以及折叠到布局拥有的 56px 轨道,都只属于呈现层。约定:[slot 系统标准](../../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md)。
5
+ 侧边栏外壳插件:负责字标、New Session 操作、布局持有的折叠控件、可感知滚动的区域 seat,以及固定在底部的 Settings seat。[ui-workspace](../ui-workspace/README.md) 持有渲染到 `sidebar.workspaces` 的 Workspace 与 Session 浏览器;本包既不派生其中的行,也不持有其视图偏好。折叠到布局拥有的 56px 轨道仍属于本地呈现行为。约定:[slot 系统标准](../../../.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md)。
6
6
 
7
- New Session 会启动运行时的页面局部前端 Session Intent;真实 Workspace 的「+」会启动一项以该 Workspace 为目标的 Intent。Workspace 标题栏的「+」打开 ui-workspace 的共享选择器,选择结果同样以一个前端会话为目标。Workspace Intent 不会出现在侧边栏中。
7
+ New Session 会启动运行时的页面局部前端 Session Intent。运行时优先使用作用域操作明确指定的 Workspace,否则使用当前 Session 所属 Workspace,再否则使用最近活跃 Workspace;一个 Workspace 都没有时则清空选择,进入空白 New Session 页面。Workspace 专属控件与共享选择器由 ui-workspace 持有。
8
8
 
9
- `SidebarRootComponentProps` 组合布局 owner share、全局 `useSessions` 和 `useWorkspaces` 钩子、已声明的 `sidebar.workspace` 与 `sidebar.settings` 子 slot,以及注入的 `startSession`、`open` 和侧边栏切换回调。这里没有插件 store:`deriveGroups` 消费对象层快照与组件局部的展开/搜索状态。
9
+ `SidebarRootComponentProps` 组合布局 owner share、全局 `useSessions` 和 `useWorkspaces` 钩子、已声明的 `sidebar.workspaces` 与 `sidebar.settings` 子 slot,以及注入的 `startSession` 与侧边栏切换回调。这里没有插件 store。
10
10
 
11
11
  栏内的滚动条是一种指针可供性:只要指针不在栏内,外壳就把 ui-theme 的[滚动条间接层](../ui-theme/README.md)重新绑定为 `transparent`;指针离开后滑块再保留 2 秒,因此没人指向的列表不会带着滚动条。避免行位移的空间预留属于滚动区域本身([ui-workspace](../ui-workspace/README.md)),所以显示滑块不会引起重排。
12
12
 
@@ -25,5 +25,5 @@ New Session 会启动运行时的页面局部前端 Session Intent;真实 Work
25
25
  ## 已知限制与暂缓事项
26
26
 
27
27
  - **Session 状态点渲染由 [ui-workspace](../ui-workspace/README.md) 持有**:没有可用的 done/error 通知数据源。
28
- - **分组只支持 Workspace**:Update 和 Status 不是可用策略。
28
+ - **Workspace 浏览行为由组合持有**:分组、排序、搜索与行状态都属于 [ui-workspace](../ui-workspace/README.md),不属于此外壳。
29
29
  - **「New task completed」未读标记是本地查看状态**:完成时间 > 上次查看时间这一事实永远不会到达宿主。
package/lib/client.js CHANGED
@@ -23,7 +23,7 @@ window.__ModuleLoader__.load({
23
23
  }
24
24
  //#endregion
25
25
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-sidebar/src/client/SidebarRoot.module.css.mjs
26
- const css = ".hHd-Xa_root{--dsh-sidebar-inline-padding:12px;height:100%;padding:6px var(--dsh-sidebar-inline-padding);box-sizing:border-box;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);flex-direction:column;font-size:14px;display:flex}.hHd-Xa_root.hHd-Xa_collapsed{padding:18px 10px 6px}.hHd-Xa_root.hHd-Xa_quietBars{--dsh-scrollbar-thumb:transparent;--dsh-scrollbar-thumb-hover:transparent}.hHd-Xa_fading>*{opacity:0;transition:opacity .15s var(--ds-ease-in-out)}.hHd-Xa_wide{animation:hHd-Xa_wide-in .2s var(--ds-ease-in-out)}@keyframes hHd-Xa_wide-in{0%{opacity:0}}.hHd-Xa_railIn .hHd-Xa_iconButton,.hHd-Xa_railIn .hHd-Xa_newSession,.hHd-Xa_railIn .hHd-Xa_footArea{animation:hHd-Xa_rail-in .15s var(--ds-ease-in-out) .1s backwards}@keyframes hHd-Xa_rail-in{0%{opacity:0}}.hHd-Xa_logoRow{box-sizing:border-box;flex:none;justify-content:flex-end;align-items:center;gap:8px;height:60px;margin-bottom:8px;padding:8px 0 8px 4px;display:flex;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_logoRow{height:36px;margin-bottom:12px;padding:0}.hHd-Xa_brand{min-width:0;color:inherit;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;padding:0;display:inline-flex;overflow:hidden}.hHd-Xa_iconButton{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-secondary);background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.hHd-Xa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.hHd-Xa_collapsed .hHd-Xa_iconButton{width:36px;height:36px}.hHd-Xa_collapsed .hHd-Xa_toggle .hHd-Xa_panelIcon{display:none}.hHd-Xa_collapsed .hHd-Xa_toggle:hover .hHd-Xa_panelIcon{display:inline}.hHd-Xa_collapsed .hHd-Xa_toggle:hover .hHd-Xa_railFish{display:none}.hHd-Xa_collapsed .hHd-Xa_iconButton{color:var(--dsw-alias-label-primary)}.hHd-Xa_newSession{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-elevated-fill);height:38px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:12px;flex:none;justify-content:center;align-items:center;gap:6px;margin:0 2px 20px;padding:8px 16px;font-size:14px;font-weight:500;line-height:22px;display:flex;overflow:hidden}.hHd-Xa_newSession:hover{background:var(--dsw-alias-button-floating-hover)}.hHd-Xa_collapsed .hHd-Xa_newSession{background:0 0;border-color:#0000;gap:0;height:36px;margin:0 0 12px;padding:0}.hHd-Xa_collapsed .hHd-Xa_newSession:hover{background:var(--dsw-alias-interactive-bg-hover)}.hHd-Xa_newSessionLabel{white-space:nowrap;max-width:200px;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_newSessionLabel{max-width:0}.hHd-Xa_regionArea{min-height:0;margin-right:calc(-1 * var(--dsh-sidebar-inline-padding));flex-direction:column;flex:1;display:flex;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_regionArea{margin-right:0}.hHd-Xa_footArea{flex:none}@media (prefers-reduced-motion:reduce){.hHd-Xa_wide,.hHd-Xa_fading>*,.hHd-Xa_railIn .hHd-Xa_iconButton,.hHd-Xa_railIn .hHd-Xa_newSession,.hHd-Xa_railIn .hHd-Xa_footArea{transition:none;animation:none}}";
26
+ const css = ".hHd-Xa_root{--dsh-sidebar-inline-padding:12px;height:100%;padding:6px var(--dsh-sidebar-inline-padding);box-sizing:border-box;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);flex-direction:column;font-size:14px;display:flex}.hHd-Xa_root.hHd-Xa_collapsed{padding:18px 10px 6px}.hHd-Xa_root.hHd-Xa_quietBars{--dsh-scrollbar-thumb:transparent;--dsh-scrollbar-thumb-hover:transparent}.hHd-Xa_fading>*{opacity:0;transition:opacity .15s var(--ds-ease-in-out)}.hHd-Xa_wide{animation:hHd-Xa_wide-in .2s var(--ds-ease-in-out)}@keyframes hHd-Xa_wide-in{0%{opacity:0}}.hHd-Xa_railIn .hHd-Xa_iconButton,.hHd-Xa_railIn .hHd-Xa_newSession,.hHd-Xa_railIn .hHd-Xa_footArea{animation:hHd-Xa_rail-in .15s var(--ds-ease-in-out) .1s backwards}@keyframes hHd-Xa_rail-in{0%{opacity:0}}.hHd-Xa_logoRow{box-sizing:border-box;flex:none;justify-content:flex-end;align-items:center;gap:8px;height:60px;margin-bottom:8px;padding:8px 0 8px 4px;display:flex;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_logoRow{height:36px;margin-bottom:12px;padding:0}.hHd-Xa_brand{min-width:0;color:inherit;cursor:pointer;background:0 0;border:none;flex:1;align-items:center;padding:0;display:inline-flex;overflow:hidden}.hHd-Xa_iconButton{cursor:pointer;width:28px;height:28px;color:var(--dsw-alias-label-secondary);background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.hHd-Xa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.hHd-Xa_collapsed .hHd-Xa_iconButton{width:36px;height:36px}.hHd-Xa_collapsed .hHd-Xa_toggle .hHd-Xa_panelIcon{display:none}.hHd-Xa_collapsed .hHd-Xa_toggle:hover .hHd-Xa_panelIcon{display:inline}.hHd-Xa_collapsed .hHd-Xa_toggle:hover .hHd-Xa_railFish{display:none}.hHd-Xa_collapsed .hHd-Xa_iconButton{color:var(--dsw-alias-label-primary)}.hHd-Xa_newSession{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-elevated-fill);height:38px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:12px;flex:none;justify-content:center;align-items:center;gap:6px;margin:0 2px 8px;padding:8px 16px;font-size:14px;font-weight:500;line-height:22px;display:flex;overflow:hidden}.hHd-Xa_newSession:hover{background:var(--dsw-alias-button-floating-hover)}.hHd-Xa_collapsed .hHd-Xa_newSession{background:0 0;border-color:#0000;gap:0;height:36px;margin:0 0 12px;padding:0}.hHd-Xa_collapsed .hHd-Xa_newSession:hover{background:var(--dsw-alias-interactive-bg-hover)}.hHd-Xa_newSessionLabel{white-space:nowrap;max-width:200px;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_newSessionLabel{max-width:0}.hHd-Xa_regionArea{min-height:0;margin-left:-4px;margin-right:calc(-1 * var(--dsh-sidebar-inline-padding));flex-direction:column;flex:1;padding-left:4px;display:flex;overflow:hidden}.hHd-Xa_collapsed .hHd-Xa_regionArea{margin-left:0;margin-right:0;padding-left:0}.hHd-Xa_footArea{flex-direction:column;flex:none;display:flex}.hHd-Xa_settingsArea,.hHd-Xa_footerActions{flex:none;width:100%;min-width:0}.hHd-Xa_footerActions{display:flex}.hHd-Xa_collapsed .hHd-Xa_footArea{align-items:center}.hHd-Xa_collapsed .hHd-Xa_settingsArea,.hHd-Xa_collapsed .hHd-Xa_footerActions{justify-content:center;width:auto;display:flex}@media (prefers-reduced-motion:reduce){.hHd-Xa_wide,.hHd-Xa_fading>*,.hHd-Xa_railIn .hHd-Xa_iconButton,.hHd-Xa_railIn .hHd-Xa_newSession,.hHd-Xa_railIn .hHd-Xa_footArea{transition:none;animation:none}}";
27
27
  const tagId = "@deepseek-ai/dsh-client-ui-sidebar/SidebarRoot.module.css";
28
28
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
29
29
  const tag = document.createElement("style");
@@ -33,24 +33,26 @@ window.__ModuleLoader__.load({
33
33
  document.head.appendChild(tag);
34
34
  }
35
35
  var SidebarRoot_module_css_default = {
36
- "rail-in": "hHd-Xa_rail-in",
36
+ "iconButton": "hHd-Xa_iconButton",
37
+ "root": "hHd-Xa_root",
38
+ "railIn": "hHd-Xa_railIn",
39
+ "brand": "hHd-Xa_brand",
40
+ "footerActions": "hHd-Xa_footerActions",
41
+ "newSessionLabel": "hHd-Xa_newSessionLabel",
37
42
  "fading": "hHd-Xa_fading",
43
+ "wide": "hHd-Xa_wide",
44
+ "quietBars": "hHd-Xa_quietBars",
45
+ "wide-in": "hHd-Xa_wide-in",
46
+ "logoRow": "hHd-Xa_logoRow",
38
47
  "footArea": "hHd-Xa_footArea",
39
- "newSession": "hHd-Xa_newSession",
40
48
  "toggle": "hHd-Xa_toggle",
41
49
  "panelIcon": "hHd-Xa_panelIcon",
42
50
  "railFish": "hHd-Xa_railFish",
51
+ "rail-in": "hHd-Xa_rail-in",
52
+ "settingsArea": "hHd-Xa_settingsArea",
43
53
  "collapsed": "hHd-Xa_collapsed",
44
- "regionArea": "hHd-Xa_regionArea",
45
- "logoRow": "hHd-Xa_logoRow",
46
- "iconButton": "hHd-Xa_iconButton",
47
- "brand": "hHd-Xa_brand",
48
- "newSessionLabel": "hHd-Xa_newSessionLabel",
49
- "root": "hHd-Xa_root",
50
- "quietBars": "hHd-Xa_quietBars",
51
- "wide": "hHd-Xa_wide",
52
- "wide-in": "hHd-Xa_wide-in",
53
- "railIn": "hHd-Xa_railIn"
54
+ "newSession": "hHd-Xa_newSession",
55
+ "regionArea": "hHd-Xa_regionArea"
54
56
  };
55
57
  //#endregion
56
58
  //#region lib/types/client/SidebarRoot.js
@@ -62,7 +64,7 @@ window.__ModuleLoader__.load({
62
64
  * snap to the 56px rail (one icon each, same top-down order) fading in as the
63
65
  * slide ends. The workspace/session browsing region between the New Session
64
66
  * button and the foot is the `sidebar.workspaces` registrant's, and the foot
65
- * is the `sidebar.settings` registrant's; the shell hands them the wide flag
67
+ * holds `sidebar.settings` plus `sidebar.footer.action`; the shell hands them the wide flag
66
68
  * (plus an expand request callback for the browser).
67
69
  *
68
70
  * The column also owns whether the scroll regions nested in it draw a
@@ -200,9 +202,15 @@ window.__ModuleLoader__.load({
200
202
  }
201
203
  })
202
204
  }),
203
- (0, react_jsx_runtime.jsx)("div", {
205
+ (0, react_jsx_runtime.jsxs)("div", {
204
206
  className: SidebarRoot_module_css_default.footArea,
205
- children: renderSlot("sidebar.settings", { wide })
207
+ children: [(0, react_jsx_runtime.jsx)("div", {
208
+ className: SidebarRoot_module_css_default.footerActions,
209
+ children: renderSlot("sidebar.footer.action", { wide })
210
+ }), (0, react_jsx_runtime.jsx)("div", {
211
+ className: SidebarRoot_module_css_default.settingsArea,
212
+ children: renderSlot("sidebar.settings", { wide })
213
+ })]
206
214
  })
207
215
  ]
208
216
  });
@@ -263,6 +271,10 @@ window.__ModuleLoader__.load({
263
271
  "sidebar.settings": {
264
272
  kind: "single",
265
273
  scope: "root"
274
+ },
275
+ "sidebar.footer.action": {
276
+ kind: "list",
277
+ scope: "root"
266
278
  }
267
279
  },
268
280
  inject: injectProps
@@ -4,7 +4,8 @@
4
4
  * owns column geometry (fold state machine, brand row, New Session);
5
5
  * everything between the section header and the list bottom is the
6
6
  * `sidebar.workspaces` registrant's (ui-workspace), and the foot is the
7
- * `sidebar.settings` registrant's (ui-settings).
7
+ * `sidebar.settings` registrant's (ui-settings), followed by optional footer
8
+ * actions in `sidebar.footer.action`.
8
9
  */
9
10
  import type { PropsLocale, PropsRenderSlots, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
10
11
  import type { WorkspaceId } from '@deepseek-ai/dsh-client-runtime/client';
@@ -31,6 +32,15 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
31
32
  scope: 'root';
32
33
  owner: SidebarSettingsOwnerProps;
33
34
  };
35
+ /**
36
+ * Optional actions beside Settings at the sidebar foot. Declared by this
37
+ * package's 'sidebar' entry; each action receives only the column state.
38
+ */
39
+ 'sidebar.footer.action': {
40
+ kind: 'list';
41
+ scope: 'root';
42
+ owner: SidebarFooterActionOwnerProps;
43
+ };
34
44
  }
35
45
  }
36
46
  /**
@@ -51,6 +61,11 @@ export interface SidebarSettingsOwnerProps {
51
61
  /** Whether the sidebar renders wide content (false = 56px rail). */
52
62
  wide: boolean;
53
63
  }
64
+ /** Owner share of an action rendered beside Settings at the sidebar foot. */
65
+ export interface SidebarFooterActionOwnerProps {
66
+ /** Whether the sidebar renders wide content (false = 56px rail). */
67
+ wide: boolean;
68
+ }
54
69
  /**
55
70
  * Registrant-private injected share (arrives via the register inject
56
71
  * factory). The shell keeps only its own controls: starting a Session from
@@ -59,8 +74,8 @@ export interface SidebarSettingsOwnerProps {
59
74
  export type SidebarRootInjected = {
60
75
  /**
61
76
  * Start a New Session: with a workspace, reuse-or-create its blank session
62
- * and open it; without one, clear the selection into the New Session pure
63
- * view state (the conversation.empty seat).
77
+ * and open it; without one, inherit the current Session Workspace, then the
78
+ * recent Workspace, or clear into the New Session pure view when none exist.
64
79
  */
65
80
  startSession: (workspaceId?: WorkspaceId) => void;
66
81
  /** Toggle the sidebar column through the layout service. */
@@ -71,5 +86,5 @@ export type SidebarRootInjected = {
71
86
  * render shares, this package's injected callbacks, and the standard locale
72
87
  * seat. No store is registered.
73
88
  */
74
- export type SidebarRootComponentProps = PropsRuntime<'sidebar'> & PropsRenderSlots<'sidebar.workspaces' | 'sidebar.settings'> & SidebarRootInjected & PropsLocale<'sidebar'>;
89
+ export type SidebarRootComponentProps = PropsRuntime<'sidebar'> & PropsRenderSlots<'sidebar.workspaces' | 'sidebar.settings' | 'sidebar.footer.action'> & SidebarRootInjected & PropsLocale<'sidebar'>;
75
90
  //# sourceMappingURL=slots.d.ts.map
@@ -1,7 +1,7 @@
1
1
  /** Registers the sidebar shell into the layout-owned slot. */
2
2
  import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
3
3
  import { type SidebarKey } from './locales.ts';
4
- export type { SidebarRootComponentProps, SidebarRootInjected, SidebarSectionOwnerProps, SidebarSettingsOwnerProps } from './contract/slots.ts';
4
+ export type { SidebarFooterActionOwnerProps, SidebarRootComponentProps, SidebarRootInjected, SidebarSectionOwnerProps, SidebarSettingsOwnerProps, } from './contract/slots.ts';
5
5
  export type { SidebarKey } from './locales.ts';
6
6
  declare module '@deepseek-ai/dsh-client-ui-slots' {
7
7
  interface LocaleNamespaceMap {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-sidebar",
3
3
  "description": "Sidebar plugin: session multi-level tree, search, grouping, state dots",
4
- "version": "0.0.1-rc.2",
4
+ "version": "0.0.1-rc.3",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
7
7
  },
@@ -45,23 +45,23 @@
45
45
  },
46
46
  "peerDependencies": {
47
47
  "react": "^18.2.0",
48
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.2",
49
- "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.2",
50
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.2",
51
- "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.2",
52
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
53
- "@deepseek-ai/cordis": "^4.0.1-rc.1"
48
+ "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.3",
49
+ "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.3",
50
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.3",
51
+ "@deepseek-ai/cordis": "^4.0.1-rc.1",
52
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
53
+ "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.3"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/react": "~18.3.1",
57
57
  "react": "^18.2.0",
58
- "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.2",
59
- "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.2",
60
- "@deepseek-ai/dsh-client-test-runtime": "^0.0.1-rc.2",
61
- "@deepseek-ai/dsh-client-ui-layout": "^0.0.1-rc.2",
62
- "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.2",
63
- "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.2",
64
- "@deepseek-ai/dsh-invariants": "^0.0.1-rc.2",
58
+ "@deepseek-ai/dsh-client-locale": "^0.0.1-rc.3",
59
+ "@deepseek-ai/dsh-client-runtime": "^0.0.1-rc.3",
60
+ "@deepseek-ai/dsh-client-test-runtime": "^0.0.1-rc.3",
61
+ "@deepseek-ai/dsh-client-ui-layout": "^0.0.1-rc.3",
62
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.0.1-rc.3",
63
+ "@deepseek-ai/dsh-client-ui-slots": "^0.0.1-rc.3",
64
+ "@deepseek-ai/dsh-invariants": "^0.0.1-rc.3",
65
65
  "@deepseek-ai/cordis": "^4.0.1-rc.1"
66
66
  },
67
67
  "files": [