dsh-plugin-core-demo 0.1.4 → 0.2.1

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 (3) hide show
  1. package/README.md +2 -2
  2. package/dist/client.js +856 -586
  3. package/package.json +1 -1
package/dist/client.js CHANGED
@@ -32,84 +32,104 @@ var import_react31 = require("react");
32
32
  var TOKENS_CSS_TEMPLATE = `
33
33
  /* \u2500\u2500 \u6587\u5B57\uFF08\u5BBF\u4E3B label \u56DB\u6863 + \u53CD\u8272\u9762\u7528\u5B57\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
34
34
  body{
35
- --tdt-fg:var(--dsw-alias-label-primary,#1f2328);
36
- --tdt-fg-2:var(--dsw-alias-label-secondary,#5c6370);
37
- --tdt-fg-3:var(--dsw-alias-label-tertiary,#767d87);
38
- --tdt-fg-4:var(--dsw-alias-label-caption,#9aa1ab);
39
- --tdt-fg-dim:var(--dsw-alias-label-dimmed,#b9bfc7);
35
+ --dshpc-fg:var(--dsw-alias-label-primary,#1f2328);
36
+ --dshpc-fg-2:var(--dsw-alias-label-secondary,#5c6370);
37
+ --dshpc-fg-3:var(--dsw-alias-label-tertiary,#767d87);
38
+ --dshpc-fg-4:var(--dsw-alias-label-caption,#9aa1ab);
39
+ --dshpc-fg-dim:var(--dsw-alias-label-dimmed,#b9bfc7);
40
40
  /* \u53CD\u8272\u9762\u4E0A\u7684\u5B57\uFF08\u5B9E\u5FC3\u94AE / \u89D2\u6807\uFF09\uFF1A\u6697\u8272\u4E0B\u662F bluish-1000\uFF0C\u6545\u7528 -foreground \u800C\u975E -inverted */
41
- --tdt-fg-inverse:var(--dsw-alias-label-primary-foreground,#fff);
41
+ --dshpc-fg-inverse:var(--dsw-alias-label-primary-foreground,#fff);
42
42
 
43
43
  /* \u2500\u2500 \u9762\uFF08\u5BBF\u4E3B bg-layer \u4E09\u6863 + \u4E0B\u6C89\u8F68\u9053\u5E95\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
44
- --tdt-surface-1:var(--dsw-alias-bg-layer-1,#fff);
45
- --tdt-surface-2:var(--dsw-alias-bg-layer-2,#fff);
46
- --tdt-surface-3:var(--dsw-alias-bg-layer-3,#fff);
47
- /* \u300C\u9009\u4E2D\u4EAE\u7247\u300D\u7684\u5E95\u76D8\u8272\uFF08\u914D --tdt-shadow-raised \u7528\uFF09 */
48
- --tdt-surface-raised:var(--dsw-alias-bg-layer-1,#fff);
44
+ --dshpc-surface-1:var(--dsw-alias-bg-layer-1,#fff);
45
+ --dshpc-surface-2:var(--dsw-alias-bg-layer-2,#fff);
46
+ --dshpc-surface-3:var(--dsw-alias-bg-layer-3,#fff);
47
+ /* \u300C\u9009\u4E2D\u4EAE\u7247\u300D\u7684\u5E95\u76D8\u8272\uFF08\u914D --dshpc-shadow-raised \u7528\uFF09 */
48
+ --dshpc-surface-raised:var(--dsw-alias-bg-layer-1,#fff);
49
49
  /* \u8F68\u9053 / \u4E0B\u6C89\u5E95\uFF08\u5B98\u65B9\u5206\u6BB5\u63A7\u4EF6\u8F68\u9053\u7528\u7684\u5C31\u662F\u8FD9\u6761\uFF09 */
50
- --tdt-surface-sunken:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));
50
+ --dshpc-surface-sunken:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));
51
51
  /* \u6574\u9875 / \u7F16\u8F91\u5668\u5E95\uFF08bg-base\uFF09 */
52
- --tdt-surface-base:var(--dsw-alias-bg-base,#fff);
52
+ --dshpc-surface-base:var(--dsw-alias-bg-base,#fff);
53
53
  /* \u81EA\u7ED8\u6D6E\u5C42 / \u83DC\u5355\u5361\u7684\u4E0D\u900F\u660E\u5E95\uFF08= base\uFF1B\u4E0D\u8981\u7528\u534A\u900F\u660E\u7684 specific-menu\uFF09 */
54
- --tdt-surface-menu:var(--tdt-surface-base);
54
+ --dshpc-surface-menu:var(--dshpc-surface-base);
55
55
  /* markdown \u4EE3\u7801\u5757\u9762 / \u5B57\u4F53\uFF08\u4F1A\u8BDD\u955C\u50CF\u91CC\u7528\u5230\uFF09 */
56
- --tdt-code-surface:var(--dsw-alias-markdown-code-block,rgba(128,128,128,.10));
57
- --tdt-code-font:var(--dsw-font-markdown-code-block-small,12px/18px var(--ds-font-family-code,monospace));
56
+ --dshpc-code-surface:var(--dsw-alias-markdown-code-block,rgba(128,128,128,.10));
57
+ --dshpc-code-font:var(--dsw-font-markdown-code-block-small,12px/18px var(--ds-font-family-code,monospace));
58
58
  /* \u8B66\u544A\u6587\u5B57\u8272\uFF08\u5BBF\u4E3B state-warn-label\uFF09 */
59
- --tdt-warning-label:var(--dsw-alias-state-warn-label,#f5a623);
59
+ --dshpc-warning-label:var(--dsw-alias-state-warn-label,#f5a623);
60
60
  /* \u56FA\u5B9A\u4E2D\u6027\u5B9E\u9762\uFF08\u81EA\u7ED8\u6D6E\u5C42\u3001\u6DF1\u8272\u4E3B\u9898\u4E0B\u5FC5\u987B\u81EA\u5DF1\u53D8\u7684\u90A3\u51E0\u4E2A\uFF09\u2014\u2014\u53EA\u6709\u5B83\u9700\u8981\u6697\u8272\u8986\u76D6 */
61
- --tdt-solid:var(--dsw-static-neutral-00,#fff);
62
- --tdt-on-solid:var(--dsw-alias-label-primary,#1f2328);
61
+ --dshpc-solid:var(--dsw-static-neutral-00,#fff);
62
+ --dshpc-on-solid:var(--dsw-alias-label-primary,#1f2328);
63
63
  /* \u4EA4\u4ED8\u6587\u4EF6\u5361\u90A3\u79CD\u300C\u6D45\u5E95\u76D8 + hover \u52A0\u6DF1\u300D\u4E24\u62CD */
64
- --tdt-plate:var(--dsw-static-neutral-50,#fafafa);
65
- --tdt-plate-hover:var(--dsw-static-neutral-100,#f5f5f5);
64
+ --dshpc-plate:var(--dsw-static-neutral-50,#fafafa);
65
+ --dshpc-plate-hover:var(--dsw-static-neutral-100,#f5f5f5);
66
66
  /* \u65E7\u5185\u6838\u56DE\u9000\uFF08Chrome <111 \u4E0D\u8BA4 color-mix \u21D2 \u8FD9\u6761\u751F\u6548\uFF1B\u65B0\u5185\u6838\u88AB\u4E0B\u9762\u90A3\u6761\u8986\u76D6\uFF09\u3002
67
67
  \u8FD9\u51E0\u4E2A\u662F**\u56FA\u5B9A\u4E2D\u6027\u9762**\u3001\u4E0D\u9760\u8DDF\u968F\u5BBF\u4E3B\u4E3B\u9898\u8272\uFF0C\u6545\u53EF\u4EE5\u65E0\u635F\u5730\u7ED9\u660E\u6587\u56DE\u9000\u3002 */
68
- --tdt-icon-plate:rgba(255,255,255,.5);
69
- --tdt-icon-plate:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 50%,transparent);
70
- /* \u8868\u5934\u5E95\uFF1A\u6D45\u8272\u4E3B\u9898**\u504F\u6DF1**\uFF0C\u4E14\u5FC5\u987B**\u6BD4\u6591\u9A6C\u7EB9\uFF08--tdt-plate\uFF09\u518D\u6DF1\u4E00\u6863**\u2014\u2014
68
+ --dshpc-icon-plate:rgba(255,255,255,.5);
69
+ --dshpc-icon-plate:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 50%,transparent);
70
+ /* \u8868\u5934\u5E95\uFF1A\u6D45\u8272\u4E3B\u9898**\u504F\u6DF1**\uFF0C\u4E14\u5FC5\u987B**\u6BD4\u6591\u9A6C\u7EB9\uFF08--dshpc-plate\uFF09\u518D\u6DF1\u4E00\u6863**\u2014\u2014
71
71
  \u4E24\u8005\u4E0D\u80FD\u649E\u8272\uFF08\u7528\u6237 2026-10-02\uFF1A\u8868\u5934\u8DDF\u6591\u9A6C\u7EB9\u4E00\u6A21\u4E00\u6837\uFF09\u3002 */
72
- --tdt-head-bg:var(--dsw-static-neutral-100,#f5f5f5);
72
+ --dshpc-head-bg:var(--dsw-static-neutral-100,#f5f5f5);
73
73
  /* \u56FE\u6807\u5C0F\u5E95\u677F\uFF08\u4EA7\u51FA\u7269\uFF09\uFF1A\u6D45\u8272\u4E0B\u8981**\u770B\u5F97\u89C1**\uFF08\u539F\u5148\u53D6 plate \u21D2 \u5728\u767D\u5E95\u4E0A\u7B49\u4E8E\u6CA1\u6709\uFF09\uFF1Bhover \u52A0\u500D\u3002 */
74
- --tdt-chip-bg:rgba(15,15,15,.07);
75
- --tdt-chip-bg:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 7%,transparent);
76
- --tdt-chip-bg-hover:rgba(15,15,15,.14);
77
- --tdt-chip-bg-hover:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 14%,transparent);
74
+ --dshpc-chip-bg:rgba(15,15,15,.07);
75
+ --dshpc-chip-bg:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 7%,transparent);
76
+ --dshpc-chip-bg-hover:rgba(15,15,15,.14);
77
+ --dshpc-chip-bg-hover:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 14%,transparent);
78
78
  /* \u5C55\u5F00\u884C\uFF1A**\u5E26\u900F\u660E\u5EA6\u7684\u84DD**\u2014\u2014\u4E0D\u662F\u7070\u3001\u4E5F\u4E0D\u662F\u7EAF\u8272\uFF0C\u900F\u51FA\u5361\u7247\u5E95\u8272\uFF0C\u4E00\u773C\u770B\u51FA\u300C\u8FD9\u662F\u5C55\u5F00\u7684\u300D
79
79
  \uFF08\u7528\u6237 2026-10-02\uFF1A\u7070\u8272\u8DDF\u6591\u9A6C\u7EB9\u5206\u4E0D\u51FA\u6765\uFF09\u3002\u5185\u5BB9\u533A\u518D\u6DE1\u4E00\u6863\uFF0C\u5F62\u6210\u300C\u884C\u6DF1 / \u5185\u5BB9\u6D45\u300D\u7684\u533A\u9694\u3002 */
80
- --tdt-open-bg:rgba(37,99,235,.10);
81
- --tdt-open-bg-soft:rgba(37,99,235,.05);
82
- --tdt-card-hover:rgba(37,99,235,.07);
80
+ --dshpc-open-bg:rgba(37,99,235,.10);
81
+ --dshpc-open-bg-soft:rgba(37,99,235,.05);
82
+ --dshpc-card-hover:rgba(37,99,235,.07);
83
83
 
84
84
  /* \u2500\u2500 \u63CF\u8FB9\u56DB\u6863\uFF08\u5BBF\u4E3B\u771F\u503C\uFF1Al1 4% / l2 10% / l3 12% / l4 16%\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
85
- --tdt-border-faint:var(--dsw-alias-border-l1,#0000000a);
86
- --tdt-border:var(--dsw-alias-border-l2,#0000001a);
87
- --tdt-border-strong:var(--dsw-alias-border-l3,#0000001f);
88
- --tdt-border-heavy:var(--dsw-alias-border-l4,#00000029);
85
+ --dshpc-border-faint:var(--dsw-alias-border-l1,#0000000a);
86
+ --dshpc-border:var(--dsw-alias-border-l2,#0000001a);
87
+ --dshpc-border-strong:var(--dsw-alias-border-l3,#0000001f);
88
+ --dshpc-border-heavy:var(--dsw-alias-border-l4,#00000029);
89
89
 
90
90
  /* \u2500\u2500 \u54C1\u724C / \u8BED\u4E49\u8272 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
91
91
  /* \u54C1\u724C\u300C\u9762\u300D\u8272\uFF1A\u660E\u8272\u8FD1\u9ED1\u3001\u6697\u8272\u8FD1\u767D\uFF08\u5B98\u65B9 Switch \u9009\u4E2D\u6001\u5373\u6B64\uFF09\uFF0C**\u4E0D\u662F\u84DD\u8272** */
92
- --tdt-accent:var(--dsw-alias-brand-primary,#0f1115);
92
+ --dshpc-accent:var(--dsw-alias-brand-primary,#0f1115);
93
93
  /* \u84DD\u8272\uFF1A\u5F3A\u8C03 / \u9009\u4E2D / \u7126\u70B9\uFF0C\u4E00\u5F8B\u8D70\u8FD9\u6761 */
94
- --tdt-business:var(--dsw-alias-state-business-primary,#3b5bdb);
95
- --tdt-success:var(--dsw-alias-state-success-primary,#22c55e);
94
+ --dshpc-business:var(--dsw-alias-state-business-primary,#3b5bdb);
95
+ --dshpc-success:var(--dsw-alias-state-success-primary,#22c55e);
96
96
  /* \u26A0\uFE0F \u662F state-warn\uFF08\u4E0D\u662F state-warning\uFF0C\u540E\u8005\u5BBF\u4E3B\u65E0\u6B64\u5B9A\u4E49\uFF09 */
97
- --tdt-warning:var(--dsw-alias-state-warn-primary,#f59e0b);
98
- --tdt-danger:var(--dsw-alias-state-error-primary,#ec1313);
99
- --tdt-link:var(--dsw-alias-link,#3b5bdb);
97
+ --dshpc-warning:var(--dsw-alias-state-warn-primary,#f59e0b);
98
+ --dshpc-danger:var(--dsw-alias-state-error-primary,#ec1313);
99
+ --dshpc-link:var(--dsw-alias-link,#3b5bdb);
100
100
  /* \u8BED\u4E49\u8272**\u5B9E\u9762**\u4E0A\u7684\u5B57\uFF08\u89D2\u6807 / \u5B9E\u5FC3\u63D0\u793A\uFF09\uFF1A\u5BBF\u4E3B\u7EA2\u7EFF\u9EC4\u4E09\u8272\u90FD\u662F\u4E2D\u8C03 \u21D2 \u767D\u5B57\u4E24\u4E2A\u4E3B\u9898\u90FD\u53EF\u8BFB\uFF0C
101
- \u6545\u8FD9\u662F\u4E00\u6761\u4E0E\u4E3B\u9898\u65E0\u5173\u7684\u5E38\u91CF\uFF1B\u4E0D\u8981\u62FF --tdt-fg-inverse \u9876\u2014\u2014\u5B83\u5728\u6697\u8272\u4E0B\u662F\u8FD1\u9ED1\uFF0C\u538B\u5728\u7EA2\u5E95\u4E0A\u770B\u4E0D\u6E05\u3002 */
102
- --tdt-on-signal:#fff;
101
+ \u6545\u8FD9\u662F\u4E00\u6761\u4E0E\u4E3B\u9898\u65E0\u5173\u7684\u5E38\u91CF\uFF1B\u4E0D\u8981\u62FF --dshpc-fg-inverse \u9876\u2014\u2014\u5B83\u5728\u6697\u8272\u4E0B\u662F\u8FD1\u9ED1\uFF0C\u538B\u5728\u7EA2\u5E95\u4E0A\u770B\u4E0D\u6E05\u3002 */
102
+ --dshpc-on-signal:#fff;
103
+ /* \u9EC4\u5E95\u4E0A\u7684\u5B57\uFF1A\u9EC4\u8272\u662F\u4E2D\u9AD8\u660E\u5EA6\uFF0C\u767D\u5B57\u770B\u4E0D\u6E05 \u21D2 \u56FA\u5B9A\u6DF1\u8272\uFF08\u4E0E\u4E3B\u9898\u65E0\u5173\uFF09\u3002 */
104
+ --dshpc-on-warning:#1f2328;
105
+
106
+ /* \u2500\u2500 \u5B9E\u5FC3\u6309\u94AE\u7684 hover / active \u6D3E\u751F\u6001\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
107
+ \u539F\u5B9E\u73B0\u662F :hover \u76F4\u63A5\u538B opacity .9\uFF1A\u9ED1\u5E95\u538B 10% \u51E0\u4E4E\u770B\u4E0D\u51FA\u6765\uFF0C\u7528\u6237\u539F\u8BDD\u300C\u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\u3002
108
+ \u21D2 \u6539\u6210\u5BF9\u5E95\u8272\u505A**\u660E\u786E\u7684\u6DF7\u8272**\uFF08\u538B 22% / 34%\uFF09\uFF0C\u4E0D\u7528 opacity\uFF1A
109
+ \xB7 \u4EAE\u8272\u4E3B\u9898\uFF1A\u9ED1\u5E95\uFF08--dshpc-accent\uFF09\u63BA\u767D\u63D0\u4EAE\uFF1B\u7EA2 / \u7EFF / \u9EC4 / \u84DD\u5E95\u63BA\u9ED1\u538B\u6DF1\uFF1B
110
+ \xB7 \u6697\u8272\u4E3B\u9898\uFF1A\u53CD\u8FC7\u6765\uFF08\u6697\u5E95\u63BA\u767D\u3001\u4EAE\u5E95\u63BA\u9ED1\uFF09\u3002
111
+ \u6DF7\u8272\u5BF9\u8C61\u662F**\u56FA\u5B9A\u4E2D\u6027\u8272\u5B57\u9762\u91CF**\uFF08#fff / #000\uFF09\uFF0C\u4E0D\u4F9D\u8D56\u5BBF\u4E3B static-neutral \u662F\u5426\u5B58\u5728\uFF1B
112
+ \u65E7\u5185\u6838\u4E0D\u8BA4 color-mix \u65F6\u6574\u6761\u58F0\u660E\u4F5C\u5E9F \u21D2 \u56DE\u843D\u5404\u6863\u539F\u8272\uFF08\u53EF\u63A5\u53D7\uFF1A\u4ECD\u53EF\u70B9\uFF0C\u53EA\u662F\u6CA1\u6709 hover \u53CD\u9988\uFF09\u3002 */
113
+ --dshpc-accent-hover:color-mix(in srgb,var(--dshpc-accent) 78%,#ffffff);
114
+ --dshpc-accent-active:color-mix(in srgb,var(--dshpc-accent) 64%,#ffffff);
115
+ --dshpc-danger-hover:color-mix(in srgb,var(--dshpc-danger) 78%,#000000);
116
+ --dshpc-danger-active:color-mix(in srgb,var(--dshpc-danger) 64%,#000000);
117
+ --dshpc-success-hover:color-mix(in srgb,var(--dshpc-success) 78%,#000000);
118
+ --dshpc-success-active:color-mix(in srgb,var(--dshpc-success) 64%,#000000);
119
+ --dshpc-warning-hover:color-mix(in srgb,var(--dshpc-warning) 78%,#000000);
120
+ --dshpc-warning-active:color-mix(in srgb,var(--dshpc-warning) 64%,#000000);
121
+ --dshpc-business-hover:color-mix(in srgb,var(--dshpc-business) 78%,#000000);
122
+ --dshpc-business-active:color-mix(in srgb,var(--dshpc-business) 64%,#000000);
103
123
  /* \u8BED\u4E49\u8272**\u6D45\u5E95**\uFF1A\u72B6\u6001\u8272\u7CFB\u7684\u300C\u4E00\u5757\u5E95\u8272\u300D\u2014\u2014\u6267\u884C\u8BB0\u5F55\u9875\u6BCF\u6761\u6D41\u6C34\u8D26\u7684\u5757\u5E95\u5C31\u662F\u5B83
104
124
  \uFF08\u7528\u6237 2026-10-04\uFF1A\u6B63\u5E38\u6001\u7ED9\u540C\u8272\u7CFB\u5F88\u6D45\u7684\u900F\u660E\u5E95\u3001\u5931\u8D25\u7528\u7EA2\u5E95\u900F\u51FA\u6765\uFF09\u3002
105
125
  \u7528 \u300Ccolor-mix\u300D \u73B0\u7B97\u800C\u4E0D\u5199\u6B7B rgba\uFF1A\u72B6\u6001\u8272\u672C\u8EAB\u8DDF\u968F\u5BBF\u4E3B alias\uFF0C\u4E3B\u9898\u4E00\u6362\u81EA\u52A8\u6210\u7ACB\u3002
106
126
  \u26A0\uFE0F **\u6DF1\u8272\u4E0B\u8981\u66F4\u6DE1**\uFF1A\u7528\u6237 2026-10-04\u300C\u6DF1\u8272\u98CE\u683C\u7684\u7EFF\u8272\u548C\u7EA2\u8272\u597D\u50CF\u90FD\u6709\u70B9\u6DF1\u300D\u21D2 dark \u6BB5
107
127
  \u628A\u8FD9\u56DB\u6761\u538B\u5230 5%\uFF08\u66F4\u8D34\u8FD1\u9762\u677F\u5E95\u3001\u5B58\u5728\u611F\u66F4\u5F31\uFF09\uFF1B\u6D45\u8272\u6BB5\u7EF4\u6301 8%\u3002\u4E24\u7AEF\u5404\u81EA\u7ED9\u503C\uFF0C\u4E0D\u5171\u7528\u4E00\u6761\u66F2\u7EBF\u3002
108
- \u547D\u540D\u6536\u5728 tokens.ts \u5355\u70B9\uFF08\u672C\u4ED3\u786C\u89C4\u77E9\uFF1A\u4E1A\u52A1\u6587\u4EF6\u4E0D\u8BB8\u81EA\u9020 --tdt-*\uFF09\u3002 */
109
- --tdt-success-soft:color-mix(in srgb,var(--tdt-success) 8%,transparent);
110
- --tdt-warning-soft:color-mix(in srgb,var(--tdt-warning) 8%,transparent);
111
- --tdt-danger-soft:color-mix(in srgb,var(--tdt-danger) 8%,transparent);
112
- --tdt-business-soft:color-mix(in srgb,var(--tdt-business) 8%,transparent);
128
+ \u547D\u540D\u6536\u5728 tokens.ts \u5355\u70B9\uFF08\u672C\u4ED3\u786C\u89C4\u77E9\uFF1A\u4E1A\u52A1\u6587\u4EF6\u4E0D\u8BB8\u81EA\u9020 --dshpc-*\uFF09\u3002 */
129
+ --dshpc-success-soft:color-mix(in srgb,var(--dshpc-success) 8%,transparent);
130
+ --dshpc-warning-soft:color-mix(in srgb,var(--dshpc-warning) 8%,transparent);
131
+ --dshpc-danger-soft:color-mix(in srgb,var(--dshpc-danger) 8%,transparent);
132
+ --dshpc-business-soft:color-mix(in srgb,var(--dshpc-business) 8%,transparent);
113
133
 
114
134
  /* \u26A0\uFE0F 2026-10-18 \u7528\u6237\u62CD\u677F\uFF1A\u5BBF\u4E3B alias \u7684 hover\uFF08\u6697\u8272\u767D 8% / \u4EAE\u8272 6%\uFF09**\u592A\u5F31**\uFF0C
115
135
  \u300C\u79FB\u4E0A\u53BB\u8981\u4ED4\u7EC6\u770B\u624D\u770B\u5F97\u51FA\u6765\u300D\u21D2 \u4E0D\u518D\u59D4\u6258\u5BBF\u4E3B hover \u522B\u540D\uFF0C\u6539\u4E3A\u81EA\u63BA\u4E2D\u6027\u8272\u5E76\u52A0\u91CD\uFF1A
@@ -117,91 +137,91 @@ body{
117
137
  \u26A0\uFE0F \u5FC5\u987B\u4FDD\u7559 rgba \u515C\u5E95\u884C\u5728\u524D\uFF08\u672C\u6587\u4EF6\u60EF\u4F8B\uFF0C\u89C1 icon-plate \u6CE8\u91CA\uFF09\uFF1A\u63BA\u7684\u662F**\u56FA\u5B9A\u4E2D\u6027\u8272**
118
138
  \uFF08neutral-900=#0f0f0f / neutral-00=#fff\uFF09\uFF0C\u9884\u8BA1\u7B97\u65E0\u635F\uFF1B\u65E7\u5185\u6838\u4E0D\u8BA4 color-mix \u65F6\u8D70\u515C\u5E95\uFF0C
119
139
  \u5426\u5219\u6574\u6761 background:var(--seg-track) \u4F5C\u5E9F \u21D2 \u5206\u6BB5\u8F68\u9053\u900F\u660E\uFF08\u771F\u8E29\u8FC7\uFF1A\u9884\u89C8\u7AD9\u8F68\u9053\u6D88\u5931\uFF09\u3002 */
120
- --tdt-hover:rgba(15,15,15,.10);
121
- --tdt-hover:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 10%,transparent);
122
- --tdt-active:rgba(15,15,15,.18);
123
- --tdt-active:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 18%,transparent);
124
- --tdt-mask:var(--dsw-alias-bg-mask-1,#0000003d);
140
+ --dshpc-hover:rgba(15,15,15,.10);
141
+ --dshpc-hover:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 10%,transparent);
142
+ --dshpc-active:rgba(15,15,15,.18);
143
+ --dshpc-active:color-mix(in srgb,var(--dsw-static-neutral-900,#0f0f0f) 18%,transparent);
144
+ --dshpc-mask:var(--dsw-alias-bg-mask-1,#0000003d);
125
145
  /* \u300C\u9009\u4E2D\u9762\u300D\uFF082026-10-06\uFF0C\u4EFB\u52A1\u65E5\u7A0B\u9875\u9996\u521B\uFF09= \u5F53\u524D\u5E95\u8272**\u671D\u66F4\u6DF1\u63BA 12% \u6587\u5B57\u8272**\uFF1A
126
146
  \u6D45\u8272\u4E3B\u9898\u4E0B\u6587\u5B57\u8272\u662F\u9ED1 \u21D2 \u9009\u4E2D\u9762\u6BD4\u5E38\u6001\u5E95\u8272**\u6DF1\u4E00\u6863**\u3002\u6DF1\u8272\u5206\u652F\u89C1 body[data-ds-dark-theme]\uFF08\u671D\u80CC\u666F\u8272\u63BA\uFF09\u3002
127
147
  \u8BED\u4E49\uFF1A\u6807\u8BB0\u300C\u6B63\u5728\u770B\u7684\u4E1C\u897F\u300D\uFF0C\u6BD4\u5E38\u6001\u660E\u663E\u3001\u53C8\u4E0D\u8BB8\u76D6\u4F4F\u5185\u5BB9\uFF08\u4E0D\u8BB8\u7528\u534A\u900F\u660E\u53E0\u72B6\u6001\u8272\uFF09\u3002 */
128
- --tdt-selected-bg:color-mix(in srgb,var(--tdt-surface-1) 88%,var(--tdt-fg));
148
+ --dshpc-selected-bg:color-mix(in srgb,var(--dshpc-surface-1) 88%,var(--dshpc-fg));
129
149
  /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u672C\u6708\u683C\u9ED8\u8BA4\u5E95\uFF082026-10-06 \u2192 \u7EED2\uFF09\uFF1A\u6D45\u8272\u4E0B\u7ED9**\u6DE1\u84DD**\uFF08business 8% \u900F\u767D\u5E95\uFF09\u2014\u2014
130
150
  \u53C2\u7167\u7528\u6237\u53C2\u8003\u7A3F\u91CC\u672A\u9009\u4E2D\u65E5\u7A0B\u5757 / Tuesday \u5217\u7684\u90A3\u79CD\u84DD\u3001\u518D\u6D45\u4E00\u70B9\u70B9\uFF1B
131
- \u76F8\u90BB\u6708\u8865\u4F4D\u683C\u4ECD\u8D70 --tdt-surface-2\uFF08\u66F4\u7070\uFF09\uFF0C\u4E0D\u53D7\u5F71\u54CD\u3002
151
+ \u76F8\u90BB\u6708\u8865\u4F4D\u683C\u4ECD\u8D70 --dshpc-surface-2\uFF08\u66F4\u7070\uFF09\uFF0C\u4E0D\u53D7\u5F71\u54CD\u3002
132
152
  \u6DF1\u8272\u6BB5\u7EF4\u6301 #23262e\uFF08\u7528\u6237\uFF1A\u6DF1\u8272 UI \u5DF2\u5DEE\u4E0D\u591A\uFF0C\u4E0D\u52A8\uFF09\u3002 */
133
- --tdt-cal-cell-bg:color-mix(in srgb,var(--tdt-business) 8%,var(--tdt-surface-1));
153
+ --dshpc-cal-cell-bg:color-mix(in srgb,var(--dshpc-business) 8%,var(--dshpc-surface-1));
134
154
  /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u300C\u70B9\u5F00\u67D0\u5929\u300D\u5C55\u5F00\u7684\u9762\u677F\u5E95\uFF082026-10-06 \u7EED\uFF09\uFF1A\u6D45\u8272\u4E0B**\u65E0\u9650\u63A5\u8FD1\u767D\u3001\u53EA\u5E26\u4E00\u4E01\u70B9\u7070**
135
155
  \uFF08neutral-50 = #fafafa\uFF09\u2014\u2014\u9762\u677F\u91CC\u88C5\u534A\u900F\u660E\u6267\u884C\u8BB0\u5F55\u5217\u8868\uFF0C\u5E95\u518D\u6DF1\u6574\u7247\u5C31\u53D1\u7CCA\u53D1\u7070\uFF1B
136
156
  \u6DF1\u8272\u6BB5\u6CBF\u7528\u539F selected-bg \u6697\u503C\uFF0C\u4FDD\u6301\u4E0D\u52A8\u3002 */
137
- --tdt-cal-panel-bg:var(--dsw-static-neutral-50,#fafafa);
157
+ --dshpc-cal-panel-bg:var(--dsw-static-neutral-50,#fafafa);
138
158
  /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u672C\u6708\u683C hover \u5E95\uFF08\u6D45\u8272\u6BB5\uFF0C2026-10-06 \u7EED3\uFF09\uFF1A\u4E0D\u518D\u8D70\u7070\u8272\u901A\u7528\u4EA4\u4E92\u5E95\u2014\u2014
139
159
  \u9F20\u6807\u79FB\u4E0A\u53BB\u5E94\u662F\u300C\u66F4\u4EAE\u4E00\u70B9\u70B9\u7684\u84DD\u300D\uFF08\u4E0E\u6DF1\u8272\u6BB5\u540C\u8BED\u4E49\uFF1Ahover = \u63D0\u4EAE\u7684\u84DD\uFF0C\u4E0D\u662F\u7070\u4E0B\u53BB\uFF09\u3002
140
160
  \u6D53\u5EA6**\u4ECB\u4E8E**\u8868\u5934\u84DD\uFF0814%\uFF09\u4E0E\u672A\u9009\u4E2D\u683C\u84DD\uFF088%\uFF09\u4E4B\u95F4\u3001\u7565\u504F\u8868\u5934\u4E00\u4FA7\uFF1Abusiness 12% \u900F\u767D\u5E95
141
161
  \uFF08\u6BD4\u8868\u5934\u6D45\u4E00\u70B9\u3001\u6BD4\u672A\u9009\u4E2D\u683C\u6DF1\u4E00\u70B9\uFF09\u3002 */
142
- --tdt-cal-cell-hover:color-mix(in srgb,var(--tdt-business) 12%,var(--tdt-surface-1));
162
+ --dshpc-cal-cell-hover:color-mix(in srgb,var(--dshpc-business) 12%,var(--dshpc-surface-1));
143
163
 
144
164
  /* \u2500\u2500 \u6295\u5F71 / \u7126\u70B9 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
145
- --tdt-shadow-1:var(--dsw-elevation-soft,0 4px 16px 0 #00000008);
146
- /* \u4EAE\u7247\u81EA\u5E26\u7684\u6D6E\u8D77\u611F\uFF08\u9009\u4E2D\u6001\u7528\uFF1B\u4E0E --tdt-surface-raised \u914D\u5BF9\uFF09 */
147
- --tdt-shadow-raised:var(--dsw-elevation-soft,0 4px 16px 0 #00000008);
148
- --tdt-shadow-2:var(--dsw-shadow-lv3,0 12px 32px 0 #00000014);
165
+ --dshpc-shadow-1:var(--dsw-elevation-soft,0 4px 16px 0 #00000008);
166
+ /* \u4EAE\u7247\u81EA\u5E26\u7684\u6D6E\u8D77\u611F\uFF08\u9009\u4E2D\u6001\u7528\uFF1B\u4E0E --dshpc-surface-raised \u914D\u5BF9\uFF09 */
167
+ --dshpc-shadow-raised:var(--dsw-elevation-soft,0 4px 16px 0 #00000008);
168
+ --dshpc-shadow-2:var(--dsw-shadow-lv3,0 12px 32px 0 #00000014);
149
169
  /* \u952E\u76D8\u7126\u70B9\u73AF\u3002\u26A0\uFE0F \u4E0D\u7528\u5BBF\u4E3B --dsw-focus-ring-color\uFF1A\u5B83\u9ED8\u8BA4\u503C\u662F transparent\uFF08\u515C\u5E95\u4E0D\u751F\u6548\u3001\u4F1A\u9690\u8EAB\uFF09 */
150
- --tdt-focus:var(--dsw-alias-state-business-primary,#3b5bdb);
170
+ --dshpc-focus:var(--dsw-alias-state-business-primary,#3b5bdb);
151
171
 
152
172
  /* \u2500\u2500 \u5706\u89D2\uFF08\u5BBF\u4E3B\u771F\u503C 4 / 8 / 12 / 16 / 20 / 28\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
153
- --tdt-radius-xs:var(--dsw-radius-xs,4px);
154
- --tdt-radius-sm:var(--dsw-radius-sm,8px);
155
- --tdt-radius-md:var(--dsw-radius-md,12px);
156
- --tdt-radius-lg:var(--dsw-radius-lg,16px);
157
- --tdt-radius-xl:var(--dsw-radius-xl,20px);
158
- --tdt-radius-panel:var(--dsw-radius-panel,28px);
173
+ --dshpc-radius-xs:var(--dsw-radius-xs,4px);
174
+ --dshpc-radius-sm:var(--dsw-radius-sm,8px);
175
+ --dshpc-radius-md:var(--dsw-radius-md,12px);
176
+ --dshpc-radius-lg:var(--dsw-radius-lg,16px);
177
+ --dshpc-radius-xl:var(--dsw-radius-xl,20px);
178
+ --dshpc-radius-panel:var(--dsw-radius-panel,28px);
159
179
  /* \u5168\u5706\uFF08\u80F6\u56CA\u6807\u7B7E\uFF09\uFF1A\u5BBF\u4E3B\u7684 radius \u6863\u6700\u5927\u53EA\u6709 28px\uFF0C\u6491\u4E0D\u6EE1 24px \u9AD8\u7684 chip */
160
- --tdt-radius-pill:999px;
180
+ --dshpc-radius-pill:999px;
161
181
 
162
182
  /* \u2500\u2500 \u95F4\u8DDD\u56DB\u62CD\uFF08\u53EA\u8BB8\u7528\u8FD9\u56DB\u6863\uFF0C\u4E0D\u8BB8\u51FA\u73B0 5 / 7 / 9px\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
163
- --tdt-space-1:4px;
164
- --tdt-space-2:8px;
165
- --tdt-space-3:12px;
166
- --tdt-space-4:16px;
183
+ --dshpc-space-1:4px;
184
+ --dshpc-space-2:8px;
185
+ --dshpc-space-3:12px;
186
+ --dshpc-space-4:16px;
167
187
 
168
188
  /* \u2500\u2500 \u63A7\u4EF6\u9AD8\u5EA6\uFF1A\u79BB\u6563\u4E09\u6863\uFF08\u63A7\u4EF6\u7528 size="sm|md|lg" \u9009\uFF1B\u8C03\u7528\u70B9\u4E0D\u8BB8\u81EA\u5B9A\u4E49\u9AD8\u5EA6\uFF0C
169
- \u771F\u4E0D\u591F\u7528\u624D\u5141\u8BB8\u5728\u8C03\u7528\u70B9\u672C\u5730\u8986\u76D6 --tdt-control-h-*\uFF0C\u5C5E\u4F8B\u5916\u800C\u975E\u5E38\u6001\uFF09\u2500\u2500 */
170
- --tdt-control-h-sm:24px;
171
- --tdt-control-h-md:28px;
172
- --tdt-control-h-lg:32px;
189
+ \u771F\u4E0D\u591F\u7528\u624D\u5141\u8BB8\u5728\u8C03\u7528\u70B9\u672C\u5730\u8986\u76D6 --dshpc-control-h-*\uFF0C\u5C5E\u4F8B\u5916\u800C\u975E\u5E38\u6001\uFF09\u2500\u2500 */
190
+ --dshpc-control-h-sm:24px;
191
+ --dshpc-control-h-md:28px;
192
+ --dshpc-control-h-lg:32px;
173
193
 
174
194
  /* \u2500\u2500 \u5B57\u53F7 / \u884C\u9AD8\uFF1A\u76F4\u7ED1\u5BBF\u4E3B\u5B57\u53F7\u65CF\uFF08\u5BBF\u4E3B\u771F\u503C 11 / 12 / 13 / 14 / 16\uFF09\u2500\u2500\u2500\u2500\u2500 */
175
- --tdt-font-xs:var(--dsw-font-xxxs-11-font-size,11px);
176
- --tdt-font-sm:var(--dsw-font-xxs-12-font-size,12px);
177
- --tdt-font-md:var(--dsw-font-xs-13-font-size,13px);
178
- --tdt-font-lg:var(--dsw-font-s-14-font-size,14px);
179
- --tdt-font-xl:var(--dsw-font-base-16-font-size,16px);
180
- --tdt-line-xs:var(--dsw-font-xxxs-11-line-height,14px);
181
- --tdt-line-sm:var(--dsw-font-xxs-12-line-height,18px);
182
- --tdt-line-md:var(--dsw-font-xs-13-line-height,20px);
183
- --tdt-line-lg:var(--dsw-font-s-14-line-height,22px);
184
- --tdt-line-xl:var(--dsw-font-base-16-line-height,24px);
185
- --tdt-font-mono:var(--ds-font-family-code,monospace);
195
+ --dshpc-font-xs:var(--dsw-font-xxxs-11-font-size,11px);
196
+ --dshpc-font-sm:var(--dsw-font-xxs-12-font-size,12px);
197
+ --dshpc-font-md:var(--dsw-font-xs-13-font-size,13px);
198
+ --dshpc-font-lg:var(--dsw-font-s-14-font-size,14px);
199
+ --dshpc-font-xl:var(--dsw-font-base-16-font-size,16px);
200
+ --dshpc-line-xs:var(--dsw-font-xxxs-11-line-height,14px);
201
+ --dshpc-line-sm:var(--dsw-font-xxs-12-line-height,18px);
202
+ --dshpc-line-md:var(--dsw-font-xs-13-line-height,20px);
203
+ --dshpc-line-lg:var(--dsw-font-s-14-line-height,22px);
204
+ --dshpc-line-xl:var(--dsw-font-base-16-line-height,24px);
205
+ --dshpc-font-mono:var(--ds-font-family-code,monospace);
186
206
 
187
207
  /* \u2500\u2500 \u5C42\u7EA7\u9636\u68AF\uFF08\u4E1A\u52A1\u6587\u4EF6\u4E0D\u8BB8\u518D\u5199\u88F8 z-index\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
188
208
  /* \u9875\u9762\u7EA7\u9884\u89C8\u5206\u680F \u2192 \u62BD\u5C49\uFF08\u65B0\u5EFA/\u7F16\u8F91\uFF09\u2192 \u5F39\u7A97/\u786E\u8BA4\u6846 \u2192 \u6D6E\u5C42\u83DC\u5355 \u2192 \u6D6E\u5C42\u63D0\u793A */
189
209
  /* \u5185\u5BB9\u5C42\u5438\u9876\uFF08\u5929\u6807\u7B7E / \u8868\u5934\u8FD9\u7C7B\u300C\u8DDF\u7740\u6EDA\u4F46\u538B\u4F4F\u540C\u5C42\u5185\u5BB9\u300D\u7684\u5143\u7D20\uFF09\uFF1A\u53EA\u538B\u540C\u5C42\u5144\u5F1F\uFF0C
190
210
  \u5FC5\u987B\u4F4E\u4E8E\u4E0B\u9762\u6240\u6709\u6D6E\u5C42\u6863 \u2014\u2014 \u6240\u4EE5\u5B83\u4E0D\u662F\u300C\u5F00\u65B0\u6D6E\u5C42\u6863\u300D\uFF0C\u800C\u662F\u5185\u5BB9\u5C42\u5185\u90E8\u7684\u6392\u5E8F\u4F4D\u3002 */
191
- --tdt-z-sticky:10;
192
- --tdt-z-dock:1030;
193
- --tdt-z-drawer:1040;
194
- --tdt-z-modal:1070;
195
- --tdt-z-menu:1100;
196
- --tdt-z-tip:1200;
211
+ --dshpc-z-sticky:10;
212
+ --dshpc-z-dock:1030;
213
+ --dshpc-z-drawer:1040;
214
+ --dshpc-z-modal:1070;
215
+ --dshpc-z-menu:1100;
216
+ --dshpc-z-tip:1200;
197
217
 
198
218
  /* \u2500\u2500 \u52A8\u6548 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
199
- --tdt-dur:var(--ds-transition-duration,.2s);
200
- --tdt-dur-fast:var(--ds-transition-duration-fast,.12s);
201
- --tdt-ease:var(--ds-ease-in-out,cubic-bezier(.4,0,.2,1));
219
+ --dshpc-dur:var(--ds-transition-duration,.2s);
220
+ --dshpc-dur-fast:var(--ds-transition-duration-fast,.12s);
221
+ --dshpc-ease:var(--ds-ease-in-out,cubic-bezier(.4,0,.2,1));
202
222
  /* \u8FD0\u884C\u4E2D\u72B6\u6001\u7684\u8109\u52A8\u65F6\u957F\uFF082026-10-06 \u7EDF\u4E00\u524D\u540E\u4E24\u7AEF\uFF1A\u4EFB\u52A1\u914D\u7F6E\u91CC\u7684\u7EFF\u547C\u5438 \u2192 \u84DD\u3001\u653E\u6162\uFF1B
203
223
  \u6267\u884C\u8BB0\u5F55\u91CC\u7684\u84DD\u95EA \u2192 \u653E\u6162\u4E00\u70B9\u3002\u4E24\u8005\u7528\u540C\u4E00\u4E2A\u503C\uFF0C\u52A8\u753B\u5F62\u72B6\u672C\u5C31\u4E00\u81F4\uFF09\u3002 */
204
- --tdt-dur-run:500ms;
224
+ --dshpc-dur-run:500ms;
205
225
  }
206
226
 
207
227
  /* \u2500\u2500 \u660E\u6697\u5DEE\u5F02\u7684**\u552F\u4E00**\u843D\u70B9 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
@@ -209,72 +229,73 @@ body{
209
229
  \u552F\u4E00\u660E\u6697\u5224\u636E\uFF1B\u63D2\u4EF6\u7981\u6B62\u7528 prefers-color-scheme \u2014\u2014 \u5B83\u8DDF\u7684\u662F\u7CFB\u7EDF\u3001\u4E0D\u662F\u7528\u6237\u5728\u5BBF\u4E3B\u91CC\u7684\u9009\u62E9\uFF09\u3002
210
230
  \u4E0B\u9762\u53EA\u653E alias \u8868\u8FBE\u4E0D\u4E86\u7684\u300C\u56FA\u5B9A\u4E2D\u6027\u9762\u300D\uFF1B\u989C\u8272\u82E5\u80FD\u9760 alias \u81EA\u52A8\u8DDF\u968F\uFF0C\u4E00\u5F8B\u4E0D\u8981\u5199\u5728\u8FD9\u91CC\u3002 */
211
231
  body[data-ds-dark-theme]{
212
- --tdt-solid:var(--dsw-static-neutral-900,#0f0f0f);
213
- --tdt-on-solid:var(--dsw-static-neutral-00,#fff);
232
+ --dshpc-solid:var(--dsw-static-neutral-900,#0f0f0f);
233
+ --dshpc-on-solid:var(--dsw-static-neutral-00,#fff);
234
+ /* \u5B9E\u5FC3\u6309\u94AE hover / active\uFF08\u6697\u8272\u7248\uFF09\uFF1A\u9ED1\u5E95\uFF08\u6D45\u8272\u4E3B\u9898\u7684\u8FD1\u9ED1 \u2192 \u6697\u8272\u4E0B\u7684\u8FD1\u767D\uFF09\u63BA\u9ED1\u538B\u6DF1\uFF1B
235
+ \u7EA2 / \u7EFF / \u9EC4 / \u84DD\u63BA\u767D\u63D0\u4EAE\u3002\u4E0E\u4EAE\u8272\u6BB5\u65B9\u5411\u76F8\u53CD\uFF0C\u4FDD\u8BC1\u4E24\u79CD\u4E3B\u9898\u4E0B\u300C\u4E00\u773C\u770B\u51FA\u53D8\u4E86\u300D\u3002 */
236
+ --dshpc-accent-hover:color-mix(in srgb,var(--dshpc-accent) 80%,#000000);
237
+ --dshpc-accent-active:color-mix(in srgb,var(--dshpc-accent) 66%,#000000);
238
+ --dshpc-danger-hover:color-mix(in srgb,var(--dshpc-danger) 78%,#ffffff);
239
+ --dshpc-danger-active:color-mix(in srgb,var(--dshpc-danger) 64%,#ffffff);
240
+ --dshpc-success-hover:color-mix(in srgb,var(--dshpc-success) 78%,#ffffff);
241
+ --dshpc-success-active:color-mix(in srgb,var(--dshpc-success) 64%,#ffffff);
242
+ --dshpc-warning-hover:color-mix(in srgb,var(--dshpc-warning) 78%,#ffffff);
243
+ --dshpc-warning-active:color-mix(in srgb,var(--dshpc-warning) 64%,#ffffff);
244
+ --dshpc-business-hover:color-mix(in srgb,var(--dshpc-business) 78%,#ffffff);
245
+ --dshpc-business-active:color-mix(in srgb,var(--dshpc-business) 64%,#ffffff);
214
246
  /* \u6697\u8272 hover \u63BA\u767D 14% / active 24%\uFF08\u5BF9\u9F50\u4E0A\u9762 2026-10-18 \u7684\u52A0\u91CD\u62CD\u677F\uFF09\u3002rgba \u515C\u5E95\u884C\u540C\u4E0A\u3002 */
215
- --tdt-hover:rgba(255,255,255,.14);
216
- --tdt-hover:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 14%,transparent);
217
- --tdt-active:rgba(255,255,255,.24);
218
- --tdt-active:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 24%,transparent);
219
- --tdt-plate:var(--dsw-static-neutral-850,#212123);
220
- --tdt-plate-hover:var(--dsw-static-neutral-800,#292929);
221
- --tdt-icon-plate:rgba(255,255,255,.05);
222
- --tdt-icon-plate:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 5%,transparent);
247
+ --dshpc-hover:rgba(255,255,255,.14);
248
+ --dshpc-hover:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 14%,transparent);
249
+ --dshpc-active:rgba(255,255,255,.24);
250
+ --dshpc-active:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 24%,transparent);
251
+ --dshpc-plate:var(--dsw-static-neutral-850,#212123);
252
+ --dshpc-plate-hover:var(--dsw-static-neutral-800,#292929);
253
+ --dshpc-icon-plate:rgba(255,255,255,.05);
254
+ --dshpc-icon-plate:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 5%,transparent);
223
255
  /* \u6697\u8272\u4E3B\u9898**\u53CD\u8FC7\u6765**\uFF1A\u8868\u5934\u8981\u6BD4\u5361\u7247\u9762**\u4EAE**\u3001\u6BD4\u6591\u9A6C\u7EB9\u518D**\u6D45\u4E00\u6863**\uFF08\u7528\u6237\uFF1A\u7EAF\u9ED1\u80CC\u666F\u6CA1\u6CD5\u770B\uFF09\u3002 */
224
- --tdt-head-bg:var(--tdt-surface-2);
256
+ --dshpc-head-bg:var(--dshpc-surface-2);
225
257
  /* \u6697\u8272\u5E95\u677F**\u5FAE\u4EAE**\uFF1Bhover **\u66F4\u4EAE**\uFF08\u539F\u5148 hover \u53D6 plate-hover \u53CD\u800C\u66F4\u6DE1 \u21D2 \u9F20\u6807\u79FB\u4E0A\u53BB\u5C31\u6CA1\u4E86\uFF09\u3002 */
226
- --tdt-chip-bg:rgba(255,255,255,.08);
227
- --tdt-chip-bg:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 8%,transparent);
228
- --tdt-chip-bg-hover:rgba(255,255,255,.16);
229
- --tdt-chip-bg-hover:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 16%,transparent);
258
+ --dshpc-chip-bg:rgba(255,255,255,.08);
259
+ --dshpc-chip-bg:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 8%,transparent);
260
+ --dshpc-chip-bg-hover:rgba(255,255,255,.16);
261
+ --dshpc-chip-bg-hover:color-mix(in srgb,var(--dsw-static-neutral-00,#fff) 16%,transparent);
230
262
  /* \u6697\u8272\u4E0B\u84DD\u8272\u8981\u66F4\u4EAE\u3001\u900F\u660E\u5EA6\u7565\u9AD8\u624D\u538B\u5F97\u4F4F\u6DF1\u5E95\u3002 */
231
- --tdt-open-bg:rgba(96,165,250,.18);
232
- --tdt-open-bg-soft:rgba(96,165,250,.08);
233
- --tdt-card-hover:rgba(96,165,250,.13);
263
+ --dshpc-open-bg:rgba(96,165,250,.18);
264
+ --dshpc-open-bg-soft:rgba(96,165,250,.08);
265
+ --dshpc-card-hover:rgba(96,165,250,.13);
234
266
  /* \u8BED\u4E49\u8272**\u6D45\u5E95**\uFF08\u6DF1\u8272\u7248\uFF09\uFF1A\u7528\u6237\u5ACC\u6DF1\u8272\u7684\u7EFF / \u7EA2\u300C\u6709\u70B9\u6DF1\u300D\u21D2 \u538B\u5230 **5%**\uFF08\u6D45\u8272\u6BB5\u662F 8%\uFF09\uFF0C
235
267
  \u66F4\u8D34\u8FD1\u9762\u677F\u5E95\u8272\u3001\u5B58\u5728\u611F\u66F4\u5F31\uFF1B\u5757\u5E95\u4E0E\u72B6\u6001\u8272\u7AD6\u6761\u4ECD\u540C\u6E90\uFF08\u7AD6\u6761\u662F\u5B9E\u8272\uFF0C\u4E0D\u53D7\u8FD9\u6761\u5F71\u54CD\uFF09\u3002 */
236
- --tdt-success-soft:color-mix(in srgb,var(--tdt-success) 5%,transparent);
237
- --tdt-warning-soft:color-mix(in srgb,var(--tdt-warning) 5%,transparent);
238
- --tdt-danger-soft:color-mix(in srgb,var(--tdt-danger) 5%,transparent);
239
- --tdt-business-soft:color-mix(in srgb,var(--tdt-business) 5%,transparent);
240
- /* \u300C\u9009\u4E2D\u9762\u300D\uFF08\u6DF1\u8272\u7248\uFF0C2026-10-06\uFF09\uFF1A\u63BA **~40% \u80CC\u666F\u8272**\uFF08--tdt-surface-base\uFF09\u21D2 \u65E0\u9650\u63A5\u8FD1\u9875\u9762\u80CC\u666F\u7684\u9ED1\u3001
268
+ --dshpc-success-soft:color-mix(in srgb,var(--dshpc-success) 5%,transparent);
269
+ --dshpc-warning-soft:color-mix(in srgb,var(--dshpc-warning) 5%,transparent);
270
+ --dshpc-danger-soft:color-mix(in srgb,var(--dshpc-danger) 5%,transparent);
271
+ --dshpc-business-soft:color-mix(in srgb,var(--dshpc-business) 5%,transparent);
272
+ /* \u300C\u9009\u4E2D\u9762\u300D\uFF08\u6DF1\u8272\u7248\uFF0C2026-10-06\uFF09\uFF1A\u63BA **~40% \u80CC\u666F\u8272**\uFF08--dshpc-surface-base\uFF09\u21D2 \u65E0\u9650\u63A5\u8FD1\u9875\u9762\u80CC\u666F\u7684\u9ED1\u3001
241
273
  \u53EA\u6BD4\u80CC\u666F\u7565\u6DF1\u4E00\u70B9\u70B9\uFF08\u7528\u6237\uFF1A\u6DF1\u8272\u4E0B\u5C55\u5F00\u533A\u538B\u7740\u4EFB\u52A1\u900F\u660E\u7EFF\u4F1A\u53D1\u7070\uFF0C\u5E95\u8272\u8981\u5C3D\u91CF\u8D34\u8FD1\u80CC\u666F\u624D\u4E0D\u663E\u7070\uFF09\u3002
242
274
  \u26A0\uFE0F \u6DF1\u8272\u4E0B\u4E0D\u80FD\u63BA\u6587\u5B57\u8272 \u2014\u2014 \u90A3\u662F\u767D\uFF0C\u4F1A\u53D8\u4EAE\uFF0C\u9009\u4E2D\u53CD\u800C\u6BD4\u672C\u6708\u65E5\u671F\u6D45\u3002 */
243
- --tdt-selected-bg:color-mix(in srgb,var(--tdt-surface-1) 60%,var(--tdt-surface-base));
275
+ --dshpc-selected-bg:color-mix(in srgb,var(--dshpc-surface-1) 60%,var(--dshpc-surface-base));
244
276
  /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u672C\u6708\u683C\u7684\u9ED8\u8BA4\u5E95\uFF08\u6DF1\u8272\u7248\uFF0C2026-10-06\uFF09\uFF1A\u6DF1\u7684\u3001\u5E26\u70B9\u7070\u84DD\u7684\u6697\u8272\uFF08\u7528\u6237\u7ED9\u7684\u53C2\u8003\u56FE \u2248 #23262e\uFF09\uFF0C
245
- \u6BD4\u539F\u6765\u7684\u5361\u7247\u9762\u66F4\u6C89\u3001\u66F4\u504F\u84DD\u7070\uFF1B\u9009\u4E2D\u683C\u4ECD\u8D70 --tdt-selected-bg\uFF08\u66F4\u6697\u4E00\u6863\uFF09\uFF0C\u5C42\u7EA7\u4E0D\u53D8\u3002 */
246
- --tdt-cal-cell-bg:#23262e;
247
- /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u672C\u6708\u683C hover \u5E95\uFF08\u6DF1\u8272\u6BB5\uFF0C2026-10-06\uFF09\uFF1A\u539F\u5148\u8D70 --tdt-hover\uFF08\u5BBF\u4E3B\u6D45\u8272\u53E0\u52A0\uFF09\u5728\u6DF1\u5E95\u4E0A\u663E\u5F97
277
+ \u6BD4\u539F\u6765\u7684\u5361\u7247\u9762\u66F4\u6C89\u3001\u66F4\u504F\u84DD\u7070\uFF1B\u9009\u4E2D\u683C\u4ECD\u8D70 --dshpc-selected-bg\uFF08\u66F4\u6697\u4E00\u6863\uFF09\uFF0C\u5C42\u7EA7\u4E0D\u53D8\u3002 */
278
+ --dshpc-cal-cell-bg:#23262e;
279
+ /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u672C\u6708\u683C hover \u5E95\uFF08\u6DF1\u8272\u6BB5\uFF0C2026-10-06\uFF09\uFF1A\u539F\u5148\u8D70 --dshpc-hover\uFF08\u5BBF\u4E3B\u6D45\u8272\u53E0\u52A0\uFF09\u5728\u6DF1\u5E95\u4E0A\u663E\u5F97
248
280
  \u300C\u7070\u53D1\u4EAE\u300D\uFF0C\u4E0D\u597D\u770B \u21D2 \u6362\u6210\u66F4\u8D34\u5E95\u7684\u84DD\u8C03\u5FAE\u4EAE\uFF08\u4E0E open-bg-soft \u540C\u65CF\uFF09\uFF0Chover \u65F6\u4E0D\u523A\u773C\u3001\u53C8\u6709\u53CD\u9988\u3002 */
249
- --tdt-cal-cell-hover:rgba(96,165,250,.12);
281
+ --dshpc-cal-cell-hover:rgba(96,165,250,.12);
250
282
  /* \u4EFB\u52A1\u65E5\u7A0B\u9875\u5C55\u5F00\u9762\u677F\u5E95\uFF08\u6DF1\u8272\u6BB5\uFF0C2026-10-06 \u7EED\uFF09\uFF1A\u4E0E\u539F selected-bg \u6697\u503C\u4E00\u81F4\uFF0C\u6DF1\u8272 UI \u4E0D\u52A8 */
251
- --tdt-cal-panel-bg:color-mix(in srgb,var(--tdt-surface-1) 60%,var(--tdt-surface-base));
283
+ --dshpc-cal-panel-bg:color-mix(in srgb,var(--dshpc-surface-1) 60%,var(--dshpc-surface-base));
252
284
  }
253
285
  \``;
