dsh-plugin-core-demo 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -116,7 +116,7 @@ function createStyleKit(options) {
116
116
  }
117
117
 
118
118
  // dist/ui/controls/segmented-css.generated.js
119
- var SEGMENTED_CSS = "\n/* \u2500\u2500 \u5206\u6BB5\u63A7\u4EF6 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\u2500\u2500\n \u7ED3\u6784\u7167\u5144\u5F1F\u9879\u76EE dsh-task-dispatch-table \u7684 Segmented \u76AE\u80A4\uFF08item \u65E0\u8FB9\u6846\u3001hover \u53EA\u63D0\u4EAE\u6587\u5B57\uFF09\uFF0C\n \u524D\u7F00 / \u53D8\u91CF\u540D\u6362\u6210\u672C\u4ED3\u53E3\u5F84\u3002\u7528\u6237\u989D\u5916\u8981\u7684\u4E24\u5904\uFF08\u5144\u5F1F\u6CA1\u6709\uFF09\uFF1Aweekday \u65B9\u5757\u95F4\u9694\uFF08\u73B0\u4E3A 2px\uFF09\uFF1B\u6BB5\u5185\u4E2D\u6027\u8BA1\u6570 __count\u3002\n \u26A0\uFE0F 2026-10-19 \u4E24\u6B21\u8BEF\u5224\u5747\u5DF2\u6F84\u6E05\uFF1A\u2460 \u300C\u5BBF\u4E3B\u53EA\u8BA4\u5355\u884C CSS\u300D\u2014\u2014\u5047\uFF0C\u591A\u884C\u4E00\u76F4\u6B63\u5E38\uFF1B\n \u2461 \u300C\u5BBF\u4E3B\u5403\u6389 token \u5757\u4E4B\u540E\u7B2C\u4E00\u6761\u89C4\u5219\u300D\u2014\u2014\u4E5F\u5047\uFF0C\u771F\u56E0\u662F tokens \u6A21\u677F\u5B57\u7B26\u4E32\u7ED3\u5C3E\u591A\u4E86\u4E00\u4E2A\u53CD\u659C\u6760\uFF0C\n \u6CE8\u5165\u6587\u672C\u91CC\u7559\u4E0B\u5B57\u9762\u53CD\u5F15\u53F7\uFF0C\u628A\u7D27\u968F\u5176\u540E\u7684\u90A3\u6761\u89C4\u5219\u7684\u9009\u62E9\u5668\u6C61\u67D3\u6389\u4E86\uFF08\u89C1 dsh-host.md \xA79\uFF09\u3002\n \u6837\u5F0F\u7167\u5E38\u591A\u884C\u4E66\u5199\uFF0C\u4E0D\u5FC5\u538B\u884C\uFF1B\u4E5F\u4E0D\u9700\u8981\u4EFB\u4F55\u300C\u727A\u7272\u89C4\u5219\u300D\u3002 */\n.dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);}\n.dshpc-seg--default{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:2px;background:var(--seg-track);}\n.dshpc-seg--inset{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg__item{appearance:none;display:inline-flex;align-items:center;gap:4px;box-sizing:border-box;height:calc(var(--dshpc-control-h-sm) - 6px);padding:0 12px;border:0;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);font-family:inherit;font-size:var(--dshpc-font-xs);font-weight:500;white-space:nowrap;cursor:pointer;flex:none;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);}\n.dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);}\n.dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);}\n.dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);}\n.dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}\n.dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n.dshpc-seg__item:disabled{cursor:default;opacity:.4;}\n/* \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\u5FC5\u987B\u662F\u6B63\u5706\uFF08\u7528\u6237 2026-10-03\uFF09\u3002 */\n.dshpc-seg__badge{display:inline-flex;align-items:center;justify-content:center;flex:none;width:16px;height:16px;padding:0;overflow:hidden;border-radius:50%;background:var(--dshpc-danger);color:var(--dshpc-on-signal);font-size:10px;line-height:16px;font-weight:500;font-variant-numeric:tabular-nums;}\n/* \u6BB5\u5185\u4E2D\u6027\u8BA1\u6570\uFF08\u5982\u7B5B\u9009\u6761\u300C\u5168\u90E8 11\u300D\uFF09\uFF1A\u7EAF\u6587\u5B57\u3001\u65E0\u5E95\u65E0\u8FB9\uFF08\u5BF9\u9F50 task-ledger .dtl-seg__num \u62CD\u677F\u53E3\u5F84\uFF09\uFF1B0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002 */\n.dshpc-seg__count{display:inline;flex:none;margin-left:3px;padding:0;border:0;border-radius:0;background:none;color:var(--dshpc-fg-3);font-size:10px;line-height:1;font-weight:400;font-variant-numeric:tabular-nums;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u884C\u7528\uFF09\uFF0C\u5404\u6BB5\u7B49\u5206 */\n.dshpc-seg--block{display:flex;width:100%;}\n.dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;}\n/* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01\uFF1A\u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF09\uFF1A\n \u6BCF\u683C\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\u3001\u9009\u4E2D\u54C1\u724C\u84DD\u53CD\u767D\u5B57\u3001**\u65E0\u5916\u63CF\u8FB9**\uFF082026-10-18 \u91CD\u7533\uFF09\u3001\n \u65B9\u5757\u4E4B\u95F4\u95F4\u8DDD gap:2px\uFF082026-10-20 \u7528\u6237\u5B9A\u7A3F\uFF1A\u65B9\u5757\u6539\u5C0F\u540E 6px \u663E\u5F97\u592A\u5BBD\u300210-18 \u66FE\u4ECE 2px \u653E\u5BBD\u5230 6px\uFF0C\n \u4E24\u6B21\u90FD\u662F\u7528\u6237\u62CD\u677F \u2014\u2014 \u522B\u81EA\u4F5C\u4E3B\u5F20\u6539\u56DE\u53BB\uFF09\u3002 */\n.dshpc-seg--weekday{--seg-track:var(--dshpc-seg-track);gap:2px;border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 8px);padding:0;justify-content:center;}\n.dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);}\n\n/* \u2500\u2500 bordered \u5916\u6846\uFF082026-10-20 \u7528\u6237\u8981\u7684\u7B2C\u4E8C\u79CD\u6A21\u5F0F\uFF09\uFF1A**\u53EA\u5728\u6700\u5916\u9762\u5957\u4E00\u5708 1px \u63CF\u8FB9**\uFF0C\n \u91CC\u9762\u4E00\u6982\u4E0D\u52A8 \u2014\u2014 \u9009\u4E2D\u6BB5\u7684\u586B\u5145\u8272 / \u9634\u5F71 / \u6587\u5B57\u8272\u5168\u90E8\u4FDD\u6301\u5404\u81EA\u53D8\u4F53\u539F\u672C\u7684\u6837\u5B50\n \uFF08default \u7684\u7070\u9762\u3001weekday \u7684\u84DD\u9762\u90FD\u7167\u65E7\uFF09\uFF0C\u8FD9\u91CC\u4E0D\u5199\u4EFB\u4F55\u9488\u5BF9 __item \u7684\u89C4\u5219\u3002\n \u603B\u9AD8\u5FC5\u987B\u4E0E\u65E0\u6846\u7248\u9010\u50CF\u7D20\u4E00\u81F4\uFF1Aborder 1px\xD72 \u7531\u5404\u53D8\u4F53\u7684 padding \u5404\u8BA9 1px \u62B5\u6D88\n \uFF08default 2\u21921\u3001inset/weekday 3\u21922\uFF09\uFF0C\u6240\u4EE5\u4E09\u79CD\u53D8\u4F53 \xD7 bordered \u7684\u603B\u9AD8\u90FD\u4E0E\u65E0\u6846\u7248\u76F8\u540C\u3002 */\n.dshpc-seg--bordered{border:1px solid var(--dshpc-border);padding:1px;}\n.dshpc-seg--bordered.dshpc-seg--inset{padding:2px;}\n.dshpc-seg--bordered.dshpc-seg--weekday{padding:2px;}\n\n@media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}}\n";
119
+ var SEGMENTED_CSS = "\n/* \u2500\u2500 \u5206\u6BB5\u63A7\u4EF6 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\u2500\u2500\n \u7ED3\u6784\u7167\u5144\u5F1F\u9879\u76EE dsh-task-dispatch-table \u7684 Segmented \u76AE\u80A4\uFF08item \u65E0\u8FB9\u6846\u3001hover \u53EA\u63D0\u4EAE\u6587\u5B57\uFF09\uFF0C\n \u524D\u7F00 / \u53D8\u91CF\u540D\u6362\u6210\u672C\u4ED3\u53E3\u5F84\u3002\u7528\u6237\u989D\u5916\u8981\u7684\u4E24\u5904\uFF08\u5144\u5F1F\u6CA1\u6709\uFF09\uFF1Aweekday \u65B9\u5757\u95F4\u9694\uFF08\u73B0\u4E3A 2px\uFF09\uFF1B\u6BB5\u5185\u4E2D\u6027\u8BA1\u6570 __count\u3002\n \u26A0\uFE0F 2026-10-19 \u4E24\u6B21\u8BEF\u5224\u5747\u5DF2\u6F84\u6E05\uFF1A\u2460 \u300C\u5BBF\u4E3B\u53EA\u8BA4\u5355\u884C CSS\u300D\u2014\u2014\u5047\uFF0C\u591A\u884C\u4E00\u76F4\u6B63\u5E38\uFF1B\n \u2461 \u300C\u5BBF\u4E3B\u5403\u6389 token \u5757\u4E4B\u540E\u7B2C\u4E00\u6761\u89C4\u5219\u300D\u2014\u2014\u4E5F\u5047\uFF0C\u771F\u56E0\u662F tokens \u6A21\u677F\u5B57\u7B26\u4E32\u7ED3\u5C3E\u591A\u4E86\u4E00\u4E2A\u53CD\u659C\u6760\uFF0C\n \u6CE8\u5165\u6587\u672C\u91CC\u7559\u4E0B\u5B57\u9762\u53CD\u5F15\u53F7\uFF0C\u628A\u7D27\u968F\u5176\u540E\u7684\u90A3\u6761\u89C4\u5219\u7684\u9009\u62E9\u5668\u6C61\u67D3\u6389\u4E86\uFF08\u89C1 dsh-host.md \xA79\uFF09\u3002\n \u6837\u5F0F\u7167\u5E38\u591A\u884C\u4E66\u5199\uFF0C\u4E0D\u5FC5\u538B\u884C\uFF1B\u4E5F\u4E0D\u9700\u8981\u4EFB\u4F55\u300C\u727A\u7272\u89C4\u5219\u300D\u3002 */\n.dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:2px;border-radius:var(--dshpc-radius-md);background:var(--dshpc-seg-track);}\n.dshpc-seg--default{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:2px;background:var(--seg-track);}\n.dshpc-seg--inset{--seg-track:var(--dshpc-seg-track);--seg-thumb:var(--dshpc-surface-raised);border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg__item{appearance:none;display:inline-flex;align-items:center;gap:4px;box-sizing:border-box;height:calc(var(--dshpc-control-h-sm) - 6px);padding:0 12px;border:0;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);font-family:inherit;font-size:var(--dshpc-font-xs);font-weight:500;white-space:nowrap;cursor:pointer;flex:none;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);}\n.dshpc-seg--md .dshpc-seg__item{height:calc(var(--dshpc-control-h-md) - 6px);}\n.dshpc-seg--lg .dshpc-seg__item{height:calc(var(--dshpc-control-h-lg) - 6px);}\n.dshpc-seg__item:hover:not([aria-pressed='true']):not(:disabled){color:var(--dshpc-fg);}\n.dshpc-seg__item[aria-pressed='true']{background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);color:var(--dshpc-fg);font-weight:600;}\n.dshpc-seg__item:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n.dshpc-seg__item:disabled{cursor:default;opacity:.4;}\n/* \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\u5FC5\u987B\u662F\u6B63\u5706\uFF08\u7528\u6237 2026-10-03\uFF09\u3002 */\n.dshpc-seg__badge{display:inline-flex;align-items:center;justify-content:center;flex:none;width:16px;height:16px;padding:0;overflow:hidden;border-radius:50%;background:var(--dshpc-danger);color:var(--dshpc-on-signal);font-size:10px;line-height:16px;font-weight:500;font-variant-numeric:tabular-nums;}\n/* \u6BB5\u5185\u4E2D\u6027\u8BA1\u6570\uFF08\u5982\u7B5B\u9009\u6761\u300C\u5168\u90E8 11\u300D\uFF09\uFF1A\u7EAF\u6587\u5B57\u3001\u65E0\u5E95\u65E0\u8FB9\uFF08\u5BF9\u9F50 task-ledger .dtl-seg__num \u62CD\u677F\u53E3\u5F84\uFF09\uFF1B0 \u7531\u7EC4\u4EF6\u4FA7\u4E0D\u6E32\u67D3\u3002 */\n.dshpc-seg__count{display:inline;flex:none;margin-left:3px;padding:0;border:0;border-radius:0;background:none;color:var(--dshpc-fg-3);font-size:10px;line-height:1;font-weight:400;font-variant-numeric:tabular-nums;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u884C\u7528\uFF09\uFF0C\u5404\u6BB5\u7B49\u5206 */\n.dshpc-seg--block{display:flex;width:100%;}\n.dshpc-seg--block .dshpc-seg__item{flex:1 1 auto;justify-content:center;}\n/* weekday\uFF1A\u661F\u671F\u591A\u9009\u65B9\u5757\u3002\u57FA\u7840\u63D2\u4EF6\u7684\u7279\u6B8A\u5316\u5B9A\u5236\uFF08\u7528\u6237 2026-10-01\uFF1A\u539F WeekdayPicker \u5373\u300C\u84DD\u5E95 + \u8FD1\u4F3C\u65B9\u5F62\u300D\uFF09\uFF1A\n \u6BCF\u683C\u6B63\u65B9\u5F62\uFF08\u5BBD = \u6BB5\u9AD8\uFF09\u3001\u9009\u4E2D\u54C1\u724C\u84DD\u53CD\u767D\u5B57\u3001**\u65E0\u5916\u63CF\u8FB9**\uFF082026-10-18 \u91CD\u7533\uFF09\u3001\n \u65B9\u5757\u4E4B\u95F4\u95F4\u8DDD gap:2px\uFF082026-10-20 \u7528\u6237\u5B9A\u7A3F\uFF1A\u65B9\u5757\u6539\u5C0F\u540E 6px \u663E\u5F97\u592A\u5BBD\u300210-18 \u66FE\u4ECE 2px \u653E\u5BBD\u5230 6px\uFF0C\n \u4E24\u6B21\u90FD\u662F\u7528\u6237\u62CD\u677F \u2014\u2014 \u522B\u81EA\u4F5C\u4E3B\u5F20\u6539\u56DE\u53BB\uFF09\u3002 */\n.dshpc-seg--weekday{--seg-track:var(--dshpc-seg-track);gap:2px;border:0;padding:3px;background:var(--seg-track);}\n.dshpc-seg--weekday .dshpc-seg__item{width:calc(var(--dshpc-control-h-lg) - 8px);padding:0;justify-content:center;}\n.dshpc-seg--weekday .dshpc-seg__item[aria-pressed='true']{background:var(--dshpc-business);color:var(--dshpc-fg-inverse);box-shadow:var(--dshpc-shadow-raised);}\n\n/* \u2500\u2500 \u5355\u9009\u6ED1\u52A8\u5757\uFF082026-10-26 \u7528\u6237\uFF1A\u70B9\u9009\u540E\u9009\u4E2D\u5E95\u5E94\u300C\u6ED1\u8FC7\u53BB\u300D\uFF0C\u4E0D\u662F\u65E7\u6BB5\u6D88\u5931\u3001\u65B0\u6BB5\u76F4\u63A5\u4EAE\uFF09\u3002\n \u7ED3\u6784 = \u4E00\u5757\u7EDD\u5BF9\u5B9A\u4F4D\u7684\u5171\u7528\u5E95 + \u5404\u6BB5\u900F\u660E\uFF1B\u4F4D\u7F6E/\u5C3A\u5BF8\u7531\u7EC4\u4EF6\u91CF\u51FA\u540E\u5185\u8054\uFF0C\u8FD9\u91CC\u53EA\u7BA1\u5916\u89C2\u4E0E\u8FC7\u6E21\u3002\n --slide \u53EA\u5728\u5355\u9009\u6302\u4E0A\uFF1A\u591A\u9009\uFF08\u5982\u661F\u671F\uFF09\u6BCF\u6BB5\u5404\u81EA\u7740\u8272\uFF0C\u6CA1\u6709\u552F\u4E00\u6ED1\u5757\u53EF\u6ED1\uFF0C\u4FDD\u6301\u539F\u6837\u3002 */\n.dshpc-seg--slide{position:relative;}\n.dshpc-seg--slide .dshpc-seg__item{position:relative;z-index:1;}\n.dshpc-seg--slide .dshpc-seg__item[aria-pressed='true']{background:transparent;box-shadow:none;}\n.dshpc-seg__thumb{position:absolute;z-index:0;border-radius:var(--dshpc-radius-sm);background:var(--seg-thumb);box-shadow:var(--dshpc-shadow-raised);pointer-events:none;transition:left var(--dshpc-dur) var(--dshpc-ease),top var(--dshpc-dur) var(--dshpc-ease),width var(--dshpc-dur) var(--dshpc-ease),height var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-seg--weekday.dshpc-seg--slide .dshpc-seg__thumb{background:var(--dshpc-business);}\n\n/* \u2500\u2500 bordered \u5916\u6846\uFF082026-10-20 \u7528\u6237\u8981\u7684\u7B2C\u4E8C\u79CD\u6A21\u5F0F\uFF09\uFF1A**\u53EA\u5728\u6700\u5916\u9762\u5957\u4E00\u5708 1px \u63CF\u8FB9**\uFF0C\n \u91CC\u9762\u4E00\u6982\u4E0D\u52A8 \u2014\u2014 \u9009\u4E2D\u6BB5\u7684\u586B\u5145\u8272 / \u9634\u5F71 / \u6587\u5B57\u8272\u5168\u90E8\u4FDD\u6301\u5404\u81EA\u53D8\u4F53\u539F\u672C\u7684\u6837\u5B50\n \uFF08default \u7684\u7070\u9762\u3001weekday \u7684\u84DD\u9762\u90FD\u7167\u65E7\uFF09\uFF0C\u8FD9\u91CC\u4E0D\u5199\u4EFB\u4F55\u9488\u5BF9 __item \u7684\u89C4\u5219\u3002\n \u603B\u9AD8\u5FC5\u987B\u4E0E\u65E0\u6846\u7248\u9010\u50CF\u7D20\u4E00\u81F4\uFF1Aborder 1px\xD72 \u7531\u5404\u53D8\u4F53\u7684 padding \u5404\u8BA9 1px \u62B5\u6D88\n \uFF08default 2\u21921\u3001inset/weekday 3\u21922\uFF09\uFF0C\u6240\u4EE5\u4E09\u79CD\u53D8\u4F53 \xD7 bordered \u7684\u603B\u9AD8\u90FD\u4E0E\u65E0\u6846\u7248\u76F8\u540C\u3002 */\n.dshpc-seg--bordered{border:1px solid var(--dshpc-border);padding:1px;}\n.dshpc-seg--bordered.dshpc-seg--inset{padding:2px;}\n.dshpc-seg--bordered.dshpc-seg--weekday{padding:2px;}\n\n@media (prefers-reduced-motion: reduce){.dshpc-seg__item{transition:none;}.dshpc-seg__thumb{transition:none;}}\n";
120
120
 
