dsh-group-status 0.3.0 → 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.
Files changed (84) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.en.md +6 -6
  3. package/README.md +6 -6
  4. package/lib/client.js +1122 -183
  5. package/lib/client.js.map +1 -1
  6. package/lib/types/client/contract/slots.d.ts +39 -21
  7. package/lib/types/client/contract/slots.d.ts.map +1 -1
  8. package/lib/types/client/contract/slots.js.map +1 -1
  9. package/lib/types/client/contract/toast.d.ts +67 -0
  10. package/lib/types/client/contract/toast.d.ts.map +1 -0
  11. package/lib/types/client/contract/toast.js +2 -0
  12. package/lib/types/client/contract/toast.js.map +1 -0
  13. package/lib/types/client/index.d.ts +6 -3
  14. package/lib/types/client/index.d.ts.map +1 -1
  15. package/lib/types/client/index.js +48 -13
  16. package/lib/types/client/index.js.map +1 -1
  17. package/lib/types/client/locales.d.ts +14 -0
  18. package/lib/types/client/locales.d.ts.map +1 -1
  19. package/lib/types/client/locales.js +14 -0
  20. package/lib/types/client/locales.js.map +1 -1
  21. package/lib/types/client/navigation.d.ts +45 -12
  22. package/lib/types/client/navigation.d.ts.map +1 -1
  23. package/lib/types/client/navigation.js +102 -26
  24. package/lib/types/client/navigation.js.map +1 -1
  25. package/lib/types/client/rows/Rows.d.ts.map +1 -1
  26. package/lib/types/client/rows/Rows.js +4 -4
  27. package/lib/types/client/rows/Rows.js.map +1 -1
  28. package/lib/types/client/rows/WorkspaceBrowser.d.ts +1 -1
  29. package/lib/types/client/rows/WorkspaceBrowser.d.ts.map +1 -1
  30. package/lib/types/client/rows/WorkspaceBrowser.js +54 -50
  31. package/lib/types/client/rows/WorkspaceBrowser.js.map +1 -1
  32. package/lib/types/client/session-actions/ArchiveSession.js +1 -1
  33. package/lib/types/client/session-actions/ArchiveSession.js.map +1 -1
  34. package/lib/types/client/session-actions/ForkSession.d.ts +5 -4
  35. package/lib/types/client/session-actions/ForkSession.d.ts.map +1 -1
  36. package/lib/types/client/session-actions/ForkSession.js +7 -4
  37. package/lib/types/client/session-actions/ForkSession.js.map +1 -1
  38. package/lib/types/client/session-actions/PinSession.js +1 -1
  39. package/lib/types/client/session-actions/PinSession.js.map +1 -1
  40. package/lib/types/client/session-actions/RowActionToast.d.ts +5 -8
  41. package/lib/types/client/session-actions/RowActionToast.d.ts.map +1 -1
  42. package/lib/types/client/session-actions/RowActionToast.js +10 -49
  43. package/lib/types/client/session-actions/RowActionToast.js.map +1 -1
  44. package/lib/types/client/session-actions/SessionId.d.ts +8 -0
  45. package/lib/types/client/session-actions/SessionId.d.ts.map +1 -0
  46. package/lib/types/client/session-actions/SessionId.js +16 -0
  47. package/lib/types/client/session-actions/SessionId.js.map +1 -0
  48. package/lib/types/client/session-watermarks.d.ts +30 -0
  49. package/lib/types/client/session-watermarks.d.ts.map +1 -0
  50. package/lib/types/client/session-watermarks.js +54 -0
  51. package/lib/types/client/session-watermarks.js.map +1 -0
  52. package/lib/types/client/shortcuts.d.ts +2 -7
  53. package/lib/types/client/shortcuts.d.ts.map +1 -1
  54. package/lib/types/client/shortcuts.js +7 -11
  55. package/lib/types/client/shortcuts.js.map +1 -1
  56. package/lib/types/client/toast/Toast.d.ts +41 -0
  57. package/lib/types/client/toast/Toast.d.ts.map +1 -0
  58. package/lib/types/client/toast/Toast.js +44 -0
  59. package/lib/types/client/toast/Toast.js.map +1 -0
  60. package/lib/types/client/toast/register.d.ts +11 -0
  61. package/lib/types/client/toast/register.d.ts.map +1 -0
  62. package/lib/types/client/toast/register.js +162 -0
  63. package/lib/types/client/toast/register.js.map +1 -0
  64. package/package.json +33 -30
  65. package/lib/types/client/legacy/bridge.d.ts +0 -30
  66. package/lib/types/client/legacy/bridge.d.ts.map +0 -1
  67. package/lib/types/client/legacy/bridge.js +0 -58
  68. package/lib/types/client/legacy/bridge.js.map +0 -1
  69. package/lib/types/client/legacy/register-legacy-facets.d.ts +0 -14
  70. package/lib/types/client/legacy/register-legacy-facets.d.ts.map +0 -1
  71. package/lib/types/client/legacy/register-legacy-facets.js +0 -77
  72. package/lib/types/client/legacy/register-legacy-facets.js.map +0 -1
  73. package/lib/types/client/legacy/schedule.d.ts +0 -49
  74. package/lib/types/client/legacy/schedule.d.ts.map +0 -1
  75. package/lib/types/client/legacy/schedule.js +0 -73
  76. package/lib/types/client/legacy/schedule.js.map +0 -1
  77. package/lib/types/client/legacy/store-source.d.ts +0 -78
  78. package/lib/types/client/legacy/store-source.d.ts.map +0 -1
  79. package/lib/types/client/legacy/store-source.js +0 -82
  80. package/lib/types/client/legacy/store-source.js.map +0 -1
  81. package/lib/types/client/legacy/waiting-review.d.ts +0 -85
  82. package/lib/types/client/legacy/waiting-review.d.ts.map +0 -1
  83. package/lib/types/client/legacy/waiting-review.js +0 -179
  84. package/lib/types/client/legacy/waiting-review.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/client/toast/register.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-group-status",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "DSH 侧栏折叠分组聚合徽标:收起的文件夹行显示进行中/待审批/已完成/定时任务/等待评审的聚合状态,带数字与悬停明细。",