254
286
 
255
287
  // dist/design/style-kit.js
256
- var SOURCE_PREFIX = "--tdt-";
288
+ var CSS_PREFIX = "dshpc";
257
289
  var TOKENS_DOMAIN = "tokens";
258
- var PREFIX_RE = /^[a-zA-Z][a-zA-Z0-9-]*$/;
259
- function buildTokensCss(prefix) {
260
- assertPrefix(prefix);
261
- return TOKENS_CSS_TEMPLATE.split(SOURCE_PREFIX).join(`--${prefix}-`);
262
- }
263
- function assertPrefix(prefix) {
264
- if (!PREFIX_RE.test(prefix)) {
265
- throw new Error(`dsh-plugin-core/design: prefix \u5FC5\u987B\u662F\u5B57\u6BCD\u5F00\u5934\u3001\u53EA\u542B\u5B57\u6BCD\u6570\u5B57\u4E0E\u8FDE\u5B57\u7B26\uFF0C\u6536\u5230 ${JSON.stringify(prefix)}`);
266
- }
267
- }
268
290
  function createStyleKit(options) {
269
- const { id, prefix } = options;
270
- assertPrefix(prefix);
291
+ const { id } = options;
271
292
  if (id === "")
272
293
  throw new Error("dsh-plugin-core/design: id \u4E0D\u80FD\u4E3A\u7A7A");
273
- const tokensCss = buildTokensCss(prefix);
294
+ const tokensCss = TOKENS_CSS_TEMPLATE;
274
295
  const domains = /* @__PURE__ */ new Map();
275
296
  let tag = null;
276
297
  let dirty = true;
277
- const buildCss2 = () => {
298
+ const composeCss = () => {
278
299
  const entries = [...domains.entries()];
279
300
  entries.sort((a, b) => a[0] === TOKENS_DOMAIN ? -1 : b[0] === TOKENS_DOMAIN ? 1 : 0);
280
301
  return entries.map(([, css]) => css).join("\n");
@@ -282,7 +303,7 @@ function createStyleKit(options) {
282
303
  const flush = () => {
283
304
  if (tag === null)
284
305
  return;
285
- tag.textContent = buildCss2();
306
+ tag.textContent = composeCss();
286
307
  dirty = false;
287
308
  };
288
309
  const ensureStyles = () => {
@@ -311,11 +332,11 @@ function createStyleKit(options) {
311
332
  return;
312
333
  domains.set(domain, css);
313
334
  dirty = true;
314
- if (tag !== null && tag.isConnected)
335
+ if (tag?.isConnected === true)
315
336
  flush();
316
337
  };
317
338
  const dispose = () => {
318
- if (tag !== null && tag.isConnected)
339
+ if (tag?.isConnected === true)
319
340
  tag.remove();
320
341
  tag = null;
321
342
  domains.clear();
@@ -323,9 +344,8 @@ function createStyleKit(options) {
323
344
  };
324
345
  return {
325
346
  id,
326
- prefix,
327
347
  tokensCss,
328
- cssVar: (name) => `--${prefix}-${name}`,
348
+ cssVar: (name) => `--${CSS_PREFIX}-${name}`,
329
349
  registerStyle,
330
350
  ensureStyles,
331
351
  dispose,
@@ -349,104 +369,164 @@ var SEGMENTED_CSS = `
349
369
  \u51E0\u4F55 = \u6BB5\u9AD8 = token \u2212 6px\uFF08\u4E0A\u4E0B\u5404 2px padding + 1px \u8FB9\u6846\uFF09\uFF1Bdefault \u771F\u8FB9\u6846 1px + padding 2px\uFF0C
350
370
  inset \u65E0\u8FB9\u6846\u6545 padding \u6536 3px \u628A\u7F3A\u7684 1px \u8865\u56DE\uFF0C\u4E24\u79CD\u5916\u89C2\u603B\u9AD8\u90FD == token\uFF0824/28/32\uFF09\uFF0C\u4E0D\u518D\u591A +2px\u3002
351
371
  \u4EE5\u540E Button / Input \u7684\u6709\u8FB9 / \u65E0\u8FB9\u540C\u6B64\u89C4\u5219\u3002 */
352
- .dsh-tdt-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--tdt-radius-md);background:var(--seg-track);}
353
- /* \u9009\u4E2D\u7247 = --tdt-solid\uFF08\u4EAE=\u767D\u7247 / \u6697=\u9ED1\u7247\uFF0C2026-10-18 \u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6\u622A\u56FE\uFF09\u3002
354
- \u539F\u5148\u53D6 surface-raised \u21D2 \u4E0E\u5361\u7247\u5E95\uFF08\u540C\u4E3A bg-layer-1\uFF09\u540C\u8272\uFF0C\u9009\u4E2D\u7247\u5728\u5361\u4E0A\u9690\u5F62\u3001\u53EA\u5269\u9634\u5F71\u5708\u3002 */
355
- .dsh-tdt-seg--default{--seg-track:var(--tdt-surface-2);--seg-thumb:var(--tdt-solid);border:1px solid var(--tdt-border);}
356
- .dsh-tdt-seg--inset{--seg-track:var(--tdt-hover);--seg-thumb:var(--tdt-solid);border:0;padding:3px;}
357
-
358
- .dsh-tdt-seg__item{appearance:none;display:inline-flex;align-items:center;gap:4px;box-sizing:border-box;
359
- height:calc(var(--tdt-control-h-sm) - 6px);padding:0 12px;border:0;border-radius:var(--tdt-radius-sm);
360
- background:transparent;color:var(--tdt-fg-2);font-family:inherit;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);
372
+ .dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--seg-track);}
373
+ /* \u9009\u4E2D\u7247 = --dshpc-surface-raised\uFF08\u5144\u5F1F\u9879\u76EE dsh-task-dispatch-table \u7684\u53D6\u6CD5\uFF0C2026-10-19 \u7528\u6237\u70B9\u540D
374
+ \u300C\u628A\u5144\u5F1F\u7684\u6837\u5F0F\u6E05\u4E86\u5C31\u4E0D\u6B63\u5E38 \u21D2 \u6CA1\u642C\u5168\u300D\u540E\u6539\u56DE\uFF09\u300210-18 \u66FE\u6539\u6210 --dshpc-solid\uFF0C\u4F46\u5B83\u5728\u6697\u8272\u4E3B\u9898\u4E0B
375
+ \u662F\u8FD1\u9ED1\uFF08\u6BD4\u8F68\u9053\u8FD8\u6697\uFF09\u21D2 \u9009\u4E2D\u7247\u9677\u8FDB\u8F68\u9053\u91CC\uFF1Braised \u5728\u4E24\u4E2A\u4E3B\u9898\u4E0B\u90FD\u6BD4\u8F68\u9053\u4EAE\u4E00\u6863\uFF0C\u65B9\u5411\u6B63\u786E\u3002
376
+ raised \u4E0E\u5361\u7247\u5E95\u540C\u4E3A bg-layer-1 \u21D2 \u9009\u4E2D\u7247\u9760**1px \u63CF\u8FB9 + \u9634\u5F71**\u4E0E\u5361\u7247\u533A\u5206\uFF08\u89C1 __item[aria-pressed]\uFF09\u3002 */
377
+ .dshpc-seg--default{--seg-track:var(--dshpc-surface-2);--seg-thumb:var(--dshpc-surface-raised);border:1px solid var(--dshpc-border);}
378
+ .dshpc-seg--inset{--seg-track:var(--dshpc-hover);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;}
379
+
380
+ .dshpc-seg__item{appearance:none;display:inline-flex;align-items:center;gap:4px;box-sizing:border-box;
381
+ height:calc(var(--dshpc-control-h-sm) - 6px);padding:0 12px;border:1px solid transparent;border-radius:var(--dshpc-radius-sm);
382
+ background:transparent;color:var(--dshpc-fg-2);font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);
361
383
  font-weight:400;white-space:nowrap;cursor:pointer;
362
- transition:color var(--tdt-dur-fast) var(--tdt-ease),background-color var(--tdt-dur-fast) var(--tdt-ease),box-shadow var(--tdt-dur-fast) var(--tdt-ease);}
363
- .dsh-tdt-seg--md .dsh-tdt-seg__item{height:calc(var(--tdt-control-h-md) - 6px);}
364
- .dsh-tdt-seg--lg .dsh-tdt-seg__item{height:calc(var(--tdt-control-h-lg) - 6px);}
365
- .dsh-tdt-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--tdt-fg);}
366
- .dsh-tdt-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--tdt-shadow-raised);color:var(--tdt-fg);font-weight:600;}
367
- .dsh-tdt-seg__item:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:-2px;}
368
- .dsh-tdt-seg__item:disabled{cursor:default;opacity:.4;}
384
+ transition:color var(--dshpc-dur-fast) var(--dshpc-ease),background-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}
385
+ .dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);}
386
+ .dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);}
387
+ /* \u672A\u9009\u4E2D\u9879 hover\uFF1A\u7ED9\u4E00\u5C42\u6D45\u5E95\uFF08\u6B64\u524D\u53EA\u63D0\u4EAE\u6587\u5B57\uFF0C\u7528\u6237\u770B\u4E0D\u51FA\u300C\u8FD9\u91CC\u53EF\u4EE5\u70B9\u300D\uFF09\u3002
388
+ inset \u7684\u8F68\u9053\u672C\u8EAB\u5C31\u662F --dshpc-hover \u21D2 \u90A3\u91CC\u7528 active \u4E00\u6863\uFF0C\u907F\u514D hover \u4E0E\u8F68\u9053\u540C\u8272\u7B49\u4E8E\u6CA1\u53D8\u3002 */
389
+ .dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);background:var(--dshpc-hover);}
390
+ .dshpc-seg--inset .dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){background:var(--dshpc-active);}
391
+ /* \u9009\u4E2D\u7247\uFF1A\u4EAE\u7247 + \u63CF\u8FB9 + \u6D6E\u8D77\u9634\u5F71 \u21D2 \u5728\u5361\u7247\u5E95\uFF08\u4E0E\u4EAE\u7247\u540C\u8272\uFF09\u4E0A\u4E5F\u770B\u5F97\u51FA\u8FB9\u754C */
392
+ .dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);border-color:var(--dshpc-border);
393
+ box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}
394
+ .dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}
395
+ .dshpc-seg__item:disabled{cursor:default;opacity:.4;}
369
396
 
370
397
  /* \u6BB5\u5185\u89D2\u6807\uFF08\u5982\u300C\u5F02\u5E38\u300D\u7684\u6570\u91CF\uFF09\uFF1A\u8BED\u4E49\u8272\u5B9E\u9762 + \u53CD\u767D\u5B57\uFF0C0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002
371
398
  \u26A0\uFE0F **\u5FC5\u987B\u662F\u6B63\u5706**\uFF08\u7528\u6237 2026-10-03\uFF1A\u300C\u591A\u4F4D\u6570\u7ED9\u5B83\u6491\u5F00\u4E86\uFF0C\u90A3\u4E0D\u662F\u5706\u7684\u5C31\u6CA1\u529E\u6CD5\u4E86\u300D\uFF09\uFF1A
372
399
  \u56FA\u5B9A 16\xD716 + border-radius:50% + padding:0 + overflow:hidden \u21D2 \u4E00\u4F4D\u6570 / \u4E24\u4F4D\u6570\u90FD\u662F\u540C\u4E00\u4E2A\u5706\uFF0C
373
400
  \u6570\u5B57\u7F29\u5230 10px \u585E\u5F97\u4E0B\uFF1B\u4E0D\u518D\u7528 min-width + \u5DE6\u53F3 padding\uFF08\u90A3\u4F1A\u8BA9\u5BBD\u5EA6\u968F\u4F4D\u6570\u589E\u957F\u53D8\u692D\u5706\uFF09\u3002 */
374
- .dsh-tdt-seg__badge{display:inline-flex;align-items:center;justify-content:center;flex:none;
401
+ .dshpc-seg__badge{display:inline-flex;align-items:center;justify-content:center;flex:none;
375
402
  width:16px;height:16px;padding:0;overflow:hidden;
376
- border-radius:50%;background:var(--tdt-danger);color:var(--tdt-on-signal);
403
+ border-radius:50%;background:var(--dshpc-danger);color:var(--dshpc-on-signal);
377
404
  font-size:10px;line-height:16px;font-weight:500;font-variant-numeric:tabular-nums;}
378
405
 
379
406
  /* \u6BB5\u5185\u4E2D\u6027\u8BA1\u6570\uFF08\u5982\u7B5B\u9009\u6761\u300C\u5168\u90E8 11\u300D\uFF09\uFF1A**\u7EAF\u6587\u5B57\uFF0C\u65E0\u5E95\u3001\u65E0\u8FB9\u3001\u65E0\u5706\u89D2**\uFF08\u5BF9\u9F50 task-ledger 2026-10-18
380
407
  \u62CD\u677F\u7684 .dtl-seg__num\uFF1A\u5706\u5708\u53D6\u4E86\u3001\u5B57\u518D\u5C0F\u70B9\uFF09\uFF1B0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002danger \u89D2\u6807\u4ECD\u8D70 __badge\u3002 */
381
- .dsh-tdt-seg__count{display:inline;flex:none;margin-left:3px;padding:0;border:0;border-radius:0;
382
- background:none;color:var(--tdt-fg-3);font-size:10px;line-height:1;font-weight:400;font-variant-numeric:tabular-nums;}
408
+ .dshpc-seg__count{display:inline;flex:none;margin-left:3px;padding:0;border:0;border-radius:0;
409
+ background:none;color:var(--dshpc-fg-3);font-size:10px;line-height:1;font-weight:400;font-variant-numeric:tabular-nums;}
383
410
 
384
411
  /* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u884C\u7528\uFF09\uFF0C\u5404\u6BB5\u7B49\u5206 */
385
- .dsh-tdt-seg--block{display:flex;width:100%;}
386
- .dsh-tdt-seg--block .dsh-tdt-seg__item{flex:1 1 auto;justify-content:center;}
412
+ .dshpc-seg--block{display:flex;width:100%;}
413
+ .dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;}
387
414
 
388
415
  /* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\uFF08\u4EFB\u52A1\u65B0\u589E / \u7F16\u8F91\u9875\uFF09\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01 \u660E\u786E\u8981\u6C42\uFF1A
389
416
  \u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF0C\u7EDF\u4E00\u5230 Segmented \u540E\u7531\u8FD9\u4E00\u4FEE\u9970\u7C7B\u8865\u56DE\u4E24\u5904\u5DEE\u5F02\uFF09\uFF1A
390
417
  - \u6BCF\u683C\u505A\u6210\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\uFF1B
391
- - \u9009\u4E2D\u6001\u7528\u54C1\u724C\u84DD\uFF08--tdt-business\uFF09\u3001\u53CD\u767D\u5B57\uFF0C\u8F68\u9053\u7528 hover \u7070\uFF08\u4E0E\u539F\u81EA\u7ED8\u8F68\u9053\u4E00\u81F4\uFF09\u3002
392
- \u76AE\u80A4\u96C6\u4E2D\u5728\u6B64\u3001\u4E0D\u5185\u8054\uFF1B\u8C03\u7528\u70B9\u53EA\u6302 .dsh-tdt-seg--weekday \u4E00\u4E2A\u4FEE\u9970\u7C7B\uFF0C\u7B26\u5408\u300C\u76AE\u80A4\u53EA\u5728 controls-css\u300D\u7684\u89C4\u77E9\u3002 */
418
+ - \u9009\u4E2D\u6001\u7528\u54C1\u724C\u84DD\uFF08--dshpc-business\uFF09\u3001\u53CD\u767D\u5B57\uFF0C\u8F68\u9053\u7528 hover \u7070\uFF08\u4E0E\u539F\u81EA\u7ED8\u8F68\u9053\u4E00\u81F4\uFF09\u3002
419
+ \u76AE\u80A4\u96C6\u4E2D\u5728\u6B64\u3001\u4E0D\u5185\u8054\uFF1B\u8C03\u7528\u70B9\u53EA\u6302 .dshpc-seg--weekday \u4E00\u4E2A\u4FEE\u9970\u7C7B\uFF0C\u7B26\u5408\u300C\u76AE\u80A4\u53EA\u5728 controls-css\u300D\u7684\u89C4\u77E9\u3002 */
393
420
  /* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\uFF08\u4EFB\u52A1\u65B0\u589E / \u7F16\u8F91\u9875\uFF09\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01 \u660E\u786E\u8981\u6C42\uFF1A
394
421
  \u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF0C\u7EDF\u4E00\u5230 Segmented \u540E\u7531\u8FD9\u4E00\u4FEE\u9970\u7C7B\u8865\u56DE\u4E24\u5904\u5DEE\u5F02\uFF09\uFF1A
395
422
  - \u6BCF\u683C\u505A\u6210\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\uFF1B
396
- - \u9009\u4E2D\u6001\u7528\u54C1\u724C\u84DD\uFF08--tdt-business\uFF09\u3001\u53CD\u767D\u5B57\uFF0C\u8F68\u9053\u7528 hover \u7070\uFF08\u4E0E\u539F\u81EA\u7ED8\u8F68\u9053\u4E00\u81F4\uFF09\u3002
423
+ - \u9009\u4E2D\u6001\u7528\u54C1\u724C\u84DD\uFF08--dshpc-business\uFF09\u3001\u53CD\u767D\u5B57\uFF0C\u8F68\u9053\u7528 hover \u7070\uFF08\u4E0E\u539F\u81EA\u7ED8\u8F68\u9053\u4E00\u81F4\uFF09\u3002
397
424
  2026-10-18 \u7528\u6237\u91CD\u7533\uFF08\u5BF9\u9F50\u771F\u5B9E\u622A\u56FE\uFF09\uFF1A**\u65E0\u5916\u63CF\u8FB9**\uFF08\u4E0D\u7BA1\u6302\u54EA\u4E2A variant\uFF0C\u8FD9\u91CC\u4E00\u5F8B\u64A4\u8FB9\uFF09\uFF0C
398
425
  \u4E14\u65B9\u5757\u4E4B\u95F4\u8981\u6709\u95F4\u8DDD\uFF08gap 6px\uFF0C\u4E0D\u518D 2px \u6324\u6210\u4E00\u5768\uFF09\u3002 */
399
- .dsh-tdt-seg--weekday{--seg-track:var(--tdt-hover);gap:6px;border:0;padding:3px;}
400
- .dsh-tdt-seg--weekday .dsh-tdt-seg__item{width:calc(var(--tdt-control-h-lg) - 6px);padding:0;justify-content:center;}
401
- .dsh-tdt-seg--weekday .dsh-tdt-seg__item[aria-pressed='true']{background:var(--tdt-business);color:var(--tdt-fg-inverse);box-shadow:var(--tdt-shadow-raised);}
426
+ .dshpc-seg--weekday{--seg-track:var(--dshpc-hover);gap:6px;border:0;padding:3px;}
427
+ .dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 6px);padding:0;justify-content:center;}
428
+ .dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);}
402
429
 
403
- @media (prefers-reduced-motion: reduce){.dsh-tdt-seg__item{transition:none;}}
430
+ @media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}}
404
431
  `;
405
432
  var BUTTON_CSS = `
406
433
  /* \u2500\u2500 \u6309\u94AE / \u56FE\u6807\u94AE P2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
407
- \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--tdt-control-h-sm(24) / -md(28) / -lg(32)\uFF0C
434
+ \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C
408
435
  \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002
409
- variant \u53EA\u6362\u989C\u8272\uFF0C\u7ED3\u6784 / \u5C3A\u5BF8 / \u4EA4\u4E92\u53EA\u6B64\u4E00\u4EFD\u3002 */
410
- .dsh-tdt-btn{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:var(--tdt-space-1);
411
- box-sizing:border-box;border:1px solid transparent;border-radius:var(--tdt-radius-md);
412
- background:transparent;color:var(--tdt-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;
413
- transition:background-color var(--tdt-dur-fast) var(--tdt-ease),border-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease),opacity var(--tdt-dur-fast) var(--tdt-ease);}
414
- .dsh-tdt-btn--sm{height:var(--tdt-control-h-sm);padding:0 10px;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);}
415
- .dsh-tdt-btn--md{height:var(--tdt-control-h-md);padding:0 12px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
416
- .dsh-tdt-btn--lg{height:var(--tdt-control-h-lg);padding:0 14px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
417
- .dsh-tdt-btn__icon{display:inline-flex;align-items:center;flex:none;}
418
-
419
- .dsh-tdt-btn--primary{background:var(--tdt-accent);color:var(--tdt-fg-inverse);}
420
- .dsh-tdt-btn--primary:hover:not(:disabled){opacity:.9;}
421
- .dsh-tdt-btn--outline{background:var(--tdt-surface-1);border-color:var(--tdt-border-strong);color:var(--tdt-fg);}
422
- .dsh-tdt-btn--outline:hover:not(:disabled){background:var(--tdt-hover);}
423
- .dsh-tdt-btn--ghost{color:var(--tdt-fg-2);}
424
- .dsh-tdt-btn--ghost:hover:not(:disabled){background:var(--tdt-hover);color:var(--tdt-fg);}
425
- .dsh-tdt-btn--danger{background:var(--tdt-danger);color:var(--tdt-on-signal);}
426
- .dsh-tdt-btn--danger:hover:not(:disabled){opacity:.9;}
427
- /* danger-ink\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\uFF0C\u6302\u4E0E outline \u7EC4\u5408\u7684\u4FEE\u9970\u7C7B */
428
- .dsh-tdt-btn--danger-ink{border-color:var(--tdt-danger);color:var(--tdt-danger);}
429
- .dsh-tdt-btn--danger-ink:hover:not(:disabled){background:color-mix(in srgb,var(--tdt-danger) 10%,transparent);color:var(--tdt-danger);}
430
- /* link\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */
431
- .dsh-tdt-btn--link{height:auto;padding:0;border:0;background:none;color:var(--tdt-link);font-weight:400;text-align:left;}
432
- .dsh-tdt-btn--link:hover:not(:disabled){background:none;color:var(--tdt-link);text-decoration:underline;}
433
- .dsh-tdt-btn:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:2px;}
434
- .dsh-tdt-btn:disabled{cursor:default;opacity:.5;}
435
436
 
436
- .dsh-tdt-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;
437
- border:1px solid transparent;border-radius:var(--tdt-radius-sm);background:transparent;color:var(--tdt-fg-2);
437
+ \u4E09\u6761\u53D7\u63A7\u8F74\uFF082026-10-19 \u91CD\u5199\uFF0C\u5BF9\u9F50\u4E3B\u6D41 UI \u6846\u67B6\u7684\u5206\u7C7B\u53E3\u5F84\uFF09\uFF1A
438
+ \xB7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A
439
+ primary / secondary / outline / ghost / danger / success / warning / info /
440
+ danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09
441
+ \xB7 size \u2014\u2014 sm / md / lg
442
+ \xB7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD
443
+ \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C
444
+ \u7ED3\u6784\u4E0E\u4EA4\u4E92\u53EA\u6709\u4E0A\u9762\u8FD9\u4E00\u4EFD\uFF1B\u4EFB\u4F55\u6863\u4F4D\u90FD\u4E0D\u8BB8\u518D\u5199\u4E00\u904D display/height/padding\u3002
445
+ \u81EA\u5B9A\u4E49\u989C\u8272\uFF08Button \u7684 color \u53C2\u6570\uFF09\u540C\u6837\u53EA\u8986\u76D6\u8FD9 5 \u4E2A\u53D8\u91CF\uFF08token \u8986\u76D6\uFF0C\u4E0D\u662F\u65B0\u76AE\u80A4\uFF09\u3002
446
+
447
+ \u26A0\uFE0F hover \u4E0D\u518D\u7528 opacity \u538B\u4E00\u5C42\uFF08\u7528\u6237 2026-10-19\uFF1A\u300C\u9ED1\u8272\u548C\u7EA2\u8272\u7684\u6309\u94AE\u79FB\u4E0A\u53BB\u53D8\u5316\u592A\u5C0F\uFF0C
448
+ \u5B8C\u5168\u611F\u89C9\u4E0D\u5230\u989C\u8272\u53D8\u4E86\u300D\uFF09\u21D2 \u8D70 --dshpc-*-hover / -active \u7684\u660E\u786E\u6DF7\u8272\uFF0C\u89C1 tokens-css.ts\u3002 */
449
+ .dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;
450
+ --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);
451
+ appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;
452
+ box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);
453
+ background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;
454
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease),transform var(--dshpc-dur-fast) var(--dshpc-ease);}
455
+ .dshpc-btn--sm{height:var(--dshpc-control-h-sm);padding:0 10px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);}
456
+ .dshpc-btn--md{height:var(--dshpc-control-h-md);padding:0 12px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
457
+ .dshpc-btn--lg{height:var(--dshpc-control-h-lg);padding:0 14px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
458
+ /* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */
459
+ .dshpc-btn--block{display:flex;width:100%;}
460
+ .dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;}
461
+ /* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u4E2A\u540C\u8272\u5C0F\u5708\uFF08\u5C3A\u5BF8\u968F\u5B57\u53F7\uFF0C\u7F29\u653E\u4E0D\u4F9D\u8D56\u5E38\u91CF\uFF09 */
462
+ .dshpc-btn__spinner{display:inline-block;flex:none;width:1em;height:1em;box-sizing:border-box;
463
+ border:1.5px solid currentColor;border-right-color:transparent;border-radius:50%;
464
+ animation:dshpc-btn-spin .7s linear infinite;}
465
+ @keyframes dshpc-btn-spin{to{transform:rotate(360deg)}}
466
+
467
+ /* \u4EA4\u4E92\u6001\uFF1A\u989C\u8272\u53D8\u5316\u5199\u5728\u53D8\u91CF\u4E0A \u21D2 \u6240\u6709\u6863\u4F4D\u4E00\u6B21\u751F\u6548\uFF0C\u4E14\u53D8\u5316\u5E45\u5EA6\u7531 token \u51B3\u5B9A\uFF08\u591F\u660E\u663E\uFF09 */
468
+ .dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}
469
+ .dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}
470
+ .dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
471
+ .dshpc-btn:disabled{cursor:default;opacity:.5;}
472
+
473
+ .dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);
474
+ --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}
475
+ /* secondary\uFF1A\u4E2D\u6027\u5B9E\u5FC3\uFF08\u7070\u9762\uFF09\uFF0C\u7528\u4E8E\u300C\u53D6\u6D88 / \u6B21\u8981\u300D\u8FD9\u7C7B\u4E0E\u4E3B\u64CD\u4F5C\u5E76\u6392\u7684\u6309\u94AE */
476
+ .dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);
477
+ --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}
478
+ .dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);
479
+ --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}
480
+ .dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);
481
+ --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}
482
+ .dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);
483
+ --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}
484
+ .dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);
485
+ --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}
486
+ .dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);
487
+ --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}
488
+ .dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);
489
+ --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}
490
+ /* danger-outline\uFF1A\u7EA2\u5B57\u63CF\u8FB9\uFF08\u7834\u574F\u6027\u6B21\u8981\u64CD\u4F5C\uFF0C\u5982\u5361\u7247\u4E0A\u7684\u300C\u5220\u9664\u300D\uFF09\u3002
491
+ \u26A0\uFE0F \u65E7\u4FEE\u9970\u7C7B danger-ink \u4FDD\u7559\u4E3A\u522B\u540D\uFF08\u6D88\u8D39\u65B9\u53EF\u80FD\u8FD8\u5728\u6302\uFF09\uFF0C\u4E24\u8005\u540C\u4E00\u5957\u76AE\u80A4\u3002 */
492
+ .dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);
493
+ --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}
494
+ /* link\uFF1A\u884C\u5185\u6587\u5B57\u94FE\u63A5\u578B\uFF08\u4F1A\u8BDD / \u4EA7\u51FA\u6587\u4EF6\u540D\uFF09\uFF0C\u65E0\u5E95\u65E0\u8FB9\u3001\u54C1\u724C\u84DD\u3001hover \u4E0B\u5212\u7EBF */
495
+ .dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);
496
+ --btn-bg-hover:transparent;--btn-bg-active:transparent;
497
+ height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}
498
+ .dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}
499
+
500
+ /* \u56FE\u6807\u94AE\uFF1A\u7EAF\u56FE\u6807\uFF0C\u65B9\u5F62\uFF1B\u5C3A\u5BF8\u6863\u7684\u5BBD\u9AD8\u4E0E\u540C\u6863\u6587\u5B57\u6309\u94AE\u7B49\u9AD8 */
501
+ .dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;
502
+ border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);
503
+ font-family:inherit;cursor:pointer;flex:none;
504
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);}
505
+ .dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}
506
+ .dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}
507
+ .dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}
508
+ .dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}
509
+ .dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}
510
+ .dshpc-iconbtn--danger{color:var(--dshpc-danger);}
511
+ .dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}
512
+ .dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}
513
+ .dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
514
+ .dshpc-iconbtn:disabled{cursor:default;opacity:.4;}
515
+
516
+ .dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;
517
+ border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);
438
518
  font-family:inherit;cursor:pointer;flex:none;
439
- transition:background-color var(--tdt-dur-fast) var(--tdt-ease),border-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease),opacity var(--tdt-dur-fast) var(--tdt-ease);}
440
- .dsh-tdt-iconbtn--sm{width:var(--tdt-control-h-sm);height:var(--tdt-control-h-sm);font-size:var(--tdt-font-sm);}
441
- .dsh-tdt-iconbtn--md{width:var(--tdt-control-h-md);height:var(--tdt-control-h-md);font-size:var(--tdt-font-md);}
442
- .dsh-tdt-iconbtn--lg{width:var(--tdt-control-h-lg);height:var(--tdt-control-h-lg);font-size:var(--tdt-font-md);}
443
- .dsh-tdt-iconbtn--plain{color:var(--tdt-fg-2);}
444
- .dsh-tdt-iconbtn--outline{background:var(--tdt-surface-1);border-color:var(--tdt-border);color:var(--tdt-fg-2);}
445
- .dsh-tdt-iconbtn--danger{color:var(--tdt-danger);}
446
- .dsh-tdt-iconbtn:hover:not(:disabled){background:var(--tdt-hover);color:var(--tdt-fg);}
447
- .dsh-tdt-iconbtn--danger:hover:not(:disabled){background:var(--tdt-hover);color:var(--tdt-danger);}
448
- .dsh-tdt-iconbtn:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:2px;}
449
- .dsh-tdt-iconbtn:disabled{cursor:default;opacity:.4;}
519
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease),opacity var(--dshpc-dur-fast) var(--dshpc-ease);}
520
+ .dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}
521
+ .dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}
522
+ .dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}
523
+ .dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}
524
+ .dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}
525
+ .dshpc-iconbtn--danger{color:var(--dshpc-danger);}
526
+ .dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}
527
+ .dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-danger);}
528
+ .dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
529
+ .dshpc-iconbtn:disabled{cursor:default;opacity:.4;}
450
530
 
451
531
  /* \u2500\u2500 \u884C\u5F0F\u6587\u4EF6\u6309\u94AE\uFF08\u56FE\u6807 + \u6587\u4EF6\u540D\uFF09P2\uFF1A**\u5168\u7AD9\u552F\u4E00\u5B9E\u73B0**\uFF082026-10-04 \u6536\u7F16\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
452
532
  \u7528\u9014\uFF1A\u300C\u4EA7\u51FA\u7269 / \u9644\u4EF6\u300D\u90A3\u79CD**\u4E00\u884C\u4E00\u4E2A\u6587\u4EF6**\u7684\u6E05\u5355\u9879\uFF08\u57FA\u7840\u4FE1\u606F\u53F3\u680F\u4EA7\u51FA\u7269\u6E05\u5355\u3001\u9644\u4EF6\u533A\u3001
@@ -454,425 +534,422 @@ var BUTTON_CSS = `
454
534
  \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A
455
535
  --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09
456
536
  --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09
457
- \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dsh-tdt-info-out\uFF09\uFF0C
537
+ \u6536\u7F16\u539F\u56E0\uFF1A\u8FD9\u4EFD\u76AE\u80A4\u6B64\u524D\u53EA\u5199\u5728 task-list.tsx \u7684 TASK_LIST_CSS \u91CC\uFF08\u65E7\u540D .dshpc-info-out\uFF09\uFF0C
458
538
  \u6267\u884C\u8BB0\u5F55\u9875\u5C55\u5F00\u533A\u8981\u7528\u540C\u4E00\u79CD\u89C2\u611F \u21D2 \u4E0A\u63D0\u57FA\u7840\u5C42\uFF0C\u907F\u514D\u518D\u51FA\u73B0\u300C\u5404\u5199\u4E00\u4EFD\u5916\u89C2\u300D\uFF08\u540C\u540D\u4E0D\u540C\u76AE\u7684\u5751\u521A\u8E29\u8FC7\uFF09\u3002 */
459
- .dsh-tdt-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--tdt-radius-xs);
460
- background:transparent;color:var(--tdt-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;
461
- transition:background-color var(--tdt-dur) var(--tdt-ease);}
462
- .dsh-tdt-filechip:hover:not(:disabled){background:var(--tdt-chip-bg);}
463
- .dsh-tdt-filechip:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px;}
464
- .dsh-tdt-filechip:disabled{cursor:default;background:transparent;color:var(--tdt-fg-3);}
465
- .dsh-tdt-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;
466
- padding:4px 6px;font-size:var(--tdt-font-xs);}
467
- .dsh-tdt-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--tdt-font-sm);}
468
-
469
- @media (prefers-reduced-motion: reduce){.dsh-tdt-btn,.dsh-tdt-iconbtn,.dsh-tdt-filechip{transition:none;}}
539
+ .dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);
540
+ background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;
541
+ transition:background-color var(--dshpc-dur) var(--dshpc-ease);}
542
+ .dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}
543
+ .dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}
544
+ .dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}
545
+ .dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;
546
+ padding:4px 6px;font-size:var(--dshpc-font-xs);}
547
+ .dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}
548
+
549
+ @media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}
470
550
  `;
471
551
  var FIELD_CSS = `