121
121
  // dist/ui/controls/button-css.generated.js
122
122
  var BUTTON_CSS = '\n/* \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\n \u4E0E Segmented \u540C\u4E00\u6761\u9AD8\u5EA6\u7EAA\u5F8B\uFF1A--dshpc-control-h-sm(24) / -md(28) / -lg(32)\uFF0C\n \u6709\u8FB9\u6846\u7684 variant \u7528 1px \u771F\u8FB9\u6846 + \u5185\u90E8 padding \u8865\u56DE\uFF0C**\u6709\u8FB9 / \u65E0\u8FB9\u540C\u9AD8**\u3002\n\n \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\n \xB7 variant \u2014\u2014 \u5916\u89C2\u6863 = \u5F62\u6001 + \u8BED\u4E49\u8272\uFF0C\u5171 10 \u6863\uFF1A\n primary / secondary / outline / ghost / danger / success / warning / info /\n danger-outline\uFF08\u7EA2\u5B57\u63CF\u8FB9\uFF09/ link\uFF08\u884C\u5185\u94FE\u63A5\uFF09\n \xB7 size \u2014\u2014 sm / md / lg\n \xB7 block \u2014\u2014 \u6491\u6EE1\u7236\u5BBD\n \u6BCF\u4E00\u6863**\u53EA\u586B 5 \u4E2A\u5C40\u90E8\u53D8\u91CF**\uFF08--btn-bg / -fg / -border / -bg-hover / -bg-active\uFF09\uFF0C\n \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\n \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\n\n \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\n \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 */\n.dshpc-btn{--btn-bg:transparent;--btn-fg:var(--dshpc-fg);--btn-border:transparent;--btn-pad:12px;\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);--btn-fg-hover:var(--btn-fg);\n appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;\n box-sizing:border-box;border:1px solid var(--btn-border);border-radius:var(--dshpc-radius-md);\n background-color:var(--btn-bg);color:var(--btn-fg);font-family:inherit;font-weight:500;white-space:nowrap;cursor:pointer;\n 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);}\n.dshpc-btn--sm{--btn-pad:10px;height:var(--dshpc-control-h-sm);padding:0 var(--btn-pad);font-size:var(--dshpc-font-sm);line-height:1;}\n.dshpc-btn--md{--btn-pad:12px;height:var(--dshpc-control-h-md);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n.dshpc-btn--lg{--btn-pad:14px;height:var(--dshpc-control-h-lg);padding:0 var(--btn-pad);font-size:var(--dshpc-font-md);line-height:1;}\n/* block\uFF1A\u6491\u6EE1\u7236\u5BBD\uFF08\u8868\u5355\u5E95\u680F / \u62BD\u5C49\u5E95\u90E8\u7684\u4E3B\u64CD\u4F5C\uFF09 */\n.dshpc-btn--block{display:flex;width:100%;}\n/* block + \u524D\u7F6E\u56FE\u6807 \u21D2 \u6587\u5B57\u89C6\u89C9\u5C45\u4E2D\uFF082026-10-19 \u7528\u6237\u70B9\u540D\uFF09\uFF1A\n \u5185\u5BB9\u7EC4 [\u56FE\u6807 + \u95F4\u8DDD + \u6587\u5B57] \u6574\u4F53\u5728\u76D2\u5185\u5C45\u4E2D\u65F6\uFF0C**\u6587\u5B57**\u7684\u4E2D\u5FC3\u4F1A\u88AB\u56FE\u6807\u63A8\u53F3\u534A\u683C\u3002\n \u628A\u53F3\u5185\u8FB9\u8DDD\u8865\u4E0A\u300C\u56FE\u6807\u5BBD + \u95F4\u8DDD\u300D\uFF0C\u53EF\u7528\u76D2\u968F\u4E4B\u5DE6\u79FB\u540C\u91CF \u21D2 \u6587\u5B57\u843D\u56DE\u89C6\u89C9\u4E2D\u5FC3\uFF0C\u56FE\u6807\u8D34\u5DE6\u4FA7\u3002\n \u56FE\u6807\u5BBD\u6309 1.2em \u4F30\uFF08\u5B98\u65B9\u56FE\u6807 14/16px vs \u5B57\u53F7 12/13px\uFF09\uFF0Cem \u968F\u5B57\u53F7\u6863\u81EA\u52A8\u7F29\u653E\u3002 */\n.dshpc-btn--block.dshpc-btn--icon-start{padding-right:calc(var(--btn-pad) + 1.2em + 6px);}\n.dshpc-btn__icon,.dshpc-btn__icon-end{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:0;}\n.dshpc-btn__icon svg,.dshpc-btn__icon-end svg{display:block;margin:0;}\n/* loading\uFF1A\u4E0D\u6362 DOM \u7ED3\u6784\uFF0C\u53EA\u5728\u6587\u6848\u524D\u63D2\u4E00\u4E2A\u540C\u8272\u5C0F\u5708\u3002\n \u26A0\uFE0F 2026-10-20 \u6539\u753B\u6CD5\uFF1A\u539F\u6765\u662F border:1.5px \u52A0 border-radius:999px \u753B\u7684\u73AF \u2014\u2014 \u771F\u673A\u5B9E\u6D4B computed\n radius \u5C31\u662F 999px\u3001\u5BBD\u9AD8\u90FD\u662F 12px\uFF08\u6CA1\u88AB\u4EFB\u4F55\u6837\u5F0F\u8986\u76D6\uFF09\uFF0C\u770B\u7740\u5374"\u50CF\u5706\u89D2\u65B9"\uFF0C\u539F\u56E0\u662F**\u6B21\u50CF\u7D20\u8FB9\u6846\n \uFF081.5px\uFF09\u5728 12px \u8FD9\u4E48\u5C0F\u7684\u5706\u4E0A\u88AB\u6297\u952F\u9F7F\u63D2\u503C\u62C9\u6BDB**\u3002\u6539\u7528 SVG \u77E2\u91CF\u5F27\uFF1A\u4EFB\u610F DPR \u4E0B\u90FD\u662F\u771F\u5706\u3002 */\n.dshpc-btn__spinner{display:block;flex:none;width:12px;height:12px;\n animation:dshpc-btn-spin .7s linear infinite;}\n/* shortcut: 12px \u662F\u56FA\u5B9A\u503C\uFF0C\u4E0D\u968F\u6309\u94AE\u5B57\u53F7\u7F29\u653E\uFF1B\u8981\u66F4\u5927\u5C31\u6539\u8FD9\u4E00\u5904\u3002 */\n@keyframes dshpc-btn-spin{to{transform:rotate(360deg)}}\n\n/* \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 */\n.dshpc-btn:hover:not(:disabled){background-color:var(--btn-bg-hover);color:var(--btn-fg-hover);}\n.dshpc-btn:active:not(:disabled){background-color:var(--btn-bg-active);transform:translateY(1px);}\n.dshpc-btn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-btn:disabled{cursor:default;opacity:.5;}\n\n.dshpc-btn--primary{--btn-bg:var(--dshpc-accent);--btn-fg:var(--dshpc-fg-inverse);\n --btn-bg-hover:var(--dshpc-accent-hover);--btn-bg-active:var(--dshpc-accent-active);}\n/* 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 */\n.dshpc-btn--secondary{--btn-bg:var(--dshpc-hover);--btn-fg:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-active);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--outline{--btn-bg:var(--dshpc-surface-1);--btn-border:var(--dshpc-border-strong);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--ghost{--btn-fg:var(--dshpc-fg-2);--btn-fg-hover:var(--dshpc-fg);\n --btn-bg-hover:var(--dshpc-hover);--btn-bg-active:var(--dshpc-active);}\n.dshpc-btn--danger{--btn-bg:var(--dshpc-danger);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-danger-hover);--btn-bg-active:var(--dshpc-danger-active);}\n.dshpc-btn--success{--btn-bg:var(--dshpc-success);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-success-hover);--btn-bg-active:var(--dshpc-success-active);}\n.dshpc-btn--warning{--btn-bg:var(--dshpc-warning);--btn-fg:var(--dshpc-on-warning);\n --btn-bg-hover:var(--dshpc-warning-hover);--btn-bg-active:var(--dshpc-warning-active);}\n.dshpc-btn--info{--btn-bg:var(--dshpc-business);--btn-fg:var(--dshpc-on-signal);\n --btn-bg-hover:var(--dshpc-business-hover);--btn-bg-active:var(--dshpc-business-active);}\n/* 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\n \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 */\n.dshpc-btn--danger-outline,.dshpc-btn--danger-ink{--btn-border:var(--dshpc-danger);--btn-fg:var(--dshpc-danger);\n --btn-fg-hover:var(--dshpc-danger);--btn-bg-hover:var(--dshpc-danger-soft);--btn-bg-active:var(--dshpc-danger-soft);}\n/* 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 */\n.dshpc-btn--link{--btn-fg:var(--dshpc-link);--btn-fg-hover:var(--dshpc-link);\n --btn-bg-hover:transparent;--btn-bg-active:transparent;\n height:auto;padding:0;border:0;background:none;font-weight:400;text-align:left;}\n.dshpc-btn--link:hover:not(:disabled){text-decoration:underline;}\n\n/* \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 */\n.dshpc-iconbtn{appearance:none;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;\n border:1px solid transparent;border-radius:var(--dshpc-radius-sm);background:transparent;color:var(--dshpc-fg-2);\n font-family:inherit;cursor:pointer;flex:none;\n 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);}\n.dshpc-iconbtn--sm{width:var(--dshpc-control-h-sm);height:var(--dshpc-control-h-sm);font-size:var(--dshpc-font-sm);}\n.dshpc-iconbtn--md{width:var(--dshpc-control-h-md);height:var(--dshpc-control-h-md);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--lg{width:var(--dshpc-control-h-lg);height:var(--dshpc-control-h-lg);font-size:var(--dshpc-font-md);}\n.dshpc-iconbtn--plain{color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--outline{background:var(--dshpc-surface-1);border-color:var(--dshpc-border);color:var(--dshpc-fg-2);}\n.dshpc-iconbtn--danger{color:var(--dshpc-danger);}\n.dshpc-iconbtn:hover:not(:disabled){background:var(--dshpc-hover);color:var(--dshpc-fg);}\n.dshpc-iconbtn--danger:hover:not(:disabled){background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-iconbtn:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:2px;}\n.dshpc-iconbtn:disabled{cursor:default;opacity:.4;}\n\n/* \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\n \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\n \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\n \u4E24\u4E2A\u5F62\u6001\u4FEE\u9970\u7C7B\uFF1A\n --block \u6491\u6EE1\u7236\u5BBD\uFF08\u6E05\u5355\u91CC\u4E00\u9879\u4E00\u884C\uFF09\n --inline \u5185\u5BB9\u5BBD\uFF08\u8DDF\u5728\u6587\u5B57\u540E\u5934\uFF0C\u5982\u9644\u4EF6\u884C\uFF09\n \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\n \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 */\n.dshpc-filechip{appearance:none;-webkit-appearance:none;border:0;border-radius:var(--dshpc-radius-xs);\n background:transparent;color:var(--dshpc-fg);font:inherit;text-align:left;cursor:pointer;min-width:0;\n transition:background-color var(--dshpc-dur) var(--dshpc-ease);}\n.dshpc-filechip:hover:not(:disabled){background:var(--dshpc-chip-bg);}\n.dshpc-filechip:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:1px;}\n.dshpc-filechip:disabled{cursor:default;background:transparent;color:var(--dshpc-fg-3);}\n.dshpc-filechip--block{display:flex;align-items:center;gap:6px;width:100%;box-sizing:border-box;\n padding:4px 6px;font-size:var(--dshpc-font-xs);}\n.dshpc-filechip--inline{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;font-size:var(--dshpc-font-sm);}\n\n@media (prefers-reduced-motion: reduce){.dshpc-btn,.dshpc-iconbtn,.dshpc-filechip{transition:none;}}\n';
