dsh-plugin-core 0.1.3 → 0.2.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 (116) hide show
  1. package/README.md +6 -8
  2. package/dist/design/index.d.ts +1 -1
  3. package/dist/design/index.d.ts.map +1 -1
  4. package/dist/design/index.js +1 -1
  5. package/dist/design/index.js.map +1 -1
  6. package/dist/design/style-kit.d.ts +4 -9
  7. package/dist/design/style-kit.d.ts.map +1 -1
  8. package/dist/design/style-kit.js +11 -24
  9. package/dist/design/style-kit.js.map +1 -1
  10. package/dist/design/tokens-css.d.ts +1 -1
  11. package/dist/design/tokens-css.d.ts.map +1 -1
  12. package/dist/design/tokens-css.js +130 -132
  13. package/dist/design/tokens-css.js.map +1 -1
  14. package/dist/explorer/ExplorerPanel.js +14 -14
  15. package/dist/explorer/ExplorerPanel.js.map +1 -1
  16. package/dist/explorer/explorer-css.d.ts +1 -1
  17. package/dist/explorer/explorer-css.d.ts.map +1 -1
  18. package/dist/explorer/explorer-css.js +23 -23
  19. package/dist/explorer/explorer-css.js.map +1 -1
  20. package/dist/explorer/preview/index.js +4 -4
  21. package/dist/explorer/preview/index.js.map +1 -1
  22. package/dist/session/index.js +9 -9
  23. package/dist/session/index.js.map +1 -1
  24. package/dist/session/session-css.d.ts +1 -1
  25. package/dist/session/session-css.js +14 -14
  26. package/dist/session/session-css.js.map +1 -1
  27. package/dist/ui/BackToTop.d.ts +1 -1
  28. package/dist/ui/BackToTop.d.ts.map +1 -1
  29. package/dist/ui/BackToTop.js +5 -5
  30. package/dist/ui/BackToTop.js.map +1 -1
  31. package/dist/ui/Button.js +5 -5
  32. package/dist/ui/Button.js.map +1 -1
  33. package/dist/ui/Card.js +8 -8
  34. package/dist/ui/Card.js.map +1 -1
  35. package/dist/ui/Checkbox.d.ts +2 -2
  36. package/dist/ui/Checkbox.d.ts.map +1 -1
  37. package/dist/ui/Checkbox.js +4 -4
  38. package/dist/ui/Checkbox.js.map +1 -1
  39. package/dist/ui/Chip.d.ts +1 -1
  40. package/dist/ui/Chip.d.ts.map +1 -1
  41. package/dist/ui/Chip.js +2 -2
  42. package/dist/ui/Chip.js.map +1 -1
  43. package/dist/ui/EmptyState.js +1 -1
  44. package/dist/ui/EmptyState.js.map +1 -1
  45. package/dist/ui/ErrorBoundary.js +1 -1
  46. package/dist/ui/ErrorBoundary.js.map +1 -1
  47. package/dist/ui/Field.d.ts +1 -1
  48. package/dist/ui/Field.d.ts.map +1 -1
  49. package/dist/ui/Field.js +19 -19
  50. package/dist/ui/Field.js.map +1 -1
  51. package/dist/ui/FieldHint.js +2 -2
  52. package/dist/ui/FieldHint.js.map +1 -1
  53. package/dist/ui/Loading.d.ts +1 -1
  54. package/dist/ui/Loading.d.ts.map +1 -1
  55. package/dist/ui/Loading.js +9 -9
  56. package/dist/ui/Loading.js.map +1 -1
  57. package/dist/ui/MarqueeText.d.ts +3 -3
  58. package/dist/ui/MarqueeText.js +5 -5
  59. package/dist/ui/MarqueeText.js.map +1 -1
  60. package/dist/ui/Modal.js +5 -5
  61. package/dist/ui/Modal.js.map +1 -1
  62. package/dist/ui/ModelPicker.js +1 -1
  63. package/dist/ui/ModelPicker.js.map +1 -1
  64. package/dist/ui/Picker.js +16 -16
  65. package/dist/ui/Picker.js.map +1 -1
  66. package/dist/ui/SectionHead.d.ts +1 -1
  67. package/dist/ui/SectionHead.js +4 -4
  68. package/dist/ui/SectionHead.js.map +1 -1
  69. package/dist/ui/Segmented.js +5 -5
  70. package/dist/ui/Segmented.js.map +1 -1
  71. package/dist/ui/Textarea.d.ts +2 -2
  72. package/dist/ui/Textarea.js +3 -3
  73. package/dist/ui/Textarea.js.map +1 -1
  74. package/dist/ui/Toast.js +3 -3
  75. package/dist/ui/Toast.js.map +1 -1
  76. package/dist/ui/card-css.d.ts +1 -1
  77. package/dist/ui/card-css.d.ts.map +1 -1
  78. package/dist/ui/card-css.js +22 -22
  79. package/dist/ui/card-css.js.map +1 -1
  80. package/dist/ui/chip-css.d.ts +1 -1
  81. package/dist/ui/chip-css.d.ts.map +1 -1
  82. package/dist/ui/chip-css.js +10 -10
  83. package/dist/ui/chip-css.js.map +1 -1
  84. package/dist/ui/controls-css.d.ts +8 -8
  85. package/dist/ui/controls-css.d.ts.map +1 -1
  86. package/dist/ui/controls-css.js +198 -200
  87. package/dist/ui/controls-css.js.map +1 -1
  88. package/dist/ui/css.d.ts +0 -11
  89. package/dist/ui/css.d.ts.map +1 -1
  90. package/dist/ui/css.js +3 -16
  91. package/dist/ui/css.js.map +1 -1
  92. package/dist/ui/feedback-css.d.ts +1 -1
  93. package/dist/ui/feedback-css.d.ts.map +1 -1
  94. package/dist/ui/feedback-css.js +30 -31
  95. package/dist/ui/feedback-css.js.map +1 -1
  96. package/dist/ui/index.d.ts +1 -1
  97. package/dist/ui/index.d.ts.map +1 -1
  98. package/dist/ui/index.js +2 -2
  99. package/dist/ui/index.js.map +1 -1
  100. package/dist/ui/picker-css.d.ts +1 -1
  101. package/dist/ui/picker-css.d.ts.map +1 -1
  102. package/dist/ui/picker-css.js +32 -33
  103. package/dist/ui/picker-css.js.map +1 -1
  104. package/dist/ui/resizer.d.ts +1 -1
  105. package/dist/ui/resizer.d.ts.map +1 -1
  106. package/dist/ui/resizer.js +1 -1
  107. package/dist/ui/resizer.js.map +1 -1
  108. package/docs/design/architecture.md +3 -3
  109. package/docs/design/features/design.md +5 -7
  110. package/docs/design/features/ui.md +4 -4
  111. package/docs/design/features.md +1 -1
  112. package/docs/design/structure.md +1 -1
  113. package/docs/design/style.md +18 -17
  114. package/docs/examples/integration.md +3 -5
  115. package/docs/requirements.md +8 -12
  116. package/package.json +1 -1