472
552
  /* \u2500\u2500 \u8F93\u5165\u7C7B P3 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
473
- .dsh-tdt-input{box-sizing:border-box;border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);
474
- background:var(--tdt-surface-1);color:var(--tdt-fg);font-family:inherit;outline:none;
475
- transition:border-color var(--tdt-dur-fast) var(--tdt-ease),box-shadow var(--tdt-dur-fast) var(--tdt-ease);}
476
- .dsh-tdt-input--sm{height:var(--tdt-control-h-sm);padding:0 8px;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);}
477
- .dsh-tdt-input--md{height:var(--tdt-control-h-md);padding:0 10px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
478
- .dsh-tdt-input--lg{height:var(--tdt-control-h-lg);padding:0 12px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
479
- .dsh-tdt-input::placeholder{color:var(--tdt-fg-dim);}
480
- .dsh-tdt-input:focus{border-color:var(--tdt-focus);box-shadow:0 0 0 1px var(--tdt-focus);}
481
- .dsh-tdt-input--error{border-color:var(--tdt-danger);}
482
- .dsh-tdt-input:disabled{cursor:default;opacity:.5;}
483
-
484
- .dsh-tdt-pfx{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;
485
- border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);background:var(--tdt-surface-1);color:var(--tdt-fg);}
486
- .dsh-tdt-pfx--sm{height:var(--tdt-control-h-sm);}
487
- .dsh-tdt-pfx--md{height:var(--tdt-control-h-md);}
488
- .dsh-tdt-pfx--lg{height:var(--tdt-control-h-lg);}
553
+ .dshpc-input{box-sizing:border-box;border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);
554
+ background:var(--dshpc-surface-1);color:var(--dshpc-fg);font-family:inherit;outline:none;
555
+ transition:border-color var(--dshpc-dur-fast) var(--dshpc-ease),box-shadow var(--dshpc-dur-fast) var(--dshpc-ease);}
556
+ .dshpc-input--sm{height:var(--dshpc-control-h-sm);padding:0 8px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);}
557
+ .dshpc-input--md{height:var(--dshpc-control-h-md);padding:0 10px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
558
+ .dshpc-input--lg{height:var(--dshpc-control-h-lg);padding:0 12px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
559
+ .dshpc-input::placeholder{color:var(--dshpc-fg-dim);}
560
+ .dshpc-input:focus{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}
561
+ .dshpc-input--error{border-color:var(--dshpc-danger);}
562
+ .dshpc-input:disabled{cursor:default;opacity:.5;}
563
+
564
+ .dshpc-pfx{display:inline-flex;align-items:center;box-sizing:border-box;overflow:hidden;
565
+ border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}
566
+ .dshpc-pfx--sm{height:var(--dshpc-control-h-sm);}
567
+ .dshpc-pfx--md{height:var(--dshpc-control-h-md);}
568
+ .dshpc-pfx--lg{height:var(--dshpc-control-h-lg);}
489
569
  /* md / lg \u6863\u5B57\u53F7\u8DDF\u6863\u8D70\uFF08\u4E0E\u540C\u6863\u4E0B\u62C9\u540C\u5B57\u53F7\uFF09\uFF1A\u6B64\u524D\u5199\u6B7B sm(12px)\uFF0C\u540C\u6392\u4E0B\u62C9\u662F 13px \u21D2 \u663E\u5F97\u300Cinput \u5B57\u5C0F\u300D\u3002 */