5
5
  "keywords": [
6
6
  "dsh",
@@ -22,7 +22,8 @@
22
22
  "url": "https://github.com/dsh-plugin-collection/dsh-group-status/issues"
23
23
  },
24
24
  "engines": {
25
- "node": "^22.19 || >=24"
25
+ "node": "^22.19 || >=24",
26
+ "dsh": ">=0.2.1-rc.2 <0.3.0-0"
26
27
  },
27
28
  "type": "module",
28
29
  "icon": "./icon.svg",
@@ -46,6 +47,7 @@
46
47
  },
47
48
  "client": {
48
49
  "inject": [
50
+ "@deepseek-ai/dsh-api-remote-access",
49
51
  "@deepseek-ai/dsh-api-remotes",
50
52
  "@deepseek-ai/dsh-api-session-controller",
51
53
  "@deepseek-ai/dsh-api-workspace-controller",
@@ -62,38 +64,39 @@
62
64
  }
63
65
  },
64
66
  "peerDependencies": {
65
- "@deepseek-ai/cordis": "~4.0.4"
67
+ "@deepseek-ai/cordis": "~4.0.5"
66
68
  },
67
69
  "dependencies": {
68
- "@deepseek-ai/schemastery": "^3.18.4"
70
+ "@deepseek-ai/schemastery": "~3.18.5"
69
71
  },
