dsh-plugin-core-demo 0.3.0 → 0.5.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/* \u5916\u89C2\u53EA\u6709\u4E00\u5957\uFF082026-10-26\uFF09\uFF1A\u539F variant \u7684 default / inset \u4E24\u6863\u5728 CSS \u91CC\u53EA\u5DEE 1px \u5185\u8DDD\uFF0C\n \u4E14 default \u6BD4\u6587\u6863\u627F\u8BFA\u77EE 2px\uFF0C\u5374\u8BA9\u4E0B\u6E38\u4EE5\u4E3A\u300C\u6709\u5F97\u9009\u300D\u800C\u53CD\u590D\u5BF9\u56FE \u21D2 \u6574\u8F74\u5220\u9664\u3002\n padding 3px \u662F\u5C3A\u5BF8\u5951\u7EA6\u7684\u4E00\u90E8\u5206\uFF1Aitem \u9AD8\u5EA6 = \u63A7\u5236\u9AD8 \u2212 6px\uFF0C\u52A0\u8D77\u6765\u6B63\u597D 24 / 28 / 32\u3002 */\n.dshpc-seg{display:inline-flex;align-items:center;gap:2px;padding:3px;border-radius:var(--dshpc-radius-md);--seg-thumb:var(--dshpc-surface-raised);background:var(--dshpc-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\u7247\u7684\u586B\u5145\u8272 / \u9634\u5F71 / \u6587\u5B57\u8272\u5168\u90E8\u4FDD\u6301\u539F\u6837\uFF08weekday \u7684\u84DD\u9762\u7167\u65E7\uFF09\uFF0C\n \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 padding \u5404\u8BA9 1px \u62B5\u6D88\uFF083 \u2192 2\uFF09\uFF1B\n weekday \u81EA\u5DF1\u58F0\u660E\u7684 3px \u5728\u6587\u4EF6\u66F4\u540E\u9762\uFF0C\u9760\u53CC\u7C7B\u9009\u62E9\u5668\u538B\u56DE 2px\u3002 */\n.dshpc-seg--bordered{border:1px solid var(--dshpc-border);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';
@@ -6037,42 +6037,85 @@ function Segmented(props) {
6037
6037
  ensureControls();
6038
6038
  ensureControls();
6039
6039
  const size4 = props.size ?? "lg";
6040
- const variant = props.variant ?? "default";
6041
6040
  const multiple = props.multiple === true;
6042
6041
  const value = props.value;
6043
6042
  const onChange = props.onChange;
6043
+ const sliding = !multiple && props.items.length > 1;
6044
+ const rootRef = (0, import_react20.useRef)(null);
6045
+ const [thumb, setThumb] = (0, import_react20.useState)(null);
6046
+ const measure = (0, import_react20.useCallback)(() => {
6047
+ const sel = rootRef.current?.querySelector('.dshpc-seg__item[aria-pressed="true"]');
6048
+ if (sel === void 0 || sel === null) {
6049
+ setThumb(null);
6050
+ return;
6051
+ }
6052
+ const next = { left: sel.offsetLeft, top: sel.offsetTop, width: sel.offsetWidth, height: sel.offsetHeight };
6053
+ setThumb((cur2) => cur2 !== null && cur2.left === next.left && cur2.top === next.top && cur2.width === next.width && cur2.height === next.height ? cur2 : next);
6054
+ }, []);
6055
+ (0, import_react20.useLayoutEffect)(() => {
6056
+ if (!sliding) {
6057
+ setThumb(null);
6058
+ return;
6059
+ }
6060
+ measure();
6061
+ const root = rootRef.current;
6062
+ if (root === null || typeof ResizeObserver === "undefined")
6063
+ return;
6064
+ const ro = new ResizeObserver(measure);
6065
+ ro.observe(root);
6066
+ return () => ro.disconnect();
6067
+ }, [sliding, measure, value, size4, props.items, props.bordered, props.block]);
6068
+ const renderer2 = getTooltipRenderer();
6044
6069
  return (0, import_react20.createElement)("div", {
6045
6070
  role: "group",
6046
6071
  "aria-label": props.label,
6047
6072
  id: props.id,
6073
+ ref: rootRef,
6048
6074
  // 结构一套、皮肤只在 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}` : ""}`,
6075
+ className: `dshpc-seg 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
6076
  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
- }));
6077
+ }, [
6078
+ sliding && thumb !== null ? (0, import_react20.createElement)("span", {
6079
+ key: "__thumb__",
6080
+ className: "dshpc-seg__thumb",
6081
+ "aria-hidden": true,
6082
+ style: {
6083
+ left: `${String(thumb.left)}px`,
6084
+ top: `${String(thumb.top)}px`,
6085
+ width: `${String(thumb.width)}px`,
6086
+ height: `${String(thumb.height)}px`
6087
+ }
6088
+ }) : null,
6089
+ ...props.items.map((item) => {
6090
+ const on = multiple ? value.includes(item.value) : value === item.value;
6091
+ const disabled = item.disabled === true || props.disabled === true;
6092
+ const handle = () => {
6093
+ if (disabled)
6094
+ return;
6095
+ if (multiple) {
6096
+ const arr = value;
6097
+ const next = arr.includes(item.value) ? arr.filter((v) => v !== item.value) : [...arr, item.value];
6098
+ onChange(next);
6099
+ } else {
6100
+ ;
6101
+ onChange(item.value);
6102
+ }
6103
+ };
6104
+ const itemButton = (0, import_react20.createElement)("button", {
6105
+ key: item.value,
6106
+ type: "button",
6107
+ className: "dshpc-seg__item",
6108
+ // 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
6109
+ "aria-pressed": on,
6110
+ disabled,
6111
+ onClick: handle
6112
+ }, 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);
6113
+ if (item.tooltip !== void 0 && renderer2 !== void 0) {
6114
+ return renderer2({ label: item.tooltip, side: "top", children: itemButton });
6115
+ }
6116
+ return itemButton;
6117
+ })
6118
+ ]);
6076
6119
  }
6077
6120
 
6078
6121
  // dist/ui/Textarea.js
@@ -54988,7 +55031,7 @@ var DICT2 = {
54988
55031
  demoInputFamily: "Input \u5BB6\u65CF",
54989
55032
  inputHint: "Input / PrefixedInput / NumberInput / Textarea\uFF0C\u90FD\u652F\u6301 error \u63CF\u7EA2\uFF1B\u4F20 hint \u53C2\u6570\u5373\u81EA\u52A8\u5728\u884C\u5C3E\u6302\u6807\u51C6\u95EE\u53F7\u63D0\u793A\uFF08FieldHint \u672C\u4F53\u4ECD\u53EF\u5355\u72EC\u7528\uFF09",
54990
55033
  switchTip: "\u5B98\u65B9 Switch\uFF08\u542F\u7528\u8BED\u4E49\uFF0C\u4E0D\u662F\u52FE\u9009\uFF09+ Checkbox + Segmented",
54991
- 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",
55034
+ checkboxHint: "\u5916\u89C2\u5BF9\u9F50\u771F\u5B9E\u63D2\u4EF6\uFF1A\u7070\u5E95\u8F68\u9053 + \u767D\u8272\u9009\u4E2D\u7247\uFF1Bbordered \u662F\u5916\u6846\u6B3E\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",
54992
55035
  pickerHint: '\u5355\u9009 / \u591A\u9009 / \u4E0A\u9650 / \u641C\u7D22\uFF08searchable \u5F00\u5173\uFF09/ \u5206\u7EC4 / \u7A7A\u6001 / \u964D\u7EA7\uFF1B\u89E6\u53D1\u5668\u4E0E\u9009\u9879\u90FD\u652F\u6301\u524D\u7F6E icon\uFF1B\u6587\u5B57\u9ED8\u8BA4\u5C45\u5DE6\uFF08align="center" \u624D\u5C45\u4E2D\uFF09\uFF1B\u591A\u9009\u5230\u4E0A\u9650\u540E\u5DF2\u9009\u9879\u4ECD\u53EF\u70B9\u9009\u53D6\u6D88',
54993
55036
  dateTimePickerHint: "\u4E00\u4E2A\u63A7\u4EF6\u4E09\u79CD\u7528\u6CD5\uFF1Asingle / range \xD7 precision\uFF08day / hour / minute / second\uFF09\uFF1B\u6D6E\u5C42\u65E0\u906E\u7F69\u3001\u4E0E Picker \u540C\u673A\u5236\uFF1Brange \u5F39\u5C42\u662F\u5DE6\u53F3\u4E24\u5757\u72EC\u7ACB\u65E5\u5386\uFF08\u5DE6\u5F00\u59CB\u3001\u53F3\u7ED3\u675F\uFF0C\u5404\u9009\u5404\u7684\uFF09\uFF1B\u65F6\u5206\u79D2\u8D70\u6B65\u8FDB\uFF08\u25B2\u25BC / \u952E\u5165 / \u2191\u2193\uFF09\uFF0C\u4E0D\u7528\u9010\u683C\u70B9 60 \u5206\u949F\uFF0C\u4E5F\u4E0D\u5F3A\u5236\u5148\u9009\u65E5\u671F\uFF1B\u5FEB\u6377\u952E day \u7CBE\u5EA6\u53EB\u300C\u4ECA\u5929\u300D\u3001\u5E26\u65F6\u5206\u79D2\u53EB\u300C\u73B0\u5728\u300D\uFF1B\u8349\u7A3F\u6001\uFF0C\u300C\u786E\u5B9A\u300D\u624D\u63D0\u4EA4\uFF1Bday \u7CBE\u5EA6\u4E0B\u7ED3\u675F\u7AEF\u81EA\u52A8\u8865 23:59:59.999\uFF08\u6570\u636E\u5E93\u53EA\u6536\u5230\u79D2\u65F6\u4F18\u96C5\u9000\u5316\uFF09",
54994
55037
  modelPickerHint: "grouped \u5206\u7EC4\uFF08\u4E00\u4E2A\u4E0B\u62C9\u3001\u5382\u5546\u505A\u7EC4\u5934\u3001\u5B8C\u5168\u72EC\u7ACB\uFF09/ cascade \u8054\u52A8\uFF08\u4F9B\u5E94\u5546\u3001\u6A21\u578B\u4E24\u4E2A\u4E0B\u62C9\u8054\u52A8\uFF09\u2014\u2014\u4E24\u79CD\u5F62\u6001 onChange \u90FD\u53D1\u6700\u7EC8\u6A21\u578B value\uFF1B\u300C\u9ED8\u8BA4\u6A21\u578B\u300D\u9009\u9879\u9ED8\u8BA4\u63D0\u4F9B\uFF08\u9009\u4E2D\u53D1\u7A7A\u4E32\uFF0C\u5173\u95ED\u4F20 allowDefault: false\uFF09\uFF1B\u76EE\u5F55\u81EA\u52A8\u6765\u81EA\u5BBF\u4E3B",
@@ -55109,8 +55152,14 @@ var DICT2 = {
55109
55152
  docApiDesc: "\u8BF4\u660E",
55110
55153
  pluginTitle: "\u84DD\u9CB8\u7EC4\u4EF6\u5E93",
55111
55154
  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",
55155
+ settingsEntryTitle: "\u63D2\u4EF6\u5165\u53E3\u8BF4\u660E",
55156
+ 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",
55157
+ settingsEntryOff: "\u5173\u95ED",
55158
+ settingsEntryFirst: "\u4E00\u7EA7",
55159
+ settingsEntryMore: "\u66F4\u591A",
55160
+ 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",
55161
+ 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",
55162
+ 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
55163
  settingsOpenDemo: "\u67E5\u770B demo",
55115
55164
  settingsGithub: "\u8BBF\u95EE GitHub",
55116
55165
  settingsLoading: "\u6B63\u5728\u8BFB\u53D6\u8BBE\u7F6E\u2026",
@@ -55210,7 +55259,7 @@ var DICT2 = {
55210
55259
  demoInputFamily: "Input family",
55211
55260
  inputHint: "Input / PrefixedInput / NumberInput / Textarea, all support error highlighting; pass a hint string and the standard FieldHint is attached automatically (FieldHint still works standalone)",
55212
55261
  switchTip: "Official Switch (enable semantics, not a tick) + Checkbox + Segmented",
55213
- 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",
55262
+ checkboxHint: "Looks match the real plugin: grey track with a white selected pill; bordered adds an outer frame (rightmost, clickable); the weekday squares are multi-select. Labels follow the locale",
55214
55263
  pickerHint: 'Single / multi / max / search (searchable switch) / grouped / empty / degraded; trigger and options both take a leading icon; label is left-aligned by default (align="center" to center); multi-select at max still allows deselecting picked items',
55215
55264
  dateTimePickerHint: 'One control, three usages: single / range \xD7 precision (day / hour / minute / second); mask-free popup sharing Picker\u2019s mechanics; the range popup shows two independent calendars (left = start, right = end, each picks its own); hour/minute/second via steppers (\u25B2\u25BC / typing / \u2191\u2193) instead of clicking through 60 minutes, and never requires picking a date first; the quick button is "Today" at day precision, "Now" when hours/minutes/seconds are on; draft state \u2014 commits only on confirm; at day precision the end auto-fills 23:59:59.999 (degrades gracefully if the DB stores seconds only)',
55216
55265
  modelPickerHint: 'grouped (one dropdown, vendor headers, fully independent) / cascade (vendor and model dropdowns linked) \u2014 both emit the same final model value; a "default model" option is provided by default (emits an empty string, disable with allowDefault: false); the catalog comes from the host automatically',
@@ -55331,8 +55380,14 @@ var DICT2 = {
55331
55380
  docApiDesc: "Description",
55332
55381
  pluginTitle: "Blue Whale Component Library",
55333
55382
  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.',
55383
+ settingsEntryTitle: "Plugin entry",
55384
+ settingsEntryHint: "Choose where this plugin appears in the sidebar menu: when off, it is only reachable from Settings. Defaults to More.",
55385
+ settingsEntryOff: "Off",
55386
+ settingsEntryFirst: "First level",
55387
+ settingsEntryMore: "More",
55388
+ 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.",
55389
+ settingsEntryFirstTip: "The entry is pinned to the first level of the sidebar menu, alongside built-in features; clicking it opens the component preview page.",
55390
+ settingsEntryMoreTip: "The entry is placed in the sidebar More menu, leaving the first level uncluttered; expanding More opens the same preview page.",
55336
55391
  settingsOpenDemo: "View demo",
55337
55392
  settingsGithub: "Visit GitHub",
55338
55393
  settingsLoading: "Reading settings\u2026",
@@ -56607,8 +56662,8 @@ var docData = {
56607
56662
  "en": "IconButton: variant plain|outline|danger (default plain), size (default lg), icon (required), label (required, doubles as a11y name and title)."
56608
56663
  },
56609
56664
  {
56610
- "zh": "Segmented\uFF1A`items`\uFF08\u5FC5\u586B\uFF09\u652F\u6301\u5355\u9009 / \u591A\u9009\uFF0C\u53E6\u6709 `size`\uFF08\u9ED8\u8BA4 lg\uFF09\u3001`variant`\uFF08default / inset\uFF09\u3002\u9009\u4E2D\u7247 = \u62AC\u8D77\u5E95\u8272 + 1px \u63CF\u8FB9 + \u6D6E\u8D77\u9634\u5F71\u3002",
56611
- "en": "Segmented: `items` (required) supports single or multiple selection, plus `size` (default lg) and `variant` (default / inset). Selected = raised background + 1px border + lift shadow."
56665
+ "zh": "Segmented\uFF1A`items`\uFF08\u5FC5\u586B\uFF09\u652F\u6301\u5355\u9009 / \u591A\u9009\uFF0C`size`\uFF08\u9ED8\u8BA4 lg\uFF1B\u4E09\u6863\u603B\u9AD8 24 / 28 / 32\uFF09\u3001`bordered`\uFF081px \u5916\u6846\uFF0C\u603B\u9AD8\u4E0D\u53D8\uFF09\u3001`multiple`\uFF08\u591A\u9009\uFF09\u3002\u5916\u89C2\u53EA\u6709\u4E00\u5957\uFF1A\u7070\u5E95\u8F68\u9053 + \u767D\u8272\u9009\u4E2D\u7247\uFF0C\u9009\u4E2D\u7247\u7684\u63CF\u8FB9\u73AF\u4E0E\u9634\u5F71\u7531\u5BBF\u4E3B elevation token \u63D0\u4F9B\uFF08\u79BB\u7EBF\u515C\u5E95\u503C\u6CA1\u6709\u90A3\u5708\u73AF\uFF09\u3002",
56666
+ "en": "Segmented: `items` (required) supports single or multiple selection; `size` (default lg; totals 24 / 28 / 32), `bordered` (1px outer frame, same total height), `multiple` (multi-select). One look only: grey track + white selected pill; its stroke ring and shadow come from the host elevation token (the offline fallback has no ring)."
56612
56667
  }
56613
56668
  ],
56614
56669
  "api": [
@@ -58286,19 +58341,17 @@ var CODE_SWITCH_SEG = `// \u5F00\u5173\u8BED\u4E49\u7528\u5B98\u65B9 Switch\uFF1
58286
58341
  <Switch checked={checked} onChange={setChecked} label="\u542F\u7528" />
58287
58342
  <Checkbox checked={checked} onChange={setChecked} label="\u591A\u9009" />
58288
58343
 
58289
- // \u5206\u6BB5\uFF1Aitems = { value, label, count?, badge?, disabled? }\uFF1Bvariant \u9ED8\u8BA4 default\uFF0Cinset \u662F\u7070\u5E95\u6B3E
58344
+ // \u5206\u6BB5\uFF1Aitems = { value, label, count?, badge?, disabled? }\uFF1Bsize \u4E09\u6863\uFF08\u9ED8\u8BA4 lg\uFF09
58290
58345
  <Segmented
58291
- variant="inset"
58292
58346
  items={[{ value: 'day', label: '\u65E5' }, { value: 'week', label: '\u5468' }, { value: 'month', label: '\u6708' }]}
58293
58347
  value={seg}
58294
58348
  onChange={setSeg}
58295
58349
  />
58296
- // bordered\uFF1A\u9009\u4E2D\u6BB5\u53D8\u63CF\u8FB9\u5757\uFF1Bsize \u4E09\u6863
58297
- <Segmented variant="inset" bordered size="sm" items={...} value={seg} onChange={setSeg} />
58350
+ // bordered\uFF1A\u6700\u5916\u5305 1px \u63CF\u8FB9\uFF08\u603B\u9AD8\u4E0D\u53D8\uFF09\uFF1Bsize \u4E09\u6863
58351
+ <Segmented bordered size="sm" items={...} value={seg} onChange={setSeg} />
58298
58352
 
58299
58353
  // \u7B5B\u9009\u6761\uFF1Acount \u7ED9\u4E2D\u6027\u8BA1\u6570\uFF0Cbadge \u7ED9\u7EA2\u89D2\u6807
58300
58354
  <Segmented
58301
- variant="inset"
58302
58355
  items={[{ value: 'all', label: '\u5168\u90E8', count: 11 }, { value: 'doing', label: '\u8FDB\u884C\u4E2D', count: 5 }]}
58303
58356
  value={filter}
58304
58357
  onChange={setFilter}
@@ -58402,7 +58455,6 @@ function InputPage() {
58402
58455
  "div",
58403
58456
  { style: { display: "flex", gap: "20px", alignItems: "center", flexWrap: "wrap" } },
58404
58457
  (0, import_react56.createElement)(Segmented, {
58405
- variant: "inset",
58406
58458
  items: [
58407
58459
  { value: "day", label: "\u65E5" },
58408
58460
  { value: "week", label: "\u5468" },
@@ -58412,7 +58464,6 @@ function InputPage() {
58412
58464
  onChange: setSeg
58413
58465
  }),
58414
58466
  (0, import_react56.createElement)(Segmented, {
58415
- variant: "inset",
58416
58467
  bordered: true,
58417
58468
  items: [
58418
58469
  { value: "day", label: "\u65E5" },
@@ -58423,7 +58474,6 @@ function InputPage() {
58423
58474
  onChange: setSeg
58424
58475
  }),
58425
58476
  (0, import_react56.createElement)(Segmented, {
58426
- variant: "inset",
58427
58477
  size: "sm",
58428
58478
  items: [
58429
58479
  { value: "day", label: "\u65E5" },
@@ -58434,7 +58484,6 @@ function InputPage() {
58434
58484
  onChange: setSeg
58435
58485
  }),
58436
58486
  (0, import_react56.createElement)(Segmented, {
58437
- variant: "inset",
58438
58487
  size: "sm",
58439
58488
  bordered: true,
58440
58489
  items: [
@@ -58446,9 +58495,8 @@ function InputPage() {
58446
58495
  onChange: setSeg
58447
58496
  })
58448
58497
  ),
58449
- // 筛选条形态(真实插件同款):中性计数 + inset 灰底
58498
+ // 筛选条形态(真实插件同款):中性计数 + 灰底轨道
58450
58499
  (0, import_react56.createElement)(Segmented, {
58451
- variant: "inset",
58452
58500
  items: [
58453
58501
  { value: "all", label: t3("segAll"), count: 11 },
58454
58502
  { value: "doing", label: t3("segDoing"), count: 5 },
@@ -58460,7 +58508,6 @@ function InputPage() {
58460
58508
  onChange: setFilter
58461
58509
  }),
58462
58510
  (0, import_react56.createElement)(Segmented, {
58463
- variant: "inset",
58464
58511
  bordered: true,
58465
58512
  items: [
58466
58513
  { value: "all", label: t3("segAll"), count: 11 },
@@ -58769,7 +58816,7 @@ var CODE_SECTION_HEAD = `// \u5206\u533A\u6807\u9898\uFF1Aicon + \u6807\u9898 +
58769
58816
  icon={<IconSparkleRegular size={16} />}
58770
58817
  title={<span>\u5168\u90E8\u5F85\u529E <span style={{ fontSize: 'var(--dshpc-font-xs)', color: 'var(--dshpc-fg-3)' }}>22</span></span>}
58771
58818
  right={[
58772
- <Segmented variant="inset" items={[{ value: 'all', label: '\u5168\u90E8', count: 22 }]} value={seg} onChange={setSeg} />,
58819
+ <Segmented items={[{ value: 'all', label: '\u5168\u90E8', count: 22 }]} value={seg} onChange={setSeg} />,
58773
58820
  <div style={{ width: 192 }}><Input value={kw} onChange={setKw} placeholder="\u641C\u7D22" /></div>,
58774
58821
  ]}
58775
58822
  />`;
@@ -58897,7 +58944,6 @@ function CardPage() {
58897
58944
  ),
58898
58945
  right: [
58899
58946
  (0, import_react56.createElement)(Segmented, {
58900
- variant: "inset",
58901
58947
  items: [
58902
58948
  { value: "all", label: t3("segAll"), count: 22 },
58903
58949
  { value: "doing", label: t3("segDoing"), count: 11 },
@@ -60655,7 +60701,6 @@ function FileBrowser(props) {
60655
60701
  style: { flex: "1 1 auto", minWidth: 0 }
60656
60702
  }), (0, import_react62.createElement)("div", { className: "dshpc-fb__actions" }, switchable ? (0, import_react62.createElement)(Segmented, {
60657
60703
  size: "sm",
60658
- variant: "default",
60659
60704
  label: viewingIsMd ? tt("previewMdSwitchAria") : tt("previewHtmlSwitchAria"),
60660
60705
  value: sourceView ? "source" : "render",
60661
60706
  items: [
@@ -61406,9 +61451,9 @@ function ReferencePage() {
61406
61451
  "tbody",
61407
61452
  null,
61408
61453
  [
61409
- [t3("buildCore"), `v${"0.3.0"}`],
61410
- [t3("buildDemo"), `v${"0.3.0"}`],
61411
- [t3("buildStamp"), "261025-040507-428"]
61454
+ [t3("buildCore"), `v${"0.5.0"}`],
61455
+ [t3("buildDemo"), `v${"0.5.0"}`],
61456
+ [t3("buildStamp"), "261026-143305-714"]
61412
61457
  ].map(
61413
61458
  ([label, value]) => (0, import_react66.createElement)(
61414
61459
  "tr",
@@ -61515,7 +61560,7 @@ var MODELS_PATH = "/api/dsh-plugin-core-demo/models";
61515
61560
  // packages/demo/src/client/index.tsx
61516
61561
  var PANEL_ID = "dsh-plugin-core-demo";
61517
61562
  var BUNDLE_CONFIG_SLOT = "plugins.bundle.config";
61518
- var SIDEBAR_ENTRY_FIELD = "sidebarEntry";
61563
+ var ENTRY_MODE_FIELD = "entryMode";
61519
61564
  function resolveServedEntryId(forms) {
61520
61565
  let served;
61521
61566
  try {
@@ -61528,7 +61573,9 @@ function resolveServedEntryId(forms) {
61528
61573
  }
61529
61574
  var slotsRef = null;
61530
61575
  var sidebarDisposer = null;
61531
- var sidebarEntryOn = true;
61576
+ var entryMode = "more";
61577
+ var jump = () => {
61578
+ };
61532
61579
  function applySidebarEntry() {
61533
61580
  const slots = slotsRef;
61534
61581
  if (slots === null) return;
@@ -61536,14 +61583,39 @@ function applySidebarEntry() {
61536
61583
  sidebarDisposer();
61537
61584
  sidebarDisposer = null;
61538
61585
  }
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
- });
61586
+ if (entryMode === "off") return;
61587
+ if (entryMode === "first") {
61588
+ slots.inject("sidebar.panellist", () => {
61589
+ if (sidebarDisposer !== null) return;
61590
+ if (entryMode !== "first") return;
61591
+ sidebarDisposer = slots.register(
61592
+ { name: "sidebar.panellist", id: PANEL_ID, order: 90, label: () => t3("pluginTitle") },
61593
+ PanelIcon
61594
+ );
61595
+ });
61596
+ } else {
61597
+ slots.inject("sidebar.panellist.actions", () => {
61598
+ if (sidebarDisposer !== null) return;
61599
+ if (entryMode !== "more") return;
61600
+ sidebarDisposer = slots.register(
61601
+ { name: "sidebar.panellist.actions", id: `${PANEL_ID}-more`, order: 90, locale: PANEL_ID },
61602
+ MoreMenuRow
61603
+ );
61604
+ });
61605
+ }
61606
+ }
61607
+ function MoreMenuRow(props) {
61608
+ return (0, import_react68.createElement)(
61609
+ import_dsh_client_ui_primitives4.MenuItemButton,
61610
+ {
61611
+ icon: (0, import_react68.createElement)(PanelIcon, { size: 16 }),
61612
+ onSelect: () => {
61613
+ props.onDismiss();
61614
+ jump(PANEL_ID);
61615
+ }
61616
+ },
61617
+ t3("pluginTitle")
61618
+ );
61547
61619
  }
61548
61620
  var localeRuntime;
61549
61621
  function useLocaleTick() {
@@ -61703,9 +61775,9 @@ function DemoPage() {
61703
61775
  lineHeight: "14px"
61704
61776
  }
61705
61777
  },
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")
61778
+ (0, import_react68.createElement)("span", null, `core v${"0.5.0"}`),
61779
+ (0, import_react68.createElement)("span", null, `demo v${"0.5.0"}`),
61780
+ (0, import_react68.createElement)("span", { style: { marginTop: "4px", fontSize: "9px" } }, "261026-143305-714")
61709
61781
  )
61710
61782
  )
61711
61783
  ),
@@ -61727,38 +61799,44 @@ function ConfigPanel(props) {
61727
61799
  }), [form]);
61728
61800
  if (props.view !== "page") return (0, import_react68.createElement)("div", { style: { display: "none" } });
61729
61801
  const snap = form.getSnapshot();
61730
- const on = snap.value?.sidebarEntry !== false;
61802
+ const storedMode = snap.value?.entryMode;
61803
+ const mode = storedMode === "off" || storedMode === "first" || storedMode === "more" ? storedMode : "more";
61731
61804
  const ready = snap.status === "ready";
61732
61805
  return (0, import_react68.createElement)(
61733
61806
  "div",
61734
61807
  { style: { display: "flex", flexDirection: "column", gap: "14px" } },
61735
61808
  // 一句话说明「这个插件是干嘛的」——标题由详情页自己画,这里只补定位
61736
61809
  (0, import_react68.createElement)("div", { style: { color: "var(--dshpc-fg-3)", fontSize: "12px", lineHeight: "18px" } }, t3("settingsIntro")),
61737
- // 设置行:开关在右、说明在左;左缘圆角短条开=绿 / 关=灰(核心 Card 框式)
61810
+ // 设置行:滑动栏在右、说明在左;左缘圆角短条有入口=绿 / 关闭=灰(核心 Card 框式)
61738
61811
  ready ? (0, import_react68.createElement)(
61739
61812
  Card,
61740
61813
  {
61741
- accent: on ? "success" : "neutral",
61742
- action: (0, import_react68.createElement)(import_dsh_client_ui_primitives4.Switch, {
61743
- checked: on,
61744
- label: t3("settingsSidebarEntry"),
61814
+ accent: mode === "off" ? "neutral" : "success",
61815
+ action: (0, import_react68.createElement)(Segmented, {
61816
+ size: "sm",
61817
+ value: mode,
61745
61818
  disabled: !snap.writable,
61746
61819
  onChange: (next) => {
61747
61820
  void form.mutate(
61748
- [{ op: "set", path: [SIDEBAR_ENTRY_FIELD], value: next }],
61821
+ [{ op: "set", path: [ENTRY_MODE_FIELD], value: next }],
61749
61822
  snap.revision
61750
61823
  );
61751
- }
61824
+ },
61825
+ items: [
61826
+ { value: "off", label: t3("settingsEntryOff"), tooltip: t3("settingsEntryOffTip") },
61827
+ { value: "more", label: t3("settingsEntryMore"), tooltip: t3("settingsEntryMoreTip") },
61828
+ { value: "first", label: t3("settingsEntryFirst"), tooltip: t3("settingsEntryFirstTip") }
61829
+ ]
61752
61830
  })
61753
61831
  },
61754
61832
  (0, import_react68.createElement)(
61755
61833
  "div",
61756
61834
  null,
61757
- (0, import_react68.createElement)("div", { style: { fontSize: "13px", fontWeight: 500 } }, t3("settingsSidebarEntry")),
61835
+ (0, import_react68.createElement)("div", { style: { fontSize: "13px", fontWeight: 500 } }, t3("settingsEntryTitle")),
61758
61836
  (0, import_react68.createElement)(
61759
61837
  "div",
61760
61838
  { style: { color: "var(--dshpc-fg-3)", fontSize: "12px", marginTop: "2px" } },
61761
- t3("settingsSidebarEntryHint")
61839
+ t3("settingsEntryHint")
61762
61840
  )
61763
61841
  )
61764
61842
  ) : (0, import_react68.createElement)(
@@ -61808,8 +61886,6 @@ function apply(ctx) {
61808
61886
  kit.registerStyle("demo", DEMO_CSS);
61809
61887
  kit.ensureStyles();
61810
61888
  setTooltipRenderer((props) => (0, import_react68.createElement)(import_dsh_client_ui_primitives4.Tooltip, props));
61811
- let jump = () => {
61812
- };
61813
61889
  ctx.inject(["layout"], (sub) => {
61814
61890
  const layout = sub?.layout;
61815
61891
  if (layout?.selectPanel === void 0) return;
@@ -61854,7 +61930,8 @@ function apply(ctx) {
61854
61930
  const form = forms.get(entryId);
61855
61931
  const syncSidebar = () => {
61856
61932
  const value = form.getSnapshot().value;
61857
- sidebarEntryOn = value?.sidebarEntry !== false;
61933
+ const stored = value?.entryMode;
61934
+ entryMode = stored === "off" || stored === "first" || stored === "more" ? stored : "more";
61858
61935
  applySidebarEntry();
61859
61936
  };
61860
61937
  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.5.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",