490
- .dsh-tdt-pfx--md .dsh-tdt-pfx__label,.dsh-tdt-pfx--lg .dsh-tdt-pfx__label{font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
491
- .dsh-tdt-pfx--md .dsh-tdt-pfx__input,.dsh-tdt-pfx--lg .dsh-tdt-pfx__input{font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
492
- .dsh-tdt-pfx--error{border-color:var(--tdt-danger);}
493
- .dsh-tdt-pfx:focus-within{border-color:var(--tdt-focus);box-shadow:0 0 0 1px var(--tdt-focus);}
494
- .dsh-tdt-pfx__label{padding:0 8px;color:var(--tdt-fg-2);font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);white-space:nowrap;border-right:1px solid var(--tdt-border);}
495
- .dsh-tdt-pfx__input{flex:1 1 auto;min-width:0;height:100%;padding:0 8px;border:0;background:transparent;color:var(--tdt-fg);
496
- font-family:inherit;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);outline:none;}
497
- .dsh-tdt-pfx__input::placeholder{color:var(--tdt-fg-dim);}
498
-
499
- .dsh-tdt-num{display:inline-flex;align-items:center;justify-content:space-between;box-sizing:border-box;overflow:hidden;
500
- border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);background:var(--tdt-surface-1);color:var(--tdt-fg);}
570
+ .dshpc-pfx--md .dshpc-pfx__label,.dshpc-pfx--lg .dshpc-pfx__label{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
571
+ .dshpc-pfx--md .dshpc-pfx__input,.dshpc-pfx--lg .dshpc-pfx__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
572
+ .dshpc-pfx--error{border-color:var(--dshpc-danger);}
573
+ .dshpc-pfx:focus-within{border-color:var(--dshpc-focus);box-shadow:0 0 0 1px var(--dshpc-focus);}
574
+ .dshpc-pfx__label{padding:0 8px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);white-space:nowrap;border-right:1px solid var(--dshpc-border);}
575
+ .dshpc-pfx__input{flex:1 1 auto;min-width:0;height:100%;padding:0 8px;border:0;background:transparent;color:var(--dshpc-fg);
576
+ font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);outline:none;}
577
+ .dshpc-pfx__input::placeholder{color:var(--dshpc-fg-dim);}
578
+
579
+ .dshpc-num{display:inline-flex;align-items:center;justify-content:space-between;box-sizing:border-box;overflow:hidden;
580
+ border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);background:var(--dshpc-surface-1);color:var(--dshpc-fg);}
501
581
  /* \u4E2D\u6BB5\uFF1A\u6570\u5B57 + \u540E\u7F00\u6210\u7EC4\u5C45\u4E2D\uFF1B\u5BB9\u5668\u88AB\u6D88\u8D39\u7AEF\u62C9\u5BBD\u65F6\u5403\u6389\u5168\u90E8\u4F59\u91CF\uFF0C\u4E24\u7AEF \u2212 / + \u56E0\u6B64\u9489\u6B7B\u5728\u5DE6\u53F3\u8FB9\u7F18\u3002 */
502
- .dsh-tdt-num__mid{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;}
503
- .dsh-tdt-num--sm{height:var(--tdt-control-h-sm);}
504
- .dsh-tdt-num--md{height:var(--tdt-control-h-md);}
505
- .dsh-tdt-num--lg{height:var(--tdt-control-h-lg);}
506
- .dsh-tdt-num--md .dsh-tdt-num__input,.dsh-tdt-num--lg .dsh-tdt-num__input{font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
507
- .dsh-tdt-num--md .dsh-tdt-num__suffix,.dsh-tdt-num--lg .dsh-tdt-num__suffix{font-size:var(--tdt-font-md);}
508
- .dsh-tdt-num--disabled{opacity:.5;}
509
- .dsh-tdt-num__input{width:36px;height:100%;padding:0 2px;border:0;background:transparent;color:var(--tdt-fg);
510
- font-family:inherit;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);text-align:center;outline:none;}
511
- .dsh-tdt-num__suffix{padding:0 6px;color:var(--tdt-fg-2);font-size:var(--tdt-font-sm);white-space:nowrap;}
512
- .dsh-tdt-num .dsh-tdt-iconbtn{border-radius:0;color:var(--tdt-fg-2);flex:none;}
582
+ .dshpc-num__mid{display:flex;align-items:center;justify-content:center;flex:1 1 auto;min-width:0;}
583
+ .dshpc-num--sm{height:var(--dshpc-control-h-sm);}
584
+ .dshpc-num--md{height:var(--dshpc-control-h-md);}
585
+ .dshpc-num--lg{height:var(--dshpc-control-h-lg);}
586
+ .dshpc-num--md .dshpc-num__input,.dshpc-num--lg .dshpc-num__input{font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
587
+ .dshpc-num--md .dshpc-num__suffix,.dshpc-num--lg .dshpc-num__suffix{font-size:var(--dshpc-font-md);}
588
+ .dshpc-num--disabled{opacity:.5;}
589
+ .dshpc-num__input{width:36px;height:100%;padding:0 2px;border:0;background:transparent;color:var(--dshpc-fg);
590
+ font-family:inherit;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);text-align:center;outline:none;}
591
+ .dshpc-num__suffix{padding:0 6px;color:var(--dshpc-fg-2);font-size:var(--dshpc-font-sm);white-space:nowrap;}
592
+ .dshpc-num .dshpc-iconbtn{border-radius:0;color:var(--dshpc-fg-2);flex:none;}
513
593
 
514
594
  /* \u5B98\u65B9 Switch \u5305\u88C5\u7EDF\u4E00\uFF1A\u9009\u4E2D = success \u7EFF\u3002
515
595
  \uFF08\u5408\u5E76\u539F\u5148 task-editor-css / task-list \u4E24\u5904\u5C31\u5730\u8986\u76D6\uFF1B\u9009\u62E9\u5668\u5E26\u5305\u88C5\u7C7B + role\uFF0C\u7279\u5F02\u6027\u9AD8\u4E8E\u5B98\u65B9\u3002\uFF09 */
516
- .dsh-tdt-switch button[role='switch'][aria-checked='true']{background:var(--tdt-success);}
596
+ .dshpc-switch button[role='switch'][aria-checked='true']{background:var(--dshpc-success);}
517
597
 
518
598
  /* \u591A\u884C\u6587\u672C\u8F93\u5165\uFF08\u63D0\u793A\u8BCD\u7B49\uFF0CP3\uFF09\uFF1A\u5361\u5185\u65E0\u8FB9\u6846\uFF08\u89C6\u89C9\u91CD\u5FC3\u5728\u6574\u5F20\u5361\u4E0A\uFF09\uFF0C\u5360\u4F4D\u8272\u8D70 dimmed\uFF1B\u6821\u9A8C\u4E0D\u901A\u8FC7\u63CF\u7EA2\u76D2\u3002
519
- \uFF08\u4ECE task-editor-css \u7684 .dsh-tdt-ed-prompt \u4E0A\u63D0\u800C\u6765\uFF1B\u4E1A\u52A1\u6587\u4EF6\u4E0D\u518D\u81EA\u5199 textarea \u76AE\u80A4\u3002\uFF09 */
520
- .dsh-tdt-textarea{display:block;width:100%;box-sizing:border-box;min-height:132px;padding:2px;border:none;outline:none;background:0 0;color:var(--tdt-fg);font:inherit;font-size:var(--tdt-font-lg);line-height:1.6;resize:vertical;}
521
- .dsh-tdt-textarea::placeholder{color:var(--tdt-fg-dim);}
522
- .dsh-tdt-textarea--error{box-shadow:0 0 0 1px var(--tdt-danger);}
599
+ \uFF08\u4ECE task-editor-css \u7684 .dshpc-ed-prompt \u4E0A\u63D0\u800C\u6765\uFF1B\u4E1A\u52A1\u6587\u4EF6\u4E0D\u518D\u81EA\u5199 textarea \u76AE\u80A4\u3002\uFF09 */
600
+ .dshpc-textarea{display:block;width:100%;box-sizing:border-box;min-height:132px;padding:2px;border:none;outline:none;background:0 0;color:var(--dshpc-fg);font:inherit;font-size:var(--dshpc-font-lg);line-height:1.6;resize:vertical;}
601
+ .dshpc-textarea::placeholder{color:var(--dshpc-fg-dim);}
602
+ .dshpc-textarea--error{box-shadow:0 0 0 1px var(--dshpc-danger);}
523
603
 
524
604
  /* \u62D6\u62FD\u5206\u9694\u6761\uFF08\u7F16\u8F91\u5206\u680F / \u9884\u89C8 dock \u5171\u7528\uFF0CU20 #3\uFF09\uFF1A6px \u547D\u4E2D\u533A\uFF0Ccol-resize\uFF0C\u4E0D\u753B\u7EBF\uFF0Chover/\u6309\u4E0B\u6D6E\u51FA\u6D45\u5E26\u3002
525
- \u5177\u4F53 z-index \u7531 .dsh-tdt-ed-resizer / .dsh-tdt-sv-resizer \u5404\u81EA\u8865\u3002 */
526
- .dsh-tdt-resizer{position:absolute;top:0;bottom:0;left:0;width:6px;cursor:col-resize;background:0 0;touch-action:none;user-select:none;}
527
- .dsh-tdt-resizer:hover,.dsh-tdt-resizer:active{background:var(--tdt-hover,rgba(38,49,72,.06));}
605
+ \u5177\u4F53 z-index \u7531 .dshpc-ed-resizer / .dshpc-sv-resizer \u5404\u81EA\u8865\u3002 */
606
+ .dshpc-resizer{position:absolute;top:0;bottom:0;left:0;width:6px;cursor:col-resize;background:0 0;touch-action:none;user-select:none;}
607
+ .dshpc-resizer:hover,.dshpc-resizer:active{background:var(--dshpc-hover,rgba(38,49,72,.06));}
528
608
 
529
- @media (prefers-reduced-motion: reduce){.dsh-tdt-input,.dsh-tdt-pfx{transition:none;}}
609
+ @media (prefers-reduced-motion: reduce){.dshpc-input,.dshpc-pfx{transition:none;}}
530
610
  `;
531
611
  var DATETIME_CSS = `
532
612
  /* \u2500\u2500 \u65E5\u671F / \u65F6\u95F4 P4 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
533
- .dsh-tdt-dtf-wrap{display:inline-flex;position:relative;min-width:0;}
534
- /* \u26A0\uFE0F \u8FB9\u6846\u7C97\u7EC6 / \u5706\u89D2\u5FC5\u987B\u4E0E\u4E0B\u62C9\u951A\u70B9\uFF08dsh-tdt-ed-field \u7684 fieldButtonStyle\uFF09\u5B8C\u5168\u4E00\u81F4
613
+ .dshpc-dtf-wrap{display:inline-flex;position:relative;min-width:0;}
614
+ /* \u26A0\uFE0F \u8FB9\u6846\u7C97\u7EC6 / \u5706\u89D2\u5FC5\u987B\u4E0E\u4E0B\u62C9\u951A\u70B9\uFF08dshpc-ed-field \u7684 fieldButtonStyle\uFF09\u5B8C\u5168\u4E00\u81F4
535
615
  \uFF08\u7528\u6237 2026-10-02 \u70B9\u540D\uFF1A\u540C\u6392\u7684\u65E5\u671F\u6846\u4E0E\u4E0B\u62C9\u6846\u770B\u7740\u4E0D\u662F\u4E00\u5957\uFF09\u21D2 \u8FD9\u91CC\u4E5F\u662F 0.5px + radius-md\u3002 */
536
- .dsh-tdt-dtf{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;height:var(--tdt-control-h-lg);
537
- min-width:0;max-width:100%;padding:0 8px;border:0.5px solid var(--tdt-border-heavy);border-radius:var(--tdt-radius-md);
538
- background:var(--tdt-surface-1);color:var(--tdt-fg);font:inherit;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);
539
- cursor:pointer;transition:background-color var(--tdt-dur-fast) var(--tdt-ease),border-color var(--tdt-dur-fast) var(--tdt-ease);}
616
+ .dshpc-dtf{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;height:var(--dshpc-control-h-lg);
617
+ min-width:0;max-width:100%;padding:0 8px;border:0.5px solid var(--dshpc-border-heavy);border-radius:var(--dshpc-radius-md);
618
+ background:var(--dshpc-surface-1);color:var(--dshpc-fg);font:inherit;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);
619
+ cursor:pointer;transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),border-color var(--dshpc-dur-fast) var(--dshpc-ease);}
540
620
  /* \u65E5\u671F / \u65F6\u95F4\u951A\u70B9\uFF1A\u4E09\u6863\u9AD8\u5EA6\uFF08\u9ED8\u8BA4 lg=32\uFF09\u3002base \u5DF2\u542B lg \u9AD8\u5EA6\u4F5C\u515C\u5E95\uFF0C\u4E0B\u9762\u4E09\u6863\u6309 size \u8986\u76D6\u3002 */
541
- .dsh-tdt-dtf--sm{height:var(--tdt-control-h-sm);padding:0 6px;font-size:var(--tdt-font-sm);line-height:var(--tdt-line-sm);}
542
- .dsh-tdt-dtf--md{height:var(--tdt-control-h-md);padding:0 8px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
543
- .dsh-tdt-dtf--lg{height:var(--tdt-control-h-lg);padding:0 8px;font-size:var(--tdt-font-md);line-height:var(--tdt-line-md);}
544
- .dsh-tdt-dtf:hover:not(:disabled){background:var(--tdt-hover);}
545
- .dsh-tdt-dtf:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:2px;}
546
- .dsh-tdt-dtf:disabled{cursor:not-allowed;opacity:.6;}
547
- .dsh-tdt-dtf__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;}
548
- .dsh-tdt-dtf__label--ph{color:var(--tdt-fg-dim);}
549
- .dsh-tdt-dtf__icon{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;flex:none;color:var(--tdt-fg-3);}
550
-
551
- .dsh-tdt-layer{position:fixed;z-index:var(--tdt-z-menu);box-sizing:border-box;padding:8px;background:var(--tdt-surface-1);
552
- box-shadow:var(--tdt-shadow-2);border-radius:var(--tdt-radius-md);color:var(--tdt-fg);font-size:var(--tdt-font-md);}
553
-
554
- .dsh-tdt-cal__head{display:flex;align-items:center;justify-content:space-between;gap:4px;margin-bottom:4px;}
555
- .dsh-tdt-cal__title{flex:1 1 auto;text-align:center;font-size:var(--tdt-font-md);font-weight:600;color:var(--tdt-fg);}
556
- .dsh-tdt-cal__grid{display:grid;grid-template-columns:repeat(7,32px);gap:2px;}
557
- .dsh-tdt-cal__weekday{height:24px;display:flex;align-items:center;justify-content:center;font-size:var(--tdt-font-sm);color:var(--tdt-fg-3);}
558
- .dsh-tdt-cal__cell{width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;
559
- border:1px solid transparent;border-radius:var(--tdt-radius-md);background:transparent;color:var(--tdt-fg);
560
- font:inherit;font-size:var(--tdt-font-md);cursor:pointer;
561
- transition:background-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease);}
562
- .dsh-tdt-cal__cell--hover{background:var(--tdt-hover);}
563
- .dsh-tdt-cal__cell--out{color:var(--tdt-fg-dim);}
564
- .dsh-tdt-cal__cell--today{border-color:var(--tdt-business);}
565
- .dsh-tdt-cal__cell[aria-pressed='true']{background:var(--tdt-accent);color:var(--tdt-fg-inverse);}
566
- .dsh-tdt-cal__foot{margin-top:6px;padding-top:6px;border-top:1px solid var(--tdt-border);}
567
-
568
- .dsh-tdt-time__cols{display:flex;gap:4px;}
569
- .dsh-tdt-time__list{width:56px;max-height:196px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;}
570
- .dsh-tdt-time__opt{padding:5px 0;border:0;border-radius:var(--tdt-radius-sm);background:transparent;color:var(--tdt-fg-2);
571
- font:inherit;font-size:var(--tdt-font-md);cursor:pointer;transition:background-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease);}
572
- .dsh-tdt-time__opt[aria-selected='true']{background:var(--tdt-hover);color:var(--tdt-fg);font-weight:600;}
573
- .dsh-tdt-time__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;padding-top:6px;border-top:1px solid var(--tdt-border);}
574
-
575
- @media (prefers-reduced-motion: reduce){.dsh-tdt-dtf,.dsh-tdt-cal__cell,.dsh-tdt-time__opt{transition:none;}}
621
+ .dshpc-dtf--sm{height:var(--dshpc-control-h-sm);padding:0 6px;font-size:var(--dshpc-font-sm);line-height:var(--dshpc-line-sm);}
622
+ .dshpc-dtf--md{height:var(--dshpc-control-h-md);padding:0 8px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
623
+ .dshpc-dtf--lg{height:var(--dshpc-control-h-lg);padding:0 8px;font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}
624
+ .dshpc-dtf:hover:not(:disabled){background:var(--dshpc-hover);}
625
+ .dshpc-dtf:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
626
+ .dshpc-dtf:disabled{cursor:not-allowed;opacity:.6;}
627
+ .dshpc-dtf__label{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;}
628
+ .dshpc-dtf__label--ph{color:var(--dshpc-fg-dim);}
629
+ .dshpc-dtf__icon{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;flex:none;color:var(--dshpc-fg-3);}
630
+
631
+ .dshpc-layer{position:fixed;z-index:var(--dshpc-z-menu);box-sizing:border-box;padding:8px;background:var(--dshpc-surface-1);
632
+ box-shadow:var(--dshpc-shadow-2);border-radius:var(--dshpc-radius-md);color:var(--dshpc-fg);font-size:var(--dshpc-font-md);}
633
+
634
+ .dshpc-cal__head{display:flex;align-items:center;justify-content:space-between;gap:4px;margin-bottom:4px;}
635
+ .dshpc-cal__title{flex:1 1 auto;text-align:center;font-size:var(--dshpc-font-md);font-weight:600;color:var(--dshpc-fg);}
636
+ .dshpc-cal__grid{display:grid;grid-template-columns:repeat(7,32px);gap:2px;}
637
+ .dshpc-cal__weekday{height:24px;display:flex;align-items:center;justify-content:center;font-size:var(--dshpc-font-sm);color:var(--dshpc-fg-3);}
638
+ .dshpc-cal__cell{width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;
639
+ border:1px solid transparent;border-radius:var(--dshpc-radius-md);background:transparent;color:var(--dshpc-fg);
640
+ font:inherit;font-size:var(--dshpc-font-md);cursor:pointer;
641
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);}
642
+ .dshpc-cal__cell--hover{background:var(--dshpc-hover);}
643
+ .dshpc-cal__cell--out{color:var(--dshpc-fg-dim);}
644
+ .dshpc-cal__cell--today{border-color:var(--dshpc-business);}
645
+ .dshpc-cal__cell[aria-pressed='true']{background:var(--dshpc-accent);color:var(--dshpc-fg-inverse);}
646
+ .dshpc-cal__foot{margin-top:6px;padding-top:6px;border-top:1px solid var(--dshpc-border);}
647
+
648
+ .dshpc-time__cols{display:flex;gap:4px;}
649
+ .dshpc-time__list{width:56px;max-height:196px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;}
650
+ .dshpc-time__opt{padding:5px 0;border:0;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);
651
+ font:inherit;font-size:var(--dshpc-font-md);cursor:pointer;transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);}
652
+ .dshpc-time__opt[aria-selected='true']{background:var(--dshpc-hover);color:var(--dshpc-fg);font-weight:600;}
653
+ .dshpc-time__foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px;padding-top:6px;border-top:1px solid var(--dshpc-border);}
654
+
655
+ @media (prefers-reduced-motion: reduce){.dshpc-dtf,.dshpc-cal__cell,.dshpc-time__opt{transition:none;}}
576
656
  `;
577
657
  var SELECT_CSS = `