package/dist/ui/css.js CHANGED
@@ -7,19 +7,6 @@ import { CHIP_CSS } from './chip-css.js';
7
7
  import { EXPLORER_CSS } from '../explorer/explorer-css.js';
8
8
  import { SESSION_CSS } from '../session/session-css.js';
9
9
  export const CONTROLS_DOMAIN = 'controls';
10
- /**
11
- * 把 CSS 模板里的 **变量前缀** `--tdt-` 换成当前插件的。
12
- *
13
- * ⚠️ 类名 `dsh-tdt-` **故意不换**:搬来的控件里 className 是硬编码的 `dsh-tdt-btn` 这类字面量
14
- * (模板字符串里也拼接了),只换 CSS 侧会让选择器与 className 对不上、样式整片失效。
15
- * 要连类名一起隔离,必须同步改造每个控件的 className —— 那是另一个任务。
16
- *
17
- * 已知限制:两个插件若引的 core 版本不同,`.dsh-tdt-*` 规则会互相覆盖(内容相同时无害)。
18
- * 主防线是 style 标签 id(`createStyleKit({ id })`)与变量前缀隔离。
19
- */
20
- export function buildCss(template, prefix) {
21
- return template.split('--tdt-').join(`--${prefix}-`);
22
- }
23
10
  const CONTROLS_CSS = [
24
11
  SEGMENTED_CSS,
25
12
  BUTTON_CSS,
@@ -41,9 +28,9 @@ const CONTROLS_CSS = [
41
28
  *
42
29
  * 为什么是模块级而不是 React Context:core 会被**内联进每个插件各自的 bundle**,
43
30
  * 模块级变量天然按插件隔离(不像共享运行时那样会互相踩)。
44
- * 插件启动时 `setStyleKit(createStyleKit({ id, prefix }))` 一次即可;不设就走默认 kit。
31
+ * 插件启动时 `setStyleKit(createStyleKit({ id }))` 一次即可;不设就走默认 kit。
45
32
  */
46
- let current = createStyleKit({ id: 'dsh-plugin-core-ui', prefix: 'dsh' });
33
+ let current = createStyleKit({ id: 'dsh-plugin-core-ui' });
47
34
  export function setStyleKit(kit) {
48
35
  current = kit;
49
36
  }
@@ -53,6 +40,6 @@ export function getStyleKit() {
53
40
  /** 登记 token + 控件样式并确保挂载(幂等)。 */
54
41
  export function ensureControls(kit = current) {
55
42
  kit.registerStyle('tokens', kit.tokensCss);
56
- kit.applyStyle(CONTROLS_DOMAIN, buildCss(CONTROLS_CSS, kit.prefix));
43
+ kit.applyStyle(CONTROLS_DOMAIN, CONTROLS_CSS);
57
44
  }
58
45
  //# sourceMappingURL=css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,MAAc;IACvD,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,UAAU;IACV,SAAS;IACT,YAAY;IACZ,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,IAAI,OAAO,GAAa,cAAc,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AAEnF,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO,GAAG,GAAG,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,MAAgB,OAAO;IACpD,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1C,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AACrE,CAAC"}
1
+ {"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/ui/css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAA;AAClE,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC,MAAM,YAAY,GAAG;IACnB,aAAa;IACb,UAAU;IACV,SAAS;IACT,YAAY;IACZ,UAAU;IACV,WAAW;IACX,eAAe;IACf,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ;;;;;;GAMG;AACH,IAAI,OAAO,GAAa,cAAc,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAA;AAEpE,MAAM,UAAU,WAAW,CAAC,GAAa;IACvC,OAAO,GAAG,GAAG,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,MAAgB,OAAO;IACpD,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;IAC1C,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;AAC/C,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const FEEDBACK_CSS = "\n.dsh-tdt-modal-mask{\n position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;\n background:rgba(15,23,42,.45);\n}\n.dsh-tdt-modal{\n display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;\n background:var(--tdt-surface-base);border:1px solid var(--tdt-border);\n border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;\n}\n.dsh-tdt-modal__head{\n display:flex;align-items:center;gap:8px;padding:12px 14px;\n border-bottom:1px solid var(--tdt-border-faint);color:var(--tdt-fg);font-size:14px;\n}\n.dsh-tdt-modal__title{flex:1;min-width:0}\n/* \u5173\u95ED\u6309\u94AE\uFF1A24\u00D724 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF0C\u4E0D\u501F\u7528 Picker \u7684\u89E6\u53D1\u5668\u76AE\u80A4\uFF08\u90A3\u4EFD\u5E26 min-width:120px\uFF09\u3002 */\n.dsh-tdt-modal__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:24px;height:24px;padding:0;border:none;border-radius:var(--tdt-radius-sm);\n background:transparent;color:var(--tdt-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;\n transition:background-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease);\n}\n.dsh-tdt-modal__close:hover{background:var(--tdt-hover);color:var(--tdt-fg)}\n.dsh-tdt-modal__close:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px}\n.dsh-tdt-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}\n.dsh-tdt-modal__foot{\n display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;\n border-top:1px solid var(--tdt-border-faint);\n}\n.dsh-tdt-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dsh-tdt-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--tdt-fg);\n background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dsh-tdt-toast--success{color:var(--tdt-success);border-color:color-mix(in srgb,var(--tdt-success) 40%,transparent)}\n.dsh-tdt-toast--error{color:var(--tdt-danger);border-color:color-mix(in srgb,var(--tdt-danger) 40%,transparent)}\n.dsh-tdt-empty{\n display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;\n padding:24px;color:var(--tdt-fg-3);font-size:13px;text-align:center;\n}\n.dsh-tdt-error{\n padding:12px 14px;border-radius:8px;font-size:13px;\n color:var(--tdt-danger);background:color-mix(in srgb,var(--tdt-danger) 10%,transparent);\n border:1px solid color-mix(in srgb,var(--tdt-danger) 30%,transparent);\n}\n.dsh-tdt-error__retry{\n margin-top:8px;color:var(--tdt-link);cursor:pointer;background:none;border:none;padding:0;\n}\n";
1
+ export declare const FEEDBACK_CSS = "\n.dshpc-modal-mask{\n position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;\n background:rgba(15,23,42,.45);\n}\n.dshpc-modal{\n display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;\n background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);\n border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;\n}\n.dshpc-modal__head{\n display:flex;align-items:center;gap:8px;padding:12px 14px;\n border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;\n}\n.dshpc-modal__title{flex:1;min-width:0}\n/* \u5173\u95ED\u6309\u94AE\uFF1A24\u00D724 \u65B9\u89D2\u56FE\u6807\u4F4D\uFF0C\u4E0D\u501F\u7528 Picker \u7684\u89E6\u53D1\u5668\u76AE\u80A4\uFF08\u90A3\u4EFD\u5E26 min-width:120px\uFF09\u3002 */\n.dshpc-modal__close{\n display:inline-flex;align-items:center;justify-content:center;flex:none;\n width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);\n background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;\n transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);\n}\n.dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}\n.dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}\n.dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}\n.dshpc-modal__foot{\n display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;\n border-top:1px solid var(--dshpc-border-faint);\n}\n.dshpc-toast-host{\n position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);\n display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;\n}\n.dshpc-toast{\n padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n box-shadow:0 8px 24px rgba(15,23,42,.16);\n}\n.dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}\n.dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}\n.dshpc-empty{\n display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;\n padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;\n}\n.dshpc-error{\n padding:12px 14px;border-radius:8px;font-size:13px;\n color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);\n border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);\n}\n.dshpc-error__retry{\n margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;\n}\n";
2
2
  //# sourceMappingURL=feedback-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,2vFAoDxB,CAAA"}
