@webskill/sdk 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/agent.d.ts +2 -2
  2. package/dist/agent.js +274 -42
  3. package/dist/browser.d.ts +127 -5
  4. package/dist/browser.js +611 -17
  5. package/dist/{catalogComponents-DV7cPpUm-C77AEEx9.js → catalogComponents-Dr5dFMAb-DKH_7VPI.js} +848 -974
  6. package/dist/{dist-6C03DShK.js → dist-D0qW6e40.js} +1213 -210
  7. package/dist/{dist-bewtXYlO.js → dist-DnYG2-eY.js} +53 -14
  8. package/dist/{env--jJB-TSX-04klhTYi.js → env-8cY40DXB-CGnEVZby.js} +7 -6
  9. package/dist/{env-BPUBZCwJ-4jat_SVG.d.ts → env-AK3cSMEA-Dli6QU5E.d.ts} +4 -3
  10. package/dist/eventTypes-DjIQpt8Y-Bj3vghj4.js +32 -0
  11. package/dist/governance.d.ts +78 -11
  12. package/dist/governance.js +173 -50
  13. package/dist/{index-D_7ZZjkl.d.ts → index-Ba3xFtfz.d.ts} +222 -8
  14. package/dist/{index-Bsqg4ftU.d.ts → index-BwsK9lGk.d.ts} +13 -7
  15. package/dist/{index-vBz_FC9w.d.ts → index-DkbABR43.d.ts} +336 -52
  16. package/dist/index.d.ts +3 -3
  17. package/dist/index.js +3 -3
  18. package/dist/mcp.d.ts +159 -11
  19. package/dist/mcp.js +276 -45
  20. package/dist/{memoryArtifactStore-BtOeB_hm-tj3fC5ip.js → memoryArtifactStore-52Zn9npI-BMPYwvoy.js} +10 -2
  21. package/dist/node.d.ts +4 -4
  22. package/dist/node.js +11 -3
  23. package/dist/{openUiLibrary-W3Ce896k-ClFTRZFs.js → openUiLibrary-Bdrji9qK-D2LxmM-a.js} +3 -3
  24. package/dist/{skillVersionStore-BzLbzFOL-CxwIewHJ.d.ts → skillVersionStore-Bl-ElD45-CWPvGvoq.d.ts} +8 -2
  25. package/dist/{testing-DDCJWvgA.js → testing-CYTFqkDm.js} +1 -1
  26. package/dist/testing.d.ts +2 -2
  27. package/dist/testing.js +3 -3
  28. package/dist/{types-D_hoCri8-BnNPiZCi.d.ts → types-CcxRLdJG-DCXyw1US.d.ts} +62 -10
  29. package/dist/ui-react.d.ts +5 -3
  30. package/dist/ui-react.js +72 -47
  31. package/dist/ui-vue.d.ts +1 -1
  32. package/dist/ui-vue.js +13 -8
  33. package/dist/ui.d.ts +3 -3
  34. package/dist/ui.js +2 -2
  35. package/dist/{webskillLitCatalog-_mugzRHx-DiuJpCuf.js → webskillLitCatalog-_mugzRHx-B_54vxum.js} +1 -1
  36. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { a as __require, i as __reExport, n as __esmMin, o as __toCommonJS, r as __exportAll$2, s as __toESM$1, t as __commonJSMin$1 } from "./rolldown-runtime-BOF7iYI8.js";
2
2
  import { m as WebSkillError } from "./dist-8oQRa8Xz.js";
3
- import { M as qualifyFieldName, Q as chartSpecFromProps, et as mountEchart, v as collectFormScopes, y as collectScopedValues } from "./dist-bewtXYlO.js";
3
+ import { M as qualifyFieldName, Q as chartSpecFromProps, et as mountEchart, v as collectFormScopes, y as collectScopedValues } from "./dist-DnYG2-eY.js";
4
4
  import minpath$1 from "node:path";
5
5
  import { fileURLToPath as urlToPath$1 } from "node:url";
6
6
  import * as React$10 from "react";