@@ -6041,38 +6041,82 @@ function Segmented(props) {
6041
6041
  const multiple = props.multiple === true;
6042
6042
  const value = props.value;
6043
6043
  const onChange = props.onChange;
6044
+ const sliding = !multiple && props.items.length > 1;
6045
+ const rootRef = (0, import_react20.useRef)(null);
6046
+ const [thumb, setThumb] = (0, import_react20.useState)(null);
6047
+ const measure = (0, import_react20.useCallback)(() => {
6048
+ const sel = rootRef.current?.querySelector('.dshpc-seg__item[aria-pressed="true"]');
6049
+ if (sel === void 0 || sel === null) {
6050
+ setThumb(null);
6051
+ return;
6052
+ }
6053
+ const next = { left: sel.offsetLeft, top: sel.offsetTop, width: sel.offsetWidth, height: sel.offsetHeight };
6054
+ setThumb((cur2) => cur2 !== null && cur2.left === next.left && cur2.top === next.top && cur2.width === next.width && cur2.height === next.height ? cur2 : next);
6055
+ }, []);
6056
+ (0, import_react20.useLayoutEffect)(() => {
6057
+ if (!sliding) {
6058
+ setThumb(null);
6059
+ return;
6060
+ }
6061
+ measure();
6062
+ const root = rootRef.current;
6063
+ if (root === null || typeof ResizeObserver === "undefined")
6064
+ return;
6065
+ const ro = new ResizeObserver(measure);
6066
+ ro.observe(root);
6067
+ return () => ro.disconnect();
6068
+ }, [sliding, measure, value, size4, variant, props.items, props.bordered, props.block]);
6069
+ const renderer2 = getTooltipRenderer();
6044
6070
  return (0, import_react20.createElement)("div", {
6045
6071
  role: "group",
6046
6072
  "aria-label": props.label,
6047
6073
  id: props.id,
6074
+ ref: rootRef,
6048
6075
  // 结构一套、皮肤只在 controls-css 里;此处只拼「轴」类名,不写任何颜色 / 尺寸字面值。
6049
- className: `dshpc-seg dshpc-seg--${variant} dshpc-seg--${size4}${props.block === true ? " dshpc-seg--block" : ""}${props.bordered === true ? " dshpc-seg--bordered" : ""}${props.className !== void 0 ? ` ${props.className}` : ""}`,
6076
+ className: `dshpc-seg dshpc-seg--${variant} dshpc-seg--${size4}${sliding ? " dshpc-seg--slide" : ""}${props.block === true ? " dshpc-seg--block" : ""}${props.bordered === true ? " dshpc-seg--bordered" : ""}${props.className !== void 0 ? ` ${props.className}` : ""}`,
6050
6077
  style: props.style
6051
- }, props.items.map((item) => {
6052
- const on = multiple ? value.includes(item.value) : value === item.value;
6053
- const disabled = item.disabled === true || props.disabled === true;
6054
- const handle = () => {
6055
- if (disabled)
6056
- return;
6057
- if (multiple) {
6058
- const arr = value;
6059
- const next = arr.includes(item.value) ? arr.filter((v) => v !== item.value) : [...arr, item.value];
6060
- onChange(next);
6061
- } else {
6062
- ;
6063
- onChange(item.value);
6064
- }
6065
- };
6066
- return (0, import_react20.createElement)("button", {
6067
- key: item.value,
6068
- type: "button",
6069
- className: "dshpc-seg__item",
6070
- // 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
6071
- "aria-pressed": on,
6072
- disabled,
6073
- onClick: handle
6074
- }, item.label, item.count !== void 0 && item.count > 0 ? (0, import_react20.createElement)("span", { className: "dshpc-seg__count" }, String(item.count)) : null, item.badge !== void 0 && item.badge > 0 ? (0, import_react20.createElement)("span", { className: "dshpc-seg__badge" }, String(item.badge)) : null);
6075
- }));
6078
+ }, [
6079
+ sliding && thumb !== null ? (0, import_react20.createElement)("span", {
6080
+ key: "__thumb__",
6081
+ className: "dshpc-seg__thumb",
6082
+ "aria-hidden": true,
6083
+ style: {
6084
+ left: `${String(thumb.left)}px`,
6085
+ top: `${String(thumb.top)}px`,
6086
+ width: `${String(thumb.width)}px`,
6087
+ height: `${String(thumb.height)}px`
6088
+ }
6089
+ }) : null,
6090
+ ...props.items.map((item) => {
6091
+ const on = multiple ? value.includes(item.value) : value === item.value;
6092
+ const disabled = item.disabled === true || props.disabled === true;
6093
+ const handle = () => {
6094
+ if (disabled)
6095
+ return;
6096
+ if (multiple) {
6097
+ const arr = value;
6098
+ const next = arr.includes(item.value) ? arr.filter((v) => v !== item.value) : [...arr, item.value];
6099
+ onChange(next);
6100
+ } else {
6101
+ ;
6102
+ onChange(item.value);
6103
+ }
6104
+ };
6105
+ const itemButton = (0, import_react20.createElement)("button", {
6106
+ key: item.value,
6107
+ type: "button",
6108
+ className: "dshpc-seg__item",
6109
+ // 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
6110
+ "aria-pressed": on,
6111
+ disabled,
6112
+ onClick: handle
6113
+ }, item.label, item.count !== void 0 && item.count > 0 ? (0, import_react20.createElement)("span", { className: "dshpc-seg__count" }, String(item.count)) : null, item.badge !== void 0 && item.badge > 0 ? (0, import_react20.createElement)("span", { className: "dshpc-seg__badge" }, String(item.badge)) : null);
6114
+ if (item.tooltip !== void 0 && renderer2 !== void 0) {
6115
+ return renderer2({ label: item.tooltip, side: "top", children: itemButton });
6116
+ }
6117
+ return itemButton;
6118
+ })
6119
+ ]);
6076
6120
  }
