dsh-plugin-core-demo 0.2.2 → 0.2.4

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 (2) hide show
  1. package/dist/client.js +176 -43
  2. package/package.json +1 -1
package/dist/client.js CHANGED
@@ -102,6 +102,10 @@ body{
102
102
  --dshpc-on-signal:#fff;
103
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
104
  --dshpc-on-warning:#1f2328;
105
+ /* \u60AC\u505C\u63D0\u793A\u6C14\u6CE1\uFF08\u5BF9\u9F50\u5B98\u65B9 Tooltip \u7684\u7528\u8272\uFF1A\u5E95\u8D70\u5BBF\u4E3B alias-tooltip-bg\uFF0C\u7F3A\u5931\u65F6\u7ED9\u56FA\u5B9A\u4E2D\u6027\u515C\u5E95\uFF09\u3002
106
+ FieldHint \u7684\u81EA\u7ED8\u6C14\u6CE1\u4E5F\u5403\u8FD9\u4E24\u6761 \u2014\u2014 \u4FDD\u8BC1\u300C\u95EE\u53F7\u63D0\u793A\u300D\u4E0E\u300C\u5B98\u65B9 Tooltip\u300D\u540C\u4E00\u79CD\u6C14\u6CE1\u76AE\u80A4\u3002 */
107
+ --dshpc-tooltip-bg:var(--dsw-alias-tooltip-bg,#1f2328);
108
+ --dshpc-tooltip-fg:#ffffff;
105
109
 
106
110
  /* \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
111
  \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
@@ -231,6 +235,9 @@ body{
231
235
  body[data-ds-dark-theme]{
232
236
  --dshpc-solid:var(--dsw-static-neutral-900,#0f0f0f);
233
237
  --dshpc-on-solid:var(--dsw-static-neutral-00,#fff);
238
+ /* \u60AC\u505C\u63D0\u793A\u6C14\u6CE1\uFF08\u6697\u8272\u7248\uFF09\uFF1A\u5B98\u65B9 alias \u5728\u6697\u8272\u4E0B\u81EA\u52A8\u6362\u503C\uFF1Balias \u7F3A\u5931\u65F6\u7ED9\u4EAE\u5E95\u6DF1\u5B57\uFF08\u4E0E\u5B98\u65B9\u6697\u8272\u6C14\u6CE1\u540C\u5411\uFF09\u3002 */
239
+ --dshpc-tooltip-bg:var(--dsw-alias-tooltip-bg,#e8e8e8);
240
+ --dshpc-tooltip-fg:#1f2328;
234
241
  /* \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
242
  \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
243
  --dshpc-accent-hover:color-mix(in srgb,var(--dshpc-accent) 80%,#000000);
@@ -369,7 +376,12 @@ var SEGMENTED_CSS = `
369
376
  \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
370
377
  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
371
378
  \u4EE5\u540E Button / Input \u7684\u6709\u8FB9 / \u65E0\u8FB9\u540C\u6B64\u89C4\u5219\u3002 */
372
- .dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--seg-track);}
379
+ /* \u26A0\uFE0F \u8F68\u9053 / \u9009\u4E2D\u7247\u7684\u989C\u8272\u53D8\u91CF\u5728\u57FA\u7840\u7C7B\u4E0A\u7ED9**\u9ED8\u8BA4\u503C**\uFF08= inset \u89C2\u611F\uFF09\uFF0Cvariant \u7C7B\u53EA\u505A\u8986\u76D6\uFF1A
380
+ \u6B64\u524D --seg-track \u53EA\u7531 variant \u7C7B\u5B9A\u4E49\uFF0C\u7C7B\u4E00\u65E6\u6CA1\u751F\u6548\uFF08\u5BBF\u4E3B\u6837\u5F0F\u88C1\u526A / \u9009\u62E9\u5668\u88AB\u88C1 / \u7248\u672C\u9519\u4F4D\uFF09\uFF0C
381
+ background:var(--seg-track) \u6574\u6761\u4F5C\u5E9F \u21D2 \u8F68\u9053\u5168\u900F\u660E\u3001\u300C\u5C31\u5269\u51E0\u4E2A\u5B57\u6D6E\u5728\u9875\u9762\u4E0A\u300D\uFF080.2.2 \u771F\u673A\u73B0\u8C61\uFF09\u3002
382
+ var() \u7684\u7B2C\u4E8C\u53C2\u515C\u5E95\u4FDD\u8BC1\u4EFB\u4F55\u60C5\u51B5\u4E0B\u8F68\u9053\u90FD\u6709\u5E95\u3001\u9009\u4E2D\u7247\u90FD\u6709\u8272\u3002 */
383
+ .dshpc-seg{--seg-track:var(--dshpc-hover);--seg-thumb:var(--dshpc-surface-raised);
384
+ display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--seg-track);}
373
385
  /* \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
386
  \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
387
  \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
@@ -389,7 +401,7 @@ var SEGMENTED_CSS = `
389
401
  .dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);background:var(--dshpc-hover);}
390
402
  .dshpc-seg--inset .dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){background:var(--dshpc-active);}
391
403
  /* \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);
404
+ .dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb,var(--dshpc-surface-raised));border-color:var(--dshpc-border);
393
405
  box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}
394
406
  .dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}
395
407
  .dshpc-seg__item:disabled{cursor:default;opacity:.4;}
@@ -518,21 +530,6 @@ var BUTTON_CSS = `
518
530
  .dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
519
531
  .dshpc-iconbtn:disabled{cursor:default;opacity:.4;}
520
532
 
521
- .dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;
522
- border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);
523
- font-family:inherit;cursor:pointer;flex:none;
524
- 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);}
525
- .dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}
526
- .dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}
527
- .dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}
528
- .dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}
529
- .dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}
530
- .dshpc-iconbtn--danger{color:var(--dshpc-danger);}
531
- .dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}
532
- .dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-danger);}
533
- .dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}
534
- .dshpc-iconbtn:disabled{cursor:default;opacity:.4;}
535
-
536
533
  /* \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
537
534
  \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
538
535
  \u6267\u884C\u8BB0\u5F55\u9875\u7684\u5C55\u5F00\u533A\uFF09\u3002\u5E73\u65F6\u900F\u660E\u3001**\u9F20\u6807\u79FB\u4E0A\u53BB\u624D\u51FA\u6D45\u5E95**\uFF08\u6CBF\u7528\u7528\u6237 2026-10-03 \u5B9A\u7684\u89C2\u611F\uFF09\u3002
@@ -730,10 +727,15 @@ var HINT_CSS = `
730
727
  transition:color var(--dshpc-dur-fast) var(--dshpc-ease);}
731
728
  .dshpc-hint:hover,.dshpc-hint:focus-visible{color:var(--dshpc-fg);background:0 0;}
732
729
  .dshpc-hint:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}
730
+ /* \u6C14\u6CE1\u76AE\u80A4 = \u5B98\u65B9 Tooltip \u540C\u6B3E\uFF082026-10-19 \u7528\u6237\u70B9\u540D\u300C\u4E24\u4E2A\u6C14\u6CE1\u5FC5\u987B\u4E00\u79CD\u76AE\u80A4\u300D\uFF09\uFF1A
731
+ \u5E95\u8272\u8D70 --dsw-alias-tooltip-bg \u7684 token \u5305\u88C5\uFF08--dshpc-tooltip-bg\uFF0C\u660E\u6697\u5404\u7ED9\u515C\u5E95\uFF09\u3001
732
+ 13px \u5B57\u53F7\u3001\u5C0F\u5185\u8DDD\u3001radius-sm\uFF1Bwhite-space:pre-line \u21D2 \u6587\u672C\u91CC\u7684
733
+ \u662F\u771F\u5B9E\u6362\u884C
734
+ \uFF08\u7B2C\u4E00\u884C\u540D\u5B57\u3001\u7B2C\u4E8C\u884C\u6B63\u6587\u7684\u4E24\u6BB5\u5F0F\u63D0\u793A\u5C31\u9760\u5B83\uFF09\u3002 */
733
735
  .dshpc-hint__bubble{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);
