zcx960/deepseek-desktop--packages-client-ui-layout ↗★ 7

@deepseek-ai/dsh-client-ui-layout

外壳插件:三栏框架含拖拽手柄与布局查看状态服务。 适合需要三栏可调布局与面板几何管理的客户端界面开发者。

套件
@deepseek-ai/dsh-client-ui-layout
相容性
待驗證
Harness 依賴範圍
workspace:^
Cordis 依賴範圍
workspace:^
版本
0.1.0-rc.5
授權
MIT
最近更新
2026年8月27日

同名套件的其他儲存庫

安裝

此插件尚未提供可驗證的 bundle,或相容性檢查未通過。請先閱讀倉庫說明。 閱讀完整 README ↗

@deepseek-ai/dsh-client-ui-layout

English | 中文

Shell plugin: three-column AppFrame (drag handles and concession chain) plus the ctx.layout panel-geometry service; it registers into the runtime-owned root slot and declares sidebar, conversation, details, and conversation.empty. The sidebar resize boundary is an invisible hit strip, while the details boundary retains its floating pill; only details shrinks during concession and then auto-closes. A closed sidebar retains a 56px control rail in Web, Windows, and Linux; the macOS desktop carrier uses 90px so its traffic-light group stays inside the rail. Details closes to zero width. The package also seats the theme presenter: it consumes resolved ctx.theme snapshots and projects them onto the document (html { color-scheme } for native UA chrome, body[data-ds-dark-theme] from the active color scheme, the theme's alias tokens as inline variables on body, and one owned `` whose content follows the computed body background). Measuring after palette and token application keeps the rendered background as the single color authority; disposing the presenter removes its metadata node with its other global writes.

When the Electron shell marks html[data-dsh-desktop-platform] as darwin or win32, AppFrame makes only its frame and sidebar column translucent so the native window material reaches the sidebar; the conversation and details columns continue to paint --dsw-alias-bg-base. Web pages and Linux desktop windows retain the ordinary opaque sidebar because they do not match these material selectors. Windows composes its native caption overlay into the first Conversation row, Linux reserves the overlay height above its work columns, and macOS traffic lights occupy only the sidebar inset. A marker-gated drag seat spans the center column's title-bar band independently of conversation content, so blank, settling, and unselected states remain movable when no Session header is visible.

AppFrame always mounts the conversation and details columns; a connected Session renders through SessionProvider. The transient layout store starts the sidebar at its default width and details closed, and it never reads or writes localStorage. Hero and other unselected states also derive a zero rendered details width without changing that stored preference. AppFrame retains the last non-blank Session id across those states: the first Session remains closed, an explicit details action opens the contract default width, returning to the same Session restores its unchanged width, and selecting a different Session closes details before paint. The conversation owner share is empty, while the sidebar owner share contains only collapsed and width; registrants obtain business data from standard hooks and actions from their own inject faces.

The /client exports are the plugin body (apply/inject), LayoutController, and the four owner-share interfaces. AppFrame, the panel store, and the concession solver remain package-internal.

Model Experience

None, as the layout shell manages browser viewing state; nothing here reaches a model request.

KV Cache effect

None; this package neither assembles nor sends a provider request.

Known Limitations and Deferred Work

  • Panel geometry is transient — reload restores the sidebar default and details closed; switching between distinct Session ids also closes details and forgets its dragged width, while unselected surfaces render details at zero width without modifying geometry.
  • Concession-chain auto-close derives a zero width without touching the preferred width — the panel restores itself when the window widens; consumers must not read the stored details width as the rendered truth.
  • No scroll anchoring during squeeze reflow — layout changes may move the reader's viewport.