578
658
  /* \u4E0B\u62C9 / \u65E5\u5386 / \u65F6\u5206\u951A\u70B9\uFF1A\u952E\u76D8\u53EF\u8FBE\u6027\u63CF\u8FB9 + \u6821\u9A8C\u63CF\u7EA2\uFF08\u7C7B\u540D\u4ECE\u4E1A\u52A1\u5C42\u6CBF\u7528\uFF0C\u76AE\u80A4\u5F52\u4F4D\u57FA\u7840\u5C42\uFF09 */
579
- .dsh-tdt-ed-field:focus-visible{outline:2px solid var(--tdt-business);outline-offset:1px;}
580
- .dsh-tdt-ed-field--error{border-color:var(--tdt-danger)!important;box-shadow:0 0 0 1px var(--tdt-danger);}
659
+ .dshpc-ed-field:focus-visible{outline:2px solid var(--dshpc-business);outline-offset:1px;}
660
+ .dshpc-ed-field--error{border-color:var(--dshpc-danger)!important;box-shadow:0 0 0 1px var(--dshpc-danger);}
581
661
  /* \u6574\u884C\u4E0B\u62C9\uFF1A\u5B98\u65B9 Menu \u7684\u5305\u88C5 span \u662F inline-flex\uFF08shrink-to-fit\uFF09\uFF0C\u8981\u8FDE\u5B83\u4E00\u8D77\u6491\u6EE1 */
582
- .dsh-tdt-ed-selectwrap{width:100%;}
662
+ .dshpc-ed-selectwrap{width:100%;}
583
663
 
584
664
  /* \u7701\u7565\u53F7\u4E09\u4EF6\u5957\uFF08ui-style-guide \xA7\u4E09\u300C\u5F85\u62BD\u8C61 #1\u300D\u7684\u6536\u655B\u70B9\uFF09\uFF1A**\u65B0\u4EE3\u7801\u4E00\u5F8B\u6302\u8FD9\u4E2A\u7C7B**\uFF0C\u4E0D\u518D\u5404\u5199\u4E00\u904D\u3002
585
665
  \u26A0\uFE0F \u5DF2\u6709 19 \u5904\u65E7\u5199\u6CD5\u5F85\u9010\u6B65\u6536\u7F16\uFF082026-10-04 \u8D77\u65B0\u589E\u7684\u8C03\u7528\u70B9\u4E0D\u8BB8\u518D\u624B\u5199\u8FD9\u4E09\u6761\u5C5E\u6027\uFF09\u3002 */
586
- .dsh-tdt-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
666
+ .dshpc-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
587
667
 
588
668
  /* \u8DD1\u9A6C\u706F\u6587\u672C\uFF08MarqueeText\uFF09\uFF1A\u53CC\u5C42\u2014\u2014\u5916\u5C42\u53EA\u88C1\u526A\uFF0C\u5185\u5C42\u624D transform \u6EDA\u52A8\uFF1B\u975E hover \u5185\u5C42\u81EA\u5E26\u7701\u7565\u53F7 */
589
- .dsh-tdt-mq{display:block;overflow:hidden;white-space:nowrap;}
590
- .dsh-tdt-mq .dsh-tdt-mq-in{display:inline-block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:top;}
669
+ .dshpc-mq{display:block;overflow:hidden;white-space:nowrap;}
670
+ .dshpc-mq .dshpc-mq-in{display:inline-block;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:top;}
591
671
  /* \u26A0\uFE0F \u8DD1\u6CD5\uFF08\u7528\u6237 2026-10-03 \u62CD\u677F\uFF09\uFF1A**\u8DD1\u4E00\u904D\u3001\u505C\u5728\u5C3E\u5B57**\uFF08\u64AD\u653E 1 \u6B21 + forwards\uFF09\uFF0C\u4E0D\u6765\u56DE\u5F39\u3001\u4E0D\u65E0\u9650\u8DD1\u3002
592
672
  \u6EDA\u8DDD = \u7CBE\u786E\u6EA2\u51FA\u91CF \u21D2 \u505C\u4E0B\u65F6\u6700\u540E\u4E00\u4E2A\u5B57\u6B63\u597D\u8D34\u53F3\u7F18\uFF0C**\u4E0D\u4F1A\u8DD1\u8FDB\u9ED1\u5757**\uFF08\u9ED1\u5757\u662F\u65E7\u624B\u5199\u7248\u628A
593
673
  \u5185\u5C42\u76D2\u5B50\u88C1\u4E86\u3001\u6309\u300C\u534A\u622A\u6587\u672C\u300D\u5E73\u79FB\u5BFC\u81F4\u7684\uFF09\u3002\u9F20\u6807\u79FB\u5F00 \u21D2 :hover \u5931\u6548 \u21D2 \u81EA\u52A8\u590D\u4F4D\u56DE\u7701\u7565\u53F7\u6001\u3002 */
594
- .dsh-tdt-mq-run:hover .dsh-tdt-mq-in{max-width:none;overflow:visible;animation:dsh-tdt-mq-scroll var(--dsh-tdt-mq-dur,6s) linear .4s 1 forwards;}
595
- @keyframes dsh-tdt-mq-scroll{from{transform:translateX(0)}to{transform:translateX(var(--dsh-tdt-mq-dist,-40px))}}
674
+ .dshpc-mq-run:hover .dshpc-mq-in{max-width:none;overflow:visible;animation:dshpc-mq-scroll var(--dshpc-mq-dur,6s) linear .4s 1 forwards;}
675
+ @keyframes dshpc-mq-scroll{from{transform:translateX(0)}to{transform:translateX(var(--dshpc-mq-dist,-40px))}}
596
676
  `;
597
677
  var LOADING_CSS = `
598
678
  /* \u8FD0\u884C\u4E2D / loading \u7684\u6D3B\u52A8\u6307\u793A\uFF1A\u4E09\u4E2A\u5C0F\u65B9\u5757\u4F9D\u6B21\u8109\u52A8\u3002 */
599
- @keyframes dsh-tdt-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }
600
- .dsh-tdt-run-blocks { display: inline-flex; align-items: center; gap: 3px; }
601
- .dsh-tdt-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dsh-tdt-run-block 1.2s ease-in-out infinite; }
602
- .dsh-tdt-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }
603
- .dsh-tdt-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }
604
- @media (prefers-reduced-motion: reduce) { .dsh-tdt-run-blocks > i { animation: none; opacity: 1; } }
679
+ @keyframes dshpc-run-block { 0%, 80%, 100% { opacity: 0.25; transform: scale(0.8) } 40% { opacity: 1; transform: scale(1) } }
680
+ .dshpc-run-blocks { display: inline-flex; align-items: center; gap: 3px; }
681
+ .dshpc-run-blocks > i { width: 5px; height: 5px; border-radius: 1px; background: currentColor; animation: dshpc-run-block 1.2s ease-in-out infinite; }
682
+ .dshpc-run-blocks > i:nth-child(2) { animation-delay: 0.15s; }
683
+ .dshpc-run-blocks > i:nth-child(3) { animation-delay: 0.3s; }
684
+ @media (prefers-reduced-motion: reduce) { .dshpc-run-blocks > i { animation: none; opacity: 1; } }
605
685
  `;
606
686
  var BACK_TO_TOP_CSS = `
607
687
  /* \u56DE\u5230\u9876\u90E8\u60AC\u6D6E\u94AE\uFF1A\u5706\u94AE\u3001\u5B9E\u9762\u3001\u6295\u5F71\uFF1B\u9ED8\u8BA4\u9690\u8EAB\uFF0C\u6EDA\u8FC7\u9608\u503C\u52A0 .is-visible \u624D\u663E\u5F62\u3002
608
688
  \u6A2A\u5411 left \u7531\u7EC4\u4EF6\u6309\u4E3B\u5185\u5BB9\u5217\u53F3\u7F18\u5B9E\u65F6\u7B97\u51FA\uFF08\u8D34\u5728\u5176\u53F3\u4FA7\u5916\u4FA7\uFF09\uFF0C\u4E0D\u5199\u6B7B\u3002 */
609
- .dsh-tdt-backtotop{
689
+ .dshpc-backtotop{
610
690
  position:fixed;
611
- bottom:var(--tdt-space-4);
612
- z-index:var(--tdt-z-dock);
691
+ bottom:var(--dshpc-space-4);
692
+ z-index:var(--dshpc-z-dock);
613
693
  width:44px;height:44px;
614
694
  display:inline-flex;align-items:center;justify-content:center;
615
695
  padding:0;margin:0;
616
696
  box-sizing:border-box;
617
- border:1px solid var(--tdt-border);
697
+ border:1px solid var(--dshpc-border);
618
698
  border-radius:50%;
619
- background:var(--tdt-solid);
620
- color:var(--tdt-on-solid);
621
- box-shadow:var(--tdt-shadow-2);
699
+ background:var(--dshpc-solid);
700
+ color:var(--dshpc-on-solid);
701
+ box-shadow:var(--dshpc-shadow-2);
622
702
  cursor:pointer;
623
703
  opacity:0;
624
704
  transform:translateY(8px) scale(.92);
625
- transition:opacity var(--tdt-dur) var(--tdt-ease),
626
- transform var(--tdt-dur) var(--tdt-ease),
627
- background-color var(--tdt-dur-fast) var(--tdt-ease);
705
+ transition:opacity var(--dshpc-dur) var(--dshpc-ease),
706
+ transform var(--dshpc-dur) var(--dshpc-ease),
707
+ background-color var(--dshpc-dur-fast) var(--dshpc-ease);
628
708
  pointer-events:none;
629
709
  }
630
- .dsh-tdt-backtotop.is-visible{opacity:1;transform:translateY(0) scale(1);pointer-events:auto;}
631
- .dsh-tdt-backtotop:hover{background:var(--tdt-hover);}
632
- .dsh-tdt-backtotop:active{background:var(--tdt-active);}
633
- .dsh-tdt-backtotop:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:2px;}
710
+ .dshpc-backtotop.is-visible{opacity:1;transform:translateY(0) scale(1);pointer-events:auto;}
711
+ .dshpc-backtotop:hover{background:var(--dshpc-hover);}
712
+ .dshpc-backtotop:active{background:var(--dshpc-active);}
713
+ .dshpc-backtotop:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
634
714
  @media (prefers-reduced-motion: reduce){
635
- .dsh-tdt-backtotop{transition:opacity var(--tdt-dur-fast) linear;transform:none;}
715
+ .dshpc-backtotop{transition:opacity var(--dshpc-dur-fast) linear;transform:none;}
636
716
  }
637
717
  `;
638
718
  var HINT_CSS = `
639
719
  /* \u2500\u2500 \u95EE\u53F7\u63D0\u793A P4\uFF08\u7528\u6237 2026-10-18\uFF1A\u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6 HelpButton\u2014\u2014**\u5E26\u5708\u7684\u95EE\u53F7\u56FE\u6807**\uFF09\u2500\u2500
640
- \u672C\u4F53 16px \u7EC6\u5708 + \u5708\u5185 ?\uFF0C\u989C\u8272 fg-3\u3001hover \u53EA\u63D0\u4EAE\u4E0D\u52A0\u5E95\uFF08\u4E0E dsh-tdt-ed-help \u540C\u89C4\u77E9\uFF09\u3002
720
+ \u672C\u4F53 16px \u7EC6\u5708 + \u5708\u5185 ?\uFF0C\u989C\u8272 fg-3\u3001hover \u53EA\u63D0\u4EAE\u4E0D\u52A0\u5E95\uFF08\u4E0E dshpc-ed-help \u540C\u89C4\u77E9\uFF09\u3002
641
721
  \u7EAF CSS tooltip\uFF1Ahover / \u952E\u76D8\u805A\u7126\u6D6E\u51FA\u6C14\u6CE1\uFF0C\u96F6 JS\u3002\u72EC\u7ACB\u7EC4\u4EF6\uFF0C\u6807\u9898\u540E\u3001\u884C\u5C3E\u968F\u5904\u53EF\u6302\u3002 */
642
- .dsh-tdt-hint{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;
722
+ .dshpc-hint{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;
643
723
  box-sizing:border-box;width:14px;height:14px;padding:0;border:1px solid currentColor;border-radius:50%;background:transparent;
644
- color:var(--tdt-fg-3);font-family:inherit;font-size:8px;font-weight:600;line-height:12px;cursor:help;vertical-align:middle;
645
- transition:color var(--tdt-dur-fast) var(--tdt-ease);}
646
- .dsh-tdt-hint:hover,.dsh-tdt-hint:focus-visible{color:var(--tdt-fg);background:0 0;}
647
- .dsh-tdt-hint:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px;}
648
- .dsh-tdt-hint__bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
724
+ color:var(--dshpc-fg-3);font-family:inherit;font-size:8px;font-weight:600;line-height:12px;cursor:help;vertical-align:middle;
725
+ transition:color var(--dshpc-dur-fast) var(--dshpc-ease);}
726
+ .dshpc-hint:hover,.dshpc-hint:focus-visible{color:var(--dshpc-fg);background:0 0;}
727
+ .dshpc-hint:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}
728
+ .dshpc-hint__bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
649
729
  box-sizing:border-box;width:max-content;max-width:280px;padding:8px 10px;
650
- border-radius:var(--tdt-radius-sm);background:var(--tdt-solid);color:var(--tdt-on-solid);
651
- font-size:var(--tdt-font-xs);line-height:1.7;text-align:left;white-space:normal;
652
- box-shadow:var(--tdt-shadow-2);z-index:var(--tdt-z-menu);
730
+ border-radius:var(--dshpc-radius-sm);background:var(--dshpc-solid);color:var(--dshpc-on-solid);
731
+ font-size:var(--dshpc-font-xs);line-height:1.7;text-align:left;white-space:normal;
732
+ box-shadow:var(--dshpc-shadow-2);z-index:var(--dshpc-z-menu);
653
733
  opacity:0;visibility:hidden;pointer-events:none;
654
- transition:opacity var(--tdt-dur-fast) var(--tdt-ease);}
655
- .dsh-tdt-hint:hover .dsh-tdt-hint__bubble,.dsh-tdt-hint:focus-visible .dsh-tdt-hint__bubble{opacity:1;visibility:visible;}
734
+ transition:opacity var(--dshpc-dur-fast) var(--dshpc-ease);}
735
+ .dshpc-hint:hover .dshpc-hint__bubble,.dshpc-hint:focus-visible .dshpc-hint__bubble{opacity:1;visibility:visible;}
656
736
  `;
657
737
 
658
738
  // dist/ui/picker-css.js
659
739
  var PICKER_CSS = `