1
+ {"version":3,"file":"feedback-css.d.ts","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,+wFAoDxB,CAAA"}
@@ -1,57 +1,56 @@
1
1
  // 反馈件(Modal / toast / 空态 / 错误边界)样式。
2
- // 类名固定 `dsh-tdt-*`(与组件硬编码 className 对齐,见 css.ts 的 buildCss 说明);
3
- // 颜色尺寸吃 token 变量(--tdt-*),运行时按插件前缀替换。
2
+ // 类名与 token 变量统一 dshpc 前缀。
4
3
  export const FEEDBACK_CSS = `
5
- .dsh-tdt-modal-mask{
4
+ .dshpc-modal-mask{
6
5
  position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;
7
6
  background:rgba(15,23,42,.45);
8
7
  }
9
- .dsh-tdt-modal{
8
+ .dshpc-modal{
10
9
  display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;
11
- background:var(--tdt-surface-base);border:1px solid var(--tdt-border);
10
+ background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);
12
11
  border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;
13
12
  }
14
- .dsh-tdt-modal__head{
13
+ .dshpc-modal__head{
15
14
  display:flex;align-items:center;gap:8px;padding:12px 14px;
16
- border-bottom:1px solid var(--tdt-border-faint);color:var(--tdt-fg);font-size:14px;
15
+ border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;
17
16
  }
18
- .dsh-tdt-modal__title{flex:1;min-width:0}
17
+ .dshpc-modal__title{flex:1;min-width:0}
19
18
  /* 关闭按钮:24×24 方角图标位,不借用 Picker 的触发器皮肤(那份带 min-width:120px)。 */
20
- .dsh-tdt-modal__close{
19
+ .dshpc-modal__close{
21
20
  display:inline-flex;align-items:center;justify-content:center;flex:none;
22
- width:24px;height:24px;padding:0;border:none;border-radius:var(--tdt-radius-sm);
23
- background:transparent;color:var(--tdt-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
24
- transition:background-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease);
25
- }
26
- .dsh-tdt-modal__close:hover{background:var(--tdt-hover);color:var(--tdt-fg)}
27
- .dsh-tdt-modal__close:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px}
28
- .dsh-tdt-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
29
- .dsh-tdt-modal__foot{
21
+ width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);
22
+ background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
23
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);
24
+ }
25
+ .dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}
26
+ .dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}
27
+ .dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
28
+ .dshpc-modal__foot{
30
29
  display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;
31
- border-top:1px solid var(--tdt-border-faint);
30
+ border-top:1px solid var(--dshpc-border-faint);
32
31
  }
33
- .dsh-tdt-toast-host{
32
+ .dshpc-toast-host{
34
33
  position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);
35
34
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;
36
35
  }
37
- .dsh-tdt-toast{
38
- padding:8px 14px;border-radius:8px;font-size:13px;color:var(--tdt-fg);
39
- background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);
36
+ .dshpc-toast{
37
+ padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);
38
+ background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
40
39
  box-shadow:0 8px 24px rgba(15,23,42,.16);
41
40
  }
42
- .dsh-tdt-toast--success{color:var(--tdt-success);border-color:color-mix(in srgb,var(--tdt-success) 40%,transparent)}
43
- .dsh-tdt-toast--error{color:var(--tdt-danger);border-color:color-mix(in srgb,var(--tdt-danger) 40%,transparent)}
44
- .dsh-tdt-empty{
41
+ .dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}
42
+ .dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}
43
+ .dshpc-empty{
45
44
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
46
- padding:24px;color:var(--tdt-fg-3);font-size:13px;text-align:center;
45
+ padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;
47
46
  }
48
- .dsh-tdt-error{
47
+ .dshpc-error{
49
48
  padding:12px 14px;border-radius:8px;font-size:13px;
50
- color:var(--tdt-danger);background:color-mix(in srgb,var(--tdt-danger) 10%,transparent);
51
- border:1px solid color-mix(in srgb,var(--tdt-danger) 30%,transparent);
49
+ color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);
50
+ border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);
52
51
  }
53
- .dsh-tdt-error__retry{
54
- margin-top:8px;color:var(--tdt-link);cursor:pointer;background:none;border:none;padding:0;
52
+ .dshpc-error__retry{
53
+ margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;
55
54
  }
56
55
  `;