734
- box-sizing:border-box;width:max-content;max-width:280px;padding:8px 10px;
735
- border-radius:var(--dshpc-radius-sm);background:var(--dshpc-solid);color:var(--dshpc-on-solid);
736
- font-size:var(--dshpc-font-xs);line-height:1.7;text-align:left;white-space:normal;
736
+ box-sizing:border-box;width:max-content;max-width:280px;padding:5px 9px;
737
+ border-radius:var(--dshpc-radius-sm);background:var(--dshpc-tooltip-bg);color:var(--dshpc-tooltip-fg);
738
+ font-size:var(--dshpc-font-md);line-height:1.55;text-align:left;white-space:pre-line;
737
739
  box-shadow:var(--dshpc-shadow-2);z-index:var(--dshpc-z-menu);
738
740
  opacity:0;visibility:hidden;pointer-events:none;
739
741
  transition:opacity var(--dshpc-dur-fast) var(--dshpc-ease);}
@@ -2027,7 +2029,15 @@ var DICT2 = {
2027
2029
  btnVariantHint: "\u5B9E\u5FC3\uFF1Aprimary / secondary / danger / success / warning / info\uFF1B\u7EBF\u6846\uFF1Aoutline / danger-outline\uFF1B\u65E0\u5E95\uFF1Aghost / link",
2028
2030
  btnSizeTitle: "\u5C3A\u5BF8 / \u56FE\u6807 / block",
2029
2031
  btnSizeHint: "sm 24 \xB7 md 28 \xB7 lg 32 \u540C\u9AD8\uFF1Bicon \u6536\u7684\u662F ReactNode\u2014\u2014\u5B98\u65B9\u56FE\u6807\u7EC4\u4EF6\u3001\u81EA\u7ED8 SVG\u3001\u751A\u81F3\u4E00\u4E2A\u5B57\u7B26\u90FD\u884C\uFF0C\u4E0D\u662F\u540D\u5B57\u4E5F\u4E0D\u662F class\uFF08\u4E0B\u9762\u4E09\u9897\u5206\u522B\u662F\u8FD9\u4E09\u79CD\uFF09\uFF1BiconRight \u540E\u7F6E\u3001block \u6491\u6EE1\u7236\u5BBD",
2030
- btnIconOnly: "\u7EAF\u56FE\u6807\u94AE",
2032
+ btnIconOnly: "icon only",
2033
+ tooltipTitle: "Tooltip\uFF08\u9F20\u6807\u60AC\u505C\u63D0\u793A\uFF09",
2034
+ tooltipHint: "\u5B98\u65B9 Tooltip\uFF1Aside \u4E0A / \u4E0B / \u53F3 \xD7 align \u5C45\u4E2D / \u8D34\u8FB9\uFF1B\u951A\u70B9\u53EF\u4EE5\u662F\u6309\u94AE\u6216\u4E00\u6BB5\u6587\u5B57\uFF1B\u957F\u6587\u672C\u6309 maxWidth \u81EA\u52A8\u6298\u884C\uFF1B\u6700\u53F3\u4E00\u9897\u662F\u300C\u540D\u5B57 + \u6B63\u6587\u300D\u4E24\u6BB5\u5F0F\u2014\u2014\u6587\u672C\u91CC\u7684 \n \u5C31\u662F\u771F\u5B9E\u6362\u884C",
2035
+ tooltipAnchorText: "\u6587\u5B57\u951A\u70B9",
2036
+ tooltipAnchorButton: "\u6309\u94AE\u951A\u70B9",
2037
+ tooltipLong: "\u957F\u6587\u672C\u6362\u884C",
2038
+ tooltipName: "\u5F20\u4E09\u4E30",
2039
+ tooltipMultiline: "\u4E24\u6BB5\u5F0F\uFF08\u540D\u5B57 + \u6B63\u6587\uFF09",
2040
+ tooltipLongText: "\u8FD9\u662F\u4E00\u6BB5\u8DB3\u591F\u957F\u7684\u63D0\u793A\u6587\u5B57\uFF1A\u6C14\u6CE1\u9047\u5230 maxWidth \u4F1A\u81EA\u52A8\u6362\u884C\uFF0C\u800C\u4E0D\u4F1A\u4E00\u8DEF\u6491\u5230\u534A\u4E2A\u5C4F\u5E55\u5BBD\uFF0C anchored \u5143\u7D20\u5728\u8FB9\u7F18\u65F6\u5B98\u65B9\u8FD8\u4F1A\u81EA\u52A8\u628A\u6C14\u6CE1\u6536\u56DE\u89C6\u53E3\u5185\u3002",
2031
2041
  btnHintTitle: "\u95EE\u53F7\u63D0\u793A\uFF08FieldHint\uFF09",
2032
2042
  btnHintHint: "\u72EC\u7ACB\u7EC4\u4EF6\uFF0C\u653E\u54EA\u90FD\u884C\uFF1A\u6807\u9898\u540E / \u6309\u94AE\u540E / \u4E00\u6BB5\u6587\u5B57\u540E / \u8F93\u5165\u6846\u540E\uFF1B\u9F20\u6807\u60AC\u505C\u6216\u952E\u76D8\u805A\u7126\u6D6E\u51FA\u6C14\u6CE1",
2033
2043
  btnStateTitle: "\u72B6\u6001",
@@ -2039,7 +2049,24 @@ var DICT2 = {
2039
2049
  btnLabelDelete: "\u5220\u9664",
2040
2050
  btnLabelMixed: "\u4FDD\u5B58 Save",
2041
2051
  inputHint: "Input / PrefixedInput / NumberInput / Textarea\uFF0C\u90FD\u652F\u6301 error \u63CF\u7EA2\uFF1B\u884C\u5C3E\u53EF\u6302 FieldHint \u95EE\u53F7\u63D0\u793A",
2042
- 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",
2052
+ 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\uFF08\u6700\u53F3\uFF0C\u53EF\u70B9\u7740\u73A9\uFF09\uFF1B\u661F\u671F\u65B9\u5757\u662F\u591A\u9009\u3002\u6587\u6848\u968F\u8BED\u8A00\u5207\u6362",
2053
+ segDay: "\u65E5",
2054
+ segWeek: "\u5468",
2055
+ segMonth: "\u6708",
2056
+ segAll: "\u5168\u90E8",
2057
+ segDoing: "\u8FDB\u884C\u4E2D",
2058
+ segClaimed: "\u5F85\u8BA4\u9886",
2059
+ segBlocked: "\u963B\u585E",
2060
+ segStalled: "\u505C\u6EDE",
2061
+ segPreview: "\u9884\u89C8",
2062
+ segSource: "\u6E90\u7801",
2063
+ weekday1: "\u4E00",
2064
+ weekday2: "\u4E8C",
2065
+ weekday3: "\u4E09",
2066
+ weekday4: "\u56DB",
2067
+ weekday5: "\u4E94",
2068
+ weekday6: "\u516D",
2069
+ weekday7: "\u65E5",
2043
2070
  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",
2044
2071
  designInjectHint: "\u63A7\u4EF6\u6E32\u67D3\u524D\u8C03\u4E00\u6B21 setStyleKit + ensureControls\uFF0Ctoken \u4E0E\u63A7\u4EF6 CSS \u7531 kit \u6CE8\u5165 <head>",
2045
2072
  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",
@@ -2082,7 +2109,15 @@ var DICT2 = {
2082
2109
  btnVariantHint: "Solid: primary / secondary / danger / success / warning / info; outlined: outline / danger-outline; flat: ghost / link",
2083
2110
  btnSizeTitle: "Sizes / icons / block",
2084
2111
  btnSizeHint: "sm 24 \xB7 md 28 \xB7 lg 32, same height; icon takes any ReactNode \u2014 an official icon component, your own SVG, even a single character (not a name, not a class); iconRight trails, block fills the parent",
2085
- btnIconOnly: "Icon-only",
2112
+ btnIconOnly: "icon only",
2113
+ tooltipTitle: "Tooltip (hover hint)",
2114
+ tooltipHint: "Official Tooltip: side top / bottom / right x align center / end; anchor can be a button or a span of text; long labels wrap at maxWidth; the rightmost one is a two-part hint (name + body) where \n in the text is a real line break",
2115
+ tooltipAnchorText: "Text anchor",
2116
+ tooltipAnchorButton: "Button anchor",
2117
+ tooltipLong: "Long label",
2118
+ tooltipName: "Alex Chen",
2119
+ tooltipMultiline: "Two-part (name + body)",
2120
+ tooltipLongText: "A deliberately long hint: the bubble wraps at maxWidth instead of stretching to half the viewport, and the official layer pulls it back inside the viewport near the edges.",
2086
2121
  btnHintTitle: "Question-mark hint (FieldHint)",
2087
2122
  btnHintHint: "Standalone component, drop it anywhere: after a title, a button, a sentence, or an input; hover or keyboard-focus to reveal",
2088
2123
  btnStateTitle: "States",
@@ -2094,7 +2129,24 @@ var DICT2 = {
2094
2129
  btnLabelDelete: "Delete",
2095
2130
  btnLabelMixed: "Save \u4FDD\u5B58",
2096
2131
  inputHint: "Input / PrefixedInput / NumberInput / Textarea, all support error highlighting; a FieldHint question-mark tip can hang at the row end",
2097
- checkboxHint: "Looks match the real plugin: grey inset background (no outer border); the bordered default is for special cases only, see below",
2132
+ checkboxHint: "Looks match the real plugin: grey inset background (no outer border); the bordered default (rightmost, clickable) is for special cases; the weekday squares are multi-select. Labels follow the locale",
2133
+ segDay: "Day",
2134
+ segWeek: "Week",
2135
+ segMonth: "Month",
2136
+ segAll: "All",
2137
+ segDoing: "Doing",
2138
+ segClaimed: "Open",
2139
+ segBlocked: "Blocked",
2140
+ segStalled: "Stalled",
2141
+ segPreview: "Render",
2142
+ segSource: "Source",
2143
+ weekday1: "Mo",
2144
+ weekday2: "Tu",
2145
+ weekday3: "We",
2146
+ weekday4: "Th",
2147
+ weekday5: "Fr",
2148
+ weekday6: "Sa",
2149
+ weekday7: "Su",
2098
2150
  designTokenHint: "All colors come from design tokens; switch light/dark at top-right and these update with it",
2099
2151
  designInjectHint: "Call setStyleKit + ensureControls once before controls render; the kit injects tokens and control CSS into <head>",
2100
2152
  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.',
@@ -2242,6 +2294,22 @@ var VARIANTS = [
2242
2294
  { value: "link", icon: "search" }
2243
2295
  ];
2244
2296
  var CUSTOM_COLORS = ["#7c3aed", "#0ea5e9", "#f97316", "#16a34a"];
2297
+ function tipAnchor(text, side, align) {
2298
+ const props = { label: text, side };
2299
+ if (align !== void 0) props.align = align;
2300
+ return (0, import_react20.createElement)(import_dsh_client_ui_primitives.Tooltip, props, (0, import_react20.createElement)("button", {
2301
+ type: "button",
2302
+ style: {
2303
+ padding: "4px 10px",
2304
+ border: "1px solid var(--dshpc-border)",
2305
+ borderRadius: "6px",
2306
+ background: "var(--dshpc-surface-1)",
2307
+ color: "var(--dshpc-fg)",
2308
+ fontSize: "12px",
2309
+ cursor: "help"
2310
+ }
2311
+ }, text));
2312
+ }
2245
2313
  function Row(props) {
2246
2314
  return (0, import_react20.createElement)("div", { style: { display: "flex", gap: "8px", flexWrap: "wrap", alignItems: "center" } }, props.children);
2247
2315
  }
@@ -2260,6 +2328,7 @@ function ButtonsSection() {
2260
2328
  const [seg, setSeg] = (0, import_react20.useState)("week");
2261
2329
  const [filter, setFilter] = (0, import_react20.useState)("all");
2262
2330
  const [multi, setMulti] = (0, import_react20.useState)(["1"]);
2331
+ const [view, setView] = (0, import_react20.useState)("render");
2263
2332
  return (0, import_react20.createElement)(
2264
2333
  "div",
2265
2334
  null,
@@ -2356,6 +2425,55 @@ function ButtonsSection() {
2356
2425
  )
2357
2426
  )
2358
2427
  ),
2428
+ // ── Tooltip:官方悬停提示,side × align 全组合 + 双锚点类型 + 长文本换行 ──
2429
+ (0, import_react20.createElement)(
2430
+ Demo,
2431
+ { title: t2("tooltipTitle"), hint: t2("tooltipHint") },
2432
+ (0, import_react20.createElement)(
2433
+ "div",
2434
+ { style: { display: "flex", flexDirection: "column", gap: "12px" } },
2435
+ (0, import_react20.createElement)(
2436
+ Labeled,
2437
+ { label: t2("tooltipAnchorButton") },
2438
+ tipAnchor("top \xB7 center", "top", "center"),
2439
+ tipAnchor("top \xB7 end", "top", "end"),
2440
+ tipAnchor("bottom \xB7 center", "bottom", "center"),
2441
+ tipAnchor("bottom \xB7 end", "bottom", "end"),
2442
+ tipAnchor("right", "right")
2443
+ ),
2444
+ (0, import_react20.createElement)(
2445
+ Labeled,
2446
+ { label: t2("tooltipAnchorText") },
2447
+ (0, import_react20.createElement)(
2448
+ import_dsh_client_ui_primitives.Tooltip,
2449
+ { label: t2("tooltipHint"), side: "top" },
2450
+ (0, import_react20.createElement)("span", {
2451
+ style: { borderBottom: "1px dashed var(--dshpc-border-strong)", cursor: "help", fontSize: "13px" }
2452
+ }, t2("tooltipAnchorText"))
2453
+ ),
2454
+ (0, import_react20.createElement)(
2455
+ import_dsh_client_ui_primitives.Tooltip,
2456
+ { label: t2("tooltipLongText"), side: "bottom", maxWidth: 240 },
2457
+ (0, import_react20.createElement)("span", {
2458
+ style: { borderBottom: "1px dashed var(--dshpc-border-strong)", cursor: "help", fontSize: "13px" }
2459
+ }, t2("tooltipLong"))
2460
+ )
2461
+ ),
2462
+ // 两段式:第一行名字(短)、\n 真实换行、第二行正文(长,受 maxWidth 折行)
2463
+ (0, import_react20.createElement)(
2464
+ Labeled,
2465
+ { label: t2("tooltipMultiline") },
2466
+ (0, import_react20.createElement)(
2467
+ import_dsh_client_ui_primitives.Tooltip,
2468
+ { label: `${t2("tooltipName")}
2469
+ ${t2("tooltipLongText")}`, side: "top", maxWidth: 260 },
2470
+ (0, import_react20.createElement)("span", {
2471
+ style: { borderBottom: "1px dashed var(--dshpc-border-strong)", cursor: "help", fontSize: "13px" }
2472
+ }, t2("tooltipName"))
2473
+ )
2474
+ )
2475
+ )
2476
+ ),
2359
2477
  // ── 问号提示:证明它不属于 Input 家族,随处可挂 ──────────────────────
2360
2478
  (0, import_react20.createElement)(
2361
2479
  Demo,
@@ -2465,11 +2583,11 @@ function ButtonsSection() {
2465
2583
  (0, import_react20.createElement)(Segmented, {
2466
2584
  variant: "inset",
2467
2585
  items: [
2468
- { value: "all", label: "\u5168\u90E8", count: 11 },
2469
- { value: "doing", label: "\u8FDB\u884C\u4E2D", count: 5 },
2470
- { value: "claimed", label: "\u5F85\u8BA4\u9886", count: 11 },
2471
- { value: "blocked", label: "\u963B\u585E" },
2472
- { value: "stalled", label: "\u505C\u6EDE" }
2586
+ { value: "all", label: t2("segAll"), count: 11 },
2587
+ { value: "doing", label: t2("segDoing"), count: 5 },
2588
+ { value: "claimed", label: t2("segClaimed"), count: 11 },
2589
+ { value: "blocked", label: t2("segBlocked") },
2590
+ { value: "stalled", label: t2("segStalled") }
2473
2591
  ],
2474
2592
  value: filter,
2475
2593
  onChange: setFilter
@@ -2479,15 +2597,10 @@ function ButtonsSection() {
2479
2597
  multiple: true,
2480
2598
  className: "dshpc-seg--weekday",
2481
2599
  label: "\u661F\u671F",
2482
- items: [
2483
- { value: "1", label: "\u4E00" },
2484
- { value: "2", label: "\u4E8C" },
2485
- { value: "3", label: "\u4E09" },
2486
- { value: "4", label: "\u56DB" },
2487
- { value: "5", label: "\u4E94" },
2488
- { value: "6", label: "\u516D" },
2489
- { value: "7", label: "\u65E5" }
2490
- ],
2600
+ items: [1, 2, 3, 4, 5, 6, 7].map((n) => ({
2601
+ value: String(n),
2602
+ label: t2(`weekday${n}`)
2603
+ })),
2491
2604
  value: multi,
2492
2605
  onChange: setMulti
2493
2606
  }),
@@ -2497,12 +2610,11 @@ function ButtonsSection() {
2497
2610
  variant: "default",
2498
2611
  label: "default \u5916\u89C2\u793A\u4F8B",
2499
2612
  items: [
2500
- { value: "render", label: "\u9884\u89C8" },
2501
- { value: "source", label: "\u6E90\u7801" }
2613
+ { value: "render", label: t2("segPreview") },
2614
+ { value: "source", label: t2("segSource") }
2502
2615
  ],
2503
- value: seg === "week" ? "render" : "source",
2504
- onChange: () => {
2505
- }
2616
+ value: view,
2617
+ onChange: setView
2506
2618
  })
2507
2619
  )
2508
2620
  )
@@ -3405,6 +3517,27 @@ function DemoPage() {
3405
3517
  },
3406
3518
  t2(s.titleKey)
3407
3519
  )
3520
+ ),
3521
+ // 底部常驻:bundle 的真实版本 + 当前暗色判据实测值(查「改了没生效」类问题的锚点)。
3522
+ (0, import_react31.createElement)(
3523
+ "div",
3524
+ {
3525
+ style: {
3526
+ marginTop: "18px",
3527
+ paddingTop: "10px",
3528
+ borderTop: "1px solid var(--dshpc-border-faint)",
3529
+ color: "var(--dshpc-fg-3)",
3530
+ fontSize: "11px",
3531
+ fontFamily: "var(--dshpc-font-mono)"
3532
+ }
3533
+ },
3534
+ (0, import_react31.createElement)("div", null, `core v${"0.2.4"}`),
3535
+ (0, import_react31.createElement)("div", null, `demo v${"0.2.4"}`),
3536
+ (0, import_react31.createElement)(
3537
+ "div",
3538
+ { title: "body[data-ds-dark-theme]" },
3539
+ `dark: ${typeof document !== "undefined" && document.body.hasAttribute("data-ds-dark-theme") ? "yes" : "no"}`
3540
+ )
3408
3541
  )
3409
3542
  ),
3410
3543
  (0, import_react31.createElement)(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-core-demo",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "dsh-plugin-core 的组件预览插件:装进 DSH 宿主后,在真实宿主环境里预览控件与业务组件",
5
5
  "keywords": ["deepseek", "harness", "dsh", "dsh-plugin", "dsh-plugin-core"],
6
6
  "homepage": "https://github.com/cq-guojia/dsh-plugin-core/tree/main/packages/demo",