6077
6121
 
6078
6122
  // dist/ui/Textarea.js
@@ -55109,8 +55153,14 @@ var DICT2 = {
55109
55153
  docApiDesc: "\u8BF4\u660E",
55110
55154
  pluginTitle: "\u84DD\u9CB8\u7EC4\u4EF6\u5E93",
55111
55155
  settingsIntro: "\u84DD\u9CB8\u7EC4\u4EF6\u5E93\u662F\u4E3A DeepSeek Harness \u63D2\u4EF6\u51C6\u5907\u7684\u5171\u4EAB UI \u5E95\u5EA7\uFF0C\u672C\u5305\u662F\u5B83\u7684\u7EC4\u4EF6\u9884\u89C8\u63D2\u4EF6\uFF1A\u88C5\u8FDB DSH \u5BBF\u4E3B\u540E\uFF0C\u5728\u8BBE\u7F6E\u91CC\u5373\u53EF\u67E5\u770B\u5404\u57FA\u7840\u63A7\u4EF6\u4E0E\u4E1A\u52A1\u7EC4\u4EF6\u7684\u771F\u5B9E\u8FD0\u884C\u8868\u73B0\u3002",
55112
- settingsSidebarEntry: "\u4FA7\u680F\u5165\u53E3",
55113
- settingsSidebarEntryHint: "\u5F00\u542F\u540E\uFF0C\u5728\u4FA7\u680F\u300C\u63D2\u4EF6\u300D\u4E0B\u65B9\u663E\u793A\u672C\u63D2\u4EF6\u5165\u53E3\uFF1B\u5173\u95ED\u540E\u4EC5\u4FDD\u7559\u672C\u8BBE\u7F6E\u9875\u5165\u53E3\u3002",
55156
+ settingsEntryTitle: "\u63D2\u4EF6\u5165\u53E3\u8BF4\u660E",
55157
+ settingsEntryHint: "\u9009\u62E9\u672C\u63D2\u4EF6\u5728\u5DE6\u4FA7\u83DC\u5355\u680F\u7684\u5165\u53E3\u4F4D\u7F6E\uFF1A\u5173\u95ED\u540E\u4EC5\u80FD\u5728\u300C\u8BBE\u7F6E\u300D\u4E2D\u627E\u5230\u672C\u63D2\u4EF6\u3002\u9ED8\u8BA4\u663E\u793A\u5728\u300C\u66F4\u591A\u300D\u3002",
55158
+ settingsEntryOff: "\u5173\u95ED",
55159
+ settingsEntryFirst: "\u4E00\u7EA7",
55160
+ settingsEntryMore: "\u66F4\u591A",
55161
+ settingsEntryOffTip: "\u5173\u95ED\u63D2\u4EF6\u5165\u53E3\u540E\uFF0C\u5DE6\u4FA7\u83DC\u5355\u680F\u9996\u7EA7\u4E0E\u300C\u66F4\u591A\u300D\u83DC\u5355\u5747\u4E0D\u518D\u5C55\u793A\u672C\u63D2\u4EF6\u5165\u53E3\uFF1B\u4EC5\u4FDD\u7559\u300C\u8BBE\u7F6E\u300D\u4E2D\u7684\u914D\u7F6E\u9875\uFF0C\u53EF\u968F\u65F6\u91CD\u65B0\u542F\u7528\u3002",
55162
+ settingsEntryFirstTip: "\u5165\u53E3\u56FA\u5B9A\u5C55\u793A\u4E8E\u5DE6\u4FA7\u83DC\u5355\u680F\u9996\u7EA7\uFF0C\u4E0E\u5185\u7F6E\u529F\u80FD\u5E76\u5217\uFF1B\u70B9\u51FB\u5373\u8FDB\u5165\u7EC4\u4EF6\u9884\u89C8\u6574\u9875\u3002",
55163
+ settingsEntryMoreTip: "\u5165\u53E3\u6536\u7EB3\u4E8E\u5DE6\u4FA7\u83DC\u5355\u680F\u7684\u300C\u66F4\u591A\u300D\u83DC\u5355\uFF0C\u4E0D\u5360\u7528\u9996\u7EA7\u5BFC\u822A\u4F4D\uFF1B\u5C55\u5F00\u300C\u66F4\u591A\u300D\u5373\u53EF\u8FDB\u5165\u7EC4\u4EF6\u9884\u89C8\u6574\u9875\u3002",
55114
55164
  settingsOpenDemo: "\u67E5\u770B demo",
55115
55165
  settingsGithub: "\u8BBF\u95EE GitHub",
55116
55166
  settingsLoading: "\u6B63\u5728\u8BFB\u53D6\u8BBE\u7F6E\u2026",
@@ -55331,8 +55381,14 @@ var DICT2 = {
55331
55381
  docApiDesc: "Description",
55332
55382
  pluginTitle: "Blue Whale Component Library",
55333
55383
  settingsIntro: "Blue Whale Component Library is the shared UI foundation for DeepSeek Harness plugins. This package is its live preview: installed in a DSH host, it shows every base control and business component running for real.",
55334
- settingsSidebarEntry: "Sidebar entry",
55335
- settingsSidebarEntryHint: 'When on, the plugin entry appears under "Plugins" in the sidebar; when off, only this settings entry remains.',
55384
+ settingsEntryTitle: "Plugin entry",
55385
+ settingsEntryHint: "Choose where this plugin appears in the sidebar menu: when off, it is only reachable from Settings. Defaults to More.",
55386
+ settingsEntryOff: "Off",
55387
+ settingsEntryFirst: "First level",
55388
+ settingsEntryMore: "More",
55389
+ settingsEntryOffTip: "When the entry is off, it appears neither at the first level of the sidebar nor in the More menu; only this settings page remains, and it can be re-enabled at any time.",
55390
+ settingsEntryFirstTip: "The entry is pinned to the first level of the sidebar menu, alongside built-in features; clicking it opens the component preview page.",
55391
+ settingsEntryMoreTip: "The entry is placed in the sidebar More menu, leaving the first level uncluttered; expanding More opens the same preview page.",
55336
55392
  settingsOpenDemo: "View demo",
55337
55393
  settingsGithub: "Visit GitHub",
55338
55394
  settingsLoading: "Reading settings\u2026",
@@ -61406,9 +61462,9 @@ function ReferencePage() {
61406
61462
  "tbody",
61407
61463
  null,
61408
61464
  [
61409
- [t3("buildCore"), `v${"0.3.0"}`],
61410
- [t3("buildDemo"), `v${"0.3.0"}`],
61411
- [t3("buildStamp"), "261025-040507-428"]
61465
+ [t3("buildCore"), `v${"0.4.0"}`],
61466
+ [t3("buildDemo"), `v${"0.4.0"}`],
61467
+ [t3("buildStamp"), "261026-092214-985"]
61412
61468
  ].map(
61413
61469
  ([label, value]) => (0, import_react66.createElement)(
61414
61470
  "tr",
@@ -61515,7 +61571,7 @@ var MODELS_PATH = "/api/dsh-plugin-core-demo/models";
61515
61571
  // packages/demo/src/client/index.tsx
61516
61572
  var PANEL_ID = "dsh-plugin-core-demo";
61517
61573
  var BUNDLE_CONFIG_SLOT = "plugins.bundle.config";
61518
- var SIDEBAR_ENTRY_FIELD = "sidebarEntry";
61574
+ var ENTRY_MODE_FIELD = "entryMode";
61519
61575
  function resolveServedEntryId(forms) {
61520
61576
  let served;
61521
61577
  try {
@@ -61528,7 +61584,9 @@ function resolveServedEntryId(forms) {
61528
61584
  }
61529
61585
  var slotsRef = null;
61530
61586
  var sidebarDisposer = null;
61531
- var sidebarEntryOn = true;
61587
+ var entryMode = "more";
61588
+ var jump = () => {
61589
+ };
61532
61590
  function applySidebarEntry() {
61533
61591
  const slots = slotsRef;
61534
61592
  if (slots === null) return;
@@ -61536,14 +61594,39 @@ function applySidebarEntry() {
61536
61594
  sidebarDisposer();
61537
61595
  sidebarDisposer = null;
61538
61596
  }
61539
- if (!sidebarEntryOn) return;
61540
- slots.inject("sidebar.panellist", () => {
61541
- if (sidebarDisposer !== null) return;
61542
- sidebarDisposer = slots.register(
61543
- { name: "sidebar.panellist", id: PANEL_ID, order: 90, label: () => t3("pluginTitle") },
61544
- PanelIcon
61545
- );
61546
- });
61597
+ if (entryMode === "off") return;
61598
+ if (entryMode === "first") {
61599
+ slots.inject("sidebar.panellist", () => {
61600
+ if (sidebarDisposer !== null) return;
61601
+ if (entryMode !== "first") return;
61602
+ sidebarDisposer = slots.register(
61603
+ { name: "sidebar.panellist", id: PANEL_ID, order: 90, label: () => t3("pluginTitle") },
61604
+ PanelIcon
61605
+ );
61606
+ });
61607
+ } else {
61608
+ slots.inject("sidebar.panellist.actions", () => {
61609
+ if (sidebarDisposer !== null) return;
61610
+ if (entryMode !== "more") return;
61611
+ sidebarDisposer = slots.register(
61612
+ { name: "sidebar.panellist.actions", id: `${PANEL_ID}-more`, order: 90, locale: PANEL_ID },
61613
+ MoreMenuRow
61614
+ );
61615
+ });
61616
+ }
61617
+ }
61618
+ function MoreMenuRow(props) {
61619
+ return (0, import_react68.createElement)(
61620
+ import_dsh_client_ui_primitives4.MenuItemButton,
61621
+ {
61622
+ icon: (0, import_react68.createElement)(PanelIcon, { size: 16 }),
61623
+ onSelect: () => {
61624
+ props.onDismiss();
61625
+ jump(PANEL_ID);
61626
+ }
61627
+ },
61628
+ t3("pluginTitle")
61629
+ );
61547
61630
  }
61548
61631
  var localeRuntime;
61549
61632
  function useLocaleTick() {
@@ -61703,9 +61786,9 @@ function DemoPage() {
61703
61786
  lineHeight: "14px"
61704
61787
  }
61705
61788
  },
61706
- (0, import_react68.createElement)("span", null, `core v${"0.3.0"}`),
61707
- (0, import_react68.createElement)("span", null, `demo v${"0.3.0"}`),
61708
- (0, import_react68.createElement)("span", { style: { marginTop: "4px", fontSize: "9px" } }, "261025-040507-428")
61789
+ (0, import_react68.createElement)("span", null, `core v${"0.4.0"}`),
61790
+ (0, import_react68.createElement)("span", null, `demo v${"0.4.0"}`),
61791
+ (0, import_react68.createElement)("span", { style: { marginTop: "4px", fontSize: "9px" } }, "261026-092214-985")
61709
61792
  )
61710
61793
  )
61711
61794
  ),
@@ -61727,38 +61810,44 @@ function ConfigPanel(props) {
61727
61810
  }), [form]);
61728
61811
  if (props.view !== "page") return (0, import_react68.createElement)("div", { style: { display: "none" } });
61729
61812
  const snap = form.getSnapshot();
61730
- const on = snap.value?.sidebarEntry !== false;
61813
+ const storedMode = snap.value?.entryMode;
61814
+ const mode = storedMode === "off" || storedMode === "first" || storedMode === "more" ? storedMode : "more";
61731
61815
  const ready = snap.status === "ready";
61732
61816
  return (0, import_react68.createElement)(
61733
61817
  "div",
61734
61818
  { style: { display: "flex", flexDirection: "column", gap: "14px" } },
61735
61819
  // 一句话说明「这个插件是干嘛的」——标题由详情页自己画,这里只补定位
61736
61820
  (0, import_react68.createElement)("div", { style: { color: "var(--dshpc-fg-3)", fontSize: "12px", lineHeight: "18px" } }, t3("settingsIntro")),
61737
- // 设置行:开关在右、说明在左;左缘圆角短条开=绿 / 关=灰(核心 Card 框式)
61821
+ // 设置行:滑动栏在右、说明在左;左缘圆角短条有入口=绿 / 关闭=灰(核心 Card 框式)
61738
61822
  ready ? (0, import_react68.createElement)(
61739
61823
  Card,
61740
61824
  {
61741
- accent: on ? "success" : "neutral",
61742
- action: (0, import_react68.createElement)(import_dsh_client_ui_primitives4.Switch, {
61743
- checked: on,
61744
- label: t3("settingsSidebarEntry"),
61825
+ accent: mode === "off" ? "neutral" : "success",
61826
+ action: (0, import_react68.createElement)(Segmented, {
61827
+ size: "sm",
61828
+ value: mode,
61745
61829
  disabled: !snap.writable,
61746
61830
  onChange: (next) => {
61747
61831
  void form.mutate(
61748
- [{ op: "set", path: [SIDEBAR_ENTRY_FIELD], value: next }],
61832
+ [{ op: "set", path: [ENTRY_MODE_FIELD], value: next }],
61749
61833
  snap.revision
61750
61834
  );
61751
- }
61835
+ },
61836
+ items: [
61837
+ { value: "off", label: t3("settingsEntryOff"), tooltip: t3("settingsEntryOffTip") },
61838
+ { value: "more", label: t3("settingsEntryMore"), tooltip: t3("settingsEntryMoreTip") },
61839
+ { value: "first", label: t3("settingsEntryFirst"), tooltip: t3("settingsEntryFirstTip") }
61840
+ ]
61752
61841
  })
61753
61842
  },
61754
61843
  (0, import_react68.createElement)(
61755
61844
  "div",
61756
61845
  null,
61757
- (0, import_react68.createElement)("div", { style: { fontSize: "13px", fontWeight: 500 } }, t3("settingsSidebarEntry")),
61846
+ (0, import_react68.createElement)("div", { style: { fontSize: "13px", fontWeight: 500 } }, t3("settingsEntryTitle")),
61758
61847
  (0, import_react68.createElement)(
61759
61848
  "div",
61760
61849
  { style: { color: "var(--dshpc-fg-3)", fontSize: "12px", marginTop: "2px" } },
61761
- t3("settingsSidebarEntryHint")
61850
+ t3("settingsEntryHint")
61762
61851
  )
61763
61852
  )
61764
61853
  ) : (0, import_react68.createElement)(
@@ -61808,8 +61897,6 @@ function apply(ctx) {
61808
61897
  kit.registerStyle("demo", DEMO_CSS);
61809
61898
  kit.ensureStyles();
61810
61899
  setTooltipRenderer((props) => (0, import_react68.createElement)(import_dsh_client_ui_primitives4.Tooltip, props));
61811
- let jump = () => {
61812
- };
61813
61900
  ctx.inject(["layout"], (sub) => {
61814
61901
  const layout = sub?.layout;
61815
61902
  if (layout?.selectPanel === void 0) return;
@@ -61854,7 +61941,8 @@ function apply(ctx) {
61854
61941
  const form = forms.get(entryId);
61855
61942
  const syncSidebar = () => {
61856
61943
  const value = form.getSnapshot().value;
61857
- sidebarEntryOn = value?.sidebarEntry !== false;
61944
+ const stored = value?.entryMode;
61945
+ entryMode = stored === "off" || stored === "first" || stored === "more" ? stored : "more";
61858
61946
  applySidebarEntry();
61859
61947
  };
61860
61948
  syncSidebar();
package/dist/index.js CHANGED
@@ -945,7 +945,7 @@ async function loadSchemastery() {
945
945
  }
946
946
  var z = await loadSchemastery();
947
947
  var Config = z === void 0 ? void 0 : z.object({
948
- sidebarEntry: z.boolean().default(true).volatile()
948
+ entryMode: z.string().default("more").volatile()
949
949
  });
950
950
  function apply(ctx) {
951
951
  serveModelCatalog(ctx, { path: MODELS_PATH });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-core-demo",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "The shared UI foundation for DSH plugins, with a live component preview: design tokens, common controls, workspace browsing and notifications maintained in one place — install it to preview every component in a real host.",
5
5
  "icon": "./assets/icon-components.svg",
6
6
  "keywords": [
@@ -19,6 +19,9 @@
19
19
  "author": "cq-guojia",
20
20
  "license": "MIT",
21
21
  "type": "module",
22
+ "engines": {
23
+ "node": ">=22.5"
24
+ },
22
25
  "main": "./dist/index.js",
23
26
  "exports": {
24
27
  ".": "./dist/index.js",