dsh-group-status 0.2.2 → 0.4.0
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/CHANGELOG.md +65 -0
- package/README.en.md +42 -24
- package/README.md +45 -25
- package/lib/client.js +1781 -483
- package/lib/client.js.map +1 -1
- package/lib/index.js +22 -9
- package/lib/types/client/BadgeSettingsCard.d.ts +24 -0
- package/lib/types/client/BadgeSettingsCard.d.ts.map +1 -0
- package/lib/types/client/BadgeSettingsCard.js +73 -0
- package/lib/types/client/BadgeSettingsCard.js.map +1 -0
- package/lib/types/client/badge-field.d.ts +44 -0
- package/lib/types/client/badge-field.d.ts.map +1 -0
- package/lib/types/client/badge-field.js +77 -0
- package/lib/types/client/badge-field.js.map +1 -0
- package/lib/types/client/badge-labels.d.ts +92 -0
- package/lib/types/client/badge-labels.d.ts.map +1 -0
- package/lib/types/client/badge-labels.js +150 -0
- package/lib/types/client/badge-labels.js.map +1 -0
- package/lib/types/client/badge-settings.d.ts +31 -3
- package/lib/types/client/badge-settings.d.ts.map +1 -1
- package/lib/types/client/badge-settings.js +50 -6
- package/lib/types/client/badge-settings.js.map +1 -1
- package/lib/types/client/contract/slots.d.ts +39 -21
- package/lib/types/client/contract/slots.d.ts.map +1 -1
- package/lib/types/client/contract/slots.js.map +1 -1
- package/lib/types/client/contract/toast.d.ts +67 -0
- package/lib/types/client/contract/toast.d.ts.map +1 -0
- package/lib/types/client/contract/toast.js +2 -0
- package/lib/types/client/contract/toast.js.map +1 -0
- package/lib/types/client/facet-store.d.ts +46 -0
- package/lib/types/client/facet-store.d.ts.map +1 -0
- package/lib/types/client/facet-store.js +123 -0
- package/lib/types/client/facet-store.js.map +1 -0
- package/lib/types/client/facet-visibility.d.ts +17 -0
- package/lib/types/client/facet-visibility.d.ts.map +1 -0
- package/lib/types/client/facet-visibility.js +18 -0
- package/lib/types/client/facet-visibility.js.map +1 -0
- package/lib/types/client/facets.d.ts +265 -0
- package/lib/types/client/facets.d.ts.map +1 -0
- package/lib/types/client/facets.js +209 -0
- package/lib/types/client/facets.js.map +1 -0
- package/lib/types/client/group-status.d.ts +97 -45
- package/lib/types/client/group-status.d.ts.map +1 -1
- package/lib/types/client/group-status.js +148 -85
- package/lib/types/client/group-status.js.map +1 -1
- package/lib/types/client/index.d.ts +31 -3
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +107 -14
- package/lib/types/client/index.js.map +1 -1
- package/lib/types/client/locales.d.ts +60 -4
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/locales.js +60 -4
- package/lib/types/client/locales.js.map +1 -1
- package/lib/types/client/navigation.d.ts +45 -12
- package/lib/types/client/navigation.d.ts.map +1 -1
- package/lib/types/client/navigation.js +102 -26
- package/lib/types/client/navigation.js.map +1 -1
- package/lib/types/client/rows/GroupBadge.d.ts +19 -25
- package/lib/types/client/rows/GroupBadge.d.ts.map +1 -1
- package/lib/types/client/rows/GroupBadge.js +45 -106
- package/lib/types/client/rows/GroupBadge.js.map +1 -1
- package/lib/types/client/rows/Rows.d.ts +7 -3
- package/lib/types/client/rows/Rows.d.ts.map +1 -1
- package/lib/types/client/rows/Rows.js +9 -9
- package/lib/types/client/rows/Rows.js.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.d.ts.map +1 -1
- package/lib/types/client/rows/WorkspaceBrowser.js +75 -71
- package/lib/types/client/rows/WorkspaceBrowser.js.map +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js +1 -1
- package/lib/types/client/session-actions/ArchiveSession.js.map +1 -1
- package/lib/types/client/session-actions/ForkSession.d.ts +5 -4
- package/lib/types/client/session-actions/ForkSession.d.ts.map +1 -1
- package/lib/types/client/session-actions/ForkSession.js +7 -4
- package/lib/types/client/session-actions/ForkSession.js.map +1 -1
- package/lib/types/client/session-actions/PinSession.js +1 -1
- package/lib/types/client/session-actions/PinSession.js.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.d.ts +5 -8
- package/lib/types/client/session-actions/RowActionToast.d.ts.map +1 -1
- package/lib/types/client/session-actions/RowActionToast.js +10 -49
- package/lib/types/client/session-actions/RowActionToast.js.map +1 -1
- package/lib/types/client/session-actions/SessionId.d.ts +8 -0
- package/lib/types/client/session-actions/SessionId.d.ts.map +1 -0
- package/lib/types/client/session-actions/SessionId.js +16 -0
- package/lib/types/client/session-actions/SessionId.js.map +1 -0
- package/lib/types/client/session-watermarks.d.ts +30 -0
- package/lib/types/client/session-watermarks.d.ts.map +1 -0
- package/lib/types/client/session-watermarks.js +54 -0
- package/lib/types/client/session-watermarks.js.map +1 -0
- package/lib/types/client/shortcuts.d.ts +2 -7
- package/lib/types/client/shortcuts.d.ts.map +1 -1
- package/lib/types/client/shortcuts.js +7 -11
- package/lib/types/client/shortcuts.js.map +1 -1
- package/lib/types/client/toast/Toast.d.ts +41 -0
- package/lib/types/client/toast/Toast.d.ts.map +1 -0
- package/lib/types/client/toast/Toast.js +44 -0
- package/lib/types/client/toast/Toast.js.map +1 -0
- package/lib/types/client/toast/register.d.ts +11 -0
- package/lib/types/client/toast/register.d.ts.map +1 -0
- package/lib/types/client/toast/register.js +162 -0
- package/lib/types/client/toast/register.js.map +1 -0
- package/lib/types/client/tree.d.ts +2 -5
- package/lib/types/client/tree.d.ts.map +1 -1
- package/lib/types/client/tree.js +0 -5
- package/lib/types/client/tree.js.map +1 -1
- package/lib/types/index.d.ts +31 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +13 -1
- package/lib/types/index.js.map +1 -1
- package/package.json +33 -34
|
@@ -16,23 +16,67 @@
|
|
|
16
16
|
* 引用——每次都构造新对象会让选择器的 `Object.is` 比较永不成立,触发
|
|
17
17
|
* 「Maximum update depth exceeded」死循环(React #185),折叠行徽标会整块崩掉。
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* 设置面缺席或未就绪时,回落到**默认全部显示**,与 `Config` 各字段的 schema 默认值同源:
|
|
20
|
+
* 读不到配置不是「关掉」。
|
|
21
21
|
*/
|
|
22
22
|
/** Loader 条目 id —— 设置页的寻址键,也是宿主 `describe()` 的 ns。 */
|
|
23
23
|
export const ENTRY_ID = 'dsh-group-status';
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* 一个 facet 是否被设置关掉。
|
|
26
|
+
*
|
|
27
|
+
* - 没有 `settingKey` → 始终参与(缺省是"显示",与其余开关的默认值同源)。
|
|
28
|
+
* - 声明了但不是布尔开关键 → 同样按显示处理:拼错的键不该让一个状态整块消失。
|
|
29
|
+
*/
|
|
30
|
+
export function facetVisibleBySettings(settings, settingKey) {
|
|
31
|
+
if (settingKey === undefined)
|
|
32
|
+
return true;
|
|
33
|
+
const value = settings[settingKey];
|
|
34
|
+
return typeof value === 'boolean' ? value : true;
|
|
35
|
+
}
|
|
36
|
+
/** 默认值:与 `Config` 各字段的 schema 默认同源(全部显示,数字阈值 2 即 count=1 时省略)。 */
|
|
25
37
|
export const DEFAULT_BADGE_SETTINGS = Object.freeze({
|
|
26
38
|
showCompletedInBadge: true,
|
|
39
|
+
showRunningInBadge: true,
|
|
40
|
+
showPendingInBadge: true,
|
|
41
|
+
showScheduledInBadge: true,
|
|
42
|
+
showWaitingReviewInBadge: true,
|
|
43
|
+
showHoverDetails: true,
|
|
44
|
+
countThreshold: 2,
|
|
27
45
|
});
|
|
28
|
-
/**
|
|
46
|
+
/** 两个设置对象是否逐字段相等(用于发布前比较,避免无谓通知)。 */
|
|
47
|
+
function settingsEqual(a, b) {
|
|
48
|
+
return (a.showCompletedInBadge === b.showCompletedInBadge &&
|
|
49
|
+
a.showRunningInBadge === b.showRunningInBadge &&
|
|
50
|
+
a.showPendingInBadge === b.showPendingInBadge &&
|
|
51
|
+
a.showScheduledInBadge === b.showScheduledInBadge &&
|
|
52
|
+
a.showWaitingReviewInBadge === b.showWaitingReviewInBadge &&
|
|
53
|
+
a.showHoverDetails === b.showHoverDetails &&
|
|
54
|
+
a.countThreshold === b.countThreshold);
|
|
55
|
+
}
|
|
56
|
+
/** 从原始快照派生:只有**显式 false** 才隐藏,缺失/非法一律显示(countThreshold 默认 2)。 */
|
|
29
57
|
function resolveFromSnapshot(snap) {
|
|
30
58
|
if (snap === undefined || snap.status !== 'ready')
|
|
31
59
|
return DEFAULT_BADGE_SETTINGS;
|
|
32
60
|
const value = snap.value;
|
|
33
61
|
if (value === undefined || value === null || typeof value !== 'object')
|
|
34
62
|
return DEFAULT_BADGE_SETTINGS;
|
|
35
|
-
|
|
63
|
+
const getBool = (field, def) => {
|
|
64
|
+
const v = value[field];
|
|
65
|
+
return typeof v === 'boolean' ? v : def;
|
|
66
|
+
};
|
|
67
|
+
const getNumber = (field, def) => {
|
|
68
|
+
const v = value[field];
|
|
69
|
+
return typeof v === 'number' && Number.isFinite(v) && v >= 0 ? Math.floor(v) : def;
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
showCompletedInBadge: getBool('showCompletedInBadge', true),
|
|
73
|
+
showRunningInBadge: getBool('showRunningInBadge', true),
|
|
74
|
+
showPendingInBadge: getBool('showPendingInBadge', true),
|
|
75
|
+
showScheduledInBadge: getBool('showScheduledInBadge', true),
|
|
76
|
+
showWaitingReviewInBadge: getBool('showWaitingReviewInBadge', true),
|
|
77
|
+
showHoverDetails: getBool('showHoverDetails', true),
|
|
78
|
+
countThreshold: getNumber('countThreshold', 2),
|
|
79
|
+
};
|
|
36
80
|
}
|
|
37
81
|
/**
|
|
38
82
|
* 建一个恒在、取值稳定的徽标设置源。
|
|
@@ -61,7 +105,7 @@ export function createBadgeSettingsSource() {
|
|
|
61
105
|
seenSet = true;
|
|
62
106
|
const next = resolveFromSnapshot(snapshot);
|
|
63
107
|
// 取值没变就不替换引用、不通知:宿主为无关字段替换快照时不该惊动折叠行。
|
|
64
|
-
if (next
|
|
108
|
+
if (settingsEqual(next, resolved))
|
|
65
109
|
return;
|
|
66
110
|
resolved = next;
|
|
67
111
|
for (const listener of [...listeners])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge-settings.js","sourceRoot":"","sources":["../../../src/client/badge-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"badge-settings.js","sourceRoot":"","sources":["../../../src/client/badge-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,sDAAsD;AACtD,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAA;AA0C1C;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA+B,EAAE,UAA8B;IACpG,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAyC,CAAC,CAAA;IACjE,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAClD,CAAC;AAoBD,kEAAkE;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAA0B,MAAM,CAAC,MAAM,CAAC;IACzE,oBAAoB,EAAE,IAAI;IAC1B,kBAAkB,EAAE,IAAI;IACxB,kBAAkB,EAAE,IAAI;IACxB,oBAAoB,EAAE,IAAI;IAC1B,wBAAwB,EAAE,IAAI;IAC9B,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,CAAC;CAClB,CAAC,CAAA;AAEF,qCAAqC;AACrC,SAAS,aAAa,CAAC,CAAwB,EAAE,CAAwB;IACvE,OAAO,CACL,CAAC,CAAC,oBAAoB,KAAK,CAAC,CAAC,oBAAoB;QACjD,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;QAC7C,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;QAC7C,CAAC,CAAC,oBAAoB,KAAK,CAAC,CAAC,oBAAoB;QACjD,CAAC,CAAC,wBAAwB,KAAK,CAAC,CAAC,wBAAwB;QACzD,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,gBAAgB;QACzC,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc,CACtC,CAAA;AACH,CAAC;AAED,iEAAiE;AACjE,SAAS,mBAAmB,CAAC,IAAsC;IACjE,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,sBAAsB,CAAA;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAA;IAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAA;IACrG,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,GAAY,EAAW,EAAE;QACvD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACtB,OAAO,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACzC,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,GAAW,EAAU,EAAE;QACvD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACtB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACpF,CAAC,CAAA;IACD,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;QAC3D,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QACvD,kBAAkB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QACvD,oBAAoB,EAAE,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;QAC3D,wBAAwB,EAAE,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;QACnE,gBAAgB,EAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;QACnD,cAAc,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;KAC/C,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;IACvC,IAAI,QAAQ,GAA0B,sBAAsB,CAAA;IAC5D,IAAI,IAAsC,CAAA;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ;QAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACvB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA;QAC7C,CAAC;QACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,2CAA2C;YAC3C,IAAI,OAAO,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAM;YACxC,IAAI,GAAG,QAAQ,CAAA;YACf,OAAO,GAAG,IAAI,CAAA;YACd,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;YAC1C,sCAAsC;YACtC,IAAI,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAAE,OAAM;YACzC,QAAQ,GAAG,IAAI,CAAA;YACf,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;gBAAE,QAAQ,EAAE,CAAA;QACnD,CAAC;KACF,CAAA;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,oBAAoB,CAAC,QAA0C;IAC7E,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
* row of a Session's "..." menu is an entry of
|
|
27
27
|
* `sidebar.workspaces.session.menu.item`, and every hover button at the row's
|
|
28
28
|
* end is an entry of `sidebar.workspaces.session.row.action`. The shipped
|
|
29
|
-
* actions — pin, rename, fork, archive — are ordinary entries
|
|
30
|
-
*
|
|
29
|
+
* actions — pin, rename, fork, archive, copy ID — are ordinary entries
|
|
30
|
+
* registered from `apply`, each carrying its own behavior in its own inject
|
|
31
31
|
* face and reading its own Host state through hooks that face injects, so a
|
|
32
32
|
* client plugin's action lands beside them by `order` and needs nothing from
|
|
33
33
|
* the browser beyond the row identity.
|
|
@@ -45,6 +45,7 @@ import type { SessionActivity, WorkspaceId, WorkspaceView } from '@deepseek-ai/d
|
|
|
45
45
|
import type { SessionId } from '@deepseek-ai/dsh-session/types';
|
|
46
46
|
import type { ShortcutCatalogEntry } from '@deepseek-ai/dsh-client-shortcuts/client';
|
|
47
47
|
import type { WorkspaceShortcutState } from '../shortcuts.ts';
|
|
48
|
+
import type { StartSessionOptions } from '../navigation.ts';
|
|
48
49
|
import type { createWorkspaceViewStore } from '../stores.ts';
|
|
49
50
|
/**
|
|
50
51
|
* Owner share of the directory-flow holes: the complete conversation between
|
|
@@ -136,8 +137,8 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
136
137
|
/**
|
|
137
138
|
* The rows of one Session's "..." menu, in ascending `order`. ui-workspace
|
|
138
139
|
* registers the shipped rows here — `pin` (100), `rename` (200), `fork`
|
|
139
|
-
* (300), `archive` (400) — so a plugin row is placed
|
|
140
|
-
* among them. Use a package-namespaced `id`; reusing a shipped id at
|
|
140
|
+
* (300), `archive` (400), and `session-id` (450) — so a plugin row is placed
|
|
141
|
+
* by its own `order` among them. Use a package-namespaced `id`; reusing a shipped id at
|
|
141
142
|
* another `priority` shadows that row. Each entry renders one
|
|
142
143
|
* `role="menuitem"` `<button>` (the shipped rows use ui-primitives'
|
|
143
144
|
* `MenuItemButton`, which adds the host styling and `separatorBefore`),
|
|
@@ -149,14 +150,17 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
|
149
150
|
* return {
|
|
150
151
|
* inject: ['slots'],
|
|
151
152
|
* apply(ctx) {
|
|
152
|
-
* const copyLabel = 'Copy
|
|
153
|
+
* const copyLabel = 'Copy session title' // Localize in the contributing package.
|
|
153
154
|
* ctx.slots.inject('sidebar.workspaces.session.menu.item', () => ctx.slots.register(
|
|
154
|
-
* { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-
|
|
155
|
-
* ({
|
|
155
|
+
* { name: 'sidebar.workspaces.session.menu.item', id: 'copy-session-title', order: 500 },
|
|
156
|
+
* ({ displayTitle, useMenuOpenState }) => {
|
|
156
157
|
* const [, setMenuOpen] = useMenuOpenState()
|
|
157
158
|
* return React.createElement(
|
|
158
159
|
* 'button',
|
|
159
|
-
* {
|
|
160
|
+
* {
|
|
161
|
+
* type: 'button', role: 'menuitem',
|
|
162
|
+
* onClick: () => { setMenuOpen(false); void navigator.clipboard.writeText(displayTitle) },
|
|
163
|
+
* },
|
|
160
164
|
* copyLabel,
|
|
161
165
|
* )
|
|
162
166
|
* },
|
|
@@ -233,14 +237,12 @@ export type WorkspaceBrowserInjected = {
|
|
|
233
237
|
closeAddWorkspace: () => void;
|
|
234
238
|
/** Publish directory interaction occupancy for command availability. */
|
|
235
239
|
setDirectoryBusy: (busy: boolean) => void;
|
|
236
|
-
/** Dismiss the shortcut's fork-failure notification. */
|
|
237
|
-
dismissForkError: () => void;
|
|
238
240
|
/**
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
241
|
+
* Create a fresh Session, or preserve a reusable blank with explicit draft options.
|
|
242
|
+
* Without an explicit Workspace, inherit the current Session Workspace,
|
|
243
|
+
* then the recent Workspace, or clear into the New Session view.
|
|
242
244
|
*/
|
|
243
|
-
startSession: (workspaceId?: WorkspaceId) => void;
|
|
245
|
+
startSession: (workspaceId?: WorkspaceId, options?: StartSessionOptions) => void;
|
|
244
246
|
/** Open a real Session. */
|
|
245
247
|
open: (sessionId: SessionId) => void;
|
|
246
248
|
/**
|
|
@@ -286,6 +288,10 @@ export type RowToast = {
|
|
|
286
288
|
} | {
|
|
287
289
|
kind: 'stoppedAndArchived';
|
|
288
290
|
sessionId: SessionId;
|
|
291
|
+
} | {
|
|
292
|
+
kind: 'sessionIdCopied';
|
|
293
|
+
} | {
|
|
294
|
+
kind: 'sessionIdCopyFailed';
|
|
289
295
|
} | {
|
|
290
296
|
kind: 'pinFailed';
|
|
291
297
|
} | {
|
|
@@ -294,6 +300,12 @@ export type RowToast = {
|
|
|
294
300
|
kind: 'archivedNotOpenable';
|
|
295
301
|
} | {
|
|
296
302
|
kind: 'defaultWorkspaceFailed';
|
|
303
|
+
} | {
|
|
304
|
+
kind: 'forkRequiresOpen';
|
|
305
|
+
sessionId: SessionId;
|
|
306
|
+
} | {
|
|
307
|
+
kind: 'shortcutForkFailed';
|
|
308
|
+
reason: 'unavailable' | 'failed';
|
|
297
309
|
}
|
|
298
310
|
/**
|
|
299
311
|
* An explicit New Session request that failed. `message` is untranslated:
|
|
@@ -388,6 +400,11 @@ export interface RenameSessionInjected {
|
|
|
388
400
|
/** Ask for the rename dialog, seeded with the row's current title. */
|
|
389
401
|
requestSessionRename: (sessionId: SessionId, currentTitle: string) => void;
|
|
390
402
|
}
|
|
403
|
+
/** Session ID action share; copying does not open the Session. */
|
|
404
|
+
export interface SessionIdInjected {
|
|
405
|
+
/** Copy the complete id and report acceptance or failure through the global toast. */
|
|
406
|
+
copySessionId: (sessionId: SessionId) => Promise<void>;
|
|
407
|
+
}
|
|
391
408
|
/** A Session rename the rename action asked for; the dialog entry opens on it. */
|
|
392
409
|
export interface SessionRenameTarget {
|
|
393
410
|
/** Session to rename. */
|
|
@@ -406,7 +423,7 @@ export interface SessionRenameDialogInjected {
|
|
|
406
423
|
/** Rename a Session (explicit user title; resolves on host acceptance). */
|
|
407
424
|
renameSession: (sessionId: SessionId, title: string) => Promise<void>;
|
|
408
425
|
}
|
|
409
|
-
/**
|
|
426
|
+
/** Existing overlay share: the current notice and its dismissal. */
|
|
410
427
|
export interface RowToastInjected {
|
|
411
428
|
hooks: {
|
|
412
429
|
/** The notice on display, or none. */
|
|
@@ -414,21 +431,22 @@ export interface RowToastInjected {
|
|
|
414
431
|
};
|
|
415
432
|
/** Take the notice down. */
|
|
416
433
|
dismissToast: () => void;
|
|
434
|
+
}
|
|
435
|
+
/** Business callbacks injected into their keyed Toast presentations. */
|
|
436
|
+
export interface RowToastActions {
|
|
417
437
|
/** Undo an archive from its notice. */
|
|
418
438
|
undoArchive: (sessionId: SessionId) => void;
|
|
419
439
|
/** Switch the archived filter to "show" so the archived row is back in view. */
|
|
420
440
|
showArchived: () => void;
|
|
441
|
+
/** Open the fork source without retrying the fork. */
|
|
442
|
+
openForkSource: (sessionId: SessionId) => void;
|
|
421
443
|
}
|
|
422
444
|
/** Props of the rename dialog entry in `shell.overlay`. */
|
|
423
445
|
export type SessionRenameDialogProps = PropsRuntime<'shell.overlay'> & PropsLocale<'workspace'> & Omit<SessionRenameDialogInjected, 'hooks'> & PropsHooks<SessionRenameDialogInjected['hooks']>;
|
|
424
446
|
/** Props of the stop-and-archive dialog entry in `shell.overlay`. */
|
|
425
447
|
export type SessionArchiveConfirmProps = PropsRuntime<'shell.overlay'> & PropsLocale<'workspace'> & Omit<SessionArchiveConfirmInjected, 'hooks'> & PropsHooks<SessionArchiveConfirmInjected['hooks']>;
|
|
426
|
-
/**
|
|
427
|
-
|
|
428
|
-
* carries the archived filter; the archived notice omits its filter action
|
|
429
|
-
* when archived rows are already visible.
|
|
430
|
-
*/
|
|
431
|
-
export type RowToastProps = PropsRuntime<'shell.overlay'> & PropsLocale<'workspace'> & PropsStore<WorkspaceViewStoreHandle> & Omit<RowToastInjected, 'hooks'> & PropsHooks<RowToastInjected['hooks']>;
|
|
448
|
+
/** Props of the existing overlay's keyed notice dispatcher. */
|
|
449
|
+
export type RowToastProps = PropsRuntime<'shell.overlay'> & PropsRenderSlots<'workspace.toast'> & Pick<RowToastInjected, 'dismissToast'> & PropsHooks<RowToastInjected['hooks']>;
|
|
432
450
|
/** Full browser props: shell owner share + viewing store + injected actions + the locale seat. */
|
|
433
451
|
export type WorkspaceBrowserProps = PropsRuntime<'sidebar.workspaces'> & PropsRenderSlots<'sidebar.workspaces.directoryFlow' | 'sidebar.workspaces.session.menu.item' | 'sidebar.workspaces.session.row.action' | 'sidebar.session.row.leading' | 'sidebar.session.row.hover'> & PropsStore<WorkspaceViewStoreHandle> & Omit<WorkspaceBrowserInjected, 'hooks'> & PropsHooks<WorkspaceBrowserInjected['hooks']> & PropsLocale<'workspace'>;
|
|
434
452
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../../src/client/contract/slots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EACV,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EACjH,MAAM,kCAAkC,CAAA;AAMzC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAA;AAC7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAA;AACnH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAA;AACpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAE5D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,mGAAmG;IACnG,IAAI,EAAE,OAAO,CAAA;IACb,2HAA2H;IAC3H,IAAI,EAAE,OAAO,CAAA;IACb,iFAAiF;IACjF,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,0GAA0G;IAC1G,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,uFAAuF;AACvF,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,SAAS,EAAE,SAAS,CAAA;IACpB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,CAAA;AAEtF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAA;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,sCAAsC,EAAE,gBAAgB,CACxE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;CAC9B;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,6GAA6G;QAC7G,2CAA2C,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,uBAAuB,CAAA;SAAE,CAAA;QAC9G,sGAAsG;QACtG,kCAAkC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,uBAAuB,CAAA;SAAE,CAAA;QACrG;;;;;;;;WAQG;QACH,6BAA6B,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,4BAA4B,CAAA;SAAE,CAAA;QACnG;;;WAGG;QACH,2BAA2B,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,4BAA4B,CAAA;SAAE,CAAA;QACjG
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../../src/client/contract/slots.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../../../src/client/contract/slots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../../../src/client/contract/slots.ts"],"names":[],"mappings":"AA6FA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Keyed Workspace notices and the shared Toast Factory's display data. */
|
|
2
|
+
import type { FactoryComponentPropsOf, InjectFace, PropsLocale, PropsRenderFactories, PropsRuntime, PropsStore } from '@deepseek-ai/dsh-client-ui-slots';
|
|
3
|
+
import type { RowToastState, WorkspaceViewStoreHandle } from './slots.ts';
|
|
4
|
+
/** Business key of one existing Workspace notice. */
|
|
5
|
+
export type ToastKind = RowToastState['kind'];
|
|
6
|
+
/** Notice payload selected by the keyed registration. */
|
|
7
|
+
export type ToastNotice<K extends ToastKind> = Extract<RowToastState, {
|
|
8
|
+
kind: K;
|
|
9
|
+
}>;
|
|
10
|
+
/** Plain display fields consumed by the shared Factory. */
|
|
11
|
+
export interface ToastDisplay {
|
|
12
|
+
text: string;
|
|
13
|
+
tone: 'plain' | 'warning' | 'success';
|
|
14
|
+
holdMs?: number;
|
|
15
|
+
actions?: readonly {
|
|
16
|
+
label: string;
|
|
17
|
+
prefix?: string;
|
|
18
|
+
onClick: () => void;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
/** Per-display identity and dismissal; neither changes when localized content updates. */
|
|
22
|
+
export interface ToastOccurrence extends ToastDisplay {
|
|
23
|
+
seq: number;
|
|
24
|
+
onDone: () => void;
|
|
25
|
+
}
|
|
26
|
+
/** Pure localized display mapping owned by a keyed notice registration. */
|
|
27
|
+
export interface ToastDisplayInjected<K extends ToastKind> {
|
|
28
|
+
display: (notice: ToastNotice<K>, t: PropsLocale<'workspace'>['t'], dismiss: () => void) => ToastDisplay;
|
|
29
|
+
}
|
|
30
|
+
/** Shared adapter props; each registration narrows its notice payload. */
|
|
31
|
+
export type ToastEntryProps<P extends PropsRuntime<'workspace.toast'>> = P & PropsLocale<'workspace'> & PropsRenderFactories & InjectFace<{
|
|
32
|
+
display: (notice: P, t: PropsLocale<'workspace'>['t'], dismiss: () => void) => ToastDisplay;
|
|
33
|
+
}>;
|
|
34
|
+
/** Archive adapters additionally read the existing viewing store. */
|
|
35
|
+
export interface ArchiveToastInjected extends ToastDisplayInjected<'archived' | 'stoppedAndArchived'> {
|
|
36
|
+
filterAction: (t: PropsLocale<'workspace'>['t'], dismiss: () => void) => NonNullable<ToastDisplay['actions']>[number];
|
|
37
|
+
}
|
|
38
|
+
/** Archive adapter props with its injected action and viewing-state seats. */
|
|
39
|
+
export type ArchiveToastEntryProps = PropsRuntime<'workspace.toast', 'archived' | 'stoppedAndArchived'> & PropsLocale<'workspace'> & PropsRenderFactories & PropsStore<WorkspaceViewStoreHandle> & InjectFace<ArchiveToastInjected>;
|
|
40
|
+
/** Complete props of the shared Workspace Toast Factory. */
|
|
41
|
+
export type WorkspaceToastProps = FactoryComponentPropsOf<'workspace.toast.content'>;
|
|
42
|
+
/** Owner operations available to every keyed Workspace notice. */
|
|
43
|
+
export interface WorkspaceToastOwnerProps {
|
|
44
|
+
/** Dismiss the displayed notice. */
|
|
45
|
+
dismissToast: () => void;
|
|
46
|
+
}
|
|
47
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
48
|
+
interface SlotMap {
|
|
49
|
+
/** Workspace notices selected by their existing business discriminator. */
|
|
50
|
+
'workspace.toast': {
|
|
51
|
+
kind: 'keyed';
|
|
52
|
+
scope: 'root';
|
|
53
|
+
owner: WorkspaceToastOwnerProps;
|
|
54
|
+
keyProps: {
|
|
55
|
+
[K in ToastKind]: ToastNotice<K>;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
interface SlotFactoryMap {
|
|
60
|
+
/** Shared Toast presentation; business registrations supply only display data and callbacks. */
|
|
61
|
+
'workspace.toast.content': {
|
|
62
|
+
scope: 'root';
|
|
63
|
+
props: ToastOccurrence;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../../src/client/contract/toast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../../../../src/client/contract/toast.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* facet 的**消费侧**:把「登记表面 + 每个 facet 自己的外部存储」压成一份 React 可订阅的
|
|
3
|
+
* 单一存储。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么必须是一个存储,而不是逐个 hook
|
|
6
|
+
*
|
|
7
|
+
* 见 `./facets.ts` 的文件头:hook 数量在同一个组件里必须逐次渲染恒定,而 facet 是运行
|
|
8
|
+
* 时注册/注销的。所以这里只暴露一个**版本号**(数字,引用天然稳定)给
|
|
9
|
+
* `useSyncExternalStore`,实际的快照读取与折叠都发生在渲染期。
|
|
10
|
+
*
|
|
11
|
+
* ## 快照读取为什么放在渲染期
|
|
12
|
+
*
|
|
13
|
+
* `getSnapshot` 必须返回稳定引用,而「每个 facet 的快照」是一个对象图:为它造一个
|
|
14
|
+
* 缓存就需要判定失效,而判定失效又要读快照本身。改成「版本号变 → 重新渲染 → 现读现折」
|
|
15
|
+
* 之后,缓存问题消失,代价是一次 O(facet × 组内会话) 的纯计算,量级与原有实现相同。
|
|
16
|
+
*
|
|
17
|
+
* @module dsh-group-status/client/facet-store
|
|
18
|
+
*/
|
|
19
|
+
import { type FacetRegistry, type RegisteredFacet } from './facets.ts';
|
|
20
|
+
/** {@link createFacetStore} 的产物。 */
|
|
21
|
+
export interface FacetStore {
|
|
22
|
+
/** 订阅「快照可能变了」或「登记面变了」。 */
|
|
23
|
+
subscribe(listener: () => void): () => void;
|
|
24
|
+
/** 单调递增的版本号;引用天然稳定,可直接作为 `useSyncExternalStore` 的快照。 */
|
|
25
|
+
getVersion(): number;
|
|
26
|
+
/** 服务端渲染快照:与 {@link getVersion} 同型,避免 hydration 不一致。 */
|
|
27
|
+
getServerVersion(): number;
|
|
28
|
+
/** 当前登记项(已排序)。 */
|
|
29
|
+
list(): readonly RegisteredFacet[];
|
|
30
|
+
/** 释放所有对 facet 存储的订阅(宿主卸载本插件时调用)。 */
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 创建 facet 存储。
|
|
35
|
+
*
|
|
36
|
+
* 对登记面做一次订阅,并在登记变化时**重新接线**各 facet 的 `subscribe`:provider 热替换
|
|
37
|
+
* 实现(同 id 再注册)或运行中启用/停用插件,都只会走到这里一次,不会留下野订阅。
|
|
38
|
+
*
|
|
39
|
+
* @param source - 登记表面;缺省用模块级单例,测试传入自建实例以隔离。
|
|
40
|
+
*/
|
|
41
|
+
export declare function createFacetStore(source?: FacetRegistry): FacetStore;
|
|
42
|
+
/** 取(并首次创建)单例存储。 */
|
|
43
|
+
export declare function facetStore(): FacetStore;
|
|
44
|
+
/** 释放单例存储(插件卸载时调用;下次 {@link facetStore} 会重建)。 */
|
|
45
|
+
export declare function disposeFacetStore(): void;
|
|
46
|
+
//# sourceMappingURL=facet-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet-store.d.ts","sourceRoot":"","sources":["../../../src/client/facet-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAA2B,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAQ/F,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,wDAAwD;IACxD,UAAU,IAAI,MAAM,CAAA;IACpB,wDAAwD;IACxD,gBAAgB,IAAI,MAAM,CAAA;IAC1B,kBAAkB;IAClB,IAAI,IAAI,SAAS,eAAe,EAAE,CAAA;IAClC,qCAAqC;IACrC,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,aAAwB,GAAG,UAAU,CAqE7E;AAWD,oBAAoB;AACpB,wBAAgB,UAAU,IAAI,UAAU,CAGvC;AAED,iDAAiD;AACjD,wBAAgB,iBAAiB,IAAI,IAAI,CAIxC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* facet 的**消费侧**:把「登记表面 + 每个 facet 自己的外部存储」压成一份 React 可订阅的
|
|
3
|
+
* 单一存储。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么必须是一个存储,而不是逐个 hook
|
|
6
|
+
*
|
|
7
|
+
* 见 `./facets.ts` 的文件头:hook 数量在同一个组件里必须逐次渲染恒定,而 facet 是运行
|
|
8
|
+
* 时注册/注销的。所以这里只暴露一个**版本号**(数字,引用天然稳定)给
|
|
9
|
+
* `useSyncExternalStore`,实际的快照读取与折叠都发生在渲染期。
|
|
10
|
+
*
|
|
11
|
+
* ## 快照读取为什么放在渲染期
|
|
12
|
+
*
|
|
13
|
+
* `getSnapshot` 必须返回稳定引用,而「每个 facet 的快照」是一个对象图:为它造一个
|
|
14
|
+
* 缓存就需要判定失效,而判定失效又要读快照本身。改成「版本号变 → 重新渲染 → 现读现折」
|
|
15
|
+
* 之后,缓存问题消失,代价是一次 O(facet × 组内会话) 的纯计算,量级与原有实现相同。
|
|
16
|
+
*
|
|
17
|
+
* @module dsh-group-status/client/facet-store
|
|
18
|
+
*/
|
|
19
|
+
import { registry } from "./facets.js";
|
|
20
|
+
/**
|
|
21
|
+
* 创建 facet 存储。
|
|
22
|
+
*
|
|
23
|
+
* 对登记面做一次订阅,并在登记变化时**重新接线**各 facet 的 `subscribe`:provider 热替换
|
|
24
|
+
* 实现(同 id 再注册)或运行中启用/停用插件,都只会走到这里一次,不会留下野订阅。
|
|
25
|
+
*
|
|
26
|
+
* @param source - 登记表面;缺省用模块级单例,测试传入自建实例以隔离。
|
|
27
|
+
*/
|
|
28
|
+
export function createFacetStore(source = registry) {
|
|
29
|
+
const listeners = new Set();
|
|
30
|
+
const links = new Map();
|
|
31
|
+
let version = 0;
|
|
32
|
+
let disposed = false;
|
|
33
|
+
/** 任一来源变化都要让消费方重新渲染,因此统一 bump。 */
|
|
34
|
+
const bump = () => {
|
|
35
|
+
if (disposed)
|
|
36
|
+
return;
|
|
37
|
+
version += 1;
|
|
38
|
+
for (const listener of [...listeners]) {
|
|
39
|
+
try {
|
|
40
|
+
listener();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
/* 单个订阅者异常不影响其余订阅者 */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/** 把 links 对齐到当前登记项:新增接线、移除退订、替换重接。 */
|
|
48
|
+
const rewire = () => {
|
|
49
|
+
if (disposed)
|
|
50
|
+
return;
|
|
51
|
+
const current = new Map(source.list().map((entry) => [entry.facet.id, entry.facet]));
|
|
52
|
+
for (const [id, link] of [...links]) {
|
|
53
|
+
if (current.get(id) === link.facet)
|
|
54
|
+
continue;
|
|
55
|
+
try {
|
|
56
|
+
link.unsubscribe();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* 退订失败不影响其它 facet 的接线 */
|
|
60
|
+
}
|
|
61
|
+
links.delete(id);
|
|
62
|
+
}
|
|
63
|
+
for (const [id, facet] of current) {
|
|
64
|
+
if (links.has(id))
|
|
65
|
+
continue;
|
|
66
|
+
links.set(id, { facet, unsubscribe: facet.subscribe(bump) });
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const unsubscribeRegistry = source.subscribe(() => {
|
|
70
|
+
rewire();
|
|
71
|
+
bump();
|
|
72
|
+
});
|
|
73
|
+
rewire();
|
|
74
|
+
return {
|
|
75
|
+
subscribe: (listener) => {
|
|
76
|
+
listeners.add(listener);
|
|
77
|
+
return () => {
|
|
78
|
+
listeners.delete(listener);
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
getVersion: () => version,
|
|
82
|
+
getServerVersion: () => 0,
|
|
83
|
+
list: () => source.list(),
|
|
84
|
+
dispose: () => {
|
|
85
|
+
if (disposed)
|
|
86
|
+
return;
|
|
87
|
+
disposed = true;
|
|
88
|
+
for (const link of links.values()) {
|
|
89
|
+
try {
|
|
90
|
+
link.unsubscribe();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
/* 释放阶段忽略单个退订异常 */
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
links.clear();
|
|
97
|
+
unsubscribeRegistry();
|
|
98
|
+
listeners.clear();
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 生产用的单例存储:消费侧(`WorkspaceBrowser`)订阅它,
|
|
104
|
+
* `apply` 的 effect 结束时用 {@link disposeFacetStore} 释放全部接线。
|
|
105
|
+
*
|
|
106
|
+
* 单例而非每次渲染新建,是因为它持有**对每个 facet 存储的订阅**;随渲染重建会把
|
|
107
|
+
* provider 的 store 拖进无谓的退订/重订,也让"快照在两个文件夹行之间读数不同"成为可能。
|
|
108
|
+
*/
|
|
109
|
+
let singleton;
|
|
110
|
+
/** 取(并首次创建)单例存储。 */
|
|
111
|
+
export function facetStore() {
|
|
112
|
+
if (singleton === undefined)
|
|
113
|
+
singleton = createFacetStore();
|
|
114
|
+
return singleton;
|
|
115
|
+
}
|
|
116
|
+
/** 释放单例存储(插件卸载时调用;下次 {@link facetStore} 会重建)。 */
|
|
117
|
+
export function disposeFacetStore() {
|
|
118
|
+
if (singleton === undefined)
|
|
119
|
+
return;
|
|
120
|
+
singleton.dispose();
|
|
121
|
+
singleton = undefined;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=facet-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet-store.js","sourceRoot":"","sources":["../../../src/client/facet-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 按用户设置筛掉不参与折叠的状态来源。
|
|
3
|
+
*
|
|
4
|
+
* 单独成文是因为它属于**徽标自身**的可见性规则,而不是某个来源的适配:来源只在
|
|
5
|
+
* `facet.settingKey` 上声明"我受哪个开关管",开关的语义与过滤时机归本插件。
|
|
6
|
+
*
|
|
7
|
+
* 过滤发生在**折叠之前**而不是渲染阶段:徽标数字、图标、`aria-label`、悬停明细与
|
|
8
|
+
* "要不要画徽标"因此天然同源。放到渲染阶段会出现"label 里有、计数里没有",而那正是
|
|
9
|
+
* 徽标最容易被怀疑撒谎的地方。
|
|
10
|
+
*
|
|
11
|
+
* @module dsh-group-status/client/facet-visibility
|
|
12
|
+
*/
|
|
13
|
+
import { type ResolvedBadgeSettings } from './badge-settings.ts';
|
|
14
|
+
import type { RegisteredFacet } from './facets.ts';
|
|
15
|
+
/** 筛出设置允许显示的登记项;顺序保持登记面的顺序(已按 `order` 排好)。 */
|
|
16
|
+
export declare function visibleFacets(entries: readonly RegisteredFacet[], settings: ResolvedBadgeSettings): RegisteredFacet[];
|
|
17
|
+
//# sourceMappingURL=facet-visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet-visibility.d.ts","sourceRoot":"","sources":["../../../src/client/facet-visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,8CAA8C;AAC9C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,QAAQ,EAAE,qBAAqB,GAC9B,eAAe,EAAE,CAEnB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 按用户设置筛掉不参与折叠的状态来源。
|
|
3
|
+
*
|
|
4
|
+
* 单独成文是因为它属于**徽标自身**的可见性规则,而不是某个来源的适配:来源只在
|
|
5
|
+
* `facet.settingKey` 上声明"我受哪个开关管",开关的语义与过滤时机归本插件。
|
|
6
|
+
*
|
|
7
|
+
* 过滤发生在**折叠之前**而不是渲染阶段:徽标数字、图标、`aria-label`、悬停明细与
|
|
8
|
+
* "要不要画徽标"因此天然同源。放到渲染阶段会出现"label 里有、计数里没有",而那正是
|
|
9
|
+
* 徽标最容易被怀疑撒谎的地方。
|
|
10
|
+
*
|
|
11
|
+
* @module dsh-group-status/client/facet-visibility
|
|
12
|
+
*/
|
|
13
|
+
import { facetVisibleBySettings } from "./badge-settings.js";
|
|
14
|
+
/** 筛出设置允许显示的登记项;顺序保持登记面的顺序(已按 `order` 排好)。 */
|
|
15
|
+
export function visibleFacets(entries, settings) {
|
|
16
|
+
return entries.filter(entry => facetVisibleBySettings(settings, entry.facet.settingKey));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=facet-visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet-visibility.js","sourceRoot":"","sources":["../../../src/client/facet-visibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,sBAAsB,EAA8B,MAAM,qBAAqB,CAAA;AAGxF,8CAA8C;AAC9C,MAAM,UAAU,aAAa,CAC3B,OAAmC,EACnC,QAA+B;IAE/B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;AAC1F,CAAC"}
|