@@ -3407,16 +3407,54 @@ const getDefaultConfig = () => {
3407
3407
  const twMerge = /*#__PURE__*/ createTailwindMerge(getDefaultConfig);
3408
3408
 
3409
3409
  //#endregion
3410
- //#region ../ui-kit/dist/cn-Dt6Yi1Qv.js
3410
+ //#region ../ui-kit/dist/useDarkAncestor-D41bzGNA.js
3411
3411
  /** shadcn 约定的类名合并:后写的 Tailwind 类覆盖先写的同族类。 */
3412
3412
  function cn(...inputs) {
3413
3413
  return twMerge(clsx(inputs));
3414
3414
  }
3415
+ /**
3416
+ * 声明了主题的祖先:`data-theme` 由 ThemeScope 挂(亮暗都挂),`.dark` 是宿主页面惯用的暗色类名。
3417
+ * 两者一起选,`closest` 才会停在**最近**的那一层,而不是越过亮色实例去命中外层的暗色宿主。
3418
+ */
3419
+ const THEME_ANCESTOR = "[data-theme], .dark";
3420
+ /**
3421
+ * 判定挂载点**最近的**主题祖先是否处于暗色(0.6.0 FR-20.4)。
3422
+ *
3423
+ * 不用 `document.querySelector('.dark')`:那是全局查询,宿主页面是暗色时,
3424
+ * 嵌在暗色宿主里的亮色 SDK 实例也会被判成暗色(反之亦然)。
3425
+ *
3426
+ * 返回 ref 回调而不是接受 ref 对象:ref 对象的赋值不触发渲染,拿不到「已挂载」这个时机。
3427
+ */
3428
+ function useDarkAncestor() {
3429
+ const [node, setNode] = useState(null);
3430
+ const [dark, setDark] = useState(false);
3431
+ useEffect(() => {
3432
+ if (!node) return;
3433
+ const update = () => {
3434
+ const scope = node.closest(THEME_ANCESTOR);
3435
+ if (!scope) {
3436
+ setDark(false);
3437
+ return;
3438
+ }
3439
+ const declared = scope.getAttribute("data-theme");
3440
+ setDark(declared === null ? true : declared === "dark");
3441
+ };
3442
+ update();
3443
+ const observer = new MutationObserver(update);
3444
+ observer.observe(document.documentElement, {
3445
+ attributes: true,
3446
+ attributeFilter: ["class", "data-theme"],
3447
+ subtree: true
3448
+ });
3449
+ return () => observer.disconnect();
3450
+ }, [node]);
3451
+ return [dark, setNode];
3452
+ }
3415
3453
 
3416
3454
  //#endregion
3417
3455
  //#region ../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.5_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
3418
- var __defProp$29 = Object.defineProperty;
3419
- var __name$27 = (target, value) => __defProp$29(target, "name", {
3456
+ var __defProp$28 = Object.defineProperty;
3457
+ var __name$26 = (target, value) => __defProp$28(target, "name", {
3420
3458
  value,
3421
3459
  configurable: true
3422
3460
  });
@@ -3424,7 +3462,7 @@ function setRef$1(ref, value) {
3424
3462
  if (typeof ref === "function") return ref(value);
3425
3463
  else if (ref !== null && ref !== void 0) ref.current = value;
3426
3464
  }
3427
- __name$27(setRef$1, "setRef");
3465
+ __name$26(setRef$1, "setRef");
3428
3466
  function composeRefs(...refs) {
3429
3467
  return (node) => {
3430
3468
  let hasCleanup = false;
@@ -3442,16 +3480,16 @@ function composeRefs(...refs) {
3442
3480
  };
3443
3481
  };
3444
3482
  }
3445
- __name$27(composeRefs, "composeRefs");
3483
+ __name$26(composeRefs, "composeRefs");
3446
3484
  function useComposedRefs(...refs) {
3447
3485
  return React$10.useCallback(composeRefs(...refs), refs);
3448
3486
  }
3449
- __name$27(useComposedRefs, "useComposedRefs");
3487
+ __name$26(useComposedRefs, "useComposedRefs");
3450
3488
 
3451
3489
  //#endregion
3452
3490
  //#region ../../node_modules/.pnpm/@radix-ui+react-context@1.2.2_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-context/dist/index.mjs
3453
- var __defProp$28 = Object.defineProperty;
3454
- var __name$26 = (target, value) => __defProp$28(target, "name", {
3491
+ var __defProp$27 = Object.defineProperty;
3492
+ var __name$25 = (target, value) => __defProp$27(target, "name", {
3455
3493
  value,
3456
3494
  configurable: true
3457
3495
  });
@@ -3459,7 +3497,7 @@ var __name$26 = (target, value) => __defProp$28(target, "name", {
3459
3497
  function createContext2(rootComponentName, defaultContext) {
3460
3498
  const Context = React$10.createContext(defaultContext);
3461
3499
  Context.displayName = rootComponentName + "Context";
3462
- const Provider = /* @__PURE__ */ __name$26((props) => {
3500
+ const Provider = /* @__PURE__ */ __name$25((props) => {
3463
3501
  const { children, ...context } = props;
3464
3502
  const value = React$10.useMemo(() => context, Object.values(context));
3465
3503
  return /* @__PURE__ */ jsx(Context.Provider, {
@@ -3476,10 +3514,10 @@ function createContext2(rootComponentName, defaultContext) {
3476
3514
  if (optional) return void 0;
3477
3515
  throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
3478
3516
  }
3479
- __name$26(useContext2, "useContext");
3517
+ __name$25(useContext2, "useContext");
3480
3518
  return [Provider, useContext2];
3481
3519
  }
3482
- __name$26(createContext2, "createContext");
3520
+ __name$25(createContext2, "createContext");
3483
3521
  // @__NO_SIDE_EFFECTS__
3484
3522
  function createContextScope(scopeName, createContextScopeDeps = []) {
3485
3523
  let defaultContexts = [];
@@ -3488,7 +3526,7 @@ function createContextScope(scopeName, createContextScopeDeps = []) {
3488
3526
  BaseContext.displayName = rootComponentName + "Context";
3489
3527
  const index = defaultContexts.length;
3490
3528
  defaultContexts = [...defaultContexts, defaultContext];
3491
- const Provider = /* @__PURE__ */ __name$26((props) => {
3529
+ const Provider = /* @__PURE__ */ __name$25((props) => {
3492
3530
  const { scope, children, ...context } = props;
3493
3531
  const Context = scope?.[scopeName]?.[index] || BaseContext;
3494
3532
  const value = React$10.useMemo(() => context, Object.values(context));
@@ -3507,15 +3545,15 @@ function createContextScope(scopeName, createContextScopeDeps = []) {
3507
3545
  if (optional) return void 0;
3508
3546
  throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
3509
3547
  }
3510
- __name$26(useContext2, "useContext");
3548
+ __name$25(useContext2, "useContext");
3511
3549
  return [Provider, useContext2];
3512
3550
  }
3513
- __name$26(createContext3, "createContext");
3514
- const createScope = /* @__PURE__ */ __name$26(() => {
3551
+ __name$25(createContext3, "createContext");
3552
+ const createScope = /* @__PURE__ */ __name$25(() => {
3515
3553
  const scopeContexts = defaultContexts.map((defaultContext) => {
3516
3554
  return React$10.createContext(defaultContext);
3517
3555
  });
3518
- return /* @__PURE__ */ __name$26(function useScope(scope) {
3556
+ return /* @__PURE__ */ __name$25(function useScope(scope) {
3519
3557
  const contexts = scope?.[scopeName] || scopeContexts;
3520
3558
  return React$10.useMemo(() => ({ [`__scope${scopeName}`]: {
3521
3559
  ...scope,
@@ -3526,16 +3564,16 @@ function createContextScope(scopeName, createContextScopeDeps = []) {
3526
3564
  createScope.scopeName = scopeName;
3527
3565
  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];
3528
3566
  }
3529
- __name$26(createContextScope, "createContextScope");
3567
+ __name$25(createContextScope, "createContextScope");
3530
3568
  function composeContextScopes(...scopes) {
3531
3569
  const baseScope = scopes[0];
3532
3570
  if (scopes.length === 1) return baseScope;
3533
- const createScope = /* @__PURE__ */ __name$26(() => {
3571
+ const createScope = /* @__PURE__ */ __name$25(() => {
3534
3572
  const scopeHooks = scopes.map((createScope2) => ({
3535
3573
  useScope: createScope2(),
3536
3574
  scopeName: createScope2.scopeName
3537
3575
  }));
3538
- return /* @__PURE__ */ __name$26(function useComposedScopes(overrideScopes) {
3576
+ return /* @__PURE__ */ __name$25(function useComposedScopes(overrideScopes) {
3539
3577
  const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {
3540
3578
  const currentScope = useScope(overrideScopes)[`__scope${scopeName}`];
3541
3579
  return {
@@ -3549,33 +3587,33 @@ function composeContextScopes(...scopes) {
3549
3587
  createScope.scopeName = baseScope.scopeName;
3550
3588
  return createScope;
3551
3589
  }
3552
- __name$26(composeContextScopes, "composeContextScopes");
3590
+ __name$25(composeContextScopes, "composeContextScopes");
3553
3591
 
3554
3592
  //#endregion
3555
3593
  //#region ../../node_modules/.pnpm/@radix-ui+primitive@1.1.7/node_modules/@radix-ui/primitive/dist/index.mjs
3556
- var __defProp$27 = Object.defineProperty;
3557
- var __name$25 = (target, value) => __defProp$27(target, "name", {
3594
+ var __defProp$26 = Object.defineProperty;
3595
+ var __name$24 = (target, value) => __defProp$26(target, "name", {
3558
3596
  value,
3559
3597
  configurable: true
3560
3598
  });
3561
3599
  var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);
3562
3600
  function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
3563
- return /* @__PURE__ */ __name$25(function handleEvent(event) {
3601
+ return /* @__PURE__ */ __name$24(function handleEvent(event) {
3564
3602
  originalEventHandler?.(event);
3565
3603
  if (checkForDefaultPrevented === false || !event || !event.defaultPrevented) return ourEventHandler?.(event);
3566
3604
  }, "handleEvent");
3567
3605
  }
3568
- __name$25(composeEventHandlers, "composeEventHandlers");
3606
+ __name$24(composeEventHandlers, "composeEventHandlers");
3569
3607
  function getOwnerWindow(element) {
3570
3608
  if (!canUseDOM) throw new Error("Cannot access window outside of the DOM");
3571
3609
  return element?.ownerDocument?.defaultView ?? window;
3572
3610
  }
3573
- __name$25(getOwnerWindow, "getOwnerWindow");
3611
+ __name$24(getOwnerWindow, "getOwnerWindow");
3574
3612
  function getOwnerDocument(element) {
3575
3613
  if (!canUseDOM) throw new Error("Cannot access document outside of the DOM");
3576
3614
  return element?.ownerDocument ?? document;
3577
3615
  }
3578
- __name$25(getOwnerDocument, "getOwnerDocument");
3616
+ __name$24(getOwnerDocument, "getOwnerDocument");
3579
3617
  function getActiveElement(node, activeDescendant = false) {
3580
3618
  const { activeElement } = getOwnerDocument(node);
3581
3619
  if (!activeElement?.nodeName) return null;
@@ -3589,11 +3627,11 @@ function getActiveElement(node, activeDescendant = false) {
3589
3627
  }
3590
3628
  return activeElement;
3591
3629
  }
3592
- __name$25(getActiveElement, "getActiveElement");
3630
+ __name$24(getActiveElement, "getActiveElement");
3593
3631
  function isFrame(element) {
3594
3632
  return element.tagName === "IFRAME";
3595
3633
  }
3596
- __name$25(isFrame, "isFrame");
3634
+ __name$24(isFrame, "isFrame");
3597
3635
 
3598
3636
  //#endregion
3599
3637
  //#region ../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.4_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
@@ -3601,8 +3639,8 @@ var useLayoutEffect2 = globalThis?.document ? React$10.useLayoutEffect : () => {
3601
3639
 
3602
3640
  //#endregion
3603
3641
  //#region ../../node_modules/.pnpm/@radix-ui+react-use-effect-event@0.0.5_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-use-effect-event/dist/index.mjs
3604
- var __defProp$26 = Object.defineProperty;
3605
- var __name$24 = (target, value) => __defProp$26(target, "name", {
3642
+ var __defProp$25 = Object.defineProperty;
3643
+ var __name$23 = (target, value) => __defProp$25(target, "name", {
3606
3644
  value,
3607
3645
  configurable: true
3608
3646
  });
@@ -3621,17 +3659,17 @@ function useEffectEvent$2(callback) {
3621
3659
  });
3622
3660
  return React$10.useMemo(() => ((...args) => ref.current?.(...args)), []);
3623
3661
  }
3624
- __name$24(useEffectEvent$2, "useEffectEvent");
3662
+ __name$23(useEffectEvent$2, "useEffectEvent");
3625
3663
 
3626
3664
  //#endregion
3627
3665
  //#region ../../node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.2.6_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs
3628
- var __defProp$25 = Object.defineProperty;
3629
- var __name$23 = (target, value) => __defProp$25(target, "name", {
3666
+ var __defProp$24 = Object.defineProperty;
3667
+ var __name$22 = (target, value) => __defProp$24(target, "name", {
3630
3668
  value,
3631
3669
  configurable: true
3632
3670
  });
3633
3671
  var useInsertionEffect$1 = React$10[" useInsertionEffect ".trim().toString()] || useLayoutEffect2;
3634
- function useControllableState({ prop, defaultProp, onChange = /* @__PURE__ */ __name$23(() => {}, "onChange"), caller }) {
3672
+ function useControllableState({ prop, defaultProp, onChange = /* @__PURE__ */ __name$22(() => {}, "onChange"), caller }) {
3635
3673
  const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({
3636
3674
  defaultProp,
3637
3675
  onChange
@@ -3648,7 +3686,7 @@ function useControllableState({ prop, defaultProp, onChange = /* @__PURE__ */ __
3648
3686
  }
3649
3687
  return [value, React$10.useCallback((nextValue) => {
3650
3688
  if (isControlled) {
3651
- const value2 = isFunction$2(nextValue) ? nextValue(prop) : nextValue;
3689
+ const value2 = isFunction$1(nextValue) ? nextValue(prop) : nextValue;
3652
3690
  if (value2 !== prop) onChangeRef.current?.(value2);
3653
3691
  } else setUncontrolledProp(nextValue);
3654
3692
  }, [
@@ -3658,7 +3696,7 @@ function useControllableState({ prop, defaultProp, onChange = /* @__PURE__ */ __
3658
3696
  onChangeRef
3659
3697
  ])];
3660
3698
  }
3661
- __name$23(useControllableState, "useControllableState");
3699
+ __name$22(useControllableState, "useControllableState");
3662
3700
  function useUncontrolledState({ defaultProp, onChange }) {
3663
3701
  const [value, setValue] = React$10.useState(defaultProp);
3664
3702
  const prevValueRef = React$10.useRef(value);
@@ -3678,11 +3716,11 @@ function useUncontrolledState({ defaultProp, onChange }) {
3678
3716
  onChangeRef
3679
3717
  ];
3680
3718
  }
3681
- __name$23(useUncontrolledState, "useUncontrolledState");
3682
- function isFunction$2(value) {
3719
+ __name$22(useUncontrolledState, "useUncontrolledState");
3720
+ function isFunction$1(value) {
3683
3721
  return typeof value === "function";
3684
3722
  }
3685
- __name$23(isFunction$2, "isFunction");
3723
+ __name$22(isFunction$1, "isFunction");
3686
3724
  var SYNC_STATE = Symbol("RADIX:SYNC_STATE");
3687
3725
  function useControllableStateReducer(reducer, userArgs, initialArg, init) {
3688
3726
  const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;
@@ -3741,12 +3779,12 @@ function useControllableStateReducer(reducer, userArgs, initialArg, init) {
3741
3779
  ]);
3742
3780
  return [state, dispatch];
3743
3781
  }
3744
- __name$23(useControllableStateReducer, "useControllableStateReducer");
3782
+ __name$22(useControllableStateReducer, "useControllableStateReducer");
3745
3783
 
3746
3784
  //#endregion
3747
3785
  //#region ../../node_modules/.pnpm/@radix-ui+react-use-size@1.1.4_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-use-size/dist/index.mjs
3748
- var __defProp$24 = Object.defineProperty;
3749
- var __name$22 = (target, value) => __defProp$24(target, "name", {
3786
+ var __defProp$23 = Object.defineProperty;
3787
+ var __name$21 = (target, value) => __defProp$23(target, "name", {
3750
3788
  value,
3751
3789
  configurable: true
3752
3790
  });
@@ -3784,12 +3822,12 @@ function useSize(element) {
3784
3822
  }, [element]);
3785
3823
  return size;
3786
3824
  }
3787
- __name$22(useSize, "useSize");
3825
+ __name$21(useSize, "useSize");
3788
3826
 
3789
3827
  //#endregion
3790
3828
  //#region ../../node_modules/.pnpm/@radix-ui+react-presence@1.1.10_@types+react-dom@19.2.3_@types+react@19.2.17__@types+re_138587ba593102bdcf335a5673d92068/node_modules/@radix-ui/react-presence/dist/index.mjs
3791
- var __defProp$23 = Object.defineProperty;
3792
- var __name$21 = (target, value) => __defProp$23(target, "name", {
3829
+ var __defProp$22 = Object.defineProperty;
3830
+ var __name$20 = (target, value) => __defProp$22(target, "name", {
3793
3831
  value,
3794
3832
  configurable: true
3795
3833
  });
@@ -3798,8 +3836,8 @@ function useStateMachine$1(initialState, machine) {
3798
3836
  return machine[state][event] ?? state;
3799
3837
  }, initialState);
3800
3838
  }
3801
- __name$21(useStateMachine$1, "useStateMachine");
3802
- var Presence = /* @__PURE__ */ __name$21((props) => {
3839
+ __name$20(useStateMachine$1, "useStateMachine");
3840
+ var Presence = /* @__PURE__ */ __name$20((props) => {
3803
3841
  const { present, children } = props;
3804
3842
  const presence = usePresence(present);
3805
3843
  const child = typeof children === "function" ? children({ present: presence.isPresent }) : React$10.Children.only(children);
@@ -3848,7 +3886,7 @@ function usePresence(present) {
3848
3886
  if (node) {
3849
3887
  let timeoutId;
3850
3888
  const ownerWindow = node.ownerDocument.defaultView ?? window;
3851
- const handleAnimationEnd = /* @__PURE__ */ __name$21((event) => {
3889
+ const handleAnimationEnd = /* @__PURE__ */ __name$20((event) => {
3852
3890
  const isCurrentAnimation = getAnimationName(stylesRef.current).includes(CSS.escape(event.animationName));
3853
3891
  if (event.target === node && isCurrentAnimation) {
3854
3892
  send("ANIMATION_END");
@@ -3861,7 +3899,7 @@ function usePresence(present) {
3861
3899
  }
3862
3900
  }
3863
3901
  }, "handleAnimationEnd");
3864
- const handleAnimationStart = /* @__PURE__ */ __name$21((event) => {
3902
+ const handleAnimationStart = /* @__PURE__ */ __name$20((event) => {
3865
3903
  if (event.target === node) prevAnimationNameRef.current = getAnimationName(stylesRef.current);
3866
3904
  }, "handleAnimationStart");
3867
3905
  node.addEventListener("animationstart", handleAnimationStart);
@@ -3887,12 +3925,12 @@ function usePresence(present) {
3887
3925
  }, [])
3888
3926
  };
3889
3927
  }
3890
- __name$21(usePresence, "usePresence");
3928
+ __name$20(usePresence, "usePresence");
3891
3929
  function setRef(ref, value) {
3892
3930
  if (typeof ref === "function") return ref(value);
3893
3931
  else if (ref !== null && ref !== void 0) ref.current = value;
3894
3932
  }
3895
- __name$21(setRef, "setRef");
3933
+ __name$20(setRef, "setRef");
3896
3934
  function useStableComposedRefs(...refs) {
3897
3935
  const refsRef = React$10.useRef(refs);
3898
3936
  refsRef.current = refs;
@@ -3913,11 +3951,11 @@ function useStableComposedRefs(...refs) {
3913
3951
  };
3914
3952
  }, []);
3915
3953
  }
3916
- __name$21(useStableComposedRefs, "useStableComposedRefs");
3954
+ __name$20(useStableComposedRefs, "useStableComposedRefs");
3917
3955
  function getAnimationName(styles) {
3918
3956
  return styles?.animationName || "none";
3919
3957
  }
3920
- __name$21(getAnimationName, "getAnimationName");
3958
+ __name$20(getAnimationName, "getAnimationName");
3921
3959
  function getElementRef$1(element) {
3922
3960
  let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
3923
3961
  let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
@@ -3927,12 +3965,12 @@ function getElementRef$1(element) {
3927
3965
  if (mayWarn) return element.props.ref;
3928
3966
  return element.props.ref || element.ref;
3929
3967
  }
3930
- __name$21(getElementRef$1, "getElementRef");
3968
+ __name$20(getElementRef$1, "getElementRef");
3931
3969
 
3932
3970
  //#endregion
3933
3971
  //#region ../../node_modules/.pnpm/@radix-ui+react-slot@1.3.3_@types+react@19.2.17_react@19.2.8/node_modules/@radix-ui/react-slot/dist/index.mjs
3934
- var __defProp$22 = Object.defineProperty;
3935
- var __name$20 = (target, value) => __defProp$22(target, "name", {
3972
+ var __defProp$21 = Object.defineProperty;
3973
+ var __name$19 = (target, value) => __defProp$21(target, "name", {
3936
3974
  value,
3937
3975
  configurable: true
3938
3976
  });
@@ -3969,17 +4007,17 @@ function createSlot(ownerName) {
3969
4007
  Slot2.displayName = `${ownerName}.Slot`;
3970
4008
  return Slot2;
3971
4009
  }
3972
- __name$20(createSlot, "createSlot");
4010
+ __name$19(createSlot, "createSlot");
3973
4011
  var SLOTTABLE_IDENTIFIER = Symbol.for("radix.slottable");
3974
4012
  // @__NO_SIDE_EFFECTS__
3975
4013
  function createSlottable(ownerName) {
3976
- const Slottable2 = /* @__PURE__ */ __name$20((props) => "child" in props ? props.children(props.child) : props.children, "Slottable");
4014
+ const Slottable2 = /* @__PURE__ */ __name$19((props) => "child" in props ? props.children(props.child) : props.children, "Slottable");
3977
4015
  Slottable2.displayName = `${ownerName}.Slottable`;
3978
4016
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
3979
4017
  return Slottable2;
3980
4018
  }
3981
- __name$20(createSlottable, "createSlottable");
3982
- var getSlottableElementFromSlottable = /* @__PURE__ */ __name$20((slottable, child) => {
4019
+ __name$19(createSlottable, "createSlottable");
4020
+ var getSlottableElementFromSlottable = /* @__PURE__ */ __name$19((slottable, child) => {
3983
4021
  if ("child" in slottable.props) {
3984
4022
  const child2 = slottable.props.child;
3985
4023
  if (!React$10.isValidElement(child2)) return null;
@@ -4010,7 +4048,7 @@ function mergeProps(slotProps, childProps) {
4010
4048
  ...overrideProps
4011
4049
  };
4012
4050
  }
4013
- __name$20(mergeProps, "mergeProps");
4051
+ __name$19(mergeProps, "mergeProps");
4014
4052
  function getElementRef(element) {
4015
4053
  let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
4016
4054
  let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
@@ -4020,32 +4058,32 @@ function getElementRef(element) {
4020
4058
  if (mayWarn) return element.props.ref;
4021
4059
  return element.props.ref || element.ref;
4022
4060
  }
4023
- __name$20(getElementRef, "getElementRef");
4061
+ __name$19(getElementRef, "getElementRef");
4024
4062
  function isSlottable(child) {
4025
4063
  return React$10.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
4026
4064
  }
4027
- __name$20(isSlottable, "isSlottable");
4065
+ __name$19(isSlottable, "isSlottable");
4028
4066
  var REACT_LAZY_TYPE = Symbol.for("react.lazy");
4029
4067
  function isLazyComponent(element) {
4030
4068
  return element != null && typeof element === "object" && "$$typeof" in element && element.$$typeof === REACT_LAZY_TYPE && "_payload" in element && isPromiseLike(element._payload);
4031
4069
  }
4032
- __name$20(isLazyComponent, "isLazyComponent");
4070
+ __name$19(isLazyComponent, "isLazyComponent");
4033
4071
  function isPromiseLike(value) {
4034
4072
  return typeof value === "object" && value !== null && "then" in value;
4035
4073
  }
4036
- __name$20(isPromiseLike, "isPromiseLike");
4037
- var createSlotError = /* @__PURE__ */ __name$20((ownerName) => {
4074
+ __name$19(isPromiseLike, "isPromiseLike");
4075
+ var createSlotError = /* @__PURE__ */ __name$19((ownerName) => {
4038
4076
  return `${ownerName} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`;
4039
4077
  }, "createSlotError");
4040
- var createSlottableError = /* @__PURE__ */ __name$20((ownerName) => {
4078
+ var createSlottableError = /* @__PURE__ */ __name$19((ownerName) => {
4041
4079
  return `${ownerName} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`;
4042
4080
  }, "createSlottableError");
4043
4081
  var use$2 = React$10[" use ".trim().toString()];
4044
4082
 
4045
4083
  //#endregion
4046
4084
  //#region ../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.10_@types+react-dom@19.2.3_@types+react@19.2.17__@types+r_be17283a23f513d7b972453cc36e2a96/node_modules/@radix-ui/react-primitive/dist/index.mjs
4047
- var __defProp$21 = Object.defineProperty;
4048
- var __name$19 = (target, value) => __defProp$21(target, "name", {
4085
+ var __defProp$20 = Object.defineProperty;
4086
+ var __name$18 = (target, value) => __defProp$20(target, "name", {
4049
4087
  value,
4050
4088
  configurable: true
4051
4089
  });
@@ -4087,201 +4125,7 @@ var Primitive = [
4087
4125
  function dispatchDiscreteCustomEvent(target, event) {
4088
4126
  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));
4089
4127
  }
4090
- __name$19(dispatchDiscreteCustomEvent, "dispatchDiscreteCustomEvent");
4091
-
4092
- //#endregion
4093
- //#region ../../node_modules/.pnpm/@radix-ui+react-checkbox@1.3.11_@types+react-dom@19.2.3_@types+react@19.2.17__@types+re_f6e0f4835f2e28dbd2e5cb3844d005eb/node_modules/@radix-ui/react-checkbox/dist/index.mjs
4094
- var __defProp$20 = Object.defineProperty;
4095
- var __name$18 = (target, value) => __defProp$20(target, "name", {
4096
- value,
4097
- configurable: true
4098
- });
4099
- var CHECKBOX_NAME = "Checkbox";
4100
- var [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);
4101
- var [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);
4102
- function CheckboxProvider(props) {
4103
- const { __scopeCheckbox, checked: checkedProp, children, defaultChecked, disabled, form, name, onCheckedChange, required, value = "on", internal_do_not_use_render } = props;
4104
- const [checked, setChecked] = useControllableState({
4105
- prop: checkedProp,
4106
- defaultProp: defaultChecked ?? false,
4107
- onChange: onCheckedChange,
4108
- caller: CHECKBOX_NAME
4109
- });
4110
- const [control, setControl] = React$10.useState(null);
4111
- const [bubbleInput, setBubbleInput] = React$10.useState(null);
4112
- const hasConsumerStoppedPropagationRef = React$10.useRef(false);
4113
- const [userInteractionCount, onUserInteraction] = React$10.useReducer((count) => count + 1, 0);
4114
- const isFormControl = control ? !!form || !!control.closest("form") : true;
4115
- const context = {
4116
- checked,
4117
- disabled,
4118
- setChecked,
4119
- control,
4120
- setControl,
4121
- name,
4122
- form,
4123
- value,
4124
- hasConsumerStoppedPropagationRef,
4125
- userInteractionCount,
4126
- onUserInteraction,
4127
- required,
4128
- defaultChecked: isIndeterminate$1(defaultChecked) ? false : defaultChecked,
4129
- isFormControl,
4130
- bubbleInput,
4131
- setBubbleInput
4132
- };
4133
- return /* @__PURE__ */ jsx(CheckboxProviderImpl, {
4134
- scope: __scopeCheckbox,
4135
- ...context,
4136
- children: isFunction$1(internal_do_not_use_render) ? internal_do_not_use_render(context) : children
4137
- });
4138
- }
4139
- __name$18(CheckboxProvider, "CheckboxProvider");
4140
- var TRIGGER_NAME$2 = "CheckboxTrigger";
4141
- var CheckboxTrigger = /* @__PURE__ */ React$10.forwardRef(/* @__PURE__ */ __name$18(function CheckboxTrigger2({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) {
4142
- const { control, value, disabled, checked, required, setControl, setChecked, hasConsumerStoppedPropagationRef, onUserInteraction, isFormControl, bubbleInput } = useCheckboxContext(TRIGGER_NAME$2, __scopeCheckbox);
4143
- const composedRefs = useComposedRefs(forwardedRef, setControl);
4144
- const initialCheckedStateRef = React$10.useRef(checked);
4145
- React$10.useEffect(() => {
4146
- const form = control?.form;
4147
- if (form) {
4148
- const reset = /* @__PURE__ */ __name$18(() => setChecked(initialCheckedStateRef.current), "reset");
4149
- form.addEventListener("reset", reset);
4150
- return () => form.removeEventListener("reset", reset);
4151
- }
4152
- }, [control, setChecked]);
4153
- return /* @__PURE__ */ jsx(Primitive.button, {
4154
- type: "button",
4155
- role: "checkbox",
4156
- "aria-checked": isIndeterminate$1(checked) ? "mixed" : checked,
4157
- "aria-required": required,
4158
- "data-state": getState$2(checked),
4159
- "data-disabled": disabled ? "" : void 0,
4160
- disabled,
4161
- value,
4162
- ...checkboxProps,
4163
- ref: composedRefs,
4164
- onKeyDown: composeEventHandlers(onKeyDown, (event) => {
4165
- if (event.key === "Enter") event.preventDefault();
4166
- }),
4167
- onClick: composeEventHandlers(onClick, (event) => {
4168
- onUserInteraction();
4169
- setChecked((prevChecked) => isIndeterminate$1(prevChecked) ? true : !prevChecked);
4170
- if (bubbleInput && isFormControl) {
4171
- hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
4172
- if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
4173
- }
4174
- })
4175
- });
4176
- }, "CheckboxTrigger"));
4177
- var Checkbox$1 = /* @__PURE__ */ React$10.forwardRef(/* @__PURE__ */ __name$18(function Checkbox2(props, forwardedRef) {
4178
- const { __scopeCheckbox, name, checked, defaultChecked, required, disabled, value, onCheckedChange, form, ...checkboxProps } = props;
4179
- return /* @__PURE__ */ jsx(CheckboxProvider, {
4180
- __scopeCheckbox,
4181
- checked,
4182
- defaultChecked,
4183
- disabled,
4184
- required,
4185
- onCheckedChange,
4186
- name,
4187
- form,
4188
- value,
4189
- internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(CheckboxTrigger, {
4190
- ...checkboxProps,
4191
- ref: forwardedRef,
4192
- __scopeCheckbox
4193
- }), isFormControl && /* @__PURE__ */ jsx(CheckboxBubbleInput, { __scopeCheckbox })] })
4194
- });
4195
- }, "Checkbox"));
4196
- var INDICATOR_NAME = "CheckboxIndicator";
4197
- var CheckboxIndicator = /* @__PURE__ */ React$10.forwardRef(/* @__PURE__ */ __name$18(function CheckboxIndicator2(props, forwardedRef) {
4198
- const { __scopeCheckbox, forceMount, ...indicatorProps } = props;
4199
- const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);
4200
- return /* @__PURE__ */ jsx(Presence, {
4201
- present: forceMount || isIndeterminate$1(context.checked) || context.checked === true,
4202
- children: /* @__PURE__ */ jsx(Primitive.span, {
4203
- "data-state": getState$2(context.checked),
4204
- "data-disabled": context.disabled ? "" : void 0,
4205
- ...indicatorProps,
4206
- ref: forwardedRef,
4207
- style: {
4208
- pointerEvents: "none",
4209
- ...props.style
4210
- }
4211
- })
4212
- });
4213
- }, "CheckboxIndicator"));
4214
- var BUBBLE_INPUT_NAME$1 = "CheckboxBubbleInput";
4215
- var CheckboxBubbleInput = /* @__PURE__ */ React$10.forwardRef(/* @__PURE__ */ __name$18(function CheckboxBubbleInput2({ __scopeCheckbox, onClick, ...props }, forwardedRef) {
4216
- const { control, hasConsumerStoppedPropagationRef, userInteractionCount, checked, defaultChecked, required, disabled, name, value, form, bubbleInput, setBubbleInput } = useCheckboxContext(BUBBLE_INPUT_NAME$1, __scopeCheckbox);
4217
- const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);
4218
- const controlSize = useSize(control);
4219
- const shouldStopClickPropagationRef = React$10.useRef(false);
4220
- const prevCheckedRef = React$10.useRef(checked);
4221
- const prevUserInteractionCountRef = React$10.useRef(userInteractionCount);
4222
- React$10.useEffect(() => {
4223
- const input = bubbleInput;
4224
- if (!input) return;
4225
- const inputProto = window.HTMLInputElement.prototype;
4226
- const setChecked = Object.getOwnPropertyDescriptor(inputProto, "checked").set;
4227
- const isUserInteraction = userInteractionCount !== prevUserInteractionCountRef.current;
4228
- prevUserInteractionCountRef.current = userInteractionCount;
4229
- const checkedChanged = prevCheckedRef.current !== checked;
4230
- prevCheckedRef.current = checked;
4231
- const bubbles = !(isUserInteraction && hasConsumerStoppedPropagationRef.current);
4232
- if (checkedChanged && setChecked) {
4233
- shouldStopClickPropagationRef.current = !isUserInteraction;
4234
- const event = new Event("click", { bubbles });
4235
- input.indeterminate = isIndeterminate$1(checked);
4236
- setChecked.call(input, isIndeterminate$1(checked) ? false : checked);
4237
- input.dispatchEvent(event);
4238
- shouldStopClickPropagationRef.current = false;
4239
- }
4240
- }, [
4241
- bubbleInput,
4242
- checked,
4243
- hasConsumerStoppedPropagationRef,
4244
- userInteractionCount
4245
- ]);
4246
- const defaultCheckedRef = React$10.useRef(isIndeterminate$1(checked) ? false : checked);
4247
- return /* @__PURE__ */ jsx(Primitive.input, {
4248
- type: "checkbox",
4249
- "aria-hidden": true,
4250
- defaultChecked: defaultChecked ?? defaultCheckedRef.current,
4251
- required,
4252
- disabled,
4253
- name,
4254
- value,
4255
- form,
4256
- ...props,
4257
- tabIndex: -1,
4258
- ref: composedRefs,
4259
- onClick: composeEventHandlers(onClick, (event) => {
4260
- if (shouldStopClickPropagationRef.current) event.stopPropagation();
4261
- }),
4262
- style: {
4263
- ...props.style,
4264
- ...controlSize,
4265
- position: "absolute",
4266
- pointerEvents: "none",
4267
- opacity: 0,
4268
- margin: 0,
4269
- transform: "translateX(-100%)"
4270
- }
4271
- });
4272
- }, "CheckboxBubbleInput"));
4273
- function isFunction$1(value) {
4274
- return typeof value === "function";
4275
- }
4276
- __name$18(isFunction$1, "isFunction");
4277
- function isIndeterminate$1(checked) {
4278
- return checked === "indeterminate";
4279
- }
4280
- __name$18(isIndeterminate$1, "isIndeterminate");
4281
- function getState$2(checked) {
4282
- return isIndeterminate$1(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
4283
- }
4284
- __name$18(getState$2, "getState");
4128
+ __name$18(dispatchDiscreteCustomEvent, "dispatchDiscreteCustomEvent");
4285
4129
 
4286
4130
  //#endregion
4287
4131
  //#region ../../node_modules/.pnpm/@radix-ui+react-switch@1.3.7_@types+react-dom@19.2.3_@types+react@19.2.17__@types+react_e96baf15833549650471eefa4ffd78d0/node_modules/@radix-ui/react-switch/dist/index.mjs
@@ -99560,6 +99404,19 @@ const PanelLeft = createLucideIcon("panel-left", [["rect", {
99560
99404
  * This source code is licensed under the ISC license.
99561
99405
  * See the LICENSE file in the root directory of this source tree.
99562
99406
  */
99407
+ const Plus = createLucideIcon("plus", [["path", {
99408
+ d: "M5 12h14",
99409
+ key: "1ays0h"
99410
+ }], ["path", {
99411
+ d: "M12 5v14",
99412
+ key: "s699le"
99413
+ }]]);
99414
+ /**
99415
+ * @license lucide-react v1.27.0 - ISC
99416
+ *
99417
+ * This source code is licensed under the ISC license.
99418
+ * See the LICENSE file in the root directory of this source tree.
99419
+ */
99563
99420
  const Search = createLucideIcon("search", [["path", {
99564
99421
  d: "m21 21-4.34-4.34",
99565
99422
  key: "14j7rj"
@@ -99624,31 +99481,43 @@ function Button({ variant = "primary", size = "md", loading = false, icon, disab
99624
99481
  }) : icon, children]
99625
99482
  });
99626
99483
  }
99627
- /** Source-owned input with a consistent form-control and validation surface. */
99484
+ /**
99485
+ * 全仓唯一一份复制到剪贴板的状态机(S12)。
99486
+ * `copied` 为真时忽略重复点击,`resetDelayMs` 后自动复位。
99487
+ */
99488
+ function useCopyToClipboard(resetDelayMs = 2e3) {
99489
+ const [copied, setCopied] = useState(false);
99490
+ return {
99491
+ copied,
99492
+ copy: useCallback((value) => {
99493
+ if (copied || value === "") return;
99494
+ navigator.clipboard.writeText(value).then(() => {
99495
+ setCopied(true);
99496
+ setTimeout(() => setCopied(false), resetDelayMs);
99497
+ });
99498
+ }, [copied, resetDelayMs])
99499
+ };
99500
+ }
99501
+ /**
99502
+ * Source-owned input with a consistent form-control and validation surface.
99503
+ *
99504
+ * 宽/高/内边距的默认值在 `.webskill-input`(components 层),消费方的 `w-*` / `h-*` / `px-*` 能确定性地压过它;
99505
+ * 写在基类里则同层同特异性,全仓已有 8 个文件因此静默失效。
99506
+ * 基类锁定 `rounded`(className 覆盖不生效):表单控件圆角体系统一。
99507
+ */
99628
99508
  function Input({ className = "", invalid = false, type = "text", "aria-invalid": ariaInvalid, ...props }) {
99629
99509
  return /* @__PURE__ */ jsx("input", {
99630
99510
  type,
99631
99511
  "aria-invalid": invalid ? true : ariaInvalid,
99632
- className: `h-9 w-full rounded-md border bg-surface px-3 text-sm text-ink shadow-xs outline-none transition-colors placeholder:text-muted disabled:cursor-not-allowed disabled:opacity-50 ${invalid ? "border-destructive focus-visible:ring-destructive/20" : "border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20"} ${className}`,
99512
+ className: `webskill-input rounded-md border bg-surface text-sm text-ink shadow-xs outline-none transition-colors placeholder:text-muted disabled:cursor-not-allowed disabled:opacity-50 ${invalid ? "border-destructive focus-visible:ring-destructive/20" : "border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20"} ${className}`,
99633
99513
  ...props
99634
99514
  });
99635
99515
  }
99636
- /** Source-owned shadcn-style checkbox backed by Radix for keyboard semantics. */
99637
- function Checkbox({ className = "", invalid = false, "aria-invalid": ariaInvalid, ...props }) {
99638
- return /* @__PURE__ */ jsx(Checkbox$1, {
99639
- "aria-invalid": invalid ? true : ariaInvalid,
99640
- className: `inline-flex size-4 shrink-0 items-center justify-center rounded-sm border bg-surface shadow-xs outline-none transition-colors disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground ${invalid ? "border-destructive focus-visible:ring-destructive/20" : "border-input focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20"} ${className}`,
99641
- ...props,
99642
- children: /* @__PURE__ */ jsx(CheckboxIndicator, {
99643
- className: "flex items-center justify-center",
99644
- children: /* @__PURE__ */ jsx(Check, {
99645
- className: "size-3",
99646
- "aria-hidden": true
99647
- })
99648
- })
99649
- });
99650
- }
99651
- /** Source-owned textarea with the same form-control states as Input. */
99516
+ /**
99517
+ * Source-owned textarea with the same form-control states as Input.
99518
+ *
99519
+ * 基类锁定 `w` `h` `p` `rounded`(className 覆盖不生效):同 `Input`。
99520
+ */
99652
99521
  function Textarea({ className = "", invalid = false, "aria-invalid": ariaInvalid, ...props }) {
99653
99522
  return /* @__PURE__ */ jsx("textarea", {
99654
99523
  "aria-invalid": invalid ? true : ariaInvalid,
@@ -99656,7 +99525,11 @@ function Textarea({ className = "", invalid = false, "aria-invalid": ariaInvalid
99656
99525
  ...props
99657
99526
  });
99658
99527
  }
99659
- /** Source-owned shadcn-style switch backed by Radix keyboard semantics. */
99528
+ /**
99529
+ * Source-owned shadcn-style switch backed by Radix keyboard semantics.
99530
+ *
99531
+ * 基类锁定 `w` `h` `p` `rounded`(className 覆盖不生效):轨道与滑块尺寸互相计算,任改一项即错位。
99532
+ */
99660
99533
  function Switch({ className = "", label, ...props }) {
99661
99534
  const control = /* @__PURE__ */ jsx(Switch$1, {
99662
99535
  className: `inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full bg-border p-0.5 outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/20 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary ${className}`,
@@ -99672,7 +99545,28 @@ function Switch({ className = "", label, ...props }) {
99672
99545
  })]
99673
99546
  });
99674
99547
  }
99548
+ /**
99549
+ * 一个 SDK 实例的主题作用域(0.6.0 FR-20.4)。
99550
+ *
99551
+ * 解决两件事:
99552
+ * 1. Radix 的 Portal 默认渲染到 `document.body`,会逃出主题子树 —— 这里在作用域**内部**
99553
+ * 提供一个 Portal 容器,浮层因此仍处在带主题类名的祖先链下;
99554
+ * 2. 原生 `<select>` 的下拉由浏览器按 `color-scheme` 绘制,类名管不到 —— 容器上的
99555
+ * `data-webskill-theme` 属性在 base.css 里显式声明了 `color-scheme`。
99556
+ *
99557
+ * 宿主页面自身的类名不被改动:作用域只作用于自己的子树。
99558
+ */
99559
+ const PortalContainerContext = createContext(void 0);
99560
+ /**
99561
+ * 当前实例的 Portal 容器;不在 `ThemeScope` 内时返回 `undefined`,
99562
+ * 调用方据此回落到 Radix 默认的 `document.body`。
99563
+ * @experimental
99564
+ */
99565
+ function usePortalContainer() {
99566
+ return useContext(PortalContainerContext);
99567
+ }
99675
99568
  const DropdownMenu = Root2;
99569
+ /** 基类锁定 `h` `p` `rounded`(className 覆盖不生效):触发器与 `Button` 保持同高。 */
99676
99570
  function DropdownMenuTrigger({ children, className = "", asChild, ...props }) {
99677
99571
  const triggerClass = asChild ? className : `inline-flex h-9 items-center justify-center rounded-md border border-border bg-surface px-3 text-sm font-medium text-ink shadow-xs outline-none transition-colors hover:bg-subtle focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/20 ${className}`;
99678
99572
  return /* @__PURE__ */ jsx(Trigger, {
@@ -99682,14 +99576,22 @@ function DropdownMenuTrigger({ children, className = "", asChild, ...props }) {
99682
99576
  children
99683
99577
  });
99684
99578
  }
99579
+ /**
99580
+ * 浮层宽度下限默认值在 `.webskill-dropdown-content`(components 层),消费方的 `min-w-*` 能确定性地压过它。
99581
+ * 基类锁定 `p` `rounded` `z`(className 覆盖不生效):`z-50` 属 ui-kit 的整体层级契约,逐个覆盖会让层级关系变成运气。
99582
+ */
99685
99583
  function DropdownMenuContent({ children, className = "", sideOffset = 6, ...props }) {
99686
- return /* @__PURE__ */ jsx(Portal2, { children: /* @__PURE__ */ jsx(Content2, {
99687
- sideOffset,
99688
- className: `z-50 min-w-40 rounded-md border border-border bg-surface p-1 text-sm text-ink shadow-pop outline-none ${className}`,
99689
- ...props,
99690
- children
99691
- }) });
99584
+ return /* @__PURE__ */ jsx(Portal2, {
99585
+ container: usePortalContainer(),
99586
+ children: /* @__PURE__ */ jsx(Content2, {
99587
+ sideOffset,
99588
+ className: `webskill-dropdown-content z-50 rounded-md border border-border bg-surface p-1 text-sm text-ink shadow-pop outline-none ${className}`,
99589
+ ...props,
99590
+ children
99591
+ })
99592
+ });
99692
99593
  }
99594
+ /** 基类锁定 `p` `rounded`(className 覆盖不生效):左内边距与勾选标记位置耦合。 */
99693
99595
  function DropdownMenuCheckboxItem({ children, className = "", ...props }) {
99694
99596
  return /* @__PURE__ */ jsxs(CheckboxItem2, {
99695
99597
  className: `relative flex cursor-pointer items-center rounded-sm py-1.5 pr-2 pl-7 text-sm outline-none transition-colors data-[highlighted]:bg-subtle data-[disabled]:pointer-events-none data-[disabled]:opacity-50 ${className}`,
@@ -99738,7 +99640,11 @@ function Separator({ className = "", orientation = "horizontal", decorative = tr
99738
99640
  const CommandEmpty = _e.Empty;
99739
99641
  const CommandGroup = _e.Group;
99740
99642
  const CommandSeparator = _e.Separator;
99741
- /** Semantic table primitive for compact operational data. */
99643
+ /**
99644
+ * Semantic table primitive for compact operational data.
99645
+ *
99646
+ * 基类锁定 `w`(className 覆盖不生效):`w-full` 是表格约定。
99647
+ */
99742
99648
  function Table({ className = "", ...props }) {
99743
99649
  return /* @__PURE__ */ jsx("table", {
99744
99650
  className: `w-full caption-bottom text-sm ${className}`,
@@ -99748,6 +99654,8 @@ function Table({ className = "", ...props }) {
99748
99654
  /**
99749
99655
  * Source-owned shadcn-style table foundation.
99750
99656
  * The wrapper owns the visible frame and horizontal overflow; consumers own data behavior.
99657
+ *
99658
+ * 基类锁定 `min-w`(className 覆盖不生效):`min-w-max` 是横向滚动的前提。
99751
99659
  */
99752
99660
  function DataTable({ children, className = "", containerClassName = "", ...props }) {
99753
99661
  return /* @__PURE__ */ jsx(ScrollArea, {
@@ -99767,6 +99675,7 @@ const toneClasses$1 = {
99767
99675
  info: "bg-info-soft text-info",
99768
99676
  danger: "bg-destructive-soft text-destructive"
99769
99677
  };
99678
+ /** 基类锁定 `p` `rounded`(className 覆盖不生效):药丸形状是组件身份,要换形状请换组件。 */
99770
99679
  function Badge({ tone = "neutral", className = "", children, ...rest }) {
99771
99680
  return /* @__PURE__ */ jsx("span", {
99772
99681
  className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium ${toneClasses$1[tone]} ${className}`,
@@ -116091,564 +116000,6 @@ function defaultUrlTransform(value) {
116091
116000
  if (colon === -1 || slash !== -1 && colon > slash || questionMark !== -1 && colon > questionMark || numberSign !== -1 && colon > numberSign || safeProtocol.test(value.slice(0, colon))) return value;
116092
116001
  return "";
116093
116002
  }
116094
- var one_dark_default = {
116095
- "code[class*=\"language-\"]": {
116096
- "background": "hsl(220, 13%, 18%)",
116097
- "color": "hsl(220, 14%, 71%)",
116098
- "textShadow": "0 1px rgba(0, 0, 0, 0.3)",
116099
- "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
116100
- "direction": "ltr",
116101
- "textAlign": "left",
116102
- "whiteSpace": "pre",
116103
- "wordSpacing": "normal",
116104
- "wordBreak": "normal",
116105
- "lineHeight": "1.5",
116106
- "MozTabSize": "2",
116107
- "OTabSize": "2",
116108
- "tabSize": "2",
116109
- "WebkitHyphens": "none",
116110
- "MozHyphens": "none",
116111
- "msHyphens": "none",
116112
- "hyphens": "none"
116113
- },
116114
- "pre[class*=\"language-\"]": {
116115
- "background": "hsl(220, 13%, 18%)",
116116
- "color": "hsl(220, 14%, 71%)",
116117
- "textShadow": "0 1px rgba(0, 0, 0, 0.3)",
116118
- "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
116119
- "direction": "ltr",
116120
- "textAlign": "left",
116121
- "whiteSpace": "pre",
116122
- "wordSpacing": "normal",
116123
- "wordBreak": "normal",
116124
- "lineHeight": "1.5",
116125
- "MozTabSize": "2",
116126
- "OTabSize": "2",
116127
- "tabSize": "2",
116128
- "WebkitHyphens": "none",
116129
- "MozHyphens": "none",
116130
- "msHyphens": "none",
116131
- "hyphens": "none",
116132
- "padding": "1em",
116133
- "margin": "0.5em 0",
116134
- "overflow": "auto",
116135
- "borderRadius": "0.3em"
116136
- },
116137
- "code[class*=\"language-\"]::-moz-selection": {
116138
- "background": "hsl(220, 13%, 28%)",
116139
- "color": "inherit",
116140
- "textShadow": "none"
116141
- },
116142
- "code[class*=\"language-\"] *::-moz-selection": {
116143
- "background": "hsl(220, 13%, 28%)",
116144
- "color": "inherit",
116145
- "textShadow": "none"
116146
- },
116147
- "pre[class*=\"language-\"] *::-moz-selection": {
116148
- "background": "hsl(220, 13%, 28%)",
116149
- "color": "inherit",
116150
- "textShadow": "none"
116151
- },
116152
- "code[class*=\"language-\"]::selection": {
116153
- "background": "hsl(220, 13%, 28%)",
116154
- "color": "inherit",
116155
- "textShadow": "none"
116156
- },
116157
- "code[class*=\"language-\"] *::selection": {
116158
- "background": "hsl(220, 13%, 28%)",
116159
- "color": "inherit",
116160
- "textShadow": "none"
116161
- },
116162
- "pre[class*=\"language-\"] *::selection": {
116163
- "background": "hsl(220, 13%, 28%)",
116164
- "color": "inherit",
116165
- "textShadow": "none"
116166
- },
116167
- ":not(pre) > code[class*=\"language-\"]": {
116168
- "padding": "0.2em 0.3em",
116169
- "borderRadius": "0.3em",
116170
- "whiteSpace": "normal"
116171
- },
116172
- "comment": {
116173
- "color": "hsl(220, 10%, 40%)",
116174
- "fontStyle": "italic"
116175
- },
116176
- "prolog": { "color": "hsl(220, 10%, 40%)" },
116177
- "cdata": { "color": "hsl(220, 10%, 40%)" },
116178
- "doctype": { "color": "hsl(220, 14%, 71%)" },
116179
- "punctuation": { "color": "hsl(220, 14%, 71%)" },
116180
- "entity": {
116181
- "color": "hsl(220, 14%, 71%)",
116182
- "cursor": "help"
116183
- },
116184
- "attr-name": { "color": "hsl(29, 54%, 61%)" },
116185
- "class-name": { "color": "hsl(29, 54%, 61%)" },
116186
- "boolean": { "color": "hsl(29, 54%, 61%)" },
116187
- "constant": { "color": "hsl(29, 54%, 61%)" },
116188
- "number": { "color": "hsl(29, 54%, 61%)" },
116189
- "atrule": { "color": "hsl(29, 54%, 61%)" },
116190
- "keyword": { "color": "hsl(286, 60%, 67%)" },
116191
- "property": { "color": "hsl(355, 65%, 65%)" },
116192
- "tag": { "color": "hsl(355, 65%, 65%)" },
116193
- "symbol": { "color": "hsl(355, 65%, 65%)" },
116194
- "deleted": { "color": "hsl(355, 65%, 65%)" },
116195
- "important": { "color": "hsl(355, 65%, 65%)" },
116196
- "selector": { "color": "hsl(95, 38%, 62%)" },
116197
- "string": { "color": "hsl(95, 38%, 62%)" },
116198
- "char": { "color": "hsl(95, 38%, 62%)" },
116199
- "builtin": { "color": "hsl(95, 38%, 62%)" },
116200
- "inserted": { "color": "hsl(95, 38%, 62%)" },
116201
- "regex": { "color": "hsl(95, 38%, 62%)" },
116202
- "attr-value": { "color": "hsl(95, 38%, 62%)" },
116203
- "attr-value > .token.punctuation": { "color": "hsl(95, 38%, 62%)" },
116204
- "variable": { "color": "hsl(207, 82%, 66%)" },
116205
- "operator": { "color": "hsl(207, 82%, 66%)" },
116206
- "function": { "color": "hsl(207, 82%, 66%)" },
116207
- "url": { "color": "hsl(187, 47%, 55%)" },
116208
- "attr-value > .token.punctuation.attr-equals": { "color": "hsl(220, 14%, 71%)" },
116209
- "special-attr > .token.attr-value > .token.value.css": { "color": "hsl(220, 14%, 71%)" },
116210
- ".language-css .token.selector": { "color": "hsl(355, 65%, 65%)" },
116211
- ".language-css .token.property": { "color": "hsl(220, 14%, 71%)" },
116212
- ".language-css .token.function": { "color": "hsl(187, 47%, 55%)" },
116213
- ".language-css .token.url > .token.function": { "color": "hsl(187, 47%, 55%)" },
116214
- ".language-css .token.url > .token.string.url": { "color": "hsl(95, 38%, 62%)" },
116215
- ".language-css .token.important": { "color": "hsl(286, 60%, 67%)" },
116216
- ".language-css .token.atrule .token.rule": { "color": "hsl(286, 60%, 67%)" },
116217
- ".language-javascript .token.operator": { "color": "hsl(286, 60%, 67%)" },
116218
- ".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation": { "color": "hsl(5, 48%, 51%)" },
116219
- ".language-json .token.operator": { "color": "hsl(220, 14%, 71%)" },
116220
- ".language-json .token.null.keyword": { "color": "hsl(29, 54%, 61%)" },
116221
- ".language-markdown .token.url": { "color": "hsl(220, 14%, 71%)" },
116222
- ".language-markdown .token.url > .token.operator": { "color": "hsl(220, 14%, 71%)" },
116223
- ".language-markdown .token.url-reference.url > .token.string": { "color": "hsl(220, 14%, 71%)" },
116224
- ".language-markdown .token.url > .token.content": { "color": "hsl(207, 82%, 66%)" },
116225
- ".language-markdown .token.url > .token.url": { "color": "hsl(187, 47%, 55%)" },
116226
- ".language-markdown .token.url-reference.url": { "color": "hsl(187, 47%, 55%)" },
116227
- ".language-markdown .token.blockquote.punctuation": {
116228
- "color": "hsl(220, 10%, 40%)",
116229
- "fontStyle": "italic"
116230
- },
116231
- ".language-markdown .token.hr.punctuation": {
116232
- "color": "hsl(220, 10%, 40%)",
116233
- "fontStyle": "italic"
116234
- },
116235
- ".language-markdown .token.code-snippet": { "color": "hsl(95, 38%, 62%)" },
116236
- ".language-markdown .token.bold .token.content": { "color": "hsl(29, 54%, 61%)" },
116237
- ".language-markdown .token.italic .token.content": { "color": "hsl(286, 60%, 67%)" },
116238
- ".language-markdown .token.strike .token.content": { "color": "hsl(355, 65%, 65%)" },
116239
- ".language-markdown .token.strike .token.punctuation": { "color": "hsl(355, 65%, 65%)" },
116240
- ".language-markdown .token.list.punctuation": { "color": "hsl(355, 65%, 65%)" },
116241
- ".language-markdown .token.title.important > .token.punctuation": { "color": "hsl(355, 65%, 65%)" },
116242
- "bold": { "fontWeight": "bold" },
116243
- "italic": { "fontStyle": "italic" },
116244
- "namespace": { "Opacity": "0.8" },
116245
- "token.tab:not(:empty):before": {
116246
- "color": "hsla(220, 14%, 71%, 0.15)",
116247
- "textShadow": "none"
116248
- },
116249
- "token.cr:before": {
116250
- "color": "hsla(220, 14%, 71%, 0.15)",
116251
- "textShadow": "none"
116252
- },
116253
- "token.lf:before": {
116254
- "color": "hsla(220, 14%, 71%, 0.15)",
116255
- "textShadow": "none"
116256
- },
116257
- "token.space:before": {
116258
- "color": "hsla(220, 14%, 71%, 0.15)",
116259
- "textShadow": "none"
116260
- },
116261
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item": { "marginRight": "0.4em" },
116262
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button": {
116263
- "background": "hsl(220, 13%, 26%)",
116264
- "color": "hsl(220, 9%, 55%)",
116265
- "padding": "0.1em 0.4em",
116266
- "borderRadius": "0.3em"
116267
- },
116268
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a": {
116269
- "background": "hsl(220, 13%, 26%)",
116270
- "color": "hsl(220, 9%, 55%)",
116271
- "padding": "0.1em 0.4em",
116272
- "borderRadius": "0.3em"
116273
- },
116274
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span": {
116275
- "background": "hsl(220, 13%, 26%)",
116276
- "color": "hsl(220, 9%, 55%)",
116277
- "padding": "0.1em 0.4em",
116278
- "borderRadius": "0.3em"
116279
- },
116280
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover": {
116281
- "background": "hsl(220, 13%, 28%)",
116282
- "color": "hsl(220, 14%, 71%)"
116283
- },
116284
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus": {
116285
- "background": "hsl(220, 13%, 28%)",
116286
- "color": "hsl(220, 14%, 71%)"
116287
- },
116288
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover": {
116289
- "background": "hsl(220, 13%, 28%)",
116290
- "color": "hsl(220, 14%, 71%)"
116291
- },
116292
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus": {
116293
- "background": "hsl(220, 13%, 28%)",
116294
- "color": "hsl(220, 14%, 71%)"
116295
- },
116296
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover": {
116297
- "background": "hsl(220, 13%, 28%)",
116298
- "color": "hsl(220, 14%, 71%)"
116299
- },
116300
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus": {
116301
- "background": "hsl(220, 13%, 28%)",
116302
- "color": "hsl(220, 14%, 71%)"
116303
- },
116304
- ".line-highlight.line-highlight": { "background": "hsla(220, 100%, 80%, 0.04)" },
116305
- ".line-highlight.line-highlight:before": {
116306
- "background": "hsl(220, 13%, 26%)",
116307
- "color": "hsl(220, 14%, 71%)",
116308
- "padding": "0.1em 0.6em",
116309
- "borderRadius": "0.3em",
116310
- "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
116311
- },
116312
- ".line-highlight.line-highlight[data-end]:after": {
116313
- "background": "hsl(220, 13%, 26%)",
116314
- "color": "hsl(220, 14%, 71%)",
116315
- "padding": "0.1em 0.6em",
116316
- "borderRadius": "0.3em",
116317
- "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
116318
- },
116319
- "pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before": { "backgroundColor": "hsla(220, 100%, 80%, 0.04)" },
116320
- ".line-numbers.line-numbers .line-numbers-rows": { "borderRightColor": "hsla(220, 14%, 71%, 0.15)" },
116321
- ".command-line .command-line-prompt": { "borderRightColor": "hsla(220, 14%, 71%, 0.15)" },
116322
- ".line-numbers .line-numbers-rows > span:before": { "color": "hsl(220, 14%, 45%)" },
116323
- ".command-line .command-line-prompt > span:before": { "color": "hsl(220, 14%, 45%)" },
116324
- ".rainbow-braces .token.token.punctuation.brace-level-1": { "color": "hsl(355, 65%, 65%)" },
116325
- ".rainbow-braces .token.token.punctuation.brace-level-5": { "color": "hsl(355, 65%, 65%)" },
116326
- ".rainbow-braces .token.token.punctuation.brace-level-9": { "color": "hsl(355, 65%, 65%)" },
116327
- ".rainbow-braces .token.token.punctuation.brace-level-2": { "color": "hsl(95, 38%, 62%)" },
116328
- ".rainbow-braces .token.token.punctuation.brace-level-6": { "color": "hsl(95, 38%, 62%)" },
116329
- ".rainbow-braces .token.token.punctuation.brace-level-10": { "color": "hsl(95, 38%, 62%)" },
116330
- ".rainbow-braces .token.token.punctuation.brace-level-3": { "color": "hsl(207, 82%, 66%)" },
116331
- ".rainbow-braces .token.token.punctuation.brace-level-7": { "color": "hsl(207, 82%, 66%)" },
116332
- ".rainbow-braces .token.token.punctuation.brace-level-11": { "color": "hsl(207, 82%, 66%)" },
116333
- ".rainbow-braces .token.token.punctuation.brace-level-4": { "color": "hsl(286, 60%, 67%)" },
116334
- ".rainbow-braces .token.token.punctuation.brace-level-8": { "color": "hsl(286, 60%, 67%)" },
116335
- ".rainbow-braces .token.token.punctuation.brace-level-12": { "color": "hsl(286, 60%, 67%)" },
116336
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
116337
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
116338
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116339
- "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116340
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116341
- "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116342
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116343
- "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116344
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116345
- "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116346
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
116347
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
116348
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116349
- "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116350
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116351
- "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116352
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116353
- "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116354
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116355
- "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116356
- ".prism-previewer.prism-previewer:before": { "borderColor": "hsl(224, 13%, 17%)" },
116357
- ".prism-previewer-gradient.prism-previewer-gradient div": {
116358
- "borderColor": "hsl(224, 13%, 17%)",
116359
- "borderRadius": "0.3em"
116360
- },
116361
- ".prism-previewer-color.prism-previewer-color:before": { "borderRadius": "0.3em" },
116362
- ".prism-previewer-easing.prism-previewer-easing:before": { "borderRadius": "0.3em" },
116363
- ".prism-previewer.prism-previewer:after": { "borderTopColor": "hsl(224, 13%, 17%)" },
116364
- ".prism-previewer-flipped.prism-previewer-flipped.after": { "borderBottomColor": "hsl(224, 13%, 17%)" },
116365
- ".prism-previewer-angle.prism-previewer-angle:before": { "background": "hsl(219, 13%, 22%)" },
116366
- ".prism-previewer-time.prism-previewer-time:before": { "background": "hsl(219, 13%, 22%)" },
116367
- ".prism-previewer-easing.prism-previewer-easing": { "background": "hsl(219, 13%, 22%)" },
116368
- ".prism-previewer-angle.prism-previewer-angle circle": {
116369
- "stroke": "hsl(220, 14%, 71%)",
116370
- "strokeOpacity": "1"
116371
- },
116372
- ".prism-previewer-time.prism-previewer-time circle": {
116373
- "stroke": "hsl(220, 14%, 71%)",
116374
- "strokeOpacity": "1"
116375
- },
116376
- ".prism-previewer-easing.prism-previewer-easing circle": {
116377
- "stroke": "hsl(220, 14%, 71%)",
116378
- "fill": "transparent"
116379
- },
116380
- ".prism-previewer-easing.prism-previewer-easing path": { "stroke": "hsl(220, 14%, 71%)" },
116381
- ".prism-previewer-easing.prism-previewer-easing line": { "stroke": "hsl(220, 14%, 71%)" }
116382
- };
116383
- var one_light_default = {
116384
- "code[class*=\"language-\"]": {
116385
- "background": "hsl(230, 1%, 98%)",
116386
- "color": "hsl(230, 8%, 24%)",
116387
- "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
116388
- "direction": "ltr",
116389
- "textAlign": "left",
116390
- "whiteSpace": "pre",
116391
- "wordSpacing": "normal",
116392
- "wordBreak": "normal",
116393
- "lineHeight": "1.5",
116394
- "MozTabSize": "2",
116395
- "OTabSize": "2",
116396
- "tabSize": "2",
116397
- "WebkitHyphens": "none",
116398
- "MozHyphens": "none",
116399
- "msHyphens": "none",
116400
- "hyphens": "none"
116401
- },
116402
- "pre[class*=\"language-\"]": {
116403
- "background": "hsl(230, 1%, 98%)",
116404
- "color": "hsl(230, 8%, 24%)",
116405
- "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
116406
- "direction": "ltr",
116407
- "textAlign": "left",
116408
- "whiteSpace": "pre",
116409
- "wordSpacing": "normal",
116410
- "wordBreak": "normal",
116411
- "lineHeight": "1.5",
116412
- "MozTabSize": "2",
116413
- "OTabSize": "2",
116414
- "tabSize": "2",
116415
- "WebkitHyphens": "none",
116416
- "MozHyphens": "none",
116417
- "msHyphens": "none",
116418
- "hyphens": "none",
116419
- "padding": "1em",
116420
- "margin": "0.5em 0",
116421
- "overflow": "auto",
116422
- "borderRadius": "0.3em"
116423
- },
116424
- "code[class*=\"language-\"]::-moz-selection": {
116425
- "background": "hsl(230, 1%, 90%)",
116426
- "color": "inherit"
116427
- },
116428
- "code[class*=\"language-\"] *::-moz-selection": {
116429
- "background": "hsl(230, 1%, 90%)",
116430
- "color": "inherit"
116431
- },
116432
- "pre[class*=\"language-\"] *::-moz-selection": {
116433
- "background": "hsl(230, 1%, 90%)",
116434
- "color": "inherit"
116435
- },
116436
- "code[class*=\"language-\"]::selection": {
116437
- "background": "hsl(230, 1%, 90%)",
116438
- "color": "inherit"
116439
- },
116440
- "code[class*=\"language-\"] *::selection": {
116441
- "background": "hsl(230, 1%, 90%)",
116442
- "color": "inherit"
116443
- },
116444
- "pre[class*=\"language-\"] *::selection": {
116445
- "background": "hsl(230, 1%, 90%)",
116446
- "color": "inherit"
116447
- },
116448
- ":not(pre) > code[class*=\"language-\"]": {
116449
- "padding": "0.2em 0.3em",
116450
- "borderRadius": "0.3em",
116451
- "whiteSpace": "normal"
116452
- },
116453
- "comment": {
116454
- "color": "hsl(230, 4%, 64%)",
116455
- "fontStyle": "italic"
116456
- },
116457
- "prolog": { "color": "hsl(230, 4%, 64%)" },
116458
- "cdata": { "color": "hsl(230, 4%, 64%)" },
116459
- "doctype": { "color": "hsl(230, 8%, 24%)" },
116460
- "punctuation": { "color": "hsl(230, 8%, 24%)" },
116461
- "entity": {
116462
- "color": "hsl(230, 8%, 24%)",
116463
- "cursor": "help"
116464
- },
116465
- "attr-name": { "color": "hsl(35, 99%, 36%)" },
116466
- "class-name": { "color": "hsl(35, 99%, 36%)" },
116467
- "boolean": { "color": "hsl(35, 99%, 36%)" },
116468
- "constant": { "color": "hsl(35, 99%, 36%)" },
116469
- "number": { "color": "hsl(35, 99%, 36%)" },
116470
- "atrule": { "color": "hsl(35, 99%, 36%)" },
116471
- "keyword": { "color": "hsl(301, 63%, 40%)" },
116472
- "property": { "color": "hsl(5, 74%, 59%)" },
116473
- "tag": { "color": "hsl(5, 74%, 59%)" },
116474
- "symbol": { "color": "hsl(5, 74%, 59%)" },
116475
- "deleted": { "color": "hsl(5, 74%, 59%)" },
116476
- "important": { "color": "hsl(5, 74%, 59%)" },
116477
- "selector": { "color": "hsl(119, 34%, 47%)" },
116478
- "string": { "color": "hsl(119, 34%, 47%)" },
116479
- "char": { "color": "hsl(119, 34%, 47%)" },
116480
- "builtin": { "color": "hsl(119, 34%, 47%)" },
116481
- "inserted": { "color": "hsl(119, 34%, 47%)" },
116482
- "regex": { "color": "hsl(119, 34%, 47%)" },
116483
- "attr-value": { "color": "hsl(119, 34%, 47%)" },
116484
- "attr-value > .token.punctuation": { "color": "hsl(119, 34%, 47%)" },
116485
- "variable": { "color": "hsl(221, 87%, 60%)" },
116486
- "operator": { "color": "hsl(221, 87%, 60%)" },
116487
- "function": { "color": "hsl(221, 87%, 60%)" },
116488
- "url": { "color": "hsl(198, 99%, 37%)" },
116489
- "attr-value > .token.punctuation.attr-equals": { "color": "hsl(230, 8%, 24%)" },
116490
- "special-attr > .token.attr-value > .token.value.css": { "color": "hsl(230, 8%, 24%)" },
116491
- ".language-css .token.selector": { "color": "hsl(5, 74%, 59%)" },
116492
- ".language-css .token.property": { "color": "hsl(230, 8%, 24%)" },
116493
- ".language-css .token.function": { "color": "hsl(198, 99%, 37%)" },
116494
- ".language-css .token.url > .token.function": { "color": "hsl(198, 99%, 37%)" },
116495
- ".language-css .token.url > .token.string.url": { "color": "hsl(119, 34%, 47%)" },
116496
- ".language-css .token.important": { "color": "hsl(301, 63%, 40%)" },
116497
- ".language-css .token.atrule .token.rule": { "color": "hsl(301, 63%, 40%)" },
116498
- ".language-javascript .token.operator": { "color": "hsl(301, 63%, 40%)" },
116499
- ".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation": { "color": "hsl(344, 84%, 43%)" },
116500
- ".language-json .token.operator": { "color": "hsl(230, 8%, 24%)" },
116501
- ".language-json .token.null.keyword": { "color": "hsl(35, 99%, 36%)" },
116502
- ".language-markdown .token.url": { "color": "hsl(230, 8%, 24%)" },
116503
- ".language-markdown .token.url > .token.operator": { "color": "hsl(230, 8%, 24%)" },
116504
- ".language-markdown .token.url-reference.url > .token.string": { "color": "hsl(230, 8%, 24%)" },
116505
- ".language-markdown .token.url > .token.content": { "color": "hsl(221, 87%, 60%)" },
116506
- ".language-markdown .token.url > .token.url": { "color": "hsl(198, 99%, 37%)" },
116507
- ".language-markdown .token.url-reference.url": { "color": "hsl(198, 99%, 37%)" },
116508
- ".language-markdown .token.blockquote.punctuation": {
116509
- "color": "hsl(230, 4%, 64%)",
116510
- "fontStyle": "italic"
116511
- },
116512
- ".language-markdown .token.hr.punctuation": {
116513
- "color": "hsl(230, 4%, 64%)",
116514
- "fontStyle": "italic"
116515
- },
116516
- ".language-markdown .token.code-snippet": { "color": "hsl(119, 34%, 47%)" },
116517
- ".language-markdown .token.bold .token.content": { "color": "hsl(35, 99%, 36%)" },
116518
- ".language-markdown .token.italic .token.content": { "color": "hsl(301, 63%, 40%)" },
116519
- ".language-markdown .token.strike .token.content": { "color": "hsl(5, 74%, 59%)" },
116520
- ".language-markdown .token.strike .token.punctuation": { "color": "hsl(5, 74%, 59%)" },
116521
- ".language-markdown .token.list.punctuation": { "color": "hsl(5, 74%, 59%)" },
116522
- ".language-markdown .token.title.important > .token.punctuation": { "color": "hsl(5, 74%, 59%)" },
116523
- "bold": { "fontWeight": "bold" },
116524
- "italic": { "fontStyle": "italic" },
116525
- "namespace": { "Opacity": "0.8" },
116526
- "token.tab:not(:empty):before": { "color": "hsla(230, 8%, 24%, 0.2)" },
116527
- "token.cr:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
116528
- "token.lf:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
116529
- "token.space:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
116530
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item": { "marginRight": "0.4em" },
116531
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button": {
116532
- "background": "hsl(230, 1%, 90%)",
116533
- "color": "hsl(230, 6%, 44%)",
116534
- "padding": "0.1em 0.4em",
116535
- "borderRadius": "0.3em"
116536
- },
116537
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a": {
116538
- "background": "hsl(230, 1%, 90%)",
116539
- "color": "hsl(230, 6%, 44%)",
116540
- "padding": "0.1em 0.4em",
116541
- "borderRadius": "0.3em"
116542
- },
116543
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span": {
116544
- "background": "hsl(230, 1%, 90%)",
116545
- "color": "hsl(230, 6%, 44%)",
116546
- "padding": "0.1em 0.4em",
116547
- "borderRadius": "0.3em"
116548
- },
116549
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover": {
116550
- "background": "hsl(230, 1%, 78%)",
116551
- "color": "hsl(230, 8%, 24%)"
116552
- },
116553
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus": {
116554
- "background": "hsl(230, 1%, 78%)",
116555
- "color": "hsl(230, 8%, 24%)"
116556
- },
116557
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover": {
116558
- "background": "hsl(230, 1%, 78%)",
116559
- "color": "hsl(230, 8%, 24%)"
116560
- },
116561
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus": {
116562
- "background": "hsl(230, 1%, 78%)",
116563
- "color": "hsl(230, 8%, 24%)"
116564
- },
116565
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover": {
116566
- "background": "hsl(230, 1%, 78%)",
116567
- "color": "hsl(230, 8%, 24%)"
116568
- },
116569
- "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus": {
116570
- "background": "hsl(230, 1%, 78%)",
116571
- "color": "hsl(230, 8%, 24%)"
116572
- },
116573
- ".line-highlight.line-highlight": { "background": "hsla(230, 8%, 24%, 0.05)" },
116574
- ".line-highlight.line-highlight:before": {
116575
- "background": "hsl(230, 1%, 90%)",
116576
- "color": "hsl(230, 8%, 24%)",
116577
- "padding": "0.1em 0.6em",
116578
- "borderRadius": "0.3em",
116579
- "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
116580
- },
116581
- ".line-highlight.line-highlight[data-end]:after": {
116582
- "background": "hsl(230, 1%, 90%)",
116583
- "color": "hsl(230, 8%, 24%)",
116584
- "padding": "0.1em 0.6em",
116585
- "borderRadius": "0.3em",
116586
- "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
116587
- },
116588
- "pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before": { "backgroundColor": "hsla(230, 8%, 24%, 0.05)" },
116589
- ".line-numbers.line-numbers .line-numbers-rows": { "borderRightColor": "hsla(230, 8%, 24%, 0.2)" },
116590
- ".command-line .command-line-prompt": { "borderRightColor": "hsla(230, 8%, 24%, 0.2)" },
116591
- ".line-numbers .line-numbers-rows > span:before": { "color": "hsl(230, 1%, 62%)" },
116592
- ".command-line .command-line-prompt > span:before": { "color": "hsl(230, 1%, 62%)" },
116593
- ".rainbow-braces .token.token.punctuation.brace-level-1": { "color": "hsl(5, 74%, 59%)" },
116594
- ".rainbow-braces .token.token.punctuation.brace-level-5": { "color": "hsl(5, 74%, 59%)" },
116595
- ".rainbow-braces .token.token.punctuation.brace-level-9": { "color": "hsl(5, 74%, 59%)" },
116596
- ".rainbow-braces .token.token.punctuation.brace-level-2": { "color": "hsl(119, 34%, 47%)" },
116597
- ".rainbow-braces .token.token.punctuation.brace-level-6": { "color": "hsl(119, 34%, 47%)" },
116598
- ".rainbow-braces .token.token.punctuation.brace-level-10": { "color": "hsl(119, 34%, 47%)" },
116599
- ".rainbow-braces .token.token.punctuation.brace-level-3": { "color": "hsl(221, 87%, 60%)" },
116600
- ".rainbow-braces .token.token.punctuation.brace-level-7": { "color": "hsl(221, 87%, 60%)" },
116601
- ".rainbow-braces .token.token.punctuation.brace-level-11": { "color": "hsl(221, 87%, 60%)" },
116602
- ".rainbow-braces .token.token.punctuation.brace-level-4": { "color": "hsl(301, 63%, 40%)" },
116603
- ".rainbow-braces .token.token.punctuation.brace-level-8": { "color": "hsl(301, 63%, 40%)" },
116604
- ".rainbow-braces .token.token.punctuation.brace-level-12": { "color": "hsl(301, 63%, 40%)" },
116605
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
116606
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
116607
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116608
- "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116609
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116610
- "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116611
- "pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116612
- "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116613
- "pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116614
- "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
116615
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
116616
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
116617
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116618
- "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116619
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116620
- "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116621
- "pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116622
- "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116623
- "pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116624
- "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
116625
- ".prism-previewer.prism-previewer:before": { "borderColor": "hsl(0, 0, 95%)" },
116626
- ".prism-previewer-gradient.prism-previewer-gradient div": {
116627
- "borderColor": "hsl(0, 0, 95%)",
116628
- "borderRadius": "0.3em"
116629
- },
116630
- ".prism-previewer-color.prism-previewer-color:before": { "borderRadius": "0.3em" },
116631
- ".prism-previewer-easing.prism-previewer-easing:before": { "borderRadius": "0.3em" },
116632
- ".prism-previewer.prism-previewer:after": { "borderTopColor": "hsl(0, 0, 95%)" },
116633
- ".prism-previewer-flipped.prism-previewer-flipped.after": { "borderBottomColor": "hsl(0, 0, 95%)" },
116634
- ".prism-previewer-angle.prism-previewer-angle:before": { "background": "hsl(0, 0%, 100%)" },
116635
- ".prism-previewer-time.prism-previewer-time:before": { "background": "hsl(0, 0%, 100%)" },
116636
- ".prism-previewer-easing.prism-previewer-easing": { "background": "hsl(0, 0%, 100%)" },
116637
- ".prism-previewer-angle.prism-previewer-angle circle": {
116638
- "stroke": "hsl(230, 8%, 24%)",
116639
- "strokeOpacity": "1"
116640
- },
116641
- ".prism-previewer-time.prism-previewer-time circle": {
116642
- "stroke": "hsl(230, 8%, 24%)",
116643
- "strokeOpacity": "1"
116644
- },
116645
- ".prism-previewer-easing.prism-previewer-easing circle": {
116646
- "stroke": "hsl(230, 8%, 24%)",
116647
- "fill": "transparent"
116648
- },
116649
- ".prism-previewer-easing.prism-previewer-easing path": { "stroke": "hsl(230, 8%, 24%)" },
116650
- ".prism-previewer-easing.prism-previewer-easing line": { "stroke": "hsl(230, 8%, 24%)" }
116651
- };
116652
116003
  function _objectWithoutPropertiesLoose(r, e) {
116653
116004
  if (null == r) return {};
116654
116005
  var t = {};
@@ -118796,11 +118147,11 @@ function attributes(record) {
118796
118147
  for (key in record) if (Object.hasOwn(record, key)) record[key] = parseEntities(record[key]);
118797
118148
  return record;
118798
118149
  }
118799
- var SyntaxHighlighter$1 = highlight_default(refractor, {});
118800
- SyntaxHighlighter$1.registerLanguage = function(_, language) {
118150
+ var SyntaxHighlighter = highlight_default(refractor, {});
118151
+ SyntaxHighlighter.registerLanguage = function(_, language) {
118801
118152
  return refractor.register(language);
118802
118153
  };
118803
- SyntaxHighlighter$1.alias = function(name, aliases) {
118154
+ SyntaxHighlighter.alias = function(name, aliases) {
118804
118155
  return refractor.alias(name, aliases);
118805
118156
  };
118806
118157
  /**
@@ -119874,7 +119225,7 @@ const languages = {
119874
119225
  markdown,
119875
119226
  yaml
119876
119227
  };
119877
- for (const [name, language] of Object.entries(languages)) SyntaxHighlighter$1.registerLanguage(name, language);
119228
+ for (const [name, language] of Object.entries(languages)) SyntaxHighlighter.registerLanguage(name, language);
119878
119229
  const languageAliases = {
119879
119230
  ts: "typescript",
119880
119231
  js: "javascript",
@@ -119889,35 +119240,578 @@ function resolveLanguage(raw) {
119889
119240
  if (raw in languages) return raw;
119890
119241
  return languageAliases[raw];
119891
119242
  }
119892
- /** 探测 .dark 祖先(class 策略):监听 documentElement/body 的 class 变化 */
119893
- function useDarkClass() {
119894
- const [dark, setDark] = useState(() => typeof document !== "undefined" && document.querySelector(".dark") !== null);
119895
- useEffect(() => {
119896
- const update = () => setDark(document.querySelector(".dark") !== null);
119897
- const observer = new MutationObserver(update);
119898
- observer.observe(document.documentElement, {
119899
- attributes: true,
119900
- attributeFilter: ["class"]
119901
- });
119902
- if (document.body) observer.observe(document.body, {
119903
- attributes: true,
119904
- attributeFilter: ["class"]
119905
- });
119906
- update();
119907
- return () => observer.disconnect();
119908
- }, []);
119909
- return dark;
119910
- }
119243
+ /** 全站唯一的代码高亮主题对。引用相等是验收判据(AC-19.8),不导出到包外。 */
119244
+ const PRISM_THEME = {
119245
+ dark: {
119246
+ "code[class*=\"language-\"]": {
119247
+ "background": "hsl(220, 13%, 18%)",
119248
+ "color": "hsl(220, 14%, 71%)",
119249
+ "textShadow": "0 1px rgba(0, 0, 0, 0.3)",
119250
+ "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
119251
+ "direction": "ltr",
119252
+ "textAlign": "left",
119253
+ "whiteSpace": "pre",
119254
+ "wordSpacing": "normal",
119255
+ "wordBreak": "normal",
119256
+ "lineHeight": "1.5",
119257
+ "MozTabSize": "2",
119258
+ "OTabSize": "2",
119259
+ "tabSize": "2",
119260
+ "WebkitHyphens": "none",
119261
+ "MozHyphens": "none",
119262
+ "msHyphens": "none",
119263
+ "hyphens": "none"
119264
+ },
119265
+ "pre[class*=\"language-\"]": {
119266
+ "background": "hsl(220, 13%, 18%)",
119267
+ "color": "hsl(220, 14%, 71%)",
119268
+ "textShadow": "0 1px rgba(0, 0, 0, 0.3)",
119269
+ "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
119270
+ "direction": "ltr",
119271
+ "textAlign": "left",
119272
+ "whiteSpace": "pre",
119273
+ "wordSpacing": "normal",
119274
+ "wordBreak": "normal",
119275
+ "lineHeight": "1.5",
119276
+ "MozTabSize": "2",
119277
+ "OTabSize": "2",
119278
+ "tabSize": "2",
119279
+ "WebkitHyphens": "none",
119280
+ "MozHyphens": "none",
119281
+ "msHyphens": "none",
119282
+ "hyphens": "none",
119283
+ "padding": "1em",
119284
+ "margin": "0.5em 0",
119285
+ "overflow": "auto",
119286
+ "borderRadius": "0.3em"
119287
+ },
119288
+ "code[class*=\"language-\"]::-moz-selection": {
119289
+ "background": "hsl(220, 13%, 28%)",
119290
+ "color": "inherit",
119291
+ "textShadow": "none"
119292
+ },
119293
+ "code[class*=\"language-\"] *::-moz-selection": {
119294
+ "background": "hsl(220, 13%, 28%)",
119295
+ "color": "inherit",
119296
+ "textShadow": "none"
119297
+ },
119298
+ "pre[class*=\"language-\"] *::-moz-selection": {
119299
+ "background": "hsl(220, 13%, 28%)",
119300
+ "color": "inherit",
119301
+ "textShadow": "none"
119302
+ },
119303
+ "code[class*=\"language-\"]::selection": {
119304
+ "background": "hsl(220, 13%, 28%)",
119305
+ "color": "inherit",
119306
+ "textShadow": "none"
119307
+ },
119308
+ "code[class*=\"language-\"] *::selection": {
119309
+ "background": "hsl(220, 13%, 28%)",
119310
+ "color": "inherit",
119311
+ "textShadow": "none"
119312
+ },
119313
+ "pre[class*=\"language-\"] *::selection": {
119314
+ "background": "hsl(220, 13%, 28%)",
119315
+ "color": "inherit",
119316
+ "textShadow": "none"
119317
+ },
119318
+ ":not(pre) > code[class*=\"language-\"]": {
119319
+ "padding": "0.2em 0.3em",
119320
+ "borderRadius": "0.3em",
119321
+ "whiteSpace": "normal"
119322
+ },
119323
+ "comment": {
119324
+ "color": "hsl(220, 10%, 40%)",
119325
+ "fontStyle": "italic"
119326
+ },
119327
+ "prolog": { "color": "hsl(220, 10%, 40%)" },
119328
+ "cdata": { "color": "hsl(220, 10%, 40%)" },
119329
+ "doctype": { "color": "hsl(220, 14%, 71%)" },
119330
+ "punctuation": { "color": "hsl(220, 14%, 71%)" },
119331
+ "entity": {
119332
+ "color": "hsl(220, 14%, 71%)",
119333
+ "cursor": "help"
119334
+ },
119335
+ "attr-name": { "color": "hsl(29, 54%, 61%)" },
119336
+ "class-name": { "color": "hsl(29, 54%, 61%)" },
119337
+ "boolean": { "color": "hsl(29, 54%, 61%)" },
119338
+ "constant": { "color": "hsl(29, 54%, 61%)" },
119339
+ "number": { "color": "hsl(29, 54%, 61%)" },
119340
+ "atrule": { "color": "hsl(29, 54%, 61%)" },
119341
+ "keyword": { "color": "hsl(286, 60%, 67%)" },
119342
+ "property": { "color": "hsl(355, 65%, 65%)" },
119343
+ "tag": { "color": "hsl(355, 65%, 65%)" },
119344
+ "symbol": { "color": "hsl(355, 65%, 65%)" },
119345
+ "deleted": { "color": "hsl(355, 65%, 65%)" },
119346
+ "important": { "color": "hsl(355, 65%, 65%)" },
119347
+ "selector": { "color": "hsl(95, 38%, 62%)" },
119348
+ "string": { "color": "hsl(95, 38%, 62%)" },
119349
+ "char": { "color": "hsl(95, 38%, 62%)" },
119350
+ "builtin": { "color": "hsl(95, 38%, 62%)" },
119351
+ "inserted": { "color": "hsl(95, 38%, 62%)" },
119352
+ "regex": { "color": "hsl(95, 38%, 62%)" },
119353
+ "attr-value": { "color": "hsl(95, 38%, 62%)" },
119354
+ "attr-value > .token.punctuation": { "color": "hsl(95, 38%, 62%)" },
119355
+ "variable": { "color": "hsl(207, 82%, 66%)" },
119356
+ "operator": { "color": "hsl(207, 82%, 66%)" },
119357
+ "function": { "color": "hsl(207, 82%, 66%)" },
119358
+ "url": { "color": "hsl(187, 47%, 55%)" },
119359
+ "attr-value > .token.punctuation.attr-equals": { "color": "hsl(220, 14%, 71%)" },
119360
+ "special-attr > .token.attr-value > .token.value.css": { "color": "hsl(220, 14%, 71%)" },
119361
+ ".language-css .token.selector": { "color": "hsl(355, 65%, 65%)" },
119362
+ ".language-css .token.property": { "color": "hsl(220, 14%, 71%)" },
119363
+ ".language-css .token.function": { "color": "hsl(187, 47%, 55%)" },
119364
+ ".language-css .token.url > .token.function": { "color": "hsl(187, 47%, 55%)" },
119365
+ ".language-css .token.url > .token.string.url": { "color": "hsl(95, 38%, 62%)" },
119366
+ ".language-css .token.important": { "color": "hsl(286, 60%, 67%)" },
119367
+ ".language-css .token.atrule .token.rule": { "color": "hsl(286, 60%, 67%)" },
119368
+ ".language-javascript .token.operator": { "color": "hsl(286, 60%, 67%)" },
119369
+ ".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation": { "color": "hsl(5, 48%, 51%)" },
119370
+ ".language-json .token.operator": { "color": "hsl(220, 14%, 71%)" },
119371
+ ".language-json .token.null.keyword": { "color": "hsl(29, 54%, 61%)" },
119372
+ ".language-markdown .token.url": { "color": "hsl(220, 14%, 71%)" },
119373
+ ".language-markdown .token.url > .token.operator": { "color": "hsl(220, 14%, 71%)" },
119374
+ ".language-markdown .token.url-reference.url > .token.string": { "color": "hsl(220, 14%, 71%)" },
119375
+ ".language-markdown .token.url > .token.content": { "color": "hsl(207, 82%, 66%)" },
119376
+ ".language-markdown .token.url > .token.url": { "color": "hsl(187, 47%, 55%)" },
119377
+ ".language-markdown .token.url-reference.url": { "color": "hsl(187, 47%, 55%)" },
119378
+ ".language-markdown .token.blockquote.punctuation": {
119379
+ "color": "hsl(220, 10%, 40%)",
119380
+ "fontStyle": "italic"
119381
+ },
119382
+ ".language-markdown .token.hr.punctuation": {
119383
+ "color": "hsl(220, 10%, 40%)",
119384
+ "fontStyle": "italic"
119385
+ },
119386
+ ".language-markdown .token.code-snippet": { "color": "hsl(95, 38%, 62%)" },
119387
+ ".language-markdown .token.bold .token.content": { "color": "hsl(29, 54%, 61%)" },
119388
+ ".language-markdown .token.italic .token.content": { "color": "hsl(286, 60%, 67%)" },
119389
+ ".language-markdown .token.strike .token.content": { "color": "hsl(355, 65%, 65%)" },
119390
+ ".language-markdown .token.strike .token.punctuation": { "color": "hsl(355, 65%, 65%)" },
119391
+ ".language-markdown .token.list.punctuation": { "color": "hsl(355, 65%, 65%)" },
119392
+ ".language-markdown .token.title.important > .token.punctuation": { "color": "hsl(355, 65%, 65%)" },
119393
+ "bold": { "fontWeight": "bold" },
119394
+ "italic": { "fontStyle": "italic" },
119395
+ "namespace": { "Opacity": "0.8" },
119396
+ "token.tab:not(:empty):before": {
119397
+ "color": "hsla(220, 14%, 71%, 0.15)",
119398
+ "textShadow": "none"
119399
+ },
119400
+ "token.cr:before": {
119401
+ "color": "hsla(220, 14%, 71%, 0.15)",
119402
+ "textShadow": "none"
119403
+ },
119404
+ "token.lf:before": {
119405
+ "color": "hsla(220, 14%, 71%, 0.15)",
119406
+ "textShadow": "none"
119407
+ },
119408
+ "token.space:before": {
119409
+ "color": "hsla(220, 14%, 71%, 0.15)",
119410
+ "textShadow": "none"
119411
+ },
119412
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item": { "marginRight": "0.4em" },
119413
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button": {
119414
+ "background": "hsl(220, 13%, 26%)",
119415
+ "color": "hsl(220, 9%, 55%)",
119416
+ "padding": "0.1em 0.4em",
119417
+ "borderRadius": "0.3em"
119418
+ },
119419
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a": {
119420
+ "background": "hsl(220, 13%, 26%)",
119421
+ "color": "hsl(220, 9%, 55%)",
119422
+ "padding": "0.1em 0.4em",
119423
+ "borderRadius": "0.3em"
119424
+ },
119425
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span": {
119426
+ "background": "hsl(220, 13%, 26%)",
119427
+ "color": "hsl(220, 9%, 55%)",
119428
+ "padding": "0.1em 0.4em",
119429
+ "borderRadius": "0.3em"
119430
+ },
119431
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover": {
119432
+ "background": "hsl(220, 13%, 28%)",
119433
+ "color": "hsl(220, 14%, 71%)"
119434
+ },
119435
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus": {
119436
+ "background": "hsl(220, 13%, 28%)",
119437
+ "color": "hsl(220, 14%, 71%)"
119438
+ },
119439
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover": {
119440
+ "background": "hsl(220, 13%, 28%)",
119441
+ "color": "hsl(220, 14%, 71%)"
119442
+ },
119443
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus": {
119444
+ "background": "hsl(220, 13%, 28%)",
119445
+ "color": "hsl(220, 14%, 71%)"
119446
+ },
119447
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover": {
119448
+ "background": "hsl(220, 13%, 28%)",
119449
+ "color": "hsl(220, 14%, 71%)"
119450
+ },
119451
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus": {
119452
+ "background": "hsl(220, 13%, 28%)",
119453
+ "color": "hsl(220, 14%, 71%)"
119454
+ },
119455
+ ".line-highlight.line-highlight": { "background": "hsla(220, 100%, 80%, 0.04)" },
119456
+ ".line-highlight.line-highlight:before": {
119457
+ "background": "hsl(220, 13%, 26%)",
119458
+ "color": "hsl(220, 14%, 71%)",
119459
+ "padding": "0.1em 0.6em",
119460
+ "borderRadius": "0.3em",
119461
+ "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
119462
+ },
119463
+ ".line-highlight.line-highlight[data-end]:after": {
119464
+ "background": "hsl(220, 13%, 26%)",
119465
+ "color": "hsl(220, 14%, 71%)",
119466
+ "padding": "0.1em 0.6em",
119467
+ "borderRadius": "0.3em",
119468
+ "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
119469
+ },
119470
+ "pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before": { "backgroundColor": "hsla(220, 100%, 80%, 0.04)" },
119471
+ ".line-numbers.line-numbers .line-numbers-rows": { "borderRightColor": "hsla(220, 14%, 71%, 0.15)" },
119472
+ ".command-line .command-line-prompt": { "borderRightColor": "hsla(220, 14%, 71%, 0.15)" },
119473
+ ".line-numbers .line-numbers-rows > span:before": { "color": "hsl(220, 14%, 45%)" },
119474
+ ".command-line .command-line-prompt > span:before": { "color": "hsl(220, 14%, 45%)" },
119475
+ ".rainbow-braces .token.token.punctuation.brace-level-1": { "color": "hsl(355, 65%, 65%)" },
119476
+ ".rainbow-braces .token.token.punctuation.brace-level-5": { "color": "hsl(355, 65%, 65%)" },
119477
+ ".rainbow-braces .token.token.punctuation.brace-level-9": { "color": "hsl(355, 65%, 65%)" },
119478
+ ".rainbow-braces .token.token.punctuation.brace-level-2": { "color": "hsl(95, 38%, 62%)" },
119479
+ ".rainbow-braces .token.token.punctuation.brace-level-6": { "color": "hsl(95, 38%, 62%)" },
119480
+ ".rainbow-braces .token.token.punctuation.brace-level-10": { "color": "hsl(95, 38%, 62%)" },
119481
+ ".rainbow-braces .token.token.punctuation.brace-level-3": { "color": "hsl(207, 82%, 66%)" },
119482
+ ".rainbow-braces .token.token.punctuation.brace-level-7": { "color": "hsl(207, 82%, 66%)" },
119483
+ ".rainbow-braces .token.token.punctuation.brace-level-11": { "color": "hsl(207, 82%, 66%)" },
119484
+ ".rainbow-braces .token.token.punctuation.brace-level-4": { "color": "hsl(286, 60%, 67%)" },
119485
+ ".rainbow-braces .token.token.punctuation.brace-level-8": { "color": "hsl(286, 60%, 67%)" },
119486
+ ".rainbow-braces .token.token.punctuation.brace-level-12": { "color": "hsl(286, 60%, 67%)" },
119487
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
119488
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
119489
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119490
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119491
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119492
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119493
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119494
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119495
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119496
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119497
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
119498
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
119499
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119500
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119501
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119502
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119503
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119504
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119505
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119506
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119507
+ ".prism-previewer.prism-previewer:before": { "borderColor": "hsl(224, 13%, 17%)" },
119508
+ ".prism-previewer-gradient.prism-previewer-gradient div": {
119509
+ "borderColor": "hsl(224, 13%, 17%)",
119510
+ "borderRadius": "0.3em"
119511
+ },
119512
+ ".prism-previewer-color.prism-previewer-color:before": { "borderRadius": "0.3em" },
119513
+ ".prism-previewer-easing.prism-previewer-easing:before": { "borderRadius": "0.3em" },
119514
+ ".prism-previewer.prism-previewer:after": { "borderTopColor": "hsl(224, 13%, 17%)" },
119515
+ ".prism-previewer-flipped.prism-previewer-flipped.after": { "borderBottomColor": "hsl(224, 13%, 17%)" },
119516
+ ".prism-previewer-angle.prism-previewer-angle:before": { "background": "hsl(219, 13%, 22%)" },
119517
+ ".prism-previewer-time.prism-previewer-time:before": { "background": "hsl(219, 13%, 22%)" },
119518
+ ".prism-previewer-easing.prism-previewer-easing": { "background": "hsl(219, 13%, 22%)" },
119519
+ ".prism-previewer-angle.prism-previewer-angle circle": {
119520
+ "stroke": "hsl(220, 14%, 71%)",
119521
+ "strokeOpacity": "1"
119522
+ },
119523
+ ".prism-previewer-time.prism-previewer-time circle": {
119524
+ "stroke": "hsl(220, 14%, 71%)",
119525
+ "strokeOpacity": "1"
119526
+ },
119527
+ ".prism-previewer-easing.prism-previewer-easing circle": {
119528
+ "stroke": "hsl(220, 14%, 71%)",
119529
+ "fill": "transparent"
119530
+ },
119531
+ ".prism-previewer-easing.prism-previewer-easing path": { "stroke": "hsl(220, 14%, 71%)" },
119532
+ ".prism-previewer-easing.prism-previewer-easing line": { "stroke": "hsl(220, 14%, 71%)" }
119533
+ },
119534
+ light: {
119535
+ "code[class*=\"language-\"]": {
119536
+ "background": "hsl(230, 1%, 98%)",
119537
+ "color": "hsl(230, 8%, 24%)",
119538
+ "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
119539
+ "direction": "ltr",
119540
+ "textAlign": "left",
119541
+ "whiteSpace": "pre",
119542
+ "wordSpacing": "normal",
119543
+ "wordBreak": "normal",
119544
+ "lineHeight": "1.5",
119545
+ "MozTabSize": "2",
119546
+ "OTabSize": "2",
119547
+ "tabSize": "2",
119548
+ "WebkitHyphens": "none",
119549
+ "MozHyphens": "none",
119550
+ "msHyphens": "none",
119551
+ "hyphens": "none"
119552
+ },
119553
+ "pre[class*=\"language-\"]": {
119554
+ "background": "hsl(230, 1%, 98%)",
119555
+ "color": "hsl(230, 8%, 24%)",
119556
+ "fontFamily": "\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace",
119557
+ "direction": "ltr",
119558
+ "textAlign": "left",
119559
+ "whiteSpace": "pre",
119560
+ "wordSpacing": "normal",
119561
+ "wordBreak": "normal",
119562
+ "lineHeight": "1.5",
119563
+ "MozTabSize": "2",
119564
+ "OTabSize": "2",
119565
+ "tabSize": "2",
119566
+ "WebkitHyphens": "none",
119567
+ "MozHyphens": "none",
119568
+ "msHyphens": "none",
119569
+ "hyphens": "none",
119570
+ "padding": "1em",
119571
+ "margin": "0.5em 0",
119572
+ "overflow": "auto",
119573
+ "borderRadius": "0.3em"
119574
+ },
119575
+ "code[class*=\"language-\"]::-moz-selection": {
119576
+ "background": "hsl(230, 1%, 90%)",
119577
+ "color": "inherit"
119578
+ },
119579
+ "code[class*=\"language-\"] *::-moz-selection": {
119580
+ "background": "hsl(230, 1%, 90%)",
119581
+ "color": "inherit"
119582
+ },
119583
+ "pre[class*=\"language-\"] *::-moz-selection": {
119584
+ "background": "hsl(230, 1%, 90%)",
119585
+ "color": "inherit"
119586
+ },
119587
+ "code[class*=\"language-\"]::selection": {
119588
+ "background": "hsl(230, 1%, 90%)",
119589
+ "color": "inherit"
119590
+ },
119591
+ "code[class*=\"language-\"] *::selection": {
119592
+ "background": "hsl(230, 1%, 90%)",
119593
+ "color": "inherit"
119594
+ },
119595
+ "pre[class*=\"language-\"] *::selection": {
119596
+ "background": "hsl(230, 1%, 90%)",
119597
+ "color": "inherit"
119598
+ },
119599
+ ":not(pre) > code[class*=\"language-\"]": {
119600
+ "padding": "0.2em 0.3em",
119601
+ "borderRadius": "0.3em",
119602
+ "whiteSpace": "normal"
119603
+ },
119604
+ "comment": {
119605
+ "color": "hsl(230, 4%, 64%)",
119606
+ "fontStyle": "italic"
119607
+ },
119608
+ "prolog": { "color": "hsl(230, 4%, 64%)" },
119609
+ "cdata": { "color": "hsl(230, 4%, 64%)" },
119610
+ "doctype": { "color": "hsl(230, 8%, 24%)" },
119611
+ "punctuation": { "color": "hsl(230, 8%, 24%)" },
119612
+ "entity": {
119613
+ "color": "hsl(230, 8%, 24%)",
119614
+ "cursor": "help"
119615
+ },
119616
+ "attr-name": { "color": "hsl(35, 99%, 36%)" },
119617
+ "class-name": { "color": "hsl(35, 99%, 36%)" },
119618
+ "boolean": { "color": "hsl(35, 99%, 36%)" },
119619
+ "constant": { "color": "hsl(35, 99%, 36%)" },
119620
+ "number": { "color": "hsl(35, 99%, 36%)" },
119621
+ "atrule": { "color": "hsl(35, 99%, 36%)" },
119622
+ "keyword": { "color": "hsl(301, 63%, 40%)" },
119623
+ "property": { "color": "hsl(5, 74%, 59%)" },
119624
+ "tag": { "color": "hsl(5, 74%, 59%)" },
119625
+ "symbol": { "color": "hsl(5, 74%, 59%)" },
119626
+ "deleted": { "color": "hsl(5, 74%, 59%)" },
119627
+ "important": { "color": "hsl(5, 74%, 59%)" },
119628
+ "selector": { "color": "hsl(119, 34%, 47%)" },
119629
+ "string": { "color": "hsl(119, 34%, 47%)" },
119630
+ "char": { "color": "hsl(119, 34%, 47%)" },
119631
+ "builtin": { "color": "hsl(119, 34%, 47%)" },
119632
+ "inserted": { "color": "hsl(119, 34%, 47%)" },
119633
+ "regex": { "color": "hsl(119, 34%, 47%)" },
119634
+ "attr-value": { "color": "hsl(119, 34%, 47%)" },
119635
+ "attr-value > .token.punctuation": { "color": "hsl(119, 34%, 47%)" },
119636
+ "variable": { "color": "hsl(221, 87%, 60%)" },
119637
+ "operator": { "color": "hsl(221, 87%, 60%)" },
119638
+ "function": { "color": "hsl(221, 87%, 60%)" },
119639
+ "url": { "color": "hsl(198, 99%, 37%)" },
119640
+ "attr-value > .token.punctuation.attr-equals": { "color": "hsl(230, 8%, 24%)" },
119641
+ "special-attr > .token.attr-value > .token.value.css": { "color": "hsl(230, 8%, 24%)" },
119642
+ ".language-css .token.selector": { "color": "hsl(5, 74%, 59%)" },
119643
+ ".language-css .token.property": { "color": "hsl(230, 8%, 24%)" },
119644
+ ".language-css .token.function": { "color": "hsl(198, 99%, 37%)" },
119645
+ ".language-css .token.url > .token.function": { "color": "hsl(198, 99%, 37%)" },
119646
+ ".language-css .token.url > .token.string.url": { "color": "hsl(119, 34%, 47%)" },
119647
+ ".language-css .token.important": { "color": "hsl(301, 63%, 40%)" },
119648
+ ".language-css .token.atrule .token.rule": { "color": "hsl(301, 63%, 40%)" },
119649
+ ".language-javascript .token.operator": { "color": "hsl(301, 63%, 40%)" },
119650
+ ".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation": { "color": "hsl(344, 84%, 43%)" },
119651
+ ".language-json .token.operator": { "color": "hsl(230, 8%, 24%)" },
119652
+ ".language-json .token.null.keyword": { "color": "hsl(35, 99%, 36%)" },
119653
+ ".language-markdown .token.url": { "color": "hsl(230, 8%, 24%)" },
119654
+ ".language-markdown .token.url > .token.operator": { "color": "hsl(230, 8%, 24%)" },
119655
+ ".language-markdown .token.url-reference.url > .token.string": { "color": "hsl(230, 8%, 24%)" },
119656
+ ".language-markdown .token.url > .token.content": { "color": "hsl(221, 87%, 60%)" },
119657
+ ".language-markdown .token.url > .token.url": { "color": "hsl(198, 99%, 37%)" },
119658
+ ".language-markdown .token.url-reference.url": { "color": "hsl(198, 99%, 37%)" },
119659
+ ".language-markdown .token.blockquote.punctuation": {
119660
+ "color": "hsl(230, 4%, 64%)",
119661
+ "fontStyle": "italic"
119662
+ },
119663
+ ".language-markdown .token.hr.punctuation": {
119664
+ "color": "hsl(230, 4%, 64%)",
119665
+ "fontStyle": "italic"
119666
+ },
119667
+ ".language-markdown .token.code-snippet": { "color": "hsl(119, 34%, 47%)" },
119668
+ ".language-markdown .token.bold .token.content": { "color": "hsl(35, 99%, 36%)" },
119669
+ ".language-markdown .token.italic .token.content": { "color": "hsl(301, 63%, 40%)" },
119670
+ ".language-markdown .token.strike .token.content": { "color": "hsl(5, 74%, 59%)" },
119671
+ ".language-markdown .token.strike .token.punctuation": { "color": "hsl(5, 74%, 59%)" },
119672
+ ".language-markdown .token.list.punctuation": { "color": "hsl(5, 74%, 59%)" },
119673
+ ".language-markdown .token.title.important > .token.punctuation": { "color": "hsl(5, 74%, 59%)" },
119674
+ "bold": { "fontWeight": "bold" },
119675
+ "italic": { "fontStyle": "italic" },
119676
+ "namespace": { "Opacity": "0.8" },
119677
+ "token.tab:not(:empty):before": { "color": "hsla(230, 8%, 24%, 0.2)" },
119678
+ "token.cr:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
119679
+ "token.lf:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
119680
+ "token.space:before": { "color": "hsla(230, 8%, 24%, 0.2)" },
119681
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item": { "marginRight": "0.4em" },
119682
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button": {
119683
+ "background": "hsl(230, 1%, 90%)",
119684
+ "color": "hsl(230, 6%, 44%)",
119685
+ "padding": "0.1em 0.4em",
119686
+ "borderRadius": "0.3em"
119687
+ },
119688
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a": {
119689
+ "background": "hsl(230, 1%, 90%)",
119690
+ "color": "hsl(230, 6%, 44%)",
119691
+ "padding": "0.1em 0.4em",
119692
+ "borderRadius": "0.3em"
119693
+ },
119694
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span": {
119695
+ "background": "hsl(230, 1%, 90%)",
119696
+ "color": "hsl(230, 6%, 44%)",
119697
+ "padding": "0.1em 0.4em",
119698
+ "borderRadius": "0.3em"
119699
+ },
119700
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover": {
119701
+ "background": "hsl(230, 1%, 78%)",
119702
+ "color": "hsl(230, 8%, 24%)"
119703
+ },
119704
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus": {
119705
+ "background": "hsl(230, 1%, 78%)",
119706
+ "color": "hsl(230, 8%, 24%)"
119707
+ },
119708
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover": {
119709
+ "background": "hsl(230, 1%, 78%)",
119710
+ "color": "hsl(230, 8%, 24%)"
119711
+ },
119712
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus": {
119713
+ "background": "hsl(230, 1%, 78%)",
119714
+ "color": "hsl(230, 8%, 24%)"
119715
+ },
119716
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover": {
119717
+ "background": "hsl(230, 1%, 78%)",
119718
+ "color": "hsl(230, 8%, 24%)"
119719
+ },
119720
+ "div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus": {
119721
+ "background": "hsl(230, 1%, 78%)",
119722
+ "color": "hsl(230, 8%, 24%)"
119723
+ },
119724
+ ".line-highlight.line-highlight": { "background": "hsla(230, 8%, 24%, 0.05)" },
119725
+ ".line-highlight.line-highlight:before": {
119726
+ "background": "hsl(230, 1%, 90%)",
119727
+ "color": "hsl(230, 8%, 24%)",
119728
+ "padding": "0.1em 0.6em",
119729
+ "borderRadius": "0.3em",
119730
+ "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
119731
+ },
119732
+ ".line-highlight.line-highlight[data-end]:after": {
119733
+ "background": "hsl(230, 1%, 90%)",
119734
+ "color": "hsl(230, 8%, 24%)",
119735
+ "padding": "0.1em 0.6em",
119736
+ "borderRadius": "0.3em",
119737
+ "boxShadow": "0 2px 0 0 rgba(0, 0, 0, 0.2)"
119738
+ },
119739
+ "pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before": { "backgroundColor": "hsla(230, 8%, 24%, 0.05)" },
119740
+ ".line-numbers.line-numbers .line-numbers-rows": { "borderRightColor": "hsla(230, 8%, 24%, 0.2)" },
119741
+ ".command-line .command-line-prompt": { "borderRightColor": "hsla(230, 8%, 24%, 0.2)" },
119742
+ ".line-numbers .line-numbers-rows > span:before": { "color": "hsl(230, 1%, 62%)" },
119743
+ ".command-line .command-line-prompt > span:before": { "color": "hsl(230, 1%, 62%)" },
119744
+ ".rainbow-braces .token.token.punctuation.brace-level-1": { "color": "hsl(5, 74%, 59%)" },
119745
+ ".rainbow-braces .token.token.punctuation.brace-level-5": { "color": "hsl(5, 74%, 59%)" },
119746
+ ".rainbow-braces .token.token.punctuation.brace-level-9": { "color": "hsl(5, 74%, 59%)" },
119747
+ ".rainbow-braces .token.token.punctuation.brace-level-2": { "color": "hsl(119, 34%, 47%)" },
119748
+ ".rainbow-braces .token.token.punctuation.brace-level-6": { "color": "hsl(119, 34%, 47%)" },
119749
+ ".rainbow-braces .token.token.punctuation.brace-level-10": { "color": "hsl(119, 34%, 47%)" },
119750
+ ".rainbow-braces .token.token.punctuation.brace-level-3": { "color": "hsl(221, 87%, 60%)" },
119751
+ ".rainbow-braces .token.token.punctuation.brace-level-7": { "color": "hsl(221, 87%, 60%)" },
119752
+ ".rainbow-braces .token.token.punctuation.brace-level-11": { "color": "hsl(221, 87%, 60%)" },
119753
+ ".rainbow-braces .token.token.punctuation.brace-level-4": { "color": "hsl(301, 63%, 40%)" },
119754
+ ".rainbow-braces .token.token.punctuation.brace-level-8": { "color": "hsl(301, 63%, 40%)" },
119755
+ ".rainbow-braces .token.token.punctuation.brace-level-12": { "color": "hsl(301, 63%, 40%)" },
119756
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
119757
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)": { "backgroundColor": "hsla(353, 100%, 66%, 0.15)" },
119758
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119759
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119760
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119761
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119762
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119763
+ "pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119764
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119765
+ "pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection": { "backgroundColor": "hsla(353, 95%, 66%, 0.25)" },
119766
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
119767
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)": { "backgroundColor": "hsla(137, 100%, 55%, 0.15)" },
119768
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119769
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119770
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119771
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119772
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119773
+ "pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119774
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119775
+ "pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection": { "backgroundColor": "hsla(135, 73%, 55%, 0.25)" },
119776
+ ".prism-previewer.prism-previewer:before": { "borderColor": "hsl(0, 0, 95%)" },
119777
+ ".prism-previewer-gradient.prism-previewer-gradient div": {
119778
+ "borderColor": "hsl(0, 0, 95%)",
119779
+ "borderRadius": "0.3em"
119780
+ },
119781
+ ".prism-previewer-color.prism-previewer-color:before": { "borderRadius": "0.3em" },
119782
+ ".prism-previewer-easing.prism-previewer-easing:before": { "borderRadius": "0.3em" },
119783
+ ".prism-previewer.prism-previewer:after": { "borderTopColor": "hsl(0, 0, 95%)" },
119784
+ ".prism-previewer-flipped.prism-previewer-flipped.after": { "borderBottomColor": "hsl(0, 0, 95%)" },
119785
+ ".prism-previewer-angle.prism-previewer-angle:before": { "background": "hsl(0, 0%, 100%)" },
119786
+ ".prism-previewer-time.prism-previewer-time:before": { "background": "hsl(0, 0%, 100%)" },
119787
+ ".prism-previewer-easing.prism-previewer-easing": { "background": "hsl(0, 0%, 100%)" },
119788
+ ".prism-previewer-angle.prism-previewer-angle circle": {
119789
+ "stroke": "hsl(230, 8%, 24%)",
119790
+ "strokeOpacity": "1"
119791
+ },
119792
+ ".prism-previewer-time.prism-previewer-time circle": {
119793
+ "stroke": "hsl(230, 8%, 24%)",
119794
+ "strokeOpacity": "1"
119795
+ },
119796
+ ".prism-previewer-easing.prism-previewer-easing circle": {
119797
+ "stroke": "hsl(230, 8%, 24%)",
119798
+ "fill": "transparent"
119799
+ },
119800
+ ".prism-previewer-easing.prism-previewer-easing path": { "stroke": "hsl(230, 8%, 24%)" },
119801
+ ".prism-previewer-easing.prism-previewer-easing line": { "stroke": "hsl(230, 8%, 24%)" }
119802
+ }
119803
+ };
119911
119804
  function CodeBlock({ node: _node, className, children, ...rest }) {
119912
- const dark = useDarkClass();
119805
+ const [dark, themeRef] = useDarkAncestor();
119913
119806
  const language = resolveLanguage(/language-(\w+)/.exec(className ?? "")?.[1]);
119914
119807
  if (language) return /* @__PURE__ */ jsxs("div", {
119808
+ ref: themeRef,
119915
119809
  className: "my-3 overflow-hidden rounded-card border border-border",
119916
119810
  children: [/* @__PURE__ */ jsx("div", {
119917
119811
  className: "border-b border-border bg-subtle px-3 py-1.5 font-mono text-xs text-muted",
119918
119812
  children: language
119919
- }), /* @__PURE__ */ jsx(SyntaxHighlighter$1, {
119920
- style: dark ? one_dark_default : one_light_default,
119813
+ }), /* @__PURE__ */ jsx(SyntaxHighlighter, {
119814
+ style: PRISM_THEME[dark ? "dark" : "light"],
119921
119815
  language,
119922
119816
  PreTag: "div",
119923
119817
  customStyle: {
@@ -119969,78 +119863,18 @@ function Markdown({ children, className = "" }) {
119969
119863
  })
119970
119864
  });
119971
119865
  }
119972
- const SyntaxHighlighter = makePrismLightSyntaxHighlighter({
119973
- style: {
119974
- "code[class*=\"language-\"]": {
119975
- color: "var(--color-ink)",
119976
- background: "transparent"
119977
- },
119978
- "pre[class*=\"language-\"]": {
119979
- color: "var(--color-ink)",
119866
+ /** 高亮器按主题构造:`makePrismLightSyntaxHighlighter` style 是静态的,只能在这里分叉 */
119867
+ function makeHighlighter(dark) {
119868
+ return makePrismLightSyntaxHighlighter({
119869
+ style: PRISM_THEME[dark ? "dark" : "light"],
119870
+ customStyle: {
119871
+ margin: 0,
119872
+ padding: "0.75rem 1rem",
119873
+ fontSize: "0.8125rem",
119980
119874
  background: "transparent"
119981
119875
  },
119982
- comment: {
119983
- color: "var(--color-muted)",
119984
- fontStyle: "italic"
119985
- },
119986
- prolog: { color: "var(--color-muted)" },
119987
- doctype: { color: "var(--color-muted)" },
119988
- cdata: { color: "var(--color-muted)" },
119989
- punctuation: { color: "var(--color-muted)" },
119990
- operator: { color: "var(--color-muted)" },
119991
- keyword: {
119992
- color: "var(--color-ink)",
119993
- fontWeight: 600
119994
- },
119995
- "attr-name": {
119996
- color: "var(--color-ink)",
119997
- fontWeight: 600
119998
- },
119999
- selector: {
120000
- color: "var(--color-ink)",
120001
- fontWeight: 600
120002
- },
120003
- tag: {
120004
- color: "var(--color-ink)",
120005
- fontWeight: 600
120006
- },
120007
- function: {
120008
- color: "var(--color-ink)",
120009
- fontWeight: 600
120010
- },
120011
- "class-name": {
120012
- color: "var(--color-ink)",
120013
- fontWeight: 600
120014
- },
120015
- string: { color: "var(--color-ink)" },
120016
- char: { color: "var(--color-ink)" },
120017
- "attr-value": { color: "var(--color-ink)" },
120018
- number: { color: "var(--color-ink)" },
120019
- boolean: { color: "var(--color-ink)" },
120020
- regex: { color: "var(--color-ink)" },
120021
- inserted: { color: "var(--color-success)" },
120022
- deleted: { color: "var(--color-destructive)" }
120023
- },
120024
- customStyle: {
120025
- margin: 0,
120026
- padding: "0.75rem 1rem",
120027
- fontSize: "0.8125rem",
120028
- background: "transparent"
120029
- },
120030
- codeTagProps: { className: "font-mono" }
120031
- });
120032
- function useCopyToClipboard(resetDelayMs = 2e3) {
120033
- const [copied, setCopied] = useState(false);
120034
- return {
120035
- copied,
120036
- copy: useCallback((value) => {
120037
- if (copied || value === "") return;
120038
- navigator.clipboard.writeText(value).then(() => {
120039
- setCopied(true);
120040
- setTimeout(() => setCopied(false), resetDelayMs);
120041
- });
120042
- }, [copied, resetDelayMs])
120043
- };
119876
+ codeTagProps: { className: "font-mono" }
119877
+ });
120044
119878
  }
120045
119879
  const CodeHeader = ({ language, code }) => {
120046
119880
  const { copied, copy } = useCopyToClipboard();
@@ -120064,29 +119898,61 @@ const CodeHeader = ({ language, code }) => {
120064
119898
  })]
120065
119899
  });
120066
119900
  };
120067
- const defaultComponents = memoizeMarkdownComponents({
120068
- SyntaxHighlighter,
120069
- CodeHeader,
120070
- pre: ({ className, ...props }) => /* @__PURE__ */ jsx("pre", {
120071
- className: cn("overflow-x-auto rounded-b-lg border border-border bg-card", className),
120072
- ...props
120073
- })
119901
+ const preComponent = ({ className, ...props }) => /* @__PURE__ */ jsx("pre", {
119902
+ className: cn("overflow-x-auto rounded-b-lg border border-border bg-card", className),
119903
+ ...props
120074
119904
  });
119905
+ const markdownComponents = {
119906
+ light: memoizeMarkdownComponents({
119907
+ SyntaxHighlighter: makeHighlighter(false),
119908
+ CodeHeader,
119909
+ pre: preComponent
119910
+ }),
119911
+ dark: memoizeMarkdownComponents({
119912
+ SyntaxHighlighter: makeHighlighter(true),
119913
+ CodeHeader,
119914
+ pre: preComponent
119915
+ })
119916
+ };
120075
119917
  /**
120076
119918
  * 流式 Markdown:消费当前 text part 的增量文本,边流边成形(标题/列表/表格/代码块),
120077
119919
  * 终态与流式期是同一个组件、同一份数据,因此 run 结束时不重排。
120078
119920
  */
120079
119921
  const MarkdownText = memo(function MarkdownText({ className }) {
120080
- return /* @__PURE__ */ jsx(MarkdownTextPrimitive, {
120081
- remarkPlugins: [remarkGfm],
120082
- className: cn("aui-md", className),
120083
- components: defaultComponents,
120084
- defer: true
119922
+ const [dark, themeRef] = useDarkAncestor();
119923
+ const components = useMemo(() => markdownComponents[dark ? "dark" : "light"], [dark]);
119924
+ return /* @__PURE__ */ jsx("div", {
119925
+ ref: themeRef,
119926
+ className: "contents",
119927
+ children: /* @__PURE__ */ jsx(MarkdownTextPrimitive, {
119928
+ remarkPlugins: [remarkGfm],
119929
+ className: cn("aui-md", className),
119930
+ components,
119931
+ defer: true
119932
+ })
120085
119933
  });
120086
119934
  });
119935
+ /**
119936
+ * provider 相关的默认值与切换规则(0.6.0 FR-13.1)。
119937
+ * chatbot 设置面板与 console 的 `connections.models` 共用这一份——
119938
+ * 0.5.x 时两处各自硬编码,改一处漏一处。
119939
+ */
119940
+ /**
119941
+ * 各 provider 的官方默认端点。取值必须与客户端内部的 fallback 一致(T-03-2 断言):
119942
+ * 客户端的 fallback 保证「用户没填也能跑」,这张表只服务 UI 预填,两者说的是同一件事。
119943
+ * `openai-compatible` 与 `chrome-builtin` 无默认——前者端点任意,后者根本不走 HTTP。
119944
+ * @experimental
119945
+ */
119946
+ const PROVIDER_DEFAULT_BASE_URL = {
119947
+ "openai-compatible": void 0,
119948
+ anthropic: "https://api.anthropic.com",
119949
+ google: "https://generativelanguage.googleapis.com",
119950
+ "chrome-builtin": void 0
119951
+ };
119952
+ const KNOWN_DEFAULT_BASE_URLS = new Set(Object.values(PROVIDER_DEFAULT_BASE_URL).filter((url) => url !== void 0));
120087
119953
 
120088
119954
  //#endregion
120089
- //#region ../ui-react/dist/catalogComponents-DV7cPpUm.js
119955
+ //#region ../ui-react/dist/catalogComponents-Dr5dFMAb.js
120090
119956
  /** echarts 挂载点:surface 图表与 catalog 声明树的 Chart 节点共用,实现在 `@webskill/ui`,与 A2UI 档同一份 */
120091
119957
  function EChart({ chart }) {
120092
119958
  const containerRef = useRef(null);
@@ -120302,13 +120168,21 @@ function SurfaceField({ form, props, scope }) {
120302
120168
  suggestion !== void 0 && isBlank(value) ? /* @__PURE__ */ jsxs("span", {
120303
120169
  "data-webskill-suggestion": key,
120304
120170
  className: "flex items-center gap-2 text-xs text-muted",
120305
- children: [/* @__PURE__ */ jsxs("span", { children: ["Last entered: ", String(suggestion.value)] }), /* @__PURE__ */ jsx("button", {
120306
- type: "button",
120307
- "data-webskill-suggestion-use": key,
120308
- onClick: () => form.setValue(key, suggestion.value),
120309
- className: "rounded-md border border-border px-2 py-0.5 text-ink transition-colors hover:bg-accent",
120310
- children: "Use"
120311
- })]
120171
+ children: [
120172
+ /* @__PURE__ */ jsxs("span", { children: ["Suggested: ", String(suggestion.value)] }),
120173
+ suggestion.reason ? /* @__PURE__ */ jsxs("span", { children: [
120174
+ "(",
120175
+ suggestion.reason,
120176
+ ")"
120177
+ ] }) : null,
120178
+ /* @__PURE__ */ jsx("button", {
120179
+ type: "button",
120180
+ "data-webskill-suggestion-use": key,
120181
+ onClick: () => form.setValue(key, suggestion.value),
120182
+ className: "rounded-md border border-border px-2 py-0.5 text-ink transition-colors hover:bg-accent",
120183
+ children: "Use"
120184
+ })
120185
+ ]
120312
120186
  }) : null,
120313
120187
  props["description"] ? /* @__PURE__ */ jsx("span", {
120314
120188
  className: "text-xs text-muted",
@@ -120328,20 +120202,20 @@ function SurfaceFormButtons({ form, props, scope }) {
120328
120202
  const submitId = scope ? scope.submitActionId : form.resolveActionId("submit");
120329
120203
  const cancelId = scope ? scope.cancelActionId : form.resolveActionId("cancel");
120330
120204
  return /* @__PURE__ */ jsxs("div", {
120331
- className: "flex gap-2",
120332
- children: [/* @__PURE__ */ jsx(Button, {
120333
- type: "submit",
120334
- size: "sm",
120335
- "data-webskill-surface-action": submitId,
120336
- children: str(props, "submitLabel", "Submit")
120337
- }), props["cancelLabel"] ? /* @__PURE__ */ jsx(Button, {
120205
+ className: "flex flex-wrap items-center justify-end gap-2",
120206
+ children: [props["cancelLabel"] ? /* @__PURE__ */ jsx(Button, {
120338
120207
  type: "button",
120339
120208
  size: "sm",
120340
120209
  variant: "secondary",
120341
120210
  "data-webskill-surface-action": cancelId,
120342
120211
  onClick: () => form.emit(cancelId, scope),
120343
120212
  children: str(props, "cancelLabel")
120344
- }) : null]
120213
+ }) : null, /* @__PURE__ */ jsx(Button, {
120214
+ type: "submit",
120215
+ size: "sm",
120216
+ "data-webskill-surface-action": submitId,
120217
+ children: str(props, "submitLabel", "Submit")
120218
+ })]
120345
120219
  });
120346
120220
  }
120347
120221
  /** catalog `Button` 的唯一实现:submit 走带值提交,其余走裸动作 */
@@ -120620,4 +120494,4 @@ const catalogComponentImpls = {
120620
120494
  };
120621
120495
 
120622
120496
  //#endregion
120623
- export { Input as C, DropdownMenuTrigger as S, Separator as T, Checkbox as _, SpecProgress as a, DropdownMenuCheckboxItem as b, SurfaceButton as c, catalogComponentImpls as d, str as f, Button as g, Badge as h, SpecGrid as i, SurfaceField as l, useSurfaceForm as m, CatalogSurfaceProvider as n, SpecTabs as o, useCatalogSurfaceForm as p, EChart as r, SpecTimeline as s, CatalogNode as t, SurfaceFormButtons as u, DataTable as v, Markdown as w, DropdownMenuContent as x, DropdownMenu as y };
120497
+ export { Markdown as C, Input as S, DataTable as _, SpecProgress as a, DropdownMenuContent as b, SurfaceButton as c, catalogComponentImpls as d, str as f, Button as g, Badge as h, SpecGrid as i, SurfaceField as l, useSurfaceForm as m, CatalogSurfaceProvider as n, SpecTabs as o, useCatalogSurfaceForm as p, EChart as r, SpecTimeline as s, CatalogNode as t, SurfaceFormButtons as u, DropdownMenu as v, Separator as w, DropdownMenuTrigger as x, DropdownMenuCheckboxItem as y };