@deepseek-ai/dsh-client-ui-sidebar-right 0.1.5-alpha.2 → 0.1.5-rc.2
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 +2 -2
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/lib/client.js +101 -47
- package/lib/types/client/tab-registry.d.ts +11 -4
- package/lib/types/client/tabs/guide/GuideBody.d.ts +7 -3
- package/lib/types/client/tabs/guide/GuideTitle.d.ts +19 -1
- package/package.json +14 -14
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-right/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: c947b5411f51aff54f480949af203d192662adbf
|
|
6
|
+
README.zh.md: 51a5fd9e3193ff1d7be019d14380a6a124ba477a
|
package/README.md
CHANGED
|
@@ -98,7 +98,7 @@ The Tab domain retains navigation, an abort signal, and bound actions per (Sessi
|
|
|
98
98
|
|
|
99
99
|
Default pages depend on the number of registered guide entries, not the number of tab types or open tabs. Exactly one entry opens its page directly (Files in the shipped composition); zero or multiple entries open the guide. Explicitly adding a guide still opens the guide, even with one entry. The sole docked guide is the only tab that cannot close; closing any other sole tab also collapses the column. The chip, context menu, and `close` API apply the same rule.
|
|
100
100
|
|
|
101
|
-
The guide tab is
|
|
101
|
+
The guide tab is a muted compass over one entry capsule per `guide` entry the registered types contributed, in `order`, centred in the body; the guide has no words of its own. A capsule shows the entry's glyph — or the guide's quieter cube placeholder when the entry registered none — and its title; while at most four entries are listed, an entry that registered a `description` shows it under the title, and a longer list drops every description. Picking a capsule calls `tab.actions.openTab(entry.kind, { replaceTab: true })`, so the guide gives way to the page it opened. A pane holds at most one guide tab. The strip's add control is drawn only while its pane holds none and opens one there with `openTab('guide', { paneId, revealIfOpened: false })`, so a guide in another pane does not capture the click; opening the guide into a pane that already has one focuses it instead; a guide dragged, dropped, or docked into such a pane merges into it — the arriving guide closes and the pane's own is focused; `duplicateTab` on the guide records nothing. A split, an expanded empty root pane, and the pane a sole tab vacates by dropping on its own edge use the same default-page rule, one tab per new pane; the self-edge drop leaves the dragged tab focused. A plain `openTab('guide')` opens or focuses the guide only within the active or named pane. Splitting an empty pane does nothing and returns no new pane. The product allows two horizontal panes, initially equal, with divider ratios limited to 20%–80%. Insufficient width blocks a new split; with two panes already present, a body drop moves the tab between panes instead of creating a third. At the two-pane limit, split controls are hidden; closing back to one pane restores them.
|
|
102
102
|
|
|
103
103
|
<a id="copy"></a>
|
|
104
104
|
## Copy
|
package/README.zh.md
CHANGED
|
@@ -98,7 +98,7 @@ Tab域按(Session,Tab id)保留导航、中止信号与绑定动作;私
|
|
|
98
98
|
|
|
99
99
|
默认页取决于已注册的引导入口数,不取决于 tab 类型数或已打开的 tab 数。恰好一个入口时直接打开对应页面(随包组合中为 Files);没有入口或有多个入口时打开引导页。即使只有一个入口,显式添加引导页仍会打开引导页。只有作为唯一停靠 tab 的引导页不可关闭;关闭其它任何唯一 tab 时会同时收起整列。chip、上下文菜单与 `close` API 使用同一规则。
|
|
100
100
|
|
|
101
|
-
引导 tab
|
|
101
|
+
引导 tab 是一枚弱化的罗盘,下方是各已注册类型贡献的每个 `guide` 条目一个入口胶囊,按 `order` 排列并在正文中居中;引导页自己没有文字。胶囊显示条目的图标——条目没注册图标时用引导页自己更浅的立方体占位符——和标题;列出的条目不超过四个时,注册了 `description` 的条目在标题下显示它,更长的列表则去掉所有描述。选中一个胶囊会调用 `tab.actions.openTab(entry.kind, { replaceTab: true })`,于是引导页让位给它打开的页。一个格最多持有一个引导 tab。tab 条的添加控件只在该格没有引导 tab 时绘制,并以 `openTab('guide', { paneId, revealIfOpened: false })` 在该格打开一个,这样别的格里的引导页不会截走这次点击;把引导页开进已有引导页的格则改为聚焦它;把引导页拖入、放入或收回到这样的格会合并进去——来者关闭,该格自己的被聚焦;对引导页 `duplicateTab` 不记录任何东西。分栏、展开且为空的根格、以及唯一 tab 拖到本格边缘分屏后腾出的格使用相同的默认页规则,每个新格一个 tab;这种本格边缘拖放让被拖的 tab 保持聚焦。普通的 `openTab('guide')` 只在活跃或指定分栏内打开或聚焦引导页。对空分栏执行 split 不产生变化,也不返回新分栏。产品最多保留左右两格,默认均分,分隔条限定20%~80%。宽度不足以容纳两格时不允许新分栏;已有两格时,正文拖放用于跨格移动,不再创建第三格。达到两格上限时隐藏分栏控件;关闭回单格后恢复。
|
|
102
102
|
|
|
103
103
|
<a id="copy"></a>
|
|
104
104
|
## 文案
|
package/lib/client.js
CHANGED
|
@@ -34,7 +34,7 @@ window.__ModuleLoader__.load({
|
|
|
34
34
|
let _deepseek_ai_dsh_client_ui_dockkit = require("@deepseek-ai/dsh-client-ui-dockkit");
|
|
35
35
|
let _deepseek_ai_dsh_client_store = require("@deepseek-ai/dsh-client-store");
|
|
36
36
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-sidebar-right/src/client/tabs/guide/GuideBody.module.css.mjs
|
|
37
|
-
const css$2 = ".geFEbW_guide{box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:
|
|
37
|
+
const css$2 = ".geFEbW_guide{box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:14px;min-height:100%;padding:0 24px;display:flex}.geFEbW_guide:after{content:\"\";flex:0 10%}.geFEbW_hero{color:var(--dsw-static-neutral-200);margin-bottom:16px;display:flex}body[data-ds-dark-theme] .geFEbW_hero{color:var(--dsw-static-neutral-700)}.geFEbW_entry{box-sizing:border-box;width:380px;max-width:100%;min-height:56px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;background:var(--dsw-alias-bg-layer-1);border:.5px solid var(--dsw-alias-border-l4);cursor:pointer;border-radius:24px;align-items:center;gap:14px;padding:14px 20px;display:flex}.geFEbW_entry:hover{background:var(--dsw-alias-interactive-bg-hover)}.geFEbW_entryIcon{width:26px;height:26px;color:var(--dsw-alias-label-secondary);flex:none;justify-content:center;align-items:center;display:flex}.geFEbW_placeholderInk{color:var(--dsw-alias-label-tertiary)}.geFEbW_entryText{flex-direction:column;gap:3px;min-width:0;display:flex}.geFEbW_entryTitle{white-space:nowrap;text-overflow:ellipsis;font-size:15px;line-height:1.4;overflow:hidden}.geFEbW_entryDescription{color:var(--dsw-alias-label-caption);white-space:nowrap;text-overflow:ellipsis;font-size:13px;line-height:1.4;overflow:hidden}.geFEbW_titleIcon{color:var(--dsw-alias-label-tertiary);flex:none}";
|
|
38
38
|
const tagId$2 = "@deepseek-ai/dsh-client-ui-sidebar-right/GuideBody.module.css";
|
|
39
39
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
|
|
40
40
|
const tag = document.createElement("style");
|
|
@@ -45,16 +45,90 @@ window.__ModuleLoader__.load({
|
|
|
45
45
|
}
|
|
46
46
|
var GuideBody_module_css_default = {
|
|
47
47
|
"entry": "geFEbW_entry",
|
|
48
|
+
"entryDescription": "geFEbW_entryDescription",
|
|
48
49
|
"entryIcon": "geFEbW_entryIcon",
|
|
50
|
+
"entryText": "geFEbW_entryText",
|
|
49
51
|
"entryTitle": "geFEbW_entryTitle",
|
|
50
52
|
"guide": "geFEbW_guide",
|
|
53
|
+
"hero": "geFEbW_hero",
|
|
54
|
+
"placeholderInk": "geFEbW_placeholderInk",
|
|
51
55
|
"titleIcon": "geFEbW_titleIcon"
|
|
52
56
|
};
|
|
53
57
|
//#endregion
|
|
58
|
+
//#region lib/types/client/tabs/guide/GuideTitle.js
|
|
59
|
+
/**
|
|
60
|
+
* The compass: a ring with the needle's rhombus pointing north-east, on
|
|
61
|
+
* `currentColor` so each rendering picks its own ink.
|
|
62
|
+
* @param props - rendered size and class.
|
|
63
|
+
* @returns the compass glyph.
|
|
64
|
+
*/
|
|
65
|
+
function CompassGlyph({ size = 16, className }) {
|
|
66
|
+
return (0, react_jsx_runtime.jsxs)("svg", {
|
|
67
|
+
width: size,
|
|
68
|
+
height: size,
|
|
69
|
+
viewBox: "0 0 16 16",
|
|
70
|
+
fill: "none",
|
|
71
|
+
"aria-hidden": "true",
|
|
72
|
+
className,
|
|
73
|
+
children: [(0, react_jsx_runtime.jsx)("circle", {
|
|
74
|
+
cx: "8",
|
|
75
|
+
cy: "8",
|
|
76
|
+
r: "6",
|
|
77
|
+
stroke: "currentColor",
|
|
78
|
+
strokeWidth: "1.4"
|
|
79
|
+
}), (0, react_jsx_runtime.jsx)("path", {
|
|
80
|
+
d: "M 10.9 5.1 L 9.1 9.1 L 5.1 10.9 L 6.9 6.9 Z",
|
|
81
|
+
fill: "currentColor"
|
|
82
|
+
})]
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The cube: an isometric box — hexagonal silhouette, the top face's two edges,
|
|
87
|
+
* and the front seam — in straight strokes with softly rounded joins, on
|
|
88
|
+
* `currentColor`. The guide body draws it in a capsule whose type registered
|
|
89
|
+
* no glyph of its own.
|
|
90
|
+
* @param props - rendered size and class.
|
|
91
|
+
* @returns the cube glyph.
|
|
92
|
+
*/
|
|
93
|
+
function CubeGlyph({ size = 16, className }) {
|
|
94
|
+
return (0, react_jsx_runtime.jsxs)("svg", {
|
|
95
|
+
width: size,
|
|
96
|
+
height: size,
|
|
97
|
+
viewBox: "0 0 16 16",
|
|
98
|
+
fill: "none",
|
|
99
|
+
"aria-hidden": "true",
|
|
100
|
+
className,
|
|
101
|
+
children: [(0, react_jsx_runtime.jsx)("path", {
|
|
102
|
+
d: "M 8 2.5 L 12.9 5.2 V 10.8 L 8 13.5 L 3.1 10.8 V 5.2 Z",
|
|
103
|
+
stroke: "currentColor",
|
|
104
|
+
strokeWidth: "1.1",
|
|
105
|
+
strokeLinejoin: "round"
|
|
106
|
+
}), (0, react_jsx_runtime.jsx)("path", {
|
|
107
|
+
d: "M 3.1 5.2 L 8 7.9 L 12.9 5.2 M 8 7.9 V 13.5",
|
|
108
|
+
stroke: "currentColor",
|
|
109
|
+
strokeWidth: "1.1",
|
|
110
|
+
strokeLinejoin: "round",
|
|
111
|
+
strokeLinecap: "round"
|
|
112
|
+
})]
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The title as the chip and a floating panel's header show it.
|
|
117
|
+
* @param props - the tab information hook.
|
|
118
|
+
* @returns the compass followed by the tab's title text.
|
|
119
|
+
*/
|
|
120
|
+
function GuideTitle({ useTabInfo }) {
|
|
121
|
+
const { tab } = useTabInfo();
|
|
122
|
+
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(CompassGlyph, { className: GuideBody_module_css_default.titleIcon }), tab.title] });
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
54
125
|
//#region lib/types/client/tabs/guide/GuideBody.js
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
|
|
126
|
+
/** Entry count past which the guide drops the capsules' descriptions to stay light. */
|
|
127
|
+
const MAX_DESCRIBED_ENTRIES = 4;
|
|
128
|
+
/** One entry capsule: the contributing type's glyph and title, and its description while the guide is short. */
|
|
129
|
+
function EntryBox({ entry, described, onPick }) {
|
|
130
|
+
const Icon = entry.icon ?? CubeGlyph;
|
|
131
|
+
const description = described ? entry.description?.() : void 0;
|
|
58
132
|
return (0, react_jsx_runtime.jsxs)("button", {
|
|
59
133
|
type: "button",
|
|
60
134
|
className: GuideBody_module_css_default.entry,
|
|
@@ -62,24 +136,38 @@ window.__ModuleLoader__.load({
|
|
|
62
136
|
onClick: () => {
|
|
63
137
|
onPick(entry);
|
|
64
138
|
},
|
|
65
|
-
children: [
|
|
139
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
66
140
|
className: GuideBody_module_css_default.entryIcon,
|
|
67
|
-
children: (0, react_jsx_runtime.jsx)(Icon, {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
141
|
+
children: (0, react_jsx_runtime.jsx)(Icon, {
|
|
142
|
+
size: description === void 0 ? 22 : 26,
|
|
143
|
+
className: entry.icon === void 0 ? GuideBody_module_css_default.placeholderInk : void 0
|
|
144
|
+
})
|
|
145
|
+
}), (0, react_jsx_runtime.jsxs)("span", {
|
|
146
|
+
className: GuideBody_module_css_default.entryText,
|
|
147
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
148
|
+
className: GuideBody_module_css_default.entryTitle,
|
|
149
|
+
children: entry.title()
|
|
150
|
+
}), description !== void 0 && (0, react_jsx_runtime.jsx)("span", {
|
|
151
|
+
className: GuideBody_module_css_default.entryDescription,
|
|
152
|
+
children: description
|
|
153
|
+
})]
|
|
71
154
|
})]
|
|
72
155
|
});
|
|
73
156
|
}
|
|
74
|
-
/** The shipped guide: the doors out of the column. */
|
|
157
|
+
/** The shipped guide: the tab's own compass over the doors out of the column. */
|
|
75
158
|
function ShippedGuide({ entries, onPick }) {
|
|
76
|
-
return (0, react_jsx_runtime.
|
|
159
|
+
return (0, react_jsx_runtime.jsxs)("div", {
|
|
77
160
|
className: GuideBody_module_css_default.guide,
|
|
78
161
|
"data-sidebar-right-guide": true,
|
|
79
|
-
children:
|
|
162
|
+
children: [(0, react_jsx_runtime.jsx)("span", {
|
|
163
|
+
className: GuideBody_module_css_default.hero,
|
|
164
|
+
"aria-hidden": "true",
|
|
165
|
+
children: (0, react_jsx_runtime.jsx)(CompassGlyph, { size: 56 })
|
|
166
|
+
}), entries.map((entry, index) => (0, react_jsx_runtime.jsx)(EntryBox, {
|
|
80
167
|
entry,
|
|
168
|
+
described: entries.length <= MAX_DESCRIBED_ENTRIES,
|
|
81
169
|
onPick
|
|
82
|
-
}, `${entry.kind}:${index}`))
|
|
170
|
+
}, `${entry.kind}:${index}`))]
|
|
83
171
|
});
|
|
84
172
|
}
|
|
85
173
|
/** The guide tab's body, replaceable through its chain child. */
|
|
@@ -96,40 +184,6 @@ window.__ModuleLoader__.load({
|
|
|
96
184
|
});
|
|
97
185
|
}
|
|
98
186
|
//#endregion
|
|
99
|
-
//#region lib/types/client/tabs/guide/GuideTitle.js
|
|
100
|
-
/**
|
|
101
|
-
* The compass: a grey ring with the needle's rhombus pointing north-east.
|
|
102
|
-
*/
|
|
103
|
-
function CompassGlyph() {
|
|
104
|
-
return (0, react_jsx_runtime.jsxs)("svg", {
|
|
105
|
-
width: "16",
|
|
106
|
-
height: "16",
|
|
107
|
-
viewBox: "0 0 16 16",
|
|
108
|
-
fill: "none",
|
|
109
|
-
"aria-hidden": "true",
|
|
110
|
-
className: GuideBody_module_css_default.titleIcon,
|
|
111
|
-
children: [(0, react_jsx_runtime.jsx)("circle", {
|
|
112
|
-
cx: "8",
|
|
113
|
-
cy: "8",
|
|
114
|
-
r: "6",
|
|
115
|
-
stroke: "var(--dsw-alias-label-tertiary)",
|
|
116
|
-
strokeWidth: "1.4"
|
|
117
|
-
}), (0, react_jsx_runtime.jsx)("path", {
|
|
118
|
-
d: "M 10.9 5.1 L 9.1 9.1 L 5.1 10.9 L 6.9 6.9 Z",
|
|
119
|
-
fill: "var(--dsw-alias-label-tertiary)"
|
|
120
|
-
})]
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* The title as the chip and a floating panel's header show it.
|
|
125
|
-
* @param props - the tab information hook.
|
|
126
|
-
* @returns the compass followed by the tab's title text.
|
|
127
|
-
*/
|
|
128
|
-
function GuideTitle({ useTabInfo }) {
|
|
129
|
-
const { tab } = useTabInfo();
|
|
130
|
-
return (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(CompassGlyph, {}), tab.title] });
|
|
131
|
-
}
|
|
132
|
-
//#endregion
|
|
133
187
|
//#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-sidebar-right/src/client/shell/ExpandButton.module.css.mjs
|
|
134
188
|
const css$1 = "._1kL45W_button{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:28px;flex:none;justify-content:center;align-items:center;padding:6px;display:inline-flex}._1kL45W_button svg{width:15px;height:15px}._1kL45W_button:hover{background:var(--dsw-alias-interactive-bg-hover)}._1kL45W_icon{transform:scaleX(-1)}";
|
|
135
189
|
const tagId$1 = "@deepseek-ai/dsh-client-ui-sidebar-right/ExpandButton.module.css";
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
* builtin resumes when the extension unregisters. Everything else colliding on
|
|
22
22
|
* a kind throws, as does a second registration of an `id`.
|
|
23
23
|
*
|
|
24
|
-
* Thunked copy (`title`, `guide[].title`) is read again
|
|
25
|
-
* language change needs no re-registration.
|
|
24
|
+
* Thunked copy (`title`, `guide[].title`, `guide[].description`) is read again
|
|
25
|
+
* on every use, so a language change needs no re-registration.
|
|
26
26
|
*/
|
|
27
27
|
import type { ComponentType } from 'react';
|
|
28
28
|
import type { Context } from '@deepseek-ai/cordis';
|
|
@@ -46,11 +46,18 @@ export interface SidebarRightGuideEntry {
|
|
|
46
46
|
/** Ascending position among every registered type's entries. */
|
|
47
47
|
readonly order: number;
|
|
48
48
|
/**
|
|
49
|
-
* The capsule's title
|
|
49
|
+
* The capsule's title.
|
|
50
50
|
* @returns the title in the current language.
|
|
51
51
|
*/
|
|
52
52
|
readonly title: () => string;
|
|
53
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* One line under the title on what picking the capsule opens. The guide shows
|
|
55
|
+
* it only while it lists few enough entries to stay light; a crowded guide
|
|
56
|
+
* falls back to titles alone, so a type must stand on its title.
|
|
57
|
+
* @returns the description in the current language.
|
|
58
|
+
*/
|
|
59
|
+
readonly description?: () => string;
|
|
60
|
+
/** Optional glyph, drawn before the title; without one the guide draws its cube placeholder. */
|
|
54
61
|
readonly icon?: ComponentType<IconProps>;
|
|
55
62
|
}
|
|
56
63
|
/** A guide entry as the registry lists it: with the kind of the type that contributed it, which is what picking it opens. */
|
|
@@ -8,8 +8,12 @@
|
|
|
8
8
|
* entry of its own, so there is always exactly one body and the shipped one
|
|
9
9
|
* cannot be outvoted by accident.
|
|
10
10
|
*
|
|
11
|
-
* The shipped guide is the entry capsules every
|
|
12
|
-
* centred in the body, and nothing else
|
|
11
|
+
* The shipped guide is a muted compass over the entry capsules every
|
|
12
|
+
* registered type contributed, centred in the body, and nothing else — no
|
|
13
|
+
* heading, as a browser start page shows its doors without a caption. While
|
|
14
|
+
* at most four entries are listed, a capsule with a description shows it
|
|
15
|
+
* under the title; a longer list drops every description to stay light.
|
|
16
|
+
* Picking one opens that type as a page
|
|
13
17
|
* in this tab's place, so the guide is a doorway rather than a page that stays
|
|
14
18
|
* open.
|
|
15
19
|
*/
|
|
@@ -24,7 +28,7 @@ export interface GuideInjected {
|
|
|
24
28
|
readonly guideEntries: ObservableSnapshot<readonly SidebarRightGuideBox[]>;
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
|
-
/** The guide body's composed props: the tab it draws, its chain child, and the entries.
|
|
31
|
+
/** The guide body's composed props: the tab it draws, its chain child, and the entries. */
|
|
28
32
|
export type GuideBodyProps = PropsRuntime<'sidebar.right.pane.tab'> & PropsRenderSlots<'sidebar.right.tab.guide'> & InjectFace<GuideInjected>;
|
|
29
33
|
/** The guide tab's body, replaceable through its chain child. */
|
|
30
34
|
export declare function GuideBody({ useTabInfo, useGuideEntries, renderSlotChain }: GuideBodyProps): ReactNode;
|
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The guide type's chip title: the compass before the type's label. Registered
|
|
3
3
|
* under `sidebar.right.pane.tab.title`; without it the chip would show the
|
|
4
|
-
* bare label.
|
|
4
|
+
* bare label. Both guide glyphs live here: the compass the chip and the body's
|
|
5
|
+
* hero draw, and the cube the body's icon-less capsules fall back to.
|
|
5
6
|
*/
|
|
6
7
|
import type { ReactNode } from 'react';
|
|
8
|
+
import type { IconProps } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
7
9
|
import type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
10
|
+
/**
|
|
11
|
+
* The compass: a ring with the needle's rhombus pointing north-east, on
|
|
12
|
+
* `currentColor` so each rendering picks its own ink.
|
|
13
|
+
* @param props - rendered size and class.
|
|
14
|
+
* @returns the compass glyph.
|
|
15
|
+
*/
|
|
16
|
+
export declare function CompassGlyph({ size, className }: IconProps): ReactNode;
|
|
17
|
+
/**
|
|
18
|
+
* The cube: an isometric box — hexagonal silhouette, the top face's two edges,
|
|
19
|
+
* and the front seam — in straight strokes with softly rounded joins, on
|
|
20
|
+
* `currentColor`. The guide body draws it in a capsule whose type registered
|
|
21
|
+
* no glyph of its own.
|
|
22
|
+
* @param props - rendered size and class.
|
|
23
|
+
* @returns the cube glyph.
|
|
24
|
+
*/
|
|
25
|
+
export declare function CubeGlyph({ size, className }: IconProps): ReactNode;
|
|
8
26
|
/**
|
|
9
27
|
* The title as the chip and a floating panel's header show it.
|
|
10
28
|
* @param props - the tab information hook.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepseek-ai/dsh-client-ui-sidebar-right",
|
|
3
3
|
"description": "Right Sidebar: the docking surface's session-bound state, its panel and header expand control, and the navigation service over it",
|
|
4
|
-
"version": "0.1.5-
|
|
4
|
+
"version": "0.1.5-rc.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -50,20 +50,20 @@
|
|
|
50
50
|
"react-dom": "^18.2.0",
|
|
51
51
|
"picomatch": "^4.0.4",
|
|
52
52
|
"clsx": "^2.0.0",
|
|
53
|
-
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-
|
|
54
|
-
"@deepseek-ai/dsh-client-locale": "^0.1.5-
|
|
53
|
+
"@deepseek-ai/dsh-api-session-controller": "^0.1.5-rc.2",
|
|
54
|
+
"@deepseek-ai/dsh-client-locale": "^0.1.5-rc.2",
|
|
55
55
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
56
|
-
"@deepseek-ai/dsh-client-resources": "^0.1.5-
|
|
57
|
-
"@deepseek-ai/dsh-client-
|
|
58
|
-
"@deepseek-ai/dsh-client-
|
|
59
|
-
"@deepseek-ai/dsh-client-ui-
|
|
60
|
-
"@deepseek-ai/dsh-client-ui-layout": "^0.1.5-
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-client-ui-
|
|
56
|
+
"@deepseek-ai/dsh-client-resources": "^0.1.5-rc.2",
|
|
57
|
+
"@deepseek-ai/dsh-client-store": "^0.1.5-rc.2",
|
|
58
|
+
"@deepseek-ai/dsh-client-test-runtime": "^0.1.5-rc.2",
|
|
59
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-rc.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-ui-layout": "^0.1.5-rc.2",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-rc.2",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.2",
|
|
63
|
+
"@deepseek-ai/dsh-session": "^0.1.5-rc.2",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-session": "^0.1.5-rc.2",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-rc.2",
|
|
66
|
+
"@deepseek-ai/dsh-client-ui-dockkit": "^0.1.5-rc.2"
|
|
67
67
|
},
|
|
68
68
|
"files": [
|
|
69
69
|
"lib/index.js",
|