660
- .dsh-tdt-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
661
- .dsh-tdt-picker__trigger{
740
+ .dshpc-picker{position:relative;display:inline-block;font-size:13px;line-height:20px}
741
+ .dshpc-picker__trigger{
662
742
  display:inline-flex;align-items:center;justify-content:space-between;gap:6px;
663
743
  min-width:120px;max-width:100%;height:28px;padding:0 8px;
664
- color:var(--tdt-fg);background:var(--tdt-surface-1);
665
- border:1px solid var(--tdt-border);border-radius:var(--tdt-radius-md);cursor:pointer;
744
+ color:var(--dshpc-fg);background:var(--dshpc-surface-1);
745
+ border:1px solid var(--dshpc-border);border-radius:var(--dshpc-radius-md);cursor:pointer;
666
746
  }
667
- .dsh-tdt-picker__trigger:disabled{color:var(--tdt-fg-dim);cursor:not-allowed;opacity:.7}
668
- .dsh-tdt-picker__caret{color:var(--tdt-fg-3);font-size:10px}
669
- .dsh-tdt-picker__menu{
747
+ .dshpc-picker__trigger:disabled{color:var(--dshpc-fg-dim);cursor:not-allowed;opacity:.7}
748
+ .dshpc-picker__caret{color:var(--dshpc-fg-3);font-size:10px}
749
+ .dshpc-picker__menu{
670
750
  position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:100%;
671
751
  max-height:280px;overflow:auto;padding:4px;
672
- background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);
673
- border-radius:var(--tdt-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
752
+ background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
753
+ border-radius:var(--dshpc-radius-md);box-shadow:0 8px 24px rgba(15,23,42,.12);
674
754
  }
675
755
  /* \u5411\u4E0A\u5C55\u5F00\uFF08\u89E6\u53D1\u5668\u9760\u8FD1\u89C6\u53E3\u5E95\u90E8\u65F6\u7528 placement="up"\uFF09\u3002 */
676
- .dsh-tdt-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
756
+ .dshpc-picker__menu--up{top:auto;bottom:calc(100% + 4px)}
677
757
  /* \u5C3A\u5BF8\u6863\uFF08\u4E0E Field \u7684 sm/md/lg \u5BF9\u5E94\uFF09\u3002 */
678
- .dsh-tdt-picker__trigger--sm{height:24px;font-size:12px}
679
- .dsh-tdt-picker__trigger--lg{height:32px}
758
+ .dshpc-picker__trigger--sm{height:24px;font-size:12px}
759
+ .dshpc-picker__trigger--lg{height:32px}
680
760
  /* \u952E\u76D8\u6E38\u6807\u6240\u5728\u9879\uFF08\u65E0 hover \u4E5F\u8981\u770B\u5F97\u89C1\uFF09\u3002 */
681
- .dsh-tdt-picker__option[data-active='true']{background:var(--tdt-surface-sunken);outline:1px solid var(--tdt-border)}
682
- .dsh-tdt-picker__option--clear{color:var(--tdt-fg-3)}
683
- .dsh-tdt-picker__search{
761
+ .dshpc-picker__option[data-active='true']{background:var(--dshpc-surface-sunken);outline:1px solid var(--dshpc-border)}
762
+ .dshpc-picker__option--clear{color:var(--dshpc-fg-3)}
763
+ .dshpc-picker__search{
684
764
  width:100%;height:28px;margin-bottom:4px;padding:0 8px;box-sizing:border-box;
685
- color:var(--tdt-fg);background:var(--tdt-surface-sunken);
686
- border:1px solid var(--tdt-border-faint);border-radius:var(--tdt-radius-md);outline:none;
687
- }
688
- .dsh-tdt-picker__group-label{
689
- padding:6px 8px 2px;color:var(--tdt-fg-3);font-size:11px;
690
- }
691
- .dsh-tdt-picker__option{
692
- display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--tdt-radius-sm);cursor:pointer;
693
- color:var(--tdt-fg);white-space:nowrap;
694
- }
695
- .dsh-tdt-picker__option:hover{background:var(--tdt-surface-sunken)}
696
- .dsh-tdt-picker__option--active{background:var(--tdt-open-bg);color:var(--tdt-business)}
697
- .dsh-tdt-picker__option--disabled{color:var(--tdt-fg-dim);cursor:not-allowed}
698
- .dsh-tdt-picker__tick{width:12px;color:var(--tdt-business)}
699
- .dsh-tdt-picker__empty{padding:8px;color:var(--tdt-fg-3);text-align:center}
700
- .dsh-tdt-picker__degraded{
701
- padding:6px 8px;margin-bottom:4px;border-radius:var(--tdt-radius-sm);
702
- color:var(--tdt-warning-label);background:color-mix(in srgb,var(--tdt-warning) 12%,transparent);
765
+ color:var(--dshpc-fg);background:var(--dshpc-surface-sunken);
766
+ border:1px solid var(--dshpc-border-faint);border-radius:var(--dshpc-radius-md);outline:none;
767
+ }
768
+ .dshpc-picker__group-label{
769
+ padding:6px 8px 2px;color:var(--dshpc-fg-3);font-size:11px;
770
+ }
771
+ .dshpc-picker__option{
772
+ display:flex;align-items:center;gap:6px;padding:6px 8px;border-radius:var(--dshpc-radius-sm);cursor:pointer;
773
+ color:var(--dshpc-fg);white-space:nowrap;
774
+ }
775
+ .dshpc-picker__option:hover{background:var(--dshpc-surface-sunken)}
776
+ .dshpc-picker__option--active{background:var(--dshpc-open-bg);color:var(--dshpc-business)}
777
+ .dshpc-picker__option--disabled{color:var(--dshpc-fg-dim);cursor:not-allowed}
778
+ .dshpc-picker__tick{width:12px;color:var(--dshpc-business)}
779
+ .dshpc-picker__empty{padding:8px;color:var(--dshpc-fg-3);text-align:center}
780
+ .dshpc-picker__degraded{
781
+ padding:6px 8px;margin-bottom:4px;border-radius:var(--dshpc-radius-sm);
782
+ color:var(--dshpc-warning-label);background:color-mix(in srgb,var(--dshpc-warning) 12%,transparent);
703
783
  font-size:11px;
704
784
  }
705
- .dsh-tdt-picker__row{display:flex;align-items:center;gap:8px}
785
+ .dshpc-picker__row{display:flex;align-items:center;gap:8px}
706
786
  `;
707
787
 
708
788
  // dist/ui/feedback-css.js
709
789
  var FEEDBACK_CSS = `
710
- .dsh-tdt-modal-mask{
790
+ .dshpc-modal-mask{
711
791
  position:fixed;inset:0;z-index:1070;display:flex;align-items:center;justify-content:center;
712
792
  background:rgba(15,23,42,.45);
713
793
  }
714
- .dsh-tdt-modal{
794
+ .dshpc-modal{
715
795
  display:flex;flex-direction:column;max-width:min(960px,92vw);max-height:86vh;
716
- background:var(--tdt-surface-base);border:1px solid var(--tdt-border);
796
+ background:var(--dshpc-surface-base);border:1px solid var(--dshpc-border);
717
797
  border-radius:10px;box-shadow:0 16px 48px rgba(15,23,42,.24);overflow:hidden;
718
798
  }
719
- .dsh-tdt-modal__head{
799
+ .dshpc-modal__head{
720
800
  display:flex;align-items:center;gap:8px;padding:12px 14px;
721
- border-bottom:1px solid var(--tdt-border-faint);color:var(--tdt-fg);font-size:14px;
801
+ border-bottom:1px solid var(--dshpc-border-faint);color:var(--dshpc-fg);font-size:14px;
722
802
  }
723
- .dsh-tdt-modal__title{flex:1;min-width:0}
803
+ .dshpc-modal__title{flex:1;min-width:0}
724
804
  /* \u5173\u95ED\u6309\u94AE\uFF1A24\xD724 \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 */
725
- .dsh-tdt-modal__close{
805
+ .dshpc-modal__close{
726
806
  display:inline-flex;align-items:center;justify-content:center;flex:none;
727
- width:24px;height:24px;padding:0;border:none;border-radius:var(--tdt-radius-sm);
728
- background:transparent;color:var(--tdt-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
729
- transition:background-color var(--tdt-dur-fast) var(--tdt-ease),color var(--tdt-dur-fast) var(--tdt-ease);
730
- }
731
- .dsh-tdt-modal__close:hover{background:var(--tdt-hover);color:var(--tdt-fg)}
732
- .dsh-tdt-modal__close:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px}
733
- .dsh-tdt-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
734
- .dsh-tdt-modal__foot{
807
+ width:24px;height:24px;padding:0;border:none;border-radius:var(--dshpc-radius-sm);
808
+ background:transparent;color:var(--dshpc-fg-3);font-family:inherit;font-size:12px;line-height:1;cursor:pointer;
809
+ transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease),color var(--dshpc-dur-fast) var(--dshpc-ease);
810
+ }
811
+ .dshpc-modal__close:hover{background:var(--dshpc-hover);color:var(--dshpc-fg)}
812
+ .dshpc-modal__close:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}
813
+ .dshpc-modal__body{flex:1;min-height:0;overflow:auto;padding:12px 14px}
814
+ .dshpc-modal__foot{
735
815
  display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;
736
- border-top:1px solid var(--tdt-border-faint);
816
+ border-top:1px solid var(--dshpc-border-faint);
737
817
  }
738
- .dsh-tdt-toast-host{
818
+ .dshpc-toast-host{
739
819
  position:fixed;z-index:1090;left:50%;bottom:32px;transform:translateX(-50%);
740
820
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;
741
821
  }
742
- .dsh-tdt-toast{
743
- padding:8px 14px;border-radius:8px;font-size:13px;color:var(--tdt-fg);
744
- background:var(--tdt-surface-menu);border:1px solid var(--tdt-border);
822
+ .dshpc-toast{
823
+ padding:8px 14px;border-radius:8px;font-size:13px;color:var(--dshpc-fg);
824
+ background:var(--dshpc-surface-menu);border:1px solid var(--dshpc-border);
745
825
  box-shadow:0 8px 24px rgba(15,23,42,.16);
746
826
  }
747
- .dsh-tdt-toast--success{color:var(--tdt-success);border-color:color-mix(in srgb,var(--tdt-success) 40%,transparent)}
748
- .dsh-tdt-toast--error{color:var(--tdt-danger);border-color:color-mix(in srgb,var(--tdt-danger) 40%,transparent)}
749
- .dsh-tdt-empty{
827
+ .dshpc-toast--success{color:var(--dshpc-success);border-color:color-mix(in srgb,var(--dshpc-success) 40%,transparent)}
828
+ .dshpc-toast--error{color:var(--dshpc-danger);border-color:color-mix(in srgb,var(--dshpc-danger) 40%,transparent)}
829
+ .dshpc-empty{
750
830
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
751
- padding:24px;color:var(--tdt-fg-3);font-size:13px;text-align:center;
831
+ padding:24px;color:var(--dshpc-fg-3);font-size:13px;text-align:center;
752
832
  }
753
- .dsh-tdt-error{
833
+ .dshpc-error{
754
834
  padding:12px 14px;border-radius:8px;font-size:13px;
755
- color:var(--tdt-danger);background:color-mix(in srgb,var(--tdt-danger) 10%,transparent);
756
- border:1px solid color-mix(in srgb,var(--tdt-danger) 30%,transparent);
835
+ color:var(--dshpc-danger);background:color-mix(in srgb,var(--dshpc-danger) 10%,transparent);
836
+ border:1px solid color-mix(in srgb,var(--dshpc-danger) 30%,transparent);
757
837
  }
758
- .dsh-tdt-error__retry{
759
- margin-top:8px;color:var(--tdt-link);cursor:pointer;background:none;border:none;padding:0;
838
+ .dshpc-error__retry{
839
+ margin-top:8px;color:var(--dshpc-link);cursor:pointer;background:none;border:none;padding:0;
760
840
  }
761
841
  `;
762
842
 
763
843
  // dist/ui/card-css.js
764
844
  var CARD_CSS = `
765
- .dsh-tdt-card{
766
- position:relative;padding:12px 14px;background:var(--tdt-surface-1);
767
- --card-accent:var(--tdt-business);
845
+ .dshpc-card{
846
+ position:relative;padding:12px 14px;background:var(--dshpc-surface-1);
847
+ --card-accent:var(--dshpc-business);
768
848
  }
769
849
  /* \u6863\u4F4D \u2192 token\uFF08\u7167 records-timeline \u7684 tone \u6A21\u5F0F\uFF1A\u4E00\u4E2A\u53D8\u91CF\u5207\u6863\uFF0C\u4E0D\u5199 5 \u5957\u89C4\u5219\uFF09\u3002 */
770
- .dsh-tdt-card--success{--card-accent:var(--tdt-success)}
771
- .dsh-tdt-card--warning{--card-accent:var(--tdt-warning)}
772
- .dsh-tdt-card--danger{--card-accent:var(--tdt-danger)}
773
- .dsh-tdt-card--neutral{--card-accent:var(--tdt-fg-4)}
850
+ .dshpc-card--success{--card-accent:var(--dshpc-success)}
851
+ .dshpc-card--warning{--card-accent:var(--dshpc-warning)}
852
+ .dshpc-card--danger{--card-accent:var(--dshpc-danger)}
853
+ .dshpc-card--neutral{--card-accent:var(--dshpc-fg-4)}
774
854
 
775
855
  /* \u5916\u89C2\u4E00\uFF1A\u5706\u89D2 + 1px \u8FB9\u6846\uFF0C\u8272\u6761\u4E0A\u4E0B\u7559\u8DDD\uFF08\u77ED\u6761\uFF09\u3002 */
776
- .dsh-tdt-card--bordered{border-radius:8px;border:1px solid var(--tdt-border)}
777
- .dsh-tdt-card--bordered .dsh-tdt-card__bar{top:8px;bottom:8px;border-radius:2px}
856
+ .dshpc-card--bordered{border-radius:8px;border:1px solid var(--dshpc-border)}
857
+ .dshpc-card--bordered .dshpc-card__bar{top:8px;bottom:8px;border-radius:2px}
778
858
 
779
859
  /* \u5916\u89C2\u4E8C\uFF1A\u65E0\u5706\u89D2\u65E0\u8FB9\u6846\uFF0C\u8272\u6761\u901A\u9AD8\u3002 */
780
- .dsh-tdt-card--strip{border-radius:0;border:none}
781
- .dsh-tdt-card--strip .dsh-tdt-card__bar{top:0;bottom:0;border-radius:0}
860
+ .dshpc-card--strip{border-radius:0;border:none}
861
+ .dshpc-card--strip .dshpc-card__bar{top:0;bottom:0;border-radius:0}
782
862
 
783
863
  /* \u8272\u6761\uFF1A\u7EDD\u5BF9\u5B9A\u4F4D + top/bottom \u21D2 \u8DDF\u7740\u5185\u5BB9\u9AD8\u5EA6\u81EA\u9002\u5E94\uFF1B\u4E0A\u4E0B\u662F\u5426\u7559\u8DDD\u7531\u5916\u89C2\u51B3\u5B9A\u3002 */
784
- .dsh-tdt-card__bar{position:absolute;left:0;width:3px;background:var(--card-accent)}
864
+ .dshpc-card__bar{position:absolute;left:0;width:3px;background:var(--card-accent)}
785
865
 
786
- .dsh-tdt-card__head{display:flex;align-items:flex-start;gap:8px;min-width:0}
787
- .dsh-tdt-card__main{flex:1;min-width:0}
788
- .dsh-tdt-card__side{display:flex;align-items:center;gap:6px;flex:none}
789
- .dsh-tdt-card__toggle{
866
+ .dshpc-card__head{display:flex;align-items:flex-start;gap:8px;min-width:0}
867
+ .dshpc-card__main{flex:1;min-width:0}
868
+ .dshpc-card__side{display:flex;align-items:center;gap:6px;flex:none}
869
+ .dshpc-card__toggle{
790
870
  display:inline-flex;align-items:center;justify-content:center;
791
871
  width:24px;height:24px;padding:0;background:none;border:none;border-radius:6px;
792
- color:var(--tdt-fg-3);cursor:pointer;
872
+ color:var(--dshpc-fg-3);cursor:pointer;
793
873
  }
794
- .dsh-tdt-card__toggle:hover{background:var(--tdt-surface-sunken);color:var(--tdt-fg)}
795
- .dsh-tdt-card__caret{display:inline-block;font-size:10px;transition:transform .15s ease}
796
- .dsh-tdt-card__caret.is-open{transform:rotate(180deg)}
797
- .dsh-tdt-card__panel{margin-top:8px;padding-top:8px;border-top:1px solid var(--tdt-border-faint)}
874
+ .dshpc-card__toggle:hover{background:var(--dshpc-surface-sunken);color:var(--dshpc-fg)}
875
+ .dshpc-card__caret{display:inline-block;font-size:10px;transition:transform .15s ease}
876
+ .dshpc-card__caret.is-open{transform:rotate(180deg)}
877
+ .dshpc-card__panel{margin-top:8px;padding-top:8px;border-top:1px solid var(--dshpc-border-faint)}
798
878
  `;
799
879
 
800
880
  // dist/ui/chip-css.js
801
881
  var CHIP_CSS = `
802
- .dsh-tdt-chip{
882
+ .dshpc-chip{
803
883
  display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:1px 8px;
804
- box-sizing:border-box;border-radius:var(--tdt-radius-pill,999px);border:none;
805
- background:var(--tdt-chip-bg);color:var(--tdt-fg);
884
+ box-sizing:border-box;border-radius:var(--dshpc-radius-pill,999px);border:none;
885
+ background:var(--dshpc-chip-bg);color:var(--dshpc-fg);
806
886
  font-family:inherit;font-size:11px;line-height:18px;margin:0;
807
887
  /* 2026-10-18\uFF1Achip \u662F flex \u884C\u91CC\u7684\u5E38\u7528\u9879\uFF0C\u7981\u6B62\u88AB\u538B\u7F29\u6362\u884C\uFF08\u9884\u89C8\u7AD9\u51FA\u73B0\u8FC7\u6587\u5B57\u7AD6\u6392\u3001\u4E92\u76F8\u53E0\u538B\u7684\u6324\u538B\uFF09\u3002 */
808
888
  white-space:nowrap;flex:none;
809
889
  appearance:none;-webkit-appearance:none;
810
890
  }
811
891
  /* \u53EF\u70B9\u6001\uFF1Abutton \u6E32\u67D3\uFF08\u89C1 Chip.ts\uFF09\uFF0C\u5149\u6807 + hover \u52A0\u6DF1\u3002 */
812
- .dsh-tdt-chip--clickable{cursor:pointer;transition:background-color var(--tdt-dur-fast) var(--tdt-ease);}
813
- .dsh-tdt-chip--clickable:hover:not(:disabled){background:var(--tdt-chip-bg-hover)}
814
- .dsh-tdt-chip:focus-visible{outline:2px solid var(--tdt-focus);outline-offset:1px}
815
- .dsh-tdt-chip:disabled{cursor:default;color:var(--tdt-fg-3)}
816
- @media (prefers-reduced-motion: reduce){.dsh-tdt-chip{transition:none}}
892
+ .dshpc-chip--clickable{cursor:pointer;transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease);}
893
+ .dshpc-chip--clickable:hover:not(:disabled){background:var(--dshpc-chip-bg-hover)}
894
+ .dshpc-chip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px}
895
+ .dshpc-chip:disabled{cursor:default;color:var(--dshpc-fg-3)}
896
+ @media (prefers-reduced-motion: reduce){.dshpc-chip{transition:none}}
817
897
  `;
818
898
 
819
899
  // dist/explorer/explorer-css.js
820
900
  var EXPLORER_CSS = `
821
- .dsh-tdt-exp{display:flex;flex-direction:column;height:100%;min-height:0;color:var(--tdt-fg);font-size:13px}
822
- .dsh-tdt-exp__crumbs{
901
+ .dshpc-exp{display:flex;flex-direction:column;height:100%;min-height:0;color:var(--dshpc-fg);font-size:13px}
902
+ .dshpc-exp__crumbs{
823
903
  display:flex;align-items:center;gap:2px;flex-wrap:wrap;padding:6px 8px;
824
- border-bottom:1px solid var(--tdt-border-faint);
904
+ border-bottom:1px solid var(--dshpc-border-faint);
825
905
  }
826
- .dsh-tdt-exp__crumb{
906
+ .dshpc-exp__crumb{
827
907
  background:none;border:none;padding:2px 4px;border-radius:4px;cursor:pointer;
828
- color:var(--tdt-link);font:inherit;
829
- }
830
- .dsh-tdt-exp__crumb--current{color:var(--tdt-fg);font-weight:600;cursor:default}
831
- .dsh-tdt-exp__sep{color:var(--tdt-fg-4)}
832
- .dsh-tdt-exp__tools{display:flex;gap:6px;margin-left:auto}
833
- .dsh-tdt-exp__body{display:flex;flex:1;min-height:0}
834
- .dsh-tdt-exp__tree{width:220px;flex:none;overflow:auto;border-right:1px solid var(--tdt-border-faint)}
835
- .dsh-tdt-exp__item{
908
+ color:var(--dshpc-link);font:inherit;
909
+ }
910
+ .dshpc-exp__crumb--current{color:var(--dshpc-fg);font-weight:600;cursor:default}
911
+ .dshpc-exp__sep{color:var(--dshpc-fg-4)}
912
+ .dshpc-exp__tools{display:flex;gap:6px;margin-left:auto}
913
+ .dshpc-exp__body{display:flex;flex:1;min-height:0}
914
+ .dshpc-exp__tree{width:220px;flex:none;overflow:auto;border-right:1px solid var(--dshpc-border-faint)}
915
+ .dshpc-exp__item{
836
916
  display:flex;align-items:center;gap:6px;padding:4px 8px;cursor:pointer;white-space:nowrap;
837
917
  }
838
- .dsh-tdt-exp__item:hover{background:var(--tdt-surface-sunken)}
839
- .dsh-tdt-exp__item--active{background:var(--tdt-open-bg)}
840
- .dsh-tdt-exp__icon{width:14px;flex:none;color:var(--tdt-fg-3)}
841
- .dsh-tdt-exp__name{overflow:hidden;text-overflow:ellipsis}
842
- .dsh-tdt-exp__size{margin-left:auto;color:var(--tdt-fg-4);font-size:11px}
843
- .dsh-tdt-exp__preview{flex:1;min-width:0;overflow:auto;padding:8px}
844
- .dsh-tdt-exp__note{padding:6px 8px;color:var(--tdt-fg-3);font-size:11px}
845
- .dsh-tdt-exp__text{
846
- margin:0;padding:8px;border-radius:6px;background:var(--tdt-code-surface);
847
- font:var(--tdt-code-font);white-space:pre-wrap;word-break:break-all;
848
- }
849
- .dsh-tdt-exp__image{max-width:100%;border-radius:6px;border:1px solid var(--tdt-border-faint)}
918
+ .dshpc-exp__item:hover{background:var(--dshpc-surface-sunken)}
919
+ .dshpc-exp__item--active{background:var(--dshpc-open-bg)}
920
+ .dshpc-exp__icon{width:14px;flex:none;color:var(--dshpc-fg-3)}
921
+ .dshpc-exp__name{overflow:hidden;text-overflow:ellipsis}
922
+ .dshpc-exp__size{margin-left:auto;color:var(--dshpc-fg-4);font-size:11px}
923
+ .dshpc-exp__preview{flex:1;min-width:0;overflow:auto;padding:8px}
924
+ .dshpc-exp__note{padding:6px 8px;color:var(--dshpc-fg-3);font-size:11px}
925
+ .dshpc-exp__text{
926
+ margin:0;padding:8px;border-radius:6px;background:var(--dshpc-code-surface);
927
+ font:var(--dshpc-code-font);white-space:pre-wrap;word-break:break-all;
928
+ }
929
+ .dshpc-exp__image{max-width:100%;border-radius:6px;border:1px solid var(--dshpc-border-faint)}
850
930
  `;
851
931
 
852
932
  // dist/session/session-css.js
853
933
  var SESSION_CSS = `
854
- .dsh-tdt-ses{display:flex;flex-direction:column;min-height:0;color:var(--tdt-fg);font-size:13px}
855
- .dsh-tdt-ses--sidebar{height:100%;border-left:1px solid var(--tdt-border-faint);background:var(--tdt-surface-base)}
856
- .dsh-tdt-ses--page{height:100%;background:var(--tdt-surface-base)}
857
- .dsh-tdt-ses__list{flex:1;min-height:0;overflow:auto;padding:8px 12px;display:flex;flex-direction:column;gap:10px}
858
- .dsh-tdt-ses__msg{padding:8px 10px;border-radius:8px;background:var(--tdt-surface-2);border:1px solid var(--tdt-border-faint)}
859
- .dsh-tdt-ses__msg--user{background:var(--tdt-open-bg-soft)}
860
- .dsh-tdt-ses__head{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:var(--tdt-fg-3);font-size:11px}
861
- .dsh-tdt-ses__text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.6}
862
- .dsh-tdt-ses__atts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
863
- .dsh-tdt-ses__att{
934
+ .dshpc-ses{display:flex;flex-direction:column;min-height:0;color:var(--dshpc-fg);font-size:13px}
935
+ .dshpc-ses--sidebar{height:100%;border-left:1px solid var(--dshpc-border-faint);background:var(--dshpc-surface-base)}
936
+ .dshpc-ses--page{height:100%;background:var(--dshpc-surface-base)}
937
+ .dshpc-ses__list{flex:1;min-height:0;overflow:auto;padding:8px 12px;display:flex;flex-direction:column;gap:10px}
938
+ .dshpc-ses__msg{padding:8px 10px;border-radius:8px;background:var(--dshpc-surface-2);border:1px solid var(--dshpc-border-faint)}
939
+ .dshpc-ses__msg--user{background:var(--dshpc-open-bg-soft)}
940
+ .dshpc-ses__head{display:flex;align-items:center;gap:6px;margin-bottom:4px;color:var(--dshpc-fg-3);font-size:11px}
941
+ .dshpc-ses__text{margin:0;white-space:pre-wrap;word-break:break-word;line-height:1.6}
942
+ .dshpc-ses__atts{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
943
+ .dshpc-ses__att{
864
944
  display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;
865
- background:var(--tdt-chip-bg);color:var(--tdt-fg);cursor:pointer;border:none;font:inherit;font-size:12px;
945
+ background:var(--dshpc-chip-bg);color:var(--dshpc-fg);cursor:pointer;border:none;font:inherit;font-size:12px;
866
946
  }
867
- .dsh-tdt-ses__att:hover{background:var(--tdt-chip-bg-hover)}
868
- .dsh-tdt-ses__note{padding:12px;color:var(--tdt-fg-3);text-align:center}
947
+ .dshpc-ses__att:hover{background:var(--dshpc-chip-bg-hover)}
948
+ .dshpc-ses__note{padding:12px;color:var(--dshpc-fg-3);text-align:center}
869
949
  `;
870
950
 
871
951
  // dist/ui/css.js
872
952
  var CONTROLS_DOMAIN = "controls";
873
- function buildCss(template, prefix) {
874
- return template.split("--tdt-").join(`--${prefix}-`);
875
- }
876
953
  var CONTROLS_CSS = [
877
954
  SEGMENTED_CSS,
878
955
  BUTTON_CSS,
@@ -889,13 +966,13 @@ var CONTROLS_CSS = [
889
966
  CARD_CSS,
890
967
  CHIP_CSS
891
968
  ].join("\n");
892
- var current = createStyleKit({ id: "dsh-plugin-core-ui", prefix: "dshpc" });
969
+ var current = createStyleKit({ id: "dsh-plugin-core-ui" });
893
970
  function setStyleKit(kit) {
894
971
  current = kit;
895
972
  }
896
973
  function ensureControls(kit = current) {
897
974
  kit.registerStyle("tokens", kit.tokensCss);
898
- kit.applyStyle(CONTROLS_DOMAIN, buildCss(CONTROLS_CSS, kit.prefix));
975
+ kit.applyStyle(CONTROLS_DOMAIN, CONTROLS_CSS);
899
976
  }
900
977
 
901
978
  // dist/ui/picker-logic.js
@@ -1142,37 +1219,37 @@ function Picker(props) {
1142
1219
  }
1143
1220
  };
1144
1221
  return (0, import_react.createElement)("div", {
1145
- className: `dsh-tdt-picker${props.className === void 0 ? "" : ` ${props.className}`}`,
1222
+ className: `dshpc-picker${props.className === void 0 ? "" : ` ${props.className}`}`,
1146
1223
  ref: rootRef,
1147
1224
  onKeyDown
1148
1225
  }, (0, import_react.createElement)("button", {
1149
1226
  type: "button",
1150
1227
  "aria-label": props.ariaLabel,
1151
1228
  "aria-expanded": open,
1152
- className: `dsh-tdt-picker__trigger dsh-tdt-picker__trigger--${size}`,
1229
+ className: `dshpc-picker__trigger dshpc-picker__trigger--${size}`,
1153
1230
  disabled: props.disabled === true,
1154
1231
  onClick: () => {
1155
1232
  if (props.disabled !== true)
1156
1233
  setOpen(!open);
1157
1234
  }
1158
- }, (0, import_react.createElement)("span", null, summary), (0, import_react.createElement)("span", { className: "dsh-tdt-picker__caret" }, "\u25BE")), open ? (0, import_react.createElement)("div", {
1159
- className: placement === "up" ? "dsh-tdt-picker__menu dsh-tdt-picker__menu--up" : "dsh-tdt-picker__menu"
1160
- }, props.degraded === true ? (0, import_react.createElement)("div", { className: "dsh-tdt-picker__degraded" }, tt("pickerDegraded")) : null, atMax ? (0, import_react.createElement)("div", { className: "dsh-tdt-picker__degraded" }, tt("pickerMaxReached", { n: props.max ?? 0 })) : null, props.searchable === true ? (0, import_react.createElement)("input", {
1161
- className: "dsh-tdt-picker__search",
1235
+ }, (0, import_react.createElement)("span", null, summary), (0, import_react.createElement)("span", { className: "dshpc-picker__caret" }, "\u25BE")), open ? (0, import_react.createElement)("div", {
1236
+ className: placement === "up" ? "dshpc-picker__menu dshpc-picker__menu--up" : "dshpc-picker__menu"
1237
+ }, props.degraded === true ? (0, import_react.createElement)("div", { className: "dshpc-picker__degraded" }, tt("pickerDegraded")) : null, atMax ? (0, import_react.createElement)("div", { className: "dshpc-picker__degraded" }, tt("pickerMaxReached", { n: props.max ?? 0 })) : null, props.searchable === true ? (0, import_react.createElement)("input", {
1238
+ className: "dshpc-picker__search",
1162
1239
  placeholder: tt("pickerSearch"),
1163
1240
  value: query,
1164
1241
  onChange: (e) => setQuery(e.target.value)
1165
- }) : null, flat.length === 0 && groups.length === 0 ? (0, import_react.createElement)("div", { className: "dsh-tdt-picker__empty" }, tt("pickerEmpty")) : flat.length === 0 ? (0, import_react.createElement)("div", { className: "dsh-tdt-picker__empty" }, tt("pickerNoMatch")) : [
1242
+ }) : null, flat.length === 0 && groups.length === 0 ? (0, import_react.createElement)("div", { className: "dshpc-picker__empty" }, tt("pickerEmpty")) : flat.length === 0 ? (0, import_react.createElement)("div", { className: "dshpc-picker__empty" }, tt("pickerNoMatch")) : [
1166
1243
  clearable && mode === "single" && selected.length > 0 ? (0, import_react.createElement)("div", {
1167
1244
  key: "__clear__",
1168
- className: "dsh-tdt-picker__option dsh-tdt-picker__option--clear",
1245
+ className: "dshpc-picker__option dshpc-picker__option--clear",
1169
1246
  onClick: clear
1170
1247
  }, tt("pickerClear")) : null,
1171
- ...shown.map((g) => (0, import_react.createElement)("div", { key: g.value || "_" }, g.label === "" ? null : (0, import_react.createElement)("div", { className: "dsh-tdt-picker__group-label" }, g.label), g.options.map((o) => {
1248
+ ...shown.map((g) => (0, import_react.createElement)("div", { key: g.value || "_" }, g.label === "" ? null : (0, import_react.createElement)("div", { className: "dshpc-picker__group-label" }, g.label), g.options.map((o) => {
1172
1249
  const activeCls = [
1173
- "dsh-tdt-picker__option",
1174
- selected.includes(o.value) ? "dsh-tdt-picker__option--active" : "",
1175
- o.disabled === true || atMax ? "dsh-tdt-picker__option--disabled" : ""
1250
+ "dshpc-picker__option",
1251
+ selected.includes(o.value) ? "dshpc-picker__option--active" : "",
1252
+ o.disabled === true || atMax ? "dshpc-picker__option--disabled" : ""
1176
1253
  ].filter((s) => s !== "").join(" ");
1177
1254
  const idx = flat.indexOf(o);
1178
1255
  return (0, import_react.createElement)("div", {
@@ -1183,7 +1260,7 @@ function Picker(props) {
1183
1260
  if (o.disabled !== true && !atMax)
1184
1261
  pick(o.value);
1185
1262
  }
1186
- }, mode === "multiple" ? (0, import_react.createElement)("span", { className: "dsh-tdt-picker__tick" }, selected.includes(o.value) ? "\u2713" : "") : null, (0, import_react.createElement)("span", null, o.label));
1263
+ }, mode === "multiple" ? (0, import_react.createElement)("span", { className: "dshpc-picker__tick" }, selected.includes(o.value) ? "\u2713" : "") : null, (0, import_react.createElement)("span", null, o.label));
1187
1264
  })))
1188
1265
  ]) : null);
1189
1266
  }
@@ -1219,7 +1296,7 @@ function ModelPicker(props) {
1219
1296
  }
1220
1297
  const group = groupOf(props.groups, cur);
1221
1298
  const provider = group?.value ?? "";
1222
- return (0, import_react2.createElement)("div", { className: "dsh-tdt-picker__row" }, (0, import_react2.createElement)(Picker, {
1299
+ return (0, import_react2.createElement)("div", { className: "dshpc-picker__row" }, (0, import_react2.createElement)(Picker, {
1223
1300
  options: props.groups.map((g) => ({ value: g.value, label: g.label })),
1224
1301
  value: provider === "" ? void 0 : provider,
1225
1302
  placeholder: tt("modelProvider"),
@@ -1301,21 +1378,21 @@ function Modal(props) {
1301
1378
  return () => document.removeEventListener("keydown", onKey);
1302
1379
  }, [escClose, props.onClose]);
1303
1380
  return (0, import_react4.createElement)("div", {
1304
- className: "dsh-tdt-modal-mask",
1381
+ className: "dshpc-modal-mask",
1305
1382
  onClick: () => {
1306
1383
  if (closeOnMask)
1307
1384
  props.onClose?.();
1308
1385
  }
1309
1386
  }, (0, import_react4.createElement)("div", {
1310
- className: "dsh-tdt-modal",
1387
+ className: "dshpc-modal",
1311
1388
  style: props.maxWidth === void 0 ? void 0 : { maxWidth: props.maxWidth },
1312
1389
  onClick: (e) => e.stopPropagation()
1313
- }, props.hideHeader === true || props.title === void 0 && props.onClose === void 0 ? null : (0, import_react4.createElement)("div", { className: "dsh-tdt-modal__head" }, (0, import_react4.createElement)("div", { className: "dsh-tdt-modal__title" }, props.title ?? ""), props.onClose === void 0 ? null : (0, import_react4.createElement)("button", {
1390
+ }, props.hideHeader === true || props.title === void 0 && props.onClose === void 0 ? null : (0, import_react4.createElement)("div", { className: "dshpc-modal__head" }, (0, import_react4.createElement)("div", { className: "dshpc-modal__title" }, props.title ?? ""), props.onClose === void 0 ? null : (0, import_react4.createElement)("button", {
1314
1391
  type: "button",
1315
- className: "dsh-tdt-modal__close",
1392
+ className: "dshpc-modal__close",
1316
1393
  "aria-label": tt("modalClose"),
1317
1394
  onClick: () => props.onClose?.()
1318
- }, "\u2715")), (0, import_react4.createElement)("div", { className: "dsh-tdt-modal__body" }, props.children ?? null), props.footer === void 0 ? null : (0, import_react4.createElement)("div", { className: "dsh-tdt-modal__foot" }, props.footer)));
1395
+ }, "\u2715")), (0, import_react4.createElement)("div", { className: "dshpc-modal__body" }, props.children ?? null), props.footer === void 0 ? null : (0, import_react4.createElement)("div", { className: "dshpc-modal__foot" }, props.footer)));
1319
1396
  }
1320
1397
 
1321
1398
  // dist/ui/Card.js
@@ -1327,19 +1404,19 @@ function CardShell(kind, props) {
1327
1404
  const accent = props.accent ?? "business";
1328
1405
  const isPreset = CARD_ACCENTS.includes(accent);
1329
1406
  const classes = [
1330
- "dsh-tdt-card",
1331
- kind === "strip" ? "dsh-tdt-card--strip" : "dsh-tdt-card--bordered",
1332
- isPreset ? `dsh-tdt-card--${accent}` : "",
1407
+ "dshpc-card",
1408
+ kind === "strip" ? "dshpc-card--strip" : "dshpc-card--bordered",
1409
+ isPreset ? `dshpc-card--${accent}` : "",
1333
1410
  props.className ?? ""
1334
1411
  ].filter((s) => s !== "").join(" ");
1335
1412
  const style = isPreset ? props.style : { ...props.style, ["--card-accent"]: accent };
1336
- return (0, import_react5.createElement)("div", { className: classes, style }, (0, import_react5.createElement)("span", { className: "dsh-tdt-card__bar", "aria-hidden": true }), (0, import_react5.createElement)("div", { className: "dsh-tdt-card__head" }, (0, import_react5.createElement)("div", { className: "dsh-tdt-card__main" }, props.children ?? null), props.action === void 0 && props.onToggle === void 0 ? null : (0, import_react5.createElement)("div", { className: "dsh-tdt-card__side" }, props.action ?? null, props.onToggle === void 0 ? null : (0, import_react5.createElement)("button", {
1413
+ return (0, import_react5.createElement)("div", { className: classes, style }, (0, import_react5.createElement)("span", { className: "dshpc-card__bar", "aria-hidden": true }), (0, import_react5.createElement)("div", { className: "dshpc-card__head" }, (0, import_react5.createElement)("div", { className: "dshpc-card__main" }, props.children ?? null), props.action === void 0 && props.onToggle === void 0 ? null : (0, import_react5.createElement)("div", { className: "dshpc-card__side" }, props.action ?? null, props.onToggle === void 0 ? null : (0, import_react5.createElement)("button", {
1337
1414
  type: "button",
1338
- className: "dsh-tdt-card__toggle",
1415
+ className: "dshpc-card__toggle",
1339
1416
  "aria-label": tt("cardToggle"),
1340
1417
  "aria-expanded": props.expanded === true,
1341
1418
  onClick: props.onToggle
1342
- }, (0, import_react5.createElement)("span", { className: props.expanded === true ? "dsh-tdt-card__caret is-open" : "dsh-tdt-card__caret" }, "\u25BE")))), props.panel === void 0 || props.expanded !== true ? null : (0, import_react5.createElement)("div", { className: "dsh-tdt-card__panel" }, props.panel));
1419
+ }, (0, import_react5.createElement)("span", { className: props.expanded === true ? "dshpc-card__caret is-open" : "dshpc-card__caret" }, "\u25BE")))), props.panel === void 0 || props.expanded !== true ? null : (0, import_react5.createElement)("div", { className: "dshpc-card__panel" }, props.panel));
1343
1420
  }
1344
1421
  function Card(props) {
1345
1422
  return CardShell("bordered", props);
@@ -1355,13 +1432,13 @@ function Chip(props) {
1355
1432
  const clickable = props.onClick !== void 0;
1356
1433
  return (0, import_react6.createElement)(clickable ? "button" : "span", {
1357
1434
  type: clickable ? "button" : void 0,
1358
- className: `dsh-tdt-chip${clickable ? " dsh-tdt-chip--clickable" : ""}${props.className === void 0 ? "" : ` ${props.className}`}`,
1435
+ className: `dshpc-chip${clickable ? " dshpc-chip--clickable" : ""}${props.className === void 0 ? "" : ` ${props.className}`}`,
1359
1436
  onClick: props.onClick
1360
1437
  }, props.children ?? null);
1361
1438
  }
1362
1439
 
1363
1440
  // dist/ui/Toast.js
1364
- var HOST_ID = "dsh-tdt-toast-host";
1441
+ var HOST_ID = "dshpc-toast-host";
1365
1442
  var DEFAULT_MS = 2600;
1366
1443
  function showToast(message, opts) {
1367
1444
  if (typeof document === "undefined")
@@ -1370,7 +1447,7 @@ function showToast(message, opts) {
1370
1447
  const variant = opts?.variant ?? "info";
1371
1448
  const host = ensureHost();
1372
1449
  const el = document.createElement("div");
1373
- el.className = `dsh-tdt-toast${variant === "info" ? "" : ` dsh-tdt-toast--${variant}`}`;
1450
+ el.className = `dshpc-toast${variant === "info" ? "" : ` dshpc-toast--${variant}`}`;
1374
1451
  el.textContent = message;
1375
1452
  host.appendChild(el);
1376
1453
  setTimeout(() => {
@@ -1385,7 +1462,7 @@ function ensureHost() {
1385
1462
  return found;
1386
1463
  const host = document.createElement("div");
1387
1464
  host.id = HOST_ID;
1388
- host.className = "dsh-tdt-toast-host";
1465
+ host.className = "dshpc-toast-host";
1389
1466
  document.body.appendChild(host);
1390
1467
  return host;
1391
1468
  }
@@ -1395,7 +1472,7 @@ var import_react7 = require("react");
1395
1472
  function EmptyState(props) {
1396
1473
  ensureControls();
1397
1474
  const tt = props.translate ?? t;
1398
- return (0, import_react7.createElement)("div", { className: "dsh-tdt-empty" }, props.icon ?? null, (0, import_react7.createElement)("div", null, props.text ?? tt("emptyText")), props.action ?? null);
1475
+ return (0, import_react7.createElement)("div", { className: "dshpc-empty" }, props.icon ?? null, (0, import_react7.createElement)("div", null, props.text ?? tt("emptyText")), props.action ?? null);
1399
1476
  }
1400
1477
 
1401
1478
  // dist/ui/ErrorBoundary.js
@@ -1422,25 +1499,46 @@ var ErrorBoundary = class extends import_react8.Component {
1422
1499
  if (this.props.fallback !== void 0)
1423
1500
  return this.props.fallback(err, this.retry);
1424
1501
  const tt = this.props.translate ?? t;
1425
- return (0, import_react8.createElement)("div", { className: "dsh-tdt-error" }, (0, import_react8.createElement)("div", null, `${tt("errorTitle")}\uFF1A${err.message}`), (0, import_react8.createElement)("button", { type: "button", className: "dsh-tdt-error__retry", onClick: this.retry }, tt("errorRetry")));
1502
+ return (0, import_react8.createElement)("div", { className: "dshpc-error" }, (0, import_react8.createElement)("div", null, `${tt("errorTitle")}\uFF1A${err.message}`), (0, import_react8.createElement)("button", { type: "button", className: "dshpc-error__retry", onClick: this.retry }, tt("errorRetry")));
1426
1503
  }
1427
1504
  };
1428
1505
 
1429
1506
  // dist/ui/Button.js
1430
1507
  var import_react9 = require("react");
1431
- function buttonClass(variant, size, extra) {
1432
- return `dsh-tdt-btn dsh-tdt-btn--${variant} dsh-tdt-btn--${size}${extra !== void 0 && extra !== "" ? " " + extra : ""}`;
1508
+ var SOLID_VARIANTS = ["primary", "secondary", "danger", "success", "warning", "info"];
1509
+ function colorVars(variant, color) {
1510
+ if (color === void 0 || color === "")
1511
+ return void 0;
1512
+ if (SOLID_VARIANTS.includes(variant)) {
1513
+ return {
1514
+ "--btn-bg": color,
1515
+ // 亮色主题下 --dshpc-fg 是黑 ⇒ 压深;暗色下是白 ⇒ 提亮。两边都能明确看出变化。
1516
+ "--btn-bg-hover": `color-mix(in srgb, ${color} 82%, var(--dshpc-fg))`,
1517
+ "--btn-bg-active": `color-mix(in srgb, ${color} 70%, var(--dshpc-fg))`
1518
+ };
1519
+ }
1520
+ return {
1521
+ "--btn-fg": color,
1522
+ "--btn-fg-hover": color,
1523
+ "--btn-border": color,
1524
+ "--btn-bg-hover": `color-mix(in srgb, ${color} 12%, transparent)`,
1525
+ "--btn-bg-active": `color-mix(in srgb, ${color} 18%, transparent)`
1526
+ };
1527
+ }
1528
+ function buttonClass(variant, size, block, extra) {
1529
+ return `dshpc-btn dshpc-btn--${variant} dshpc-btn--${size}${block ? " dshpc-btn--block" : ""}${extra !== void 0 && extra !== "" ? ` ${extra}` : ""}`;
1433
1530
  }
1434
1531
  function Button(props) {
1435
1532
  ensureControls();
1436
- const { variant = "outline", size = "lg", icon, className, style, children, ...rest } = props;
1533
+ const { variant = "outline", size = "lg", icon, iconRight, color, loading = false, block = false, className, style, children, ...rest } = props;
1437
1534
  const attrs = {
1438
1535
  ...rest,
1439
1536
  type: rest.type ?? "button",
1440
- className: buttonClass(variant, size, className),
1441
- style
1537
+ disabled: rest.disabled === true || loading,
1538
+ className: buttonClass(variant, size, block, className),
1539
+ style: { ...colorVars(variant, color), ...style }
1442
1540
  };
1443
- return (0, import_react9.createElement)("button", attrs, icon !== void 0 && icon !== null ? (0, import_react9.createElement)("span", { className: "dsh-tdt-btn__icon" }, icon) : null, children);
1541
+ return (0, import_react9.createElement)("button", attrs, loading ? (0, import_react9.createElement)("span", { className: "dshpc-btn__spinner", "aria-hidden": true }) : icon !== void 0 && icon !== null ? (0, import_react9.createElement)("span", { className: "dshpc-btn__icon" }, icon) : null, children, iconRight !== void 0 && iconRight !== null ? (0, import_react9.createElement)("span", { className: "dshpc-btn__icon-end" }, iconRight) : null);
1444
1542
  }
1445
1543
  function IconButton(props) {
1446
1544
  ensureControls();
@@ -1450,7 +1548,7 @@ function IconButton(props) {
1450
1548
  type: rest.type ?? "button",
1451
1549
  title: rest.title ?? label,
1452
1550
  "aria-label": rest["aria-label"] ?? label,
1453
- className: `dsh-tdt-iconbtn dsh-tdt-iconbtn--${variant} dsh-tdt-iconbtn--${size}${className !== void 0 && className !== "" ? " " + className : ""}`,
1551
+ className: `dshpc-iconbtn dshpc-iconbtn--${variant} dshpc-iconbtn--${size}${className !== void 0 && className !== "" ? ` ${className}` : ""}`,
1454
1552
  style
1455
1553
  };
1456
1554
  return (0, import_react9.createElement)("button", attrs, icon);
@@ -1471,7 +1569,7 @@ function Segmented(props) {
1471
1569
  "aria-label": props.label,
1472
1570
  id: props.id,
1473
1571
  // 结构一套、皮肤只在 controls-css 里;此处只拼「轴」类名,不写任何颜色 / 尺寸字面值。
1474
- className: `dsh-tdt-seg dsh-tdt-seg--${variant} dsh-tdt-seg--${size}${props.block === true ? " dsh-tdt-seg--block" : ""}${props.className !== void 0 ? " " + props.className : ""}`,
1572
+ className: `dshpc-seg dshpc-seg--${variant} dshpc-seg--${size}${props.block === true ? " dshpc-seg--block" : ""}${props.className !== void 0 ? ` ${props.className}` : ""}`,
1475
1573
  style: props.style
1476
1574
  }, props.items.map((item) => {
1477
1575
  const on = multiple ? value.includes(item.value) : value === item.value;
@@ -1491,12 +1589,12 @@ function Segmented(props) {
1491
1589
  return (0, import_react10.createElement)("button", {
1492
1590
  key: item.value,
1493
1591
  type: "button",
1494
- className: "dsh-tdt-seg__item",
1592
+ className: "dshpc-seg__item",
1495
1593
  // 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
1496
1594
  "aria-pressed": on,
1497
1595
  disabled,
1498
1596
  onClick: handle
1499
- }, item.label, item.count !== void 0 && item.count > 0 ? (0, import_react10.createElement)("span", { className: "dsh-tdt-seg__count" }, String(item.count)) : null, item.badge !== void 0 && item.badge > 0 ? (0, import_react10.createElement)("span", { className: "dsh-tdt-seg__badge" }, String(item.badge)) : null);
1597
+ }, item.label, item.count !== void 0 && item.count > 0 ? (0, import_react10.createElement)("span", { className: "dshpc-seg__count" }, String(item.count)) : null, item.badge !== void 0 && item.badge > 0 ? (0, import_react10.createElement)("span", { className: "dshpc-seg__badge" }, String(item.badge)) : null);
1500
1598
  }));
1501
1599
  }
1502
1600
 
@@ -1513,7 +1611,7 @@ function Textarea(props) {
1513
1611
  disabled,
1514
1612
  spellCheck: spellCheck === true,
1515
1613
  "aria-label": props["aria-label"],
1516
- className: `dsh-tdt-textarea${error === true ? " dsh-tdt-textarea--error" : ""}${className !== void 0 && className !== "" ? " " + className : ""}`,
1614
+ className: `dshpc-textarea${error === true ? " dshpc-textarea--error" : ""}${className !== void 0 && className !== "" ? ` ${className}` : ""}`,
1517
1615
  style,
1518
1616
  onChange: (event) => {
1519
1617
  onChange(event.target.value);
@@ -1526,13 +1624,13 @@ var import_react12 = require("react");
1526
1624
  function Checkbox(props) {
1527
1625
  const { checked, onChange, label, accentColor, disabled, className } = props;
1528
1626
  return (0, import_react12.createElement)("label", {
1529
- className: `dsh-tdt-checkbox${className !== void 0 && className !== "" ? " " + className : ""}`,
1627
+ className: `dshpc-checkbox${className !== void 0 && className !== "" ? ` ${className}` : ""}`,
1530
1628
  style: {
1531
1629
  display: "flex",
1532
1630
  alignItems: "flex-start",
1533
1631
  gap: "8px",
1534
- fontSize: "var(--tdt-font-md)",
1535
- lineHeight: "var(--tdt-line-md)",
1632
+ fontSize: "var(--dshpc-font-md)",
1633
+ lineHeight: "var(--dshpc-line-md)",
1536
1634
  cursor: disabled === true ? "default" : "pointer"
1537
1635
  }
1538
1636
  }, (0, import_react12.createElement)("input", {
@@ -1542,7 +1640,7 @@ function Checkbox(props) {
1542
1640
  style: {
1543
1641
  flex: "none",
1544
1642
  margin: "2px 0 0",
1545
- accentColor: accentColor ?? "var(--tdt-business)",
1643
+ accentColor: accentColor ?? "var(--dshpc-business)",
1546
1644
  width: "14px",
1547
1645
  height: "14px",
1548
1646
  cursor: disabled === true ? "default" : "pointer"
@@ -1583,14 +1681,14 @@ function MarqueeText(props) {
1583
1681
  const run = dist > 0;
1584
1682
  return (0, import_react13.createElement)("span", {
1585
1683
  ref: outerRef,
1586
- className: (run ? "dsh-tdt-mq dsh-tdt-mq-run" : "dsh-tdt-mq") + (props.className === void 0 ? "" : ` ${props.className}`),
1684
+ className: (run ? "dshpc-mq dshpc-mq-run" : "dshpc-mq") + (props.className === void 0 ? "" : ` ${props.className}`),
1587
1685
  title: props.title,
1588
1686
  style: props.style
1589
1687
  }, (0, import_react13.createElement)("span", {
1590
1688
  ref: innerRef,
1591
- className: "dsh-tdt-mq-in",
1689
+ className: "dshpc-mq-in",
1592
1690
  style: {
1593
- ...run ? { "--dsh-tdt-mq-dist": `${-dist}px`, "--dsh-tdt-mq-dur": `${Math.max(3, Math.round(dist / 30))}s` } : null
1691
+ ...run ? { "--dshpc-mq-dist": `${-dist}px`, "--dshpc-mq-dur": `${Math.max(3, Math.round(dist / 30))}s` } : null
1594
1692
  }
1595
1693
  }, props.text));
1596
1694
  }
@@ -1599,8 +1697,8 @@ function MarqueeText(props) {
1599
1697
  var import_react14 = require("react");
1600
1698
  function SectionHead(props) {
1601
1699
  return (0, import_react14.createElement)("div", {
1602
- style: { display: "flex", alignItems: "center", gap: "var(--tdt-space-2)", marginBottom: "var(--tdt-space-3)" }
1603
- }, (0, import_react14.createElement)("span", { style: { display: "inline-flex", alignItems: "center", flex: "none", color: "var(--tdt-fg-3)" } }, props.icon), (0, import_react14.createElement)("span", { style: { fontSize: "var(--tdt-font-lg)", lineHeight: "var(--tdt-line-lg)", fontWeight: 600, color: "var(--tdt-fg)", flex: "none" } }, props.title), props.right === void 0 ? null : (0, import_react14.createElement)("div", { style: { marginLeft: "auto", display: "flex", alignItems: "center", gap: "var(--tdt-space-2)", minWidth: 0 } }, props.right));
1700
+ style: { display: "flex", alignItems: "center", gap: "var(--dshpc-space-2)", marginBottom: "var(--dshpc-space-3)" }
1701
+ }, (0, import_react14.createElement)("span", { style: { display: "inline-flex", alignItems: "center", flex: "none", color: "var(--dshpc-fg-3)" } }, props.icon), (0, import_react14.createElement)("span", { style: { fontSize: "var(--dshpc-font-lg)", lineHeight: "var(--dshpc-line-lg)", fontWeight: 600, color: "var(--dshpc-fg)", flex: "none" } }, props.title), props.right === void 0 ? null : (0, import_react14.createElement)("div", { style: { marginLeft: "auto", display: "flex", alignItems: "center", gap: "var(--dshpc-space-2)", minWidth: 0 } }, props.right));
1604
1702
  }
1605
1703
 
1606
1704
  // dist/ui/FieldHint.js
@@ -1608,12 +1706,12 @@ var import_react15 = require("react");
1608
1706
  function FieldHint(props) {
1609
1707
  ensureControls();
1610
1708
  return (0, import_react15.createElement)("span", {
1611
- className: `dsh-tdt-hint${props.className !== void 0 && props.className !== "" ? " " + props.className : ""}`,
1709
+ className: `dshpc-hint${props.className !== void 0 && props.className !== "" ? ` ${props.className}` : ""}`,
1612
1710
  style: props.style,
1613
1711
  tabIndex: 0,
1614
1712
  role: "note",
1615
1713
  "aria-label": props.text
1616
- }, "?", (0, import_react15.createElement)("span", { className: "dsh-tdt-hint__bubble", role: "tooltip" }, props.text));
1714
+ }, "?", (0, import_react15.createElement)("span", { className: "dshpc-hint__bubble", role: "tooltip" }, props.text));
1617
1715
  }
1618
1716
 
1619
1717
  // dist/ui/LiveText.js
@@ -1674,7 +1772,7 @@ function Input(props) {
1674
1772
  disabled,
1675
1773
  "aria-label": props["aria-label"],
1676
1774
  title: props.title,
1677
- className: `dsh-tdt-input dsh-tdt-input${sizeClass(size)}${error === true ? " dsh-tdt-input--error" : ""}${className !== void 0 && className !== "" ? " " + className : ""}`,
1775
+ className: `dshpc-input dshpc-input${sizeClass(size)}${error === true ? " dshpc-input--error" : ""}${className !== void 0 && className !== "" ? ` ${className}` : ""}`,
1678
1776
  style,
1679
1777
  onChange: (event) => {
1680
1778
  onChange(event.target.value);
@@ -1716,7 +1814,7 @@ function NumberInput(props) {
1716
1814
  return (0, import_react18.createElement)(
1717
1815
  "div",
1718
1816
  {
1719
- className: `dsh-tdt-num dsh-tdt-num${sizeClass(size)}${disabled === true ? " dsh-tdt-num--disabled" : ""}${className !== void 0 && className !== "" ? " " + className : ""}`,
1817
+ className: `dshpc-num dshpc-num${sizeClass(size)}${disabled === true ? " dshpc-num--disabled" : ""}${className !== void 0 && className !== "" ? ` ${className}` : ""}`,
1720
1818
  style
1721
1819
  },
1722
1820
  (0, import_react18.createElement)(IconButton, { variant: "plain", size, icon: "\u2212", label: decreaseLabel, disabled, onClick: () => {
@@ -1724,8 +1822,8 @@ function NumberInput(props) {
1724
1822
  } }),
1725
1823
  // 中段(数字 + 后缀)成组居中:消费端把宽度拉大时,「−」钉最左、「+」钉最右、数字组始终居中
1726
1824
  // (用户 2026-10-18:加减号必须在最左 / 最右,宽度由消费端调)。
1727
- (0, import_react18.createElement)("span", { className: "dsh-tdt-num__mid" }, (0, import_react18.createElement)("input", {
1728
- className: "dsh-tdt-num__input",
1825
+ (0, import_react18.createElement)("span", { className: "dshpc-num__mid" }, (0, import_react18.createElement)("input", {
1826
+ className: "dshpc-num__input",
1729
1827
  ...inputWidth === void 0 ? {} : { style: { width: `${inputWidth}px` } },
1730
1828
  value: text,
1731
1829
  disabled,
@@ -1741,7 +1839,7 @@ function NumberInput(props) {
1741
1839
  if (event.key === "Enter")
1742
1840
  commit(text);
1743
1841
  }
1744
- }), suffix !== void 0 ? (0, import_react18.createElement)("span", { className: "dsh-tdt-num__suffix" }, suffix) : null),
1842
+ }), suffix !== void 0 ? (0, import_react18.createElement)("span", { className: "dshpc-num__suffix" }, suffix) : null),
1745
1843
  (0, import_react18.createElement)(IconButton, { variant: "plain", size, icon: "+", label: increaseLabel, disabled, onClick: () => {
1746
1844
  bump(1);
1747
1845
  } })
@@ -1917,13 +2015,27 @@ var DICT2 = {
1917
2015
  pickerHint: "\u5355\u9009 / \u591A\u9009 / \u4E0A\u9650 / \u641C\u7D22 / \u5206\u7EC4 / \u7A7A\u6001 / \u964D\u7EA7\u2014\u2014\u5168\u90E8\u53EF\u7528 props \u63A7\u5236",
1918
2016
  modelPickerHint: "flat \u4E00\u4E2A\u4E0B\u62C9 / cascade \u5148\u9009\u4F9B\u5E94\u5546\u518D\u9009\u6A21\u578B\u2014\u2014\u540C\u4E00\u4EFD\u6570\u636E\u4E24\u79CD\u5F62\u6001",
1919
2017
  workspacePickerHint: "\u6570\u636E\u8C03\u7528\u65B9\u7ED9\uFF08\u8981\u8DE8 host\u2194client \u8FB9\u754C\uFF0C\u7EC4\u4EF6\u53D6\u4E0D\u5230\uFF09",
1920
- buttonHint: "variant \u56DB\u6863 \xD7 size \u4E09\u6863",
2018
+ buttonHint: "10 \u6863\u5916\u89C2 \xD7 3 \u6863\u9AD8\u5EA6 \xD7 \u56FE\u6807 / \u72B6\u6001 / \u81EA\u5B9A\u4E49\u989C\u8272",
2019
+ btnTextTitle: "\u6309\u94AE\u6587\u6848\u4E0E\u8BED\u8A00",
2020
+ btnTextHint: "\u6587\u6848\u7531\u8C03\u7528\u65B9\u7ED9\uFF1A\u4E2D\u6587\u73AF\u5883\u51FA\u4E2D\u6587\u3001\u82F1\u6587\u73AF\u5883\u51FA\u82F1\u6587\uFF1B\u4E2D\u82F1\u5E76\u6392\u7684\u7EC4\u5408\u4E5F\u652F\u6301\uFF08\u6700\u53F3\u4E00\u9897\uFF09",
2021
+ btnVariantTitle: "\u5916\u89C2\u6863\uFF0810 \u6863\uFF09",
2022
+ btnVariantHint: "\u5B9E\u5FC3\uFF1Aprimary / secondary / danger / success / warning / info\uFF1B\u7EBF\u6846\uFF1Aoutline / danger-outline\uFF1B\u65E0\u5E95\uFF1Aghost / link",
2023
+ btnSizeTitle: "\u5C3A\u5BF8 / \u56FE\u6807 / block",
2024
+ btnSizeHint: "sm 24 \xB7 md 28 \xB7 lg 32 \u540C\u9AD8\uFF1Bicon \u524D\u7F6E\u3001iconRight \u540E\u7F6E\u3001block \u6491\u6EE1\u7236\u5BBD",
2025
+ btnStateTitle: "\u72B6\u6001",
2026
+ btnStateHint: "disabled \u534A\u900F\u660E\u4E0D\u53EF\u70B9\uFF1Bloading \u524D\u7F6E\u540C\u8272\u5C0F\u5708\u5E76\u81EA\u52A8\u7981\u7528",
2027
+ btnColorTitle: "\u81EA\u5B9A\u4E49\u989C\u8272",
2028
+ btnColorHint: "color \u4F20\u4EFB\u610F CSS \u8272\u503C\uFF1A\u5B9E\u5FC3\u6863\u4F5C\u5E95\u8272\u3001\u7EBF\u6846\u4E0E\u6587\u5B57\u6863\u4F5C\u4E3B\u8272\uFF1Bhover / \u6309\u4E0B\u81EA\u52A8\u6309\u8BE5\u8272\u6DF7\u51FA",
2029
+ btnLabelSave: "\u4FDD\u5B58\u4FEE\u6539",
2030
+ btnLabelCancel: "\u53D6\u6D88",
2031
+ btnLabelDelete: "\u5220\u9664",
2032
+ btnLabelMixed: "\u4FDD\u5B58 Save",
1921
2033
  inputHint: "Input / PrefixedInput / NumberInput / Textarea\uFF0C\u90FD\u652F\u6301 error \u63CF\u7EA2\uFF1B\u884C\u5C3E\u53EF\u6302 FieldHint \u95EE\u53F7\u63D0\u793A",
1922
2034
  checkboxHint: "\u5916\u89C2\u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6\uFF1A\u7070\u5E95 inset\uFF08\u65E0\u5916\u63CF\u8FB9\uFF09\uFF1B\u5E26\u63CF\u8FB9\u7684 default \u4EC5\u4F9B\u7279\u6B8A\u573A\u5408\uFF0C\u89C1\u4E0B",
1923
2035
  designTokenHint: "\u989C\u8272\u5168\u90E8\u6765\u81EA design \u7684 token\uFF1B\u5207\u6362\u53F3\u4E0A\u89D2\u660E\u6697\uFF0C\u4E0B\u9762\u4F1A\u8DDF\u7740\u53D8",
1924
2036
  designInjectHint: "\u63A7\u4EF6\u6E32\u67D3\u524D\u8C03\u4E00\u6B21 setStyleKit + ensureControls\uFF0Ctoken \u4E0E\u63A7\u4EF6 CSS \u7531 kit \u6CE8\u5165 <head>",
1925
2037
  fieldHintDate: "\u4EFB\u52A1\u81EA\u8BE5\u65E5\u8D77\u5F00\u59CB\u6267\u884C\u3002\u53EF\u63D0\u524D\u521B\u5EFA\u4EFB\u52A1\uFF0C\u81F3\u8BE5\u65E5\u81EA\u52A8\u5F00\u8DD1\uFF1B\u300C\u6BCF N \u5468\u300D\u4EA6\u81EA\u8BE5\u65E5\u8D77\u7B97\u9996\u5468\u3002",
1926
- loadingNote: "Loading \u662F\u8D34\u5230\u4E3B\u5BB9\u5668\u53F3\u4E0B\u89D2\u7684\u6307\u793A\u5668\uFF08anchorId \u9ED8\u8BA4 dsh-tdt-main\uFF09\uFF0C\u6B64\u5904\u4E0D\u6E32\u67D3\u4EE5\u514D\u906E\u6321\u3002",
2038
+ loadingNote: "Loading \u662F\u8D34\u5230\u4E3B\u5BB9\u5668\u53F3\u4E0B\u89D2\u7684\u6307\u793A\u5668\uFF08anchorId \u9ED8\u8BA4 dshpc-main\uFF09\uFF0C\u6B64\u5904\u4E0D\u6E32\u67D3\u4EE5\u514D\u906E\u6321\u3002",
1927
2039
  secDesign: "\u8BBE\u8BA1\u57FA\u7840",
1928
2040
  secButtons: "\u6309\u94AE\u4E0E\u8F93\u5165",
1929
2041
  secPickers: "\u9009\u62E9\u5668",
@@ -1955,13 +2067,27 @@ var DICT2 = {
1955
2067
  pickerHint: "Single / multi / max / search / grouped / empty / degraded \u2014 all driven by props",
1956
2068
  modelPickerHint: "flat: one dropdown / cascade: pick provider then model \u2014 same data, two shapes",
1957
2069
  workspacePickerHint: "Data is supplied by the caller (crosses the host\u2194client boundary; the component cannot fetch it)",
1958
- buttonHint: "Four variants \xD7 three sizes",
2070
+ buttonHint: "10 variants \xD7 3 sizes \xD7 icons / states / custom colors",
2071
+ btnTextTitle: "Button labels & language",
2072
+ btnTextHint: "Labels come from the caller: Chinese in zh, English in en; a mixed zh+en label is fine too (rightmost)",
2073
+ btnVariantTitle: "Variants (10)",
2074
+ btnVariantHint: "Solid: primary / secondary / danger / success / warning / info; outlined: outline / danger-outline; flat: ghost / link",
2075
+ btnSizeTitle: "Sizes / icons / block",
2076
+ btnSizeHint: "sm 24 \xB7 md 28 \xB7 lg 32, same height; icon leading, iconRight trailing, block fills the parent",
2077
+ btnStateTitle: "States",
2078
+ btnStateHint: "disabled is dimmed and unclickable; loading shows a same-color spinner and disables itself",
2079
+ btnColorTitle: "Custom colors",
2080
+ btnColorHint: "Pass any CSS color as color: solid variants use it as fill, outlined/text variants as the accent; hover/press are mixed from it",
2081
+ btnLabelSave: "Save changes",
2082
+ btnLabelCancel: "Cancel",
2083
+ btnLabelDelete: "Delete",
2084
+ btnLabelMixed: "Save \u4FDD\u5B58",
1959
2085
  inputHint: "Input / PrefixedInput / NumberInput / Textarea, all support error highlighting; a FieldHint question-mark tip can hang at the row end",
1960
2086
  checkboxHint: "Looks match the real plugin: grey inset background (no outer border); the bordered default is for special cases only, see below",
1961
2087
  designTokenHint: "All colors come from design tokens; switch light/dark at top-right and these update with it",
1962
2088
  designInjectHint: "Call setStyleKit + ensureControls once before controls render; the kit injects tokens and control CSS into <head>",
1963
2089
  fieldHintDate: 'The task runs starting from this date. You can create it ahead of time and it auto-starts on that day; "every N weeks" also counts its first week from this date.',
1964
- loadingNote: "Loading is an indicator pinned to the bottom-right of the main container (anchorId defaults to dsh-tdt-main); not rendered here to avoid covering content.",
2090
+ loadingNote: "Loading is an indicator pinned to the bottom-right of the main container (anchorId defaults to dshpc-main); not rendered here to avoid covering content.",
1965
2091
  secDesign: "Design basics",
1966
2092
  secButtons: "Buttons & inputs",
1967
2093
  secPickers: "Pickers",
@@ -2046,7 +2172,7 @@ function DesignSection() {
2046
2172
  code: `import { createStyleKit } from 'dsh-plugin-core/design'
2047
2173
  import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
2048
2174
 
2049
- setStyleKit(createStyleKit({ id: 'my-plugin-ui', prefix: 'myplugin' }))
2175
+ setStyleKit(createStyleKit({ id: 'dsh-plugin-core-demo-ui' }))
2050
2176
  ensureControls()`
2051
2177
  },
2052
2178
  (0, import_react19.createElement)(
@@ -2060,6 +2186,50 @@ ensureControls()`
2060
2186
 
2061
2187
  // packages/demo/src/sections/buttons.tsx
2062
2188
  var import_react20 = require("react");
2189
+ var import_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
2190
+ var BUTTON_ICONS = [
2191
+ { name: "plus", Icon: import_dsh_client_ui_primitives.IconPlusOutlineRegular },
2192
+ { name: "check", Icon: import_dsh_client_ui_primitives.IconCheckOutlineRegular },
2193
+ { name: "close", Icon: import_dsh_client_ui_primitives.IconCloseOutlineRegular },
2194
+ { name: "refresh", Icon: import_dsh_client_ui_primitives.IconRefreshOutlineRegular },
2195
+ { name: "copy", Icon: import_dsh_client_ui_primitives.IconCopyOutlineRegular },
2196
+ { name: "search", Icon: import_dsh_client_ui_primitives.IconSearchOutlineRegular },
2197
+ { name: "edit", Icon: import_dsh_client_ui_primitives.IconEditOutlineRegular },
2198
+ { name: "play", Icon: import_dsh_client_ui_primitives.IconPlayOutlineRegular },
2199
+ { name: "send", Icon: import_dsh_client_ui_primitives.IconPaperPlaneOutlineRegular },
2200
+ { name: "clock", Icon: import_dsh_client_ui_primitives.IconClockOutlineRegular },
2201
+ { name: "sparkle", Icon: import_dsh_client_ui_primitives.IconSparkleRegular },
2202
+ { name: "chevron", Icon: import_dsh_client_ui_primitives.IconChevronDownOutlineRegular }
2203
+ ];
2204
+ function iconOf(name, size = 14) {
2205
+ const found = BUTTON_ICONS.find((item) => item.name === name);
2206
+ return found === void 0 ? null : (0, import_react20.createElement)(found.Icon, { size });
2207
+ }
2208
+ var ICON_SIZE = { sm: 12, md: 14, lg: 16 };
2209
+ var VARIANTS = [
2210
+ { value: "primary", icon: "check" },
2211
+ { value: "secondary", icon: "copy" },
2212
+ { value: "outline", icon: "edit" },
2213
+ { value: "ghost", icon: "refresh" },
2214
+ { value: "danger", icon: "close" },
2215
+ { value: "success", icon: "play" },
2216
+ { value: "warning", icon: "clock" },
2217
+ { value: "info", icon: "send" },
2218
+ { value: "danger-outline", icon: "close" },
2219
+ { value: "link", icon: "search" }
2220
+ ];
2221
+ var CUSTOM_COLORS = ["#7c3aed", "#0ea5e9", "#f97316", "#16a34a"];
2222
+ function Row(props) {
2223
+ return (0, import_react20.createElement)("div", { style: { display: "flex", gap: "8px", flexWrap: "wrap", alignItems: "center" } }, props.children);
2224
+ }
2225
+ function Labeled(props) {
2226
+ return (0, import_react20.createElement)(
2227
+ "div",
2228
+ { style: { display: "flex", gap: "10px", alignItems: "center", flexWrap: "wrap" } },
2229
+ (0, import_react20.createElement)("span", { style: { width: "64px", flex: "none", color: "var(--dshpc-fg-3)", fontSize: "12px" } }, props.label),
2230
+ props.children
2231
+ );
2232
+ }
2063
2233
  function ButtonsSection() {
2064
2234
  const [text, setText] = (0, import_react20.useState)("");
2065
2235
  const [num, setNum] = (0, import_react20.useState)(3);
@@ -2070,21 +2240,121 @@ function ButtonsSection() {
2070
2240
  return (0, import_react20.createElement)(
2071
2241
  "div",
2072
2242
  null,
2243
+ // ── 文案与语言 ──────────────────────────────────────────────────────
2244
+ (0, import_react20.createElement)(
2245
+ Demo,
2246
+ { title: t2("btnTextTitle"), hint: t2("btnTextHint") },
2247
+ (0, import_react20.createElement)(
2248
+ "div",
2249
+ { style: { display: "flex", flexDirection: "column", gap: "12px" } },
2250
+ (0, import_react20.createElement)(
2251
+ Labeled,
2252
+ { label: "locale" },
2253
+ (0, import_react20.createElement)(Button, { variant: "primary", icon: iconOf("check", ICON_SIZE.lg) }, t2("btnLabelSave")),
2254
+ (0, import_react20.createElement)(Button, { variant: "outline" }, t2("btnLabelCancel")),
2255
+ (0, import_react20.createElement)(Button, { variant: "danger", icon: iconOf("close", ICON_SIZE.lg) }, t2("btnLabelDelete"))
2256
+ ),
2257
+ (0, import_react20.createElement)(
2258
+ Labeled,
2259
+ { label: "en" },
2260
+ (0, import_react20.createElement)(Button, { variant: "primary" }, "Save"),
2261
+ (0, import_react20.createElement)(Button, { variant: "outline" }, "Cancel"),
2262
+ (0, import_react20.createElement)(Button, { variant: "ghost" }, "Learn more")
2263
+ ),
2264
+ (0, import_react20.createElement)(
2265
+ Labeled,
2266
+ { label: "zh" },
2267
+ (0, import_react20.createElement)(Button, { variant: "primary" }, "\u4FDD\u5B58"),
2268
+ (0, import_react20.createElement)(Button, { variant: "outline" }, "\u53D6\u6D88"),
2269
+ (0, import_react20.createElement)(Button, { variant: "ghost" }, "\u4E86\u89E3\u66F4\u591A")
2270
+ ),
2271
+ (0, import_react20.createElement)(
2272
+ Labeled,
2273
+ { label: "zh + en" },
2274
+ (0, import_react20.createElement)(Button, { variant: "primary", icon: iconOf("sparkle", ICON_SIZE.lg) }, t2("btnLabelMixed")),
2275
+ (0, import_react20.createElement)(Button, { variant: "outline" }, "\u590D\u5236 Copy"),
2276
+ (0, import_react20.createElement)(Button, { variant: "secondary" }, "\u91CD\u8BD5 Retry")
2277
+ )
2278
+ )
2279
+ ),
2280
+ // ── 10 档外观 ──────────────────────────────────────────────────────
2281
+ (0, import_react20.createElement)(
2282
+ Demo,
2283
+ { title: t2("btnVariantTitle"), hint: t2("btnVariantHint") },
2284
+ (0, import_react20.createElement)(
2285
+ "div",
2286
+ { style: { display: "flex", flexDirection: "column", gap: "10px" } },
2287
+ (0, import_react20.createElement)(Row, null, VARIANTS.map((item) => (0, import_react20.createElement)(Button, { key: item.value, variant: item.value, icon: iconOf(item.icon, ICON_SIZE.lg) }, item.value))),
2288
+ (0, import_react20.createElement)(Row, null, VARIANTS.map((item) => (0, import_react20.createElement)(Button, { key: item.value, variant: item.value, size: "sm", icon: iconOf(item.icon, ICON_SIZE.sm) }, item.value)))
2289
+ )
2290
+ ),
2291
+ // ── 尺寸 / 图标位置 / block ─────────────────────────────────────────
2073
2292
  (0, import_react20.createElement)(
2074
2293
  Demo,
2075
- { title: "Button", hint: t2("buttonHint") },
2294
+ { title: t2("btnSizeTitle"), hint: t2("btnSizeHint") },
2076
2295
  (0, import_react20.createElement)(
2077
2296
  "div",
2078
- { style: { display: "flex", gap: "8px", flexWrap: "wrap", alignItems: "center" } },
2079
- ["primary", "outline", "ghost", "danger"].map(
2080
- (v) => (0, import_react20.createElement)(Button, { key: v, variant: v, onClick: () => {
2081
- } }, v)
2297
+ { style: { display: "flex", flexDirection: "column", gap: "12px" } },
2298
+ (0, import_react20.createElement)(
2299
+ Labeled,
2300
+ { label: "size" },
2301
+ ["sm", "md", "lg"].map((size) => (0, import_react20.createElement)(Button, { key: size, size, variant: "outline", icon: iconOf("plus", ICON_SIZE[size]) }, size))
2302
+ ),
2303
+ (0, import_react20.createElement)(
2304
+ Labeled,
2305
+ { label: "icon" },
2306
+ (0, import_react20.createElement)(Button, { variant: "primary", icon: iconOf("send", ICON_SIZE.lg) }, "\u53D1\u9001"),
2307
+ (0, import_react20.createElement)(Button, { variant: "outline", icon: iconOf("search", ICON_SIZE.lg) }, "\u641C\u7D22"),
2308
+ (0, import_react20.createElement)(Button, { variant: "ghost", icon: iconOf("edit", ICON_SIZE.lg) }, "\u7F16\u8F91")
2082
2309
  ),
2083
- (0, import_react20.createElement)(Button, { size: "sm" }, "sm"),
2084
- (0, import_react20.createElement)(Button, { size: "lg" }, "lg"),
2085
- (0, import_react20.createElement)(IconButton, { icon: "+", label: "\u65B0\u589E" })
2310
+ (0, import_react20.createElement)(
2311
+ Labeled,
2312
+ { label: "iconRight" },
2313
+ (0, import_react20.createElement)(Button, { variant: "outline", iconRight: iconOf("chevron", ICON_SIZE.lg) }, "\u66F4\u591A"),
2314
+ (0, import_react20.createElement)(Button, { variant: "primary" }, "\u4E0B\u4E00\u6B65")
2315
+ ),
2316
+ (0, import_react20.createElement)(
2317
+ Labeled,
2318
+ { label: "block" },
2319
+ (0, import_react20.createElement)(
2320
+ "div",
2321
+ { style: { width: "240px" } },
2322
+ (0, import_react20.createElement)(Button, { variant: "primary", block: true, icon: iconOf("check", ICON_SIZE.lg) }, "\u6491\u6EE1\u7236\u5BBD")
2323
+ )
2324
+ ),
2325
+ (0, import_react20.createElement)(
2326
+ Labeled,
2327
+ { label: "icon only" },
2328
+ BUTTON_ICONS.slice(0, 6).map((item) => (0, import_react20.createElement)(IconButton, { key: item.name, icon: (0, import_react20.createElement)(item.Icon, { size: 16 }), label: item.name }))
2329
+ )
2330
+ )
2331
+ ),
2332
+ // ── 状态 ───────────────────────────────────────────────────────────
2333
+ (0, import_react20.createElement)(
2334
+ Demo,
2335
+ { title: t2("btnStateTitle"), hint: t2("btnStateHint") },
2336
+ (0, import_react20.createElement)(
2337
+ Row,
2338
+ null,
2339
+ (0, import_react20.createElement)(Button, { variant: "primary" }, "\u9ED8\u8BA4"),
2340
+ (0, import_react20.createElement)(Button, { variant: "primary", disabled: true }, "\u7981\u7528"),
2341
+ (0, import_react20.createElement)(Button, { variant: "danger", disabled: true, icon: iconOf("close", ICON_SIZE.lg) }, "\u7981\u7528"),
2342
+ (0, import_react20.createElement)(Button, { variant: "outline", loading: true }, "\u52A0\u8F7D\u4E2D"),
2343
+ (0, import_react20.createElement)(Button, { variant: "primary", loading: true, icon: iconOf("refresh", ICON_SIZE.lg) }, "\u63D0\u4EA4\u4E2D")
2344
+ )
2345
+ ),
2346
+ // ── 自定义颜色 ─────────────────────────────────────────────────────
2347
+ (0, import_react20.createElement)(
2348
+ Demo,
2349
+ { title: t2("btnColorTitle"), hint: t2("btnColorHint") },
2350
+ (0, import_react20.createElement)(
2351
+ "div",
2352
+ { style: { display: "flex", flexDirection: "column", gap: "10px" } },
2353
+ (0, import_react20.createElement)(Row, null, CUSTOM_COLORS.map((color) => (0, import_react20.createElement)(Button, { key: color, variant: "primary", color, icon: iconOf("sparkle", ICON_SIZE.lg) }, color))),
2354
+ (0, import_react20.createElement)(Row, null, CUSTOM_COLORS.map((color) => (0, import_react20.createElement)(Button, { key: color, variant: "outline", color }, color)))
2086
2355
  )
2087
2356
  ),
2357
+ // ── Input 家族 ─────────────────────────────────────────────────────
2088
2358
  (0, import_react20.createElement)(
2089
2359
  Demo,
2090
2360
  { title: t2("demoInputFamily"), hint: t2("inputHint") },
@@ -2104,6 +2374,7 @@ function ButtonsSection() {
2104
2374
  (0, import_react20.createElement)(Textarea, { value: text, onChange: setText, placeholder: "\u591A\u884C\u8F93\u5165" })
2105
2375
  )
2106
2376
  ),
2377
+ // ── Checkbox / Segmented ───────────────────────────────────────────
2107
2378
  (0, import_react20.createElement)(
2108
2379
  Demo,
2109
2380
  { title: "Checkbox / Segmented", hint: t2("checkboxHint") },
@@ -2152,7 +2423,7 @@ function ButtonsSection() {
2152
2423
  // 星期多选方块(蓝底选中、近似方形)
2153
2424
  (0, import_react20.createElement)(Segmented, {
2154
2425
  multiple: true,
2155
- className: "dsh-tdt-seg--weekday",
2426
+ className: "dshpc-seg--weekday",
2156
2427
  label: "\u661F\u671F",
2157
2428
  items: [
2158
2429
  { value: "1", label: "\u4E00" },
@@ -2608,9 +2879,9 @@ function FilePreview(props) {
2608
2879
  if (failed)
2609
2880
  return (0, import_react25.createElement)(EmptyState, { text: tt("explorerFailed"), translate: tt });
2610
2881
  if (kind === "image") {
2611
- return imageUrl === null ? (0, import_react25.createElement)("div", { className: "dsh-tdt-exp__note" }, tt("explorerLoading")) : (0, import_react25.createElement)("img", { className: "dsh-tdt-exp__image", src: imageUrl, alt: props.path });
2882
+ return imageUrl === null ? (0, import_react25.createElement)("div", { className: "dshpc-exp__note" }, tt("explorerLoading")) : (0, import_react25.createElement)("img", { className: "dshpc-exp__image", src: imageUrl, alt: props.path });
2612
2883
  }
2613
- return text === null ? (0, import_react25.createElement)("div", { className: "dsh-tdt-exp__note" }, tt("explorerLoading")) : (0, import_react25.createElement)("pre", { className: "dsh-tdt-exp__text" }, text);
2884
+ return text === null ? (0, import_react25.createElement)("div", { className: "dshpc-exp__note" }, tt("explorerLoading")) : (0, import_react25.createElement)("pre", { className: "dshpc-exp__text" }, text);
2614
2885
  }
2615
2886
 
2616
2887
  // dist/explorer/ExplorerPanel.js
@@ -2651,21 +2922,21 @@ function ExplorerPanel(props) {
2651
2922
  props.onSelect?.(null);
2652
2923
  setDir(next);
2653
2924
  };
2654
- const crumbBar = (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__crumbs" }, (0, import_react26.createElement)("button", { type: "button", className: "dsh-tdt-exp__crumb", onClick: () => goto("") }, tt("explorerRoot")), crumbs.map((c, i) => {
2925
+ const crumbBar = (0, import_react26.createElement)("div", { className: "dshpc-exp__crumbs" }, (0, import_react26.createElement)("button", { type: "button", className: "dshpc-exp__crumb", onClick: () => goto("") }, tt("explorerRoot")), crumbs.map((c, i) => {
2655
2926
  const isLast = i === crumbs.length - 1;
2656
2927
  const upto = crumbs.slice(0, i + 1).join("/");
2657
- return (0, import_react26.createElement)("span", { key: upto }, (0, import_react26.createElement)("span", { className: "dsh-tdt-exp__sep" }, " / "), (0, import_react26.createElement)("button", {
2928
+ return (0, import_react26.createElement)("span", { key: upto }, (0, import_react26.createElement)("span", { className: "dshpc-exp__sep" }, " / "), (0, import_react26.createElement)("button", {
2658
2929
  type: "button",
2659
- className: `dsh-tdt-exp__crumb${isLast ? " dsh-tdt-exp__crumb--current" : ""}`,
2930
+ className: `dshpc-exp__crumb${isLast ? " dshpc-exp__crumb--current" : ""}`,
2660
2931
  onClick: () => goto(upto)
2661
2932
  }, c));
2662
- }), (0, import_react26.createElement)("span", { className: "dsh-tdt-exp__tools" }, (0, import_react26.createElement)("button", {
2933
+ }), (0, import_react26.createElement)("span", { className: "dshpc-exp__tools" }, (0, import_react26.createElement)("button", {
2663
2934
  type: "button",
2664
- className: "dsh-tdt-exp__crumb",
2935
+ className: "dshpc-exp__crumb",
2665
2936
  disabled: dir === "",
2666
2937
  onClick: () => goto(parentOf(dir))
2667
- }, tt("explorerUp")), (0, import_react26.createElement)("button", { type: "button", className: "dsh-tdt-exp__crumb", onClick: () => setNonce(nonce + 1) }, tt("explorerRefresh"))));
2668
- const tree = loading ? (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__note" }, tt("explorerLoading")) : failed ? (0, import_react26.createElement)(EmptyState, { text: tt("explorerFailed"), translate: tt }) : entries.length === 0 ? (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__note" }, props.emptyText ?? tt("explorerEmptyDir")) : (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__tree" }, [...entries].sort((a, b) => {
2938
+ }, tt("explorerUp")), (0, import_react26.createElement)("button", { type: "button", className: "dshpc-exp__crumb", onClick: () => setNonce(nonce + 1) }, tt("explorerRefresh"))));
2939
+ const tree = loading ? (0, import_react26.createElement)("div", { className: "dshpc-exp__note" }, tt("explorerLoading")) : failed ? (0, import_react26.createElement)(EmptyState, { text: tt("explorerFailed"), translate: tt }) : entries.length === 0 ? (0, import_react26.createElement)("div", { className: "dshpc-exp__note" }, props.emptyText ?? tt("explorerEmptyDir")) : (0, import_react26.createElement)("div", { className: "dshpc-exp__tree" }, [...entries].sort((a, b) => {
2669
2940
  if (a.type !== b.type)
2670
2941
  return a.type === "directory" ? -1 : 1;
2671
2942
  return a.name.localeCompare(b.name);
@@ -2674,7 +2945,7 @@ function ExplorerPanel(props) {
2674
2945
  const isDir = e.type === "directory";
2675
2946
  return (0, import_react26.createElement)("div", {
2676
2947
  key: full,
2677
- className: `dsh-tdt-exp__item${selected === full ? " dsh-tdt-exp__item--active" : ""}`,
2948
+ className: `dshpc-exp__item${selected === full ? " dshpc-exp__item--active" : ""}`,
2678
2949
  onClick: () => {
2679
2950
  if (isDir)
2680
2951
  goto(full);
@@ -2684,9 +2955,9 @@ function ExplorerPanel(props) {
2684
2955
  props.onOpenFile?.(full);
2685
2956
  }
2686
2957
  }
2687
- }, (0, import_react26.createElement)("span", { className: "dsh-tdt-exp__icon" }, isDir ? "\u25B8" : "\xB7"), (0, import_react26.createElement)("span", { className: "dsh-tdt-exp__name" }, e.name), e.size === void 0 ? null : (0, import_react26.createElement)("span", { className: "dsh-tdt-exp__size" }, formatBytes(e.size)));
2688
- }), truncated ? (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__note" }, tt("explorerTruncated")) : null);
2689
- return (0, import_react26.createElement)("div", { className: "dsh-tdt-exp" }, crumbBar, (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__body" }, tree, (0, import_react26.createElement)("div", { className: "dsh-tdt-exp__preview" }, selected === null ? null : (0, import_react26.createElement)(FilePreview, {
2958
+ }, (0, import_react26.createElement)("span", { className: "dshpc-exp__icon" }, isDir ? "\u25B8" : "\xB7"), (0, import_react26.createElement)("span", { className: "dshpc-exp__name" }, e.name), e.size === void 0 ? null : (0, import_react26.createElement)("span", { className: "dshpc-exp__size" }, formatBytes(e.size)));
2959
+ }), truncated ? (0, import_react26.createElement)("div", { className: "dshpc-exp__note" }, tt("explorerTruncated")) : null);
2960
+ return (0, import_react26.createElement)("div", { className: "dshpc-exp" }, crumbBar, (0, import_react26.createElement)("div", { className: "dshpc-exp__body" }, tree, (0, import_react26.createElement)("div", { className: "dshpc-exp__preview" }, selected === null ? null : (0, import_react26.createElement)(FilePreview, {
2690
2961
  workspaceFiles: props.workspaceFiles,
2691
2962
  sessionId: props.sessionId,
2692
2963
  path: selected,
@@ -2911,24 +3182,24 @@ function SessionPreview(props) {
2911
3182
  alive = false;
2912
3183
  };
2913
3184
  }, [props.sessionId, props.source, nonce]);
2914
- const body = loading ? (0, import_react28.createElement)("div", { className: "dsh-tdt-ses__note" }, tt("sessionLoading")) : failed ? (0, import_react28.createElement)(EmptyState, {
3185
+ const body = loading ? (0, import_react28.createElement)("div", { className: "dshpc-ses__note" }, tt("sessionLoading")) : failed ? (0, import_react28.createElement)(EmptyState, {
2915
3186
  text: tt("sessionFailed"),
2916
3187
  translate: tt,
2917
- action: (0, import_react28.createElement)("button", { type: "button", className: "dsh-tdt-error__retry", onClick: () => setNonce(nonce + 1) }, tt("errorRetry"))
2918
- }) : messages.length === 0 ? (0, import_react28.createElement)(EmptyState, { text: tt("sessionEmpty"), translate: tt }) : (0, import_react28.createElement)("div", { className: "dsh-tdt-ses__list" }, messages.map((m) => props.renderMessage !== void 0 ? (0, import_react28.createElement)("div", { key: m.id }, props.renderMessage(m)) : (0, import_react28.createElement)("div", { key: m.id, className: `dsh-tdt-ses__msg dsh-tdt-ses__msg--${m.role}` }, (0, import_react28.createElement)("div", { className: "dsh-tdt-ses__head" }, tt(ROLE_LABEL_KEY[m.role])), (0, import_react28.createElement)("pre", { className: "dsh-tdt-ses__text" }, m.text), (m.attachments ?? []).length === 0 ? null : (0, import_react28.createElement)("div", { className: "dsh-tdt-ses__atts" }, (m.attachments ?? []).map((a) => (0, import_react28.createElement)("button", {
3188
+ action: (0, import_react28.createElement)("button", { type: "button", className: "dshpc-error__retry", onClick: () => setNonce(nonce + 1) }, tt("errorRetry"))
3189
+ }) : messages.length === 0 ? (0, import_react28.createElement)(EmptyState, { text: tt("sessionEmpty"), translate: tt }) : (0, import_react28.createElement)("div", { className: "dshpc-ses__list" }, messages.map((m) => props.renderMessage !== void 0 ? (0, import_react28.createElement)("div", { key: m.id }, props.renderMessage(m)) : (0, import_react28.createElement)("div", { key: m.id, className: `dshpc-ses__msg dshpc-ses__msg--${m.role}` }, (0, import_react28.createElement)("div", { className: "dshpc-ses__head" }, tt(ROLE_LABEL_KEY[m.role])), (0, import_react28.createElement)("pre", { className: "dshpc-ses__text" }, m.text), (m.attachments ?? []).length === 0 ? null : (0, import_react28.createElement)("div", { className: "dshpc-ses__atts" }, (m.attachments ?? []).map((a) => (0, import_react28.createElement)("button", {
2919
3190
  key: a.path,
2920
3191
  type: "button",
2921
- className: "dsh-tdt-ses__att",
3192
+ className: "dshpc-ses__att",
2922
3193
  onClick: () => props.onOpenFile?.(a.path)
2923
3194
  }, a.name, a.bytes === void 0 ? null : ` ${formatBytes(a.bytes)}`))))));
2924
3195
  if (variant === "modal") {
2925
3196
  return (0, import_react28.createElement)(Modal, {
2926
3197
  title: props.title ?? props.sessionId,
2927
3198
  onClose: props.onClose,
2928
- children: (0, import_react28.createElement)("div", { className: "dsh-tdt-ses", style: { minWidth: "min(720px, 88vw)" } }, body)
3199
+ children: (0, import_react28.createElement)("div", { className: "dshpc-ses", style: { minWidth: "min(720px, 88vw)" } }, body)
2929
3200
  });
2930
3201
  }
2931
- return (0, import_react28.createElement)("div", { className: `dsh-tdt-ses dsh-tdt-ses--${variant}` }, props.onClose === void 0 ? null : (0, import_react28.createElement)("div", { className: "dsh-tdt-ses__head" }, (0, import_react28.createElement)("button", { type: "button", className: "dsh-tdt-exp__crumb", onClick: props.onClose }, "\u2715")), body);
3202
+ return (0, import_react28.createElement)("div", { className: `dshpc-ses dshpc-ses--${variant}` }, props.onClose === void 0 ? null : (0, import_react28.createElement)("div", { className: "dshpc-ses__head" }, (0, import_react28.createElement)("button", { type: "button", className: "dshpc-exp__crumb", onClick: props.onClose }, "\u2715")), body);
2932
3203
  }
2933
3204
 
2934
3205
  // packages/demo/src/sections/session.tsx
@@ -3024,7 +3295,6 @@ function Sections(props) {
3024
3295
 
3025
3296
  // packages/demo/src/client/index.tsx
3026
3297
  var PANEL_ID = "dsh-plugin-core-demo";
3027
- var PREFIX = "dshpc";
3028
3298
  var localeRuntime;
3029
3299
  function useLocaleTick() {
3030
3300
  const [, setTick] = (0, import_react31.useState)(0);
@@ -3128,7 +3398,7 @@ function PanelIcon() {
3128
3398
  );
3129
3399
  }
3130
3400
  function apply(ctx) {
3131
- const kit = createStyleKit({ id: "dsh-plugin-core-plugin", prefix: PREFIX });
3401
+ const kit = createStyleKit({ id: "dsh-plugin-core-plugin" });
3132
3402
  setStyleKit(kit);
3133
3403
  ensureControls(kit);
3134
3404
  kit.ensureStyles();