70
72
  "devDependencies": {
71
- "@deepseek-ai/cordis": "~4.0.4",
72
- "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
73
- "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
74
- "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.2",
75
- "@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.2",
76
- "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
77
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
78
- "@deepseek-ai/dsh-client-product-analytics": "0.2.0-rc.2",
79
- "@deepseek-ai/dsh-client-shortcuts": "0.2.0-rc.2",
80
- "@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
81
- "@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.2",
82
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
83
- "@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.2",
84
- "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
85
- "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
86
- "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
87
- "@deepseek-ai/dsh-client-ui-sidebar": "0.2.0-rc.2",
88
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
89
- "@deepseek-ai/dsh-jobs": "0.2.0-rc.2",
90
- "@deepseek-ai/dsh-schedule": "0.2.0-rc.2",
91
- "@deepseek-ai/dsh-session": "0.2.0-rc.2",
92
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
93
- "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
94
- "@deepseek-ai/dsh-util-values": "0.2.0-rc.2",
95
- "@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.2",
96
- "@deepseek-ai/schemastery": "^3.18.4",
73
+ "@deepseek-ai/cordis": "~4.0.5",
74
+ "@deepseek-ai/dsh-agent": "0.2.1-rc.2",
75
+ "@deepseek-ai/dsh-api-remote-access": "0.2.1-rc.2",
76
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-rc.2",
77
+ "@deepseek-ai/dsh-api-session-controller": "0.2.1-rc.2",
78
+ "@deepseek-ai/dsh-api-workspace-controller": "0.2.1-rc.2",
79
+ "@deepseek-ai/dsh-client-connection": "0.2.1-rc.2",
80
+ "@deepseek-ai/dsh-client-locale": "0.2.1-rc.2",
81
+ "@deepseek-ai/dsh-client-product-analytics": "0.2.1-rc.2",
82
+ "@deepseek-ai/dsh-client-shortcuts": "0.2.1-rc.2",
83
+ "@deepseek-ai/dsh-client-store": "0.2.1-rc.2",
84
+ "@deepseek-ai/dsh-client-test-runtime": "0.2.1-rc.2",
85
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-rc.2",
86
+ "@deepseek-ai/dsh-client-ui-layout": "0.2.1-rc.2",
87
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
88
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.1-rc.2",
89
+ "@deepseek-ai/dsh-client-ui-session": "0.2.1-rc.2",
90
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.2.1-rc.2",
91
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-rc.2",
92
+ "@deepseek-ai/dsh-jobs": "0.2.1-rc.2",
93
+ "@deepseek-ai/dsh-schedule": "0.2.1-rc.2",
94
+ "@deepseek-ai/dsh-session": "0.2.1-rc.2",
95
+ "@deepseek-ai/dsh-subagent": "0.2.1-rc.2",
96
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-rc.2",
97
+ "@deepseek-ai/dsh-util-values": "0.2.1-rc.2",
98
+ "@deepseek-ai/dsh-util-workspace-path": "0.2.1-rc.2",
99
+ "@deepseek-ai/schemastery": "~3.18.5",
97
100
  "@testing-library/react": "16.3.3",
98
101
  "@types/react": "~18.3.1",
99
102
  "clsx": "^2.0.0",
@@ -1,30 +0,0 @@
1
- /**
2
- * 过渡期的跨插件桥:把 dsh-later / dsh-gitea-dispatch 的摘要面接到 facet 登记面上。
3
- *
4
- * ⚠️ 本目录整体是**临时代管**。两个提供方按 `../facets.ts` 的协议自己注册之后
5
- * (对应它们各自的 issue),`legacy/` 整个目录与 `package.json` 里的
6
- * `dsh.client.external` 两条声明一并删除,本插件不再认识任何具体状态源。
7
- *
8
- * ## 为什么在这里、又为什么要"登记表"
9
- *
10
- * 两家的 store 都在自己的 client `apply` 里创建,而**插件 apply 的先后宿主不保证**:
11
- * 本插件可能在对方 store 就绪之前就开始渲染。所以桥接层不能一次性抓 store,必须
12
- * 订阅对方的"store 登记变化",并把 store 的迟到本身当作一次快照变化通知出去
13
- * (`subscribe` 里同时挂两层)。这与 `cross-plugin-summary.ts` 里 `createSummaryRegistry`
14
- * 解决的是一模一样的问题,只是这次藏在桥接层里,不污染协议。
15
- *
16
- * ## 为什么用 subscribe/getSnapshot 而不是调对方的 hook
17
- *
18
- * 见 `../facets.ts` 文件头:hook 数量必须逐次渲染恒定,而 facet 运行时可增删。桥接层
19
- * 只要把对方的 store 面交出去,聚合侧就完全不需要知道背后有几个来源。
20
- *
21
- * @module dsh-group-status/client/legacy/bridge
22
- */
23
- import { type FacetRegistry, type Unregister } from '../facets.ts';
24
- /**
25
- * 安装过渡适配器。
26
- *
27
- * @param target - 登记面;缺省用生产单例,测试传入自建实例以隔离。
28
- */
29
- export declare function installLegacyBridges(target?: FacetRegistry): Unregister;
30
- //# sourceMappingURL=bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../../src/client/legacy/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAsB5E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,aAAwB,GAAG,UAAU,CAUjF"}
@@ -1,58 +0,0 @@
1
- /**
2
- * 过渡期的跨插件桥:把 dsh-later / dsh-gitea-dispatch 的摘要面接到 facet 登记面上。
3
- *
4
- * ⚠️ 本目录整体是**临时代管**。两个提供方按 `../facets.ts` 的协议自己注册之后
5
- * (对应它们各自的 issue),`legacy/` 整个目录与 `package.json` 里的
6
- * `dsh.client.external` 两条声明一并删除,本插件不再认识任何具体状态源。
7
- *
8
- * ## 为什么在这里、又为什么要"登记表"
9
- *
10
- * 两家的 store 都在自己的 client `apply` 里创建,而**插件 apply 的先后宿主不保证**:
11
- * 本插件可能在对方 store 就绪之前就开始渲染。所以桥接层不能一次性抓 store,必须
12
- * 订阅对方的"store 登记变化",并把 store 的迟到本身当作一次快照变化通知出去
13
- * (`subscribe` 里同时挂两层)。这与 `cross-plugin-summary.ts` 里 `createSummaryRegistry`
14
- * 解决的是一模一样的问题,只是这次藏在桥接层里,不污染协议。
15
- *
16
- * ## 为什么用 subscribe/getSnapshot 而不是调对方的 hook
17
- *
18
- * 见 `../facets.ts` 文件头:hook 数量必须逐次渲染恒定,而 facet 运行时可增删。桥接层
19
- * 只要把对方的 store 面交出去,聚合侧就完全不需要知道背后有几个来源。
20
- *
21
- * @module dsh-group-status/client/legacy/bridge
22
- */
23
- import { registry } from "../facets.js";
24
- import { assembleLegacySources } from "./store-source.js";
25
- import { registerLegacyFacets } from "./register-legacy-facets.js";
26
- /**
27
- * 读一个 provider 的 client 模块表行。
28
- *
29
- * 用**注入的** `require`(闭包工厂的参数)而不是 `globalThis.require`:宿主没有全局
30
- * require(实测 `typeof globalThis.require === 'undefined'`),走全局会静默拿到
31
- * undefined,于是整个跨插件集成"看起来装着、其实一直没工作"。
32
- * 提供方未安装 / 未启用时模块表里没有这一行,`require` 抛错 → 当作缺席。
33
- */
34
- function clientOf(specifier) {
35
- try {
36
- return require(specifier);
37
- }
38
- catch {
39
- return undefined;
40
- }
41
- }
42
- /**
43
- * 安装过渡适配器。
44
- *
45
- * @param target - 登记面;缺省用生产单例,测试传入自建实例以隔离。
46
- */
47
- export function installLegacyBridges(target = registry) {
48
- const later = clientOf('dsh-later/client');
49
- const dispatch = clientOf('dsh-gitea-dispatch/client');
50
- // 缺席就省略键(exactOptionalPropertyTypes 下 undefined 不是"没有"的合法写法)。
51
- const clients = {
52
- ...(later === undefined ? {} : { later }),
53
- ...(dispatch === undefined ? {} : { dispatch }),
54
- };
55
- const sources = assembleLegacySources(clients);
56
- return registerLegacyFacets(sources, target);
57
- }
58
- //# sourceMappingURL=bridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../../src/client/legacy/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAA;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA8B,CAAA;AAInE;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAI,SAAiB;IACpC,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,SAAS,CAAkB,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAwB,QAAQ;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAiC,kBAAkB,CAAC,CAAA;IAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAoC,2BAA2B,CAAC,CAAA;IACzF,8DAA8D;IAC9D,MAAM,OAAO,GAA0B;QACrC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QACzC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;KAChD,CAAA;IACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9C,OAAO,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC"}
@@ -1,14 +0,0 @@
1
- import { type FacetRegistry, type Unregister } from '../facets.ts';
2
- import type { LegacyFacetSources } from './store-source.ts';
3
- /**
4
- * 登记本插件目前**代管**的状态源。
5
- *
6
- * 两个 facet 都显式声明 `origin: 'legacy'`,所以状态所有者一旦自己注册同名 facet,
7
- * 适配器就让位({@link FACET_ORIGIN_RANK}),不会重复计数。
8
- *
9
- * @returns 一次性注销函数(挂到 `ctx.effect` 的清理上)。
10
- */
11
- export declare function registerLegacyFacets(sources: LegacyFacetSources, target?: FacetRegistry): Unregister;
12
- /** 本插件目前代管了哪些状态源(诊断与测试用)。 */
13
- export declare const LEGACY_FACET_IDS: readonly string[];
14
- //# sourceMappingURL=register-legacy-facets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register-legacy-facets.d.ts","sourceRoot":"","sources":["../../../../src/client/legacy/register-legacy-facets.tsx"],"names":[],"mappings":"AAYA,OAAO,EAA2C,KAAK,aAAa,EAAyB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAGlI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAkB3D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,GAAE,aAA+B,GAAG,UAAU,CAwCrH;AAUD,6BAA6B;AAC7B,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAiD,CAAA"}
@@ -1,77 +0,0 @@
1
- /**
2
- * 过渡期:把内置适配器登记进 facet 注册面,并交出它们各自的图标。
3
- *
4
- * ⚠️ 本文件与整个 `legacy/` 目录都是**临时代管**:状态所有者(dsh-later、
5
- * dsh-gitea-dispatch)按 `../facets.ts` 的协议自己注册之后,这里连同两个适配器一起
6
- * 删除。图标之所以留在这一层而不是放回 `rows/GroupBadge.tsx`:「这个状态长什么样」
7
- * 是状态所有者的知识,本插件只管把它放进徽标的排格里。
8
- *
9
- * @module dsh-group-status/client/legacy/register-legacy-facets
10
- */
11
- import { createElement } from 'react';
12
- import { IconClockOutlineRegular, IconListPenOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';
13
- import { registerGroupStatusFacet } from "../facets.js";
14
- import { registry as defaultRegistry } from "../facets.js";
15
- import { createScheduleFacet, SCHEDULE_FACET_ID } from "./schedule.js";
16
- import { createWaitingReviewFacet, WAITING_REVIEW_FACET_ID, } from "./waiting-review.js";
17
- /** 语义色档 → 宿主色令牌(与改造前的取色逐档一致)。 */
18
- const TONE_COLOR = {
19
- info: '#8b5cf6',
20
- warn: 'var(--dsw-alias-state-warn-secondary)',
21
- error: 'var(--dsw-alias-state-error-primary)',
22
- };
23
- /** 带色的一小段 inline-flex,尺寸与其余徽标图标一致。 */
24
- function glyph(color, icon) {
25
- return createElement('span', { style: { color, display: 'inline-flex', alignItems: 'center' } }, icon);
26
- }
27
- /**
28
- * 登记本插件目前**代管**的状态源。
29
- *
30
- * 两个 facet 都显式声明 `origin: 'legacy'`,所以状态所有者一旦自己注册同名 facet,
31
- * 适配器就让位({@link FACET_ORIGIN_RANK}),不会重复计数。
32
- *
33
- * @returns 一次性注销函数(挂到 `ctx.effect` 的清理上)。
34
- */
35
- export function registerLegacyFacets(sources, target = defaultRegistry) {
36
- const disposers = [];
37
- if (sources.schedule !== undefined) {
38
- const facet = {
39
- ...createScheduleFacet(sources.schedule),
40
- // 紫色与 dsh-later 自己的定时徽标同源(浅深底对比均 >=3:1);
41
- // urgent / overdue 走宿主 warn / error 语义令牌。
42
- renderIcon: (fold) => glyph(fold.tone === 'error' ? TONE_COLOR.error : fold.tone === 'warn' ? TONE_COLOR.warn : TONE_COLOR.info, createElement(IconClockOutlineRegular, { size: 14 })),
43
- };
44
- disposers.push(target === defaultRegistry
45
- ? registerGroupStatusFacet(facet)
46
- : registerInto(target, facet));
47
- }
48
- if (sources.waiting !== undefined) {
49
- const facet = {
50
- ...createWaitingReviewFacet(sources.waiting),
51
- // #23:这枚「列表笔」是**过时刻意保留的兜底形状,不是当前形状**。dsh-gitea-dispatch
52
- // 自其 #56/#60 起交出自绘的沙漏(跟随 waitingIconStyle 四档),本文件按
53
- // FACET_ORIGIN_RANK 让位给它(provider 恒胜 legacy)。只有 provider 缺席
54
- //(未安装 / 版本早于 #47)或登记失败时才会现形——那些路径下形状与行内不一致是
55
- // **有意接受的**,好过「等待评审彻底不进徽标」。别把它当成 bug 改回沙漏。
56
- // 与定时任务仍用不同图标:两者同属"在等"的语义,只靠颜色区分对色盲用户不可用。
57
- renderIcon: (fold) => glyph(fold.tone === 'error' ? TONE_COLOR.error : TONE_COLOR.warn, createElement(IconListPenOutlineRegular, { size: 14 })),
58
- };
59
- disposers.push(target === defaultRegistry
60
- ? registerGroupStatusFacet(facet)
61
- : registerInto(target, facet));
62
- }
63
- return () => {
64
- for (const dispose of disposers)
65
- dispose();
66
- };
67
- }
68
- /** 对给定登记面注册一个 facet(与单例路径同一套校验/拒绝语义)。 */
69
- function registerInto(target, facet) {
70
- const result = target.register(facet);
71
- return result.ok ? () => {
72
- target.remove(result.id, facet);
73
- } : () => undefined;
74
- }
75
- /** 本插件目前代管了哪些状态源(诊断与测试用)。 */
76
- export const LEGACY_FACET_IDS = [SCHEDULE_FACET_ID, WAITING_REVIEW_FACET_ID];
77
- //# sourceMappingURL=register-legacy-facets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register-legacy-facets.js","sourceRoot":"","sources":["../../../../src/client/legacy/register-legacy-facets.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,aAAa,EAAkB,MAAM,OAAO,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAC1G,OAAO,EAAE,wBAAwB,EAA6E,MAAM,cAAc,CAAA;AAClI,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAA8C,MAAM,eAAe,CAAA;AAElH,OAAO,EACL,wBAAwB,EAAE,uBAAuB,GAElD,MAAM,qBAAqB,CAAA;AAE5B,iCAAiC;AACjC,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,uCAAuC;IAC7C,KAAK,EAAE,sCAAsC;CACrC,CAAA;AAEV,sCAAsC;AACtC,SAAS,KAAK,CAAC,KAAa,EAAE,IAAe;IAC3C,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;AACxG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA2B,EAAE,SAAwB,eAAe;IACvG,MAAM,SAAS,GAAiB,EAAE,CAAA;IAElC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,KAAK,GAAmE;YAC5E,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC;YACxC,yCAAyC;YACzC,0CAA0C;YAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CACzB,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EACnG,aAAa,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACrD;SACF,CAAA;QACD,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,eAAe;YACvC,CAAC,CAAC,wBAAwB,CAAC,KAAiB,CAAC;YAC7C,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,KAAiB,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,KAAK,GAA6E;YACtF,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,wDAAwD;YACxD,mDAAmD;YACnD,4DAA4D;YAC5D,4CAA4C;YAC5C,2CAA2C;YAC3C,0CAA0C;YAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CACzB,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAC1D,aAAa,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACvD;SACF,CAAA;QACD,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,eAAe;YACvC,CAAC,CAAC,wBAAwB,CAAC,KAAiB,CAAC;YAC7C,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,KAAiB,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,OAAO,IAAI,SAAS;YAAE,OAAO,EAAE,CAAA;IAC5C,CAAC,CAAA;AACH,CAAC;AAED,yCAAyC;AACzC,SAAS,YAAY,CAAC,MAAqB,EAAE,KAAe;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QACtB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAA;AACrB,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAA"}
@@ -1,49 +0,0 @@
1
- /**
2
- * 过渡期适配器:dsh-later 的「定时任务」→ facet。
3
- *
4
- * ⚠️ 与 `waiting-review.ts` 同属临时层,dsh-later 自己注册之后连同图标映射一并删除。
5
- * 见其 issue #17(摘要 API)与本次的升级请求。
6
- *
7
- * @module dsh-group-status/client/legacy/schedule
8
- */
9
- import type { FacetFold, FacetRenderContext, GroupStatusFacet } from '../facets.ts';
10
- /** facet id:与 dsh-later 自己注册时应当使用的 id 保持一致。 */
11
- export declare const SCHEDULE_FACET_ID = "dsh-later.schedule";
12
- /** 一条定时任务事实,来自 dsh-later 的 `useScheduleSummary()`。 */
13
- export interface ScheduleSummaryEntry {
14
- readonly count: number;
15
- readonly pausedCount: number;
16
- readonly nextAt?: number;
17
- readonly state: 'scheduled' | 'urgent' | 'overdue';
18
- }
19
- /** 会话 id → 该会话的定时任务事实。 */
20
- export type ScheduleSummaryMap = ReadonlyMap<string, ScheduleSummaryEntry>;
21
- /** 定时折果携带的数据:只有本 facet 读。 */
22
- export interface ScheduleData {
23
- /** 组内定时任务总条数(含已暂停)。 */
24
- readonly tasks: number;
25
- /** 组内最高优先级状态:overdue > urgent > scheduled。 */
26
- readonly state: 'scheduled' | 'urgent' | 'overdue' | undefined;
27
- }
28
- /**
29
- * 把一组的会话 id 折成定时任务事实。
30
- *
31
- * `count` 用**有条目的会话数**(与徽标"还需要看几件事"的口径一致),任务总数留在
32
- * `data.tasks` 里供文案/明细使用。
33
- */
34
- export declare function foldSchedule(snapshot: ScheduleSummaryMap | undefined, sessionIds: readonly string[]): FacetFold<ScheduleData>;
35
- /** 跨层合并:会话数与任务数相加,状态取更紧急的一档。 */
36
- export declare function mergeScheduleFold(a: FacetFold<ScheduleData>, b: FacetFold<ScheduleData>): FacetFold<ScheduleData>;
37
- /** 「N 定时任务」:措辞沿用本插件的行级文案键。 */
38
- export declare function scheduleLabel(fold: FacetFold<ScheduleData>, context: FacetRenderContext): string;
39
- /**
40
- * 构造内置的定时任务 facet。
41
- *
42
- * @param input.getSnapshot - 读 dsh-later 的摘要 Map。
43
- * @param input.subscribe - 订阅其变化。
44
- */
45
- export declare function createScheduleFacet(input: {
46
- subscribe: (listener: () => void) => () => void;
47
- getSnapshot: () => ScheduleSummaryMap | undefined;
48
- }): GroupStatusFacet<ScheduleSummaryMap | undefined, ScheduleData>;
49
- //# sourceMappingURL=schedule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../../src/client/legacy/schedule.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGnF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;CACnD;AAED,0BAA0B;AAC1B,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;AAE1E,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAA;CAC/D;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,SAAS,CAAC,YAAY,CAAC,CAoBzB;AAED,gCAAgC;AAChC,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,CAUjH;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;IAC/C,WAAW,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAA;CAClD,GAAG,gBAAgB,CAAC,kBAAkB,GAAG,SAAS,EAAE,YAAY,CAAC,CAajE"}
@@ -1,73 +0,0 @@
1
- import { GROUP_STATUS_FACET_PROTOCOL_VERSION } from "../facets.js";
2
- /** facet id:与 dsh-later 自己注册时应当使用的 id 保持一致。 */
3
- export const SCHEDULE_FACET_ID = 'dsh-later.schedule';
4
- /** 状态优先级(越大越紧急),与 dsh-later 的行内口径一致。 */
5
- const SCHEDULE_RANK = {
6
- scheduled: 1, urgent: 2, overdue: 3,
7
- };
8
- /**
9
- * 把一组的会话 id 折成定时任务事实。
10
- *
11
- * `count` 用**有条目的会话数**(与徽标"还需要看几件事"的口径一致),任务总数留在
12
- * `data.tasks` 里供文案/明细使用。
13
- */
14
- export function foldSchedule(snapshot, sessionIds) {
15
- let sessions = 0;
16
- let tasks = 0;
17
- let state;
18
- if (snapshot !== undefined) {
19
- for (const id of sessionIds) {
20
- const entry = snapshot.get(id);
21
- if (entry === undefined)
22
- continue;
23
- sessions += 1;
24
- tasks += entry.count;
25
- if (state === undefined || SCHEDULE_RANK[entry.state] > SCHEDULE_RANK[state])
26
- state = entry.state;
27
- }
28
- }
29
- return {
30
- count: sessions,
31
- tone: state === 'overdue' ? 'error' : state === 'urgent' ? 'warn' : 'info',
32
- // 提醒已过点 / 五分钟内到点 = 真的在催用户,这是脉冲的唯一合法用途。
33
- pulse: state === 'overdue' || state === 'urgent',
34
- data: { tasks, state },
35
- };
36
- }
37
- /** 跨层合并:会话数与任务数相加,状态取更紧急的一档。 */
38
- export function mergeScheduleFold(a, b) {
39
- const rankA = a.data?.state === undefined ? 0 : SCHEDULE_RANK[a.data.state];
40
- const rankB = b.data?.state === undefined ? 0 : SCHEDULE_RANK[b.data.state];
41
- const state = rankB > rankA ? b.data?.state : a.data?.state;
42
- return {
43
- count: a.count + b.count,
44
- tone: state === 'overdue' ? 'error' : state === 'urgent' ? 'warn' : 'info',
45
- pulse: a.pulse || b.pulse,
46
- data: { tasks: (a.data?.tasks ?? 0) + (b.data?.tasks ?? 0), state },
47
- };
48
- }
49
- /** 「N 定时任务」:措辞沿用本插件的行级文案键。 */
50
- export function scheduleLabel(fold, context) {
51
- return `${fold.count} ${context.t('status.scheduled')}`;
52
- }
53
- /**
54
- * 构造内置的定时任务 facet。
55
- *
56
- * @param input.getSnapshot - 读 dsh-later 的摘要 Map。
57
- * @param input.subscribe - 订阅其变化。
58
- */
59
- export function createScheduleFacet(input) {
60
- return {
61
- protocol: GROUP_STATUS_FACET_PROTOCOL_VERSION,
62
- id: SCHEDULE_FACET_ID,
63
- origin: 'legacy',
64
- settingKey: 'showScheduledInBadge',
65
- order: 10,
66
- subscribe: input.subscribe,
67
- getSnapshot: input.getSnapshot,
68
- fold: (snapshot, sessionIds) => foldSchedule(snapshot, sessionIds),
69
- merge: mergeScheduleFold,
70
- label: scheduleLabel,
71
- };
72
- }
73
- //# sourceMappingURL=schedule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../../../src/client/legacy/schedule.ts"],"names":[],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- /**
2
- * 过渡期桥接层里**与图标无关**的那一半。
3
- *
4
- * 单独成文只为一件事:可测。`register-legacy-facets.tsx` 引宿主图标集,它的 `require`
5
- * 图在本仓库里解析不了(`vitest.config.ts` 排除理由 (b))。"store 迟到怎么办"和"设置
6
- * 关掉哪个来源"都是真会咬人的逻辑,跟图标写在一起就永远进不了测试。
7
- *
8
- * @module dsh-group-status/client/legacy/store-source
9
- */
10
- import { type ResolvedBadgeSettings } from '../badge-settings.ts';
11
- import type { RegisteredFacet } from '../facets.ts';
12
- import type { ScheduleSummaryMap } from './schedule.ts';
13
- import type { WaitingReviewSummarizer, WaitingReviewSummaryMap } from './waiting-review.ts';
14
- /**
15
- * 把「store 可能迟到」的两层订阅合成一个稳定订阅面。
16
- *
17
- * @param getStore - 读当前生效的 store(未登记时 undefined)。
18
- * @param subscribeRegistry - 订阅 store 登记变化(提供方 apply 晚于本插件渲染时用它自愈)。
19
- */
20
- export declare function bridgeLateStoreSource<Snapshot>(getStore: (() => {
21
- getSnapshot: () => Snapshot | undefined;
22
- subscribe: (listener: () => void) => () => void;
23
- } | undefined) | undefined, subscribeRegistry: ((listener: () => void) => () => void) | undefined): {
24
- subscribe: (listener: () => void) => () => void;
25
- getSnapshot: () => Snapshot | undefined;
26
- } | undefined;
27
- /**
28
- * 安装两个过渡适配器。
29
- *
30
- * @returns 一次性注销函数(挂到 `ctx.effect` 的清理上)。
31
-
32
- /**
33
- * 按设置筛掉被关掉的来源。
34
- *
35
- * 过滤放在**折叠之前**而不是渲染阶段:数字、图标、`aria-label`、悬停明细与"要不要画
36
- * 徽标"因此天然同源,不会出现在 label 里有、计数里没有的情况。
37
- */
38
- export declare function visibleFacets(entries: readonly RegisteredFacet[], settings: ResolvedBadgeSettings): RegisteredFacet[];
39
- /** 提供方 store 的最小面(两家同形:宿主 `useSyncExternalStore` 的外部存储)。 */
40
- export interface ProviderStore<Snapshot> {
41
- getSnapshot: () => Snapshot | undefined;
42
- subscribe: (listener: () => void) => () => void;
43
- }
44
- /** 两家 provider 的 client 导出面里,桥接层真正用到的部分。 */
45
- export interface LegacyProviderClients {
46
- /** 缺席(未安装 / 未启用)就整个省略这个键。 */
47
- later?: {
48
- getScheduleSummaryStore?: () => ProviderStore<ScheduleSummaryMap> | undefined;
49
- subscribeScheduleSummaryStore?: (listener: () => void) => () => void;
50
- };
51
- /** 同上。 */
52
- dispatch?: {
53
- getWaitingSummaryStore?: () => ProviderStore<WaitingReviewSummaryMap> | undefined;
54
- subscribeWaitingSummaryStore?: (listener: () => void) => () => void;
55
- summarizeWaitingGroup?: WaitingReviewSummarizer;
56
- };
57
- }
58
- /** 交给图标层的装配入参(见 `register-legacy-facets.tsx`)。 */
59
- export interface LegacyFacetSources {
60
- schedule: {
61
- subscribe: (listener: () => void) => () => void;
62
- getSnapshot: () => ScheduleSummaryMap | undefined;
63
- } | undefined;
64
- waiting: {
65
- subscribe: (listener: () => void) => () => void;
66
- getSnapshot: () => WaitingReviewSummaryMap | undefined;
67
- summarize?: WaitingReviewSummarizer;
68
- } | undefined;
69
- }
70
- /**
71
- * 从两家 provider 的 client 面拼出登记入参。
72
- *
73
- * 这一层刻意不碰图标、不 `require`:它是桥接里唯一"会拼错"的部分(store 迟到、
74
- * 谁缺席、委托哪个聚合函数),能被测试覆盖才有意义。`require` 与图标各自留在只有一行
75
- * 调用的 `bridge.ts` 与 `register-legacy-facets.tsx` 里。
76
- */
77
- export declare function assembleLegacySources(clients: LegacyProviderClients): LegacyFacetSources;
78
- //# sourceMappingURL=store-source.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-source.d.ts","sourceRoot":"","sources":["../../../../src/client/legacy/store-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAE3F;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAC5C,QAAQ,EAAE,CAAC,MAAM;IAAE,WAAW,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAAE,GAAG,SAAS,CAAC,GAAG,SAAS,EACtI,iBAAiB,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC,GAAG,SAAS,GACpE;IAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG,SAAS,CA4B1G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,QAAQ,EAAE,qBAAqB,GAC9B,eAAe,EAAE,CAEnB;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa,CAAC,QAAQ;IACrC,WAAW,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAA;IACvC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;AAED,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,KAAK,CAAC,EAAE;QACN,uBAAuB,CAAC,EAAE,MAAM,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAA;QAC7E,6BAA6B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;KACrE,CAAA;IACD,UAAU;IACV,QAAQ,CAAC,EAAE;QACT,sBAAsB,CAAC,EAAE,MAAM,aAAa,CAAC,uBAAuB,CAAC,GAAG,SAAS,CAAA;QACjF,4BAA4B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;QACnE,qBAAqB,CAAC,EAAE,uBAAuB,CAAA;KAChD,CAAA;CACF;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE;QACR,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;QAC/C,WAAW,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAA;KAClD,GAAG,SAAS,CAAA;IACb,OAAO,EAAE;QACP,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;QAC/C,WAAW,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAA;QACtD,SAAS,CAAC,EAAE,uBAAuB,CAAA;KACpC,GAAG,SAAS,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,kBAAkB,CAgBxF"}
@@ -1,82 +0,0 @@
1
- /**
2
- * 过渡期桥接层里**与图标无关**的那一半。
3
- *
4
- * 单独成文只为一件事:可测。`register-legacy-facets.tsx` 引宿主图标集,它的 `require`
5
- * 图在本仓库里解析不了(`vitest.config.ts` 排除理由 (b))。"store 迟到怎么办"和"设置
6
- * 关掉哪个来源"都是真会咬人的逻辑,跟图标写在一起就永远进不了测试。
7
- *
8
- * @module dsh-group-status/client/legacy/store-source
9
- */
10
- import { facetVisibleBySettings } from "../badge-settings.js";
11
- /**
12
- * 把「store 可能迟到」的两层订阅合成一个稳定订阅面。
13
- *
14
- * @param getStore - 读当前生效的 store(未登记时 undefined)。
15
- * @param subscribeRegistry - 订阅 store 登记变化(提供方 apply 晚于本插件渲染时用它自愈)。
16
- */
17
- export function bridgeLateStoreSource(getStore, subscribeRegistry) {
18
- if (getStore === undefined)
19
- return undefined;
20
- return {
21
- getSnapshot: () => getStore()?.getSnapshot(),
22
- subscribe: (listener) => {
23
- // store 每迟到/替换一次就要重挂它的订阅;登记表变化本身也算一次变化。
24
- let storeUnsubscribe;
25
- let current;
26
- const rewire = () => {
27
- const next = getStore();
28
- if (next === current)
29
- return;
30
- storeUnsubscribe?.();
31
- current = next;
32
- storeUnsubscribe = next?.subscribe(listener);
33
- };
34
- rewire();
35
- const unsubscribeRegistry = subscribeRegistry?.(() => {
36
- rewire();
37
- listener();
38
- });
39
- return () => {
40
- unsubscribeRegistry?.();
41
- storeUnsubscribe?.();
42
- storeUnsubscribe = undefined;
43
- current = undefined;
44
- };
45
- },
46
- };
47
- }
48
- /**
49
- * 安装两个过渡适配器。
50
- *
51
- * @returns 一次性注销函数(挂到 `ctx.effect` 的清理上)。
52
-
53
- /**
54
- * 按设置筛掉被关掉的来源。
55
- *
56
- * 过滤放在**折叠之前**而不是渲染阶段:数字、图标、`aria-label`、悬停明细与"要不要画
57
- * 徽标"因此天然同源,不会出现在 label 里有、计数里没有的情况。
58
- */
59
- export function visibleFacets(entries, settings) {
60
- return entries.filter(entry => facetVisibleBySettings(settings, entry.facet.settingKey));
61
- }
62
- /**
63
- * 从两家 provider 的 client 面拼出登记入参。
64
- *
65
- * 这一层刻意不碰图标、不 `require`:它是桥接里唯一"会拼错"的部分(store 迟到、
66
- * 谁缺席、委托哪个聚合函数),能被测试覆盖才有意义。`require` 与图标各自留在只有一行
67
- * 调用的 `bridge.ts` 与 `register-legacy-facets.tsx` 里。
68
- */
69
- export function assembleLegacySources(clients) {
70
- const schedule = bridgeLateStoreSource(clients.later?.getScheduleSummaryStore, clients.later?.subscribeScheduleSummaryStore);
71
- const waiting = bridgeLateStoreSource(clients.dispatch?.getWaitingSummaryStore, clients.dispatch?.subscribeWaitingSummaryStore);
72
- const summarize = clients.dispatch?.summarizeWaitingGroup;
73
- return {
74
- schedule: schedule === undefined ? undefined : { subscribe: schedule.subscribe, getSnapshot: schedule.getSnapshot },
75
- waiting: waiting === undefined ? undefined : {
76
- subscribe: waiting.subscribe,
77
- getSnapshot: waiting.getSnapshot,
78
- ...(summarize === undefined ? {} : { summarize }),
79
- },
80
- };
81
- }
82
- //# sourceMappingURL=store-source.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-source.js","sourceRoot":"","sources":["../../../../src/client/legacy/store-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,sBAAsB,EAA8B,MAAM,sBAAsB,CAAA;AAKzF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAsI,EACtI,iBAAqE;IAErE,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC5C,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE;QAC5C,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACtB,wCAAwC;YACxC,IAAI,gBAA0C,CAAA;YAC9C,IAAI,OAAoC,CAAA;YACxC,MAAM,MAAM,GAAG,GAAS,EAAE;gBACxB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAA;gBACvB,IAAI,IAAI,KAAK,OAAO;oBAAE,OAAM;gBAC5B,gBAAgB,EAAE,EAAE,CAAA;gBACpB,OAAO,GAAG,IAAI,CAAA;gBACd,gBAAgB,GAAG,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;YAC9C,CAAC,CAAA;YACD,MAAM,EAAE,CAAA;YACR,MAAM,mBAAmB,GAAG,iBAAiB,EAAE,CAAC,GAAG,EAAE;gBACnD,MAAM,EAAE,CAAA;gBACR,QAAQ,EAAE,CAAA;YACZ,CAAC,CAAC,CAAA;YACF,OAAO,GAAG,EAAE;gBACV,mBAAmB,EAAE,EAAE,CAAA;gBACvB,gBAAgB,EAAE,EAAE,CAAA;gBACpB,gBAAgB,GAAG,SAAS,CAAA;gBAC5B,OAAO,GAAG,SAAS,CAAA;YACrB,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,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;AAoCD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,MAAM,QAAQ,GAAG,qBAAqB,CACpC,OAAO,CAAC,KAAK,EAAE,uBAAuB,EAAE,OAAO,CAAC,KAAK,EAAE,6BAA6B,CACrF,CAAA;IACD,MAAM,OAAO,GAAG,qBAAqB,CACnC,OAAO,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,CAAC,QAAQ,EAAE,4BAA4B,CACzF,CAAA;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,qBAAqB,CAAA;IACzD,OAAO;QACL,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;QACnH,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;SAClD;KACF,CAAA;AACH,CAAC"}