57
56
  //# sourceMappingURL=feedback-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,gEAAgE;AAChE,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAA"}
1
+ {"version":3,"file":"feedback-css.js","sourceRoot":"","sources":["../../src/ui/feedback-css.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAA"}
@@ -1,4 +1,4 @@
1
- export { CONTROLS_DOMAIN, buildCss, ensureControls, getStyleKit, setStyleKit } from './css.js';
1
+ export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './css.js';
2
2
  export { filterGroups, flattenOptions, groupOf, labelsOf, toGroups, toggleValue, type PickerGroup, type PickerOption, } from './picker-logic.js';
3
3
  export { Picker, type PickerProps, type PickerSize } from './Picker.js';
4
4
  export { ModelPicker, type ModelPickerProps, type ModelPickerVariant } from './ModelPicker.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC9F,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
package/dist/ui/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // ui —— 基础控件(依赖 design)。
2
- // 使用前:插件启动时 `setStyleKit(createStyleKit({ id, prefix }))` 一次,
2
+ // 使用前:插件启动时 `setStyleKit(createStyleKit({ id }))` 一次,
3
3
  // 再调一次 `ensureControls()` 把 token + 控件样式挂上(幂等)。
4
- export { CONTROLS_DOMAIN, buildCss, ensureControls, getStyleKit, setStyleKit } from './css.js';
4
+ export { CONTROLS_DOMAIN, ensureControls, getStyleKit, setStyleKit } from './css.js';
5
5
  export { filterGroups, flattenOptions, groupOf, labelsOf, toGroups, toggleValue, } from './picker-logic.js';
6
6
  export { Picker } from './Picker.js';
7
7
  export { ModelPicker } from './ModelPicker.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,8DAA8D;AAC9D,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC9F,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,GAGhB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,sDAAsD;AACtD,gDAAgD;AAChD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EACL,UAAU,EACV,eAAe,GAGhB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAE3E,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const PICKER_CSS = "\n.dsh-tdt-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dsh-tdt-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--tdt-fg);background:var(--tdt-surface-1);\n border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);cursor:pointer;\n}\n.dsh-tdt-picker__trigger:disabled{color:var(--tdt-fg-dim);cursor:not-allowed;opacity:.7}\n.dsh-tdt-picker__caret{color:var(--tdt-fg-3);font-size:10px}\n.dsh-tdt-picker__menu{\n position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;\n max-height:280px;overflow:auto;padding:4px;\n background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);\n border-radius:var(--tdt-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* \u5411\u4E0A\u5C55\u5F00\uFF08\u89E6\u53D1\u5668\u9760\u8FD1\u89C6\u53E3\u5E95\u90E8\u65F6\u7528 placement=\"up\"\uFF09\u3002 */\n.dsh-tdt-picker__menu--up{top:auto;bottom:calc(100% + 4px)}\n/* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */\n.dsh-tdt-picker__trigger--sm{height:24px;font-size:12px}\n.dsh-tdt-picker__trigger--lg{height:32px}\n/* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */\n.dsh-tdt-picker__option[data-active='true']{background:var(--tdt-surface-sunken);outline:1px solid var(--tdt-border)}\n.dsh-tdt-picker__option--clear{color:var(--tdt-fg-3)}\n.dsh-tdt-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--tdt-fg);background:var(--tdt-surface-sunken);\n border:1px solid var(--tdt-border-faint);border-radius:var(--tdt-radius-md);outline:none;\n}\n.dsh-tdt-picker__group-label{\n padding:6px 8px 2px;color:var(--tdt-fg-3);font-size:11px;\n}\n.dsh-tdt-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--tdt-radius-sm);cursor:pointer;\n color:var(--tdt-fg);white-space:nowrap;\n}\n.dsh-tdt-picker__option:hover{background:var(--tdt-surface-sunken)}\n.dsh-tdt-picker__option--active{background:var(--tdt-open-bg);color:var(--tdt-business)}\n.dsh-tdt-picker__option--disabled{color:var(--tdt-fg-dim);cursor:not-allowed}\n.dsh-tdt-picker__tick{width:12px;color:var(--tdt-business)}\n.dsh-tdt-picker__empty{padding:8px;color:var(--tdt-fg-3);text-align:center}\n.dsh-tdt-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--tdt-radius-sm);\n color:var(--tdt-warning-label);background:color-mix(in srgb,var(--tdt-warning) 12%,transparent);\n font-size:11px;\n}\n.dsh-tdt-picker__row{display:flex;align-items:center;gap:8px}\n";
1
+ export declare const PICKER_CSS = "\n.dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}\n.dshpc-picker__trigger{\n display:inline-flex;align-items:center;justify-content:space-between;gap:6px;\n min-width:120px;max-width:100%;height:28px;padding:0 8px;\n color:var(--dshpc-fg);background:var(--dshpc-surface-1);\n border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;\n}\n.dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}\n.dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}\n.dshpc-picker__menu{\n position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;\n max-height:280px;overflow:auto;padding:4px;\n background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);\n border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);\n}\n/* \u5411\u4E0A\u5C55\u5F00\uFF08\u89E6\u53D1\u5668\u9760\u8FD1\u89C6\u53E3\u5E95\u90E8\u65F6\u7528 placement=\"up\"\uFF09\u3002 */\n.dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}\n/* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */\n.dshpc-picker__trigger--sm{height:24px;font-size:12px}\n.dshpc-picker__trigger--lg{height:32px}\n/* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */\n.dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}\n.dshpc-picker__option--clear{color:var(--dshpc-fg-3)}\n.dshpc-picker__search{\n width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;\n color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);\n border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;\n}\n.dshpc-picker__group-label{\n padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;\n}\n.dshpc-picker__option{\n display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;\n color:var(--dshpc-fg);white-space:nowrap;\n}\n.dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}\n.dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}\n.dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}\n.dshpc-picker__tick{width:12px;color:var(--dshpc-business)}\n.dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}\n.dshpc-picker__degraded{\n padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);\n color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);\n font-size:11px;\n}\n.dshpc-picker__row{display:flex;align-items:center;gap:8px}\n";
2
2
  //# sourceMappingURL=picker-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,irFA+CtB,CAAA"}
1
+ {"version":3,"file":"picker-css.d.ts","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,isFA+CtB,CAAA"}
@@ -1,52 +1,51 @@
1
1
  // 选择器(Picker / ModelPicker)样式。
2
- // 类名前缀固定 `dsh-tdt-picker`(与组件里硬编码的 className 对齐,见 css.ts 的 buildCss 说明);
3
- // 颜色尺寸一律吃 token 变量(--tdt-*),运行时按插件前缀替换。
2
+ // 类名与 token 变量统一 dshpc 前缀。
4
3
  export const PICKER_CSS = `
5
- .dsh-tdt-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
6
- .dsh-tdt-picker__trigger{
4
+ .dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
5
+ .dshpc-picker__trigger{
7
6
  display:inline-flex;align-items:center;justify-content:space-between;gap:6px;
8
7
  min-width:120px;max-width:100%;height:28px;padding:0 8px;
9
- color:var(--tdt-fg);background:var(--tdt-surface-1);
10
- border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);cursor:pointer;
8
+ color:var(--dshpc-fg);background:var(--dshpc-surface-1);
9
+ border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;
11
10
  }
12
- .dsh-tdt-picker__trigger:disabled{color:var(--tdt-fg-dim);cursor:not-allowed;opacity:.7}
13
- .dsh-tdt-picker__caret{color:var(--tdt-fg-3);font-size:10px}
14
- .dsh-tdt-picker__menu{
11
+ .dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}
12
+ .dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}
13
+ .dshpc-picker__menu{
15
14
  position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;
16
15
  max-height:280px;overflow:auto;padding:4px;
17
- background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);
18
- border-radius:var(--tdt-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
16
+ background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
17
+ border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
19
18
  }
20
19
  /* 向上展开(触发器靠近视口底部时用 placement="up")。 */
21
- .dsh-tdt-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
20
+ .dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
22
21
  /* 尺寸档(与 Field 的 sm/md/lg 对应)。 */
23
- .dsh-tdt-picker__trigger--sm{height:24px;font-size:12px}
24
- .dsh-tdt-picker__trigger--lg{height:32px}
22
+ .dshpc-picker__trigger--sm{height:24px;font-size:12px}
23
+ .dshpc-picker__trigger--lg{height:32px}
25
24
  /* 键盘游标所在项(无 hover 也要看得见)。 */
26
- .dsh-tdt-picker__option[data-active='true']{background:var(--tdt-surface-sunken);outline:1px solid var(--tdt-border)}
27
- .dsh-tdt-picker__option--clear{color:var(--tdt-fg-3)}
28
- .dsh-tdt-picker__search{
25
+ .dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}
26
+ .dshpc-picker__option--clear{color:var(--dshpc-fg-3)}
27
+ .dshpc-picker__search{
29
28
  width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;
30
- color:var(--tdt-fg);background:var(--tdt-surface-sunken);
31
- border:1px solid var(--tdt-border-faint);border-radius:var(--tdt-radius-md);outline:none;
29
+ color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);
30
+ border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;
32
31
  }
33
- .dsh-tdt-picker__group-label{
34
- padding:6px 8px 2px;color:var(--tdt-fg-3);font-size:11px;
32
+ .dshpc-picker__group-label{
33
+ padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;
35
34
  }
36
- .dsh-tdt-picker__option{
37
- display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--tdt-radius-sm);cursor:pointer;
38
- color:var(--tdt-fg);white-space:nowrap;
35
+ .dshpc-picker__option{
36
+ display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;
37
+ color:var(--dshpc-fg);white-space:nowrap;
39
38
  }
40
- .dsh-tdt-picker__option:hover{background:var(--tdt-surface-sunken)}
41
- .dsh-tdt-picker__option--active{background:var(--tdt-open-bg);color:var(--tdt-business)}
42
- .dsh-tdt-picker__option--disabled{color:var(--tdt-fg-dim);cursor:not-allowed}
43
- .dsh-tdt-picker__tick{width:12px;color:var(--tdt-business)}
44
- .dsh-tdt-picker__empty{padding:8px;color:var(--tdt-fg-3);text-align:center}
45
- .dsh-tdt-picker__degraded{
46
- padding:6px 8px;margin-bottom:4px;border-radius:var(--tdt-radius-sm);
47
- color:var(--tdt-warning-label);background:color-mix(in srgb,var(--tdt-warning) 12%,transparent);
39
+ .dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}
40
+ .dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}
41
+ .dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}
42
+ .dshpc-picker__tick{width:12px;color:var(--dshpc-business)}
43
+ .dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}
44
+ .dshpc-picker__degraded{
45
+ padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);
46
+ color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);
48
47
  font-size:11px;
49
48
  }
50
- .dsh-tdt-picker__row{display:flex;align-items:center;gap:8px}
49
+ .dshpc-picker__row{display:flex;align-items:center;gap:8px}
51
50
  `;
52
51
  //# sourceMappingURL=picker-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,yEAAyE;AACzE,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CzB,CAAA"}
1
+ {"version":3,"file":"picker-css.js","sourceRoot":"","sources":["../../src/ui/picker-css.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CzB,CAAA"}
@@ -17,7 +17,7 @@ export interface ResizeOptions {
17
17
  onMove: (width: number) => void;
18
18
  /** 松手:提交最终宽度(落 state / 持久化)。 */
19
19
  onCommit: (width: number) => void;
20
- /** 拖拽期间挂到 #dsh-tdt-root 的类(如预览 dock 的 `dsh-tdt-resizing` 令 iframe pointer-events:none);松手移除。 */
20
+ /** 拖拽期间挂到 #dshpc-root 的类(如预览 dock 的 `dshpc-resizing` 令 iframe pointer-events:none);松手移除。 */
21
21
  rootClass?: string;
22
22
  /** rAF 节流(预览 dock 用,避免每帧整页重排)。 */
23
23
  rafThrottle?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkChE"}
1
+ {"version":3,"file":"resizer.d.ts","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC5D,wEAAwE;IACxE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAkChE"}
@@ -5,7 +5,7 @@ export function startResizeLayoutWidth(opts) {
5
5
  const prevUserSelect = body.style.userSelect;
6
6
  body.style.userSelect = 'none';
7
7
  window.getSelection()?.removeAllRanges();
8
- const rootEl = document.getElementById('dsh-tdt-root');
8
+ const rootEl = document.getElementById('dshpc-root');
9
9
  if (opts.rootClass !== undefined)
10
10
  rootEl?.classList.add(opts.rootClass);
11
11
  let frame = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAsBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;IACtD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAU,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YACxB,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAM;YACvB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAA;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"resizer.js","sourceRoot":"","sources":["../../src/ui/resizer.ts"],"names":[],"mappings":"AAsBA,4DAA4D;AAC5D,MAAM,UAAU,sBAAsB,CAAC,IAAmB;IACxD,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAA;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,YAAY,EAAE,EAAE,eAAe,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,IAAI,GAAG,CAAC,OAAe,EAAU,EAAE;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAQ,EAAE;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAA;YACxB,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAM;YACvB,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;QACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC;YAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAA;QACtC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC"}
@@ -41,7 +41,7 @@ utils(谁都不依赖,谁都可以用)
41
41
  ## 样式注入(本包最特殊的机制)
42
42
 
43
43
  ```
44
- 插件启动 ──▶ setStyleKit(createStyleKit({ id, prefix }))
44
+ 插件启动 ──▶ setStyleKit(createStyleKit({ id }))
45
45
  │
46
46
  ▼
47
47
  ensureControls() ──▶ 往 <head> 插一个 <style id="{id}">
@@ -51,8 +51,8 @@ utils(谁都不依赖,谁都可以用)
51
51
  为什么必须运行时注入:DSH 客户端产物是 `window.__ModuleLoader__.load({ id, factory })` 的
52
52
  CJS 闭包,`import './x.css'` 只会产出独立 css 资源、**内核不加载它** ⇒ CSS 只能以字符串在运行时注入。
53
53
 
54
- 为什么是工厂而不是模块级单例:单例只有一个固定 style id 与固定变量前缀,多个插件同处一页时会抢同一个
55
- `<style>` 标签、变量互相覆盖。每个插件领一套自己的(`id` + `prefix`)。
54
+ 为什么是工厂而不是模块级单例:单例只有一个固定 style id,多个插件同处一页时会抢同一个 `<style>` 标签、
55
+ 后挂载的覆盖先挂载的。每个插件领一套自己的(`id` 按插件唯一);变量前缀全生态统一 `dshpc`。
56
56
 
57
57
  为什么 core 可以用模块级变量存「当前 kit」:core 会被**内联进每个插件各自的 bundle**(不是共享运行时),
58
58
  模块级变量天然按插件隔离,不像共享模块那样会互相踩。
@@ -9,7 +9,6 @@
9
9
  | 符号 | 说明 |
10
10
  |---|---|
11
11
  | `createStyleKit(options)` | 领一套本插件专属的样式设施(**必调**) |
12
- | `buildTokensCss(prefix)` | 只生成替换过前缀的 token CSS(一般不用直接调) |
13
12
  | `DARK_THEME_SELECTOR` | 明暗判据选择器常量 `body[data-ds-dark-theme]` |
14
13
  | `type StyleKit` / `StyleKitOptions` | 类型 |
15
14
 
@@ -18,13 +17,12 @@
18
17
  | 参数 | 类型 | 必填 | 默认 | 说明 |
19
18
  |---|---|---|---|---|
20
19
  | `id` | `string` | 是 | — | `<style>` 标签 id,**多插件同页靠它互不覆盖**,必须插件内唯一。空串抛错 |
21
- | `prefix` | `string` | 是 | — | CSS 变量前缀,如 `acme` ⇒ `--acme-fg`。必须字母开头、只含字母数字与连字符,否则抛错 |
22
20
 
23
21
  返回的 `StyleKit`:
24
22
 
25
23
  | 成员 | 说明 |
26
24
  |---|---|
27
- | `id` / `prefix` | 回显 |
25
+ | `id` | 回显 |
28
26
  | `tokensCss` | 已替换前缀的 token CSS 文本 |
29
27
  | `cssVar(name)` | 拼变量名:`cssVar('fg')` ⇒ `--acme-fg` |
30
28
  | `registerStyle(domain, css)` | 登记一个域的 CSS;同名重复登记 = 覆盖 |
@@ -37,10 +35,10 @@
37
35
  ```ts
38
36
  import { createStyleKit } from 'dsh-plugin-core/design'
39
37
 
40
- const kit = createStyleKit({ id: 'dsh-task-reminder-ui', prefix: 'reminder' })
38
+ const kit = createStyleKit({ id: 'dsh-task-reminder-ui' })
41
39
  kit.applyStyle('tokens', kit.tokensCss)
42
40
  // 之后自己的样式域:
43
- kit.applyStyle('reminder-widget', '.reminder-widget{color:var(--reminder-fg)}')
41
+ kit.applyStyle('widget', '.widget{color:var(--dshpc-fg)}')
44
42
  ```
45
43
 
46
44
  ## token 口径
@@ -52,6 +50,6 @@ token 来自 `dsh-task-dispatch-table/src/client/ui/tokens.ts` 的整段提取
52
50
 
53
51
  ## 定制边界
54
52
 
55
- - token 的**前缀**可参数化;token 的**内容**(有哪些变量、值是什么)是本包定的审美标准,
56
- 消费方通过覆盖变量值来适配,不要改本包源码。
53
+ - token 的**前缀固定 `dshpc`**(不参数化、不按插件改名);token 的**内容**(有哪些变量、值是什么)
54
+ 是本包定的审美标准,消费方通过覆盖变量值来适配,不要改本包源码。
57
55
  - 要整套换肤:给同一批变量名赋新值即可,不需要 fork。
@@ -10,7 +10,7 @@
10
10
  import { createStyleKit } from 'dsh-plugin-core/design'
11
11
  import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
12
12
 
13
- setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui', prefix: 'reminder' }))
13
+ setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui' }))
14
14
  ensureControls()
15
15
  ```
16
16
 
@@ -153,9 +153,9 @@ h(StripCard, {
153
153
  }, h('div', null, '标题 + 元信息'))
154
154
  ```
155
155
 
156
- `Chip`:小标签,token 用现成的 `--tdt-chip-bg`;传 `onClick` 才是可点的。
156
+ `Chip`:小标签,token 用现成的 `--dshpc-chip-bg`;传 `onClick` 才是可点的。
157
157
 
158
- **语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.dsh-tdt-iconbtn`),
158
+ **语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.dshpc-iconbtn`),
159
159
  不要拿 `Chip` 当图标底板——同一个类名两套皮肤(28px 定宽 vs 胶囊形)会互相覆盖、把文字挤成一列。
160
160
  现在一套皮肤只允许出现一次,由 `test/css-contract.test.mjs` 盯着。
161
161
 
@@ -179,7 +179,7 @@ h(StripCard, {
179
179
  | 组件 / 函数 | 说明 |
180
180
  |---|---|
181
181
  | `showToast(message, opts?)` | **命令式**,不要求挂组件。`opts: { variant?: 'info' \| 'success' \| 'error', durationMs? }`(默认 2600ms)。无 `document` 静默跳过 |
182
- | `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `dsh-tdt-main` |
182
+ | `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `dshpc-main` |
183
183
  | `RunningBlocks()` | 运行中的占位块 |
184
184
  | `EmptyState({ text?, icon?, action?, translate? })` | 统一空态 |
185
185
  | `ErrorBoundary({ fallback?, onError?, translate? })` | class 组件;子组件抛错不让整个插件白屏,默认给「出错了 + 重试」 |
@@ -4,7 +4,7 @@
4
4
 
5
5
  | 子路径 | 提供什么 | 详细文档 |
6
6
  |---|---|---|
7
- | `dsh-plugin-core/design` | token 变量表(含深色段)、`createStyleKit` 注入器工厂、`DARK_THEME_SELECTOR`、`buildTokensCss` | [`features/design.md`](features/design.md) |
7
+ | `dsh-plugin-core/design` | token 变量表(含深色段)、`createStyleKit` 注入器工厂、`DARK_THEME_SELECTOR` | [`features/design.md`](features/design.md) |
8
8
  | `dsh-plugin-core/ui` | 控件:Button / IconButton / Segmented / Textarea / Checkbox / Input 家族 / Picker / ModelPicker / WorkspacePicker / FilePicker / **Card** / **StripCard** / **Chip** / Modal / toast / Loading / SectionHead / MarqueeText / LiveText / BackToTop / resizer / EmptyState / ErrorBoundary | [`features/ui.md`](features/ui.md) |
9
9
  | `dsh-plugin-core/utils` | 日期(含相对时间过去/未来)、字符串、字节/计数、时间区间、HTTP 取数、内置中英多语言 | [`features/utils.md`](features/utils.md) |
10
10
  | `dsh-plugin-core/explorer` | `ExplorerPanel`(面包屑 + 目录树 + 预览)、`WorkspaceFilesFace` 契约与路径工具(**不含选择器**——选工作区/选文件在 ui) | [`features/explorer.md`](features/explorer.md) |
@@ -33,7 +33,7 @@ dsh-plugin-core/
33
33
  │
34
34
  ├── design/ ① 设计层 —— 只放「值」和「注入机制」,零 React
35
35
  │ ├── tokens ✅ 颜色 / 字号 / 间距 / 圆角 / 层级(别名官方 --dsw-alias-*)
36
- │ └── style-kit ✅ 运行时注入 <style>,createStyleKit({ id, prefix })
36
+ │ └── style-kit ✅ 运行时注入 <style>,createStyleKit({ id })
37
37
  │
38
38
  ├── ui/ ② 基础控件 —— 纯零件 + 可复用基础能力(依赖 design)
39
39
  │ ├── official.ts ✅ 全仓唯一 import 官方 primitives 的入口(L1)
@@ -7,16 +7,17 @@ token 口径、注入器、明暗判据、定制边界。规则依据见 `docs/d
7
7
  客户端产物是 `window.__ModuleLoader__.load({ id, factory })` 的 CJS 闭包,
8
8
  `import './x.css'` 只会产出独立 css 资源、**内核不加载它** ⇒ CSS 只能以 TS 字符串在运行时打进 `<style>`。
9
9
 
10
- ## 前缀要换几处?—— 只换变量,不换类名
10
+ ## 前缀规则
11
11
 
12
- | 前缀 | 处理 | 原因 |
13
- |---|---|---|
14
- | 变量 `--tdt-` | **换**成 `--<插件前缀>-` | 多插件同页必须隔离,否则变量互相覆盖 |
15
- | 类名 `dsh-tdt-` | **保持原样** | 控件里的 className 是硬编码字面量,只换 CSS 侧会让选择器与 className 对不上、样式整片失效 |
12
+ 变量与类名**全生态统一 `dshpc`**,代码里直接写死,不存在按插件替换这回事。
16
13
 
17
- > 这条是踩过坑定下来的(曾因两处一起换导致控件样式全丢,见 `ledger` 缺陷修复任务)。
18
- > **已知限制**:两个插件若引的 core 版本不同,`.dsh-tdt-*` 规则会互相覆盖(同版本内容一致、无害)。
19
- > 主防线是 style 标签 id(`createStyleKit({ id })`)与变量前缀隔离。
14
+ | 名称 | 规则 |
15
+ |---|---|
16
+ | 变量 `--dshpc-*` | 直接使用;token 定义与控件样式都写这个前缀 |
17
+ | 类名 `dshpc-*` | 必须与控件里硬编码的 className 逐字一致,改一处就得全改 |
18
+
19
+ > **已知限制**:两个插件若引的 core 版本不同,`.dshpc-*` 规则会互相覆盖(同版本内容一致、无害)。
20
+ > 隔离靠 style 标签 id(`createStyleKit({ id })`)。
20
21
 
21
22
  ## 明暗判据(硬约束)
22
23
 
@@ -35,13 +36,13 @@ token 原文提取自 `dsh-task-dispatch-table/src/client/ui/tokens.ts`,含深
35
36
 
36
37
  | 类别 | 例 |
37
38
  |---|---|
38
- | 前景 / 背景面 | `--tdt-fg` `--tdt-fg-3` `--tdt-fg-4` `--tdt-surface-1` `--tdt-surface-2` `--tdt-surface-sunken` `--tdt-surface-menu` `--tdt-surface-base` |
39
- | 边框 | `--tdt-border` `--tdt-border-faint` |
40
- | 间距 | `--tdt-space-1` … `--tdt-space-3` |
41
- | 字号 / 行高 | `--tdt-font-sm` `--tdt-font-lg` `--tdt-line-sm` `--tdt-line-md` `--tdt-line-lg` |
42
- | 语义色 | `--tdt-business` `--tdt-success` `--tdt-danger` `--tdt-warning` `--tdt-link` |
43
- | 语义面 | `--tdt-open-bg` `--tdt-open-bg-soft` `--tdt-chip-bg` `--tdt-chip-bg-hover` |
44
- | 代码 | `--tdt-code-surface` `--tdt-code-font` |
39
+ | 前景 / 背景面 | `--dshpc-fg` `--dshpc-fg-3` `--dshpc-fg-4` `--dshpc-surface-1` `--dshpc-surface-2` `--dshpc-surface-sunken` `--dshpc-surface-menu` `--dshpc-surface-base` |
40
+ | 边框 | `--dshpc-border` `--dshpc-border-faint` |
41
+ | 间距 | `--dshpc-space-1` … `--dshpc-space-3` |
42
+ | 字号 / 行高 | `--dshpc-font-sm` `--dshpc-font-lg` `--dshpc-line-sm` `--dshpc-line-md` `--dshpc-line-lg` |
43
+ | 语义色 | `--dshpc-business` `--dshpc-success` `--dshpc-danger` `--dshpc-warning` `--dshpc-link` |
44
+ | 语义面 | `--dshpc-open-bg` `--dshpc-open-bg-soft` `--dshpc-chip-bg` `--dshpc-chip-bg-hover` |
45
+ | 代码 | `--dshpc-code-surface` `--dshpc-code-font` |
45
46
 
46
47
  完整清单以 `src/design/tokens-css.ts` 为准(**真源在代码,不在这里抄第二份**)。
47
48
  消费方查某个变量叫什么:`kit.cssVar('fg')` 或直接 grep `tokens-css.ts`。
@@ -50,11 +51,11 @@ token 原文提取自 `dsh-task-dispatch-table/src/client/ui/tokens.ts`,含深
50
51
 
51
52
  1. 不许再有第二处 `document.createElement('style')` —— 一律走 kit。
52
53
  2. 不许再出现第二套 style 标签 id —— 一个插件一套 kit。
53
- 3. 域内的规则只能消费 `var(--<prefix>-*)`,颜色 / 尺寸 / 字号一律来自 token 层,不写死值。
54
+ 3. 域内的规则只能消费 `var(--dshpc-*)`,颜色 / 尺寸 / 字号一律来自 token 层,不写死值。
54
55
 
55
56
  ## 定制边界
56
57
 
57
58
  - **换肤**:给同一批变量名赋新值(在插件自己的样式域里覆盖),不需要 fork。
58
- - **加域**:`kit.registerStyle('reminder-widget', css)`,同一域重复登记 = 覆盖。
59
+ - **加域**:`kit.registerStyle('widget', css)`,同一域重复登记 = 覆盖。
59
60
  - **`tokens` 域恒排最前**(变量定义必须先于消费它的规则),kit 内部已保证。
60
61
  - 皮肤写在调用方自己的样式域里;组件只认 token,不认调用方的具体颜色。
@@ -19,14 +19,12 @@ pnpm add dsh-plugin-core
19
19
  import { createStyleKit } from 'dsh-plugin-core/design'
20
20
  import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
21
21
 
22
- const kit = createStyleKit({ id: 'dsh-task-reminder-ui', prefix: 'reminder' })
22
+ const kit = createStyleKit({ id: 'dsh-task-reminder-ui' })
23
23
  setStyleKit(kit)
24
24
  ensureControls()
25
25
  ```
26
26
 
27
- `id` 必须插件内唯一;`prefix` 是变量前缀(`reminder` ⇒ `--reminder-fg`)。
28
- 两者取值按**项目规范**定(多插件同页必须互不冲突)——示例里的 `dsh-task-reminder` / `reminder`
29
- 只是演示命名规律(前缀取插件名缩写),不是可用值的枚举。
27
+ `id` 必须插件内唯一(多插件同页靠它互不覆盖);变量与类名统一使用 `dshpc` 前缀,不需要传参。
30
28
 
31
29
  ## 2. 用一个控件
32
30
 
@@ -97,7 +95,7 @@ kit.dispose() // 撤掉 <style> 标签并清空登记域(插件卸载 / HMR
97
95
 
98
96
  | 坑 | 现象 | 解法 |
99
97
  |---|---|---|
100
- | 忘了 `setStyleKit` 就渲染控件 | 样式晚一帧或串到默认前缀 | 入口处先调,再渲染 |
98
+ | 忘了 `setStyleKit` 就渲染控件 | 样式晚一帧或落到默认 style id | 入口处先调,再渲染 |
101
99
  | 直接 `import` 官方 `@deepseek-ai/*` 并指望本包帮你引 | Node 下 `ERR_MODULE_NOT_FOUND` | 本包 `ui` 已零官方依赖;你要用官方件就在插件侧自己处理平台模块 |
102
100
  | 给 `read` 少传第三参 `range` | 远端拒:`expected 3 business argument(s) … got 2` | 一律显式传 `{}` |
103
101
  | 用 `relativePast` 显示未来时间 | 「3 分钟后」显示成「刚刚」 | 用 `relativeFuture` |