@kingsoft-ai/design 0.1.19 → 0.2.6

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 (130) hide show
  1. package/dist/index.cjs +3150 -2478
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.mjs +7430 -6241
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/style.css +1 -1
  6. package/dist/types/DesignThemeProvider.d.ts +25 -20
  7. package/dist/types/button/Button.d.ts +4 -19
  8. package/dist/types/button/Button.style.d.ts +4 -35
  9. package/dist/types/button/IconButton.d.ts +4 -5
  10. package/dist/types/button/IconButton.style.d.ts +4 -7
  11. package/dist/types/button/styled-tokens.d.ts +582 -0
  12. package/dist/types/button/tokens.d.ts +1 -1
  13. package/dist/types/button/tokens.types.d.ts +190 -0
  14. package/dist/types/card/Card.d.ts +0 -6
  15. package/dist/types/card/Card.style.d.ts +4 -7
  16. package/dist/types/card/styled-tokens.d.ts +130 -0
  17. package/dist/types/card/tokens.d.ts +1 -1
  18. package/dist/types/card/tokens.types.d.ts +48 -0
  19. package/dist/types/checkbox/Checkbox.d.ts +0 -7
  20. package/dist/types/checkbox/Checkbox.style.d.ts +29 -7
  21. package/dist/types/checkbox/CheckboxButton.d.ts +0 -16
  22. package/dist/types/checkbox/CheckboxButton.style.d.ts +24 -12
  23. package/dist/types/checkbox/styled-tokens.d.ts +122 -0
  24. package/dist/types/checkbox/tokens.d.ts +1 -1
  25. package/dist/types/checkbox/tokens.types.d.ts +39 -0
  26. package/dist/types/collapse/Collapse.d.ts +2 -34
  27. package/dist/types/collapse/Collapse.style.d.ts +4 -43
  28. package/dist/types/collapse/styled-tokens.d.ts +77 -0
  29. package/dist/types/collapse/tokens.d.ts +1 -1
  30. package/dist/types/collapse/tokens.types.d.ts +28 -0
  31. package/dist/types/context/ThemeContext.d.ts +24 -0
  32. package/dist/types/context/index.d.ts +2 -0
  33. package/dist/types/floatButton/FloatButton.d.ts +0 -21
  34. package/dist/types/floatButton/FloatButton.style.d.ts +0 -31
  35. package/dist/types/floatButton/styled-tokens.d.ts +127 -0
  36. package/dist/types/floatButton/tokens.d.ts +1 -1
  37. package/dist/types/floatButton/tokens.types.d.ts +66 -0
  38. package/dist/types/index.d.ts +5 -4
  39. package/dist/types/input/Input.d.ts +4 -22
  40. package/dist/types/input/Input.style.d.ts +4 -48
  41. package/dist/types/input/styled-tokens.d.ts +147 -0
  42. package/dist/types/input/tokens.d.ts +1 -1
  43. package/dist/types/input/tokens.types.d.ts +46 -0
  44. package/dist/types/link/Link.d.ts +4 -0
  45. package/dist/types/link/Link.style.d.ts +4 -10
  46. package/dist/types/link/styled-tokens.d.ts +107 -0
  47. package/dist/types/link/tokens.d.ts +1 -1
  48. package/dist/types/link/tokens.types.d.ts +39 -0
  49. package/dist/types/menu/Menu.d.ts +0 -25
  50. package/dist/types/menu/Menu.style.d.ts +4 -43
  51. package/dist/types/menu/MenuItem.d.ts +0 -6
  52. package/dist/types/menu/styled-tokens.d.ts +217 -0
  53. package/dist/types/menu/tokens.d.ts +1 -1
  54. package/dist/types/menu/tokens.types.d.ts +79 -0
  55. package/dist/types/modal/Modal.d.ts +0 -8
  56. package/dist/types/modal/Modal.style.d.ts +4 -11
  57. package/dist/types/modal/styled-tokens.d.ts +370 -0
  58. package/dist/types/modal/tokens.d.ts +1 -1
  59. package/dist/types/modal/tokens.types.d.ts +107 -0
  60. package/dist/types/numberInput/NumberInput.d.ts +2 -22
  61. package/dist/types/numberInput/NumberInput.style.d.ts +4 -7
  62. package/dist/types/numberInput/styled-tokens.d.ts +192 -0
  63. package/dist/types/numberInput/tokens.d.ts +1 -1
  64. package/dist/types/numberInput/tokens.types.d.ts +65 -0
  65. package/dist/types/progress/Progress.d.ts +4 -27
  66. package/dist/types/progress/Progress.style.d.ts +4 -43
  67. package/dist/types/progress/styled-tokens.d.ts +137 -0
  68. package/dist/types/progress/tokens.d.ts +3 -0
  69. package/dist/types/progress/tokens.types.d.ts +52 -0
  70. package/dist/types/radio/Radio.d.ts +4 -0
  71. package/dist/types/radio/Radio.style.d.ts +9 -28
  72. package/dist/types/radio/styled-tokens.d.ts +122 -0
  73. package/dist/types/radio/tokens.d.ts +1 -1
  74. package/dist/types/radio/tokens.types.d.ts +41 -0
  75. package/dist/types/select/Select.style.d.ts +4 -7
  76. package/dist/types/select/styled-tokens.d.ts +237 -0
  77. package/dist/types/select/tokens.d.ts +1 -1
  78. package/dist/types/select/tokens.types.d.ts +72 -0
  79. package/dist/types/skeleton/Skeleton.style.d.ts +0 -25
  80. package/dist/types/skeleton/styled-tokens.d.ts +82 -0
  81. package/dist/types/skeleton/tokens.d.ts +1 -1
  82. package/dist/types/skeleton/tokens.types.d.ts +31 -0
  83. package/dist/types/slider/Slider.d.ts +74 -0
  84. package/dist/types/slider/Slider.style.d.ts +125 -0
  85. package/dist/types/slider/__tests__/Slider.test.d.ts +13 -0
  86. package/dist/types/slider/index.d.ts +2 -0
  87. package/dist/types/slider/styled-tokens.d.ts +252 -0
  88. package/dist/types/slider/tokens.d.ts +3 -0
  89. package/dist/types/slider/tokens.types.d.ts +121 -0
  90. package/dist/types/stepper/Stepper.d.ts +3 -0
  91. package/dist/types/stepper/Stepper.style.d.ts +4 -7
  92. package/dist/types/stepper/styled-tokens.d.ts +157 -0
  93. package/dist/types/stepper/tokens.d.ts +1 -1
  94. package/dist/types/stepper/tokens.types.d.ts +68 -0
  95. package/dist/types/switch/Switch.d.ts +4 -35
  96. package/dist/types/switch/Switch.style.d.ts +4 -56
  97. package/dist/types/switch/styled-tokens.d.ts +132 -0
  98. package/dist/types/switch/tokens.d.ts +1 -1
  99. package/dist/types/switch/tokens.types.d.ts +45 -0
  100. package/dist/types/table/Table.d.ts +2 -0
  101. package/dist/types/table/Table.style.d.ts +4 -7
  102. package/dist/types/table/styled-tokens.d.ts +182 -0
  103. package/dist/types/table/tokens.d.ts +3 -0
  104. package/dist/types/table/tokens.types.d.ts +43 -0
  105. package/dist/types/tag/Tag.d.ts +4 -36
  106. package/dist/types/tag/Tag.style.d.ts +5 -41
  107. package/dist/types/tag/styled-tokens.d.ts +140 -0
  108. package/dist/types/tag/tokens.d.ts +1 -1
  109. package/dist/types/tag/tokens.types.d.ts +76 -0
  110. package/dist/types/theme.d.ts +1 -2
  111. package/dist/types/tooltip/Tooltip.d.ts +0 -18
  112. package/dist/types/tooltip/Tooltip.style.d.ts +0 -19
  113. package/dist/types/tooltip/styled-tokens.d.ts +72 -0
  114. package/dist/types/tooltip/tokens.d.ts +1 -1
  115. package/dist/types/tooltip/tokens.types.d.ts +21 -0
  116. package/dist/types/transfer/Transfer.d.ts +0 -20
  117. package/dist/types/transfer/Transfer.style.d.ts +0 -10
  118. package/dist/types/transfer/styled-tokens.d.ts +252 -0
  119. package/dist/types/transfer/tokens.d.ts +1 -1
  120. package/dist/types/transfer/tokens.types.d.ts +79 -0
  121. package/dist/types/types/index.d.ts +64 -4
  122. package/dist/types/upload/Upload.d.ts +2 -21
  123. package/dist/types/upload/Upload.style.d.ts +4 -64
  124. package/dist/types/upload/styled-tokens.d.ts +227 -0
  125. package/dist/types/upload/tokens.d.ts +3 -0
  126. package/dist/types/upload/tokens.types.d.ts +66 -0
  127. package/dist/types/utils/index.d.ts +4 -0
  128. package/dist/types/utils/styled-token.d.ts +117 -0
  129. package/package.json +5 -4
  130. package/dist/styles.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/@babel+runtime@7.28.4/node_modules/@babel/runtime/helpers/esm/extends.js","../../../node_modules/.pnpm/@emotion+sheet@1.4.0/node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Enum.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Utility.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Tokenizer.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Parser.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Serializer.js","../../../node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Middleware.js","../../../node_modules/.pnpm/@emotion+memoize@0.9.0/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/.pnpm/@emotion+cache@11.14.0/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js","../../../node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../node_modules/.pnpm/@emotion+utils@1.4.2/node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../../../node_modules/.pnpm/@emotion+hash@0.9.2/node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../../node_modules/.pnpm/@emotion+unitless@0.10.0/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../node_modules/.pnpm/@emotion+serialize@1.3.3/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../../../node_modules/.pnpm/@emotion+use-insertion-effect-with-fallbacks@1.2.0_react@19.2.0/node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../../../node_modules/.pnpm/@emotion+react@11.14.0_@types+react@19.2.2_react@19.2.0/node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","../../../node_modules/.pnpm/@emotion+react@11.14.0_@types+react@19.2.2_react@19.2.0/node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../../../node_modules/.pnpm/@emotion+is-prop-valid@1.4.0/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../node_modules/.pnpm/@emotion+styled@11.14.1_@emotion+react@11.14.0_@types+react@19.2.2_react@19.2.0__@types+react@19.2.2_react@19.2.0/node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../../../node_modules/.pnpm/@emotion+styled@11.14.1_@emotion+react@11.14.0_@types+react@19.2.2_react@19.2.0__@types+react@19.2.2_react@19.2.0/node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../src/button/Button.style.ts","../src/button/Button.tsx","../src/button/IconButton.style.ts","../src/button/IconButton.tsx","../../../node_modules/.pnpm/@emotion+react@11.14.0_@types+react@19.2.2_react@19.2.0/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js","../src/checkbox/Checkbox.style.ts","../src/checkbox/Checkbox.tsx","../../icons/dist/index.mjs","../src/checkbox/CheckboxButton.style.ts","../src/checkbox/CheckboxButton.tsx","../src/collapse/Collapse.style.ts","../src/collapse/Collapse.tsx","../src/collapse/CollapseItem.tsx","../src/floatButton/FloatButton.style.ts","../src/floatButton/FloatButton.tsx","../src/input/Input.style.ts","../src/input/Input.tsx","../src/menu/Menu.style.ts","../src/menu/Menu.tsx","../src/menu/SubMenuPopover.tsx","../src/menu/MenuItem.tsx","../src/menu/MenuGroup.tsx","../src/menu/SubMenuItem.tsx","../src/link/Link.style.ts","../src/link/Link.tsx","../src/modal/Modal.style.ts","../src/modal/Modal.tsx","../src/numberInput/NumberInput.style.ts","../src/numberInput/NumberInput.tsx","../src/radio/Radio.style.ts","../src/radio/Radio.tsx","../src/skeleton/Skeleton.style.ts","../src/skeleton/Skeleton.tsx","../src/stepper/Stepper.style.ts","../src/stepper/Stepper.tsx","../src/stepper/Step.tsx","../src/progress/Progress.style.ts","../src/progress/Progress.tsx","../src/tag/Tag.style.ts","../src/tag/Tag.tsx","../src/select/Select.style.ts","../src/select/Popover.tsx","../src/select/ListBox.tsx","../src/select/Select.tsx","../src/table/Table.style.ts","../src/table/Table.tsx","../src/switch/Switch.style.ts","../src/switch/Switch.tsx","../src/transfer/Transfer.style.ts","../src/transfer/Transfer.tsx","../src/upload/Upload.style.ts","../src/upload/Upload.tsx","../src/card/Card.style.ts","../src/card/Card.tsx","../src/card/tokens.ts","../src/tooltip/Tooltip.style.ts","../src/tooltip/Tooltip.tsx","../src/button/tokens.ts","../src/floatButton/tokens.ts","../src/checkbox/tokens.ts","../src/radio/tokens.ts","../src/switch/tokens.ts","../src/input/tokens.ts","../src/select/tokens.ts","../src/numberInput/tokens.ts","../src/collapse/tokens.ts","../src/tag/tokens.ts","../src/skeleton/tokens.ts","../src/stepper/tokens.ts","../src/menu/tokens.ts","../src/link/tokens.ts","../src/transfer/tokens.ts","../src/modal/tokens.ts","../src/tooltip/tokens.ts","../src/theme.ts","../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../src/DesignThemeProvider.tsx"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n } // this function should always return with a value\n // TS can't understand it though so we make it stop complaining here\n\n\n return undefined;\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n this.tags.forEach(function (tag) {\n var _tag$parentNode;\n\n return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value;\n var parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport { createCache as default };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else if (className) {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n animationIterationCount: 1,\n aspectRatio: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n scale: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n var componentSelector = interpolation;\n\n if (componentSelector.__emotion_styles !== undefined) {\n\n return componentSelector;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n var keyframes = interpolation;\n\n if (keyframes.anim === 1) {\n cursor = {\n name: keyframes.name,\n styles: keyframes.styles,\n next: cursor\n };\n return keyframes.name;\n }\n\n var serializedStyles = interpolation;\n\n if (serializedStyles.styles !== undefined) {\n var next = serializedStyles.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = serializedStyles.styles + \";\";\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n }\n\n break;\n }\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n var asString = interpolation;\n\n if (registered == null) {\n return asString;\n }\n\n var cached = registered[asString];\n return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var key in obj) {\n var value = obj[key];\n\n if (typeof value !== 'object') {\n var asString = value;\n\n if (registered != null && registered[asString] !== undefined) {\n string += key + \"{\" + registered[asString] + \"}\";\n } else if (isProcessableValue(asString)) {\n string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n }\n } else {\n if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n\n string += key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n var asTemplateStringsArr = strings;\n\n styles += asTemplateStringsArr[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n var templateStringsArr = strings;\n\n styles += templateStringsArr[i];\n }\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n return mergedTheme;\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = React.useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n var theme = React.useContext(ThemeContext);\n return /*#__PURE__*/React.createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n });\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n var newProps = {};\n\n for (var _key in props) {\n if (hasOwn.call(props, _key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var _key2 in props) {\n if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n newProps[_key2] = props[_key2];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n // eslint-disable-next-line prefer-rest-params\n var args = arguments;\n\n if (props == null || !hasOwn.call(props, 'css')) {\n return React.createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n var JSX;\n\n (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = React.useRef();\n useInsertionEffectWithLayoutFallback(function () {\n var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n var sheet = new cache.sheet.constructor({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false;\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useInsertionEffectWithLayoutFallback(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nfunction keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name;\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n}\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serializedArr = _ref.serializedArr;\n useInsertionEffectAlwaysWithSyncFallback(function () {\n\n for (var i = 0; i < serializedArr.length; i++) {\n insertStyles(cache, serializedArr[i], false);\n }\n });\n\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n var serializedArr = [];\n\n var css = function css() {\n if (hasRendered && isDevelopment) {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n registerStyles(cache, serialized, false);\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && isDevelopment) {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: React.useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serializedArr: serializedArr\n }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","import memoize from '@emotion/memoize';\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport * as React from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\n\nvar isDevelopment = false;\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n // eslint-disable-next-line prefer-rest-params\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n // eslint-disable-next-line prefer-spread\n styles.push.apply(styles, args);\n } else {\n var templateStringsArr = args[0];\n\n styles.push(templateStringsArr[0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n\n styles.push(args[i], templateStringsArr[i]);\n }\n }\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = React.useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if (finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n\n if (ref) {\n newProps.ref = ref;\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/React.createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && isDevelopment) {\n return 'NO_COMPONENT_SELECTOR';\n }\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n var newStyled = createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n }));\n return newStyled.apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport { createStyled as default };\n","import createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/react';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\nimport '@emotion/utils';\nimport 'react';\nimport '@emotion/is-prop-valid';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// bind it to avoid mutating the original function\nvar styled = createStyled.bind(null);\ntags.forEach(function (tagName) {\n styled[tagName] = styled(tagName);\n});\n\nexport { styled as default };\n","/**\n * Button 按钮样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-button-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n * 完全还原 Figma 设计稿规范\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const buttonVariants = ['primary', 'secondary', 'text', 'danger', 'gradient'] as const\nexport const buttonSizes = ['sm', 'md', 'lg'] as const\n\nexport type ButtonVariant = (typeof buttonVariants)[number]\nexport type ButtonSize = (typeof buttonSizes)[number]\n\n// ============================================================================\n// 变体样式生成器\n// ============================================================================\n\n/**\n * 获取按钮变体样式\n * 使用 CSS 变量实现,无需 theme 对象\n */\nconst getVariantStyles = (variant: ButtonVariant) => {\n // 渐变按钮使用特殊的渐变样式逻辑\n if (variant === 'gradient') {\n return css`\n position: relative;\n color: var(--ksd-button-gradient-text);\n border-color: transparent;\n box-shadow: none;\n \n /* 默认渐变背景 */\n background: linear-gradient(\n 90deg, \n var(--ksd-button-gradient-from) 0%, \n var(--ksd-button-gradient-to) 100%\n );\n background-origin: border-box;\n \n /* 使用伪元素创建反向渐变层 */\n &::before {\n content: '';\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n border-radius: inherit;\n background: linear-gradient(\n 90deg, \n var(--ksd-button-gradient-to) 0%, \n var(--ksd-button-gradient-from) 100%\n );\n opacity: 0;\n transition: opacity 0.6s ease;\n z-index: 0;\n }\n \n /* 确保内容在渐变层上方 */\n & > * {\n position: relative;\n z-index: 1;\n }\n\n /* Hover 状态 - 显示反向渐变层 */\n &:hover:not(:disabled):not([data-loading='true'])::before {\n opacity: 1;\n }\n\n /* Active/Pressed 状态(点击态) */\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n box-shadow: none;\n transform: translateY(1px);\n }\n `\n }\n\n // 变体样式映射\n const variantMap = {\n primary: css`\n background: var(--ksd-button-primary-bg);\n color: var(--ksd-button-primary-text);\n border-color: var(--ksd-button-primary-border);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-primary-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-primary-bg-active);\n transform: translateY(1px);\n }\n `,\n secondary: css`\n background: var(--ksd-button-secondary-bg);\n color: var(--ksd-button-secondary-text);\n border-color: var(--ksd-button-secondary-border);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-secondary-bg-hover);\n border-color: var(--ksd-button-secondary-border-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-secondary-bg-active);\n border-color: var(--ksd-button-secondary-border-active);\n transform: translateY(1px);\n }\n `,\n text: css`\n background: var(--ksd-button-text-bg);\n color: var(--ksd-button-text-text);\n border-color: var(--ksd-button-text-border);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-text-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-text-bg-active);\n transform: translateY(1px);\n }\n `,\n danger: css`\n background: var(--ksd-button-danger-bg);\n color: var(--ksd-button-danger-text);\n border-color: var(--ksd-button-danger-border);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-danger-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-button-danger-bg-active);\n transform: translateY(1px);\n }\n `,\n }\n\n return variantMap[variant as keyof typeof variantMap] || variantMap.primary\n}\n\n/**\n * 获取按钮尺寸样式\n * 使用 CSS 变量实现\n */\nconst getSizeStyles = (size: ButtonSize) => {\n const sizeMap = {\n sm: css`\n height: var(--ksd-button-sm-height);\n font-size: var(--ksd-button-sm-font-size);\n padding-inline: var(--ksd-button-sm-padding-inline);\n\n svg {\n width: var(--ksd-button-sm-icon-size);\n height: var(--ksd-button-sm-icon-size);\n }\n `,\n md: css`\n height: var(--ksd-button-md-height);\n font-size: var(--ksd-button-md-font-size);\n padding-inline: var(--ksd-button-md-padding-inline);\n\n svg {\n width: var(--ksd-button-md-icon-size);\n height: var(--ksd-button-md-icon-size);\n }\n `,\n lg: css`\n height: var(--ksd-button-lg-height);\n font-size: var(--ksd-button-lg-font-size);\n padding-inline: var(--ksd-button-lg-padding-inline);\n\n svg {\n width: var(--ksd-button-lg-icon-size);\n height: var(--ksd-button-lg-icon-size);\n }\n `,\n }\n\n return sizeMap[size] || sizeMap.md\n}\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Button 根元素\n * \n * 特性:\n * - 基于 CSS 变量,无需 ThemeProvider\n * - 完整的交互状态(hover, active, focus, disabled)\n * - 支持加载状态\n * - 支持全宽模式\n */\nexport const ButtonRoot = styled.button<{\n variant: ButtonVariant\n size: ButtonSize\n fullWidth: boolean\n isPressed: boolean\n isDisabled: boolean\n isLoading: boolean\n}>`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 字体样式 - 使用 CSS 变量 */\n font-family: var(--ksd-typography-font-family);\n font-weight: var(--ksd-button-font-weight);\n line-height: 1;\n white-space: nowrap;\n \n /* 边框样式 */\n border-width: 1px;\n border-style: solid;\n border-radius: var(--ksd-button-border-radius);\n \n /* 交互样式 */\n cursor: pointer;\n user-select: none;\n outline: none;\n \n /* 过渡动画 */\n transition: \n background var(--ksd-button-transition),\n border-color var(--ksd-button-transition),\n box-shadow var(--ksd-button-transition),\n transform var(--ksd-button-transition);\n\n /* 变体样式 */\n ${({ variant }) => getVariantStyles(variant)}\n\n /* 尺寸样式 */\n ${({ size }) => getSizeStyles(size)}\n\n /* 全宽模式 */\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n width: 100%;\n `}\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n\n /* 禁用状态 */\n &:disabled {\n cursor: not-allowed;\n opacity: var(--ksd-button-disabled-opacity);\n background: var(--ksd-button-disabled-bg);\n color: var(--ksd-button-disabled-text);\n border-color: transparent;\n box-shadow: none;\n }\n\n /* 加载状态 - 阻止交互 */\n &[data-loading='true'] {\n pointer-events: none;\n }\n\n /* 加载状态 - 使用伪元素实现 cursor: wait */\n &[data-loading='true']::after {\n content: '';\n position: absolute;\n inset: 0;\n cursor: wait;\n pointer-events: auto;\n z-index: 10;\n }\n\n /* 添加旋转动画的关键帧 */\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n`\n\n/**\n * 按钮内容容器\n * 用于布局图标和文本\n */\nexport const ButtonContent = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ksd-button-gap);\n position: relative;\n`\n\n/**\n * 图标包装器\n * \n * 特性:\n * - 在加载状态下淡出\n * - 保持布局稳定\n */\nexport const IconWrapper = styled.span<{\n isLoading: boolean\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n transition: opacity var(--ksd-button-transition);\n \n ${({ isLoading }) =>\n isLoading &&\n css`\n opacity: 0;\n pointer-events: none;\n `}\n`\n\n/**\n * 按钮文本标签\n * \n * 特性:\n * - 在加载状态下淡出\n * - 保持文本居中\n */\nexport const Label = styled.span<{\n isLoading: boolean\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \n transition: opacity var(--ksd-button-transition);\n \n ${({ isLoading }) =>\n isLoading &&\n css`\n opacity: 0.4;\n `}\n`\n","/**\n * Button 按钮组件\n * \n * 基于 react-aria 实现无障碍访问的按钮组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * <Button variant=\"primary\" size=\"md\">\n * 按钮文字\n * </Button>\n * ```\n */\n\nimport { forwardRef, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n ButtonRoot,\n ButtonContent,\n IconWrapper,\n Label,\n buttonVariants,\n buttonSizes,\n type ButtonVariant,\n type ButtonSize,\n} from './Button.style'\n\n// 导出常量供外部使用\nexport const VARIANTS = buttonVariants\nexport const SIZES = buttonSizes\n\nexport type ButtonProps = Omit<AriaButtonProps, 'elementType'> & {\n /** 按钮类型:主按钮、次按钮、文本按钮、危险按钮 */\n variant?: ButtonVariant\n /** 按钮尺寸:小号(24px)、标准(32px)、大号(40px) */\n size?: ButtonSize\n /** 前置图标 */\n icon?: ReactNode\n /** 加载状态 */\n loading?: boolean\n /** 全宽按钮 */\n fullWidth?: boolean\n /** 是否禁用(统一 API,优先级高于 isDisabled) */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 子元素 */\n children?: ReactNode\n}\n\n/**\n * Button 按钮组件\n * \n * 基于 Figma 设计规范实现的按钮组件,支持多种变体和尺寸\n * 使用 react-aria 保证无障碍访问性\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n icon,\n loading = false,\n fullWidth = false,\n disabled,\n isDisabled,\n className,\n children,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n\n // 按钮禁用状态:disabled 优先于 isDisabled,加载中也视为禁用\n const finalDisabled = (disabled ?? isDisabled) || loading\n\n // 使用 react-aria 的 useButton hook\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: finalDisabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <ButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n })}\n variant={variant}\n size={size}\n fullWidth={fullWidth}\n isPressed={isPressed}\n isDisabled={finalDisabled}\n isLoading={loading}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? 'true' : undefined}\n data-pressed={isPressed ? 'true' : undefined}\n >\n <ButtonContent>\n {/* 前置图标 */}\n {icon && (\n <IconWrapper isLoading={loading} aria-hidden=\"true\">\n {icon}\n </IconWrapper>\n )}\n\n {/* 按钮文本 */}\n <Label isLoading={loading}>{children}</Label>\n\n {/* 加载状态指示器 */}\n {loading && (\n <IconWrapper isLoading={false} aria-label=\"加载中\" role=\"status\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n animation: 'spin 0.8s linear infinite',\n }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"30 10\"\n />\n </svg>\n </IconWrapper>\n )}\n </ButtonContent>\n </ButtonRoot>\n )\n },\n)\n\nButton.displayName = 'Button'\n","/**\n * IconButton 图标按钮样式\n *\n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-icon-button-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\nexport const iconButtonAppearances = ['solid', 'outline', 'ghost'] as const\nexport const iconButtonTones = ['primary', 'neutral', 'danger'] as const\nexport const iconButtonSizes = ['sm', 'md', 'lg'] as const\n\nexport type IconButtonAppearance = (typeof iconButtonAppearances)[number]\nexport type IconButtonTone = (typeof iconButtonTones)[number]\nexport type IconButtonSize = (typeof iconButtonSizes)[number]\n\nconst getVariantStyles = (appearance: IconButtonAppearance, tone: IconButtonTone) => {\n const varKey = `${appearance}-${tone}`\n \n const variantMap: Record<string, ReturnType<typeof css>> = {\n 'solid-primary': css`\n background: var(--ksd-icon-button-solid-primary-bg);\n border-color: var(--ksd-icon-button-solid-primary-border);\n color: var(--ksd-icon-button-solid-primary-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-primary-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-primary-bg-active);\n transform: translateY(1px);\n }\n `,\n 'solid-neutral': css`\n background: var(--ksd-icon-button-solid-neutral-bg);\n border-color: var(--ksd-icon-button-solid-neutral-border);\n color: var(--ksd-icon-button-solid-neutral-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-neutral-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-neutral-bg-active);\n transform: translateY(1px);\n }\n `,\n 'solid-danger': css`\n background: var(--ksd-icon-button-solid-danger-bg);\n border-color: var(--ksd-icon-button-solid-danger-border);\n color: var(--ksd-icon-button-solid-danger-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-danger-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-solid-danger-bg-active);\n transform: translateY(1px);\n }\n `,\n 'outline-primary': css`\n background: var(--ksd-icon-button-outline-primary-bg);\n border-color: var(--ksd-icon-button-outline-primary-border);\n color: var(--ksd-icon-button-outline-primary-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-primary-bg-hover);\n color: var(--ksd-icon-button-outline-primary-icon-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-primary-bg-active);\n color: var(--ksd-icon-button-outline-primary-icon-active);\n transform: translateY(1px);\n }\n `,\n 'outline-neutral': css`\n background: var(--ksd-icon-button-outline-neutral-bg);\n border-color: var(--ksd-icon-button-outline-neutral-border);\n color: var(--ksd-icon-button-outline-neutral-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-neutral-bg-hover);\n border-color: var(--ksd-icon-button-outline-neutral-border-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-neutral-bg-active);\n border-color: var(--ksd-icon-button-outline-neutral-border-hover);\n transform: translateY(1px);\n }\n `,\n 'outline-danger': css`\n background: var(--ksd-icon-button-outline-danger-bg);\n border-color: var(--ksd-icon-button-outline-danger-border);\n color: var(--ksd-icon-button-outline-danger-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-danger-bg-hover);\n color: var(--ksd-icon-button-outline-danger-icon-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-outline-danger-bg-active);\n color: var(--ksd-icon-button-outline-danger-icon-active);\n transform: translateY(1px);\n }\n `,\n 'ghost-primary': css`\n background: var(--ksd-icon-button-ghost-primary-bg);\n border-color: var(--ksd-icon-button-ghost-primary-border);\n color: var(--ksd-icon-button-ghost-primary-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-primary-bg-hover);\n color: var(--ksd-icon-button-ghost-primary-icon-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-primary-bg-active);\n color: var(--ksd-icon-button-ghost-primary-icon-active);\n transform: translateY(1px);\n }\n `,\n 'ghost-neutral': css`\n background: var(--ksd-icon-button-ghost-neutral-bg);\n border-color: var(--ksd-icon-button-ghost-neutral-border);\n color: var(--ksd-icon-button-ghost-neutral-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-neutral-bg-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-neutral-bg-active);\n transform: translateY(1px);\n }\n `,\n 'ghost-danger': css`\n background: var(--ksd-icon-button-ghost-danger-bg);\n border-color: var(--ksd-icon-button-ghost-danger-border);\n color: var(--ksd-icon-button-ghost-danger-icon);\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-danger-bg-hover);\n color: var(--ksd-icon-button-ghost-danger-icon-hover);\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: var(--ksd-icon-button-ghost-danger-bg-active);\n color: var(--ksd-icon-button-ghost-danger-icon-active);\n transform: translateY(1px);\n }\n `,\n }\n\n return variantMap[varKey] || variantMap['solid-primary']\n}\n\nconst getSizeStyles = (size: IconButtonSize) => {\n return css`\n --icon-button-icon-size: var(--ksd-icon-button-${size}-icon-size);\n width: var(--ksd-icon-button-${size}-edge);\n height: var(--ksd-icon-button-${size}-edge);\n min-width: var(--ksd-icon-button-${size}-edge);\n min-height: var(--ksd-icon-button-${size}-edge);\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n }\n `\n}\n\nexport const IconButtonRoot = styled.button<{\n appearance: IconButtonAppearance\n tone: IconButtonTone\n size: IconButtonSize\n isPressed: boolean\n isDisabled: boolean\n isLoading: boolean\n}>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-width: 1px;\n border-style: solid;\n border-radius: var(--ksd-icon-button-border-radius);\n padding: 0;\n cursor: pointer;\n user-select: none;\n line-height: 1;\n background: transparent;\n\n transition:\n background var(--ksd-icon-button-transition),\n border-color var(--ksd-icon-button-transition),\n color var(--ksd-icon-button-transition),\n box-shadow var(--ksd-icon-button-transition),\n transform var(--ksd-icon-button-transition);\n\n ${({ appearance, tone }) => getVariantStyles(appearance, tone)}\n ${({ size }) => getSizeStyles(size)}\n\n &:focus-visible {\n outline: var(--ksd-icon-button-focus-ring-width) solid var(--ksd-icon-button-focus-ring-color);\n outline-offset: var(--ksd-icon-button-focus-ring-offset);\n }\n\n &:disabled {\n cursor: not-allowed;\n background: var(--ksd-icon-button-disabled-bg);\n border-color: var(--ksd-icon-button-disabled-border);\n color: var(--ksd-icon-button-disabled-icon);\n opacity: var(--ksd-icon-button-disabled-opacity);\n }\n\n &[data-loading='true'] {\n pointer-events: none;\n }\n\n @keyframes icon-button-spin {\n to {\n transform: rotate(360deg);\n }\n }\n`\n\nexport const IconSlot = styled.span<{\n isHidden: boolean\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n transition: opacity var(--ksd-icon-button-transition);\n pointer-events: none;\n\n ${({ isHidden }) =>\n isHidden &&\n css`\n opacity: 0;\n `}\n`\n\nexport const LoadingSpinner = styled.span`\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n pointer-events: none;\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n animation: icon-button-spin 0.8s linear infinite;\n }\n`\n","/**\n * IconButton 图标按钮组件\n *\n * 适用于仅展示图标的高频交互,支持多种外观与语义色彩\n */\n\nimport { forwardRef, useMemo, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton, VisuallyHidden } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n IconButtonRoot,\n IconSlot,\n LoadingSpinner,\n iconButtonAppearances,\n iconButtonTones,\n iconButtonSizes,\n type IconButtonAppearance,\n type IconButtonTone,\n type IconButtonSize,\n} from './IconButton.style'\n\nexport const ICON_BUTTON_APPEARANCES = iconButtonAppearances\nexport const ICON_BUTTON_TONES = iconButtonTones\nexport const ICON_BUTTON_SIZES = iconButtonSizes\n\nexport type IconButtonProps = Omit<AriaButtonProps, 'elementType' | 'children'> & {\n /** 图标按钮的视觉外观:实心、描边、幽灵 */\n appearance?: IconButtonAppearance\n /** 语义色彩:主题、自然、危险 */\n tone?: IconButtonTone\n /** 尺寸:24px / 32px / 40px */\n size?: IconButtonSize\n /** 需要展示的图标 */\n icon: ReactNode\n /** 提供屏幕阅读器可见文本(会以 VisuallyHidden 的形式注入) */\n label?: ReactNode\n /** 加载状态 */\n loading?: boolean\n /** 自定义加载状态的无障碍文本 */\n loadingLabel?: string\n /** 自定义类名 */\n className?: string\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n appearance = 'solid',\n tone = 'primary',\n size = 'md',\n icon,\n label,\n loading = false,\n loadingLabel = '加载中',\n isDisabled,\n className,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const isDevEnvironment = useMemo(() => {\n if (typeof globalThis === 'undefined') {\n return true\n }\n const nodeEnv =\n (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n return nodeEnv !== 'production'\n }, [])\n\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n const disabled = isDisabled || loading\n\n if (isDevEnvironment) {\n const ariaLabel = (ariaProps as Record<string, unknown>)['aria-label']\n const ariaLabelledby = (ariaProps as Record<string, unknown>)['aria-labelledby']\n if (!label && !ariaLabel && !ariaLabelledby) {\n console.warn(\n 'IconButton 需要可感知的文本。请传入 label、aria-label 或 aria-labelledby。',\n )\n }\n }\n\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: disabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <IconButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n })}\n appearance={appearance}\n tone={tone}\n size={size}\n isPressed={isPressed}\n isDisabled={Boolean(disabled)}\n isLoading={loading}\n data-appearance={appearance}\n data-tone={tone}\n data-size={size}\n data-loading={loading ? 'true' : undefined}\n data-pressed={isPressed ? 'true' : undefined}\n >\n <IconSlot isHidden={loading} aria-hidden=\"true\">\n {icon}\n </IconSlot>\n {loading && (\n <LoadingSpinner role=\"status\" aria-live=\"polite\" aria-label={loadingLabel}>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"30 10\"\n />\n </svg>\n </LoadingSpinner>\n )}\n {label ? <VisuallyHidden>{label}</VisuallyHidden> : null}\n </IconButtonRoot>\n )\n },\n)\n\nIconButton.displayName = 'IconButton'\n\n","import * as ReactJSXRuntime from 'react/jsx-runtime';\nimport { h as hasOwn, E as Emotion, c as createEmotionProps } from '../../dist/emotion-element-f0de968e.browser.esm.js';\nimport 'react';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar Fragment = ReactJSXRuntime.Fragment;\nvar jsx = function jsx(type, props, key) {\n if (!hasOwn.call(props, 'css')) {\n return ReactJSXRuntime.jsx(type, props, key);\n }\n\n return ReactJSXRuntime.jsx(Emotion, createEmotionProps(type, props), key);\n};\nvar jsxs = function jsxs(type, props, key) {\n if (!hasOwn.call(props, 'css')) {\n return ReactJSXRuntime.jsxs(type, props, key);\n }\n\n return ReactJSXRuntime.jsxs(Emotion, createEmotionProps(type, props), key);\n};\n\nexport { Fragment, jsx, jsxs };\n","/**\n * Checkbox 组件样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-checkbox-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport { css } from '@emotion/react';\n\n// Checkbox 容器样式\nexport const checkboxContainer = css`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\n// Checkbox 控件样式(实际的复选框)\nexport const checkboxControl = css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ksd-checkbox-control-size);\n height: var(--ksd-checkbox-control-size);\n border-radius: var(--ksd-checkbox-control-border-radius);\n border: var(--ksd-checkbox-control-border-width) solid var(--ksd-checkbox-control-border);\n background-color: var(--ksd-checkbox-control-bg);\n transition: all var(--ksd-checkbox-transition);\n \n /* Hover 状态 */\n &[data-hover=\"true\"]:not([data-disabled=\"true\"]) {\n border-color: var(--ksd-checkbox-control-border-hover);\n }\n \n /* Checked 状态 */\n &[data-checked=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-checked);\n border-color: var(--ksd-checkbox-control-border-checked);\n }\n \n /* Indeterminate 状态(半选) */\n &[data-indeterminate=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-checked);\n border-color: var(--ksd-checkbox-control-border-checked);\n }\n \n /* Disabled 未选中状态 */\n &[data-disabled=\"true\"]:not([data-checked=\"true\"]):not([data-indeterminate=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-disabled);\n border-color: var(--ksd-checkbox-control-border-disabled);\n }\n \n /* Disabled 选中状态 */\n &[data-disabled=\"true\"][data-checked=\"true\"],\n &[data-disabled=\"true\"][data-indeterminate=\"true\"] {\n background-color: var(--ksd-checkbox-control-bg-disabled-checked);\n border-color: var(--ksd-checkbox-control-border-disabled-checked);\n }\n \n /* Focus 状态 */\n input:focus-visible + & {\n box-shadow: var(--ksd-checkbox-focus-ring);\n }\n`;\n\n// Checkbox 图标样式\nexport const checkboxIcon = css`\n color: var(--ksd-checkbox-icon-color);\n width: var(--ksd-checkbox-icon-size);\n height: var(--ksd-checkbox-icon-size);\n opacity: 0;\n transform: scale(0.8);\n transition: all var(--ksd-checkbox-transition);\n \n &[data-checked=\"true\"] {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\n// Checkbox 标签文字样式\nexport const checkboxLabel = css`\n margin-left: var(--ksd-checkbox-gap);\n font-size: var(--ksd-checkbox-label-font-size);\n line-height: var(--ksd-checkbox-label-line-height);\n font-weight: var(--ksd-checkbox-label-font-weight);\n color: var(--ksd-checkbox-label-color);\n transition: color var(--ksd-checkbox-transition);\n \n &[data-disabled=\"true\"] {\n color: var(--ksd-checkbox-label-color-disabled);\n }\n`;\n","/**\n * Checkbox 组件\n * 基于 Figma 设计稿 1:1 还原\n * \n * 使用 CSS 变量的三层 Token 体系,无需 ThemeProvider\n */\n\n/** @jsxImportSource @emotion/react */\nimport React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport {\n checkboxContainer,\n checkboxControl,\n checkboxIcon,\n checkboxLabel,\n} from './Checkbox.style';\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange'> {\n /**\n * 是否选中\n */\n checked?: boolean;\n \n /**\n * 默认是否选中(非受控)\n */\n defaultChecked?: boolean;\n \n /**\n * 半选状态(用于全选场景)\n */\n indeterminate?: boolean;\n \n /**\n * 是否禁用\n */\n disabled?: boolean;\n \n /**\n * 标签文字\n */\n label?: React.ReactNode;\n \n /**\n * 值改变回调\n */\n onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 自定义样式\n */\n style?: React.CSSProperties;\n}\n\n// ============================================================================\n// Checkbox 图标组件\n// ============================================================================\n\n/**\n * 勾选图标(✓)\n */\nconst CheckIcon: React.FC<{ checked: boolean }> = ({ checked }) => {\n return (\n <svg\n css={checkboxIcon}\n data-checked={checked}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.3332 4.5L5.99984 11.8333L2.6665 8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\n/**\n * 半选图标(—)\n */\nconst IndeterminateIcon: React.FC<{ checked: boolean }> = ({ checked }) => {\n return (\n <svg\n css={checkboxIcon}\n data-checked={checked}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.5 8H12.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\n// ============================================================================\n// Checkbox 组件\n// ============================================================================\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (props, ref) => {\n const {\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n disabled = false,\n label,\n onChange,\n className,\n style,\n ...inputProps\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [hover, setHover] = useState(false);\n \n // 内部状态管理(非受控)\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n \n // 判断是否受控\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n // 合并 refs\n useEffect(() => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else {\n ref.current = inputRef.current;\n }\n }\n }, [ref]);\n\n // 设置 indeterminate 属性(原生 HTML 属性只能通过 JS 设置)\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // 处理点击\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newChecked = event.target.checked;\n \n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n \n onChange?.(newChecked, event);\n };\n\n return (\n <label\n css={checkboxContainer}\n data-disabled={disabled}\n className={className}\n style={style}\n onMouseEnter={() => !disabled && setHover(true)}\n onMouseLeave={() => !disabled && setHover(false)}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n \n <span\n css={checkboxControl}\n data-hover={hover}\n data-checked={checked && !indeterminate}\n data-indeterminate={indeterminate}\n data-disabled={disabled}\n >\n {indeterminate ? (\n <IndeterminateIcon checked={true} />\n ) : (\n <CheckIcon checked={checked} />\n )}\n </span>\n \n {label && (\n <span\n css={checkboxLabel}\n data-disabled={disabled}\n >\n {label}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import { jsx as e, jsxs as i } from \"react/jsx-runtime\";\nimport { forwardRef as n } from \"react\";\nconst t = n(\n ({\n children: l,\n size: r = 24,\n color: o = \"currentColor\",\n viewBox: d = \"0 0 24 24\",\n useFill: u = !1,\n strokeWidth: s = 1.5,\n ...a\n }, c) => {\n const C = {\n ref: c,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: r,\n height: r,\n viewBox: d,\n ...a\n };\n return u ? /* @__PURE__ */ e(\"svg\", { ...C, fill: o, children: l }) : /* @__PURE__ */ e(\n \"svg\",\n {\n ...C,\n fill: \"none\",\n stroke: o,\n strokeWidth: s,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: l\n }\n );\n }\n);\nt.displayName = \"IconBase\";\nconst h = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 22 22\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M0.31074 10.9704C0.310783 10.5562 0.646483 10.2205 1.06066 10.2205L10.2213 10.2218L10.222 1.06742C10.2223 0.653481 10.5579 0.317504 10.9719 0.317505C11.3858 0.317611 11.7215 0.653547 11.7218 1.06742L11.7211 10.2218L20.8824 10.2225C21.2965 10.2227 21.6324 10.5583 21.6324 10.9724C21.6323 11.3865 21.2965 11.7222 20.8824 11.7224L11.7211 11.7217L11.7218 20.8706C11.7218 21.2847 11.386 21.6204 10.9719 21.6205C10.5577 21.6205 10.222 21.2847 10.222 20.8706L10.2213 11.7217L1.06066 11.7203C0.646473 11.7202 0.310739 11.3845 0.31074 10.9704Z\",\n fill: \"currentColor\"\n }\n) }));\nh.displayName = \"AddOutline\";\nconst L = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M5 12h14m0 0l-7-7m7 7l-7 7\" }) }));\nL.displayName = \"ArrowRightOutline\";\nconst p = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M19 12H5m0 0l7-7m-7 7l7 7\" }) }));\np.displayName = \"ArrowLeftOutline\";\nconst k = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.80273 8.19824C3.38873 8.19824 3.05273 7.86224 3.05273 7.44824V5.30124C3.06573 2.36324 5.44173 0.000244141 8.35473 0.000244141H8.37473C10.6307 0.000244141 12.6447 1.43324 13.3837 3.56724C13.5197 3.95824 13.3117 4.38524 12.9197 4.52124C12.5287 4.65824 12.1017 4.44924 11.9657 4.05724C11.4367 2.52824 9.99173 1.50024 8.37173 1.50024H8.35773C6.26573 1.50024 4.56173 3.19424 4.55273 5.28424V7.44824C4.55273 7.86224 4.21673 8.19824 3.80273 8.19824Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.542 8.12695C2.864 8.12695 1.5 9.49195 1.5 11.17V15.458C1.5 17.136 2.864 18.501 4.542 18.501H12.184C13.861 18.501 15.226 17.136 15.226 15.458V11.17C15.226 9.49195 13.861 8.12695 12.184 8.12695H4.542ZM12.184 20.001H4.542C2.037 20.001 0 17.963 0 15.458V11.17C0 8.66495 2.037 6.62695 4.542 6.62695H12.184C14.688 6.62695 16.726 8.66495 16.726 11.17V15.458C16.726 17.963 14.688 20.001 12.184 20.001Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.36328 15.1748C7.94928 15.1748 7.61328 14.8388 7.61328 14.4248V12.2028C7.61328 11.7888 7.94928 11.4528 8.36328 11.4528C8.77728 11.4528 9.11328 11.7888 9.11328 12.2028V14.4248C9.11328 14.8388 8.77728 15.1748 8.36328 15.1748Z\"\n }\n )\n] }));\nk.displayName = \"UnlockOutline\";\nconst M = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10 1.5C5.313 1.5 1.5 5.313 1.5 10C1.5 14.687 5.313 18.5 10 18.5C14.687 18.5 18.5 14.687 18.5 10C18.5 5.313 14.687 1.5 10 1.5ZM10 20C4.486 20 0 15.514 0 10C0 4.486 4.486 0 10 0C15.514 0 20 4.486 20 10C20 15.514 15.514 20 10 20Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.55858 14.2207C8.36658 14.2207 8.17358 14.1477 8.02758 13.9997C7.73558 13.7057 7.73658 13.2317 8.02958 12.9397L10.9816 9.99968L8.02958 7.06068C7.73658 6.76868 7.73558 6.29368 8.02758 5.99968C8.31958 5.70468 8.79358 5.70668 9.08758 5.99768L12.5736 9.46868C12.7146 9.60968 12.7936 9.80068 12.7936 9.99968C12.7936 10.1997 12.7146 10.3907 12.5736 10.5317L9.08758 14.0017C8.94158 14.1477 8.74958 14.2207 8.55858 14.2207Z\"\n }\n )\n] }));\nM.displayName = \"ArrowRightCircleOutline\";\nconst v = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M9 6l6 6-6 6\" }) }));\nv.displayName = \"ChevronRightOutline\";\nconst m = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M15 6l-6 6 6 6\" }) }));\nm.displayName = \"ChevronLeftOutline\";\nconst R = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M6 9l6 6 6-6\" }) }));\nR.displayName = \"ChevronDownOutline\";\nconst f = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M18 15l-6-6-6 6\" }) }));\nf.displayName = \"ChevronUpOutline\";\nconst O = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M12 5v14m-7-7h14\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }));\nO.displayName = \"PlusOutline\";\nconst H = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M11 2H9C4 2 2 4 2 9v6c0 5 2 7 7 7h6c5 0 7-2 7-7v-2\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M16.04 3.02001L8.16 10.9C7.86 11.2 7.56 11.79 7.5 12.22L7.07 15.23C6.91 16.32 7.68 17.08 8.77 16.93L11.78 16.5C12.2 16.44 12.79 16.14 13.1 15.84L20.98 7.96001C22.34 6.60001 22.98 5.02001 20.98 3.02001C18.98 1.02001 17.4 1.66001 16.04 3.02001Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M14.91 4.1499C15.58 6.5399 17.45 8.4099 19.85 9.0899\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n )\n] }));\nH.displayName = \"EditSquareOutline\";\nconst V = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M13.26 3.6L5.05 12.29C4.74 12.62 4.44 13.27 4.38 13.72L4.01 16.96C3.88 18.13 4.72 18.93 5.88 18.73L9.1 18.18C9.55 18.1 10.18 17.77 10.49 17.43L18.7 8.74C20.12 7.24 20.76 5.53 18.55 3.44C16.35 1.37 14.68 2.1 13.26 3.6Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M11.89 5.05C12.32 7.81 14.56 9.92 17.34 10.2\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M3 22H21\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n )\n] }));\nV.displayName = \"EditOutline\";\nconst y = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M21 5.98C17.67 5.65 14.32 5.48 10.98 5.48C9 5.48 7.02 5.58 5.04 5.78L3 5.98M8.5 4.97L8.72 3.66C8.88 2.71 9 2 10.69 2H13.31C15 2 15.13 2.75 15.28 3.67L15.5 4.97M18.85 9.14L18.2 19.21C18.09 20.78 18 22 15.21 22H8.79C6 22 5.91 20.78 5.8 19.21L5.15 9.14M10.33 16.5H13.66M9.5 12.5H14.5\" }) }));\ny.displayName = \"DeleteOutline\";\nconst Z = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M17 20.5H7C4 20.5 2 19 2 15.5V8.5C2 5 4 3.5 7 3.5H17C20 3.5 22 5 22 8.5V15.5C22 19 20 20.5 17 20.5Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M17 9L13.87 11.5C12.84 12.32 11.15 12.32 10.12 11.5L7 9\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n )\n] }));\nZ.displayName = \"MessageOutline\";\nconst w = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"11.7666\",\n cy: \"11.7666\",\n r: \"8.98856\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M18.0183 18.4851L21.5423 22\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n )\n] }));\nw.displayName = \"SearchOutline\";\nconst N = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 22 22\", useFill: !0, children: [\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M7.5979 15.5596C7.1839 15.5596 6.8479 15.2236 6.8479 14.8096V11.0646C6.8479 10.6506 7.1839 10.3146 7.5979 10.3146C8.0119 10.3146 8.3479 10.6506 8.3479 11.0646V14.8096C8.3479 15.2236 8.0119 15.5596 7.5979 15.5596Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M9.50862 13.6865H5.68762C5.27362 13.6865 4.93762 13.3505 4.93762 12.9365C4.93762 12.5225 5.27362 12.1865 5.68762 12.1865H9.50862C9.92262 12.1865 10.2586 12.5225 10.2586 12.9365C10.2586 13.3505 9.92262 13.6865 9.50862 13.6865Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M14.116 11.9287H14.009C13.595 11.9287 13.259 11.5927 13.259 11.1787C13.259 10.7647 13.595 10.4287 14.009 10.4287H14.116C14.53 10.4287 14.866 10.7647 14.866 11.1787C14.866 11.5927 14.53 11.9287 14.116 11.9287Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15.9295 15.5029H15.8225C15.4085 15.5029 15.0725 15.1669 15.0725 14.7529C15.0725 14.3389 15.4085 14.0029 15.8225 14.0029H15.9295C16.3435 14.0029 16.6795 14.3389 16.6795 14.7529C16.6795 15.1669 16.3435 15.5029 15.9295 15.5029Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"mask\", { id: \"mask0_6909_3794\", style: { maskType: \"luminance\" }, maskUnits: \"userSpaceOnUse\", x: \"6\", y: \"0\", width: \"7\", height: \"6\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M6.07166 0H12.1117V5.5879H6.07166V0Z\", fill: \"white\" }) }),\n /* @__PURE__ */ e(\"g\", { mask: \"url(#mask0_6909_3794)\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M11.3617 5.58788C10.9477 5.58788 10.6117 5.25188 10.6117 4.83788V4.16288C10.6087 3.43888 9.99466 2.84388 9.24366 2.84088H8.18966C7.02266 2.84088 6.07166 1.90288 6.07166 0.749878C6.07166 0.335878 6.40766 -0.00012207 6.82166 -0.00012207C7.23666 -0.00012207 7.57166 0.335878 7.57166 0.749878C7.57166 1.07588 7.84866 1.34088 8.18966 1.34088H9.24666C10.8197 1.34588 12.1047 2.60988 12.1117 4.15888V4.83788C12.1117 5.25188 11.7757 5.58788 11.3617 5.58788Z\", fill: \"currentColor\" }) }),\n /* @__PURE__ */ e(\"mask\", { id: \"mask1_6909_3794\", style: { maskType: \"luminance\" }, maskUnits: \"userSpaceOnUse\", x: \"0\", y: \"4\", width: \"22\", height: \"18\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M0 4.37329H21.4998V21.5H0V4.37329Z\", fill: \"white\" }) }),\n /* @__PURE__ */ e(\"g\", { mask: \"url(#mask1_6909_3794)\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M10.701 5.87304C9.225 5.87304 7.767 5.88604 6.335 5.91004C3.528 5.91004 1.5 7.88804 1.5 10.612V15.262C1.5 17.985 3.528 19.963 6.323 19.963C9.27 20.012 12.241 20.012 15.165 19.963H15.178C17.972 19.963 20 17.985 20 15.262V10.612C20 7.88804 17.972 5.91004 15.178 5.91004C13.674 5.88604 12.179 5.87304 10.701 5.87304ZM10.754 21.5C9.271 21.5 7.786 21.487 6.31 21.463C2.659 21.463 0 18.854 0 15.262V10.612C0 7.01904 2.659 4.41004 6.323 4.41004C9.192 4.36104 12.18 4.36104 15.19 4.41004C18.841 4.41004 21.5 7.01904 21.5 10.612V15.262C21.5 18.852 18.845 21.46 15.184 21.463C13.716 21.487 12.236 21.5 10.754 21.5Z\", fill: \"currentColor\" }) })\n] }));\nN.displayName = \"GameOutline\";\nconst g = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 12 12\", useFill: !0, children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M9.41575 3.81219C9.53779 3.93423 9.53779 4.1321 9.41575 4.25414L4.90757 8.76231L2.58467 6.4468C2.46243 6.32496 2.46212 6.12709 2.58396 6.00486L2.93695 5.65074C3.05879 5.52851 3.25666 5.52819 3.37889 5.65004L3.46421 5.73508L4.90631 7.17259L8.62025 3.45864C8.74229 3.3366 8.94015 3.3366 9.06219 3.45864L9.41575 3.81219Z\", fill: \"currentColor\" }) }));\ng.displayName = \"CheckOutline\";\nconst x = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M18 6L6 18M6 6l12 12\" }) }));\nx.displayName = \"CloseOutline\";\nconst j = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 20 19\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.74992 1.5C9.65892 1.5 9.43492 1.525 9.31592 1.763L7.48992 5.414C7.20092 5.991 6.64392 6.392 5.99992 6.484L1.91192 7.073C1.64192 7.112 1.54992 7.312 1.52192 7.396C1.49692 7.477 1.45692 7.683 1.64292 7.861L4.59892 10.701C5.06992 11.154 5.28392 11.807 5.17192 12.446L4.47592 16.456C4.43292 16.707 4.58992 16.853 4.65992 16.903C4.73392 16.959 4.93192 17.07 5.17692 16.942L8.83192 15.047C9.40792 14.75 10.0939 14.75 10.6679 15.047L14.3219 16.941C14.5679 17.068 14.7659 16.957 14.8409 16.903C14.9109 16.853 15.0679 16.707 15.0249 16.456L14.3269 12.446C14.2149 11.807 14.4289 11.154 14.8999 10.701L17.8559 7.861C18.0429 7.683 18.0029 7.476 17.9769 7.396C17.9499 7.312 17.8579 7.112 17.5879 7.073L13.4999 6.484C12.8569 6.392 12.2999 5.991 12.0109 5.413L10.1829 1.763C10.0649 1.525 9.84092 1.5 9.74992 1.5ZM4.94692 18.5C4.53392 18.5 4.12392 18.37 3.77292 18.114C3.16692 17.67 2.86992 16.937 2.99892 16.199L3.69492 12.189C3.72092 12.04 3.66992 11.889 3.55992 11.783L0.603916 8.943C0.0599161 8.422 -0.135084 7.652 0.0949161 6.937C0.326916 6.214 0.940916 5.697 1.69792 5.589L5.78592 5C5.94392 4.978 6.07992 4.881 6.14792 4.743L7.97492 1.091C8.31192 0.418 8.99192 0 9.74992 0C10.5079 0 11.1879 0.418 11.5249 1.091L13.3529 4.742C13.4219 4.881 13.5569 4.978 13.7139 5L17.8019 5.589C18.5589 5.697 19.1729 6.214 19.4049 6.937C19.6349 7.652 19.4389 8.422 18.8949 8.943L15.9389 11.783C15.8289 11.889 15.7789 12.04 15.8049 12.188L16.5019 16.199C16.6299 16.938 16.3329 17.671 15.7259 18.114C15.1109 18.565 14.3099 18.626 13.6309 18.272L9.97792 16.379C9.83492 16.305 9.66392 16.305 9.52092 16.379L5.86792 18.273C5.57592 18.425 5.26092 18.5 4.94692 18.5Z\",\n fill: \"currentColor\"\n }\n) }));\nj.displayName = \"StartOutline\";\nconst B = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 20 19\", useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.5 11.979V14.024C1.5 14.73 1.774 15.393 2.273 15.892C2.772 16.391 3.436 16.666 4.141 16.666H15.857C17.313 16.666 18.499 15.482 18.5 14.026V11.978C17.214 11.645 16.261 10.474 16.26 9.085C16.26 7.696 17.213 6.525 18.499 6.191L18.5 4.146C18.501 2.688 17.318 1.501 15.861 1.5H4.144C2.687 1.5 1.501 2.685 1.5 4.142V6.259C1.986 6.375 2.437 6.614 2.812 6.964C3.381 7.495 3.709 8.215 3.737 8.993C3.74 10.459 2.787 11.643 1.5 11.979ZM15.857 18.166H4.142C3.035 18.166 1.995 17.736 1.212 16.953C0.43 16.17 0 15.13 0 14.024V11.324C0 10.91 0.336 10.574 0.75 10.574C1.574 10.573 2.24 9.905 2.239 9.085C2.225 8.667 2.065 8.319 1.789 8.061C1.514 7.803 1.158 7.662 0.776 7.683C0.569 7.685 0.375 7.614 0.229 7.473C0.083 7.332 0 7.136 0 6.933V4.143C0.001 1.858 1.86 0 4.144 0H15.856C18.146 0.001 20.002 1.863 20 4.147V6.846C20 7.26 19.664 7.596 19.25 7.596C18.429 7.596 17.76 8.264 17.76 9.084C17.761 9.906 18.429 10.574 19.25 10.574C19.664 10.574 20 10.91 20 11.324V14.024C19.999 16.308 18.14 18.166 15.857 18.166Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.10395 8.38103L8.61295 8.87703C8.88895 9.14803 9.01395 9.53403 8.94795 9.91103L8.82795 10.609L9.45695 10.278C9.79595 10.097 10.203 10.098 10.545 10.28L11.17 10.608L11.05 9.90903C10.987 9.52603 11.113 9.14303 11.386 8.87703L11.8949 8.38103L11.1899 8.27903C10.812 8.22403 10.484 7.98603 10.3149 7.64103L9.99995 7.00403L9.68495 7.64203C9.51595 7.98603 9.18795 8.22403 8.80795 8.27903L8.10395 8.38103ZM11.6179 12.387C11.432 12.387 11.246 12.342 11.074 12.251L9.99995 11.688L8.92495 12.252C8.52895 12.459 8.05795 12.426 7.69795 12.164C7.33695 11.901 7.15995 11.465 7.23495 11.025L7.43995 9.82903L6.57095 8.98203C6.25195 8.67103 6.13795 8.21403 6.27495 7.79003C6.41295 7.36503 6.77295 7.06003 7.21395 6.99603L8.41795 6.82003L8.95495 5.73103C9.15195 5.33103 9.55195 5.08203 9.99995 5.08203C10.446 5.08203 10.847 5.33103 11.044 5.73203L11.582 6.82003L12.784 6.99603C13.226 7.06003 13.5869 7.36503 13.7239 7.79003C13.8609 8.21403 13.748 8.67103 13.4279 8.98303L12.558 9.83003L12.7639 11.025C12.8389 11.466 12.661 11.903 12.299 12.165C12.095 12.312 11.8569 12.387 11.6179 12.387Z\"\n }\n )\n] }));\nB.displayName = \"TicketOutline\";\nconst F = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 20 20\", useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10 1.5C5.313 1.5 1.5 5.313 1.5 10C1.5 14.687 5.313 18.5 10 18.5C14.687 18.5 18.5 14.687 18.5 10C18.5 5.313 14.687 1.5 10 1.5ZM10 20C4.486 20 0 15.514 0 10C0 4.486 4.486 0 10 0C15.514 0 20 4.486 20 10C20 15.514 15.514 20 10 20Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.9482 11.0137C13.3952 11.0137 12.9432 10.5667 12.9432 10.0137C12.9432 9.46067 13.3862 9.01367 13.9382 9.01367H13.9482C14.5012 9.01367 14.9482 9.46067 14.9482 10.0137C14.9482 10.5667 14.5012 11.0137 13.9482 11.0137Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.93845 11.0137C9.38545 11.0137 8.93445 10.5667 8.93445 10.0137C8.93445 9.46067 9.37645 9.01367 9.92945 9.01367H9.93845C10.4914 9.01367 10.9384 9.46067 10.9384 10.0137C10.9384 10.5667 10.4914 11.0137 9.93845 11.0137Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5.92968 11.0137C5.37668 11.0137 4.92468 10.5667 4.92468 10.0137C4.92468 9.46067 5.36768 9.01367 5.92068 9.01367H5.92968C6.48268 9.01367 6.92968 9.46067 6.92968 10.0137C6.92968 10.5667 6.48268 11.0137 5.92968 11.0137Z\",\n fill: \"currentColor\"\n }\n )\n] }));\nF.displayName = \"MoreCircleOutline\";\nconst A = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\"path\", { d: \"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"15.5\", cy: \"12\", r: \"1\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"11.5\", cy: \"12\", r: \"1\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"7.5\", cy: \"12\", r: \"1\" })\n] }));\nA.displayName = \"MoreSquareOutline\";\nconst S = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 19 19\", useFill: !0, children: /* @__PURE__ */ e(\"path\", { d: \"M12.2871 7.28027C11.9093 7.28115 11.596 7.00252 11.543 6.63965L11.5352 6.5293L11.5488 0.749023C11.5498 0.33481 11.8866 -0.000957489 12.3008 0C12.6771 0.00109291 12.9883 0.279963 13.041 0.641602L13.0488 0.751953L13.0371 5.77832L18.0635 5.76758C18.4777 5.76662 18.8145 6.10141 18.8154 6.51562C18.8163 6.89214 18.5392 7.20439 18.1777 7.25879L18.0674 7.26758L12.2871 7.28027ZM6.51465 18.8164C6.1383 18.8153 5.82712 18.5364 5.77441 18.1748L5.7666 18.0645L5.77832 13.0371L0.751953 13.0488C0.375542 13.0497 0.0633717 12.7734 0.00878906 12.4121L0 12.3008C-0.000797272 11.9243 0.276207 11.612 0.637695 11.5576L0.748047 11.5488L6.52832 11.5361C6.90611 11.5353 7.2194 11.8139 7.27246 12.1768L7.28027 12.2871L7.2666 18.0674C7.26564 18.4816 6.92886 18.8174 6.51465 18.8164Z\" }) }));\nS.displayName = \"ShrinkOutline\";\nconst W = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M21 9V3h-6M3 15v6h6M21 3l-7 7M10 14l-7 7\" }) }));\nW.displayName = \"ExpandOutline\";\nconst U = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 20 20\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.773 9.59876C6.791 9.61476 6.808 9.62976 6.825 9.64776C7.904 10.7538 8.499 12.2188 8.499 13.7738V17.7578L10.735 16.5398C10.911 16.4438 11.02 16.2558 11.02 16.0488V13.7618C11.02 12.2128 11.609 10.7528 12.678 9.65276L17.515 4.50776C17.828 4.17476 18 3.73776 18 3.27676V2.34076C18 1.87676 17.634 1.49976 17.186 1.49976H2.315C1.866 1.49976 1.5 1.87676 1.5 2.34076V3.27676C1.5 3.73776 1.672 4.17476 1.985 4.50676L6.773 9.59876ZM8.146 19.5008C7.944 19.5008 7.744 19.4468 7.562 19.3388C7.21 19.1288 6.999 18.7578 6.999 18.3458V13.7738C6.999 12.6388 6.576 11.5698 5.805 10.7508C5.782 10.7318 5.759 10.7108 5.739 10.6888L0.893 5.53576C0.317 4.92376 0 4.12076 0 3.27676V2.34076C0 1.04976 1.039 -0.000244141 2.315 -0.000244141H17.186C18.461 -0.000244141 19.5 1.04976 19.5 2.34076V3.27676C19.5 4.11976 19.183 4.92176 18.609 5.53476L13.762 10.6888C12.959 11.5168 12.52 12.6058 12.52 13.7618V16.0488C12.52 16.8048 12.111 17.4968 11.453 17.8568L8.692 19.3608C8.52 19.4538 8.333 19.5008 8.146 19.5008Z\",\n fill: \"currentColor\"\n }\n) }));\nU.displayName = \"FunnelOutline\";\nconst _ = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M2 12H22\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }));\n_.displayName = \"MinusOutline\";\nconst E = n((l, r) => /* @__PURE__ */ i(t, { ref: r, useFill: !0, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.25 12a.75.75 0 0 1 .75-.75h14a.75.75 0 0 1 0 1.5H5a.75.75 0 0 1-.75-.75Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.47 4.47a.75.75 0 0 1 1.06 0l7 7a.75.75 0 0 1 0 1.06l-7 7a.75.75 0 1 1-1.06-1.06L18.94 12l-6.47-6.47a.75.75 0 0 1 0-1.06Z\"\n }\n )\n] }));\nE.displayName = \"ArrowRightBold\";\nconst q = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M5 12h7m5 0h2m-2 0l-7-7m7 7l-7 7\" }) }));\nq.displayName = \"ArrowRightBroken\";\nexport {\n h as AddOutline,\n p as ArrowLeftOutline,\n E as ArrowRightBold,\n q as ArrowRightBroken,\n M as ArrowRightCircleOutline,\n L as ArrowRightOutline,\n g as CheckOutline,\n R as ChevronDownOutline,\n m as ChevronLeftOutline,\n v as ChevronRightOutline,\n f as ChevronUpOutline,\n x as CloseOutline,\n y as DeleteOutline,\n V as EditOutline,\n H as EditSquareOutline,\n W as ExpandOutline,\n U as FunnelOutline,\n N as GameOutline,\n t as IconBase,\n Z as MessageOutline,\n _ as MinusOutline,\n F as MoreCircleOutline,\n A as MoreSquareOutline,\n O as PlusOutline,\n w as SearchOutline,\n S as ShrinkOutline,\n j as StartOutline,\n B as TicketOutline,\n k as UnlockOutline\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * CheckboxButton 组件样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-checkbox-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n * \n * 设计规范:\n * - 按钮样式的 checkbox\n * - 右下角勾选标记\n * - 完整的交互状态\n */\n\nimport { css } from '@emotion/react';\n\nexport type CheckboxButtonSize = 'sm' | 'md' | 'lg';\n\ninterface CheckboxButtonSizeConfig {\n paddingX: number;\n paddingY: number;\n gap: number;\n minHeight: number;\n fontSize: number;\n lineHeight: number;\n checkmarkSize: number;\n checkmarkIcon: number;\n}\n\nexport const checkboxButtonSizeTokens: Record<CheckboxButtonSize, CheckboxButtonSizeConfig> = {\n sm: {\n paddingX: 12,\n paddingY: 5,\n gap: 8,\n minHeight: 28,\n fontSize: 12,\n lineHeight: 18,\n checkmarkSize: 10,\n checkmarkIcon: 7,\n },\n md: {\n paddingX: 16,\n paddingY: 7,\n gap: 10,\n minHeight: 32,\n fontSize: 12,\n lineHeight: 18,\n checkmarkSize: 12,\n checkmarkIcon: 8,\n },\n lg: {\n paddingX: 20,\n paddingY: 9,\n gap: 12,\n minHeight: 38,\n fontSize: 14,\n lineHeight: 20,\n checkmarkSize: 14,\n checkmarkIcon: 9,\n },\n};\n\n// ============================================================================\n// CheckboxButton 容器样式\n// ============================================================================\n\nexport const checkboxButtonContainer = css`\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n /* 隐藏原生 checkbox */\n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\n// ============================================================================\n// CheckboxButton 包装器样式(按钮外观)\n// ============================================================================\n\nexport const checkboxButtonWrapper = (size: CheckboxButtonSize = 'md') => {\n const sizeToken = checkboxButtonSizeTokens[size];\n \n return css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 尺寸与间距 - 按照设计稿 */\n padding: ${sizeToken.paddingY}px ${sizeToken.paddingX}px;\n gap: ${sizeToken.gap}px;\n min-height: ${sizeToken.minHeight}px;\n \n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-size: ${sizeToken.fontSize}px;\n line-height: ${sizeToken.lineHeight}px;\n font-weight: 400;\n white-space: nowrap;\n \n /* 边框与圆角 */\n border: 1px solid var(--ksd-colors-neutral-200);\n border-radius: 4px;\n \n /* 默认状态 - 未选中 */\n background-color: var(--ksd-colors-common-white);\n color: rgba(10, 24, 51, 0.7);\n \n /* 过渡动画 */\n transition: \n background-color 0.2s ease,\n border-color 0.2s ease,\n color 0.2s ease;\n \n /* Hover 状态 - 未选中 */\n &[data-hover=\"true\"]:not([data-checked=\"true\"]):not([data-disabled=\"true\"]) {\n border-color: var(--ksd-colors-blue-500);\n color: var(--ksd-colors-blue-500);\n }\n \n /* Checked 状态 - 已选中 */\n &[data-checked=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-colors-blue-100);\n border-color: var(--ksd-colors-blue-500);\n color: var(--ksd-colors-blue-500);\n }\n \n /* Disabled 未选中状态 */\n &[data-disabled=\"true\"]:not([data-checked=\"true\"]) {\n background-color: var(--ksd-colors-neutral-100);\n border-color: var(--ksd-colors-neutral-200);\n color: rgba(10, 24, 51, 0.3);\n }\n \n /* Disabled 选中状态 */\n &[data-disabled=\"true\"][data-checked=\"true\"] {\n background-color: var(--ksd-colors-neutral-100);\n border-color: var(--ksd-colors-neutral-400);\n color: rgba(10, 24, 51, 0.3);\n }\n \n /* Focus 状态 - 键盘导航 */\n input:focus-visible + & {\n outline: 2px solid var(--ksd-colors-blue-500);\n outline-offset: 2px;\n }\n `;\n};\n\n// ============================================================================\n// CheckboxButton 勾选标记样式(右下角)\n// ============================================================================\n\nexport const checkboxButtonCheckmark = (size: CheckboxButtonSize = 'md') => {\n const { checkmarkSize, checkmarkIcon } = checkboxButtonSizeTokens[size];\n \n return css`\n position: absolute;\n bottom: 0;\n right: 0;\n \n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n \n /* 勾选标记的背景三角形区域 */\n width: ${checkmarkSize}px;\n height: ${checkmarkSize}px;\n overflow: hidden;\n \n /* 过渡动画 */\n transition: background-color 0.2s ease;\n \n /* 背景三角形 */\n &::before {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 0 ${checkmarkSize}px ${checkmarkSize}px;\n border-color: transparent transparent var(--ksd-colors-blue-500) transparent;\n transition: border-color 0.2s ease;\n }\n \n /* 禁用状态的背景 */\n &[data-disabled=\"true\"]::before {\n border-color: transparent transparent var(--ksd-colors-neutral-400) transparent;\n }\n \n /* 图标样式 */\n svg {\n position: relative;\n color: var(--ksd-colors-common-white);\n width: ${checkmarkIcon}px;\n height: ${checkmarkIcon}px;\n margin: 0;\n z-index: 1;\n }\n \n /* 禁用状态的图标 */\n &[data-disabled=\"true\"] svg {\n color: var(--ksd-colors-neutral-100);\n }\n `;\n};\n","/**\n * CheckboxButton 组件 - 按钮风格的 Checkbox\n * \n * 特性:\n * - 按钮样式的 checkbox 外观\n * - 右下角显示勾选标记\n * - 支持受控/非受控模式\n * \n * 使用 CSS 变量的三层 Token 体系,无需 ThemeProvider\n */\n\n/** @jsxImportSource @emotion/react */\nimport React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport { CheckOutline } from '@kingsoft-ai/icons';\nimport {\n checkboxButtonContainer,\n checkboxButtonWrapper,\n checkboxButtonCheckmark,\n checkboxButtonSizeTokens,\n} from './CheckboxButton.style';\nimport type { CheckboxButtonSize } from './CheckboxButton.style';\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport interface CheckboxButtonProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange' | 'indeterminate'> {\n /**\n * 是否选中\n */\n checked?: boolean;\n \n /**\n * 默认是否选中(非受控)\n */\n defaultChecked?: boolean;\n \n /**\n * 是否禁用\n */\n disabled?: boolean;\n \n /**\n * 标签文字(必填)\n */\n label: React.ReactNode;\n \n /**\n * 值改变回调\n */\n onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * 尺寸\n */\n size?: CheckboxButtonSize;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 自定义样式\n */\n style?: React.CSSProperties;\n}\n\n// ============================================================================\n// CheckboxButton 组件\n// ============================================================================\n\n/**\n * CheckboxButton - 按钮风格的复选框组件\n * \n * 按照设计稿,呈现为按钮样式,右下角带勾选标记\n */\nexport const CheckboxButton = forwardRef<HTMLInputElement, CheckboxButtonProps>(\n (props, ref) => {\n const {\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n label,\n size = 'md',\n onChange,\n className,\n style,\n ...inputProps\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [hover, setHover] = useState(false);\n \n // 内部状态管理(非受控)\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n \n // 判断是否受控\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n // 合并 refs\n useEffect(() => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else {\n ref.current = inputRef.current;\n }\n }\n }, [ref]);\n\n // 处理点击\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newChecked = event.target.checked;\n \n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n \n onChange?.(newChecked, event);\n };\n\n const sizeToken = checkboxButtonSizeTokens[size];\n \n return (\n <label\n css={checkboxButtonContainer}\n data-disabled={disabled}\n className={className}\n style={style}\n onMouseEnter={() => !disabled && setHover(true)}\n onMouseLeave={() => !disabled && setHover(false)}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n \n <span\n css={checkboxButtonWrapper(size)}\n data-hover={hover}\n data-checked={checked}\n data-disabled={disabled}\n data-size={size}\n >\n {/* 标签文字 */}\n {label}\n \n {/* 右下角勾选标记 */}\n {checked && (\n <span\n css={checkboxButtonCheckmark(size)}\n data-disabled={disabled}\n data-size={size}\n >\n <CheckOutline size={sizeToken.checkmarkIcon} />\n </span>\n )}\n </span>\n </label>\n );\n }\n);\n\nCheckboxButton.displayName = 'CheckboxButton';\n\nexport default CheckboxButton;\n","/**\n * Collapse 折叠面板样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-collapse-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css, keyframes } from '@emotion/react'\n\n// ============================================================================\n// 动画定义\n// ============================================================================\n\n/**\n * 折叠内容展开动画\n */\nconst slideDown = keyframes`\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`\n\n/**\n * 折叠内容收起动画\n */\nconst slideUp = keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-8px);\n }\n`\n\n/**\n * 箭头旋转动画(展开)\n */\nexport const rotateArrowDown = keyframes`\n from {\n transform: rotate(-90deg);\n }\n to {\n transform: rotate(0deg);\n }\n`\n\n/**\n * 箭头旋转动画(收起)\n */\nexport const rotateArrowUp = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(-90deg);\n }\n`\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Collapse 根容器\n */\nexport const CollapseRoot = styled.div`\n width: 100%;\n border: 1px solid var(--ksd-collapse-border);\n border-radius: var(--ksd-collapse-border-radius);\n background: var(--ksd-collapse-bg);\n overflow: hidden;\n`\n\n/**\n * CollapseItem 容器\n */\nexport const CollapseItemWrapper = styled.div<{\n isLast?: boolean\n}>`\n border-bottom: ${({ isLast }) =>\n isLast ? 'none' : '1px solid var(--ksd-collapse-divider)'};\n`\n\n/**\n * 折叠面板标题栏\n */\nexport const CollapseHeader = styled.div<{\n isExpanded: boolean\n isDisabled?: boolean\n}>`\n display: flex;\n align-items: center;\n gap: var(--ksd-collapse-gap);\n padding: var(--ksd-collapse-header-padding);\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n user-select: none;\n transition: background var(--ksd-collapse-transition);\n \n /* Hover 状态 */\n ${({ isDisabled }) =>\n !isDisabled &&\n css`\n &:hover {\n background: var(--ksd-collapse-bg-hover);\n }\n `}\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid var(--ksd-collapse-arrow);\n outline-offset: -2px;\n }\n \n /* 禁用状态 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n opacity: 0.5;\n `}\n`\n\n/**\n * 箭头图标容器\n */\nexport const ArrowWrapper = styled.div<{\n isExpanded: boolean\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ksd-collapse-arrow-size);\n height: var(--ksd-collapse-arrow-size);\n color: var(--ksd-collapse-arrow);\n transition: transform var(--ksd-collapse-transition);\n transform: rotate(${({ isExpanded }) => (isExpanded ? '0deg' : '-90deg')});\n \n svg {\n width: 100%;\n height: 100%;\n }\n`\n\n/**\n * 标题内容区\n */\nexport const TitleWrapper = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--ksd-collapse-gap);\n min-width: 0;\n`\n\n/**\n * 标题文本\n */\nexport const TitleText = styled.p`\n margin: 0;\n font-family: var(--ksd-typography-font-family);\n font-size: 14px;\n line-height: 22px;\n color: var(--ksd-collapse-text-title);\n white-space: pre-wrap;\n word-break: break-word;\n`\n\n/**\n * 右侧后缀内容区\n */\nexport const SuffixWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n`\n\n/**\n * 折叠内容外层容器\n */\nexport const CollapseContentWrapper = styled.div<{\n isExpanded: boolean\n contentHeight: number\n}>`\n max-height: ${({ isExpanded, contentHeight }) =>\n isExpanded ? `${contentHeight}px` : '0px'};\n overflow: hidden;\n transition: max-height var(--ksd-collapse-transition);\n`\n\n/**\n * 折叠内容内层容器\n */\nexport const CollapseContentInner = styled.div<{\n isExpanded: boolean\n}>`\n padding: var(--ksd-collapse-content-padding);\n border-top: 1px solid var(--ksd-collapse-divider);\n \n ${({ isExpanded }) =>\n isExpanded\n ? css`\n animation: ${slideDown} 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n `\n : css`\n animation: ${slideUp} 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n `}\n`\n\n/**\n * 折叠内容文本区域\n */\nexport const ContentText = styled.div`\n font-family: var(--ksd-typography-font-family);\n font-size: 12px;\n line-height: 22px;\n color: var(--ksd-collapse-text);\n \n p {\n margin: 0 0 12px 0;\n \n &:last-child {\n margin-bottom: 0;\n }\n }\n`\n","/**\n * Collapse 折叠面板组件\n * \n * 可以折叠/展开的内容区域\n * 支持手风琴模式(同时只能展开一个)和普通模式(可同时展开多个)\n * \n * @example\n * ```tsx\n * // 非受控模式\n * <Collapse defaultActiveKey={['1']}>\n * <CollapseItem itemKey=\"1\" title=\"标题1\">内容1</CollapseItem>\n * <CollapseItem itemKey=\"2\" title=\"标题2\">内容2</CollapseItem>\n * </Collapse>\n * \n * // 受控模式 + 手风琴\n * <Collapse\n * activeKey={activeKey}\n * onChange={setActiveKey}\n * accordion\n * >\n * <CollapseItem itemKey=\"1\" title=\"标题1\">内容1</CollapseItem>\n * <CollapseItem itemKey=\"2\" title=\"标题2\">内容2</CollapseItem>\n * </Collapse>\n * ```\n */\n\nimport { useState, Children, cloneElement, isValidElement, forwardRef } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport { CollapseRoot } from './Collapse.style'\nimport type { CollapseItemProps } from './CollapseItem'\n\nexport interface CollapseProps {\n /** 当前激活的面板(受控) */\n activeKey?: string | number | (string | number)[]\n /** 默认激活的面板(非受控) */\n defaultActiveKey?: string | number | (string | number)[]\n /** 手风琴模式,每次只能展开一个面板 */\n accordion?: boolean\n /** 展开/收起回调 */\n onChange?: (activeKey: string | number | (string | number)[]) => void\n /** 子元素(CollapseItem) */\n children?: ReactNode\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * Collapse 折叠面板\n * \n * 特性:\n * - 支持受控和非受控模式\n * - 支持手风琴模式(accordion)\n * - 平滑的展开/收起动画\n * - 完整的键盘导航和无障碍支持\n */\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n activeKey: activeKeyProp,\n defaultActiveKey = [],\n accordion = false,\n onChange,\n children,\n className,\n },\n ref,\n ) => {\n // 内部状态(非受控模式)\n const [internalActiveKey, setInternalActiveKey] = useState<\n string | number | (string | number)[]\n >(defaultActiveKey)\n\n // 判断是否为受控模式\n const isControlled = activeKeyProp !== undefined\n const activeKey = isControlled ? activeKeyProp : internalActiveKey\n\n // 将 activeKey 统一转换为数组形式处理\n const activeKeys = Array.isArray(activeKey) ? activeKey : [activeKey]\n\n /**\n * 处理面板展开/收起\n */\n const handleChange = (itemKey: string | number, expanded: boolean) => {\n let newActiveKey: string | number | (string | number)[]\n\n if (accordion) {\n // 手风琴模式:只能展开一个\n newActiveKey = expanded ? itemKey : ''\n } else {\n // 普通模式:可以展开多个\n const currentKeys = Array.isArray(activeKey) ? [...activeKey] : activeKey ? [activeKey] : []\n \n if (expanded) {\n // 添加到激活列表\n newActiveKey = [...currentKeys, itemKey]\n } else {\n // 从激活列表移除\n newActiveKey = currentKeys.filter((key) => key !== itemKey)\n }\n }\n\n // 更新状态\n if (!isControlled) {\n setInternalActiveKey(newActiveKey)\n }\n\n // 触发回调\n onChange?.(newActiveKey)\n }\n\n /**\n * 渲染子元素\n */\n const renderChildren = () => {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<CollapseItemProps>[]\n const itemCount = items.length\n\n return items.map((child, index) => {\n const itemKey = child.props.itemKey\n const expanded = activeKeys.includes(itemKey)\n const last = index === itemCount - 1\n\n return cloneElement(child, {\n ...child.props,\n expanded,\n last,\n onChange: handleChange,\n })\n })\n }\n\n return (\n <CollapseRoot ref={ref} className={className} role=\"region\">\n {renderChildren()}\n </CollapseRoot>\n )\n },\n)\n\nCollapse.displayName = 'Collapse'\n\n\n\n\n\n","/**\n * CollapseItem 折叠面板项组件\n * \n * 单个可折叠的面板项,支持自定义标题、内容和后缀\n * \n * @example\n * ```tsx\n * <CollapseItem\n * title=\"折叠面板\"\n * suffix={<Tag>Red</Tag>}\n * >\n * 这是折叠面板的内容\n * </CollapseItem>\n * ```\n */\n\nimport { useRef, useEffect, useState, forwardRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { ChevronDownOutline } from '@kingsoft-ai/icons'\nimport {\n CollapseItemWrapper,\n CollapseHeader,\n ArrowWrapper,\n TitleWrapper,\n TitleText,\n SuffixWrapper,\n CollapseContentWrapper,\n CollapseContentInner,\n ContentText,\n} from './Collapse.style'\n\nexport interface CollapseItemProps {\n /** 面板唯一标识 */\n itemKey: string | number\n /** 标题内容(可以是字符串或自定义 ReactNode) */\n title?: ReactNode\n /** 面板内容 */\n children?: ReactNode\n /** 右侧后缀内容(如标签、图标等) */\n suffix?: ReactNode\n /** 是否展开(受控) */\n expanded?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 是否是最后一项(控制底部边框) */\n last?: boolean\n /** 展开/收起回调 */\n onChange?: (itemKey: string | number, expanded: boolean) => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * CollapseItem 折叠面板项\n * \n * 特性:\n * - 平滑的展开/收起动画\n * - 支持自定义标题和后缀\n * - 完整的键盘导航支持\n * - 自适应内容高度\n */\nexport const CollapseItem = forwardRef<HTMLDivElement, CollapseItemProps>(\n (\n {\n itemKey,\n title,\n children,\n suffix,\n expanded = false,\n disabled = false,\n last = false,\n onChange,\n className,\n },\n ref,\n ) => {\n const contentRef = useRef<HTMLDivElement>(null)\n const [contentHeight, setContentHeight] = useState(0)\n\n // 计算内容高度\n useEffect(() => {\n if (contentRef.current) {\n // 使用 scrollHeight 获取实际内容高度\n setContentHeight(contentRef.current.scrollHeight)\n }\n }, [children, expanded])\n\n // 处理点击\n const handleToggle = () => {\n if (disabled) return\n onChange?.(itemKey, !expanded)\n }\n\n // 处理键盘事件\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n // 空格或回车键切换展开状态\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n handleToggle()\n }\n }\n\n return (\n <CollapseItemWrapper ref={ref} isLast={last} className={className}>\n {/* 标题栏 */}\n <CollapseHeader\n isExpanded={expanded}\n isDisabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-expanded={expanded}\n aria-disabled={disabled}\n aria-controls={`collapse-content-${itemKey}`}\n >\n {/* 箭头图标 */}\n <ArrowWrapper isExpanded={expanded} aria-hidden=\"true\">\n <ChevronDownOutline />\n </ArrowWrapper>\n\n {/* 标题内容 */}\n <TitleWrapper>\n {typeof title === 'string' ? <TitleText>{title}</TitleText> : title}\n </TitleWrapper>\n\n {/* 右侧后缀 */}\n {suffix && <SuffixWrapper>{suffix}</SuffixWrapper>}\n </CollapseHeader>\n\n {/* 折叠内容 */}\n <CollapseContentWrapper\n isExpanded={expanded}\n contentHeight={contentHeight}\n id={`collapse-content-${itemKey}`}\n role=\"region\"\n aria-labelledby={`collapse-header-${itemKey}`}\n >\n <CollapseContentInner ref={contentRef} isExpanded={expanded}>\n {typeof children === 'string' ? (\n <ContentText>{children}</ContentText>\n ) : (\n children\n )}\n </CollapseContentInner>\n </CollapseContentWrapper>\n </CollapseItemWrapper>\n )\n },\n)\n\nCollapseItem.displayName = 'CollapseItem'\n\n\n\n\n\n","/**\n * FloatButton 悬浮按钮样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-float-button-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\nexport const floatButtonTypes = ['default', 'primary'] as const\nexport const floatButtonShapes = ['circle', 'square'] as const\nexport const floatButtonSizes = ['sm', 'md', 'lg'] as const\nexport const tooltipPlacements = ['top', 'bottom', 'left', 'right'] as const\n\nexport type FloatButtonType = (typeof floatButtonTypes)[number]\nexport type FloatButtonShape = (typeof floatButtonShapes)[number]\nexport type FloatButtonSize = (typeof floatButtonSizes)[number]\nexport type TooltipPlacement = (typeof tooltipPlacements)[number]\n\n/**\n * 获取按钮类型样式\n */\nconst getTypeStyles = (buttonType: FloatButtonType) => {\n if (buttonType === 'primary') {\n return css`\n background-color: var(--ksd-float-button-primary-bg);\n color: var(--ksd-float-button-primary-text);\n border: 1px solid var(--ksd-float-button-primary-border);\n box-shadow: var(--ksd-float-button-primary-shadow);\n\n &:hover:not(:disabled) {\n background-color: var(--ksd-float-button-primary-bg-hover);\n box-shadow: var(--ksd-float-button-primary-shadow-hover);\n }\n\n &:active:not(:disabled),\n &[data-pressed='true']:not(:disabled) {\n background-color: var(--ksd-float-button-primary-bg-active);\n transform: scale(0.95);\n }\n `\n }\n\n // default\n return css`\n background-color: var(--ksd-float-button-default-bg);\n color: var(--ksd-float-button-default-text);\n border: 1px solid var(--ksd-float-button-default-border);\n box-shadow: var(--ksd-float-button-default-shadow);\n\n &:hover:not(:disabled) {\n background-color: var(--ksd-float-button-default-bg-hover);\n box-shadow: var(--ksd-float-button-default-shadow-hover);\n }\n\n &:active:not(:disabled),\n &[data-pressed='true']:not(:disabled) {\n background-color: var(--ksd-float-button-default-bg-active);\n transform: scale(0.95);\n }\n `\n}\n\n/**\n * 获取按钮形状样式\n */\nconst getShapeStyles = (shape: FloatButtonShape, size: FloatButtonSize) => {\n if (shape === 'circle') {\n return css`\n width: var(--ksd-float-button-${size}-size);\n height: var(--ksd-float-button-${size}-size);\n border-radius: 50%;\n `\n }\n \n return css`\n width: var(--ksd-float-button-${size}-size);\n height: var(--ksd-float-button-${size}-size);\n border-radius: var(--ksd-radii-r2);\n `\n}\n\n/**\n * 悬浮按钮根元素\n */\nexport const FloatButtonRoot = styled.button<{\n $buttonType: FloatButtonType\n $shape: FloatButtonShape\n $size: FloatButtonSize\n $isPressed: boolean\n}>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n user-select: none;\n outline: none;\n border: none;\n padding: 0;\n z-index: 999;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n ${({ $buttonType }) => getTypeStyles($buttonType)}\n ${({ $shape, $size }) => getShapeStyles($shape, $size)}\n\n &:disabled {\n cursor: not-allowed;\n opacity: var(--ksd-float-button-disabled-opacity);\n background-color: var(--ksd-float-button-disabled-bg);\n color: var(--ksd-float-button-disabled-text);\n box-shadow: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n`\n\n/**\n * 按钮内容容器\n */\nexport const FloatButtonContent = styled.span`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ksd-spacing-xs);\n width: 100%;\n height: 100%;\n`\n\n/**\n * 图标包装器\n */\nexport const IconWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ksd-float-button-icon-size);\n line-height: 1;\n\n svg {\n width: 1em;\n height: 1em;\n }\n`\n\n/**\n * 描述文字\n */\nexport const Description = styled.span`\n font-size: var(--ksd-float-button-description-font-size);\n line-height: var(--ksd-float-button-description-line-height);\n color: inherit;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n padding: 0 var(--ksd-spacing-xs);\n`\n\n/**\n * Tooltip 包装器\n */\nexport const TooltipWrapper = styled.div`\n position: relative;\n display: inline-flex;\n`\n\n/**\n * 获取 tooltip 位置样式\n */\nconst getTooltipPosition = (placement: TooltipPlacement) => {\n switch (placement) {\n case 'top':\n return css`\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 8px;\n `\n case 'bottom':\n return css`\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 8px;\n `\n case 'left':\n return css`\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-right: 8px;\n `\n case 'right':\n return css`\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-left: 8px;\n `\n }\n}\n\n/**\n * Tooltip 卡片\n */\nexport const TooltipCard = styled.div<{\n $placement: TooltipPlacement\n $color?: string\n}>`\n position: absolute;\n z-index: 1050;\n padding: 6px 8px;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n background-color: ${({ $color }) => $color || 'rgba(0, 0, 0, 0.85)'};\n border-radius: 6px;\n box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n white-space: nowrap;\n animation: tooltipFadeIn 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n ${({ $placement }) => getTooltipPosition($placement)}\n\n @keyframes tooltipFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`\n\n/**\n * 获取箭头位置和方向\n */\nconst getArrowPosition = (placement: TooltipPlacement) => {\n const arrowSize = 5\n \n switch (placement) {\n case 'top':\n return css`\n bottom: -${arrowSize}px;\n left: 50%;\n transform: translateX(-50%);\n border-left: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid transparent;\n border-top: ${arrowSize}px solid currentColor;\n `\n case 'bottom':\n return css`\n top: -${arrowSize}px;\n left: 50%;\n transform: translateX(-50%);\n border-left: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid currentColor;\n `\n case 'left':\n return css`\n right: -${arrowSize}px;\n top: 50%;\n transform: translateY(-50%);\n border-top: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid transparent;\n border-left: ${arrowSize}px solid currentColor;\n `\n case 'right':\n return css`\n left: -${arrowSize}px;\n top: 50%;\n transform: translateY(-50%);\n border-top: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid currentColor;\n `\n }\n}\n\n/**\n * Tooltip 箭头\n */\nexport const TooltipArrow = styled.span<{\n $placement: TooltipPlacement\n $color?: string\n}>`\n position: absolute;\n width: 0;\n height: 0;\n color: ${({ $color }) => $color || 'rgba(0, 0, 0, 0.85)'};\n \n ${({ $placement }) => getArrowPosition($placement)}\n`\n","/**\n * FloatButton 悬浮按钮组件\n * \n * 基于 react-aria 实现无障碍访问的悬浮按钮组件\n * 参考 antd FloatButton 设计实现\n * \n * @example\n * ```tsx\n * <FloatButton\n * icon={<IconPlus />}\n * type=\"primary\"\n * onClick={() => console.log('clicked')}\n * />\n * ```\n */\n\nimport { forwardRef, useRef, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n FloatButtonRoot,\n FloatButtonContent,\n IconWrapper,\n Description,\n TooltipWrapper,\n TooltipCard,\n TooltipArrow,\n floatButtonTypes,\n floatButtonShapes,\n floatButtonSizes,\n type FloatButtonType,\n type FloatButtonShape,\n type FloatButtonSize,\n type TooltipPlacement,\n} from './FloatButton.style'\n\nexport type { TooltipPlacement }\n\nexport interface TooltipConfig {\n /** Tooltip 标题 */\n title?: ReactNode\n /** Tooltip 颜色 */\n color?: string\n /** Tooltip 位置 */\n placement?: TooltipPlacement\n}\n\nexport const TYPES = floatButtonTypes\nexport const SHAPES = floatButtonShapes\nexport const SIZES = floatButtonSizes\n\nexport interface FloatButtonProps extends Omit<AriaButtonProps, 'elementType'> {\n /** 按钮类型 */\n buttonType?: FloatButtonType\n /** 按钮形状 */\n shape?: FloatButtonShape\n /** 按钮尺寸 */\n size?: FloatButtonSize\n /** 图标 */\n icon?: ReactNode\n /** 文字描述 */\n description?: ReactNode\n /** 提示文字或配置 */\n tooltip?: ReactNode | TooltipConfig\n /** 是否禁用 */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n}\n\n/**\n * FloatButton 悬浮按钮组件\n * \n * 用于页面中的悬浮操作按钮,通常固定在页面特定位置\n * 支持圆形和方形两种形状\n */\nexport const FloatButton = forwardRef<HTMLButtonElement, FloatButtonProps>(\n (\n {\n buttonType = 'default',\n shape = 'circle',\n size = 'md',\n icon,\n description,\n tooltip,\n disabled,\n isDisabled,\n className,\n style,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n const [showTooltip, setShowTooltip] = useState(false)\n\n const finalDisabled = disabled ?? isDisabled\n\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: finalDisabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n // 解析 tooltip 配置\n const isTooltipConfig = typeof tooltip === 'object' && tooltip !== null && 'title' in tooltip\n const tooltipConfig = isTooltipConfig ? tooltip as TooltipConfig : null\n const tooltipTitle: ReactNode = tooltipConfig?.title ?? (isTooltipConfig ? null : tooltip as ReactNode)\n const tooltipColor = tooltipConfig?.color\n const tooltipPlacement = tooltipConfig?.placement ?? 'top'\n const hasTooltip = !!tooltipTitle\n\n return (\n <TooltipWrapper\n onMouseEnter={() => hasTooltip && setShowTooltip(true)}\n onMouseLeave={() => hasTooltip && setShowTooltip(false)}\n >\n {hasTooltip && showTooltip && (\n <TooltipCard $placement={tooltipPlacement} $color={tooltipColor}>\n {tooltipTitle}\n <TooltipArrow $placement={tooltipPlacement} $color={tooltipColor} />\n </TooltipCard>\n )}\n <FloatButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n style,\n })}\n $buttonType={buttonType}\n $shape={shape}\n $size={size}\n $isPressed={isPressed}\n >\n <FloatButtonContent>\n {icon && <IconWrapper>{icon}</IconWrapper>}\n {description && <Description>{description}</Description>}\n </FloatButtonContent>\n </FloatButtonRoot>\n </TooltipWrapper>\n )\n },\n)\n\nFloatButton.displayName = 'FloatButton'\n","/**\n * Input 输入框样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-input-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const inputSizes = ['sm', 'md', 'lg'] as const\nexport type InputSize = (typeof inputSizes)[number]\n\n// ============================================================================\n// 样式辅助函数\n// ============================================================================\n\n/**\n * 获取输入框尺寸样式\n * 使用 CSS 变量实现\n */\nconst getSizeStyles = (size: InputSize) => {\n return css`\n height: var(--ksd-input-${size}-height);\n font-size: var(--ksd-input-${size}-font-size);\n padding-inline: var(--ksd-input-${size}-padding-inline);\n\n /* 图标尺寸 */\n svg {\n width: var(--ksd-input-${size}-icon-size);\n height: var(--ksd-input-${size}-icon-size);\n flex-shrink: 0;\n }\n `\n}\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Input 根容器\n * \n * 特性:\n * - 基于 CSS 变量,无需 ThemeProvider\n * - 处理边框颜色状态切换\n * - 支持全宽模式\n */\nexport const InputRoot = styled.div<{\n size: InputSize\n fullWidth: boolean\n isFocused: boolean\n isError: boolean\n isDisabled: boolean\n isHovered: boolean\n}>`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n width: ${({ fullWidth }) => (fullWidth ? '100%' : '200px')};\n min-width: 200px; /* 防止内容动态变化导致宽度闪烁 */\n\n /* 边框样式 */\n border: 1px solid;\n border-color: var(--ksd-input-border-default);\n border-radius: var(--ksd-input-border-radius);\n\n /* 背景色 */\n background: var(--ksd-input-bg-default);\n\n /* 过渡动画 */\n transition: \n border-color var(--ksd-input-transition),\n background var(--ksd-input-transition);\n\n /* 尺寸样式 */\n ${({ size }) => getSizeStyles(size)}\n\n /* Hover 状态 */\n ${({ isHovered, isFocused, isError, isDisabled }) =>\n isHovered &&\n !isFocused &&\n !isError &&\n !isDisabled &&\n css`\n border-color: var(--ksd-input-border-hover);\n `}\n\n /* Focus 状态 */\n ${({ isFocused, isError, isDisabled }) =>\n isFocused &&\n !isError &&\n !isDisabled &&\n css`\n border-color: var(--ksd-input-border-focus);\n `}\n\n /* Error 状态 */\n ${({ isError, isDisabled }) =>\n isError &&\n !isDisabled &&\n css`\n border-color: var(--ksd-input-border-error);\n `}\n\n /* 禁用状态 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n cursor: not-allowed;\n opacity: var(--ksd-input-disabled-opacity);\n background: var(--ksd-input-bg-disabled);\n border-color: var(--ksd-input-border-disabled);\n `}\n\n /* 全宽模式 */\n ${({ fullWidth }) =>\n fullWidth &&\n css`\n width: 100%;\n `}\n`\n\n/**\n * 输入框内部包装器\n * \n * 用于布局前缀图标、输入框、后缀图标、清除按钮和计数器\n */\nexport const InputWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-input-gap);\n width: 100%;\n height: 100%;\n`\n\n/**\n * 原生 input 元素\n * \n * 特性:\n * - 无边框、背景透明(由容器处理)\n * - 支持错误状态文字颜色\n * - 占位符样式\n */\nexport const StyledInput = styled.input<{\n isError: boolean\n isDisabled: boolean\n}>`\n /* 重置默认样式 */\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n padding: 0;\n margin: 0;\n\n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-size: inherit;\n line-height: 1.5;\n color: var(--ksd-input-text-default);\n\n /* 错误状态文字颜色 */\n ${({ isError }) =>\n isError &&\n css`\n color: var(--ksd-input-text-error);\n `}\n\n /* 禁用状态文字颜色 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n color: var(--ksd-input-text-disabled);\n cursor: not-allowed;\n user-select: none;\n `}\n\n /* 占位符样式 */\n &::placeholder {\n color: var(--ksd-input-text-placeholder);\n opacity: 1;\n }\n\n /* 移除默认的 focus 样式 */\n &:focus {\n outline: none;\n }\n\n /* 移除数字输入框的箭头(Chrome, Safari, Edge, Opera) */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n /* 移除数字输入框的箭头(Firefox) */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n`\n\n/**\n * 图标包装器(前缀/后缀图标)\n * \n * 特性:\n * - 灵活的尺寸适配\n * - 颜色自动继承或根据状态调整\n */\nexport const IconWrapper = styled.span<{\n isError: boolean\n isDisabled: boolean\n position: 'prefix' | 'suffix'\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n\n /* 默认颜色 */\n color: var(--ksd-input-text-default);\n\n /* 错误状态颜色 */\n ${({ isError }) =>\n isError &&\n css`\n color: var(--ksd-input-text-error);\n `}\n\n /* 禁用状态颜色 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n color: var(--ksd-input-text-disabled);\n `}\n\n /* 确保图标大小一致 */\n svg {\n display: block;\n }\n`\n\n/**\n * 清除按钮\n * \n * 特性:\n * - 仅在有内容且未禁用时显示\n * - hover 时有反馈效果\n * - 无障碍友好\n */\nexport const ClearButton = styled.button<{\n isError: boolean\n}>`\n /* 重置按钮样式 */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n outline: none;\n line-height: 0;\n\n /* 颜色 */\n color: var(--ksd-input-text-counter);\n\n /* 错误状态颜色 */\n ${({ isError }) =>\n isError &&\n css`\n color: var(--ksd-input-text-error);\n `}\n\n /* 过渡动画 */\n transition: \n opacity var(--ksd-input-transition),\n color var(--ksd-input-transition);\n\n /* hover 状态 */\n &:hover {\n opacity: 0.7;\n }\n\n /* active 状态 */\n &:active {\n opacity: 0.5;\n }\n\n /* focus 可见状态 */\n &:focus-visible {\n outline: 2px solid var(--ksd-input-border-focus);\n outline-offset: 2px;\n border-radius: 2px;\n }\n\n /* 图标尺寸 */\n svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n`\n\n/**\n * 字符计数器\n * \n * 显示格式:当前字数/最大字数\n */\nexport const Counter = styled.span<{\n isError: boolean\n isDisabled: boolean\n}>`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n font-family: var(--ksd-typography-font-family);\n font-size: inherit;\n line-height: 1.5;\n white-space: nowrap;\n user-select: none;\n\n /* 默认颜色 */\n color: var(--ksd-input-text-counter);\n\n /* 错误状态颜色 */\n ${({ isError }) =>\n isError &&\n css`\n color: var(--ksd-input-text-error);\n `}\n\n /* 禁用状态颜色 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n color: var(--ksd-input-text-disabled);\n `}\n`\n","/**\n * Input 输入框组件\n * \n * 基于 react-aria 实现无障碍访问的输入框组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * <Input\n * size=\"md\"\n * placeholder=\"请输入内容\"\n * clearable\n * showCounter\n * maxLength={100}\n * />\n * ```\n */\n\nimport { forwardRef, useRef, useState, type ReactNode, type ChangeEvent, type FocusEvent } from 'react'\nimport {\n InputRoot,\n InputWrapper,\n StyledInput,\n IconWrapper,\n ClearButton,\n Counter,\n inputSizes,\n type InputSize,\n} from './Input.style'\n\n// 导出常量供外部使用\nexport const SIZES = inputSizes\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'prefix'\n> & {\n /** 输入框尺寸:小号(24px)、标准(32px)、大号(40px) */\n size?: InputSize\n /** 前缀图标 */\n prefix?: ReactNode\n /** 后缀图标 */\n suffix?: ReactNode\n /** 是否显示清除按钮(有值时显示) */\n clearable?: boolean\n /** 错误状态 */\n error?: boolean\n /** 错误提示信息 */\n errorMessage?: ReactNode\n /** 是否显示字符计数器 */\n showCounter?: boolean\n /** 全宽输入框 */\n fullWidth?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 输入框标签 */\n label?: ReactNode\n /** 输入框描述 */\n description?: ReactNode\n}\n\n/**\n * 清除图标 SVG\n */\nconst CloseIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\n/**\n * Input 输入框组件\n * \n * 基于 Figma 设计规范实现的输入框组件,支持多种尺寸和状态\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'md',\n prefix,\n suffix,\n clearable = false,\n error = false,\n errorMessage,\n showCounter = false,\n fullWidth = false,\n disabled,\n className,\n type = 'text',\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n maxLength,\n label,\n description,\n id,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...restProps\n },\n forwardedRef\n ) => {\n const innerRef = useRef<HTMLInputElement>(null)\n const ref = (forwardedRef || innerRef) as React.RefObject<HTMLInputElement>\n \n // 生成唯一 ID(只在组件初始化时生成一次)\n const generatedId = useRef(`input-${Math.random().toString(36).slice(2, 9)}`)\n\n // 内部状态管理(用于 UI 反馈)\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const [internalValue, setInternalValue] = useState(defaultValue || '')\n\n // 获取当前值(受控或非受控)\n const isControlled = value !== undefined\n const currentValue = isControlled ? String(value) : String(internalValue)\n\n // 处理输入变化\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n // 处理焦点事件\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n setIsFocused(true)\n onFocus?.(e)\n }\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n setIsFocused(false)\n onBlur?.(e)\n }\n\n // 清除按钮点击处理\n const handleClear = () => {\n if (disabled || !ref.current) return\n\n // 创建合成事件以触发 onChange\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n )?.set\n nativeInputValueSetter?.call(ref.current, '')\n\n const event = new Event('input', { bubbles: true })\n Object.defineProperty(event, 'target', {\n writable: false,\n value: ref.current,\n })\n \n if (!isControlled) {\n setInternalValue('')\n }\n onChange?.(event as unknown as ChangeEvent<HTMLInputElement>)\n\n // 聚焦回输入框\n ref.current.focus()\n }\n\n // 计算字符数\n const currentLength = currentValue.length\n const showClearButton = clearable && currentLength > 0 && !disabled\n\n // 使用提供的 ID 或生成的唯一 ID\n const inputId = id || generatedId.current\n const descriptionId = description ? `${inputId}-description` : undefined\n const errorId = errorMessage && error ? `${inputId}-error` : undefined\n \n const describedBy = [ariaDescribedBy, descriptionId, errorId]\n .filter(Boolean)\n .join(' ') || undefined\n\n return (\n <div>\n {/* Label 如果提供 */}\n {label && (\n <label htmlFor={inputId} style={{ display: 'block', marginBottom: 4 }}>\n {label}\n </label>\n )}\n\n <InputRoot\n size={size}\n fullWidth={fullWidth}\n isFocused={isFocused}\n isError={error}\n isDisabled={!!disabled}\n isHovered={isHovered}\n className={className}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <InputWrapper>\n {/* 前缀图标 */}\n {prefix && (\n <IconWrapper\n isError={error}\n isDisabled={!!disabled}\n position=\"prefix\"\n aria-hidden=\"true\"\n >\n {prefix}\n </IconWrapper>\n )}\n\n {/* 输入框 */}\n <StyledInput\n {...restProps}\n ref={ref}\n id={inputId}\n type={type}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n maxLength={maxLength}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={error}\n isError={error}\n isDisabled={!!disabled}\n />\n\n {/* 清除按钮 */}\n {showClearButton && (\n <ClearButton\n type=\"button\"\n onClick={handleClear}\n aria-label=\"清除内容\"\n isError={error}\n tabIndex={-1}\n >\n <CloseIcon />\n </ClearButton>\n )}\n\n {/* 后缀图标 */}\n {suffix && (\n <IconWrapper\n isError={error}\n isDisabled={!!disabled}\n position=\"suffix\"\n aria-hidden=\"true\"\n >\n {suffix}\n </IconWrapper>\n )}\n\n {/* 字符计数器 */}\n {showCounter && maxLength !== undefined && (\n <Counter\n isError={error}\n isDisabled={!!disabled}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {currentLength}/{maxLength}\n </Counter>\n )}\n </InputWrapper>\n </InputRoot>\n\n {/* Description 如果提供 */}\n {description && (\n <div id={descriptionId} style={{ marginTop: 4, fontSize: 12 }}>\n {description}\n </div>\n )}\n\n {/* Error Message 如果提供 */}\n {errorMessage && error && (\n <div\n id={errorId}\n role=\"alert\"\n style={{ marginTop: 4, fontSize: 12, color: 'inherit' }}\n >\n {errorMessage}\n </div>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\n","/**\n * Menu 菜单样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-menu-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport interface MenuStyleProps {\n collapsed?: boolean\n}\n\nexport interface MenuItemStyleProps {\n active?: boolean\n disabled?: boolean\n isSubItem?: boolean\n collapsed?: boolean\n}\n\n// ============================================================================\n// Menu 容器样式\n// ============================================================================\n\n/**\n * Menu 根容器\n */\nexport const MenuContainer = styled.div<MenuStyleProps>`\n display: flex;\n flex-direction: column;\n width: ${({ collapsed }) => \n collapsed ? 'var(--ksd-menu-container-width-collapsed)' : 'var(--ksd-menu-container-width-expanded)'};\n height: 100%;\n background: var(--ksd-menu-container-bg);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n\n /* 滚动条样式 */\n &::-webkit-scrollbar {\n width: var(--ksd-menu-scrollbar-width);\n }\n\n &::-webkit-scrollbar-track {\n background: var(--ksd-menu-scrollbar-track-color);\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-menu-scrollbar-thumb-color);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n`\n\n/**\n * Menu 内容滚动区域\n */\nexport const MenuContent = styled.div`\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: var(--ksd-menu-container-padding);\n padding-top: 0;\n\n /* 滚动条样式 */\n &::-webkit-scrollbar {\n width: var(--ksd-menu-scrollbar-width);\n }\n\n &::-webkit-scrollbar-track {\n background: var(--ksd-menu-scrollbar-track-color);\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-menu-scrollbar-thumb-color);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n`\n\n// ============================================================================\n// MenuItem 样式\n// ============================================================================\n\n/**\n * MenuItem 容器\n */\nexport const MenuItemContainer = styled.button<MenuItemStyleProps>`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n height: var(--ksd-menu-item-height);\n padding-inline: ${({ isSubItem }) => \n isSubItem ? 'var(--ksd-menu-subitem-padding-left)' : 'var(--ksd-menu-item-padding-inline)'};\n gap: var(--ksd-menu-item-gap);\n border: none;\n border-radius: var(--ksd-menu-item-border-radius);\n position: relative;\n overflow: hidden;\n background: ${({ active, collapsed }) =>\n collapsed\n ? 'transparent'\n : active\n ? 'transparent'\n : 'var(--ksd-menu-item-bg)'};\n color: ${({ active, collapsed }) =>\n collapsed && active\n ? 'var(--ksd-brand-primary-active)'\n : active\n ? 'var(--ksd-menu-item-text-active)'\n : 'var(--ksd-menu-item-text)'};\n font-size: var(--ksd-menu-item-font-size);\n font-weight: var(--ksd-menu-item-font-weight);\n font-family: var(--ksd-typography-font-family);\n text-align: left;\n cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n transition: var(--ksd-menu-item-transition);\n user-select: none;\n outline: none;\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: var(--ksd-menu-item-bg-active);\n transform-origin: left center;\n transform: ${({ active, collapsed }) => (collapsed ? 'scaleX(0)' : active ? 'scaleX(1)' : 'scaleX(0)')};\n opacity: ${({ active, collapsed }) => (collapsed ? 0 : active ? 1 : 0)};\n transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease;\n z-index: 0;\n }\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: var(--ksd-menu-item-bg-hover);\n transform: translateX(-100%);\n opacity: 0;\n transition: transform 0.3s ease, opacity 0.2s ease;\n z-index: 0;\n }\n\n & > * {\n position: relative;\n z-index: 1;\n }\n\n /* Hover 状态 */\n &:hover:not(:disabled) {\n background: ${({ active, collapsed }) =>\n collapsed\n ? 'transparent'\n : active\n ? 'transparent'\n : 'var(--ksd-menu-item-bg-hover)'};\n color: ${({ active, collapsed }) =>\n collapsed\n ? 'var(--ksd-brand-primary-active)'\n : active\n ? 'var(--ksd-menu-item-text-active)'\n : 'var(--ksd-menu-item-text-hover)'};\n }\n\n &:hover:not(:disabled)::after {\n transform: ${({ collapsed, active }) =>\n !collapsed && !active ? 'translateX(0)' : 'translateX(-100%)'};\n opacity: ${({ collapsed, active }) => (!collapsed && !active ? 1 : 0)};\n }\n\n /* 禁用状态 */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Focus 状态 */\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: -2px;\n }\n`\n\n/**\n * MenuItem 图标容器\n */\nexport const MenuItemIcon = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ksd-menu-item-icon-size);\n height: var(--ksd-menu-item-icon-size);\n\n svg {\n width: 100%;\n height: 100%;\n }\n`\n\n/**\n * MenuItem 文字标签\n */\nexport const MenuItemLabel = styled.span<{ collapsed?: boolean }>`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n transition: opacity 0.2s ease;\n`\n\n/**\n * MenuItem 箭头图标\n */\nexport const MenuItemArrow = styled.span<{ collapsed?: boolean; expanded?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n transition: transform 0.2s ease, opacity 0.2s ease;\n transform: ${({ expanded }) => (expanded ? 'rotate(90deg)' : 'rotate(0deg)')};\n\n svg {\n width: 100%;\n height: 100%;\n }\n`\n\n// ============================================================================\n// MenuGroup 样式\n// ============================================================================\n\n/**\n * MenuGroup 容器\n */\nexport const MenuGroupContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--ksd-menu-group-gap);\n margin-top: var(--ksd-menu-group-margin-top);\n\n &:first-of-type {\n margin-top: 0;\n }\n`\n\n/**\n * MenuGroup 标题\n */\nexport const MenuGroupTitle = styled.div<{ collapsed?: boolean }>`\n display: flex;\n align-items: center;\n height: var(--ksd-menu-group-title-height);\n padding-inline: 0;\n margin-bottom: var(--ksd-menu-group-title-margin-bottom);\n font-size: var(--ksd-menu-group-title-font-size);\n font-weight: var(--ksd-menu-group-title-font-weight);\n color: var(--ksd-menu-group-title-color);\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n transition: opacity 0.2s ease;\n overflow: hidden;\n\n /* 分割线 */\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--ksd-border-primary);\n margin-left: 8px;\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n }\n`\n\n/**\n * MenuGroup 项目容器\n */\nexport const MenuGroupItems = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--ksd-menu-group-gap);\n`\n\n// ============================================================================\n// SubMenuPopover 悬浮层样式\n// ============================================================================\n\n/**\n * SubMenuPopover 容器\n */\nexport const SubMenuPopoverContainer = styled.div`\n position: fixed;\n z-index: 9999;\n min-width: 200px;\n background: var(--ksd-menu-popover-bg);\n border: var(--ksd-menu-popover-border);\n border-radius: var(--ksd-menu-popover-border-radius);\n box-shadow: var(--ksd-menu-popover-shadow);\n padding: var(--ksd-menu-popover-padding);\n animation: slideIn 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n`\n\n/**\n * SubMenuPopover 内容区域\n */\nexport const SubMenuPopoverContent = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--ksd-menu-group-gap);\n`\n\n/**\n * SubMenuPopover 菜单项容器\n */\nexport const SubMenuPopoverItem = styled.button<{ active?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n height: var(--ksd-menu-item-height);\n padding-inline: var(--ksd-menu-item-padding-inline);\n gap: var(--ksd-menu-item-gap);\n border: none;\n border-radius: var(--ksd-menu-item-border-radius);\n background: ${({ active }) =>\n active\n ? 'var(--ksd-menu-popover-item-bg-active)'\n : 'var(--ksd-menu-popover-item-bg)'};\n color: ${({ active }) =>\n active\n ? 'var(--ksd-menu-popover-item-text-active)'\n : 'var(--ksd-menu-popover-item-text)'};\n font-size: var(--ksd-menu-item-font-size);\n font-weight: var(--ksd-menu-item-font-weight);\n font-family: var(--ksd-typography-font-family);\n text-align: left;\n cursor: pointer;\n transition: var(--ksd-menu-item-transition);\n user-select: none;\n outline: none;\n white-space: nowrap;\n\n &:hover {\n background: ${({ active }) =>\n active\n ? 'var(--ksd-menu-popover-item-bg-active)'\n : 'var(--ksd-menu-popover-item-bg-hover)'};\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: -2px;\n }\n`\n","/**\n * Menu 侧边栏菜单组件\n * \n * 基于 Figma 设计稿的导航菜单组件\n * 支持展开/折叠、分组、子菜单等功能\n */\n\nimport { forwardRef, type ReactNode } from 'react'\nimport { MenuContainer, MenuContent } from './Menu.style'\n\nexport interface MenuProps {\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 子元素(自定义内容、MenuGroup、MenuItem等) */\n children: ReactNode\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n}\n\n/**\n * Menu 侧边栏菜单组件\n * \n * 主容器组件,用于包裹所有菜单相关子组件\n * \n * @example\n * ```tsx\n * <Menu collapsed={false}>\n * <div style={{ padding: 24 }}>自定义头部</div>\n *\n * <MenuGroup title=\"主要功能\">\n * <MenuItem icon={<HomeIcon />} label=\"首页\" active />\n * <MenuItem icon={<UserIcon />} label=\"用户\" />\n * </MenuGroup>\n * \n * <div style={{ padding: 24 }}>自定义底部</div>\n * </Menu>\n * ```\n */\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ collapsed = false, children, className, style }, ref) => {\n return (\n <MenuContainer\n ref={ref}\n collapsed={collapsed}\n className={className}\n style={style}\n role=\"navigation\"\n aria-label=\"主导航\"\n >\n <MenuContent role=\"menu\">{children}</MenuContent>\n </MenuContainer>\n )\n },\n)\n\nMenu.displayName = 'Menu'\n\n","/**\n * SubMenuPopover 子菜单悬浮层组件\n * \n * 用于在折叠状态下显示二级菜单\n */\n\nimport { type ReactNode, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { SubMenuPopoverContainer, SubMenuPopoverContent } from './Menu.style'\n\nexport interface SubMenuPopoverProps {\n /** 是否显示 */\n visible: boolean\n /** 触发元素的引用 */\n anchorRef: React.RefObject<HTMLElement>\n /** 子菜单内容 */\n children: ReactNode\n /** 关闭回调 */\n onClose?: () => void\n /** 鼠标移入事件 */\n onMouseEnter?: () => void\n /** 鼠标移出事件 */\n onMouseLeave?: () => void\n}\n\n/**\n * SubMenuPopover 子菜单悬浮层组件\n * \n * 在折叠状态下,鼠标悬浮一级菜单时展示二级菜单\n */\nexport const SubMenuPopover = ({\n visible,\n anchorRef,\n children,\n onClose,\n onMouseEnter,\n onMouseLeave,\n}: SubMenuPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n\n // 计算弹出层位置\n useEffect(() => {\n if (!visible || !anchorRef.current) return\n\n const updatePosition = () => {\n if (!anchorRef.current) return\n\n const rect = anchorRef.current.getBoundingClientRect()\n const gap = 4 // 与触发元素的间距\n\n setPosition({\n top: rect.top,\n left: rect.right + gap,\n })\n }\n\n updatePosition()\n\n // 监听滚动和窗口大小变化\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n }, [visible, anchorRef])\n\n // 处理点击外部关闭\n useEffect(() => {\n if (!visible) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n anchorRef.current &&\n !anchorRef.current.contains(e.target as Node)\n ) {\n onClose?.()\n }\n }\n\n // 延迟添加监听器,避免立即触发\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside)\n }, 100)\n\n return () => {\n clearTimeout(timer)\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [visible, onClose, anchorRef])\n\n if (!visible) return null\n\n return createPortal(\n <SubMenuPopoverContainer\n ref={popoverRef}\n style={{\n top: position.top,\n left: position.left,\n }}\n role=\"menu\"\n aria-label=\"子菜单\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <SubMenuPopoverContent>{children}</SubMenuPopoverContent>\n </SubMenuPopoverContainer>,\n document.body,\n )\n}\n\nSubMenuPopover.displayName = 'SubMenuPopover'\n\n","/**\n * MenuItem 菜单项组件\n * \n * 基于 react-aria 实现无障碍访问的菜单项\n * 支持图标、文字、箭头指示器、悬浮子菜单\n */\n\nimport { forwardRef, type ReactNode, useRef, useState } from 'react'\nimport {\n MenuItemContainer,\n MenuItemIcon,\n MenuItemLabel,\n MenuItemArrow,\n} from './Menu.style'\nimport { SubMenuPopover } from './SubMenuPopover'\n\nexport interface MenuItemProps {\n /** 唯一标识符 */\n id?: string\n /** 菜单项图标 */\n icon?: ReactNode\n /** 菜单项文字 */\n label: string\n /** 是否激活/选中 */\n active?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 是否为子菜单项 */\n isSubItem?: boolean\n /** 是否显示箭头(用于可展开项) */\n showArrow?: boolean\n /** 箭头是否展开 */\n arrowExpanded?: boolean\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 子菜单内容(折叠状态下悬浮显示) */\n subMenu?: ReactNode\n /** 点击事件 */\n onClick?: () => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * MenuItem 菜单项组件\n * \n * 用于侧边栏导航的单个菜单项\n * 支持激活状态、禁用状态、子菜单缩进、折叠时的悬浮子菜单\n */\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(\n (\n {\n id,\n icon,\n label,\n active = false,\n disabled = false,\n isSubItem = false,\n showArrow = false,\n arrowExpanded = false,\n collapsed = false,\n subMenu,\n onClick,\n className,\n },\n ref,\n ) => {\n const itemRef = useRef<HTMLButtonElement>(null)\n const [showPopover, setShowPopover] = useState(false)\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n // 清除所有定时器\n const clearTimers = () => {\n if (hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current)\n hoverTimerRef.current = undefined\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = undefined\n }\n }\n\n // 处理鼠标进入\n const handleMouseEnter = () => {\n clearTimers()\n \n if (collapsed && subMenu) {\n if (showPopover) return\n\n // 延迟显示,避免误触\n hoverTimerRef.current = setTimeout(() => {\n setShowPopover(true)\n }, 200)\n }\n }\n\n // 处理鼠标离开\n const handleMouseLeave = () => {\n clearTimers()\n \n // 延迟隐藏,让用户有时间移动到悬浮层\n closeTimerRef.current = setTimeout(() => {\n setShowPopover(false)\n }, 100)\n }\n\n return (\n <>\n <MenuItemContainer\n ref={(node) => {\n // 合并 refs\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n if (node) {\n itemRef.current = node\n }\n }}\n id={id}\n active={active}\n disabled={disabled}\n isSubItem={isSubItem}\n onClick={onClick}\n collapsed={collapsed}\n className={className}\n role=\"menuitem\"\n aria-disabled={disabled}\n aria-current={active ? 'page' : undefined}\n aria-haspopup={collapsed && subMenu ? 'menu' : undefined}\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* 图标 */}\n {icon && <MenuItemIcon aria-hidden=\"true\">{icon}</MenuItemIcon>}\n\n {/* 文字标签 */}\n <MenuItemLabel collapsed={collapsed}>{label}</MenuItemLabel>\n\n {/* 箭头指示器 */}\n {showArrow && !collapsed && (\n <MenuItemArrow collapsed={collapsed} expanded={arrowExpanded} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.25 3.5L8.75 7L5.25 10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </MenuItemArrow>\n )}\n </MenuItemContainer>\n\n {/* 折叠状态下的悬浮子菜单 */}\n {collapsed && subMenu && (\n <SubMenuPopover\n visible={showPopover}\n anchorRef={itemRef as React.RefObject<HTMLElement>}\n onClose={() => setShowPopover(false)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {subMenu}\n </SubMenuPopover>\n )}\n </>\n )\n },\n)\n\nMenuItem.displayName = 'MenuItem'\n\n","/**\n * MenuGroup 菜单分组组件\n * \n * 用于对菜单项进行分组,并显示分组标题\n */\n\nimport { type ReactNode } from 'react'\nimport {\n MenuGroupContainer,\n MenuGroupTitle,\n MenuGroupItems,\n} from './Menu.style'\n\nexport interface MenuGroupProps {\n /** 分组标题 */\n title?: string\n /** 子元素(菜单项) */\n children: ReactNode\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * MenuGroup 菜单分组组件\n * \n * 用于将相关的菜单项组织在一起\n * 可选的分组标题和分割线\n */\nexport const MenuGroup = ({\n title,\n children,\n collapsed = false,\n className,\n}: MenuGroupProps) => {\n return (\n <MenuGroupContainer className={className} role=\"group\" aria-label={title}>\n {/* 分组标题 */}\n {title && (\n <MenuGroupTitle collapsed={collapsed} aria-hidden={collapsed}>\n {title}\n </MenuGroupTitle>\n )}\n\n {/* 菜单项列表 */}\n <MenuGroupItems>{children}</MenuGroupItems>\n </MenuGroupContainer>\n )\n}\n\nMenuGroup.displayName = 'MenuGroup'\n\n","/**\n * SubMenuItem 子菜单项组件\n * \n * 用于在悬浮层中展示的子菜单项\n */\n\nimport { SubMenuPopoverItem } from './Menu.style'\n\nexport interface SubMenuItemProps {\n /** 唯一标识符 */\n id?: string\n /** 菜单项文字 */\n label: string\n /** 是否激活/选中 */\n active?: boolean\n /** 点击事件 */\n onClick?: () => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * SubMenuItem 子菜单项组件\n * \n * 用于悬浮层中的子菜单项\n */\nexport const SubMenuItem = ({\n id,\n label,\n active = false,\n onClick,\n className,\n}: SubMenuItemProps) => {\n return (\n <SubMenuPopoverItem\n id={id}\n active={active}\n onClick={onClick}\n className={className}\n role=\"menuitem\"\n aria-current={active ? 'page' : undefined}\n type=\"button\"\n >\n {label}\n </SubMenuPopoverItem>\n )\n}\n\nSubMenuItem.displayName = 'SubMenuItem'\n\n","/**\n * Link 链接组件样式\n *\n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-link-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled';\nimport { css } from '@emotion/react';\n\nexport type LinkVariant = 'primary' | 'neutral';\nexport type LinkSize = 'sm' | 'md' | 'lg';\n\n/**\n * 获取变体样式\n */\nconst getVariantStyles = (variant: LinkVariant) => {\n if (variant === 'neutral') {\n return css`\n color: var(--ksd-link-neutral-color);\n text-decoration: var(--ksd-link-neutral-decoration);\n \n &:hover:not(:disabled) {\n color: var(--ksd-link-neutral-color-hover);\n text-decoration: var(--ksd-link-neutral-decoration-hover);\n }\n \n &:active:not(:disabled) {\n color: var(--ksd-link-neutral-color-active);\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n color: var(--ksd-link-neutral-color-disabled);\n }\n `;\n }\n \n // primary\n return css`\n color: var(--ksd-link-primary-color);\n text-decoration: var(--ksd-link-primary-decoration);\n \n &:hover:not(:disabled) {\n color: var(--ksd-link-primary-color-hover);\n text-decoration: var(--ksd-link-primary-decoration-hover);\n }\n \n &:active:not(:disabled) {\n color: var(--ksd-link-primary-color-active);\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n color: var(--ksd-link-primary-color-disabled);\n }\n `;\n};\n\n/**\n * 获取尺寸样式\n */\nconst getSizeStyles = (size: LinkSize) => {\n return css`\n font-size: var(--ksd-link-${size}-font-size);\n `;\n};\n\n/**\n * Link 样式组件\n */\nexport const LinkRoot = styled.a<{\n variant: LinkVariant;\n size: LinkSize;\n isDisabled?: boolean;\n}>`\n /* 基础样式 */\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: ${({ isDisabled }) => isDisabled ? 'not-allowed' : 'pointer'};\n border-radius: var(--ksd-link-border-radius);\n transition: color var(--ksd-link-transition);\n outline: none;\n \n /* 变体样式 */\n ${({ variant }) => getVariantStyles(variant)}\n \n /* 尺寸样式 */\n ${({ size }) => getSizeStyles(size)}\n \n /* Focus 状态 */\n &:focus-visible {\n outline: 2px solid var(--ksd-link-focus-ring-color);\n outline-offset: var(--ksd-link-focus-ring-offset);\n }\n \n /* 禁用状态 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n pointer-events: none;\n `}\n \n /* 图标样式 */\n svg {\n flex-shrink: 0;\n }\n`;\n","import { forwardRef, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLink } from 'react-aria';\nimport { mergeProps } from '@react-aria/utils';\nimport { LinkRoot, type LinkVariant, type LinkSize } from './Link.style';\n\n// Helper to extract props type from useLink\ntype UseLinkProps = Parameters<typeof useLink>[0];\n\nexport type LinkProps = UseLinkProps & {\n /** 链接变体:primary (主色), neutral (中性色) */\n variant?: LinkVariant;\n /** 链接尺寸:sm (12px), md (14px), lg (16px) */\n size?: LinkSize;\n /** 是否禁用(统一 API,优先级高于 isDisabled) */\n disabled?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 子元素 */\n children?: ReactNode;\n};\n\n/**\n * Link 文字链接组件\n *\n * 用于页面内的跳转或操作,支持多种状态和尺寸。\n * 基于 react-aria useLink 实现无障碍访问。\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n disabled,\n className,\n children,\n isDisabled,\n ...props\n },\n forwardedRef\n ) => {\n const innerRef = useRef<HTMLAnchorElement>(null);\n const ref = forwardedRef || innerRef;\n\n // disabled 优先于 isDisabled\n const finalDisabled = disabled ?? isDisabled;\n\n const { linkProps } = useLink(\n {\n ...props,\n isDisabled: finalDisabled,\n elementType: 'a',\n },\n innerRef\n );\n\n return (\n <LinkRoot\n ref={ref}\n as=\"a\"\n className={className}\n variant={variant}\n size={size}\n {...mergeProps(linkProps, { ariaDisabled: finalDisabled })}\n >\n {children}\n </LinkRoot>\n );\n }\n);\n\nLink.displayName = 'Link';\n","/**\n * Modal 样式(React Aria)\n *\n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-modal-*\n *\n * 设计目标:\n * - 轻盈、科技、极简阴影(避免厚重\"Antd 弹窗\"观感)\n * - overlay / dialog / close button 三层明确分工\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`\n\nconst dialogIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.985);\n }\n to {\n opacity: 1;\n transform: translateY(0px) scale(1);\n }\n`\n\nexport const ModalPortalRoot = styled.div`\n position: fixed;\n inset: 0;\n z-index: var(--ksd-modal-z-index-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ksd-spacing-xl);\n`\n\nexport const ModalBackdrop = styled.div`\n position: absolute;\n inset: 0;\n background: var(--ksd-modal-overlay-bg);\n backdrop-filter: var(--ksd-modal-overlay-backdrop-filter);\n -webkit-backdrop-filter: var(--ksd-modal-overlay-backdrop-filter);\n animation: ${fadeIn} var(--ksd-modal-animation-duration) ease forwards;\n`\n\nexport const ModalDialog = styled.div`\n position: relative;\n z-index: var(--ksd-modal-z-index-container);\n\n width: var(--ksd-modal-md-width);\n max-width: var(--ksd-modal-md-max-width);\n max-height: var(--ksd-modal-container-max-height);\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n background: var(--ksd-modal-container-bg);\n border-radius: var(--ksd-modal-border-radius);\n border: var(--ksd-modal-container-border);\n box-shadow: var(--ksd-modal-container-shadow);\n\n animation: ${dialogIn} var(--ksd-modal-animation-duration)\n var(--ksd-modal-animation-easing) forwards;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n`\n\nexport const ModalDialogHeader = styled.header`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--ksd-modal-header-gap);\n flex-shrink: 0;\n\n padding: var(--ksd-modal-md-header-padding);\n min-height: var(--ksd-modal-header-min-height);\n\n border-bottom: var(--ksd-modal-header-border-bottom);\n background: var(--ksd-modal-header-bg);\n`\n\nexport const ModalDialogTitle = styled.h2`\n margin: 0;\n padding: 0;\n min-width: 0;\n flex: 1;\n\n font-family: var(--ksd-typography-font-family);\n font-size: var(--ksd-modal-md-title-font-size);\n font-weight: var(--ksd-modal-title-font-weight);\n line-height: var(--ksd-modal-title-line-height);\n color: var(--ksd-modal-title-color);\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`\n\nexport const ModalCloseButton = styled.button`\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n outline: none;\n\n width: var(--ksd-modal-close-button-size);\n height: var(--ksd-modal-close-button-size);\n flex-shrink: 0;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n border-radius: var(--ksd-modal-close-button-border-radius);\n color: var(--ksd-modal-close-button-color);\n transition: var(--ksd-modal-transition);\n\n svg {\n width: var(--ksd-modal-close-button-icon-size);\n height: var(--ksd-modal-close-button-icon-size);\n display: block;\n }\n\n &:hover {\n color: var(--ksd-modal-close-button-color-hover);\n background: var(--ksd-modal-close-button-bg-hover);\n }\n\n &:active {\n transform: translateY(0.5px);\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n`\n\nexport const ModalDialogBody = styled.div`\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: var(--ksd-modal-md-padding);\n\n font-family: var(--ksd-typography-font-family);\n font-size: var(--ksd-modal-content-font-size);\n line-height: var(--ksd-modal-content-line-height);\n color: var(--ksd-modal-content-color);\n\n /* 轻量滚动条 */\n &::-webkit-scrollbar {\n width: 6px;\n }\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-border-strong);\n border-radius: 3px;\n }\n &::-webkit-scrollbar-thumb:hover {\n background: var(--ksd-text-disabled);\n }\n`\n","/**\n * Modal 弹窗组件(React Aria)\n *\n * - 受控:open + onOpenChange(所有关闭路径统一出口)\n * - 基于 react-aria overlays/dialog:焦点管理、ESC、无障碍语义\n * - 支持 portalContainer(微前端 / iframe / shadow dom)\n * - 样式分层:overlay / dialog / close button 分别支持 className 与 style\n */\n\nimport {\n forwardRef,\n useCallback,\n useId,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react'\n// @ts-ignore - react-dom type issue (workspace tsconfig)\nimport { createPortal } from 'react-dom'\nimport { FocusScope } from '@react-aria/focus'\nimport { mergeProps } from '@react-aria/utils'\nimport { useDialog, useModal, useOverlay, usePreventScroll } from 'react-aria'\nimport {\n ModalBackdrop,\n ModalCloseButton,\n ModalDialog,\n ModalDialogBody,\n ModalDialogHeader,\n ModalDialogTitle,\n ModalPortalRoot,\n} from './Modal.style'\n\nexport type ModalProps = {\n /** 是否展示 Modal */\n open: boolean\n /**\n * open 状态变更回调\n * 所有关闭路径(ESC / 遮罩 / 关闭按钮 / outside)统一出口\n */\n onOpenChange: (open: boolean) => void\n /** 内容(完全自定义) */\n children: ReactNode\n /** 标题(用于默认头部与 aria 标注) */\n title?: ReactNode\n\n /**\n * 是否隐藏默认头部(标题 + 右上角关闭按钮)\n * - true:不渲染默认 Header,你可以在 children 内完全自定义标题区与关闭按钮\n * - false:按默认逻辑渲染(有 title 或可关闭时显示 Header)\n * @default false\n */\n hideHeader?: boolean\n\n /**\n * 是否允许“用户主动关闭”\n * - false:禁用 ESC/遮罩/close button/outside 关闭(只能由外部控制 open)\n * - true:按各关闭开关控制\n * @default true\n */\n isDismissable?: boolean\n\n /** 是否允许 ESC 关闭(在 isDismissable=true 前提下生效)@default true */\n closeOnEsc?: boolean\n /** 是否允许点击遮罩关闭(在 isDismissable=true 前提下生效)@default true */\n closeOnOverlay?: boolean\n /**\n * 是否允许点击外部关闭(在 isDismissable=true 前提下生效)\n * 对应 react-aria shouldCloseOnInteractOutside\n * @default true\n */\n closeOnOutside?: boolean\n /**\n * 外部点击白名单/黑名单\n * 返回 true 表示允许触发关闭\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean\n\n /** Portal 挂载容器,默认 document.body(SSR 环境下不回退) */\n portalContainer?: Element\n\n /** overlay(遮罩层)样式分层 */\n overlayClassName?: string\n overlayStyle?: CSSProperties\n\n /** dialog(弹层容器)样式分层 */\n dialogClassName?: string\n dialogStyle?: CSSProperties\n\n /** close button 样式分层 */\n closeButtonClassName?: string\n closeButtonStyle?: CSSProperties\n}\n\ntype CloseReason = 'esc' | 'overlay' | 'outside' | 'closeButton' | 'reactAria'\n\nconst DefaultCloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nfunction setRef<T>(ref: React.Ref<T> | undefined, value: T | null) {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n return\n }\n try {\n ;(ref as { current: T | null }).current = value\n } catch {\n // ignore\n }\n}\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n onOpenChange,\n children,\n title,\n hideHeader = false,\n isDismissable = true,\n closeOnEsc = true,\n closeOnOverlay = true,\n closeOnOutside = true,\n shouldCloseOnInteractOutside,\n portalContainer,\n overlayClassName,\n overlayStyle,\n dialogClassName,\n dialogStyle,\n closeButtonClassName,\n closeButtonStyle,\n },\n forwardedRef,\n ) => {\n // SSR-safe:服务端不渲染(避免触发 react-aria 访问 document/window)\n if (typeof document === 'undefined') return null\n\n const internalRef = useRef<HTMLDivElement>(null)\n const dialogRef = internalRef\n\n const titleId = useId()\n\n const requestClose = useCallback(\n (_reason: CloseReason) => {\n onOpenChange(false)\n },\n [onOpenChange],\n )\n\n const mountContainer = useMemo(() => {\n if (portalContainer) return portalContainer\n return document.body\n }, [portalContainer])\n\n // 禁止背景滚动\n usePreventScroll({ isDisabled: !open })\n\n const allowUserDismiss = isDismissable === true\n const allowEsc = allowUserDismiss && closeOnEsc\n const allowOutside = allowUserDismiss && closeOnOutside\n\n const { overlayProps, underlayProps } = useOverlay(\n {\n isOpen: open,\n onClose: () => requestClose('reactAria'),\n // ESC\n isKeyboardDismissDisabled: !allowEsc,\n // outside(非遮罩点击,更多用于 shadow dom / 非全屏场景)\n isDismissable: allowOutside,\n shouldCloseOnInteractOutside: allowOutside\n ? shouldCloseOnInteractOutside\n : () => false,\n },\n dialogRef,\n )\n\n const { modalProps } = useModal()\n\n const { dialogProps, titleProps } = useDialog(\n {\n // 无障碍兜底:\n // - 默认:有 title 则 aria-labelledby 绑定到可见标题\n // - hideHeader=true 时:标题不可见,避免 aria-labelledby 指向不存在节点;此时尽量用 aria-label 承载可访问名称\n 'aria-label':\n hideHeader && title\n ? typeof title === 'string'\n ? title\n : 'Modal'\n : title\n ? undefined\n : 'Modal',\n 'aria-labelledby': !hideHeader && title ? titleId : undefined,\n },\n dialogRef,\n )\n\n const handleCloseButton = useCallback(() => {\n if (!allowUserDismiss) return\n requestClose('closeButton')\n }, [allowUserDismiss, requestClose])\n\n const mergedDialogProps = mergeProps(overlayProps, dialogProps, modalProps, {\n ref: (node: HTMLDivElement | null) => {\n dialogRef.current = node\n setRef(forwardedRef, node)\n },\n className: dialogClassName,\n style: dialogStyle,\n 'data-open': 'true',\n })\n\n // 处理遮罩关闭逻辑:\n // 如果 closeOnOverlay 为 true,直接使用 react-aria 的 underlayProps(包含 pointer down dismiss)\n // 如果 closeOnOverlay 为 false,我们屏蔽掉 underlayProps 的交互事件\n const backdropProps = useMemo(() => {\n const { onPointerDown, onMouseDown, ...rest } = underlayProps\n return closeOnOverlay ? underlayProps : rest\n }, [underlayProps, closeOnOverlay])\n\n const content = (\n <ModalPortalRoot>\n <ModalBackdrop\n {...mergeProps(backdropProps, {\n className: overlayClassName,\n style: overlayStyle,\n 'data-open': 'true',\n })}\n />\n <FocusScope contain restoreFocus autoFocus>\n <ModalDialog {...mergedDialogProps}>\n {!hideHeader && (title || allowUserDismiss) && (\n <ModalDialogHeader>\n {title ? (\n <ModalDialogTitle {...titleProps} id={titleId}>\n {title}\n </ModalDialogTitle>\n ) : (\n <span />\n )}\n {allowUserDismiss ? (\n <ModalCloseButton\n type=\"button\"\n onClick={handleCloseButton}\n className={closeButtonClassName}\n style={closeButtonStyle}\n aria-label=\"关闭\"\n >\n <DefaultCloseIcon />\n </ModalCloseButton>\n ) : null}\n </ModalDialogHeader>\n )}\n <ModalDialogBody>{children}</ModalDialogBody>\n </ModalDialog>\n </FocusScope>\n </ModalPortalRoot>\n )\n\n // open=false 时不渲染(第一版不做退场动画,保持 API 简洁)\n if (!open || !mountContainer) return null\n return createPortal(content, mountContainer)\n },\n)\n\nModal.displayName = 'Modal'\n\n","/**\n * NumberInput 数字输入框样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-number-input-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\n\n// 提取公共禁用样式函数\nconst getDisabledStyles = () => ({\n cursor: 'not-allowed',\n backgroundColor: 'var(--ksd-number-input-bg-disabled)',\n color: 'var(--ksd-number-input-text-disabled)',\n opacity: 0.6\n})\n\nexport const NumberRoot = styled.div`\n display: inline-flex;\n flex-direction: column;\n`\n\nexport const Label = styled.label`\n margin-bottom: 6px;\n font-size: 12px;\n`\n\nexport const NumberGroup = styled.div<{ \n size?: 'md' | 'lg'; \n disabled?: boolean;\n controls?: 'buttons' | 'arrows'\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n text-align: center;\n gap: var(--ksd-number-input-control-side-gap);\n padding: var(--ksd-number-input-control-side-inset);\n border: 1px solid var(--ksd-number-input-border);\n border-radius: var(--ksd-number-input-border-radius);\n color: var(--ksd-number-input-text);\n background: ${({ disabled }) => disabled ? 'var(--ksd-number-input-bg-disabled)' : 'var(--ksd-number-input-bg)'};\n height: ${({ size }) => \n size === 'md' \n ? 'var(--ksd-number-input-md-height)' \n : 'var(--ksd-number-input-lg-height)'};\n font-size: ${({ size }) => \n size === 'md' \n ? 'var(--ksd-number-input-md-font-size)' \n : 'var(--ksd-number-input-lg-font-size)'};\n \n width: ${({ controls, size }) => {\n if (controls === 'arrows') {\n return size === 'md' ? 'var(--ksd-number-input-control-arrows-width-sm)' : 'var(--ksd-number-input-control-arrows-width-lg)';\n }\n return size === 'md' ? 'var(--ksd-number-input-control-side-width-sm)' : 'var(--ksd-number-input-control-side-width-lg)';\n }};\n \n &:disabled,\n &[data-disabled=\"true\"] {\n ${() => getDisabledStyles()}\n opacity: 0.8;\n * {\n pointer-events: none !important;\n }\n }\n &:not(:disabled):not([data-disabled=\"true\"]):hover {\n border-color: var(--ksd-number-input-border-hover);\n button:not(:disabled):not(:hover) {\n background: var(--ksd-number-input-bg-hover);\n color: var(--ksd-number-input-text);\n }\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n border-color: var(--ksd-number-input-border) !important;\n }\n`\n\nexport const NumberField = styled.input`\n text-align: center;\n border: none;\n outline: none;\n width: var(--ksd-number-input-input-width);\n height: var(--ksd-number-input-input-height);\n font-size: var(--ksd-number-input-input-font-size);\n font-weight: var(--ksd-number-input-input-font-weight);\n line-height: var(--ksd-number-input-input-line-height);\n font-family: var(--ksd-typography-font-family);\n background: transparent;\n \n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n -moz-appearance: textfield;\n appearance: textfield;\n\n &:disabled,\n &[data-disabled=\"true\"] {\n ${() => getDisabledStyles()}\n }\n`\n\nexport const Description = styled.div`\n margin-top: 6px;\n font-size: 12px;\n color: var(--ksd-number-input-text-placeholder);\n`\n\nexport const ArrowGroup = styled.div`\n display: inline-flex;\n flex-direction: column; \n gap: 1px;\n`\n\nexport const ArrowButton = styled.button<{ direction: 'up' | 'down'; size?: 'md' | 'lg'; disabled?: boolean }>`\n background: transparent;\n border: none;\n border-radius: ${({ direction }) => direction === 'up' ? '4px 4px 0 0' : '0 0 4px 4px'};\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ size }) => {\n const heightValue = size === 'md' \n ? 'var(--ksd-number-input-control-arrows-button-sm)' \n : 'var(--ksd-number-input-control-arrows-button-lg)';\n return `calc(${heightValue} * 2)`;\n }};\n height: ${({ size }) => \n size === 'md' \n ? 'var(--ksd-number-input-control-arrows-button-sm)' \n : 'var(--ksd-number-input-control-arrows-button-lg)'\n };\n color: var(--ksd-number-input-border);\n cursor: pointer;\n transition: background-color var(--ksd-number-input-transition), \n color var(--ksd-number-input-transition), \n transform var(--ksd-number-input-transition);\n \n &:disabled,\n &[data-disabled=\"true\"] {\n ${() => getDisabledStyles()}\n transition: none;\n }\n \n &:not(:disabled):hover:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-number-input-border);\n color: var(--ksd-number-input-border-hover);\n }\n \n &:not(:disabled):active:not([data-disabled=\"true\"]) {\n animation: clickScale 0.3s ease;\n }\n \n @keyframes clickScale {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n }\n`\n\nexport const SideButton = styled.button<{ pos?: 'left' | 'right'; size?: 'md' | 'lg' }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${({ size }) =>\n size === 'md'\n ? 'var(--ksd-number-input-control-side-button-sm)' \n : 'var(--ksd-number-input-control-side-button-lg)'};\n height: ${({ size }) =>\n size === 'md'\n ? 'var(--ksd-number-input-control-side-button-sm)' \n : 'var(--ksd-number-input-control-side-button-lg)'};\n background: transparent;\n color: var(--ksd-number-input-border);\n border: none;\n cursor: pointer;\n border-radius: 6px; \n padding: 2px;\n transition: background-color var(--ksd-number-input-transition), \n color var(--ksd-number-input-transition), \n transform var(--ksd-number-input-transition);\n \n &:disabled,\n &[data-disabled=\"true\"] {\n ${() => getDisabledStyles()}\n transition: none;\n }\n \n &:not(:disabled):hover:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-number-input-border);\n color: var(--ksd-number-input-border-hover);\n }\n \n &:not(:disabled):active:not([data-disabled=\"true\"]) {\n animation: clickScale 0.3s ease;\n }\n \n @keyframes clickScale {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n }\n`\n","/**\n * 数字输入框组件\n * \n * 基于 react-aria 实现无障碍访问的数字输入框组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * <NumberInput\n * size=\"md\"\n * defaultValue={10}\n * min={0}\n * max={100}\n * step={1}\n * label=\"数量\"\n * description=\"请输入数量\"\n * controls=\"buttons\"\n * onValueChange={(v) => console.log(v)}\n * />\n * ```\n */\n\nimport {\n forwardRef,\n useRef,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n type KeyboardEvent,\n} from 'react'\nimport {\n\tNumberRoot,\n\tNumberGroup,\n\tNumberField,\n\tLabel,\n\tDescription,\n\tArrowGroup,\n\tSideButton,\n\tArrowButton\n} from './NumberInput.style'\nimport { PlusOutline, ChevronUpOutline, ChevronDownOutline, MinusOutline } from '@kingsoft-ai/icons'\nexport type NumberInputProps = {\n\t/** 初始数值(受控请使用 value) */\n\tdefaultValue?: number\n\t/** 受控数值 */\n\tvalue?: number\n\t/** 最小值 */\n\tmin?: number\n\t/** 最大值 */\n\tmax?: number\n\t/** 步长 */\n\tstep?: number\n\t/** 控件样式:'buttons' - 左右 加/减 按钮;'arrows' - 右侧竖直箭头 */\n\tcontrols?: 'buttons' | 'arrows'\n\t/** 大小:'md' | 'lg' */\n\tsize?: 'md' | 'lg'\n\t/** \n\t * 值变化回调(统一 API,推荐使用)\n\t * 等同于其他表单组件的 onChange,返回 number | undefined \n\t */\n\tonValueChange?: (value: number | undefined) => void\n\t/**\n\t * 值变化回调别名(统一 API)\n\t * 与 onValueChange 功能相同,提供与其他表单组件一致的 API 命名\n\t */\n\tonChangeValue?: (value: number | undefined) => void\n\t/** 标签文本 */\n\tlabel?: ReactNode\n\t/** 描述文本 */\n\tdescription?: ReactNode\n\t/** 是否显示错误状态 */\n\terror?: boolean\n\t/** 错误提示文本 */\n\terrorMessage?: ReactNode\n\t/** 是否禁用 */\n\tdisabled?: boolean\n\t/** 自定义类名 */\n\tclassName?: string\n\t/** 自定义 ID */\n\tid?: string\n\t/** 原生 input onChange 事件(用于表单库等场景) */\n\tonChange?: (e: ChangeEvent<HTMLInputElement>) => void\n}\n/** 加图标 */\nconst PlusIcon = PlusOutline\n/** 减图标 */\nconst MinusIcon = MinusOutline\n/** 上箭头图标 */\nconst UpIcon = ChevronUpOutline\n/** 下箭头图标 */\nconst DownIcon = ChevronDownOutline\n/** 数字输入框组件 */\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n\t(\n\t\t\t{\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep = 1,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonValueChange,\n\t\t\tonChangeValue,\n\t\t\tdisabled,\n\t\t\tclassName,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\terror = false,\n\t\t\tid,\n\t\t\tcontrols = 'buttons',\n\t\t\tsize = 'md',\n\t\t\t...rest\n\t\t},\n\t\tforwardedRef,\n\t) => {\n\t\tconst innerRef = useRef<HTMLInputElement | null>(null)\n\t\t// 同步 forwardedRef 到内部 ref(支持 object ref 与回调 ref)\n\t\tuseEffect(() => {\n\t\t\tif (!forwardedRef) return\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(innerRef.current)\n\t\t\t} else {\n\t\t\t\t;(forwardedRef as React.MutableRefObject<HTMLInputElement | null>).current = innerRef.current\n\t\t\t}\n\t\t}, [forwardedRef])\n\t\tconst isControlled = value !== undefined\n\t\tconst [internal, setInternal] = useState<number | undefined>(defaultValue)\n\t\tconst currentValue = isControlled ? value : internal\n\t\t// clamp 工具\n\t\tconst clamp = (v: number) => {\n\t\t\tlet next = v\n\t\t\tif (min !== undefined) next = Math.max(next, min)\n\t\t\tif (max !== undefined) next = Math.min(next, max)\n\t\t\treturn next\n\t\t}\n\t\t// 统一触发值变化回调\n\t\tconst triggerValueChange = (v: number | undefined) => {\n\t\t\tonValueChange?.(v)\n\t\t\tonChangeValue?.(v)\n\t\t}\n\n\t\tconst setValue = (v: number | undefined) => {\n\t\t\tif (!isControlled) setInternal(v)\n\t\t\t// 更新原生 input 的 value 并触发 input 事件,兼容外部监听\n\t\t\tif (innerRef.current) {\n\t\t\t\tconst nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set\n\t\t\t\tnativeSetter?.call(innerRef.current, v === undefined ? '' : String(v))\n\t\t\t\tconst ev = new Event('input', { bubbles: true })\n\t\t\t\tObject.defineProperty(ev, 'target', { writable: false, value: innerRef.current })\n\t\t\t\t// 触发原生 onChange 回调(如果有人依赖)\n\t\t\t\tonChange?.(ev as unknown as ChangeEvent<HTMLInputElement>)\n\t\t\t}\n\t\t\ttriggerValueChange(v)\n\t\t}\n\t\t// 修改handleInputChange函数\n\t\tconst handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\t const raw = e.target.value\n\t\t // 当输入为空时,使用min或0作为默认值,而不是undefined\n\t\t const parsed = raw === '' ? (min !== undefined ? min : 0) : Number(raw)\n\t\t const final = Number.isNaN(parsed) ? (min !== undefined ? min : 0) : clamp(parsed)\n\t\t if (!isControlled) setInternal(final)\n\t\t triggerValueChange(final)\n\t\t onChange?.(e)\n\t\t}\n\n\t\tconst increment = () => {\n\t\t\tconst base = currentValue ?? 0\n\t\t\tconst next = clamp(base + (step ?? 1))\n\t\t\tsetValue(next)\n\t\t}\n\n\t\tconst decrement = () => {\n\t\t\tconst base = currentValue ?? 0\n\t\t\tconst next = clamp(base - (step ?? 1))\n\t\t\tsetValue(next)\n\t\t}\n\t\tconst handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\t\tif (e.key === 'ArrowUp') {\n\t\t\t\te.preventDefault()\n\t\t\t\tincrement()\n\t\t\t} else if (e.key === 'ArrowDown') {\n\t\t\t\te.preventDefault()\n\t\t\t\tdecrement()\n\t\t\t}\n\t\t}\n\n\t\tconst inputId = id || `number-${Math.random().toString(36).slice(2, 9)}`\n\n\t\tconst atMin = currentValue !== undefined && min !== undefined && currentValue <= min\n\t\tconst atMax = currentValue !== undefined && max !== undefined && currentValue >= max\n\n\t\treturn (\n\t\t\t<NumberRoot className={className}>\n\t\t\t\t{label && (\n\t\t\t\t\t<Label htmlFor={inputId} aria-hidden={false}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Label>\n\t\t\t\t)}\n\t\t\t\t<NumberGroup className={`controls-${controls} size-${size}`} size={size} disabled={disabled} controls={controls}>\n\t\t\t\t\t{controls === 'buttons' && (\n\t\t\t\t\t\t<SideButton\n\t\t\t\t\t\tclassName=\"btn-decrement\"\n\t\t\t\t\t\tpos=\"left\"\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={decrement}\n\t\t\t\t\t\tdisabled={disabled || atMin}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MinusIcon size={size === 'lg' ? 12 : 8.571} />\n\t\t\t\t\t</SideButton>\n\t\t\t\t\t)}\n\t\t\t\t\t<NumberField\n\t\t\t\t\t\t{...(rest as any)}\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\tref={innerRef}\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tvalue={currentValue === undefined ? '' : String(currentValue)}\n\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-invalid={error}\n\t\t\t\t\t\taria-describedby={description ? `${inputId}-desc` : undefined}\n\t\t\t\t\t\tclassName={controls === 'buttons' ? 'with-side-controls' : undefined}\n\t\t\t\t\t\tdata-size={size}\n\t\t\t\t\t/>\n\t\t\t\t\t{controls === 'buttons' && (\n\t\t\t\t\t\t<SideButton\n\t\t\t\t\t\tclassName=\"btn-increment\"\n\t\t\t\t\t\tpos=\"right\"\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={increment}\n\t\t\t\t\t\tdisabled={disabled || atMax}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon size={size === 'lg' ? 12 : 8.571} />\n\t\t\t\t\t</SideButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{controls === 'arrows' && (\n\t\t\t\t\t\t<ArrowGroup className=\"arrow-group\" >\n\t\t\t\t\t\t\t<ArrowButton\n\t\t\t direction=\"up\"\n\t\t\t type=\"button\"\n\t\t\t size={size}\n\t\t\t onClick={increment}\n\t\t\t disabled={disabled || atMax}\n\t\t\t className=\"arrow-up\"\n\t\t >\n\t\t\t <UpIcon />\n\t\t </ArrowButton>\n\t\t <ArrowButton\n\t\t\t direction=\"down\"\n\t\t\t type=\"button\"\n\t\t\t aria-label=\"减小\"\n\t\t\t title=\"减小\"\n\t\t\t size={size}\n\t\t\t onClick={decrement}\n\t\t\t disabled={disabled || atMin}\n\t\t\t className=\"arrow-down\"\n\t\t >\n\t\t\t <DownIcon />\n\t\t </ArrowButton>\n\t\t\t\t\t\t</ArrowGroup>\n\t\t\t\t\t)}\n\t\t\t\t</NumberGroup>\n\t\t\t\t{description && <Description id={`${inputId}-desc`}>{description}</Description>}\n\t\t\t</NumberRoot>\n\t\t)\n\t},\n)\nNumberInput.displayName = 'NumberInput'\nexport default NumberInput","/**\n * Radio 组件样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-radio-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\n\ninterface RadioWrapperProps {\n disabled?: boolean\n}\n\n/**\n * Radio 容器\n */\nexport const RadioWrapper = styled.label<RadioWrapperProps>`\n display: inline-flex;\n align-items: flex-start;\n gap: var(--ksd-radio-gap);\n cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n opacity: ${({ disabled }) => (disabled ? 'var(--ksd-radio-disabled-opacity)' : 1)};\n transition: opacity var(--ksd-radio-transition);\n`\n\ninterface RadioRootProps {\n disabled?: boolean\n}\n\n/**\n * Radio 控件根节点\n */\nexport const RadioRoot = styled.span<RadioRootProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n`\n\n/**\n * 隐藏的原生 radio input\n */\nexport const RadioNative = styled.input`\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n overflow: hidden;\n white-space: nowrap;\n`\n\n/**\n * Radio 指示器(圆点)\n */\nexport const RadioIndicator = styled.span`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ksd-radio-control-size);\n height: var(--ksd-radio-control-size);\n border-radius: var(--ksd-radio-control-border-radius);\n border-width: var(--ksd-radio-control-border-width);\n border-style: solid;\n border-color: var(--ksd-radio-control-border);\n background: var(--ksd-radio-control-bg);\n transition: border-color var(--ksd-radio-transition), \n box-shadow var(--ksd-radio-transition), \n transform var(--ksd-radio-transition);\n\n /* Focus ring */\n ${RadioNative}:focus-visible + & {\n box-shadow: var(--ksd-radio-focus-ring);\n }\n\n /* Hover state */\n ${RadioWrapper}:hover:not([data-disabled=\"true\"]) & {\n border-color: var(--ksd-radio-control-border-hover);\n }\n\n /* Checked state */\n ${RadioNative}:checked + & {\n border-color: var(--ksd-radio-control-border-checked);\n }\n\n /* Disabled state */\n ${RadioNative}:disabled + & {\n border-color: var(--ksd-radio-control-border-disabled);\n }\n\n /* Disabled unchecked */\n ${RadioNative}:disabled:not(:checked) + & {\n background: var(--ksd-radio-indicator-color-disabled);\n }\n\n /* Inner indicator dot */\n &::after {\n content: \"\";\n position: absolute;\n width: var(--ksd-radio-indicator-size);\n height: var(--ksd-radio-indicator-size);\n background: var(--ksd-radio-indicator-color);\n border-radius: 50%;\n transform: scale(0);\n opacity: 0;\n transition: transform var(--ksd-radio-transition), \n opacity var(--ksd-radio-transition);\n }\n\n ${RadioNative}:checked + &::after {\n transform: scale(1);\n opacity: 1;\n }\n\n ${RadioNative}:disabled + &::after {\n background: var(--ksd-radio-indicator-color-disabled);\n }\n`\n\n/**\n * Radio 文本区域\n */\nexport const RadioText = styled.span`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`\n\ninterface RadioLabelProps {\n disabled?: boolean\n}\n\n/**\n * Radio 标签\n */\nexport const RadioLabel = styled.span<RadioLabelProps>`\n font-size: var(--ksd-radio-label-font-size);\n font-weight: var(--ksd-radio-label-font-weight);\n color: ${({ disabled }) => (disabled ? 'var(--ksd-radio-label-color-disabled)' : 'var(--ksd-radio-label-color)')};\n line-height: 1.5;\n transition: color var(--ksd-radio-transition);\n`\n\ninterface RadioDescriptionProps {\n disabled?: boolean\n}\n\n/**\n * Radio 描述文本\n */\nexport const RadioDescription = styled.span<RadioDescriptionProps>`\n color: ${({ disabled }) => (disabled ? 'var(--ksd-radio-description-color-disabled)' : 'var(--ksd-radio-description-color)')};\n font-size: var(--ksd-radio-description-font-size);\n line-height: 1.5;\n transition: color var(--ksd-radio-transition);\n`\n","import { forwardRef } from 'react'\nimport type { InputHTMLAttributes, ReactNode } from 'react'\nimport {\n RadioDescription,\n RadioIndicator,\n RadioLabel,\n RadioNative,\n RadioRoot,\n RadioText,\n RadioWrapper,\n} from './Radio.style'\n\nexport type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {\n label?: ReactNode\n description?: ReactNode\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ label, description, className, ...inputProps }, ref) => {\n const isDisabled = Boolean(inputProps.disabled)\n\n return (\n <RadioWrapper disabled={isDisabled} className={className} data-disabled={isDisabled ? 'true' : undefined}>\n <RadioRoot disabled={isDisabled}>\n <RadioNative ref={ref} type=\"radio\" disabled={isDisabled} {...inputProps} />\n <RadioIndicator aria-hidden />\n </RadioRoot>\n {(label || description) && (\n <RadioText>\n {label ? <RadioLabel disabled={isDisabled}>{label}</RadioLabel> : null}\n {description ? <RadioDescription disabled={isDisabled}>{description}</RadioDescription> : null}\n </RadioText>\n )}\n </RadioWrapper>\n )\n },\n)\n\nRadio.displayName = 'Radio'\n\n","/**\n * Skeleton 骨架屏样式\n *\n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-skeleton-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css, keyframes } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport type SkeletonVariant = 'text' | 'rect' | 'block' | 'circle'\nexport type SkeletonRadius = 'sm' | 'md' | 'lg' | 'pill' | 'circle'\n\n// ============================================================================\n// 动画定义\n// ============================================================================\n\nconst shimmerKeyframes = keyframes`\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`\n\n/**\n * 闪烁动画样式\n */\nconst shimmerAnimation = css`\n background: linear-gradient(\n 90deg,\n var(--ksd-skeleton-bg-base) 25%,\n var(--ksd-skeleton-bg-highlight) 50%,\n var(--ksd-skeleton-bg-base) 75%\n );\n background-size: 200% 100%;\n animation: ${shimmerKeyframes} var(--ksd-skeleton-animation-duration)\n var(--ksd-skeleton-animation-easing) infinite;\n`\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Skeleton 基础元素\n */\nexport const SkeletonRoot = styled.div<{\n $variant?: SkeletonVariant\n $width?: string\n $height?: string\n $radius?: SkeletonRadius\n $animate?: boolean\n}>`\n background: var(--ksd-skeleton-bg-base);\n border-radius: ${({ $variant, $radius }) =>\n $variant === 'circle' ? 'var(--ksd-skeleton-radius-circle)' : `var(--ksd-skeleton-radius-${$radius || 'sm'})`};\n \n /* 宽度计算 */\n width: ${({ $width, $variant }) => {\n if ($width) return $width\n if ($variant === 'circle') return 'var(--ksd-skeleton-circle-size)'\n return '100%'\n }};\n \n /* 高度计算 */\n height: ${({ $height, $variant }) => {\n if ($height) return $height\n if ($variant === 'circle') return 'var(--ksd-skeleton-circle-size)'\n if ($variant === 'text') return 'var(--ksd-skeleton-text-line-height)'\n return 'var(--ksd-skeleton-block-height)'\n }};\n \n /* 动画 */\n ${({ $animate }) => $animate !== false && shimmerAnimation}\n`\n\n/**\n * Skeleton 文本容器(多行)\n */\nexport const SkeletonStack = styled.div<{\n $width?: string\n}>`\n display: flex;\n flex-direction: column;\n gap: var(--ksd-skeleton-text-gap);\n width: ${({ $width }) => $width || '100%'};\n`\n\n/**\n * Skeleton 文本行\n */\nexport const SkeletonLine = styled.div<{\n $isLast?: boolean\n $customWidth?: string\n $animate?: boolean\n}>`\n background: var(--ksd-skeleton-bg-base);\n height: var(--ksd-skeleton-text-line-height);\n border-radius: var(--ksd-skeleton-radius-pill);\n width: ${({ $customWidth, $isLast }) =>\n $customWidth || ($isLast ? 'var(--ksd-skeleton-text-last-line-width)' : '100%')};\n \n /* 动画 */\n ${({ $animate }) => $animate !== false && shimmerAnimation}\n`\n\n// ============================================================================\n// 向后兼容的导出别名\n// ============================================================================\n\n/**\n * Variant 映射(向后兼容)\n */\nexport const skeletonVariants: Record<string, SkeletonVariant> = {\n text: 'text',\n rect: 'rect',\n block: 'block',\n circle: 'circle',\n}\n\n/**\n * Radius 映射(向后兼容)\n */\nexport const skeletonRadii: Record<string, SkeletonRadius> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n pill: 'pill',\n circle: 'circle',\n}\n","import { forwardRef } from 'react'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport {\n SkeletonRoot,\n SkeletonLine,\n SkeletonStack,\n skeletonVariants,\n skeletonRadii,\n type SkeletonVariant,\n type SkeletonRadius,\n} from './Skeleton.style'\n\nconst toCssSize = (value?: number | string) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Skeleton 展示形态 */\n variant?: SkeletonVariant\n /** 自定义宽度,支持 number(px) 或 string */\n width?: number | string\n /** 自定义高度,支持 number(px) 或 string */\n height?: number | string\n /** 文本模式下的行数 */\n lines?: number\n /** 是否展示骨架动画 */\n animate?: boolean\n /** 方形/矩形骨架的圆角尺寸 */\n radius?: SkeletonRadius\n /** 加载完成后展示真实内容 */\n loaded?: boolean\n /** 加载完成后展示的真实内容 */\n children?: ReactNode\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = 'rect',\n width,\n height,\n lines = variant === 'text' ? 3 : 1,\n animate = true,\n radius = 'md',\n loaded = false,\n className,\n children,\n style,\n ...rest\n },\n ref,\n ) => {\n const resolvedWidth = toCssSize(width)\n const resolvedHeight = toCssSize(height)\n const lineCount = Math.max(1, lines)\n const shouldRenderStack = variant === 'text' && lineCount > 1\n\n if (loaded) {\n if (!children) {\n return null\n }\n\n return (\n <div ref={ref} className={className} style={style} {...rest}>\n {children}\n </div>\n )\n }\n\n const accessibilityProps = {\n role: 'status' as const,\n 'aria-live': 'polite' as const,\n 'aria-busy': true,\n }\n\n if (shouldRenderStack) {\n return (\n <SkeletonStack\n ref={ref}\n className={className}\n style={style}\n $width={resolvedWidth}\n data-variant=\"text\"\n {...accessibilityProps}\n {...rest}\n >\n {Array.from({ length: lineCount }).map((_, index) => (\n <SkeletonLine\n key={index}\n $animate={animate}\n $isLast={index === lineCount - 1}\n $customWidth={index === lineCount - 1 ? resolvedWidth : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </SkeletonStack>\n )\n }\n\n return (\n <SkeletonRoot\n ref={ref}\n className={className}\n style={style}\n $variant={variant}\n $animate={animate}\n $radius={radius}\n $width={resolvedWidth}\n $height={resolvedHeight}\n data-variant={variant}\n {...accessibilityProps}\n {...rest}\n />\n )\n },\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport { skeletonVariants, skeletonRadii }\nexport type { SkeletonVariant, SkeletonRadius }\n\n","/**\n * Stepper 步骤条样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-stepper-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css, keyframes } from '@emotion/react'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type StepperOrientation = 'horizontal' | 'vertical'\nexport type StepperLabelPlacement = 'right' | 'bottom'\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error'\nexport type StepSize = 'md' | 'sm'\nexport type StepperVariant = 'default' | 'dot'\n\nconst dotPulse = keyframes`\n 0% {\n transform: scale(1);\n opacity: 0.6;\n }\n 50% {\n transform: scale(1.6);\n opacity: 0.3;\n }\n 100% {\n transform: scale(1);\n opacity: 0.6;\n }\n`\n\n// ============================================================================\n// Styled Components\n// ============================================================================\n\nexport const StepperRoot = styled.div<{\n orientation: StepperOrientation\n}>`\n display: flex;\n flex-direction: ${({ orientation }) => (orientation === 'vertical' ? 'column' : 'row')};\n width: 100%;\n \n ${({ orientation }) => orientation === 'horizontal' && css`\n align-items: flex-start;\n `}\n`\n\nexport const StepRoot = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n status: StepStatus\n isLast: boolean\n flexBasis?: string\n variant: StepperVariant\n}>`\n position: relative;\n display: flex;\n flex: ${({ isLast, orientation }) => (isLast || orientation === 'vertical' ? '0 0 auto' : '1')};\n flex-direction: ${({ orientation, labelPlacement }) => \n orientation === 'horizontal' && labelPlacement === 'bottom' ? 'column' : 'row'};\n align-items: ${({ orientation, labelPlacement }) => \n orientation === 'horizontal' && labelPlacement === 'bottom' ? 'center' : 'flex-start'};\n\n /* Gap between content elements */\n gap: var(--ksd-stepper-gap);\n`\n\nexport const StepIconContainer = styled.div<{\n status: StepStatus\n size: StepSize\n variant: StepperVariant\n}>`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n \n /* Size */\n width: ${({ size, variant }) =>\n variant === 'dot'\n ? `var(--ksd-stepper-dot-${size}-size)`\n : `var(--ksd-stepper-circle-${size}-size)`};\n height: ${({ size, variant }) =>\n variant === 'dot'\n ? `var(--ksd-stepper-dot-${size}-size)`\n : `var(--ksd-stepper-circle-${size}-size)`};\n\n border-radius: 50%;\n border: ${({ variant }) => (variant === 'dot' ? 'none' : '1px solid')};\n transition: all 0.2s ease;\n\n /* Colors based on Status */\n ${({ status, variant }) => {\n if (variant === 'dot') {\n if (status === 'wait') {\n return css`\n background-color: var(--ksd-stepper-line-color);\n color: transparent;\n `\n }\n return css`\n background-color: var(--ksd-stepper-${status}-color);\n color: transparent;\n ${status === 'process'\n ? `\n &::after {\n content: '';\n position: absolute;\n inset: -4px;\n border-radius: 50%;\n background-color: var(--ksd-stepper-dot-pulse-color);\n animation: ${dotPulse} 1.5s ease-in-out infinite;\n will-change: transform, opacity;\n z-index: -1;\n }\n `\n : ''}\n `\n }\n \n // Default circle variant\n if (status === 'process') {\n return css`\n border-color: var(--ksd-stepper-process-color);\n background-color: var(--ksd-stepper-process-bg);\n color: var(--ksd-colors-common-white);\n &::after {\n content: '';\n position: absolute;\n inset: -4px;\n border-radius: 50%;\n border: 2px solid var(--ksd-stepper-process-color);\n opacity: 0.6;\n animation: ${dotPulse} 1.5s ease-in-out infinite;\n will-change: transform, opacity;\n z-index: -1;\n }\n `\n }\n if (status === 'finish') {\n return css`\n border-color: var(--ksd-stepper-finish-color);\n background-color: var(--ksd-stepper-finish-bg);\n color: var(--ksd-stepper-finish-color);\n `\n }\n if (status === 'error') {\n return css`\n border-color: var(--ksd-stepper-error-color);\n background-color: var(--ksd-stepper-error-bg);\n color: var(--ksd-stepper-error-color);\n `\n }\n // wait\n return css`\n border-color: var(--ksd-stepper-wait-color);\n background-color: transparent;\n color: var(--ksd-stepper-wait-color);\n `\n }}\n\n /* Text style inside circle */\n font-size: ${({ size }) => `var(--ksd-stepper-circle-${size}-font-size)`};\n font-weight: 500;\n\n /* Icon size control */\n svg {\n width: ${({ size }) => `var(--ksd-stepper-circle-${size}-icon-size)`};\n height: ${({ size }) => `var(--ksd-stepper-circle-${size}-icon-size)`};\n flex-shrink: 0;\n }\n`\n\nexport const StepContent = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n}>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n \n ${({ orientation, labelPlacement }) => \n orientation === 'horizontal' && labelPlacement === 'bottom' && css`\n align-items: center;\n text-align: center;\n padding-top: 4px;\n `}\n\n ${({ orientation, labelPlacement }) => \n (orientation === 'vertical' || labelPlacement === 'right') && css`\n padding-left: 4px;\n padding-top: 4px; \n `}\n`\n\nexport const StepTitle = styled.div<{\n status: StepStatus\n}>`\n font-size: var(--ksd-stepper-title-font-size);\n font-weight: var(--ksd-stepper-title-font-weight);\n line-height: 1.4;\n \n color: ${({ status }) => {\n switch (status) {\n case 'process': return 'var(--ksd-stepper-title-color-active)';\n case 'finish': return 'var(--ksd-stepper-title-color)';\n case 'error': return 'var(--ksd-stepper-title-color-error)';\n case 'wait': return 'var(--ksd-stepper-title-color-waiting)';\n default: return 'var(--ksd-stepper-title-color)';\n }\n }};\n`\n\nexport const StepDescription = styled.div`\n font-size: var(--ksd-stepper-description-font-size);\n color: var(--ksd-stepper-description-color);\n line-height: 1.4;\n margin-top: 2px;\n`\n\nexport const StepConnector = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n isFinished: boolean\n size: StepSize\n variant: StepperVariant\n}>`\n transition: background-color 0.2s ease;\n \n ${({ orientation, isFinished, size, labelPlacement, variant }) => {\n const iconSizeVar = variant === 'dot'\n ? `var(--ksd-stepper-dot-${size}-size)`\n : `var(--ksd-stepper-circle-${size}-size)`;\n\n if (orientation === 'horizontal') {\n return css`\n flex: 1;\n height: var(--ksd-stepper-line-size);\n background-color: ${isFinished ? 'var(--ksd-stepper-line-color-active)' : 'var(--ksd-stepper-line-color)'};\n margin: 0 var(--ksd-stepper-gap);\n margin-top: calc(${iconSizeVar} / 2);\n ${labelPlacement === 'bottom' ? 'align-self: flex-start;' : ''}\n `;\n }\n \n // Vertical\n return css`\n width: var(--ksd-stepper-line-size);\n min-height: 40px;\n flex: 1;\n background-color: ${isFinished ? 'var(--ksd-stepper-line-color-active)' : 'var(--ksd-stepper-line-color)'};\n margin-top: 4px;\n `;\n }}\n`\n","import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n StepperRoot,\n type StepperOrientation,\n type StepperLabelPlacement,\n type StepSize,\n type StepStatus,\n type StepperVariant,\n} from './Stepper.style'\nimport type { StepProps } from './Step'\n\nexport interface StepperProps {\n /** Current active step index (0-indexed) */\n active?: number\n /** Orientation of the stepper */\n orientation?: StepperOrientation\n /** Label placement (only for horizontal orientation) */\n labelPlacement?: StepperLabelPlacement\n /** Size of the stepper */\n size?: StepSize\n /** Visual variant */\n variant?: StepperVariant\n /** Children (Step components) */\n children: ReactNode\n className?: string\n /** Callback when step is clicked */\n onChange?: (index: number) => void\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>((props, ref) => {\n const {\n active = 0,\n orientation = 'horizontal',\n labelPlacement = 'right',\n size = 'md',\n variant = 'default',\n children,\n className,\n onChange,\n ...rest\n } = props\n\n const steps = Children.toArray(children).filter(isValidElement)\n\n return (\n <StepperRoot\n ref={ref}\n orientation={orientation}\n className={className}\n role=\"list\"\n aria-label=\"Progress\"\n {...rest}\n >\n {steps.map((step, index) => {\n const stepProps = step.props as StepProps\n \n // Determine status\n let status: StepStatus = 'wait'\n \n if (stepProps.status) {\n // If step has explicit status, use it (useful for error state or static steppers)\n status = stepProps.status\n } else {\n // Calculate status based on active index\n if (index < active) {\n status = 'finish'\n } else if (index === active) {\n status = 'process'\n } else {\n status = 'wait'\n }\n }\n\n return cloneElement(step, {\n index,\n last: index === steps.length - 1,\n orientation,\n labelPlacement: orientation === 'vertical' ? 'right' : labelPlacement, // Vertical always right (or maybe bottom doesn't make sense)\n size,\n status,\n variant,\n onClick: () => {\n if (onChange && !stepProps.disabled) {\n onChange(index)\n }\n stepProps.onClick?.()\n },\n } as StepProps)\n })}\n </StepperRoot>\n )\n})\n\nStepper.displayName = 'Stepper'\n\n","import { forwardRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { CheckOutline, CloseOutline } from '@kingsoft-ai/icons'\nimport {\n StepRoot,\n StepIconContainer,\n StepContent,\n StepTitle,\n StepDescription,\n StepConnector,\n type StepperOrientation,\n type StepperLabelPlacement,\n type StepStatus,\n type StepSize,\n type StepperVariant,\n} from './Stepper.style'\n\nexport interface StepProps {\n /** Title of the step */\n title?: ReactNode\n /** Description of the step */\n description?: ReactNode\n /** Icon of the step */\n icon?: ReactNode\n /** Status of the step, determined by Stepper if not provided */\n status?: StepStatus\n /** Disable the step */\n disabled?: boolean\n /** Click handler */\n onClick?: () => void\n className?: string\n \n // Internal props passed by Stepper\n index?: number\n orientation?: StepperOrientation\n labelPlacement?: StepperLabelPlacement\n size?: StepSize\n last?: boolean\n variant?: StepperVariant\n}\n\nexport const Step = forwardRef<HTMLDivElement, StepProps>((props, ref) => {\n const {\n title,\n description,\n icon,\n status = 'wait',\n index = 0,\n orientation = 'horizontal',\n labelPlacement = 'right',\n size = 'md',\n last = false,\n variant = 'default',\n className,\n onClick,\n ...rest\n } = props\n\n // Render icon based on status\n const renderIcon = () => {\n if (icon) return icon\n\n switch (status) {\n case 'finish':\n return <CheckOutline />\n case 'error':\n return <CloseOutline />\n default:\n // For process and wait, show number\n return <span>{index + 1}</span>\n }\n }\n\n const resolvedLabelPlacement =\n orientation === 'horizontal' && variant === 'dot' ? 'bottom' : labelPlacement\n\n const shouldRenderIcon = !(variant === 'dot' && !icon)\n const iconContent = shouldRenderIcon ? renderIcon() : null\n\n // Vertical line logic:\n // In vertical mode, the line connects from bottom of current icon to top of next icon.\n // It should be visible if not the last item.\n const showVerticalLine = orientation === 'vertical' && !last\n\n // Horizontal line logic:\n // In horizontal mode, the line connects current step to next step.\n const showHorizontalLine = orientation === 'horizontal' && !last\n\n return (\n <StepRoot\n ref={ref}\n className={className}\n orientation={orientation}\n labelPlacement={resolvedLabelPlacement}\n status={status}\n isLast={last}\n variant={variant}\n onClick={onClick}\n role=\"listitem\"\n aria-current={status === 'process' ? 'step' : undefined}\n {...rest}\n >\n {/* Vertical Mode: Icon column with line below */}\n {orientation === 'vertical' && (\n <>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0, minHeight: last ? 'auto' : '80px' }}>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n {showVerticalLine && (\n <StepConnector\n orientation=\"vertical\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </div>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n </>\n )}\n\n {/* Horizontal Mode */}\n {orientation === 'horizontal' && (\n <>\n {/* Icon and horizontal line for bottom placement */}\n {resolvedLabelPlacement === 'bottom' ? (\n <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', width: '100%' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0 }}>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n </div>\n {showHorizontalLine && (\n <StepConnector\n orientation=\"horizontal\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </div>\n ) : (\n <>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n {showHorizontalLine && (\n <StepConnector\n orientation=\"horizontal\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </>\n )}\n </>\n )}\n </StepRoot>\n )\n})\n\nStep.displayName = 'Step'\n\n","/**\n * Progress 进度条样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-progress-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const progressTypes = ['line', 'circle'] as const\nexport const progressSizes = ['sm', 'md', 'lg'] as const\nexport const progressStatuses = ['normal', 'error', 'warning', 'success'] as const\n\nexport type ProgressType = (typeof progressTypes)[number]\nexport type ProgressSize = (typeof progressSizes)[number]\nexport type ProgressStatus = (typeof progressStatuses)[number]\n\n// ============================================================================\n// 状态颜色映射\n// ============================================================================\n\nconst getStatusColor = (status: ProgressStatus): string => {\n return `var(--ksd-progress-color-${status})`\n}\n\n// ============================================================================\n// 线型进度条样式\n// ============================================================================\n\n/**\n * 线型进度条容器\n */\nexport const LineProgressRoot = styled.div<{\n size: ProgressSize\n}>`\n display: flex;\n align-items: center;\n gap: var(--ksd-progress-gap);\n width: 100%;\n`\n\n/**\n * 线型进度条轨道\n */\nexport const LineProgressTrack = styled.div<{\n size: ProgressSize\n}>`\n position: relative;\n flex: 1;\n background: var(--ksd-progress-track-bg);\n border-radius: var(--ksd-progress-track-border-radius);\n overflow: hidden;\n \n ${({ size }) => {\n if (size === 'sm') {\n return css`\n height: var(--ksd-progress-line-sm-height);\n `\n }\n return css`\n height: var(--ksd-progress-line-md-height);\n `\n }}\n`\n\n/**\n * 线型进度条填充\n */\nexport const LineProgressBar = styled.div<{\n status: ProgressStatus\n percent: number\n}>`\n height: 100%;\n width: ${({ percent }) => percent}%;\n background: ${({ status }) => getStatusColor(status)};\n border-radius: var(--ksd-progress-track-border-radius);\n transition: width var(--ksd-progress-transition), background var(--ksd-progress-transition);\n`\n\n/**\n * 进度百分比文字\n */\nexport const ProgressText = styled.span`\n font-family: var(--ksd-typography-font-family);\n font-size: var(--ksd-progress-text-font-size);\n line-height: var(--ksd-progress-text-line-height);\n color: var(--ksd-progress-text-color);\n white-space: nowrap;\n flex-shrink: 0;\n`\n\n/**\n * 状态图标容器\n */\nexport const StatusIcon = styled.span<{\n status: ProgressStatus\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--ksd-progress-icon-size);\n height: var(--ksd-progress-icon-size);\n flex-shrink: 0;\n color: ${({ status }) => getStatusColor(status)};\n \n svg {\n width: 100%;\n height: 100%;\n }\n`\n\n/**\n * 线型进度条信息区域(百分比+图标)\n */\nexport const LineProgressInfo = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-progress-info-gap);\n flex-shrink: 0;\n`\n\n// ============================================================================\n// 环形进度条样式\n// ============================================================================\n\n/**\n * 环形进度条容器\n */\nexport const CircleProgressRoot = styled.div<{\n size: ProgressSize\n}>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \n ${({ size }) => {\n if (size === 'sm') {\n return css`\n width: var(--ksd-progress-circle-sm-size);\n height: var(--ksd-progress-circle-sm-size);\n `\n }\n if (size === 'md') {\n return css`\n width: var(--ksd-progress-circle-md-size);\n height: var(--ksd-progress-circle-md-size);\n `\n }\n return css`\n width: var(--ksd-progress-circle-lg-size);\n height: var(--ksd-progress-circle-lg-size);\n `\n }}\n`\n\n/**\n * 环形进度条 SVG\n */\nexport const CircleProgressSvg = styled.svg`\n transform: rotate(-90deg);\n width: 100%;\n height: 100%;\n`\n\n/**\n * 环形进度条轨道圆\n */\nexport const CircleProgressTrack = styled.circle`\n fill: none;\n stroke: var(--ksd-progress-track-bg);\n`\n\n/**\n * 环形进度条填充圆\n */\nexport const CircleProgressBar = styled.circle<{\n status: ProgressStatus\n}>`\n fill: none;\n stroke: ${({ status }) => getStatusColor(status)};\n stroke-linecap: round;\n transition: stroke-dashoffset var(--ksd-progress-transition), stroke var(--ksd-progress-transition);\n`\n\n/**\n * 环形进度条内容(百分比文字或图标)\n */\nexport const CircleProgressContent = styled.div<{\n size: ProgressSize\n}>`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n \n ${({ size }) => {\n if (size === 'sm') {\n return css`\n width: 16px;\n height: 16px;\n `\n }\n if (size === 'md') {\n return css`\n font-family: 'Barlow', var(--ksd-typography-font-family);\n font-size: var(--ksd-progress-circle-md-font-size);\n font-weight: var(--ksd-progress-circle-md-font-weight);\n line-height: var(--ksd-progress-circle-md-line-height);\n color: var(--ksd-progress-text-color);\n `\n }\n return css`\n font-family: 'Barlow', var(--ksd-typography-font-family);\n font-size: var(--ksd-progress-circle-lg-font-size);\n font-weight: var(--ksd-progress-circle-lg-font-weight);\n line-height: var(--ksd-progress-circle-lg-line-height);\n color: var(--ksd-progress-text-color);\n `\n }}\n`\n\n/**\n * 小号环形进度条的图标\n */\nexport const CircleProgressIcon = styled.span<{\n status: ProgressStatus\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${({ status }) => getStatusColor(status)};\n \n svg {\n width: 100%;\n height: 100%;\n }\n`\n","/**\n * Progress 进度条组件\n * \n * 基于 react-aria 实现无障碍访问的进度条组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * // 线型进度条\n * <Progress value={60} />\n * \n * // 环形进度条\n * <Progress type=\"circle\" value={80} />\n * \n * // 带状态的进度条\n * <Progress value={100} status=\"success\" />\n * \n * // 不显示百分比\n * <Progress value={60} showPercent={false} />\n * ```\n */\n\nimport { forwardRef } from 'react'\nimport { useProgressBar } from 'react-aria'\nimport type { AriaProgressBarProps } from 'react-aria'\nimport {\n LineProgressRoot,\n LineProgressTrack,\n LineProgressBar,\n LineProgressInfo,\n ProgressText,\n StatusIcon,\n CircleProgressRoot,\n CircleProgressSvg,\n CircleProgressTrack,\n CircleProgressBar,\n CircleProgressContent,\n CircleProgressIcon,\n progressTypes,\n progressSizes,\n progressStatuses,\n type ProgressType,\n type ProgressSize,\n type ProgressStatus,\n} from './Progress.style'\n\n// 导出常量供外部使用\nexport const TYPES = progressTypes\nexport const SIZES = progressSizes\nexport const STATUSES = progressStatuses\n\nexport type ProgressProps = Omit<AriaProgressBarProps, 'value'> & {\n /** 进度条类型:线型、环形 */\n type?: ProgressType\n /** 进度条尺寸:小号、中号、大号 */\n size?: ProgressSize\n /** 进度状态:进行中、失败、警示、成功 */\n status?: ProgressStatus\n /** 当前进度值(0-100) */\n value?: number\n /** 是否显示百分比文字 */\n showPercent?: boolean\n /** 是否显示状态图标(仅线型进度条) */\n showIcon?: boolean\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * 成功图标\n */\nconst SuccessIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M11.3333 5.5L6.75 10.0833L4.66667 8\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\n/**\n * 失败图标\n */\nconst ErrorIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M10 6L6 10M6 6L10 10\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n)\n\n/**\n * 警示图标\n */\nconst WarningIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M8 4.66667V8.66667M8 11.3333H8.00667\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\n/**\n * 根据状态获取对应图标\n */\nconst getStatusIcon = (status: ProgressStatus) => {\n switch (status) {\n case 'success':\n return <SuccessIcon />\n case 'error':\n return <ErrorIcon />\n case 'warning':\n return <WarningIcon />\n default:\n return null\n }\n}\n\n/**\n * Progress 进度条组件\n * \n * 基于 Figma 设计规范实现的进度条组件,支持线型和环形两种类型\n * 使用 react-aria 保证无障碍访问性\n */\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n type = 'line',\n size = 'md',\n status = 'normal',\n value = 0,\n showPercent = true,\n showIcon = true,\n className,\n ...ariaProps\n },\n ref,\n ) => {\n // 限制进度值在 0-100 之间\n const percent = Math.min(Math.max(value, 0), 100)\n \n // 使用 react-aria 的 useProgressBar hook\n const { progressBarProps, labelProps } = useProgressBar({\n ...ariaProps,\n value: percent,\n minValue: 0,\n maxValue: 100,\n })\n\n // 根据状态显示图标\n const shouldShowIcon = showIcon && status !== 'normal'\n const icon = shouldShowIcon ? getStatusIcon(status) : null\n\n // 线型进度条\n if (type === 'line') {\n return (\n <LineProgressRoot\n {...progressBarProps}\n ref={ref}\n size={size}\n className={className}\n role=\"progressbar\"\n aria-valuenow={percent}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <LineProgressTrack size={size}>\n <LineProgressBar status={status} percent={percent} />\n </LineProgressTrack>\n \n <LineProgressInfo>\n {showPercent && (\n <ProgressText {...labelProps}>\n {Math.round(percent)}%\n </ProgressText>\n )}\n \n {shouldShowIcon && icon && (\n <StatusIcon status={status}>\n {icon}\n </StatusIcon>\n )}\n </LineProgressInfo>\n </LineProgressRoot>\n )\n }\n\n // 环形进度条\n // 根据尺寸计算圆的参数\n const getSizeConfig = () => {\n switch (size) {\n case 'sm':\n return { circleSize: 24, strokeWidth: 3 }\n case 'md':\n return { circleSize: 80, strokeWidth: 6 }\n case 'lg':\n return { circleSize: 160, strokeWidth: 8 }\n default:\n return { circleSize: 80, strokeWidth: 6 }\n }\n }\n \n const { circleSize, strokeWidth } = getSizeConfig()\n const radius = (circleSize - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const strokeDashoffset = circumference - (percent / 100) * circumference\n \n // 是否显示百分比文字(小号显示图标,中号和大号显示百分比)\n const showPercentInCircle = size !== 'sm'\n\n return (\n <CircleProgressRoot\n {...progressBarProps}\n ref={ref}\n size={size}\n className={className}\n role=\"progressbar\"\n aria-valuenow={percent}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <CircleProgressSvg>\n {/* 轨道 */}\n <CircleProgressTrack\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n \n {/* 进度条 */}\n <CircleProgressBar\n status={status}\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n />\n </CircleProgressSvg>\n \n {/* 中心内容 */}\n <CircleProgressContent size={size}>\n {showPercentInCircle ? (\n // 中号和大号显示百分比文字\n showPercent && <span {...labelProps}>{Math.round(percent)}%</span>\n ) : (\n // 小号显示状态图标\n shouldShowIcon && icon && (\n <CircleProgressIcon status={status}>\n {icon}\n </CircleProgressIcon>\n )\n )}\n </CircleProgressContent>\n </CircleProgressRoot>\n )\n },\n)\n\nProgress.displayName = 'Progress'\n\n","/**\n * Tag 标签样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-tag-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const tagVariants = ['default', 'checkable'] as const\nexport const tagSizes = ['sm', 'md', 'lg'] as const\nexport const tagColors = [\n 'default',\n 'red',\n 'orange', \n 'yellow',\n 'green',\n 'lavender',\n 'lilac',\n 'carmine',\n 'rose',\n 'mint',\n 'olive',\n 'blue'\n] as const\n\nexport type TagVariant = (typeof tagVariants)[number]\nexport type TagSize = (typeof tagSizes)[number]\nexport type TagColor = (typeof tagColors)[number]\n\n// ============================================================================\n// 变体样式生成器\n// ============================================================================\n\n/**\n * 获取 Tag 颜色样式\n * 使用 CSS 变量实现\n */\nconst getColorStyles = (\n color: TagColor,\n variant: TagVariant,\n bordered: boolean,\n checked: boolean\n) => {\n // 可选择标签样式\n if (variant === 'checkable') {\n if (checked) {\n return css`\n background: var(--ksd-tag-${color}-bg-checked, var(--ksd-tag-default-bg-checked));\n color: var(--ksd-tag-${color}-text-checked, var(--ksd-tag-default-text-checked));\n border-color: var(--ksd-tag-${color}-border-checked, var(--ksd-tag-default-border-checked));\n \n &:hover:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-checked-hover, var(--ksd-tag-default-bg-checked-hover));\n border-color: var(--ksd-tag-${color}-border-checked-hover, var(--ksd-tag-default-border-checked-hover));\n }\n \n &:active:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-checked-active, var(--ksd-tag-default-bg-checked-active));\n border-color: var(--ksd-tag-${color}-border-checked-active, var(--ksd-tag-default-border-checked-active));\n }\n `\n } else {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: var(--ksd-tag-${color}-border);\n cursor: pointer;\n \n &:hover:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-hover);\n border-color: var(--ksd-tag-${color}-border-hover, var(--ksd-tag-${color}-border));\n }\n \n &:active:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-active);\n border-color: var(--ksd-tag-${color}-border-active, var(--ksd-tag-${color}-border));\n }\n `\n }\n }\n \n // 默认标签样式\n if (bordered) {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: var(--ksd-tag-${color}-border);\n `\n } else {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: transparent;\n `\n }\n}\n\n/**\n * 获取 Tag 尺寸样式\n * 使用 CSS 变量实现\n */\nconst getSizeStyles = (size: TagSize) => {\n return css`\n height: var(--ksd-tag-${size}-height);\n font-size: var(--ksd-tag-${size}-font-size);\n line-height: var(--ksd-tag-${size}-line-height);\n padding-inline: var(--ksd-tag-${size}-padding-inline);\n gap: var(--ksd-tag-${size}-gap);\n\n svg {\n width: var(--ksd-tag-${size}-icon-size);\n height: var(--ksd-tag-${size}-icon-size);\n }\n `\n}\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Tag 根元素\n * \n * 特性:\n * - 基于 CSS 变量,无需 ThemeProvider\n * - 支持多种颜色和变体\n * - 完整的交互状态(hover, active, disabled)\n * - 支持边框和无边框模式\n */\nexport const TagRoot = styled.span<{\n variant: TagVariant\n size: TagSize\n color: TagColor\n bordered: boolean\n checked: boolean\n closable: boolean\n isDisabled: boolean\n}>`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 字体样式 - 使用 CSS 变量 */\n font-family: var(--ksd-typography-font-family);\n font-weight: var(--ksd-tag-font-weight);\n white-space: nowrap;\n \n /* 边框样式 */\n border-width: 1px;\n border-style: solid;\n border-radius: var(--ksd-tag-border-radius);\n \n /* 交互样式 */\n user-select: none;\n outline: none;\n \n /* 过渡动画 */\n transition: \n background var(--ksd-tag-transition),\n border-color var(--ksd-tag-transition),\n color var(--ksd-tag-transition),\n opacity var(--ksd-tag-transition);\n\n /* 颜色样式 */\n ${({ color, variant, bordered, checked }) =>\n getColorStyles(color, variant, bordered, checked)}\n\n /* 尺寸样式 */\n ${({ size }) => getSizeStyles(size)}\n\n /* 可选择标签的 cursor */\n ${({ variant, checked }) =>\n variant === 'checkable' &&\n !checked &&\n css`\n cursor: pointer;\n `}\n\n /* 禁用状态 */\n &:disabled,\n &[data-disabled='true'] {\n cursor: not-allowed;\n opacity: var(--ksd-tag-disabled-opacity);\n }\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid var(--ksd-tag-default-border-checked);\n outline-offset: 2px;\n }\n`\n\n/**\n * Tag 内容容器\n * \n * 用于布局图标和文本\n */\nexport const TagContent = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: inherit;\n`\n\n/**\n * 图标包装器\n * \n * 特性:\n * - 保持布局稳定\n * - 支持前置图标\n */\nexport const IconWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: inherit;\n`\n\n/**\n * 关闭按钮\n * \n * 使用 span 而非 button,避免在 Select 等组件中嵌套 button 导致的 HTML 错误\n * \n * 特性:\n * - 独立的交互区域\n * - hover 时显示反馈\n */\nexport const CloseButton = styled.span<{\n size: TagSize\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n color: inherit;\n \n transition: opacity var(--ksd-tag-transition);\n \n &:hover {\n opacity: 0.7;\n }\n \n &:active {\n opacity: 0.5;\n }\n \n /* 图标尺寸 */\n svg {\n width: var(--ksd-tag-${({ size }) => size}-close-icon-size);\n height: var(--ksd-tag-${({ size }) => size}-close-icon-size);\n }\n`\n\n/**\n * 添加按钮(New Tag)\n * \n * 专门用于添加新标签的按钮样式\n */\nexport const AddButton = styled.button<{\n size: TagSize\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n gap: var(--ksd-tag-${({ size }) => size}-gap);\n \n height: var(--ksd-tag-${({ size }) => size}-height);\n padding-inline: var(--ksd-tag-${({ size }) => size}-padding-inline);\n \n font-family: var(--ksd-typography-font-family);\n font-size: var(--ksd-tag-${({ size }) => size}-font-size);\n line-height: var(--ksd-tag-${({ size }) => size}-line-height);\n font-weight: var(--ksd-tag-font-weight);\n color: var(--ksd-tag-default-text);\n \n background: var(--ksd-tag-default-bg);\n border: 1px solid var(--ksd-tag-default-border);\n border-radius: var(--ksd-tag-border-radius);\n \n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n \n transition: \n background var(--ksd-tag-transition),\n border-color var(--ksd-tag-transition);\n \n &:hover:not(:disabled) {\n background: var(--ksd-tag-default-bg-hover);\n border-color: var(--ksd-tag-default-border-hover);\n }\n \n &:active:not(:disabled) {\n background: var(--ksd-tag-default-bg-active);\n border-color: var(--ksd-tag-default-border-active);\n }\n \n &:disabled {\n cursor: not-allowed;\n opacity: var(--ksd-tag-disabled-opacity);\n }\n \n &:focus-visible {\n outline: 2px solid var(--ksd-tag-default-border-checked);\n outline-offset: 2px;\n }\n \n svg {\n width: var(--ksd-tag-${({ size }) => size}-icon-size);\n height: var(--ksd-tag-${({ size }) => size}-icon-size);\n }\n`\n","/**\n * Tag 标签组件\n * \n * 基于 react-aria 实现无障碍访问的标签组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * // 基础用法\n * <Tag>标签</Tag>\n * \n * // 可关闭\n * <Tag closable onClose={() => console.log('closed')}>标签</Tag>\n * \n * // 带图标\n * <Tag icon={<IconOutline />}>标签</Tag>\n * \n * // 可选择\n * <Tag checkable checked onChange={(checked) => console.log(checked)}>标签</Tag>\n * \n * // 彩色标签\n * <Tag color=\"red\">红色</Tag>\n * <Tag color=\"blue\" bordered>蓝色带边框</Tag>\n * ```\n */\n\nimport { forwardRef, useRef, type ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport { CloseOutline, PlusOutline } from '@kingsoft-ai/icons'\nimport {\n TagRoot,\n TagContent,\n IconWrapper,\n CloseButton,\n AddButton,\n type TagVariant,\n type TagSize,\n type TagColor,\n} from './Tag.style'\n\n// 导出类型供外部使用\nexport type { TagVariant, TagSize, TagColor }\n\nexport interface TagProps {\n /** 标签变体:默认 | 可选择 */\n variant?: TagVariant\n /** 标签尺寸:小号(18px) | 中号(24px) | 大号(32px) */\n size?: TagSize\n /** 标签颜色 */\n color?: TagColor\n /** 是否显示边框(仅彩色标签适用) */\n bordered?: boolean\n /** 是否可关闭 */\n closable?: boolean\n /** 是否可选择(checkable 变体) */\n checkable?: boolean\n /** 是否已选中(checkable 变体) */\n checked?: boolean\n /** 前置图标 */\n icon?: ReactNode\n /** 是否禁用 */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 子元素 */\n children?: ReactNode\n /** 关闭回调 */\n onClose?: () => void\n /** 选中状态变化回调(checkable 变体) */\n onChange?: (checked: boolean) => void\n /** 点击回调 */\n onClick?: () => void\n}\n\n/**\n * Tag 标签组件\n * \n * 基于 Figma 设计规范实现的标签组件,支持多种变体、颜色和尺寸\n * 使用 react-aria 保证无障碍访问性\n */\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n variant = 'default',\n size = 'md',\n color = 'default',\n bordered = false,\n closable = false,\n checkable = false,\n checked = false,\n icon,\n disabled = false,\n className,\n children,\n onClose,\n onChange,\n onClick,\n },\n forwardedRef,\n ) => {\n // 确定实际使用的变体\n const actualVariant: TagVariant = checkable ? 'checkable' : variant\n const isChecked = checkable ? checked : false\n\n // 处理点击事件\n const handleClick = () => {\n if (disabled) return\n \n if (checkable && onChange) {\n onChange(!isChecked)\n }\n \n if (onClick) {\n onClick()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n if (actualVariant === 'checkable' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n handleClick()\n }\n }\n\n // 处理关闭事件\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation() // 防止触发标签的点击事件\n if (onClose && !disabled) {\n onClose()\n }\n }\n\n return (\n <TagRoot\n ref={forwardedRef}\n variant={actualVariant}\n size={size}\n color={color}\n bordered={bordered}\n checked={isChecked}\n closable={closable}\n isDisabled={disabled}\n className={className}\n onClick={actualVariant === 'checkable' ? handleClick : onClick}\n onKeyDown={handleKeyDown}\n data-variant={actualVariant}\n data-size={size}\n data-color={color}\n data-checked={isChecked ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n tabIndex={actualVariant === 'checkable' && !disabled ? 0 : undefined}\n role={actualVariant === 'checkable' ? 'checkbox' : undefined}\n aria-checked={actualVariant === 'checkable' ? isChecked : undefined}\n aria-disabled={disabled}\n >\n <TagContent>\n {/* 前置图标 */}\n {icon && (\n <IconWrapper aria-hidden=\"true\">\n {icon}\n </IconWrapper>\n )}\n\n {/* 标签文本 */}\n {children}\n\n {/* 关闭按钮 */}\n {closable && (\n <CloseButton\n size={size}\n onClick={handleClose}\n aria-label=\"关闭\"\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n handleClose(e as any)\n }\n }}\n aria-disabled={disabled}\n >\n <CloseOutline />\n </CloseButton>\n )}\n </TagContent>\n </TagRoot>\n )\n },\n)\n\nTag.displayName = 'Tag'\n\n// ============================================================================\n// 复合组件:Tag.Add\n// ============================================================================\n\nexport interface TagAddProps extends Omit<AriaButtonProps, 'elementType'> {\n /** 标签尺寸 */\n size?: TagSize\n /** 自定义类名 */\n className?: string\n /** 子元素 */\n children?: ReactNode\n}\n\n/**\n * Tag.Add 添加标签按钮\n * \n * 用于添加新标签的按钮组件\n */\nexport const TagAdd = forwardRef<HTMLButtonElement, TagAddProps>(\n ({ size = 'md', className, children = 'New Tag', ...ariaProps }, forwardedRef) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <AddButton\n {...mergeProps(buttonProps, {\n ref,\n className,\n })}\n size={size}\n data-size={size}\n >\n <PlusOutline />\n {children}\n </AddButton>\n )\n },\n)\n\nTagAdd.displayName = 'Tag.Add'\n\n// 将 Add 作为 Tag 的静态属性\n;(Tag as any).Add = TagAdd\n\n","/**\n * Select 样式组件\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-select-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\nexport const selectSizes = ['sm', 'md', 'lg'] as const\nexport type SelectSize = (typeof selectSizes)[number]\n\n// ============================================================================\n// 样式辅助函数\n// ============================================================================\n\nconst getSizeStyles = (size: SelectSize, isMultiple: boolean) => {\n return css`\n ${isMultiple ? `min-height: var(--ksd-select-${size}-height);` : `height: var(--ksd-select-${size}-height);`}\n font-size: var(--ksd-select-${size}-font-size);\n padding-inline: var(--ksd-select-${size}-padding-inline);\n ${isMultiple ? 'padding-block: 4px;' : ''}\n `\n}\n\n// ============================================================================\n// Select Trigger Styles\n// ============================================================================\n\nexport const SelectWrapper = styled.div<{ fullWidth?: boolean }>`\n display: ${({ fullWidth }) => (fullWidth ? 'flex' : 'inline-flex')};\n flex-direction: column;\n width: ${({ fullWidth }) => (fullWidth ? '100%' : '200px')};\n min-width: 120px;\n position: relative;\n box-sizing: border-box;\n`\n\nexport const SelectTrigger = styled.button<{\n size: SelectSize\n fullWidth?: boolean\n isFocused?: boolean\n isError?: boolean\n isDisabled?: boolean\n isHovered?: boolean\n isOpen?: boolean\n isMultiple?: boolean\n}>`\n /* 基础重置 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n \n /* 样式 */\n border: 1px solid;\n border-color: var(--ksd-select-border-default);\n border-radius: var(--ksd-select-border-radius);\n background: var(--ksd-select-bg-default);\n color: var(--ksd-select-text-default);\n cursor: pointer;\n outline: none;\n transition: all var(--ksd-select-transition);\n\n /* 尺寸 */\n ${({ size, isMultiple }) => getSizeStyles(size, !!isMultiple)}\n\n /* Hover 状态 */\n ${({ isHovered, isFocused, isOpen, isError, isDisabled }) =>\n isHovered && !isFocused && !isOpen && !isError && !isDisabled &&\n css`\n border-color: var(--ksd-select-border-hover);\n `}\n\n /* Focus/Open 状态 */\n ${({ isFocused, isOpen, isError, isDisabled }) =>\n (isFocused || isOpen) && !isError && !isDisabled &&\n css`\n border-color: var(--ksd-select-border-focus);\n `}\n\n /* Error 状态 */\n ${({ isError, isDisabled }) =>\n isError && !isDisabled &&\n css`\n border-color: var(--ksd-select-border-error);\n color: var(--ksd-select-text-error);\n `}\n\n /* 禁用状态 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n cursor: not-allowed;\n opacity: 0.6;\n background: var(--ksd-select-bg-disabled);\n border-color: var(--ksd-select-border-disabled);\n color: var(--ksd-select-text-disabled);\n `}\n`\n\nexport const SelectValue = styled.span<{ isPlaceholder?: boolean }>`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n margin-right: 8px;\n color: ${({ isPlaceholder }) => \n isPlaceholder ? 'var(--ksd-select-text-placeholder)' : 'inherit'};\n`\n\nexport const SelectIcon = styled.span<{ isOpen?: boolean; size?: SelectSize }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n transform: ${({ isOpen }) => (isOpen ? 'rotate(180deg)' : 'rotate(0deg)')};\n color: inherit;\n opacity: 0.5;\n \n svg {\n width: ${({ size }) => size ? `var(--ksd-select-${size}-icon-size)` : '16px'};\n height: ${({ size }) => size ? `var(--ksd-select-${size}-icon-size)` : '16px'};\n }\n`\n\n// ============================================================================\n// Popover/ListBox Styles\n// ============================================================================\n\nexport const ListBoxPopup = styled.div`\n background: var(--ksd-select-popover-bg);\n border: var(--ksd-select-popover-border);\n border-radius: var(--ksd-select-popover-border-radius);\n box-shadow: var(--ksd-select-popover-shadow);\n padding: var(--ksd-select-popover-padding);\n overflow: hidden;\n min-width: 100%;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n`\n\nexport const ListBoxContent = styled.ul`\n margin: 0;\n padding: 0;\n list-style: none;\n overflow-y: auto;\n outline: none;\n flex: 1;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n &::-webkit-scrollbar-thumb {\n background: rgba(0,0,0,0.2);\n border-radius: 4px;\n }\n`\n\nexport const OptionItem = styled.li<{\n isSelected?: boolean\n isFocused?: boolean\n isDisabled?: boolean\n}>`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: var(--ksd-select-option-height);\n padding-inline: var(--ksd-select-option-padding-inline);\n margin-bottom: 2px;\n border-radius: var(--ksd-select-option-border-radius);\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n outline: none;\n user-select: none;\n font-size: var(--ksd-select-option-font-size);\n \n /* 背景色 */\n background: ${({ isSelected, isFocused }) => {\n if (isSelected) return 'var(--ksd-select-option-bg-selected)'\n if (isFocused) return 'var(--ksd-select-option-bg-focused)'\n return 'var(--ksd-select-option-bg-default)'\n }};\n \n /* 文字颜色 */\n color: ${({ isSelected, isDisabled }) => {\n if (isDisabled) return 'var(--ksd-select-option-text-disabled)'\n if (isSelected) return 'var(--ksd-select-option-text-selected)'\n return 'var(--ksd-select-option-text-default)'\n }};\n\n &:hover {\n background: ${({ isSelected, isDisabled }) => {\n if (isDisabled) return 'transparent'\n if (isSelected) return 'var(--ksd-select-option-bg-selected)'\n return 'var(--ksd-select-option-bg-hover)'\n }};\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n`\n\nexport const OptionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`\n\nexport const OptionIcon = styled.span`\n margin-left: 8px;\n display: flex;\n align-items: center;\n color: var(--ksd-select-option-text-selected);\n font-size: 14px;\n`\n\nexport const LoadingWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n color: var(--ksd-select-text-placeholder);\n font-size: var(--ksd-typography-font-size-xs);\n`\n\nexport const EmptyState = styled.div`\n padding: 8px 12px;\n color: var(--ksd-select-text-disabled);\n font-size: var(--ksd-typography-font-size-xs);\n text-align: center;\n`\n\n// ============================================================================\n// Multiple Select Styles\n// ============================================================================\n\nexport const TagsContainer = styled.div`\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n align-items: center;\n min-height: 22px;\n padding-right: 4px;\n`\n\nexport const CheckboxWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n margin-right: 8px;\n flex-shrink: 0;\n pointer-events: none;\n`\n","import { useRef, useLayoutEffect, useState, useEffect, type ReactNode, type RefObject } from 'react'\nimport { useOverlay, Overlay, useOverlayPosition, type AriaPopoverProps, FocusScope, DismissButton } from 'react-aria'\nimport { ListBoxPopup } from './Select.style'\n\ninterface PopoverProps extends Omit<AriaPopoverProps, 'popoverRef'> {\n children: ReactNode\n state: any\n triggerRef: RefObject<Element>\n className?: string\n}\n\nexport function Popover({ children, state, offset = 4, triggerRef, placement = 'bottom start', ...props }: PopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null)\n const [triggerWidth, setTriggerWidth] = useState<number | undefined>(undefined)\n \n // 使用 useLayoutEffect 确保在渲染前获取正确的宽度\n useLayoutEffect(() => {\n if (triggerRef.current) {\n setTriggerWidth(triggerRef.current.getBoundingClientRect().width)\n }\n }, [triggerRef, state.isOpen])\n\n const { overlayProps: overlayPropsFromUseOverlay } = useOverlay(\n {\n ...props,\n shouldCloseOnBlur: false, // 禁用默认的 blur 关闭,使用自定义逻辑\n isDismissable: true,\n onClose: state.close\n },\n popoverRef\n )\n\n const { overlayProps, placement: resolvedPlacement } = useOverlayPosition({\n targetRef: triggerRef,\n overlayRef: popoverRef,\n placement,\n offset,\n isOpen: state.isOpen,\n onClose: state.close\n })\n\n // 全局事件监听:点击外部和焦点移出\n useEffect(() => {\n if (!state.isOpen) return\n\n const onInteractOutside = (event: Event) => {\n const target = event.target as Node\n const popover = popoverRef.current\n const trigger = triggerRef.current\n\n // 如果交互目标既不在弹窗内部也不是触发器,则关闭\n if (\n popover && \n !popover.contains(target) && \n trigger && \n !trigger.contains(target)\n ) {\n state.close()\n }\n }\n\n // mousedown 处理点击外部\n document.addEventListener('mousedown', onInteractOutside)\n // focusin 处理 Tab 键焦点移出 (focusin 支持冒泡,focus 不支持)\n document.addEventListener('focusin', onInteractOutside)\n\n return () => {\n document.removeEventListener('mousedown', onInteractOutside)\n document.removeEventListener('focusin', onInteractOutside)\n }\n }, [state.isOpen, state.close, triggerRef])\n\n return (\n <Overlay>\n <FocusScope restoreFocus>\n <ListBoxPopup\n {...overlayPropsFromUseOverlay}\n {...overlayProps}\n ref={popoverRef}\n data-placement={resolvedPlacement}\n style={{\n ...overlayProps.style,\n zIndex: 10000,\n width: triggerWidth ? `${triggerWidth}px` : 'auto',\n minWidth: triggerWidth ? `${triggerWidth}px` : '120px',\n }}\n >\n <DismissButton onDismiss={state.close} />\n {children}\n <DismissButton onDismiss={state.close} />\n </ListBoxPopup>\n </FocusScope>\n </Overlay>\n )\n}\n","import { useRef } from 'react'\nimport { useListBox, useOption, type AriaListBoxProps } from 'react-aria'\nimport { ListBoxContent, OptionItem, OptionText, OptionIcon, CheckboxWrapper } from './Select.style'\nimport { Checkbox } from '../checkbox'\nimport type { ListState } from '@react-stately/list'\nimport type { Node } from '@react-types/shared'\n\ninterface ListBoxProps extends Omit<AriaListBoxProps<unknown>, 'children'> {\n state: ListState<unknown>\n}\n\nexport function ListBox({ state, ...props }: ListBoxProps) {\n const ref = useRef<HTMLUListElement>(null)\n const { listBoxProps } = useListBox(props, state, ref)\n\n return (\n <ListBoxContent {...listBoxProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Option key={item.key} item={item} state={state} />\n ))}\n </ListBoxContent>\n )\n}\n\ninterface OptionProps {\n item: Node<unknown>\n state: ListState<unknown>\n isMultiple?: boolean\n}\n\nfunction Option({ item, state, isMultiple }: OptionProps) {\n const ref = useRef<HTMLLIElement>(null)\n const { optionProps, isSelected, isFocused, isDisabled } = useOption(\n { key: item.key },\n state,\n ref\n )\n\n return (\n <OptionItem\n {...optionProps}\n ref={ref}\n isSelected={isSelected}\n isFocused={isFocused}\n isDisabled={isDisabled}\n >\n {isMultiple && (\n <CheckboxWrapper aria-hidden=\"true\" onClick={(e) => e.stopPropagation()}>\n <Checkbox checked={isSelected} disabled={isDisabled} tabIndex={-1} />\n </CheckboxWrapper>\n )}\n <OptionText>{item.rendered}</OptionText>\n {!isMultiple && isSelected && (\n <OptionIcon aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </OptionIcon>\n )}\n </OptionItem>\n )\n}\n\n// 多选模式 ListBox\ninterface MultiListBoxProps {\n state: ListState<unknown>\n}\n\nexport function MultiListBox({ state }: MultiListBoxProps) {\n const ref = useRef<HTMLUListElement>(null)\n const { listBoxProps } = useListBox(\n { selectionMode: 'multiple' },\n state,\n ref\n )\n\n return (\n <ListBoxContent {...listBoxProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Option key={item.key} item={item} state={state} isMultiple />\n ))}\n </ListBoxContent>\n )\n}\n\n","import React, { forwardRef, useRef, useMemo, useState } from 'react'\nimport { useSelectState } from '@react-stately/select'\nimport { useListState } from '@react-stately/list'\nimport { useSelect, useButton, HiddenSelect, type AriaSelectProps } from 'react-aria'\nimport { Item, Section } from '@react-stately/collections'\nimport { focusWithoutScrolling } from '@react-aria/utils'\nimport type { PressEvent, Selection as SelectionType, Key } from '@react-types/shared'\n\n// Re-export Selection type for external use\nexport type { Selection } from '@react-types/shared'\nimport { ChevronDownOutline } from '@kingsoft-ai/icons'\nimport { Tag } from '../tag'\nimport { SelectTrigger, SelectValue, SelectIcon, LoadingWrapper, TagsContainer, SelectWrapper } from './Select.style'\nimport { Popover } from './Popover'\nimport { ListBox, MultiListBox } from './ListBox'\nimport type { SelectSize } from './Select.style'\n\nexport type SelectionMode = 'single' | 'multiple'\n\n/**\n * 选项类型定义\n * 推荐使用 options 属性传入选项数据\n */\nexport interface SelectOptionType {\n /** 选项值,作为唯一标识 */\n value: string | number\n /** 选项显示文本 */\n label: React.ReactNode\n /** 是否禁用该选项 */\n disabled?: boolean\n}\n\nexport interface SelectProps<T> extends Omit<AriaSelectProps<T>, 'errorMessage' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange' | 'selectionMode' | 'children' | 'isDisabled' | 'value' | 'defaultValue' | 'onChange'> {\n /** 选择模式:single 单选 | multiple 多选 */\n selectionMode?: SelectionMode\n /** 是否正在加载 */\n loading?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 尺寸 */\n size?: SelectSize\n /** 是否全宽 */\n fullWidth?: boolean\n /** 宽度 */\n width?: string | number\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n /** 占位符 */\n placeholder?: string\n /** 错误信息 */\n errorMessage?: React.ReactNode\n /** 多选时最大展示的 Tag 数量 */\n maxTagCount?: number\n /** 受控值(统一 API,单选时为 Key,多选时为 Iterable<Key>,优先级高于 selectedKey/selectedKeys) */\n value?: React.Key | null | Iterable<React.Key>\n /** 默认值(统一 API,单选时为 Key,多选时为 Iterable<Key>,优先级高于 defaultSelectedKey/defaultSelectedKeys) */\n defaultValue?: React.Key | Iterable<React.Key>\n /** 值变化回调(统一 API,优先级高于 onSelectionChange) */\n onChange?: (value: SelectionType) => void\n /** 单选时选中的 key(兼容旧 API) */\n selectedKey?: React.Key | null\n /** 单选时默认选中的 key(兼容旧 API) */\n defaultSelectedKey?: React.Key\n /** 多选时选中的 keys(兼容旧 API) */\n selectedKeys?: Iterable<React.Key>\n /** 多选时默认选中的 keys(兼容旧 API) */\n defaultSelectedKeys?: Iterable<React.Key>\n /** 选择变化回调(兼容旧 API,单选返回 key,多选返回 Set) */\n onSelectionChange?: (keys: SelectionType) => void\n /**\n * 选项数据(推荐使用)\n * \n * 提供 options 时会自动渲染选项列表,无需手动编写 <Select.Item>\n * \n * @example\n * ```tsx\n * <Select\n * options={[\n * { value: 'apple', label: '苹果' },\n * { value: 'banana', label: '香蕉' },\n * { value: 'orange', label: '橙子', disabled: true },\n * ]}\n * />\n * ```\n */\n options?: SelectOptionType[]\n /**\n * 子元素(手动编写选项时使用)\n * \n * 推荐使用 options 属性代替 children\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * <Select.Item key=\"banana\">香蕉</Select.Item>\n * </Select>\n * ```\n */\n children?: React.ReactNode\n}\n\n// 内部使用的 Select 组件\nconst SelectInner = forwardRef(function Select<T extends object>(\n props: SelectProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const {\n selectionMode = 'single',\n loading,\n disabled,\n size = 'md',\n fullWidth = false,\n width,\n className,\n style,\n placeholder = '请选择',\n label,\n description,\n errorMessage,\n maxTagCount,\n // 新统一 API\n value,\n defaultValue,\n onChange,\n // 旧兼容 API\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n options,\n children,\n } = props\n\n const isMultiple = selectionMode === 'multiple'\n\n // 统一处理受控值:value 优先于 selectedKey/selectedKeys\n const finalSelectedKey = isMultiple ? undefined : (value as React.Key | null | undefined) ?? selectedKey\n const finalSelectedKeys = isMultiple ? (value as Iterable<React.Key> | undefined) ?? selectedKeys : undefined\n \n // 统一处理默认值:defaultValue 优先于 defaultSelectedKey/defaultSelectedKeys\n const finalDefaultSelectedKey = isMultiple ? undefined : (defaultValue as React.Key | undefined) ?? defaultSelectedKey\n const finalDefaultSelectedKeys = isMultiple ? (defaultValue as Iterable<React.Key> | undefined) ?? defaultSelectedKeys : undefined\n\n // 统一处理回调:onChange 和 onSelectionChange 都会被调用\n const handleSelectionChange = (keys: SelectionType) => {\n onChange?.(keys)\n onSelectionChange?.(keys)\n }\n\n // 根据 options 或 children 生成内容\n const renderItems = useMemo(() => {\n if (options && options.length > 0) {\n return options.map((option) => (\n <Item key={option.value} textValue={typeof option.label === 'string' ? option.label : String(option.value)}>\n {option.label}\n </Item>\n ))\n }\n return children\n }, [options, children])\n\n // 合并 props,将 children 替换为实际渲染内容,并使用统一后的属性\n const mergedProps = {\n ...props,\n children: renderItems,\n selectedKey: finalSelectedKey,\n defaultSelectedKey: finalDefaultSelectedKey,\n onSelectionChange: handleSelectionChange,\n }\n\n const innerRef = useRef<HTMLButtonElement>(null)\n const triggerRef = (ref as React.RefObject<HTMLButtonElement>) || innerRef\n const lastPointerTypeRef = useRef<PressEvent['pointerType'] | null>(null)\n\n // 单选模式状态\n const singleState = useSelectState(mergedProps as any)\n \n // 多选模式状态\n const multiState = useListState({\n ...mergedProps,\n selectionMode: 'multiple',\n selectedKeys: finalSelectedKeys,\n defaultSelectedKeys: finalDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n } as any)\n \n // 多选时的打开状态需要单独管理\n const [multiOpen, setMultiOpen] = useState(false)\n const effectiveOpen = isMultiple ? multiOpen : singleState.isOpen\n\n // 获取选中项用于渲染 Tags\n const selectedItems = useMemo(() => {\n if (!isMultiple) return []\n const items: Array<{ key: Key; rendered: React.ReactNode }> = []\n const selectedKeySet = multiState.selectionManager.selectedKeys\n for (const item of multiState.collection) {\n if (selectedKeySet.has(item.key)) {\n items.push({ key: item.key, rendered: item.rendered })\n }\n }\n return items\n }, [isMultiple, multiState.selectionManager.selectedKeys, multiState.collection])\n\n // 计算要展示的 Tags\n const { visibleTags, overflowCount } = useMemo(() => {\n if (!isMultiple || selectedItems.length === 0) {\n return { visibleTags: [], overflowCount: 0 }\n }\n if (maxTagCount !== undefined && selectedItems.length > maxTagCount) {\n return {\n visibleTags: selectedItems.slice(0, maxTagCount),\n overflowCount: selectedItems.length - maxTagCount,\n }\n }\n return { visibleTags: selectedItems, overflowCount: 0 }\n }, [isMultiple, selectedItems, maxTagCount])\n\n // 单选模式的 hooks\n const {\n labelProps,\n triggerProps,\n valueProps,\n menuProps,\n descriptionProps,\n errorMessageProps\n } = useSelect(mergedProps as any, singleState, triggerRef)\n\n const handlePressStart = (event: PressEvent) => {\n lastPointerTypeRef.current = event.pointerType\n if (event.pointerType !== 'touch' && event.pointerType !== 'keyboard' && triggerRef.current) {\n focusWithoutScrolling(triggerRef.current)\n }\n }\n\n const handlePress = (event: PressEvent) => {\n const pointerType = event.pointerType || lastPointerTypeRef.current\n if (pointerType === 'keyboard') return\n\n if (isMultiple) {\n setMultiOpen(!multiOpen)\n } else {\n const focusStrategy = pointerType === 'mouse' || pointerType === 'pen' ? null : 'first'\n singleState.toggle(focusStrategy)\n }\n }\n\n const { buttonProps } = useButton(\n {\n ...triggerProps,\n onPressStart: handlePressStart,\n onPress: handlePress\n },\n triggerRef\n )\n\n // 移除 Tag\n const handleRemoveTag = (key: Key) => {\n const newKeys = new Set(multiState.selectionManager.selectedKeys)\n newKeys.delete(key)\n multiState.selectionManager.setSelectedKeys(newKeys)\n handleSelectionChange(newKeys)\n }\n\n // 渲染触发器内容\n const renderTriggerContent = () => {\n if (isMultiple) {\n if (selectedItems.length === 0) {\n return <SelectValue isPlaceholder>{placeholder}</SelectValue>\n }\n return (\n <TagsContainer>\n {visibleTags.map((item) => (\n <Tag\n key={item.key}\n size=\"sm\"\n closable\n onClose={() => handleRemoveTag(item.key)}\n >\n {item.rendered}\n </Tag>\n ))}\n {overflowCount > 0 && <Tag size=\"sm\">+{overflowCount}</Tag>}\n </TagsContainer>\n )\n }\n return (\n <SelectValue {...valueProps} isPlaceholder={!singleState.selectedItem}>\n {singleState.selectedItem ? singleState.selectedItem.rendered : placeholder}\n </SelectValue>\n )\n }\n\n const popoverState = isMultiple \n ? { isOpen: multiOpen, close: () => setMultiOpen(false) }\n : singleState\n\n return (\n <SelectWrapper\n fullWidth={fullWidth}\n className={className}\n style={{\n width: width,\n ...style\n }}\n >\n {label && (\n <label \n {...labelProps} \n style={{ \n fontSize: '12px', \n marginBottom: '4px', \n display: 'block',\n color: 'inherit'\n }}\n >\n {label}\n </label>\n )}\n \n {!isMultiple && (\n <HiddenSelect\n state={singleState}\n triggerRef={triggerRef}\n label={label}\n name={props.name}\n isDisabled={disabled}\n />\n )}\n\n <SelectTrigger\n {...buttonProps}\n ref={triggerRef}\n size={size}\n fullWidth={fullWidth}\n isOpen={effectiveOpen}\n isDisabled={disabled}\n isError={!!errorMessage}\n isMultiple={isMultiple}\n >\n {renderTriggerContent()}\n <SelectIcon isOpen={effectiveOpen} aria-hidden=\"true\" size={size}>\n <ChevronDownOutline width={12} height={12} />\n </SelectIcon>\n </SelectTrigger>\n\n {effectiveOpen && (\n <Popover state={popoverState} triggerRef={triggerRef} placement=\"bottom start\" offset={4}>\n {loading ? (\n <LoadingWrapper>\n <svg \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ animation: 'spin 1s linear infinite', marginRight: 8 }}\n >\n <style>{`@keyframes spin { 100% { transform: rotate(360deg); } }`}</style>\n <path d=\"M8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n 加载中...\n </LoadingWrapper>\n ) : isMultiple ? (\n <MultiListBox state={multiState} />\n ) : (\n <ListBox {...menuProps} state={singleState} />\n )}\n </Popover>\n )}\n \n {/* Description & Error Message */}\n {description && (\n <div {...descriptionProps} style={{ fontSize: '12px', marginTop: '4px', opacity: 0.6 }}>\n {description}\n </div>\n )}\n {errorMessage && (\n <div {...errorMessageProps} style={{ fontSize: '12px', marginTop: '4px', color: '#ff4d4f' }}>\n {errorMessage}\n </div>\n )}\n </SelectWrapper>\n )\n}) as <T extends object>(props: SelectProps<T> & { ref?: React.Ref<HTMLButtonElement> }) => React.ReactElement\n\n// 为 Select 组件添加静态属性类型\ninterface SelectComponent {\n <T extends object>(props: SelectProps<T> & { ref?: React.Ref<HTMLButtonElement> }): React.ReactElement\n /**\n * 选项组件\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * <Select.Item key=\"banana\">香蕉</Select.Item>\n * </Select>\n * ```\n */\n Item: typeof Item\n /**\n * 分组组件\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Section title=\"水果\">\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * </Select.Section>\n * </Select>\n * ```\n */\n Section: typeof Section\n}\n\n/**\n * Select 选择器组件\n * \n * 基于 react-aria 实现的无障碍选择器\n * 支持单选和多选模式\n * \n * @example 使用 options(推荐)\n * ```tsx\n * <Select\n * options={[\n * { value: 'apple', label: '苹果' },\n * { value: 'banana', label: '香蕉' },\n * ]}\n * onSelectionChange={(key) => console.log(key)}\n * />\n * ```\n * \n * @example 使用 Select.Item\n * ```tsx\n * const { Item } = Select\n * \n * <Select>\n * <Item key=\"apple\">苹果</Item>\n * <Item key=\"banana\">香蕉</Item>\n * </Select>\n * ```\n */\nexport const Select = SelectInner as SelectComponent\n\n// 挂载静态属性\nSelect.Item = Item\nSelect.Section = Section\n","/**\n * Table 样式定义\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-table-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const tableSizes = ['sm', 'md', 'lg'] as const\nexport type TableSize = (typeof tableSizes)[number]\n\nexport const tableVariants = ['default', 'bordered', 'striped'] as const\nexport type TableVariant = (typeof tableVariants)[number]\n\nconst getTableRadius = (size?: TableSize) => `var(--ksd-table-border-radius-${size ?? 'md'})`\n\nconst getCellPadding = (size?: TableSize) => `var(--ksd-table-cell-padding-${size ?? 'md'})`\n\n// ============================================================================\n// 容器样式\n// ============================================================================\n\nexport const TableContainer = styled.div<{\n size?: TableSize\n fullWidth?: boolean\n scrollX?: number | string\n scrollY?: number | string\n showScrollbar?: boolean\n}>`\n width: ${props => props.fullWidth ? '100%' : 'auto'};\n overflow: auto;\n /* 移除边框,设计稿中表格没有外围边框 */\n scrollbar-width: ${props => props.showScrollbar ? 'thin' : 'none'};\n scrollbar-color: var(--ksd-table-scrollbar-thumb-color) var(--ksd-table-scrollbar-track-color);\n border-top-left-radius: ${props => getTableRadius(props.size)};\n border-top-right-radius: ${props => getTableRadius(props.size)};\n \n &::-webkit-scrollbar {\n width: ${props => props.showScrollbar ? 'var(--ksd-table-scrollbar-width)' : '0px'};\n height: ${props => props.showScrollbar ? 'var(--ksd-table-scrollbar-width)' : '0px'};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: var(--ksd-table-scrollbar-thumb-color);\n border-radius: 999px;\n }\n\n &::-webkit-scrollbar-track {\n background: var(--ksd-table-scrollbar-track-color);\n }\n \n ${props => props.scrollX && css`\n max-width: ${typeof props.scrollX === 'number' ? `${props.scrollX}px` : props.scrollX};\n `}\n \n ${props => props.scrollY && css`\n max-height: ${typeof props.scrollY === 'number' ? `${props.scrollY}px` : props.scrollY};\n `}\n`\n\n// ============================================================================\n// Table 根元素\n// ============================================================================\n\nexport const StyledTable = styled.table<{\n size?: TableSize\n variant?: TableVariant\n scrollX?: number | string\n}>`\n width: 100%;\n ${props => props.scrollX && css`\n min-width: ${typeof props.scrollX === 'number' ? `${props.scrollX}px` : props.scrollX};\n `}\n border-collapse: separate;\n border-spacing: 0;\n font-family: var(--ksd-table-font-family);\n font-size: var(--ksd-table-cell-font-size);\n background-color: var(--ksd-table-bg);\n \n ${props => props.variant === 'bordered' && css`\n border: 1px solid var(--ksd-table-border-color);\n border-radius: ${getTableRadius(props.size)} ${getTableRadius(props.size)} 0 0;\n `}\n\n ${props => props.variant === 'striped' && css`\n tbody tr:nth-of-type(even) {\n --row-bg: var(--ksd-table-row-hover-bg);\n }\n `}\n`\n\n// ============================================================================\n// 表头样式\n// ============================================================================\n\nexport const TableHeader = styled.thead`\n background-color: var(--ksd-table-header-bg);\n position: sticky;\n top: 0;\n z-index: 10;\n`\n\nexport const TableHeaderRow = styled.tr`\n border-bottom: 1px solid var(--ksd-table-border-color);\n`\n\nexport const TableHeaderCell = styled.th<{\n size?: TableSize\n sortable?: boolean\n fixed?: 'left' | 'right'\n align?: 'left' | 'center' | 'right'\n width?: number | string\n}>`\n padding: ${props => getCellPadding(props.size)};\n text-align: ${props => props.align || 'left'};\n font-weight: 400; /* Regular font weight based on design (H9/H11) */\n font-size: var(--ksd-table-cell-font-size);\n color: var(--ksd-table-header-color);\n white-space: nowrap;\n user-select: none;\n position: ${props => props.fixed ? 'sticky' : 'static'};\n background-color: var(--ksd-table-header-bg);\n \n ${props => props.width && css`\n width: ${typeof props.width === 'number' ? `${props.width}px` : props.width};\n `}\n\n ${props => props.fixed === 'left' && css`\n left: 0;\n z-index: 11;\n box-shadow: var(--ksd-table-fixed-shadow-left);\n `}\n\n ${props => props.fixed === 'right' && css`\n right: 0;\n z-index: 11;\n box-shadow: var(--ksd-table-fixed-shadow-right);\n `}\n\n ${props => props.sortable && css`\n cursor: pointer;\n transition: background-color var(--ksd-table-transition);\n\n &:hover {\n background-color: var(--ksd-table-row-active-bg);\n }\n `}\n\n &:first-of-type {\n border-top-left-radius: ${props => getTableRadius(props.size)};\n }\n\n &:last-of-type {\n border-top-right-radius: ${props => getTableRadius(props.size)};\n }\n`\n\nexport const SortIndicator = styled.span<{ direction?: 'asc' | 'desc' | null }>`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n line-height: 1;\n gap: 2px;\n\n svg {\n width: 12px;\n height: 12px;\n color: var(--ksd-table-sort-icon-color);\n transition: color 0.2s ease, opacity 0.2s ease;\n opacity: 0.4;\n }\n\n svg[data-active='true'] {\n color: var(--ksd-table-sort-icon-active-color);\n opacity: 1;\n }\n`\n\n// ============================================================================\n// 表体样式\n// ============================================================================\n\nexport const TableBody = styled.tbody``\n\nexport const TableRow = styled.tr<{\n selectable?: boolean\n selected?: boolean\n expandable?: boolean\n expanded?: boolean\n isSubRow?: boolean\n level?: number\n}>`\n /* 定义背景色变量,用于同步固定列的背景 */\n --row-bg: var(--ksd-table-row-bg);\n\n ${props => props.isSubRow && css`\n --row-bg: var(--ksd-table-row-subrow-bg);\n `}\n\n ${props => props.selected && css`\n --row-bg: var(--ksd-table-row-selected-bg);\n `}\n\n background-color: var(--row-bg);\n transition: background-color var(--ksd-table-transition);\n\n /* 将边框移动到单元格上,确保在 separate 模式下显示且连续 */\n & > td {\n border-bottom: 1px solid var(--ksd-table-divider-color);\n }\n\n &:last-of-type > td {\n border-bottom: none;\n }\n\n ${props => (props.selectable || props.expandable) && css`\n cursor: pointer;\n `}\n\n &:hover {\n --row-bg: ${props => props.selected\n ? 'var(--ksd-table-row-selected-bg)'\n : 'var(--ksd-table-row-hover-bg)'};\n }\n\n &:active {\n --row-bg: ${props => props.selected\n ? 'var(--ksd-table-row-selected-bg)'\n : 'var(--ksd-table-row-active-bg)'};\n }\n`\n\nexport const TableCell = styled.td<{\n size?: TableSize\n fixed?: 'left' | 'right'\n align?: 'left' | 'center' | 'right'\n width?: number | string\n level?: number\n}>`\n padding: ${props => getCellPadding(props.size)};\n \n ${props => props.level && props.level > 0 && css`\n padding-left: ${16 + props.level * 24}px;\n `}\n \n text-align: ${props => props.align || 'left'};\n font-size: var(--ksd-table-cell-font-size);\n color: var(--ksd-table-cell-color);\n position: ${props => props.fixed ? 'sticky' : 'static'};\n /* 使用变量确保固定列背景与行背景同步,且不透明 */\n background-color: ${props => props.fixed \n ? 'var(--row-bg, inherit)' \n : 'inherit'};\n transition: background-color var(--ksd-table-transition);\n \n ${props => props.width && css`\n width: ${typeof props.width === 'number' ? `${props.width}px` : props.width};\n `}\n\n ${props => props.fixed === 'left' && css`\n left: 0;\n z-index: 9;\n box-shadow: var(--ksd-table-fixed-shadow-left);\n `}\n\n ${props => props.fixed === 'right' && css`\n right: 0;\n z-index: 9;\n box-shadow: var(--ksd-table-fixed-shadow-right);\n `}\n`\n\n// ============================================================================\n// 辅助组件样式\n// ============================================================================\n\nexport const CheckboxCell = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n`\n\nexport const ExpandButton = styled.button<{ expanded?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--ksd-table-expand-btn-size);\n height: var(--ksd-table-expand-btn-size);\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n margin-right: 8px;\n color: var(--ksd-table-expand-icon-color);\n transition: transform var(--ksd-table-transition), color var(--ksd-table-transition);\n\n &:hover {\n color: var(--ksd-table-expand-icon-hover-color);\n }\n\n svg {\n width: var(--ksd-table-expand-icon-size);\n height: var(--ksd-table-expand-icon-size);\n transform: ${props => props.expanded ? 'rotate(90deg)' : 'none'};\n }\n`\n\nexport const EmptyState = styled.div`\n padding: var(--ksd-table-empty-padding);\n text-align: center;\n color: var(--ksd-table-empty-color);\n font-size: var(--ksd-table-empty-font-size);\n`\n\nexport const CellContent = styled.div<{\n ellipsis?: boolean\n wrapText?: boolean\n}>`\n ${props => props.ellipsis && css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n\n ${props => props.wrapText && css`\n white-space: normal;\n word-break: break-word;\n `}\n`\n","import { forwardRef, useState, useCallback, useMemo, useEffect, useRef, type ReactNode } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Radio } from '../radio'\nimport { ChevronUpOutline, ChevronDownOutline, ChevronRightOutline } from '@kingsoft-ai/icons'\nimport {\n TableContainer,\n StyledTable,\n TableHeader,\n TableHeaderRow,\n TableHeaderCell,\n TableBody,\n TableRow,\n TableCell,\n CheckboxCell,\n ExpandButton,\n EmptyState,\n CellContent,\n SortIndicator,\n tableSizes,\n tableVariants,\n type TableSize,\n type TableVariant,\n} from './Table.style'\n\n// 导出类型供外部使用\nexport type { TableSize, TableVariant } from './Table.style'\n\n// 导出常量供外部使用\nexport const SIZES = tableSizes\nexport const VARIANTS = tableVariants\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport interface TableColumn<T = any> {\n /** 列唯一标识 */\n key: string\n /** 列标题 */\n title?: ReactNode\n /** 列宽度 */\n width?: number | string\n /** 对齐方式 */\n align?: 'left' | 'center' | 'right'\n /** 是否可排序 */\n sortable?: boolean\n /** 固定列 */\n fixed?: 'left' | 'right'\n /** 自定义渲染 */\n render?: (value: any, record: T, index: number) => ReactNode\n /** 是否省略文本 */\n ellipsis?: boolean\n}\n\nexport interface TableDataSource<T = any> {\n /** 唯一标识 */\n id: string | number\n /** 子数据(用于树形结构) */\n children?: TableDataSource<T>[]\n /** 其他数据字段 */\n [key: string]: any\n}\n\nexport interface TableProps<T extends Record<string, any> = Record<string, any>> {\n /** 列配置 */\n columns: TableColumn<T>[]\n /** 数据源 */\n dataSource: T[]\n /** 表格尺寸 */\n size?: TableSize\n /** 表格变体 */\n variant?: TableVariant\n /** 是否显示边框 */\n bordered?: boolean\n /** 是否全宽 */\n fullWidth?: boolean\n /** 滚动配置 */\n scroll?: {\n /** 横向滚动宽度 */\n x?: number | string\n /** 纵向滚动高度 */\n y?: number | string\n }\n /** 是否可选择 */\n selectable?: boolean\n /** 选择类型 */\n selectionMode?: 'single' | 'multiple'\n /** 选中的行 */\n selectedKeys?: Set<string | number> | 'all'\n /** 选中行变化回调 */\n onSelectionChange?: (keys: Set<string | number> | 'all') => void\n /** 是否可展开 */\n expandable?: boolean\n /** 展开的行 */\n expandedKeys?: Set<string | number>\n /** 展开行变化回调 */\n onExpandChange?: (keys: Set<string | number>) => void\n /** 自定义展开内容 */\n expandedRowRender?: (record: T, index: number) => ReactNode\n /** 排序配置 */\n sortConfig?: {\n key: string\n direction: 'asc' | 'desc' | null\n }\n /** 排序变化回调 */\n onSortChange?: (key: string, direction: 'asc' | 'desc' | null) => void\n /** 行点击事件 */\n onRowClick?: (record: T, index: number) => void\n /** 空数据展示 */\n emptyText?: ReactNode\n /** 自定义类名 */\n className?: string\n /** 是否允许折行 */\n wrapText?: boolean\n /** Loading 状态 */\n loading?: boolean\n}\n\n// ============================================================================\n// Table 组件\n// ============================================================================\n\nfunction TableInner<T extends Record<string, any> = Record<string, any>>(\n {\n columns,\n dataSource,\n size = 'md',\n variant = 'default',\n bordered = false,\n fullWidth = true,\n scroll,\n selectable = false,\n selectionMode = 'multiple',\n selectedKeys: controlledSelectedKeys,\n onSelectionChange,\n expandable = false,\n expandedKeys: controlledExpandedKeys,\n onExpandChange,\n expandedRowRender,\n sortConfig,\n onSortChange,\n onRowClick,\n emptyText = '暂无数据',\n className,\n wrapText = false,\n loading = false,\n }: TableProps<T>,\n ref: React.ForwardedRef<HTMLTableElement>\n) {\n // 内部状态管理\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<Set<string | number>>(new Set())\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<Set<string | number>>(new Set())\n const [isScrollbarVisible, setIsScrollbarVisible] = useState(false)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const scrollHideTimerRef = useRef<number | null>(null)\n\n // 选中状态\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const handleSelectionChange = useCallback((keys: Set<string | number> | 'all') => {\n // 总是将 'all' 转换为包含所有 ID 的 Set,确保外部接收到的是具体的 key 集合\n const newKeys = keys === 'all' ? new Set(dataSource.map(d => d.id)) : keys\n \n if (!controlledSelectedKeys) {\n setInternalSelectedKeys(newKeys)\n }\n onSelectionChange?.(newKeys)\n }, [controlledSelectedKeys, onSelectionChange, dataSource])\n\n // 展开状态\n const expandedKeys = controlledExpandedKeys ?? internalExpandedKeys\n const handleExpandChange = useCallback((key: string | number) => {\n const newKeys = new Set(expandedKeys)\n if (newKeys.has(key)) {\n newKeys.delete(key)\n } else {\n newKeys.add(key)\n }\n if (!controlledExpandedKeys) {\n setInternalExpandedKeys(newKeys)\n }\n onExpandChange?.(newKeys)\n }, [expandedKeys, controlledExpandedKeys, onExpandChange])\n\n // 排序处理\n const handleSort = useCallback((key: string) => {\n if (!onSortChange) return\n \n let newDirection: 'asc' | 'desc' | null = 'asc'\n \n // 如果当前是该列且正在排序\n if (sortConfig?.key === key) {\n if (sortConfig.direction === 'asc') {\n newDirection = 'desc'\n } else if (sortConfig.direction === 'desc') {\n // 从降序切换到取消排序\n newDirection = null\n }\n }\n \n onSortChange(key, newDirection)\n }, [sortConfig, onSortChange])\n\n // 全选状态计算\n const allSelected = useMemo(() => {\n if (!selectable || selectionMode === 'single') return false\n if (selectedKeys === 'all') return true\n if (dataSource.length === 0) return false\n return dataSource.every(record => selectedKeys.has(record.id))\n }, [selectable, selectionMode, selectedKeys, dataSource])\n\n const indeterminate = useMemo(() => {\n if (!selectable || selectionMode === 'single' || selectedKeys === 'all') return false\n if (dataSource.length === 0) return false\n const selectedCount = dataSource.filter(record => selectedKeys.has(record.id)).length\n return selectedCount > 0 && selectedCount < dataSource.length\n }, [selectable, selectionMode, selectedKeys, dataSource])\n\n // 滚动条显示/隐藏\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handleScroll = () => {\n setIsScrollbarVisible(true)\n if (scrollHideTimerRef.current) {\n window.clearTimeout(scrollHideTimerRef.current)\n }\n scrollHideTimerRef.current = window.setTimeout(() => {\n setIsScrollbarVisible(false)\n }, 800)\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (scrollHideTimerRef.current) {\n window.clearTimeout(scrollHideTimerRef.current)\n }\n }\n }, [])\n\n // 渲染行数据(包含树形结构)\n const renderRows = useCallback((\n data: T[],\n level = 0\n ): React.ReactNode[] => {\n return data.flatMap((record, index) => {\n const isExpanded = expandedKeys.has(record.id)\n const isSelected = selectedKeys instanceof Set && selectedKeys.has(record.id)\n const hasChildren = record.children && record.children.length > 0\n\n const mainRow = (\n <TableRow\n key={record.id}\n selectable={selectable}\n selected={isSelected}\n expandable={expandable}\n expanded={isExpanded}\n level={level}\n onClick={() => {\n if (selectable && selectionMode === 'single') {\n handleSelectionChange(new Set([record.id]))\n }\n onRowClick?.(record, index)\n }}\n >\n {selectable && (\n <TableCell\n key=\"selection-column\"\n size={size}\n width={48}\n align=\"center\"\n >\n <CheckboxCell onClick={(e) => e.stopPropagation()}>\n {selectionMode === 'single' ? (\n <Radio\n checked={isSelected}\n onChange={() => {\n handleSelectionChange(new Set([record.id]))\n }}\n />\n ) : (\n <Checkbox\n checked={isSelected}\n onChange={(checked) => {\n const newKeys = new Set(selectedKeys === 'all' ? dataSource.map(d => d.id) : selectedKeys)\n if (checked) {\n newKeys.add(record.id)\n } else {\n newKeys.delete(record.id)\n }\n handleSelectionChange(newKeys)\n }}\n />\n )}\n </CheckboxCell>\n </TableCell>\n )}\n {columns.map((column, colIndex) => {\n const value = record[column.key]\n const isFirstColumn = colIndex === 0\n\n return (\n <TableCell\n key={column.key}\n size={size}\n fixed={column.fixed}\n align={column.align}\n width={column.width}\n level={isFirstColumn ? level : 0}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {isFirstColumn && expandable && hasChildren && (\n <ExpandButton\n expanded={isExpanded}\n onClick={(e) => {\n e.stopPropagation()\n handleExpandChange(record.id)\n }}\n aria-label={isExpanded ? '收起' : '展开'}\n >\n <ChevronRightOutline />\n </ExpandButton>\n )}\n \n <CellContent ellipsis={column.ellipsis} wrapText={wrapText}>\n {column.render ? column.render(value, record, index) : value}\n </CellContent>\n </div>\n </TableCell>\n )\n })}\n </TableRow>\n )\n\n const expandedRow = isExpanded && expandedRowRender && (\n <TableRow key={`${record.id}-expanded`} isSubRow>\n <TableCell colSpan={columns.length + (selectable ? 1 : 0)} size={size}>\n {expandedRowRender(record, index)}\n </TableCell>\n </TableRow>\n )\n\n const childRows = isExpanded && hasChildren\n ? renderRows(record.children as T[], level + 1)\n : []\n\n return [mainRow, expandedRow, ...childRows].filter(Boolean)\n })\n }, [\n columns,\n size,\n expandable,\n expandedKeys,\n selectedKeys,\n selectable,\n selectionMode,\n expandedRowRender,\n wrapText,\n handleExpandChange,\n handleSelectionChange,\n onRowClick,\n ])\n\n if (dataSource.length === 0 && !loading) {\n return (\n <TableContainer \n size={size}\n ref={containerRef}\n fullWidth={fullWidth} \n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showScrollbar={isScrollbarVisible}\n className={className}\n >\n <EmptyState>{emptyText}</EmptyState>\n </TableContainer>\n )\n }\n\n return (\n <TableContainer \n size={size}\n ref={containerRef}\n fullWidth={fullWidth} \n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showScrollbar={isScrollbarVisible}\n className={className}\n >\n <StyledTable \n ref={ref} \n size={size} \n variant={bordered ? 'bordered' : variant}\n scrollX={scroll?.x}\n >\n <TableHeader>\n <TableHeaderRow>\n {selectable && (\n <TableHeaderCell\n key=\"selection-column\"\n size={size}\n width={48}\n align=\"center\"\n >\n {selectionMode === 'multiple' && (\n <CheckboxCell>\n <Checkbox\n checked={allSelected}\n indeterminate={indeterminate}\n onChange={(checked) => {\n handleSelectionChange(checked ? 'all' : new Set())\n }}\n />\n </CheckboxCell>\n )}\n </TableHeaderCell>\n )}\n {columns.map((column) => (\n <TableHeaderCell\n key={column.key}\n size={size}\n fixed={column.fixed}\n align={column.align}\n width={column.width}\n sortable={column.sortable}\n onClick={() => column.sortable && handleSort(column.key)}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '8px' }}>\n <span>{column.title}</span>\n {column.sortable && (\n <SortIndicator\n direction={sortConfig?.key === column.key ? sortConfig.direction : undefined}\n >\n <ChevronUpOutline data-active={sortConfig?.key === column.key && sortConfig.direction === 'asc'} />\n <ChevronDownOutline data-active={sortConfig?.key === column.key && sortConfig.direction === 'desc'} />\n </SortIndicator>\n )}\n </div>\n </TableHeaderCell>\n ))}\n </TableHeaderRow>\n </TableHeader>\n\n <TableBody>\n {loading ? (\n <TableRow>\n <TableCell colSpan={columns.length + (selectable ? 1 : 0)} size={size}>\n <div style={{ textAlign: 'center', padding: '24px' }}>加载中...</div>\n </TableCell>\n </TableRow>\n ) : (\n renderRows(dataSource)\n )}\n </TableBody>\n </StyledTable>\n </TableContainer>\n )\n}\n\nconst TableWithRef = forwardRef(TableInner) as <T extends Record<string, any> = Record<string, any>>(\n props: TableProps<T> & { ref?: React.ForwardedRef<HTMLTableElement> }\n) => React.ReactElement\n\n;(TableWithRef as any).displayName = 'Table'\n\nexport const Table = TableWithRef\n","/**\n * Switch 开关样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-switch-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n * 支持带文字的开关组件(如 ON/OFF、开/关)\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const switchSizes = ['sm', 'md'] as const\nexport type SwitchSize = (typeof switchSizes)[number]\n\n// ============================================================================\n// 辅助函数\n// ============================================================================\n\n/**\n * 获取尺寸样式\n * 使用 CSS 变量实现\n */\nconst getSizeStyles = (size: SwitchSize) => {\n return css`\n /* 提供尺寸相关的 CSS 变量,方便内部元素计算占位 */\n --switch-thumb-size: var(--ksd-switch-${size}-thumb-size);\n --switch-inner-gap: var(--ksd-switch-gap);\n\n min-width: var(--ksd-switch-${size}-width);\n height: var(--ksd-switch-${size}-height);\n font-size: var(--ksd-switch-${size}-font-size);\n\n /* 滑块尺寸 - 使用后代选择器 */\n & span[data-thumb] {\n width: var(--ksd-switch-${size}-thumb-size);\n height: var(--ksd-switch-${size}-thumb-size);\n }\n `\n}\n\n// ============================================================================\n// 样式组件\n// ============================================================================\n\n/**\n * Switch 根元素(label 标签)\n * \n * 特性:\n * - 基于 CSS 变量,无需 ThemeProvider\n * - 完整的交互状态(hover, focus, disabled)\n * - 支持带文字的开关\n * - 平滑的动画过渡\n */\nexport const SwitchRoot = styled.label<{\n size: SwitchSize\n isSelected: boolean\n isDisabled: boolean\n isFocusVisible: boolean\n hasInnerLabel: boolean\n}>`\n /* 基础布局 */\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n user-select: none;\n \n /* 背景和圆角 - 使用 CSS 变量 */\n background: ${({ isSelected, isDisabled }) =>\n isDisabled\n ? 'var(--ksd-switch-bg-disabled)'\n : isSelected\n ? 'var(--ksd-switch-bg-checked)'\n : 'var(--ksd-switch-bg-unchecked)'};\n border-radius: var(--ksd-switch-border-radius);\n \n /* \n * 内边距 - 根据 Figma 设计:\n * - 有文字时:选中状态左8px右3px,未选中状态左3px右8px\n * - 无文字时:始终左右各3px\n * - 上下始终3px\n */\n padding: 3px;\n ${({ hasInnerLabel, isSelected }) => {\n if (!hasInnerLabel) {\n // 无文字时,左右都是 3px\n return css`\n padding-left: 3px;\n padding-right: 3px;\n `\n }\n // 有文字时,根据选中状态调整\n return css`\n padding-left: ${isSelected ? '8px' : '3px'};\n padding-right: ${isSelected ? '3px' : '8px'};\n `\n }}\n \n /* 过渡动画 - 只对背景色做动画,padding 瞬间切换以配合滑块动画 */\n transition: background-color var(--ksd-switch-transition);\n \n /* 尺寸样式 */\n ${({ size }) => getSizeStyles(size)}\n \n /* Focus 可见状态 - 键盘导航时显示 */\n ${({ isFocusVisible }) =>\n isFocusVisible &&\n css`\n outline: none;\n box-shadow: 0 0 0 var(--ksd-switch-focus-ring-offset) var(--ksd-switch-focus-ring-color);\n `}\n \n /* 禁用状态 */\n ${({ isDisabled }) =>\n isDisabled &&\n css`\n opacity: var(--ksd-switch-disabled-opacity);\n cursor: not-allowed;\n `}\n`\n\n/**\n * Switch 内容容器\n * \n * 用于布局文字和滑块,确保正确的间距和对齐\n * 根据 Figma 设计,元素间距为 4px\n * \n * 布局策略:\n * - 文字使用相对定位,根据状态调整 justify-content\n * - 滑块使用绝对定位 + left/right 切换实现平滑动画\n */\nexport const SwitchContent = styled.span<{\n isSelected: boolean\n hasInnerLabel: boolean\n}>`\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n position: relative;\n z-index: 1;\n \n /* 当存在内部文字时,为滑块预留占位,避免文字与滑块重叠\n 预留尺寸 = 滑块尺寸 + 设计间距 */\n ${({ hasInnerLabel, isSelected }) =>\n hasInnerLabel &&\n css`\n padding-right: ${isSelected\n ? 'calc(var(--switch-thumb-size) + var(--ksd-switch-gap))'\n : '0'};\n padding-left: ${!isSelected\n ? 'calc(var(--switch-thumb-size) + var(--ksd-switch-gap))'\n : '0'};\n `}\n \n /* 有文字时,根据选中状态调整文字位置 */\n ${({ hasInnerLabel, isSelected }) =>\n hasInnerLabel &&\n css`\n justify-content: ${isSelected ? 'flex-start' : 'flex-end'};\n `}\n`\n\n/**\n * Switch 文字标签\n * \n * 显示开关状态文字(如 ON/OFF、开/关)\n * 使用 CSS 变量实现\n * \n * 使用相对定位,不影响滑块的绝对定位计算\n */\nexport const SwitchLabel = styled.span<{\n isSelected: boolean\n}>`\n display: inline-flex;\n align-items: center;\n color: var(--ksd-switch-text-color);\n font-size: var(--ksd-switch-text-font-size);\n font-weight: var(--ksd-switch-text-font-weight);\n line-height: 1.5;\n white-space: nowrap;\n user-select: none;\n position: relative;\n z-index: 2;\n`\n\n/**\n * Switch 滑块(Thumb)\n * \n * 白色圆形滑块,根据开关状态滑动\n * 使用 CSS 变量实现\n * \n * 使用绝对定位 + transform 实现平滑的位置动画\n * 根据 Figma 设计:\n * - 未选中时:left: 0(紧贴左边缘,实际距离容器边缘 3px)\n * - 选中时:right: 0(紧贴右边缘,实际距离容器边缘 3px)\n */\nexport const SwitchThumb = styled.span<{\n isSelected: boolean\n}>`\n display: block;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 50%;\n background: var(--ksd-switch-thumb-bg);\n box-shadow: var(--ksd-switch-thumb-shadow);\n \n /* 位置控制:未选中在左,选中在右 */\n ${({ isSelected }) =>\n isSelected\n ? css`\n right: 0;\n left: auto;\n `\n : css`\n left: 0;\n right: auto;\n `}\n \n /* 平滑的位置过渡动画 */\n transition: \n left var(--ksd-switch-transition),\n right var(--ksd-switch-transition);\n`\n\n/**\n * 外部标签容器\n * \n * 用于在 Switch 外部显示描述性标签\n */\nexport const SwitchLabelWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-switch-label-gap);\n`\n\n/**\n * 外部标签文字\n * \n * Switch 旁边的描述性文字\n */\nexport const SwitchLabelText = styled.span<{\n isDisabled: boolean\n}>`\n font-size: var(--ksd-switch-label-font-size);\n color: ${({ isDisabled }) =>\n isDisabled\n ? 'var(--ksd-text-disabled)'\n : 'var(--ksd-text-primary)'};\n user-select: none;\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n`\n","/**\n * Switch 开关组件\n * \n * 基于 react-aria 实现无障碍访问的开关组件\n * 完全符合 Figma 设计稿规范\n * 支持带文字的开关(如 ON/OFF、开/关)\n * \n * @example\n * ```tsx\n * // 基础用法\n * <Switch>开启通知</Switch>\n * \n * // 带状态文字\n * <Switch \n * checkedLabel=\"开\" \n * uncheckedLabel=\"关\"\n * >\n * 夜间模式\n * </Switch>\n * \n * // 受控组件\n * <Switch \n * isSelected={enabled} \n * onChange={setEnabled}\n * >\n * 自动保存\n * </Switch>\n * ```\n */\n\nimport { forwardRef, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useSwitch, useFocusRing, VisuallyHidden } from 'react-aria'\nimport type { AriaSwitchProps } from 'react-aria'\nimport { useToggleState } from '@react-stately/toggle'\nimport type { ToggleProps } from '@react-types/checkbox'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n SwitchRoot,\n SwitchContent,\n SwitchLabel,\n SwitchThumb,\n SwitchLabelWrapper,\n SwitchLabelText,\n switchSizes,\n type SwitchSize,\n} from './Switch.style'\n\n// 导出常量供外部使用\nexport const SIZES = switchSizes\n\nexport type SwitchProps = Omit<AriaSwitchProps, 'children' | 'isDisabled'> & \n Omit<ToggleProps, 'children' | 'isDisabled'> & {\n /** 开关尺寸:小号(20px)、标准(24px) */\n size?: SwitchSize\n /** 选中状态的文字标签(显示在开关内部) */\n checkedLabel?: string\n /** 未选中状态的文字标签(显示在开关内部) */\n uncheckedLabel?: string\n /** 是否禁用(替代 isDisabled) */\n disabled?: boolean\n /** 受控值(统一 API,优先级高于 isSelected) */\n value?: boolean\n /** 默认值(统一 API,优先级高于 defaultSelected) */\n defaultValue?: boolean\n /** 外部描述性标签(显示在开关旁边) */\n children?: ReactNode\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * Switch 开关组件\n * \n * 基于 Figma 设计规范实现的开关组件,支持带文字的开关\n * 使用 react-aria 保证无障碍访问性\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n size = 'md',\n checkedLabel,\n uncheckedLabel,\n disabled = false,\n value,\n defaultValue,\n children,\n className,\n isSelected,\n defaultSelected,\n ...props\n },\n forwardedRef,\n ) => {\n // 统一处理受控值:value 优先于 isSelected\n const finalIsSelected = value ?? isSelected\n // 统一处理默认值:defaultValue 优先于 defaultSelected\n const finalDefaultSelected = defaultValue ?? defaultSelected\n\n // 使用 react-stately 管理开关状态\n const state = useToggleState({\n ...props,\n isSelected: finalIsSelected,\n defaultSelected: finalDefaultSelected,\n })\n const innerRef = useRef<HTMLInputElement>(null)\n const ref = forwardedRef || innerRef\n\n // 使用 react-aria 的 useSwitch hook 获取无障碍属性\n const { inputProps } = useSwitch(\n {\n ...props,\n isDisabled: disabled,\n },\n state,\n innerRef,\n )\n\n // 使用 useFocusRing 处理键盘焦点样式\n const { isFocusVisible, focusProps } = useFocusRing()\n\n // 当前显示的标签文字\n const currentLabel = state.isSelected ? checkedLabel : uncheckedLabel\n \n // 是否有内部文字标签\n const hasInnerLabel = Boolean(checkedLabel || uncheckedLabel)\n\n // Switch 主体\n const switchElement = (\n <SwitchRoot\n size={size}\n isSelected={state.isSelected}\n isDisabled={disabled}\n isFocusVisible={isFocusVisible}\n hasInnerLabel={hasInnerLabel}\n className={className}\n data-selected={state.isSelected ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n >\n {/* 隐藏的原生 input,用于无障碍访问 */}\n <VisuallyHidden>\n <input\n {...mergeProps(inputProps, focusProps)}\n ref={ref}\n />\n </VisuallyHidden>\n\n {/* 开关内容:文字 + 滑块 */}\n <SwitchContent isSelected={state.isSelected} hasInnerLabel={hasInnerLabel}>\n {/* 滑块 - 使用绝对定位,始终渲染 */}\n <SwitchThumb\n isSelected={state.isSelected}\n data-thumb\n aria-hidden=\"true\"\n />\n \n {/* 内部状态文字(如果有) - 相对定位,在滑块上方 */}\n {hasInnerLabel && currentLabel && (\n <SwitchLabel isSelected={state.isSelected}>\n {currentLabel}\n </SwitchLabel>\n )}\n </SwitchContent>\n </SwitchRoot>\n )\n\n // 如果有外部标签,使用 wrapper 包装\n if (children) {\n return (\n <SwitchLabelWrapper>\n {switchElement}\n <SwitchLabelText\n isDisabled={disabled}\n onClick={() => {\n if (!disabled) {\n state.toggle()\n }\n }}\n >\n {children}\n </SwitchLabelText>\n </SwitchLabelWrapper>\n )\n }\n\n return switchElement\n },\n)\n\nSwitch.displayName = 'Switch'\n\n","/**\n * Transfer 样式组件\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-transfer-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\n\nexport const TransferRoot = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-transfer-container-gap);\n`;\n\nexport const TransferPanel = styled.div`\n width: var(--ksd-transfer-panel-width);\n height: var(--ksd-transfer-panel-height);\n background: var(--ksd-transfer-panel-bg);\n border: var(--ksd-transfer-panel-border);\n border-radius: var(--ksd-transfer-panel-border-radius);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n\nexport const TransferHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: var(--ksd-transfer-header-height);\n padding: var(--ksd-transfer-header-padding);\n font-size: var(--ksd-transfer-header-font-size);\n color: var(--ksd-transfer-header-color);\n background: var(--ksd-transfer-header-bg);\n flex-shrink: 0;\n`;\n\nexport const TransferTitle = styled.span`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const TransferCount = styled.span`\n color: var(--ksd-transfer-header-color);\n`;\n\nexport const TransferSearchWrapper = styled.div`\n padding: 10px 0;\n display: flex;\n flex-shrink: 0;\n width: var(--ksd-transfer-search-width);\n margin: 0 auto;\n & > div {\n width: 100%;\n >div {\n min-width: 100%;\n }\n }\n`;\n\nexport const TransferList = styled.div`\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n padding: var(--ksd-transfer-list-padding);\n \n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-border-divider);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: var(--ksd-border-primary);\n }\n`;\n\nexport const TransferItem = styled.div<{\n disabled?: boolean;\n selected?: boolean;\n}>`\n display: flex;\n align-items: center;\n height: var(--ksd-transfer-item-height);\n font-size: var(--ksd-transfer-item-font-size);\n border-radius: var(--ksd-transfer-item-border-radius);\n gap: var(--ksd-transfer-item-gap);\n cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n user-select: none;\n transition: var(--ksd-transfer-transition);\n padding: var(--ksd-transfer-item-padding);\n color: ${({ selected, disabled }) =>\n disabled\n ? 'var(--ksd-transfer-item-text-disabled)'\n : selected\n ? 'var(--ksd-transfer-item-text-selected)'\n : 'var(--ksd-transfer-item-text)'};\n`;\n\nexport const TransferItemLabel = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const TransferItemContent = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-transfer-item-gap);\n flex: 1;\n overflow: hidden;\n`;\n\nexport const TransferItemDeleteButton = styled.button<{ disabled?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border: none;\n background: transparent;\n cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n opacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n color: var(--ksd-text-tertiary);\n transition: all 0.2s ease;\n padding: 0;\n margin-left: 8px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nexport const TransferOperations = styled.div`\n display: flex;\n flex-direction: column;\n gap: var(--ksd-transfer-operations-gap);\n align-items: center;\n`;\n\nexport const TransferOperationButton = styled.div<{ disabled?: boolean; active?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--ksd-transfer-operations-width);\n height: var(--ksd-transfer-operations-height);\n border-radius: 50%;\n border: 1px solid ${({ disabled, active }) => {\n if (disabled) return 'var(--ksd-transfer-operations-border-disabled)';\n if (active) return 'var(--ksd-transfer-operations-border-active)';\n return 'var(--ksd-transfer-operations-border)';\n }};\n background: ${({ disabled }) => \n disabled ? 'var(--ksd-transfer-operations-bg-disabled)' : 'var(--ksd-transfer-operations-bg)'\n };\n cursor: ${({ disabled }) => disabled ? 'not-allowed' : 'pointer'};\n transition: all 0.2s ease;\n opacity: ${({ disabled }) => disabled ? 0.5 : 1};\n\n svg {\n width: var(--ksd-transfer-operations-icon-size);\n height: var(--ksd-transfer-operations-icon-size);\n color: ${({ disabled, active }) => {\n if (disabled) return 'var(--ksd-transfer-operations-icon-disabled)';\n if (active) return 'var(--ksd-transfer-operations-icon-active)';\n return 'var(--ksd-transfer-operations-icon)';\n }};\n }\n\n &:hover {\n border-color: ${({ disabled }) => \n !disabled && 'var(--ksd-transfer-operations-border-active)'\n };\n \n svg {\n color: ${({ disabled }) => \n !disabled && 'var(--ksd-transfer-operations-icon-active)'\n };\n }\n }\n\n &:active {\n border-color: var(--ksd-transfer-operations-border-active);\n \n svg {\n color: var(--ksd-transfer-operations-icon-active);\n }\n }\n`;\n\nexport const TransferFooter = styled.div`\n display: flex;\n align-items: center;\n height: var(--ksd-transfer-footer-height);\n padding-inline: var(--ksd-transfer-footer-padding-inline);\n font-size: var(--ksd-transfer-footer-font-size);\n color: var(--ksd-transfer-footer-color);\n border-top: var(--ksd-transfer-footer-border-top);\n margin-top: var(--ksd-transfer-footer-margin-top);\n flex-shrink: 0;\n`;\n\nexport const TransferEmpty = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: var(--ksd-transfer-empty-color);\n font-size: var(--ksd-transfer-empty-font-size);\n`;\n\nexport const TransferPagination = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n border-top: 1px solid var(--ksd-border-divider);\n flex-shrink: 0;\n font-size: 12px;\n color: var(--ksd-text-secondary);\n`;\n\nexport const TransferPaginationInfo = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const TransferPaginationControls = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nexport const TransferPaginationButton = styled.button<{ disabled?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 1px solid var(--ksd-border-primary);\n border-radius: var(--ksd-radii-r2);\n background: var(--ksd-background-surface);\n cursor: ${({ disabled }) => disabled ? 'not-allowed' : 'pointer'};\n opacity: ${({ disabled }) => disabled ? 0.5 : 1};\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\nexport const TransferPageSizeSelector = styled.select`\n height: 24px;\n padding: 0 20px 0 8px;\n border: 1px solid var(--ksd-border-primary);\n border-radius: var(--ksd-radii-r2);\n background: var(--ksd-background-surface);\n font-size: 12px;\n color: var(--ksd-text-primary);\n cursor: pointer;\n outline: none;\n \n &:hover {\n border-color: var(--ksd-brand-primary);\n }\n`;\n","/**\n * Transfer 穿梭框组件\n * \n * 基于 react-aria 实现无障碍访问的穿梭框组件\n * 支持搜索、全选、自定义渲染等功能\n * \n * @example\n * ```tsx\n * const dataSource = [\n * { key: '1', title: '选项1', description: '描述1' },\n * { key: '2', title: '选项2' },\n * ];\n * \n * <Transfer\n * dataSource={dataSource}\n * targetKeys={['1']}\n * onChange={(keys) => console.log(keys)}\n * />\n * ```\n */\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { useTheme } from '@emotion/react';\nimport { Checkbox } from '../checkbox';\nimport { Input } from '../input';\nimport { Select } from '../select';\nimport {\n ChevronRightOutline,\n ChevronLeftOutline,\n SearchOutline,\n DeleteOutline,\n} from '@kingsoft-ai/icons';\nimport {\n TransferRoot,\n TransferPanel,\n TransferHeader,\n TransferTitle,\n TransferCount,\n TransferSearchWrapper,\n TransferList as StyledTransferList,\n TransferItem,\n TransferItemLabel,\n TransferItemContent,\n TransferItemDeleteButton,\n TransferOperations,\n TransferOperationButton,\n TransferFooter,\n TransferEmpty,\n TransferPagination,\n TransferPaginationInfo,\n TransferPaginationControls,\n TransferPaginationButton,\n} from './Transfer.style';\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport interface TransferItem {\n /** 唯一标识 */\n key: string;\n /** 标题 */\n title: React.ReactNode;\n /** 描述 */\n description?: React.ReactNode;\n /** 是否禁用 */\n disabled?: boolean;\n /** 其他自定义数据 */\n [key: string]: any;\n}\n\nexport interface TransferHeaderProps {\n /** 方向 */\n direction: 'left' | 'right';\n /** 已选中数量 */\n selectedCount: number;\n /** 总数量 */\n totalCount: number;\n /** 选中的keys */\n selectedKeys: Set<string>;\n /** 全选回调 */\n onSelectAll: (checked: boolean) => void;\n /** 标题 */\n title?: React.ReactNode;\n /** 是否显示全选 */\n showSelectAll: boolean;\n /** 是否禁用 */\n disabled?: boolean;\n /** 清空所有选中项回调 */\n onClearAll?: () => void;\n /** 清空模式:'selected' | 'all' */\n clearMode?: 'selected' | 'all';\n}\n\nexport interface TransferActions {\n /** 左侧操作按钮,支持静态元素或动态函数 */\n left?: React.ReactNode | ((selectedKeys: string[]) => React.ReactNode);\n /** 右侧操作按钮,支持静态元素或动态函数 */\n right?: React.ReactNode | ((selectedKeys: string[]) => React.ReactNode);\n}\n\nexport interface TransferProps {\n /** 数据源 */\n dataSource: TransferItem[];\n /** 目标框数据的 key 集合 */\n targetKeys?: string[];\n /** 默认目标框数据的 key 集合 */\n defaultTargetKeys?: string[];\n /** 选中项变化的回调 */\n onChange?: (targetKeys: string[], direction: 'left' | 'right', moveKeys: string[]) => void;\n /** 源框标题 */\n titles?: [React.ReactNode, React.ReactNode];\n /** 是否显示搜索框 */\n showSearch?: boolean;\n /** 搜索框占位符 */\n searchPlaceholder?: [string, string];\n /** 自定义过滤方法 */\n filterOption?: (inputValue: string, item: TransferItem) => boolean;\n /** 自定义渲染每一项 */\n render?: (item: TransferItem) => React.ReactNode;\n /** 是否禁用 */\n disabled?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 操作按钮文本 */\n operations?: [React.ReactNode, React.ReactNode];\n /** 是否显示全选 */\n showSelectAll?: boolean;\n /** 底部渲染函数 */\n footer?: (props: { direction: 'left' | 'right' }) => React.ReactNode;\n /** 列表为空时显示的内容 */\n locale?: {\n itemUnit?: string;\n itemsUnit?: string;\n notFoundContent?: React.ReactNode;\n searchPlaceholder?: string;\n };\n /** 自定义头部渲染 */\n header?: (props: TransferHeaderProps) => React.ReactNode;\n /** 单向模式 */\n oneWay?: boolean;\n /** 自定义操作按钮 */\n actions?: React.ReactNode[] | TransferActions;\n /** 使用分页样式,自定义渲染列表下无效 */\n pagination?: boolean | {\n pageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showPageInfo?: boolean;\n };\n}\n\ninterface TransferListProps {\n direction: 'left' | 'right';\n dataSource: TransferItem[];\n selectedKeys: Set<string>;\n disabled?: boolean;\n showSearch?: boolean;\n searchPlaceholder?: string;\n filterOption?: (inputValue: string, item: TransferItem) => boolean;\n render?: (item: TransferItem) => React.ReactNode;\n onItemSelectChange: (keys: Set<string>) => void;\n title?: React.ReactNode;\n showSelectAll?: boolean;\n footer?: (props: { direction: 'left' | 'right' }) => React.ReactNode;\n locale?: TransferProps['locale'];\n header?: (props: TransferHeaderProps) => React.ReactNode;\n onClearAll?: () => void;\n clearMode?: 'selected' | 'all';\n oneWay?: boolean;\n onItemDelete?: (key: string) => void;\n pagination?: TransferProps['pagination'];\n}\n\n// ============================================================================\n// 穿梭框列表组件\n// ============================================================================\n\nconst TransferList: React.FC<TransferListProps> = ({\n direction,\n dataSource,\n selectedKeys,\n disabled,\n showSearch,\n searchPlaceholder,\n filterOption,\n render,\n onItemSelectChange,\n title,\n showSelectAll = true,\n footer,\n locale,\n header,\n onClearAll,\n clearMode = 'all',\n oneWay = false,\n onItemDelete,\n pagination,\n}) => {\n const theme = useTheme();\n const [searchValue, setSearchValue] = useState('');\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n );\n\n // 过滤数据\n const filteredData = useMemo(() => {\n if (!searchValue) return dataSource;\n if (filterOption) {\n return dataSource.filter((item) => filterOption(searchValue, item));\n }\n return dataSource.filter((item) => {\n const title = String(item.title || '');\n const description = String(item.description || '');\n return (\n title.toLowerCase().includes(searchValue.toLowerCase()) ||\n description.toLowerCase().includes(searchValue.toLowerCase())\n );\n });\n }, [dataSource, searchValue, filterOption]);\n\n // 可选择的项(排除禁用项)\n const selectableItems = useMemo(\n () => filteredData.filter((item) => !item.disabled),\n [filteredData]\n );\n\n // 是否启用分页(自定义render时禁用)\n const isPaginationEnabled = pagination && !render;\n\n // 分页后的数据\n const paginatedData = useMemo(() => {\n if (!isPaginationEnabled) return filteredData;\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return filteredData.slice(startIndex, endIndex);\n }, [filteredData, currentPage, pageSize, isPaginationEnabled]);\n\n // 实际显示的数据\n const displayData = isPaginationEnabled ? paginatedData : filteredData;\n\n // 总页数\n const totalPages = useMemo(() => {\n if (!isPaginationEnabled) return 1;\n return Math.ceil(filteredData.length / pageSize);\n }, [filteredData.length, pageSize, isPaginationEnabled]);\n\n // 切换页码\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page);\n }, []);\n\n // 切换每页条数\n const handlePageSizeChange = useCallback((size: number) => {\n setPageSize(size);\n setCurrentPage(1);\n }, []);\n\n // 检查是否全选\n const isAllSelected = useMemo(() => {\n if (selectableItems.length === 0) return false;\n return selectableItems.every((item) => selectedKeys.has(item.key));\n }, [selectableItems, selectedKeys]);\n\n // 是否部分选中\n const isIndeterminate = useMemo(() => {\n const selectedCount = selectableItems.filter((item) =>\n selectedKeys.has(item.key)\n ).length;\n return selectedCount > 0 && selectedCount < selectableItems.length;\n }, [selectableItems, selectedKeys]);\n\n // 全选/取消全选\n const handleSelectAll = useCallback(\n (checked: boolean) => {\n const newKeys = new Set(selectedKeys);\n selectableItems.forEach((item) => {\n if (checked) {\n newKeys.add(item.key);\n } else {\n newKeys.delete(item.key);\n }\n });\n onItemSelectChange(newKeys);\n },\n [selectableItems, selectedKeys, onItemSelectChange]\n );\n\n // 切换单项选中状态\n const handleItemToggle = useCallback(\n (key: string) => {\n const newKeys = new Set(selectedKeys);\n if (newKeys.has(key)) {\n newKeys.delete(key);\n } else {\n newKeys.add(key);\n }\n onItemSelectChange(newKeys);\n },\n [selectedKeys, onItemSelectChange]\n );\n\n // 渲染项\n const renderItem = (item: TransferItem) => {\n if (render) {\n return render(item);\n }\n return item.title;\n };\n\n const selectedCount = selectableItems.filter((item) =>\n selectedKeys.has(item.key)\n ).length;\n\n // 默认头部渲染\n const renderDefaultHeader = () => (\n <TransferHeader>\n <TransferTitle>\n {showSelectAll && selectableItems.length > 0 && (\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={handleSelectAll}\n disabled={disabled}\n />\n )}\n {title}\n </TransferTitle>\n <TransferCount>\n {selectedCount}/{dataSource.length}\n </TransferCount>\n </TransferHeader>\n );\n\n return (\n <TransferPanel>\n {/* 头部 */}\n {header ? (\n header({\n direction,\n selectedCount,\n totalCount: dataSource.length,\n selectedKeys,\n onSelectAll: handleSelectAll,\n title,\n showSelectAll,\n disabled,\n onClearAll,\n clearMode,\n })\n ) : (\n renderDefaultHeader()\n )}\n\n {/* 搜索框 */}\n {showSearch && (\n <TransferSearchWrapper>\n <Input\n suffix={<SearchOutline style={{color: (theme as any).components.transfer.search.iconColor}}/>}\n size=\"sm\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder || locale?.searchPlaceholder || '请输入搜索内容'}\n disabled={disabled}\n aria-label=\"搜索输入框\"\n fullWidth\n />\n </TransferSearchWrapper>\n )}\n\n {/* 列表 */}\n <StyledTransferList>\n {displayData.length === 0 ? (\n <TransferEmpty>\n {locale?.notFoundContent || '暂无数据'}\n </TransferEmpty>\n ) : (\n displayData.map((item) => (\n <TransferItem\n key={item.key}\n disabled={disabled || item.disabled}\n selected={selectedKeys.has(item.key)}\n onClick={() => {\n if (!disabled && !item.disabled) {\n handleItemToggle(item.key);\n }\n }}\n >\n <TransferItemContent>\n {/* oneWay模式下,左侧显示checkbox,右侧不显示(右侧有删除按钮) */}\n {(!oneWay || direction === 'left') && (\n <Checkbox\n checked={selectedKeys.has(item.key)}\n disabled={disabled || item.disabled}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <TransferItemLabel>{renderItem(item)}</TransferItemLabel>\n </TransferItemContent>\n {oneWay && direction === 'right' && onItemDelete && (\n <TransferItemDeleteButton\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled && !item.disabled) {\n onItemDelete(item.key);\n }\n }}\n disabled={disabled || item.disabled}\n >\n <DeleteOutline />\n </TransferItemDeleteButton>\n )}\n </TransferItem>\n ))\n )}\n </StyledTransferList>\n\n {/* 分页 */}\n {isPaginationEnabled && filteredData.length > 0 && (\n <TransferPagination>\n <TransferPaginationInfo>\n {typeof pagination === 'object' && pagination.showPageInfo !== false && (\n <span>\n {(currentPage - 1) * pageSize + 1}-\n {Math.min(currentPage * pageSize, filteredData.length)} / {filteredData.length}\n </span>\n )}\n {typeof pagination === 'object' && pagination.showSizeChanger && (\n <Select\n value={pageSize.toString()}\n onChange={(value) => handlePageSizeChange(Number(value))}\n options={(pagination.pageSizeOptions || [10, 20, 50]).map((size) => ({\n value: size.toString(),\n label: `${size} 条/页`,\n }))}\n style={{ width: '80px', height: '24px', minWidth: '80px' }}\n disabled={disabled}\n />\n )}\n </TransferPaginationInfo>\n <TransferPaginationControls>\n <TransferPaginationButton\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n >\n <ChevronLeftOutline />\n </TransferPaginationButton>\n <span>\n {currentPage} / {totalPages}\n </span>\n <TransferPaginationButton\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n >\n <ChevronRightOutline />\n </TransferPaginationButton>\n </TransferPaginationControls>\n </TransferPagination>\n )}\n\n {/* 底部 */}\n {footer && <TransferFooter>{footer({ direction })}</TransferFooter>}\n </TransferPanel>\n );\n};\n\n// ============================================================================\n// Transfer 主组件\n// ============================================================================\n\nexport const Transfer: React.FC<TransferProps> = ({\n dataSource = [],\n targetKeys: controlledTargetKeys,\n defaultTargetKeys = [],\n onChange,\n titles = ['源列表', '目标列表'],\n showSearch = false,\n searchPlaceholder = ['搜索源列表', '搜索目标列表'],\n filterOption,\n render,\n disabled = false,\n className,\n style,\n operations,\n showSelectAll = true,\n footer,\n locale,\n header,\n oneWay = false,\n actions,\n pagination,\n}) => {\n // 内部状态管理(非受控)\n const [internalTargetKeys, setInternalTargetKeys] = useState<Set<string>>(\n new Set(defaultTargetKeys)\n );\n\n // 判断是否受控\n const isControlled = controlledTargetKeys !== undefined;\n const targetKeysSet = useMemo(\n () =>\n isControlled\n ? new Set(controlledTargetKeys)\n : internalTargetKeys,\n [isControlled, controlledTargetKeys, internalTargetKeys]\n );\n\n // 左侧选中的项\n const [leftSelectedKeys, setLeftSelectedKeys] = useState<Set<string>>(new Set());\n // 右侧选中的项\n const [rightSelectedKeys, setRightSelectedKeys] = useState<Set<string>>(new Set());\n\n // 左侧数据源(未选中的项)\n const leftDataSource = useMemo(\n () => dataSource.filter((item) => !targetKeysSet.has(item.key)),\n [dataSource, targetKeysSet]\n );\n\n // 右侧数据源(已选中的项)\n const rightDataSource = useMemo(\n () => dataSource.filter((item) => targetKeysSet.has(item.key)),\n [dataSource, targetKeysSet]\n );\n\n // 移动到右侧\n const moveToRight = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(leftSelectedKeys);\n \n moveKeys.forEach((key) => {\n newTargetKeys.add(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setLeftSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'right', moveKeys);\n }, [targetKeysSet, leftSelectedKeys, isControlled, onChange]);\n\n // 移动到左侧\n const moveToLeft = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(rightSelectedKeys);\n \n moveKeys.forEach((key) => {\n newTargetKeys.delete(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setRightSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'left', moveKeys);\n }, [targetKeysSet, rightSelectedKeys, isControlled, onChange]);\n\n // 清空左侧所有数据(移动到右侧)\n const clearAllLeftData = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const allLeftKeys = leftDataSource.filter(item => !item.disabled).map(item => item.key);\n \n allLeftKeys.forEach((key) => {\n newTargetKeys.add(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setLeftSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'right', allLeftKeys);\n }, [targetKeysSet, leftDataSource, isControlled, onChange]);\n\n // 清空右侧所有数据(移动到左侧)\n const clearAllRightData = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(targetKeysSet).filter(key => {\n const item = dataSource.find(item => item.key === key);\n return item && !item.disabled;\n });\n \n moveKeys.forEach((key) => {\n newTargetKeys.delete(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setRightSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'left', moveKeys);\n }, [targetKeysSet, dataSource, isControlled, onChange]);\n\n // 删除单个项目\n const handleItemDelete = useCallback(\n (key: string) => {\n const newTargetKeys = new Set(targetKeysSet);\n newTargetKeys.delete(key);\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n onChange?.(Array.from(newTargetKeys), 'left', [key]);\n },\n [targetKeysSet, isControlled, onChange]\n );\n\n // 判断操作按钮是否可用\n const canMoveToRight = leftSelectedKeys.size > 0 && !disabled;\n const canMoveToLeft = rightSelectedKeys.size > 0 && !disabled;\n\n // 渲染操作按钮\n const renderActions = () => {\n // 处理对象格式的 actions\n if (actions && typeof actions === 'object' && !Array.isArray(actions)) {\n const { left, right } = actions as TransferActions;\n\n if (oneWay) {\n // 单向模式只显示右侧按钮\n if (right) {\n if (typeof right === 'function') {\n return <React.Fragment key=\"right\">{right(Array.from(leftSelectedKeys))}</React.Fragment>;\n }\n return <React.Fragment key=\"right\">{right}</React.Fragment>;\n }\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n // 双向模式\n return (\n <>\n {left ? (\n typeof left === 'function' ? (\n <React.Fragment key=\"left\">{left(Array.from(leftSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"left\">{left}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n )}\n {right ? (\n typeof right === 'function' ? (\n <React.Fragment key=\"right\">{right(Array.from(rightSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"right\">{right}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n )}\n </>\n );\n }\n\n // 处理数组格式的 actions(向后兼容)\n if (actions && Array.isArray(actions)) {\n if (oneWay) {\n // 单向模式只显示第一个按钮\n const action = actions[0];\n if (!action) {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n if (typeof action === 'string') {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n {action}\n </TransferOperationButton>\n );\n } else if (React.isValidElement(action)) {\n return <React.Fragment key=\"action-0\">{action}</React.Fragment>;\n } else if (typeof action === 'function') {\n return <React.Fragment key=\"action-0\">{(action as any)(Array.from(leftSelectedKeys))}</React.Fragment>;\n }\n return <React.Fragment key=\"action-0\">{action}</React.Fragment>;\n }\n\n // 双向模式\n const leftAction = actions[0];\n const rightAction = actions[1];\n\n return (\n <>\n {leftAction ? (\n typeof leftAction === 'string' ? (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n {leftAction}\n </TransferOperationButton>\n ) : React.isValidElement(leftAction) ? (\n <React.Fragment key=\"left\">{leftAction}</React.Fragment>\n ) : typeof leftAction === 'function' ? (\n <React.Fragment key=\"left\">{(leftAction as any)(Array.from(leftSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"left\">{leftAction}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n )}\n {rightAction ? (\n typeof rightAction === 'string' ? (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n {rightAction}\n </TransferOperationButton>\n ) : React.isValidElement(rightAction) ? (\n <React.Fragment key=\"right\">{rightAction}</React.Fragment>\n ) : typeof rightAction === 'function' ? (\n <React.Fragment key=\"right\">{(rightAction as any)(Array.from(rightSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"right\">{rightAction}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n )}\n </>\n );\n }\n\n // 默认按钮\n if (oneWay) {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n return (\n <>\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n </>\n );\n };\n\n return (\n <TransferRoot className={className} style={style}>\n {/* 左侧列表 */}\n <TransferList\n direction=\"left\"\n dataSource={leftDataSource}\n selectedKeys={leftSelectedKeys}\n disabled={disabled}\n showSearch={showSearch}\n searchPlaceholder={searchPlaceholder[0]}\n filterOption={filterOption}\n render={render}\n onItemSelectChange={setLeftSelectedKeys}\n title={titles[0]}\n showSelectAll={showSelectAll}\n footer={footer}\n locale={locale}\n header={header}\n onClearAll={clearAllLeftData}\n clearMode=\"all\"\n oneWay={oneWay}\n pagination={pagination}\n />\n\n {/* 操作按钮 */}\n <TransferOperations>\n {renderActions()}\n </TransferOperations>\n\n {/* 右侧列表 */}\n <TransferList\n direction=\"right\"\n dataSource={rightDataSource}\n selectedKeys={rightSelectedKeys}\n disabled={disabled}\n showSearch={showSearch}\n searchPlaceholder={searchPlaceholder[1]}\n filterOption={filterOption}\n render={render}\n onItemSelectChange={setRightSelectedKeys}\n title={titles[1]}\n showSelectAll={showSelectAll}\n footer={footer}\n locale={locale}\n header={header}\n onClearAll={clearAllRightData}\n clearMode=\"all\"\n oneWay={oneWay}\n onItemDelete={oneWay ? handleItemDelete : undefined}\n pagination={pagination}\n />\n </TransferRoot>\n );\n};\n\nTransfer.displayName = 'Transfer';\n\nexport default Transfer;\n","/**\n * Upload 上传组件样式\n * \n * 基于三层 Token 体系:\n * - Tier 1 (Global): 全局基础值\n * - Tier 2 (Semantic): 语义化映射\n * - Tier 3 (Component): 组件专用 Token\n * \n * 完全还原 Figma 设计稿规范\n */\n\nimport styled from '@emotion/styled'\nimport { css } from '@emotion/react'\n\n// ============================================================================\n// 类型定义\n// ============================================================================\n\nexport const uploadStatuses = ['idle', 'uploading', 'success', 'error'] as const\nexport type UploadStatus = (typeof uploadStatuses)[number]\n\n// ============================================================================\n// 上传区域样式\n// ============================================================================\n\n/**\n * 上传区域容器\n */\nexport const UploadRoot = styled.div`\n width: 100%;\n`\n\n/**\n * 拖拽区域\n */\nexport const UploadDropzone = styled.div<{\n isDragActive: boolean\n isDisabled: boolean\n}>`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px 0;\n border: 1px solid ${({ theme, isDragActive }) => \n isDragActive ? theme.semantic.colors.brand.primary : theme.semantic.colors.border.primary};\n border-radius: 16px;\n background: ${({ theme, isDragActive }) => \n isDragActive ? '#EEF6FD' : theme.semantic.colors.background.surface};\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n transition: all 0.2s ease;\n outline: none;\n\n ${({ isDisabled, theme }) =>\n !isDisabled &&\n css`\n &:hover {\n border-color: ${theme.semantic.colors.brand.primary};\n }\n\n &:focus-visible {\n border-color: ${theme.semantic.colors.brand.primary};\n box-shadow: 0 0 0 4px rgba(44, 111, 231, 0.18);\n }\n `}\n\n ${({ isDisabled, theme }) =>\n isDisabled &&\n css`\n opacity: 0.5;\n background: ${theme.semantic.colors.background.secondary};\n `}\n`\n\n/**\n * 上传图标容器\n */\nexport const UploadIconWrapper = styled.div`\n width: 100px;\n height: 100px;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\n/**\n * 上传提示文本容器\n */\nexport const UploadTextWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n width: 100%;\n font-family: ${({ theme }) => theme.global.typography.fontFamily};\n`\n\n/**\n * 主要提示文本\n */\nexport const UploadMainText = styled.div`\n font-size: 14px;\n line-height: 20px;\n color: ${({ theme }) => theme.semantic.colors.text.primary};\n text-align: center;\n width: 100%;\n`\n\n/**\n * 次要提示文本\n */\nexport const UploadSecondaryText = styled.p`\n font-size: 12px;\n line-height: 18px;\n color: rgba(10, 24, 51, 0.4);\n margin: 0;\n white-space: pre;\n`\n\n/**\n * 链接文本\n */\nexport const UploadLink = styled.span`\n color: ${({ theme }) => theme.semantic.colors.brand.primary};\n cursor: pointer;\n \n &:hover {\n text-decoration: underline;\n }\n`\n\n// ============================================================================\n// 文件列表样式\n// ============================================================================\n\n/**\n * 文件列表容器\n */\nexport const FileList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 16px;\n width: 100%;\n`\n\n/**\n * 文件项容器\n */\nexport const FileItem = styled.div<{\n status: UploadStatus\n}>`\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n`\n\n/**\n * 文件信息行\n */\nexport const FileInfoRow = styled.div<{\n status: UploadStatus\n}>`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px;\n border-radius: 4px;\n background: ${({ status, theme }) => {\n if (status === 'success') return '#FAFAFB'\n if (status === 'error') return '#FEF6F1'\n return theme.semantic.colors.background.surface\n }};\n flex: 1;\n`\n\n/**\n * 文件图标\n */\nexport const FileIcon = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: ${({ theme }) => theme.semantic.colors.text.primary};\n`\n\n/**\n * 文件名\n */\nexport const FileName = styled.div<{\n status: UploadStatus\n}>`\n flex: 1;\n font-family: ${({ theme }) => theme.global.typography.fontFamily};\n font-size: 12px;\n line-height: 18px;\n color: ${({ status, theme }) => {\n if (status === 'error') return theme.semantic.colors.state.danger\n return theme.semantic.colors.text.primary\n }};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`\n\n/**\n * 状态图标\n */\nexport const StatusIcon = styled.span<{\n status: UploadStatus\n}>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: ${({ status, theme }) => {\n if (status === 'success') return theme.semantic.colors.state.success\n if (status === 'error') return theme.semantic.colors.state.danger\n return theme.semantic.colors.text.secondary\n }};\n`\n\n/**\n * 删除按钮\n */\nexport const DeleteButton = styled.button`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n background: transparent;\n color: ${({ theme }) => theme.semantic.colors.text.secondary};\n cursor: pointer;\n flex-shrink: 0;\n transition: color 0.2s ease;\n\n &:hover {\n color: ${({ theme }) => theme.semantic.colors.text.primary};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.semantic.colors.brand.primary};\n outline-offset: 2px;\n border-radius: 2px;\n }\n`\n\n/**\n * 进度条容器\n */\nexport const ProgressWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 16px;\n height: 16px;\n margin-top: 0;\n`\n\n/**\n * 进度条轨道\n */\nexport const ProgressTrack = styled.div`\n flex: 1;\n height: 6px;\n background: ${({ theme }) => theme.semantic.colors.background.secondary};\n border-radius: 5px;\n overflow: hidden;\n`\n\n/**\n * 进度条填充\n */\nexport const ProgressBar = styled.div<{\n percent: number\n}>`\n height: 100%;\n width: ${({ percent }) => percent}%;\n background: ${({ theme }) => theme.semantic.colors.brand.primary};\n border-radius: 12px;\n transition: width 0.3s ease;\n`\n\n/**\n * 进度百分比文本\n */\nexport const ProgressText = styled.span`\n font-family: ${({ theme }) => theme.global.typography.fontFamily};\n font-size: 12px;\n line-height: 18px;\n color: ${({ theme }) => theme.semantic.colors.text.secondary};\n white-space: nowrap;\n flex-shrink: 0;\n width: 40px;\n text-align: right;\n`\n\n/**\n * 隐藏的文件输入框\n */\nexport const HiddenInput = styled.input`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n`\n\n","/**\n * Upload 上传组件\n * \n * 基于 react-aria 实现无障碍访问的上传组件\n * 完全符合 Figma 设计稿规范\n * \n * @example\n * ```tsx\n * <Upload\n * accept=\".xls,.xlsx\"\n * maxSize={5 * 1024 * 1024}\n * onChange={(files) => console.log(files)}\n * />\n * ```\n */\n\nimport { forwardRef, useRef, useState, type ReactNode, type ChangeEvent, type DragEvent } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport {\n UploadRoot,\n UploadDropzone,\n UploadIconWrapper,\n UploadTextWrapper,\n UploadMainText,\n UploadSecondaryText,\n UploadLink,\n FileList,\n FileItem,\n FileInfoRow,\n FileIcon,\n FileName,\n StatusIcon,\n DeleteButton,\n ProgressWrapper,\n ProgressTrack,\n ProgressBar,\n ProgressText,\n HiddenInput,\n uploadStatuses,\n type UploadStatus,\n} from './Upload.style'\n\n// 导出常量供外部使用\nexport const STATUSES = uploadStatuses\n\nexport interface UploadFile {\n /** 文件唯一标识 */\n uid: string\n /** 文件名 */\n name: string\n /** 文件对象 */\n file?: File\n /** 上传状态 */\n status: UploadStatus\n /** 上传进度 (0-100) */\n percent?: number\n /** 错误信息 */\n error?: string\n}\n\nexport type UploadProps = {\n /** 接受的文件类型 */\n accept?: string\n /** 是否支持多选 */\n multiple?: boolean\n /** 最大文件大小(字节) */\n maxSize?: number\n /** 最大文件数量 */\n maxCount?: number\n /** 是否禁用 */\n disabled?: boolean\n /** 文件列表 */\n fileList?: UploadFile[]\n /** 默认文件列表 */\n defaultFileList?: UploadFile[]\n /** 文件变化回调 */\n onChange?: (fileList: UploadFile[]) => void\n /** 文件上传前的钩子 */\n beforeUpload?: (file: File) => boolean | Promise<boolean>\n /** 自定义上传逻辑 */\n customRequest?: (options: {\n file: File\n onProgress: (percent: number) => void\n onSuccess: () => void\n onError: (error: Error) => void\n }) => void\n /** 主要提示文本 */\n mainText?: ReactNode\n /** 次要提示文本 */\n secondaryText?: ReactNode\n /** 文件类型提示 */\n fileTypeHint?: ReactNode\n /** 下载模板文本 */\n downloadTemplateText?: ReactNode\n /** 下载模板回调 */\n onDownloadTemplate?: () => void\n /** 自定义类名 */\n className?: string\n /** 自定义上传图标 */\n icon?: ReactNode\n}\n\n/**\n * 默认上传图标\n */\nconst DefaultUploadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\">\n <g clipPath=\"url(#clip0_6955_14967)\">\n <path d=\"M6.25 63.1836L28.525 52.195C28.8475 52.0359 29.2023 51.9531 29.5619 51.9531H70.6424C71.0049 51.9531 71.3625 52.0372 71.687 52.1988L93.75 63.1836V91.4062C93.75 92.7007 92.7007 93.75 91.4062 93.75H8.59375C7.29932 93.75 6.25 92.7007 6.25 91.4062V63.1836Z\" fill=\"#F0F0F0\"/>\n <path d=\"M6.25 63.1836H34.4859C35.7804 63.1836 36.8297 64.2329 36.8297 65.5273V69.8906C36.8297 71.185 37.879 72.2344 39.1734 72.2344H60.7687C62.0632 72.2344 63.1125 71.185 63.1125 69.8906V65.5273C63.1125 64.2329 64.1618 63.1836 65.4562 63.1836H93.75V92.9688C93.75 93.176 93.6677 93.3747 93.5212 93.5212C93.3747 93.6677 93.1759 93.75 92.9688 93.75H7.03125C6.82405 93.75 6.62534 93.6677 6.47882 93.5212C6.33231 93.3747 6.25 93.176 6.25 92.9688V63.1836Z\" fill=\"#FAFAFB\"/>\n <path d=\"M19.1445 39.9733C19.3009 39.41 20.0994 39.41 20.2558 39.9733C20.797 41.9242 22.3218 43.449 24.2727 43.9902C24.836 44.1466 24.836 44.9451 24.2727 45.1015C22.3218 45.6427 20.797 47.1675 20.2558 49.1184C20.0994 49.6817 19.3009 49.6817 19.1445 49.1184C18.6033 47.1675 17.0785 45.6427 15.1276 45.1015C14.5642 44.9451 14.5643 44.1466 15.1276 43.9902C17.0785 43.449 18.6033 41.9242 19.1445 39.9733Z\" fill=\"#F0F0F0\"/>\n <path d=\"M78.1066 35.6488C78.3468 34.7837 79.573 34.7837 79.8132 35.6488C80.6443 38.6449 82.9858 40.9864 85.9819 41.8175C86.8469 42.0577 86.8469 43.2839 85.9819 43.5241C82.9858 44.3552 80.6443 46.6968 79.8132 49.6929C79.573 50.5579 78.3468 50.5579 78.1066 49.6929C77.2755 46.6968 74.9339 44.3552 71.9379 43.5241C71.0728 43.2839 71.0728 42.0577 71.9379 41.8175C74.9339 40.9864 77.2755 38.6449 78.1066 35.6488Z\" fill=\"#F0F0F0\"/>\n <path d=\"M49.0173 14.5685C49.733 13.8105 50.9389 13.8105 51.6547 14.5685L62.8375 26.4101C63.9294 27.5668 63.1096 29.469 61.5188 29.4691H57.591C56.0884 29.4691 54.8704 30.6871 54.8704 32.1897L54.8703 41C54.8703 41.5523 54.4226 42 53.8703 42H46.8015C46.2492 42 45.8015 41.5523 45.8015 41L45.8016 32.1897C45.8016 30.6871 44.5835 29.4691 43.0809 29.4691H39.1532C37.5623 29.4691 36.7424 27.5669 37.8345 26.4101L49.0173 14.5685Z\" fill=\"#F0F0F0\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_6955_14967\">\n <rect width=\"100\" height=\"100\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n)\n\n/**\n * 文件图标\n */\nconst FileIconSvg = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 1H3.5C2.67157 1 2 1.67157 2 2.5V13.5C2 14.3284 2.67157 15 3.5 15H12.5C13.3284 15 14 14.3284 14 13.5V6M9 1L14 6M9 1V6H14\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5 7H7\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <path d=\"M5 10H11\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n)\n\n/**\n * 成功图标\n */\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path d=\"M11.3333 5.5L6.75 10.0833L4.66667 8\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n/**\n * 错误图标\n */\nconst ErrorIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path d=\"M10 6L6 10M6 6L10 10\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n)\n\n/**\n * 删除图标\n */\nconst DeleteIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 4.5H12.5M6.5 7V11.5M9.5 7V11.5M10.5 4.5V2.5C10.5 2.22386 10.2761 2 10 2H6C5.72386 2 5.5 2.22386 5.5 2.5V4.5M4.5 4.5H11.5V13C11.5 13.2761 11.2761 13.5 11 13.5H5C4.72386 13.5 4.5 13.2761 4.5 13V4.5Z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n/**\n * 生成唯一 ID\n */\nconst generateUid = () => `upload-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n\n/**\n * Upload 上传组件\n * \n * 基于 Figma 设计规范实现的上传组件,支持拖拽上传和点击上传\n * 使用 react-aria 保证无障碍访问性\n */\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(\n (\n {\n accept,\n multiple = false,\n maxSize,\n maxCount,\n disabled = false,\n fileList: controlledFileList,\n defaultFileList = [],\n onChange,\n beforeUpload,\n customRequest,\n mainText,\n secondaryText,\n fileTypeHint,\n downloadTemplateText,\n onDownloadTemplate,\n className,\n icon,\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null)\n const dropzoneRef = useRef<HTMLDivElement>(null)\n\n // 内部文件列表状态\n const [internalFileList, setInternalFileList] = useState<UploadFile[]>(defaultFileList)\n const [isDragActive, setIsDragActive] = useState(false)\n\n // 判断是否受控\n const isControlled = controlledFileList !== undefined\n const fileList = isControlled ? controlledFileList : internalFileList\n\n // 更新文件列表\n const updateFileList = (newFileList: UploadFile[]) => {\n if (!isControlled) {\n setInternalFileList(newFileList)\n }\n onChange?.(newFileList)\n }\n\n // 处理文件选择\n const handleFiles = async (files: FileList | null) => {\n if (!files || files.length === 0) return\n\n const filesArray = Array.from(files)\n\n // 检查文件数量限制\n if (maxCount && fileList.length + filesArray.length > maxCount) {\n console.warn(`最多只能上传 ${maxCount} 个文件`)\n return\n }\n\n // 处理每个文件\n const newFiles: UploadFile[] = []\n \n for (const file of filesArray) {\n // 检查文件大小\n if (maxSize && file.size > maxSize) {\n console.warn(`文件 ${file.name} 超过大小限制`)\n continue\n }\n\n // 执行 beforeUpload 钩子\n if (beforeUpload) {\n try {\n const result = await beforeUpload(file)\n if (!result) continue\n } catch (error) {\n console.error('beforeUpload error:', error)\n continue\n }\n }\n\n const uploadFile: UploadFile = {\n uid: generateUid(),\n name: file.name,\n file,\n status: 'uploading',\n percent: 0,\n }\n\n newFiles.push(uploadFile)\n }\n\n if (newFiles.length === 0) return\n\n // 更新文件列表\n const updatedFileList = [...fileList, ...newFiles]\n updateFileList(updatedFileList)\n\n // 执行上传\n newFiles.forEach((uploadFile) => {\n if (customRequest) {\n customRequest({\n file: uploadFile.file!,\n onProgress: (percent) => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid ? { ...f, percent } : f\n )\n )\n },\n onSuccess: () => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid ? { ...f, status: 'success', percent: 100 } : f\n )\n )\n },\n onError: (error) => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid\n ? { ...f, status: 'error', error: error.message }\n : f\n )\n )\n },\n })\n } else {\n // 默认模拟上传\n simulateUpload(uploadFile.uid, updatedFileList)\n }\n })\n }\n\n // 模拟上传进度\n const simulateUpload = (uid: string, currentFileList: UploadFile[]) => {\n let percent = 0\n const interval = setInterval(() => {\n percent += 10\n if (percent >= 100) {\n clearInterval(interval)\n updateFileList(\n currentFileList.map((f) =>\n f.uid === uid ? { ...f, status: 'success', percent: 100 } : f\n )\n )\n } else {\n updateFileList(\n currentFileList.map((f) =>\n f.uid === uid ? { ...f, percent } : f\n )\n )\n }\n }, 200)\n }\n\n // 处理文件输入变化\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // 清空 input 值,允许重复选择同一文件\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n }\n\n // 处理拖拽进入\n const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragActive(true)\n }\n }\n\n // 处理拖拽离开\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n }\n\n // 处理拖拽悬停\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n // 处理文件放置\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n\n if (disabled) return\n\n const files = e.dataTransfer.files\n handleFiles(files)\n }\n\n // 处理点击上传区域\n const handleClick = () => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }\n\n // 处理删除文件\n const handleDelete = (uid: string) => {\n const newFileList = fileList.filter((f) => f.uid !== uid)\n updateFileList(newFileList)\n }\n\n // 使用 react-aria 的 useButton\n const { buttonProps } = useButton(\n {\n onPress: handleClick,\n isDisabled: disabled,\n } as AriaButtonProps,\n dropzoneRef\n )\n\n // 渲染状态图标\n const renderStatusIcon = (status: UploadStatus) => {\n switch (status) {\n case 'success':\n return <SuccessIcon />\n case 'error':\n return <ErrorIcon />\n default:\n return null\n }\n }\n\n return (\n <UploadRoot ref={ref} className={className}>\n <UploadDropzone\n {...buttonProps}\n ref={dropzoneRef}\n isDragActive={isDragActive}\n isDisabled={disabled}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"上传文件区域\"\n >\n <UploadIconWrapper>\n {icon || <DefaultUploadIcon />}\n </UploadIconWrapper>\n\n <UploadTextWrapper>\n <UploadMainText>\n {mainText || (\n <>\n 将文件拖到此处,或<UploadLink>点击上传</UploadLink>\n </>\n )}\n </UploadMainText>\n\n {secondaryText && (\n <UploadSecondaryText>{secondaryText}</UploadSecondaryText>\n )}\n\n {(fileTypeHint || downloadTemplateText) && (\n <UploadSecondaryText>\n {fileTypeHint}\n {downloadTemplateText && onDownloadTemplate && (\n <>\n {' '}\n <UploadLink onClick={(e) => {\n e.stopPropagation()\n onDownloadTemplate()\n }}>\n {downloadTemplateText}\n </UploadLink>\n </>\n )}\n </UploadSecondaryText>\n )}\n </UploadTextWrapper>\n\n <HiddenInput\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleInputChange}\n disabled={disabled}\n aria-hidden=\"true\"\n />\n </UploadDropzone>\n\n {fileList.length > 0 && (\n <FileList>\n {fileList.map((file) => (\n <FileItem key={file.uid} status={file.status}>\n <FileInfoRow status={file.status}>\n <FileIcon>\n <FileIconSvg />\n </FileIcon>\n <FileName status={file.status}>{file.name}</FileName>\n {(file.status === 'success' || file.status === 'error') && (\n <>\n <StatusIcon status={file.status}>\n {renderStatusIcon(file.status)}\n </StatusIcon>\n <DeleteButton\n onClick={() => handleDelete(file.uid)}\n aria-label={`删除文件 ${file.name}`}\n >\n <DeleteIcon />\n </DeleteButton>\n </>\n )}\n </FileInfoRow>\n\n {file.status === 'uploading' && (\n <ProgressWrapper>\n <ProgressTrack>\n <ProgressBar percent={file.percent || 0} />\n </ProgressTrack>\n <ProgressText>{file.percent || 0}%</ProgressText>\n </ProgressWrapper>\n )}\n </FileItem>\n ))}\n </FileList>\n )}\n </UploadRoot>\n )\n }\n)\n\nUpload.displayName = 'Upload'\n\n","/**\n * Card 卡片样式\n * \n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-card-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled';\n\nexport const CardContainer = styled.div<{\n variant: CardVariant;\n hoverable?: boolean;\n}>`\n background: var(--ksd-card-bg);\n border: ${({ variant }) => \n variant === 'outlined' ? '1px solid var(--ksd-card-border)' : 'none'};\n box-shadow: ${({ variant }) => \n variant === 'elevated' ? 'var(--ksd-card-shadow-elevated)' : 'none'};\n border-radius: var(--ksd-card-radius);\n transition: var(--ksd-card-transition);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n ${({ hoverable, variant }) =>\n hoverable &&\n `\n cursor: pointer;\n &:hover {\n box-shadow: ${variant === 'elevated' ? 'var(--ksd-card-shadow-elevated-hover)' : 'none'};\n border-color: ${variant === 'outlined' ? 'var(--ksd-card-border-hover)' : 'transparent'};\n }\n `}\n`;\n\nexport const CardHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--ksd-card-header-padding);\n border-bottom: var(--ksd-card-header-border-bottom);\n`;\n\nexport const CardTitle = styled.div`\n color: var(--ksd-card-title-color);\n font-size: var(--ksd-card-title-font-size);\n font-weight: var(--ksd-card-title-font-weight);\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const CardExtra = styled.div`\n color: var(--ksd-card-extra-color);\n font-size: var(--ksd-card-extra-font-size);\n margin-left: 16px;\n`;\n\nexport const CardBody = styled.div<{ padding?: string }>`\n padding: ${({ padding }) => padding || 'var(--ksd-card-padding-md)'};\n flex: 1;\n color: var(--ksd-card-title-color);\n font-size: 14px;\n line-height: 1.6;\n`;\n\nexport const CardCover = styled.div`\n width: 100%;\n position: relative;\n \n > * {\n display: block;\n width: 100%;\n object-fit: cover;\n }\n \n img {\n &:first-of-type {\n border-radius: var(--ksd-card-cover-radius);\n }\n }\n`;\n\nexport const CardFooter = styled.div`\n padding: var(--ksd-card-footer-padding);\n background: var(--ksd-card-footer-bg);\n border-top: var(--ksd-card-footer-border-top);\n`;\n","/**\n * Card 卡片组件\n * \n * 基于 CSS 变量实现,无需 ThemeProvider\n * 支持通过覆盖 CSS 变量自定义样式\n */\n\nimport React, { ReactNode } from 'react';\nimport {\n CardContainer,\n CardHeader,\n CardTitle,\n CardExtra,\n CardBody,\n CardCover,\n CardFooter,\n type CardVariant,\n} from './Card.style';\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /**\n * Card title\n */\n title?: ReactNode;\n /**\n * Content to render in the top-right corner of the card\n */\n extra?: ReactNode;\n /**\n * Card cover image\n */\n cover?: ReactNode;\n /**\n * Card footer content\n */\n footer?: ReactNode;\n /**\n * Lift up when hovering card\n */\n hoverable?: boolean;\n /**\n * Card variant\n * @default 'elevated'\n */\n variant?: CardVariant;\n /**\n * Custom padding for body\n */\n bodyPadding?: string;\n children?: ReactNode;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n title,\n extra,\n cover,\n footer,\n hoverable = false,\n variant = 'elevated',\n bodyPadding,\n children,\n className,\n ...rest\n },\n ref\n ) => {\n return (\n <CardContainer\n ref={ref}\n variant={variant}\n hoverable={hoverable}\n className={className}\n {...rest}\n >\n {cover && <CardCover>{cover}</CardCover>}\n {(title || extra) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {extra && <CardExtra>{extra}</CardExtra>}\n </CardHeader>\n )}\n <CardBody padding={bodyPadding}>\n {children}\n </CardBody>\n {footer && <CardFooter>{footer}</CardFooter>}\n </CardContainer>\n );\n }\n);\n\nCard.displayName = 'Card';\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CardTokens } from '../types/component-tokens.types';\n\nexport const getCardTokens: TokenGenerator<CardTokens> = ({ global, semantic }) => ({\n container: {\n background: {\n default: semantic.colors.background.surface,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n },\n shadow: {\n // Softer, more diffuse shadow for \"soft tech\" feel\n elevated: '0px 4px 24px 0px rgba(0, 0, 0, 0.04)',\n elevatedHover: '0px 8px 32px 0px rgba(0, 0, 0, 0.08)',\n outlined: 'none',\n filled: 'none',\n },\n // Increased radius for softer look\n radius: global.radii.r6, // 16px\n transition: 'all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1)',\n },\n padding: {\n sm: global.spacing.md,\n md: global.spacing.xl, // Increased to 24px for more breathing room\n lg: global.spacing.xxl,\n },\n header: {\n padding: `${global.spacing.lg} ${global.spacing.xl} ${global.spacing.md}`, // 16px 24px 12px\n borderBottom: 'none', // Removed hard border\n title: {\n color: semantic.colors.text.primary,\n fontSize: global.typography.fontSize.md, // Reduced to 16px\n fontWeight: global.typography.fontWeight.semibold,\n },\n extra: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.sm,\n },\n },\n cover: {\n radius: `${global.radii.r6} ${global.radii.r6} 0 0`,\n },\n footer: {\n padding: `${global.spacing.md} ${global.spacing.xl}`, // Match horizontal padding of header/body\n background: 'transparent',\n borderTop: `1px solid ${semantic.colors.border.primary}`,\n },\n});\n","/**\n * Tooltip 组件样式\n *\n * 基于 CSS 变量的三层 Token 体系:\n * - Tier 1 (Global): 全局基础值 --ksd-colors-*, --ksd-spacing-*, etc.\n * - Tier 2 (Semantic): 语义化映射 --ksd-brand-*, --ksd-text-*, etc.\n * - Tier 3 (Component): 组件专用 Token --ksd-tooltip-*\n * \n * 无需 ThemeProvider,直接使用 CSS 变量\n */\n\nimport styled from '@emotion/styled'\nimport { keyframes } from '@emotion/react'\nimport type { Placement } from '@react-types/overlays'\n\n/**\n * Tooltip 位置类型\n */\nexport type TooltipPlacement = Placement\n\n/**\n * 淡入动画\n */\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`\n\n/**\n * Tooltip 容器\n */\nexport const TooltipContainer = styled.div<{\n placement?: Placement\n}>`\n z-index: var(--ksd-tooltip-z-index);\n outline: none;\n padding: var(--ksd-tooltip-padding);\n max-width: var(--ksd-tooltip-max-width);\n \n background: var(--ksd-tooltip-bg);\n color: var(--ksd-tooltip-color);\n border-radius: var(--ksd-tooltip-border-radius);\n box-shadow: var(--ksd-tooltip-shadow);\n \n font-family: var(--ksd-typography-font-family);\n font-size: var(--ksd-tooltip-font-size);\n line-height: var(--ksd-tooltip-line-height);\n \n animation: ${fadeIn} var(--ksd-tooltip-animation-duration)\n var(--ksd-tooltip-animation-easing) forwards;\n`\n\n/**\n * 根据位置获取箭头样式\n */\nconst getArrowPosition = (placement?: Placement) => {\n if (!placement) return ''\n \n const positions: Record<string, string> = {\n top: `\n bottom: -4px;\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n `,\n 'top start': `\n bottom: -4px;\n left: 12px;\n transform: rotate(45deg);\n `,\n 'top end': `\n bottom: -4px;\n right: 12px;\n transform: rotate(45deg);\n `,\n bottom: `\n top: -4px;\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n `,\n 'bottom start': `\n top: -4px;\n left: 12px;\n transform: rotate(45deg);\n `,\n 'bottom end': `\n top: -4px;\n right: 12px;\n transform: rotate(45deg);\n `,\n left: `\n right: -4px;\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n `,\n 'left top': `\n right: -4px;\n top: 8px;\n transform: rotate(45deg);\n `,\n 'left bottom': `\n right: -4px;\n bottom: 8px;\n transform: rotate(45deg);\n `,\n right: `\n left: -4px;\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n `,\n 'right top': `\n left: -4px;\n top: 8px;\n transform: rotate(45deg);\n `,\n 'right bottom': `\n left: -4px;\n bottom: 8px;\n transform: rotate(45deg);\n `,\n }\n \n return positions[placement] || positions.top\n}\n\n/**\n * Tooltip 箭头\n */\nexport const TooltipArrow = styled.div<{\n placement?: Placement\n}>`\n position: absolute;\n width: var(--ksd-tooltip-arrow-size);\n height: var(--ksd-tooltip-arrow-size);\n pointer-events: none;\n \n &::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n background: var(--ksd-tooltip-bg);\n }\n \n ${({ placement }) => getArrowPosition(placement)}\n`\n","/**\n * Tooltip 文字提示组件\n *\n * 基于 react-aria 实现无障碍访问的提示组件\n * 支持 hover/focus 触发,自定义位置与延迟\n *\n * @example\n * ```tsx\n * <Tooltip content=\"提示内容\">\n * <Button>悬停查看</Button>\n * </Tooltip>\n * ```\n */\n\nimport {\n forwardRef,\n useRef,\n useState,\n useCallback,\n useEffect,\n isValidElement,\n type ReactNode,\n type ReactElement,\n type CSSProperties,\n} from 'react'\n// @ts-ignore - react-dom type issue (workspace tsconfig)\nimport { createPortal } from 'react-dom'\nimport { mergeProps } from '@react-aria/utils'\nimport { useFocusWithin, useHover } from 'react-aria'\nimport {\n TooltipContainer,\n TooltipArrow,\n type TooltipPlacement,\n} from './Tooltip.style'\n\nexport type { TooltipPlacement }\n\nexport type TooltipProps = {\n /**\n * 触发 Tooltip 的子元素\n * 必须是可接受 ref 的单一 React 元素\n */\n children: ReactElement\n\n /**\n * Tooltip 显示的内容\n */\n content: ReactNode\n\n /**\n * 弹出位置\n * @default 'top'\n */\n placement?: TooltipPlacement\n\n /**\n * 距离触发元素的偏移量 (px)\n * @default 8\n */\n offset?: number\n\n /**\n * 打开延迟(毫秒)\n * @default 0\n */\n delay?: number\n\n /**\n * 关闭延迟(毫秒)\n * @default 0\n */\n closeDelay?: number\n\n /**\n * 是否禁用 Tooltip(统一 API,优先级高于 isDisabled)\n * @default false\n */\n disabled?: boolean\n\n /**\n * 是否显示箭头\n * @default true\n */\n showArrow?: boolean\n\n /**\n * 受控:是否打开(替代 isOpen,符合 Design System 规范)\n */\n open?: boolean\n\n /**\n * 非受控:默认是否打开\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * 打开状态变更回调\n */\n onOpenChange?: (open: boolean) => void\n\n /**\n * 自定义类名\n */\n className?: string\n\n /**\n * 自定义样式\n */\n style?: CSSProperties\n}\n\n/**\n * Tooltip 文字提示组件\n *\n * 基于 React Aria 实现的无障碍提示组件\n */\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n children,\n content,\n placement = 'top',\n offset = 8,\n delay = 0,\n closeDelay = 0,\n disabled = false,\n showArrow = true,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n className,\n style,\n },\n forwardedRef,\n ) => {\n // SSR-safe\n if (typeof document === 'undefined') return children\n\n // 内部状态管理\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Refs\n const triggerRef = useRef<HTMLElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // 位置状态\n const [position, setPosition] = useState<{ top: number; left: number }>({ top: 0, left: 0 })\n\n // 清除定时器\n const clearTimers = useCallback(() => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current)\n openTimerRef.current = null\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = null\n }\n }, [])\n\n // 更新打开状态\n const updateOpen = useCallback(\n (nextOpen: boolean) => {\n if (disabled) return\n if (!isControlled) {\n setInternalOpen(nextOpen)\n }\n onOpenChange?.(nextOpen)\n },\n [disabled, isControlled, onOpenChange],\n )\n\n // 打开 Tooltip\n const handleOpen = useCallback(() => {\n if (disabled) return\n clearTimers()\n\n if (delay > 0) {\n openTimerRef.current = setTimeout(() => {\n updateOpen(true)\n }, delay)\n } else {\n updateOpen(true)\n }\n }, [disabled, delay, clearTimers, updateOpen])\n\n // 关闭 Tooltip\n const handleClose = useCallback(() => {\n clearTimers()\n\n if (closeDelay > 0) {\n closeTimerRef.current = setTimeout(() => {\n updateOpen(false)\n }, closeDelay)\n } else {\n updateOpen(false)\n }\n }, [closeDelay, clearTimers, updateOpen])\n\n // Hover 交互\n const { hoverProps } = useHover({\n isDisabled: disabled,\n onHoverStart: handleOpen,\n onHoverEnd: handleClose,\n })\n\n // Focus 交互\n const { focusWithinProps } = useFocusWithin({\n isDisabled: disabled,\n onFocusWithin: () => handleOpen(),\n onBlurWithin: () => handleClose(),\n })\n\n // 计算 Tooltip 位置\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const tooltipRect = tooltipRef.current.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n switch (placement) {\n case 'top':\n top = triggerRect.top + scrollY - tooltipRect.height - offset\n left = triggerRect.left + scrollX + (triggerRect.width - tooltipRect.width) / 2\n break\n case 'bottom':\n top = triggerRect.bottom + scrollY + offset\n left = triggerRect.left + scrollX + (triggerRect.width - tooltipRect.width) / 2\n break\n case 'left':\n top = triggerRect.top + scrollY + (triggerRect.height - tooltipRect.height) / 2\n left = triggerRect.left + scrollX - tooltipRect.width - offset\n break\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - tooltipRect.height) / 2\n left = triggerRect.right + scrollX + offset\n break\n }\n\n setPosition({ top, left })\n }, [placement, offset])\n\n // 监听位置更新\n useEffect(() => {\n if (!isOpen) return\n\n // 初始计算位置\n updatePosition()\n\n // 监听滚动和窗口大小变化\n const handleUpdate = () => updatePosition()\n window.addEventListener('scroll', handleUpdate, true)\n window.addEventListener('resize', handleUpdate)\n\n return () => {\n window.removeEventListener('scroll', handleUpdate, true)\n window.removeEventListener('resize', handleUpdate)\n }\n }, [isOpen, updatePosition])\n\n // 清理定时器\n useEffect(() => {\n return () => clearTimers()\n }, [clearTimers])\n\n // 验证 children 是有效的 React 元素\n if (!isValidElement(children)) {\n console.warn('Tooltip: children must be a valid React element')\n return children\n }\n\n // 使用 wrapper 包裹 children,确保 hover 事件不被子组件内部实现覆盖\n const wrapperProps = mergeProps(hoverProps, focusWithinProps, {\n ref: triggerRef,\n 'aria-describedby': isOpen ? 'kai-tooltip' : undefined,\n })\n\n // 使用 span 作为 wrapper,设置 display: inline-block 保持布局\n const trigger = (\n <span \n {...wrapperProps}\n style={{ display: 'inline-block' }}\n >\n {children}\n </span>\n )\n\n // Tooltip 内容\n const tooltipContent = isOpen && !disabled && content ? (\n createPortal(\n <TooltipContainer\n ref={(node) => {\n tooltipRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n forwardedRef.current = node\n }\n }}\n id=\"kai-tooltip\"\n role=\"tooltip\"\n placement={placement}\n className={className}\n style={{\n ...style,\n position: 'absolute',\n top: position.top,\n left: position.left,\n }}\n data-placement={placement}\n >\n {showArrow && <TooltipArrow placement={placement} />}\n {content}\n </TooltipContainer>,\n document.body,\n )\n ) : null\n\n return (\n <>\n {trigger}\n {tooltipContent}\n </>\n )\n },\n)\n\nTooltip.displayName = 'Tooltip'\n","import { TokenGenerator } from '../types/theme-utils';\nimport { ButtonTokens, IconButtonTokens } from '../types/component-tokens.types';\n\nexport const getButtonTokens: TokenGenerator<ButtonTokens> = ({ global, semantic }) => ({\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n text: {\n default: semantic.colors.text.onBrand,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n secondary: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.brand.primary,\n active: semantic.colors.brand.primaryActive,\n },\n shadow: {\n default: 'none',\n },\n },\n text: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: '#F0F0F0', // 文本按钮点击态背景 - note: this was hardcoded in original\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: 'transparent',\n hover: 'transparent',\n active: 'transparent',\n },\n },\n danger: {\n background: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n text: {\n default: semantic.colors.state.dangerOn,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n gradient: {\n background: {\n default: global.gradients.blueViolet,\n gradientFrom: '#0194FF',\n gradientTo: '#D581FF',\n },\n text: {\n default: global.colors.common.white,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n disabled: {\n background: {\n default: semantic.colors.border.primary,\n },\n text: {\n default: semantic.colors.text.disabled,\n },\n opacity: 0.6,\n },\n size: {\n sm: {\n height: '24px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n md: {\n height: '32px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n lg: {\n height: '40px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n },\n borderRadius: global.radii.r3, // 6px - Figma 设计稿圆角\n fontWeight: global.typography.fontWeight.regular, // 400\n gap: global.spacing.sm, // 8px 图标和文字间距\n transition: '0.2s ease',\n});\n\nexport const getIconButtonTokens: TokenGenerator<IconButtonTokens> = ({ global, semantic }) => ({\n appearance: {\n solid: {\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.onBrand,\n },\n },\n neutral: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceStrong,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.state.dangerOn,\n },\n },\n },\n outline: {\n primary: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: 'rgba(44, 111, 231, 0.16)',\n },\n border: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primary,\n active: semantic.colors.brand.primary,\n },\n icon: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n },\n neutral: {\n background: {\n default: 'transparent',\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceStrong,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n active: semantic.colors.border.strong,\n },\n icon: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: 'transparent',\n hover: semantic.colors.state.dangerSubtle,\n active: 'rgba(237, 28, 28, 0.18)',\n },\n border: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.danger,\n active: semantic.colors.state.danger,\n },\n icon: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n },\n },\n ghost: {\n primary: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: 'rgba(44, 111, 231, 0.16)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n },\n neutral: {\n background: {\n default: 'transparent',\n hover: 'rgba(10, 24, 51, 0.05)',\n active: 'rgba(10, 24, 51, 0.1)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: 'transparent',\n hover: semantic.colors.state.dangerSubtle,\n active: 'rgba(237, 28, 28, 0.18)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n },\n },\n },\n disabled: {\n background: semantic.colors.background.surfaceSubtle,\n border: semantic.colors.border.primary,\n icon: semantic.colors.text.disabled,\n opacity: 0.6,\n },\n size: {\n sm: {\n edge: '24px',\n iconSize: '16px',\n },\n md: {\n edge: '32px',\n iconSize: '18px',\n },\n lg: {\n edge: '40px',\n iconSize: '20px',\n },\n },\n borderRadius: global.radii.r3,\n transition: '0.2s ease',\n focusRing: {\n color: 'rgba(44, 111, 231, 0.35)',\n offset: '2px',\n width: '2px',\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { FloatButtonTokens } from '../types/component-tokens.types';\n\nexport const getFloatButtonTokens: TokenGenerator<FloatButtonTokens> = ({ global, semantic }) => ({\n default: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.primary,\n },\n border: {\n default: semantic.colors.border.primary,\n },\n shadow: {\n default: global.shadows.l1,\n hover: global.shadows.l3,\n },\n },\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n text: {\n default: semantic.colors.text.onBrand,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: global.shadows.l1,\n hover: global.shadows.l3,\n },\n },\n disabled: {\n background: {\n default: semantic.colors.border.primary,\n },\n text: {\n default: semantic.colors.text.disabled,\n },\n opacity: 0.6,\n },\n size: {\n sm: {\n size: '32px',\n },\n md: {\n size: '40px',\n },\n lg: {\n size: '48px',\n },\n },\n icon: {\n size: global.typography.fontSize.lg,\n },\n description: {\n fontSize: global.typography.fontSize.xs,\n lineHeight: `${global.typography.lineHeight.tight}`,\n },\n});\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CheckboxTokens } from '../types/component-tokens.types';\n\nexport const getCheckboxTokens: TokenGenerator<CheckboxTokens> = ({ global, semantic }) => ({\n control: {\n size: \"16px\", // Checkbox 尺寸\n borderRadius: global.radii.r2, // 4px - 最小组件圆角\n borderWidth: \"1px\",\n background: {\n default: global.colors.common.white, // 未选中背景:白色\n checked: semantic.colors.brand.primary, // 选中背景:#2C6FE7\n disabled: global.colors.neutral[100], // 禁用未选中:#F0F2F4\n disabledChecked: global.colors.blue[200], // 禁用选中:#AAD1FC\n },\n borderColor: {\n default: global.colors.neutral[400], // 未选中边框:#C2C5CC\n hover: semantic.colors.brand.primary, // hover边框:#2C6FE7\n checked: semantic.colors.brand.primary, // 选中边框:#2C6FE7\n disabled: global.colors.neutral[400], // 禁用边框:#C2C5CC\n disabledChecked: global.colors.blue[200], // 禁用选中边框:#AAD1FC\n },\n icon: {\n color: global.colors.common.white, // 勾选图标颜色:白色\n size: \"10px\", // 图标大小\n },\n },\n focusRing: \"0 0 0 4px rgba(44, 111, 231, 0.18)\",\n gap: global.spacing.sm, // 8px - checkbox和文字间距\n text: {\n label: {\n fontSize: global.typography.fontSize.xs, // 12px\n lineHeight: \"18px\", // 行高18px\n color: global.colors.word[900], // #0A1833\n disabled: global.colors.word[300], // 禁用:#B6BEC2 (实际是#B5BAC2)\n fontWeight: global.typography.fontWeight.regular, // 400\n },\n },\n transition: \"0.16s ease\",\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { RadioTokens } from '../types/component-tokens.types';\n\nexport const getRadioTokens: TokenGenerator<RadioTokens> = ({ global }) => ({\n control: {\n size: \"16px\",\n borderRadius: \"999px\",\n borderWidth: \"1.5px\",\n background: global.colors.common.white,\n borderColor: {\n default: global.colors.neutral[300],\n hover: global.colors.blue[500],\n checked: global.colors.blue[500],\n disabled: global.colors.neutral[200],\n },\n indicator: {\n size: \"8px\",\n color: global.colors.blue[500],\n disabled: global.colors.word[300],\n },\n },\n focusRing: \"0 0 0 4px rgba(44, 111, 231, 0.18)\",\n gap: \"0.5rem\",\n text: {\n label: {\n fontSize: global.typography.fontSize.xs,\n color: global.colors.word[900],\n disabled: global.colors.word[300],\n fontWeight: global.typography.fontWeight.regular,\n },\n description: {\n color: global.colors.word[600],\n disabled: global.colors.word[300],\n fontSize: global.typography.fontSize.xs,\n },\n },\n disabled: {\n opacity: 0.55,\n },\n transition: \"0.16s ease\",\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SwitchTokens } from '../types/component-tokens.types';\n\nexport const getSwitchTokens: TokenGenerator<SwitchTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n width: '36px', // 小尺寸开关宽度\n height: '20px', // 小尺寸开关高度\n thumbSize: '16px', // 小尺寸滑块\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: '6px', // 左右内边距\n },\n md: {\n width: '44px', // 中等尺寸开关宽度(根据 Figma: 文字+滑块+间距)\n height: '24px', // 中等尺寸开关高度(Figma 设计)\n thumbSize: '18px', // 滑块尺寸(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px(Figma 设计)\n paddingInline: '8px', // 左右内边距(左8px,右3px考虑滑块位置)\n },\n },\n background: {\n unchecked: global.colors.neutral[300], // 未选中状态:灰色 #D4D6D9\n checked: semantic.colors.brand.primary, // 选中状态:品牌蓝 #2C6FE7\n disabled: global.colors.neutral[200], // 禁用状态:浅灰\n },\n thumb: {\n background: global.colors.common.white, // 滑块:白色\n shadow: '0 1px 3px rgba(0, 0, 0, 0.12)', // 滑块阴影\n },\n text: {\n color: global.colors.common.white, // 文字颜色:白色\n fontSize: global.typography.fontSize.xs, // 12px\n fontWeight: global.typography.fontWeight.regular, // 400\n },\n borderRadius: global.radii.r5, // 12px - 中型容器圆角(Figma 设计)\n gap: global.spacing.xs, // 4px - 文字和滑块的间距(Figma 设计)\n transition: '0.2s cubic-bezier(0.4, 0, 0.2, 1)', // 平滑过渡动画\n disabled: {\n opacity: 0.5, // 禁用时的透明度\n },\n focusRing: {\n color: 'rgba(44, 111, 231, 0.3)', // Focus 环颜色\n offset: '2px', // Focus 环偏移\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { InputTokens } from '../types/component-tokens.types';\n\nexport const getInputTokens: TokenGenerator<InputTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n height: '24px', // 小号输入框高度\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '14px', // 小号图标尺寸\n },\n md: {\n height: '32px', // 标准输入框高度(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '16px', // 标准图标尺寸\n },\n lg: {\n height: '40px', // 大号输入框高度\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '18px', // 大号图标尺寸\n },\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n focus: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n disabled: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n error: semantic.colors.state.danger,\n counter: semantic.colors.text.caption,\n },\n borderRadius: global.radii.r3, // 6px - 基础组件圆角\n gap: global.spacing.sm, // 8px - 图标与文字间距(Figma 设计)\n transition: '0.2s ease', // 过渡动画\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SelectTokens } from '../types/component-tokens.types';\n\nexport const getSelectTokens: TokenGenerator<SelectTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n height: '24px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '14px',\n },\n md: {\n height: '32px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '16px',\n },\n lg: {\n height: '40px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '18px',\n },\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n focus: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n disabled: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surface,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n error: semantic.colors.state.danger,\n },\n borderRadius: global.radii.r3,\n gap: global.spacing.sm,\n transition: '0.2s ease',\n popover: {\n background: semantic.colors.background.surface,\n border: `1px solid ${semantic.colors.border.primary}`,\n borderRadius: global.radii.r3,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n padding: '4px',\n },\n option: {\n height: '32px',\n paddingInline: '8px',\n fontSize: global.typography.fontSize.xs,\n borderRadius: global.radii.r2,\n gap: '8px',\n background: {\n default: 'transparent',\n hover: semantic.colors.background.surfaceSubtle,\n selected: semantic.colors.brand.primarySubtle,\n focused: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n selected: semantic.colors.brand.primary,\n disabled: semantic.colors.text.disabled,\n },\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { NumberFieldTokens } from '../types/component-tokens.types';\n\nexport const getNumberFieldTokens: TokenGenerator<NumberFieldTokens> = ({ global, semantic }) => ({\n controls: {\n default: 'buttons',\n },\n size: {\n md: {\n height: '24px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.sm,\n },\n lg: {\n height: '32px',\n fontSize: global.typography.fontSize.sm,\n paddingInline: global.spacing.sm,\n },\n },\n input: {\n width: '40px',\n height: '18px',\n paddingInline: global.spacing.sm,\n fontSize: global.typography.fontSize.xs,\n fontWeight: global.typography.fontWeight.regular,\n lineHeight: '18px',\n fontFamily: global.typography.fontFamily,\n },\n control: {\n side: {\n buttonSizeSm: '20px',\n buttonSizeLg: '28px',\n inset: '1px',\n gap: '8px',\n iconSize: '12px',\n widthsm: '100px',\n widthLg: '116px',\n },\n arrows: {\n buttonSizeSm: '10px',\n buttonSizeLg: '14px',\n iconSize: '12px',\n gap: '0px',\n widthsm: '72px',\n widthLg: '80px',\n },\n },\n borderRadius: global.radii.r3,\n border: {\n default: semantic.colors.border.strong,\n hover: semantic.colors.brand.primaryHover,\n disabled: semantic.colors.border.strong,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n },\n transition: '0.2s ease',\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CollapseTokens } from '../types/component-tokens.types';\n\nexport const getCollapseTokens: TokenGenerator<CollapseTokens> = ({ global, semantic }) => ({\n border: {\n default: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.secondary, // Note: Light used 'rgba(10, 24, 51, 0.6)' (f5), Dark used text.secondary. Assuming text.secondary is correct abstraction.\n title: semantic.colors.text.primary, // Light: 'rgba(10, 24, 51, 0.7)' (f4), Dark: text.primary.\n },\n divider: semantic.colors.border.primary,\n arrow: {\n default: semantic.colors.text.secondary,\n },\n padding: {\n header: '12px 24px',\n content: '0 24px 12px 24px',\n },\n borderRadius: global.radii.r3,\n gap: global.spacing.sm,\n transition: '0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n arrowSize: '16px',\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { TagTokens } from '../types/component-tokens.types';\n\nexport const getTagTokens: TokenGenerator<TagTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n\n return {\n colors: {\n // 默认颜色(灰色)\n default: {\n background: {\n default: isDark ? 'rgba(148, 163, 184, 0.15)' : global.colors.neutral[100],\n hover: isDark ? 'rgba(148, 163, 184, 0.2)' : global.colors.neutral[200],\n active: isDark ? 'rgba(148, 163, 184, 0.25)' : global.colors.neutral[300],\n checked: semantic.colors.brand.primary,\n checkedHover: semantic.colors.brand.primaryHover,\n checkedActive: semantic.colors.brand.primaryActive,\n },\n text: {\n default: isDark ? global.colors.word[100] : 'rgba(10, 24, 51, 0.7)',\n checked: global.colors.common.white,\n },\n border: {\n default: isDark ? 'rgba(148, 163, 184, 0.28)' : global.colors.neutral[400],\n hover: isDark ? 'rgba(148, 163, 184, 0.38)' : global.colors.neutral[500],\n active: isDark ? 'rgba(148, 163, 184, 0.48)' : global.colors.word[600],\n checked: semantic.colors.brand.primary,\n checkedHover: semantic.colors.brand.primaryHover,\n checkedActive: semantic.colors.brand.primaryActive,\n },\n },\n // 红色 Red\n red: {\n background: {\n default: isDark ? 'rgba(170, 14, 41, 0.12)' : 'rgba(170, 14, 41, 0.08)',\n hover: isDark ? 'rgba(170, 14, 41, 0.16)' : 'rgba(170, 14, 41, 0.12)',\n active: isDark ? 'rgba(170, 14, 41, 0.2)' : 'rgba(170, 14, 41, 0.16)',\n },\n text: {\n default: isDark ? global.colors.red[300] : global.colors.red[700],\n },\n border: {\n default: isDark ? 'rgba(170, 14, 41, 0.3)' : 'rgba(170, 14, 41, 0.25)',\n },\n },\n // 橙色 Orange\n orange: {\n background: {\n default: isDark ? 'rgba(237, 154, 0, 0.12)' : 'rgba(237, 154, 0, 0.08)',\n hover: isDark ? 'rgba(237, 154, 0, 0.16)' : 'rgba(237, 154, 0, 0.12)',\n active: isDark ? 'rgba(237, 154, 0, 0.2)' : 'rgba(237, 154, 0, 0.16)',\n },\n text: {\n default: isDark ? global.colors.orange[300] : global.colors.orange[500],\n },\n border: {\n default: isDark ? 'rgba(237, 154, 0, 0.3)' : 'rgba(237, 154, 0, 0.25)',\n },\n },\n // 黄色 Yellow\n yellow: {\n background: {\n default: isDark ? 'rgba(250, 208, 0, 0.12)' : 'rgba(250, 208, 0, 0.08)',\n hover: isDark ? 'rgba(250, 208, 0, 0.16)' : 'rgba(250, 208, 0, 0.12)',\n active: isDark ? 'rgba(250, 208, 0, 0.2)' : 'rgba(250, 208, 0, 0.16)',\n },\n text: {\n default: isDark ? global.colors.yellow[300] : global.colors.yellow[500],\n },\n border: {\n default: isDark ? 'rgba(250, 208, 0, 0.3)' : 'rgba(250, 208, 0, 0.25)',\n },\n },\n // 绿色 Green\n green: {\n background: {\n default: isDark ? 'rgba(51, 189, 72, 0.12)' : 'rgba(51, 189, 72, 0.08)',\n hover: isDark ? 'rgba(51, 189, 72, 0.16)' : 'rgba(51, 189, 72, 0.12)',\n active: isDark ? 'rgba(51, 189, 72, 0.2)' : 'rgba(51, 189, 72, 0.16)',\n },\n text: {\n default: isDark ? global.colors.green[300] : global.colors.green[500],\n },\n border: {\n default: isDark ? 'rgba(51, 189, 72, 0.3)' : 'rgba(51, 189, 72, 0.25)',\n },\n },\n // 薰衣草色 Lavender\n lavender: {\n background: {\n default: isDark ? 'rgba(99, 79, 214, 0.12)' : 'rgba(99, 79, 214, 0.08)',\n hover: isDark ? 'rgba(99, 79, 214, 0.16)' : 'rgba(99, 79, 214, 0.12)',\n active: isDark ? 'rgba(99, 79, 214, 0.2)' : 'rgba(99, 79, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.lavender[300] : global.colors.lavender[500],\n },\n border: {\n default: isDark ? 'rgba(99, 79, 214, 0.3)' : 'rgba(99, 79, 214, 0.25)',\n },\n },\n // 丁香色 Lilac\n lilac: {\n background: {\n default: isDark ? 'rgba(159, 58, 214, 0.12)' : 'rgba(159, 58, 214, 0.08)',\n hover: isDark ? 'rgba(159, 58, 214, 0.16)' : 'rgba(159, 58, 214, 0.12)',\n active: isDark ? 'rgba(159, 58, 214, 0.2)' : 'rgba(159, 58, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.lilac[300] : global.colors.lilac[500],\n },\n border: {\n default: isDark ? 'rgba(159, 58, 214, 0.3)' : 'rgba(159, 58, 214, 0.25)',\n },\n },\n // 胭脂红 Carmine\n carmine: {\n background: {\n default: isDark ? 'rgba(214, 58, 191, 0.12)' : 'rgba(214, 58, 191, 0.08)',\n hover: isDark ? 'rgba(214, 58, 191, 0.16)' : 'rgba(214, 58, 191, 0.12)',\n active: isDark ? 'rgba(214, 58, 191, 0.2)' : 'rgba(214, 58, 191, 0.16)',\n },\n text: {\n default: isDark ? global.colors.carmine[300] : global.colors.carmine[500],\n },\n border: {\n default: isDark ? 'rgba(214, 58, 191, 0.3)' : 'rgba(214, 58, 191, 0.25)',\n },\n },\n // 玫瑰色 Rose\n rose: {\n background: {\n default: isDark ? 'rgba(229, 30, 100, 0.12)' : 'rgba(229, 30, 100, 0.08)',\n hover: isDark ? 'rgba(229, 30, 100, 0.16)' : 'rgba(229, 30, 100, 0.12)',\n active: isDark ? 'rgba(229, 30, 100, 0.2)' : 'rgba(229, 30, 100, 0.16)',\n },\n text: {\n default: isDark ? global.colors.rose[300] : global.colors.rose[500],\n },\n border: {\n default: isDark ? 'rgba(229, 30, 100, 0.3)' : 'rgba(229, 30, 100, 0.25)',\n },\n },\n // 薄荷色 Mint\n mint: {\n background: {\n default: isDark ? 'rgba(71, 192, 214, 0.12)' : 'rgba(71, 192, 214, 0.08)',\n hover: isDark ? 'rgba(71, 192, 214, 0.16)' : 'rgba(71, 192, 214, 0.12)',\n active: isDark ? 'rgba(71, 192, 214, 0.2)' : 'rgba(71, 192, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.mint[300] : global.colors.mint[500],\n },\n border: {\n default: isDark ? 'rgba(71, 192, 214, 0.3)' : 'rgba(71, 192, 214, 0.25)',\n },\n },\n // 橄榄色 Olive\n olive: {\n background: {\n default: isDark ? 'rgba(187, 214, 36, 0.12)' : 'rgba(187, 214, 36, 0.08)',\n hover: isDark ? 'rgba(187, 214, 36, 0.16)' : 'rgba(187, 214, 36, 0.12)',\n active: isDark ? 'rgba(187, 214, 36, 0.2)' : 'rgba(187, 214, 36, 0.16)',\n },\n text: {\n default: isDark ? global.colors.olive[300] : global.colors.olive[500],\n },\n border: {\n default: isDark ? 'rgba(187, 214, 36, 0.3)' : 'rgba(187, 214, 36, 0.25)',\n },\n },\n // 蓝色 Blue\n blue: {\n background: {\n default: isDark ? 'rgba(44, 111, 231, 0.12)' : 'rgba(44, 111, 231, 0.08)',\n hover: isDark ? 'rgba(44, 111, 231, 0.16)' : 'rgba(44, 111, 231, 0.12)',\n active: isDark ? 'rgba(44, 111, 231, 0.2)' : 'rgba(44, 111, 231, 0.16)',\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: isDark ? 'rgba(44, 111, 231, 0.3)' : 'rgba(44, 111, 231, 0.25)',\n },\n },\n },\n size: {\n sm: {\n height: '18px', // 小号标签高度(Figma 设计)\n fontSize: '10px', // H11-最小标签字号(Figma 设计)\n lineHeight: '16px', // 行高\n paddingInline: global.spacing.sm, // 8px 左右内边距\n gap: global.spacing.xs, // 4px 图标和文字间距\n iconSize: '12px', // 图标尺寸\n closeIconSize: '8px', // 关闭图标尺寸\n },\n md: {\n height: '24px', // 中号标签高度(Figma 设计)\n fontSize: '10px', // H11-最小标签字号(Figma 设计)\n lineHeight: '16px', // 行高\n paddingInline: global.spacing.sm, // 8px 左右内边距\n gap: global.spacing.xs, // 4px 图标和文字间距\n iconSize: '14px', // 图标尺寸\n closeIconSize: '10px', // 关闭图标尺寸\n },\n lg: {\n height: '32px',\n fontSize: global.typography.fontSize.xs, // 12px\n lineHeight: '20px',\n paddingInline: global.spacing.md, // 12px\n gap: global.spacing.sm, // 8px\n iconSize: '16px',\n closeIconSize: '12px',\n },\n },\n fontWeight: global.typography.fontWeight.regular, // 400\n borderRadius: global.radii.r2, // 4px - 最小组件圆角\n transition: '0.2s ease',\n disabled: {\n opacity: 0.5,\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SkeletonTokens } from '../types/component-tokens.types';\n\nexport const getSkeletonTokens: TokenGenerator<SkeletonTokens> = ({ global, mode }) => {\n const isDark = mode === 'dark';\n return {\n background: {\n base: isDark ? 'rgba(148, 163, 184, 0.12)' : 'rgba(10, 24, 51, 0.05)',\n highlight: isDark ? 'rgba(148, 163, 184, 0.22)' : 'rgba(10, 24, 51, 0.12)',\n },\n animation: {\n duration: '1.4s',\n easing: 'ease-in-out',\n },\n radius: {\n sm: global.radii.r2,\n md: global.radii.r3,\n lg: global.radii.r4,\n pill: global.radii.r5,\n circle: global.radii.r0,\n },\n block: {\n height: '16px',\n },\n text: {\n lineHeight: '12px',\n gap: global.spacing.sm,\n lastLineWidth: '62%',\n },\n circle: {\n size: '40px',\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { StepperTokens } from '../types/component-tokens.types';\n\nexport const getStepperTokens: TokenGenerator<StepperTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n return {\n circle: {\n size: {\n md: '32px',\n sm: '24px',\n },\n fontSize: {\n md: global.typography.fontSize.sm,\n sm: global.typography.fontSize.xs,\n },\n iconSize: {\n md: '14px',\n sm: '10px',\n },\n },\n dot: {\n size: {\n md: '10px',\n sm: '8px',\n },\n pulseColor: isDark ? 'rgba(44, 111, 231, 0.35)' : 'rgba(44, 111, 231, 0.25)',\n },\n line: {\n color: {\n default: semantic.colors.border.primary,\n active: semantic.colors.brand.primary,\n },\n size: '1px',\n },\n text: {\n title: {\n color: {\n default: semantic.colors.text.primary,\n active: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n waiting: semantic.colors.text.tertiary,\n },\n fontWeight: global.typography.fontWeight.medium,\n fontSize: global.typography.fontSize.sm,\n },\n description: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.xs,\n },\n },\n state: {\n process: {\n color: semantic.colors.brand.primary,\n bg: semantic.colors.brand.primary,\n },\n wait: {\n color: semantic.colors.text.tertiary,\n bg: isDark ? 'rgba(148, 163, 184, 0.2)' : global.colors.neutral[200],\n },\n finish: {\n color: semantic.colors.brand.primary,\n bg: isDark ? 'rgba(44, 111, 231, 0.15)' : semantic.colors.brand.primarySubtle,\n },\n error: {\n color: semantic.colors.state.danger,\n bg: isDark ? 'rgba(170, 14, 41, 0.15)' : semantic.colors.state.dangerSubtle,\n },\n },\n gap: global.spacing.sm,\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { MenuTokens } from '../types/component-tokens.types';\n\nexport const getMenuTokens: TokenGenerator<MenuTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n return {\n container: {\n width: {\n expanded: '240px', // 展开宽度(Figma 设计)\n collapsed: '68px', // 折叠宽度(Figma 设计)\n },\n background: isDark ? semantic.colors.background.surface : global.colors.common.white,\n border: `1px solid ${semantic.colors.border.primary}`,\n padding: global.spacing.lg, // 16px 左右内边距\n },\n item: {\n height: '40px', // 菜单项高度(Figma 设计)\n paddingInline: global.spacing.lg, // 16px 左右内边距\n fontSize: global.typography.fontSize.sm, // 14px\n fontWeight: global.typography.fontWeight.regular, // 400\n iconSize: '20px', // 图标尺寸(Figma 设计)\n gap: global.spacing.sm, // 8px 图标和文字间距\n borderRadius: global.radii.r3, // 4px 圆角\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle, // hover 背景\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)', // 选中渐变背景\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.text.primary,\n },\n transition: '0.2s ease',\n },\n subItem: {\n paddingLeft: '20px', // 子菜单左缩进(Figma 设计有4px额外缩进)\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle,\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)',\n },\n },\n group: {\n marginTop: global.spacing.xl, // 24px 分组上边距\n marginBottom: global.spacing.md, // 12px 分组下边距\n gap: global.spacing.xs, // 4px 项目间距\n },\n groupTitle: {\n height: '18px', // 标题高度(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px\n fontWeight: global.typography.fontWeight.regular, // 400\n color: semantic.colors.text.secondary, // 辅助文字颜色\n paddingInline: '0',\n marginBottom: global.spacing.sm, // 8px 标题下边距\n },\n scrollbar: {\n width: '8px', // 滚动条宽度(Figma 设计)\n thumbColor: isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)', // 滑块颜色\n trackColor: 'transparent', // 轨道颜色\n },\n popover: {\n background: isDark ? semantic.colors.background.surface : global.colors.common.white,\n border: `1px solid ${semantic.colors.border.primary}`,\n borderRadius: global.radii.r4, // 8px 圆角\n boxShadow: isDark ? '0 4px 12px rgba(0, 0, 0, 0.4)' : '0 4px 12px rgba(0, 0, 0, 0.08)', // 悬浮层阴影\n padding: global.spacing.xs, // 4px 内边距\n item: {\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle,\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)',\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.brand.primary,\n },\n },\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { LinkTokens } from '../types/component-tokens.types';\n\nexport const getLinkTokens: TokenGenerator<LinkTokens> = ({ semantic }) => {\n return {\n variant: {\n primary: {\n text: {\n default: semantic.colors.brand.primary, // B5 #2c6fe7\n hover: '#2468f2', // Brand B6 (Brighter)\n active: '#2055c6', // Brand Click #2055c6\n disabled: semantic.colors.text.disabled, // F8\n },\n decoration: {\n default: 'none',\n hover: 'none',\n },\n },\n neutral: {\n text: {\n default: semantic.colors.text.primary, // F2 #0a1833e5\n hover: semantic.colors.brand.primary, // B5 #2c6fe7\n active: '#2055c6', // Brand Click\n disabled: semantic.colors.text.disabled,\n },\n decoration: {\n default: 'none',\n hover: 'none',\n },\n },\n },\n size: {\n sm: {\n fontSize: '12px',\n },\n md: {\n fontSize: '14px',\n },\n lg: {\n fontSize: '16px',\n },\n },\n transition: '0.2s ease',\n borderRadius: '4px',\n focusRing: {\n color: semantic.colors.brand.primary,\n offset: '2px',\n },\n };\n};\n","import { TokenGenerator } from '../types/theme-utils';\nimport { TransferTokens } from '../types/component-tokens.types';\n\n\nexport const getTransferTokens: TokenGenerator<TransferTokens> = ({ global, semantic }) => ({\n // 容器样式\n container: {\n gap: global.spacing.lg,\n },\n // 列表面板样式\n panel: {\n width: '204px',\n height: '240px',\n background: semantic.colors.background.surface,\n border: `1px solid ${semantic.colors.border.neutral}`,\n borderRadius: global.radii.r2,\n },\n // 头部样式\n header: {\n height: '40px',\n padding: '11px 16px',\n fontSize: global.typography.fontSize.xs,\n color: semantic.colors.text.transferHeader,\n background: semantic.colors.background.surfaceSubtle,\n },\n // 列表样式\n list: {\n height: 'calc(100% - 100px)',\n gap: global.spacing.sm,\n padding:'0px 16px 8px 16px',\n },\n // 列表项样式\n item: {\n height: global.spacing.xxl,\n fontSize:global.typography.fontSize.xs,\n borderRadius: global.radii.r2,\n gap: global.spacing.sm,\n padding: `${global.spacing.sm} 0px`,\n text: {\n default: semantic.colors.text.transferHeader,\n selected: semantic.colors.text.primary,\n disabled: semantic.colors.text.disabled,\n },\n checkboxSize: global.spacing.lg,\n },\n // 操作按钮区域\n operations: {\n gap: global.spacing.sm,\n borderRadius: global.radii.r2,\n borderColor: {\n default: semantic.colors.border.neutral,\n disabled: semantic.colors.border.neutral,\n active: semantic.colors.brand.primary,\n },\n backgroundColor: {\n default: semantic.colors.background.surface,\n disabled: global.colors.word[50],\n active: semantic.colors.background.surface,\n },\n width: global.spacing.xxl,\n height: global.spacing.xxl,\n iconSize: global.spacing.lg,\n iconColor: {\n default: global.colors.word[700],\n disabled: semantic.colors.text.transferOperationDisabled,\n active: global.colors.blue[500],\n },\n },\n // 底部样式\n footer: {\n height: global.spacing.xxl,\n paddingInline: global.spacing.sm,\n fontSize: global.typography.fontSize.xs,\n color: semantic.colors.text.secondary,\n borderTop: `1px solid ${semantic.colors.border.divider}`,\n marginTop: global.spacing.md,\n },\n // 空状态\n empty: {\n color: semantic.colors.text.tertiary,\n fontSize: global.typography.fontSize.sm,\n },\n // 搜索框样式\n search: {\n width: '184px',\n iconColor: `${global.colors.word[900]}66`,\n },\n // 过渡动画\n transition: 'all 0.2s ease',\n});\n","/**\n * Modal 组件 Token\n * \n * 基于三层 Token 体系:\n * - Tier 1 (Global): 全局基础值\n * - Tier 2 (Semantic): 语义化映射\n * - Tier 3 (Component): 组件专用 Token\n */\n\nimport { TokenGenerator } from '../types/theme-utils';\nimport { ModalTokens } from '../types/component-tokens.types';\n\nexport const getModalTokens: TokenGenerator<ModalTokens> = ({ global, semantic, mode }) => ({\n // 尺寸配置\n size: {\n sm: {\n width: '400px',\n maxWidth: '90vw',\n padding: global.spacing.lg, // 16px\n headerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n footerPadding: `${global.spacing.md} ${global.spacing.xl}`, // 12px 24px\n titleFontSize: global.typography.fontSize.md, // 16px\n },\n md: {\n width: '520px',\n maxWidth: '90vw',\n padding: global.spacing.xl, // 24px\n headerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n footerPadding: `${global.spacing.md} ${global.spacing.xl}`, // 12px 24px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n lg: {\n width: '720px',\n maxWidth: '90vw',\n padding: global.spacing.xl, // 24px\n headerPadding: `20px ${global.spacing.xl}`, // 20px 24px\n footerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n xl: {\n width: '920px',\n maxWidth: '90vw',\n padding: global.spacing.xxl, // 32px\n headerPadding: `${global.spacing.xl} ${global.spacing.xxl}`, // 24px 32px\n footerPadding: `${global.spacing.lg} ${global.spacing.xxl}`, // 16px 32px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n fullscreen: {\n width: '100vw',\n maxWidth: '100vw',\n padding: global.spacing.xxl, // 32px\n headerPadding: `${global.spacing.xl} ${global.spacing.xxl}`, // 24px 32px\n footerPadding: `${global.spacing.lg} ${global.spacing.xxl}`, // 16px 32px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n },\n\n // 遮罩层\n overlay: {\n background: mode === 'light'\n ? 'rgba(10, 24, 51, 0.38)' // 更轻的遮罩(科技、极简)\n : 'rgba(0, 0, 0, 0.55)', // 暗色主题降低厚重感\n backdropFilter: 'blur(4px)', // 轻量毛玻璃\n },\n\n // 容器样式\n container: {\n background: semantic.colors.background.surface,\n borderRadius: global.radii.r5, // 12px - 中型容器圆角\n // 更轻的投影,避免“厚重弹窗感”\n boxShadow: mode === 'light' ? global.shadows.l3 : semantic.shadows.elevation.medium,\n border: mode === 'light'\n ? 'none'\n : `1px solid ${semantic.colors.border.primary}`,\n maxHeight: '85vh',\n },\n\n // 头部样式\n header: {\n background: 'transparent',\n borderBottom: `1px solid ${semantic.colors.border.divider}`,\n minHeight: '56px',\n gap: global.spacing.sm, // 8px\n },\n\n // 标题样式\n title: {\n color: semantic.colors.text.primary,\n fontWeight: global.typography.fontWeight.semibold, // 600\n lineHeight: '1.4',\n },\n\n // 副标题/描述样式\n description: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.sm, // 14px\n lineHeight: '1.5',\n marginTop: global.spacing.xs, // 4px\n },\n\n // 关闭按钮\n closeButton: {\n size: '32px',\n iconSize: '16px',\n color: semantic.colors.text.tertiary,\n hoverColor: semantic.colors.text.primary,\n hoverBackground: semantic.colors.background.surfaceStrong,\n borderRadius: global.radii.r3, // 6px\n },\n\n // 内容区域\n content: {\n color: semantic.colors.text.primary,\n fontSize: global.typography.fontSize.sm, // 14px\n lineHeight: '1.6',\n maxHeight: 'calc(85vh - 160px)', // 减去头部和底部高度\n },\n\n // 底部样式\n footer: {\n background: 'transparent',\n borderTop: `1px solid ${semantic.colors.border.divider}`,\n minHeight: '56px',\n gap: global.spacing.sm, // 8px\n justifyContent: 'flex-end',\n },\n\n // 动画配置\n animation: {\n duration: '0.22s',\n easing: 'cubic-bezier(0.22, 0.61, 0.36, 1)', // 更克制的科技曲线\n scaleFrom: '0.95',\n scaleTo: '1',\n },\n\n // 层级\n zIndex: {\n overlay: 1000,\n container: 1001,\n },\n\n // 过渡\n transition: '0.2s ease',\n});\n\n\n","/**\n * Tooltip 组件 Token\n *\n * 基于三层 Token 体系:\n * - Tier 1 (Global): 全局基础值\n * - Tier 2 (Semantic): 语义化映射\n * - Tier 3 (Component): 组件专用 Token\n */\n\nimport { TokenGenerator } from '../types/theme-utils'\nimport { TooltipTokens } from '../types/component-tokens.types'\n\nexport const getTooltipTokens: TokenGenerator<TooltipTokens> = ({ global, semantic, mode }) => ({\n // 背景与文字\n background: mode === 'light' \n ? 'rgba(10, 24, 51, 0.9)' \n : 'rgba(255, 255, 255, 0.92)',\n color: mode === 'light' \n ? '#ffffff' \n : semantic.colors.text.primary,\n \n // 边框与阴影\n borderRadius: global.radii.r3,\n boxShadow: mode === 'light'\n ? '0 4px 12px rgba(0, 0, 0, 0.15)'\n : '0 4px 12px rgba(0, 0, 0, 0.3)',\n \n // 尺寸\n padding: `${global.spacing.xs} ${global.spacing.sm}`,\n maxWidth: '280px',\n \n // 文字\n fontSize: global.typography.fontSize.sm,\n lineHeight: '1.5',\n \n // 箭头\n arrow: {\n size: '8px',\n },\n \n // 动画\n animation: {\n duration: '0.15s',\n easing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n },\n \n // 层级\n zIndex: 1100,\n})\n","import {\n AppTheme,\n globalColors,\n globalSpacing,\n globalRadii,\n globalTypography,\n globalShadows,\n globalGradients,\n lightSemantic,\n darkSemantic,\n SemanticColors,\n SemanticSpacing,\n SemanticBorderRadius,\n SemanticTypography,\n SemanticShadows,\n} from '@kingsoft-ai/theme';\nimport { ThemeContext } from './types/theme-utils';\nimport { ComponentTokens } from './types/component-tokens.types';\n\nimport { getButtonTokens, getIconButtonTokens } from './button/tokens';\nimport { getFloatButtonTokens } from './floatButton/tokens';\nimport { getCheckboxTokens } from './checkbox/tokens';\nimport { getRadioTokens } from './radio/tokens';\nimport { getSwitchTokens } from './switch/tokens';\nimport { getInputTokens } from './input/tokens';\nimport { getSelectTokens } from './select/tokens';\nimport { getNumberFieldTokens } from './numberInput/tokens';\nimport { getCollapseTokens } from './collapse/tokens';\nimport { getTagTokens } from './tag/tokens';\nimport { getSkeletonTokens } from './skeleton/tokens';\nimport { getStepperTokens } from './stepper/tokens';\nimport { getMenuTokens } from './menu/tokens';\nimport { getLinkTokens } from './link/tokens';\nimport { getTransferTokens } from './transfer/tokens';\nimport { getModalTokens } from './modal/tokens';\nimport { getCardTokens } from './card/tokens';\nimport { getTooltipTokens } from './tooltip/tokens';\n\nexport const createComponentTokens = (context: ThemeContext): ComponentTokens => ({\n button: getButtonTokens(context),\n floatButton: getFloatButtonTokens(context),\n iconButton: getIconButtonTokens(context),\n checkbox: getCheckboxTokens(context),\n radio: getRadioTokens(context),\n switch: getSwitchTokens(context),\n input: getInputTokens(context),\n select: getSelectTokens(context),\n numberfield: getNumberFieldTokens(context),\n collapse: getCollapseTokens(context),\n tag: getTagTokens(context),\n skeleton: getSkeletonTokens(context),\n stepper: getStepperTokens(context),\n menu: getMenuTokens(context),\n link: getLinkTokens(context),\n transfer: getTransferTokens(context),\n modal: getModalTokens(context),\n card: getCardTokens(context),\n tooltip: getTooltipTokens(context),\n});\n\ninterface SemanticTheme {\n colors: SemanticColors;\n spacing: SemanticSpacing;\n borderRadius: SemanticBorderRadius;\n typography: SemanticTypography;\n shadows: SemanticShadows;\n}\n\nexport const createDesignTheme = (\n semantic: SemanticTheme,\n mode: 'light' | 'dark' = 'light'\n): AppTheme => {\n const global = {\n colors: globalColors,\n spacing: globalSpacing,\n radii: globalRadii,\n typography: globalTypography,\n shadows: globalShadows,\n gradients: globalGradients,\n };\n\n const context: ThemeContext = {\n global,\n semantic,\n mode,\n };\n\n return {\n global,\n semantic,\n components: createComponentTokens(context),\n };\n};\n\nexport const defaultLightDesignTheme = createDesignTheme(lightSemantic, 'light');\nexport const defaultDarkDesignTheme = createDesignTheme(darkSemantic, 'dark');\n\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","'use client'\n\n/**\n * Design 组件的主题提供者\n * \n * 功能:\n * 1. 自动导入 CSS tokens(兜底 - 确保即使只导入 Provider 也有样式)\n * 2. 设置 data-theme 属性以支持主题切换\n * 3. 支持通过 theme prop 覆盖 CSS 变量\n * \n * 无 Provider 场景:\n * 组件可以不包裹 Provider 直接使用,因为 CSS 变量在 :root 定义\n * 只要项目入口导入了 tokens.css(通过 @kingsoft-ai/design 自动导入)\n */\n\nimport type { ReactNode } from 'react'\nimport { useMemo, useEffect } from 'react'\nimport { CustomThemeProvider } from '@kingsoft-ai/theme'\nimport { defaultLightDesignTheme, defaultDarkDesignTheme } from './theme'\nimport type { AppTheme } from '@kingsoft-ai/theme'\nimport type { DeepPartial } from './types/theme-utils'\nimport deepmerge from 'deepmerge'\nimport { OverlayProvider } from 'react-aria'\n\n// 兜底导入 tokens - 确保即使只导入 Provider 也有样式\nimport './tokens/index.css'\n\nexport interface DesignThemeProviderProps {\n /** 子组件 */\n children: ReactNode\n /** \n * 主题模式\n * @default 'light'\n */\n mode?: 'light' | 'dark'\n /**\n * 自定义主题对象(可选)\n * \n * 支持部分配置,会自动与默认主题进行深度合并。\n * 只需要提供你想要覆盖的部分即可。\n * \n * 注意:theme 中的值会被映射为 CSS 变量覆盖\n * \n * @example\n * ```tsx\n * // 只覆盖 card 组件的部分 token\n * const customTheme = {\n * components: {\n * card: {\n * container: {\n * background: { default: '#F0F4FF' },\n * radius: '24px',\n * }\n * }\n * }\n * }\n * \n * <DesignThemeProvider theme={customTheme}>\n * <Card>自定义样式的卡片</Card>\n * </DesignThemeProvider>\n * ```\n */\n theme?: DeepPartial<AppTheme>\n /**\n * 是否设置 document data-theme 属性\n * \n * 默认为 true - Provider 会自动设置 document.documentElement 的 data-theme\n * 设为 false 时,Provider 不会修改全局 data-theme,适用于局部主题\n * \n * @default true\n */\n setDocumentTheme?: boolean\n /**\n * 作为 CSS 变量作用域的容器\n * \n * 默认为 undefined - CSS 变量覆盖会应用到内联 style\n * 可以传入 'root' 使覆盖应用到 document.documentElement\n * \n * @default undefined\n */\n cssVarsScope?: 'root' | undefined\n}\n\n/**\n * 将 theme 对象中的语义化颜色映射为 CSS 变量覆盖\n * \n * 仅处理与默认值不同的部分,避免不必要的覆盖\n */\nconst buildCSSVarsOverride = (\n theme: Partial<AppTheme> | undefined,\n baseTheme: AppTheme\n): Record<string, string> => {\n if (!theme) return {}\n \n const vars: Record<string, string> = {}\n \n // 映射语义化颜色到 CSS 变量\n if (theme.semantic?.colors) {\n const { colors } = theme.semantic\n \n // Brand colors\n if (colors.brand?.primary !== baseTheme.semantic.colors.brand.primary) {\n vars['--ksd-brand-primary'] = colors.brand.primary\n }\n if (colors.brand?.primaryHover !== baseTheme.semantic.colors.brand.primaryHover) {\n vars['--ksd-brand-primary-hover'] = colors.brand.primaryHover\n }\n if (colors.brand?.primaryActive !== baseTheme.semantic.colors.brand.primaryActive) {\n vars['--ksd-brand-primary-active'] = colors.brand.primaryActive\n }\n if (colors.brand?.primarySubtle !== baseTheme.semantic.colors.brand.primarySubtle) {\n vars['--ksd-brand-primary-subtle'] = colors.brand.primarySubtle\n }\n \n // Text colors\n if (colors.text?.primary !== baseTheme.semantic.colors.text.primary) {\n vars['--ksd-text-primary'] = colors.text.primary\n }\n if (colors.text?.secondary !== baseTheme.semantic.colors.text.secondary) {\n vars['--ksd-text-secondary'] = colors.text.secondary\n }\n if (colors.text?.tertiary !== baseTheme.semantic.colors.text.tertiary) {\n vars['--ksd-text-tertiary'] = colors.text.tertiary\n }\n if (colors.text?.disabled !== baseTheme.semantic.colors.text.disabled) {\n vars['--ksd-text-disabled'] = colors.text.disabled\n }\n if (colors.text?.placeholder !== baseTheme.semantic.colors.text.placeholder) {\n vars['--ksd-text-placeholder'] = colors.text.placeholder\n }\n \n // Background colors\n if (colors.background?.primary !== baseTheme.semantic.colors.background.primary) {\n vars['--ksd-background-primary'] = colors.background.primary\n }\n if (colors.background?.surface !== baseTheme.semantic.colors.background.surface) {\n vars['--ksd-background-surface'] = colors.background.surface\n }\n if (colors.background?.secondary !== baseTheme.semantic.colors.background.secondary) {\n vars['--ksd-background-secondary'] = colors.background.secondary\n }\n \n // Border colors\n if (colors.border?.primary !== baseTheme.semantic.colors.border.primary) {\n vars['--ksd-border-primary'] = colors.border.primary\n }\n if (colors.border?.strong !== baseTheme.semantic.colors.border.strong) {\n vars['--ksd-border-strong'] = colors.border.strong\n }\n if (colors.border?.divider !== baseTheme.semantic.colors.border.divider) {\n vars['--ksd-border-divider'] = colors.border.divider\n }\n \n // State colors\n if (colors.state?.danger !== baseTheme.semantic.colors.state.danger) {\n vars['--ksd-state-danger'] = colors.state.danger\n }\n if (colors.state?.success !== baseTheme.semantic.colors.state.success) {\n vars['--ksd-state-success'] = colors.state.success\n }\n if (colors.state?.warning !== baseTheme.semantic.colors.state.warning) {\n vars['--ksd-state-warning'] = colors.state.warning\n }\n }\n \n return vars\n}\n\n/**\n * Design 组件主题提供者\n * \n * @example\n * ```tsx\n * // 使用默认亮色主题\n * <DesignThemeProvider>\n * <Button>点击我</Button>\n * </DesignThemeProvider>\n * \n * // 使用暗色主题\n * <DesignThemeProvider mode=\"dark\">\n * <Button>点击我</Button>\n * </DesignThemeProvider>\n * \n * // 使用部分自定义主题(自动与默认主题合并,并映射为 CSS 变量)\n * <DesignThemeProvider theme={{ semantic: { colors: { brand: { primary: '#FF5500' } } } }}>\n * <Button>自定义品牌色的按钮</Button>\n * </DesignThemeProvider>\n * ```\n */\nexport const DesignThemeProvider = ({ \n children, \n mode = 'light',\n theme,\n setDocumentTheme = true,\n cssVarsScope,\n}: DesignThemeProviderProps) => {\n // 根据 mode 选择基础主题\n const baseTheme = mode === 'dark' ? defaultDarkDesignTheme : defaultLightDesignTheme\n \n // 将用户的部分自定义配置与默认主题进行深度合并\n const mergedTheme = useMemo(() => {\n if (!theme) {\n return baseTheme\n }\n return deepmerge(baseTheme, theme as Partial<AppTheme>)\n }, [baseTheme, theme])\n \n // 设置 document 的 data-theme 属性\n useEffect(() => {\n if (setDocumentTheme) {\n document.documentElement.setAttribute('data-theme', mode)\n }\n // 清理函数:组件卸载时不移除 data-theme,保持最后的状态\n }, [mode, setDocumentTheme])\n \n // 构建 CSS 变量覆盖\n const cssVarsOverride = useMemo(() => {\n return buildCSSVarsOverride(theme as Partial<AppTheme>, baseTheme)\n }, [theme, baseTheme])\n \n // 如果需要覆盖到 root,使用 useEffect\n useEffect(() => {\n if (cssVarsScope === 'root' && Object.keys(cssVarsOverride).length > 0) {\n const root = document.documentElement\n Object.entries(cssVarsOverride).forEach(([key, value]) => {\n root.style.setProperty(key, value)\n })\n \n // 清理:移除覆盖的变量\n return () => {\n Object.keys(cssVarsOverride).forEach(key => {\n root.style.removeProperty(key)\n })\n }\n }\n }, [cssVarsOverride, cssVarsScope])\n \n // 构建内联样式(用于局部覆盖)\n const wrapperStyle = useMemo(() => {\n if (cssVarsScope === 'root' || Object.keys(cssVarsOverride).length === 0) {\n return { display: 'contents' }\n }\n return {\n display: 'contents',\n ...cssVarsOverride,\n }\n }, [cssVarsOverride, cssVarsScope])\n \n return (\n <CustomThemeProvider theme={mergedTheme}>\n <OverlayProvider style={wrapperStyle as React.CSSProperties}>\n {children}\n </OverlayProvider>\n </CustomThemeProvider>\n )\n}\n"],"names":["_extends","n","e","t","r","sheetForTag","tag","i","createStyleElement","options","StyleSheet","_this","before","_proto","nodes","rule","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","abs","from","assign","hash","value","length","charat","trim","match","pattern","replace","replacement","indexof","search","index","substr","begin","end","strlen","sizeof","append","array","combine","callback","line","column","position","character","characters","node","root","parent","type","props","children","copy","char","prev","next","peek","caret","slice","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","compile","parse","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","k","x","y","z","serialize","output","stringify","element","middleware","collection","rulesheet","memoize","fn","cache","arg","identifierWithPointTracking","toRules","parsed","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefix","prefixer","defaultStylisPlugins","createCache","key","ssrStyles","dataEmotionAttribute","stylisPlugins","inserted","container","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","serializer","stylis","styles","selector","serialized","shouldCache","b","c","d","f","g","h","l","m","p","q","v","w","a","u","A","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","object","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","reactIs","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","isBrowser","getRegisteredStyles","registered","registeredStyles","classNames","rawClassName","className","registerStyles","isStringTag","insertStyles","current","murmur2","str","len","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","p1","p2","cursor","unitless","handleInterpolation","mergedProps","interpolation","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","result","asString","cached","obj","string","_i","interpolated","labelPattern","serializeStyles","args","stringMode","strings","asTemplateStringsArr","templateStringsArr","identifierName","name","hashString","syncFallback","create","useInsertionEffect","React","useInsertionEffectAlwaysWithSyncFallback","EmotionCacheContext","withEmotionCache","func","forwardRef","ref","useContext","ThemeContext","useTheme","hasOwn","typePropName","createEmotionProps","newProps","_key","Insertion","_ref","Emotion","cssProp","WrappedComponent","_key2","Emotion$1","jsx","argsLength","createElementArgArray","_jsx","JSX","css","_len","insertable","reactPropsRegex","isPropValid","prop","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","propName","createStyled","baseTag","targetClassName","defaultShouldForwardProp","shouldUseAs","Styled","FinalTag","classInterpolations","finalShouldForwardProp","nextTag","nextOptions","newStyled","tags","styled","tagName","buttonVariants","buttonSizes","getVariantStyles","variant","variantMap","getSizeStyles","sizeMap","ButtonRoot","fullWidth","ButtonContent","IconWrapper","isLoading","Label","VARIANTS","SIZES","Button","icon","loading","disabled","isDisabled","ariaProps","forwardedRef","innerRef","useRef","finalDisabled","buttonProps","isPressed","useButton","mergeProps","iconButtonAppearances","iconButtonTones","iconButtonSizes","appearance","tone","varKey","IconButtonRoot","IconSlot","isHidden","LoadingSpinner","ICON_BUTTON_APPEARANCES","ICON_BUTTON_TONES","ICON_BUTTON_SIZES","IconButton","label","loadingLabel","isDevEnvironment","useMemo","_b","_a","ariaLabel","ariaLabelledby","jsxs","VisuallyHidden","ReactJSXRuntime","checkboxContainer","checkboxControl","checkboxIcon","checkboxLabel","CheckIcon","checked","IndeterminateIcon","Checkbox","controlledChecked","defaultChecked","indeterminate","onChange","style","inputProps","inputRef","hover","setHover","useState","internalChecked","setInternalChecked","isControlled","useEffect","event","newChecked","s","C","L","M","R","O","H","V","Z","N","B","F","S","W","U","_","E","checkboxButtonSizeTokens","checkboxButtonContainer","checkboxButtonWrapper","sizeToken","checkboxButtonCheckmark","checkmarkSize","checkmarkIcon","CheckboxButton","handleChange","CheckOutline","slideDown","slideUp","CollapseRoot","CollapseItemWrapper","isLast","CollapseHeader","ArrowWrapper","isExpanded","TitleWrapper","TitleText","SuffixWrapper","CollapseContentWrapper","contentHeight","CollapseContentInner","ContentText","Collapse","activeKeyProp","defaultActiveKey","accordion","internalActiveKey","setInternalActiveKey","activeKey","activeKeys","itemKey","expanded","newActiveKey","currentKeys","items","Children","isValidElement","itemCount","child","last","cloneElement","CollapseItem","title","suffix","contentRef","setContentHeight","handleToggle","ChevronDownOutline","floatButtonTypes","floatButtonShapes","getTypeStyles","buttonType","getShapeStyles","shape","FloatButtonRoot","$buttonType","$shape","$size","FloatButtonContent","Description","TooltipWrapper","getTooltipPosition","placement","TooltipCard","$color","$placement","getArrowPosition","TooltipArrow","TYPES","SHAPES","FloatButton","description","tooltip","showTooltip","setShowTooltip","isTooltipConfig","tooltipConfig","tooltipTitle","tooltipColor","tooltipPlacement","hasTooltip","InputRoot","isHovered","isFocused","isError","InputWrapper","StyledInput","ClearButton","Counter","CloseIcon","Input","clearable","error","errorMessage","showCounter","defaultValue","onFocus","onBlur","maxLength","id","ariaDescribedBy","restProps","generatedId","setIsFocused","setIsHovered","internalValue","setInternalValue","currentValue","handleFocus","handleBlur","handleClear","nativeInputValueSetter","currentLength","showClearButton","inputId","descriptionId","errorId","describedBy","MenuContainer","collapsed","MenuContent","MenuItemContainer","isSubItem","active","MenuItemIcon","MenuItemLabel","MenuItemArrow","MenuGroupContainer","MenuGroupTitle","MenuGroupItems","SubMenuPopoverContainer","SubMenuPopoverContent","SubMenuPopoverItem","Menu","SubMenuPopover","visible","anchorRef","onClose","onMouseEnter","onMouseLeave","popoverRef","setPosition","updatePosition","rect","handleClickOutside","timer","createPortal","MenuItem","showArrow","arrowExpanded","subMenu","onClick","itemRef","showPopover","setShowPopover","hoverTimerRef","closeTimerRef","clearTimers","handleMouseEnter","handleMouseLeave","MenuGroup","SubMenuItem","LinkRoot","Link","linkProps","useLink","fadeIn","dialogIn","ModalPortalRoot","ModalBackdrop","ModalDialog","ModalDialogHeader","ModalDialogTitle","ModalCloseButton","ModalDialogBody","DefaultCloseIcon","setRef","Modal","open","onOpenChange","hideHeader","isDismissable","closeOnEsc","closeOnOverlay","closeOnOutside","shouldCloseOnInteractOutside","portalContainer","overlayClassName","overlayStyle","dialogClassName","dialogStyle","closeButtonClassName","closeButtonStyle","dialogRef","titleId","useId","requestClose","useCallback","_reason","mountContainer","usePreventScroll","allowUserDismiss","allowEsc","allowOutside","overlayProps","underlayProps","useOverlay","modalProps","useModal","dialogProps","titleProps","useDialog","handleCloseButton","mergedDialogProps","backdropProps","onPointerDown","onMouseDown","rest","content","FocusScope","getDisabledStyles","NumberRoot","NumberGroup","controls","NumberField","ArrowGroup","ArrowButton","direction","SideButton","PlusIcon","PlusOutline","MinusIcon","MinusOutline","UpIcon","ChevronUpOutline","DownIcon","NumberInput","min","max","step","onValueChange","onChangeValue","internal","setInternal","clamp","triggerValueChange","setValue","nativeSetter","ev","handleInputChange","raw","final","increment","decrement","handleKeyDown","atMin","atMax","RadioWrapper","RadioRoot","RadioNative","RadioIndicator","RadioText","RadioLabel","RadioDescription","Radio","shimmerKeyframes","shimmerAnimation","SkeletonRoot","$variant","$radius","$width","$height","$animate","SkeletonStack","SkeletonLine","$customWidth","$isLast","skeletonVariants","skeletonRadii","toCssSize","Skeleton","width","height","lines","animate","radius","loaded","resolvedWidth","resolvedHeight","lineCount","shouldRenderStack","accessibilityProps","dotPulse","StepperRoot","orientation","StepRoot","labelPlacement","StepIconContainer","status","StepContent","StepTitle","StepDescription","StepConnector","isFinished","iconSizeVar","Stepper","steps","stepProps","Step","renderIcon","CloseOutline","resolvedLabelPlacement","iconContent","showVerticalLine","showHorizontalLine","progressTypes","progressSizes","progressStatuses","getStatusColor","LineProgressRoot","LineProgressTrack","LineProgressBar","percent","ProgressText","StatusIcon","LineProgressInfo","CircleProgressRoot","CircleProgressSvg","CircleProgressTrack","CircleProgressBar","CircleProgressContent","CircleProgressIcon","STATUSES","SuccessIcon","ErrorIcon","WarningIcon","getStatusIcon","Progress","showPercent","showIcon","progressBarProps","labelProps","useProgressBar","shouldShowIcon","getSizeConfig","circleSize","strokeWidth","circumference","strokeDashoffset","showPercentInCircle","getColorStyles","color","bordered","TagRoot","TagContent","CloseButton","AddButton","Tag","closable","checkable","actualVariant","isChecked","handleClick","handleClose","TagAdd","selectSizes","isMultiple","SelectWrapper","SelectTrigger","isOpen","SelectValue","isPlaceholder","SelectIcon","ListBoxPopup","ListBoxContent","OptionItem","isSelected","OptionText","OptionIcon","LoadingWrapper","EmptyState","TagsContainer","CheckboxWrapper","Popover","state","triggerRef","triggerWidth","setTriggerWidth","useLayoutEffect","overlayPropsFromUseOverlay","resolvedPlacement","useOverlayPosition","onInteractOutside","target","popover","trigger","Overlay","DismissButton","ListBox","listBoxProps","useListBox","item","Option","optionProps","useOption","MultiListBox","SelectInner","selectionMode","placeholder","maxTagCount","selectedKey","defaultSelectedKey","selectedKeys","defaultSelectedKeys","onSelectionChange","finalSelectedKey","finalSelectedKeys","finalDefaultSelectedKey","finalDefaultSelectedKeys","handleSelectionChange","keys","renderItems","option","Item","lastPointerTypeRef","singleState","useSelectState","multiState","useListState","multiOpen","setMultiOpen","effectiveOpen","selectedItems","selectedKeySet","visibleTags","overflowCount","triggerProps","valueProps","menuProps","descriptionProps","errorMessageProps","useSelect","handlePressStart","focusWithoutScrolling","handlePress","pointerType","focusStrategy","handleRemoveTag","newKeys","renderTriggerContent","popoverState","HiddenSelect","Select","Section","tableSizes","tableVariants","getTableRadius","getCellPadding","TableContainer","StyledTable","TableHeader","TableHeaderRow","TableHeaderCell","SortIndicator","TableBody","TableRow","TableCell","CheckboxCell","ExpandButton","CellContent","TableInner","columns","dataSource","scroll","selectable","controlledSelectedKeys","expandable","controlledExpandedKeys","onExpandChange","expandedRowRender","sortConfig","onSortChange","onRowClick","emptyText","wrapText","internalSelectedKeys","setInternalSelectedKeys","internalExpandedKeys","setInternalExpandedKeys","isScrollbarVisible","setIsScrollbarVisible","containerRef","scrollHideTimerRef","expandedKeys","handleExpandChange","handleSort","newDirection","allSelected","record","selectedCount","handleScroll","renderRows","data","level","hasChildren","mainRow","colIndex","isFirstColumn","ChevronRightOutline","expandedRow","childRows","TableWithRef","Table","switchSizes","SwitchRoot","hasInnerLabel","isFocusVisible","SwitchContent","SwitchLabel","SwitchThumb","SwitchLabelWrapper","SwitchLabelText","Switch","checkedLabel","uncheckedLabel","defaultSelected","useToggleState","useSwitch","focusProps","useFocusRing","currentLabel","switchElement","TransferRoot","TransferPanel","TransferHeader","TransferTitle","TransferCount","TransferSearchWrapper","TransferList","TransferItem","selected","TransferItemLabel","TransferItemContent","TransferItemDeleteButton","TransferOperations","TransferOperationButton","TransferFooter","TransferEmpty","TransferPagination","TransferPaginationInfo","TransferPaginationControls","TransferPaginationButton","showSearch","searchPlaceholder","filterOption","render","onItemSelectChange","showSelectAll","footer","locale","header","onClearAll","clearMode","oneWay","onItemDelete","pagination","theme","searchValue","setSearchValue","currentPage","setCurrentPage","pageSize","setPageSize","filteredData","selectableItems","isPaginationEnabled","paginatedData","startIndex","endIndex","displayData","totalPages","handlePageChange","page","handlePageSizeChange","isAllSelected","isIndeterminate","handleSelectAll","handleItemToggle","renderItem","SearchOutline","StyledTransferList","DeleteOutline","ChevronLeftOutline","Transfer","controlledTargetKeys","defaultTargetKeys","titles","operations","actions","internalTargetKeys","setInternalTargetKeys","targetKeysSet","leftSelectedKeys","setLeftSelectedKeys","rightSelectedKeys","setRightSelectedKeys","leftDataSource","rightDataSource","moveToRight","newTargetKeys","moveKeys","moveToLeft","clearAllLeftData","allLeftKeys","clearAllRightData","handleItemDelete","canMoveToRight","canMoveToLeft","renderActions","left","right","action","leftAction","rightAction","uploadStatuses","UploadRoot","UploadDropzone","isDragActive","UploadIconWrapper","UploadTextWrapper","UploadMainText","UploadSecondaryText","UploadLink","FileList","FileItem","FileInfoRow","FileIcon","FileName","DeleteButton","ProgressWrapper","ProgressTrack","ProgressBar","HiddenInput","DefaultUploadIcon","FileIconSvg","DeleteIcon","generateUid","Upload","accept","multiple","maxSize","maxCount","controlledFileList","defaultFileList","beforeUpload","customRequest","mainText","secondaryText","fileTypeHint","downloadTemplateText","onDownloadTemplate","dropzoneRef","internalFileList","setInternalFileList","setIsDragActive","fileList","updateFileList","newFileList","handleFiles","files","filesArray","newFiles","file","uploadFile","updatedFileList","simulateUpload","uid","currentFileList","interval","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleDelete","renderStatusIcon","CardContainer","hoverable","CardHeader","CardTitle","CardExtra","CardBody","padding","CardCover","CardFooter","Card","extra","cover","bodyPadding","getCardTokens","global","semantic","TooltipContainer","positions","Tooltip","delay","closeDelay","controlledOpen","defaultOpen","internalOpen","setInternalOpen","tooltipRef","openTimerRef","updateOpen","nextOpen","handleOpen","hoverProps","useHover","focusWithinProps","useFocusWithin","triggerRect","tooltipRect","scrollX","scrollY","top","handleUpdate","wrapperProps","tooltipContent","getButtonTokens","getIconButtonTokens","getFloatButtonTokens","getCheckboxTokens","getRadioTokens","getSwitchTokens","getInputTokens","getSelectTokens","getNumberFieldTokens","getCollapseTokens","getTagTokens","mode","isDark","getSkeletonTokens","getStepperTokens","getMenuTokens","getLinkTokens","getTransferTokens","getModalTokens","getTooltipTokens","createComponentTokens","context","createDesignTheme","globalColors","globalSpacing","globalRadii","globalTypography","globalShadows","globalGradients","defaultLightDesignTheme","lightSemantic","defaultDarkDesignTheme","darkSemantic","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","emptyTarget","val","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","source","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmerge_1","cjs","buildCSSVarsOverride","baseTheme","vars","colors","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","DesignThemeProvider","setDocumentTheme","cssVarsScope","mergedTheme","cssVarsOverride","wrapperStyle","CustomThemeProvider","OverlayProvider"],"mappings":";;;;;;;;;;;;;;;AAAA,SAASA,KAAW;AAClB,SAAOA,KAAW,OAAO,SAAS,OAAO,OAAO,KAAI,IAAK,SAAUC,GAAG;AACpE,aAASC,IAAI,GAAGA,IAAI,UAAU,QAAQA,KAAK;AACzC,UAAIC,IAAI,UAAUD,CAAC;AACnB,eAASE,KAAKD,EAAG,EAAC,CAAA,GAAI,eAAe,KAAKA,GAAGC,CAAC,MAAMH,EAAEG,CAAC,IAAID,EAAEC,CAAC;AAAA,IAChE;AACA,WAAOH;AAAA,EACT,GAAGD,GAAS,MAAM,MAAM,SAAS;AACnC;ACiBA,SAASK,GAAYC,GAAK;AACxB,MAAIA,EAAI;AACN,WAAOA,EAAI;AAMb,WAASC,IAAI,GAAGA,IAAI,SAAS,YAAY,QAAQA;AAC/C,QAAI,SAAS,YAAYA,CAAC,EAAE,cAAcD;AACxC,aAAO,SAAS,YAAYC,CAAC;AAOnC;AAEA,SAASC,GAAmBC,GAAS;AACnC,MAAIH,IAAM,SAAS,cAAc,OAAO;AACxC,SAAAA,EAAI,aAAa,gBAAgBG,EAAQ,GAAG,GAExCA,EAAQ,UAAU,UACpBH,EAAI,aAAa,SAASG,EAAQ,KAAK,GAGzCH,EAAI,YAAY,SAAS,eAAe,EAAE,CAAC,GAC3CA,EAAI,aAAa,UAAU,EAAE,GACtBA;AACT;AAEA,IAAII,KAA0B,2BAAY;AAExC,WAASA,EAAWD,GAAS;AAC3B,QAAIE,IAAQ;AAEZ,SAAK,aAAa,SAAUL,GAAK;AAC/B,UAAIM;AAEJ,MAAID,EAAM,KAAK,WAAW,IACpBA,EAAM,iBACRC,IAASD,EAAM,eAAe,cACrBA,EAAM,UACfC,IAASD,EAAM,UAAU,aAEzBC,IAASD,EAAM,SAGjBC,IAASD,EAAM,KAAKA,EAAM,KAAK,SAAS,CAAC,EAAE,aAG7CA,EAAM,UAAU,aAAaL,GAAKM,CAAM,GAExCD,EAAM,KAAK,KAAKL,CAAG;AAAA,IACrB,GAEA,KAAK,WAAWG,EAAQ,WAAW,SAAY,KAAiBA,EAAQ,QACxE,KAAK,OAAO,CAAA,GACZ,KAAK,MAAM,GACX,KAAK,QAAQA,EAAQ,OAErB,KAAK,MAAMA,EAAQ,KACnB,KAAK,YAAYA,EAAQ,WACzB,KAAK,UAAUA,EAAQ,SACvB,KAAK,iBAAiBA,EAAQ,gBAC9B,KAAK,SAAS;AAAA,EAChB;AAEA,MAAII,IAASH,EAAW;AAExB,SAAAG,EAAO,UAAU,SAAiBC,GAAO;AACvC,IAAAA,EAAM,QAAQ,KAAK,UAAU;AAAA,EAC/B,GAEAD,EAAO,SAAS,SAAgBE,GAAM;AAIpC,IAAI,KAAK,OAAO,KAAK,WAAW,OAAQ,OAAO,KAC7C,KAAK,WAAWP,GAAmB,IAAI,CAAC;AAG1C,QAAIF,IAAM,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC;AAExC,QAAI,KAAK,UAAU;AACjB,UAAIU,IAAQX,GAAYC,CAAG;AAE3B,UAAI;AAGF,QAAAU,EAAM,WAAWD,GAAMC,EAAM,SAAS,MAAM;AAAA,MAC9C,QAAY;AAAA,MACZ;AAAA,IACF;AACE,MAAAV,EAAI,YAAY,SAAS,eAAeS,CAAI,CAAC;AAG/C,SAAK;AAAA,EACP,GAEAF,EAAO,QAAQ,WAAiB;AAC9B,SAAK,KAAK,QAAQ,SAAUP,GAAK;AAC/B,UAAIW;AAEJ,cAAQA,IAAkBX,EAAI,eAAe,OAAO,SAASW,EAAgB,YAAYX,CAAG;AAAA,IAC9F,CAAC,GACD,KAAK,OAAO,CAAA,GACZ,KAAK,MAAM;AAAA,EACb,GAEOI;AACT,EAAC,GCzIUQ,KAAK,QACLC,KAAM,SACNC,IAAS,YAETC,KAAU,QACVC,KAAU,QACVC,KAAc,QAIdC,KAAS,WAMTC,KAAY,cAIZC,KAAQ,UChBRC,KAAM,KAAK,KAMXC,KAAO,OAAO,cAMdC,KAAS,OAAO;AAOpB,SAASC,GAAMC,GAAOC,GAAQ;AACpC,SAAOC,GAAOF,GAAO,CAAC,IAAI,QAAYC,KAAU,IAAKC,GAAOF,GAAO,CAAC,MAAM,IAAKE,GAAOF,GAAO,CAAC,MAAM,IAAKE,GAAOF,GAAO,CAAC,MAAM,IAAKE,GAAOF,GAAO,CAAC,IAAI;AACvJ;AAMO,SAASG,GAAMH,GAAO;AAC5B,SAAOA,EAAM,KAAI;AAClB;AAOO,SAASI,GAAOJ,GAAOK,GAAS;AACtC,UAAQL,IAAQK,EAAQ,KAAKL,CAAK,KAAKA,EAAM,CAAC,IAAIA;AACnD;AAQO,SAASM,EAASN,GAAOK,GAASE,GAAa;AACrD,SAAOP,EAAM,QAAQK,GAASE,CAAW;AAC1C;AAOO,SAASC,GAASR,GAAOS,GAAQ;AACvC,SAAOT,EAAM,QAAQS,CAAM;AAC5B;AAOO,SAASP,GAAQF,GAAOU,GAAO;AACrC,SAAOV,EAAM,WAAWU,CAAK,IAAI;AAClC;AAQO,SAASC,GAAQX,GAAOY,GAAOC,GAAK;AAC1C,SAAOb,EAAM,MAAMY,GAAOC,CAAG;AAC9B;AAMO,SAASC,GAAQd,GAAO;AAC9B,SAAOA,EAAM;AACd;AAMO,SAASe,GAAQf,GAAO;AAC9B,SAAOA,EAAM;AACd;AAOO,SAASgB,GAAQhB,GAAOiB,GAAO;AACrC,SAAOA,EAAM,KAAKjB,CAAK,GAAGA;AAC3B;AAOO,SAASkB,GAASD,GAAOE,GAAU;AACzC,SAAOF,EAAM,IAAIE,CAAQ,EAAE,KAAK,EAAE;AACnC;AChHO,IAAIC,KAAO,GACPC,KAAS,GACTpB,KAAS,GACTqB,KAAW,GACXC,KAAY,GACZC,KAAa;AAWjB,SAASC,GAAMzB,GAAO0B,GAAMC,GAAQC,GAAMC,GAAOC,GAAU7B,GAAQ;AACzE,SAAO,EAAC,OAAOD,GAAO,MAAM0B,GAAM,QAAQC,GAAQ,MAAMC,GAAM,OAAOC,GAAO,UAAUC,GAAU,MAAMV,IAAM,QAAQC,IAAQ,QAAQpB,GAAQ,QAAQ,GAAE;AACvJ;AAOO,SAAS8B,GAAML,GAAMG,GAAO;AAClC,SAAO/B,GAAO2B,GAAK,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,CAAC,GAAGC,GAAM,EAAC,QAAQ,CAACA,EAAK,OAAM,GAAGG,CAAK;AAC3F;AAKO,SAASG,KAAQ;AACvB,SAAOT;AACR;AAKO,SAASU,KAAQ;AACvB,SAAAV,KAAYD,KAAW,IAAIpB,GAAOsB,IAAY,EAAEF,EAAQ,IAAI,GAExDD,MAAUE,OAAc,OAC3BF,KAAS,GAAGD,OAENG;AACR;AAKO,SAASW,KAAQ;AACvB,SAAAX,KAAYD,KAAWrB,KAASC,GAAOsB,IAAYF,IAAU,IAAI,GAE7DD,MAAUE,OAAc,OAC3BF,KAAS,GAAGD,OAENG;AACR;AAKO,SAASY,KAAQ;AACvB,SAAOjC,GAAOsB,IAAYF,EAAQ;AACnC;AAKO,SAASc,KAAS;AACxB,SAAOd;AACR;AAOO,SAASe,GAAOzB,GAAOC,GAAK;AAClC,SAAOF,GAAOa,IAAYZ,GAAOC,CAAG;AACrC;AAMO,SAASyB,GAAOV,GAAM;AAC5B,UAAQA,GAAI;AAAA,IAEX,KAAK;AAAA,IAAG,KAAK;AAAA,IAAG,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AACtC,aAAO;AAAA,IAER,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAE3D,KAAK;AAAA,IAAI,KAAK;AAAA,IAAK,KAAK;AACvB,aAAO;AAAA,IAER,KAAK;AACJ,aAAO;AAAA,IAER,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAAA,IAAI,KAAK;AAC/B,aAAO;AAAA,IAER,KAAK;AAAA,IAAI,KAAK;AACb,aAAO;AAAA,EACV;AAEC,SAAO;AACR;AAMO,SAASW,GAAOvC,GAAO;AAC7B,SAAOoB,KAAOC,KAAS,GAAGpB,KAASa,GAAOU,KAAaxB,CAAK,GAAGsB,KAAW,GAAG,CAAA;AAC9E;AAMO,SAASkB,GAASxC,GAAO;AAC/B,SAAOwB,KAAa,IAAIxB;AACzB;AAMO,SAASyC,GAASb,GAAM;AAC9B,SAAOzB,GAAKkC,GAAMf,KAAW,GAAGoB,GAAUd,MAAS,KAAKA,IAAO,IAAIA,MAAS,KAAKA,IAAO,IAAIA,CAAI,CAAC,CAAC;AACnG;AAcO,SAASe,GAAYf,GAAM;AACjC,UAAOL,KAAYY,GAAI,MAClBZ,KAAY;AACf,IAAAW,GAAI;AAIN,SAAOI,GAAMV,CAAI,IAAI,KAAKU,GAAMf,EAAS,IAAI,IAAI,KAAK;AACvD;AAwBO,SAASqB,GAAUlC,GAAOmC,GAAO;AACvC,SAAO,EAAEA,KAASX,GAAI,KAEjB,EAAAX,KAAY,MAAMA,KAAY,OAAQA,KAAY,MAAMA,KAAY,MAAQA,KAAY,MAAMA,KAAY;AAA9G;AAGD,SAAOc,GAAM3B,GAAO0B,GAAK,KAAMS,IAAQ,KAAKV,QAAU,MAAMD,GAAI,KAAM,GAAG;AAC1E;AAMO,SAASQ,GAAWd,GAAM;AAChC,SAAOM,GAAI;AACV,YAAQX,IAAS;AAAA,MAEhB,KAAKK;AACJ,eAAON;AAAA,MAER,KAAK;AAAA,MAAI,KAAK;AACb,QAAIM,MAAS,MAAMA,MAAS,MAC3Bc,GAAUnB,EAAS;AACpB;AAAA,MAED,KAAK;AACJ,QAAIK,MAAS,MACZc,GAAUd,CAAI;AACf;AAAA,MAED,KAAK;AACJ,QAAAM,GAAI;AACJ;AAAA,IACJ;AAEC,SAAOZ;AACR;AAOO,SAASwB,GAAWlB,GAAMlB,GAAO;AACvC,SAAOwB,GAAI,KAENN,IAAOL,OAAc;AAGpB,QAAIK,IAAOL,OAAc,MAAWY,GAAI,MAAO;AACnD;AAEF,SAAO,OAAOE,GAAM3B,GAAOY,KAAW,CAAC,IAAI,MAAMzB,GAAK+B,MAAS,KAAKA,IAAOM,GAAI,CAAE;AAClF;AAMO,SAASa,GAAYrC,GAAO;AAClC,SAAO,CAAC4B,GAAMH,IAAM;AACnB,IAAAD,GAAI;AAEL,SAAOG,GAAM3B,GAAOY,EAAQ;AAC7B;AC7OO,SAAS0B,GAAShD,GAAO;AAC/B,SAAOwC,GAAQS,GAAM,IAAI,MAAM,MAAM,MAAM,CAAC,EAAE,GAAGjD,IAAQuC,GAAMvC,CAAK,GAAG,GAAG,CAAC,CAAC,GAAGA,CAAK,CAAC;AACtF;AAcO,SAASiD,GAAOjD,GAAO0B,GAAMC,GAAQ3C,GAAMkE,GAAOC,GAAUC,GAAQC,GAAQC,GAAc;AAiBhG,WAhBI5C,IAAQ,GACR6C,IAAS,GACTtD,IAASmD,GACTI,IAAS,GACTC,IAAW,GACXC,IAAW,GACXC,IAAW,GACXC,IAAW,GACXC,IAAY,GACZtC,IAAY,GACZK,IAAO,IACPC,IAAQqB,GACRpB,IAAWqB,GACXW,IAAY9E,GACZwC,IAAaI,GAEVgC;AACN,YAAQF,IAAWnC,GAAWA,IAAYW,GAAI,GAAE;AAAA,MAE/C,KAAK;AACJ,YAAIwB,KAAY,OAAOxD,GAAOsB,GAAYvB,IAAS,CAAC,KAAK,IAAI;AAC5D,UAAIO,GAAQgB,KAAclB,EAAQmC,GAAQlB,CAAS,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,OAC5EsC,IAAY;AACb;AAAA,QACD;AAAA,MAED,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AACtB,QAAArC,KAAciB,GAAQlB,CAAS;AAC/B;AAAA,MAED,KAAK;AAAA,MAAG,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AAC9B,QAAAC,KAAcmB,GAAWe,CAAQ;AACjC;AAAA,MAED,KAAK;AACJ,QAAAlC,KAAcoB,GAASR,GAAK,IAAK,GAAG,CAAC;AACrC;AAAA,MAED,KAAK;AACJ,gBAAQD,GAAI,GAAE;AAAA,UACb,KAAK;AAAA,UAAI,KAAK;AACb,YAAAnB,GAAO+C,GAAQjB,GAAUZ,GAAI,GAAIE,GAAK,CAAE,GAAGV,GAAMC,CAAM,GAAG2B,CAAY;AACtE;AAAA,UACD;AACC,YAAA9B,KAAc;AAAA,QACpB;AACI;AAAA,MAED,KAAK,MAAMmC;AACV,QAAAN,EAAO3C,GAAO,IAAII,GAAOU,CAAU,IAAIqC;AAAA,MAExC,KAAK,MAAMF;AAAA,MAAU,KAAK;AAAA,MAAI,KAAK;AAClC,gBAAQpC,GAAS;AAAA,UAEhB,KAAK;AAAA,UAAG,KAAK;AAAK,YAAAqC,IAAW;AAAA,UAE7B,KAAK,KAAKL;AAAQ,YAAIM,KAAa,OAAIrC,IAAalB,EAAQkB,GAAY,OAAO,EAAE,IAC5EiC,IAAW,KAAM3C,GAAOU,CAAU,IAAIvB,KACzCe,GAAOyC,IAAW,KAAKO,GAAYxC,IAAa,KAAKxC,GAAM2C,GAAQ1B,IAAS,CAAC,IAAI+D,GAAY1D,EAAQkB,GAAY,KAAK,EAAE,IAAI,KAAKxC,GAAM2C,GAAQ1B,IAAS,CAAC,GAAGqD,CAAY;AACzK;AAAA,UAED,KAAK;AAAI,YAAA9B,KAAc;AAAA,UAEvB;AAGC,gBAFAR,GAAO8C,IAAYG,GAAQzC,GAAYE,GAAMC,GAAQjB,GAAO6C,GAAQL,GAAOG,GAAQzB,GAAMC,IAAQ,CAAA,GAAIC,IAAW,CAAA,GAAI7B,CAAM,GAAGkD,CAAQ,GAEjI5B,MAAc;AACjB,kBAAIgC,MAAW;AACd,gBAAAN,GAAMzB,GAAYE,GAAMoC,GAAWA,GAAWjC,GAAOsB,GAAUlD,GAAQoD,GAAQvB,CAAQ;AAAA;AAEvF,wBAAQ0B,MAAW,MAAMtD,GAAOsB,GAAY,CAAC,MAAM,MAAM,MAAMgC,GAAM;AAAA,kBAEpE,KAAK;AAAA,kBAAK,KAAK;AAAA,kBAAK,KAAK;AAAA,kBAAK,KAAK;AAClC,oBAAAP,GAAMjD,GAAO8D,GAAWA,GAAW9E,KAAQgC,GAAOiD,GAAQjE,GAAO8D,GAAWA,GAAW,GAAG,GAAGZ,GAAOG,GAAQzB,GAAMsB,GAAOrB,IAAQ,IAAI5B,CAAM,GAAG6B,CAAQ,GAAGoB,GAAOpB,GAAU7B,GAAQoD,GAAQrE,IAAO6C,IAAQC,CAAQ;AACjN;AAAA,kBACD;AACC,oBAAAmB,GAAMzB,GAAYsC,GAAWA,GAAWA,GAAW,CAAC,EAAE,GAAGhC,GAAU,GAAGuB,GAAQvB,CAAQ;AAAA,gBAChG;AAAA,QACA;AAEI,QAAApB,IAAQ6C,IAASE,IAAW,GAAGE,IAAWE,IAAY,GAAGjC,IAAOJ,IAAa,IAAIvB,IAASmD;AAC1F;AAAA,MAED,KAAK;AACJ,QAAAnD,IAAS,IAAIa,GAAOU,CAAU,GAAGiC,IAAWC;AAAA,MAC7C;AACC,YAAIC,IAAW;AACd,cAAIpC,KAAa;AAChB,cAAEoC;AAAA,mBACMpC,KAAa,OAAOoC,OAAc,KAAK1B,GAAI,KAAM;AACzD;AAAA;AAEF,gBAAQT,KAAc3B,GAAK0B,CAAS,GAAGA,IAAYoC,GAAQ;AAAA,UAE1D,KAAK;AACJ,YAAAE,IAAYN,IAAS,IAAI,KAAK/B,KAAc,MAAM;AAClD;AAAA,UAED,KAAK;AACJ,YAAA6B,EAAO3C,GAAO,KAAKI,GAAOU,CAAU,IAAI,KAAKqC,GAAWA,IAAY;AACpE;AAAA,UAED,KAAK;AAEJ,YAAI1B,GAAI,MAAO,OACdX,KAAciB,GAAQP,GAAI,CAAE,IAE7BsB,IAASrB,GAAI,GAAIoB,IAAStD,IAASa,GAAOc,IAAOJ,KAAcuB,GAAWX,GAAK,CAAE,CAAC,GAAGb;AACrF;AAAA,UAED,KAAK;AACJ,YAAImC,MAAa,MAAM5C,GAAOU,CAAU,KAAK,MAC5CmC,IAAW;AAAA,QAClB;AAAA,IACA;AAEC,SAAOR;AACR;AAgBO,SAASc,GAASjE,GAAO0B,GAAMC,GAAQjB,GAAO6C,GAAQL,GAAOG,GAAQzB,GAAMC,GAAOC,GAAU7B,GAAQ;AAK1G,WAJIiE,IAAOX,IAAS,GAChBvE,IAAOuE,MAAW,IAAIL,IAAQ,CAAC,EAAE,GACjCiB,IAAOpD,GAAO/B,CAAI,GAEbR,IAAI,GAAG4F,IAAI,GAAGC,IAAI,GAAG7F,IAAIkC,GAAO,EAAElC;AAC1C,aAAS8F,IAAI,GAAGC,IAAI5D,GAAOX,GAAOkE,IAAO,GAAGA,IAAOtE,GAAIwE,IAAIf,EAAO7E,CAAC,CAAC,CAAC,GAAGgG,IAAIxE,GAAOsE,IAAIH,GAAM,EAAEG;AAC9F,OAAIE,IAAIrE,GAAKiE,IAAI,IAAIpF,EAAKsF,CAAC,IAAI,MAAMC,IAAIjE,EAAQiE,GAAG,QAAQvF,EAAKsF,CAAC,CAAC,CAAC,OACnEzC,EAAMwC,GAAG,IAAIG;AAEhB,SAAO/C,GAAKzB,GAAO0B,GAAMC,GAAQ4B,MAAW,IAAIhE,KAAUqC,GAAMC,GAAOC,GAAU7B,CAAM;AACxF;AAQO,SAAS8D,GAAS/D,GAAO0B,GAAMC,GAAQ;AAC7C,SAAOF,GAAKzB,GAAO0B,GAAMC,GAAQrC,IAASO,GAAKmC,GAAI,CAAE,GAAGrB,GAAOX,GAAO,GAAG,EAAE,GAAG,CAAC;AAChF;AASO,SAASgE,GAAahE,GAAO0B,GAAMC,GAAQ1B,GAAQ;AACzD,SAAOwB,GAAKzB,GAAO0B,GAAMC,GAAQnC,IAAamB,GAAOX,GAAO,GAAGC,CAAM,GAAGU,GAAOX,GAAOC,IAAS,GAAG,EAAE,GAAGA,CAAM;AAC9G;ACtLO,SAASwE,GAAW3C,GAAUX,GAAU;AAI9C,WAHIuD,IAAS,IACTzE,IAASc,GAAOe,CAAQ,GAEnB,IAAI,GAAG,IAAI7B,GAAQ;AAC3B,IAAAyE,KAAUvD,EAASW,EAAS,CAAC,GAAG,GAAGA,GAAUX,CAAQ,KAAK;AAE3D,SAAOuD;AACR;AASO,SAASC,GAAWC,GAASlE,GAAOoB,GAAUX,GAAU;AAC9D,UAAQyD,EAAQ,MAAI;AAAA,IACnB,KAAKjF;AAAO,UAAIiF,EAAQ,SAAS,OAAQ;AAAA,IACzC,KAAKnF;AAAA,IAAQ,KAAKD;AAAa,aAAOoF,EAAQ,SAASA,EAAQ,UAAUA,EAAQ;AAAA,IACjF,KAAKtF;AAAS,aAAO;AAAA,IACrB,KAAKI;AAAW,aAAOkF,EAAQ,SAASA,EAAQ,QAAQ,MAAMH,GAAUG,EAAQ,UAAUzD,CAAQ,IAAI;AAAA,IACtG,KAAK5B;AAAS,MAAAqF,EAAQ,QAAQA,EAAQ,MAAM,KAAK,GAAG;AAAA,EACtD;AAEC,SAAO9D,GAAOgB,IAAW2C,GAAUG,EAAQ,UAAUzD,CAAQ,CAAC,IAAIyD,EAAQ,SAASA,EAAQ,QAAQ,MAAM9C,IAAW,MAAM;AAC3H;ACzBO,SAAS+C,GAAYC,GAAY;AACvC,MAAI7E,IAASc,GAAO+D,CAAU;AAE9B,SAAO,SAAUF,GAASlE,GAAOoB,GAAUX,GAAU;AAGpD,aAFIuD,IAAS,IAEJlG,IAAI,GAAGA,IAAIyB,GAAQzB;AAC3B,MAAAkG,KAAUI,EAAWtG,CAAC,EAAEoG,GAASlE,GAAOoB,GAAUX,CAAQ,KAAK;AAEhE,WAAOuD;AAAA,EACR;AACD;AAMO,SAASK,GAAW5D,GAAU;AACpC,SAAO,SAAUyD,GAAS;AACzB,IAAKA,EAAQ,SACRA,IAAUA,EAAQ,WACrBzD,EAASyD,CAAO;AAAA,EACnB;AACD;ACjCA,SAASI,GAAQC,GAAI;AACnB,MAAIC,IAAQ,uBAAO,OAAO,IAAI;AAC9B,SAAO,SAAUC,GAAK;AACpB,WAAID,EAAMC,CAAG,MAAM,WAAWD,EAAMC,CAAG,IAAIF,EAAGE,CAAG,IAC1CD,EAAMC,CAAG;AAAA,EAClB;AACF;ACDA,IAAIC,KAA8B,SAAqCxE,GAAOyC,GAAQ3C,GAAO;AAI3F,WAHIgD,IAAW,GACXnC,IAAY,GAGdmC,IAAWnC,GACXA,IAAYY,GAAI,GAEZuB,MAAa,MAAMnC,MAAc,OACnC8B,EAAO3C,CAAK,IAAI,IAGd,CAAA4B,GAAMf,CAAS;AAInB,IAAAW,GAAI;AAGN,SAAOG,GAAMzB,GAAOU,EAAQ;AAC9B,GAEI+D,KAAU,SAAiBC,GAAQjC,GAAQ;AAE7C,MAAI3C,IAAQ,IACRa,IAAY;AAEhB;AACE,YAAQe,GAAMf,CAAS,GAAC;AAAA,MACtB,KAAK;AAEH,QAAIA,MAAc,MAAMY,GAAI,MAAO,OAKjCkB,EAAO3C,CAAK,IAAI,IAGlB4E,EAAO5E,CAAK,KAAK0E,GAA4B9D,KAAW,GAAG+B,GAAQ3C,CAAK;AACxE;AAAA,MAEF,KAAK;AACH,QAAA4E,EAAO5E,CAAK,KAAK+B,GAAQlB,CAAS;AAClC;AAAA,MAEF,KAAK;AAEH,YAAIA,MAAc,IAAI;AAEpB,UAAA+D,EAAO,EAAE5E,CAAK,IAAIyB,GAAI,MAAO,KAAK,QAAQ,IAC1CkB,EAAO3C,CAAK,IAAI4E,EAAO5E,CAAK,EAAE;AAC9B;AAAA,QACF;AAAA,MAIF;AACE,QAAA4E,EAAO5E,CAAK,KAAKb,GAAK0B,CAAS;AAAA,IACvC;AAAA,SACWA,IAAYW,GAAI;AAEzB,SAAOoD;AACT,GAEIC,KAAW,SAAkBvF,GAAOqD,GAAQ;AAC9C,SAAOb,GAAQ6C,GAAQ9C,GAAMvC,CAAK,GAAGqD,CAAM,CAAC;AAC9C,GAGImC,KAA+B,oBAAI,QAAO,GAC1CC,KAAS,SAAgBb,GAAS;AACpC,MAAI,EAAAA,EAAQ,SAAS,UAAU,CAACA,EAAQ;AAAA;AAAA,EAExCA,EAAQ,SAAS,IAQjB;AAAA,aAJI5E,IAAQ4E,EAAQ,OAChBjD,IAASiD,EAAQ,QACjBc,IAAiBd,EAAQ,WAAWjD,EAAO,UAAUiD,EAAQ,SAASjD,EAAO,MAE1EA,EAAO,SAAS;AAErB,UADAA,IAASA,EAAO,QACZ,CAACA,EAAQ;AAIf,QAAI,EAAAiD,EAAQ,MAAM,WAAW,KAAK5E,EAAM,WAAW,CAAC,MAAM,MAEvD,CAACwF,GAAc,IAAI7D,CAAM,MAMxB,CAAA+D,GAIJ;AAAA,MAAAF,GAAc,IAAIZ,GAAS,EAAI;AAK/B,eAJIvB,IAAS,CAAA,GACTH,IAAQqC,GAASvF,GAAOqD,CAAM,GAC9BsC,IAAchE,EAAO,OAEhBnD,IAAI,GAAG6F,IAAI,GAAG7F,IAAI0E,EAAM,QAAQ1E;AACvC,iBAAS4F,IAAI,GAAGA,IAAIuB,EAAY,QAAQvB,KAAKC;AAC3C,UAAAO,EAAQ,MAAMP,CAAC,IAAIhB,EAAO7E,CAAC,IAAI0E,EAAM1E,CAAC,EAAE,QAAQ,QAAQmH,EAAYvB,CAAC,CAAC,IAAIuB,EAAYvB,CAAC,IAAI,MAAMlB,EAAM1E,CAAC;AAAA;AAAA;AAG9G,GACIoH,KAAc,SAAqBhB,GAAS;AAC9C,MAAIA,EAAQ,SAAS,QAAQ;AAC3B,QAAI5E,IAAQ4E,EAAQ;AAEpB;AAAA,IACA5E,EAAM,WAAW,CAAC,MAAM;AAAA,IACxBA,EAAM,WAAW,CAAC,MAAM,OAEtB4E,EAAQ,SAAY,IACpBA,EAAQ,QAAQ;AAAA,EAEpB;AACF;AAIA,SAASiB,GAAO7F,GAAOC,GAAQ;AAC7B,UAAQF,GAAKC,GAAOC,CAAM,GAAC;AAAA,IAEzB,KAAK;AACH,aAAOZ,IAAS,WAAWW,IAAQA;AAAA,IAGrC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IAEL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOX,IAASW,IAAQA;AAAA,IAG1B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOX,IAASW,IAAQZ,KAAMY,IAAQb,KAAKa,IAAQA;AAAA,IAGrD,KAAK;AAAA,IACL,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAKa,IAAQA;AAAA,IAGvC,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAK,UAAUa,IAAQA;AAAA,IAGjD,KAAK;AACH,aAAOX,IAASW,IAAQM,EAAQN,GAAO,kBAAkBX,IAAS,aAAaF,KAAK,WAAW,IAAIa;AAAA,IAGrG,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAK,eAAemB,EAAQN,GAAO,eAAe,EAAE,IAAIA;AAAA,IAGlF,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAK,mBAAmBmB,EAAQN,GAAO,6BAA6B,EAAE,IAAIA;AAAA,IAGpG,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,UAAU,UAAU,IAAIA;AAAA,IAGtE,KAAK;AACH,aAAOX,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,SAAS,gBAAgB,IAAIA;AAAA,IAG3E,KAAK;AACH,aAAOX,IAAS,SAASiB,EAAQN,GAAO,SAAS,EAAE,IAAIX,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,QAAQ,UAAU,IAAIA;AAAA,IAGpH,KAAK;AACH,aAAOX,IAASiB,EAAQN,GAAO,sBAAsB,OAAOX,IAAS,IAAI,IAAIW;AAAA,IAG/E,KAAK;AACH,aAAOM,EAAQA,EAAQA,EAAQN,GAAO,gBAAgBX,IAAS,IAAI,GAAG,eAAeA,IAAS,IAAI,GAAGW,GAAO,EAAE,IAAIA;AAAA,IAGpH,KAAK;AAAA,IACL,KAAK;AACH,aAAOM,EAAQN,GAAO,qBAAqBX,IAAS,QAAa;AAAA,IAGnE,KAAK;AACH,aAAOiB,EAAQA,EAAQN,GAAO,qBAAqBX,IAAS,gBAAgBF,KAAK,cAAc,GAAG,cAAc,SAAS,IAAIE,IAASW,IAAQA;AAAA,IAGhJ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAOM,EAAQN,GAAO,mBAAmBX,IAAS,MAAM,IAAIW;AAAA,IAG9D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAEH,UAAIc,GAAOd,CAAK,IAAI,IAAIC,IAAS,EAAG,SAAQC,GAAOF,GAAOC,IAAS,CAAC,GAAC;AAAA,QAEnE,KAAK;AAEH,cAAIC,GAAOF,GAAOC,IAAS,CAAC,MAAM,GAAI;AAAA,QAGxC,KAAK;AACH,iBAAOK,EAAQN,GAAO,oBAAoB,OAAOX,IAAS,YAAiBD,MAAOc,GAAOF,GAAOC,IAAS,CAAC,KAAK,MAAM,OAAO,QAAQ,IAAID;AAAA,QAG1I,KAAK;AACH,iBAAO,CAACQ,GAAQR,GAAO,SAAS,IAAI6F,GAAOvF,EAAQN,GAAO,WAAW,gBAAgB,GAAGC,CAAM,IAAID,IAAQA;AAAA,MACpH;AACM;AAAA,IAGF,KAAK;AAEH,UAAIE,GAAOF,GAAOC,IAAS,CAAC,MAAM,IAAK;AAAA,IAGzC,KAAK;AACH,cAAQC,GAAOF,GAAOc,GAAOd,CAAK,IAAI,KAAK,CAACQ,GAAQR,GAAO,YAAY,KAAK,GAAG,GAAC;AAAA,QAE9E,KAAK;AACH,iBAAOM,EAAQN,GAAO,KAAK,MAAMX,CAAM,IAAIW;AAAA,QAG7C,KAAK;AACH,iBAAOM,EAAQN,GAAO,yBAAyB,OAAOX,KAAUa,GAAOF,GAAO,EAAE,MAAM,KAAK,YAAY,MAAM,YAAiBX,IAAS,WAAgBF,KAAK,SAAS,IAAIa;AAAA,MACnL;AAEM;AAAA,IAGF,KAAK;AACH,cAAQE,GAAOF,GAAOC,IAAS,EAAE,GAAC;AAAA,QAEhC,KAAK;AACH,iBAAOZ,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,sBAAsB,IAAI,IAAIA;AAAA,QAG5E,KAAK;AACH,iBAAOX,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,sBAAsB,OAAO,IAAIA;AAAA,QAG/E,KAAK;AACH,iBAAOX,IAASW,IAAQb,KAAKmB,EAAQN,GAAO,sBAAsB,IAAI,IAAIA;AAAA,MACpF;AAEM,aAAOX,IAASW,IAAQb,KAAKa,IAAQA;AAAA,EAC3C;AAEE,SAAOA;AACT;AAEA,IAAI8F,KAAW,SAAkBlB,GAASlE,GAAOoB,GAAUX,GAAU;AACnE,MAAIyD,EAAQ,SAAS,MAAQ,CAACA,EAAQ,OAAW,SAAQA,EAAQ,MAAI;AAAA,IACnE,KAAKpF;AACH,MAAAoF,EAAQ,SAAYiB,GAAOjB,EAAQ,OAAOA,EAAQ,MAAM;AACxD;AAAA,IAEF,KAAKlF;AACH,aAAO+E,GAAU,CAAC1C,GAAK6C,GAAS;AAAA,QAC9B,OAAOtE,EAAQsE,EAAQ,OAAO,KAAK,MAAMvF,CAAM;AAAA,MACvD,CAAO,CAAC,GAAG8B,CAAQ;AAAA,IAEf,KAAK5B;AACH,UAAIqF,EAAQ,OAAQ,QAAO1D,GAAQ0D,EAAQ,OAAO,SAAU5E,GAAO;AACjE,gBAAQI,GAAMJ,GAAO,uBAAuB,GAAC;AAAA,UAE3C,KAAK;AAAA,UACL,KAAK;AACH,mBAAOyE,GAAU,CAAC1C,GAAK6C,GAAS;AAAA,cAC9B,OAAO,CAACtE,EAAQN,GAAO,eAAe,MAAMZ,KAAM,IAAI,CAAC;AAAA,YACrE,CAAa,CAAC,GAAG+B,CAAQ;AAAA,UAGf,KAAK;AACH,mBAAOsD,GAAU,CAAC1C,GAAK6C,GAAS;AAAA,cAC9B,OAAO,CAACtE,EAAQN,GAAO,cAAc,MAAMX,IAAS,UAAU,CAAC;AAAA,YAC7E,CAAa,GAAG0C,GAAK6C,GAAS;AAAA,cAChB,OAAO,CAACtE,EAAQN,GAAO,cAAc,MAAMZ,KAAM,IAAI,CAAC;AAAA,YACpE,CAAa,GAAG2C,GAAK6C,GAAS;AAAA,cAChB,OAAO,CAACtE,EAAQN,GAAO,cAAcb,KAAK,UAAU,CAAC;AAAA,YACnE,CAAa,CAAC,GAAGgC,CAAQ;AAAA,QACzB;AAEQ,eAAO;AAAA,MACT,CAAC;AAAA,EACP;AACA,GAEI4E,KAAuB,CAACD,EAAQ,GAEhCE,KAAc,SAAqBtH,GAAS;AAC9C,MAAIuH,IAAMvH,EAAQ;AAElB,MAAIuH,MAAQ,OAAO;AACjB,QAAIC,IAAY,SAAS,iBAAiB,mCAAmC;AAK7E,UAAM,UAAU,QAAQ,KAAKA,GAAW,SAAUzE,GAAM;AAOtD,UAAI0E,IAAuB1E,EAAK,aAAa,cAAc;AAE3D,MAAI0E,EAAqB,QAAQ,GAAG,MAAM,OAI1C,SAAS,KAAK,YAAY1E,CAAI,GAC9BA,EAAK,aAAa,UAAU,EAAE;AAAA,IAChC,CAAC;AAAA,EACH;AAEA,MAAI2E,IAAgB1H,EAAQ,iBAAiBqH,IAEzCM,IAAW,CAAA,GACXC,GACAC,IAAiB,CAAA;AAGnB,EAAAD,IAAY5H,EAAQ,aAAa,SAAS,MAC1C,MAAM,UAAU,QAAQ;AAAA;AAAA;AAAA,IAExB,SAAS,iBAAiB,0BAA2BuH,IAAM,KAAM;AAAA,IAAG,SAAUxE,GAAM;AAGlF,eAFI+E,IAAS/E,EAAK,aAAa,cAAc,EAAE,MAAM,GAAG,GAE/CjD,IAAI,GAAGA,IAAIgI,EAAO,QAAQhI;AACjC,QAAA6H,EAASG,EAAOhI,CAAC,CAAC,IAAI;AAGxB,MAAA+H,EAAe,KAAK9E,CAAI;AAAA,IAC1B;AAAA,EAAC;AAGH,MAAIgF,GAEAC,IAAqB,CAACjB,IAAQG,EAAW;AAE7C;AACE,QAAIe,GACAC,IAAoB,CAACjC,IAAWI,GAAU,SAAU/F,GAAM;AAC5D,MAAA2H,EAAa,OAAO3H,CAAI;AAAA,IAC1B,CAAC,CAAC,GACE6H,IAAahC,GAAW6B,EAAmB,OAAON,GAAeQ,CAAiB,CAAC,GAEnFE,IAAS,SAAgBC,GAAQ;AACnC,aAAOtC,GAAUzB,GAAQ+D,CAAM,GAAGF,CAAU;AAAA,IAC9C;AAEA,IAAAJ,IAAU,SAAgBO,GAAUC,GAAYhI,GAAOiI,GAAa;AAClE,MAAAP,IAAe1H,GAEf6H,EAAOE,IAAWA,IAAW,MAAMC,EAAW,SAAS,MAAMA,EAAW,MAAM,GAE1EC,MACFhC,EAAM,SAAS+B,EAAW,IAAI,IAAI;AAAA,IAEtC;AAAA,EACF;AAEA,MAAI/B,IAAQ;AAAA,IACV,KAAKe;AAAA,IACL,OAAO,IAAItH,GAAW;AAAA,MACpB,KAAKsH;AAAA,MACL,WAAWK;AAAA,MACX,OAAO5H,EAAQ;AAAA,MACf,QAAQA,EAAQ;AAAA,MAChB,SAASA,EAAQ;AAAA,MACjB,gBAAgBA,EAAQ;AAAA,IAC9B,CAAK;AAAA,IACD,OAAOA,EAAQ;AAAA,IACf,UAAU2H;AAAA,IACV,YAAY,CAAA;AAAA,IACZ,QAAQI;AAAA,EACZ;AACE,SAAAvB,EAAM,MAAM,QAAQqB,CAAc,GAC3BrB;AACT;;;;;;;;;;;;;;;;;AC1aa,MAAIiC,IAAe,OAAO,UAApB,cAA4B,OAAO,KAAIC,IAAED,IAAE,OAAO,IAAI,eAAe,IAAE,OAAME,IAAEF,IAAE,OAAO,IAAI,cAAc,IAAE,OAAMhJ,IAAEgJ,IAAE,OAAO,IAAI,gBAAgB,IAAE,OAAMG,IAAEH,IAAE,OAAO,IAAI,mBAAmB,IAAE,OAAMI,IAAEJ,IAAE,OAAO,IAAI,gBAAgB,IAAE,OAAMK,IAAEL,IAAE,OAAO,IAAI,gBAAgB,IAAE,OAAM9C,IAAE8C,IAAE,OAAO,IAAI,eAAe,IAAE,OAAMM,IAAEN,IAAE,OAAO,IAAI,kBAAkB,IAAE,OAAMO,IAAEP,IAAE,OAAO,IAAI,uBAAuB,IAAE,OAAMjJ,IAAEiJ,IAAE,OAAO,IAAI,mBAAmB,IAAE,OAAMQ,IAAER,IAAE,OAAO,IAAI,gBAAgB,IAAE,OAAMS,IAAET,IACpf,OAAO,IAAI,qBAAqB,IAAE,OAAM9I,IAAE8I,IAAE,OAAO,IAAI,YAAY,IAAE,OAAM/I,IAAE+I,IAAE,OAAO,IAAI,YAAY,IAAE,OAAMU,IAAEV,IAAE,OAAO,IAAI,aAAa,IAAE,OAAMW,IAAEX,IAAE,OAAO,IAAI,mBAAmB,IAAE,OAAM7C,IAAE6C,IAAE,OAAO,IAAI,iBAAiB,IAAE,OAAM5C,IAAE4C,IAAE,OAAO,IAAI,aAAa,IAAE;AAClQ,WAAS3C,EAAEuD,GAAE;AAAC,QAAc,OAAOA,KAAlB,YAA4BA,MAAP,MAAS;AAAC,UAAIC,IAAED,EAAE;AAAS,cAAOC,GAAC;AAAA,QAAE,KAAKZ;AAAE,kBAAOW,IAAEA,EAAE,MAAKA,GAAC;AAAA,YAAE,KAAKN;AAAA,YAAE,KAAKC;AAAA,YAAE,KAAKvJ;AAAA,YAAE,KAAKoJ;AAAA,YAAE,KAAKD;AAAA,YAAE,KAAKK;AAAE,qBAAOI;AAAA,YAAE;AAAQ,sBAAOA,IAAEA,KAAGA,EAAE,UAASA,GAAC;AAAA,gBAAE,KAAK1D;AAAA,gBAAE,KAAKnG;AAAA,gBAAE,KAAKE;AAAA,gBAAE,KAAKC;AAAA,gBAAE,KAAKmJ;AAAE,yBAAOO;AAAA,gBAAE;AAAQ,yBAAOC;AAAA,cAAC;AAAA,UAAC;AAAA,QAAC,KAAKX;AAAE,iBAAOW;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAASC,EAAEF,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIL;AAAA,EAAC;AAAC,SAAAQ,EAAA,YAAkBT,GAAES,EAAA,iBAAuBR,GAAEQ,oBAAwB7D,GAAE6D,EAAA,kBAAwBV,GAAEU,EAAA,UAAgBd,GAAEc,EAAA,aAAmBhK,GAAEgK,EAAA,WAAiB/J,GAAE+J,SAAa9J,GAAE8J,EAAA,OAAa7J,GAAE6J,EAAA,SAAeb,GAChfa,EAAA,WAAiBX,GAAEW,EAAA,aAAmBZ,GAAEY,EAAA,WAAiBP,GAAEO,EAAA,cAAoB,SAASH,GAAE;AAAC,WAAOE,EAAEF,CAAC,KAAGvD,EAAEuD,CAAC,MAAIN;AAAA,EAAC,GAAES,EAAA,mBAAyBD,GAAEC,EAAA,oBAA0B,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAI1D;AAAA,EAAC,GAAE6D,EAAA,oBAA0B,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIP;AAAA,EAAC,GAAEU,EAAA,YAAkB,SAASH,GAAE;AAAC,WAAiB,OAAOA,KAAlB,YAA4BA,MAAP,QAAUA,EAAE,aAAWX;AAAA,EAAC,GAAEc,EAAA,eAAqB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAI7J;AAAA,EAAC,GAAEgK,EAAA,aAAmB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAI5J;AAAA,EAAC,GAAE+J,EAAA,SAAe,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAI3J;AAAA,EAAC,GAC1d8J,EAAA,SAAe,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAI1J;AAAA,EAAC,GAAE6J,aAAiB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIV;AAAA,EAAC,GAAEa,EAAA,aAAmB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIR;AAAA,EAAC,GAAEW,EAAA,eAAqB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIT;AAAA,EAAC,GAAEY,EAAA,aAAmB,SAASH,GAAE;AAAC,WAAOvD,EAAEuD,CAAC,MAAIJ;AAAA,EAAC,GAC1OO,EAAA,qBAA2B,SAASH,GAAE;AAAC,WAAiB,OAAOA,KAAlB,YAAkC,OAAOA,KAApB,cAAuBA,MAAI5J,KAAG4J,MAAIL,KAAGK,MAAIR,KAAGQ,MAAIT,KAAGS,MAAIJ,KAAGI,MAAIH,KAAc,OAAOG,KAAlB,YAA4BA,MAAP,SAAWA,EAAE,aAAW3J,KAAG2J,EAAE,aAAW1J,KAAG0J,EAAE,aAAWP,KAAGO,EAAE,aAAW1D,KAAG0D,EAAE,aAAW7J,KAAG6J,EAAE,aAAWD,KAAGC,EAAE,aAAWzD,KAAGyD,EAAE,aAAWxD,KAAGwD,EAAE,aAAWF;AAAA,EAAE,GAAEK,EAAA,SAAe1D;;;;;;;;;;;;;wBCD/T,QAAQ,IAAI,aAAa,gBAC1B,WAAW;AAKd,QAAI2D,IAAY,OAAO,UAAW,cAAc,OAAO,KACnDC,IAAqBD,IAAY,OAAO,IAAI,eAAe,IAAI,OAC/DE,IAAoBF,IAAY,OAAO,IAAI,cAAc,IAAI,OAC7DG,IAAsBH,IAAY,OAAO,IAAI,gBAAgB,IAAI,OACjEI,IAAyBJ,IAAY,OAAO,IAAI,mBAAmB,IAAI,OACvEK,IAAsBL,IAAY,OAAO,IAAI,gBAAgB,IAAI,OACjEM,IAAsBN,IAAY,OAAO,IAAI,gBAAgB,IAAI,OACjEO,IAAqBP,IAAY,OAAO,IAAI,eAAe,IAAI,OAG/DQ,IAAwBR,IAAY,OAAO,IAAI,kBAAkB,IAAI,OACrES,IAA6BT,IAAY,OAAO,IAAI,uBAAuB,IAAI,OAC/EU,IAAyBV,IAAY,OAAO,IAAI,mBAAmB,IAAI,OACvEW,IAAsBX,IAAY,OAAO,IAAI,gBAAgB,IAAI,OACjEY,IAA2BZ,IAAY,OAAO,IAAI,qBAAqB,IAAI,OAC3Ea,IAAkBb,IAAY,OAAO,IAAI,YAAY,IAAI,OACzDc,IAAkBd,IAAY,OAAO,IAAI,YAAY,IAAI,OACzDe,IAAmBf,IAAY,OAAO,IAAI,aAAa,IAAI,OAC3DgB,IAAyBhB,IAAY,OAAO,IAAI,mBAAmB,IAAI,OACvEiB,IAAuBjB,IAAY,OAAO,IAAI,iBAAiB,IAAI,OACnEkB,IAAmBlB,IAAY,OAAO,IAAI,aAAa,IAAI;AAE/D,aAASmB,EAAmB1H,GAAM;AAChC,aAAO,OAAOA,KAAS,YAAY,OAAOA,KAAS;AAAA,MACnDA,MAAS0G,KAAuB1G,MAASgH,KAA8BhH,MAAS4G,KAAuB5G,MAAS2G,KAA0B3G,MAASkH,KAAuBlH,MAASmH,KAA4B,OAAOnH,KAAS,YAAYA,MAAS,SAASA,EAAK,aAAaqH,KAAmBrH,EAAK,aAAaoH,KAAmBpH,EAAK,aAAa6G,KAAuB7G,EAAK,aAAa8G,KAAsB9G,EAAK,aAAaiH,KAA0BjH,EAAK,aAAauH,KAA0BvH,EAAK,aAAawH,KAAwBxH,EAAK,aAAayH,KAAoBzH,EAAK,aAAasH;AAAA,IACplB;AAEA,aAASK,EAAOC,GAAQ;AACtB,UAAI,OAAOA,KAAW,YAAYA,MAAW,MAAM;AACjD,YAAIC,KAAWD,EAAO;AAEtB,gBAAQC,IAAQ;AAAA,UACd,KAAKrB;AACH,gBAAIxG,KAAO4H,EAAO;AAElB,oBAAQ5H,IAAI;AAAA,cACV,KAAK+G;AAAA,cACL,KAAKC;AAAA,cACL,KAAKN;AAAA,cACL,KAAKE;AAAA,cACL,KAAKD;AAAA,cACL,KAAKO;AACH,uBAAOlH;AAAA,cAET;AACE,oBAAI8H,KAAe9H,MAAQA,GAAK;AAEhC,wBAAQ8H,IAAY;AAAA,kBAClB,KAAKhB;AAAA,kBACL,KAAKG;AAAA,kBACL,KAAKI;AAAA,kBACL,KAAKD;AAAA,kBACL,KAAKP;AACH,2BAAOiB;AAAA,kBAET;AACE,2BAAOD;AAAA;;UAKjB,KAAKpB;AACH,mBAAOoB;AAAA;MAEf;AAAA,IAGA;AAEA,QAAIE,IAAYhB,GACZiB,IAAiBhB,GACjBiB,IAAkBnB,GAClBoB,IAAkBrB,GAClBsB,IAAU3B,GACV4B,IAAanB,GACboB,IAAW3B,GACX4B,IAAOjB,GACPkB,KAAOnB,GACPoB,IAAS/B,GACTgC,IAAW7B,GACX8B,KAAa/B,GACbgC,IAAWzB,GACX0B,IAAsC;AAE1C,aAASC,EAAYjB,GAAQ;AAEzB,aAAKgB,MACHA,IAAsC,IAEtC,QAAQ,KAAQ,+KAAyL,IAItME,EAAiBlB,CAAM,KAAKD,EAAOC,CAAM,MAAMb;AAAA,IACxD;AACA,aAAS+B,EAAiBlB,GAAQ;AAChC,aAAOD,EAAOC,CAAM,MAAMZ;AAAA,IAC5B;AACA,aAAS+B,EAAkBnB,GAAQ;AACjC,aAAOD,EAAOC,CAAM,MAAMd;AAAA,IAC5B;AACA,aAASkC,EAAkBpB,GAAQ;AACjC,aAAOD,EAAOC,CAAM,MAAMf;AAAA,IAC5B;AACA,aAASoC,EAAUrB,GAAQ;AACzB,aAAO,OAAOA,KAAW,YAAYA,MAAW,QAAQA,EAAO,aAAapB;AAAA,IAC9E;AACA,aAAS0C,EAAatB,GAAQ;AAC5B,aAAOD,EAAOC,CAAM,MAAMX;AAAA,IAC5B;AACA,aAASkC,EAAWvB,GAAQ;AAC1B,aAAOD,EAAOC,CAAM,MAAMlB;AAAA,IAC5B;AACA,aAAS0C,EAAOxB,GAAQ;AACtB,aAAOD,EAAOC,CAAM,MAAMP;AAAA,IAC5B;AACA,aAASgC,GAAOzB,GAAQ;AACtB,aAAOD,EAAOC,CAAM,MAAMR;AAAA,IAC5B;AACA,aAASkC,GAAS1B,GAAQ;AACxB,aAAOD,EAAOC,CAAM,MAAMnB;AAAA,IAC5B;AACA,aAAS8C,GAAW3B,GAAQ;AAC1B,aAAOD,EAAOC,CAAM,MAAMhB;AAAA,IAC5B;AACA,aAAS4C,GAAa5B,GAAQ;AAC5B,aAAOD,EAAOC,CAAM,MAAMjB;AAAA,IAC5B;AACA,aAAS8C,GAAW7B,GAAQ;AAC1B,aAAOD,EAAOC,CAAM,MAAMV;AAAA,IAC5B;AAEA,IAAAwC,EAAA,YAAoB3B,GACpB2B,EAAA,iBAAyB1B,GACzB0B,EAAA,kBAA0BzB,GAC1ByB,EAAA,kBAA0BxB,GAC1BwB,EAAA,UAAkBvB,GAClBuB,EAAA,aAAqBtB,GACrBsB,EAAA,WAAmBrB,GACnBqB,EAAA,OAAepB,GACfoB,EAAA,OAAenB,IACfmB,EAAA,SAAiBlB,GACjBkB,EAAA,WAAmBjB,GACnBiB,EAAA,aAAqBhB,IACrBgB,EAAA,WAAmBf,GACnBe,EAAA,cAAsBb,GACtBa,EAAA,mBAA2BZ,GAC3BY,EAAA,oBAA4BX,GAC5BW,EAAA,oBAA4BV,GAC5BU,EAAA,YAAoBT,GACpBS,EAAA,eAAuBR,GACvBQ,EAAA,aAAqBP,GACrBO,EAAA,SAAiBN,GACjBM,EAAA,SAAiBL,IACjBK,EAAA,WAAmBJ,IACnBI,EAAA,aAAqBH,IACrBG,EAAA,eAAuBF,IACvBE,EAAA,aAAqBD,IACrBC,EAAA,qBAA6BhC,GAC7BgC,EAAA,SAAiB/B;AAAA,EACjB,EAAG;;ACjLC,QAAQ,IAAI,aAAa,eAC3BgC,GAAA,UAAiBC,GAAA,IAEjBD,GAAA,UAAiBE,GAAA;qBCHfC,KAAUF,IA4BVG,KAAsB;AAAA,EACxB,UAAY;AAAA,EACZ,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AACb,GACIC,KAAe;AAAA,EACjB,UAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,MAAM;AACR,GACIC,KAAe,CAAA;AACnBA,GAAaH,GAAQ,UAAU,IAAIC;AACnCE,GAAaH,GAAQ,IAAI,IAAIE;AC/C7B,IAAIE,KAAY;AAEhB,SAASC,GAAoBC,GAAYC,GAAkBC,GAAY;AACrE,MAAIC,IAAe;AACnB,SAAAD,EAAW,MAAM,GAAG,EAAE,QAAQ,SAAUE,GAAW;AACjD,IAAIJ,EAAWI,CAAS,MAAM,SAC5BH,EAAiB,KAAKD,EAAWI,CAAS,IAAI,GAAG,IACxCA,MACTD,KAAgBC,IAAY;AAAA,EAEhC,CAAC,GACMD;AACT;AACA,IAAIE,KAAiB,SAAwBnH,GAAO+B,GAAYqF,GAAa;AAC3E,MAAIF,IAAYlH,EAAM,MAAM,MAAM+B,EAAW;AAE7C;AAAA;AAAA;AAAA;AAAA;AAAA,GAKCqF,MAAgB;AAAA;AAAA;AAAA;AAAA,EAIjBR,OAAc,OAAW5G,EAAM,WAAWkH,CAAS,MAAM,WACvDlH,EAAM,WAAWkH,CAAS,IAAInF,EAAW;AAE7C,GACIsF,KAAe,SAAsBrH,GAAO+B,GAAYqF,GAAa;AACvE,EAAAD,GAAenH,GAAO+B,GAAYqF,CAAW;AAC7C,MAAIF,IAAYlH,EAAM,MAAM,MAAM+B,EAAW;AAE7C,MAAI/B,EAAM,SAAS+B,EAAW,IAAI,MAAM,QAAW;AACjD,QAAIuF,IAAUvF;AAEd;AACE,MAAA/B,EAAM,OAAO+B,MAAeuF,IAAU,MAAMJ,IAAY,IAAII,GAAStH,EAAM,OAAO,EAAI,GAEtFsH,IAAUA,EAAQ;AAAA,WACXA,MAAY;AAAA,EACvB;AACF;ACvCA,SAASC,GAAQC,GAAK;AAYpB,WANIlF,IAAI,GAEJnD,GACA7F,IAAI,GACJmO,IAAMD,EAAI,QAEPC,KAAO,GAAG,EAAEnO,GAAGmO,KAAO;AAC3B,IAAAtI,IAAIqI,EAAI,WAAWlO,CAAC,IAAI,OAAQkO,EAAI,WAAW,EAAElO,CAAC,IAAI,QAAS,KAAKkO,EAAI,WAAW,EAAElO,CAAC,IAAI,QAAS,MAAMkO,EAAI,WAAW,EAAElO,CAAC,IAAI,QAAS,IACxI6F;AAAA,KAECA,IAAI,SAAU,eAAeA,MAAM,MAAM,SAAU,KACpDA;AAAA,IAEAA,MAAM,IACNmD;AAAA,KAECnD,IAAI,SAAU,eAAeA,MAAM,MAAM,SAAU;AAAA,KAEnDmD,IAAI,SAAU,eAAeA,MAAM,MAAM,SAAU;AAItD,UAAQmF,GAAG;AAAA,IACT,KAAK;AACH,MAAAnF,MAAMkF,EAAI,WAAWlO,IAAI,CAAC,IAAI,QAAS;AAAA,IAEzC,KAAK;AACH,MAAAgJ,MAAMkF,EAAI,WAAWlO,IAAI,CAAC,IAAI,QAAS;AAAA,IAEzC,KAAK;AACH,MAAAgJ,KAAKkF,EAAI,WAAWlO,CAAC,IAAI,KACzBgJ;AAAA,OAECA,IAAI,SAAU,eAAeA,MAAM,MAAM,SAAU;AAAA,EAC1D;AAIE,SAAAA,KAAKA,MAAM,IACXA;AAAA,GAECA,IAAI,SAAU,eAAeA,MAAM,MAAM,SAAU,OAC3CA,IAAIA,MAAM,QAAQ,GAAG,SAAS,EAAE;AAC3C;ACpDA,IAAIoF,KAAe;AAAA,EACjB,yBAAyB;AAAA,EACzB,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,iBAAiB;AAAA;AAAA,EAEjB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,aAAa;AACf,GC3CIC,KAAiB,cACjBC,KAAiB,+BAEjBC,KAAmB,SAA0BtJ,GAAU;AACzD,SAAOA,EAAS,WAAW,CAAC,MAAM;AACpC,GAEIuJ,KAAqB,SAA4BhN,GAAO;AAC1D,SAAOA,KAAS,QAAQ,OAAOA,KAAU;AAC3C,GAEIiN,KAAkC,gBAAAjI,GAAQ,SAAUkI,GAAW;AACjE,SAAOH,GAAiBG,CAAS,IAAIA,IAAYA,EAAU,QAAQL,IAAgB,KAAK,EAAE,YAAW;AACvG,CAAC,GAEGM,KAAoB,SAA2BlH,GAAKjG,GAAO;AAC7D,UAAQiG,GAAG;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAED,UAAI,OAAOjG,KAAU;AACnB,eAAOA,EAAM,QAAQ8M,IAAgB,SAAU1M,GAAOgN,GAAIC,GAAI;AAC5D,iBAAAC,KAAS;AAAA,YACP,MAAMF;AAAA,YACN,QAAQC;AAAA,YACR,MAAMC;AAAA,UACpB,GACmBF;AAAA,QACT,CAAC;AAAA,EAGX;AAEE,SAAIG,GAAStH,CAAG,MAAM,KAAK,CAAC8G,GAAiB9G,CAAG,KAAK,OAAOjG,KAAU,YAAYA,MAAU,IACnFA,IAAQ,OAGVA;AACT;AAIA,SAASwN,GAAoBC,GAAazB,GAAY0B,GAAe;AACnE,MAAIA,KAAiB;AACnB,WAAO;AAGT,MAAIC,IAAoBD;AAExB,MAAIC,EAAkB,qBAAqB;AAEzC,WAAOA;AAGT,UAAQ,OAAOD,GAAa;AAAA,IAC1B,KAAK;AAED,aAAO;AAAA,IAGX,KAAK,UACH;AACE,UAAIE,IAAYF;AAEhB,UAAIE,EAAU,SAAS;AACrB,eAAAN,KAAS;AAAA,UACP,MAAMM,EAAU;AAAA,UAChB,QAAQA,EAAU;AAAA,UAClB,MAAMN;AAAA,QAClB,GACiBM,EAAU;AAGnB,UAAIC,IAAmBH;AAEvB,UAAIG,EAAiB,WAAW,QAAW;AACzC,YAAI3L,IAAO2L,EAAiB;AAE5B,YAAI3L,MAAS;AAGX,iBAAOA,MAAS;AACd,YAAAoL,KAAS;AAAA,cACP,MAAMpL,EAAK;AAAA,cACX,QAAQA,EAAK;AAAA,cACb,MAAMoL;AAAA,YACtB,GACcpL,IAAOA,EAAK;AAIhB,YAAI6E,IAAS8G,EAAiB,SAAS;AACvC,eAAO9G;AAAA,MACT;AAEA,aAAO+G,GAAuBL,GAAazB,GAAY0B,CAAa;AAAA,IACtE;AAAA,IAEF,KAAK,YACH;AACE,UAAID,MAAgB,QAAW;AAC7B,YAAIM,IAAiBT,IACjBU,IAASN,EAAcD,CAAW;AACtC,eAAAH,KAASS,GACFP,GAAoBC,GAAazB,GAAYgC,CAAM;AAAA,MAC5D;AAEA;AAAA,IACF;AAAA,EACN;AAGE,MAAIC,IAAWP;AAEf,MAAI1B,KAAc;AAChB,WAAOiC;AAGT,MAAIC,IAASlC,EAAWiC,CAAQ;AAChC,SAAOC,MAAW,SAAYA,IAASD;AACzC;AAEA,SAASH,GAAuBL,GAAazB,GAAYmC,GAAK;AAC5D,MAAIC,IAAS;AAEb,MAAI,MAAM,QAAQD,CAAG;AACnB,aAAS,IAAI,GAAG,IAAIA,EAAI,QAAQ;AAC9B,MAAAC,KAAUZ,GAAoBC,GAAazB,GAAYmC,EAAI,CAAC,CAAC,IAAI;AAAA;AAGnE,aAASlI,KAAOkI,GAAK;AACnB,UAAInO,IAAQmO,EAAIlI,CAAG;AAEnB,UAAI,OAAOjG,KAAU,UAAU;AAC7B,YAAIiO,IAAWjO;AAEf,QAAIgM,KAAc,QAAQA,EAAWiC,CAAQ,MAAM,SACjDG,KAAUnI,IAAM,MAAM+F,EAAWiC,CAAQ,IAAI,MACpCjB,GAAmBiB,CAAQ,MACpCG,KAAUnB,GAAiBhH,CAAG,IAAI,MAAMkH,GAAkBlH,GAAKgI,CAAQ,IAAI;AAAA,MAE/E,WAKM,MAAM,QAAQjO,CAAK,KAAK,OAAOA,EAAM,CAAC,KAAM,aAAagM,KAAc,QAAQA,EAAWhM,EAAM,CAAC,CAAC,MAAM;AAC1G,iBAASqO,IAAK,GAAGA,IAAKrO,EAAM,QAAQqO;AAClC,UAAIrB,GAAmBhN,EAAMqO,CAAE,CAAC,MAC9BD,KAAUnB,GAAiBhH,CAAG,IAAI,MAAMkH,GAAkBlH,GAAKjG,EAAMqO,CAAE,CAAC,IAAI;AAAA,WAG3E;AACL,YAAIC,IAAed,GAAoBC,GAAazB,GAAYhM,CAAK;AAErE,gBAAQiG,GAAG;AAAA,UACT,KAAK;AAAA,UACL,KAAK,iBACH;AACE,YAAAmI,KAAUnB,GAAiBhH,CAAG,IAAI,MAAMqI,IAAe;AACvD;AAAA,UACF;AAAA,UAEF;AAGI,YAAAF,KAAUnI,IAAM,MAAMqI,IAAe;AAAA,QAErD;AAAA,MACQ;AAAA,IAEJ;AAGF,SAAOF;AACT;AAEA,IAAIG,KAAe,gCAGfjB;AACJ,SAASkB,GAAgBC,GAAMzC,GAAYyB,GAAa;AACtD,MAAIgB,EAAK,WAAW,KAAK,OAAOA,EAAK,CAAC,KAAM,YAAYA,EAAK,CAAC,MAAM,QAAQA,EAAK,CAAC,EAAE,WAAW;AAC7F,WAAOA,EAAK,CAAC;AAGf,MAAIC,IAAa,IACb3H,IAAS;AACb,EAAAuG,KAAS;AACT,MAAIqB,IAAUF,EAAK,CAAC;AAEpB,MAAIE,KAAW,QAAQA,EAAQ,QAAQ;AACrC,IAAAD,IAAa,IACb3H,KAAUyG,GAAoBC,GAAazB,GAAY2C,CAAO;AAAA,OACzD;AACL,QAAIC,IAAuBD;AAE3B,IAAA5H,KAAU6H,EAAqB,CAAC;AAAA,EAClC;AAGA,WAASpQ,IAAI,GAAGA,IAAIiQ,EAAK,QAAQjQ;AAG/B,QAFAuI,KAAUyG,GAAoBC,GAAazB,GAAYyC,EAAKjQ,CAAC,CAAC,GAE1DkQ,GAAY;AACd,UAAIG,IAAqBF;AAEzB,MAAA5H,KAAU8H,EAAmBrQ,CAAC;AAAA,IAChC;AAIF,EAAA+P,GAAa,YAAY;AAIzB,WAHIO,IAAiB,IACjB1O,IAEIA,IAAQmO,GAAa,KAAKxH,CAAM,OAAO;AAC7C,IAAA+H,KAAkB,MAAM1O,EAAM,CAAC;AAGjC,MAAI2O,IAAOC,GAAWjI,CAAM,IAAI+H;AAEhC,SAAO;AAAA,IACL,MAAMC;AAAA,IACN,QAAQhI;AAAA,IACR,MAAMuG;AAAA,EACV;AACA;ACvOA,IAAI2B,KAAe,SAAsBC,GAAQ;AAC/C,SAAOA,EAAM;AACf,GAEIC,KAAqBC,GAAM,qBAA6BA,GAAM,qBAA6B,IAC3FC,KAA2CF,MAAsBF,ICKjEK,KAAqC,gBAAAF,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/C,OAAO,cAAgB,MAA6B,gBAAApJ,GAAY;AAAA,IAC9D,KAAK;AAAA,EACP,CAAC,IAAI;AAAI;AAEWsJ,GAAoB;AAKxC,IAAIC,KAAmB,SAA0BC,GAAM;AACrD,SAAoB,gBAAAC,EAAW,SAAU5N,GAAO6N,GAAK;AAEnD,QAAIxK,IAAQyK,GAAWL,EAAmB;AAC1C,WAAOE,EAAK3N,GAAOqD,GAAOwK,CAAG;AAAA,EAC/B,CAAC;AACH,GAEIE,KAA8B,gBAAAR,GAAM,cAAc,EAAE,GAEpDS,KAAW,WAAoB;AACjC,SAAOT,GAAM,WAAWQ,EAAY;AACtC,GAyCIE,KAAS,CAAA,EAAG,gBAEZC,KAAe,sCACfC,KAAqB,SAA4BpO,GAAMC,GAAO;AAEhE,MAAIoO,IAAW,CAAA;AAEf,WAASC,KAAQrO;AACf,IAAIiO,GAAO,KAAKjO,GAAOqO,CAAI,MACzBD,EAASC,CAAI,IAAIrO,EAAMqO,CAAI;AAI/B,SAAAD,EAASF,EAAY,IAAInO,GAElBqO;AACT,GAEIE,KAAY,SAAmBC,GAAM;AACvC,MAAIlL,IAAQkL,EAAK,OACbnJ,IAAamJ,EAAK,YAClB9D,IAAc8D,EAAK;AACvB,SAAA/D,GAAenH,GAAO+B,GAAYqF,CAAW,GAC7C+C,GAAyC,WAAY;AACnD,WAAO9C,GAAarH,GAAO+B,GAAYqF,CAAW;AAAA,EACpD,CAAC,GAEM;AACT,GAEI+D,KAAyB,gBAAAd,GAAiB,SAAU1N,GAAOqD,GAAOwK,GAAK;AACzE,MAAIY,IAAUzO,EAAM;AAIpB,EAAI,OAAOyO,KAAY,YAAYpL,EAAM,WAAWoL,CAAO,MAAM,WAC/DA,IAAUpL,EAAM,WAAWoL,CAAO;AAGpC,MAAIC,IAAmB1O,EAAMkO,EAAY,GACrC9D,IAAmB,CAACqE,CAAO,GAC3BlE,IAAY;AAEhB,EAAI,OAAOvK,EAAM,aAAc,WAC7BuK,IAAYL,GAAoB7G,EAAM,YAAY+G,GAAkBpK,EAAM,SAAS,IAC1EA,EAAM,aAAa,SAC5BuK,IAAYvK,EAAM,YAAY;AAGhC,MAAIoF,IAAauH,GAAgBvC,GAAkB,QAAWmD,GAAM,WAAWQ,EAAY,CAAC;AAE5F,EAAAxD,KAAalH,EAAM,MAAM,MAAM+B,EAAW;AAC1C,MAAIgJ,IAAW,CAAA;AAEf,WAASO,KAAS3O;AAChB,IAAIiO,GAAO,KAAKjO,GAAO2O,CAAK,KAAKA,MAAU,SAASA,MAAUT,OAC5DE,EAASO,CAAK,IAAI3O,EAAM2O,CAAK;AAIjC,SAAAP,EAAS,YAAY7D,GAEjBsD,MACFO,EAAS,MAAMP,IAGG,gBAAAN,GAAM,cAAcA,GAAM,UAAU,MAAmB,gBAAAA,GAAM,cAAce,IAAW;AAAA,IACxG,OAAOjL;AAAA,IACP,YAAY+B;AAAA,IACZ,aAAa,OAAOsJ,KAAqB;AAAA,EAC7C,CAAG,GAAgB,gBAAAnB,GAAM,cAAcmB,GAAkBN,CAAQ,CAAC;AAClE,CAAC,GAEGQ,KAAYJ,IC7IZK,KAAM,SAAa9O,GAAMC,GAAO;AAElC,MAAI4M,IAAO;AAEX,MAAI5M,KAAS,QAAQ,CAACiO,GAAO,KAAKjO,GAAO,KAAK;AAC5C,WAAOuN,GAAM,cAAc,MAAM,QAAWX,CAAI;AAGlD,MAAIkC,IAAalC,EAAK,QAClBmC,IAAwB,IAAI,MAAMD,CAAU;AAChD,EAAAC,EAAsB,CAAC,IAAIP,IAC3BO,EAAsB,CAAC,IAAIZ,GAAmBpO,GAAMC,CAAK;AAEzD,WAASrD,IAAI,GAAGA,IAAImS,GAAYnS;AAC9B,IAAAoS,EAAsBpS,CAAC,IAAIiQ,EAAKjQ,CAAC;AAGnC,SAAO4Q,GAAM,cAAc,MAAM,MAAMwB,CAAqB;AAC9D;AAAA,CAEC,SAAUC,GAAM;AACf,MAAIC;AAEJ,EAAqBA,MAAQA,IAAMD,EAAK,QAAQA,EAAK,MAAM,CAAA;AAC7D,GAAGH,OAAQA,KAAM,CAAA,EAAG;AAsEpB,SAASK,IAAM;AACb,WAASC,IAAO,UAAU,QAAQvC,IAAO,IAAI,MAAMuC,CAAI,GAAGd,IAAO,GAAGA,IAAOc,GAAMd;AAC/E,IAAAzB,EAAKyB,CAAI,IAAI,UAAUA,CAAI;AAG7B,SAAO1B,GAAgBC,CAAI;AAC7B;AAEA,SAASb,KAAY;AACnB,MAAIqD,IAAaF,EAAI,MAAM,QAAQ,SAAS,GACxChC,IAAO,eAAekC,EAAW;AACrC,SAAO;AAAA,IACL,MAAMlC;AAAA,IACN,QAAQ,gBAAgBA,IAAO,MAAMkC,EAAW,SAAS;AAAA,IACzD,MAAM;AAAA,IACN,UAAU,WAAoB;AAC5B,aAAO,UAAU,KAAK,OAAO,MAAM,KAAK,SAAS;AAAA,IACnD;AAAA,EACJ;AACA;AC1HA,IAAIC,KAAkB,ijIAElBC,KAA6B,gBAAAnM;AAAA,EAAQ,SAAUoM,GAAM;AACvD,WAAOF,GAAgB,KAAKE,CAAI,KAAKA,EAAK,WAAW,CAAC,MAAM,OAEzDA,EAAK,WAAW,CAAC,MAAM,OAEvBA,EAAK,WAAW,CAAC,IAAI;AAAA,EAC1B;AAAA;AAEA,GCHIC,KAA2BF,IAE3BG,KAA2B,SAAkCrL,GAAK;AACpE,SAAOA,MAAQ;AACjB,GAEIsL,KAA8B,SAAqChT,GAAK;AAC1E,SAAO,OAAOA,KAAQ;AAAA;AAAA;AAAA,EAGtBA,EAAI,WAAW,CAAC,IAAI,KAAK8S,KAA2BC;AACtD,GACIE,KAA4B,SAAmCjT,GAAKG,GAAS+S,GAAQ;AACvF,MAAIC;AAEJ,MAAIhT,GAAS;AACX,QAAIiT,IAA2BjT,EAAQ;AACvC,IAAAgT,IAAoBnT,EAAI,yBAAyBoT,IAA2B,SAAUC,GAAU;AAC9F,aAAOrT,EAAI,sBAAsBqT,CAAQ,KAAKD,EAAyBC,CAAQ;AAAA,IACjF,IAAID;AAAA,EACN;AAEA,SAAI,OAAOD,KAAsB,cAAcD,MAC7CC,IAAoBnT,EAAI,wBAGnBmT;AACT,GAEIvB,KAAY,SAAmBC,GAAM;AACvC,MAAIlL,IAAQkL,EAAK,OACbnJ,IAAamJ,EAAK,YAClB9D,IAAc8D,EAAK;AACvB,SAAA/D,GAAenH,GAAO+B,GAAYqF,CAAW,GAC7C+C,GAAyC,WAAY;AACnD,WAAO9C,GAAarH,GAAO+B,GAAYqF,CAAW;AAAA,EACpD,CAAC,GAEM;AACT,GAEIuF,KAAe,SAASA,EAAatT,GAAKG,GAAS;AAErD,MAAI+S,IAASlT,EAAI,mBAAmBA,GAChCuT,IAAUL,KAAUlT,EAAI,kBAAkBA,GAC1CuQ,GACAiD;AAEJ,EAAIrT,MAAY,WACdoQ,IAAiBpQ,EAAQ,OACzBqT,IAAkBrT,EAAQ;AAG5B,MAAIgT,IAAoBF,GAA0BjT,GAAKG,GAAS+S,CAAM,GAClEO,IAA2BN,KAAqBH,GAA4BO,CAAO,GACnFG,IAAc,CAACD,EAAyB,IAAI;AAChD,SAAO,WAAY;AAEjB,QAAIvD,IAAO,WACP1H,IAAS0K,KAAUlT,EAAI,qBAAqB,SAAYA,EAAI,iBAAiB,MAAM,CAAC,IAAI,CAAA;AAM5F,QAJIuQ,MAAmB,UACrB/H,EAAO,KAAK,WAAW+H,IAAiB,GAAG,GAGzCL,EAAK,CAAC,KAAK,QAAQA,EAAK,CAAC,EAAE,QAAQ;AAErC,MAAA1H,EAAO,KAAK,MAAMA,GAAQ0H,CAAI;AAAA,SACzB;AACL,UAAII,IAAqBJ,EAAK,CAAC;AAE/B,MAAA1H,EAAO,KAAK8H,EAAmB,CAAC,CAAC;AAIjC,eAHIlC,IAAM8B,EAAK,QACXjQ,IAAI,GAEDA,IAAImO,GAAKnO;AAEd,QAAAuI,EAAO,KAAK0H,EAAKjQ,CAAC,GAAGqQ,EAAmBrQ,CAAC,CAAC;AAAA,IAE9C;AAEA,QAAI0T,IAAS3C,GAAiB,SAAU1N,GAAOqD,GAAOwK,GAAK;AACzD,UAAIyC,IAAWF,KAAepQ,EAAM,MAAMiQ,GACtC1F,IAAY,IACZgG,IAAsB,CAAA,GACtB3E,IAAc5L;AAElB,UAAIA,EAAM,SAAS,MAAM;AACvB,QAAA4L,IAAc,CAAA;AAEd,iBAASxH,KAAOpE;AACd,UAAA4L,EAAYxH,CAAG,IAAIpE,EAAMoE,CAAG;AAG9B,QAAAwH,EAAY,QAAQ2B,GAAM,WAAWQ,EAAY;AAAA,MACnD;AAEA,MAAI,OAAO/N,EAAM,aAAc,WAC7BuK,IAAYL,GAAoB7G,EAAM,YAAYkN,GAAqBvQ,EAAM,SAAS,IAC7EA,EAAM,aAAa,SAC5BuK,IAAYvK,EAAM,YAAY;AAGhC,UAAIoF,IAAauH,GAAgBzH,EAAO,OAAOqL,CAAmB,GAAGlN,EAAM,YAAYuI,CAAW;AAClG,MAAArB,KAAalH,EAAM,MAAM,MAAM+B,EAAW,MAEtC8K,MAAoB,WACtB3F,KAAa,MAAM2F;AAGrB,UAAIM,IAAyBJ,KAAeP,MAAsB,SAAYH,GAA4BY,CAAQ,IAAIH,GAClH/B,IAAW,CAAA;AAEf,eAASC,KAAQrO;AACf,QAAIoQ,KAAe/B,MAAS,QAExBmC,EAAuBnC,CAAI,MAC7BD,EAASC,CAAI,IAAIrO,EAAMqO,CAAI;AAI/B,aAAAD,EAAS,YAAY7D,GAEjBsD,MACFO,EAAS,MAAMP,IAGG,gBAAAN,GAAM,cAAcA,GAAM,UAAU,MAAmB,gBAAAA,GAAM,cAAce,IAAW;AAAA,QACxG,OAAOjL;AAAA,QACP,YAAY+B;AAAA,QACZ,aAAa,OAAOkL,KAAa;AAAA,MACzC,CAAO,GAAgB,gBAAA/C,GAAM,cAAc+C,GAAUlC,CAAQ,CAAC;AAAA,IAC1D,CAAC;AACD,WAAAiC,EAAO,cAAcpD,MAAmB,SAAYA,IAAiB,aAAa,OAAOgD,KAAY,WAAWA,IAAUA,EAAQ,eAAeA,EAAQ,QAAQ,eAAe,KAChLI,EAAO,eAAe3T,EAAI,cAC1B2T,EAAO,iBAAiBA,GACxBA,EAAO,iBAAiBJ,GACxBI,EAAO,mBAAmBnL,GAC1BmL,EAAO,wBAAwBR,GAC/B,OAAO,eAAeQ,GAAQ,YAAY;AAAA,MACxC,OAAO,WAAiB;AAKtB,eAAO,MAAMH;AAAA,MACf;AAAA,IACN,CAAK,GAEDG,EAAO,gBAAgB,SAAUI,GAASC,GAAa;AACrD,UAAIC,IAAYX,EAAaS,GAASrU,GAAS,CAAA,GAAIS,GAAS6T,GAAa;AAAA,QACvE,mBAAmBf,GAA0BU,GAAQK,GAAa,EAAI;AAAA,MAC9E,CAAO,CAAC;AACF,aAAOC,EAAU,MAAM,QAAQzL,CAAM;AAAA,IACvC,GAEOmL;AAAA,EACT;AACF,GC/JIO,KAAO;AAAA,EAAC;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAS;AAAA,EAAS;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAc;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAM;AAAA,EAAO;AAAA,EAAW;AAAA,EAAO;AAAA,EAAU;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAS;AAAA,EAAY;AAAA,EAAc;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAU;AAAA,EAAO;AAAA,EAAS;AAAA,EAAO;AAAA,EAAO;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAO;AAAA,EAAY;AAAA,EAAU;AAAA,EAAM;AAAA,EAAY;AAAA,EAAU;AAAA,EAAU;AAAA,EAAK;AAAA,EAAS;AAAA,EAAW;AAAA,EAAO;AAAA,EAAY;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAW;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAS;AAAA,EAAO;AAAA,EAAW;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAM;AAAA,EAAY;AAAA,EAAS;AAAA,EAAM;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAM;AAAA,EAAS;AAAA,EAAK;AAAA,EAAM;AAAA,EAAO;AAAA,EAAS;AAAA;AAAA,EAC77B;AAAA,EAAU;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAiB;AAAA,EAAK;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAkB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAW;AAAA,EAAY;AAAA,EAAkB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAO,GAGxMC,IAASb,GAAa,KAAK,IAAI;AACnCY,GAAK,QAAQ,SAAUE,GAAS;AAC9B,EAAAD,EAAOC,CAAO,IAAID,EAAOC,CAAO;AAClC,CAAC;ACGM,MAAMC,KAAiB,CAAC,WAAW,aAAa,QAAQ,UAAU,UAAU,GACtEC,KAAc,CAAC,MAAM,MAAM,IAAI,GAatCC,KAAmB,CAACC,MAA2B;AAEnD,MAAIA,MAAY;AACd,WAAOhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsDT,QAAMiC,IAAa;AAAA,IACjB,SAASjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeT,WAAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBX,MAAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeN,QAAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAiBV,SAAOiC,EAAWD,CAAkC,KAAKC,EAAW;AACtE,GAMMC,KAAgB,CAAC9O,MAAqB;AAC1C,QAAM+O,IAAU;AAAA,IACd,IAAInC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUJ,IAAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUJ,IAAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAYN,SAAOmC,EAAQ/O,CAAI,KAAK+O,EAAQ;AAClC,GAeaC,KAAaT,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAuC7B,CAAC,EAAE,SAAAK,QAAcD,GAAiBC,CAAO,CAAC;AAAA;AAAA;AAAA,IAG1C,CAAC,EAAE,MAAA5O,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA,IAGjC,CAAC,EAAE,WAAAiP,QACHA,KACArC;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6CQsC,KAAgBX,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAevBY,KAAcZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU9B,CAAC,EAAE,WAAAa,QACHA,KACAxC;AAAA;AAAA;AAAA,KAGC;AAAA,GAUQyC,KAAQd,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASxB,CAAC,EAAE,WAAAa,QACHA,KACAxC;AAAA;AAAA,KAEC;AAAA,GCxUQ0C,KAAWb,IACXc,KAAQb,IA2BRc,KAASlE;AAAA,EACpB,CACE;AAAA,IACE,SAAAsD,IAAU;AAAA,IACV,MAAA5O,IAAO;AAAA,IACP,MAAAyP;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,WAAAT,IAAY;AAAA,IACZ,UAAAU;AAAA,IACA,YAAAC;AAAA,IACA,WAAA3H;AAAA,IACA,UAAAtK;AAAA,IACA,GAAGkS;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCzE,IAAMuE,KAAgBC,GAGtBE,KAAiBN,KAAYC,MAAeF,GAG5C,EAAE,aAAAQ,GAAa,WAAAC,EAAA,IAAcC;AAAA,MACjC;AAAA,QACE,GAAGP;AAAA,QACH,YAAYI;AAAA,QACZ,aAAa;AAAA,MAAA;AAAA,MAEfF;AAAA,IAAA;AAGF,WACExD,gBAAAA;AAAAA,MAACyC;AAAA,MAAA;AAAA,QACE,GAAGqB,GAAWH,GAAa;AAAA,UAC1B,KAAA3E;AAAA,UACA,WAAAtD;AAAA,QAAA,CACD;AAAA,QACD,SAAA2G;AAAA,QACA,MAAA5O;AAAA,QACA,WAAAiP;AAAA,QACA,WAAAkB;AAAA,QACA,YAAYF;AAAA,QACZ,WAAWP;AAAA,QACX,gBAAcd;AAAA,QACd,aAAW5O;AAAA,QACX,gBAAc0P,IAAU,SAAS;AAAA,QACjC,gBAAcS,IAAY,SAAS;AAAA,QAEnC,4BAACjB,IAAA,EAEE,UAAA;AAAA,UAAAO,uBACEN,IAAA,EAAY,WAAWO,GAAS,eAAY,QAC1C,UAAAD,GACH;AAAA,UAIFlD,gBAAAA,EAAC8C,IAAA,EAAM,WAAWK,GAAU,UAAA/R,EAAA,CAAS;AAAA,UAGpC+R,uBACEP,IAAA,EAAY,WAAW,IAAO,cAAW,OAAM,MAAK,UACnD,UAAA5C,gBAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAM;AAAA,cACN,OAAO;AAAA,gBACL,WAAW;AAAA,cAAA;AAAA,cAGb,UAAAA,gBAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,eAAc;AAAA,kBACd,iBAAgB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClB;AAAA,UAAA,EACF,CACF;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAiD,GAAO,cAAc;ACxId,MAAMc,KAAwB,CAAC,SAAS,WAAW,OAAO,GACpDC,KAAkB,CAAC,WAAW,WAAW,QAAQ,GACjDC,KAAkB,CAAC,MAAM,MAAM,IAAI,GAM1C7B,KAAmB,CAAC8B,GAAkCC,MAAyB;AACnF,QAAMC,IAAS,GAAGF,CAAU,IAAIC,CAAI,IAE9B7B,IAAqD;AAAA,IACzD,iBAAiBjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAejB,iBAAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAejB,gBAAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAehB,mBAAmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBnB,mBAAmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBnB,kBAAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBlB,iBAAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBjB,iBAAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAejB,gBAAgBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAmBlB,SAAOiC,EAAW8B,CAAM,KAAK9B,EAAW,eAAe;AACzD,GAEMC,KAAgB,CAAC9O,MACd4M;AAAA,qDAC4C5M,CAAI;AAAA,mCACtBA,CAAI;AAAA,oCACHA,CAAI;AAAA,uCACDA,CAAI;AAAA,wCACHA,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAS/B4Q,KAAiBrC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BjC,CAAC,EAAE,YAAAkC,GAAY,MAAAC,EAAA,MAAW/B,GAAiB8B,GAAYC,CAAI,CAAC;AAAA,IAC5D,CAAC,EAAE,MAAA1Q,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BxB6Q,KAAWtC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU3B,CAAC,EAAE,UAAAuC,QACHA,KACAlE;AAAA;AAAA,KAEC;AAAA,GAGQmE,KAAiBxC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCjPxByC,KAA0BV,IAC1BW,KAAoBV,IACpBW,KAAoBV,IAqBpBW,KAAa7F;AAAA,EACxB,CACE;AAAA,IACE,YAAAmF,IAAa;AAAA,IACb,MAAAC,IAAO;AAAA,IACP,MAAA1Q,IAAO;AAAA,IACP,MAAAyP;AAAA,IACA,OAAA2B;AAAA,IACA,SAAA1B,IAAU;AAAA,IACV,cAAA2B,IAAe;AAAA,IACf,YAAAzB;AAAA,IACA,WAAA3H;AAAA,IACA,GAAG4H;AAAA,EAAA,GAELC,MACG;AACH,UAAMwB,IAAmBC,GAAQ,MAAM;;AACrC,aAAI,OAAO,aAAe,MACjB,OAGNC,KAAAC,IAAA,WAA6D,YAA7D,gBAAAA,EAAsE,QAAtE,gBAAAD,EAA2E,cAC3D;AAAA,IACrB,GAAG,CAAA,CAAE,GAECzB,IAAWC,EAA0B,IAAI,GACzCzE,IAAMuE,KAAgBC,GACtBJ,IAAWC,KAAcF;AAE/B,QAAI4B,GAAkB;AACpB,YAAMI,IAAa7B,EAAsC,YAAY,GAC/D8B,IAAkB9B,EAAsC,iBAAiB;AAC/E,MAAI,CAACuB,KAAS,CAACM,KAAa,CAACC,KAC3B,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,IAGN;AAEA,UAAM,EAAE,aAAAzB,GAAa,WAAAC,EAAA,IAAcC;AAAA,MACjC;AAAA,QACE,GAAGP;AAAA,QACH,YAAYF;AAAA,QACZ,aAAa;AAAA,MAAA;AAAA,MAEfI;AAAA,IAAA;AAGF,WACE6B,gBAAAA;AAAAA,MAAChB;AAAA,MAAA;AAAA,QACE,GAAGP,GAAWH,GAAa;AAAA,UAC1B,KAAA3E;AAAA,UACA,WAAAtD;AAAA,QAAA,CACD;AAAA,QACD,YAAAwI;AAAA,QACA,MAAAC;AAAA,QACA,MAAA1Q;AAAA,QACA,WAAAmQ;AAAA,QACA,YAAY,EAAQR;AAAA,QACpB,WAAWD;AAAA,QACX,mBAAiBe;AAAA,QACjB,aAAWC;AAAA,QACX,aAAW1Q;AAAA,QACX,gBAAc0P,IAAU,SAAS;AAAA,QACjC,gBAAcS,IAAY,SAAS;AAAA,QAEnC,UAAA;AAAA,UAAA5D,gBAAAA,EAACsE,IAAA,EAAS,UAAUnB,GAAS,eAAY,QACtC,UAAAD,GACH;AAAA,UACCC,uBACEqB,IAAA,EAAe,MAAK,UAAS,aAAU,UAAS,cAAYM,GAC3D,UAAA9E,gBAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAM;AAAA,cAEN,UAAAA,gBAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,GAAE;AAAA,kBACF,QAAO;AAAA,kBACP,aAAY;AAAA,kBACZ,eAAc;AAAA,kBACd,iBAAgB;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClB;AAAA,UAAA,GAEJ;AAAA,UAED6E,IAAQ7E,gBAAAA,EAACsF,IAAA,EAAgB,UAAAT,EAAA,CAAM,IAAoB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG1D;AACF;AAEAD,GAAW,cAAc;AC/HzB,IAAI5E,KAAM,SAAa9O,GAAMC,GAAOoE,GAAK;AACvC,SAAK6J,GAAO,KAAKjO,GAAO,KAAK,IAItBoU,GAAgB,IAAI5F,IAASL,GAAmBpO,GAAMC,CAAK,GAAGoE,CAAG,IAH/DgQ,GAAgB,IAAIrU,GAAMC,GAAOoE,CAAG;AAI/C,GACI8P,KAAO,SAAcnU,GAAMC,GAAOoE,GAAK;AACzC,SAAK6J,GAAO,KAAKjO,GAAO,KAAK,IAItBoU,GAAgB,KAAK5F,IAASL,GAAmBpO,GAAMC,CAAK,GAAGoE,CAAG,IAHhEgQ,GAAgB,KAAKrU,GAAMC,GAAOoE,CAAG;AAIhD;ACZO,MAAMiQ,KAAoBnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA8BpBoF,KAAkBpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAkDlBqF,KAAerF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAefsF,KAAgBtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCvCvBuF,KAA4C,CAAC,EAAE,SAAAC,QAEjD,gBAAA7F;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAK0F;AAAA,IACL,gBAAcG;AAAA,IACd,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IAEN,UAAA,gBAAA7F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EACjB;AAAA,GAQA8F,KAAoD,CAAC,EAAE,SAAAD,QAEzD,gBAAA7F;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAK0F;AAAA,IACL,gBAAcG;AAAA,IACd,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IAEN,UAAA,gBAAA7F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAChB;AAAA,GASO+F,KAAWhH;AAAA,EACtB,CAAC5N,GAAO6N,MAAQ;AACd,UAAM;AAAA,MACJ,SAASgH;AAAA,MACT,gBAAAC,IAAiB;AAAA,MACjB,eAAAC,IAAgB;AAAA,MAChB,UAAA9C,IAAW;AAAA,MACX,OAAAyB;AAAA,MACA,UAAAsB;AAAA,MACA,WAAAzK;AAAA,MACA,OAAA0K;AAAA,MACA,GAAGC;AAAA,IAAA,IACDlV,GAEEmV,IAAW7C,EAAyB,IAAI,GACxC,CAAC8C,GAAOC,CAAQ,IAAIC,EAAS,EAAK,GAGlC,CAACC,GAAiBC,CAAkB,IAAIF,EAASR,CAAc,GAG/DW,IAAeZ,MAAsB,QACrCH,IAAUe,IAAeZ,IAAoBU;AAGnD,WAAAG,GAAU,MAAM;AACd,MAAI7H,MACE,OAAOA,KAAQ,aACjBA,EAAIsH,EAAS,OAAO,IAEpBtH,EAAI,UAAUsH,EAAS;AAAA,IAG7B,GAAG,CAACtH,CAAG,CAAC,GAGR6H,GAAU,MAAM;AACd,MAAIP,EAAS,YACXA,EAAS,QAAQ,gBAAgBJ;AAAA,IAErC,GAAG,CAACA,CAAa,CAAC,GAgBhB,gBAAAb;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKG;AAAA,QACL,iBAAepC;AAAA,QACf,WAAA1H;AAAA,QACA,OAAA0K;AAAA,QACA,cAAc,MAAM,CAAChD,KAAYoD,EAAS,EAAI;AAAA,QAC9C,cAAc,MAAM,CAACpD,KAAYoD,EAAS,EAAK;AAAA,QAE/C,UAAA;AAAA,UAAA,gBAAAxG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKsG;AAAA,cACL,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,UAAAzC;AAAA,cACA,UA1Be,CAAC0D,MAA+C;AACnE,oBAAI1D,EAAU;AAEd,sBAAM2D,IAAaD,EAAM,OAAO;AAEhC,gBAAKF,KACHD,EAAmBI,CAAU,GAG/BZ,KAAA,QAAAA,EAAWY,GAAYD;AAAA,cACzB;AAAA,cAiBO,GAAGT;AAAA,YAAA;AAAA,UAAA;AAAA,UAGN,gBAAArG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKyF;AAAA,cACL,cAAYc;AAAA,cACZ,gBAAcV,KAAW,CAACK;AAAA,cAC1B,sBAAoBA;AAAA,cACpB,iBAAe9C;AAAA,cAEd,UAAA8C,uBACEJ,IAAA,EAAkB,SAAS,IAAM,IAElC,gBAAA9F,GAAC4F,MAAU,SAAAC,EAAA,CAAkB;AAAA,YAAA;AAAA,UAAA;AAAA,UAIhChB,KACC,gBAAA7E;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK2F;AAAA,cACL,iBAAevC;AAAA,cAEd,UAAAyB;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEAkB,GAAS,cAAc;ACtNvB,MAAMrY,IAAIF;AAAAA,EACR,CAAC;AAAA,IACC,UAAUuJ;AAAA,IACV,MAAM,IAAI;AAAA,IACV,OAAO,IAAI;AAAA,IACX,SAASJ,IAAI;AAAA,IACb,SAASW,IAAI;AAAA,IACb,aAAa0P,IAAI;AAAA,IACjB,GAAG3P;AAAA,EACP,GAAKX,MAAM;AACP,UAAMuQ,IAAI;AAAA,MACR,KAAKvQ;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAASC;AAAA,MACT,GAAGU;AAAA,IACT;AACI,WAAOC,IAAoB7J,gBAAAA,EAAE,OAAO,EAAE,GAAGwZ,GAAG,MAAM,GAAG,UAAUlQ,EAAC,CAAE,IAAoBtJ,gBAAAA;AAAAA,MACpF;AAAA,MACA;AAAA,QACE,GAAGwZ;AAAA,QACH,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAaD;AAAA,QACb,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,UAAUjQ;AAAA,MAClB;AAAA,IACA;AAAA,EACE;AACF;AACArJ,EAAE,cAAc;AAChB,MAAMoJ,KAAItJ,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAA0BtJ,gBAAAA;AAAAA,EACtH;AAAA,EACA;AAAA,IACE,GAAG;AAAA,IACH,MAAM;AAAA,EACV;AACA,EAAC,CAAE,CAAC;AACJqJ,GAAE,cAAc;AAChB,MAAMoQ,KAAI1Z,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,6BAA4B,CAAE,EAAC,CAAE,CAAC;AACtIyZ,GAAE,cAAc;AAChB,MAAMjQ,KAAIzJ,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,4BAA2B,CAAE,EAAC,CAAE,CAAC;AACrIwJ,GAAE,cAAc;AAChB,MAAMtD,KAAInG,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,IAAI,UAAU;AAAA,EAChEtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJkG,GAAE,cAAc;AAChB,MAAMwT,KAAI3Z,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,IAAI,UAAU;AAAA,EAChEtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJ0Z,GAAE,cAAc;AAChB,MAAMhQ,KAAI3J,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,eAAc,CAAE,EAAC,CAAE,CAAC;AACxH0J,GAAE,cAAc;AAChB,MAAMH,KAAIxJ,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,iBAAgB,CAAE,EAAC,CAAE,CAAC;AAC1HuJ,GAAE,cAAc;AAChB,MAAMoQ,KAAI5Z,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,eAAc,CAAE,EAAC,CAAE,CAAC;AACxH2Z,GAAE,cAAc;AAChB,MAAMxQ,KAAIpJ,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,kBAAiB,CAAE,EAAC,CAAE,CAAC;AAC3HmJ,GAAE,cAAc;AAChB,MAAMyQ,KAAI7Z,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,oBAAoB,QAAQ,gBAAgB,aAAa,OAAO,eAAe,SAAS,gBAAgB,QAAO,CAAE,EAAC,CAAE,CAAC;AACzN4Z,GAAE,cAAc;AAChB,MAAMC,KAAI9Z,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAAU;AAAA,EACnDtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJ6Z,GAAE,cAAc;AAChB,MAAMC,KAAI/Z,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAAU;AAAA,EACnDtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,IACtB;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJ8Z,GAAE,cAAc;AAChB,MAAM1T,KAAIrG,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,2RAA0R,CAAE,EAAC,CAAE,CAAC;AACpYoG,GAAE,cAAc;AAChB,MAAM2T,KAAIha,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAAU;AAAA,EACnDtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,MAAM;AAAA,IACZ;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,MAAM;AAAA,IACZ;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJ+Z,GAAE,cAAc;AAChB,MAAMpQ,KAAI5J,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAAU;AAAA,EACnDtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,MAAM;AAAA,IACZ;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,MAAM;AAAA,IACZ;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJ2J,GAAE,cAAc;AAChB,MAAMqQ,KAAIja,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAAU;AAAA,EACtFtJ,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,wNAAwN,MAAM,eAAc,CAAE;AAAA,EACvSA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,qOAAqO,MAAM,eAAc,CAAE;AAAA,EACpTA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,oNAAoN,MAAM,eAAc,CAAE;AAAA,EACnSA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,qOAAqO,MAAM,eAAc,CAAE;AAAA,EACpTA,gBAAAA,EAAE,QAAQ,EAAE,IAAI,mBAAmB,OAAO,EAAE,UAAU,YAAW,GAAI,WAAW,kBAAkB,GAAG,KAAK,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,UAA0BA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,wCAAwC,MAAM,QAAO,CAAE,GAAG;AAAA,EACxRA,gBAAAA,EAAE,KAAK,EAAE,MAAM,yBAAyB,UAA0BA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,qcAAqc,MAAM,eAAc,CAAE,GAAG;AAAA,EACzlBA,gBAAAA,EAAE,QAAQ,EAAE,IAAI,mBAAmB,OAAO,EAAE,UAAU,YAAW,GAAI,WAAW,kBAAkB,GAAG,KAAK,GAAG,KAAK,OAAO,MAAM,QAAQ,MAAM,UAA0BA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,sCAAsC,MAAM,QAAO,CAAE,GAAG;AAAA,EACxRA,gBAAAA,EAAE,KAAK,EAAE,MAAM,yBAAyB,UAA0BA,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,gmBAAgmB,MAAM,eAAc,CAAE,EAAC,CAAE;AACtwB,EAAC,CAAE,CAAC;AACJga,GAAE,cAAc;AAChB,MAAM5Q,KAAIrJ,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,UAAU,WAAW,UAAU,WAAW,GAAG,iUAAiU,MAAM,eAAc,CAAE,EAAC,CAAE,CAAC;AAC5gBoJ,GAAE,cAAc;AAChB,MAAMjD,KAAIpG,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,uBAAsB,CAAE,EAAC,CAAE,CAAC;AAChImG,GAAE,cAAc;AAChB,MAAMF,KAAIlG,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAA0BtJ,gBAAAA;AAAAA,EACtH;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,UAAU;AAAA,IACV,GAAG;AAAA,IACH,MAAM;AAAA,EACV;AACA,EAAC,CAAE,CAAC;AACJiG,GAAE,cAAc;AAChB,MAAMgU,KAAIla,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAAU;AAAA,EACtFtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJia,GAAE,cAAc;AAChB,MAAMC,KAAIna,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAAU;AAAA,EACtFtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,MACH,MAAM;AAAA,IACZ;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,MACH,MAAM;AAAA,IACZ;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,MACH,MAAM;AAAA,IACZ;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,MACH,MAAM;AAAA,IACZ;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJka,GAAE,cAAc;AAChB,MAAMpQ,KAAI/J,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAAU;AAAA,EACnDtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,+EAA8E,CAAE;AAAA,EAC/FA,gBAAAA,EAAE,UAAU,EAAE,IAAI,QAAQ,IAAI,MAAM,GAAG,KAAK;AAAA,EAC5CA,gBAAAA,EAAE,UAAU,EAAE,IAAI,QAAQ,IAAI,MAAM,GAAG,KAAK;AAAA,EAC5CA,gBAAAA,EAAE,UAAU,EAAE,IAAI,OAAO,IAAI,MAAM,GAAG,IAAG,CAAE;AAC7D,EAAC,CAAE,CAAC;AACJ8J,GAAE,cAAc;AAChB,MAAMqQ,KAAIpa,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,4vBAA4vB,EAAC,CAAE,CAAC;AACv4Bma,GAAE,cAAc;AAChB,MAAMC,KAAIra,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,2CAA0C,CAAE,EAAC,CAAE,CAAC;AACpJoa,GAAE,cAAc;AAChB,MAAMC,KAAIta,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,SAAS,aAAa,SAAS,IAAI,UAA0BtJ,gBAAAA;AAAAA,EACtH;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,UAAU;AAAA,IACV,GAAG;AAAA,IACH,MAAM;AAAA,EACV;AACA,EAAC,CAAE,CAAC;AACJqa,GAAE,cAAc;AAChB,MAAMC,KAAIva,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,YAAY,QAAQ,gBAAgB,aAAa,OAAO,eAAe,SAAS,gBAAgB,QAAO,CAAE,EAAC,CAAE,CAAC;AACjNsa,GAAE,cAAc;AAChB,MAAMC,KAAIxa,EAAE,CAACuJ,GAAG,MAAsBjJ,gBAAAA,EAAEJ,GAAG,EAAE,KAAK,GAAG,SAAS,IAAI,GAAGqJ,GAAG,UAAU;AAAA,EAChEtJ,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AAAA,EACkBA,gBAAAA;AAAAA,IACd;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAG;AAAA,IACT;AAAA,EACA;AACA,EAAC,CAAE,CAAC;AACJua,GAAE,cAAc;AAChB,MAAM9Q,KAAI1J,EAAE,CAACuJ,GAAG,MAAsBtJ,gBAAAA,EAAEC,GAAG,EAAE,KAAK,GAAG,GAAGqJ,GAAG,UAA0BtJ,gBAAAA,EAAE,QAAQ,EAAE,GAAG,mCAAkC,CAAE,EAAC,CAAE,CAAC;AAC5IyJ,GAAE,cAAc;ACrUT,MAAM+Q,KAAiF;AAAA,EAC5F,IAAI;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe;AAAA,EAAA;AAAA,EAEjB,IAAI;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe;AAAA,EAAA;AAAA,EAEjB,IAAI;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe;AAAA,EAAA;AAEnB,GAMaC,KAA0B7H;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiC1B8H,KAAwB,CAAC1U,IAA2B,SAAS;AACxE,QAAM2U,IAAYH,GAAyBxU,CAAI;AAE/C,SAAO4M;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQM+H,EAAU,QAAQ,MAAMA,EAAU,QAAQ;AAAA,WAC9CA,EAAU,GAAG;AAAA,kBACNA,EAAU,SAAS;AAAA;AAAA;AAAA;AAAA,iBAIpBA,EAAU,QAAQ;AAAA,mBAChBA,EAAU,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDvC,GAMaC,KAA0B,CAAC5U,IAA2B,SAAS;AAC1E,QAAM,EAAE,eAAA6U,GAAe,eAAAC,MAAkBN,GAAyBxU,CAAI;AAEtE,SAAO4M;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAUIiI,CAAa;AAAA,cACZA,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAeDA,CAAa,MAAMA,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAc3CC,CAAa;AAAA,gBACZA,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU7B,GCxJaC,KAAiBzJ;AAAA,EAC5B,CAAC5N,GAAO6N,MAAQ;AACd,UAAM;AAAA,MACJ,SAASgH;AAAA,MACT,gBAAAC,IAAiB;AAAA,MACjB,UAAA7C,IAAW;AAAA,MACX,OAAAyB;AAAA,MACA,MAAApR,IAAO;AAAA,MACP,UAAA0S;AAAA,MACA,WAAAzK;AAAA,MACA,OAAA0K;AAAA,MACA,GAAGC;AAAA,IAAA,IACDlV,GAEEmV,IAAW7C,EAAyB,IAAI,GACxC,CAAC8C,GAAOC,CAAQ,IAAIC,EAAS,EAAK,GAGlC,CAACC,GAAiBC,CAAkB,IAAIF,EAASR,CAAc,GAG/DW,IAAeZ,MAAsB,QACrCH,IAAUe,IAAeZ,IAAoBU;AAGnD,IAAAG,GAAU,MAAM;AACd,MAAI7H,MACE,OAAOA,KAAQ,aACjBA,EAAIsH,EAAS,OAAO,IAEpBtH,EAAI,UAAUsH,EAAS;AAAA,IAG7B,GAAG,CAACtH,CAAG,CAAC;AAGR,UAAMyJ,IAAe,CAAC3B,MAA+C;AACnE,UAAI1D,EAAU;AAEd,YAAM2D,IAAaD,EAAM,OAAO;AAEhC,MAAKF,KACHD,EAAmBI,CAAU,GAG/BZ,KAAA,QAAAA,EAAWY,GAAYD;AAAA,IACzB,GAEMsB,IAAYH,GAAyBxU,CAAI;AAE/C,WACE,gBAAA4R;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK6C;AAAA,QACL,iBAAe9E;AAAA,QACf,WAAA1H;AAAA,QACA,OAAA0K;AAAA,QACA,cAAc,MAAM,CAAChD,KAAYoD,EAAS,EAAI;AAAA,QAC9C,cAAc,MAAM,CAACpD,KAAYoD,EAAS,EAAK;AAAA,QAE/C,UAAA;AAAA,UAAA,gBAAAxG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKsG;AAAA,cACL,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,UAAAzC;AAAA,cACA,UAAUqF;AAAA,cACT,GAAGpC;AAAA,YAAA;AAAA,UAAA;AAAA,UAGN,gBAAAhB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK8C,GAAsB1U,CAAI;AAAA,cAC/B,cAAY8S;AAAA,cACZ,gBAAcV;AAAA,cACd,iBAAezC;AAAA,cACf,aAAW3P;AAAA,cAGV,UAAA;AAAA,gBAAAoR;AAAA,gBAGAgB,KACC,gBAAA7F;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAKqI,GAAwB5U,CAAI;AAAA,oBACjC,iBAAe2P;AAAA,oBACf,aAAW3P;AAAA,oBAEX,UAAA,gBAAAuM,GAAC0I,IAAA,EAAa,MAAMN,EAAU,cAAA,CAAe;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC/C;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAI,GAAe,cAAc;ACvJ7B,MAAMG,KAAYzL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAcZ0L,KAAU1L;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAceA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBtB,MAAM2L,KAAe7G,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWtB8G,KAAsB9G,EAAO;AAAA,mBAGvB,CAAC,EAAE,QAAA+G,EAAA,MAClBA,IAAS,SAAS,uCAAuC;AAAA,GAMhDC,KAAiBhH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YAQzB,CAAC,EAAE,YAAAqB,EAAA,MAAkBA,IAAa,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKpE,CAAC,EAAE,YAAAA,QACH,CAACA,KACDhD;AAAA;AAAA;AAAA;AAAA,KAIC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA,KAEC;AAAA,GAMQ4I,KAAejH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAWb,CAAC,EAAE,YAAAkH,EAAA,MAAkBA,IAAa,SAAS,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAW7DC,KAAenH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWtBoH,KAAYpH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAanBqH,KAAgBrH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAUvBsH,KAAyBtH,EAAO;AAAA,gBAI7B,CAAC,EAAE,YAAAkH,GAAY,eAAAK,QAC3BL,IAAa,GAAGK,CAAa,OAAO,KAAK;AAAA;AAAA;AAAA,GAQhCC,KAAuBxH,EAAO;AAAA;AAAA;AAAA;AAAA,IAMvC,CAAC,EAAE,YAAAkH,QACHA,IACI7I;AAAA,uBACesI,EAAS;AAAA,YAExBtI;AAAA,uBACeuI,EAAO;AAAA,SACrB;AAAA,GAMIa,KAAczH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCzKrB0H,KAAW3K;AAAA,EACtB,CACE;AAAA,IACE,WAAW4K;AAAA,IACX,kBAAAC,IAAmB,CAAA;AAAA,IACnB,WAAAC,IAAY;AAAA,IACZ,UAAA1D;AAAA,IACA,UAAA/U;AAAA,IACA,WAAAsK;AAAA,EAAA,GAEFsD,MACG;AAEH,UAAM,CAAC8K,GAAmBC,CAAoB,IAAItD,EAEhDmD,CAAgB,GAGZhD,IAAe+C,MAAkB,QACjCK,IAAYpD,IAAe+C,IAAgBG,GAG3CG,IAAa,MAAM,QAAQD,CAAS,IAAIA,IAAY,CAACA,CAAS,GAK9DvB,IAAe,CAACyB,GAA0BC,MAAsB;AACpE,UAAIC;AAEJ,UAAIP;AAEF,QAAAO,IAAeD,IAAWD,IAAU;AAAA,WAC/B;AAEL,cAAMG,IAAc,MAAM,QAAQL,CAAS,IAAI,CAAC,GAAGA,CAAS,IAAIA,IAAY,CAACA,CAAS,IAAI,CAAA;AAE1F,QAAIG,IAEFC,IAAe,CAAC,GAAGC,GAAaH,CAAO,IAGvCE,IAAeC,EAAY,OAAO,CAAC9U,MAAQA,MAAQ2U,CAAO;AAAA,MAE9D;AAGA,MAAKtD,KACHmD,EAAqBK,CAAY,GAInCjE,KAAA,QAAAA,EAAWiE;AAAA,IACb;AAuBA,6BACGvB,IAAA,EAAa,KAAA7J,GAAU,WAAAtD,GAAsB,MAAK,UAChD,WApBkB,MAAM;AAC3B,YAAM4O,IAAQC,GAAS,QAAQnZ,CAAQ,EAAE,OAAOoZ,EAAc,GACxDC,IAAYH,EAAM;AAExB,aAAOA,EAAM,IAAI,CAACI,GAAO1a,MAAU;AACjC,cAAMka,IAAUQ,EAAM,MAAM,SACtBP,IAAWF,EAAW,SAASC,CAAO,GACtCS,IAAO3a,MAAUya,IAAY;AAEnC,eAAOG,GAAaF,GAAO;AAAA,UACzB,GAAGA,EAAM;AAAA,UACT,UAAAP;AAAA,UACA,MAAAQ;AAAA,UACA,UAAUlC;AAAA,QAAA,CACX;AAAA,MACH,CAAC;AAAA,IACH,MAKE;AAAA,EAEJ;AACF;AAEAiB,GAAS,cAAc;AC9EhB,MAAMmB,KAAe9L;AAAA,EAC1B,CACE;AAAA,IACE,SAAAmL;AAAA,IACA,OAAAY;AAAA,IACA,UAAA1Z;AAAA,IACA,QAAA2Z;AAAA,IACA,UAAAZ,IAAW;AAAA,IACX,UAAA/G,IAAW;AAAA,IACX,MAAAuH,IAAO;AAAA,IACP,UAAAxE;AAAA,IACA,WAAAzK;AAAA,EAAA,GAEFsD,MACG;AACH,UAAMgM,IAAavH,EAAuB,IAAI,GACxC,CAAC8F,GAAe0B,CAAgB,IAAIxE,EAAS,CAAC;AAGpD,IAAAI,GAAU,MAAM;AACd,MAAImE,EAAW,WAEbC,EAAiBD,EAAW,QAAQ,YAAY;AAAA,IAEpD,GAAG,CAAC5Z,GAAU+Y,CAAQ,CAAC;AAGvB,UAAMe,IAAe,MAAM;AACzB,MAAI9H,KACJ+C,KAAA,QAAAA,EAAW+D,GAAS,CAACC;AAAA,IACvB;AAaA,WACE9E,gBAAAA,EAACyD,IAAA,EAAoB,KAAA9J,GAAU,QAAQ2L,GAAM,WAAAjP,GAE3C,UAAA;AAAA,MAAA2J,gBAAAA;AAAAA,QAAC2D;AAAA,QAAA;AAAA,UACC,YAAYmB;AAAA,UACZ,YAAY/G;AAAA,UACZ,SAAS8H;AAAA,UACT,WAjBgB,CAACpE,MAA+B;AACpD,YAAI1D,MAGA0D,EAAM,QAAQ,OAAOA,EAAM,QAAQ,aACrCA,EAAM,eAAA,GACNoE,EAAA;AAAA,UAEJ;AAAA,UAUM,MAAK;AAAA,UACL,UAAU9H,IAAW,KAAK;AAAA,UAC1B,iBAAe+G;AAAA,UACf,iBAAe/G;AAAA,UACf,iBAAe,oBAAoB8G,CAAO;AAAA,UAG1C,UAAA;AAAA,YAAAlK,gBAAAA,EAACiJ,MAAa,YAAYkB,GAAU,eAAY,QAC9C,UAAAnK,gBAAAA,EAACmL,MAAmB,EAAA,CACtB;AAAA,YAGAnL,gBAAAA,EAACmJ,MACE,UAAA,OAAO2B,KAAU,WAAW9K,gBAAAA,EAACoJ,IAAA,EAAW,UAAA0B,EAAA,CAAM,IAAeA,EAAA,CAChE;AAAA,YAGCC,KAAU/K,gBAAAA,EAACqJ,IAAA,EAAe,UAAA0B,EAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAIpC/K,gBAAAA;AAAAA,QAACsJ;AAAA,QAAA;AAAA,UACC,YAAYa;AAAA,UACZ,eAAAZ;AAAA,UACA,IAAI,oBAAoBW,CAAO;AAAA,UAC/B,MAAK;AAAA,UACL,mBAAiB,mBAAmBA,CAAO;AAAA,UAE3C,UAAAlK,gBAAAA,EAACwJ,IAAA,EAAqB,KAAKwB,GAAY,YAAYb,GAChD,UAAA,OAAO/Y,KAAa,WACnB4O,gBAAAA,EAACyJ,IAAA,EAAa,UAAArY,EAAA,CAAS,IAEvBA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,EAEJ;AACF;AAEAyZ,GAAa,cAAc;AC3IpB,MAAMO,KAAmB,CAAC,WAAW,SAAS,GACxCC,KAAoB,CAAC,UAAU,QAAQ,GAY9CC,KAAgB,CAACC,MACjBA,MAAe,YACVlL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAoBFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAsBHmL,KAAiB,CAACC,GAAyBhY,MAC3CgY,MAAU,WACLpL;AAAA,sCAC2B5M,CAAI;AAAA,uCACHA,CAAI;AAAA;AAAA,QAKlC4M;AAAA,oCAC2B5M,CAAI;AAAA,qCACHA,CAAI;AAAA;AAAA,KAQ5BiY,KAAkB1J,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBlC,CAAC,EAAE,aAAA2J,QAAkBL,GAAcK,CAAW,CAAC;AAAA,IAC/C,CAAC,EAAE,QAAAC,GAAQ,OAAAC,EAAA,MAAYL,GAAeI,GAAQC,CAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmB3CC,KAAqB9J,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAa5BY,KAAcZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBrB+J,KAAc/J,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAerBgK,KAAiBhK,EAAO;AAAA;AAAA;AAAA,GAQ/BiK,KAAqB,CAACC,MAAgC;AAC1D,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO7L;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT,KAAK;AACH,aAAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT,KAAK;AACH,aAAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT,KAAK;AACH,aAAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOb,GAKa8L,KAAcnK,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAUZ,CAAC,EAAE,QAAAoK,QAAaA,KAAU,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQjE,CAAC,EAAE,YAAAC,QAAiBJ,GAAmBI,CAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAehDC,KAAmB,CAACJ,MAAgC;AAGxD,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO7L;AAAA,mBACM,CAAS;AAAA;AAAA;AAAA,uBAGL,CAAS;AAAA,wBACR,CAAS;AAAA,sBACX,CAAS;AAAA;AAAA,IAE3B,KAAK;AACH,aAAOA;AAAA,gBACG,CAAS;AAAA;AAAA;AAAA,uBAGF,CAAS;AAAA,wBACR,CAAS;AAAA,yBACR,CAAS;AAAA;AAAA,IAE9B,KAAK;AACH,aAAOA;AAAA,kBACK,CAAS;AAAA;AAAA;AAAA,sBAGL,CAAS;AAAA,yBACN,CAAS;AAAA,uBACX,CAAS;AAAA;AAAA,IAE5B,KAAK;AACH,aAAOA;AAAA,iBACI,CAAS;AAAA;AAAA;AAAA,sBAGJ,CAAS;AAAA,yBACN,CAAS;AAAA,wBACV,CAAS;AAAA;AAAA,EAAA;AAGjC,GAKakM,KAAevK,EAAO;AAAA;AAAA;AAAA;AAAA,WAOxB,CAAC,EAAE,QAAAoK,QAAaA,KAAU,qBAAqB;AAAA;AAAA,IAEtD,CAAC,EAAE,YAAAC,QAAiBC,GAAiBD,CAAU,CAAC;AAAA,GC/PvCG,KAAQpB,IACRqB,KAASpB,IA8BTqB,KAAc3N;AAAA,EACzB,CACE;AAAA,IACE,YAAAwM,IAAa;AAAA,IACb,OAAAE,IAAQ;AAAA,IACR,MAAAhY,IAAO;AAAA,IACP,MAAAyP;AAAA,IACA,aAAAyJ;AAAA,IACA,SAAAC;AAAA,IACA,UAAAxJ;AAAA,IACA,YAAAC;AAAA,IACA,WAAA3H;AAAA,IACA,OAAA0K;AAAA,IACA,GAAG9C;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCzE,IAAMuE,KAAgBC,GACtB,CAACqJ,GAAaC,CAAc,IAAIrG,EAAS,EAAK,GAE9C/C,IAAgBN,KAAYC,GAE5B,EAAE,aAAAM,GAAa,WAAAC,EAAA,IAAcC;AAAA,MACjC;AAAA,QACE,GAAGP;AAAA,QACH,YAAYI;AAAA,QACZ,aAAa;AAAA,MAAA;AAAA,MAEfF;AAAA,IAAA,GAIIuJ,IAAkB,OAAOH,KAAY,YAAYA,MAAY,QAAQ,WAAWA,GAChFI,IAAgBD,IAAkBH,IAA2B,MAC7DK,KAA0BD,KAAA,gBAAAA,EAAe,WAAUD,IAAkB,OAAOH,IAC5EM,IAAeF,KAAA,gBAAAA,EAAe,OAC9BG,KAAmBH,KAAA,gBAAAA,EAAe,cAAa,OAC/CI,IAAa,CAAC,CAACH;AAErB,WACE5H,gBAAAA;AAAAA,MAAC2G;AAAA,MAAA;AAAA,QACC,cAAc,MAAMoB,KAAcN,EAAe,EAAI;AAAA,QACrD,cAAc,MAAMM,KAAcN,EAAe,EAAK;AAAA,QAErD,UAAA;AAAA,UAAAM,KAAcP,KACbxH,gBAAAA,EAAC8G,IAAA,EAAY,YAAYgB,GAAkB,QAAQD,GAChD,UAAA;AAAA,YAAAD;AAAA,YACDjN,gBAAAA,EAACuM,IAAA,EAAa,YAAYY,GAAkB,QAAQD,EAAA,CAAc;AAAA,UAAA,GACpE;AAAA,UAEFlN,gBAAAA;AAAAA,YAAC0L;AAAA,YAAA;AAAA,cACE,GAAG5H,GAAWH,GAAa;AAAA,gBAC1B,KAAA3E;AAAA,gBACA,WAAAtD;AAAA,gBACA,OAAA0K;AAAA,cAAA,CACD;AAAA,cACD,aAAamF;AAAA,cACb,QAAQE;AAAA,cACR,OAAOhY;AAAA,cACP,YAAYmQ;AAAA,cAEZ,4BAACkI,IAAA,EACE,UAAA;AAAA,gBAAA5I,KAAQlD,gBAAAA,EAAC4C,MAAa,UAAAM,EAAA,CAAK;AAAA,gBAC3ByJ,KAAe3M,gBAAAA,EAAC+L,IAAA,EAAa,UAAAY,EAAA,CAAY;AAAA,cAAA,EAAA,CAC5C;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAD,GAAY,cAAc;AC3H1B,MAAMnK,KAAgB,CAAC9O,MACd4M;AAAA,8BACqB5M,CAAI;AAAA,iCACDA,CAAI;AAAA,sCACCA,CAAI;AAAA;AAAA;AAAA;AAAA,+BAIXA,CAAI;AAAA,gCACHA,CAAI;AAAA;AAAA;AAAA,KAkBvB4Z,KAAYrL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAarB,CAAC,EAAE,WAAAU,EAAA,MAAiBA,IAAY,SAAS,OAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBxD,CAAC,EAAE,MAAAjP,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA,IAGjC,CAAC,EAAE,WAAA6Z,GAAW,WAAAC,GAAW,SAAAC,GAAS,YAAAnK,EAAA,MAClCiK,KACA,CAACC,KACD,CAACC,KACD,CAACnK,KACDhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,WAAAkN,GAAW,SAAAC,GAAS,YAAAnK,EAAA,MACvBkK,KACA,CAACC,KACD,CAACnK,KACDhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,SAAAmN,GAAS,YAAAnK,QACZmK,KACA,CAACnK,KACDhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA;AAAA;AAAA;AAAA,KAKC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,WAAAqC,QACHA,KACArC;AAAA;AAAA,KAEC;AAAA,GAQQoN,KAAezL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBtB0L,KAAc1L,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoB9B,CAAC,EAAE,SAAAwL,QACHA,KACAnN;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA;AAAA;AAAA,KAIC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCQuC,KAAcZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAe9B,CAAC,EAAE,SAAAwL,QACHA,KACAnN;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBQsN,KAAc3L,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoB9B,CAAC,EAAE,SAAAwL,QACHA,KACAnN;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqCQuN,KAAU5L,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiB1B,CAAC,EAAE,SAAAwL,QACHA,KACAnN;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA,KAEC;AAAA,GC/RCwN,KAAY,MAChB7N,gBAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,OAAM;AAAA,IAEN,UAAAA,gBAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAE;AAAA,QACF,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,eAAc;AAAA,QACd,gBAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EACjB;AACF,GAQW8N,KAAQ/O;AAAA,EACnB,CACE;AAAA,IACE,MAAAtL,IAAO;AAAA,IACP,QAAA0B;AAAA,IACA,QAAA4V;AAAA,IACA,WAAAgD,IAAY;AAAA,IACZ,OAAAC,IAAQ;AAAA,IACR,cAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,WAAAxL,IAAY;AAAA,IACZ,UAAAU;AAAA,IACA,WAAA1H;AAAA,IACA,MAAAxK,IAAO;AAAA,IACP,OAAA5B;AAAA,IACA,cAAA6e;AAAA,IACA,UAAAhI;AAAA,IACA,SAAAiI;AAAA,IACA,QAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAzJ;AAAA,IACA,aAAA8H;AAAA,IACA,IAAA4B;AAAA,IACA,cAAcpJ;AAAA,IACd,oBAAoBqJ;AAAA,IACpB,GAAGC;AAAA,EAAA,GAELlL,MACG;AACH,UAAMC,IAAWC,EAAyB,IAAI,GACxCzE,IAAOuE,KAAgBC,GAGvBkL,IAAcjL,EAAO,SAAS,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,GAGtE,CAAC8J,GAAWoB,CAAY,IAAIlI,EAAS,EAAK,GAC1C,CAAC6G,IAAWsB,CAAY,IAAInI,EAAS,EAAK,GAC1C,CAACoI,GAAeC,EAAgB,IAAIrI,EAAS0H,KAAgB,EAAE,GAG/DvH,IAAetX,MAAU,QACzByf,IAA8B,OAAfnI,IAAsBtX,IAAgBuf,CAAX,GAG1CpG,IAAe,CAAChb,OAAqC;AACzD,MAAKmZ,KACHkI,GAAiBrhB,GAAE,OAAO,KAAK,GAEjC0Y,KAAA,QAAAA,EAAW1Y;AAAA,IACb,GAGMuhB,IAAc,CAACvhB,OAAoC;AACvD,MAAAkhB,EAAa,EAAI,GACjBP,KAAA,QAAAA,EAAU3gB;AAAA,IACZ,GAEMwhB,IAAa,CAACxhB,OAAoC;AACtD,MAAAkhB,EAAa,EAAK,GAClBN,KAAA,QAAAA,EAAS5gB;AAAA,IACX,GAGMyhB,IAAc,MAAM;;AACxB,UAAI9L,KAAY,CAACpE,EAAI,QAAS;AAG9B,YAAMmQ,MAAyBjK,KAAA,OAAO;AAAA,QACpC,OAAO,iBAAiB;AAAA,QACxB;AAAA,MAAA,MAF6B,gBAAAA,GAG5B;AACH,MAAAiK,MAAA,QAAAA,GAAwB,KAAKnQ,EAAI,SAAS;AAE1C,YAAM8H,KAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAClD,aAAO,eAAeA,IAAO,UAAU;AAAA,QACrC,UAAU;AAAA,QACV,OAAO9H,EAAI;AAAA,MAAA,CACZ,GAEI4H,KACHkI,GAAiB,EAAE,GAErB3I,KAAA,QAAAA,EAAWW,KAGX9H,EAAI,QAAQ,MAAA;AAAA,IACd,GAGMoQ,IAAgBL,EAAa,QAC7BM,IAAkBtB,KAAaqB,IAAgB,KAAK,CAAChM,GAGrDkM,IAAUf,KAAMG,EAAY,SAC5Ba,IAAgB5C,IAAc,GAAG2C,CAAO,iBAAiB,QACzDE,KAAUvB,KAAgBD,IAAQ,GAAGsB,CAAO,WAAW,QAEvDG,KAAc,CAACjB,GAAiBe,GAAeC,EAAO,EACzD,OAAO,OAAO,EACd,KAAK,GAAG,KAAK;AAEhB,6BACG,OAAA,EAEE,UAAA;AAAA,MAAA3K,KACC7E,gBAAAA,EAAC,SAAA,EAAM,SAASsP,GAAS,OAAO,EAAE,SAAS,SAAS,cAAc,EAAA,GAC/D,UAAAzK,EAAA,CACH;AAAA,MAGF7E,gBAAAA;AAAAA,QAACqN;AAAA,QAAA;AAAA,UACC,MAAA5Z;AAAA,UACA,WAAAiP;AAAA,UACA,WAAA6K;AAAA,UACA,SAASS;AAAA,UACT,YAAY,CAAC,CAAC5K;AAAA,UACd,WAAAkK;AAAA,UACA,WAAA5R;AAAA,UACA,cAAc,MAAMkT,EAAa,EAAI;AAAA,UACrC,cAAc,MAAMA,EAAa,EAAK;AAAA,UAEtC,4BAACnB,IAAA,EAEE,UAAA;AAAA,YAAAtY,KACC6K,gBAAAA;AAAAA,cAAC4C;AAAAA,cAAA;AAAA,gBACC,SAASoL;AAAA,gBACT,YAAY,CAAC,CAAC5K;AAAA,gBACd,UAAS;AAAA,gBACT,eAAY;AAAA,gBAEX,UAAAjO;AAAA,cAAA;AAAA,YAAA;AAAA,YAKL6K,gBAAAA;AAAAA,cAAC0N;AAAA,cAAA;AAAA,gBACE,GAAGe;AAAA,gBACJ,KAAAzP;AAAA,gBACA,IAAIsQ;AAAA,gBACJ,MAAApe;AAAA,gBACA,OAAA5B;AAAA,gBACA,cAAA6e;AAAA,gBACA,UAAU1F;AAAA,gBACV,SAASuG;AAAA,gBACT,QAAQC;AAAA,gBACR,WAAAX;AAAA,gBACA,UAAAlL;AAAA,gBACA,cAAY+B;AAAA,gBACZ,oBAAkBsK;AAAA,gBAClB,gBAAczB;AAAA,gBACd,SAASA;AAAA,gBACT,YAAY,CAAC,CAAC5K;AAAA,cAAA;AAAA,YAAA;AAAA,YAIfiM,KACCrP,gBAAAA;AAAAA,cAAC2N;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAASuB;AAAA,gBACT,cAAW;AAAA,gBACX,SAASlB;AAAA,gBACT,UAAU;AAAA,gBAEV,4BAACH,IAAA,CAAA,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAKd9C,KACC/K,gBAAAA;AAAAA,cAAC4C;AAAAA,cAAA;AAAA,gBACC,SAASoL;AAAA,gBACT,YAAY,CAAC,CAAC5K;AAAA,gBACd,UAAS;AAAA,gBACT,eAAY;AAAA,gBAEX,UAAA2H;AAAA,cAAA;AAAA,YAAA;AAAA,YAKJmD,KAAeI,MAAc,UAC5BjJ,gBAAAA;AAAAA,cAACuI;AAAA,cAAA;AAAA,gBACC,SAASI;AAAA,gBACT,YAAY,CAAC,CAAC5K;AAAA,gBACd,aAAU;AAAA,gBACV,eAAY;AAAA,gBAEX,UAAA;AAAA,kBAAAgM;AAAA,kBAAc;AAAA,kBAAEd;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACnB,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,MAID3B,KACC3M,gBAAAA,EAAC,OAAA,EAAI,IAAIuP,GAAe,OAAO,EAAE,WAAW,GAAG,UAAU,GAAA,GACtD,UAAA5C,EAAA,CACH;AAAA,MAIDsB,KAAgBD,KACfhO,gBAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIwP;AAAA,UACJ,MAAK;AAAA,UACL,OAAO,EAAE,WAAW,GAAG,UAAU,IAAI,OAAO,UAAA;AAAA,UAE3C,UAAAvB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AACF;AAEAH,GAAM,cAAc;AC5Qb,MAAM4B,KAAgB1N,EAAO;AAAA;AAAA;AAAA,WAGzB,CAAC,EAAE,WAAA2N,EAAA,MACVA,IAAY,8CAA8C,0CAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4B3FC,KAAc5N,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiCrB6N,KAAoB7N,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMpB,CAAC,EAAE,WAAA8N,EAAA,MACnBA,IAAY,yCAAyC,qCAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAM9E,CAAC,EAAE,QAAAC,GAAQ,WAAAJ,EAAA,MACvBA,KAEII,IADA,gBAGE,yBAAyB;AAAA,WACxB,CAAC,EAAE,QAAAA,GAAQ,WAAAJ,QAClBA,KAAaI,IACT,oCACAA,IACE,qCACA,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA,YAKzB,CAAC,EAAE,UAAA3M,EAAA,MAAgBA,IAAW,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAYnD,CAAC,EAAE,QAAA2M,GAAQ,WAAAJ,EAAA,MAAiBA,IAAY,cAAcI,IAAS,cAAc,WAAY;AAAA,eAC3F,CAAC,EAAE,QAAAA,GAAQ,WAAAJ,EAAA,MAAiBA,IAAY,IAAII,IAAS,IAAI,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAwBxD,CAAC,EAAE,QAAAA,GAAQ,WAAAJ,EAAA,MACvBA,KAEII,IADA,gBAGE,+BAA+B;AAAA,aAC9B,CAAC,EAAE,QAAAA,GAAQ,WAAAJ,EAAA,MAClBA,IACI,oCACAI,IACE,qCACA,iCAAiC;AAAA;AAAA;AAAA;AAAA,iBAI5B,CAAC,EAAE,WAAAJ,GAAW,QAAAI,EAAA,MACzB,CAACJ,KAAa,CAACI,IAAS,kBAAkB,mBAAmB;AAAA,eACpD,CAAC,EAAE,WAAAJ,GAAW,QAAAI,EAAA,MAAc,CAACJ,KAAa,CAACI,IAAS,IAAI,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmB5DC,KAAehO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBtBiO,KAAgBjO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,aAKvB,CAAC,EAAE,WAAA2N,EAAA,MAAiBA,IAAY,IAAI,CAAE;AAAA;AAAA,GAOtCO,KAAgBlO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOvB,CAAC,EAAE,WAAA2N,EAAA,MAAiBA,IAAY,IAAI,CAAE;AAAA;AAAA,eAEpC,CAAC,EAAE,UAAAxF,EAAA,MAAgBA,IAAW,kBAAkB,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAejEgG,KAAqBnO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAc5BoO,KAAiBpO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aASxB,CAAC,EAAE,WAAA2N,EAAA,MAAiBA,IAAY,IAAI,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAWpC,CAAC,EAAE,WAAAA,EAAA,MAAiBA,IAAY,IAAI,CAAE;AAAA;AAAA,GAOxCU,KAAiBrO,EAAO;AAAA;AAAA;AAAA;AAAA,GAaxBsO,KAA0BtO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BjCuO,KAAwBvO,EAAO;AAAA;AAAA;AAAA;AAAA,GAS/BwO,KAAqBxO,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAUzB,CAAC,EAAE,QAAA+N,EAAA,MACfA,IACI,2CACA,iCAAiC;AAAA,WAC9B,CAAC,EAAE,QAAAA,EAAA,MACVA,IACI,6CACA,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAYzB,CAAC,EAAE,QAAAA,EAAA,MACfA,IACI,2CACA,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GChVpCU,KAAO1R;AAAA,EAClB,CAAC,EAAE,WAAA4Q,IAAY,IAAO,UAAAve,GAAU,WAAAsK,GAAW,OAAA0K,EAAA,GAASpH,MAEhDgB,gBAAAA;AAAAA,IAAC0P;AAAA,IAAA;AAAA,MACC,KAAA1Q;AAAA,MACA,WAAA2Q;AAAA,MACA,WAAAjU;AAAA,MACA,OAAA0K;AAAA,MACA,MAAK;AAAA,MACL,cAAW;AAAA,MAEX,UAAApG,gBAAAA,EAAC4P,IAAA,EAAY,MAAK,QAAQ,UAAAxe,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAI3C;AAEAqf,GAAK,cAAc;AC3BZ,MAAMC,KAAiB,CAAC;AAAA,EAC7B,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAxf;AAAA,EACA,SAAAyf;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AACF,MAA2B;AACzB,QAAMC,IAAavN,EAAuB,IAAI,GACxC,CAAC7S,GAAUqgB,CAAW,IAAIxK,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG;AAwD5D,SArDAI,GAAU,MAAM;AACd,QAAI,CAAC8J,KAAW,CAACC,EAAU,QAAS;AAEpC,UAAMM,IAAiB,MAAM;AAC3B,UAAI,CAACN,EAAU,QAAS;AAExB,YAAMO,IAAOP,EAAU,QAAQ,sBAAA;AAG/B,MAAAK,EAAY;AAAA,QACV,KAAKE,EAAK;AAAA,QACV,MAAMA,EAAK,QAJD;AAAA,MAIS,CACpB;AAAA,IACH;AAEA,WAAAD,EAAA,GAGA,OAAO,iBAAiB,UAAUA,GAAgB,EAAI,GACtD,OAAO,iBAAiB,UAAUA,CAAc,GAEzC,MAAM;AACX,aAAO,oBAAoB,UAAUA,GAAgB,EAAI,GACzD,OAAO,oBAAoB,UAAUA,CAAc;AAAA,IACrD;AAAA,EACF,GAAG,CAACP,GAASC,CAAS,CAAC,GAGvB/J,GAAU,MAAM;AACd,QAAI,CAAC8J,EAAS;AAEd,UAAMS,IAAqB,CAAC3jB,MAAkB;AAC5C,MACEujB,EAAW,WACX,CAACA,EAAW,QAAQ,SAASvjB,EAAE,MAAc,KAC7CmjB,EAAU,WACV,CAACA,EAAU,QAAQ,SAASnjB,EAAE,MAAc,MAE5CojB,KAAA,QAAAA;AAAA,IAEJ,GAGMQ,IAAQ,WAAW,MAAM;AAC7B,eAAS,iBAAiB,aAAaD,CAAkB;AAAA,IAC3D,GAAG,GAAG;AAEN,WAAO,MAAM;AACX,mBAAaC,CAAK,GAClB,SAAS,oBAAoB,aAAaD,CAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAACT,GAASE,GAASD,CAAS,CAAC,GAE3BD,IAEEW;AAAA,IACLtR,gBAAAA;AAAAA,MAACsQ;AAAA,MAAA;AAAA,QACC,KAAKU;AAAA,QACL,OAAO;AAAA,UACL,KAAKpgB,EAAS;AAAA,UACd,MAAMA,EAAS;AAAA,QAAA;AAAA,QAEjB,MAAK;AAAA,QACL,cAAW;AAAA,QACX,cAAAkgB;AAAA,QACA,cAAAC;AAAA,QAEA,UAAA/Q,gBAAAA,EAACuQ,MAAuB,UAAAnf,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEnC,SAAS;AAAA,EAAA,IAhBU;AAkBvB;AAEAsf,GAAe,cAAc;AClEtB,MAAMa,KAAWxS;AAAA,EACtB,CACE;AAAA,IACE,IAAAwP;AAAA,IACA,MAAArL;AAAA,IACA,OAAA2B;AAAA,IACA,QAAAkL,IAAS;AAAA,IACT,UAAA3M,IAAW;AAAA,IACX,WAAA0M,IAAY;AAAA,IACZ,WAAA0B,IAAY;AAAA,IACZ,eAAAC,IAAgB;AAAA,IAChB,WAAA9B,IAAY;AAAA,IACZ,SAAA+B;AAAA,IACA,SAAAC;AAAA,IACA,WAAAjW;AAAA,EAAA,GAEFsD,MACG;AACH,UAAM4S,IAAUnO,EAA0B,IAAI,GACxC,CAACoO,GAAaC,CAAc,IAAIrL,EAAS,EAAK,GAC9CsL,IAAgBtO,EAAkD,MAAS,GAC3EuO,IAAgBvO,EAAkD,MAAS,GAG3EwO,IAAc,MAAM;AACxB,MAAIF,EAAc,YAChB,aAAaA,EAAc,OAAO,GAClCA,EAAc,UAAU,SAEtBC,EAAc,YAChB,aAAaA,EAAc,OAAO,GAClCA,EAAc,UAAU;AAAA,IAE5B,GAGME,IAAmB,MAAM;AAG7B,UAFAD,EAAA,GAEItC,KAAa+B,GAAS;AACxB,YAAIG,EAAa;AAGjB,QAAAE,EAAc,UAAU,WAAW,MAAM;AACvC,UAAAD,EAAe,EAAI;AAAA,QACrB,GAAG,GAAG;AAAA,MACR;AAAA,IACF,GAGMK,IAAmB,MAAM;AAC7B,MAAAF,EAAA,GAGAD,EAAc,UAAU,WAAW,MAAM;AACvC,QAAAF,EAAe,EAAK;AAAA,MACtB,GAAG,GAAG;AAAA,IACR;AAEA,WACEzM,gBAAAA,EAAA9L,IAAA,EACE,UAAA;AAAA,MAAA8L,gBAAAA;AAAAA,QAACwK;AAAA,QAAA;AAAA,UACC,KAAK,CAAC9e,MAAS;AAEb,YAAI,OAAOiO,KAAQ,aACjBA,EAAIjO,CAAI,IACCiO,MACTA,EAAI,UAAUjO,IAEZA,MACF6gB,EAAQ,UAAU7gB;AAAA,UAEtB;AAAA,UACA,IAAAwd;AAAA,UACA,QAAAwB;AAAA,UACA,UAAA3M;AAAA,UACA,WAAA0M;AAAA,UACA,SAAA6B;AAAA,UACA,WAAAhC;AAAA,UACA,WAAAjU;AAAA,UACA,MAAK;AAAA,UACL,iBAAe0H;AAAA,UACf,gBAAc2M,IAAS,SAAS;AAAA,UAChC,iBAAeJ,KAAa+B,IAAU,SAAS;AAAA,UAC/C,MAAK;AAAA,UACL,cAAcQ;AAAA,UACd,cAAcC;AAAA,UAGb,UAAA;AAAA,YAAAjP,KAAQlD,gBAAAA,EAACgQ,IAAA,EAAa,eAAY,QAAQ,UAAA9M,GAAK;AAAA,YAGhDlD,gBAAAA,EAACiQ,IAAA,EAAc,WAAAN,GAAuB,UAAA9K,EAAA,CAAM;AAAA,YAG3C2M,KAAa,CAAC7B,KACb3P,gBAAAA,EAACkQ,MAAc,WAAAP,GAAsB,UAAU8B,GAAe,eAAY,QACxE,UAAAzR,gBAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,OAAM;AAAA,gBAEN,UAAAA,gBAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,GAAE;AAAA,oBACF,QAAO;AAAA,oBACP,aAAY;AAAA,oBACZ,eAAc;AAAA,oBACd,gBAAe;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACjB;AAAA,YAAA,EACF,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKH2P,KAAa+B,KACZ1R,gBAAAA;AAAAA,QAAC0Q;AAAA,QAAA;AAAA,UACC,SAASmB;AAAA,UACT,WAAWD;AAAA,UACX,SAAS,MAAME,EAAe,EAAK;AAAA,UACnC,cAAcI;AAAA,UACd,cAAcC;AAAA,UAEb,UAAAT;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AACF;AAEAH,GAAS,cAAc;ACxJhB,MAAMa,KAAY,CAAC;AAAA,EACxB,OAAAtH;AAAA,EACA,UAAA1Z;AAAA,EACA,WAAAue,IAAY;AAAA,EACZ,WAAAjU;AACF,wBAEKyU,IAAA,EAAmB,WAAAzU,GAAsB,MAAK,SAAQ,cAAYoP,GAEhE,UAAA;AAAA,EAAAA,KACC9K,gBAAAA,EAACoQ,IAAA,EAAe,WAAAT,GAAsB,eAAaA,GAChD,UAAA7E,GACH;AAAA,EAIF9K,gBAAAA,EAACqQ,MAAgB,UAAAjf,EAAA,CAAS;AAAA,GAC5B;AAIJghB,GAAU,cAAc;ACzBjB,MAAMC,KAAc,CAAC;AAAA,EAC1B,IAAA9D;AAAA,EACA,OAAA1J;AAAA,EACA,QAAAkL,IAAS;AAAA,EACT,SAAA4B;AAAA,EACA,WAAAjW;AACF,MAEIsE,gBAAAA;AAAAA,EAACwQ;AAAA,EAAA;AAAA,IACC,IAAAjC;AAAA,IACA,QAAAwB;AAAA,IACA,SAAA4B;AAAA,IACA,WAAAjW;AAAA,IACA,MAAK;AAAA,IACL,gBAAcqU,IAAS,SAAS;AAAA,IAChC,MAAK;AAAA,IAEJ,UAAAlL;AAAA,EAAA;AAAA;AAKPwN,GAAY,cAAc;AC5B1B,MAAMjQ,KAAmB,CAACC,MACpBA,MAAY,YACPhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAqBFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAuBHkC,KAAgB,CAAC9O,MACd4M;AAAA,gCACuB5M,CAAI;AAAA,KAOvB6e,KAAWtQ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,YASnB,CAAC,EAAE,YAAAqB,EAAA,MAAiBA,IAAa,gBAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlE,CAAC,EAAE,SAAAhB,QAAcD,GAAiBC,CAAO,CAAC;AAAA;AAAA;AAAA,IAG1C,CAAC,EAAE,MAAA5O,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASjC,CAAC,EAAE,YAAA4P,QACHA,KACAhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC9EQkS,KAAOxT;AAAA,EAClB,CACE;AAAA,IACE,SAAAsD,IAAU;AAAA,IACV,MAAA5O,IAAO;AAAA,IACP,UAAA2P;AAAA,IACA,WAAA1H;AAAA,IACA,UAAAtK;AAAA,IACA,YAAAiS;AAAA,IACA,GAAGlS;AAAA,EAAA,GAELoS,MACG;AACH,UAAMC,IAAWC,EAA0B,IAAI,GACzCzE,IAAMuE,KAAgBC,GAGtBE,IAAgBN,KAAYC,GAE5B,EAAE,WAAAmP,MAAcC;AAAA,MACpB;AAAA,QACE,GAAGthB;AAAA,QACH,YAAYuS;AAAA,QACZ,aAAa;AAAA,MAAA;AAAA,MAEfF;AAAA,IAAA;AAGF,WACExD,gBAAAA;AAAAA,MAACsS;AAAA,MAAA;AAAA,QACC,KAAAtT;AAAA,QACA,IAAG;AAAA,QACH,WAAAtD;AAAA,QACA,SAAA2G;AAAA,QACA,MAAA5O;AAAA,QACC,GAAGqQ,GAAW0O,GAAW,EAAE,cAAc9O,GAAe;AAAA,QAExD,UAAAtS;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAmhB,GAAK,cAAc;ACrDnB,MAAMG,KAASxV;AAAA;AAAA;AAAA,GAKTyV,KAAWzV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWJ0V,KAAkB5Q,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUzB6Q,KAAgB7Q,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMrB0Q,EAAM;AAAA,GAGRI,KAAc9Q,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAiBnB2Q,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAaVI,KAAoB/Q,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAc3BgR,KAAmBhR,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiB1BiR,KAAmBjR,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0C1BkR,KAAkBlR,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC5DhCmR,KAAmB,MACvBnT,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAAA,gBAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,GAAE;AAAA,IACF,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,EAAA;AACjB,GACF;AAGF,SAASoT,GAAUpU,GAA+B1P,GAAiB;AACjE,MAAK0P,GACL;AAAA,QAAI,OAAOA,KAAQ,YAAY;AAC7B,MAAAA,EAAI1P,CAAK;AACT;AAAA,IACF;AACA,QAAI;AACA,MAAA0P,EAA8B,UAAU1P;AAAA,IAC5C,QAAQ;AAAA,IAER;AAAA;AACF;AAEO,MAAM+jB,KAAQtU;AAAA,EACnB,CACE;AAAA,IACE,MAAAuU;AAAA,IACA,cAAAC;AAAA,IACA,UAAAniB;AAAA,IACA,OAAA0Z;AAAA,IACA,YAAA0I,IAAa;AAAA,IACb,eAAAC,IAAgB;AAAA,IAChB,YAAAC,IAAa;AAAA,IACb,gBAAAC,IAAiB;AAAA,IACjB,gBAAAC,IAAiB;AAAA,IACjB,8BAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,GAEF7Q,MACG;AAEH,QAAI,OAAO,WAAa,IAAa,QAAO;AAG5C,UAAM8Q,IADc5Q,EAAuB,IAAI,GAGzC6Q,IAAUC,GAAA,GAEVC,IAAeC;AAAA,MACnB,CAACC,MAAyB;AACxB,QAAAnB,EAAa,EAAK;AAAA,MACpB;AAAA,MACA,CAACA,CAAY;AAAA,IAAA,GAGToB,IAAiB3P,GAAQ,MACzB8O,KACG,SAAS,MACf,CAACA,CAAe,CAAC;AAGpB,IAAAc,GAAiB,EAAE,YAAY,CAACtB,GAAM;AAEtC,UAAMuB,IAAmBpB,MAAkB,IACrCqB,IAAWD,KAAoBnB,GAC/BqB,IAAeF,KAAoBjB,GAEnC,EAAE,cAAAoB,GAAc,eAAAC,EAAA,IAAkBC;AAAA,MACtC;AAAA,QACE,QAAQ5B;AAAA,QACR,SAAS,MAAMkB,EAAa,WAAW;AAAA;AAAA,QAEvC,2BAA2B,CAACM;AAAA;AAAA,QAE5B,eAAeC;AAAA,QACf,8BAA8BA,IAC1BlB,IACA,MAAM;AAAA,MAAA;AAAA,MAEZQ;AAAA,IAAA,GAGI,EAAE,YAAAc,EAAA,IAAeC,GAAA,GAEjB,EAAE,aAAAC,IAAa,YAAAC,EAAA,IAAeC;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA,QAIE,cACE/B,KAAc1I,IACV,OAAOA,KAAU,WACfA,IACA,UACFA,IACE,SACA;AAAA,QACR,mBAAmB,CAAC0I,KAAc1I,IAAQwJ,IAAU;AAAA,MAAA;AAAA,MAEtDD;AAAA,IAAA,GAGImB,IAAoBf,GAAY,MAAM;AAC1C,MAAKI,KACLL,EAAa,aAAa;AAAA,IAC5B,GAAG,CAACK,GAAkBL,CAAY,CAAC,GAE7BiB,KAAoB3R,GAAWkR,GAAcK,IAAaF,GAAY;AAAA,MAC1E,KAAK,CAACpkB,MAAgC;AACpC,QAAAsjB,EAAU,UAAUtjB,GACpBqiB,GAAO7P,GAAcxS,CAAI;AAAA,MAC3B;AAAA,MACA,WAAWkjB;AAAA,MACX,OAAOC;AAAA,MACP,aAAa;AAAA,IAAA,CACd,GAKKwB,IAAgB1Q,GAAQ,MAAM;AAClC,YAAM,EAAE,eAAA2Q,GAAe,aAAAC,GAAa,GAAGC,MAASZ;AAChD,aAAOtB,IAAiBsB,IAAgBY;AAAA,IAC1C,GAAG,CAACZ,GAAetB,CAAc,CAAC,GAE5BmC,sBACHlD,IAAA,EACC,UAAA;AAAA,MAAA5S,gBAAAA;AAAAA,QAAC6S;AAAA,QAAA;AAAA,UACE,GAAG/O,GAAW4R,GAAe;AAAA,YAC5B,WAAW3B;AAAA,YACX,OAAOC;AAAA,YACP,aAAa;AAAA,UAAA,CACd;AAAA,QAAA;AAAA,MAAA;AAAA,MAEHhU,gBAAAA,EAAC+V,IAAA,EAAW,SAAO,IAAC,cAAY,IAAC,WAAS,IACxC,UAAA1Q,gBAAAA,EAACyN,IAAA,EAAa,GAAG2C,IACd,UAAA;AAAA,QAAA,CAACjC,MAAe1I,KAAS+J,MACxBxP,gBAAAA,EAAC0N,IAAA,EACE,UAAA;AAAA,UAAAjI,IACC9K,gBAAAA,EAACgT,MAAkB,GAAGsC,GAAY,IAAIhB,GACnC,UAAAxJ,EAAA,CACH,IAEA9K,gBAAAA,EAAC,QAAA,CAAA,CAAK;AAAA,UAEP6U,IACC7U,gBAAAA;AAAAA,YAACiT;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAASuC;AAAA,cACT,WAAWrB;AAAA,cACX,OAAOC;AAAA,cACP,cAAW;AAAA,cAEX,4BAACjB,IAAA,CAAA,CAAiB;AAAA,YAAA;AAAA,UAAA,IAElB;AAAA,QAAA,GACN;AAAA,QAEFnT,gBAAAA,EAACkT,MAAiB,UAAA9hB,EAAA,CAAS;AAAA,MAAA,EAAA,CAC7B,EAAA,CACF;AAAA,IAAA,GACF;AAIF,WAAI,CAACkiB,KAAQ,CAACqB,IAAuB,OAC9BrD,GAAawE,GAASnB,CAAc;AAAA,EAC7C;AACF;AAEAtB,GAAM,cAAc;ACpQpB,MAAM2C,KAAoB,OAAO;AAAA,EAC/B,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,SAAS;AACX,IAEaC,KAAajU,EAAO;AAAA;AAAA;AAAA,GAKpBc,KAAQd,EAAO;AAAA;AAAA;AAAA,GAKfkU,KAAclU,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAclB,CAAC,EAAE,UAAAoB,EAAA,MAAeA,IAAW,wCAAwC,4BAA4B;AAAA,YACrG,CAAC,EAAE,MAAA3P,EAAA,MACXA,MAAS,OACL,sCACA,mCAAmC;AAAA,eAC5B,CAAC,EAAE,MAAAA,EAAA,MACdA,MAAS,OACL,yCACA,sCAAsC;AAAA;AAAA,WAEnC,CAAC,EAAE,UAAA0iB,GAAU,MAAA1iB,QAChB0iB,MAAa,WACR1iB,MAAS,OAAO,oDAAoD,oDAEtEA,MAAS,OAAO,kDAAkD,+CAC1E;AAAA;AAAA;AAAA;AAAA,MAIG,MAAMuiB,IAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBlBI,KAAcpU,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsB5B,MAAMgU,IAAmB;AAAA;AAAA,GAIlBjK,KAAc/J,EAAO;AAAA;AAAA;AAAA;AAAA,GAMrBqU,KAAarU,EAAO;AAAA;AAAA;AAAA;AAAA,GAMpBsU,KAActU,EAAO;AAAA;AAAA;AAAA,mBAGf,CAAC,EAAE,WAAAuU,EAAA,MAAgBA,MAAc,OAAO,gBAAgB,aAAa;AAAA;AAAA;AAAA;AAAA,WAI7E,CAAC,EAAE,MAAA9iB,QAIH,QAHaA,MAAS,OACzB,qDACA,kDACsB,OAC3B;AAAA,YACS,CAAC,EAAE,MAAAA,EAAA,MACXA,MAAS,OACL,qDACA,kDACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASI,MAAMuiB,IAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBlBQ,KAAaxU,EAAO;AAAA;AAAA;AAAA;AAAA,WAItB,CAAC,EAAE,MAAAvO,EAAA,MACVA,MAAS,OACL,mDACA,gDAAgD;AAAA,YAC5C,CAAC,EAAE,MAAAA,EAAA,MACXA,MAAS,OACL,mDACA,gDAAgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAalD,MAAMuiB,IAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC3GzBS,KAAWC,IAEXC,KAAYC,IAEZC,KAASC,IAETC,KAAW5L,IAEJ6L,KAAcjY;AAAA,EAC1B,CACE;AAAA,IACA,KAAAkY;AAAA,IACA,KAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,OAAA7nB;AAAA,IACA,cAAA6e;AAAA,IACA,UAAAhI;AAAA,IACA,eAAAiR;AAAA,IACA,eAAAC;AAAA,IACA,UAAAjU;AAAA,IACA,WAAA1H;AAAA,IACA,OAAAmJ;AAAA,IACA,aAAA8H;AAAA,IACA,OAAAqB,IAAQ;AAAA,IACR,IAAAO;AAAA,IACA,UAAA4H,IAAW;AAAA,IACX,MAAA1iB,IAAO;AAAA,IACP,GAAGoiB;AAAA,EAAA,GAEJtS,MACI;AACJ,UAAMC,IAAWC,EAAgC,IAAI;AAErD,IAAAoD,GAAU,MAAM;AACf,MAAKtD,MACD,OAAOA,KAAiB,aAC3BA,EAAaC,EAAS,OAAO,IAE3BD,EAAiE,UAAUC,EAAS;AAAA,IAExF,GAAG,CAACD,CAAY,CAAC;AACjB,UAAMqD,IAAetX,MAAU,QACzB,CAACgoB,GAAUC,CAAW,IAAI9Q,EAA6B0H,CAAY,GACnEY,IAAenI,IAAetX,IAAQgoB,GAEtCE,IAAQ,CAACrgB,MAAc;AAC5B,UAAI3F,IAAO2F;AACX,aAAI8f,MAAQ,WAAWzlB,IAAO,KAAK,IAAIA,GAAMylB,CAAG,IAC5CC,MAAQ,WAAW1lB,IAAO,KAAK,IAAIA,GAAM0lB,CAAG,IACzC1lB;AAAA,IACR,GAEMimB,IAAqB,CAACtgB,MAA0B;AACrD,MAAAigB,KAAA,QAAAA,EAAgBjgB,IAChBkgB,KAAA,QAAAA,EAAgBlgB;AAAA,IACjB,GAEMugB,IAAW,CAACvgB,MAA0B;;AAG3C,UAFKyP,KAAc2Q,EAAYpgB,CAAC,GAE5BqM,EAAS,SAAS;AACrB,cAAMmU,KAAezS,IAAA,OAAO,yBAAyB,OAAO,iBAAiB,WAAW,OAAO,MAA1E,gBAAAA,EAA6E;AAClG,QAAAyS,KAAA,QAAAA,EAAc,KAAKnU,EAAS,SAASrM,MAAM,SAAY,KAAK,OAAOA,CAAC;AACpE,cAAMygB,IAAK,IAAI,MAAM,SAAS,EAAE,SAAS,IAAM;AAC/C,eAAO,eAAeA,GAAI,UAAU,EAAE,UAAU,IAAO,OAAOpU,EAAS,SAAS,GAEhF2C,KAAA,QAAAA,EAAWyR;AAAA,MACZ;AACA,MAAAH,EAAmBtgB,CAAC;AAAA,IACrB,GAEM0gB,IAAoB,CAACpqB,MAAqC;AAC5D,YAAMqqB,IAAMrqB,EAAE,OAAO,OAEfmH,IAASkjB,MAAQ,KAAMb,MAAQ,SAAYA,IAAM,IAAK,OAAOa,CAAG,GAChEC,IAAQ,OAAO,MAAMnjB,CAAM,IAAKqiB,MAAQ,SAAYA,IAAM,IAAKO,EAAM5iB,CAAM;AACjF,MAAKgS,KAAc2Q,EAAYQ,CAAK,GACpCN,EAAmBM,CAAK,GACxB5R,KAAA,QAAAA,EAAW1Y;AAAA,IACf,GAEMuqB,IAAY,MAAM;AAEvB,YAAMxmB,IAAOgmB,GADAzI,KAAgB,MACFoI,KAAQ,EAAE;AACrC,MAAAO,EAASlmB,CAAI;AAAA,IACd,GAEMymB,IAAY,MAAM;AAEvB,YAAMzmB,IAAOgmB,GADAzI,KAAgB,MACFoI,KAAQ,EAAE;AACrC,MAAAO,EAASlmB,CAAI;AAAA,IACd,GACM0mB,KAAgB,CAACzqB,MAAuC;AAC7D,MAAIA,EAAE,QAAQ,aACbA,EAAE,eAAA,GACFuqB,EAAA,KACUvqB,EAAE,QAAQ,gBACpBA,EAAE,eAAA,GACFwqB,EAAA;AAAA,IAEF,GAEM3I,IAAUf,KAAM,UAAU,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,IAEhE4J,IAAQpJ,MAAiB,UAAakI,MAAQ,UAAalI,KAAgBkI,GAC3EmB,KAAQrJ,MAAiB,UAAamI,MAAQ,UAAanI,KAAgBmI;AAEjF,WACC7R,gBAAAA,EAAC4Q,MAAW,WAAAva,GACV,UAAA;AAAA,MAAAmJ,uBACC/B,IAAA,EAAM,SAASwM,GAAS,eAAa,IACpC,UAAAzK,GACF;AAAA,MAEDQ,gBAAAA,EAAC6Q,IAAA,EAAY,WAAW,YAAYC,CAAQ,SAAS1iB,CAAI,IAAI,MAAAA,GAAY,UAAA2P,GAAoB,UAAA+S,GAC3F,UAAA;AAAA,QAAAA,MAAa,aACbnW,gBAAAA;AAAAA,UAACwW;AAAA,UAAA;AAAA,YACD,WAAU;AAAA,YACV,KAAI;AAAA,YACJ,MAAA/iB;AAAA,YACA,MAAK;AAAA,YACL,SAASwkB;AAAA,YACT,UAAU7U,KAAY+U;AAAA,YAEtB,4BAACxB,IAAA,EAAU,MAAMljB,MAAS,OAAO,KAAK,MAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAG9CuM,gBAAAA;AAAAA,UAACoW;AAAA,UAAA;AAAA,YACC,GAAIP;AAAA,YACL,IAAIvG;AAAA,YACJ,KAAK9L;AAAA,YACL,MAAK;AAAA,YACL,OAAOuL,MAAiB,SAAY,KAAK,OAAOA,CAAY;AAAA,YAC5D,UAAU8I;AAAA,YACV,WAAWK;AAAA,YACX,KAAAjB;AAAA,YACA,KAAAC;AAAA,YACA,MAAAC;AAAA,YACA,UAAA/T;AAAA,YACA,gBAAc4K;AAAA,YACd,oBAAkBrB,IAAc,GAAG2C,CAAO,UAAU;AAAA,YACpD,WAAW6G,MAAa,YAAY,uBAAuB;AAAA,YAC3D,aAAW1iB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEX0iB,MAAa,aACbnW,gBAAAA;AAAAA,UAACwW;AAAA,UAAA;AAAA,YACD,WAAU;AAAA,YACV,KAAI;AAAA,YACJ,MAAA/iB;AAAA,YACA,MAAK;AAAA,YACL,SAASukB;AAAA,YACT,UAAU5U,KAAYgV;AAAA,YAEtB,4BAAC3B,IAAA,EAAS,MAAMhjB,MAAS,OAAO,KAAK,MAAA,CAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAG7C0iB,MAAa,YACb9Q,gBAAAA,EAACgR,IAAA,EAAW,WAAU,eACrB,UAAA;AAAA,UAAArW,gBAAAA;AAAAA,YAACsW;AAAA,YAAA;AAAA,cACY,WAAU;AAAA,cACV,MAAK;AAAA,cACL,MAAA7iB;AAAA,cACA,SAASukB;AAAA,cACT,UAAU5U,KAAYgV;AAAA,cACtB,WAAU;AAAA,cAEV,4BAACvB,IAAA,CAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,UAEV7W,gBAAAA;AAAAA,YAACsW;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,cAAW;AAAA,cACX,OAAM;AAAA,cACN,MAAA7iB;AAAA,cACA,SAASwkB;AAAA,cACT,UAAU7U,KAAY+U;AAAA,cACtB,WAAU;AAAA,cAEjB,4BAACpB,IAAA,CAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ,EAAA,CACb;AAAA,MAAA,GAEF;AAAA,MACCpK,KAAe3M,gBAAAA,EAAC+L,IAAA,EAAY,IAAI,GAAGuD,CAAO,SAAU,UAAA3C,EAAA,CAAY;AAAA,IAAA,GAClE;AAAA,EAEF;AACD;AACAqK,GAAY,cAAc;AC7PnB,MAAMqB,KAAerW,EAAO;AAAA;AAAA;AAAA;AAAA,YAIvB,CAAC,EAAE,UAAAoB,EAAA,MAAgBA,IAAW,gBAAgB,SAAU;AAAA,aACvD,CAAC,EAAE,UAAAA,EAAA,MAAgBA,IAAW,sCAAsC,CAAE;AAAA;AAAA,GAWtEkV,KAAYtW,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAUnBuW,KAAcvW,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAerBwW,KAAiBxW,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBjCuW,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKXF,EAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZE,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKXA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKXA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBXA,EAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKXA,EAAW;AAAA;AAAA;AAAA,GAQFE,KAAYzW,EAAO;AAAA;AAAA;AAAA;AAAA,GAanB0W,KAAa1W,EAAO;AAAA;AAAA;AAAA,WAGtB,CAAC,EAAE,UAAAoB,EAAA,MAAgBA,IAAW,0CAA0C,8BAA+B;AAAA;AAAA;AAAA,GAYrGuV,KAAmB3W,EAAO;AAAA,WAC5B,CAAC,EAAE,UAAAoB,EAAA,MAAgBA,IAAW,gDAAgD,oCAAqC;AAAA;AAAA;AAAA;AAAA,GC9IjHwV,KAAQ7Z;AAAA,EACnB,CAAC,EAAE,OAAA8F,GAAO,aAAA8H,GAAa,WAAAjR,GAAW,GAAG2K,EAAA,GAAcrH,MAAQ;AACzD,UAAMqE,IAAa,EAAQgD,EAAW;AAEtC,WACEhB,gBAAAA,EAACgT,MAAa,UAAUhV,GAAY,WAAA3H,GAAsB,iBAAe2H,IAAa,SAAS,QAC7F,UAAA;AAAA,MAAAgC,gBAAAA,EAACiT,IAAA,EAAU,UAAUjV,GACnB,UAAA;AAAA,QAAArD,gBAAAA,EAACuY,MAAY,KAAAvZ,GAAU,MAAK,SAAQ,UAAUqE,GAAa,GAAGgD,GAAY;AAAA,QAC1ErG,gBAAAA,EAACwY,IAAA,EAAe,eAAW,GAAA,CAAC;AAAA,MAAA,GAC9B;AAAA,OACE3T,KAAS8H,MACTtH,gBAAAA,EAACoT,IAAA,EACE,UAAA;AAAA,QAAA5T,IAAQ7E,gBAAAA,EAAC0Y,IAAA,EAAW,UAAUrV,GAAa,aAAM,IAAgB;AAAA,QACjEsJ,IAAc3M,gBAAAA,EAAC2Y,IAAA,EAAiB,UAAUtV,GAAa,aAAY,IAAsB;AAAA,MAAA,EAAA,CAC5F;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAuV,GAAM,cAAc;ACbpB,MAAMC,KAAmB3b;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYnB4b,KAAmBzY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQVwY,EAAgB;AAAA;AAAA,GAWlBE,KAAe/W,EAAO;AAAA;AAAA,mBAQhB,CAAC,EAAE,UAAAgX,GAAU,SAAAC,EAAA,MAC5BD,MAAa,WAAW,sCAAsC,6BAA6BC,KAAW,IAAI,GAAG;AAAA;AAAA;AAAA,WAGtG,CAAC,EAAE,QAAAC,GAAQ,UAAAF,QACdE,MACAF,MAAa,WAAiB,oCAC3B,OACR;AAAA;AAAA;AAAA,YAGS,CAAC,EAAE,SAAAG,GAAS,UAAAH,QAChBG,MACAH,MAAa,WAAiB,oCAC9BA,MAAa,SAAe,yCACzB,mCACR;AAAA;AAAA;AAAA,IAGC,CAAC,EAAE,UAAAI,EAAA,MAAeA,MAAa,MAASN,EAAgB;AAAA,GAM/CO,KAAgBrX,EAAO;AAAA;AAAA;AAAA;AAAA,WAMzB,CAAC,EAAE,QAAAkX,QAAaA,KAAU,MAAM;AAAA,GAM9BI,KAAetX,EAAO;AAAA;AAAA;AAAA;AAAA,WAQxB,CAAC,EAAE,cAAAuX,GAAc,SAAAC,EAAA,MACxBD,MAAiBC,IAAU,6CAA6C,OAAO;AAAA;AAAA;AAAA,IAG/E,CAAC,EAAE,UAAAJ,EAAA,MAAeA,MAAa,MAASN,EAAgB;AAAA,GAU/CW,KAAoD;AAAA,EAC/D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACV,GAKaC,KAAgD;AAAA,EAC3D,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,QAAQ;AACV,GC/HMC,KAAY,CAACrqB,MAA4B;AAC7C,MAAIA,MAAU;AACd,WAAO,OAAOA,KAAU,WAAW,GAAGA,CAAK,OAAOA;AACpD,GAqBasqB,KAAW7a;AAAA,EACtB,CACE;AAAA,IACE,SAAAsD,IAAU;AAAA,IACV,OAAAwX;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ1X,MAAY,SAAS,IAAI;AAAA,IACjC,SAAA2X,IAAU;AAAA,IACV,QAAAC,IAAS;AAAA,IACT,QAAAC,IAAS;AAAA,IACT,WAAAxe;AAAA,IACA,UAAAtK;AAAA,IACA,OAAAgV;AAAA,IACA,GAAGyP;AAAA,EAAA,GAEL7W,MACG;AACH,UAAMmb,IAAgBR,GAAUE,CAAK,GAC/BO,IAAiBT,GAAUG,CAAM,GACjCO,IAAY,KAAK,IAAI,GAAGN,CAAK,GAC7BO,IAAoBjY,MAAY,UAAUgY,IAAY;AAE5D,QAAIH;AACF,aAAK9oB,sBAKF,OAAA,EAAI,KAAA4N,GAAU,WAAAtD,GAAsB,OAAA0K,GAAe,GAAGyP,GACpD,UAAAzkB,GACH,IANO;AAUX,UAAMmpB,IAAqB;AAAA,MACzB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAGf,WAAID,IAEAta,gBAAAA;AAAAA,MAACqZ;AAAA,MAAA;AAAA,QACC,KAAAra;AAAA,QACA,WAAAtD;AAAA,QACA,OAAA0K;AAAA,QACA,QAAQ+T;AAAA,QACR,gBAAa;AAAA,QACZ,GAAGI;AAAA,QACH,GAAG1E;AAAA,QAEH,UAAA,MAAM,KAAK,EAAE,QAAQwE,GAAW,EAAE,IAAI,CAACtS,GAAG/X,MACzCgQ,gBAAAA;AAAAA,UAACsZ;AAAA,UAAA;AAAA,YAEC,UAAUU;AAAA,YACV,SAAShqB,MAAUqqB,IAAY;AAAA,YAC/B,cAAcrqB,MAAUqqB,IAAY,IAAIF,IAAgB;AAAA,YACxD,eAAY;AAAA,UAAA;AAAA,UAJPnqB;AAAA,QAAA,CAMR;AAAA,MAAA;AAAA,IAAA,IAMLgQ,gBAAAA;AAAAA,MAAC+Y;AAAA,MAAA;AAAA,QACC,KAAA/Z;AAAA,QACA,WAAAtD;AAAA,QACA,OAAA0K;AAAA,QACA,UAAU/D;AAAA,QACV,UAAU2X;AAAA,QACV,SAASC;AAAA,QACT,QAAQE;AAAA,QACR,SAASC;AAAA,QACT,gBAAc/X;AAAA,QACb,GAAGkY;AAAA,QACH,GAAG1E;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEA+D,GAAS,cAAc;AC9FvB,MAAMY,KAAWtd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmBJud,KAAczY,EAAO;AAAA;AAAA,oBAId,CAAC,EAAE,aAAA0Y,EAAA,MAAmBA,MAAgB,aAAa,WAAW,KAAM;AAAA;AAAA;AAAA,IAGpF,CAAC,EAAE,aAAAA,EAAA,MAAkBA,MAAgB,gBAAgBra;AAAA;AAAA,GAEtD;AAAA,GAGUsa,KAAW3Y,EAAO;AAAA;AAAA;AAAA,UAUrB,CAAC,EAAE,QAAA+G,GAAQ,aAAA2R,EAAA,MAAmB3R,KAAU2R,MAAgB,aAAa,aAAa,GAAI;AAAA,oBAC5E,CAAC,EAAE,aAAAA,GAAa,gBAAAE,QAChCF,MAAgB,gBAAgBE,MAAmB,WAAW,WAAW,KAAK;AAAA,iBACjE,CAAC,EAAE,aAAAF,GAAa,gBAAAE,QAC7BF,MAAgB,gBAAgBE,MAAmB,WAAW,WAAW,YAAY;AAAA;AAAA;AAAA;AAAA,GAM5EC,KAAoB7Y,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAY7B,CAAC,EAAE,MAAAvO,GAAM,SAAA4O,EAAA,MAChBA,MAAY,QACR,yBAAyB5O,CAAI,WAC7B,4BAA4BA,CAAI,QAAQ;AAAA,YACpC,CAAC,EAAE,MAAAA,GAAM,SAAA4O,EAAA,MACjBA,MAAY,QACR,yBAAyB5O,CAAI,WAC7B,4BAA4BA,CAAI,QAAQ;AAAA;AAAA;AAAA,YAGpC,CAAC,EAAE,SAAA4O,EAAA,MAAeA,MAAY,QAAQ,SAAS,WAAY;AAAA;AAAA;AAAA;AAAA,IAInE,CAAC,EAAE,QAAAyY,GAAQ,SAAAzY,QACPA,MAAY,QACVyY,MAAW,SACNza;AAAA;AAAA;AAAA,YAKFA;AAAA,8CACiCya,CAAM;AAAA;AAAA,UAE1CA,MAAW,YACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAOaN,EAAQ;AAAA;AAAA;AAAA;AAAA,YAKrB,EAAE;AAAA,UAKNM,MAAW,YACNza;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAWUma,EAAQ;AAAA;AAAA;AAAA;AAAA,UAMvBM,MAAW,WACNza;AAAA;AAAA;AAAA;AAAA,UAMLya,MAAW,UACNza;AAAA;AAAA;AAAA;AAAA,UAOFA;AAAA;AAAA;AAAA;AAAA,KAKR;AAAA;AAAA;AAAA,eAGY,CAAC,EAAE,MAAA5M,EAAA,MAAW,4BAA4BA,CAAI,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,aAK7D,CAAC,EAAE,MAAAA,EAAA,MAAW,4BAA4BA,CAAI,aAAa;AAAA,cAC1D,CAAC,EAAE,MAAAA,EAAA,MAAW,4BAA4BA,CAAI,aAAa;AAAA;AAAA;AAAA,GAK5DsnB,KAAc/Y,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ9B,CAAC,EAAE,aAAA0Y,GAAa,gBAAAE,EAAA,MAChBF,MAAgB,gBAAgBE,MAAmB,YAAYva;AAAA;AAAA;AAAA;AAAA,GAIhE;AAAA;AAAA,IAEC,CAAC,EAAE,aAAAqa,GAAa,gBAAAE,EAAA,OACfF,MAAgB,cAAcE,MAAmB,YAAYva;AAAA;AAAA;AAAA,KAG7D;AAAA,GAGQ2a,KAAYhZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAOrB,CAAC,EAAE,QAAA8Y,QAAa;AACvB,UAAQA,GAAA;AAAA,IACN,KAAK;AAAW,aAAO;AAAA,IACvB,KAAK;AAAU,aAAO;AAAA,IACtB,KAAK;AAAS,aAAO;AAAA,IACrB,KAAK;AAAQ,aAAO;AAAA,IACpB;AAAS,aAAO;AAAA,EAAA;AAEpB,CAAC;AAAA,GAGUG,KAAkBjZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOzBkZ,KAAgBlZ,EAAO;AAAA;AAAA;AAAA,IAShC,CAAC,EAAE,aAAA0Y,GAAa,YAAAS,GAAY,MAAA1nB,GAAM,gBAAAmnB,GAAgB,SAAAvY,QAAc;AAC/D,QAAM+Y,IAAc/Y,MAAY,QAC5B,yBAAyB5O,CAAI,WAC7B,4BAA4BA,CAAI;AAEpC,SAAIinB,MAAgB,eACXra;AAAA;AAAA;AAAA,6BAGe8a,IAAa,yCAAyC,+BAA+B;AAAA;AAAA,4BAEtFC,CAAW;AAAA,WAC5BR,MAAmB,WAAW,4BAA4B,EAAE;AAAA,WAK3Dva;AAAA;AAAA;AAAA;AAAA,2BAIe8a,IAAa,yCAAyC,+BAA+B;AAAA;AAAA;AAG9G,CAAC;AAAA,GCxOUE,KAAUtc,EAAyC,CAAC5N,GAAO6N,MAAQ;AAC9E,QAAM;AAAA,IACJ,QAAA+Q,IAAS;AAAA,IACT,aAAA2K,IAAc;AAAA,IACd,gBAAAE,IAAiB;AAAA,IACjB,MAAAnnB,IAAO;AAAA,IACP,SAAA4O,IAAU;AAAA,IACV,UAAAjR;AAAA,IACA,WAAAsK;AAAA,IACA,UAAAyK;AAAA,IACA,GAAG0P;AAAA,EAAA,IACD1kB,GAEEmqB,IAAQ/Q,GAAS,QAAQnZ,CAAQ,EAAE,OAAOoZ,EAAc;AAE9D,SACExK,gBAAAA;AAAAA,IAACya;AAAA,IAAA;AAAA,MACC,KAAAzb;AAAA,MACA,aAAA0b;AAAA,MACA,WAAAhf;AAAA,MACA,MAAK;AAAA,MACL,cAAW;AAAA,MACV,GAAGma;AAAA,MAEH,UAAAyF,EAAM,IAAI,CAACnE,GAAMnnB,MAAU;AAC1B,cAAMurB,IAAYpE,EAAK;AAGvB,YAAI2D,IAAqB;AAEzB,eAAIS,EAAU,SAEVT,IAASS,EAAU,SAGfvrB,IAAQ+f,IACV+K,IAAS,WACA9qB,MAAU+f,IACnB+K,IAAS,YAETA,IAAS,QAIRlQ,GAAauM,GAAM;AAAA,UACxB,OAAAnnB;AAAA,UACA,MAAMA,MAAUsrB,EAAM,SAAS;AAAA,UAC/B,aAAAZ;AAAA,UACA,gBAAgBA,MAAgB,aAAa,UAAUE;AAAA;AAAA,UACvD,MAAAnnB;AAAA,UACA,QAAAqnB;AAAA,UACA,SAAAzY;AAAA,UACA,SAAS,MAAM;;AACb,YAAI8D,KAAY,CAACoV,EAAU,YACzBpV,EAASnW,CAAK,IAEhBkV,IAAAqW,EAAU,YAAV,QAAArW,EAAA,KAAAqW;AAAA,UACF;AAAA,QAAA,CACY;AAAA,MAChB,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDF,GAAQ,cAAc;ACrDf,MAAMG,KAAOzc,EAAsC,CAAC5N,GAAO6N,MAAQ;AACxE,QAAM;AAAA,IACJ,OAAA8L;AAAA,IACA,aAAA6B;AAAA,IACA,MAAAzJ;AAAA,IACA,QAAA4X,IAAS;AAAA,IACT,OAAA9qB,IAAQ;AAAA,IACR,aAAA0qB,IAAc;AAAA,IACd,gBAAAE,IAAiB;AAAA,IACjB,MAAAnnB,IAAO;AAAA,IACP,MAAAkX,IAAO;AAAA,IACP,SAAAtI,IAAU;AAAA,IACV,WAAA3G;AAAA,IACA,SAAAiW;AAAA,IACA,GAAGkE;AAAA,EAAA,IACD1kB,GAGEsqB,IAAa,MAAM;AACvB,QAAIvY,EAAM,QAAOA;AAEjB,YAAQ4X,GAAA;AAAA,MACN,KAAK;AACH,iCAAQpS,IAAA,EAAa;AAAA,MACvB,KAAK;AACH,iCAAQgT,IAAA,EAAa;AAAA,MACvB;AAEE,eAAO1b,gBAAAA,EAAC,QAAA,EAAM,UAAAhQ,IAAQ,EAAA,CAAE;AAAA,IAAA;AAAA,EAE9B,GAEM2rB,IACJjB,MAAgB,gBAAgBrY,MAAY,QAAQ,WAAWuY,GAG3DgB,IADmB,EAAEvZ,MAAY,SAAS,CAACa,KACVuY,EAAA,IAAe,MAKhDI,IAAmBnB,MAAgB,cAAc,CAAC/P,GAIlDmR,IAAqBpB,MAAgB,gBAAgB,CAAC/P;AAE5D,SACEtF,gBAAAA;AAAAA,IAACsV;AAAA,IAAA;AAAA,MACC,KAAA3b;AAAA,MACA,WAAAtD;AAAA,MACA,aAAAgf;AAAA,MACA,gBAAgBiB;AAAA,MAChB,QAAAb;AAAA,MACA,QAAQnQ;AAAA,MACR,SAAAtI;AAAA,MACA,SAAAsP;AAAA,MACA,MAAK;AAAA,MACL,gBAAcmJ,MAAW,YAAY,SAAS;AAAA,MAC7C,GAAGjF;AAAA,MAGH,UAAA;AAAA,QAAA6E,MAAgB,cACfrV,gBAAAA,EAAA9L,IAAA,EACE,UAAA;AAAA,UAAA8L,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,YAAY,GAAG,WAAWsF,IAAO,SAAS,UACtH,UAAA;AAAA,YAAA3K,gBAAAA,EAAC6a,IAAA,EAAkB,QAAAC,GAAgB,MAAArnB,GAAY,SAAA4O,GAC5C,UAAAuZ,GACH;AAAA,YACCC,KACC7b,gBAAAA;AAAAA,cAACkb;AAAA,cAAA;AAAA,gBACC,aAAY;AAAA,gBACZ,gBAAgBS;AAAA,gBAChB,YAAYb,MAAW;AAAA,gBACvB,MAAArnB;AAAA,gBACA,SAAA4O;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GAEJ;AAAA,UACAgD,gBAAAA,EAAC0V,IAAA,EAAY,aAAAL,GAA0B,gBAAgBiB,GACrD,UAAA;AAAA,YAAA3b,gBAAAA,EAACgb,IAAA,EAAU,QAAAF,GAAiB,UAAAhQ,EAAA,CAAM;AAAA,YACjC6B,KAAe3M,gBAAAA,EAACib,IAAA,EAAiB,UAAAtO,EAAA,CAAY;AAAA,UAAA,EAAA,CAChD;AAAA,QAAA,GACF;AAAA,QAID+N,MAAgB,gBACf1a,gBAAAA,EAAAzG,IAAA,EAEG,UAAAoiB,MAA2B,6BACzB,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,OAAO,YAAY,UAAU,OAAO,UAChF,UAAA;AAAA,UAAAtW,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,YAAY,EAAA,GACxF,UAAA;AAAA,YAAArF,gBAAAA,EAAC6a,IAAA,EAAkB,QAAAC,GAAgB,MAAArnB,GAAY,SAAA4O,GAC5C,UAAAuZ,GACH;AAAA,YACAvW,gBAAAA,EAAC0V,IAAA,EAAY,aAAAL,GAA0B,gBAAgBiB,GACrD,UAAA;AAAA,cAAA3b,gBAAAA,EAACgb,IAAA,EAAU,QAAAF,GAAiB,UAAAhQ,EAAA,CAAM;AAAA,cACjC6B,KAAe3M,gBAAAA,EAACib,IAAA,EAAiB,UAAAtO,EAAA,CAAY;AAAA,YAAA,EAAA,CAChD;AAAA,UAAA,GACF;AAAA,UACCmP,KACC9b,gBAAAA;AAAAA,YAACkb;AAAA,YAAA;AAAA,cACC,aAAY;AAAA,cACZ,gBAAgBS;AAAA,cAChB,YAAYb,MAAW;AAAA,cACvB,MAAArnB;AAAA,cACA,SAAA4O;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CAEJ,IAEAgD,gBAAAA,EAAA9L,IAAA,EACE,UAAA;AAAA,UAAAyG,gBAAAA,EAAC6a,IAAA,EAAkB,QAAAC,GAAgB,MAAArnB,GAAY,SAAA4O,GAC5C,UAAAuZ,GACH;AAAA,UACAvW,gBAAAA,EAAC0V,IAAA,EAAY,aAAAL,GAA0B,gBAAgBiB,GACrD,UAAA;AAAA,YAAA3b,gBAAAA,EAACgb,IAAA,EAAU,QAAAF,GAAiB,UAAAhQ,EAAA,CAAM;AAAA,YACjC6B,KAAe3M,gBAAAA,EAACib,IAAA,EAAiB,UAAAtO,EAAA,CAAY;AAAA,UAAA,GAChD;AAAA,UACCmP,KACC9b,gBAAAA;AAAAA,YAACkb;AAAA,YAAA;AAAA,cACC,aAAY;AAAA,cACZ,gBAAgBS;AAAA,cAChB,YAAYb,MAAW;AAAA,cACvB,MAAArnB;AAAA,cACA,SAAA4O;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CAEJ,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDmZ,GAAK,cAAc;AC/JZ,MAAMO,KAAgB,CAAC,QAAQ,QAAQ,GACjCC,KAAgB,CAAC,MAAM,MAAM,IAAI,GACjCC,KAAmB,CAAC,UAAU,SAAS,WAAW,SAAS,GAUlEC,KAAiB,CAACpB,MACf,4BAA4BA,CAAM,KAU9BqB,KAAmBna,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAY1Boa,KAAoBpa,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASpC,CAAC,EAAE,MAAAvO,QACCA,MAAS,OACJ4M;AAAA;AAAA,UAIFA;AAAA;AAAA,KAGR;AAAA,GAMUgc,KAAkBra,EAAO;AAAA;AAAA,WAK3B,CAAC,EAAE,SAAAsa,EAAA,MAAcA,CAAO;AAAA,gBACnB,CAAC,EAAE,QAAAxB,EAAA,MAAaoB,GAAepB,CAAM,CAAC;AAAA;AAAA;AAAA,GAQzCyB,KAAeva,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYtBwa,KAAaxa,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAStB,CAAC,EAAE,QAAA8Y,EAAA,MAAaoB,GAAepB,CAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWpC2B,KAAmBza,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAc1B0a,KAAqB1a,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQrC,CAAC,EAAE,MAAAvO,QACCA,MAAS,OACJ4M;AAAA;AAAA;AAAA,UAKL5M,MAAS,OACJ4M;AAAA;AAAA;AAAA,UAKFA;AAAA;AAAA;AAAA,KAIR;AAAA,GAMUsc,KAAoB3a,EAAO;AAAA;AAAA;AAAA;AAAA,GAS3B4a,KAAsB5a,EAAO;AAAA;AAAA;AAAA,GAQ7B6a,KAAoB7a,EAAO;AAAA;AAAA,YAI5B,CAAC,EAAE,QAAA8Y,EAAA,MAAaoB,GAAepB,CAAM,CAAC;AAAA;AAAA;AAAA,GAQrCgC,KAAwB9a,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWxC,CAAC,EAAE,MAAAvO,QACCA,MAAS,OACJ4M;AAAA;AAAA;AAAA,UAKL5M,MAAS,OACJ4M;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOR;AAAA,GAMU0c,KAAqB/a,EAAO;AAAA;AAAA;AAAA;AAAA,WAM9B,CAAC,EAAE,QAAA8Y,EAAA,MAAaoB,GAAepB,CAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GCpMpCtO,KAAQuP,IACR/Y,KAAQgZ,IACRgB,KAAWf,IAsBlBgB,KAAc,MAClB5X,gBAAAA,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BACzC,UAAA;AAAA,EAAArF,gBAAAA,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAChDA,gBAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA;AACjB,GACF,GAMIkd,KAAY,MAChB7X,gBAAAA,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BACzC,UAAA;AAAA,EAAArF,gBAAAA,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAChDA,gBAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,IAAA;AAAA,EAAA;AAChB,GACF,GAMImd,KAAc,MAClB9X,gBAAAA,EAAC,OAAA,EAAI,SAAQ,aAAY,MAAK,QAAO,OAAM,8BACzC,UAAA;AAAA,EAAArF,gBAAAA,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAChDA,gBAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA;AACjB,GACF,GAMIod,KAAgB,CAACtC,MAA2B;AAChD,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,+BAAQmC,IAAA,EAAY;AAAA,IACtB,KAAK;AACH,+BAAQC,IAAA,EAAU;AAAA,IACpB,KAAK;AACH,+BAAQC,IAAA,EAAY;AAAA,IACtB;AACE,aAAO;AAAA,EAAA;AAEb,GAQaE,KAAWte;AAAA,EACtB,CACE;AAAA,IACE,MAAA7N,IAAO;AAAA,IACP,MAAAuC,IAAO;AAAA,IACP,QAAAqnB,IAAS;AAAA,IACT,OAAAxrB,IAAQ;AAAA,IACR,aAAAguB,IAAc;AAAA,IACd,UAAAC,IAAW;AAAA,IACX,WAAA7hB;AAAA,IACA,GAAG4H;AAAA,EAAA,GAELtE,MACG;AAEH,UAAMsd,IAAU,KAAK,IAAI,KAAK,IAAIhtB,GAAO,CAAC,GAAG,GAAG,GAG1C,EAAE,kBAAAkuB,GAAkB,YAAAC,EAAA,IAAeC,GAAe;AAAA,MACtD,GAAGpa;AAAA,MACH,OAAOgZ;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,IAAA,CACX,GAGKqB,IAAiBJ,KAAYzC,MAAW,UACxC5X,IAAOya,IAAiBP,GAActC,CAAM,IAAI;AAGtD,QAAI5pB,MAAS;AACX,aACEmU,gBAAAA;AAAAA,QAAC8W;AAAA,QAAA;AAAA,UACE,GAAGqB;AAAA,UACJ,KAAAxe;AAAA,UACA,MAAAvL;AAAA,UACA,WAAAiI;AAAA,UACA,MAAK;AAAA,UACL,iBAAe4gB;AAAA,UACf,iBAAe;AAAA,UACf,iBAAe;AAAA,UAEf,UAAA;AAAA,YAAAtc,gBAAAA,EAACoc,MAAkB,MAAA3oB,GACjB,UAAAuM,gBAAAA,EAACqc,IAAA,EAAgB,QAAAvB,GAAgB,SAAAwB,GAAkB,GACrD;AAAA,8BAECG,IAAA,EACE,UAAA;AAAA,cAAAa,KACCjY,gBAAAA,EAACkX,IAAA,EAAc,GAAGkB,GACf,UAAA;AAAA,gBAAA,KAAK,MAAMnB,CAAO;AAAA,gBAAE;AAAA,cAAA,GACvB;AAAA,cAGDqB,KAAkBza,KACjBlD,gBAAAA,EAACwc,IAAA,EAAW,QAAA1B,GACT,UAAA5X,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAON,UAAM0a,IAAgB,MAAM;AAC1B,cAAQnqB,GAAA;AAAA,QACN,KAAK;AACH,iBAAO,EAAE,YAAY,IAAI,aAAa,EAAA;AAAA,QACxC,KAAK;AACH,iBAAO,EAAE,YAAY,IAAI,aAAa,EAAA;AAAA,QACxC,KAAK;AACH,iBAAO,EAAE,YAAY,KAAK,aAAa,EAAA;AAAA,QACzC;AACE,iBAAO,EAAE,YAAY,IAAI,aAAa,EAAA;AAAA,MAAE;AAAA,IAE9C,GAEM,EAAE,YAAAoqB,GAAY,aAAAC,EAAA,IAAgBF,EAAA,GAC9B3D,KAAU4D,IAAaC,KAAe,GACtCC,IAAgB,IAAI,KAAK,KAAK9D,GAC9B+D,IAAmBD,IAAiBzB,IAAU,MAAOyB,GAGrDE,IAAsBxqB,MAAS;AAErC,WACE4R,gBAAAA;AAAAA,MAACqX;AAAA,MAAA;AAAA,QACE,GAAGc;AAAA,QACJ,KAAAxe;AAAA,QACA,MAAAvL;AAAA,QACA,WAAAiI;AAAA,QACA,MAAK;AAAA,QACL,iBAAe4gB;AAAA,QACf,iBAAe;AAAA,QACf,iBAAe;AAAA,QAEf,UAAA;AAAA,UAAAjX,gBAAAA,EAACsX,IAAA,EAEC,UAAA;AAAA,YAAA3c,gBAAAA;AAAAA,cAAC4c;AAAA,cAAA;AAAA,gBACC,IAAIiB,IAAa;AAAA,gBACjB,IAAIA,IAAa;AAAA,gBACjB,GAAG5D;AAAA,gBACH,aAAA6D;AAAA,cAAA;AAAA,YAAA;AAAA,YAIF9d,gBAAAA;AAAAA,cAAC6c;AAAA,cAAA;AAAA,gBACC,QAAA/B;AAAA,gBACA,IAAI+C,IAAa;AAAA,gBACjB,IAAIA,IAAa;AAAA,gBACjB,GAAG5D;AAAA,gBACH,aAAA6D;AAAA,gBACA,iBAAiBC;AAAA,gBACjB,kBAAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAGAhe,gBAAAA,EAAC8c,MAAsB,MAAArpB,GACpB,UAAAwqB;AAAA;AAAA,YAECX,KAAejY,gBAAAA,EAAC,QAAA,EAAM,GAAGoY,GAAa,UAAA;AAAA,cAAA,KAAK,MAAMnB,CAAO;AAAA,cAAE;AAAA,YAAA,EAAA,CAAC;AAAA;AAAA;AAAA,YAG3DqB,KAAkBza,KAChBlD,gBAAAA,EAAC+c,IAAA,EAAmB,QAAAjC,GACjB,UAAA5X,EAAA,CACH;AAAA,YAAA,CAGN;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAma,GAAS,cAAc;ACnOvB,MAAMa,KAAiB,CACrBC,GACA9b,GACA+b,GACAvY,MAGIxD,MAAY,cACVwD,IACKxF;AAAA,oCACuB8d,CAAK;AAAA,+BACVA,CAAK;AAAA,sCACEA,CAAK;AAAA;AAAA;AAAA,sCAGLA,CAAK;AAAA,wCACHA,CAAK;AAAA;AAAA;AAAA;AAAA,sCAIPA,CAAK;AAAA,wCACHA,CAAK;AAAA;AAAA,UAIhC9d;AAAA,oCACuB8d,CAAK;AAAA,+BACVA,CAAK;AAAA,sCACEA,CAAK;AAAA;AAAA;AAAA;AAAA,sCAILA,CAAK;AAAA,wCACHA,CAAK,gCAAgCA,CAAK;AAAA;AAAA;AAAA;AAAA,sCAI5CA,CAAK;AAAA,wCACHA,CAAK,iCAAiCA,CAAK;AAAA;AAAA,UAO7EC,IACK/d;AAAA,kCACuB8d,CAAK;AAAA,6BACVA,CAAK;AAAA,oCACEA,CAAK;AAAA,QAG9B9d;AAAA,kCACuB8d,CAAK;AAAA,6BACVA,CAAK;AAAA;AAAA,OAU5B5b,KAAgB,CAAC9O,MACd4M;AAAA,4BACmB5M,CAAI;AAAA,+BACDA,CAAI;AAAA,iCACFA,CAAI;AAAA,oCACDA,CAAI;AAAA,yBACfA,CAAI;AAAA;AAAA;AAAA,6BAGAA,CAAI;AAAA,8BACHA,CAAI;AAAA;AAAA,KAkBrB4qB,KAAUrc,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsC1B,CAAC,EAAE,OAAAmc,GAAO,SAAA9b,GAAS,UAAA+b,GAAU,SAAAvY,QAC7BqY,GAAeC,GAAO9b,GAAS+b,GAAUvY,CAAO,CAAC;AAAA;AAAA;AAAA,IAGjD,CAAC,EAAE,MAAApS,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA,IAGjC,CAAC,EAAE,SAAA4O,GAAS,SAAAwD,EAAA,MACZxD,MAAY,eACZ,CAACwD,KACDxF;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqBQie,KAAatc,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAcpBY,KAAcZ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBrBuc,KAAcvc,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BA2BP,CAAC,EAAE,MAAAvO,EAAA,MAAWA,CAAI;AAAA,4BACjB,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA;AAAA,GASjC+qB,KAAYxc,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,uBAOT,CAAC,EAAE,MAAAvO,EAAA,MAAWA,CAAI;AAAA;AAAA,0BAEf,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA,kCACV,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA;AAAA;AAAA,6BAGvB,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA,+BAChB,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAqCtB,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA,4BACjB,CAAC,EAAE,MAAAA,EAAA,MAAWA,CAAI;AAAA;AAAA,GCxPjCgrB,KAAM1f;AAAA,EACjB,CACE;AAAA,IACE,SAAAsD,IAAU;AAAA,IACV,MAAA5O,IAAO;AAAA,IACP,OAAA0qB,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,UAAAM,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,SAAA9Y,IAAU;AAAA,IACV,MAAA3C;AAAA,IACA,UAAAE,IAAW;AAAA,IACX,WAAA1H;AAAA,IACA,UAAAtK;AAAA,IACA,SAAAyf;AAAA,IACA,UAAA1K;AAAA,IACA,SAAAwL;AAAA,EAAA,GAEFpO,MACG;AAEH,UAAMqb,IAA4BD,IAAY,cAActc,GACtDwc,IAAYF,IAAY9Y,IAAU,IAGlCiZ,IAAc,MAAM;AACxB,MAAI1b,MAEAub,KAAaxY,KACfA,EAAS,CAAC0Y,CAAS,GAGjBlN,KACFA,EAAA;AAAA,IAEJ,GAEMuG,IAAgB,CAACpR,MAAgD;AACrE,MAAI1D,KAEAwb,MAAkB,gBAAgB9X,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SAC3EA,EAAM,eAAA,GACNgY,EAAA;AAAA,IAEJ,GAGMC,IAAc,CAACtxB,MAAwB;AAC3C,MAAAA,EAAE,gBAAA,GACEojB,KAAW,CAACzN,KACdyN,EAAA;AAAA,IAEJ;AAEA,WACE7Q,gBAAAA;AAAAA,MAACqe;AAAA,MAAA;AAAA,QACC,KAAK9a;AAAA,QACL,SAASqb;AAAA,QACT,MAAAnrB;AAAA,QACA,OAAA0qB;AAAA,QACA,UAAAC;AAAA,QACA,SAASS;AAAA,QACT,UAAAH;AAAA,QACA,YAAYtb;AAAA,QACZ,WAAA1H;AAAA,QACA,SAASkjB,MAAkB,cAAcE,IAAcnN;AAAA,QACvD,WAAWuG;AAAA,QACX,gBAAc0G;AAAA,QACd,aAAWnrB;AAAA,QACX,cAAY0qB;AAAA,QACZ,gBAAcU,IAAY,SAAS;AAAA,QACnC,iBAAezb,IAAW,SAAS;AAAA,QACnC,UAAUwb,MAAkB,eAAe,CAACxb,IAAW,IAAI;AAAA,QAC3D,MAAMwb,MAAkB,cAAc,aAAa;AAAA,QACnD,gBAAcA,MAAkB,cAAcC,IAAY;AAAA,QAC1D,iBAAezb;AAAA,QAEf,4BAACkb,IAAA,EAEE,UAAA;AAAA,UAAApb,KACClD,gBAAAA,EAAC4C,IAAA,EAAY,eAAY,QACtB,UAAAM,GACH;AAAA,UAID9R;AAAA,UAGAstB,KACC1e,gBAAAA;AAAAA,YAACue;AAAA,YAAA;AAAA,cACC,MAAA9qB;AAAA,cACA,SAASsrB;AAAA,cACT,cAAW;AAAA,cACX,MAAK;AAAA,cACL,UAAU3b,IAAW,KAAK;AAAA,cAC1B,WAAW,CAAC3V,MAAM;AAChB,gBAAI,CAAC2V,MAAa3V,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAC/CA,EAAE,eAAA,GACFsxB,EAAYtxB,CAAQ;AAAA,cAExB;AAAA,cACA,iBAAe2V;AAAA,cAEf,4BAACsY,IAAA,CAAA,CAAa;AAAA,YAAA;AAAA,UAAA;AAAA,QAChB,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEA+C,GAAI,cAAc;AAoBX,MAAMO,KAASjgB;AAAA,EACpB,CAAC,EAAE,MAAAtL,IAAO,MAAM,WAAAiI,GAAW,UAAAtK,IAAW,WAAW,GAAGkS,EAAA,GAAaC,MAAiB;AAChF,UAAMC,IAAWC,EAA0B,IAAI,GACzCzE,IAAMuE,KAAgBC,GAEtB,EAAE,aAAAG,MAAgBE;AAAA,MACtB;AAAA,QACE,GAAGP;AAAA,QACH,aAAa;AAAA,MAAA;AAAA,MAEfE;AAAA,IAAA;AAGF,WACE6B,gBAAAA;AAAAA,MAACmZ;AAAA,MAAA;AAAA,QACE,GAAG1a,GAAWH,GAAa;AAAA,UAC1B,KAAA3E;AAAA,UACA,WAAAtD;AAAA,QAAA,CACD;AAAA,QACD,MAAAjI;AAAA,QACA,aAAWA;AAAA,QAEX,UAAA;AAAA,UAAAuM,gBAAAA,EAAC0W,IAAA,EAAY;AAAA,UACZtlB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEA4tB,GAAO,cAAc;AAGnBP,GAAY,MAAMO;ACzOb,MAAMC,KAAc,CAAC,MAAM,MAAM,IAAI,GAOtC1c,KAAgB,CAAC9O,GAAkByrB,MAChC7e;AAAA,MACH6e,IAAa,gCAAgCzrB,CAAI,cAAc,4BAA4BA,CAAI,WAAW;AAAA,kCAC9EA,CAAI;AAAA,uCACCA,CAAI;AAAA,MACrCyrB,IAAa,wBAAwB,EAAE;AAAA,KAQhCC,KAAgBnd,EAAO;AAAA,aACvB,CAAC,EAAE,WAAAU,EAAA,MAAiBA,IAAY,SAAS,aAAc;AAAA;AAAA,WAEzD,CAAC,EAAE,WAAAA,EAAA,MAAiBA,IAAY,SAAS,OAAQ;AAAA;AAAA;AAAA;AAAA,GAM/C0c,KAAgBpd,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BhC,CAAC,EAAE,MAAAvO,GAAM,YAAAyrB,EAAA,MAAiB3c,GAAc9O,GAAM,CAAC,CAACyrB,CAAU,CAAC;AAAA;AAAA;AAAA,IAG3D,CAAC,EAAE,WAAA5R,GAAW,WAAAC,GAAW,QAAA8R,GAAQ,SAAA7R,GAAS,YAAAnK,EAAA,MAC1CiK,KAAa,CAACC,KAAa,CAAC8R,KAAU,CAAC7R,KAAW,CAACnK,KACnDhD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,WAAAkN,GAAW,QAAA8R,GAAQ,SAAA7R,GAAS,YAAAnK,EAAA,OAC9BkK,KAAa8R,MAAW,CAAC7R,KAAW,CAACnK,KACtChD;AAAA;AAAA,KAEC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,SAAAmN,GAAS,YAAAnK,QACZmK,KAAW,CAACnK,KACZhD;AAAA;AAAA;AAAA,KAGC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMC;AAAA,GAGQif,KAActd,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOvB,CAAC,EAAE,eAAAud,EAAA,MACVA,IAAgB,uCAAuC,SAAS;AAAA,GAGvDC,KAAaxd,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOlB,CAAC,EAAE,QAAAqd,EAAA,MAAcA,IAAS,mBAAmB,cAAe;AAAA;AAAA;AAAA;AAAA;AAAA,aAK9D,CAAC,EAAE,MAAA5rB,EAAA,MAAWA,IAAO,oBAAoBA,CAAI,gBAAgB,MAAM;AAAA,cAClE,CAAC,EAAE,MAAAA,EAAA,MAAWA,IAAO,oBAAoBA,CAAI,gBAAgB,MAAM;AAAA;AAAA,GAQpEgsB,KAAezd,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAatB0d,KAAiB1d,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAoBxB2d,KAAa3d,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAarB,CAAC,EAAE,YAAAqB,EAAA,MAAkBA,IAAa,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMxD,CAAC,EAAE,YAAAuc,GAAY,WAAArS,QACvBqS,IAAmB,yCACnBrS,IAAkB,wCACf,qCACR;AAAA;AAAA;AAAA,WAGQ,CAAC,EAAE,YAAAqS,GAAY,YAAAvc,QAClBA,IAAmB,2CACnBuc,IAAmB,2CAChB,uCACR;AAAA;AAAA;AAAA,kBAGe,CAAC,EAAE,YAAAA,GAAY,YAAAvc,QACvBA,IAAmB,gBACnBuc,IAAmB,yCAChB,mCACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQQC,KAAa7d,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOpB8d,KAAa9d,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQpB+d,KAAiB/d,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASxBge,KAAahe,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAWpBie,KAAgBje,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUvBke,KAAkBle,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC5P/B,SAASme,GAAQ,EAAE,UAAA/uB,GAAU,OAAAgvB,GAAO,QAAAvtB,IAAS,GAAG,YAAAwtB,GAAY,WAAAnU,IAAY,gBAAgB,GAAG/a,KAAuB;AACvH,QAAM6f,IAAavN,EAAuB,IAAI,GACxC,CAAC6c,GAAcC,CAAe,IAAI9Z,EAA6B,MAAS;AAG9E,EAAA+Z,GAAgB,MAAM;AACpB,IAAIH,EAAW,WACbE,EAAgBF,EAAW,QAAQ,sBAAA,EAAwB,KAAK;AAAA,EAEpE,GAAG,CAACA,GAAYD,EAAM,MAAM,CAAC;AAE7B,QAAM,EAAE,cAAcK,EAAA,IAA+BvL;AAAA,IACnD;AAAA,MACE,GAAG/jB;AAAA,MACH,mBAAmB;AAAA;AAAA,MACnB,eAAe;AAAA,MACf,SAASivB,EAAM;AAAA,IAAA;AAAA,IAEjBpP;AAAA,EAAA,GAGI,EAAE,cAAAgE,GAAc,WAAW0L,EAAA,IAAsBC,GAAmB;AAAA,IACxE,WAAWN;AAAA,IACX,YAAYrP;AAAA,IACZ,WAAA9E;AAAA,IACA,QAAArZ;AAAA,IACA,QAAQutB,EAAM;AAAA,IACd,SAASA,EAAM;AAAA,EAAA,CAChB;AAGD,SAAAvZ,GAAU,MAAM;AACd,QAAI,CAACuZ,EAAM,OAAQ;AAEnB,UAAMQ,IAAoB,CAAC9Z,MAAiB;AAC1C,YAAM+Z,IAAS/Z,EAAM,QACfga,IAAU9P,EAAW,SACrB+P,IAAUV,EAAW;AAG3B,MACES,KACA,CAACA,EAAQ,SAASD,CAAM,KACxBE,KACA,CAACA,EAAQ,SAASF,CAAM,KAExBT,EAAM,MAAA;AAAA,IAEV;AAGA,oBAAS,iBAAiB,aAAaQ,CAAiB,GAExD,SAAS,iBAAiB,WAAWA,CAAiB,GAE/C,MAAM;AACX,eAAS,oBAAoB,aAAaA,CAAiB,GAC3D,SAAS,oBAAoB,WAAWA,CAAiB;AAAA,IAC3D;AAAA,EACF,GAAG,CAACR,EAAM,QAAQA,EAAM,OAAOC,CAAU,CAAC,GAGxCrgB,gBAAAA,EAACghB,IAAA,EACC,UAAAhhB,gBAAAA,EAAC+V,IAAA,EAAW,cAAY,IACtB,UAAA1Q,gBAAAA;AAAAA,IAACoa;AAAA,IAAA;AAAA,MACE,GAAGgB;AAAA,MACH,GAAGzL;AAAA,MACJ,KAAKhE;AAAA,MACL,kBAAgB0P;AAAA,MAChB,OAAO;AAAA,QACL,GAAG1L,EAAa;AAAA,QAChB,QAAQ;AAAA,QACR,OAAOsL,IAAe,GAAGA,CAAY,OAAO;AAAA,QAC5C,UAAUA,IAAe,GAAGA,CAAY,OAAO;AAAA,MAAA;AAAA,MAGjD,UAAA;AAAA,QAAAtgB,gBAAAA,EAACihB,IAAA,EAAc,WAAWb,EAAM,MAAA,CAAO;AAAA,QACtChvB;AAAA,QACD4O,gBAAAA,EAACihB,IAAA,EAAc,WAAWb,EAAM,MAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAE3C,EAAA,CACF;AAEJ;ACnFO,SAASc,GAAQ,EAAE,OAAAd,GAAO,GAAGjvB,KAAuB;AACzD,QAAM6N,IAAMyE,EAAyB,IAAI,GACnC,EAAE,cAAA0d,EAAA,IAAiBC,GAAWjwB,GAAOivB,GAAOphB,CAAG;AAErD,SACEgB,gBAAAA,EAAC0f,MAAgB,GAAGyB,GAAc,KAAAniB,GAC/B,UAAA,CAAC,GAAGohB,EAAM,UAAU,EAAE,IAAI,CAACiB,wBACzBC,IAAA,EAAsB,MAAAD,GAAY,OAAAjB,KAAtBiB,EAAK,GAA+B,CAClD,GACH;AAEJ;AAQA,SAASC,GAAO,EAAE,MAAAD,GAAM,OAAAjB,GAAO,YAAAlB,KAA2B;AACxD,QAAMlgB,IAAMyE,EAAsB,IAAI,GAChC,EAAE,aAAA8d,GAAa,YAAA3B,GAAY,WAAArS,GAAW,YAAAlK,MAAeme;AAAA,IACzD,EAAE,KAAKH,EAAK,IAAA;AAAA,IACZjB;AAAA,IACAphB;AAAA,EAAA;AAGF,SACEqG,gBAAAA;AAAAA,IAACsa;AAAA,IAAA;AAAA,MACE,GAAG4B;AAAA,MACJ,KAAAviB;AAAA,MACA,YAAA4gB;AAAA,MACA,WAAArS;AAAA,MACA,YAAAlK;AAAA,MAEC,UAAA;AAAA,QAAA6b,uBACEgB,IAAA,EAAgB,eAAY,QAAO,SAAS,CAACzyB,MAAMA,EAAE,gBAAA,GACpD,UAAAuS,gBAAAA,EAAC+F,MAAS,SAAS6Z,GAAY,UAAUvc,GAAY,UAAU,IAAI,GACrE;AAAA,QAEFrD,gBAAAA,EAAC6f,IAAA,EAAY,UAAAwB,EAAK,SAAA,CAAS;AAAA,QAC1B,CAACnC,KAAcU,KACd5f,gBAAAA,EAAC8f,MAAW,eAAY,QACrB,UAAA9f,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,qBAAoB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAO,GAClH,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAOO,SAASyhB,GAAa,EAAE,OAAArB,KAA4B;AACzD,QAAMphB,IAAMyE,EAAyB,IAAI,GACnC,EAAE,cAAA0d,MAAiBC;AAAA,IACvB,EAAE,eAAe,WAAA;AAAA,IACjBhB;AAAA,IACAphB;AAAA,EAAA;AAGF,SACEgB,gBAAAA,EAAC0f,MAAgB,GAAGyB,GAAc,KAAAniB,GAC/B,UAAA,CAAC,GAAGohB,EAAM,UAAU,EAAE,IAAI,CAACiB,MAC1BrhB,gBAAAA,EAACshB,MAAsB,MAAAD,GAAY,OAAAjB,GAAc,YAAU,MAA9CiB,EAAK,GAA0C,CAC7D,EAAA,CACH;AAEJ;ACsBA,MAAMK,KAAc3iB,EAAW,SAC7B5N,GACA6N,GACA;AACA,QAAM;AAAA,IACJ,eAAA2iB,IAAgB;AAAA,IAChB,SAAAxe;AAAA,IACA,UAAAC;AAAA,IACA,MAAA3P,IAAO;AAAA,IACP,WAAAiP,IAAY;AAAA,IACZ,OAAAmX;AAAA,IACA,WAAAne;AAAA,IACA,OAAA0K;AAAA,IACA,aAAAwb,IAAc;AAAA,IACd,OAAA/c;AAAA,IACA,aAAA8H;AAAA,IACA,cAAAsB;AAAA,IACA,aAAA4T;AAAA;AAAA,IAEA,OAAAvyB;AAAA,IACA,cAAA6e;AAAA,IACA,UAAAhI;AAAA;AAAA,IAEA,aAAA2b;AAAA,IACA,oBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,SAAAl0B;AAAA,IACA,UAAAoD;AAAA,EAAA,IACED,GAEE+tB,IAAayC,MAAkB,YAG/BQ,IAAmBjD,IAAa,SAAa5vB,KAA0CwyB,GACvFM,IAAoBlD,IAAc5vB,KAA6C0yB,IAAe,QAG9FK,KAA0BnD,IAAa,SAAa/Q,KAA0C4T,GAC9FO,IAA2BpD,IAAc/Q,KAAoD8T,IAAsB,QAGnHM,IAAwB,CAACC,OAAwB;AACrD,IAAArc,KAAA,QAAAA,EAAWqc,KACXN,KAAA,QAAAA,EAAoBM;AAAA,EACtB,GAGMC,KAAczd,GAAQ,MACtBhX,KAAWA,EAAQ,SAAS,IACvBA,EAAQ,IAAI,CAAC00B,yBACjBC,IAAA,EAAwB,WAAW,OAAOD,GAAO,SAAU,WAAWA,GAAO,QAAQ,OAAOA,GAAO,KAAK,GACtG,UAAAA,GAAO,MAAA,GADCA,GAAO,KAElB,CACD,IAEItxB,GACN,CAACpD,GAASoD,CAAQ,CAAC,GAGhB2L,IAAc;AAAA,IAClB,GAAG5L;AAAA,IACH,UAAUsxB;AAAA,IACV,aAAaN;AAAA,IACb,oBAAoBE;AAAA,IACpB,mBAAmBE;AAAA,EAAA,GAGf/e,IAAWC,EAA0B,IAAI,GACzC4c,IAAcrhB,KAA8CwE,GAC5Dof,IAAqBnf,EAAyC,IAAI,GAGlEof,IAAcC,GAAe/lB,CAAkB,GAG/CgmB,IAAaC,GAAa;AAAA,IAC9B,GAAGjmB;AAAA,IACH,eAAe;AAAA,IACf,cAAcqlB;AAAA,IACd,qBAAqBE;AAAA,IACrB,mBAAmBC;AAAA,EAAA,CACb,GAGF,CAACU,GAAWC,CAAY,IAAIzc,EAAS,EAAK,GAC1C0c,IAAgBjE,IAAa+D,IAAYJ,EAAY,QAGrDO,IAAgBpe,GAAQ,MAAM;AAClC,QAAI,CAACka,EAAY,QAAO,CAAA;AACxB,UAAM5U,KAAwD,CAAA,GACxD+Y,KAAiBN,EAAW,iBAAiB;AACnD,eAAW1B,MAAQ0B,EAAW;AAC5B,MAAIM,GAAe,IAAIhC,GAAK,GAAG,KAC7B/W,GAAM,KAAK,EAAE,KAAK+W,GAAK,KAAK,UAAUA,GAAK,UAAU;AAGzD,WAAO/W;AAAA,EACT,GAAG,CAAC4U,GAAY6D,EAAW,iBAAiB,cAAcA,EAAW,UAAU,CAAC,GAG1E,EAAE,aAAAO,IAAa,eAAAC,GAAA,IAAkBve,GAAQ,MACzC,CAACka,KAAckE,EAAc,WAAW,IACnC,EAAE,aAAa,IAAI,eAAe,EAAA,IAEvCvB,MAAgB,UAAauB,EAAc,SAASvB,IAC/C;AAAA,IACL,aAAauB,EAAc,MAAM,GAAGvB,CAAW;AAAA,IAC/C,eAAeuB,EAAc,SAASvB;AAAA,EAAA,IAGnC,EAAE,aAAauB,GAAe,eAAe,EAAA,GACnD,CAAClE,GAAYkE,GAAevB,CAAW,CAAC,GAGrC;AAAA,IACJ,YAAApE;AAAA,IACA,cAAA+F;AAAA,IACA,YAAAC;AAAA,IACA,WAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAC;AAAA,EAAA,IACEC,GAAU9mB,GAAoB8lB,GAAaxC,CAAU,GAEnDyD,KAAmB,CAAChd,OAAsB;AAC9C,IAAA8b,EAAmB,UAAU9b,GAAM,aAC/BA,GAAM,gBAAgB,WAAWA,GAAM,gBAAgB,cAAcuZ,EAAW,WAClF0D,GAAsB1D,EAAW,OAAO;AAAA,EAE5C,GAEM2D,KAAc,CAACld,OAAsB;AACzC,UAAMmd,KAAcnd,GAAM,eAAe8b,EAAmB;AAC5D,QAAIqB,OAAgB;AAEpB,UAAI/E;AACF,QAAAgE,EAAa,CAACD,CAAS;AAAA,WAClB;AACL,cAAMiB,KAAgBD,OAAgB,WAAWA,OAAgB,QAAQ,OAAO;AAChF,QAAApB,EAAY,OAAOqB,EAAa;AAAA,MAClC;AAAA,EACF,GAEM,EAAE,aAAAvgB,OAAgBE;AAAA,IACtB;AAAA,MACE,GAAG2f;AAAA,MACH,cAAcM;AAAA,MACd,SAASE;AAAA,IAAA;AAAA,IAEX3D;AAAA,EAAA,GAII8D,KAAkB,CAAC5uB,OAAa;AACpC,UAAM6uB,KAAU,IAAI,IAAIrB,EAAW,iBAAiB,YAAY;AAChE,IAAAqB,GAAQ,OAAO7uB,EAAG,GAClBwtB,EAAW,iBAAiB,gBAAgBqB,EAAO,GACnD7B,EAAsB6B,EAAO;AAAA,EAC/B,GAGMC,KAAuB,MACvBnF,IACEkE,EAAc,WAAW,IACpBpjB,gBAAAA,EAACsf,IAAA,EAAY,eAAa,IAAE,UAAAsC,GAAY,sBAG9C3B,IAAA,EACE,UAAA;AAAA,IAAAqD,GAAY,IAAI,CAACjC,OAChBrhB,gBAAAA;AAAAA,MAACye;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,UAAQ;AAAA,QACR,SAAS,MAAM0F,GAAgB9C,GAAK,GAAG;AAAA,QAEtC,UAAAA,GAAK;AAAA,MAAA;AAAA,MALDA,GAAK;AAAA,IAAA,CAOb;AAAA,IACAkC,KAAgB,KAAKle,gBAAAA,EAACoZ,IAAA,EAAI,MAAK,MAAK,UAAA;AAAA,MAAA;AAAA,MAAE8E;AAAA,IAAA,EAAA,CAAc;AAAA,EAAA,GACvD,IAIFvjB,gBAAAA,EAACsf,IAAA,EAAa,GAAGmE,IAAY,eAAe,CAACZ,EAAY,cACtD,UAAAA,EAAY,eAAeA,EAAY,aAAa,WAAWjB,GAClE,GAIE0C,KAAepF,IACjB,EAAE,QAAQ+D,GAAW,OAAO,MAAMC,EAAa,EAAK,EAAA,IACpDL;AAEJ,SACExd,gBAAAA;AAAAA,IAAC8Z;AAAA,IAAA;AAAA,MACC,WAAAzc;AAAA,MACA,WAAAhH;AAAA,MACA,OAAO;AAAA,QACL,OAAAme;AAAA,QACA,GAAGzT;AAAA,MAAA;AAAA,MAGJ,UAAA;AAAA,QAAAvB,KACC7E,gBAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACE,GAAGyd;AAAA,YACJ,OAAO;AAAA,cACL,UAAU;AAAA,cACV,cAAc;AAAA,cACd,SAAS;AAAA,cACT,OAAO;AAAA,YAAA;AAAA,YAGR,UAAA5Y;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,CAACqa,KACAlf,gBAAAA;AAAAA,UAACukB;AAAA,UAAA;AAAA,YACC,OAAO1B;AAAA,YACP,YAAAxC;AAAA,YACA,OAAAxb;AAAA,YACA,MAAM1T,EAAM;AAAA,YACZ,YAAYiS;AAAA,UAAA;AAAA,QAAA;AAAA,QAIhBiC,gBAAAA;AAAAA,UAAC+Z;AAAA,UAAA;AAAA,YACE,GAAGzb;AAAA,YACJ,KAAK0c;AAAA,YACL,MAAA5sB;AAAA,YACA,WAAAiP;AAAA,YACA,QAAQygB;AAAA,YACR,YAAY/f;AAAA,YACZ,SAAS,CAAC,CAAC6K;AAAA,YACX,YAAAiR;AAAA,YAEC,UAAA;AAAA,cAAAmF,GAAA;AAAA,cACDrkB,gBAAAA,EAACwf,IAAA,EAAW,QAAQ2D,GAAe,eAAY,QAAO,MAAA1vB,GACpD,UAAAuM,gBAAAA,EAACmL,IAAA,EAAmB,OAAO,IAAI,QAAQ,IAAI,EAAA,CAC7C;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGDgY,KACCnjB,gBAAAA,EAACmgB,IAAA,EAAQ,OAAOmE,IAAc,YAAAjE,GAAwB,WAAU,gBAAe,QAAQ,GACnF,UAAAld,IACCkC,gBAAAA,EAAC0a,IAAA,EACE,UAAA;AAAA,UAAA1a,gBAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAM;AAAA,cACN,OAAO,EAAE,WAAW,2BAA2B,aAAa,EAAA;AAAA,cAE5D,UAAA;AAAA,gBAAArF,gBAAAA,EAAC,WAAO,UAAA,0DAAA,CAA0D;AAAA,gBAClEA,gBAAAA,EAAC,UAAK,GAAE,yGAAwG,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UACzK;AAAA,QAAA,EAAA,CAET,IACEkf,IACFlf,gBAAAA,EAACyhB,IAAA,EAAa,OAAOsB,EAAA,CAAY,IAEjC/iB,gBAAAA,EAACkhB,IAAA,EAAS,GAAGwC,GAAW,OAAOb,GAAa,GAEjD;AAAA,QAIDlW,KACC3M,gBAAAA,EAAC,OAAA,EAAK,GAAG2jB,IAAkB,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,SAAS,IAAA,GAC9E,UAAAhX,GACH;AAAA,QAEDsB,KACCjO,gBAAAA,EAAC,OAAA,EAAK,GAAG4jB,IAAmB,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAO,OAAO,UAAA,GAC7E,UAAA3V,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC,GA2DYuW,KAAS9C;AAGtB8C,GAAO,OAAO7B;AACd6B,GAAO,UAAUC;AChbV,MAAMC,KAAa,CAAC,MAAM,MAAM,IAAI,GAG9BC,KAAgB,CAAC,WAAW,YAAY,SAAS,GAGxDC,KAAiB,CAACnxB,MAAqB,iCAAiCA,KAAQ,IAAI,KAEpFoxB,KAAiB,CAACpxB,MAAqB,gCAAgCA,KAAQ,IAAI,KAM5EqxB,KAAiB9iB,EAAO;AAAA,WAO1B,CAAA7Q,MAASA,EAAM,YAAY,SAAS,MAAM;AAAA;AAAA;AAAA,qBAGhC,CAAAA,MAASA,EAAM,gBAAgB,SAAS,MAAM;AAAA;AAAA,4BAEvC,CAAAA,MAASyzB,GAAezzB,EAAM,IAAI,CAAC;AAAA,6BAClC,CAAAA,MAASyzB,GAAezzB,EAAM,IAAI,CAAC;AAAA;AAAA;AAAA,aAGnD,CAAAA,MAASA,EAAM,gBAAgB,qCAAqC,KAAK;AAAA,cACxE,CAAAA,MAASA,EAAM,gBAAgB,qCAAqC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYnF,CAAAA,MAASA,EAAM,WAAWkP;AAAA,iBACb,OAAOlP,EAAM,WAAY,WAAW,GAAGA,EAAM,OAAO,OAAOA,EAAM,OAAO;AAAA,GACtF;AAAA;AAAA,IAEC,CAAAA,MAASA,EAAM,WAAWkP;AAAA,kBACZ,OAAOlP,EAAM,WAAY,WAAW,GAAGA,EAAM,OAAO,OAAOA,EAAM,OAAO;AAAA,GACvF;AAAA,GAOU4zB,KAAc/iB,EAAO;AAAA;AAAA,IAM9B,CAAA7Q,MAASA,EAAM,WAAWkP;AAAA,iBACb,OAAOlP,EAAM,WAAY,WAAW,GAAGA,EAAM,OAAO,OAAOA,EAAM,OAAO;AAAA,GACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOC,CAAAA,MAASA,EAAM,YAAY,cAAckP;AAAA;AAAA,qBAExBukB,GAAezzB,EAAM,IAAI,CAAC,IAAIyzB,GAAezzB,EAAM,IAAI,CAAC;AAAA,GAC1E;AAAA;AAAA,IAEC,CAAAA,MAASA,EAAM,YAAY,aAAakP;AAAA;AAAA;AAAA;AAAA,GAIzC;AAAA,GAOU2kB,KAAchjB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOrBijB,KAAiBjjB,EAAO;AAAA;AAAA,GAIxBkjB,KAAkBljB,EAAO;AAAA,aAOzB,CAAA7Q,MAAS0zB,GAAe1zB,EAAM,IAAI,CAAC;AAAA,gBAChC,CAAAA,MAASA,EAAM,SAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMhC,CAAAA,MAASA,EAAM,QAAQ,WAAW,QAAQ;AAAA;AAAA;AAAA,IAGpD,CAAAA,MAASA,EAAM,SAASkP;AAAA,aACf,OAAOlP,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM,KAAK;AAAA,GAC5E;AAAA;AAAA,IAEC,CAAAA,MAASA,EAAM,UAAU,UAAUkP;AAAA;AAAA;AAAA;AAAA,GAIpC;AAAA;AAAA,IAEC,CAAAlP,MAASA,EAAM,UAAU,WAAWkP;AAAA;AAAA;AAAA;AAAA,GAIrC;AAAA;AAAA,IAEC,CAAAlP,MAASA,EAAM,YAAYkP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAO5B;AAAA;AAAA;AAAA,8BAG2B,CAAAlP,MAASyzB,GAAezzB,EAAM,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,+BAIlC,CAAAA,MAASyzB,GAAezzB,EAAM,IAAI,CAAC;AAAA;AAAA,GAIrDg0B,KAAgBnjB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA2BvBojB,KAAYpjB,EAAO,SAEnBqjB,KAAWrjB,EAAO;AAAA;AAAA;AAAA;AAAA,IAW3B,CAAA7Q,MAASA,EAAM,YAAYkP;AAAA;AAAA,GAE5B;AAAA;AAAA,IAEC,CAAAlP,MAASA,EAAM,YAAYkP;AAAA;AAAA,GAE5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcC,CAAAlP,OAAUA,EAAM,cAAcA,EAAM,eAAekP;AAAA;AAAA,GAEpD;AAAA;AAAA;AAAA,gBAGa,CAAAlP,MAASA,EAAM,WACvB,qCACA,+BAA+B;AAAA;AAAA;AAAA;AAAA,gBAIvB,CAAAA,MAASA,EAAM,WACvB,qCACA,gCAAgC;AAAA;AAAA,GAI3Bm0B,KAAYtjB,EAAO;AAAA,aAOnB,CAAA7Q,MAAS0zB,GAAe1zB,EAAM,IAAI,CAAC;AAAA;AAAA,IAE5C,CAAAA,MAASA,EAAM,SAASA,EAAM,QAAQ,KAAKkP;AAAA,oBAC3B,KAAKlP,EAAM,QAAQ,EAAE;AAAA,GACtC;AAAA;AAAA,gBAEa,CAAAA,MAASA,EAAM,SAAS,MAAM;AAAA;AAAA;AAAA,cAGhC,CAAAA,MAASA,EAAM,QAAQ,WAAW,QAAQ;AAAA;AAAA,sBAElC,CAAAA,MAASA,EAAM,QAC/B,2BACA,SAAS;AAAA;AAAA;AAAA,IAGX,CAAAA,MAASA,EAAM,SAASkP;AAAA,aACf,OAAOlP,EAAM,SAAU,WAAW,GAAGA,EAAM,KAAK,OAAOA,EAAM,KAAK;AAAA,GAC5E;AAAA;AAAA,IAEC,CAAAA,MAASA,EAAM,UAAU,UAAUkP;AAAA;AAAA;AAAA;AAAA,GAIpC;AAAA;AAAA,IAEC,CAAAlP,MAASA,EAAM,UAAU,WAAWkP;AAAA;AAAA;AAAA;AAAA,GAIrC;AAAA,GAOUklB,KAAevjB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOtBwjB,KAAexjB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAqBlB,CAAA7Q,MAASA,EAAM,WAAW,kBAAkB,MAAM;AAAA;AAAA,GAItD6uB,KAAahe,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOpByjB,KAAczjB,EAAO;AAAA,IAI9B,CAAA7Q,MAASA,EAAM,YAAYkP;AAAA;AAAA;AAAA;AAAA,GAI5B;AAAA;AAAA,IAEC,CAAAlP,MAASA,EAAM,YAAYkP;AAAA;AAAA;AAAA,GAG5B;AAAA,GCxTU2C,KAAQ0hB,IACR3hB,KAAW4hB;AA6FxB,SAASe,GACP;AAAA,EACE,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAnyB,IAAO;AAAA,EACP,SAAA4O,IAAU;AAAA,EACV,UAAA+b,IAAW;AAAA,EACX,WAAA1b,IAAY;AAAA,EACZ,QAAAmjB;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,eAAAnE,IAAgB;AAAA,EAChB,cAAcoE;AAAA,EACd,mBAAA7D;AAAA,EACA,YAAA8D,IAAa;AAAA,EACb,cAAcC;AAAA,EACd,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAA7qB;AAAA,EACA,UAAA8qB,IAAW;AAAA,EACX,SAAArjB,IAAU;AACZ,GACAnE,GACA;AAEE,QAAM,CAACynB,GAAsBC,CAAuB,IAAIjgB,EAA+B,oBAAI,KAAK,GAC1F,CAACkgB,GAAsBC,CAAuB,IAAIngB,EAA+B,oBAAI,KAAK,GAC1F,CAACogB,GAAoBC,CAAqB,IAAIrgB,EAAS,EAAK,GAC5DsgB,KAAetjB,EAA8B,IAAI,GACjDujB,IAAqBvjB,EAAsB,IAAI,GAG/Cue,IAAe+D,KAA0BU,GACzClE,KAAwB9N,GAAY,CAAC+N,MAAuC;AAEhF,UAAM4B,IAAU5B,MAAS,QAAQ,IAAI,IAAIoD,EAAW,IAAI,CAAAjvB,MAAKA,EAAE,EAAE,CAAC,IAAI6rB;AAEtE,IAAKuD,KACHW,EAAwBtC,CAAO,GAEjClC,KAAA,QAAAA,EAAoBkC;AAAA,EACtB,GAAG,CAAC2B,GAAwB7D,GAAmB0D,CAAU,CAAC,GAGpDqB,IAAehB,KAA0BU,GACzCO,IAAqBzS,GAAY,CAAClf,MAAyB;AAC/D,UAAM6uB,IAAU,IAAI,IAAI6C,CAAY;AACpC,IAAI7C,EAAQ,IAAI7uB,CAAG,IACjB6uB,EAAQ,OAAO7uB,CAAG,IAElB6uB,EAAQ,IAAI7uB,CAAG,GAEZ0wB,KACHW,EAAwBxC,CAAO,GAEjC8B,KAAA,QAAAA,EAAiB9B;AAAA,EACnB,GAAG,CAAC6C,GAAchB,GAAwBC,CAAc,CAAC,GAGnDiB,IAAa1S,GAAY,CAAClf,MAAgB;AAC9C,QAAI,CAAC8wB,EAAc;AAEnB,QAAIe,IAAsC;AAG1C,KAAIhB,KAAA,gBAAAA,EAAY,SAAQ7wB,MAClB6wB,EAAW,cAAc,QAC3BgB,IAAe,SACNhB,EAAW,cAAc,WAElCgB,IAAe,QAInBf,EAAa9wB,GAAK6xB,CAAY;AAAA,EAChC,GAAG,CAAChB,GAAYC,CAAY,CAAC,GAGvBgB,IAAcriB,GAAQ,MACtB,CAAC8gB,KAAcnE,MAAkB,WAAiB,KAClDK,MAAiB,QAAc,KAC/B4D,EAAW,WAAW,IAAU,KAC7BA,EAAW,MAAM,CAAA0B,MAAUtF,EAAa,IAAIsF,EAAO,EAAE,CAAC,GAC5D,CAACxB,GAAYnE,GAAeK,GAAc4D,CAAU,CAAC,GAElD1f,IAAgBlB,GAAQ,MAAM;AAElC,QADI,CAAC8gB,KAAcnE,MAAkB,YAAYK,MAAiB,SAC9D4D,EAAW,WAAW,EAAG,QAAO;AACpC,UAAM2B,IAAgB3B,EAAW,OAAO,CAAA0B,MAAUtF,EAAa,IAAIsF,EAAO,EAAE,CAAC,EAAE;AAC/E,WAAOC,IAAgB,KAAKA,IAAgB3B,EAAW;AAAA,EACzD,GAAG,CAACE,GAAYnE,GAAeK,GAAc4D,CAAU,CAAC;AAGxD,EAAA/e,GAAU,MAAM;AACd,UAAMjR,IAAYmxB,GAAa;AAC/B,QAAI,CAACnxB,EAAW;AAEhB,UAAM4xB,IAAe,MAAM;AACzB,MAAAV,EAAsB,EAAI,GACtBE,EAAmB,WACrB,OAAO,aAAaA,EAAmB,OAAO,GAEhDA,EAAmB,UAAU,OAAO,WAAW,MAAM;AACnD,QAAAF,EAAsB,EAAK;AAAA,MAC7B,GAAG,GAAG;AAAA,IACR;AAEA,WAAAlxB,EAAU,iBAAiB,UAAU4xB,GAAc,EAAE,SAAS,IAAM,GAE7D,MAAM;AACX,MAAA5xB,EAAU,oBAAoB,UAAU4xB,CAAY,GAChDR,EAAmB,WACrB,OAAO,aAAaA,EAAmB,OAAO;AAAA,IAElD;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,QAAMS,IAAahT,GAAY,CAC7BiT,GACAC,IAAQ,MAEDD,EAAK,QAAQ,CAACJ,GAAQt3B,MAAU;AACrC,UAAMkZ,KAAa+d,EAAa,IAAIK,EAAO,EAAE,GACvC1H,KAAaoC,aAAwB,OAAOA,EAAa,IAAIsF,EAAO,EAAE,GACtEM,KAAcN,EAAO,YAAYA,EAAO,SAAS,SAAS,GAE1DO,KACJxiB,gBAAAA;AAAAA,MAACggB;AAAA,MAAA;AAAA,QAEC,YAAAS;AAAA,QACA,UAAUlG;AAAA,QACV,YAAAoG;AAAA,QACA,UAAU9c;AAAA,QACV,OAAAye;AAAA,QACA,SAAS,MAAM;AACb,UAAI7B,KAAcnE,MAAkB,YAClCY,uBAA0B,IAAI,CAAC+E,EAAO,EAAE,CAAC,CAAC,GAE5ChB,KAAA,QAAAA,EAAagB,GAAQt3B;AAAA,QACvB;AAAA,QAEC,UAAA;AAAA,UAAA81B,KACC9lB,gBAAAA;AAAAA,YAACslB;AAAA,YAAA;AAAA,cAEC,MAAA7xB;AAAA,cACA,OAAO;AAAA,cACP,OAAM;AAAA,cAEN,UAAAuM,gBAAAA,EAACulB,MAAa,SAAS,CAAC93B,OAAMA,GAAE,gBAAA,GAC7B,UAAAk0B,MAAkB,WACjB3hB,gBAAAA;AAAAA,gBAAC4Y;AAAA,gBAAA;AAAA,kBACC,SAASgH;AAAA,kBACT,UAAU,MAAM;AACd,oBAAA2C,uBAA0B,IAAI,CAAC+E,EAAO,EAAE,CAAC,CAAC;AAAA,kBAC5C;AAAA,gBAAA;AAAA,cAAA,IAGFtnB,gBAAAA;AAAAA,gBAAC+F;AAAA,gBAAA;AAAA,kBACC,SAAS6Z;AAAA,kBACT,UAAU,CAAC/Z,OAAY;AACrB,0BAAMue,KAAU,IAAI,IAAIpC,MAAiB,QAAQ4D,EAAW,IAAI,CAAAjvB,OAAKA,GAAE,EAAE,IAAIqrB,CAAY;AACzF,oBAAInc,KACFue,GAAQ,IAAIkD,EAAO,EAAE,IAErBlD,GAAQ,OAAOkD,EAAO,EAAE,GAE1B/E,GAAsB6B,EAAO;AAAA,kBAC/B;AAAA,gBAAA;AAAA,cAAA,EACF,CAEJ;AAAA,YAAA;AAAA,YA3BI;AAAA,UAAA;AAAA,UA8BPuB,EAAQ,IAAI,CAACh1B,IAAQm3B,OAAa;AACjC,kBAAMx4B,KAAQg4B,EAAO32B,GAAO,GAAG,GACzBo3B,KAAgBD,OAAa;AAEnC,mBACE9nB,gBAAAA;AAAAA,cAACslB;AAAA,cAAA;AAAA,gBAEC,MAAA7xB;AAAA,gBACA,OAAO9C,GAAO;AAAA,gBACd,OAAOA,GAAO;AAAA,gBACd,OAAOA,GAAO;AAAA,gBACd,OAAOo3B,KAAgBJ,IAAQ;AAAA,gBAE/B,UAAAtiB,gBAAAA,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,YACxC,UAAA;AAAA,kBAAA0iB,MAAiB/B,KAAc4B,MAC9B5nB,gBAAAA;AAAAA,oBAACwlB;AAAA,oBAAA;AAAA,sBACC,UAAUtc;AAAA,sBACV,SAAS,CAACzb,OAAM;AACd,wBAAAA,GAAE,gBAAA,GACFy5B,EAAmBI,EAAO,EAAE;AAAA,sBAC9B;AAAA,sBACA,cAAYpe,KAAa,OAAO;AAAA,sBAEhC,4BAAC8e,IAAA,CAAA,CAAoB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAIzBhoB,gBAAAA,EAACylB,IAAA,EAAY,UAAU90B,GAAO,UAAU,UAAA61B,GACrC,UAAA71B,GAAO,SAASA,GAAO,OAAOrB,IAAOg4B,GAAQt3B,CAAK,IAAIV,GAAA,CACzD;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,cAxBKqB,GAAO;AAAA,YAAA;AAAA,UA2BlB,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MA9EI22B,EAAO;AAAA,IAAA,GAkFVW,KAAc/e,MAAcid,KAChCnmB,gBAAAA,EAACqlB,IAAA,EAAuC,UAAQ,IAC9C,UAAArlB,gBAAAA,EAACslB,IAAA,EAAU,SAASK,EAAQ,UAAUG,IAAa,IAAI,IAAI,MAAAryB,GACxD,UAAA0yB,EAAkBmB,GAAQt3B,CAAK,GAClC,EAAA,GAHa,GAAGs3B,EAAO,EAAE,WAI3B,GAGIY,IAAYhf,MAAc0e,KAC5BH,EAAWH,EAAO,UAAiBK,IAAQ,CAAC,IAC5C,CAAA;AAEJ,WAAO,CAACE,IAASI,IAAa,GAAGC,CAAS,EAAE,OAAO,OAAO;AAAA,EAC5D,CAAC,GACA;AAAA,IACDvC;AAAA,IACAlyB;AAAA,IACAuyB;AAAA,IACAiB;AAAA,IACAjF;AAAA,IACA8D;AAAA,IACAnE;AAAA,IACAwE;AAAA,IACAK;AAAA,IACAU;AAAA,IACA3E;AAAA,IACA+D;AAAA,EAAA,CACD;AAED,SAAIV,EAAW,WAAW,KAAK,CAACziB,IAE5BnD,gBAAAA;AAAAA,IAAC8kB;AAAA,IAAA;AAAA,MACC,MAAArxB;AAAA,MACA,KAAKszB;AAAA,MACL,WAAArkB;AAAA,MACA,SAASmjB,KAAA,gBAAAA,EAAQ;AAAA,MACjB,SAASA,KAAA,gBAAAA,EAAQ;AAAA,MACjB,eAAegB;AAAA,MACf,WAAAnrB;AAAA,MAEA,UAAAsE,gBAAAA,EAACggB,MAAY,UAAAuG,EAAA,CAAU;AAAA,IAAA;AAAA,EAAA,IAM3BvmB,gBAAAA;AAAAA,IAAC8kB;AAAA,IAAA;AAAA,MACC,MAAArxB;AAAA,MACA,KAAKszB;AAAA,MACL,WAAArkB;AAAA,MACA,SAASmjB,KAAA,gBAAAA,EAAQ;AAAA,MACjB,SAASA,KAAA,gBAAAA,EAAQ;AAAA,MACjB,eAAegB;AAAA,MACf,WAAAnrB;AAAA,MAEA,UAAA2J,gBAAAA;AAAAA,QAAC0f;AAAA,QAAA;AAAA,UACC,KAAA/lB;AAAA,UACA,MAAAvL;AAAA,UACA,SAAS2qB,IAAW,aAAa/b;AAAA,UACjC,SAASwjB,KAAA,gBAAAA,EAAQ;AAAA,UAEjB,UAAA;AAAA,YAAA7lB,gBAAAA,EAACglB,IAAA,EACC,4BAACC,IAAA,EACE,UAAA;AAAA,cAAAa,KACC9lB,gBAAAA;AAAAA,gBAACklB;AAAA,gBAAA;AAAA,kBAEC,MAAAzxB;AAAA,kBACA,OAAO;AAAA,kBACP,OAAM;AAAA,kBAEL,UAAAkuB,MAAkB,cACjB3hB,gBAAAA,EAACulB,IAAA,EACC,UAAAvlB,gBAAAA;AAAAA,oBAAC+F;AAAA,oBAAA;AAAA,sBACC,SAASshB;AAAA,sBACT,eAAAnhB;AAAA,sBACA,UAAU,CAACL,MAAY;AACrB,wBAAA0c,GAAsB1c,IAAU,QAAQ,oBAAI,IAAA,CAAK;AAAA,sBACnD;AAAA,oBAAA;AAAA,kBAAA,EACF,CACF;AAAA,gBAAA;AAAA,gBAdE;AAAA,cAAA;AAAA,cAkBP8f,EAAQ,IAAI,CAACh1B,MACZqP,gBAAAA;AAAAA,gBAACklB;AAAA,gBAAA;AAAA,kBAEC,MAAAzxB;AAAA,kBACA,OAAO9C,EAAO;AAAA,kBACd,OAAOA,EAAO;AAAA,kBACd,OAAOA,EAAO;AAAA,kBACd,UAAUA,EAAO;AAAA,kBACjB,SAAS,MAAMA,EAAO,YAAYw2B,EAAWx2B,EAAO,GAAG;AAAA,kBAEvD,UAAA0U,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,iBAAiB,KAAK,MAAA,GACzF,UAAA;AAAA,oBAAArF,gBAAAA,EAAC,QAAA,EAAM,YAAO,MAAA,CAAM;AAAA,oBACnBrP,EAAO,YACN0U,gBAAAA;AAAAA,sBAAC8f;AAAA,sBAAA;AAAA,wBACC,YAAWiB,KAAA,gBAAAA,EAAY,SAAQz1B,EAAO,MAAMy1B,EAAW,YAAY;AAAA,wBAEnE,UAAA;AAAA,0BAAApmB,gBAAAA,EAAC8W,IAAA,EAAiB,gBAAasP,KAAA,gBAAAA,EAAY,SAAQz1B,EAAO,OAAOy1B,EAAW,cAAc,MAAA,CAAO;AAAA,0BACjGpmB,gBAAAA,EAACmL,MAAmB,gBAAaib,KAAA,gBAAAA,EAAY,SAAQz1B,EAAO,OAAOy1B,EAAW,cAAc,OAAA,CAAQ;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACtG,EAAA,CAEJ;AAAA,gBAAA;AAAA,gBAlBKz1B,EAAO;AAAA,cAAA,CAoBf;AAAA,YAAA,EAAA,CACH,EAAA,CACF;AAAA,YAEAqP,gBAAAA,EAAColB,IAAA,EACE,UAAAjiB,IACCnD,gBAAAA,EAACqlB,IAAA,EACC,UAAArlB,gBAAAA,EAACslB,IAAA,EAAU,SAASK,EAAQ,UAAUG,IAAa,IAAI,IAAI,MAAAryB,GACzD,UAAAuM,gBAAAA,EAAC,OAAA,EAAI,OAAO,EAAE,WAAW,UAAU,SAAS,OAAA,GAAU,UAAA,UAAM,EAAA,CAC9D,EAAA,CACF,IAEAynB,EAAW7B,CAAU,EAAA,CAEzB;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGR;AAEA,MAAMuC,KAAeppB,EAAW2mB,EAAU;AAIxCyC,GAAqB,cAAc;AAE9B,MAAMC,KAAQD,IChcRE,KAAc,CAAC,MAAM,IAAI,GAWhC9lB,KAAgB,CAAC9O,MACd4M;AAAA;AAAA,4CAEmC5M,CAAI;AAAA;AAAA;AAAA,kCAGdA,CAAI;AAAA,+BACPA,CAAI;AAAA,kCACDA,CAAI;AAAA;AAAA;AAAA;AAAA,gCAINA,CAAI;AAAA,iCACHA,CAAI;AAAA;AAAA,KAkBxB60B,KAAatmB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAYrB,CAAC,EAAE,YAAAqB,EAAA,MAAkBA,IAAa,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA,gBAIxD,CAAC,EAAE,YAAAuc,GAAY,YAAAvc,EAAA,MAC3BA,IACI,kCACAuc,IACE,iCACA,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUtC,CAAC,EAAE,eAAA2I,GAAe,YAAA3I,QACb2I,IAQEloB;AAAA,sBACWuf,IAAa,QAAQ,KAAK;AAAA,uBACzBA,IAAa,QAAQ,KAAK;AAAA,QARpCvf;AAAA;AAAA;AAAA,OAUV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMC,CAAC,EAAE,MAAA5M,QAAW8O,GAAc9O,CAAI,CAAC;AAAA;AAAA;AAAA,IAGjC,CAAC,EAAE,gBAAA+0B,QACHA,KACAnoB;AAAA;AAAA;AAAA,KAGC;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,YAAAgD,QACHA,KACAhD;AAAA;AAAA;AAAA,KAGC;AAAA,GAaQooB,KAAgBzmB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAahC,CAAC,EAAE,eAAAumB,GAAe,YAAA3I,EAAA,MAClB2I,KACAloB;AAAA,uBACmBuf,IACb,2DACA,GAAG;AAAA,sBACUA,IAEb,MADA,wDACG;AAAA,KACR;AAAA;AAAA;AAAA,IAGD,CAAC,EAAE,eAAA2I,GAAe,YAAA3I,EAAA,MAClB2I,KACAloB;AAAA,yBACqBuf,IAAa,eAAe,UAAU;AAAA,KAC1D;AAAA,GAWQ8I,KAAc1mB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA0BrB2mB,KAAc3mB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAY9B,CAAC,EAAE,YAAA4d,QACHA,IACIvf;AAAA;AAAA;AAAA,YAIAA;AAAA;AAAA;AAAA,SAGC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAaIuoB,KAAqB5mB,EAAO;AAAA;AAAA;AAAA;AAAA,GAW5B6mB,KAAkB7mB,EAAO;AAAA;AAAA,WAI3B,CAAC,EAAE,YAAAqB,EAAA,MACVA,IACI,6BACA,yBAAyB;AAAA;AAAA,YAErB,CAAC,EAAE,YAAAA,EAAA,MAAkBA,IAAa,gBAAgB,SAAU;AAAA,GCnN3DL,KAAQqlB,IA4BRS,KAAS/pB;AAAA,EACpB,CACE;AAAA,IACE,MAAAtL,IAAO;AAAA,IACP,cAAAs1B;AAAA,IACA,gBAAAC;AAAA,IACA,UAAA5lB,IAAW;AAAA,IACX,OAAA9T;AAAA,IACA,cAAA6e;AAAA,IACA,UAAA/c;AAAA,IACA,WAAAsK;AAAA,IACA,YAAAkkB;AAAA,IACA,iBAAAqJ;AAAA,IACA,GAAG93B;AAAA,EAAA,GAELoS,MACG;AAOH,UAAM6c,IAAQ8I,GAAe;AAAA,MAC3B,GAAG/3B;AAAA,MACH,YAPsB7B,KAASswB;AAAA,MAQ/B,iBAN2BzR,KAAgB8a;AAAA,IAM1B,CAClB,GACKzlB,IAAWC,EAAyB,IAAI,GACxCzE,IAAMuE,KAAgBC,GAGtB,EAAE,YAAA6C,MAAe8iB;AAAA,MACrB;AAAA,QACE,GAAGh4B;AAAA,QACH,YAAYiS;AAAA,MAAA;AAAA,MAEdgd;AAAA,MACA5c;AAAA,IAAA,GAII,EAAE,gBAAAglB,GAAgB,YAAAY,EAAA,IAAeC,GAAA,GAGjCC,IAAelJ,EAAM,aAAa2I,IAAeC,GAGjDT,IAAgB,GAAQQ,KAAgBC,IAGxCO,IACJlkB,gBAAAA;AAAAA,MAACijB;AAAA,MAAA;AAAA,QACC,MAAA70B;AAAA,QACA,YAAY2sB,EAAM;AAAA,QAClB,YAAYhd;AAAA,QACZ,gBAAAolB;AAAA,QACA,eAAAD;AAAA,QACA,WAAA7sB;AAAA,QACA,iBAAe0kB,EAAM,aAAa,SAAS;AAAA,QAC3C,iBAAehd,IAAW,SAAS;AAAA,QAGnC,UAAA;AAAA,UAAApD,gBAAAA,EAACsF,IAAA,EACC,UAAAtF,gBAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACE,GAAG8D,GAAWuC,GAAY+iB,CAAU;AAAA,cACrC,KAAApqB;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UAGAqG,gBAAAA,EAACojB,IAAA,EAAc,YAAYrI,EAAM,YAAY,eAAAmI,GAE3C,UAAA;AAAA,YAAAvoB,gBAAAA;AAAAA,cAAC2oB;AAAA,cAAA;AAAA,gBACC,YAAYvI,EAAM;AAAA,gBAClB,cAAU;AAAA,gBACV,eAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAIbmI,KAAiBe,KAChBtpB,gBAAAA,EAAC0oB,MAAY,YAAYtI,EAAM,YAC5B,UAAAkJ,EAAA,CACH;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAKJ,WAAIl4B,sBAECw3B,IAAA,EACE,UAAA;AAAA,MAAAW;AAAA,MACDvpB,gBAAAA;AAAAA,QAAC6oB;AAAA,QAAA;AAAA,UACC,YAAYzlB;AAAA,UACZ,SAAS,MAAM;AACb,YAAKA,KACHgd,EAAM,OAAA;AAAA,UAEV;AAAA,UAEC,UAAAhvB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF,IAIGm4B;AAAA,EACT;AACF;AAEAT,GAAO,cAAc;AChLd,MAAMU,KAAexnB,EAAO;AAAA;AAAA;AAAA;AAAA,GAMtBynB,KAAgBznB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWvB0nB,KAAiB1nB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxB2nB,KAAgB3nB,EAAO;AAAA;AAAA;AAAA;AAAA,GAMvB4nB,KAAgB5nB,EAAO;AAAA;AAAA,GAIvB6nB,KAAwB7nB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAc/B8nB,KAAe9nB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAyBtB+nB,KAAe/nB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAUvB,CAAC,EAAE,UAAAoB,EAAA,MAAgBA,IAAW,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA,WAIzD,CAAC,EAAE,UAAA4mB,GAAU,UAAA5mB,EAAA,MACpBA,IACI,2CACA4mB,IACA,2CACA,+BAA+B;AAAA,GAG1BC,KAAoBjoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAO3BkoB,KAAsBloB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQ7BmoB,KAA2BnoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQnC,CAAC,EAAE,UAAAoB,EAAA,MAAgBA,IAAW,gBAAgB,SAAU;AAAA,aACvD,CAAC,EAAE,UAAAA,EAAA,MAAgBA,IAAW,MAAM,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYtCgnB,KAAqBpoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAO5BqoB,KAA0BroB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAOxB,CAAC,EAAE,UAAAoB,GAAU,QAAA2M,QAC3B3M,IAAiB,mDACjB2M,IAAe,iDACZ,uCACR;AAAA,gBACa,CAAC,EAAE,UAAA3M,EAAA,MACfA,IAAW,+CAA+C,mCAC5D;AAAA,YACU,CAAC,EAAE,UAAAA,EAAA,MAAeA,IAAW,gBAAgB,SAAS;AAAA;AAAA,aAErD,CAAC,EAAE,UAAAA,EAAA,MAAeA,IAAW,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAKpC,CAAC,EAAE,UAAAA,GAAU,QAAA2M,QAChB3M,IAAiB,iDACjB2M,IAAe,+CACZ,qCACR;AAAA;AAAA;AAAA;AAAA,oBAIe,CAAC,EAAE,UAAA3M,EAAA,MACjB,CAACA,KAAY,8CACf;AAAA;AAAA;AAAA,eAGW,CAAC,EAAE,UAAAA,EAAA,MACV,CAACA,KAAY,4CACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAaOknB,KAAiBtoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYxBuoB,KAAgBvoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASvBwoB,KAAqBxoB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAW5ByoB,KAAyBzoB,EAAO;AAAA;AAAA;AAAA;AAAA,GAMhC0oB,KAA6B1oB,EAAO;AAAA;AAAA;AAAA;AAAA,GAMpC2oB,KAA2B3oB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASnC,CAAC,EAAE,UAAAoB,EAAA,MAAeA,IAAW,gBAAgB,SAAS;AAAA,aACrD,CAAC,EAAE,UAAAA,EAAA,MAAeA,IAAW,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcTpB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC9F/C,MAAM8nB,KAA4C,CAAC;AAAA,EACjD,WAAAvT;AAAA,EACA,YAAAqP;AAAA,EACA,cAAA5D;AAAA,EACA,UAAA5e;AAAA,EACA,YAAAwnB;AAAA,EACA,mBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,OAAAlgB;AAAA,EACA,eAAAmgB,IAAgB;AAAA,EAChB,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,cAAAC;AAAA,EACA,YAAAC;AACF,MAAM;AACJ,QAAMC,IAAQvsB,GAAA,GACR,CAACwsB,GAAaC,CAAc,IAAInlB,EAAS,EAAE,GAC3C,CAAColB,GAAaC,CAAc,IAAIrlB,EAAS,CAAC,GAC1C,CAACslB,GAAUC,CAAW,IAAIvlB;AAAA,IAC9B,OAAOglB,KAAe,YAAYA,EAAW,WAAWA,EAAW,WAAW;AAAA,EAAA,GAI1EQ,IAAejnB,GAAQ,MACtB2mB,IACDb,IACKlF,EAAW,OAAO,CAACvE,MAASyJ,EAAaa,GAAatK,CAAI,CAAC,IAE7DuE,EAAW,OAAO,CAACvE,MAAS;AACjC,UAAMvW,IAAQ,OAAOuW,EAAK,SAAS,EAAE,GAC/B1U,KAAc,OAAO0U,EAAK,eAAe,EAAE;AACjD,WACEvW,EAAM,YAAA,EAAc,SAAS6gB,EAAY,YAAA,CAAa,KACtDhf,GAAY,YAAA,EAAc,SAASgf,EAAY,aAAa;AAAA,EAEhE,CAAC,IAXwB/F,GAYxB,CAACA,GAAY+F,GAAab,CAAY,CAAC,GAGpCoB,IAAkBlnB;AAAA,IACtB,MAAMinB,EAAa,OAAO,CAAC5K,MAAS,CAACA,EAAK,QAAQ;AAAA,IAClD,CAAC4K,CAAY;AAAA,EAAA,GAITE,IAAsBV,KAAc,CAACV,GAGrCqB,KAAgBpnB,GAAQ,MAAM;AAClC,QAAI,CAACmnB,EAAqB,QAAOF;AACjC,UAAMI,KAAcR,IAAc,KAAKE,GACjCO,IAAWD,IAAaN;AAC9B,WAAOE,EAAa,MAAMI,GAAYC,CAAQ;AAAA,EAChD,GAAG,CAACL,GAAcJ,GAAaE,GAAUI,CAAmB,CAAC,GAGvDI,IAAcJ,IAAsBC,KAAgBH,GAGpDO,IAAaxnB,GAAQ,MACpBmnB,IACE,KAAK,KAAKF,EAAa,SAASF,CAAQ,IADd,GAEhC,CAACE,EAAa,QAAQF,GAAUI,CAAmB,CAAC,GAGjDM,KAAmBhY,GAAY,CAACiY,MAAiB;AACrD,IAAAZ,EAAeY,CAAI;AAAA,EACrB,GAAG,CAAA,CAAE,GAGCC,IAAuBlY,GAAY,CAAChhB,MAAiB;AACzD,IAAAu4B,EAAYv4B,CAAI,GAChBq4B,EAAe,CAAC;AAAA,EAClB,GAAG,CAAA,CAAE,GAGCc,IAAgB5nB,GAAQ,MACxBknB,EAAgB,WAAW,IAAU,KAClCA,EAAgB,MAAM,CAAC7K,MAASW,EAAa,IAAIX,EAAK,GAAG,CAAC,GAChE,CAAC6K,GAAiBlK,CAAY,CAAC,GAG5B6K,IAAkB7nB,GAAQ,MAAM;AACpC,UAAMuiB,IAAgB2E,EAAgB;AAAA,MAAO,CAAC7K,MAC5CW,EAAa,IAAIX,EAAK,GAAG;AAAA,IAAA,EACzB;AACF,WAAOkG,IAAgB,KAAKA,IAAgB2E,EAAgB;AAAA,EAC9D,GAAG,CAACA,GAAiBlK,CAAY,CAAC,GAG5B8K,IAAkBrY;AAAA,IACtB,CAAC5O,MAAqB;AACpB,YAAMue,IAAU,IAAI,IAAIpC,CAAY;AACpC,MAAAkK,EAAgB,QAAQ,CAAC7K,OAAS;AAChC,QAAIxb,IACFue,EAAQ,IAAI/C,GAAK,GAAG,IAEpB+C,EAAQ,OAAO/C,GAAK,GAAG;AAAA,MAE3B,CAAC,GACD2J,EAAmB5G,CAAO;AAAA,IAC5B;AAAA,IACA,CAAC8H,GAAiBlK,GAAcgJ,CAAkB;AAAA,EAAA,GAI9C+B,IAAmBtY;AAAA,IACvB,CAAClf,MAAgB;AACf,YAAM6uB,IAAU,IAAI,IAAIpC,CAAY;AACpC,MAAIoC,EAAQ,IAAI7uB,CAAG,IACjB6uB,EAAQ,OAAO7uB,CAAG,IAElB6uB,EAAQ,IAAI7uB,CAAG,GAEjBy1B,EAAmB5G,CAAO;AAAA,IAC5B;AAAA,IACA,CAACpC,GAAcgJ,CAAkB;AAAA,EAAA,GAI7BgC,IAAa,CAAC3L,MACd0J,IACKA,EAAO1J,CAAI,IAEbA,EAAK,OAGRkG,IAAgB2E,EAAgB;AAAA,IAAO,CAAC7K,MAC5CW,EAAa,IAAIX,EAAK,GAAG;AAAA,EAAA,EACzB;AAsBF,2BACGoI,IAAA,EAEE,UAAA;AAAA,IAAA2B,IACCA,EAAO;AAAA,MACL,WAAA7U;AAAA,MACA,eAAAgR;AAAA,MACA,YAAY3B,EAAW;AAAA,MACvB,cAAA5D;AAAA,MACA,aAAa8K;AAAA,MACb,OAAAhiB;AAAA,MACA,eAAAmgB;AAAA,MACA,UAAA7nB;AAAA,MACA,YAAAioB;AAAA,MACA,WAAAC;AAAA,IAAA,CACD,IAjCLjmB,gBAAAA,EAACqkB,IAAA,EACC,UAAA;AAAA,MAAArkB,gBAAAA,EAACskB,IAAA,EACE,UAAA;AAAA,QAAAsB,KAAiBiB,EAAgB,SAAS,KACzClsB,gBAAAA;AAAAA,UAAC+F;AAAA,UAAA;AAAA,YACC,SAAS6mB;AAAA,YACT,eAAeC;AAAA,YACf,UAAUC;AAAA,YACV,UAAA1pB;AAAA,UAAA;AAAA,QAAA;AAAA,QAGH0H;AAAA,MAAA,GACH;AAAA,wBACC8e,IAAA,EACE,UAAA;AAAA,QAAArC;AAAA,QAAc;AAAA,QAAE3B,EAAW;AAAA,MAAA,EAAA,CAC9B;AAAA,IAAA,GACF;AAAA,IAwBGgF,uBACEf,IAAA,EACC,UAAA7pB,gBAAAA;AAAAA,MAAC8N;AAAA,MAAA;AAAA,QACC,QAAQ9N,gBAAAA,EAACitB,IAAA,EAAc,OAAO,EAAC,OAAQvB,EAAc,WAAW,SAAS,OAAO,UAAA,EAAS,CAAE;AAAA,QAC3F,MAAK;AAAA,QACL,OAAOC;AAAA,QACP,UAAU,CAACl+B,MAAMm+B,EAAen+B,EAAE,OAAO,KAAK;AAAA,QAC9C,aAAao9B,MAAqBM,KAAA,gBAAAA,EAAQ,sBAAqB;AAAA,QAC/D,UAAA/nB;AAAA,QACA,cAAW;AAAA,QACX,WAAS;AAAA,MAAA;AAAA,IAAA,GAEb;AAAA,IAIFpD,gBAAAA,EAACktB,IAAA,EACE,UAAAX,EAAY,WAAW,IACtBvsB,gBAAAA,EAACuqB,IAAA,EACE,WAAAY,KAAA,gBAAAA,EAAQ,oBAAmB,OAAA,CAC9B,IAEAoB,EAAY,IAAI,CAAClL,MACfhc,gBAAAA;AAAAA,MAAC0kB;AAAA,MAAA;AAAA,QAEC,UAAU3mB,KAAYie,EAAK;AAAA,QAC3B,UAAUW,EAAa,IAAIX,EAAK,GAAG;AAAA,QACnC,SAAS,MAAM;AACb,UAAI,CAACje,KAAY,CAACie,EAAK,YACrB0L,EAAiB1L,EAAK,GAAG;AAAA,QAE7B;AAAA,QAEA,UAAA;AAAA,UAAAhc,gBAAAA,EAAC6kB,IAAA,EAEG,UAAA;AAAA,aAAA,CAACqB,KAAUhV,MAAc,WACzBvW,gBAAAA;AAAAA,cAAC+F;AAAA,cAAA;AAAA,gBACC,SAASic,EAAa,IAAIX,EAAK,GAAG;AAAA,gBAClC,UAAUje,KAAYie,EAAK;AAAA,gBAC1B,SAAS,CAAC5zB,MAAM;AACnB,kBAAAA,EAAE,gBAAA;AAAA,gBACJ;AAAA,cAAA;AAAA,YAAA;AAAA,YAGAuS,gBAAAA,EAACiqB,IAAA,EAAmB,UAAA+C,EAAW3L,CAAI,EAAA,CAAE;AAAA,UAAA,GACvC;AAAA,UACCkK,KAAUhV,MAAc,WAAWiV,KAClCxrB,gBAAAA;AAAAA,YAACmqB;AAAA,YAAA;AAAA,cACC,SAAS,CAAC18B,MAAM;AACd,gBAAAA,EAAE,gBAAA,GACE,CAAC2V,KAAY,CAACie,EAAK,YACrBmK,EAAanK,EAAK,GAAG;AAAA,cAEzB;AAAA,cACA,UAAUje,KAAYie,EAAK;AAAA,cAE3B,4BAAC8L,IAAA,CAAA,CAAc;AAAA,YAAA;AAAA,UAAA;AAAA,QACjB;AAAA,MAAA;AAAA,MAjCG9L,EAAK;AAAA,IAAA,CAoCb,GAEL;AAAA,IAGC8K,KAAuBF,EAAa,SAAS,uBAC3CzB,IAAA,EACC,UAAA;AAAA,MAAAnlB,gBAAAA,EAAColB,IAAA,EACE,UAAA;AAAA,QAAA,OAAOgB,KAAe,YAAYA,EAAW,iBAAiB,wBAC5D,QAAA,EACG,UAAA;AAAA,WAAAI,IAAc,KAAKE,IAAW;AAAA,UAAE;AAAA,UACjC,KAAK,IAAIF,IAAcE,GAAUE,EAAa,MAAM;AAAA,UAAE;AAAA,UAAIA,EAAa;AAAA,QAAA,GAC1E;AAAA,QAED,OAAOR,KAAe,YAAYA,EAAW,mBAC5CzrB,gBAAAA;AAAAA,UAACwkB;AAAA,UAAA;AAAA,YACC,OAAOuH,EAAS,SAAA;AAAA,YAChB,UAAU,CAACz8B,MAAUq9B,EAAqB,OAAOr9B,CAAK,CAAC;AAAA,YACvD,UAAUm8B,EAAW,mBAAmB,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAACh4B,OAAU;AAAA,cACnE,OAAOA,EAAK,SAAA;AAAA,cACZ,OAAO,GAAGA,CAAI;AAAA,YAAA,EACd;AAAA,YACF,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,UAAU,OAAA;AAAA,YAClD,UAAA2P;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,GAEJ;AAAA,wBACCsnB,IAAA,EACC,UAAA;AAAA,QAAA1qB,gBAAAA;AAAAA,UAAC2qB;AAAA,UAAA;AAAA,YACC,SAAS,MAAM8B,GAAiBZ,IAAc,CAAC;AAAA,YAC/C,UAAUA,MAAgB;AAAA,YAE1B,4BAACuB,IAAA,CAAA,CAAmB;AAAA,UAAA;AAAA,QAAA;AAAA,0BAErB,QAAA,EACE,UAAA;AAAA,UAAAvB;AAAA,UAAY;AAAA,UAAIW;AAAA,QAAA,GACnB;AAAA,QACAxsB,gBAAAA;AAAAA,UAAC2qB;AAAA,UAAA;AAAA,YACC,SAAS,MAAM8B,GAAiBZ,IAAc,CAAC;AAAA,YAC/C,UAAUA,MAAgBW;AAAA,YAE1B,4BAACxE,IAAA,CAAA,CAAoB;AAAA,UAAA;AAAA,QAAA;AAAA,MACvB,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAIDkD,KAAUlrB,gBAAAA,EAACsqB,IAAA,EAAgB,YAAO,EAAE,WAAA/T,EAAA,CAAW,EAAA,CAAE;AAAA,EAAA,GACpD;AAEJ,GAMa8W,KAAoC,CAAC;AAAA,EAChD,YAAAzH,IAAa,CAAA;AAAA,EACb,YAAY0H;AAAA,EACZ,mBAAAC,IAAoB,CAAA;AAAA,EACpB,UAAApnB;AAAA,EACA,QAAAqnB,IAAS,CAAC,OAAO,MAAM;AAAA,EACvB,YAAA5C,IAAa;AAAA,EACb,mBAAAC,IAAoB,CAAC,SAAS,QAAQ;AAAA,EACtC,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAA3nB,IAAW;AAAA,EACX,WAAA1H;AAAA,EACA,OAAA0K;AAAA,EACA,YAAAqnB;AAAA,EACA,eAAAxC,IAAgB;AAAA,EAChB,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAG,IAAS;AAAA,EACT,SAAAmC;AAAA,EACA,YAAAjC;AACF,MAAM;AAEJ,QAAM,CAACkC,GAAoBC,CAAqB,IAAInnB;AAAA,IAClD,IAAI,IAAI8mB,CAAiB;AAAA,EAAA,GAIrB3mB,IAAe0mB,MAAyB,QACxCO,IAAgB7oB;AAAA,IACpB,MACE4B,IACI,IAAI,IAAI0mB,CAAoB,IAC5BK;AAAA,IACN,CAAC/mB,GAAc0mB,GAAsBK,CAAkB;AAAA,EAAA,GAInD,CAACG,GAAkBC,CAAmB,IAAItnB,EAAsB,oBAAI,KAAK,GAEzE,CAACunB,GAAmBC,CAAoB,IAAIxnB,EAAsB,oBAAI,KAAK,GAG3EynB,IAAiBlpB;AAAA,IACrB,MAAM4gB,EAAW,OAAO,CAACvE,MAAS,CAACwM,EAAc,IAAIxM,EAAK,GAAG,CAAC;AAAA,IAC9D,CAACuE,GAAYiI,CAAa;AAAA,EAAA,GAItBM,KAAkBnpB;AAAA,IACtB,MAAM4gB,EAAW,OAAO,CAACvE,MAASwM,EAAc,IAAIxM,EAAK,GAAG,CAAC;AAAA,IAC7D,CAACuE,GAAYiI,CAAa;AAAA,EAAA,GAItBO,IAAc3Z,GAAY,MAAM;AACpC,UAAM4Z,IAAgB,IAAI,IAAIR,CAAa,GACrCS,IAAW,MAAM,KAAKR,CAAgB;AAE5C,IAAAQ,EAAS,QAAQ,CAAC/4B,MAAQ;AACxB,MAAA84B,EAAc,IAAI94B,CAAG;AAAA,IACvB,CAAC,GAEIqR,KACHgnB,EAAsBS,CAAa,GAGrCN,EAAoB,oBAAI,KAAK,GAC7B5nB,KAAA,QAAAA,EAAW,MAAM,KAAKkoB,CAAa,GAAG,SAASC;AAAA,EACjD,GAAG,CAACT,GAAeC,GAAkBlnB,GAAcT,CAAQ,CAAC,GAGtDooB,IAAa9Z,GAAY,MAAM;AACnC,UAAM4Z,IAAgB,IAAI,IAAIR,CAAa,GACrCS,IAAW,MAAM,KAAKN,CAAiB;AAE7C,IAAAM,EAAS,QAAQ,CAAC/4B,MAAQ;AACxB,MAAA84B,EAAc,OAAO94B,CAAG;AAAA,IAC1B,CAAC,GAEIqR,KACHgnB,EAAsBS,CAAa,GAGrCJ,EAAqB,oBAAI,KAAK,GAC9B9nB,KAAA,QAAAA,EAAW,MAAM,KAAKkoB,CAAa,GAAG,QAAQC;AAAA,EAChD,GAAG,CAACT,GAAeG,GAAmBpnB,GAAcT,CAAQ,CAAC,GAGvDqoB,KAAmB/Z,GAAY,MAAM;AACzC,UAAM4Z,IAAgB,IAAI,IAAIR,CAAa,GACrCY,IAAcP,EAAe,OAAO,CAAA7M,MAAQ,CAACA,EAAK,QAAQ,EAAE,IAAI,CAAAA,MAAQA,EAAK,GAAG;AAEtF,IAAAoN,EAAY,QAAQ,CAACl5B,MAAQ;AAC3B,MAAA84B,EAAc,IAAI94B,CAAG;AAAA,IACvB,CAAC,GAEIqR,KACHgnB,EAAsBS,CAAa,GAGrCN,EAAoB,oBAAI,KAAK,GAC7B5nB,KAAA,QAAAA,EAAW,MAAM,KAAKkoB,CAAa,GAAG,SAASI;AAAA,EACjD,GAAG,CAACZ,GAAeK,GAAgBtnB,GAAcT,CAAQ,CAAC,GAGpDuoB,IAAoBja,GAAY,MAAM;AAC1C,UAAM4Z,IAAgB,IAAI,IAAIR,CAAa,GACrCS,IAAW,MAAM,KAAKT,CAAa,EAAE,OAAO,CAAAt4B,MAAO;AACvD,YAAM8rB,IAAOuE,EAAW,KAAK,CAAAvE,MAAQA,EAAK,QAAQ9rB,CAAG;AACrD,aAAO8rB,KAAQ,CAACA,EAAK;AAAA,IACvB,CAAC;AAED,IAAAiN,EAAS,QAAQ,CAAC/4B,MAAQ;AACxB,MAAA84B,EAAc,OAAO94B,CAAG;AAAA,IAC1B,CAAC,GAEIqR,KACHgnB,EAAsBS,CAAa,GAGrCJ,EAAqB,oBAAI,KAAK,GAC9B9nB,KAAA,QAAAA,EAAW,MAAM,KAAKkoB,CAAa,GAAG,QAAQC;AAAA,EAChD,GAAG,CAACT,GAAejI,GAAYhf,GAAcT,CAAQ,CAAC,GAGhDwoB,IAAmBla;AAAA,IACvB,CAAClf,MAAgB;AACf,YAAM84B,IAAgB,IAAI,IAAIR,CAAa;AAC3C,MAAAQ,EAAc,OAAO94B,CAAG,GAEnBqR,KACHgnB,EAAsBS,CAAa,GAGrCloB,KAAA,QAAAA,EAAW,MAAM,KAAKkoB,CAAa,GAAG,QAAQ,CAAC94B,CAAG;AAAA,IACpD;AAAA,IACA,CAACs4B,GAAejnB,GAAcT,CAAQ;AAAA,EAAA,GAIlCyoB,IAAiBd,EAAiB,OAAO,KAAK,CAAC1qB,GAC/CyrB,IAAgBb,EAAkB,OAAO,KAAK,CAAC5qB,GAG/C0rB,IAAgB,MAAM;AAE1B,QAAIpB,KAAW,OAAOA,KAAY,YAAY,CAAC,MAAM,QAAQA,CAAO,GAAG;AACrE,YAAM,EAAE,MAAAqB,GAAM,OAAAC,EAAA,IAAUtB;AAExB,aAAInC,IAEEyD,IACE,OAAOA,KAAU,aACZhvB,gBAAAA,EAACtB,GAAM,UAAN,EAA4B,UAAAswB,EAAM,MAAM,KAAKlB,CAAgB,CAAC,EAAA,GAA3C,OAA6C,IAEnE9tB,gBAAAA,EAACtB,GAAM,UAAN,EAA4B,eAAT,OAAe,IAG1C2G,gBAAAA;AAAAA,QAACglB;AAAA,QAAA;AAAA,UACC,SAAS+D;AAAA,UACT,UAAU,CAACQ;AAAA,UAEX,UAAA;AAAA,YAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,YACpByF,KAAA,gBAAAA,EAAa;AAAA,UAAC;AAAA,QAAA;AAAA,MAAA,IAOnBpoB,gBAAAA,EAAA9L,IAAA,EACG,UAAA;AAAA,QAAAw1B,IACC,OAAOA,KAAS,aACd/uB,gBAAAA,EAACtB,GAAM,UAAN,EAA2B,YAAK,MAAM,KAAKovB,CAAgB,CAAC,KAAzC,MAA2C,IAE/D9tB,gBAAAA,EAACtB,GAAM,UAAN,EAA2B,UAAAqwB,KAAR,MAAa,IAGnC1pB,gBAAAA;AAAAA,UAACglB;AAAA,UAAA;AAAA,YACC,SAAS+D;AAAA,YACT,UAAU,CAACQ;AAAA,YAEX,UAAA;AAAA,cAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,cACpByF,KAAA,gBAAAA,EAAa;AAAA,YAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGlBuB,IACC,OAAOA,KAAU,+BACdtwB,GAAM,UAAN,EAA4B,UAAAswB,EAAM,MAAM,KAAKhB,CAAiB,CAAC,KAA5C,OAA8C,IAElEhuB,gBAAAA,EAACtB,GAAM,UAAN,EAA4B,UAAAswB,KAAT,OAAe,IAGrC3pB,gBAAAA;AAAAA,UAACglB;AAAA,UAAA;AAAA,YACC,SAASkE;AAAA,YACT,UAAU,CAACM;AAAA,YAEX,UAAA;AAAA,cAAA7uB,gBAAAA,EAACotB,IAAA,EAAmB;AAAA,cACnBK,KAAA,gBAAAA,EAAa;AAAA,YAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACjB,GAEJ;AAAA,IAEJ;AAGA,QAAIC,KAAW,MAAM,QAAQA,CAAO,GAAG;AACrC,UAAInC,GAAQ;AAEV,cAAM0D,IAASvB,EAAQ,CAAC;AACxB,eAAKuB,IAYD,OAAOA,KAAW,WAElBjvB,gBAAAA;AAAAA,UAACqqB;AAAA,UAAA;AAAA,YACC,SAAS+D;AAAA,YACT,UAAU,CAACQ;AAAA,YAEV,UAAAK;AAAA,UAAA;AAAA,QAAA,IAGIvwB,GAAM,eAAeuwB,CAAM,IAC7BjvB,gBAAAA,EAACtB,GAAM,UAAN,EAA+B,eAAZ,UAAmB,IACrC,OAAOuwB,KAAW,aACpBjvB,gBAAAA,EAACtB,GAAM,UAAN,EAAgC,UAAAuwB,EAAe,MAAM,KAAKnB,CAAgB,CAAC,EAAA,GAAxD,UAA0D,IAEhF9tB,gBAAAA,EAACtB,GAAM,UAAN,EAA+B,eAAZ,UAAmB,IAxB1C2G,gBAAAA;AAAAA,UAACglB;AAAA,UAAA;AAAA,YACC,SAAS+D;AAAA,YACT,UAAU,CAACQ;AAAA,YAEX,UAAA;AAAA,cAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,cACpByF,KAAA,gBAAAA,EAAa;AAAA,YAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAoBvB;AAGA,YAAMyB,IAAaxB,EAAQ,CAAC,GACtByB,IAAczB,EAAQ,CAAC;AAE7B,aACEroB,gBAAAA,EAAA9L,IAAA,EACG,UAAA;AAAA,QAAA21B,IACC,OAAOA,KAAe,WACpBlvB,gBAAAA;AAAAA,UAACqqB;AAAA,UAAA;AAAA,YACC,SAAS+D;AAAA,YACT,UAAU,CAACQ;AAAA,YAEV,UAAAM;AAAA,UAAA;AAAA,QAAA,IAEDxwB,GAAM,eAAewwB,CAAU,IACjClvB,gBAAAA,EAACtB,GAAM,UAAN,EAA2B,UAAAwwB,EAAA,GAAR,MAAmB,IACrC,OAAOA,KAAe,aACxBlvB,gBAAAA,EAACtB,GAAM,UAAN,EAA4B,UAAAwwB,EAAmB,MAAM,KAAKpB,CAAgB,CAAC,EAAA,GAAxD,MAA0D,sBAE7EpvB,GAAM,UAAN,EAA2B,UAAAwwB,EAAA,GAAR,MAAmB,IAGzC7pB,gBAAAA;AAAAA,UAACglB;AAAA,UAAA;AAAA,YACC,SAAS+D;AAAA,YACT,UAAU,CAACQ;AAAA,YAEX,UAAA;AAAA,cAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,cACpByF,KAAA,gBAAAA,EAAa;AAAA,YAAC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGlB0B,IACC,OAAOA,KAAgB,WACrBnvB,gBAAAA;AAAAA,UAACqqB;AAAA,UAAA;AAAA,YACC,SAASkE;AAAA,YACT,UAAU,CAACM;AAAA,YAEV,UAAAM;AAAA,UAAA;AAAA,QAAA,IAEDzwB,GAAM,eAAeywB,CAAW,IAClCnvB,gBAAAA,EAACtB,GAAM,UAAN,EAA4B,UAAAywB,EAAA,GAAT,OAAqB,IACvC,OAAOA,KAAgB,aACzBnvB,gBAAAA,EAACtB,GAAM,UAAN,EAA6B,UAAAywB,EAAoB,MAAM,KAAKnB,CAAiB,CAAC,EAAA,GAA3D,OAA6D,sBAEhFtvB,GAAM,UAAN,EAA4B,UAAAywB,EAAA,GAAT,OAAqB,IAG3C9pB,gBAAAA;AAAAA,UAACglB;AAAA,UAAA;AAAA,YACC,SAASkE;AAAA,YACT,UAAU,CAACM;AAAA,YAEX,UAAA;AAAA,cAAA7uB,gBAAAA,EAACotB,IAAA,EAAmB;AAAA,cACnBK,KAAA,gBAAAA,EAAa;AAAA,YAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MACjB,GAEJ;AAAA,IAEJ;AAGA,WAAIlC,IAEAlmB,gBAAAA;AAAAA,MAACglB;AAAA,MAAA;AAAA,QACC,SAAS+D;AAAA,QACT,UAAU,CAACQ;AAAA,QAEX,UAAA;AAAA,UAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,UACpByF,KAAA,gBAAAA,EAAa;AAAA,QAAC;AAAA,MAAA;AAAA,IAAA,IAMnBpoB,gBAAAA,EAAA9L,IAAA,EACE,UAAA;AAAA,MAAA8L,gBAAAA;AAAAA,QAACglB;AAAA,QAAA;AAAA,UACC,SAAS+D;AAAA,UACT,UAAU,CAACQ;AAAA,UAEX,UAAA;AAAA,YAAA5uB,gBAAAA,EAACgoB,IAAA,EAAoB;AAAA,YACpByF,KAAA,gBAAAA,EAAa;AAAA,UAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjBpoB,gBAAAA;AAAAA,QAACglB;AAAA,QAAA;AAAA,UACC,SAASkE;AAAA,UACT,UAAU,CAACM;AAAA,UAEX,UAAA;AAAA,YAAA7uB,gBAAAA,EAACotB,IAAA,EAAmB;AAAA,YACnBK,KAAA,gBAAAA,EAAa;AAAA,UAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB,GACF;AAAA,EAEJ;AAEA,SACEpoB,gBAAAA,EAACmkB,IAAA,EAAa,WAAA9tB,GAAsB,OAAA0K,GAElC,UAAA;AAAA,IAAApG,gBAAAA;AAAAA,MAAC8pB;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,YAAYoE;AAAA,QACZ,cAAcJ;AAAA,QACd,UAAA1qB;AAAA,QACA,YAAAwnB;AAAA,QACA,mBAAmBC,EAAkB,CAAC;AAAA,QACtC,cAAAC;AAAA,QACA,QAAAC;AAAA,QACA,oBAAoBgD;AAAA,QACpB,OAAOP,EAAO,CAAC;AAAA,QACf,eAAAvC;AAAA,QACA,QAAAC;AAAA,QACA,QAAAC;AAAA,QACA,QAAAC;AAAA,QACA,YAAYoD;AAAA,QACZ,WAAU;AAAA,QACV,QAAAjD;AAAA,QACA,YAAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IAIFzrB,gBAAAA,EAACoqB,IAAA,EACE,UAAA0E,EAAA,EAAc,CACjB;AAAA,IAGA9uB,gBAAAA;AAAAA,MAAC8pB;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,YAAYqE;AAAA,QACZ,cAAcH;AAAA,QACd,UAAA5qB;AAAA,QACA,YAAAwnB;AAAA,QACA,mBAAmBC,EAAkB,CAAC;AAAA,QACtC,cAAAC;AAAA,QACA,QAAAC;AAAA,QACA,oBAAoBkD;AAAA,QACpB,OAAOT,EAAO,CAAC;AAAA,QACf,eAAAvC;AAAA,QACA,QAAAC;AAAA,QACA,QAAAC;AAAA,QACA,QAAAC;AAAA,QACA,YAAYsD;AAAA,QACZ,WAAU;AAAA,QACV,QAAAnD;AAAA,QACA,cAAcA,IAASoD,IAAmB;AAAA,QAC1C,YAAAlD;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA4B,GAAS,cAAc;AC30BhB,MAAM+B,KAAiB,CAAC,QAAQ,aAAa,WAAW,OAAO,GAUzDC,KAAartB,EAAO;AAAA;AAAA,GAOpBstB,KAAiBttB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAWf,CAAC,EAAE,OAAA0pB,GAAO,cAAA6D,EAAA,MAC5BA,IAAe7D,EAAM,SAAS,OAAO,MAAM,UAAUA,EAAM,SAAS,OAAO,OAAO,OAAO;AAAA;AAAA,gBAE7E,CAAC,EAAE,OAAAA,GAAO,cAAA6D,EAAA,MACtBA,IAAe,YAAY7D,EAAM,SAAS,OAAO,WAAW,OAAO;AAAA,YAC3D,CAAC,EAAE,YAAAroB,EAAA,MAAkBA,IAAa,gBAAgB,SAAU;AAAA;AAAA;AAAA;AAAA,IAIpE,CAAC,EAAE,YAAAA,GAAY,OAAAqoB,EAAA,MACf,CAACroB,KACDhD;AAAA;AAAA,wBAEoBqrB,EAAM,SAAS,OAAO,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,wBAInCA,EAAM,SAAS,OAAO,MAAM,OAAO;AAAA;AAAA;AAAA,KAGtD;AAAA;AAAA,IAED,CAAC,EAAE,YAAAroB,GAAY,OAAAqoB,EAAA,MACfroB,KACAhD;AAAA;AAAA,oBAEgBqrB,EAAM,SAAS,OAAO,WAAW,SAAS;AAAA,KACzD;AAAA,GAMQ8D,KAAoBxtB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAW3BytB,KAAoBztB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMvB,CAAC,EAAE,OAAA0pB,EAAA,MAAYA,EAAM,OAAO,WAAW,UAAU;AAAA,GAMrDgE,KAAiB1tB,EAAO;AAAA;AAAA;AAAA,WAG1B,CAAC,EAAE,OAAA0pB,QAAYA,EAAM,SAAS,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA,GAQ/CiE,KAAsB3tB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAW7B4tB,KAAa5tB,EAAO;AAAA,WACtB,CAAC,EAAE,OAAA0pB,QAAYA,EAAM,SAAS,OAAO,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAehDmE,KAAW7tB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWlB8tB,KAAW9tB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAYlB+tB,KAAc/tB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAQlB,CAAC,EAAE,QAAA8Y,GAAQ,OAAA4Q,QACnB5Q,MAAW,YAAkB,YAC7BA,MAAW,UAAgB,YACxB4Q,EAAM,SAAS,OAAO,WAAW,OACzC;AAAA;AAAA,GAOUsE,KAAWhuB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOpB,CAAC,EAAE,OAAA0pB,QAAYA,EAAM,SAAS,OAAO,KAAK,OAAO;AAAA,GAM/CuE,KAAWjuB,EAAO;AAAA;AAAA,iBAId,CAAC,EAAE,OAAA0pB,EAAA,MAAYA,EAAM,OAAO,WAAW,UAAU;AAAA;AAAA;AAAA,WAGvD,CAAC,EAAE,QAAA5Q,GAAQ,OAAA4Q,QACd5Q,MAAW,UAAgB4Q,EAAM,SAAS,OAAO,MAAM,SACpDA,EAAM,SAAS,OAAO,KAAK,OACnC;AAAA;AAAA;AAAA;AAAA,GASUlP,KAAaxa,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAStB,CAAC,EAAE,QAAA8Y,GAAQ,OAAA4Q,QACd5Q,MAAW,YAAkB4Q,EAAM,SAAS,OAAO,MAAM,UACzD5Q,MAAW,UAAgB4Q,EAAM,SAAS,OAAO,MAAM,SACpDA,EAAM,SAAS,OAAO,KAAK,SACnC;AAAA,GAMUwE,KAAeluB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WASxB,CAAC,EAAE,OAAA0pB,QAAYA,EAAM,SAAS,OAAO,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAMjD,CAAC,EAAE,OAAAA,QAAYA,EAAM,SAAS,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,yBAIrC,CAAC,EAAE,OAAAA,QAAYA,EAAM,SAAS,OAAO,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,GAS9DyE,KAAkBnuB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWzBouB,KAAgBpuB,EAAO;AAAA;AAAA;AAAA,gBAGpB,CAAC,EAAE,OAAA0pB,QAAYA,EAAM,SAAS,OAAO,WAAW,SAAS;AAAA;AAAA;AAAA,GAQ5D2E,KAAcruB,EAAO;AAAA;AAAA,WAIvB,CAAC,EAAE,SAAAsa,EAAA,MAAcA,CAAO;AAAA,gBACnB,CAAC,EAAE,OAAAoP,QAAYA,EAAM,SAAS,OAAO,MAAM,OAAO;AAAA;AAAA;AAAA,GAQrDnP,KAAeva,EAAO;AAAA,iBAClB,CAAC,EAAE,OAAA0pB,EAAA,MAAYA,EAAM,OAAO,WAAW,UAAU;AAAA;AAAA;AAAA,WAGvD,CAAC,EAAE,OAAAA,QAAYA,EAAM,SAAS,OAAO,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,GAUjD4E,KAActuB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GC1QrBgb,KAAWoS,IA8DlBmB,KAAoB,MACxBlrB,gBAAAA,EAAC,OAAA,EAAI,OAAM,8BAA6B,OAAM,OAAM,QAAO,OAAM,SAAQ,eAAc,MAAK,QAC1F,UAAA;AAAA,EAAAA,gBAAAA,EAAC,KAAA,EAAE,UAAS,0BACV,UAAA;AAAA,IAAArF,gBAAAA,EAAC,QAAA,EAAK,GAAE,+PAA8P,MAAK,WAAS;AAAA,IACpRA,gBAAAA,EAAC,QAAA,EAAK,GAAE,6bAA4b,MAAK,WAAS;AAAA,IACldA,gBAAAA,EAAC,QAAA,EAAK,GAAE,2YAA0Y,MAAK,WAAS;AAAA,IAChaA,gBAAAA,EAAC,QAAA,EAAK,GAAE,mZAAkZ,MAAK,WAAS;AAAA,IACxaA,gBAAAA,EAAC,QAAA,EAAK,GAAE,iaAAga,MAAK,UAAA,CAAS;AAAA,EAAA,GACxb;AAAA,EACAA,gBAAAA,EAAC,QAAA,EACC,UAAAA,gBAAAA,EAAC,YAAA,EAAS,IAAG,oBACX,UAAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,OAAM,QAAO,OAAM,MAAK,SAAO,GAC7C,EAAA,CACF;AAAA,GACF,GAMIwwB,KAAc,MAClBnrB,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAA;AAAA,EAAArF,gBAAAA,EAAC,QAAA,EAAK,GAAE,8HAA6H,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ;AAAA,EAC1NA,gBAAAA,EAAC,UAAK,GAAE,UAAS,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,EAC/EA,gBAAAA,EAAC,UAAK,GAAE,YAAW,QAAO,gBAAe,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,GACnF,GAMIid,KAAc,MAClB5X,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAA;AAAA,EAAArF,gBAAAA,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAChDA,gBAAAA,EAAC,QAAA,EAAK,GAAE,uCAAsC,QAAO,SAAQ,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ;AAAA,GAC9H,GAMIkd,KAAY,MAChB7X,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAA;AAAA,EAAArF,gBAAAA,EAAC,UAAA,EAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,eAAA,CAAe;AAAA,EAChDA,gBAAAA,EAAC,UAAK,GAAE,wBAAuB,QAAO,SAAQ,aAAY,OAAM,eAAc,QAAA,CAAQ;AAAA,GACxF,GAMIywB,KAAa,MACjBzwB,gBAAAA,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAChE,UAAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,6MAA4M,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,QAAA,CAAQ,EAAA,CAC3S,GAMI0wB,KAAc,MAAM,UAAU,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,IAQ3EC,KAAS5xB;AAAA,EACpB,CACE;AAAA,IACE,QAAA6xB;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAA3tB,IAAW;AAAA,IACX,UAAU4tB;AAAA,IACV,iBAAAC,IAAkB,CAAA;AAAA,IAClB,UAAA9qB;AAAA,IACA,cAAA+qB;AAAA,IACA,eAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,WAAA91B;AAAA,IACA,MAAAwH;AAAA,EAAA,GAEFlE,MACG;AACH,UAAMsH,IAAW7C,EAAyB,IAAI,GACxCguB,IAAchuB,EAAuB,IAAI,GAGzC,CAACiuB,GAAkBC,CAAmB,IAAIlrB,EAAuBwqB,CAAe,GAChF,CAAC1B,GAAcqC,CAAe,IAAInrB,EAAS,EAAK,GAGhDG,IAAeoqB,MAAuB,QACtCa,IAAWjrB,IAAeoqB,IAAqBU,GAG/CI,IAAiB,CAACC,MAA8B;AACpD,MAAKnrB,KACH+qB,EAAoBI,CAAW,GAEjC5rB,KAAA,QAAAA,EAAW4rB;AAAA,IACb,GAGMC,IAAc,OAAOC,MAA2B;AACpD,UAAI,CAACA,KAASA,EAAM,WAAW,EAAG;AAElC,YAAMC,IAAa,MAAM,KAAKD,CAAK;AAGnC,UAAIlB,KAAYc,EAAS,SAASK,EAAW,SAASnB,GAAU;AAC9D,gBAAQ,KAAK,UAAUA,CAAQ,MAAM;AACrC;AAAA,MACF;AAGA,YAAMoB,IAAyB,CAAA;AAE/B,iBAAWC,KAAQF,GAAY;AAE7B,YAAIpB,KAAWsB,EAAK,OAAOtB,GAAS;AAClC,kBAAQ,KAAK,MAAMsB,EAAK,IAAI,SAAS;AACrC;AAAA,QACF;AAGA,YAAIlB;AACF,cAAI;AAEF,gBAAI,CADW,MAAMA,EAAakB,CAAI,EACzB;AAAA,UACf,SAASpkB,IAAO;AACd,oBAAQ,MAAM,uBAAuBA,EAAK;AAC1C;AAAA,UACF;AAGF,cAAMqkB,KAAyB;AAAA,UAC7B,KAAK3B,GAAA;AAAA,UACL,MAAM0B,EAAK;AAAA,UACX,MAAAA;AAAA,UACA,QAAQ;AAAA,UACR,SAAS;AAAA,QAAA;AAGX,QAAAD,EAAS,KAAKE,EAAU;AAAA,MAC1B;AAEA,UAAIF,EAAS,WAAW,EAAG;AAG3B,YAAMG,IAAkB,CAAC,GAAGT,GAAU,GAAGM,CAAQ;AACjD,MAAAL,EAAeQ,CAAe,GAG9BH,EAAS,QAAQ,CAACE,MAAe;AAC/B,QAAIlB,IACFA,EAAc;AAAA,UACZ,MAAMkB,EAAW;AAAA,UACjB,YAAY,CAAC/V,OAAY;AACvB,YAAAwV;AAAA,cACEQ,EAAgB;AAAA,gBAAI,CAAC17B,OACnBA,GAAE,QAAQy7B,EAAW,MAAM,EAAE,GAAGz7B,IAAG,SAAA0lB,OAAY1lB;AAAA,cAAA;AAAA,YACjD;AAAA,UAEJ;AAAA,UACA,WAAW,MAAM;AACf,YAAAk7B;AAAA,cACEQ,EAAgB;AAAA,gBAAI,CAAC17B,OACnBA,GAAE,QAAQy7B,EAAW,MAAM,EAAE,GAAGz7B,IAAG,QAAQ,WAAW,SAAS,QAAQA;AAAA,cAAA;AAAA,YACzE;AAAA,UAEJ;AAAA,UACA,SAAS,CAACoX,OAAU;AAClB,YAAA8jB;AAAA,cACEQ,EAAgB;AAAA,gBAAI,CAAC17B,OACnBA,GAAE,QAAQy7B,EAAW,MACjB,EAAE,GAAGz7B,IAAG,QAAQ,SAAS,OAAOoX,GAAM,YACtCpX;AAAA,cAAA;AAAA,YACN;AAAA,UAEJ;AAAA,QAAA,CACD,IAGD27B,EAAeF,EAAW,KAAKC,CAAe;AAAA,MAElD,CAAC;AAAA,IACH,GAGMC,IAAiB,CAACC,GAAaC,MAAkC;AACrE,UAAInW,IAAU;AACd,YAAMoW,IAAW,YAAY,MAAM;AACjC,QAAApW,KAAW,IACPA,KAAW,OACb,cAAcoW,CAAQ,GACtBZ;AAAA,UACEW,EAAgB;AAAA,YAAI,CAAC77B,MACnBA,EAAE,QAAQ47B,IAAM,EAAE,GAAG57B,GAAG,QAAQ,WAAW,SAAS,IAAA,IAAQA;AAAA,UAAA;AAAA,QAC9D,KAGFk7B;AAAA,UACEW,EAAgB;AAAA,YAAI,CAAC77B,MACnBA,EAAE,QAAQ47B,IAAM,EAAE,GAAG57B,GAAG,SAAA0lB,MAAY1lB;AAAA,UAAA;AAAA,QACtC;AAAA,MAGN,GAAG,GAAG;AAAA,IACR,GAGMihB,KAAoB,CAACpqB,MAAqC;AAC9D,MAAAukC,EAAYvkC,EAAE,OAAO,KAAK,GAEtB6Y,EAAS,YACXA,EAAS,QAAQ,QAAQ;AAAA,IAE7B,GAGMqsB,IAAkB,CAACllC,MAAiC;AACxD,MAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACG2V,KACHwuB,EAAgB,EAAI;AAAA,IAExB,GAGMgB,IAAkB,CAACnlC,MAAiC;AACxD,MAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFmkC,EAAgB,EAAK;AAAA,IACvB,GAGMiB,KAAiB,CAACplC,MAAiC;AACvD,MAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA;AAAA,IACJ,GAGMqlC,IAAa,CAACrlC,MAAiC;AAKnD,UAJAA,EAAE,eAAA,GACFA,EAAE,gBAAA,GACFmkC,EAAgB,EAAK,GAEjBxuB,EAAU;AAEd,YAAM6uB,IAAQxkC,EAAE,aAAa;AAC7B,MAAAukC,EAAYC,CAAK;AAAA,IACnB,GAGMnT,IAAc,MAAM;;AACxB,MAAK1b,MACH8B,IAAAoB,EAAS,YAAT,QAAApB,EAAkB;AAAA,IAEtB,GAGM6tB,IAAe,CAACP,MAAgB;AACpC,YAAMT,IAAcF,EAAS,OAAO,CAACj7B,MAAMA,EAAE,QAAQ47B,CAAG;AACxD,MAAAV,EAAeC,CAAW;AAAA,IAC5B,GAGM,EAAE,aAAApuB,MAAgBE;AAAA,MACtB;AAAA,QACE,SAASib;AAAA,QACT,YAAY1b;AAAA,MAAA;AAAA,MAEdquB;AAAA,IAAA,GAIIuB,IAAmB,CAAClY,MAAyB;AACjD,cAAQA,GAAA;AAAA,QACN,KAAK;AACH,mCAAQmC,IAAA,EAAY;AAAA,QACtB,KAAK;AACH,mCAAQC,IAAA,EAAU;AAAA,QACpB;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb;AAEA,WACE7X,gBAAAA,EAACgqB,IAAA,EAAW,KAAArwB,GAAU,WAAAtD,GACpB,UAAA;AAAA,MAAA2J,gBAAAA;AAAAA,QAACiqB;AAAA,QAAA;AAAA,UACE,GAAG3rB;AAAA,UACJ,KAAK8tB;AAAA,UACL,cAAAlC;AAAA,UACA,YAAYnsB;AAAA,UACZ,aAAauvB;AAAA,UACb,aAAaC;AAAA,UACb,YAAYC;AAAA,UACZ,QAAQC;AAAA,UACR,MAAK;AAAA,UACL,UAAU1vB,IAAW,KAAK;AAAA,UAC1B,cAAW;AAAA,UAEX,UAAA;AAAA,YAAApD,gBAAAA,EAACwvB,IAAA,EACE,UAAAtsB,KAAQlD,gBAAAA,EAACuwB,IAAA,CAAA,CAAkB,GAC9B;AAAA,8BAECd,IAAA,EACC,UAAA;AAAA,cAAAzvB,gBAAAA,EAAC0vB,IAAA,EACE,eACCrqB,gBAAAA,EAAA9L,IAAA,EAAE,UAAA;AAAA,gBAAA;AAAA,gBACSyG,gBAAAA,EAAC4vB,MAAW,UAAA,OAAA,CAAI;AAAA,cAAA,EAAA,CAC3B,EAAA,CAEJ;AAAA,cAECyB,KACCrxB,gBAAAA,EAAC2vB,IAAA,EAAqB,UAAA0B,EAAA,CAAc;AAAA,eAGpCC,KAAgBC,MAChBlsB,gBAAAA,EAACsqB,IAAA,EACE,UAAA;AAAA,gBAAA2B;AAAA,gBACAC,KAAwBC,KACvBnsB,gBAAAA,EAAA9L,IAAA,EACG,UAAA;AAAA,kBAAA;AAAA,kBACDyG,gBAAAA,EAAC4vB,IAAA,EAAW,SAAS,CAACniC,MAAM;AAC1B,oBAAAA,EAAE,gBAAA,GACF+jC,EAAA;AAAA,kBACF,GACG,UAAAD,EAAA,CACH;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA,GAEJ;AAAA,YAEAvxB,gBAAAA;AAAAA,cAACswB;AAAA,cAAA;AAAA,gBACC,KAAKhqB;AAAA,gBACL,MAAK;AAAA,gBACL,QAAAsqB;AAAA,gBACA,UAAAC;AAAA,gBACA,UAAUhZ;AAAA,gBACV,UAAAzU;AAAA,gBACA,eAAY;AAAA,cAAA;AAAA,YAAA;AAAA,UACd;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDyuB,EAAS,SAAS,KACjB7xB,gBAAAA,EAAC6vB,IAAA,EACE,UAAAgC,EAAS,IAAI,CAACO,MACb/sB,gBAAAA,EAACyqB,IAAA,EAAwB,QAAQsC,EAAK,QACpC,UAAA;AAAA,QAAA/sB,gBAAAA,EAAC0qB,IAAA,EAAY,QAAQqC,EAAK,QACxB,UAAA;AAAA,UAAApyB,gBAAAA,EAACgwB,IAAA,EACC,UAAAhwB,gBAAAA,EAACwwB,IAAA,CAAA,CAAY,GACf;AAAA,4BACCP,IAAA,EAAS,QAAQmC,EAAK,QAAS,YAAK,MAAK;AAAA,WACxCA,EAAK,WAAW,aAAaA,EAAK,WAAW,YAC7C/sB,gBAAAA,EAAA9L,IAAA,EACE,UAAA;AAAA,YAAAyG,gBAAAA,EAACwc,MAAW,QAAQ4V,EAAK,QACtB,UAAAY,EAAiBZ,EAAK,MAAM,GAC/B;AAAA,YACApyB,gBAAAA;AAAAA,cAACkwB;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM6C,EAAaX,EAAK,GAAG;AAAA,gBACpC,cAAY,QAAQA,EAAK,IAAI;AAAA,gBAE7B,4BAAC3B,IAAA,CAAA,CAAW;AAAA,cAAA;AAAA,YAAA;AAAA,UACd,EAAA,CACF;AAAA,QAAA,GAEJ;AAAA,QAEC2B,EAAK,WAAW,eACf/sB,gBAAAA,EAAC8qB,IAAA,EACC,UAAA;AAAA,UAAAnwB,gBAAAA,EAACowB,MACC,UAAApwB,gBAAAA,EAACqwB,IAAA,EAAY,SAAS+B,EAAK,WAAW,GAAG,EAAA,CAC3C;AAAA,4BACC7V,IAAA,EAAc,UAAA;AAAA,YAAA6V,EAAK,WAAW;AAAA,YAAE;AAAA,UAAA,EAAA,CAAC;AAAA,QAAA,EAAA,CACpC;AAAA,MAAA,KA3BWA,EAAK,GA6BpB,CACD,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAzB,GAAO,cAAc;ACxed,MAAMsC,KAAgBjxB,EAAO;AAAA;AAAA,YAKxB,CAAC,EAAE,SAAAK,EAAA,MACXA,MAAY,aAAa,qCAAqC,MAAM;AAAA,gBACxD,CAAC,EAAE,SAAAA,EAAA,MACfA,MAAY,aAAa,oCAAoC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnE,CAAC,EAAE,WAAA6wB,GAAW,SAAA7wB,EAAA,MACd6wB,KACA;AAAA;AAAA;AAAA,oBAGgB7wB,MAAY,aAAa,0CAA0C,MAAM;AAAA,sBACvEA,MAAY,aAAa,iCAAiC,aAAa;AAAA;AAAA,GAE1F;AAAA,GAGU8wB,KAAanxB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQpBoxB,KAAYpxB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUnBqxB,KAAYrxB,EAAO;AAAA;AAAA;AAAA;AAAA,GAMnBsxB,KAAWtxB,EAAO;AAAA,aAClB,CAAC,EAAE,SAAAuxB,QAAcA,KAAW,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA,GAOxDC,KAAYxxB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBnByxB,KAAazxB,EAAO;AAAA;AAAA;AAAA;AAAA,GCtCpB0xB,KAAOh1B,GAAM;AAAA,EACxB,CACE;AAAA,IACE,OAAAoM;AAAA,IACA,OAAA6oB;AAAA,IACA,OAAAC;AAAA,IACA,QAAA1I;AAAA,IACA,WAAAgI,IAAY;AAAA,IACZ,SAAA7wB,IAAU;AAAA,IACV,aAAAwxB;AAAA,IACA,UAAAziC;AAAA,IACA,WAAAsK;AAAA,IACA,GAAGma;AAAA,EAAA,GAEL7W,MAGEqG,gBAAAA;AAAAA,IAAC4tB;AAAA,IAAA;AAAA,MACC,KAAAj0B;AAAA,MACA,SAAAqD;AAAA,MACA,WAAA6wB;AAAA,MACA,WAAAx3B;AAAA,MACC,GAAGma;AAAA,MAEH,UAAA;AAAA,QAAA+d,KAAS5zB,gBAAAA,EAACwzB,MAAW,UAAAI,EAAA,CAAM;AAAA,SAC1B9oB,KAAS6oB,MACTtuB,gBAAAA,EAAC8tB,IAAA,EACE,UAAA;AAAA,UAAAroB,KAAS9K,gBAAAA,EAACozB,MAAW,UAAAtoB,EAAA,CAAM;AAAA,UAC3B6oB,KAAS3zB,gBAAAA,EAACqzB,IAAA,EAAW,UAAAM,EAAA,CAAM;AAAA,QAAA,GAC9B;AAAA,QAEF3zB,gBAAAA,EAACszB,IAAA,EAAS,SAASO,GAChB,UAAAziC,EAAA,CACH;AAAA,QACC85B,KAAUlrB,gBAAAA,EAACyzB,IAAA,EAAY,UAAAvI,EAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIvC;AAEAwI,GAAK,cAAc;ACzFZ,MAAMI,KAA4C,CAAC,EAAE,QAAAC,GAAQ,UAAAC,SAAgB;AAAA,EAClF,WAAW;AAAA,IACT,YAAY;AAAA,MACV,SAASA,EAAS,OAAO,WAAW;AAAA,IAAA;AAAA,IAEtC,QAAQ;AAAA,MACN,SAASA,EAAS,OAAO,OAAO;AAAA,MAChC,OAAOA,EAAS,OAAO,OAAO;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA;AAAA,MAEN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA;AAAA;AAAA,IAGV,QAAQD,EAAO,MAAM;AAAA;AAAA,IACrB,YAAY;AAAA,EAAA;AAAA,EAEd,SAAS;AAAA,IACP,IAAIA,EAAO,QAAQ;AAAA,IACnB,IAAIA,EAAO,QAAQ;AAAA;AAAA,IACnB,IAAIA,EAAO,QAAQ;AAAA,EAAA;AAAA,EAErB,QAAQ;AAAA,IACN,SAAS,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,IACvE,cAAc;AAAA;AAAA,IACd,OAAO;AAAA,MACL,OAAOC,EAAS,OAAO,KAAK;AAAA,MAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,YAAYA,EAAO,WAAW,WAAW;AAAA,IAAA;AAAA,IAE3C,OAAO;AAAA,MACL,OAAOC,EAAS,OAAO,KAAK;AAAA,MAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA,IAAA;AAAA,EACvC;AAAA,EAEF,OAAO;AAAA,IACL,QAAQ,GAAGA,EAAO,MAAM,EAAE,IAAIA,EAAO,MAAM,EAAE;AAAA,EAAA;AAAA,EAE/C,QAAQ;AAAA,IACN,SAAS,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,IAClD,YAAY;AAAA,IACZ,WAAW,aAAaC,EAAS,OAAO,OAAO,OAAO;AAAA,EAAA;AAE1D,IC1BMthB,KAASxV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAcF+2B,KAAmBjyB,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAiBxB0Q,EAAM;AAAA;AAAA,GAOfpG,KAAmB,CAACJ,MAA0B;AAClD,MAAI,CAACA,EAAW,QAAO;AAEvB,QAAMgoB,IAAoC;AAAA,IACxC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAKL,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAKb,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAKX,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,IAKR,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKhB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,IAKd,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKN,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZ,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,IAKf,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAKb,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAOlB,SAAOA,EAAUhoB,CAAS,KAAKgoB,EAAU;AAC3C,GAKa3nB,KAAevK,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB/B,CAAC,EAAE,WAAAkK,QAAgBI,GAAiBJ,CAAS,CAAC;AAAA,GChCrCioB,KAAUp1B;AAAA,EACrB,CACE;AAAA,IACE,UAAA3N;AAAA,IACA,SAAA0kB;AAAA,IACA,WAAA5J,IAAY;AAAA,IACZ,QAAArZ,IAAS;AAAA,IACT,OAAAuhC,IAAQ;AAAA,IACR,YAAAC,IAAa;AAAA,IACb,UAAAjxB,IAAW;AAAA,IACX,WAAAoO,IAAY;AAAA,IACZ,MAAM8iB;AAAA,IACN,aAAAC,IAAc;AAAA,IACd,cAAAhhB;AAAA,IACA,WAAA7X;AAAA,IACA,OAAA0K;AAAA,EAAA,GAEF7C,MACG;AAEH,QAAI,OAAO,WAAa,IAAa,QAAOnS;AAG5C,UAAM,CAACojC,GAAcC,CAAe,IAAIhuB,EAAS8tB,CAAW,GACtD3tB,IAAe0tB,MAAmB,QAClCjV,IAASzY,IAAe0tB,IAAiBE,GAGzCnU,IAAa5c,EAAoB,IAAI,GACrCixB,IAAajxB,EAAuB,IAAI,GACxCkxB,IAAelxB,EAA6C,IAAI,GAChEuO,IAAgBvO,EAA6C,IAAI,GAGjE,CAAC7S,GAAUqgB,CAAW,IAAIxK,EAAwC,EAAE,KAAK,GAAG,MAAM,GAAG,GAGrFwL,IAAcwC,GAAY,MAAM;AACpC,MAAIkgB,EAAa,YACf,aAAaA,EAAa,OAAO,GACjCA,EAAa,UAAU,OAErB3iB,EAAc,YAChB,aAAaA,EAAc,OAAO,GAClCA,EAAc,UAAU;AAAA,IAE5B,GAAG,CAAA,CAAE,GAGC4iB,IAAangB;AAAA,MACjB,CAACogB,MAAsB;AACrB,QAAIzxB,MACCwD,KACH6tB,EAAgBI,CAAQ,GAE1BthB,KAAA,QAAAA,EAAeshB;AAAA,MACjB;AAAA,MACA,CAACzxB,GAAUwD,GAAc2M,CAAY;AAAA,IAAA,GAIjCuhB,IAAargB,GAAY,MAAM;AACnC,MAAIrR,MACJ6O,EAAA,GAEImiB,IAAQ,IACVO,EAAa,UAAU,WAAW,MAAM;AACtC,QAAAC,EAAW,EAAI;AAAA,MACjB,GAAGR,CAAK,IAERQ,EAAW,EAAI;AAAA,IAEnB,GAAG,CAACxxB,GAAUgxB,GAAOniB,GAAa2iB,CAAU,CAAC,GAGvC7V,IAActK,GAAY,MAAM;AACpC,MAAAxC,EAAA,GAEIoiB,IAAa,IACfriB,EAAc,UAAU,WAAW,MAAM;AACvC,QAAA4iB,EAAW,EAAK;AAAA,MAClB,GAAGP,CAAU,IAEbO,EAAW,EAAK;AAAA,IAEpB,GAAG,CAACP,GAAYpiB,GAAa2iB,CAAU,CAAC,GAGlC,EAAE,YAAAG,EAAA,IAAeC,GAAS;AAAA,MAC9B,YAAY5xB;AAAA,MACZ,cAAc0xB;AAAA,MACd,YAAY/V;AAAA,IAAA,CACb,GAGK,EAAE,kBAAAkW,GAAA,IAAqBC,GAAe;AAAA,MAC1C,YAAY9xB;AAAA,MACZ,eAAe,MAAM0xB,EAAA;AAAA,MACrB,cAAc,MAAM/V,EAAA;AAAA,IAAY,CACjC,GAGK7N,IAAiBuD,GAAY,MAAM;AACvC,UAAI,CAAC4L,EAAW,WAAW,CAACqU,EAAW,QAAS;AAEhD,YAAMS,IAAc9U,EAAW,QAAQ,sBAAA,GACjC+U,IAAcV,EAAW,QAAQ,sBAAA,GACjCW,IAAU,OAAO,SACjBC,IAAU,OAAO;AAEvB,UAAIC,IAAM,GACNxG,IAAO;AAEX,cAAQ7iB,GAAA;AAAA,QACN,KAAK;AACH,UAAAqpB,IAAMJ,EAAY,MAAMG,IAAUF,EAAY,SAASviC,GACvDk8B,IAAOoG,EAAY,OAAOE,KAAWF,EAAY,QAAQC,EAAY,SAAS;AAC9E;AAAA,QACF,KAAK;AACH,UAAAG,IAAMJ,EAAY,SAASG,IAAUziC,GACrCk8B,IAAOoG,EAAY,OAAOE,KAAWF,EAAY,QAAQC,EAAY,SAAS;AAC9E;AAAA,QACF,KAAK;AACH,UAAAG,IAAMJ,EAAY,MAAMG,KAAWH,EAAY,SAASC,EAAY,UAAU,GAC9ErG,IAAOoG,EAAY,OAAOE,IAAUD,EAAY,QAAQviC;AACxD;AAAA,QACF,KAAK;AACH,UAAA0iC,IAAMJ,EAAY,MAAMG,KAAWH,EAAY,SAASC,EAAY,UAAU,GAC9ErG,IAAOoG,EAAY,QAAQE,IAAUxiC;AACrC;AAAA,MAAA;AAGJ,MAAAoe,EAAY,EAAE,KAAAskB,GAAK,MAAAxG,GAAM;AAAA,IAC3B,GAAG,CAAC7iB,GAAWrZ,CAAM,CAAC;AA0BtB,QAvBAgU,GAAU,MAAM;AACd,UAAI,CAACwY,EAAQ;AAGb,MAAAnO,EAAA;AAGA,YAAMskB,IAAe,MAAMtkB,EAAA;AAC3B,oBAAO,iBAAiB,UAAUskB,GAAc,EAAI,GACpD,OAAO,iBAAiB,UAAUA,CAAY,GAEvC,MAAM;AACX,eAAO,oBAAoB,UAAUA,GAAc,EAAI,GACvD,OAAO,oBAAoB,UAAUA,CAAY;AAAA,MACnD;AAAA,IACF,GAAG,CAACnW,GAAQnO,CAAc,CAAC,GAG3BrK,GAAU,MACD,MAAMoL,EAAA,GACZ,CAACA,CAAW,CAAC,GAGZ,CAACzH,GAAepZ,CAAQ;AAC1B,qBAAQ,KAAK,iDAAiD,GACvDA;AAIT,UAAMqkC,IAAe3xB,GAAWixB,GAAYE,IAAkB;AAAA,MAC5D,KAAK5U;AAAA,MACL,oBAAoBhB,IAAS,gBAAgB;AAAA,IAAA,CAC9C,GAGK0B,KACJ/gB,gBAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGy1B;AAAA,QACJ,OAAO,EAAE,SAAS,eAAA;AAAA,QAEjB,UAAArkC;AAAA,MAAA;AAAA,IAAA,GAKCskC,IAAiBrW,KAAU,CAACjc,KAAY0S,IAC5CxE;AAAA,MACEjM,gBAAAA;AAAAA,QAAC4uB;AAAA,QAAA;AAAA,UACC,KAAK,CAACljC,MAAS;AACb,YAAA2jC,EAAW,UAAU3jC,GACjB,OAAOwS,KAAiB,aAC1BA,EAAaxS,CAAI,IACRwS,MACTA,EAAa,UAAUxS;AAAA,UAE3B;AAAA,UACA,IAAG;AAAA,UACH,MAAK;AAAA,UACL,WAAAmb;AAAA,UACA,WAAAxQ;AAAA,UACA,OAAO;AAAA,YACL,GAAG0K;AAAA,YACH,UAAU;AAAA,YACV,KAAKxV,EAAS;AAAA,YACd,MAAMA,EAAS;AAAA,UAAA;AAAA,UAEjB,kBAAgBsb;AAAA,UAEf,UAAA;AAAA,YAAAsF,KAAaxR,gBAAAA,EAACuM,MAAa,WAAAL,EAAA,CAAsB;AAAA,YACjD4J;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,SAAS;AAAA,IAAA,IAET;AAEJ,WACEzQ,gBAAAA,EAAA9L,IAAA,EACG,UAAA;AAAA,MAAAwnB;AAAA,MACA2U;AAAA,IAAA,GACH;AAAA,EAEJ;AACF;AAEAvB,GAAQ,cAAc;AC9Uf,MAAMwB,KAAgD,CAAC,EAAE,QAAA5B,GAAQ,UAAAC,SAAgB;AAAA,EACtF,SAAS;AAAA,IACP,YAAY;AAAA,MACV,SAASA,EAAS,OAAO,MAAM;AAAA,MAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,MAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEhC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,WAAW;AAAA,IACT,YAAY;AAAA,MACV,SAASA,EAAS,OAAO,WAAW;AAAA,MACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,MAClC,QAAQA,EAAS,OAAO,WAAW;AAAA,IAAA;AAAA,IAErC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEjC,QAAQ;AAAA,MACN,SAASA,EAAS,OAAO,OAAO;AAAA,MAChC,OAAOA,EAAS,OAAO,MAAM;AAAA,MAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,MAAM;AAAA,IACJ,YAAY;AAAA,MACV,SAAS;AAAA,MACT,OAAOA,EAAS,OAAO,MAAM;AAAA,MAC7B,QAAQ;AAAA;AAAA,IAAA;AAAA,IAEV,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEjC,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,QAAQ;AAAA,IACN,YAAY;AAAA,MACV,SAASA,EAAS,OAAO,MAAM;AAAA,MAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,MAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEhC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEjC,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,UAAU;AAAA,IACR,YAAY;AAAA,MACV,SAASD,EAAO,UAAU;AAAA,MAC1B,cAAc;AAAA,MACd,YAAY;AAAA,IAAA;AAAA,IAEd,MAAM;AAAA,MACJ,SAASA,EAAO,OAAO,OAAO;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,UAAU;AAAA,IACR,YAAY;AAAA,MACV,SAASC,EAAS,OAAO,OAAO;AAAA,IAAA;AAAA,IAElC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEhC,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,cAAcA,EAAO,MAAM;AAAA;AAAA,EAC3B,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,EACzC,KAAKA,EAAO,QAAQ;AAAA;AAAA,EACpB,YAAY;AACd,IAEa6B,KAAwD,CAAC,EAAE,QAAA7B,GAAQ,UAAAC,SAAgB;AAAA,EAC9F,YAAY;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEhC,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,MAChC;AAAA,MAEF,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAASA,EAAS,OAAO,WAAW;AAAA,UACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,UAClC,QAAQA,EAAS,OAAO,WAAW;AAAA,QAAA;AAAA,QAErC,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,MAChC;AAAA,MAEF,QAAQ;AAAA,QACN,YAAY;AAAA,UACV,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEhC,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MACjC;AAAA,IACF;AAAA,IAEF,SAAS;AAAA,MACP,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQ;AAAA,QAAA;AAAA,QAEV,QAAQ;AAAA,UACN,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEhC,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MAChC;AAAA,MAEF,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOA,EAAS,OAAO,WAAW;AAAA,UAClC,QAAQA,EAAS,OAAO,WAAW;AAAA,QAAA;AAAA,QAErC,QAAQ;AAAA,UACN,SAASA,EAAS,OAAO,OAAO;AAAA,UAChC,OAAOA,EAAS,OAAO,OAAO;AAAA,UAC9B,QAAQA,EAAS,OAAO,OAAO;AAAA,QAAA;AAAA,QAEjC,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,KAAK;AAAA,UAC9B,OAAOA,EAAS,OAAO,KAAK;AAAA,UAC5B,QAAQA,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,MAC/B;AAAA,MAEF,QAAQ;AAAA,QACN,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQ;AAAA,QAAA;AAAA,QAEV,QAAQ;AAAA,UACN,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEhC,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MAChC;AAAA,IACF;AAAA,IAEF,OAAO;AAAA,MACL,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQ;AAAA,QAAA;AAAA,QAEV,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MAChC;AAAA,MAEF,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAO;AAAA,UACP,QAAQ;AAAA,QAAA;AAAA,QAEV,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,MAChC;AAAA,MAEF,QAAQ;AAAA,QACN,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQ;AAAA,QAAA;AAAA,QAEV,QAAQ;AAAA,UACN,SAAS;AAAA,QAAA;AAAA,QAEX,MAAM;AAAA,UACJ,SAASA,EAAS,OAAO,MAAM;AAAA,UAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,YAAYA,EAAS,OAAO,WAAW;AAAA,IACvC,QAAQA,EAAS,OAAO,OAAO;AAAA,IAC/B,MAAMA,EAAS,OAAO,KAAK;AAAA,IAC3B,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,cAAcD,EAAO,MAAM;AAAA,EAC3B,YAAY;AAAA,EACZ,WAAW;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,ICjSa8B,KAA0D,CAAC,EAAE,QAAA9B,GAAQ,UAAAC,SAAgB;AAAA,EAChG,SAAS;AAAA,IACP,YAAY;AAAA,MACV,SAASA,EAAS,OAAO,WAAW;AAAA,MACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,MAClC,QAAQA,EAAS,OAAO,WAAW;AAAA,IAAA;AAAA,IAErC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA,MACN,SAASA,EAAS,OAAO,OAAO;AAAA,IAAA;AAAA,IAElC,QAAQ;AAAA,MACN,SAASD,EAAO,QAAQ;AAAA,MACxB,OAAOA,EAAO,QAAQ;AAAA,IAAA;AAAA,EACxB;AAAA,EAEF,SAAS;AAAA,IACP,YAAY;AAAA,MACV,SAASC,EAAS,OAAO,MAAM;AAAA,MAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,MAC7B,QAAQA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEhC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEhC,QAAQ;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,SAASD,EAAO,QAAQ;AAAA,MACxB,OAAOA,EAAO,QAAQ;AAAA,IAAA;AAAA,EACxB;AAAA,EAEF,UAAU;AAAA,IACR,YAAY;AAAA,MACV,SAASC,EAAS,OAAO,OAAO;AAAA,IAAA;AAAA,IAElC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEhC,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,MAAM;AAAA,IAAA;AAAA,IAER,IAAI;AAAA,MACF,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,MAAM;AAAA,IACJ,MAAMD,EAAO,WAAW,SAAS;AAAA,EAAA;AAAA,EAEnC,aAAa;AAAA,IACX,UAAUA,EAAO,WAAW,SAAS;AAAA,IACrC,YAAY,GAAGA,EAAO,WAAW,WAAW,KAAK;AAAA,EAAA;AAErD,IC9Da+B,KAAoD,CAAC,EAAE,QAAA/B,GAAQ,UAAAC,SAAgB;AAAA,EAC1F,SAAS;AAAA,IACP,MAAM;AAAA;AAAA,IACN,cAAcD,EAAO,MAAM;AAAA;AAAA,IAC3B,aAAa;AAAA,IACb,YAAY;AAAA,MACV,SAASA,EAAO,OAAO,OAAO;AAAA;AAAA,MAC9B,SAASC,EAAS,OAAO,MAAM;AAAA;AAAA,MAC/B,UAAUD,EAAO,OAAO,QAAQ,GAAG;AAAA;AAAA,MACnC,iBAAiBA,EAAO,OAAO,KAAK,GAAG;AAAA;AAAA,IAAA;AAAA,IAEzC,aAAa;AAAA,MACX,SAASA,EAAO,OAAO,QAAQ,GAAG;AAAA;AAAA,MAClC,OAAOC,EAAS,OAAO,MAAM;AAAA;AAAA,MAC7B,SAASA,EAAS,OAAO,MAAM;AAAA;AAAA,MAC/B,UAAUD,EAAO,OAAO,QAAQ,GAAG;AAAA;AAAA,MACnC,iBAAiBA,EAAO,OAAO,KAAK,GAAG;AAAA;AAAA,IAAA;AAAA,IAEzC,MAAM;AAAA,MACJ,OAAOA,EAAO,OAAO,OAAO;AAAA;AAAA,MAC5B,MAAM;AAAA;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,WAAW;AAAA,EACX,KAAKA,EAAO,QAAQ;AAAA;AAAA,EACpB,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,YAAY;AAAA;AAAA,MACZ,OAAOA,EAAO,OAAO,KAAK,GAAG;AAAA;AAAA,MAC7B,UAAUA,EAAO,OAAO,KAAK,GAAG;AAAA;AAAA,MAChC,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,IAAA;AAAA,EAC3C;AAAA,EAEF,YAAY;AACd,ICnCagC,KAA8C,CAAC,EAAE,QAAAhC,SAAc;AAAA,EAC1E,SAAS;AAAA,IACP,MAAM;AAAA,IACN,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAYA,EAAO,OAAO,OAAO;AAAA,IACjC,aAAa;AAAA,MACX,SAASA,EAAO,OAAO,QAAQ,GAAG;AAAA,MAClC,OAAOA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC7B,SAASA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC/B,UAAUA,EAAO,OAAO,QAAQ,GAAG;AAAA,IAAA;AAAA,IAErC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAOA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC7B,UAAUA,EAAO,OAAO,KAAK,GAAG;AAAA,IAAA;AAAA,EAClC;AAAA,EAEF,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,UAAUA,EAAO,WAAW,SAAS;AAAA,MACrC,OAAOA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC7B,UAAUA,EAAO,OAAO,KAAK,GAAG;AAAA,MAChC,YAAYA,EAAO,WAAW,WAAW;AAAA,IAAA;AAAA,IAE3C,aAAa;AAAA,MACX,OAAOA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC7B,UAAUA,EAAO,OAAO,KAAK,GAAG;AAAA,MAChC,UAAUA,EAAO,WAAW,SAAS;AAAA,IAAA;AAAA,EACvC;AAAA,EAEF,UAAU;AAAA,IACR,SAAS;AAAA,EAAA;AAAA,EAEX,YAAY;AACd,ICrCaiC,KAAgD,CAAC,EAAE,QAAAjC,GAAQ,UAAAC,SAAgB;AAAA,EACtF,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,OAAO;AAAA;AAAA,MACP,QAAQ;AAAA;AAAA,MACR,WAAW;AAAA;AAAA,MACX,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAe;AAAA;AAAA,IAAA;AAAA,IAEjB,IAAI;AAAA,MACF,OAAO;AAAA;AAAA,MACP,QAAQ;AAAA;AAAA,MACR,WAAW;AAAA;AAAA,MACX,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAe;AAAA;AAAA,IAAA;AAAA,EACjB;AAAA,EAEF,YAAY;AAAA,IACV,WAAWA,EAAO,OAAO,QAAQ,GAAG;AAAA;AAAA,IACpC,SAASC,EAAS,OAAO,MAAM;AAAA;AAAA,IAC/B,UAAUD,EAAO,OAAO,QAAQ,GAAG;AAAA;AAAA,EAAA;AAAA,EAErC,OAAO;AAAA,IACL,YAAYA,EAAO,OAAO,OAAO;AAAA;AAAA,IACjC,QAAQ;AAAA;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,OAAOA,EAAO,OAAO,OAAO;AAAA;AAAA,IAC5B,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,IACrC,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,EAAA;AAAA,EAE3C,cAAcA,EAAO,MAAM;AAAA;AAAA,EAC3B,KAAKA,EAAO,QAAQ;AAAA;AAAA,EACpB,YAAY;AAAA;AAAA,EACZ,UAAU;AAAA,IACR,SAAS;AAAA;AAAA,EAAA;AAAA,EAEX,WAAW;AAAA,IACT,OAAO;AAAA;AAAA,IACP,QAAQ;AAAA;AAAA,EAAA;AAEZ,ICzCakC,KAA8C,CAAC,EAAE,QAAAlC,GAAQ,UAAAC,SAAgB;AAAA,EACpF,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ;AAAA;AAAA,MACR,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAU;AAAA;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,QAAQ;AAAA,IACN,SAASC,EAAS,OAAO,OAAO;AAAA,IAChC,OAAOA,EAAS,OAAO,OAAO;AAAA,IAC9B,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,UAAUA,EAAS,OAAO,OAAO;AAAA,EAAA;AAAA,EAEnC,YAAY;AAAA,IACV,SAASA,EAAS,OAAO,WAAW;AAAA,IACpC,UAAUA,EAAS,OAAO,WAAW;AAAA,EAAA;AAAA,EAEvC,MAAM;AAAA,IACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAC9B,aAAaA,EAAS,OAAO,KAAK;AAAA,IAClC,UAAUA,EAAS,OAAO,KAAK;AAAA,IAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,SAASA,EAAS,OAAO,KAAK;AAAA,EAAA;AAAA,EAEhC,cAAcD,EAAO,MAAM;AAAA;AAAA,EAC3B,KAAKA,EAAO,QAAQ;AAAA;AAAA,EACpB,YAAY;AAAA;AACd,IC1CamC,KAAgD,CAAC,EAAE,QAAAnC,GAAQ,UAAAC,SAAgB;AAAA,EACtF,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUD,EAAO,WAAW,SAAS;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA,MAC9B,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,QAAQ;AAAA,IACN,SAASC,EAAS,OAAO,OAAO;AAAA,IAChC,OAAOA,EAAS,OAAO,OAAO;AAAA,IAC9B,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,UAAUA,EAAS,OAAO,OAAO;AAAA,EAAA;AAAA,EAEnC,YAAY;AAAA,IACV,SAASA,EAAS,OAAO,WAAW;AAAA,IACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,IAClC,UAAUA,EAAS,OAAO,WAAW;AAAA,EAAA;AAAA,EAEvC,MAAM;AAAA,IACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAC9B,aAAaA,EAAS,OAAO,KAAK;AAAA,IAClC,UAAUA,EAAS,OAAO,KAAK;AAAA,IAC/B,OAAOA,EAAS,OAAO,MAAM;AAAA,EAAA;AAAA,EAE/B,cAAcD,EAAO,MAAM;AAAA,EAC3B,KAAKA,EAAO,QAAQ;AAAA,EACpB,YAAY;AAAA,EACZ,SAAS;AAAA,IACP,YAAYC,EAAS,OAAO,WAAW;AAAA,IACvC,QAAQ,aAAaA,EAAS,OAAO,OAAO,OAAO;AAAA,IACnD,cAAcD,EAAO,MAAM;AAAA,IAC3B,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAAA,EAEX,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,UAAUA,EAAO,WAAW,SAAS;AAAA,IACrC,cAAcA,EAAO,MAAM;AAAA,IAC3B,KAAK;AAAA,IACL,YAAY;AAAA,MACV,SAAS;AAAA,MACT,OAAOC,EAAS,OAAO,WAAW;AAAA,MAClC,UAAUA,EAAS,OAAO,MAAM;AAAA,MAChC,SAASA,EAAS,OAAO,WAAW;AAAA,IAAA;AAAA,IAEtC,MAAM;AAAA,MACJ,SAASA,EAAS,OAAO,KAAK;AAAA,MAC9B,OAAOA,EAAS,OAAO,KAAK;AAAA,MAC5B,UAAUA,EAAS,OAAO,MAAM;AAAA,MAChC,UAAUA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,EACjC;AAEJ,ICpEamC,KAA0D,CAAC,EAAE,QAAApC,GAAQ,UAAAC,SAAgB;AAAA,EAChG,UAAU;AAAA,IACR,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUD,EAAO,WAAW,SAAS;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA,IAAA;AAAA,IAEhC,IAAI;AAAA,MACF,QAAQ;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA,MACrC,eAAeA,EAAO,QAAQ;AAAA,IAAA;AAAA,EAChC;AAAA,EAEF,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAeA,EAAO,QAAQ;AAAA,IAC9B,UAAUA,EAAO,WAAW,SAAS;AAAA,IACrC,YAAYA,EAAO,WAAW,WAAW;AAAA,IACzC,YAAY;AAAA,IACZ,YAAYA,EAAO,WAAW;AAAA,EAAA;AAAA,EAEhC,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,IAEX,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,cAAc;AAAA,MACd,UAAU;AAAA,MACV,KAAK;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,cAAcA,EAAO,MAAM;AAAA,EAC3B,QAAQ;AAAA,IACN,SAASC,EAAS,OAAO,OAAO;AAAA,IAChC,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,UAAUA,EAAS,OAAO,OAAO;AAAA,EAAA;AAAA,EAEnC,YAAY;AAAA,IACV,SAASA,EAAS,OAAO,WAAW;AAAA,IACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,IAClC,UAAUA,EAAS,OAAO,WAAW;AAAA,EAAA;AAAA,EAEvC,MAAM;AAAA,IACJ,SAASA,EAAS,OAAO,KAAK;AAAA,IAC9B,aAAaA,EAAS,OAAO,KAAK;AAAA,IAClC,UAAUA,EAAS,OAAO,KAAK;AAAA,EAAA;AAAA,EAEjC,YAAY;AACd,IC7DaoC,KAAoD,CAAC,EAAE,QAAArC,GAAQ,UAAAC,SAAgB;AAAA,EAC1F,QAAQ;AAAA,IACN,SAASA,EAAS,OAAO,OAAO;AAAA,EAAA;AAAA,EAElC,YAAY;AAAA,IACV,SAASA,EAAS,OAAO,WAAW;AAAA,IACpC,OAAOA,EAAS,OAAO,WAAW;AAAA,EAAA;AAAA,EAEpC,MAAM;AAAA,IACJ,SAASA,EAAS,OAAO,KAAK;AAAA;AAAA,IAC9B,OAAOA,EAAS,OAAO,KAAK;AAAA;AAAA,EAAA;AAAA,EAE9B,SAASA,EAAS,OAAO,OAAO;AAAA,EAChC,OAAO;AAAA,IACL,SAASA,EAAS,OAAO,KAAK;AAAA,EAAA;AAAA,EAEhC,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAAA,EAEX,cAAcD,EAAO,MAAM;AAAA,EAC3B,KAAKA,EAAO,QAAQ;AAAA,EACpB,YAAY;AAAA,EACZ,WAAW;AACb,ICxBasC,KAA0C,CAAC,EAAE,QAAAtC,GAAQ,UAAAC,GAAU,MAAAsC,QAAW;AACrF,QAAMC,IAASD,MAAS;AAExB,SAAO;AAAA,IACL,QAAQ;AAAA;AAAA,MAEN,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAASC,IAAS,8BAA8BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,UACzE,OAAOwC,IAAS,6BAA6BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,UACtE,QAAQwC,IAAS,8BAA8BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,UACxE,SAASC,EAAS,OAAO,MAAM;AAAA,UAC/B,cAAcA,EAAS,OAAO,MAAM;AAAA,UACpC,eAAeA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEvC,MAAM;AAAA,UACJ,SAASuC,IAASxC,EAAO,OAAO,KAAK,GAAG,IAAI;AAAA,UAC5C,SAASA,EAAO,OAAO,OAAO;AAAA,QAAA;AAAA,QAEhC,QAAQ;AAAA,UACN,SAASwC,IAAS,8BAA8BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,UACzE,OAAOwC,IAAS,8BAA8BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,UACvE,QAAQwC,IAAS,8BAA8BxC,EAAO,OAAO,KAAK,GAAG;AAAA,UACrE,SAASC,EAAS,OAAO,MAAM;AAAA,UAC/B,cAAcA,EAAS,OAAO,MAAM;AAAA,UACpC,eAAeA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MACvC;AAAA;AAAA,MAGF,KAAK;AAAA,QACH,YAAY;AAAA,UACV,SAASuC,IAAS,4BAA4B;AAAA,UAC9C,OAAOA,IAAS,4BAA4B;AAAA,UAC5C,QAAQA,IAAS,2BAA2B;AAAA,QAAA;AAAA,QAE9C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,IAAI,GAAG,IAAIA,EAAO,OAAO,IAAI,GAAG;AAAA,QAAA;AAAA,QAElE,QAAQ;AAAA,UACN,SAASwC,IAAS,2BAA2B;AAAA,QAAA;AAAA,MAC/C;AAAA;AAAA,MAGF,QAAQ;AAAA,QACN,YAAY;AAAA,UACV,SAASA,IAAS,4BAA4B;AAAA,UAC9C,OAAOA,IAAS,4BAA4B;AAAA,UAC5C,QAAQA,IAAS,2BAA2B;AAAA,QAAA;AAAA,QAE9C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,OAAO,GAAG,IAAIA,EAAO,OAAO,OAAO,GAAG;AAAA,QAAA;AAAA,QAExE,QAAQ;AAAA,UACN,SAASwC,IAAS,2BAA2B;AAAA,QAAA;AAAA,MAC/C;AAAA;AAAA,MAGF,QAAQ;AAAA,QACN,YAAY;AAAA,UACV,SAASA,IAAS,4BAA4B;AAAA,UAC9C,OAAOA,IAAS,4BAA4B;AAAA,UAC5C,QAAQA,IAAS,2BAA2B;AAAA,QAAA;AAAA,QAE9C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,OAAO,GAAG,IAAIA,EAAO,OAAO,OAAO,GAAG;AAAA,QAAA;AAAA,QAExE,QAAQ;AAAA,UACN,SAASwC,IAAS,2BAA2B;AAAA,QAAA;AAAA,MAC/C;AAAA;AAAA,MAGF,OAAO;AAAA,QACL,YAAY;AAAA,UACV,SAASA,IAAS,4BAA4B;AAAA,UAC9C,OAAOA,IAAS,4BAA4B;AAAA,UAC5C,QAAQA,IAAS,2BAA2B;AAAA,QAAA;AAAA,QAE9C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,MAAM,GAAG,IAAIA,EAAO,OAAO,MAAM,GAAG;AAAA,QAAA;AAAA,QAEtE,QAAQ;AAAA,UACN,SAASwC,IAAS,2BAA2B;AAAA,QAAA;AAAA,MAC/C;AAAA;AAAA,MAGF,UAAU;AAAA,QACR,YAAY;AAAA,UACV,SAASA,IAAS,4BAA4B;AAAA,UAC9C,OAAOA,IAAS,4BAA4B;AAAA,UAC5C,QAAQA,IAAS,2BAA2B;AAAA,QAAA;AAAA,QAE9C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,SAAS,GAAG,IAAIA,EAAO,OAAO,SAAS,GAAG;AAAA,QAAA;AAAA,QAE5E,QAAQ;AAAA,UACN,SAASwC,IAAS,2BAA2B;AAAA,QAAA;AAAA,MAC/C;AAAA;AAAA,MAGF,OAAO;AAAA,QACL,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,MAAM,GAAG,IAAIA,EAAO,OAAO,MAAM,GAAG;AAAA,QAAA;AAAA,QAEtE,QAAQ;AAAA,UACN,SAASwC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA;AAAA,MAGF,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,QAAQ,GAAG,IAAIA,EAAO,OAAO,QAAQ,GAAG;AAAA,QAAA;AAAA,QAE1E,QAAQ;AAAA,UACN,SAASwC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA;AAAA,MAGF,MAAM;AAAA,QACJ,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,KAAK,GAAG,IAAIA,EAAO,OAAO,KAAK,GAAG;AAAA,QAAA;AAAA,QAEpE,QAAQ;AAAA,UACN,SAASwC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA;AAAA,MAGF,MAAM;AAAA,QACJ,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,KAAK,GAAG,IAAIA,EAAO,OAAO,KAAK,GAAG;AAAA,QAAA;AAAA,QAEpE,QAAQ;AAAA,UACN,SAASwC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA;AAAA,MAGF,OAAO;AAAA,QACL,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASA,IAASxC,EAAO,OAAO,MAAM,GAAG,IAAIA,EAAO,OAAO,MAAM,GAAG;AAAA,QAAA;AAAA,QAEtE,QAAQ;AAAA,UACN,SAASwC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA;AAAA,MAGF,MAAM;AAAA,QACJ,YAAY;AAAA,UACV,SAASA,IAAS,6BAA6B;AAAA,UAC/C,OAAOA,IAAS,6BAA6B;AAAA,UAC7C,QAAQA,IAAS,4BAA4B;AAAA,QAAA;AAAA,QAE/C,MAAM;AAAA,UACJ,SAASvC,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,QAEjC,QAAQ;AAAA,UACN,SAASuC,IAAS,4BAA4B;AAAA,QAAA;AAAA,MAChD;AAAA,IACF;AAAA,IAEF,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,QAAQ;AAAA;AAAA,QACR,UAAU;AAAA;AAAA,QACV,YAAY;AAAA;AAAA,QACZ,eAAexC,EAAO,QAAQ;AAAA;AAAA,QAC9B,KAAKA,EAAO,QAAQ;AAAA;AAAA,QACpB,UAAU;AAAA;AAAA,QACV,eAAe;AAAA;AAAA,MAAA;AAAA,MAEjB,IAAI;AAAA,QACF,QAAQ;AAAA;AAAA,QACR,UAAU;AAAA;AAAA,QACV,YAAY;AAAA;AAAA,QACZ,eAAeA,EAAO,QAAQ;AAAA;AAAA,QAC9B,KAAKA,EAAO,QAAQ;AAAA;AAAA,QACpB,UAAU;AAAA;AAAA,QACV,eAAe;AAAA;AAAA,MAAA;AAAA,MAEjB,IAAI;AAAA,QACF,QAAQ;AAAA,QACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,QACrC,YAAY;AAAA,QACZ,eAAeA,EAAO,QAAQ;AAAA;AAAA,QAC9B,KAAKA,EAAO,QAAQ;AAAA;AAAA,QACpB,UAAU;AAAA,QACV,eAAe;AAAA,MAAA;AAAA,IACjB;AAAA,IAEF,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,IACzC,cAAcA,EAAO,MAAM;AAAA;AAAA,IAC3B,YAAY;AAAA,IACZ,UAAU;AAAA,MACR,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GC3NayC,KAAoD,CAAC,EAAE,QAAAzC,GAAQ,MAAAuC,QAAW;AACrF,QAAMC,IAASD,MAAS;AACxB,SAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAMC,IAAS,8BAA8B;AAAA,MAC7C,WAAWA,IAAS,8BAA8B;AAAA,IAAA;AAAA,IAEpD,WAAW;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA;AAAA,IAEV,QAAQ;AAAA,MACN,IAAIxC,EAAO,MAAM;AAAA,MACjB,IAAIA,EAAO,MAAM;AAAA,MACjB,IAAIA,EAAO,MAAM;AAAA,MACjB,MAAMA,EAAO,MAAM;AAAA,MACnB,QAAQA,EAAO,MAAM;AAAA,IAAA;AAAA,IAEvB,OAAO;AAAA,MACL,QAAQ;AAAA,IAAA;AAAA,IAEV,MAAM;AAAA,MACJ,YAAY;AAAA,MACZ,KAAKA,EAAO,QAAQ;AAAA,MACpB,eAAe;AAAA,IAAA;AAAA,IAEjB,QAAQ;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GC9Ba0C,KAAkD,CAAC,EAAE,QAAA1C,GAAQ,UAAAC,GAAU,MAAAsC,QAAW;AAC7F,QAAMC,IAASD,MAAS;AACxB,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,UAAU;AAAA,QACR,IAAIvC,EAAO,WAAW,SAAS;AAAA,QAC/B,IAAIA,EAAO,WAAW,SAAS;AAAA,MAAA;AAAA,MAEjC,UAAU;AAAA,QACR,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,KAAK;AAAA,MACH,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,YAAYwC,IAAS,6BAA6B;AAAA,IAAA;AAAA,IAEpD,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,SAASvC,EAAS,OAAO,OAAO;AAAA,QAChC,QAAQA,EAAS,OAAO,MAAM;AAAA,MAAA;AAAA,MAEhC,MAAM;AAAA,IAAA;AAAA,IAER,MAAM;AAAA,MACJ,OAAO;AAAA,QACL,OAAO;AAAA,UACL,SAASA,EAAS,OAAO,KAAK;AAAA,UAC9B,QAAQA,EAAS,OAAO,MAAM;AAAA,UAC9B,OAAOA,EAAS,OAAO,MAAM;AAAA,UAC7B,SAASA,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,QAEhC,YAAYD,EAAO,WAAW,WAAW;AAAA,QACzC,UAAUA,EAAO,WAAW,SAAS;AAAA,MAAA;AAAA,MAEvC,aAAa;AAAA,QACX,OAAOC,EAAS,OAAO,KAAK;AAAA,QAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA,MAAA;AAAA,IACvC;AAAA,IAEF,OAAO;AAAA,MACL,SAAS;AAAA,QACP,OAAOC,EAAS,OAAO,MAAM;AAAA,QAC7B,IAAIA,EAAS,OAAO,MAAM;AAAA,MAAA;AAAA,MAE5B,MAAM;AAAA,QACJ,OAAOA,EAAS,OAAO,KAAK;AAAA,QAC5B,IAAIuC,IAAS,6BAA6BxC,EAAO,OAAO,QAAQ,GAAG;AAAA,MAAA;AAAA,MAErE,QAAQ;AAAA,QACN,OAAOC,EAAS,OAAO,MAAM;AAAA,QAC7B,IAAIuC,IAAS,6BAA6BvC,EAAS,OAAO,MAAM;AAAA,MAAA;AAAA,MAElE,OAAO;AAAA,QACL,OAAOA,EAAS,OAAO,MAAM;AAAA,QAC7B,IAAIuC,IAAS,4BAA4BvC,EAAS,OAAO,MAAM;AAAA,MAAA;AAAA,IACjE;AAAA,IAEF,KAAKD,EAAO,QAAQ;AAAA,EAAA;AAExB,GCnEa2C,KAA4C,CAAC,EAAE,QAAA3C,GAAQ,UAAAC,GAAU,MAAAsC,QAAW;AACvF,QAAMC,IAASD,MAAS;AACxB,SAAO;AAAA,IACL,WAAW;AAAA,MACT,OAAO;AAAA,QACL,UAAU;AAAA;AAAA,QACV,WAAW;AAAA;AAAA,MAAA;AAAA,MAEb,YAAYC,IAASvC,EAAS,OAAO,WAAW,UAAUD,EAAO,OAAO,OAAO;AAAA,MAC/E,QAAQ,aAAaC,EAAS,OAAO,OAAO,OAAO;AAAA,MACnD,SAASD,EAAO,QAAQ;AAAA;AAAA,IAAA;AAAA,IAE1B,MAAM;AAAA,MACJ,QAAQ;AAAA;AAAA,MACR,eAAeA,EAAO,QAAQ;AAAA;AAAA,MAC9B,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,MACzC,UAAU;AAAA;AAAA,MACV,KAAKA,EAAO,QAAQ;AAAA;AAAA,MACpB,cAAcA,EAAO,MAAM;AAAA;AAAA,MAC3B,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAOwC,IAASvC,EAAS,OAAO,WAAW,gBAAgBA,EAAS,OAAO,WAAW;AAAA;AAAA,QACtF,QAAQuC,IAAS,iFACA;AAAA;AAAA,MAAA;AAAA,MAEnB,MAAM;AAAA,QACJ,SAASvC,EAAS,OAAO,KAAK;AAAA,QAC9B,OAAOA,EAAS,OAAO,KAAK;AAAA,QAC5B,QAAQA,EAAS,OAAO,KAAK;AAAA,MAAA;AAAA,MAE/B,YAAY;AAAA,IAAA;AAAA,IAEd,SAAS;AAAA,MACP,aAAa;AAAA;AAAA,MACb,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAOuC,IAASvC,EAAS,OAAO,WAAW,gBAAgBA,EAAS,OAAO,WAAW;AAAA,QACtF,QAAQuC,IAAS,iFACA;AAAA,MAAA;AAAA,IACnB;AAAA,IAEF,OAAO;AAAA,MACL,WAAWxC,EAAO,QAAQ;AAAA;AAAA,MAC1B,cAAcA,EAAO,QAAQ;AAAA;AAAA,MAC7B,KAAKA,EAAO,QAAQ;AAAA;AAAA,IAAA;AAAA,IAEtB,YAAY;AAAA,MACV,QAAQ;AAAA;AAAA,MACR,UAAUA,EAAO,WAAW,SAAS;AAAA;AAAA,MACrC,YAAYA,EAAO,WAAW,WAAW;AAAA;AAAA,MACzC,OAAOC,EAAS,OAAO,KAAK;AAAA;AAAA,MAC5B,eAAe;AAAA,MACf,cAAcD,EAAO,QAAQ;AAAA;AAAA,IAAA;AAAA,IAE/B,WAAW;AAAA,MACT,OAAO;AAAA;AAAA,MACP,YAAYwC,IAAS,6BAA6B;AAAA;AAAA,MAClD,YAAY;AAAA;AAAA,IAAA;AAAA,IAEd,SAAS;AAAA,MACP,YAAYA,IAASvC,EAAS,OAAO,WAAW,UAAUD,EAAO,OAAO,OAAO;AAAA,MAC/E,QAAQ,aAAaC,EAAS,OAAO,OAAO,OAAO;AAAA,MACnD,cAAcD,EAAO,MAAM;AAAA;AAAA,MAC3B,WAAWwC,IAAS,kCAAkC;AAAA;AAAA,MACtD,SAASxC,EAAO,QAAQ;AAAA;AAAA,MACxB,MAAM;AAAA,QACJ,YAAY;AAAA,UACV,SAAS;AAAA,UACT,OAAOwC,IAASvC,EAAS,OAAO,WAAW,gBAAgBA,EAAS,OAAO,WAAW;AAAA,UACtF,QAAQuC,IAAS,iFACA;AAAA,QAAA;AAAA,QAEnB,MAAM;AAAA,UACJ,SAASvC,EAAS,OAAO,KAAK;AAAA,UAC9B,OAAOA,EAAS,OAAO,KAAK;AAAA,UAC5B,QAAQA,EAAS,OAAO,MAAM;AAAA,QAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEJ,GCjFa2C,KAA4C,CAAC,EAAE,UAAA3C,SACnD;AAAA,EACL,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM;AAAA,QACJ,SAASA,EAAS,OAAO,MAAM;AAAA;AAAA,QAC/B,OAAO;AAAA;AAAA,QACP,QAAQ;AAAA;AAAA,QACR,UAAUA,EAAS,OAAO,KAAK;AAAA;AAAA,MAAA;AAAA,MAEjC,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,SAAS;AAAA,MACP,MAAM;AAAA,QACJ,SAASA,EAAS,OAAO,KAAK;AAAA;AAAA,QAC9B,OAAOA,EAAS,OAAO,MAAM;AAAA;AAAA,QAC7B,QAAQ;AAAA;AAAA,QACR,UAAUA,EAAS,OAAO,KAAK;AAAA,MAAA;AAAA,MAEjC,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEF,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,UAAU;AAAA,IAAA;AAAA,IAEZ,IAAI;AAAA,MACF,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,IACT,OAAOA,EAAS,OAAO,MAAM;AAAA,IAC7B,QAAQ;AAAA,EAAA;AACV,IC3CS4C,KAAoD,CAAC,EAAE,QAAA7C,GAAQ,UAAAC,SAAgB;AAAA;AAAA,EAE1F,WAAW;AAAA,IACT,KAAKD,EAAO,QAAQ;AAAA,EAAA;AAAA;AAAA,EAGtB,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAYC,EAAS,OAAO,WAAW;AAAA,IACvC,QAAQ,aAAaA,EAAS,OAAO,OAAO,OAAO;AAAA,IACnD,cAAcD,EAAO,MAAM;AAAA,EAAA;AAAA;AAAA,EAG7B,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAUA,EAAO,WAAW,SAAS;AAAA,IACrC,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,YAAYA,EAAS,OAAO,WAAW;AAAA,EAAA;AAAA;AAAA,EAGzC,MAAM;AAAA,IACJ,QAAQ;AAAA,IACR,KAAKD,EAAO,QAAQ;AAAA,IACpB,SAAQ;AAAA,EAAA;AAAA;AAAA,EAGV,MAAM;AAAA,IACJ,QAAQA,EAAO,QAAQ;AAAA,IACvB,UAASA,EAAO,WAAW,SAAS;AAAA,IACpC,cAAcA,EAAO,MAAM;AAAA,IAC3B,KAAKA,EAAO,QAAQ;AAAA,IACpB,SAAS,GAAGA,EAAO,QAAQ,EAAE;AAAA,IAC7B,MAAM;AAAA,MACJ,SAASC,EAAS,OAAO,KAAK;AAAA,MAC9B,UAAUA,EAAS,OAAO,KAAK;AAAA,MAC/B,UAAUA,EAAS,OAAO,KAAK;AAAA,IAAA;AAAA,IAEjC,cAAcD,EAAO,QAAQ;AAAA,EAAA;AAAA;AAAA,EAG/B,YAAY;AAAA,IACV,KAAKA,EAAO,QAAQ;AAAA,IACpB,cAAcA,EAAO,MAAM;AAAA,IAC3B,aAAa;AAAA,MACX,SAASC,EAAS,OAAO,OAAO;AAAA,MAChC,UAAUA,EAAS,OAAO,OAAO;AAAA,MACjC,QAAQA,EAAS,OAAO,MAAM;AAAA,IAAA;AAAA,IAEhC,iBAAiB;AAAA,MACf,SAASA,EAAS,OAAO,WAAW;AAAA,MACpC,UAAUD,EAAO,OAAO,KAAK,EAAE;AAAA,MAC/B,QAAQC,EAAS,OAAO,WAAW;AAAA,IAAA;AAAA,IAErC,OAAOD,EAAO,QAAQ;AAAA,IACtB,QAAQA,EAAO,QAAQ;AAAA,IACvB,UAAUA,EAAO,QAAQ;AAAA,IACzB,WAAW;AAAA,MACT,SAASA,EAAO,OAAO,KAAK,GAAG;AAAA,MAC/B,UAAUC,EAAS,OAAO,KAAK;AAAA,MAC/B,QAAQD,EAAO,OAAO,KAAK,GAAG;AAAA,IAAA;AAAA,EAChC;AAAA;AAAA,EAGF,QAAQ;AAAA,IACN,QAAQA,EAAO,QAAQ;AAAA,IACvB,eAAeA,EAAO,QAAQ;AAAA,IAC9B,UAAUA,EAAO,WAAW,SAAS;AAAA,IACrC,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,WAAW,aAAaA,EAAS,OAAO,OAAO,OAAO;AAAA,IACtD,WAAWD,EAAO,QAAQ;AAAA,EAAA;AAAA;AAAA,EAG5B,OAAO;AAAA,IACL,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA,EAAA;AAAA;AAAA,EAGvC,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,WAAW,GAAGA,EAAO,OAAO,KAAK,GAAG,CAAC;AAAA,EAAA;AAAA;AAAA,EAGvC,YAAY;AACd,IC7Ea8C,KAA8C,CAAC,EAAE,QAAA9C,GAAQ,UAAAC,GAAU,MAAAsC,SAAY;AAAA;AAAA,EAE1F,MAAM;AAAA,IACJ,IAAI;AAAA,MACF,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAASvC,EAAO,QAAQ;AAAA;AAAA,MACxB,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxD,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxD,eAAeA,EAAO,WAAW,SAAS;AAAA;AAAA,IAAA;AAAA,IAE5C,IAAI;AAAA,MACF,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAASA,EAAO,QAAQ;AAAA;AAAA,MACxB,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxD,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxD,eAAeA,EAAO,WAAW,SAAS;AAAA;AAAA,IAAA;AAAA,IAE5C,IAAI;AAAA,MACF,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAASA,EAAO,QAAQ;AAAA;AAAA,MACxB,eAAe,QAAQA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxC,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA;AAAA,MACxD,eAAeA,EAAO,WAAW,SAAS;AAAA;AAAA,IAAA;AAAA,IAE5C,IAAI;AAAA,MACF,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAASA,EAAO,QAAQ;AAAA;AAAA,MACxB,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,GAAG;AAAA;AAAA,MACzD,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,GAAG;AAAA;AAAA,MACzD,eAAeA,EAAO,WAAW,SAAS;AAAA;AAAA,IAAA;AAAA,IAE5C,YAAY;AAAA,MACV,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAASA,EAAO,QAAQ;AAAA;AAAA,MACxB,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,GAAG;AAAA;AAAA,MACzD,eAAe,GAAGA,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,GAAG;AAAA;AAAA,MACzD,eAAeA,EAAO,WAAW,SAAS;AAAA;AAAA,IAAA;AAAA,EAC5C;AAAA;AAAA,EAIF,SAAS;AAAA,IACP,YAAYuC,MAAS,UACjB,2BACA;AAAA;AAAA,IACJ,gBAAgB;AAAA;AAAA,EAAA;AAAA;AAAA,EAIlB,WAAW;AAAA,IACT,YAAYtC,EAAS,OAAO,WAAW;AAAA,IACvC,cAAcD,EAAO,MAAM;AAAA;AAAA;AAAA,IAE3B,WAAWuC,MAAS,UAAUvC,EAAO,QAAQ,KAAKC,EAAS,QAAQ,UAAU;AAAA,IAC7E,QAAQsC,MAAS,UACb,SACA,aAAatC,EAAS,OAAO,OAAO,OAAO;AAAA,IAC/C,WAAW;AAAA,EAAA;AAAA;AAAA,EAIb,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,cAAc,aAAaA,EAAS,OAAO,OAAO,OAAO;AAAA,IACzD,WAAW;AAAA,IACX,KAAKD,EAAO,QAAQ;AAAA;AAAA,EAAA;AAAA;AAAA,EAItB,OAAO;AAAA,IACL,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,YAAYD,EAAO,WAAW,WAAW;AAAA;AAAA,IACzC,YAAY;AAAA,EAAA;AAAA;AAAA,EAId,aAAa;AAAA,IACX,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,IACrC,YAAY;AAAA,IACZ,WAAWA,EAAO,QAAQ;AAAA;AAAA,EAAA;AAAA;AAAA,EAI5B,aAAa;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,YAAYA,EAAS,OAAO,KAAK;AAAA,IACjC,iBAAiBA,EAAS,OAAO,WAAW;AAAA,IAC5C,cAAcD,EAAO,MAAM;AAAA;AAAA,EAAA;AAAA;AAAA,EAI7B,SAAS;AAAA,IACP,OAAOC,EAAS,OAAO,KAAK;AAAA,IAC5B,UAAUD,EAAO,WAAW,SAAS;AAAA;AAAA,IACrC,YAAY;AAAA,IACZ,WAAW;AAAA;AAAA,EAAA;AAAA;AAAA,EAIb,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,WAAW,aAAaC,EAAS,OAAO,OAAO,OAAO;AAAA,IACtD,WAAW;AAAA,IACX,KAAKD,EAAO,QAAQ;AAAA;AAAA,IACpB,gBAAgB;AAAA,EAAA;AAAA;AAAA,EAIlB,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA;AAAA,IACR,WAAW;AAAA,IACX,SAAS;AAAA,EAAA;AAAA;AAAA,EAIX,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA;AAAA,EAIb,YAAY;AACd,ICnIa+C,KAAkD,CAAC,EAAE,QAAA/C,GAAQ,UAAAC,GAAU,MAAAsC,SAAY;AAAA;AAAA,EAE9F,YAAYA,MAAS,UACjB,0BACA;AAAA,EACJ,OAAOA,MAAS,UACZ,YACAtC,EAAS,OAAO,KAAK;AAAA;AAAA,EAGzB,cAAcD,EAAO,MAAM;AAAA,EAC3B,WAAWuC,MAAS,UAChB,mCACA;AAAA;AAAA,EAGJ,SAAS,GAAGvC,EAAO,QAAQ,EAAE,IAAIA,EAAO,QAAQ,EAAE;AAAA,EAClD,UAAU;AAAA;AAAA,EAGV,UAAUA,EAAO,WAAW,SAAS;AAAA,EACrC,YAAY;AAAA;AAAA,EAGZ,OAAO;AAAA,IACL,MAAM;AAAA,EAAA;AAAA;AAAA,EAIR,WAAW;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,EAAA;AAAA;AAAA,EAIV,QAAQ;AACV,ICVagD,KAAwB,CAACC,OAA4C;AAAA,EAChF,QAAQrB,GAAgBqB,CAAO;AAAA,EAC/B,aAAanB,GAAqBmB,CAAO;AAAA,EACzC,YAAYpB,GAAoBoB,CAAO;AAAA,EACvC,UAAUlB,GAAkBkB,CAAO;AAAA,EACnC,OAAOjB,GAAeiB,CAAO;AAAA,EAC7B,QAAQhB,GAAgBgB,CAAO;AAAA,EAC/B,OAAOf,GAAee,CAAO;AAAA,EAC7B,QAAQd,GAAgBc,CAAO;AAAA,EAC/B,aAAab,GAAqBa,CAAO;AAAA,EACzC,UAAUZ,GAAkBY,CAAO;AAAA,EACnC,KAAKX,GAAaW,CAAO;AAAA,EACzB,UAAUR,GAAkBQ,CAAO;AAAA,EACnC,SAASP,GAAiBO,CAAO;AAAA,EACjC,MAAMN,GAAcM,CAAO;AAAA,EAC3B,MAAML,GAAcK,CAAO;AAAA,EAC3B,UAAUJ,GAAkBI,CAAO;AAAA,EACnC,OAAOH,GAAeG,CAAO;AAAA,EAC7B,MAAMlD,GAAckD,CAAO;AAAA,EAC3B,SAASF,GAAiBE,CAAO;AACnC,IAUaC,KAAoB,CAC/BjD,GACAsC,IAAyB,YACZ;AACb,QAAMvC,IAAS;AAAA,IACb,QAAQmD;AAAA,IACR,SAASC;AAAA,IACT,OAAOC;AAAA,IACP,YAAYC;AAAA,IACZ,SAASC;AAAA,IACT,WAAWC;AAAA,EAAA;AASb,SAAO;AAAA,IACL,QAAAxD;AAAA,IACA,UAAAC;AAAA,IACA,YAAY+C,GATgB;AAAA,MAC5B,QAAAhD;AAAA,MACA,UAAAC;AAAA,MACA,MAAAsC;AAAA,IAAA,CAMyC;AAAA,EAAA;AAE7C,GAEakB,KAA0BP,GAAkBQ,IAAe,OAAO,GAClEC,KAAyBT,GAAkBU,IAAc,MAAM;AC7F5E,IAAIC,KAAoB,SAA2BtoC,GAAO;AACzD,SAAOuoC,GAAgBvoC,CAAK,KACxB,CAACwoC,GAAUxoC,CAAK;AACrB;AAEA,SAASuoC,GAAgBvoC,GAAO;AAC/B,SAAO,CAAC,CAACA,KAAS,OAAOA,KAAU;AACpC;AAEA,SAASwoC,GAAUxoC,GAAO;AACzB,MAAIyoC,IAAc,OAAO,UAAU,SAAS,KAAKzoC,CAAK;AAEtD,SAAOyoC,MAAgB,qBACnBA,MAAgB,mBAChBC,GAAe1oC,CAAK;AACzB;AAGA,IAAI2oC,KAAe,OAAO,UAAW,cAAc,OAAO,KACtDvgC,KAAqBugC,KAAe,OAAO,IAAI,eAAe,IAAI;AAEtE,SAASD,GAAe1oC,GAAO;AAC9B,SAAOA,EAAM,aAAaoI;AAC3B;AAEA,SAASwgC,GAAYC,GAAK;AACzB,SAAO,MAAM,QAAQA,CAAG,IAAI,CAAA,IAAK,CAAA;AAClC;AAEA,SAASC,GAA8B9oC,GAAOtB,GAAS;AACtD,SAAQA,EAAQ,UAAU,MAASA,EAAQ,kBAAkBsB,CAAK,IAC/D+oC,GAAUH,GAAY5oC,CAAK,GAAGA,GAAOtB,CAAO,IAC5CsB;AACJ;AAEA,SAASgpC,GAAkBzX,GAAQ0X,GAAQvqC,GAAS;AACnD,SAAO6yB,EAAO,OAAO0X,CAAM,EAAE,IAAI,SAASrkC,GAAS;AAClD,WAAOkkC,GAA8BlkC,GAASlG,CAAO;AAAA,EACvD,CAAE;AACF;AAEA,SAASwqC,GAAiBjjC,GAAKvH,GAAS;AACvC,MAAI,CAACA,EAAQ;AACZ,WAAOqqC;AAER,MAAII,IAAczqC,EAAQ,YAAYuH,CAAG;AACzC,SAAO,OAAOkjC,KAAgB,aAAaA,IAAcJ;AAC1D;AAEA,SAASK,GAAgC7X,GAAQ;AAChD,SAAO,OAAO,wBACX,OAAO,sBAAsBA,CAAM,EAAE,OAAO,SAAS8X,GAAQ;AAC9D,WAAO,OAAO,qBAAqB,KAAK9X,GAAQ8X,CAAM;AAAA,EACzD,CAAG,IACC,CAAA;AACJ;AAEA,SAASC,GAAQ/X,GAAQ;AACxB,SAAO,OAAO,KAAKA,CAAM,EAAE,OAAO6X,GAAgC7X,CAAM,CAAC;AAC1E;AAEA,SAASgY,GAAmB//B,GAAQ/F,GAAU;AAC7C,MAAI;AACH,WAAOA,KAAY+F;AAAA,EACrB,QAAY;AACV,WAAO;AAAA,EACT;AACA;AAGA,SAASggC,GAAiBjY,GAAQtrB,GAAK;AACtC,SAAOsjC,GAAmBhY,GAAQtrB,CAAG,KACjC,EAAE,OAAO,eAAe,KAAKsrB,GAAQtrB,CAAG,KACvC,OAAO,qBAAqB,KAAKsrB,GAAQtrB,CAAG;AAClD;AAEA,SAASwjC,GAAYlY,GAAQ0X,GAAQvqC,GAAS;AAC7C,MAAIgrC,IAAc,CAAA;AAClB,SAAIhrC,EAAQ,kBAAkB6yB,CAAM,KACnC+X,GAAQ/X,CAAM,EAAE,QAAQ,SAAStrB,GAAK;AACrC,IAAAyjC,EAAYzjC,CAAG,IAAI6iC,GAA8BvX,EAAOtrB,CAAG,GAAGvH,CAAO;AAAA,EACxE,CAAG,GAEF4qC,GAAQL,CAAM,EAAE,QAAQ,SAAShjC,GAAK;AACrC,IAAIujC,GAAiBjY,GAAQtrB,CAAG,MAI5BsjC,GAAmBhY,GAAQtrB,CAAG,KAAKvH,EAAQ,kBAAkBuqC,EAAOhjC,CAAG,CAAC,IAC3EyjC,EAAYzjC,CAAG,IAAIijC,GAAiBjjC,GAAKvH,CAAO,EAAE6yB,EAAOtrB,CAAG,GAAGgjC,EAAOhjC,CAAG,GAAGvH,CAAO,IAEnFgrC,EAAYzjC,CAAG,IAAI6iC,GAA8BG,EAAOhjC,CAAG,GAAGvH,CAAO;AAAA,EAExE,CAAE,GACMgrC;AACR;AAEA,SAASX,GAAUxX,GAAQ0X,GAAQvqC,GAAS;AAC3C,EAAAA,IAAUA,KAAW,CAAA,GACrBA,EAAQ,aAAaA,EAAQ,cAAcsqC,IAC3CtqC,EAAQ,oBAAoBA,EAAQ,qBAAqB4pC,IAGzD5pC,EAAQ,gCAAgCoqC;AAExC,MAAIa,IAAgB,MAAM,QAAQV,CAAM,GACpCW,IAAgB,MAAM,QAAQrY,CAAM,GACpCsY,IAA4BF,MAAkBC;AAElD,SAAKC,IAEMF,IACHjrC,EAAQ,WAAW6yB,GAAQ0X,GAAQvqC,CAAO,IAE1C+qC,GAAYlY,GAAQ0X,GAAQvqC,CAAO,IAJnCoqC,GAA8BG,GAAQvqC,CAAO;AAMtD;AAEAqqC,GAAU,MAAM,SAAsB9nC,GAAOvC,GAAS;AACrD,MAAI,CAAC,MAAM,QAAQuC,CAAK;AACvB,UAAM,IAAI,MAAM,mCAAmC;AAGpD,SAAOA,EAAM,OAAO,SAASgB,GAAMC,GAAM;AACxC,WAAO6mC,GAAU9mC,GAAMC,GAAMxD,CAAO;AAAA,EACtC,GAAI,CAAA,CAAE;AACN;AAEA,IAAIorC,KAAcf,IAElBgB,KAAiBD;mCC5CXE,KAAuB,CAC3B5N,GACA6N,MAC2B;;AAC3B,MAAI,CAAC7N,EAAO,QAAO,CAAA;AAEnB,QAAM8N,IAA+B,CAAA;AAGrC,OAAIt0B,IAAAwmB,EAAM,aAAN,QAAAxmB,EAAgB,QAAQ;AAC1B,UAAM,EAAE,QAAAu0B,MAAW/N,EAAM;AAGzB,MAAIzmB,IAAAw0B,EAAO,UAAP,gBAAAx0B,EAAc,aAAYs0B,EAAU,SAAS,OAAO,MAAM,YAC5DC,EAAK,qBAAqB,IAAIC,EAAO,MAAM,YAEzCC,IAAAD,EAAO,UAAP,gBAAAC,EAAc,kBAAiBH,EAAU,SAAS,OAAO,MAAM,iBACjEC,EAAK,2BAA2B,IAAIC,EAAO,MAAM,iBAE/CE,IAAAF,EAAO,UAAP,gBAAAE,EAAc,mBAAkBJ,EAAU,SAAS,OAAO,MAAM,kBAClEC,EAAK,4BAA4B,IAAIC,EAAO,MAAM,kBAEhDG,IAAAH,EAAO,UAAP,gBAAAG,EAAc,mBAAkBL,EAAU,SAAS,OAAO,MAAM,kBAClEC,EAAK,4BAA4B,IAAIC,EAAO,MAAM,kBAIhDI,IAAAJ,EAAO,SAAP,gBAAAI,EAAa,aAAYN,EAAU,SAAS,OAAO,KAAK,YAC1DC,EAAK,oBAAoB,IAAIC,EAAO,KAAK,YAEvCK,IAAAL,EAAO,SAAP,gBAAAK,EAAa,eAAcP,EAAU,SAAS,OAAO,KAAK,cAC5DC,EAAK,sBAAsB,IAAIC,EAAO,KAAK,cAEzCM,IAAAN,EAAO,SAAP,gBAAAM,EAAa,cAAaR,EAAU,SAAS,OAAO,KAAK,aAC3DC,EAAK,qBAAqB,IAAIC,EAAO,KAAK,aAExC97B,IAAA87B,EAAO,SAAP,gBAAA97B,EAAa,cAAa47B,EAAU,SAAS,OAAO,KAAK,aAC3DC,EAAK,qBAAqB,IAAIC,EAAO,KAAK,aAExCO,IAAAP,EAAO,SAAP,gBAAAO,EAAa,iBAAgBT,EAAU,SAAS,OAAO,KAAK,gBAC9DC,EAAK,wBAAwB,IAAIC,EAAO,KAAK,gBAI3CQ,IAAAR,EAAO,eAAP,gBAAAQ,EAAmB,aAAYV,EAAU,SAAS,OAAO,WAAW,YACtEC,EAAK,0BAA0B,IAAIC,EAAO,WAAW,YAEnDS,IAAAT,EAAO,eAAP,gBAAAS,EAAmB,aAAYX,EAAU,SAAS,OAAO,WAAW,YACtEC,EAAK,0BAA0B,IAAIC,EAAO,WAAW,YAEnDU,IAAAV,EAAO,eAAP,gBAAAU,EAAmB,eAAcZ,EAAU,SAAS,OAAO,WAAW,cACxEC,EAAK,4BAA4B,IAAIC,EAAO,WAAW,cAIrDW,IAAAX,EAAO,WAAP,gBAAAW,EAAe,aAAYb,EAAU,SAAS,OAAO,OAAO,YAC9DC,EAAK,sBAAsB,IAAIC,EAAO,OAAO,YAE3CY,IAAAZ,EAAO,WAAP,gBAAAY,EAAe,YAAWd,EAAU,SAAS,OAAO,OAAO,WAC7DC,EAAK,qBAAqB,IAAIC,EAAO,OAAO,WAE1Ca,IAAAb,EAAO,WAAP,gBAAAa,EAAe,aAAYf,EAAU,SAAS,OAAO,OAAO,YAC9DC,EAAK,sBAAsB,IAAIC,EAAO,OAAO,YAI3Cc,IAAAd,EAAO,UAAP,gBAAAc,EAAc,YAAWhB,EAAU,SAAS,OAAO,MAAM,WAC3DC,EAAK,oBAAoB,IAAIC,EAAO,MAAM,WAExCe,IAAAf,EAAO,UAAP,gBAAAe,EAAc,aAAYjB,EAAU,SAAS,OAAO,MAAM,YAC5DC,EAAK,qBAAqB,IAAIC,EAAO,MAAM,YAEzCgB,IAAAhB,EAAO,UAAP,gBAAAgB,EAAc,aAAYlB,EAAU,SAAS,OAAO,MAAM,YAC5DC,EAAK,qBAAqB,IAAIC,EAAO,MAAM;AAAA,EAE/C;AAEA,SAAOD;AACT,GAuBakB,KAAsB,CAAC;AAAA,EAClC,UAAAtpC;AAAA,EACA,MAAAklC,IAAO;AAAA,EACP,OAAA5K;AAAA,EACA,kBAAAiP,IAAmB;AAAA,EACnB,cAAAC;AACF,MAAgC;AAE9B,QAAMrB,IAAYjD,MAAS,SAASoB,KAAyBF,IAGvDqD,IAAc71B,GAAQ,MACrB0mB,IAGE2M,GAAUkB,GAAW7N,CAA0B,IAF7C6N,GAGR,CAACA,GAAW7N,CAAK,CAAC;AAGrB,EAAA7kB,GAAU,MAAM;AACd,IAAI8zB,KACF,SAAS,gBAAgB,aAAa,cAAcrE,CAAI;AAAA,EAG5D,GAAG,CAACA,GAAMqE,CAAgB,CAAC;AAG3B,QAAMG,IAAkB91B,GAAQ,MACvBs0B,GAAqB5N,GAA4B6N,CAAS,GAChE,CAAC7N,GAAO6N,CAAS,CAAC;AAGrB,EAAA1yB,GAAU,MAAM;AACd,QAAI+zB,MAAiB,UAAU,OAAO,KAAKE,CAAe,EAAE,SAAS,GAAG;AACtE,YAAM9pC,IAAO,SAAS;AACtB,oBAAO,QAAQ8pC,CAAe,EAAE,QAAQ,CAAC,CAACvlC,GAAKjG,CAAK,MAAM;AACxD,QAAA0B,EAAK,MAAM,YAAYuE,GAAKjG,CAAK;AAAA,MACnC,CAAC,GAGM,MAAM;AACX,eAAO,KAAKwrC,CAAe,EAAE,QAAQ,CAAAvlC,MAAO;AAC1C,UAAAvE,EAAK,MAAM,eAAeuE,CAAG;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAACulC,GAAiBF,CAAY,CAAC;AAGlC,QAAMG,IAAe/1B,GAAQ,MACvB41B,MAAiB,UAAU,OAAO,KAAKE,CAAe,EAAE,WAAW,IAC9D,EAAE,SAAS,WAAA,IAEb;AAAA,IACL,SAAS;AAAA,IACT,GAAGA;AAAA,EAAA,GAEJ,CAACA,GAAiBF,CAAY,CAAC;AAElC,SACE56B,gBAAAA,EAACg7B,MAAoB,OAAOH,GAC1B,4BAACI,IAAA,EAAgB,OAAOF,GACrB,UAAA3pC,EAAA,CACH,EAAA,CACF;AAEJ;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,28,99]}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils/styled-token.ts","../src/button/styled-tokens.ts","../src/button/Button.style.ts","../src/button/Button.tsx","../src/button/IconButton.style.ts","../src/button/IconButton.tsx","../src/checkbox/styled-tokens.ts","../src/checkbox/Checkbox.style.ts","../src/checkbox/Checkbox.tsx","../../icons/dist/index.mjs","../src/checkbox/CheckboxButton.style.ts","../src/checkbox/CheckboxButton.tsx","../src/collapse/styled-tokens.ts","../src/collapse/Collapse.style.ts","../src/collapse/Collapse.tsx","../src/collapse/CollapseItem.tsx","../src/floatButton/styled-tokens.ts","../src/floatButton/FloatButton.style.ts","../src/floatButton/FloatButton.tsx","../src/input/styled-tokens.ts","../src/input/Input.style.ts","../src/input/Input.tsx","../src/menu/styled-tokens.ts","../src/menu/Menu.style.ts","../src/menu/Menu.tsx","../src/menu/SubMenuPopover.tsx","../src/menu/MenuItem.tsx","../src/menu/MenuGroup.tsx","../src/menu/SubMenuItem.tsx","../src/link/styled-tokens.ts","../src/link/Link.style.ts","../src/link/Link.tsx","../src/modal/styled-tokens.ts","../src/modal/Modal.style.ts","../src/modal/Modal.tsx","../src/numberInput/styled-tokens.ts","../src/numberInput/NumberInput.style.ts","../src/numberInput/NumberInput.tsx","../src/radio/styled-tokens.ts","../src/radio/Radio.style.ts","../src/radio/Radio.tsx","../src/skeleton/styled-tokens.ts","../src/skeleton/Skeleton.style.ts","../src/skeleton/Skeleton.tsx","../src/stepper/styled-tokens.ts","../src/stepper/Stepper.style.ts","../src/stepper/Stepper.tsx","../src/stepper/Step.tsx","../src/progress/styled-tokens.ts","../src/progress/Progress.style.ts","../src/progress/Progress.tsx","../src/tag/styled-tokens.ts","../src/tag/Tag.style.ts","../src/tag/Tag.tsx","../src/select/styled-tokens.ts","../src/select/Select.style.ts","../src/select/Popover.tsx","../src/select/ListBox.tsx","../src/select/Select.tsx","../src/table/styled-tokens.ts","../src/table/Table.style.ts","../src/table/Table.tsx","../src/switch/styled-tokens.ts","../src/switch/Switch.style.ts","../src/switch/Switch.tsx","../src/transfer/styled-tokens.ts","../src/transfer/Transfer.style.ts","../src/transfer/Transfer.tsx","../src/upload/styled-tokens.ts","../src/upload/Upload.style.ts","../src/upload/Upload.tsx","../src/card/styled-tokens.ts","../src/card/Card.style.ts","../src/card/Card.tsx","../src/card/tokens.ts","../src/tooltip/styled-tokens.ts","../src/tooltip/Tooltip.style.ts","../src/tooltip/Tooltip.tsx","../src/slider/styled-tokens.ts","../src/slider/Slider.style.ts","../src/slider/Slider.tsx","../src/button/tokens.ts","../src/floatButton/tokens.ts","../src/checkbox/tokens.ts","../src/radio/tokens.ts","../src/switch/tokens.ts","../src/input/tokens.ts","../src/select/tokens.ts","../src/numberInput/tokens.ts","../src/collapse/tokens.ts","../src/tag/tokens.ts","../src/skeleton/tokens.ts","../src/stepper/tokens.ts","../src/menu/tokens.ts","../src/link/tokens.ts","../src/transfer/tokens.ts","../src/modal/tokens.ts","../src/tooltip/tokens.ts","../src/slider/tokens.ts","../src/theme.ts","../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../src/DesignThemeProvider.tsx"],"sourcesContent":["/**\n * Styled Token System\n *\n * 一套优雅的 Design Token 解析系统,支持两种样式解析策略:\n * \n * 1. **CSS 变量方案**(默认)\n * - 无 Provider 或只传 mode 时使用\n * - 样式通过 CSS 变量解析,支持在元素上直接覆盖\n * - light/dark 切换通过 data-theme 属性实现\n * \n * 2. **JS Token 方案**\n * - 传 theme prop 时使用\n * - 样式通过 JavaScript 对象解析\n * - 支持完整的主题自定义能力\n *\n * ## 检测逻辑\n * \n * | theme 状态 | _useCSSVariables | 结果 |\n * |------------------------------|------------------|------------|\n * | undefined | - | CSS 变量 |\n * | 存在,_useCSSVariables=true | true | CSS 变量 |\n * | 存在,_useCSSVariables=false | false | JS Token |\n *\n * @example\n * ```tsx\n * // 定义组件的 styled tokens\n * export const $card = createStyledTokens({\n * bg: ['components.card.container.background.default', '--ksd-card-bg'],\n * radius: ['components.card.container.radius', '--ksd-card-radius'],\n * });\n *\n * // 在 styled-components 中使用\n * const Container = styled.div`\n * background: ${$card.bg};\n * border-radius: ${$card.radius};\n * `;\n * ```\n */\n\nimport type { AppTheme } from '@kingsoft-ai/theme';\n\n/**\n * 带有样式策略标记的 Theme 类型\n * - _useCSSVariables: true → 使用 CSS 变量\n * - _useCSSVariables: false → 使用 JS Token\n */\ntype ThemeWithFlag = AppTheme & { _useCSSVariables?: boolean };\ntype ThemeProps = { theme?: ThemeWithFlag };\ntype StyledTokenFn = (props: ThemeProps) => string;\n\n/**\n * 检查是否应该使用 CSS 变量\n * \n * 决策逻辑:\n * 1. theme 不存在 → true(无 Provider,使用 CSS 变量)\n * 2. theme._useCSSVariables === true → true(只传 mode,使用 CSS 变量)\n * 3. theme._useCSSVariables === false → false(传了 theme,使用 JS Token)\n * 4. theme 存在但无标记 → false(兼容旧版本,使用 JS Token)\n */\nconst shouldUseCSSVar = (theme: ThemeWithFlag | undefined): boolean => {\n if (!theme) return true;\n // 显式检查 === true,确保 false 和 undefined 都返回 false\n return theme._useCSSVariables === true;\n};\n\n/**\n * 安全地从对象中获取嵌套属性值\n * @param obj - 目标对象\n * @param path - 点号分隔的路径,如 'components.card.container.radius'\n */\nconst getByPath = (obj: unknown, path: string): unknown => {\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc) {\n return (acc as Record<string, unknown>)[key];\n }\n return undefined;\n }, obj);\n};\n\n/**\n * 创建单个 styled token 函数\n *\n * @param themePath - Theme 对象中的路径\n * @param cssVar - CSS 变量名(作为 fallback)\n * @returns 可在 styled-components 中使用的函数\n */\nexport const token = (themePath: string, cssVar: string): StyledTokenFn => {\n return ({ theme }: ThemeProps): string => {\n // 如果应该使用 CSS 变量,直接返回 var()\n if (shouldUseCSSVar(theme)) {\n return `var(${cssVar})`;\n }\n // 否则从 theme 对象获取值\n const value = getByPath(theme, themePath);\n return (value as string) ?? `var(${cssVar})`;\n };\n};\n\n/**\n * Token 定义:[themePath, cssVar]\n */\ntype TokenDef = readonly [themePath: string, cssVar: string];\n\n/**\n * Token 映射配置\n */\ntype TokenMap = Record<string, TokenDef>;\n\n/**\n * 将 TokenMap 转换为 StyledTokens 对象\n */\ntype StyledTokens<T extends TokenMap> = {\n readonly [K in keyof T]: StyledTokenFn;\n};\n\n/**\n * 批量创建 styled tokens\n *\n * 将 token 定义映射为可在 styled-components 中直接使用的函数集合。\n * 每个函数会优先使用 JS theme 值,fallback 到 CSS 变量。\n *\n * @param tokenMap - Token 定义映射 { name: [themePath, cssVar] }\n * @returns Styled tokens 对象\n *\n * @example\n * ```tsx\n * const $button = createStyledTokens({\n * bg: ['components.button.background', '--ksd-btn-bg'],\n * color: ['components.button.color', '--ksd-btn-color'],\n * });\n *\n * const Button = styled.button`\n * background: ${$button.bg};\n * color: ${$button.color};\n * `;\n * ```\n */\nexport const createStyledTokens = <T extends TokenMap>(\n tokenMap: T\n): StyledTokens<T> => {\n const tokens = {} as Record<string, StyledTokenFn>;\n\n for (const [key, [themePath, cssVar]] of Object.entries(tokenMap)) {\n tokens[key] = token(themePath, cssVar);\n }\n\n return tokens as StyledTokens<T>;\n};\n\n/**\n * 条件 token:根据条件选择不同的 token 值\n *\n * @example\n * ```tsx\n * const Container = styled.div<{ variant: 'filled' | 'outlined' }>`\n * background: ${({ variant }) =>\n * tokenWhen(variant === 'filled',\n * ['components.card.bg.filled', '--ksd-card-bg-filled'],\n * ['components.card.bg.outlined', '--ksd-card-bg-outlined']\n * )};\n * `;\n * ```\n */\nexport const tokenWhen = (\n condition: boolean,\n whenTrue: TokenDef,\n whenFalse: TokenDef\n): StyledTokenFn => {\n const [truePath, trueCss] = whenTrue;\n const [falsePath, falseCss] = whenFalse;\n\n return ({ theme }: ThemeProps): string => {\n const [path, css] = condition ? [truePath, trueCss] : [falsePath, falseCss];\n // 如果应该使用 CSS 变量,直接返回 var()\n if (shouldUseCSSVar(theme)) {\n return `var(${css})`;\n }\n const value = getByPath(theme, path);\n return (value as string) ?? `var(${css})`;\n };\n};\n\n/**\n * 直接从 theme 获取值(不带 CSS fallback)\n * 用于需要在 JS 中进行计算的场景\n */\nexport const themeValue = <T = string>(\n themePath: string,\n fallback: T\n): ((props: ThemeProps) => T) => {\n return ({ theme }: ThemeProps): T => {\n const value = theme ? getByPath(theme, themePath) : undefined;\n return (value as T) ?? fallback;\n };\n};\n","/**\n * Button & IconButton Styled Tokens\n *\n * 将 Button/IconButton 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Button 组件的 Styled Tokens\n */\nexport const $button = createStyledTokens({\n // ============================================================================\n // Primary 变体\n // ============================================================================\n primaryBg: ['components.button.primary.background.default', '--ksd-button-primary-bg'],\n primaryBgHover: ['components.button.primary.background.hover', '--ksd-button-primary-bg-hover'],\n primaryBgActive: ['components.button.primary.background.active', '--ksd-button-primary-bg-active'],\n primaryText: ['components.button.primary.text.default', '--ksd-button-primary-text'],\n primaryBorder: ['components.button.primary.border.default', '--ksd-button-primary-border'],\n\n // ============================================================================\n // Secondary 变体\n // ============================================================================\n secondaryBg: ['components.button.secondary.background.default', '--ksd-button-secondary-bg'],\n secondaryBgHover: ['components.button.secondary.background.hover', '--ksd-button-secondary-bg-hover'],\n secondaryBgActive: ['components.button.secondary.background.active', '--ksd-button-secondary-bg-active'],\n secondaryText: ['components.button.secondary.text.default', '--ksd-button-secondary-text'],\n secondaryBorder: ['components.button.secondary.border.default', '--ksd-button-secondary-border'],\n secondaryBorderHover: ['components.button.secondary.border.hover', '--ksd-button-secondary-border-hover'],\n secondaryBorderActive: ['components.button.secondary.border.active', '--ksd-button-secondary-border-active'],\n\n // ============================================================================\n // Text 变体\n // ============================================================================\n textBg: ['components.button.text.background.default', '--ksd-button-text-bg'],\n textBgHover: ['components.button.text.background.hover', '--ksd-button-text-bg-hover'],\n textBgActive: ['components.button.text.background.active', '--ksd-button-text-bg-active'],\n textText: ['components.button.text.text.default', '--ksd-button-text-text'],\n textBorder: ['components.button.text.border.default', '--ksd-button-text-border'],\n\n // ============================================================================\n // Danger 变体\n // ============================================================================\n dangerBg: ['components.button.danger.background.default', '--ksd-button-danger-bg'],\n dangerBgHover: ['components.button.danger.background.hover', '--ksd-button-danger-bg-hover'],\n dangerBgActive: ['components.button.danger.background.active', '--ksd-button-danger-bg-active'],\n dangerText: ['components.button.danger.text.default', '--ksd-button-danger-text'],\n dangerBorder: ['components.button.danger.border.default', '--ksd-button-danger-border'],\n\n // ============================================================================\n // Gradient 变体\n // ============================================================================\n gradientFrom: ['components.button.gradient.background.gradientFrom', '--ksd-button-gradient-from'],\n gradientTo: ['components.button.gradient.background.gradientTo', '--ksd-button-gradient-to'],\n gradientText: ['components.button.gradient.text.default', '--ksd-button-gradient-text'],\n\n // ============================================================================\n // Disabled 状态\n // ============================================================================\n disabledBg: ['components.button.disabled.background.default', '--ksd-button-disabled-bg'],\n disabledText: ['components.button.disabled.text.default', '--ksd-button-disabled-text'],\n disabledOpacity: ['components.button.disabled.opacity', '--ksd-button-disabled-opacity'],\n\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smHeight: ['components.button.size.sm.height', '--ksd-button-sm-height'],\n smFontSize: ['components.button.size.sm.fontSize', '--ksd-button-sm-font-size'],\n smPaddingInline: ['components.button.size.sm.paddingInline', '--ksd-button-sm-padding-inline'],\n smIconSize: ['components.button.size.sm.iconSize', '--ksd-button-sm-icon-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdHeight: ['components.button.size.md.height', '--ksd-button-md-height'],\n mdFontSize: ['components.button.size.md.fontSize', '--ksd-button-md-font-size'],\n mdPaddingInline: ['components.button.size.md.paddingInline', '--ksd-button-md-padding-inline'],\n mdIconSize: ['components.button.size.md.iconSize', '--ksd-button-md-icon-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgHeight: ['components.button.size.lg.height', '--ksd-button-lg-height'],\n lgFontSize: ['components.button.size.lg.fontSize', '--ksd-button-lg-font-size'],\n lgPaddingInline: ['components.button.size.lg.paddingInline', '--ksd-button-lg-padding-inline'],\n lgIconSize: ['components.button.size.lg.iconSize', '--ksd-button-lg-icon-size'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.button.borderRadius', '--ksd-button-border-radius'],\n fontWeight: ['components.button.fontWeight', '--ksd-button-font-weight'],\n gap: ['components.button.gap', '--ksd-button-gap'],\n transition: ['components.button.transition', '--ksd-button-transition'],\n});\n\n/**\n * IconButton 组件的 Styled Tokens\n */\nexport const $iconButton = createStyledTokens({\n // ============================================================================\n // Solid - Primary\n // ============================================================================\n solidPrimaryBg: ['components.iconButton.appearance.solid.primary.background.default', '--ksd-icon-button-solid-primary-bg'],\n solidPrimaryBgHover: ['components.iconButton.appearance.solid.primary.background.hover', '--ksd-icon-button-solid-primary-bg-hover'],\n solidPrimaryBgActive: ['components.iconButton.appearance.solid.primary.background.active', '--ksd-icon-button-solid-primary-bg-active'],\n solidPrimaryBorder: ['components.iconButton.appearance.solid.primary.border.default', '--ksd-icon-button-solid-primary-border'],\n solidPrimaryIcon: ['components.iconButton.appearance.solid.primary.icon.default', '--ksd-icon-button-solid-primary-icon'],\n\n // ============================================================================\n // Solid - Neutral\n // ============================================================================\n solidNeutralBg: ['components.iconButton.appearance.solid.neutral.background.default', '--ksd-icon-button-solid-neutral-bg'],\n solidNeutralBgHover: ['components.iconButton.appearance.solid.neutral.background.hover', '--ksd-icon-button-solid-neutral-bg-hover'],\n solidNeutralBgActive: ['components.iconButton.appearance.solid.neutral.background.active', '--ksd-icon-button-solid-neutral-bg-active'],\n solidNeutralBorder: ['components.iconButton.appearance.solid.neutral.border.default', '--ksd-icon-button-solid-neutral-border'],\n solidNeutralIcon: ['components.iconButton.appearance.solid.neutral.icon.default', '--ksd-icon-button-solid-neutral-icon'],\n\n // ============================================================================\n // Solid - Danger\n // ============================================================================\n solidDangerBg: ['components.iconButton.appearance.solid.danger.background.default', '--ksd-icon-button-solid-danger-bg'],\n solidDangerBgHover: ['components.iconButton.appearance.solid.danger.background.hover', '--ksd-icon-button-solid-danger-bg-hover'],\n solidDangerBgActive: ['components.iconButton.appearance.solid.danger.background.active', '--ksd-icon-button-solid-danger-bg-active'],\n solidDangerBorder: ['components.iconButton.appearance.solid.danger.border.default', '--ksd-icon-button-solid-danger-border'],\n solidDangerIcon: ['components.iconButton.appearance.solid.danger.icon.default', '--ksd-icon-button-solid-danger-icon'],\n\n // ============================================================================\n // Outline - Primary\n // ============================================================================\n outlinePrimaryBg: ['components.iconButton.appearance.outline.primary.background.default', '--ksd-icon-button-outline-primary-bg'],\n outlinePrimaryBgHover: ['components.iconButton.appearance.outline.primary.background.hover', '--ksd-icon-button-outline-primary-bg-hover'],\n outlinePrimaryBgActive: ['components.iconButton.appearance.outline.primary.background.active', '--ksd-icon-button-outline-primary-bg-active'],\n outlinePrimaryBorder: ['components.iconButton.appearance.outline.primary.border.default', '--ksd-icon-button-outline-primary-border'],\n outlinePrimaryIcon: ['components.iconButton.appearance.outline.primary.icon.default', '--ksd-icon-button-outline-primary-icon'],\n outlinePrimaryIconHover: ['components.iconButton.appearance.outline.primary.icon.hover', '--ksd-icon-button-outline-primary-icon-hover'],\n outlinePrimaryIconActive: ['components.iconButton.appearance.outline.primary.icon.active', '--ksd-icon-button-outline-primary-icon-active'],\n\n // ============================================================================\n // Outline - Neutral\n // ============================================================================\n outlineNeutralBg: ['components.iconButton.appearance.outline.neutral.background.default', '--ksd-icon-button-outline-neutral-bg'],\n outlineNeutralBgHover: ['components.iconButton.appearance.outline.neutral.background.hover', '--ksd-icon-button-outline-neutral-bg-hover'],\n outlineNeutralBgActive: ['components.iconButton.appearance.outline.neutral.background.active', '--ksd-icon-button-outline-neutral-bg-active'],\n outlineNeutralBorder: ['components.iconButton.appearance.outline.neutral.border.default', '--ksd-icon-button-outline-neutral-border'],\n outlineNeutralBorderHover: ['components.iconButton.appearance.outline.neutral.border.hover', '--ksd-icon-button-outline-neutral-border-hover'],\n outlineNeutralIcon: ['components.iconButton.appearance.outline.neutral.icon.default', '--ksd-icon-button-outline-neutral-icon'],\n\n // ============================================================================\n // Outline - Danger\n // ============================================================================\n outlineDangerBg: ['components.iconButton.appearance.outline.danger.background.default', '--ksd-icon-button-outline-danger-bg'],\n outlineDangerBgHover: ['components.iconButton.appearance.outline.danger.background.hover', '--ksd-icon-button-outline-danger-bg-hover'],\n outlineDangerBgActive: ['components.iconButton.appearance.outline.danger.background.active', '--ksd-icon-button-outline-danger-bg-active'],\n outlineDangerBorder: ['components.iconButton.appearance.outline.danger.border.default', '--ksd-icon-button-outline-danger-border'],\n outlineDangerIcon: ['components.iconButton.appearance.outline.danger.icon.default', '--ksd-icon-button-outline-danger-icon'],\n outlineDangerIconHover: ['components.iconButton.appearance.outline.danger.icon.hover', '--ksd-icon-button-outline-danger-icon-hover'],\n outlineDangerIconActive: ['components.iconButton.appearance.outline.danger.icon.active', '--ksd-icon-button-outline-danger-icon-active'],\n\n // ============================================================================\n // Ghost - Primary\n // ============================================================================\n ghostPrimaryBg: ['components.iconButton.appearance.ghost.primary.background.default', '--ksd-icon-button-ghost-primary-bg'],\n ghostPrimaryBgHover: ['components.iconButton.appearance.ghost.primary.background.hover', '--ksd-icon-button-ghost-primary-bg-hover'],\n ghostPrimaryBgActive: ['components.iconButton.appearance.ghost.primary.background.active', '--ksd-icon-button-ghost-primary-bg-active'],\n ghostPrimaryBorder: ['components.iconButton.appearance.ghost.primary.border.default', '--ksd-icon-button-ghost-primary-border'],\n ghostPrimaryIcon: ['components.iconButton.appearance.ghost.primary.icon.default', '--ksd-icon-button-ghost-primary-icon'],\n ghostPrimaryIconHover: ['components.iconButton.appearance.ghost.primary.icon.hover', '--ksd-icon-button-ghost-primary-icon-hover'],\n ghostPrimaryIconActive: ['components.iconButton.appearance.ghost.primary.icon.active', '--ksd-icon-button-ghost-primary-icon-active'],\n\n // ============================================================================\n // Ghost - Neutral\n // ============================================================================\n ghostNeutralBg: ['components.iconButton.appearance.ghost.neutral.background.default', '--ksd-icon-button-ghost-neutral-bg'],\n ghostNeutralBgHover: ['components.iconButton.appearance.ghost.neutral.background.hover', '--ksd-icon-button-ghost-neutral-bg-hover'],\n ghostNeutralBgActive: ['components.iconButton.appearance.ghost.neutral.background.active', '--ksd-icon-button-ghost-neutral-bg-active'],\n ghostNeutralBorder: ['components.iconButton.appearance.ghost.neutral.border.default', '--ksd-icon-button-ghost-neutral-border'],\n ghostNeutralIcon: ['components.iconButton.appearance.ghost.neutral.icon.default', '--ksd-icon-button-ghost-neutral-icon'],\n\n // ============================================================================\n // Ghost - Danger\n // ============================================================================\n ghostDangerBg: ['components.iconButton.appearance.ghost.danger.background.default', '--ksd-icon-button-ghost-danger-bg'],\n ghostDangerBgHover: ['components.iconButton.appearance.ghost.danger.background.hover', '--ksd-icon-button-ghost-danger-bg-hover'],\n ghostDangerBgActive: ['components.iconButton.appearance.ghost.danger.background.active', '--ksd-icon-button-ghost-danger-bg-active'],\n ghostDangerBorder: ['components.iconButton.appearance.ghost.danger.border.default', '--ksd-icon-button-ghost-danger-border'],\n ghostDangerIcon: ['components.iconButton.appearance.ghost.danger.icon.default', '--ksd-icon-button-ghost-danger-icon'],\n ghostDangerIconHover: ['components.iconButton.appearance.ghost.danger.icon.hover', '--ksd-icon-button-ghost-danger-icon-hover'],\n ghostDangerIconActive: ['components.iconButton.appearance.ghost.danger.icon.active', '--ksd-icon-button-ghost-danger-icon-active'],\n\n // ============================================================================\n // Disabled 状态\n // ============================================================================\n disabledBg: ['components.iconButton.disabled.background', '--ksd-icon-button-disabled-bg'],\n disabledBorder: ['components.iconButton.disabled.border', '--ksd-icon-button-disabled-border'],\n disabledIcon: ['components.iconButton.disabled.icon', '--ksd-icon-button-disabled-icon'],\n disabledOpacity: ['components.iconButton.disabled.opacity', '--ksd-icon-button-disabled-opacity'],\n\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smEdge: ['components.iconButton.size.sm.edge', '--ksd-icon-button-sm-edge'],\n smIconSize: ['components.iconButton.size.sm.iconSize', '--ksd-icon-button-sm-icon-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdEdge: ['components.iconButton.size.md.edge', '--ksd-icon-button-md-edge'],\n mdIconSize: ['components.iconButton.size.md.iconSize', '--ksd-icon-button-md-icon-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgEdge: ['components.iconButton.size.lg.edge', '--ksd-icon-button-lg-edge'],\n lgIconSize: ['components.iconButton.size.lg.iconSize', '--ksd-icon-button-lg-icon-size'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.iconButton.borderRadius', '--ksd-icon-button-border-radius'],\n transition: ['components.iconButton.transition', '--ksd-icon-button-transition'],\n focusRingColor: ['components.iconButton.focusRing.color', '--ksd-icon-button-focus-ring-color'],\n focusRingOffset: ['components.iconButton.focusRing.offset', '--ksd-icon-button-focus-ring-offset'],\n focusRingWidth: ['components.iconButton.focusRing.width', '--ksd-icon-button-focus-ring-width'],\n});\n","/**\n * Button Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $button } from './styled-tokens';\n\nexport const buttonVariants = ['primary', 'secondary', 'text', 'danger', 'gradient'] as const\nexport const buttonSizes = ['sm', 'md', 'lg'] as const\n\nexport type ButtonVariant = (typeof buttonVariants)[number]\nexport type ButtonSize = (typeof buttonSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getVariantStyles = (variant: ButtonVariant, props: ThemeProps) => {\n // 渐变按钮使用特殊的渐变样式逻辑\n if (variant === 'gradient') {\n return css`\n position: relative;\n color: ${$button.gradientText(props)};\n border-color: transparent;\n box-shadow: none;\n \n /* 默认渐变背景 */\n background: linear-gradient(\n 90deg, \n ${$button.gradientFrom(props)} 0%, \n ${$button.gradientTo(props)} 100%\n );\n background-origin: border-box;\n \n /* 使用伪元素创建反向渐变层 */\n &::before {\n content: '';\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n border-radius: inherit;\n background: linear-gradient(\n 90deg, \n ${$button.gradientTo(props)} 0%, \n ${$button.gradientFrom(props)} 100%\n );\n opacity: 0;\n transition: opacity 0.6s ease;\n z-index: 0;\n }\n \n /* 确保内容在渐变层上方 */\n & > * {\n position: relative;\n z-index: 1;\n }\n\n /* Hover 状态 - 显示反向渐变层 */\n &:hover:not(:disabled):not([data-loading='true'])::before {\n opacity: 1;\n }\n\n /* Active/Pressed 状态(点击态) */\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n box-shadow: none;\n transform: translateY(1px);\n }\n `\n }\n\n // 变体样式映射\n const variantMap = {\n primary: css`\n background: ${$button.primaryBg(props)};\n color: ${$button.primaryText(props)};\n border-color: ${$button.primaryBorder(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$button.primaryBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$button.primaryBgActive(props)};\n transform: translateY(1px);\n }\n `,\n secondary: css`\n background: ${$button.secondaryBg(props)};\n color: ${$button.secondaryText(props)};\n border-color: ${$button.secondaryBorder(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$button.secondaryBgHover(props)};\n border-color: ${$button.secondaryBorderHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$button.secondaryBgActive(props)};\n border-color: ${$button.secondaryBorderActive(props)};\n transform: translateY(1px);\n }\n `,\n text: css`\n background: ${$button.textBg(props)};\n color: ${$button.textText(props)};\n border-color: ${$button.textBorder(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$button.textBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$button.textBgActive(props)};\n transform: translateY(1px);\n }\n `,\n danger: css`\n background: ${$button.dangerBg(props)};\n color: ${$button.dangerText(props)};\n border-color: ${$button.dangerBorder(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$button.dangerBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$button.dangerBgActive(props)};\n transform: translateY(1px);\n }\n `,\n }\n\n return variantMap[variant as keyof typeof variantMap] || variantMap.primary\n}\n\nconst getSizeStyles = (size: ButtonSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n height: ${$button.smHeight(props)};\n font-size: ${$button.smFontSize(props)};\n padding-inline: ${$button.smPaddingInline(props)};\n\n svg {\n width: ${$button.smIconSize(props)};\n height: ${$button.smIconSize(props)};\n }\n `,\n md: css`\n height: ${$button.mdHeight(props)};\n font-size: ${$button.mdFontSize(props)};\n padding-inline: ${$button.mdPaddingInline(props)};\n\n svg {\n width: ${$button.mdIconSize(props)};\n height: ${$button.mdIconSize(props)};\n }\n `,\n lg: css`\n height: ${$button.lgHeight(props)};\n font-size: ${$button.lgFontSize(props)};\n padding-inline: ${$button.lgPaddingInline(props)};\n\n svg {\n width: ${$button.lgIconSize(props)};\n height: ${$button.lgIconSize(props)};\n }\n `,\n }\n\n return sizeMap[size] || sizeMap.md\n}\n\nexport const ButtonRoot = styled.button<{\n variant: ButtonVariant\n size: ButtonSize\n fullWidth: boolean\n isPressed: boolean\n isDisabled: boolean\n isLoading: boolean\n}>`\n ${(props) => css`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 字体样式 - 使用 CSS 变量 */\n font-family: var(--ksd-typography-font-family);\n font-weight: ${$button.fontWeight(props)};\n line-height: 1;\n white-space: nowrap;\n \n /* 边框样式 */\n border-width: 1px;\n border-style: solid;\n border-radius: ${$button.borderRadius(props)};\n \n /* 交互样式 */\n cursor: pointer;\n user-select: none;\n outline: none;\n \n /* 过渡动画 */\n transition: \n background ${$button.transition(props)},\n border-color ${$button.transition(props)},\n box-shadow ${$button.transition(props)},\n transform ${$button.transition(props)};\n\n /* 变体样式 */\n ${getVariantStyles(props.variant, props)}\n\n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n\n /* 全宽模式 */\n ${props.fullWidth && css`\n width: 100%;\n `}\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n\n /* 禁用状态 */\n &:disabled {\n cursor: not-allowed;\n opacity: ${$button.disabledOpacity(props)};\n background: ${$button.disabledBg(props)};\n color: ${$button.disabledText(props)};\n border-color: transparent;\n box-shadow: none;\n }\n\n /* 加载状态 - 阻止交互 */\n &[data-loading='true'] {\n pointer-events: none;\n }\n\n /* 加载状态 - 使用伪元素实现 cursor: wait */\n &[data-loading='true']::after {\n content: '';\n position: absolute;\n inset: 0;\n cursor: wait;\n pointer-events: auto;\n z-index: 10;\n }\n\n /* 添加旋转动画的关键帧 */\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n`\n\nexport const ButtonContent = styled.span`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ${$button.gap(props)};\n position: relative;\n `}\n`\n\nexport const IconWrapper = styled.span<{\n isLoading: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n transition: opacity ${$button.transition(props)};\n \n ${props.isLoading && css`\n opacity: 0;\n pointer-events: none;\n `}\n `}\n`\n\nexport const Label = styled.span<{\n isLoading: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \n transition: opacity ${$button.transition(props)};\n \n ${props.isLoading && css`\n opacity: 0.4;\n `}\n `}\n`\n","import { forwardRef, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n ButtonRoot,\n ButtonContent,\n IconWrapper,\n Label,\n buttonVariants,\n buttonSizes,\n type ButtonVariant,\n type ButtonSize,\n} from './Button.style'\n\nexport const VARIANTS = buttonVariants\nexport const SIZES = buttonSizes\n\nexport type ButtonProps = Omit<AriaButtonProps, 'elementType'> & {\n /** 按钮类型:主按钮、次按钮、文本按钮、危险按钮 */\n variant?: ButtonVariant\n /** 按钮尺寸:小号(24px)、标准(32px)、大号(40px) */\n size?: ButtonSize\n /** 前置图标 */\n icon?: ReactNode\n /** 加载状态 */\n loading?: boolean\n /** 全宽按钮 */\n fullWidth?: boolean\n /** 是否禁用(统一 API,优先级高于 isDisabled) */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n /** 子元素 */\n children?: ReactNode\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n icon,\n loading = false,\n fullWidth = false,\n disabled,\n isDisabled,\n className,\n style,\n children,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n\n // 按钮禁用状态:disabled 优先于 isDisabled,加载中也视为禁用\n const finalDisabled = (disabled ?? isDisabled) || loading\n\n // 使用 react-aria 的 useButton hook\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: finalDisabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <ButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n style,\n })}\n variant={variant}\n size={size}\n fullWidth={fullWidth}\n isPressed={isPressed}\n isDisabled={finalDisabled}\n isLoading={loading}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? 'true' : undefined}\n data-pressed={isPressed ? 'true' : undefined}\n >\n <ButtonContent>\n {/* 前置图标 */}\n {icon && (\n <IconWrapper isLoading={loading} aria-hidden=\"true\">\n {icon}\n </IconWrapper>\n )}\n\n {/* 按钮文本 */}\n <Label isLoading={loading}>{children}</Label>\n\n {/* 加载状态指示器 */}\n {loading && (\n <IconWrapper isLoading={false} aria-label=\"加载中\" role=\"status\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n animation: 'spin 0.8s linear infinite',\n }}\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"30 10\"\n />\n </svg>\n </IconWrapper>\n )}\n </ButtonContent>\n </ButtonRoot>\n )\n },\n)\n\nButton.displayName = 'Button'\n","/**\n * IconButton Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $iconButton } from './styled-tokens';\n\nexport const iconButtonAppearances = ['solid', 'outline', 'ghost'] as const\nexport const iconButtonTones = ['primary', 'neutral', 'danger'] as const\nexport const iconButtonSizes = ['sm', 'md', 'lg'] as const\n\nexport type IconButtonAppearance = (typeof iconButtonAppearances)[number]\nexport type IconButtonTone = (typeof iconButtonTones)[number]\nexport type IconButtonSize = (typeof iconButtonSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getVariantStyles = (appearance: IconButtonAppearance, tone: IconButtonTone, props: ThemeProps) => {\n const varKey = `${appearance}-${tone}`\n \n const variantMap: Record<string, ReturnType<typeof css>> = {\n 'solid-primary': css`\n background: ${$iconButton.solidPrimaryBg(props)};\n border-color: ${$iconButton.solidPrimaryBorder(props)};\n color: ${$iconButton.solidPrimaryIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidPrimaryBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidPrimaryBgActive(props)};\n transform: translateY(1px);\n }\n `,\n 'solid-neutral': css`\n background: ${$iconButton.solidNeutralBg(props)};\n border-color: ${$iconButton.solidNeutralBorder(props)};\n color: ${$iconButton.solidNeutralIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidNeutralBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidNeutralBgActive(props)};\n transform: translateY(1px);\n }\n `,\n 'solid-danger': css`\n background: ${$iconButton.solidDangerBg(props)};\n border-color: ${$iconButton.solidDangerBorder(props)};\n color: ${$iconButton.solidDangerIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidDangerBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.solidDangerBgActive(props)};\n transform: translateY(1px);\n }\n `,\n 'outline-primary': css`\n background: ${$iconButton.outlinePrimaryBg(props)};\n border-color: ${$iconButton.outlinePrimaryBorder(props)};\n color: ${$iconButton.outlinePrimaryIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlinePrimaryBgHover(props)};\n color: ${$iconButton.outlinePrimaryIconHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlinePrimaryBgActive(props)};\n color: ${$iconButton.outlinePrimaryIconActive(props)};\n transform: translateY(1px);\n }\n `,\n 'outline-neutral': css`\n background: ${$iconButton.outlineNeutralBg(props)};\n border-color: ${$iconButton.outlineNeutralBorder(props)};\n color: ${$iconButton.outlineNeutralIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlineNeutralBgHover(props)};\n border-color: ${$iconButton.outlineNeutralBorderHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlineNeutralBgActive(props)};\n border-color: ${$iconButton.outlineNeutralBorderHover(props)};\n transform: translateY(1px);\n }\n `,\n 'outline-danger': css`\n background: ${$iconButton.outlineDangerBg(props)};\n border-color: ${$iconButton.outlineDangerBorder(props)};\n color: ${$iconButton.outlineDangerIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlineDangerBgHover(props)};\n color: ${$iconButton.outlineDangerIconHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.outlineDangerBgActive(props)};\n color: ${$iconButton.outlineDangerIconActive(props)};\n transform: translateY(1px);\n }\n `,\n 'ghost-primary': css`\n background: ${$iconButton.ghostPrimaryBg(props)};\n border-color: ${$iconButton.ghostPrimaryBorder(props)};\n color: ${$iconButton.ghostPrimaryIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostPrimaryBgHover(props)};\n color: ${$iconButton.ghostPrimaryIconHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostPrimaryBgActive(props)};\n color: ${$iconButton.ghostPrimaryIconActive(props)};\n transform: translateY(1px);\n }\n `,\n 'ghost-neutral': css`\n background: ${$iconButton.ghostNeutralBg(props)};\n border-color: ${$iconButton.ghostNeutralBorder(props)};\n color: ${$iconButton.ghostNeutralIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostNeutralBgHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostNeutralBgActive(props)};\n transform: translateY(1px);\n }\n `,\n 'ghost-danger': css`\n background: ${$iconButton.ghostDangerBg(props)};\n border-color: ${$iconButton.ghostDangerBorder(props)};\n color: ${$iconButton.ghostDangerIcon(props)};\n\n &:hover:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostDangerBgHover(props)};\n color: ${$iconButton.ghostDangerIconHover(props)};\n }\n\n &:active:not(:disabled):not([data-loading='true']),\n &[data-pressed='true']:not(:disabled):not([data-loading='true']) {\n background: ${$iconButton.ghostDangerBgActive(props)};\n color: ${$iconButton.ghostDangerIconActive(props)};\n transform: translateY(1px);\n }\n `,\n }\n\n return variantMap[varKey] || variantMap['solid-primary']\n}\n\nconst getSizeStyles = (size: IconButtonSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n --icon-button-icon-size: ${$iconButton.smIconSize(props)};\n width: ${$iconButton.smEdge(props)};\n height: ${$iconButton.smEdge(props)};\n min-width: ${$iconButton.smEdge(props)};\n min-height: ${$iconButton.smEdge(props)};\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n }\n `,\n md: css`\n --icon-button-icon-size: ${$iconButton.mdIconSize(props)};\n width: ${$iconButton.mdEdge(props)};\n height: ${$iconButton.mdEdge(props)};\n min-width: ${$iconButton.mdEdge(props)};\n min-height: ${$iconButton.mdEdge(props)};\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n }\n `,\n lg: css`\n --icon-button-icon-size: ${$iconButton.lgIconSize(props)};\n width: ${$iconButton.lgEdge(props)};\n height: ${$iconButton.lgEdge(props)};\n min-width: ${$iconButton.lgEdge(props)};\n min-height: ${$iconButton.lgEdge(props)};\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n }\n `,\n }\n\n return sizeMap[size] || sizeMap.md\n}\n\nexport const IconButtonRoot = styled.button<{\n appearance: IconButtonAppearance\n tone: IconButtonTone\n size: IconButtonSize\n isPressed: boolean\n isDisabled: boolean\n isLoading: boolean\n}>`\n ${(props) => css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border-width: 1px;\n border-style: solid;\n border-radius: ${$iconButton.borderRadius(props)};\n padding: 0;\n cursor: pointer;\n user-select: none;\n line-height: 1;\n background: transparent;\n\n transition:\n background ${$iconButton.transition(props)},\n border-color ${$iconButton.transition(props)},\n color ${$iconButton.transition(props)},\n box-shadow ${$iconButton.transition(props)},\n transform ${$iconButton.transition(props)};\n\n ${getVariantStyles(props.appearance, props.tone, props)}\n ${getSizeStyles(props.size, props)}\n\n &:focus-visible {\n outline: ${$iconButton.focusRingWidth(props)} solid ${$iconButton.focusRingColor(props)};\n outline-offset: ${$iconButton.focusRingOffset(props)};\n }\n\n &:disabled {\n cursor: not-allowed;\n background: ${$iconButton.disabledBg(props)};\n border-color: ${$iconButton.disabledBorder(props)};\n color: ${$iconButton.disabledIcon(props)};\n opacity: ${$iconButton.disabledOpacity(props)};\n }\n\n &[data-loading='true'] {\n pointer-events: none;\n }\n\n @keyframes icon-button-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `}\n`\n\nexport const IconSlot = styled.span<{\n isHidden: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n transition: opacity ${$iconButton.transition(props)};\n pointer-events: none;\n\n ${props.isHidden && css`\n opacity: 0;\n `}\n `}\n`\n\nexport const LoadingSpinner = styled.span`\n position: absolute;\n inset: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n pointer-events: none;\n\n svg {\n width: var(--icon-button-icon-size);\n height: var(--icon-button-icon-size);\n animation: icon-button-spin 0.8s linear infinite;\n }\n`\n","import { forwardRef, useMemo, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton, VisuallyHidden } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n IconButtonRoot,\n IconSlot,\n LoadingSpinner,\n iconButtonAppearances,\n iconButtonTones,\n iconButtonSizes,\n type IconButtonAppearance,\n type IconButtonTone,\n type IconButtonSize,\n} from './IconButton.style'\n\nexport const ICON_BUTTON_APPEARANCES = iconButtonAppearances\nexport const ICON_BUTTON_TONES = iconButtonTones\nexport const ICON_BUTTON_SIZES = iconButtonSizes\n\nexport type IconButtonProps = Omit<AriaButtonProps, 'elementType' | 'children'> & {\n /** 图标按钮的视觉外观:实心、描边、幽灵 */\n appearance?: IconButtonAppearance\n /** 语义色彩:主题、自然、危险 */\n tone?: IconButtonTone\n /** 尺寸:24px / 32px / 40px */\n size?: IconButtonSize\n /** 需要展示的图标 */\n icon: ReactNode\n /** 提供屏幕阅读器可见文本(会以 VisuallyHidden 的形式注入) */\n label?: ReactNode\n /** 加载状态 */\n loading?: boolean\n /** 自定义加载状态的无障碍文本 */\n loadingLabel?: string\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n appearance = 'solid',\n tone = 'primary',\n size = 'md',\n icon,\n label,\n loading = false,\n loadingLabel = '加载中',\n isDisabled,\n className,\n style,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const isDevEnvironment = useMemo(() => {\n if (typeof globalThis === 'undefined') {\n return true\n }\n const nodeEnv =\n (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV\n return nodeEnv !== 'production'\n }, [])\n\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n const disabled = isDisabled || loading\n\n if (isDevEnvironment) {\n const ariaLabel = (ariaProps as Record<string, unknown>)['aria-label']\n const ariaLabelledby = (ariaProps as Record<string, unknown>)['aria-labelledby']\n if (!label && !ariaLabel && !ariaLabelledby) {\n console.warn(\n 'IconButton 需要可感知的文本。请传入 label、aria-label 或 aria-labelledby。',\n )\n }\n }\n\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: disabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <IconButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n style,\n })}\n appearance={appearance}\n tone={tone}\n size={size}\n isPressed={isPressed}\n isDisabled={Boolean(disabled)}\n isLoading={loading}\n data-appearance={appearance}\n data-tone={tone}\n data-size={size}\n data-loading={loading ? 'true' : undefined}\n data-pressed={isPressed ? 'true' : undefined}\n >\n <IconSlot isHidden={loading} aria-hidden=\"true\">\n {icon}\n </IconSlot>\n {loading && (\n <LoadingSpinner role=\"status\" aria-live=\"polite\" aria-label={loadingLabel}>\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"30 10\"\n />\n </svg>\n </LoadingSpinner>\n )}\n {label ? <VisuallyHidden>{label}</VisuallyHidden> : null}\n </IconButtonRoot>\n )\n },\n)\n\nIconButton.displayName = 'IconButton'\n\n","/**\n * Checkbox Styled Tokens\n *\n * 将 Checkbox 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Checkbox 组件的 Styled Tokens\n */\nexport const $checkbox = createStyledTokens({\n // ============================================================================\n // Control - 尺寸与边框\n // ============================================================================\n controlSize: ['components.checkbox.control.size', '--ksd-checkbox-control-size'],\n controlBorderRadius: ['components.checkbox.control.borderRadius', '--ksd-checkbox-control-border-radius'],\n controlBorderWidth: ['components.checkbox.control.borderWidth', '--ksd-checkbox-control-border-width'],\n \n // ============================================================================\n // Control - 背景\n // ============================================================================\n controlBg: ['components.checkbox.control.background.default', '--ksd-checkbox-control-bg'],\n controlBgChecked: ['components.checkbox.control.background.checked', '--ksd-checkbox-control-bg-checked'],\n controlBgDisabled: ['components.checkbox.control.background.disabled', '--ksd-checkbox-control-bg-disabled'],\n controlBgDisabledChecked: ['components.checkbox.control.background.disabledChecked', '--ksd-checkbox-control-bg-disabled-checked'],\n \n // ============================================================================\n // Control - 边框颜色\n // ============================================================================\n controlBorder: ['components.checkbox.control.borderColor.default', '--ksd-checkbox-control-border'],\n controlBorderHover: ['components.checkbox.control.borderColor.hover', '--ksd-checkbox-control-border-hover'],\n controlBorderChecked: ['components.checkbox.control.borderColor.checked', '--ksd-checkbox-control-border-checked'],\n controlBorderDisabled: ['components.checkbox.control.borderColor.disabled', '--ksd-checkbox-control-border-disabled'],\n controlBorderDisabledChecked: ['components.checkbox.control.borderColor.disabledChecked', '--ksd-checkbox-control-border-disabled-checked'],\n \n // ============================================================================\n // Control - 图标\n // ============================================================================\n iconColor: ['components.checkbox.control.icon.color', '--ksd-checkbox-icon-color'],\n iconSize: ['components.checkbox.control.icon.size', '--ksd-checkbox-icon-size'],\n \n // ============================================================================\n // Focus & Spacing\n // ============================================================================\n focusRing: ['components.checkbox.focusRing', '--ksd-checkbox-focus-ring'],\n gap: ['components.checkbox.gap', '--ksd-checkbox-gap'],\n \n // ============================================================================\n // Text - Label\n // ============================================================================\n labelFontSize: ['components.checkbox.text.label.fontSize', '--ksd-checkbox-label-font-size'],\n labelLineHeight: ['components.checkbox.text.label.lineHeight', '--ksd-checkbox-label-line-height'],\n labelColor: ['components.checkbox.text.label.color', '--ksd-checkbox-label-color'],\n labelColorDisabled: ['components.checkbox.text.label.disabled', '--ksd-checkbox-label-color-disabled'],\n labelFontWeight: ['components.checkbox.text.label.fontWeight', '--ksd-checkbox-label-font-weight'],\n \n // ============================================================================\n // Transition\n // ============================================================================\n transition: ['components.checkbox.transition', '--ksd-checkbox-transition'],\n});\n","/**\n * Checkbox Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport { $checkbox } from './styled-tokens';\n\nexport const CheckboxContainer = styled.label`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\nexport const CheckboxControl = styled.span<{\n isHovered?: boolean;\n isChecked?: boolean;\n isIndeterminate?: boolean;\n isDisabled?: boolean;\n}>`\n ${(props) => css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${$checkbox.controlSize(props)};\n height: ${$checkbox.controlSize(props)};\n border-radius: ${$checkbox.controlBorderRadius(props)};\n border: ${$checkbox.controlBorderWidth(props)} solid ${$checkbox.controlBorder(props)};\n background-color: ${$checkbox.controlBg(props)};\n transition: all ${$checkbox.transition(props)};\n \n /* Hover 状态 */\n ${props.isHovered && !props.isDisabled && css`\n border-color: ${$checkbox.controlBorderHover(props)};\n `}\n \n /* Checked 状态 */\n ${props.isChecked && !props.isDisabled && css`\n background-color: ${$checkbox.controlBgChecked(props)};\n border-color: ${$checkbox.controlBorderChecked(props)};\n `}\n \n /* Indeterminate 状态(半选) */\n ${props.isIndeterminate && !props.isDisabled && css`\n background-color: ${$checkbox.controlBgChecked(props)};\n border-color: ${$checkbox.controlBorderChecked(props)};\n `}\n \n /* Disabled 未选中状态 */\n ${props.isDisabled && !props.isChecked && !props.isIndeterminate && css`\n background-color: ${$checkbox.controlBgDisabled(props)};\n border-color: ${$checkbox.controlBorderDisabled(props)};\n `}\n \n /* Disabled 选中状态 */\n ${(props.isDisabled && props.isChecked) || (props.isDisabled && props.isIndeterminate) ? css`\n background-color: ${$checkbox.controlBgDisabledChecked(props)};\n border-color: ${$checkbox.controlBorderDisabledChecked(props)};\n ` : ''}\n \n /* Focus 状态 */\n input:focus-visible + & {\n box-shadow: ${$checkbox.focusRing(props)};\n }\n `}\n`;\n\nexport const CheckboxIcon = styled.span<{\n isChecked?: boolean;\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${$checkbox.iconColor(props)};\n width: ${$checkbox.iconSize(props)};\n height: ${$checkbox.iconSize(props)};\n opacity: 0;\n transform: scale(0.8);\n transition: all ${$checkbox.transition(props)};\n \n svg {\n width: 100%;\n height: 100%;\n }\n \n ${props.isChecked && css`\n opacity: 1;\n transform: scale(1);\n `}\n `}\n`;\n\nexport const CheckboxLabel = styled.span<{\n isDisabled?: boolean;\n}>`\n ${(props) => css`\n margin-left: ${$checkbox.gap(props)};\n font-size: ${$checkbox.labelFontSize(props)};\n line-height: ${$checkbox.labelLineHeight(props)};\n font-weight: ${$checkbox.labelFontWeight(props)};\n color: ${$checkbox.labelColor(props)};\n transition: color ${$checkbox.transition(props)};\n \n ${props.isDisabled && css`\n color: ${$checkbox.labelColorDisabled(props)};\n `}\n `}\n`;\n\n// ============================================================================\n// Legacy CSS exports for backward compatibility\n// ============================================================================\n\nexport const checkboxContainer = css`\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\nexport const checkboxControl = css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--ksd-checkbox-control-size);\n height: var(--ksd-checkbox-control-size);\n border-radius: var(--ksd-checkbox-control-border-radius);\n border: var(--ksd-checkbox-control-border-width) solid var(--ksd-checkbox-control-border);\n background-color: var(--ksd-checkbox-control-bg);\n transition: all var(--ksd-checkbox-transition);\n \n /* Hover 状态 */\n &[data-hover=\"true\"]:not([data-disabled=\"true\"]) {\n border-color: var(--ksd-checkbox-control-border-hover);\n }\n \n /* Checked 状态 */\n &[data-checked=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-checked);\n border-color: var(--ksd-checkbox-control-border-checked);\n }\n \n /* Indeterminate 状态(半选) */\n &[data-indeterminate=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-checked);\n border-color: var(--ksd-checkbox-control-border-checked);\n }\n \n /* Disabled 未选中状态 */\n &[data-disabled=\"true\"]:not([data-checked=\"true\"]):not([data-indeterminate=\"true\"]) {\n background-color: var(--ksd-checkbox-control-bg-disabled);\n border-color: var(--ksd-checkbox-control-border-disabled);\n }\n \n /* Disabled 选中状态 */\n &[data-disabled=\"true\"][data-checked=\"true\"],\n &[data-disabled=\"true\"][data-indeterminate=\"true\"] {\n background-color: var(--ksd-checkbox-control-bg-disabled-checked);\n border-color: var(--ksd-checkbox-control-border-disabled-checked);\n }\n \n /* Focus 状态 */\n input:focus-visible + & {\n box-shadow: var(--ksd-checkbox-focus-ring);\n }\n`;\n\nexport const checkboxIcon = css`\n color: var(--ksd-checkbox-icon-color);\n width: var(--ksd-checkbox-icon-size);\n height: var(--ksd-checkbox-icon-size);\n opacity: 0;\n transform: scale(0.8);\n transition: all var(--ksd-checkbox-transition);\n \n &[data-checked=\"true\"] {\n opacity: 1;\n transform: scale(1);\n }\n`;\n\nexport const checkboxLabel = css`\n margin-left: var(--ksd-checkbox-gap);\n font-size: var(--ksd-checkbox-label-font-size);\n line-height: var(--ksd-checkbox-label-line-height);\n font-weight: var(--ksd-checkbox-label-font-weight);\n color: var(--ksd-checkbox-label-color);\n transition: color var(--ksd-checkbox-transition);\n \n &[data-disabled=\"true\"] {\n color: var(--ksd-checkbox-label-color-disabled);\n }\n`;\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport {\n CheckboxContainer,\n CheckboxControl,\n CheckboxIcon,\n CheckboxLabel,\n} from './Checkbox.style';\n\nexport interface CheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange'> {\n /**\n * 是否选中\n */\n checked?: boolean;\n \n /**\n * 默认是否选中(非受控)\n */\n defaultChecked?: boolean;\n \n /**\n * 半选状态(用于全选场景)\n */\n indeterminate?: boolean;\n \n /**\n * 是否禁用\n */\n disabled?: boolean;\n \n /**\n * 标签文字\n */\n label?: React.ReactNode;\n \n /**\n * 值改变回调\n */\n onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 自定义样式\n */\n style?: React.CSSProperties;\n}\n\nconst CheckIconSvg: React.FC = () => {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.3332 4.5L5.99984 11.8333L2.6665 8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst IndeterminateIconSvg: React.FC = () => {\n return (\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.5 8H12.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (props, ref) => {\n const {\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n disabled = false,\n label,\n onChange,\n className,\n style,\n ...inputProps\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [hover, setHover] = useState(false);\n \n // 内部状态管理(非受控)\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n \n // 判断是否受控\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n // 合并 refs\n useEffect(() => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else {\n ref.current = inputRef.current;\n }\n }\n }, [ref]);\n\n // 设置 indeterminate 属性(原生 HTML 属性只能通过 JS 设置)\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // 处理点击\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newChecked = event.target.checked;\n \n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n \n onChange?.(newChecked, event);\n };\n\n return (\n <CheckboxContainer\n className={className}\n style={style}\n onMouseEnter={() => !disabled && setHover(true)}\n onMouseLeave={() => !disabled && setHover(false)}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n \n <CheckboxControl\n isHovered={hover}\n isChecked={checked && !indeterminate}\n isIndeterminate={indeterminate}\n isDisabled={disabled}\n >\n <CheckboxIcon isChecked={indeterminate || checked}>\n {indeterminate ? (\n <IndeterminateIconSvg />\n ) : (\n <CheckIconSvg />\n )}\n </CheckboxIcon>\n </CheckboxControl>\n \n {label && (\n <CheckboxLabel isDisabled={disabled}>\n {label}\n </CheckboxLabel>\n )}\n </CheckboxContainer>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import { jsx as e, jsxs as i } from \"react/jsx-runtime\";\nimport { forwardRef as n } from \"react\";\nconst t = n(\n ({\n children: l,\n size: r = 24,\n color: o = \"currentColor\",\n viewBox: d = \"0 0 24 24\",\n useFill: u = !1,\n strokeWidth: s = 1.5,\n ...a\n }, c) => {\n const C = {\n ref: c,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: r,\n height: r,\n viewBox: d,\n ...a\n };\n return u ? /* @__PURE__ */ e(\"svg\", { ...C, fill: o, children: l }) : /* @__PURE__ */ e(\n \"svg\",\n {\n ...C,\n fill: \"none\",\n stroke: o,\n strokeWidth: s,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: l\n }\n );\n }\n);\nt.displayName = \"IconBase\";\nconst h = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 22 22\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M0.31074 10.9704C0.310783 10.5562 0.646483 10.2205 1.06066 10.2205L10.2213 10.2218L10.222 1.06742C10.2223 0.653481 10.5579 0.317504 10.9719 0.317505C11.3858 0.317611 11.7215 0.653547 11.7218 1.06742L11.7211 10.2218L20.8824 10.2225C21.2965 10.2227 21.6324 10.5583 21.6324 10.9724C21.6323 11.3865 21.2965 11.7222 20.8824 11.7224L11.7211 11.7217L11.7218 20.8706C11.7218 21.2847 11.386 21.6204 10.9719 21.6205C10.5577 21.6205 10.222 21.2847 10.222 20.8706L10.2213 11.7217L1.06066 11.7203C0.646473 11.7202 0.310739 11.3845 0.31074 10.9704Z\",\n fill: \"currentColor\"\n }\n) }));\nh.displayName = \"AddOutline\";\nconst L = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M5 12h14m0 0l-7-7m7 7l-7 7\" }) }));\nL.displayName = \"ArrowRightOutline\";\nconst p = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M19 12H5m0 0l7-7m-7 7l7 7\" }) }));\np.displayName = \"ArrowLeftOutline\";\nconst k = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.80273 8.19824C3.38873 8.19824 3.05273 7.86224 3.05273 7.44824V5.30124C3.06573 2.36324 5.44173 0.000244141 8.35473 0.000244141H8.37473C10.6307 0.000244141 12.6447 1.43324 13.3837 3.56724C13.5197 3.95824 13.3117 4.38524 12.9197 4.52124C12.5287 4.65824 12.1017 4.44924 11.9657 4.05724C11.4367 2.52824 9.99173 1.50024 8.37173 1.50024H8.35773C6.26573 1.50024 4.56173 3.19424 4.55273 5.28424V7.44824C4.55273 7.86224 4.21673 8.19824 3.80273 8.19824Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.542 8.12695C2.864 8.12695 1.5 9.49195 1.5 11.17V15.458C1.5 17.136 2.864 18.501 4.542 18.501H12.184C13.861 18.501 15.226 17.136 15.226 15.458V11.17C15.226 9.49195 13.861 8.12695 12.184 8.12695H4.542ZM12.184 20.001H4.542C2.037 20.001 0 17.963 0 15.458V11.17C0 8.66495 2.037 6.62695 4.542 6.62695H12.184C14.688 6.62695 16.726 8.66495 16.726 11.17V15.458C16.726 17.963 14.688 20.001 12.184 20.001Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.36328 15.1748C7.94928 15.1748 7.61328 14.8388 7.61328 14.4248V12.2028C7.61328 11.7888 7.94928 11.4528 8.36328 11.4528C8.77728 11.4528 9.11328 11.7888 9.11328 12.2028V14.4248C9.11328 14.8388 8.77728 15.1748 8.36328 15.1748Z\"\n }\n )\n] }));\nk.displayName = \"UnlockOutline\";\nconst M = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10 1.5C5.313 1.5 1.5 5.313 1.5 10C1.5 14.687 5.313 18.5 10 18.5C14.687 18.5 18.5 14.687 18.5 10C18.5 5.313 14.687 1.5 10 1.5ZM10 20C4.486 20 0 15.514 0 10C0 4.486 4.486 0 10 0C15.514 0 20 4.486 20 10C20 15.514 15.514 20 10 20Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.55858 14.2207C8.36658 14.2207 8.17358 14.1477 8.02758 13.9997C7.73558 13.7057 7.73658 13.2317 8.02958 12.9397L10.9816 9.99968L8.02958 7.06068C7.73658 6.76868 7.73558 6.29368 8.02758 5.99968C8.31958 5.70468 8.79358 5.70668 9.08758 5.99768L12.5736 9.46868C12.7146 9.60968 12.7936 9.80068 12.7936 9.99968C12.7936 10.1997 12.7146 10.3907 12.5736 10.5317L9.08758 14.0017C8.94158 14.1477 8.74958 14.2207 8.55858 14.2207Z\"\n }\n )\n] }));\nM.displayName = \"ArrowRightCircleOutline\";\nconst v = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M9 6l6 6-6 6\" }) }));\nv.displayName = \"ChevronRightOutline\";\nconst m = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M15 6l-6 6 6 6\" }) }));\nm.displayName = \"ChevronLeftOutline\";\nconst R = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M6 9l6 6 6-6\" }) }));\nR.displayName = \"ChevronDownOutline\";\nconst f = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M18 15l-6-6-6 6\" }) }));\nf.displayName = \"ChevronUpOutline\";\nconst O = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M12 5v14m-7-7h14\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }));\nO.displayName = \"PlusOutline\";\nconst H = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M11 2H9C4 2 2 4 2 9v6c0 5 2 7 7 7h6c5 0 7-2 7-7v-2\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M16.04 3.02001L8.16 10.9C7.86 11.2 7.56 11.79 7.5 12.22L7.07 15.23C6.91 16.32 7.68 17.08 8.77 16.93L11.78 16.5C12.2 16.44 12.79 16.14 13.1 15.84L20.98 7.96001C22.34 6.60001 22.98 5.02001 20.98 3.02001C18.98 1.02001 17.4 1.66001 16.04 3.02001Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M14.91 4.1499C15.58 6.5399 17.45 8.4099 19.85 9.0899\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n )\n] }));\nH.displayName = \"EditSquareOutline\";\nconst V = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M13.26 3.6L5.05 12.29C4.74 12.62 4.44 13.27 4.38 13.72L4.01 16.96C3.88 18.13 4.72 18.93 5.88 18.73L9.1 18.18C9.55 18.1 10.18 17.77 10.49 17.43L18.7 8.74C20.12 7.24 20.76 5.53 18.55 3.44C16.35 1.37 14.68 2.1 13.26 3.6Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M11.89 5.05C12.32 7.81 14.56 9.92 17.34 10.2\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M3 22H21\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }\n )\n] }));\nV.displayName = \"EditOutline\";\nconst y = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M21 5.98C17.67 5.65 14.32 5.48 10.98 5.48C9 5.48 7.02 5.58 5.04 5.78L3 5.98M8.5 4.97L8.72 3.66C8.88 2.71 9 2 10.69 2H13.31C15 2 15.13 2.75 15.28 3.67L15.5 4.97M18.85 9.14L18.2 19.21C18.09 20.78 18 22 15.21 22H8.79C6 22 5.91 20.78 5.8 19.21L5.15 9.14M10.33 16.5H13.66M9.5 12.5H14.5\" }) }));\ny.displayName = \"DeleteOutline\";\nconst Z = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M17 20.5H7C4 20.5 2 19 2 15.5V8.5C2 5 4 3.5 7 3.5H17C20 3.5 22 5 22 8.5V15.5C22 19 20 20.5 17 20.5Z\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M17 9L13.87 11.5C12.84 12.32 11.15 12.32 10.12 11.5L7 9\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeMiterlimit: \"10\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n )\n] }));\nZ.displayName = \"MessageOutline\";\nconst w = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"11.7666\",\n cy: \"11.7666\",\n r: \"8.98856\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M18.0183 18.4851L21.5423 22\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n }\n )\n] }));\nw.displayName = \"SearchOutline\";\nconst N = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 22 22\", useFill: !0, children: [\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M7.5979 15.5596C7.1839 15.5596 6.8479 15.2236 6.8479 14.8096V11.0646C6.8479 10.6506 7.1839 10.3146 7.5979 10.3146C8.0119 10.3146 8.3479 10.6506 8.3479 11.0646V14.8096C8.3479 15.2236 8.0119 15.5596 7.5979 15.5596Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M9.50862 13.6865H5.68762C5.27362 13.6865 4.93762 13.3505 4.93762 12.9365C4.93762 12.5225 5.27362 12.1865 5.68762 12.1865H9.50862C9.92262 12.1865 10.2586 12.5225 10.2586 12.9365C10.2586 13.3505 9.92262 13.6865 9.50862 13.6865Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M14.116 11.9287H14.009C13.595 11.9287 13.259 11.5927 13.259 11.1787C13.259 10.7647 13.595 10.4287 14.009 10.4287H14.116C14.53 10.4287 14.866 10.7647 14.866 11.1787C14.866 11.5927 14.53 11.9287 14.116 11.9287Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M15.9295 15.5029H15.8225C15.4085 15.5029 15.0725 15.1669 15.0725 14.7529C15.0725 14.3389 15.4085 14.0029 15.8225 14.0029H15.9295C16.3435 14.0029 16.6795 14.3389 16.6795 14.7529C16.6795 15.1669 16.3435 15.5029 15.9295 15.5029Z\", fill: \"currentColor\" }),\n /* @__PURE__ */ e(\"mask\", { id: \"mask0_6909_3794\", style: { maskType: \"luminance\" }, maskUnits: \"userSpaceOnUse\", x: \"6\", y: \"0\", width: \"7\", height: \"6\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M6.07166 0H12.1117V5.5879H6.07166V0Z\", fill: \"white\" }) }),\n /* @__PURE__ */ e(\"g\", { mask: \"url(#mask0_6909_3794)\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M11.3617 5.58788C10.9477 5.58788 10.6117 5.25188 10.6117 4.83788V4.16288C10.6087 3.43888 9.99466 2.84388 9.24366 2.84088H8.18966C7.02266 2.84088 6.07166 1.90288 6.07166 0.749878C6.07166 0.335878 6.40766 -0.00012207 6.82166 -0.00012207C7.23666 -0.00012207 7.57166 0.335878 7.57166 0.749878C7.57166 1.07588 7.84866 1.34088 8.18966 1.34088H9.24666C10.8197 1.34588 12.1047 2.60988 12.1117 4.15888V4.83788C12.1117 5.25188 11.7757 5.58788 11.3617 5.58788Z\", fill: \"currentColor\" }) }),\n /* @__PURE__ */ e(\"mask\", { id: \"mask1_6909_3794\", style: { maskType: \"luminance\" }, maskUnits: \"userSpaceOnUse\", x: \"0\", y: \"4\", width: \"22\", height: \"18\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M0 4.37329H21.4998V21.5H0V4.37329Z\", fill: \"white\" }) }),\n /* @__PURE__ */ e(\"g\", { mask: \"url(#mask1_6909_3794)\", children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M10.701 5.87304C9.225 5.87304 7.767 5.88604 6.335 5.91004C3.528 5.91004 1.5 7.88804 1.5 10.612V15.262C1.5 17.985 3.528 19.963 6.323 19.963C9.27 20.012 12.241 20.012 15.165 19.963H15.178C17.972 19.963 20 17.985 20 15.262V10.612C20 7.88804 17.972 5.91004 15.178 5.91004C13.674 5.88604 12.179 5.87304 10.701 5.87304ZM10.754 21.5C9.271 21.5 7.786 21.487 6.31 21.463C2.659 21.463 0 18.854 0 15.262V10.612C0 7.01904 2.659 4.41004 6.323 4.41004C9.192 4.36104 12.18 4.36104 15.19 4.41004C18.841 4.41004 21.5 7.01904 21.5 10.612V15.262C21.5 18.852 18.845 21.46 15.184 21.463C13.716 21.487 12.236 21.5 10.754 21.5Z\", fill: \"currentColor\" }) })\n] }));\nN.displayName = \"GameOutline\";\nconst g = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 12 12\", useFill: !0, children: /* @__PURE__ */ e(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M9.41575 3.81219C9.53779 3.93423 9.53779 4.1321 9.41575 4.25414L4.90757 8.76231L2.58467 6.4468C2.46243 6.32496 2.46212 6.12709 2.58396 6.00486L2.93695 5.65074C3.05879 5.52851 3.25666 5.52819 3.37889 5.65004L3.46421 5.73508L4.90631 7.17259L8.62025 3.45864C8.74229 3.3366 8.94015 3.3366 9.06219 3.45864L9.41575 3.81219Z\", fill: \"currentColor\" }) }));\ng.displayName = \"CheckOutline\";\nconst x = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M18 6L6 18M6 6l12 12\" }) }));\nx.displayName = \"CloseOutline\";\nconst j = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 20 19\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.74992 1.5C9.65892 1.5 9.43492 1.525 9.31592 1.763L7.48992 5.414C7.20092 5.991 6.64392 6.392 5.99992 6.484L1.91192 7.073C1.64192 7.112 1.54992 7.312 1.52192 7.396C1.49692 7.477 1.45692 7.683 1.64292 7.861L4.59892 10.701C5.06992 11.154 5.28392 11.807 5.17192 12.446L4.47592 16.456C4.43292 16.707 4.58992 16.853 4.65992 16.903C4.73392 16.959 4.93192 17.07 5.17692 16.942L8.83192 15.047C9.40792 14.75 10.0939 14.75 10.6679 15.047L14.3219 16.941C14.5679 17.068 14.7659 16.957 14.8409 16.903C14.9109 16.853 15.0679 16.707 15.0249 16.456L14.3269 12.446C14.2149 11.807 14.4289 11.154 14.8999 10.701L17.8559 7.861C18.0429 7.683 18.0029 7.476 17.9769 7.396C17.9499 7.312 17.8579 7.112 17.5879 7.073L13.4999 6.484C12.8569 6.392 12.2999 5.991 12.0109 5.413L10.1829 1.763C10.0649 1.525 9.84092 1.5 9.74992 1.5ZM4.94692 18.5C4.53392 18.5 4.12392 18.37 3.77292 18.114C3.16692 17.67 2.86992 16.937 2.99892 16.199L3.69492 12.189C3.72092 12.04 3.66992 11.889 3.55992 11.783L0.603916 8.943C0.0599161 8.422 -0.135084 7.652 0.0949161 6.937C0.326916 6.214 0.940916 5.697 1.69792 5.589L5.78592 5C5.94392 4.978 6.07992 4.881 6.14792 4.743L7.97492 1.091C8.31192 0.418 8.99192 0 9.74992 0C10.5079 0 11.1879 0.418 11.5249 1.091L13.3529 4.742C13.4219 4.881 13.5569 4.978 13.7139 5L17.8019 5.589C18.5589 5.697 19.1729 6.214 19.4049 6.937C19.6349 7.652 19.4389 8.422 18.8949 8.943L15.9389 11.783C15.8289 11.889 15.7789 12.04 15.8049 12.188L16.5019 16.199C16.6299 16.938 16.3329 17.671 15.7259 18.114C15.1109 18.565 14.3099 18.626 13.6309 18.272L9.97792 16.379C9.83492 16.305 9.66392 16.305 9.52092 16.379L5.86792 18.273C5.57592 18.425 5.26092 18.5 4.94692 18.5Z\",\n fill: \"currentColor\"\n }\n) }));\nj.displayName = \"StartOutline\";\nconst B = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 20 19\", useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.5 11.979V14.024C1.5 14.73 1.774 15.393 2.273 15.892C2.772 16.391 3.436 16.666 4.141 16.666H15.857C17.313 16.666 18.499 15.482 18.5 14.026V11.978C17.214 11.645 16.261 10.474 16.26 9.085C16.26 7.696 17.213 6.525 18.499 6.191L18.5 4.146C18.501 2.688 17.318 1.501 15.861 1.5H4.144C2.687 1.5 1.501 2.685 1.5 4.142V6.259C1.986 6.375 2.437 6.614 2.812 6.964C3.381 7.495 3.709 8.215 3.737 8.993C3.74 10.459 2.787 11.643 1.5 11.979ZM15.857 18.166H4.142C3.035 18.166 1.995 17.736 1.212 16.953C0.43 16.17 0 15.13 0 14.024V11.324C0 10.91 0.336 10.574 0.75 10.574C1.574 10.573 2.24 9.905 2.239 9.085C2.225 8.667 2.065 8.319 1.789 8.061C1.514 7.803 1.158 7.662 0.776 7.683C0.569 7.685 0.375 7.614 0.229 7.473C0.083 7.332 0 7.136 0 6.933V4.143C0.001 1.858 1.86 0 4.144 0H15.856C18.146 0.001 20.002 1.863 20 4.147V6.846C20 7.26 19.664 7.596 19.25 7.596C18.429 7.596 17.76 8.264 17.76 9.084C17.761 9.906 18.429 10.574 19.25 10.574C19.664 10.574 20 10.91 20 11.324V14.024C19.999 16.308 18.14 18.166 15.857 18.166Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.10395 8.38103L8.61295 8.87703C8.88895 9.14803 9.01395 9.53403 8.94795 9.91103L8.82795 10.609L9.45695 10.278C9.79595 10.097 10.203 10.098 10.545 10.28L11.17 10.608L11.05 9.90903C10.987 9.52603 11.113 9.14303 11.386 8.87703L11.8949 8.38103L11.1899 8.27903C10.812 8.22403 10.484 7.98603 10.3149 7.64103L9.99995 7.00403L9.68495 7.64203C9.51595 7.98603 9.18795 8.22403 8.80795 8.27903L8.10395 8.38103ZM11.6179 12.387C11.432 12.387 11.246 12.342 11.074 12.251L9.99995 11.688L8.92495 12.252C8.52895 12.459 8.05795 12.426 7.69795 12.164C7.33695 11.901 7.15995 11.465 7.23495 11.025L7.43995 9.82903L6.57095 8.98203C6.25195 8.67103 6.13795 8.21403 6.27495 7.79003C6.41295 7.36503 6.77295 7.06003 7.21395 6.99603L8.41795 6.82003L8.95495 5.73103C9.15195 5.33103 9.55195 5.08203 9.99995 5.08203C10.446 5.08203 10.847 5.33103 11.044 5.73203L11.582 6.82003L12.784 6.99603C13.226 7.06003 13.5869 7.36503 13.7239 7.79003C13.8609 8.21403 13.748 8.67103 13.4279 8.98303L12.558 9.83003L12.7639 11.025C12.8389 11.466 12.661 11.903 12.299 12.165C12.095 12.312 11.8569 12.387 11.6179 12.387Z\"\n }\n )\n] }));\nB.displayName = \"TicketOutline\";\nconst F = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, viewBox: \"0 0 20 20\", useFill: !0, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10 1.5C5.313 1.5 1.5 5.313 1.5 10C1.5 14.687 5.313 18.5 10 18.5C14.687 18.5 18.5 14.687 18.5 10C18.5 5.313 14.687 1.5 10 1.5ZM10 20C4.486 20 0 15.514 0 10C0 4.486 4.486 0 10 0C15.514 0 20 4.486 20 10C20 15.514 15.514 20 10 20Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M13.9482 11.0137C13.3952 11.0137 12.9432 10.5667 12.9432 10.0137C12.9432 9.46067 13.3862 9.01367 13.9382 9.01367H13.9482C14.5012 9.01367 14.9482 9.46067 14.9482 10.0137C14.9482 10.5667 14.5012 11.0137 13.9482 11.0137Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.93845 11.0137C9.38545 11.0137 8.93445 10.5667 8.93445 10.0137C8.93445 9.46067 9.37645 9.01367 9.92945 9.01367H9.93845C10.4914 9.01367 10.9384 9.46067 10.9384 10.0137C10.9384 10.5667 10.4914 11.0137 9.93845 11.0137Z\",\n fill: \"currentColor\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5.92968 11.0137C5.37668 11.0137 4.92468 10.5667 4.92468 10.0137C4.92468 9.46067 5.36768 9.01367 5.92068 9.01367H5.92968C6.48268 9.01367 6.92968 9.46067 6.92968 10.0137C6.92968 10.5667 6.48268 11.0137 5.92968 11.0137Z\",\n fill: \"currentColor\"\n }\n )\n] }));\nF.displayName = \"MoreCircleOutline\";\nconst A = n((l, r) => /* @__PURE__ */ i(t, { ref: r, ...l, children: [\n /* @__PURE__ */ e(\"path\", { d: \"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"15.5\", cy: \"12\", r: \"1\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"11.5\", cy: \"12\", r: \"1\" }),\n /* @__PURE__ */ e(\"circle\", { cx: \"7.5\", cy: \"12\", r: \"1\" })\n] }));\nA.displayName = \"MoreSquareOutline\";\nconst S = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 19 19\", useFill: !0, children: /* @__PURE__ */ e(\"path\", { d: \"M12.2871 7.28027C11.9093 7.28115 11.596 7.00252 11.543 6.63965L11.5352 6.5293L11.5488 0.749023C11.5498 0.33481 11.8866 -0.000957489 12.3008 0C12.6771 0.00109291 12.9883 0.279963 13.041 0.641602L13.0488 0.751953L13.0371 5.77832L18.0635 5.76758C18.4777 5.76662 18.8145 6.10141 18.8154 6.51562C18.8163 6.89214 18.5392 7.20439 18.1777 7.25879L18.0674 7.26758L12.2871 7.28027ZM6.51465 18.8164C6.1383 18.8153 5.82712 18.5364 5.77441 18.1748L5.7666 18.0645L5.77832 13.0371L0.751953 13.0488C0.375542 13.0497 0.0633717 12.7734 0.00878906 12.4121L0 12.3008C-0.000797272 11.9243 0.276207 11.612 0.637695 11.5576L0.748047 11.5488L6.52832 11.5361C6.90611 11.5353 7.2194 11.8139 7.27246 12.1768L7.28027 12.2871L7.2666 18.0674C7.26564 18.4816 6.92886 18.8174 6.51465 18.8164Z\" }) }));\nS.displayName = \"ShrinkOutline\";\nconst W = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M21 9V3h-6M3 15v6h6M21 3l-7 7M10 14l-7 7\" }) }));\nW.displayName = \"ExpandOutline\";\nconst U = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, viewBox: \"0 0 20 20\", useFill: !0, children: /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.773 9.59876C6.791 9.61476 6.808 9.62976 6.825 9.64776C7.904 10.7538 8.499 12.2188 8.499 13.7738V17.7578L10.735 16.5398C10.911 16.4438 11.02 16.2558 11.02 16.0488V13.7618C11.02 12.2128 11.609 10.7528 12.678 9.65276L17.515 4.50776C17.828 4.17476 18 3.73776 18 3.27676V2.34076C18 1.87676 17.634 1.49976 17.186 1.49976H2.315C1.866 1.49976 1.5 1.87676 1.5 2.34076V3.27676C1.5 3.73776 1.672 4.17476 1.985 4.50676L6.773 9.59876ZM8.146 19.5008C7.944 19.5008 7.744 19.4468 7.562 19.3388C7.21 19.1288 6.999 18.7578 6.999 18.3458V13.7738C6.999 12.6388 6.576 11.5698 5.805 10.7508C5.782 10.7318 5.759 10.7108 5.739 10.6888L0.893 5.53576C0.317 4.92376 0 4.12076 0 3.27676V2.34076C0 1.04976 1.039 -0.000244141 2.315 -0.000244141H17.186C18.461 -0.000244141 19.5 1.04976 19.5 2.34076V3.27676C19.5 4.11976 19.183 4.92176 18.609 5.53476L13.762 10.6888C12.959 11.5168 12.52 12.6058 12.52 13.7618V16.0488C12.52 16.8048 12.111 17.4968 11.453 17.8568L8.692 19.3608C8.52 19.4538 8.333 19.5008 8.146 19.5008Z\",\n fill: \"currentColor\"\n }\n) }));\nU.displayName = \"FunnelOutline\";\nconst _ = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M2 12H22\", stroke: \"currentColor\", strokeWidth: \"1.5\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }) }));\n_.displayName = \"MinusOutline\";\nconst E = n((l, r) => /* @__PURE__ */ i(t, { ref: r, useFill: !0, ...l, children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M4.25 12a.75.75 0 0 1 .75-.75h14a.75.75 0 0 1 0 1.5H5a.75.75 0 0 1-.75-.75Z\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.47 4.47a.75.75 0 0 1 1.06 0l7 7a.75.75 0 0 1 0 1.06l-7 7a.75.75 0 1 1-1.06-1.06L18.94 12l-6.47-6.47a.75.75 0 0 1 0-1.06Z\"\n }\n )\n] }));\nE.displayName = \"ArrowRightBold\";\nconst q = n((l, r) => /* @__PURE__ */ e(t, { ref: r, ...l, children: /* @__PURE__ */ e(\"path\", { d: \"M5 12h7m5 0h2m-2 0l-7-7m7 7l-7 7\" }) }));\nq.displayName = \"ArrowRightBroken\";\nexport {\n h as AddOutline,\n p as ArrowLeftOutline,\n E as ArrowRightBold,\n q as ArrowRightBroken,\n M as ArrowRightCircleOutline,\n L as ArrowRightOutline,\n g as CheckOutline,\n R as ChevronDownOutline,\n m as ChevronLeftOutline,\n v as ChevronRightOutline,\n f as ChevronUpOutline,\n x as CloseOutline,\n y as DeleteOutline,\n V as EditOutline,\n H as EditSquareOutline,\n W as ExpandOutline,\n U as FunnelOutline,\n N as GameOutline,\n t as IconBase,\n Z as MessageOutline,\n _ as MinusOutline,\n F as MoreCircleOutline,\n A as MoreSquareOutline,\n O as PlusOutline,\n w as SearchOutline,\n S as ShrinkOutline,\n j as StartOutline,\n B as TicketOutline,\n k as UnlockOutline\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * CheckboxButton Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\n\nexport type CheckboxButtonSize = 'sm' | 'md' | 'lg';\n\ninterface CheckboxButtonSizeConfig {\n paddingX: number;\n paddingY: number;\n gap: number;\n minHeight: number;\n fontSize: number;\n lineHeight: number;\n checkmarkSize: number;\n checkmarkIcon: number;\n}\n\nexport const checkboxButtonSizeTokens: Record<CheckboxButtonSize, CheckboxButtonSizeConfig> = {\n sm: {\n paddingX: 12,\n paddingY: 5,\n gap: 8,\n minHeight: 28,\n fontSize: 12,\n lineHeight: 18,\n checkmarkSize: 10,\n checkmarkIcon: 7,\n },\n md: {\n paddingX: 16,\n paddingY: 7,\n gap: 10,\n minHeight: 32,\n fontSize: 12,\n lineHeight: 18,\n checkmarkSize: 12,\n checkmarkIcon: 8,\n },\n lg: {\n paddingX: 20,\n paddingY: 9,\n gap: 12,\n minHeight: 38,\n fontSize: 14,\n lineHeight: 20,\n checkmarkSize: 14,\n checkmarkIcon: 9,\n },\n};\n\nexport const CheckboxButtonContainer = styled.label`\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n /* 隐藏原生 checkbox */\n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\nexport const CheckboxButtonWrapper = styled.span<{\n size: CheckboxButtonSize;\n isHovered?: boolean;\n isChecked?: boolean;\n isDisabled?: boolean;\n}>`\n ${(props) => {\n const sizeToken = checkboxButtonSizeTokens[props.size];\n \n return css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 尺寸与间距 - 按照设计稿 */\n padding: ${sizeToken.paddingY}px ${sizeToken.paddingX}px;\n gap: ${sizeToken.gap}px;\n min-height: ${sizeToken.minHeight}px;\n \n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-size: ${sizeToken.fontSize}px;\n line-height: ${sizeToken.lineHeight}px;\n font-weight: 400;\n white-space: nowrap;\n \n /* 边框与圆角 */\n border: 1px solid var(--ksd-border-primary);\n border-radius: 4px;\n \n /* 默认状态 - 未选中 */\n background-color: var(--ksd-background-surface);\n color: var(--ksd-text-secondary);\n \n /* 过渡动画 */\n transition: \n background-color 0.2s ease,\n border-color 0.2s ease,\n color 0.2s ease;\n \n /* Hover 状态 - 未选中 */\n ${props.isHovered && !props.isChecked && !props.isDisabled && css`\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n `}\n \n /* Checked 状态 - 已选中 */\n ${props.isChecked && !props.isDisabled && css`\n background-color: var(--ksd-brand-primary-subtle);\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n `}\n \n /* Disabled 未选中状态 */\n ${props.isDisabled && !props.isChecked && css`\n background-color: var(--ksd-background-surface-subtle);\n border-color: var(--ksd-border-primary);\n color: var(--ksd-text-disabled);\n `}\n \n /* Disabled 选中状态 */\n ${props.isDisabled && props.isChecked && css`\n background-color: var(--ksd-background-surface-subtle);\n border-color: var(--ksd-border-strong);\n color: var(--ksd-text-disabled);\n `}\n \n /* Focus 状态 - 键盘导航 */\n input:focus-visible + & {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n `;\n }}\n`;\n\nexport const CheckboxButtonCheckmark = styled.span<{\n size: CheckboxButtonSize;\n isDisabled?: boolean;\n}>`\n ${(props) => {\n const { checkmarkSize, checkmarkIcon } = checkboxButtonSizeTokens[props.size];\n \n return css`\n position: absolute;\n bottom: 0;\n right: 0;\n \n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n \n /* 勾选标记的背景三角形区域 */\n width: ${checkmarkSize}px;\n height: ${checkmarkSize}px;\n overflow: hidden;\n \n /* 过渡动画 */\n transition: background-color 0.2s ease;\n \n /* 背景三角形 */\n &::before {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 0 ${checkmarkSize}px ${checkmarkSize}px;\n border-color: transparent transparent var(--ksd-brand-primary) transparent;\n transition: border-color 0.2s ease;\n }\n \n /* 禁用状态的背景 */\n ${props.isDisabled && css`\n &::before {\n border-color: transparent transparent var(--ksd-border-strong) transparent;\n }\n `}\n \n /* 图标样式 */\n svg {\n position: relative;\n color: var(--ksd-text-on-brand);\n width: ${checkmarkIcon}px;\n height: ${checkmarkIcon}px;\n margin: 0;\n z-index: 1;\n }\n \n /* 禁用状态的图标 */\n ${props.isDisabled && css`\n svg {\n color: var(--ksd-background-surface-subtle);\n }\n `}\n `;\n }}\n`;\n\n// ============================================================================\n// Legacy CSS exports for backward compatibility\n// ============================================================================\n\nexport const checkboxButtonContainer = css`\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n /* 隐藏原生 checkbox */\n input[type=\"checkbox\"] {\n position: absolute;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n white-space: nowrap;\n overflow: hidden;\n left: -9999px;\n -webkit-appearance: none;\n appearance: none;\n }\n \n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n }\n`;\n\nexport const checkboxButtonWrapper = (size: CheckboxButtonSize = 'md') => {\n const sizeToken = checkboxButtonSizeTokens[size];\n \n return css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 尺寸与间距 - 按照设计稿 */\n padding: ${sizeToken.paddingY}px ${sizeToken.paddingX}px;\n gap: ${sizeToken.gap}px;\n min-height: ${sizeToken.minHeight}px;\n \n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-size: ${sizeToken.fontSize}px;\n line-height: ${sizeToken.lineHeight}px;\n font-weight: 400;\n white-space: nowrap;\n \n /* 边框与圆角 */\n border: 1px solid var(--ksd-border-primary);\n border-radius: 4px;\n \n /* 默认状态 - 未选中 */\n background-color: var(--ksd-background-surface);\n color: var(--ksd-text-secondary);\n \n /* 过渡动画 */\n transition: \n background-color 0.2s ease,\n border-color 0.2s ease,\n color 0.2s ease;\n \n /* Hover 状态 - 未选中 */\n &[data-hover=\"true\"]:not([data-checked=\"true\"]):not([data-disabled=\"true\"]) {\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n }\n \n /* Checked 状态 - 已选中 */\n &[data-checked=\"true\"]:not([data-disabled=\"true\"]) {\n background-color: var(--ksd-brand-primary-subtle);\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n }\n \n /* Disabled 未选中状态 */\n &[data-disabled=\"true\"]:not([data-checked=\"true\"]) {\n background-color: var(--ksd-background-surface-subtle);\n border-color: var(--ksd-border-primary);\n color: var(--ksd-text-disabled);\n }\n \n /* Disabled 选中状态 */\n &[data-disabled=\"true\"][data-checked=\"true\"] {\n background-color: var(--ksd-background-surface-subtle);\n border-color: var(--ksd-border-strong);\n color: var(--ksd-text-disabled);\n }\n \n /* Focus 状态 - 键盘导航 */\n input:focus-visible + & {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n `;\n};\n\nexport const checkboxButtonCheckmark = (size: CheckboxButtonSize = 'md') => {\n const { checkmarkSize, checkmarkIcon } = checkboxButtonSizeTokens[size];\n \n return css`\n position: absolute;\n bottom: 0;\n right: 0;\n \n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n \n /* 勾选标记的背景三角形区域 */\n width: ${checkmarkSize}px;\n height: ${checkmarkSize}px;\n overflow: hidden;\n \n /* 过渡动画 */\n transition: background-color 0.2s ease;\n \n /* 背景三角形 */\n &::before {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 0 ${checkmarkSize}px ${checkmarkSize}px;\n border-color: transparent transparent var(--ksd-brand-primary) transparent;\n transition: border-color 0.2s ease;\n }\n \n /* 禁用状态的背景 */\n &[data-disabled=\"true\"]::before {\n border-color: transparent transparent var(--ksd-border-strong) transparent;\n }\n \n /* 图标样式 */\n svg {\n position: relative;\n color: var(--ksd-text-on-brand);\n width: ${checkmarkIcon}px;\n height: ${checkmarkIcon}px;\n margin: 0;\n z-index: 1;\n }\n \n /* 禁用状态的图标 */\n &[data-disabled=\"true\"] svg {\n color: var(--ksd-background-surface-subtle);\n }\n `;\n};\n","import React, { forwardRef, useEffect, useRef, useState } from 'react';\nimport { CheckOutline } from '@kingsoft-ai/icons';\nimport {\n CheckboxButtonContainer,\n CheckboxButtonWrapper,\n CheckboxButtonCheckmark,\n checkboxButtonSizeTokens,\n} from './CheckboxButton.style';\nimport type { CheckboxButtonSize } from './CheckboxButton.style';\n\nexport interface CheckboxButtonProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'onChange' | 'indeterminate'> {\n /**\n * 是否选中\n */\n checked?: boolean;\n \n /**\n * 默认是否选中(非受控)\n */\n defaultChecked?: boolean;\n \n /**\n * 是否禁用\n */\n disabled?: boolean;\n \n /**\n * 标签文字(必填)\n */\n label: React.ReactNode;\n \n /**\n * 值改变回调\n */\n onChange?: (checked: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;\n \n /**\n * 尺寸\n */\n size?: CheckboxButtonSize;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 自定义样式\n */\n style?: React.CSSProperties;\n}\n\nexport const CheckboxButton = forwardRef<HTMLInputElement, CheckboxButtonProps>(\n (props, ref) => {\n const {\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n label,\n size = 'md',\n onChange,\n className,\n style,\n ...inputProps\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [hover, setHover] = useState(false);\n \n // 内部状态管理(非受控)\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n \n // 判断是否受控\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : internalChecked;\n\n // 合并 refs\n useEffect(() => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else {\n ref.current = inputRef.current;\n }\n }\n }, [ref]);\n\n // 处理点击\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n \n const newChecked = event.target.checked;\n \n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n \n onChange?.(newChecked, event);\n };\n\n const sizeToken = checkboxButtonSizeTokens[size];\n \n return (\n <CheckboxButtonContainer\n className={className}\n style={style}\n onMouseEnter={() => !disabled && setHover(true)}\n onMouseLeave={() => !disabled && setHover(false)}\n >\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n \n <CheckboxButtonWrapper\n size={size}\n isHovered={hover}\n isChecked={checked}\n isDisabled={disabled}\n >\n {/* 标签文字 */}\n {label}\n \n {/* 右下角勾选标记 */}\n {checked && (\n <CheckboxButtonCheckmark\n size={size}\n isDisabled={disabled}\n >\n <CheckOutline size={sizeToken.checkmarkIcon} />\n </CheckboxButtonCheckmark>\n )}\n </CheckboxButtonWrapper>\n </CheckboxButtonContainer>\n );\n }\n);\n\nCheckboxButton.displayName = 'CheckboxButton';\n\nexport default CheckboxButton;\n","/**\n * Collapse Styled Tokens\n *\n * 将 Collapse 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Collapse 组件的 Styled Tokens\n */\nexport const $collapse = createStyledTokens({\n // ============================================================================\n // 边框\n // ============================================================================\n border: ['components.collapse.border.default', '--ksd-collapse-border'],\n divider: ['components.collapse.divider', '--ksd-collapse-divider'],\n\n // ============================================================================\n // 背景\n // ============================================================================\n bg: ['components.collapse.background.default', '--ksd-collapse-bg'],\n bgHover: ['components.collapse.background.hover', '--ksd-collapse-bg-hover'],\n\n // ============================================================================\n // 文字\n // ============================================================================\n text: ['components.collapse.text.default', '--ksd-collapse-text'],\n textTitle: ['components.collapse.text.title', '--ksd-collapse-text-title'],\n\n // ============================================================================\n // 箭头\n // ============================================================================\n arrow: ['components.collapse.arrow.default', '--ksd-collapse-arrow'],\n arrowSize: ['components.collapse.arrowSize', '--ksd-collapse-arrow-size'],\n\n // ============================================================================\n // 内边距\n // ============================================================================\n headerPadding: ['components.collapse.padding.header', '--ksd-collapse-header-padding'],\n contentPadding: ['components.collapse.padding.content', '--ksd-collapse-content-padding'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.collapse.borderRadius', '--ksd-collapse-border-radius'],\n gap: ['components.collapse.gap', '--ksd-collapse-gap'],\n transition: ['components.collapse.transition', '--ksd-collapse-transition'],\n});\n","/**\n * Collapse Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css, keyframes } from '@kingsoft-ai/theme';\nimport { $collapse } from './styled-tokens';\n\nconst slideDown = keyframes`\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`\n\nconst slideUp = keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-8px);\n }\n`\n\nexport const rotateArrowDown = keyframes`\n from {\n transform: rotate(-90deg);\n }\n to {\n transform: rotate(0deg);\n }\n`\n\nexport const rotateArrowUp = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(-90deg);\n }\n`\n\nexport const CollapseRoot = styled.div`\n ${(props) => css`\n width: 100%;\n border: 1px solid ${$collapse.border(props)};\n border-radius: ${$collapse.borderRadius(props)};\n background: ${$collapse.bg(props)};\n overflow: hidden;\n `}\n`\n\nexport const CollapseItemWrapper = styled.div<{\n isLast?: boolean\n}>`\n ${(props) => css`\n border-bottom: ${props.isLast ? 'none' : `1px solid ${$collapse.divider(props)}`};\n `}\n`\n\nexport const CollapseHeader = styled.div<{\n isExpanded: boolean\n isDisabled?: boolean\n}>`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$collapse.gap(props)};\n padding: ${$collapse.headerPadding(props)};\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n user-select: none;\n transition: background ${$collapse.transition(props)};\n \n /* Hover 状态 */\n ${!props.isDisabled && css`\n &:hover {\n background: ${$collapse.bgHover(props)};\n }\n `}\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid ${$collapse.arrow(props)};\n outline-offset: -2px;\n }\n \n /* 禁用状态 */\n ${props.isDisabled && css`\n opacity: 0.5;\n `}\n `}\n`\n\nexport const ArrowWrapper = styled.div<{\n isExpanded: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${$collapse.arrowSize(props)};\n height: ${$collapse.arrowSize(props)};\n color: ${$collapse.arrow(props)};\n transition: transform ${$collapse.transition(props)};\n transform: rotate(${props.isExpanded ? '0deg' : '-90deg'});\n \n svg {\n width: 100%;\n height: 100%;\n }\n `}\n`\n\nexport const TitleWrapper = styled.div`\n ${(props) => css`\n flex: 1;\n display: flex;\n align-items: center;\n gap: ${$collapse.gap(props)};\n min-width: 0;\n `}\n`\n\nexport const TitleText = styled.p`\n ${(props) => css`\n margin: 0;\n font-family: var(--ksd-typography-font-family);\n font-size: 14px;\n line-height: 22px;\n color: ${$collapse.textTitle(props)};\n white-space: pre-wrap;\n word-break: break-word;\n `}\n`\n\nexport const SuffixWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 12px;\n flex-shrink: 0;\n`\n\nexport const CollapseContentWrapper = styled.div<{\n isExpanded: boolean\n contentHeight: number\n}>`\n ${(props) => css`\n max-height: ${props.isExpanded ? `${props.contentHeight}px` : '0px'};\n overflow: hidden;\n transition: max-height ${$collapse.transition(props)};\n `}\n`\n\nexport const CollapseContentInner = styled.div<{\n isExpanded: boolean\n}>`\n ${(props) => css`\n padding: ${$collapse.contentPadding(props)};\n border-top: 1px solid ${$collapse.divider(props)};\n \n ${props.isExpanded\n ? css`\n animation: ${slideDown} 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n `\n : css`\n animation: ${slideUp} 0.3s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n `}\n `}\n`\n\nexport const ContentText = styled.div`\n ${(props) => css`\n font-family: var(--ksd-typography-font-family);\n font-size: 12px;\n line-height: 22px;\n color: ${$collapse.text(props)};\n \n p {\n margin: 0 0 12px 0;\n \n &:last-child {\n margin-bottom: 0;\n }\n }\n `}\n`\n","import { useState, Children, cloneElement, isValidElement, forwardRef } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport { CollapseRoot } from './Collapse.style'\nimport type { CollapseItemProps } from './CollapseItem'\n\nexport interface CollapseProps {\n /** 当前激活的面板(受控) */\n activeKey?: string | number | (string | number)[]\n /** 默认激活的面板(非受控) */\n defaultActiveKey?: string | number | (string | number)[]\n /** 手风琴模式,每次只能展开一个面板 */\n accordion?: boolean\n /** 展开/收起回调 */\n onChange?: (activeKey: string | number | (string | number)[]) => void\n /** 子元素(CollapseItem) */\n children?: ReactNode\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n activeKey: activeKeyProp,\n defaultActiveKey = [],\n accordion = false,\n onChange,\n children,\n className,\n style,\n },\n ref,\n ) => {\n // 内部状态(非受控模式)\n const [internalActiveKey, setInternalActiveKey] = useState<\n string | number | (string | number)[]\n >(defaultActiveKey)\n\n // 判断是否为受控模式\n const isControlled = activeKeyProp !== undefined\n const activeKey = isControlled ? activeKeyProp : internalActiveKey\n\n // 将 activeKey 统一转换为数组形式处理\n const activeKeys = Array.isArray(activeKey) ? activeKey : [activeKey]\n\n const handleChange = (itemKey: string | number, expanded: boolean) => {\n let newActiveKey: string | number | (string | number)[]\n\n if (accordion) {\n // 手风琴模式:只能展开一个\n newActiveKey = expanded ? itemKey : ''\n } else {\n // 普通模式:可以展开多个\n const currentKeys = Array.isArray(activeKey) ? [...activeKey] : activeKey ? [activeKey] : []\n \n if (expanded) {\n // 添加到激活列表\n newActiveKey = [...currentKeys, itemKey]\n } else {\n // 从激活列表移除\n newActiveKey = currentKeys.filter((key) => key !== itemKey)\n }\n }\n\n // 更新状态\n if (!isControlled) {\n setInternalActiveKey(newActiveKey)\n }\n\n // 触发回调\n onChange?.(newActiveKey)\n }\n\n const renderChildren = () => {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<CollapseItemProps>[]\n const itemCount = items.length\n\n return items.map((child, index) => {\n const itemKey = child.props.itemKey\n const expanded = activeKeys.includes(itemKey)\n const last = index === itemCount - 1\n\n return cloneElement(child, {\n ...child.props,\n expanded,\n last,\n onChange: handleChange,\n })\n })\n }\n\n return (\n <CollapseRoot ref={ref} className={className} style={style} role=\"region\">\n {renderChildren()}\n </CollapseRoot>\n )\n },\n)\n\nCollapse.displayName = 'Collapse'\n\n\n\n\n\n","/**\n * CollapseItem 折叠面板项组件\n * \n * 单个可折叠的面板项,支持自定义标题、内容和后缀\n * \n * @example\n * ```tsx\n * <CollapseItem\n * title=\"折叠面板\"\n * suffix={<Tag>Red</Tag>}\n * >\n * 这是折叠面板的内容\n * </CollapseItem>\n * ```\n */\n\nimport { useRef, useEffect, useState, forwardRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { ChevronDownOutline } from '@kingsoft-ai/icons'\nimport {\n CollapseItemWrapper,\n CollapseHeader,\n ArrowWrapper,\n TitleWrapper,\n TitleText,\n SuffixWrapper,\n CollapseContentWrapper,\n CollapseContentInner,\n ContentText,\n} from './Collapse.style'\n\nexport interface CollapseItemProps {\n /** 面板唯一标识 */\n itemKey: string | number\n /** 标题内容(可以是字符串或自定义 ReactNode) */\n title?: ReactNode\n /** 面板内容 */\n children?: ReactNode\n /** 右侧后缀内容(如标签、图标等) */\n suffix?: ReactNode\n /** 是否展开(受控) */\n expanded?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 是否是最后一项(控制底部边框) */\n last?: boolean\n /** 展开/收起回调 */\n onChange?: (itemKey: string | number, expanded: boolean) => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * CollapseItem 折叠面板项\n * \n * 特性:\n * - 平滑的展开/收起动画\n * - 支持自定义标题和后缀\n * - 完整的键盘导航支持\n * - 自适应内容高度\n */\nexport const CollapseItem = forwardRef<HTMLDivElement, CollapseItemProps>(\n (\n {\n itemKey,\n title,\n children,\n suffix,\n expanded = false,\n disabled = false,\n last = false,\n onChange,\n className,\n },\n ref,\n ) => {\n const contentRef = useRef<HTMLDivElement>(null)\n const [contentHeight, setContentHeight] = useState(0)\n\n // 计算内容高度\n useEffect(() => {\n if (contentRef.current) {\n // 使用 scrollHeight 获取实际内容高度\n setContentHeight(contentRef.current.scrollHeight)\n }\n }, [children, expanded])\n\n // 处理点击\n const handleToggle = () => {\n if (disabled) return\n onChange?.(itemKey, !expanded)\n }\n\n // 处理键盘事件\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n // 空格或回车键切换展开状态\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n handleToggle()\n }\n }\n\n return (\n <CollapseItemWrapper ref={ref} isLast={last} className={className}>\n {/* 标题栏 */}\n <CollapseHeader\n isExpanded={expanded}\n isDisabled={disabled}\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-expanded={expanded}\n aria-disabled={disabled}\n aria-controls={`collapse-content-${itemKey}`}\n >\n {/* 箭头图标 */}\n <ArrowWrapper isExpanded={expanded} aria-hidden=\"true\">\n <ChevronDownOutline />\n </ArrowWrapper>\n\n {/* 标题内容 */}\n <TitleWrapper>\n {typeof title === 'string' ? <TitleText>{title}</TitleText> : title}\n </TitleWrapper>\n\n {/* 右侧后缀 */}\n {suffix && <SuffixWrapper>{suffix}</SuffixWrapper>}\n </CollapseHeader>\n\n {/* 折叠内容 */}\n <CollapseContentWrapper\n isExpanded={expanded}\n contentHeight={contentHeight}\n id={`collapse-content-${itemKey}`}\n role=\"region\"\n aria-labelledby={`collapse-header-${itemKey}`}\n >\n <CollapseContentInner ref={contentRef} isExpanded={expanded}>\n {typeof children === 'string' ? (\n <ContentText>{children}</ContentText>\n ) : (\n children\n )}\n </CollapseContentInner>\n </CollapseContentWrapper>\n </CollapseItemWrapper>\n )\n },\n)\n\nCollapseItem.displayName = 'CollapseItem'\n\n\n\n\n\n","/**\n * FloatButton Styled Tokens\n *\n * 将 FloatButton 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * FloatButton 组件的 Styled Tokens\n */\nexport const $floatButton = createStyledTokens({\n // ============================================================================\n // Default 变体\n // ============================================================================\n defaultBg: ['components.floatButton.default.background.default', '--ksd-float-button-default-bg'],\n defaultBgHover: ['components.floatButton.default.background.hover', '--ksd-float-button-default-bg-hover'],\n defaultBgActive: ['components.floatButton.default.background.active', '--ksd-float-button-default-bg-active'],\n defaultText: ['components.floatButton.default.text.default', '--ksd-float-button-default-text'],\n defaultBorder: ['components.floatButton.default.border.default', '--ksd-float-button-default-border'],\n defaultShadow: ['components.floatButton.default.shadow.default', '--ksd-float-button-default-shadow'],\n defaultShadowHover: ['components.floatButton.default.shadow.hover', '--ksd-float-button-default-shadow-hover'],\n\n // ============================================================================\n // Primary 变体\n // ============================================================================\n primaryBg: ['components.floatButton.primary.background.default', '--ksd-float-button-primary-bg'],\n primaryBgHover: ['components.floatButton.primary.background.hover', '--ksd-float-button-primary-bg-hover'],\n primaryBgActive: ['components.floatButton.primary.background.active', '--ksd-float-button-primary-bg-active'],\n primaryText: ['components.floatButton.primary.text.default', '--ksd-float-button-primary-text'],\n primaryBorder: ['components.floatButton.primary.border.default', '--ksd-float-button-primary-border'],\n primaryShadow: ['components.floatButton.primary.shadow.default', '--ksd-float-button-primary-shadow'],\n primaryShadowHover: ['components.floatButton.primary.shadow.hover', '--ksd-float-button-primary-shadow-hover'],\n\n // ============================================================================\n // Disabled 状态\n // ============================================================================\n disabledBg: ['components.floatButton.disabled.background.default', '--ksd-float-button-disabled-bg'],\n disabledText: ['components.floatButton.disabled.text.default', '--ksd-float-button-disabled-text'],\n disabledOpacity: ['components.floatButton.disabled.opacity', '--ksd-float-button-disabled-opacity'],\n\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smSize: ['components.floatButton.size.sm.size', '--ksd-float-button-sm-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdSize: ['components.floatButton.size.md.size', '--ksd-float-button-md-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgSize: ['components.floatButton.size.lg.size', '--ksd-float-button-lg-size'],\n\n // ============================================================================\n // 图标\n // ============================================================================\n iconSize: ['components.floatButton.icon.size', '--ksd-float-button-icon-size'],\n\n // ============================================================================\n // 描述\n // ============================================================================\n descriptionFontSize: ['components.floatButton.description.fontSize', '--ksd-float-button-description-font-size'],\n descriptionLineHeight: ['components.floatButton.description.lineHeight', '--ksd-float-button-description-line-height'],\n});\n","import { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $floatButton } from './styled-tokens';\n\nexport const floatButtonTypes = ['default', 'primary'] as const\nexport const floatButtonShapes = ['circle', 'square'] as const\nexport const floatButtonSizes = ['sm', 'md', 'lg'] as const\nexport const tooltipPlacements = ['top', 'bottom', 'left', 'right'] as const\n\nexport type FloatButtonType = (typeof floatButtonTypes)[number]\nexport type FloatButtonShape = (typeof floatButtonShapes)[number]\nexport type FloatButtonSize = (typeof floatButtonSizes)[number]\nexport type TooltipPlacement = (typeof tooltipPlacements)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getTypeStyles = (buttonType: FloatButtonType, props: ThemeProps) => {\n if (buttonType === 'primary') {\n return css`\n background-color: ${$floatButton.primaryBg(props)};\n color: ${$floatButton.primaryText(props)};\n border: 1px solid ${$floatButton.primaryBorder(props)};\n box-shadow: ${$floatButton.primaryShadow(props)};\n\n &:hover:not(:disabled) {\n background-color: ${$floatButton.primaryBgHover(props)};\n box-shadow: ${$floatButton.primaryShadowHover(props)};\n }\n\n &:active:not(:disabled),\n &[data-pressed='true']:not(:disabled) {\n background-color: ${$floatButton.primaryBgActive(props)};\n transform: scale(0.95);\n }\n `\n }\n\n // default\n return css`\n background-color: ${$floatButton.defaultBg(props)};\n color: ${$floatButton.defaultText(props)};\n border: 1px solid ${$floatButton.defaultBorder(props)};\n box-shadow: ${$floatButton.defaultShadow(props)};\n\n &:hover:not(:disabled) {\n background-color: ${$floatButton.defaultBgHover(props)};\n box-shadow: ${$floatButton.defaultShadowHover(props)};\n }\n\n &:active:not(:disabled),\n &[data-pressed='true']:not(:disabled) {\n background-color: ${$floatButton.defaultBgActive(props)};\n transform: scale(0.95);\n }\n `\n}\n\nconst getShapeStyles = (shape: FloatButtonShape, size: FloatButtonSize, props: ThemeProps) => {\n const sizeMap = {\n sm: $floatButton.smSize(props),\n md: $floatButton.mdSize(props),\n lg: $floatButton.lgSize(props),\n };\n const buttonSize = sizeMap[size] || sizeMap.md;\n\n if (shape === 'circle') {\n return css`\n width: ${buttonSize};\n height: ${buttonSize};\n border-radius: 50%;\n `\n }\n \n return css`\n width: ${buttonSize};\n height: ${buttonSize};\n border-radius: var(--ksd-radii-r2);\n `\n}\n\nexport const FloatButtonRoot = styled.button<{\n $buttonType: FloatButtonType\n $shape: FloatButtonShape\n $size: FloatButtonSize\n $isPressed: boolean\n}>`\n ${(props) => css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n user-select: none;\n outline: none;\n border: none;\n padding: 0;\n z-index: 999;\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n ${getTypeStyles(props.$buttonType, props)}\n ${getShapeStyles(props.$shape, props.$size, props)}\n\n &:disabled {\n cursor: not-allowed;\n opacity: ${$floatButton.disabledOpacity(props)};\n background-color: ${$floatButton.disabledBg(props)};\n color: ${$floatButton.disabledText(props)};\n box-shadow: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n `}\n`\n\nexport const FloatButtonContent = styled.span`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ksd-spacing-xs);\n width: 100%;\n height: 100%;\n`\n\nexport const IconWrapper = styled.span`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: ${$floatButton.iconSize(props)};\n line-height: 1;\n\n svg {\n width: 1em;\n height: 1em;\n }\n `}\n`\n\nexport const Description = styled.span`\n ${(props) => css`\n font-size: ${$floatButton.descriptionFontSize(props)};\n line-height: ${$floatButton.descriptionLineHeight(props)};\n color: inherit;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n padding: 0 var(--ksd-spacing-xs);\n `}\n`\n\nexport const TooltipWrapper = styled.div`\n position: relative;\n display: inline-flex;\n`\n\nconst getTooltipPosition = (placement: TooltipPlacement) => {\n switch (placement) {\n case 'top':\n return css`\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 8px;\n `\n case 'bottom':\n return css`\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 8px;\n `\n case 'left':\n return css`\n right: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-right: 8px;\n `\n case 'right':\n return css`\n left: 100%;\n top: 50%;\n transform: translateY(-50%);\n margin-left: 8px;\n `\n }\n}\n\nexport const TooltipCard = styled.div<{\n $placement: TooltipPlacement\n $color?: string\n}>`\n position: absolute;\n z-index: 1050;\n padding: 6px 8px;\n font-size: 14px;\n line-height: 1.5;\n color: #fff;\n background-color: ${({ $color }) => $color || 'rgba(0, 0, 0, 0.85)'};\n border-radius: 6px;\n box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n white-space: nowrap;\n animation: tooltipFadeIn 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n ${({ $placement }) => getTooltipPosition($placement)}\n\n @keyframes tooltipFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n`\n\nconst getArrowPosition = (placement: TooltipPlacement) => {\n const arrowSize = 5\n \n switch (placement) {\n case 'top':\n return css`\n bottom: -${arrowSize}px;\n left: 50%;\n transform: translateX(-50%);\n border-left: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid transparent;\n border-top: ${arrowSize}px solid currentColor;\n `\n case 'bottom':\n return css`\n top: -${arrowSize}px;\n left: 50%;\n transform: translateX(-50%);\n border-left: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid currentColor;\n `\n case 'left':\n return css`\n right: -${arrowSize}px;\n top: 50%;\n transform: translateY(-50%);\n border-top: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid transparent;\n border-left: ${arrowSize}px solid currentColor;\n `\n case 'right':\n return css`\n left: -${arrowSize}px;\n top: 50%;\n transform: translateY(-50%);\n border-top: ${arrowSize}px solid transparent;\n border-bottom: ${arrowSize}px solid transparent;\n border-right: ${arrowSize}px solid currentColor;\n `\n }\n}\n\nexport const TooltipArrow = styled.span<{\n $placement: TooltipPlacement\n $color?: string\n}>`\n position: absolute;\n width: 0;\n height: 0;\n color: ${({ $color }) => $color || 'rgba(0, 0, 0, 0.85)'};\n \n ${({ $placement }) => getArrowPosition($placement)}\n`\n","import { forwardRef, useRef, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n FloatButtonRoot,\n FloatButtonContent,\n IconWrapper,\n Description,\n TooltipWrapper,\n TooltipCard,\n TooltipArrow,\n floatButtonTypes,\n floatButtonShapes,\n floatButtonSizes,\n type FloatButtonType,\n type FloatButtonShape,\n type FloatButtonSize,\n type TooltipPlacement,\n} from './FloatButton.style'\n\nexport type { TooltipPlacement }\n\nexport interface TooltipConfig {\n /** Tooltip 标题 */\n title?: ReactNode\n /** Tooltip 颜色 */\n color?: string\n /** Tooltip 位置 */\n placement?: TooltipPlacement\n}\n\nexport const TYPES = floatButtonTypes\nexport const SHAPES = floatButtonShapes\nexport const SIZES = floatButtonSizes\n\nexport interface FloatButtonProps extends Omit<AriaButtonProps, 'elementType'> {\n /** 按钮类型 */\n buttonType?: FloatButtonType\n /** 按钮形状 */\n shape?: FloatButtonShape\n /** 按钮尺寸 */\n size?: FloatButtonSize\n /** 图标 */\n icon?: ReactNode\n /** 文字描述 */\n description?: ReactNode\n /** 提示文字或配置 */\n tooltip?: ReactNode | TooltipConfig\n /** 是否禁用 */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n}\n\nexport const FloatButton = forwardRef<HTMLButtonElement, FloatButtonProps>(\n (\n {\n buttonType = 'default',\n shape = 'circle',\n size = 'md',\n icon,\n description,\n tooltip,\n disabled,\n isDisabled,\n className,\n style,\n ...ariaProps\n },\n forwardedRef,\n ) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n const [showTooltip, setShowTooltip] = useState(false)\n\n const finalDisabled = disabled ?? isDisabled\n\n const { buttonProps, isPressed } = useButton(\n {\n ...ariaProps,\n isDisabled: finalDisabled,\n elementType: 'button',\n },\n innerRef,\n )\n\n // 解析 tooltip 配置\n const isTooltipConfig = typeof tooltip === 'object' && tooltip !== null && 'title' in tooltip\n const tooltipConfig = isTooltipConfig ? tooltip as TooltipConfig : null\n const tooltipTitle: ReactNode = tooltipConfig?.title ?? (isTooltipConfig ? null : tooltip as ReactNode)\n const tooltipColor = tooltipConfig?.color\n const tooltipPlacement = tooltipConfig?.placement ?? 'top'\n const hasTooltip = !!tooltipTitle\n\n return (\n <TooltipWrapper\n onMouseEnter={() => hasTooltip && setShowTooltip(true)}\n onMouseLeave={() => hasTooltip && setShowTooltip(false)}\n >\n {hasTooltip && showTooltip && (\n <TooltipCard $placement={tooltipPlacement} $color={tooltipColor}>\n {tooltipTitle}\n <TooltipArrow $placement={tooltipPlacement} $color={tooltipColor} />\n </TooltipCard>\n )}\n <FloatButtonRoot\n {...mergeProps(buttonProps, {\n ref,\n className,\n style,\n })}\n $buttonType={buttonType}\n $shape={shape}\n $size={size}\n $isPressed={isPressed}\n >\n <FloatButtonContent>\n {icon && <IconWrapper>{icon}</IconWrapper>}\n {description && <Description>{description}</Description>}\n </FloatButtonContent>\n </FloatButtonRoot>\n </TooltipWrapper>\n )\n },\n)\n\nFloatButton.displayName = 'FloatButton'\n","/**\n * Input Styled Tokens\n *\n * 将 Input 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Input 组件的 Styled Tokens\n */\nexport const $input = createStyledTokens({\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smHeight: ['components.input.size.sm.height', '--ksd-input-sm-height'],\n smFontSize: ['components.input.size.sm.fontSize', '--ksd-input-sm-font-size'],\n smPaddingInline: ['components.input.size.sm.paddingInline', '--ksd-input-sm-padding-inline'],\n smIconSize: ['components.input.size.sm.iconSize', '--ksd-input-sm-icon-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdHeight: ['components.input.size.md.height', '--ksd-input-md-height'],\n mdFontSize: ['components.input.size.md.fontSize', '--ksd-input-md-font-size'],\n mdPaddingInline: ['components.input.size.md.paddingInline', '--ksd-input-md-padding-inline'],\n mdIconSize: ['components.input.size.md.iconSize', '--ksd-input-md-icon-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgHeight: ['components.input.size.lg.height', '--ksd-input-lg-height'],\n lgFontSize: ['components.input.size.lg.fontSize', '--ksd-input-lg-font-size'],\n lgPaddingInline: ['components.input.size.lg.paddingInline', '--ksd-input-lg-padding-inline'],\n lgIconSize: ['components.input.size.lg.iconSize', '--ksd-input-lg-icon-size'],\n\n // ============================================================================\n // 边框颜色\n // ============================================================================\n borderDefault: ['components.input.border.default', '--ksd-input-border-default'],\n borderHover: ['components.input.border.hover', '--ksd-input-border-hover'],\n borderFocus: ['components.input.border.focus', '--ksd-input-border-focus'],\n borderError: ['components.input.border.error', '--ksd-input-border-error'],\n borderDisabled: ['components.input.border.disabled', '--ksd-input-border-disabled'],\n\n // ============================================================================\n // 背景颜色\n // ============================================================================\n bgDefault: ['components.input.background.default', '--ksd-input-bg-default'],\n bgDisabled: ['components.input.background.disabled', '--ksd-input-bg-disabled'],\n\n // ============================================================================\n // 文字颜色\n // ============================================================================\n textDefault: ['components.input.text.default', '--ksd-input-text-default'],\n textPlaceholder: ['components.input.text.placeholder', '--ksd-input-text-placeholder'],\n textDisabled: ['components.input.text.disabled', '--ksd-input-text-disabled'],\n textError: ['components.input.text.error', '--ksd-input-text-error'],\n textCounter: ['components.input.text.counter', '--ksd-input-text-counter'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.input.borderRadius', '--ksd-input-border-radius'],\n gap: ['components.input.gap', '--ksd-input-gap'],\n transition: ['components.input.transition', '--ksd-input-transition'],\n});\n","/**\n * Input Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $input } from './styled-tokens';\n\nexport const inputSizes = ['sm', 'md', 'lg'] as const\nexport type InputSize = (typeof inputSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getSizeStyles = (size: InputSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n height: ${$input.smHeight(props)};\n font-size: ${$input.smFontSize(props)};\n padding-inline: ${$input.smPaddingInline(props)};\n\n /* 图标尺寸 */\n svg {\n width: ${$input.smIconSize(props)};\n height: ${$input.smIconSize(props)};\n flex-shrink: 0;\n }\n `,\n md: css`\n height: ${$input.mdHeight(props)};\n font-size: ${$input.mdFontSize(props)};\n padding-inline: ${$input.mdPaddingInline(props)};\n\n /* 图标尺寸 */\n svg {\n width: ${$input.mdIconSize(props)};\n height: ${$input.mdIconSize(props)};\n flex-shrink: 0;\n }\n `,\n lg: css`\n height: ${$input.lgHeight(props)};\n font-size: ${$input.lgFontSize(props)};\n padding-inline: ${$input.lgPaddingInline(props)};\n\n /* 图标尺寸 */\n svg {\n width: ${$input.lgIconSize(props)};\n height: ${$input.lgIconSize(props)};\n flex-shrink: 0;\n }\n `,\n }\n\n return sizeMap[size] || sizeMap.md\n}\n\nexport const InputRoot = styled.div<{\n size: InputSize\n fullWidth: boolean\n isFocused: boolean\n isError: boolean\n isDisabled: boolean\n isHovered: boolean\n}>`\n ${(props) => css`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n width: ${props.fullWidth ? '100%' : '200px'};\n min-width: 200px; /* 防止内容动态变化导致宽度闪烁 */\n\n /* 边框样式 */\n border: 1px solid;\n border-color: ${$input.borderDefault(props)};\n border-radius: ${$input.borderRadius(props)};\n\n /* 背景色 */\n background: ${$input.bgDefault(props)};\n\n /* 过渡动画 */\n transition: \n border-color ${$input.transition(props)},\n background ${$input.transition(props)};\n\n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n\n /* Hover 状态 */\n ${props.isHovered && !props.isFocused && !props.isError && !props.isDisabled && css`\n border-color: ${$input.borderHover(props)};\n `}\n\n /* Focus 状态 */\n ${props.isFocused && !props.isError && !props.isDisabled && css`\n border-color: ${$input.borderFocus(props)};\n `}\n\n /* Error 状态 */\n ${props.isError && !props.isDisabled && css`\n border-color: ${$input.borderError(props)};\n `}\n\n /* 禁用状态 */\n ${props.isDisabled && css`\n cursor: not-allowed;\n opacity: var(--ksd-input-disabled-opacity);\n background: ${$input.bgDisabled(props)};\n border-color: ${$input.borderDisabled(props)};\n `}\n\n /* 全宽模式 */\n ${props.fullWidth && css`\n width: 100%;\n `}\n `}\n`\n\nexport const InputWrapper = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$input.gap(props)};\n width: 100%;\n height: 100%;\n `}\n`\n\nexport const StyledInput = styled.input<{\n isError: boolean\n isDisabled: boolean\n}>`\n ${(props) => css`\n /* 重置默认样式 */\n flex: 1;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n padding: 0;\n margin: 0;\n\n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-size: inherit;\n line-height: 1.5;\n color: ${$input.textDefault(props)};\n\n /* 错误状态文字颜色 */\n ${props.isError && css`\n color: ${$input.textError(props)};\n `}\n\n /* 禁用状态文字颜色 */\n ${props.isDisabled && css`\n color: ${$input.textDisabled(props)};\n cursor: not-allowed;\n user-select: none;\n `}\n\n /* 占位符样式 */\n &::placeholder {\n color: ${$input.textPlaceholder(props)};\n opacity: 1;\n }\n\n /* 移除默认的 focus 样式 */\n &:focus {\n outline: none;\n }\n\n /* 移除数字输入框的箭头(Chrome, Safari, Edge, Opera) */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n /* 移除数字输入框的箭头(Firefox) */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n `}\n`\n\nexport const IconWrapper = styled.span<{\n isError: boolean\n isDisabled: boolean\n position: 'prefix' | 'suffix'\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n line-height: 0;\n\n /* 默认颜色 */\n color: ${$input.textDefault(props)};\n\n /* 错误状态颜色 */\n ${props.isError && css`\n color: ${$input.textError(props)};\n `}\n\n /* 禁用状态颜色 */\n ${props.isDisabled && css`\n color: ${$input.textDisabled(props)};\n `}\n\n /* 确保图标大小一致 */\n svg {\n display: block;\n }\n `}\n`\n\nexport const ClearButton = styled.button<{\n isError: boolean\n}>`\n ${(props) => css`\n /* 重置按钮样式 */\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n padding: 0;\n margin: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n outline: none;\n line-height: 0;\n\n /* 颜色 */\n color: ${$input.textCounter(props)};\n\n /* 错误状态颜色 */\n ${props.isError && css`\n color: ${$input.textError(props)};\n `}\n\n /* 过渡动画 */\n transition: \n opacity ${$input.transition(props)},\n color ${$input.transition(props)};\n\n /* hover 状态 */\n &:hover {\n opacity: 0.7;\n }\n\n /* active 状态 */\n &:active {\n opacity: 0.5;\n }\n\n /* focus 可见状态 */\n &:focus-visible {\n outline: 2px solid ${$input.borderFocus(props)};\n outline-offset: 2px;\n border-radius: 2px;\n }\n\n /* 图标尺寸 */\n svg {\n width: 16px;\n height: 16px;\n display: block;\n }\n `}\n`\n\nexport const Counter = styled.span<{\n isError: boolean\n isDisabled: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n font-family: var(--ksd-typography-font-family);\n font-size: inherit;\n line-height: 1.5;\n white-space: nowrap;\n user-select: none;\n\n /* 默认颜色 */\n color: ${$input.textCounter(props)};\n\n /* 错误状态颜色 */\n ${props.isError && css`\n color: ${$input.textError(props)};\n `}\n\n /* 禁用状态颜色 */\n ${props.isDisabled && css`\n color: ${$input.textDisabled(props)};\n `}\n `}\n`\n","import { forwardRef, useRef, useState, type ReactNode, type ChangeEvent, type FocusEvent } from 'react'\nimport {\n InputRoot,\n InputWrapper,\n StyledInput,\n IconWrapper,\n ClearButton,\n Counter,\n inputSizes,\n type InputSize,\n} from './Input.style'\n\nexport const SIZES = inputSizes\n\nexport type InputProps = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'prefix'\n> & {\n /** 输入框尺寸:小号(24px)、标准(32px)、大号(40px) */\n size?: InputSize\n /** 前缀图标 */\n prefix?: ReactNode\n /** 后缀图标 */\n suffix?: ReactNode\n /** 是否显示清除按钮(有值时显示) */\n clearable?: boolean\n /** 错误状态 */\n error?: boolean\n /** 错误提示信息 */\n errorMessage?: ReactNode\n /** 是否显示字符计数器 */\n showCounter?: boolean\n /** 全宽输入框 */\n fullWidth?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 输入框标签 */\n label?: ReactNode\n /** 输入框描述 */\n description?: ReactNode\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nconst CloseIcon = () => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'md',\n prefix,\n suffix,\n clearable = false,\n error = false,\n errorMessage,\n showCounter = false,\n fullWidth = false,\n disabled,\n className,\n style,\n type = 'text',\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n maxLength,\n label,\n description,\n id,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...restProps\n },\n forwardedRef\n ) => {\n const innerRef = useRef<HTMLInputElement>(null)\n const ref = (forwardedRef || innerRef) as React.RefObject<HTMLInputElement>\n \n // 生成唯一 ID(只在组件初始化时生成一次)\n const generatedId = useRef(`input-${Math.random().toString(36).slice(2, 9)}`)\n\n // 内部状态管理(用于 UI 反馈)\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const [internalValue, setInternalValue] = useState(defaultValue || '')\n\n // 获取当前值(受控或非受控)\n const isControlled = value !== undefined\n const currentValue = isControlled ? String(value) : String(internalValue)\n\n // 处理输入变化\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n // 处理焦点事件\n const handleFocus = (e: FocusEvent<HTMLInputElement>) => {\n setIsFocused(true)\n onFocus?.(e)\n }\n\n const handleBlur = (e: FocusEvent<HTMLInputElement>) => {\n setIsFocused(false)\n onBlur?.(e)\n }\n\n // 清除按钮点击处理\n const handleClear = () => {\n if (disabled || !ref.current) return\n\n // 创建合成事件以触发 onChange\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n )?.set\n nativeInputValueSetter?.call(ref.current, '')\n\n const event = new Event('input', { bubbles: true })\n Object.defineProperty(event, 'target', {\n writable: false,\n value: ref.current,\n })\n \n if (!isControlled) {\n setInternalValue('')\n }\n onChange?.(event as unknown as ChangeEvent<HTMLInputElement>)\n\n // 聚焦回输入框\n ref.current.focus()\n }\n\n // 计算字符数\n const currentLength = currentValue.length\n const showClearButton = clearable && currentLength > 0 && !disabled\n\n // 使用提供的 ID 或生成的唯一 ID\n const inputId = id || generatedId.current\n const descriptionId = description ? `${inputId}-description` : undefined\n const errorId = errorMessage && error ? `${inputId}-error` : undefined\n \n const describedBy = [ariaDescribedBy, descriptionId, errorId]\n .filter(Boolean)\n .join(' ') || undefined\n\n return (\n <div style={{ ...(fullWidth ? { width: '100%' } : undefined), ...style }}>\n {/* Label 如果提供 */}\n {label && (\n <label htmlFor={inputId} style={{ display: 'block', marginBottom: 4 }}>\n {label}\n </label>\n )}\n\n <InputRoot\n size={size}\n fullWidth={fullWidth}\n isFocused={isFocused}\n isError={error}\n isDisabled={!!disabled}\n isHovered={isHovered}\n className={className}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <InputWrapper>\n {/* 前缀图标 */}\n {prefix && (\n <IconWrapper\n isError={error}\n isDisabled={!!disabled}\n position=\"prefix\"\n aria-hidden=\"true\"\n >\n {prefix}\n </IconWrapper>\n )}\n\n {/* 输入框 */}\n <StyledInput\n {...restProps}\n ref={ref}\n id={inputId}\n type={type}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n maxLength={maxLength}\n disabled={disabled}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={error}\n isError={error}\n isDisabled={!!disabled}\n />\n\n {/* 清除按钮 */}\n {showClearButton && (\n <ClearButton\n type=\"button\"\n onClick={handleClear}\n aria-label=\"清除内容\"\n isError={error}\n tabIndex={-1}\n >\n <CloseIcon />\n </ClearButton>\n )}\n\n {/* 后缀图标 */}\n {suffix && (\n <IconWrapper\n isError={error}\n isDisabled={!!disabled}\n position=\"suffix\"\n aria-hidden=\"true\"\n >\n {suffix}\n </IconWrapper>\n )}\n\n {/* 字符计数器 */}\n {showCounter && maxLength !== undefined && (\n <Counter\n isError={error}\n isDisabled={!!disabled}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {currentLength}/{maxLength}\n </Counter>\n )}\n </InputWrapper>\n </InputRoot>\n\n {/* Description 如果提供 */}\n {description && (\n <div id={descriptionId} style={{ marginTop: 4, fontSize: 12 }}>\n {description}\n </div>\n )}\n\n {/* Error Message 如果提供 */}\n {errorMessage && error && (\n <div\n id={errorId}\n role=\"alert\"\n style={{ marginTop: 4, fontSize: 12, color: 'inherit' }}\n >\n {errorMessage}\n </div>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n\n","/**\n * Menu Styled Tokens\n *\n * 将 Menu 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Menu 组件的 Styled Tokens\n */\nexport const $menu = createStyledTokens({\n // ============================================================================\n // Container\n // ============================================================================\n containerWidthExpanded: ['components.menu.container.width.expanded', '--ksd-menu-container-width-expanded'],\n containerWidthCollapsed: ['components.menu.container.width.collapsed', '--ksd-menu-container-width-collapsed'],\n containerBg: ['components.menu.container.background', '--ksd-menu-container-bg'],\n containerBorder: ['components.menu.container.border', '--ksd-menu-container-border'],\n containerPadding: ['components.menu.container.padding', '--ksd-menu-container-padding'],\n\n // ============================================================================\n // Item\n // ============================================================================\n itemHeight: ['components.menu.item.height', '--ksd-menu-item-height'],\n itemPaddingInline: ['components.menu.item.paddingInline', '--ksd-menu-item-padding-inline'],\n itemFontSize: ['components.menu.item.fontSize', '--ksd-menu-item-font-size'],\n itemFontWeight: ['components.menu.item.fontWeight', '--ksd-menu-item-font-weight'],\n itemIconSize: ['components.menu.item.iconSize', '--ksd-menu-item-icon-size'],\n itemGap: ['components.menu.item.gap', '--ksd-menu-item-gap'],\n itemBorderRadius: ['components.menu.item.borderRadius', '--ksd-menu-item-border-radius'],\n itemTransition: ['components.menu.item.transition', '--ksd-menu-item-transition'],\n\n // Item 背景\n itemBg: ['components.menu.item.background.default', '--ksd-menu-item-bg'],\n itemBgHover: ['components.menu.item.background.hover', '--ksd-menu-item-bg-hover'],\n itemBgActive: ['components.menu.item.background.active', '--ksd-menu-item-bg-active'],\n\n // Item 文字\n itemText: ['components.menu.item.text.default', '--ksd-menu-item-text'],\n itemTextHover: ['components.menu.item.text.hover', '--ksd-menu-item-text-hover'],\n itemTextActive: ['components.menu.item.text.active', '--ksd-menu-item-text-active'],\n\n // ============================================================================\n // SubItem\n // ============================================================================\n subItemPaddingLeft: ['components.menu.subItem.paddingLeft', '--ksd-menu-subitem-padding-left'],\n\n // ============================================================================\n // Group\n // ============================================================================\n groupMarginTop: ['components.menu.group.marginTop', '--ksd-menu-group-margin-top'],\n groupMarginBottom: ['components.menu.group.marginBottom', '--ksd-menu-group-margin-bottom'],\n groupGap: ['components.menu.group.gap', '--ksd-menu-group-gap'],\n\n // Group Title\n groupTitleHeight: ['components.menu.groupTitle.height', '--ksd-menu-group-title-height'],\n groupTitleFontSize: ['components.menu.groupTitle.fontSize', '--ksd-menu-group-title-font-size'],\n groupTitleFontWeight: ['components.menu.groupTitle.fontWeight', '--ksd-menu-group-title-font-weight'],\n groupTitleColor: ['components.menu.groupTitle.color', '--ksd-menu-group-title-color'],\n groupTitleMarginBottom: ['components.menu.groupTitle.marginBottom', '--ksd-menu-group-title-margin-bottom'],\n\n // ============================================================================\n // Scrollbar\n // ============================================================================\n scrollbarWidth: ['components.menu.scrollbar.width', '--ksd-menu-scrollbar-width'],\n scrollbarThumbColor: ['components.menu.scrollbar.thumbColor', '--ksd-menu-scrollbar-thumb-color'],\n scrollbarTrackColor: ['components.menu.scrollbar.trackColor', '--ksd-menu-scrollbar-track-color'],\n\n // ============================================================================\n // Popover\n // ============================================================================\n popoverBg: ['components.menu.popover.background', '--ksd-menu-popover-bg'],\n popoverBorder: ['components.menu.popover.border', '--ksd-menu-popover-border'],\n popoverBorderRadius: ['components.menu.popover.borderRadius', '--ksd-menu-popover-border-radius'],\n popoverShadow: ['components.menu.popover.boxShadow', '--ksd-menu-popover-shadow'],\n popoverPadding: ['components.menu.popover.padding', '--ksd-menu-popover-padding'],\n\n // Popover Item\n popoverItemBg: ['components.menu.popover.item.background.default', '--ksd-menu-popover-item-bg'],\n popoverItemBgHover: ['components.menu.popover.item.background.hover', '--ksd-menu-popover-item-bg-hover'],\n popoverItemBgActive: ['components.menu.popover.item.background.active', '--ksd-menu-popover-item-bg-active'],\n popoverItemText: ['components.menu.popover.item.text.default', '--ksd-menu-popover-item-text'],\n popoverItemTextActive: ['components.menu.popover.item.text.active', '--ksd-menu-popover-item-text-active'],\n});\n","/**\n * Menu Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport { $menu } from './styled-tokens';\n\nexport interface MenuStyleProps {\n collapsed?: boolean\n}\n\nexport interface MenuItemStyleProps {\n active?: boolean\n disabled?: boolean\n isSubItem?: boolean\n collapsed?: boolean\n}\n\nexport const MenuContainer = styled.div<MenuStyleProps>`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n width: ${props.collapsed ? $menu.containerWidthCollapsed(props) : $menu.containerWidthExpanded(props)};\n height: 100%;\n background: ${$menu.containerBg(props)};\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n\n /* 滚动条样式 */\n &::-webkit-scrollbar {\n width: ${$menu.scrollbarWidth(props)};\n }\n\n &::-webkit-scrollbar-track {\n background: ${$menu.scrollbarTrackColor(props)};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${$menu.scrollbarThumbColor(props)};\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n `}\n`\n\nexport const MenuContent = styled.div`\n ${(props) => css`\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: ${$menu.containerPadding(props)};\n padding-top: 0;\n\n /* 滚动条样式 */\n &::-webkit-scrollbar {\n width: ${$menu.scrollbarWidth(props)};\n }\n\n &::-webkit-scrollbar-track {\n background: ${$menu.scrollbarTrackColor(props)};\n }\n\n &::-webkit-scrollbar-thumb {\n background: ${$menu.scrollbarThumbColor(props)};\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n `}\n`\n\nexport const MenuItemContainer = styled.button<MenuItemStyleProps>`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n height: ${$menu.itemHeight(props)};\n padding-inline: ${props.isSubItem ? $menu.subItemPaddingLeft(props) : $menu.itemPaddingInline(props)};\n gap: ${$menu.itemGap(props)};\n border: none;\n border-radius: ${$menu.itemBorderRadius(props)};\n position: relative;\n overflow: hidden;\n background: ${props.collapsed\n ? 'transparent'\n : props.active\n ? 'transparent'\n : $menu.itemBg(props)};\n color: ${props.collapsed && props.active\n ? 'var(--ksd-brand-primary-active)'\n : props.active\n ? $menu.itemTextActive(props)\n : $menu.itemText(props)};\n font-size: ${$menu.itemFontSize(props)};\n font-weight: ${$menu.itemFontWeight(props)};\n font-family: var(--ksd-typography-font-family);\n text-align: left;\n cursor: ${props.disabled ? 'not-allowed' : 'pointer'};\n transition: ${$menu.itemTransition(props)};\n user-select: none;\n outline: none;\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: ${$menu.itemBgActive(props)};\n transform-origin: left center;\n transform: ${props.collapsed ? 'scaleX(0)' : props.active ? 'scaleX(1)' : 'scaleX(0)'};\n opacity: ${props.collapsed ? 0 : props.active ? 1 : 0};\n transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease;\n z-index: 0;\n }\n\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: ${$menu.itemBgHover(props)};\n transform: translateX(-100%);\n opacity: 0;\n transition: transform 0.3s ease, opacity 0.2s ease;\n z-index: 0;\n }\n\n & > * {\n position: relative;\n z-index: 1;\n }\n\n /* Hover 状态 */\n &:hover:not(:disabled) {\n background: ${props.collapsed\n ? 'transparent'\n : props.active\n ? 'transparent'\n : $menu.itemBgHover(props)};\n color: ${props.collapsed\n ? 'var(--ksd-brand-primary-active)'\n : props.active\n ? $menu.itemTextActive(props)\n : $menu.itemTextHover(props)};\n }\n\n &:hover:not(:disabled)::after {\n transform: ${!props.collapsed && !props.active ? 'translateX(0)' : 'translateX(-100%)'};\n opacity: ${!props.collapsed && !props.active ? 1 : 0};\n }\n\n /* 禁用状态 */\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Focus 状态 */\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: -2px;\n }\n `}\n`\n\nexport const MenuItemIcon = styled.span`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${$menu.itemIconSize(props)};\n height: ${$menu.itemIconSize(props)};\n\n svg {\n width: 100%;\n height: 100%;\n }\n `}\n`\n\nexport const MenuItemLabel = styled.span<{ collapsed?: boolean }>`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n transition: opacity 0.2s ease;\n`\n\nexport const MenuItemArrow = styled.span<{ collapsed?: boolean; expanded?: boolean }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n opacity: ${({ collapsed }) => (collapsed ? 0 : 1)};\n transition: transform 0.2s ease, opacity 0.2s ease;\n transform: ${({ expanded }) => (expanded ? 'rotate(90deg)' : 'rotate(0deg)')};\n\n svg {\n width: 100%;\n height: 100%;\n }\n`\n\nexport const MenuGroupContainer = styled.div`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n gap: ${$menu.groupGap(props)};\n margin-top: ${$menu.groupMarginTop(props)};\n\n &:first-of-type {\n margin-top: 0;\n }\n `}\n`\n\nexport const MenuGroupTitle = styled.div<{ collapsed?: boolean }>`\n ${(props) => css`\n display: flex;\n align-items: center;\n height: ${$menu.groupTitleHeight(props)};\n padding-inline: 0;\n margin-bottom: ${$menu.groupTitleMarginBottom(props)};\n font-size: ${$menu.groupTitleFontSize(props)};\n font-weight: ${$menu.groupTitleFontWeight(props)};\n color: ${$menu.groupTitleColor(props)};\n opacity: ${props.collapsed ? 0 : 1};\n transition: opacity 0.2s ease;\n overflow: hidden;\n\n /* 分割线 */\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--ksd-border-primary);\n margin-left: 8px;\n opacity: ${props.collapsed ? 0 : 1};\n }\n `}\n`\n\nexport const MenuGroupItems = styled.div`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n gap: ${$menu.groupGap(props)};\n `}\n`\n\nexport const SubMenuPopoverContainer = styled.div`\n ${(props) => css`\n position: fixed;\n z-index: 9999;\n min-width: 200px;\n background: ${$menu.popoverBg(props)};\n border: ${$menu.popoverBorder(props)};\n border-radius: ${$menu.popoverBorderRadius(props)};\n box-shadow: ${$menu.popoverShadow(props)};\n padding: ${$menu.popoverPadding(props)};\n animation: slideIn 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-8px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n `}\n`\n\nexport const SubMenuPopoverContent = styled.div`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n gap: ${$menu.groupGap(props)};\n `}\n`\n\nexport const SubMenuPopoverItem = styled.button<{ active?: boolean }>`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n width: 100%;\n height: ${$menu.itemHeight(props)};\n padding-inline: ${$menu.itemPaddingInline(props)};\n gap: ${$menu.itemGap(props)};\n border: none;\n border-radius: ${$menu.itemBorderRadius(props)};\n background: ${props.active\n ? $menu.popoverItemBgActive(props)\n : $menu.popoverItemBg(props)};\n color: ${props.active\n ? $menu.popoverItemTextActive(props)\n : $menu.popoverItemText(props)};\n font-size: ${$menu.itemFontSize(props)};\n font-weight: ${$menu.itemFontWeight(props)};\n font-family: var(--ksd-typography-font-family);\n text-align: left;\n cursor: pointer;\n transition: ${$menu.itemTransition(props)};\n user-select: none;\n outline: none;\n white-space: nowrap;\n\n &:hover {\n background: ${props.active\n ? $menu.popoverItemBgActive(props)\n : $menu.popoverItemBgHover(props)};\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: -2px;\n }\n `}\n`\n","import { forwardRef, type ReactNode } from 'react'\nimport { MenuContainer, MenuContent } from './Menu.style'\n\nexport interface MenuProps {\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 子元素(自定义内容、MenuGroup、MenuItem等) */\n children: ReactNode\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ collapsed = false, children, className, style }, ref) => {\n return (\n <MenuContainer\n ref={ref}\n collapsed={collapsed}\n className={className}\n style={style}\n role=\"navigation\"\n aria-label=\"主导航\"\n >\n <MenuContent role=\"menu\">{children}</MenuContent>\n </MenuContainer>\n )\n },\n)\n\nMenu.displayName = 'Menu'\n\n","/**\n * SubMenuPopover 子菜单悬浮层组件\n * \n * 用于在折叠状态下显示二级菜单\n */\n\nimport { type ReactNode, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { SubMenuPopoverContainer, SubMenuPopoverContent } from './Menu.style'\n\nexport interface SubMenuPopoverProps {\n /** 是否显示 */\n visible: boolean\n /** 触发元素的引用 */\n anchorRef: React.RefObject<HTMLElement>\n /** 子菜单内容 */\n children: ReactNode\n /** 关闭回调 */\n onClose?: () => void\n /** 鼠标移入事件 */\n onMouseEnter?: () => void\n /** 鼠标移出事件 */\n onMouseLeave?: () => void\n}\n\n/**\n * SubMenuPopover 子菜单悬浮层组件\n * \n * 在折叠状态下,鼠标悬浮一级菜单时展示二级菜单\n */\nexport const SubMenuPopover = ({\n visible,\n anchorRef,\n children,\n onClose,\n onMouseEnter,\n onMouseLeave,\n}: SubMenuPopoverProps) => {\n const popoverRef = useRef<HTMLDivElement>(null)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n\n // 计算弹出层位置\n useEffect(() => {\n if (!visible || !anchorRef.current) return\n\n const updatePosition = () => {\n if (!anchorRef.current) return\n\n const rect = anchorRef.current.getBoundingClientRect()\n const gap = 4 // 与触发元素的间距\n\n setPosition({\n top: rect.top,\n left: rect.right + gap,\n })\n }\n\n updatePosition()\n\n // 监听滚动和窗口大小变化\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n }, [visible, anchorRef])\n\n // 处理点击外部关闭\n useEffect(() => {\n if (!visible) return\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n anchorRef.current &&\n !anchorRef.current.contains(e.target as Node)\n ) {\n onClose?.()\n }\n }\n\n // 延迟添加监听器,避免立即触发\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside)\n }, 100)\n\n return () => {\n clearTimeout(timer)\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [visible, onClose, anchorRef])\n\n if (!visible) return null\n\n return createPortal(\n <SubMenuPopoverContainer\n ref={popoverRef}\n style={{\n top: position.top,\n left: position.left,\n }}\n role=\"menu\"\n aria-label=\"子菜单\"\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <SubMenuPopoverContent>{children}</SubMenuPopoverContent>\n </SubMenuPopoverContainer>,\n document.body,\n )\n}\n\nSubMenuPopover.displayName = 'SubMenuPopover'\n\n","import { forwardRef, type ReactNode, useRef, useState } from 'react'\nimport {\n MenuItemContainer,\n MenuItemIcon,\n MenuItemLabel,\n MenuItemArrow,\n} from './Menu.style'\nimport { SubMenuPopover } from './SubMenuPopover'\n\nexport interface MenuItemProps {\n /** 唯一标识符 */\n id?: string\n /** 菜单项图标 */\n icon?: ReactNode\n /** 菜单项文字 */\n label: string\n /** 是否激活/选中 */\n active?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 是否为子菜单项 */\n isSubItem?: boolean\n /** 是否显示箭头(用于可展开项) */\n showArrow?: boolean\n /** 箭头是否展开 */\n arrowExpanded?: boolean\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 子菜单内容(折叠状态下悬浮显示) */\n subMenu?: ReactNode\n /** 点击事件 */\n onClick?: () => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * MenuItem 菜单项组件\n * \n * 用于侧边栏导航的单个菜单项\n * 支持激活状态、禁用状态、子菜单缩进、折叠时的悬浮子菜单\n */\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(\n (\n {\n id,\n icon,\n label,\n active = false,\n disabled = false,\n isSubItem = false,\n showArrow = false,\n arrowExpanded = false,\n collapsed = false,\n subMenu,\n onClick,\n className,\n },\n ref,\n ) => {\n const itemRef = useRef<HTMLButtonElement>(null)\n const [showPopover, setShowPopover] = useState(false)\n const hoverTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n // 清除所有定时器\n const clearTimers = () => {\n if (hoverTimerRef.current) {\n clearTimeout(hoverTimerRef.current)\n hoverTimerRef.current = undefined\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = undefined\n }\n }\n\n // 处理鼠标进入\n const handleMouseEnter = () => {\n clearTimers()\n \n if (collapsed && subMenu) {\n if (showPopover) return\n\n // 延迟显示,避免误触\n hoverTimerRef.current = setTimeout(() => {\n setShowPopover(true)\n }, 200)\n }\n }\n\n // 处理鼠标离开\n const handleMouseLeave = () => {\n clearTimers()\n \n // 延迟隐藏,让用户有时间移动到悬浮层\n closeTimerRef.current = setTimeout(() => {\n setShowPopover(false)\n }, 100)\n }\n\n return (\n <>\n <MenuItemContainer\n ref={(node) => {\n // 合并 refs\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n if (node) {\n itemRef.current = node\n }\n }}\n id={id}\n active={active}\n disabled={disabled}\n isSubItem={isSubItem}\n onClick={onClick}\n collapsed={collapsed}\n className={className}\n role=\"menuitem\"\n aria-disabled={disabled}\n aria-current={active ? 'page' : undefined}\n aria-haspopup={collapsed && subMenu ? 'menu' : undefined}\n type=\"button\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* 图标 */}\n {icon && <MenuItemIcon aria-hidden=\"true\">{icon}</MenuItemIcon>}\n\n {/* 文字标签 */}\n <MenuItemLabel collapsed={collapsed}>{label}</MenuItemLabel>\n\n {/* 箭头指示器 */}\n {showArrow && !collapsed && (\n <MenuItemArrow collapsed={collapsed} expanded={arrowExpanded} aria-hidden=\"true\">\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.25 3.5L8.75 7L5.25 10.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </MenuItemArrow>\n )}\n </MenuItemContainer>\n\n {/* 折叠状态下的悬浮子菜单 */}\n {collapsed && subMenu && (\n <SubMenuPopover\n visible={showPopover}\n anchorRef={itemRef as React.RefObject<HTMLElement>}\n onClose={() => setShowPopover(false)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {subMenu}\n </SubMenuPopover>\n )}\n </>\n )\n },\n)\n\nMenuItem.displayName = 'MenuItem'\n\n","/**\n * MenuGroup 菜单分组组件\n * \n * 用于对菜单项进行分组,并显示分组标题\n */\n\nimport { type ReactNode } from 'react'\nimport {\n MenuGroupContainer,\n MenuGroupTitle,\n MenuGroupItems,\n} from './Menu.style'\n\nexport interface MenuGroupProps {\n /** 分组标题 */\n title?: string\n /** 子元素(菜单项) */\n children: ReactNode\n /** 菜单是否折叠 */\n collapsed?: boolean\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * MenuGroup 菜单分组组件\n * \n * 用于将相关的菜单项组织在一起\n * 可选的分组标题和分割线\n */\nexport const MenuGroup = ({\n title,\n children,\n collapsed = false,\n className,\n}: MenuGroupProps) => {\n return (\n <MenuGroupContainer className={className} role=\"group\" aria-label={title}>\n {/* 分组标题 */}\n {title && (\n <MenuGroupTitle collapsed={collapsed} aria-hidden={collapsed}>\n {title}\n </MenuGroupTitle>\n )}\n\n {/* 菜单项列表 */}\n <MenuGroupItems>{children}</MenuGroupItems>\n </MenuGroupContainer>\n )\n}\n\nMenuGroup.displayName = 'MenuGroup'\n\n","/**\n * SubMenuItem 子菜单项组件\n * \n * 用于在悬浮层中展示的子菜单项\n */\n\nimport { SubMenuPopoverItem } from './Menu.style'\n\nexport interface SubMenuItemProps {\n /** 唯一标识符 */\n id?: string\n /** 菜单项文字 */\n label: string\n /** 是否激活/选中 */\n active?: boolean\n /** 点击事件 */\n onClick?: () => void\n /** 自定义类名 */\n className?: string\n}\n\n/**\n * SubMenuItem 子菜单项组件\n * \n * 用于悬浮层中的子菜单项\n */\nexport const SubMenuItem = ({\n id,\n label,\n active = false,\n onClick,\n className,\n}: SubMenuItemProps) => {\n return (\n <SubMenuPopoverItem\n id={id}\n active={active}\n onClick={onClick}\n className={className}\n role=\"menuitem\"\n aria-current={active ? 'page' : undefined}\n type=\"button\"\n >\n {label}\n </SubMenuPopoverItem>\n )\n}\n\nSubMenuItem.displayName = 'SubMenuItem'\n\n","/**\n * Link Styled Tokens\n *\n * 将 Link 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Link 组件的 Styled Tokens\n */\nexport const $link = createStyledTokens({\n // ============================================================================\n // Primary 变体\n // ============================================================================\n primaryColor: ['components.link.variant.primary.text.default', '--ksd-link-primary-color'],\n primaryColorHover: ['components.link.variant.primary.text.hover', '--ksd-link-primary-color-hover'],\n primaryColorActive: ['components.link.variant.primary.text.active', '--ksd-link-primary-color-active'],\n primaryColorDisabled: ['components.link.variant.primary.text.disabled', '--ksd-link-primary-color-disabled'],\n primaryDecoration: ['components.link.variant.primary.decoration.default', '--ksd-link-primary-decoration'],\n primaryDecorationHover: ['components.link.variant.primary.decoration.hover', '--ksd-link-primary-decoration-hover'],\n\n // ============================================================================\n // Neutral 变体\n // ============================================================================\n neutralColor: ['components.link.variant.neutral.text.default', '--ksd-link-neutral-color'],\n neutralColorHover: ['components.link.variant.neutral.text.hover', '--ksd-link-neutral-color-hover'],\n neutralColorActive: ['components.link.variant.neutral.text.active', '--ksd-link-neutral-color-active'],\n neutralColorDisabled: ['components.link.variant.neutral.text.disabled', '--ksd-link-neutral-color-disabled'],\n neutralDecoration: ['components.link.variant.neutral.decoration.default', '--ksd-link-neutral-decoration'],\n neutralDecorationHover: ['components.link.variant.neutral.decoration.hover', '--ksd-link-neutral-decoration-hover'],\n\n // ============================================================================\n // 尺寸\n // ============================================================================\n smFontSize: ['components.link.size.sm.fontSize', '--ksd-link-sm-font-size'],\n mdFontSize: ['components.link.size.md.fontSize', '--ksd-link-md-font-size'],\n lgFontSize: ['components.link.size.lg.fontSize', '--ksd-link-lg-font-size'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n transition: ['components.link.transition', '--ksd-link-transition'],\n borderRadius: ['components.link.borderRadius', '--ksd-link-border-radius'],\n focusRingColor: ['components.link.focusRing.color', '--ksd-link-focus-ring-color'],\n focusRingOffset: ['components.link.focusRing.offset', '--ksd-link-focus-ring-offset'],\n});\n","/**\n * Link Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $link } from './styled-tokens';\n\nexport type LinkVariant = 'primary' | 'neutral';\nexport type LinkSize = 'sm' | 'md' | 'lg';\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getVariantStyles = (variant: LinkVariant, props: ThemeProps) => {\n if (variant === 'neutral') {\n return css`\n color: ${$link.neutralColor(props)};\n text-decoration: ${$link.neutralDecoration(props)};\n \n &:hover:not(:disabled) {\n color: ${$link.neutralColorHover(props)};\n text-decoration: ${$link.neutralDecorationHover(props)};\n }\n \n &:active:not(:disabled) {\n color: ${$link.neutralColorActive(props)};\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n color: ${$link.neutralColorDisabled(props)};\n }\n `;\n }\n \n // primary\n return css`\n color: ${$link.primaryColor(props)};\n text-decoration: ${$link.primaryDecoration(props)};\n \n &:hover:not(:disabled) {\n color: ${$link.primaryColorHover(props)};\n text-decoration: ${$link.primaryDecorationHover(props)};\n }\n \n &:active:not(:disabled) {\n color: ${$link.primaryColorActive(props)};\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n color: ${$link.primaryColorDisabled(props)};\n }\n `;\n};\n\nconst getSizeStyles = (size: LinkSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n font-size: ${$link.smFontSize(props)};\n `,\n md: css`\n font-size: ${$link.mdFontSize(props)};\n `,\n lg: css`\n font-size: ${$link.lgFontSize(props)};\n `,\n }\n return sizeMap[size] || sizeMap.md\n};\n\nexport const LinkRoot = styled.a<{\n variant: LinkVariant;\n size: LinkSize;\n isDisabled?: boolean;\n}>`\n ${(props) => css`\n /* 基础样式 */\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n border-radius: ${$link.borderRadius(props)};\n transition: color ${$link.transition(props)};\n outline: none;\n \n /* 变体样式 */\n ${getVariantStyles(props.variant, props)}\n \n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n \n /* Focus 状态 */\n &:focus-visible {\n outline: 2px solid ${$link.focusRingColor(props)};\n outline-offset: ${$link.focusRingOffset(props)};\n }\n \n /* 禁用状态 */\n ${props.isDisabled && css`\n pointer-events: none;\n `}\n \n /* 图标样式 */\n svg {\n flex-shrink: 0;\n }\n `}\n`;\n","import { forwardRef, useRef } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLink } from 'react-aria';\nimport { mergeProps } from '@react-aria/utils';\nimport { LinkRoot, type LinkVariant, type LinkSize } from './Link.style';\n\n// Helper to extract props type from useLink\ntype UseLinkProps = Parameters<typeof useLink>[0];\n\nexport type LinkProps = UseLinkProps & {\n /** 链接变体:primary (主色), neutral (中性色) */\n variant?: LinkVariant;\n /** 链接尺寸:sm (12px), md (14px), lg (16px) */\n size?: LinkSize;\n /** 是否禁用(统一 API,优先级高于 isDisabled) */\n disabled?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties;\n /** 子元素 */\n children?: ReactNode;\n};\n\n/**\n * Link 文字链接组件\n *\n * 用于页面内的跳转或操作,支持多种状态和尺寸。\n * 基于 react-aria useLink 实现无障碍访问。\n */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n variant = 'primary',\n size = 'md',\n disabled,\n className,\n style,\n children,\n isDisabled,\n ...props\n },\n forwardedRef\n ) => {\n const innerRef = useRef<HTMLAnchorElement>(null);\n const ref = forwardedRef || innerRef;\n\n // disabled 优先于 isDisabled\n const finalDisabled = disabled ?? isDisabled;\n\n const { linkProps } = useLink(\n {\n ...props,\n isDisabled: finalDisabled,\n elementType: 'a',\n },\n innerRef\n );\n\n return (\n <LinkRoot\n ref={ref}\n as=\"a\"\n className={className}\n style={style}\n variant={variant}\n size={size}\n {...mergeProps(linkProps, { ariaDisabled: finalDisabled })}\n >\n {children}\n </LinkRoot>\n );\n }\n);\n\nLink.displayName = 'Link';\n","/**\n * Modal Styled Tokens\n *\n * 将 Modal 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Modal 组件的 Styled Tokens\n *\n * 命名规范:$ 前缀表示这是可在 styled-components 中直接使用的 token 对象\n *\n * @example\n * ```tsx\n * import { $modal } from './styled-tokens';\n *\n * const ModalContainer = styled.div`\n * background: ${$modal.containerBg};\n * border-radius: ${$modal.borderRadius};\n * transition: ${$modal.transition};\n * `;\n * ```\n */\nexport const $modal = createStyledTokens({\n // ============================================================================\n // 基础配置\n // ============================================================================\n borderRadius: ['components.modal.container.borderRadius', '--ksd-modal-border-radius'],\n transition: ['components.modal.transition', '--ksd-modal-transition'],\n\n // ============================================================================\n // 动画配置\n // ============================================================================\n animationDuration: ['components.modal.animation.duration', '--ksd-modal-animation-duration'],\n animationEasing: ['components.modal.animation.easing', '--ksd-modal-animation-easing'],\n scaleFrom: ['components.modal.animation.scaleFrom', '--ksd-modal-scale-from'],\n scaleTo: ['components.modal.animation.scaleTo', '--ksd-modal-scale-to'],\n\n // ============================================================================\n // 层级\n // ============================================================================\n zIndexOverlay: ['components.modal.zIndex.overlay', '--ksd-modal-z-index-overlay'],\n zIndexContainer: ['components.modal.zIndex.container', '--ksd-modal-z-index-container'],\n\n // ============================================================================\n // 遮罩层\n // ============================================================================\n overlayBg: ['components.modal.overlay.background', '--ksd-modal-overlay-bg'],\n overlayBackdropFilter: ['components.modal.overlay.backdropFilter', '--ksd-modal-overlay-backdrop-filter'],\n\n // ============================================================================\n // 容器\n // ============================================================================\n containerBg: ['components.modal.container.background', '--ksd-modal-container-bg'],\n containerShadow: ['components.modal.container.boxShadow', '--ksd-modal-container-shadow'],\n containerBorder: ['components.modal.container.border', '--ksd-modal-container-border'],\n containerMaxHeight: ['components.modal.container.maxHeight', '--ksd-modal-container-max-height'],\n\n // ============================================================================\n // 头部\n // ============================================================================\n headerBg: ['components.modal.header.background', '--ksd-modal-header-bg'],\n headerBorderBottom: ['components.modal.header.borderBottom', '--ksd-modal-header-border-bottom'],\n headerMinHeight: ['components.modal.header.minHeight', '--ksd-modal-header-min-height'],\n headerGap: ['components.modal.header.gap', '--ksd-modal-header-gap'],\n\n // ============================================================================\n // 标题\n // ============================================================================\n titleColor: ['components.modal.title.color', '--ksd-modal-title-color'],\n titleFontWeight: ['components.modal.title.fontWeight', '--ksd-modal-title-font-weight'],\n titleLineHeight: ['components.modal.title.lineHeight', '--ksd-modal-title-line-height'],\n\n // ============================================================================\n // 描述\n // ============================================================================\n descriptionColor: ['components.modal.description.color', '--ksd-modal-description-color'],\n descriptionFontSize: ['components.modal.description.fontSize', '--ksd-modal-description-font-size'],\n descriptionLineHeight: ['components.modal.description.lineHeight', '--ksd-modal-description-line-height'],\n descriptionMarginTop: ['components.modal.description.marginTop', '--ksd-modal-description-margin-top'],\n\n // ============================================================================\n // 关闭按钮\n // ============================================================================\n closeButtonSize: ['components.modal.closeButton.size', '--ksd-modal-close-button-size'],\n closeButtonIconSize: ['components.modal.closeButton.iconSize', '--ksd-modal-close-button-icon-size'],\n closeButtonColor: ['components.modal.closeButton.color', '--ksd-modal-close-button-color'],\n closeButtonColorHover: ['components.modal.closeButton.hoverColor', '--ksd-modal-close-button-color-hover'],\n closeButtonBgHover: ['components.modal.closeButton.hoverBackground', '--ksd-modal-close-button-bg-hover'],\n closeButtonBorderRadius: ['components.modal.closeButton.borderRadius', '--ksd-modal-close-button-border-radius'],\n\n // ============================================================================\n // 内容\n // ============================================================================\n contentColor: ['components.modal.content.color', '--ksd-modal-content-color'],\n contentFontSize: ['components.modal.content.fontSize', '--ksd-modal-content-font-size'],\n contentLineHeight: ['components.modal.content.lineHeight', '--ksd-modal-content-line-height'],\n contentMaxHeight: ['components.modal.content.maxHeight', '--ksd-modal-content-max-height'],\n\n // ============================================================================\n // 底部\n // ============================================================================\n footerBg: ['components.modal.footer.background', '--ksd-modal-footer-bg'],\n footerBorderTop: ['components.modal.footer.borderTop', '--ksd-modal-footer-border-top'],\n footerMinHeight: ['components.modal.footer.minHeight', '--ksd-modal-footer-min-height'],\n footerGap: ['components.modal.footer.gap', '--ksd-modal-footer-gap'],\n\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smWidth: ['components.modal.size.sm.width', '--ksd-modal-sm-width'],\n smMaxWidth: ['components.modal.size.sm.maxWidth', '--ksd-modal-sm-max-width'],\n smPadding: ['components.modal.size.sm.padding', '--ksd-modal-sm-padding'],\n smHeaderPadding: ['components.modal.size.sm.headerPadding', '--ksd-modal-sm-header-padding'],\n smFooterPadding: ['components.modal.size.sm.footerPadding', '--ksd-modal-sm-footer-padding'],\n smTitleFontSize: ['components.modal.size.sm.titleFontSize', '--ksd-modal-sm-title-font-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdWidth: ['components.modal.size.md.width', '--ksd-modal-md-width'],\n mdMaxWidth: ['components.modal.size.md.maxWidth', '--ksd-modal-md-max-width'],\n mdPadding: ['components.modal.size.md.padding', '--ksd-modal-md-padding'],\n mdHeaderPadding: ['components.modal.size.md.headerPadding', '--ksd-modal-md-header-padding'],\n mdFooterPadding: ['components.modal.size.md.footerPadding', '--ksd-modal-md-footer-padding'],\n mdTitleFontSize: ['components.modal.size.md.titleFontSize', '--ksd-modal-md-title-font-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgWidth: ['components.modal.size.lg.width', '--ksd-modal-lg-width'],\n lgMaxWidth: ['components.modal.size.lg.maxWidth', '--ksd-modal-lg-max-width'],\n lgPadding: ['components.modal.size.lg.padding', '--ksd-modal-lg-padding'],\n lgHeaderPadding: ['components.modal.size.lg.headerPadding', '--ksd-modal-lg-header-padding'],\n lgFooterPadding: ['components.modal.size.lg.footerPadding', '--ksd-modal-lg-footer-padding'],\n lgTitleFontSize: ['components.modal.size.lg.titleFontSize', '--ksd-modal-lg-title-font-size'],\n\n // ============================================================================\n // 尺寸 - XLarge\n // ============================================================================\n xlWidth: ['components.modal.size.xl.width', '--ksd-modal-xl-width'],\n xlMaxWidth: ['components.modal.size.xl.maxWidth', '--ksd-modal-xl-max-width'],\n xlPadding: ['components.modal.size.xl.padding', '--ksd-modal-xl-padding'],\n xlHeaderPadding: ['components.modal.size.xl.headerPadding', '--ksd-modal-xl-header-padding'],\n xlFooterPadding: ['components.modal.size.xl.footerPadding', '--ksd-modal-xl-footer-padding'],\n xlTitleFontSize: ['components.modal.size.xl.titleFontSize', '--ksd-modal-xl-title-font-size'],\n\n // ============================================================================\n // 尺寸 - Fullscreen\n // ============================================================================\n fullscreenWidth: ['components.modal.size.fullscreen.width', '--ksd-modal-fullscreen-width'],\n fullscreenMaxWidth: ['components.modal.size.fullscreen.maxWidth', '--ksd-modal-fullscreen-max-width'],\n fullscreenPadding: ['components.modal.size.fullscreen.padding', '--ksd-modal-fullscreen-padding'],\n fullscreenHeaderPadding: ['components.modal.size.fullscreen.headerPadding', '--ksd-modal-fullscreen-header-padding'],\n fullscreenFooterPadding: ['components.modal.size.fullscreen.footerPadding', '--ksd-modal-fullscreen-footer-padding'],\n fullscreenTitleFontSize: ['components.modal.size.fullscreen.titleFontSize', '--ksd-modal-fullscreen-title-font-size'],\n});\n","/**\n * Modal Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport { keyframes } from '@emotion/react';\nimport { $modal } from './styled-tokens';\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`\n\nconst dialogIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(6px) scale(0.985);\n }\n to {\n opacity: 1;\n transform: translateY(0px) scale(1);\n }\n`\n\nexport const ModalPortalRoot = styled.div`\n ${(props) => css`\n position: fixed;\n inset: 0;\n z-index: ${$modal.zIndexOverlay(props)};\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ksd-spacing-xl);\n `}\n`\n\nexport const ModalBackdrop = styled.div`\n ${(props) => css`\n position: absolute;\n inset: 0;\n background: ${$modal.overlayBg(props)};\n backdrop-filter: ${$modal.overlayBackdropFilter(props)};\n -webkit-backdrop-filter: ${$modal.overlayBackdropFilter(props)};\n animation: ${fadeIn} ${$modal.animationDuration(props)} ease forwards;\n `}\n`\n\nexport const ModalDialog = styled.div`\n ${(props) => css`\n position: relative;\n z-index: ${$modal.zIndexContainer(props)};\n\n width: ${$modal.mdWidth(props)};\n max-width: ${$modal.mdMaxWidth(props)};\n max-height: ${$modal.containerMaxHeight(props)};\n\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n background: ${$modal.containerBg(props)};\n border-radius: ${$modal.borderRadius(props)};\n border: ${$modal.containerBorder(props)};\n box-shadow: ${$modal.containerShadow(props)};\n\n animation: ${dialogIn} ${$modal.animationDuration(props)}\n ${$modal.animationEasing(props)} forwards;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n `}\n`\n\nexport const ModalDialogHeader = styled.header`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${$modal.headerGap(props)};\n flex-shrink: 0;\n\n padding: ${$modal.mdHeaderPadding(props)};\n min-height: ${$modal.headerMinHeight(props)};\n\n border-bottom: ${$modal.headerBorderBottom(props)};\n background: ${$modal.headerBg(props)};\n `}\n`\n\nexport const ModalDialogTitle = styled.h2`\n ${(props) => css`\n margin: 0;\n padding: 0;\n min-width: 0;\n flex: 1;\n\n font-family: var(--ksd-typography-font-family);\n font-size: ${$modal.mdTitleFontSize(props)};\n font-weight: ${$modal.titleFontWeight(props)};\n line-height: ${$modal.titleLineHeight(props)};\n color: ${$modal.titleColor(props)};\n\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n`\n\nexport const ModalCloseButton = styled.button`\n ${(props) => css`\n margin: 0;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n outline: none;\n\n width: ${$modal.closeButtonSize(props)};\n height: ${$modal.closeButtonSize(props)};\n flex-shrink: 0;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n border-radius: ${$modal.closeButtonBorderRadius(props)};\n color: ${$modal.closeButtonColor(props)};\n transition: ${$modal.transition(props)};\n\n svg {\n width: ${$modal.closeButtonIconSize(props)};\n height: ${$modal.closeButtonIconSize(props)};\n display: block;\n }\n\n &:hover {\n color: ${$modal.closeButtonColorHover(props)};\n background: ${$modal.closeButtonBgHover(props)};\n }\n\n &:active {\n transform: translateY(0.5px);\n opacity: 0.9;\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n }\n `}\n`\n\nexport const ModalDialogBody = styled.div`\n ${(props) => css`\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: ${$modal.mdPadding(props)};\n\n font-family: var(--ksd-typography-font-family);\n font-size: ${$modal.contentFontSize(props)};\n line-height: ${$modal.contentLineHeight(props)};\n color: ${$modal.contentColor(props)};\n\n /* 轻量滚动条 */\n &::-webkit-scrollbar {\n width: 6px;\n }\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-border-strong);\n border-radius: 3px;\n }\n &::-webkit-scrollbar-thumb:hover {\n background: var(--ksd-text-disabled);\n }\n `}\n`\n","import {\n forwardRef,\n useCallback,\n useId,\n useMemo,\n useRef,\n type CSSProperties,\n type ReactNode,\n} from 'react'\n// @ts-ignore - react-dom type issue (workspace tsconfig)\nimport { createPortal } from 'react-dom'\nimport { FocusScope } from '@react-aria/focus'\nimport { mergeProps } from '@react-aria/utils'\nimport { useDialog, useModal, useOverlay, usePreventScroll } from 'react-aria'\nimport {\n ModalBackdrop,\n ModalCloseButton,\n ModalDialog,\n ModalDialogBody,\n ModalDialogHeader,\n ModalDialogTitle,\n ModalPortalRoot,\n} from './Modal.style'\n\nexport type ModalProps = {\n /** 是否展示 Modal */\n open: boolean\n /**\n * open 状态变更回调\n * 所有关闭路径(ESC / 遮罩 / 关闭按钮 / outside)统一出口\n */\n onOpenChange: (open: boolean) => void\n /** 内容(完全自定义) */\n children: ReactNode\n /** 标题(用于默认头部与 aria 标注) */\n title?: ReactNode\n\n /**\n * 是否隐藏默认头部(标题 + 右上角关闭按钮)\n * - true:不渲染默认 Header,你可以在 children 内完全自定义标题区与关闭按钮\n * - false:按默认逻辑渲染(有 title 或可关闭时显示 Header)\n * @default false\n */\n hideHeader?: boolean\n\n /**\n * 是否允许“用户主动关闭”\n * - false:禁用 ESC/遮罩/close button/outside 关闭(只能由外部控制 open)\n * - true:按各关闭开关控制\n * @default true\n */\n isDismissable?: boolean\n\n /** 是否允许 ESC 关闭(在 isDismissable=true 前提下生效)@default true */\n closeOnEsc?: boolean\n /** 是否允许点击遮罩关闭(在 isDismissable=true 前提下生效)@default true */\n closeOnOverlay?: boolean\n /**\n * 是否允许点击外部关闭(在 isDismissable=true 前提下生效)\n * 对应 react-aria shouldCloseOnInteractOutside\n * @default true\n */\n closeOnOutside?: boolean\n /**\n * 外部点击白名单/黑名单\n * 返回 true 表示允许触发关闭\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean\n\n /** Portal 挂载容器,默认 document.body(SSR 环境下不回退) */\n portalContainer?: Element\n\n /** overlay(遮罩层)样式分层 */\n overlayClassName?: string\n overlayStyle?: CSSProperties\n\n /** dialog(弹层容器)样式分层 */\n dialogClassName?: string\n dialogStyle?: CSSProperties\n\n /** close button 样式分层 */\n closeButtonClassName?: string\n closeButtonStyle?: CSSProperties\n}\n\ntype CloseReason = 'esc' | 'overlay' | 'outside' | 'closeButton' | 'reactAria'\n\nconst DefaultCloseIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 4L4 12M4 4L12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nfunction setRef<T>(ref: React.Ref<T> | undefined, value: T | null) {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n return\n }\n try {\n ;(ref as { current: T | null }).current = value\n } catch {\n // ignore\n }\n}\n\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n (\n {\n open,\n onOpenChange,\n children,\n title,\n hideHeader = false,\n isDismissable = true,\n closeOnEsc = true,\n closeOnOverlay = true,\n closeOnOutside = true,\n shouldCloseOnInteractOutside,\n portalContainer,\n overlayClassName,\n overlayStyle,\n dialogClassName,\n dialogStyle,\n closeButtonClassName,\n closeButtonStyle,\n },\n forwardedRef,\n ) => {\n // SSR-safe:服务端不渲染(避免触发 react-aria 访问 document/window)\n if (typeof document === 'undefined') return null\n\n const internalRef = useRef<HTMLDivElement>(null)\n const dialogRef = internalRef\n\n const titleId = useId()\n\n const requestClose = useCallback(\n (_reason: CloseReason) => {\n onOpenChange(false)\n },\n [onOpenChange],\n )\n\n const mountContainer = useMemo(() => {\n if (portalContainer) return portalContainer\n return document.body\n }, [portalContainer])\n\n // 禁止背景滚动\n usePreventScroll({ isDisabled: !open })\n\n const allowUserDismiss = isDismissable === true\n const allowEsc = allowUserDismiss && closeOnEsc\n const allowOutside = allowUserDismiss && closeOnOutside\n\n const { overlayProps, underlayProps } = useOverlay(\n {\n isOpen: open,\n onClose: () => requestClose('reactAria'),\n // ESC\n isKeyboardDismissDisabled: !allowEsc,\n // outside(非遮罩点击,更多用于 shadow dom / 非全屏场景)\n isDismissable: allowOutside,\n shouldCloseOnInteractOutside: allowOutside\n ? shouldCloseOnInteractOutside\n : () => false,\n },\n dialogRef,\n )\n\n const { modalProps } = useModal()\n\n const { dialogProps, titleProps } = useDialog(\n {\n // 无障碍兜底:\n // - 默认:有 title 则 aria-labelledby 绑定到可见标题\n // - hideHeader=true 时:标题不可见,避免 aria-labelledby 指向不存在节点;此时尽量用 aria-label 承载可访问名称\n 'aria-label':\n hideHeader && title\n ? typeof title === 'string'\n ? title\n : 'Modal'\n : title\n ? undefined\n : 'Modal',\n 'aria-labelledby': !hideHeader && title ? titleId : undefined,\n },\n dialogRef,\n )\n\n const handleCloseButton = useCallback(() => {\n if (!allowUserDismiss) return\n requestClose('closeButton')\n }, [allowUserDismiss, requestClose])\n\n const mergedDialogProps = mergeProps(overlayProps, dialogProps, modalProps, {\n ref: (node: HTMLDivElement | null) => {\n dialogRef.current = node\n setRef(forwardedRef, node)\n },\n className: dialogClassName,\n style: dialogStyle,\n 'data-open': 'true',\n })\n\n // 处理遮罩关闭逻辑:\n // 如果 closeOnOverlay 为 true,直接使用 react-aria 的 underlayProps(包含 pointer down dismiss)\n // 如果 closeOnOverlay 为 false,我们屏蔽掉 underlayProps 的交互事件\n const backdropProps = useMemo(() => {\n const { onPointerDown, onMouseDown, ...rest } = underlayProps\n return closeOnOverlay ? underlayProps : rest\n }, [underlayProps, closeOnOverlay])\n\n const content = (\n <ModalPortalRoot>\n <ModalBackdrop\n {...mergeProps(backdropProps, {\n className: overlayClassName,\n style: overlayStyle,\n 'data-open': 'true',\n })}\n />\n <FocusScope contain restoreFocus autoFocus>\n <ModalDialog {...mergedDialogProps}>\n {!hideHeader && (title || allowUserDismiss) && (\n <ModalDialogHeader>\n {title ? (\n <ModalDialogTitle {...titleProps} id={titleId}>\n {title}\n </ModalDialogTitle>\n ) : (\n <span />\n )}\n {allowUserDismiss ? (\n <ModalCloseButton\n type=\"button\"\n onClick={handleCloseButton}\n className={closeButtonClassName}\n style={closeButtonStyle}\n aria-label=\"关闭\"\n >\n <DefaultCloseIcon />\n </ModalCloseButton>\n ) : null}\n </ModalDialogHeader>\n )}\n <ModalDialogBody>{children}</ModalDialogBody>\n </ModalDialog>\n </FocusScope>\n </ModalPortalRoot>\n )\n\n // open=false 时不渲染(第一版不做退场动画,保持 API 简洁)\n if (!open || !mountContainer) return null\n return createPortal(content, mountContainer)\n },\n)\n\nModal.displayName = 'Modal'\n\n","/**\n * NumberInput Styled Tokens\n *\n * 将 NumberInput 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * NumberInput 组件的 Styled Tokens\n */\nexport const $numberInput = createStyledTokens({\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdHeight: ['components.numberInput.size.md.height', '--ksd-number-input-md-height'],\n mdFontSize: ['components.numberInput.size.md.fontSize', '--ksd-number-input-md-font-size'],\n mdPaddingInline: ['components.numberInput.size.md.paddingInline', '--ksd-number-input-md-padding-inline'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgHeight: ['components.numberInput.size.lg.height', '--ksd-number-input-lg-height'],\n lgFontSize: ['components.numberInput.size.lg.fontSize', '--ksd-number-input-lg-font-size'],\n lgPaddingInline: ['components.numberInput.size.lg.paddingInline', '--ksd-number-input-lg-padding-inline'],\n\n // ============================================================================\n // Input 样式\n // ============================================================================\n inputWidth: ['components.numberInput.input.width', '--ksd-number-input-input-width'],\n inputHeight: ['components.numberInput.input.height', '--ksd-number-input-input-height'],\n inputPaddingInline: ['components.numberInput.input.paddingInline', '--ksd-number-input-input-padding-inline'],\n inputFontSize: ['components.numberInput.input.fontSize', '--ksd-number-input-input-font-size'],\n inputFontWeight: ['components.numberInput.input.fontWeight', '--ksd-number-input-input-font-weight'],\n inputLineHeight: ['components.numberInput.input.lineHeight', '--ksd-number-input-input-line-height'],\n\n // ============================================================================\n // Control - Side\n // ============================================================================\n controlSideButtonSm: ['components.numberInput.control.side.buttonSizeSm', '--ksd-number-input-control-side-button-sm'],\n controlSideButtonLg: ['components.numberInput.control.side.buttonSizeLg', '--ksd-number-input-control-side-button-lg'],\n controlSideInset: ['components.numberInput.control.side.inset', '--ksd-number-input-control-side-inset'],\n controlSideGap: ['components.numberInput.control.side.gap', '--ksd-number-input-control-side-gap'],\n controlSideIconSize: ['components.numberInput.control.side.iconSize', '--ksd-number-input-control-side-icon-size'],\n controlSideWidthSm: ['components.numberInput.control.side.widthsm', '--ksd-number-input-control-side-width-sm'],\n controlSideWidthLg: ['components.numberInput.control.side.widthLg', '--ksd-number-input-control-side-width-lg'],\n\n // ============================================================================\n // Control - Arrows\n // ============================================================================\n controlArrowsButtonSm: ['components.numberInput.control.arrows.buttonSizeSm', '--ksd-number-input-control-arrows-button-sm'],\n controlArrowsButtonLg: ['components.numberInput.control.arrows.buttonSizeLg', '--ksd-number-input-control-arrows-button-lg'],\n controlArrowsIconSize: ['components.numberInput.control.arrows.iconSize', '--ksd-number-input-control-arrows-icon-size'],\n controlArrowsGap: ['components.numberInput.control.arrows.gap', '--ksd-number-input-control-arrows-gap'],\n controlArrowsWidthSm: ['components.numberInput.control.arrows.widthsm', '--ksd-number-input-control-arrows-width-sm'],\n controlArrowsWidthLg: ['components.numberInput.control.arrows.widthLg', '--ksd-number-input-control-arrows-width-lg'],\n\n // ============================================================================\n // 边框\n // ============================================================================\n border: ['components.numberInput.border.default', '--ksd-number-input-border'],\n borderHover: ['components.numberInput.border.hover', '--ksd-number-input-border-hover'],\n borderDisabled: ['components.numberInput.border.disabled', '--ksd-number-input-border-disabled'],\n\n // ============================================================================\n // 背景\n // ============================================================================\n bg: ['components.numberInput.background.default', '--ksd-number-input-bg'],\n bgHover: ['components.numberInput.background.hover', '--ksd-number-input-bg-hover'],\n bgDisabled: ['components.numberInput.background.disabled', '--ksd-number-input-bg-disabled'],\n\n // ============================================================================\n // 文字\n // ============================================================================\n text: ['components.numberInput.text.default', '--ksd-number-input-text'],\n textPlaceholder: ['components.numberInput.text.placeholder', '--ksd-number-input-text-placeholder'],\n textDisabled: ['components.numberInput.text.disabled', '--ksd-number-input-text-disabled'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.numberInput.borderRadius', '--ksd-number-input-border-radius'],\n transition: ['components.numberInput.transition', '--ksd-number-input-transition'],\n});\n","/**\n * NumberInput Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport { $numberInput } from './styled-tokens';\n\nexport const NumberRoot = styled.div`\n display: inline-flex;\n flex-direction: column;\n`\n\nexport const Label = styled.label`\n margin-bottom: 6px;\n font-size: 12px;\n`\n\nexport const NumberGroup = styled.div<{ \n size?: 'md' | 'lg'; \n disabled?: boolean;\n controls?: 'buttons' | 'arrows'\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n text-align: center;\n gap: ${$numberInput.controlSideGap(props)};\n padding: ${$numberInput.controlSideInset(props)};\n border: 1px solid ${$numberInput.border(props)};\n border-radius: ${$numberInput.borderRadius(props)};\n color: ${$numberInput.text(props)};\n background: ${props.disabled ? $numberInput.bgDisabled(props) : $numberInput.bg(props)};\n height: ${props.size === 'md' ? $numberInput.mdHeight(props) : $numberInput.lgHeight(props)};\n font-size: ${props.size === 'md' ? $numberInput.mdFontSize(props) : $numberInput.lgFontSize(props)};\n \n width: ${props.controls === 'arrows' \n ? (props.size === 'md' ? $numberInput.controlArrowsWidthSm(props) : $numberInput.controlArrowsWidthLg(props))\n : (props.size === 'md' ? $numberInput.controlSideWidthSm(props) : $numberInput.controlSideWidthLg(props))};\n \n &:disabled,\n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n background-color: ${$numberInput.bgDisabled(props)};\n color: ${$numberInput.textDisabled(props)};\n opacity: 0.8;\n * {\n pointer-events: none !important;\n }\n }\n \n &:not(:disabled):not([data-disabled=\"true\"]):hover {\n border-color: ${$numberInput.borderHover(props)};\n button:not(:disabled):not(:hover) {\n background: ${$numberInput.bgHover(props)};\n color: ${$numberInput.text(props)};\n }\n }\n \n &:disabled,\n &[data-disabled=\"true\"] {\n border-color: ${$numberInput.border(props)} !important;\n }\n `}\n`\n\nexport const NumberField = styled.input`\n ${(props) => css`\n text-align: center;\n border: none;\n outline: none;\n width: ${$numberInput.inputWidth(props)};\n height: ${$numberInput.inputHeight(props)};\n font-size: ${$numberInput.inputFontSize(props)};\n font-weight: ${$numberInput.inputFontWeight(props)};\n line-height: ${$numberInput.inputLineHeight(props)};\n font-family: var(--ksd-typography-font-family);\n background: transparent;\n \n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n -moz-appearance: textfield;\n appearance: textfield;\n\n &:disabled,\n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n background-color: ${$numberInput.bgDisabled(props)};\n color: ${$numberInput.textDisabled(props)};\n opacity: 0.6;\n }\n `}\n`\n\nexport const Description = styled.div`\n ${(props) => css`\n margin-top: 6px;\n font-size: 12px;\n color: ${$numberInput.textPlaceholder(props)};\n `}\n`\n\nexport const ArrowGroup = styled.div`\n display: inline-flex;\n flex-direction: column; \n gap: 1px;\n`\n\nexport const ArrowButton = styled.button<{ direction: 'up' | 'down'; size?: 'md' | 'lg'; disabled?: boolean }>`\n ${(props) => css`\n background: transparent;\n border: none;\n border-radius: ${props.direction === 'up' ? '4px 4px 0 0' : '0 0 4px 4px'};\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: calc(${props.size === 'md' ? $numberInput.controlArrowsButtonSm(props) : $numberInput.controlArrowsButtonLg(props)} * 2);\n height: ${props.size === 'md' ? $numberInput.controlArrowsButtonSm(props) : $numberInput.controlArrowsButtonLg(props)};\n color: ${$numberInput.border(props)};\n cursor: pointer;\n transition: background-color ${$numberInput.transition(props)}, \n color ${$numberInput.transition(props)}, \n transform ${$numberInput.transition(props)};\n \n &:disabled,\n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n background-color: ${$numberInput.bgDisabled(props)};\n color: ${$numberInput.textDisabled(props)};\n opacity: 0.6;\n transition: none;\n }\n \n &:not(:disabled):hover:not([data-disabled=\"true\"]) {\n background-color: ${$numberInput.border(props)};\n color: ${$numberInput.borderHover(props)};\n }\n \n &:not(:disabled):active:not([data-disabled=\"true\"]) {\n animation: clickScale 0.3s ease;\n }\n \n @keyframes clickScale {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n }\n `}\n`\n\nexport const SideButton = styled.button<{ pos?: 'left' | 'right'; size?: 'md' | 'lg' }>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${props.size === 'md' ? $numberInput.controlSideButtonSm(props) : $numberInput.controlSideButtonLg(props)};\n height: ${props.size === 'md' ? $numberInput.controlSideButtonSm(props) : $numberInput.controlSideButtonLg(props)};\n background: transparent;\n color: ${$numberInput.border(props)};\n border: none;\n cursor: pointer;\n border-radius: 6px; \n padding: 2px;\n transition: background-color ${$numberInput.transition(props)}, \n color ${$numberInput.transition(props)}, \n transform ${$numberInput.transition(props)};\n \n &:disabled,\n &[data-disabled=\"true\"] {\n cursor: not-allowed;\n background-color: ${$numberInput.bgDisabled(props)};\n color: ${$numberInput.textDisabled(props)};\n opacity: 0.6;\n transition: none;\n }\n \n &:not(:disabled):hover:not([data-disabled=\"true\"]) {\n background-color: ${$numberInput.border(props)};\n color: ${$numberInput.borderHover(props)};\n }\n \n &:not(:disabled):active:not([data-disabled=\"true\"]) {\n animation: clickScale 0.3s ease;\n }\n \n @keyframes clickScale {\n 0% { transform: scale(1); }\n 50% { transform: scale(1.1); }\n 100% { transform: scale(1); }\n }\n `}\n`\n","import {\n forwardRef,\n useRef,\n useState,\n useEffect,\n type ReactNode,\n type ChangeEvent,\n type KeyboardEvent,\n} from 'react'\nimport {\n\tNumberRoot,\n\tNumberGroup,\n\tNumberField,\n\tLabel,\n\tDescription,\n\tArrowGroup,\n\tSideButton,\n\tArrowButton\n} from './NumberInput.style'\nimport { PlusOutline, ChevronUpOutline, ChevronDownOutline, MinusOutline } from '@kingsoft-ai/icons'\nexport type NumberInputProps = {\n\t/** 初始数值(受控请使用 value) */\n\tdefaultValue?: number\n\t/** 受控数值 */\n\tvalue?: number\n\t/** 最小值 */\n\tmin?: number\n\t/** 最大值 */\n\tmax?: number\n\t/** 步长 */\n\tstep?: number\n\t/** 控件样式:'buttons' - 左右 加/减 按钮;'arrows' - 右侧竖直箭头 */\n\tcontrols?: 'buttons' | 'arrows'\n\t/** 大小:'md' | 'lg' */\n\tsize?: 'md' | 'lg'\n\t/** \n\t * 值变化回调(统一 API,推荐使用)\n\t * 等同于其他表单组件的 onChange,返回 number | undefined \n\t */\n\tonValueChange?: (value: number | undefined) => void\n\t/**\n\t * 值变化回调别名(统一 API)\n\t * 与 onValueChange 功能相同,提供与其他表单组件一致的 API 命名\n\t */\n\tonChangeValue?: (value: number | undefined) => void\n\t/** 标签文本 */\n\tlabel?: ReactNode\n\t/** 描述文本 */\n\tdescription?: ReactNode\n\t/** 是否显示错误状态 */\n\terror?: boolean\n\t/** 错误提示文本 */\n\terrorMessage?: ReactNode\n\t/** 是否禁用 */\n\tdisabled?: boolean\n\t/** 自定义类名 */\n\tclassName?: string\n\t/** 自定义样式(支持 CSS 变量定制) */\n\tstyle?: React.CSSProperties\n\t/** 自定义 ID */\n\tid?: string\n\t/** 原生 input onChange 事件(用于表单库等场景) */\n\tonChange?: (e: ChangeEvent<HTMLInputElement>) => void\n}\nconst PlusIcon = PlusOutline\nconst MinusIcon = MinusOutline\nconst UpIcon = ChevronUpOutline\nconst DownIcon = ChevronDownOutline\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n\t(\n\t\t\t{\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep = 1,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonValueChange,\n\t\t\tonChangeValue,\n\t\t\tdisabled,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\terror = false,\n\t\t\tid,\n\t\t\tcontrols = 'buttons',\n\t\t\tsize = 'md',\n\t\t\t...rest\n\t\t},\n\t\tforwardedRef,\n\t) => {\n\t\tconst innerRef = useRef<HTMLInputElement | null>(null)\n\t\t// 同步 forwardedRef 到内部 ref(支持 object ref 与回调 ref)\n\t\tuseEffect(() => {\n\t\t\tif (!forwardedRef) return\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(innerRef.current)\n\t\t\t} else {\n\t\t\t\t;(forwardedRef as React.MutableRefObject<HTMLInputElement | null>).current = innerRef.current\n\t\t\t}\n\t\t}, [forwardedRef])\n\t\tconst isControlled = value !== undefined\n\t\tconst [internal, setInternal] = useState<number | undefined>(defaultValue)\n\t\tconst currentValue = isControlled ? value : internal\n\t\t// clamp 工具\n\t\tconst clamp = (v: number) => {\n\t\t\tlet next = v\n\t\t\tif (min !== undefined) next = Math.max(next, min)\n\t\t\tif (max !== undefined) next = Math.min(next, max)\n\t\t\treturn next\n\t\t}\n\t\t// 统一触发值变化回调\n\t\tconst triggerValueChange = (v: number | undefined) => {\n\t\t\tonValueChange?.(v)\n\t\t\tonChangeValue?.(v)\n\t\t}\n\n\t\tconst setValue = (v: number | undefined) => {\n\t\t\tif (!isControlled) setInternal(v)\n\t\t\t// 更新原生 input 的 value 并触发 input 事件,兼容外部监听\n\t\t\tif (innerRef.current) {\n\t\t\t\tconst nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set\n\t\t\t\tnativeSetter?.call(innerRef.current, v === undefined ? '' : String(v))\n\t\t\t\tconst ev = new Event('input', { bubbles: true })\n\t\t\t\tObject.defineProperty(ev, 'target', { writable: false, value: innerRef.current })\n\t\t\t\t// 触发原生 onChange 回调(如果有人依赖)\n\t\t\t\tonChange?.(ev as unknown as ChangeEvent<HTMLInputElement>)\n\t\t\t}\n\t\t\ttriggerValueChange(v)\n\t\t}\n\t\t// 修改handleInputChange函数\n\t\tconst handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\t const raw = e.target.value\n\t\t // 当输入为空时,使用min或0作为默认值,而不是undefined\n\t\t const parsed = raw === '' ? (min !== undefined ? min : 0) : Number(raw)\n\t\t const final = Number.isNaN(parsed) ? (min !== undefined ? min : 0) : clamp(parsed)\n\t\t if (!isControlled) setInternal(final)\n\t\t triggerValueChange(final)\n\t\t onChange?.(e)\n\t\t}\n\n\t\tconst increment = () => {\n\t\t\tconst base = currentValue ?? 0\n\t\t\tconst next = clamp(base + (step ?? 1))\n\t\t\tsetValue(next)\n\t\t}\n\n\t\tconst decrement = () => {\n\t\t\tconst base = currentValue ?? 0\n\t\t\tconst next = clamp(base - (step ?? 1))\n\t\t\tsetValue(next)\n\t\t}\n\t\tconst handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\t\tif (e.key === 'ArrowUp') {\n\t\t\t\te.preventDefault()\n\t\t\t\tincrement()\n\t\t\t} else if (e.key === 'ArrowDown') {\n\t\t\t\te.preventDefault()\n\t\t\t\tdecrement()\n\t\t\t}\n\t\t}\n\n\t\tconst inputId = id || `number-${Math.random().toString(36).slice(2, 9)}`\n\n\t\tconst atMin = currentValue !== undefined && min !== undefined && currentValue <= min\n\t\tconst atMax = currentValue !== undefined && max !== undefined && currentValue >= max\n\n\t\treturn (\n\t\t\t<NumberRoot className={className} style={style}>\n\t\t\t\t{label && (\n\t\t\t\t\t<Label htmlFor={inputId} aria-hidden={false}>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Label>\n\t\t\t\t)}\n\t\t\t\t<NumberGroup className={`controls-${controls} size-${size}`} size={size} disabled={disabled} controls={controls}>\n\t\t\t\t\t{controls === 'buttons' && (\n\t\t\t\t\t\t<SideButton\n\t\t\t\t\t\tclassName=\"btn-decrement\"\n\t\t\t\t\t\tpos=\"left\"\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={decrement}\n\t\t\t\t\t\tdisabled={disabled || atMin}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MinusIcon size={size === 'lg' ? 12 : 8.571} />\n\t\t\t\t\t</SideButton>\n\t\t\t\t\t)}\n\t\t\t\t\t<NumberField\n\t\t\t\t\t\t{...(rest as any)}\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\tref={innerRef}\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\tvalue={currentValue === undefined ? '' : String(currentValue)}\n\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-invalid={error}\n\t\t\t\t\t\taria-describedby={description ? `${inputId}-desc` : undefined}\n\t\t\t\t\t\tclassName={controls === 'buttons' ? 'with-side-controls' : undefined}\n\t\t\t\t\t\tdata-size={size}\n\t\t\t\t\t/>\n\t\t\t\t\t{controls === 'buttons' && (\n\t\t\t\t\t\t<SideButton\n\t\t\t\t\t\tclassName=\"btn-increment\"\n\t\t\t\t\t\tpos=\"right\"\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={increment}\n\t\t\t\t\t\tdisabled={disabled || atMax}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon size={size === 'lg' ? 12 : 8.571} />\n\t\t\t\t\t</SideButton>\n\t\t\t\t\t)}\n\t\t\t\t\t{controls === 'arrows' && (\n\t\t\t\t\t\t<ArrowGroup className=\"arrow-group\" >\n\t\t\t\t\t\t\t<ArrowButton\n\t\t\t direction=\"up\"\n\t\t\t type=\"button\"\n\t\t\t size={size}\n\t\t\t onClick={increment}\n\t\t\t disabled={disabled || atMax}\n\t\t\t className=\"arrow-up\"\n\t\t >\n\t\t\t <UpIcon />\n\t\t </ArrowButton>\n\t\t <ArrowButton\n\t\t\t direction=\"down\"\n\t\t\t type=\"button\"\n\t\t\t aria-label=\"减小\"\n\t\t\t title=\"减小\"\n\t\t\t size={size}\n\t\t\t onClick={decrement}\n\t\t\t disabled={disabled || atMin}\n\t\t\t className=\"arrow-down\"\n\t\t >\n\t\t\t <DownIcon />\n\t\t </ArrowButton>\n\t\t\t\t\t\t</ArrowGroup>\n\t\t\t\t\t)}\n\t\t\t\t</NumberGroup>\n\t\t\t\t{description && <Description id={`${inputId}-desc`}>{description}</Description>}\n\t\t\t</NumberRoot>\n\t\t)\n\t},\n)\nNumberInput.displayName = 'NumberInput'\nexport default NumberInput","/**\n * Radio Styled Tokens\n *\n * 将 Radio 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Radio 组件的 Styled Tokens\n */\nexport const $radio = createStyledTokens({\n // ============================================================================\n // Control - 尺寸与边框\n // ============================================================================\n controlSize: ['components.radio.control.size', '--ksd-radio-control-size'],\n controlBorderRadius: ['components.radio.control.borderRadius', '--ksd-radio-control-border-radius'],\n controlBorderWidth: ['components.radio.control.borderWidth', '--ksd-radio-control-border-width'],\n controlBg: ['components.radio.control.background', '--ksd-radio-control-bg'],\n \n // ============================================================================\n // Control - 边框颜色\n // ============================================================================\n controlBorder: ['components.radio.control.borderColor.default', '--ksd-radio-control-border'],\n controlBorderHover: ['components.radio.control.borderColor.hover', '--ksd-radio-control-border-hover'],\n controlBorderChecked: ['components.radio.control.borderColor.checked', '--ksd-radio-control-border-checked'],\n controlBorderDisabled: ['components.radio.control.borderColor.disabled', '--ksd-radio-control-border-disabled'],\n \n // ============================================================================\n // Indicator\n // ============================================================================\n indicatorSize: ['components.radio.control.indicator.size', '--ksd-radio-indicator-size'],\n indicatorColor: ['components.radio.control.indicator.color', '--ksd-radio-indicator-color'],\n indicatorColorDisabled: ['components.radio.control.indicator.disabled', '--ksd-radio-indicator-color-disabled'],\n \n // ============================================================================\n // Focus & Spacing\n // ============================================================================\n focusRing: ['components.radio.focusRing', '--ksd-radio-focus-ring'],\n gap: ['components.radio.gap', '--ksd-radio-gap'],\n \n // ============================================================================\n // Text - Label\n // ============================================================================\n labelFontSize: ['components.radio.text.label.fontSize', '--ksd-radio-label-font-size'],\n labelFontWeight: ['components.radio.text.label.fontWeight', '--ksd-radio-label-font-weight'],\n labelColor: ['components.radio.text.label.color', '--ksd-radio-label-color'],\n labelColorDisabled: ['components.radio.text.label.disabled', '--ksd-radio-label-color-disabled'],\n \n // ============================================================================\n // Text - Description\n // ============================================================================\n descriptionFontSize: ['components.radio.text.description.fontSize', '--ksd-radio-description-font-size'],\n descriptionColor: ['components.radio.text.description.color', '--ksd-radio-description-color'],\n descriptionColorDisabled: ['components.radio.text.description.disabled', '--ksd-radio-description-color-disabled'],\n \n // ============================================================================\n // Disabled & Transition\n // ============================================================================\n disabledOpacity: ['components.radio.disabled.opacity', '--ksd-radio-disabled-opacity'],\n transition: ['components.radio.transition', '--ksd-radio-transition'],\n});\n","/**\n * Radio Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport { $radio } from './styled-tokens';\n\ninterface RadioWrapperProps {\n disabled?: boolean\n}\n\nexport const RadioWrapper = styled.label<RadioWrapperProps>`\n ${(props) => css`\n display: inline-flex;\n align-items: flex-start;\n gap: ${$radio.gap(props)};\n cursor: ${props.disabled ? 'not-allowed' : 'pointer'};\n opacity: ${props.disabled ? $radio.disabledOpacity(props) : 1};\n transition: opacity ${$radio.transition(props)};\n `}\n`\n\ninterface RadioRootProps {\n disabled?: boolean\n}\n\nexport const RadioRoot = styled.span<RadioRootProps>`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n`\n\nexport const RadioNative = styled.input`\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n clip: rect(0 0 0 0);\n overflow: hidden;\n white-space: nowrap;\n`\n\nexport const RadioIndicator = styled.span<{\n isChecked?: boolean;\n isDisabled?: boolean;\n isFocusVisible?: boolean;\n isHovered?: boolean;\n}>`\n ${(props) => css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: ${$radio.controlSize(props)};\n height: ${$radio.controlSize(props)};\n border-radius: ${$radio.controlBorderRadius(props)};\n border-width: ${$radio.controlBorderWidth(props)};\n border-style: solid;\n border-color: ${$radio.controlBorder(props)};\n background: ${$radio.controlBg(props)};\n transition: border-color ${$radio.transition(props)}, \n box-shadow ${$radio.transition(props)}, \n transform ${$radio.transition(props)};\n\n /* Focus ring - using prop instead of component selector */\n ${props.isFocusVisible && css`\n box-shadow: ${$radio.focusRing(props)};\n `}\n\n /* Hover state - using prop instead of component selector */\n ${props.isHovered && !props.isDisabled && css`\n border-color: ${$radio.controlBorderHover(props)};\n `}\n\n /* Checked state */\n ${props.isChecked && css`\n border-color: ${$radio.controlBorderChecked(props)};\n `}\n\n /* Disabled state */\n ${props.isDisabled && css`\n border-color: ${$radio.controlBorderDisabled(props)};\n `}\n\n /* Inner indicator dot */\n &::after {\n content: \"\";\n position: absolute;\n width: ${$radio.indicatorSize(props)};\n height: ${$radio.indicatorSize(props)};\n background: ${$radio.indicatorColor(props)};\n border-radius: 50%;\n transform: scale(0);\n opacity: 0;\n transition: transform ${$radio.transition(props)}, \n opacity ${$radio.transition(props)};\n }\n\n /* Checked state indicator dot */\n ${props.isChecked && css`\n &::after {\n transform: scale(1);\n opacity: 1;\n }\n `}\n\n /* Disabled indicator dot */\n ${props.isDisabled && css`\n &::after {\n background: ${$radio.indicatorColorDisabled(props)};\n }\n `}\n `}\n`\n\nexport const RadioText = styled.span`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`\n\ninterface RadioLabelProps {\n disabled?: boolean\n}\n\nexport const RadioLabel = styled.span<RadioLabelProps>`\n ${(props) => css`\n font-size: ${$radio.labelFontSize(props)};\n font-weight: ${$radio.labelFontWeight(props)};\n color: ${props.disabled ? $radio.labelColorDisabled(props) : $radio.labelColor(props)};\n line-height: 1.5;\n transition: color ${$radio.transition(props)};\n `}\n`\n\ninterface RadioDescriptionProps {\n disabled?: boolean\n}\n\nexport const RadioDescription = styled.span<RadioDescriptionProps>`\n ${(props) => css`\n color: ${props.disabled ? $radio.descriptionColorDisabled(props) : $radio.descriptionColor(props)};\n font-size: ${$radio.descriptionFontSize(props)};\n line-height: 1.5;\n transition: color ${$radio.transition(props)};\n `}\n`\n","import { forwardRef, useState, useCallback } from 'react'\nimport type { InputHTMLAttributes, ReactNode, ChangeEvent, FocusEvent } from 'react'\nimport {\n RadioDescription,\n RadioIndicator,\n RadioLabel,\n RadioNative,\n RadioRoot,\n RadioText,\n RadioWrapper,\n} from './Radio.style'\n\nexport type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> & {\n label?: ReactNode\n description?: ReactNode\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ label, description, className, style, checked, defaultChecked, onChange, onFocus, onBlur, ...inputProps }, ref) => {\n const isDisabled = Boolean(inputProps.disabled)\n \n // 判断是否为 controlled 组件\n const isControlled = checked !== undefined\n \n // 内部状态用于 uncontrolled 组件\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false)\n \n // Focus 和 Hover 状态\n const [isFocusVisible, setIsFocusVisible] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n \n // 计算当前选中状态\n const isChecked = isControlled ? checked : internalChecked\n \n // 处理变化事件\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(event.target.checked)\n }\n onChange?.(event)\n }, [isControlled, onChange])\n \n // 处理 focus 事件\n const handleFocus = useCallback((event: FocusEvent<HTMLInputElement>) => {\n // 检测是否为键盘 focus(focus-visible)\n if (event.target.matches(':focus-visible')) {\n setIsFocusVisible(true)\n }\n onFocus?.(event)\n }, [onFocus])\n \n // 处理 blur 事件\n const handleBlur = useCallback((event: FocusEvent<HTMLInputElement>) => {\n setIsFocusVisible(false)\n onBlur?.(event)\n }, [onBlur])\n\n return (\n <RadioWrapper \n disabled={isDisabled} \n className={className} \n style={style} \n data-disabled={isDisabled ? 'true' : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <RadioRoot disabled={isDisabled}>\n <RadioNative \n ref={ref} \n type=\"radio\" \n disabled={isDisabled} \n checked={isControlled ? checked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...inputProps} \n />\n <RadioIndicator \n aria-hidden \n isChecked={isChecked} \n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n isHovered={isHovered}\n />\n </RadioRoot>\n {(label || description) && (\n <RadioText>\n {label ? <RadioLabel disabled={isDisabled}>{label}</RadioLabel> : null}\n {description ? <RadioDescription disabled={isDisabled}>{description}</RadioDescription> : null}\n </RadioText>\n )}\n </RadioWrapper>\n )\n },\n)\n\nRadio.displayName = 'Radio'\n\n","/**\n * Skeleton Styled Tokens\n *\n * 将 Skeleton 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Skeleton 组件的 Styled Tokens\n */\nexport const $skeleton = createStyledTokens({\n // ============================================================================\n // 背景颜色\n // ============================================================================\n bgBase: ['components.skeleton.background.base', '--ksd-skeleton-bg-base'],\n bgHighlight: ['components.skeleton.background.highlight', '--ksd-skeleton-bg-highlight'],\n\n // ============================================================================\n // 动画\n // ============================================================================\n animationDuration: ['components.skeleton.animation.duration', '--ksd-skeleton-animation-duration'],\n animationEasing: ['components.skeleton.animation.easing', '--ksd-skeleton-animation-easing'],\n\n // ============================================================================\n // 圆角\n // ============================================================================\n radiusSm: ['components.skeleton.radius.sm', '--ksd-skeleton-radius-sm'],\n radiusMd: ['components.skeleton.radius.md', '--ksd-skeleton-radius-md'],\n radiusLg: ['components.skeleton.radius.lg', '--ksd-skeleton-radius-lg'],\n radiusPill: ['components.skeleton.radius.pill', '--ksd-skeleton-radius-pill'],\n radiusCircle: ['components.skeleton.radius.circle', '--ksd-skeleton-radius-circle'],\n\n // ============================================================================\n // 尺寸 - Block\n // ============================================================================\n blockHeight: ['components.skeleton.block.height', '--ksd-skeleton-block-height'],\n\n // ============================================================================\n // 尺寸 - Text\n // ============================================================================\n textLineHeight: ['components.skeleton.text.lineHeight', '--ksd-skeleton-text-line-height'],\n textGap: ['components.skeleton.text.gap', '--ksd-skeleton-text-gap'],\n textLastLineWidth: ['components.skeleton.text.lastLineWidth', '--ksd-skeleton-text-last-line-width'],\n\n // ============================================================================\n // 尺寸 - Circle\n // ============================================================================\n circleSize: ['components.skeleton.circle.size', '--ksd-skeleton-circle-size'],\n});\n","import { styled, css } from '@kingsoft-ai/theme'\nimport { keyframes } from '@emotion/react'\nimport type { AppTheme } from '@kingsoft-ai/theme'\nimport { $skeleton } from './styled-tokens'\n\nexport type SkeletonVariant = 'text' | 'rect' | 'block' | 'circle'\nexport type SkeletonRadius = 'sm' | 'md' | 'lg' | 'pill' | 'circle'\n\ntype ThemeProps = { theme?: AppTheme }\n\nconst shimmerKeyframes = keyframes`\n 0% {\n background-position: -200% 0;\n }\n 100% {\n background-position: 200% 0;\n }\n`\n\nconst getShimmerAnimation = (props: ThemeProps) => css`\n background: linear-gradient(\n 90deg,\n ${$skeleton.bgBase(props)} 25%,\n ${$skeleton.bgHighlight(props)} 50%,\n ${$skeleton.bgBase(props)} 75%\n );\n background-size: 200% 100%;\n animation: ${shimmerKeyframes} ${$skeleton.animationDuration(props)}\n ${$skeleton.animationEasing(props)} infinite;\n`\n\nconst getRadius = (variant: SkeletonVariant | undefined, radius: SkeletonRadius | undefined, props: ThemeProps) => {\n if (variant === 'circle') {\n return $skeleton.radiusCircle(props)\n }\n switch (radius) {\n case 'sm':\n return $skeleton.radiusSm(props)\n case 'md':\n return $skeleton.radiusMd(props)\n case 'lg':\n return $skeleton.radiusLg(props)\n case 'pill':\n return $skeleton.radiusPill(props)\n case 'circle':\n return $skeleton.radiusCircle(props)\n default:\n return $skeleton.radiusSm(props)\n }\n}\n\nexport const SkeletonRoot = styled.div<{\n $variant?: SkeletonVariant\n $width?: string\n $height?: string\n $radius?: SkeletonRadius\n $animate?: boolean\n}>`\n ${(props) => css`\n background: ${$skeleton.bgBase(props)};\n border-radius: ${getRadius(props.$variant, props.$radius, props)};\n \n /* 宽度计算 */\n width: ${(() => {\n if (props.$width) return props.$width\n if (props.$variant === 'circle') return $skeleton.circleSize(props)\n return '100%'\n })()};\n \n /* 高度计算 */\n height: ${(() => {\n if (props.$height) return props.$height\n if (props.$variant === 'circle') return $skeleton.circleSize(props)\n if (props.$variant === 'text') return $skeleton.textLineHeight(props)\n return $skeleton.blockHeight(props)\n })()};\n \n /* 动画 */\n ${props.$animate !== false && getShimmerAnimation(props)}\n `}\n`\n\nexport const SkeletonStack = styled.div<{\n $width?: string\n}>`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n gap: ${$skeleton.textGap(props)};\n width: ${props.$width || '100%'};\n `}\n`\n\nexport const SkeletonLine = styled.div<{\n $isLast?: boolean\n $customWidth?: string\n $animate?: boolean\n}>`\n ${(props) => css`\n background: ${$skeleton.bgBase(props)};\n height: ${$skeleton.textLineHeight(props)};\n border-radius: ${$skeleton.radiusPill(props)};\n width: ${props.$customWidth || (props.$isLast ? $skeleton.textLastLineWidth(props) : '100%')};\n \n /* 动画 */\n ${props.$animate !== false && getShimmerAnimation(props)}\n `}\n`\n\nexport const skeletonVariants: Record<string, SkeletonVariant> = {\n text: 'text',\n rect: 'rect',\n block: 'block',\n circle: 'circle',\n}\n\nexport const skeletonRadii: Record<string, SkeletonRadius> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n pill: 'pill',\n circle: 'circle',\n}\n","import { forwardRef } from 'react'\nimport type { HTMLAttributes, ReactNode } from 'react'\nimport {\n SkeletonRoot,\n SkeletonLine,\n SkeletonStack,\n skeletonVariants,\n skeletonRadii,\n type SkeletonVariant,\n type SkeletonRadius,\n} from './Skeleton.style'\n\nconst toCssSize = (value?: number | string) => {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n /** Skeleton 展示形态 */\n variant?: SkeletonVariant\n /** 自定义宽度,支持 number(px) 或 string */\n width?: number | string\n /** 自定义高度,支持 number(px) 或 string */\n height?: number | string\n /** 文本模式下的行数 */\n lines?: number\n /** 是否展示骨架动画 */\n animate?: boolean\n /** 方形/矩形骨架的圆角尺寸 */\n radius?: SkeletonRadius\n /** 加载完成后展示真实内容 */\n loaded?: boolean\n /** 加载完成后展示的真实内容 */\n children?: ReactNode\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = 'rect',\n width,\n height,\n lines = variant === 'text' ? 3 : 1,\n animate = true,\n radius = 'md',\n loaded = false,\n className,\n children,\n style,\n ...rest\n },\n ref,\n ) => {\n const resolvedWidth = toCssSize(width)\n const resolvedHeight = toCssSize(height)\n const lineCount = Math.max(1, lines)\n const shouldRenderStack = variant === 'text' && lineCount > 1\n\n if (loaded) {\n if (!children) {\n return null\n }\n\n return (\n <div ref={ref} className={className} style={style} {...rest}>\n {children}\n </div>\n )\n }\n\n const accessibilityProps = {\n role: 'status' as const,\n 'aria-live': 'polite' as const,\n 'aria-busy': true,\n }\n\n if (shouldRenderStack) {\n return (\n <SkeletonStack\n ref={ref}\n className={className}\n style={style}\n $width={resolvedWidth}\n data-variant=\"text\"\n {...accessibilityProps}\n {...rest}\n >\n {Array.from({ length: lineCount }).map((_, index) => (\n <SkeletonLine\n key={index}\n $animate={animate}\n $isLast={index === lineCount - 1}\n $customWidth={index === lineCount - 1 ? resolvedWidth : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </SkeletonStack>\n )\n }\n\n return (\n <SkeletonRoot\n ref={ref}\n className={className}\n style={style}\n $variant={variant}\n $animate={animate}\n $radius={radius}\n $width={resolvedWidth}\n $height={resolvedHeight}\n data-variant={variant}\n {...accessibilityProps}\n {...rest}\n />\n )\n },\n)\n\nSkeleton.displayName = 'Skeleton'\n\nexport { skeletonVariants, skeletonRadii }\nexport type { SkeletonVariant, SkeletonRadius }\n\n","/**\n * Stepper Styled Tokens\n *\n * 将 Stepper 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Stepper 组件的 Styled Tokens\n */\nexport const $stepper = createStyledTokens({\n // ============================================================================\n // 间距\n // ============================================================================\n gap: ['components.stepper.gap', '--ksd-stepper-gap'],\n\n // ============================================================================\n // Circle 尺寸\n // ============================================================================\n circleMdSize: ['components.stepper.circle.size.md', '--ksd-stepper-circle-md-size'],\n circleSmSize: ['components.stepper.circle.size.sm', '--ksd-stepper-circle-sm-size'],\n circleMdFontSize: ['components.stepper.circle.fontSize.md', '--ksd-stepper-circle-md-font-size'],\n circleSmFontSize: ['components.stepper.circle.fontSize.sm', '--ksd-stepper-circle-sm-font-size'],\n circleMdIconSize: ['components.stepper.circle.iconSize.md', '--ksd-stepper-circle-md-icon-size'],\n circleSmIconSize: ['components.stepper.circle.iconSize.sm', '--ksd-stepper-circle-sm-icon-size'],\n\n // ============================================================================\n // Dot 尺寸\n // ============================================================================\n dotMdSize: ['components.stepper.dot.size.md', '--ksd-stepper-dot-md-size'],\n dotSmSize: ['components.stepper.dot.size.sm', '--ksd-stepper-dot-sm-size'],\n dotPulseColor: ['components.stepper.dot.pulseColor', '--ksd-stepper-dot-pulse-color'],\n\n // ============================================================================\n // Line\n // ============================================================================\n lineColor: ['components.stepper.line.color.default', '--ksd-stepper-line-color'],\n lineColorActive: ['components.stepper.line.color.active', '--ksd-stepper-line-color-active'],\n lineSize: ['components.stepper.line.size', '--ksd-stepper-line-size'],\n\n // ============================================================================\n // Title 文字\n // ============================================================================\n titleColor: ['components.stepper.text.title.color.default', '--ksd-stepper-title-color'],\n titleColorActive: ['components.stepper.text.title.color.active', '--ksd-stepper-title-color-active'],\n titleColorError: ['components.stepper.text.title.color.error', '--ksd-stepper-title-color-error'],\n titleColorWaiting: ['components.stepper.text.title.color.waiting', '--ksd-stepper-title-color-waiting'],\n titleFontWeight: ['components.stepper.text.title.fontWeight', '--ksd-stepper-title-font-weight'],\n titleFontSize: ['components.stepper.text.title.fontSize', '--ksd-stepper-title-font-size'],\n\n // ============================================================================\n // Description 描述文字\n // ============================================================================\n descriptionColor: ['components.stepper.text.description.color', '--ksd-stepper-description-color'],\n descriptionFontSize: ['components.stepper.text.description.fontSize', '--ksd-stepper-description-font-size'],\n\n // ============================================================================\n // 状态\n // ============================================================================\n processColor: ['components.stepper.state.process.color', '--ksd-stepper-process-color'],\n processBg: ['components.stepper.state.process.bg', '--ksd-stepper-process-bg'],\n waitColor: ['components.stepper.state.wait.color', '--ksd-stepper-wait-color'],\n waitBg: ['components.stepper.state.wait.bg', '--ksd-stepper-wait-bg'],\n finishColor: ['components.stepper.state.finish.color', '--ksd-stepper-finish-color'],\n finishBg: ['components.stepper.state.finish.bg', '--ksd-stepper-finish-bg'],\n errorColor: ['components.stepper.state.error.color', '--ksd-stepper-error-color'],\n errorBg: ['components.stepper.state.error.bg', '--ksd-stepper-error-bg'],\n});\n","/**\n * Stepper Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css, keyframes } from '@kingsoft-ai/theme';\nimport { $stepper } from './styled-tokens';\n\nexport type StepperOrientation = 'horizontal' | 'vertical'\nexport type StepperLabelPlacement = 'right' | 'bottom'\nexport type StepStatus = 'wait' | 'process' | 'finish' | 'error'\nexport type StepSize = 'md' | 'sm'\nexport type StepperVariant = 'default' | 'dot'\n\nconst ringPop = keyframes`\n 0% {\n transform: scale(1.5);\n opacity: 0;\n }\n 50% {\n opacity: 0.6;\n }\n 100% {\n transform: scale(1);\n opacity: 0.6;\n }\n`\n\nexport const StepperRoot = styled.div<{\n orientation: StepperOrientation\n}>`\n display: flex;\n flex-direction: ${({ orientation }) => (orientation === 'vertical' ? 'column' : 'row')};\n width: 100%;\n \n ${({ orientation }) => orientation === 'horizontal' && css`\n align-items: flex-start;\n `}\n`\n\nexport const StepRoot = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n status: StepStatus\n isLast: boolean\n flexBasis?: string\n variant: StepperVariant\n}>`\n ${(props) => css`\n position: relative;\n display: flex;\n flex: ${props.isLast || props.orientation === 'vertical' ? '0 0 auto' : '1'};\n flex-direction: ${props.orientation === 'horizontal' && props.labelPlacement === 'bottom' ? 'column' : 'row'};\n align-items: ${props.orientation === 'horizontal' && props.labelPlacement === 'bottom' ? 'center' : 'flex-start'};\n\n /* Gap between content elements */\n gap: ${$stepper.gap(props)};\n `}\n`\n\nexport const StepIconContainer = styled.div<{\n status: StepStatus\n size: StepSize\n variant: StepperVariant\n}>`\n ${(props) => css`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n \n /* Size */\n width: ${props.variant === 'dot'\n ? (props.size === 'md' ? $stepper.dotMdSize(props) : $stepper.dotSmSize(props))\n : (props.size === 'md' ? $stepper.circleMdSize(props) : $stepper.circleSmSize(props))};\n height: ${props.variant === 'dot'\n ? (props.size === 'md' ? $stepper.dotMdSize(props) : $stepper.dotSmSize(props))\n : (props.size === 'md' ? $stepper.circleMdSize(props) : $stepper.circleSmSize(props))};\n\n border-radius: 50%;\n border: ${props.variant === 'dot' ? 'none' : '1px solid'};\n transition: all 0.2s ease;\n\n /* Colors based on Status */\n ${props.variant === 'dot'\n ? props.status === 'wait'\n ? css`\n background-color: ${$stepper.lineColor(props)};\n color: transparent;\n `\n : css`\n background-color: ${\n props.status === 'process' ? $stepper.processColor(props) :\n props.status === 'finish' ? $stepper.finishColor(props) :\n props.status === 'error' ? $stepper.errorColor(props) :\n $stepper.waitColor(props)\n };\n color: transparent;\n ${props.status === 'process' && css`\n &::after {\n content: '';\n position: absolute;\n inset: -2px;\n border-radius: 50%;\n background-color: ${$stepper.dotPulseColor(props)};\n animation: ${ringPop} 0.4s ease-out forwards;\n z-index: -1;\n }\n `}\n `\n : props.status === 'process'\n ? css`\n border-color: ${$stepper.processColor(props)};\n background-color: ${$stepper.processBg(props)};\n color: var(--ksd-colors-common-white);\n &::after {\n content: '';\n position: absolute;\n inset: -2px;\n border-radius: 50%;\n border: 2px solid ${$stepper.processColor(props)};\n animation: ${ringPop} 0.4s ease-out forwards;\n z-index: -1;\n }\n `\n : props.status === 'finish'\n ? css`\n border-color: ${$stepper.finishColor(props)};\n background-color: ${$stepper.finishBg(props)};\n color: ${$stepper.finishColor(props)};\n `\n : props.status === 'error'\n ? css`\n border-color: ${$stepper.errorColor(props)};\n background-color: ${$stepper.errorBg(props)};\n color: ${$stepper.errorColor(props)};\n `\n : css`\n border-color: ${$stepper.waitColor(props)};\n background-color: transparent;\n color: ${$stepper.waitColor(props)};\n `\n }\n\n /* Text style inside circle */\n font-size: ${props.size === 'md' ? $stepper.circleMdFontSize(props) : $stepper.circleSmFontSize(props)};\n font-weight: 500;\n\n /* Icon size control */\n svg {\n width: ${props.size === 'md' ? $stepper.circleMdIconSize(props) : $stepper.circleSmIconSize(props)};\n height: ${props.size === 'md' ? $stepper.circleMdIconSize(props) : $stepper.circleSmIconSize(props)};\n flex-shrink: 0;\n }\n `}\n`\n\nexport const StepContent = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n}>`\n display: flex;\n flex-direction: column;\n justify-content: center;\n \n ${({ orientation, labelPlacement }) => \n orientation === 'horizontal' && labelPlacement === 'bottom' && css`\n align-items: center;\n text-align: center;\n padding-top: 4px;\n `}\n\n ${({ orientation, labelPlacement }) => \n (orientation === 'vertical' || labelPlacement === 'right') && css`\n padding-left: 4px;\n padding-top: 4px; \n `}\n`\n\nexport const StepTitle = styled.div<{\n status: StepStatus\n}>`\n ${(props) => css`\n font-size: ${$stepper.titleFontSize(props)};\n font-weight: ${$stepper.titleFontWeight(props)};\n line-height: 1.4;\n \n color: ${\n props.status === 'process' ? $stepper.titleColorActive(props) :\n props.status === 'finish' ? $stepper.titleColor(props) :\n props.status === 'error' ? $stepper.titleColorError(props) :\n $stepper.titleColorWaiting(props)\n };\n `}\n`\n\nexport const StepDescription = styled.div`\n ${(props) => css`\n font-size: ${$stepper.descriptionFontSize(props)};\n color: ${$stepper.descriptionColor(props)};\n line-height: 1.4;\n margin-top: 2px;\n `}\n`\n\nexport const StepConnector = styled.div<{\n orientation: StepperOrientation\n labelPlacement: StepperLabelPlacement\n isFinished: boolean\n size: StepSize\n variant: StepperVariant\n}>`\n ${(props) => {\n const iconSizeVar = props.variant === 'dot'\n ? (props.size === 'md' ? $stepper.dotMdSize(props) : $stepper.dotSmSize(props))\n : (props.size === 'md' ? $stepper.circleMdSize(props) : $stepper.circleSmSize(props));\n\n if (props.orientation === 'horizontal') {\n return css`\n flex: 1;\n height: ${$stepper.lineSize(props)};\n background-color: ${props.isFinished ? $stepper.lineColorActive(props) : $stepper.lineColor(props)};\n margin: 0 ${$stepper.gap(props)};\n margin-top: calc(${iconSizeVar} / 2);\n transition: background-color 0.2s ease;\n ${props.labelPlacement === 'bottom' ? 'align-self: flex-start;' : ''}\n `;\n }\n \n // Vertical\n return css`\n width: ${$stepper.lineSize(props)};\n min-height: 40px;\n flex: 1;\n background-color: ${props.isFinished ? $stepper.lineColorActive(props) : $stepper.lineColor(props)};\n margin-top: 4px;\n transition: background-color 0.2s ease;\n `;\n }}\n`\n","import { Children, cloneElement, forwardRef, isValidElement } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n StepperRoot,\n type StepperOrientation,\n type StepperLabelPlacement,\n type StepSize,\n type StepStatus,\n type StepperVariant,\n} from './Stepper.style'\nimport type { StepProps } from './Step'\n\nexport interface StepperProps {\n /** Current active step index (0-indexed) */\n active?: number\n /** Orientation of the stepper */\n orientation?: StepperOrientation\n /** Label placement (only for horizontal orientation) */\n labelPlacement?: StepperLabelPlacement\n /** Size of the stepper */\n size?: StepSize\n /** Visual variant */\n variant?: StepperVariant\n /** Children (Step components) */\n children: ReactNode\n /** Custom class name */\n className?: string\n /** Custom style (supports CSS variable customization) */\n style?: React.CSSProperties\n /** Callback when step is clicked */\n onChange?: (index: number) => void\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>((props, ref) => {\n const {\n active = 0,\n orientation = 'horizontal',\n labelPlacement = 'right',\n size = 'md',\n variant = 'default',\n children,\n className,\n onChange,\n ...rest\n } = props\n\n const steps = Children.toArray(children).filter(isValidElement)\n\n return (\n <StepperRoot\n ref={ref}\n orientation={orientation}\n className={className}\n role=\"list\"\n aria-label=\"Progress\"\n {...rest}\n >\n {steps.map((step, index) => {\n const stepProps = step.props as StepProps\n \n // Determine status\n let status: StepStatus = 'wait'\n \n if (stepProps.status) {\n // If step has explicit status, use it (useful for error state or static steppers)\n status = stepProps.status\n } else {\n // Calculate status based on active index\n if (index < active) {\n status = 'finish'\n } else if (index === active) {\n status = 'process'\n } else {\n status = 'wait'\n }\n }\n\n return cloneElement(step, {\n index,\n last: index === steps.length - 1,\n orientation,\n labelPlacement: orientation === 'vertical' ? 'right' : labelPlacement, // Vertical always right (or maybe bottom doesn't make sense)\n size,\n status,\n variant,\n onClick: () => {\n if (onChange && !stepProps.disabled) {\n onChange(index)\n }\n stepProps.onClick?.()\n },\n } as StepProps)\n })}\n </StepperRoot>\n )\n})\n\nStepper.displayName = 'Stepper'\n\n","import { forwardRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { CheckOutline, CloseOutline } from '@kingsoft-ai/icons'\nimport {\n StepRoot,\n StepIconContainer,\n StepContent,\n StepTitle,\n StepDescription,\n StepConnector,\n type StepperOrientation,\n type StepperLabelPlacement,\n type StepStatus,\n type StepSize,\n type StepperVariant,\n} from './Stepper.style'\n\nexport interface StepProps {\n /** Title of the step */\n title?: ReactNode\n /** Description of the step */\n description?: ReactNode\n /** Icon of the step */\n icon?: ReactNode\n /** Status of the step, determined by Stepper if not provided */\n status?: StepStatus\n /** Disable the step */\n disabled?: boolean\n /** Click handler */\n onClick?: () => void\n className?: string\n \n // Internal props passed by Stepper\n index?: number\n orientation?: StepperOrientation\n labelPlacement?: StepperLabelPlacement\n size?: StepSize\n last?: boolean\n variant?: StepperVariant\n}\n\nexport const Step = forwardRef<HTMLDivElement, StepProps>((props, ref) => {\n const {\n title,\n description,\n icon,\n status = 'wait',\n index = 0,\n orientation = 'horizontal',\n labelPlacement = 'right',\n size = 'md',\n last = false,\n variant = 'default',\n className,\n onClick,\n ...rest\n } = props\n\n // Render icon based on status\n const renderIcon = () => {\n if (icon) return icon\n\n switch (status) {\n case 'finish':\n return <CheckOutline />\n case 'error':\n return <CloseOutline />\n default:\n // For process and wait, show number\n return <span>{index + 1}</span>\n }\n }\n\n const resolvedLabelPlacement =\n orientation === 'horizontal' && variant === 'dot' ? 'bottom' : labelPlacement\n\n const shouldRenderIcon = !(variant === 'dot' && !icon)\n const iconContent = shouldRenderIcon ? renderIcon() : null\n\n // Vertical line logic:\n // In vertical mode, the line connects from bottom of current icon to top of next icon.\n // It should be visible if not the last item.\n const showVerticalLine = orientation === 'vertical' && !last\n\n // Horizontal line logic:\n // In horizontal mode, the line connects current step to next step.\n const showHorizontalLine = orientation === 'horizontal' && !last\n\n return (\n <StepRoot\n ref={ref}\n className={className}\n orientation={orientation}\n labelPlacement={resolvedLabelPlacement}\n status={status}\n isLast={last}\n variant={variant}\n onClick={onClick}\n role=\"listitem\"\n aria-current={status === 'process' ? 'step' : undefined}\n {...rest}\n >\n {/* Vertical Mode: Icon column with line below */}\n {orientation === 'vertical' && (\n <>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0, minHeight: last ? 'auto' : '80px' }}>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n {showVerticalLine && (\n <StepConnector\n orientation=\"vertical\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </div>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n </>\n )}\n\n {/* Horizontal Mode */}\n {orientation === 'horizontal' && (\n <>\n {/* Icon and horizontal line for bottom placement */}\n {resolvedLabelPlacement === 'bottom' ? (\n <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', width: '100%' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0 }}>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n </div>\n {showHorizontalLine && (\n <StepConnector\n orientation=\"horizontal\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </div>\n ) : (\n <>\n <StepIconContainer status={status} size={size} variant={variant}>\n {iconContent}\n </StepIconContainer>\n <StepContent orientation={orientation} labelPlacement={resolvedLabelPlacement}>\n <StepTitle status={status}>{title}</StepTitle>\n {description && <StepDescription>{description}</StepDescription>}\n </StepContent>\n {showHorizontalLine && (\n <StepConnector\n orientation=\"horizontal\"\n labelPlacement={resolvedLabelPlacement}\n isFinished={status === 'finish'}\n size={size}\n variant={variant}\n />\n )}\n </>\n )}\n </>\n )}\n </StepRoot>\n )\n})\n\nStep.displayName = 'Step'\n\n","/**\n * Progress Styled Tokens\n *\n * 将 Progress 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Progress 组件的 Styled Tokens\n */\nexport const $progress = createStyledTokens({\n // ============================================================================\n // 状态颜色\n // ============================================================================\n colorNormal: ['components.progress.color.normal', '--ksd-progress-color-normal'],\n colorError: ['components.progress.color.error', '--ksd-progress-color-error'],\n colorWarning: ['components.progress.color.warning', '--ksd-progress-color-warning'],\n colorSuccess: ['components.progress.color.success', '--ksd-progress-color-success'],\n\n // ============================================================================\n // 轨道样式\n // ============================================================================\n trackBg: ['components.progress.track.bg', '--ksd-progress-track-bg'],\n trackBorderRadius: ['components.progress.track.borderRadius', '--ksd-progress-track-border-radius'],\n\n // ============================================================================\n // 线型尺寸\n // ============================================================================\n lineSmHeight: ['components.progress.line.sm.height', '--ksd-progress-line-sm-height'],\n lineMdHeight: ['components.progress.line.md.height', '--ksd-progress-line-md-height'],\n lineLgHeight: ['components.progress.line.lg.height', '--ksd-progress-line-lg-height'],\n\n // ============================================================================\n // 环形尺寸\n // ============================================================================\n circleSmSize: ['components.progress.circle.sm.size', '--ksd-progress-circle-sm-size'],\n circleMdSize: ['components.progress.circle.md.size', '--ksd-progress-circle-md-size'],\n circleMdFontSize: ['components.progress.circle.md.fontSize', '--ksd-progress-circle-md-font-size'],\n circleMdFontWeight: ['components.progress.circle.md.fontWeight', '--ksd-progress-circle-md-font-weight'],\n circleMdLineHeight: ['components.progress.circle.md.lineHeight', '--ksd-progress-circle-md-line-height'],\n circleLgSize: ['components.progress.circle.lg.size', '--ksd-progress-circle-lg-size'],\n circleLgFontSize: ['components.progress.circle.lg.fontSize', '--ksd-progress-circle-lg-font-size'],\n circleLgFontWeight: ['components.progress.circle.lg.fontWeight', '--ksd-progress-circle-lg-font-weight'],\n circleLgLineHeight: ['components.progress.circle.lg.lineHeight', '--ksd-progress-circle-lg-line-height'],\n\n // ============================================================================\n // 文字样式\n // ============================================================================\n textFontSize: ['components.progress.text.fontSize', '--ksd-progress-text-font-size'],\n textLineHeight: ['components.progress.text.lineHeight', '--ksd-progress-text-line-height'],\n textColor: ['components.progress.text.color', '--ksd-progress-text-color'],\n\n // ============================================================================\n // 图标尺寸\n // ============================================================================\n iconSize: ['components.progress.iconSize', '--ksd-progress-icon-size'],\n\n // ============================================================================\n // 间距\n // ============================================================================\n gap: ['components.progress.gap', '--ksd-progress-gap'],\n infoGap: ['components.progress.infoGap', '--ksd-progress-info-gap'],\n\n // ============================================================================\n // 过渡\n // ============================================================================\n transition: ['components.progress.transition', '--ksd-progress-transition'],\n});\n","/**\n * Progress Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $progress } from './styled-tokens';\n\nexport const progressTypes = ['line', 'circle'] as const\nexport const progressSizes = ['sm', 'md', 'lg'] as const\nexport const progressStatuses = ['normal', 'error', 'warning', 'success'] as const\n\nexport type ProgressType = (typeof progressTypes)[number]\nexport type ProgressSize = (typeof progressSizes)[number]\nexport type ProgressStatus = (typeof progressStatuses)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\n// 获取状态颜色的辅助函数\nconst getStatusColor = (status: ProgressStatus, props: ThemeProps): string => {\n const colorMap = {\n normal: $progress.colorNormal(props),\n error: $progress.colorError(props),\n warning: $progress.colorWarning(props),\n success: $progress.colorSuccess(props),\n }\n return colorMap[status]\n}\n\nexport const LineProgressRoot = styled.div<{\n size: ProgressSize\n}>`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$progress.gap(props)};\n width: 100%;\n `}\n`\n\nexport const LineProgressTrack = styled.div<{\n size: ProgressSize\n}>`\n ${(props) => css`\n position: relative;\n flex: 1;\n background: ${$progress.trackBg(props)};\n border-radius: ${$progress.trackBorderRadius(props)};\n overflow: hidden;\n \n ${props.size === 'sm'\n ? css`height: ${$progress.lineSmHeight(props)};`\n : css`height: ${$progress.lineMdHeight(props)};`\n }\n `}\n`\n\nexport const LineProgressBar = styled.div<{\n status: ProgressStatus\n percent: number\n}>`\n ${(props) => css`\n height: 100%;\n width: ${props.percent}%;\n background: ${getStatusColor(props.status, props)};\n border-radius: ${$progress.trackBorderRadius(props)};\n transition: width ${$progress.transition(props)}, background ${$progress.transition(props)};\n `}\n`\n\nexport const ProgressText = styled.span`\n ${(props) => css`\n font-family: var(--ksd-typography-font-family);\n font-size: ${$progress.textFontSize(props)};\n line-height: ${$progress.textLineHeight(props)};\n color: ${$progress.textColor(props)};\n white-space: nowrap;\n flex-shrink: 0;\n `}\n`\n\nexport const StatusIcon = styled.span<{\n status: ProgressStatus\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${$progress.iconSize(props)};\n height: ${$progress.iconSize(props)};\n flex-shrink: 0;\n color: ${getStatusColor(props.status, props)};\n \n svg {\n width: 100%;\n height: 100%;\n }\n `}\n`\n\nexport const LineProgressInfo = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$progress.infoGap(props)};\n flex-shrink: 0;\n `}\n`\n\nexport const CircleProgressRoot = styled.div<{\n size: ProgressSize\n}>`\n ${(props) => css`\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \n ${props.size === 'sm' && css`\n width: ${$progress.circleSmSize(props)};\n height: ${$progress.circleSmSize(props)};\n `}\n ${props.size === 'md' && css`\n width: ${$progress.circleMdSize(props)};\n height: ${$progress.circleMdSize(props)};\n `}\n ${props.size === 'lg' && css`\n width: ${$progress.circleLgSize(props)};\n height: ${$progress.circleLgSize(props)};\n `}\n `}\n`\n\nexport const CircleProgressSvg = styled.svg`\n transform: rotate(-90deg);\n width: 100%;\n height: 100%;\n`\n\nexport const CircleProgressTrack = styled.circle`\n ${(props) => css`\n fill: none;\n stroke: ${$progress.trackBg(props)};\n `}\n`\n\nexport const CircleProgressBar = styled.circle<{\n status: ProgressStatus\n}>`\n ${(props) => css`\n fill: none;\n stroke: ${getStatusColor(props.status, props)};\n stroke-linecap: round;\n transition: stroke-dashoffset ${$progress.transition(props)}, stroke ${$progress.transition(props)};\n `}\n`\n\nexport const CircleProgressContent = styled.div<{\n size: ProgressSize\n}>`\n ${(props) => css`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n align-items: center;\n justify-content: center;\n \n ${props.size === 'sm' && css`\n width: 16px;\n height: 16px;\n `}\n ${props.size === 'md' && css`\n font-family: 'Barlow', var(--ksd-typography-font-family);\n font-size: ${$progress.circleMdFontSize(props)};\n font-weight: ${$progress.circleMdFontWeight(props)};\n line-height: ${$progress.circleMdLineHeight(props)};\n color: ${$progress.textColor(props)};\n `}\n ${props.size === 'lg' && css`\n font-family: 'Barlow', var(--ksd-typography-font-family);\n font-size: ${$progress.circleLgFontSize(props)};\n font-weight: ${$progress.circleLgFontWeight(props)};\n line-height: ${$progress.circleLgLineHeight(props)};\n color: ${$progress.textColor(props)};\n `}\n `}\n`\n\nexport const CircleProgressIcon = styled.span<{\n status: ProgressStatus\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: ${getStatusColor(props.status, props)};\n \n svg {\n width: 100%;\n height: 100%;\n }\n `}\n`\n","import { forwardRef } from 'react'\nimport { useProgressBar } from 'react-aria'\nimport type { AriaProgressBarProps } from 'react-aria'\nimport {\n LineProgressRoot,\n LineProgressTrack,\n LineProgressBar,\n LineProgressInfo,\n ProgressText,\n StatusIcon,\n CircleProgressRoot,\n CircleProgressSvg,\n CircleProgressTrack,\n CircleProgressBar,\n CircleProgressContent,\n CircleProgressIcon,\n progressTypes,\n progressSizes,\n progressStatuses,\n type ProgressType,\n type ProgressSize,\n type ProgressStatus,\n} from './Progress.style'\n\nexport const TYPES = progressTypes\nexport const SIZES = progressSizes\nexport const STATUSES = progressStatuses\n\nexport type ProgressProps = Omit<AriaProgressBarProps, 'value'> & {\n /** 进度条类型:线型、环形 */\n type?: ProgressType\n /** 进度条尺寸:小号、中号、大号 */\n size?: ProgressSize\n /** 进度状态:进行中、失败、警示、成功 */\n status?: ProgressStatus\n /** 当前进度值(0-100) */\n value?: number\n /** 是否显示百分比文字 */\n showPercent?: boolean\n /** 是否显示状态图标(仅线型进度条) */\n showIcon?: boolean\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nconst SuccessIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M11.3333 5.5L6.75 10.0833L4.66667 8\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst ErrorIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M10 6L6 10M6 6L10 10\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n)\n\nconst WarningIcon = () => (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path\n d=\"M8 4.66667V8.66667M8 11.3333H8.00667\"\n stroke=\"white\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst getStatusIcon = (status: ProgressStatus) => {\n switch (status) {\n case 'success':\n return <SuccessIcon />\n case 'error':\n return <ErrorIcon />\n case 'warning':\n return <WarningIcon />\n default:\n return null\n }\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n type = 'line',\n size = 'md',\n status = 'normal',\n value = 0,\n showPercent = true,\n showIcon = true,\n className,\n style,\n ...ariaProps\n },\n ref,\n ) => {\n // 限制进度值在 0-100 之间\n const percent = Math.min(Math.max(value, 0), 100)\n \n // 使用 react-aria 的 useProgressBar hook\n const { progressBarProps, labelProps } = useProgressBar({\n ...ariaProps,\n value: percent,\n minValue: 0,\n maxValue: 100,\n })\n\n // 根据状态显示图标\n const shouldShowIcon = showIcon && status !== 'normal'\n const icon = shouldShowIcon ? getStatusIcon(status) : null\n\n // 线型进度条\n if (type === 'line') {\n return (\n <LineProgressRoot\n {...progressBarProps}\n ref={ref}\n size={size}\n className={className}\n style={style}\n role=\"progressbar\"\n aria-valuenow={percent}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <LineProgressTrack size={size}>\n <LineProgressBar status={status} percent={percent} />\n </LineProgressTrack>\n \n <LineProgressInfo>\n {showPercent && (\n <ProgressText {...labelProps}>\n {Math.round(percent)}%\n </ProgressText>\n )}\n \n {shouldShowIcon && icon && (\n <StatusIcon status={status}>\n {icon}\n </StatusIcon>\n )}\n </LineProgressInfo>\n </LineProgressRoot>\n )\n }\n\n // 环形进度条\n // 根据尺寸计算圆的参数\n const getSizeConfig = () => {\n switch (size) {\n case 'sm':\n return { circleSize: 24, strokeWidth: 3 }\n case 'md':\n return { circleSize: 80, strokeWidth: 6 }\n case 'lg':\n return { circleSize: 160, strokeWidth: 8 }\n default:\n return { circleSize: 80, strokeWidth: 6 }\n }\n }\n \n const { circleSize, strokeWidth } = getSizeConfig()\n const radius = (circleSize - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const strokeDashoffset = circumference - (percent / 100) * circumference\n \n // 是否显示百分比文字(小号显示图标,中号和大号显示百分比)\n const showPercentInCircle = size !== 'sm'\n\n return (\n <CircleProgressRoot\n {...progressBarProps}\n ref={ref}\n size={size}\n className={className}\n style={style}\n role=\"progressbar\"\n aria-valuenow={percent}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <CircleProgressSvg>\n {/* 轨道 */}\n <CircleProgressTrack\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n \n {/* 进度条 */}\n <CircleProgressBar\n status={status}\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n />\n </CircleProgressSvg>\n \n {/* 中心内容 */}\n <CircleProgressContent size={size}>\n {showPercentInCircle ? (\n // 中号和大号显示百分比文字\n showPercent && <span {...labelProps}>{Math.round(percent)}%</span>\n ) : (\n // 小号显示状态图标\n shouldShowIcon && icon && (\n <CircleProgressIcon status={status}>\n {icon}\n </CircleProgressIcon>\n )\n )}\n </CircleProgressContent>\n </CircleProgressRoot>\n )\n },\n)\n\nProgress.displayName = 'Progress'\n\n","/**\n * Tag Styled Tokens\n *\n * 将 Tag 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n * \n * 注意:Tag 组件有多种颜色变体,颜色相关的 token 使用 CSS 变量动态命名模式,\n * 因此颜色 token 保持使用 CSS 变量方式。\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Tag 组件的 Styled Tokens\n */\nexport const $tag = createStyledTokens({\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smHeight: ['components.tag.size.sm.height', '--ksd-tag-sm-height'],\n smFontSize: ['components.tag.size.sm.fontSize', '--ksd-tag-sm-font-size'],\n smLineHeight: ['components.tag.size.sm.lineHeight', '--ksd-tag-sm-line-height'],\n smPaddingInline: ['components.tag.size.sm.paddingInline', '--ksd-tag-sm-padding-inline'],\n smGap: ['components.tag.size.sm.gap', '--ksd-tag-sm-gap'],\n smIconSize: ['components.tag.size.sm.iconSize', '--ksd-tag-sm-icon-size'],\n smCloseIconSize: ['components.tag.size.sm.closeIconSize', '--ksd-tag-sm-close-icon-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdHeight: ['components.tag.size.md.height', '--ksd-tag-md-height'],\n mdFontSize: ['components.tag.size.md.fontSize', '--ksd-tag-md-font-size'],\n mdLineHeight: ['components.tag.size.md.lineHeight', '--ksd-tag-md-line-height'],\n mdPaddingInline: ['components.tag.size.md.paddingInline', '--ksd-tag-md-padding-inline'],\n mdGap: ['components.tag.size.md.gap', '--ksd-tag-md-gap'],\n mdIconSize: ['components.tag.size.md.iconSize', '--ksd-tag-md-icon-size'],\n mdCloseIconSize: ['components.tag.size.md.closeIconSize', '--ksd-tag-md-close-icon-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgHeight: ['components.tag.size.lg.height', '--ksd-tag-lg-height'],\n lgFontSize: ['components.tag.size.lg.fontSize', '--ksd-tag-lg-font-size'],\n lgLineHeight: ['components.tag.size.lg.lineHeight', '--ksd-tag-lg-line-height'],\n lgPaddingInline: ['components.tag.size.lg.paddingInline', '--ksd-tag-lg-padding-inline'],\n lgGap: ['components.tag.size.lg.gap', '--ksd-tag-lg-gap'],\n lgIconSize: ['components.tag.size.lg.iconSize', '--ksd-tag-lg-icon-size'],\n lgCloseIconSize: ['components.tag.size.lg.closeIconSize', '--ksd-tag-lg-close-icon-size'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n fontWeight: ['components.tag.fontWeight', '--ksd-tag-font-weight'],\n borderRadius: ['components.tag.borderRadius', '--ksd-tag-border-radius'],\n transition: ['components.tag.transition', '--ksd-tag-transition'],\n disabledOpacity: ['components.tag.disabled.opacity', '--ksd-tag-disabled-opacity'],\n});\n","/**\n * Tag Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n * \n * 注意:颜色变体使用动态 CSS 变量命名,保持原有模式\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $tag } from './styled-tokens';\n\nexport const tagVariants = ['default', 'checkable'] as const\nexport const tagSizes = ['sm', 'md', 'lg'] as const\nexport const tagColors = [\n 'default',\n 'red',\n 'orange', \n 'yellow',\n 'green',\n 'lavender',\n 'lilac',\n 'carmine',\n 'rose',\n 'mint',\n 'olive',\n 'blue'\n] as const\n\nexport type TagVariant = (typeof tagVariants)[number]\nexport type TagSize = (typeof tagSizes)[number]\nexport type TagColor = (typeof tagColors)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getColorStyles = (\n color: TagColor,\n variant: TagVariant,\n bordered: boolean,\n checked: boolean\n) => {\n // 可选择标签样式\n if (variant === 'checkable') {\n if (checked) {\n return css`\n background: var(--ksd-tag-${color}-bg-checked, var(--ksd-tag-default-bg-checked));\n color: var(--ksd-tag-${color}-text-checked, var(--ksd-tag-default-text-checked));\n border-color: var(--ksd-tag-${color}-border-checked, var(--ksd-tag-default-border-checked));\n \n &:hover:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-checked-hover, var(--ksd-tag-default-bg-checked-hover));\n border-color: var(--ksd-tag-${color}-border-checked-hover, var(--ksd-tag-default-border-checked-hover));\n }\n \n &:active:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-checked-active, var(--ksd-tag-default-bg-checked-active));\n border-color: var(--ksd-tag-${color}-border-checked-active, var(--ksd-tag-default-border-checked-active));\n }\n `\n } else {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: var(--ksd-tag-${color}-border);\n cursor: pointer;\n \n &:hover:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-hover);\n border-color: var(--ksd-tag-${color}-border-hover, var(--ksd-tag-${color}-border));\n }\n \n &:active:not(:disabled):not([data-disabled='true']) {\n background: var(--ksd-tag-${color}-bg-active);\n border-color: var(--ksd-tag-${color}-border-active, var(--ksd-tag-${color}-border));\n }\n `\n }\n }\n \n // 默认标签样式\n if (bordered) {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: var(--ksd-tag-${color}-border);\n `\n } else {\n return css`\n background: var(--ksd-tag-${color}-bg);\n color: var(--ksd-tag-${color}-text);\n border-color: transparent;\n `\n }\n}\n\nconst getSizeStyles = (size: TagSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n height: ${$tag.smHeight(props)};\n font-size: ${$tag.smFontSize(props)};\n line-height: ${$tag.smLineHeight(props)};\n padding-inline: ${$tag.smPaddingInline(props)};\n gap: ${$tag.smGap(props)};\n\n svg {\n width: ${$tag.smIconSize(props)};\n height: ${$tag.smIconSize(props)};\n }\n `,\n md: css`\n height: ${$tag.mdHeight(props)};\n font-size: ${$tag.mdFontSize(props)};\n line-height: ${$tag.mdLineHeight(props)};\n padding-inline: ${$tag.mdPaddingInline(props)};\n gap: ${$tag.mdGap(props)};\n\n svg {\n width: ${$tag.mdIconSize(props)};\n height: ${$tag.mdIconSize(props)};\n }\n `,\n lg: css`\n height: ${$tag.lgHeight(props)};\n font-size: ${$tag.lgFontSize(props)};\n line-height: ${$tag.lgLineHeight(props)};\n padding-inline: ${$tag.lgPaddingInline(props)};\n gap: ${$tag.lgGap(props)};\n\n svg {\n width: ${$tag.lgIconSize(props)};\n height: ${$tag.lgIconSize(props)};\n }\n `,\n }\n return sizeMap[size] || sizeMap.md\n}\n\nexport const TagRoot = styled.span<{\n variant: TagVariant\n size: TagSize\n color: TagColor\n bordered: boolean\n checked: boolean\n closable: boolean\n isDisabled: boolean\n}>`\n ${(props) => css`\n /* 基础样式 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n \n /* 字体样式 */\n font-family: var(--ksd-typography-font-family);\n font-weight: ${$tag.fontWeight(props)};\n white-space: nowrap;\n \n /* 边框样式 */\n border-width: 1px;\n border-style: solid;\n border-radius: ${$tag.borderRadius(props)};\n \n /* 交互样式 */\n user-select: none;\n outline: none;\n \n /* 过渡动画 */\n transition: \n background ${$tag.transition(props)},\n border-color ${$tag.transition(props)},\n color ${$tag.transition(props)},\n opacity ${$tag.transition(props)};\n\n /* 颜色样式 */\n ${getColorStyles(props.color, props.variant, props.bordered, props.checked)}\n\n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n\n /* 可选择标签的 cursor */\n ${props.variant === 'checkable' && !props.checked && css`\n cursor: pointer;\n `}\n\n /* 禁用状态 */\n &:disabled,\n &[data-disabled='true'] {\n cursor: not-allowed;\n opacity: ${$tag.disabledOpacity(props)};\n }\n\n /* Focus 可见状态 - 键盘导航时显示 */\n &:focus-visible {\n outline: 2px solid var(--ksd-tag-default-border-checked);\n outline-offset: 2px;\n }\n `}\n`\n\nexport const TagContent = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: inherit;\n`\n\nexport const IconWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n color: inherit;\n`\n\nexport const CloseButton = styled.span<{\n size: TagSize\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n \n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n color: inherit;\n \n transition: opacity ${$tag.transition(props)};\n \n &:hover {\n opacity: 0.7;\n }\n \n &:active {\n opacity: 0.5;\n }\n \n /* 图标尺寸 */\n svg {\n width: ${props.size === 'sm' ? $tag.smCloseIconSize(props) : props.size === 'lg' ? $tag.lgCloseIconSize(props) : $tag.mdCloseIconSize(props)};\n height: ${props.size === 'sm' ? $tag.smCloseIconSize(props) : props.size === 'lg' ? $tag.lgCloseIconSize(props) : $tag.mdCloseIconSize(props)};\n }\n `}\n`\n\nexport const AddButton = styled.button<{\n size: TagSize\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n gap: ${props.size === 'sm' ? $tag.smGap(props) : props.size === 'lg' ? $tag.lgGap(props) : $tag.mdGap(props)};\n \n height: ${props.size === 'sm' ? $tag.smHeight(props) : props.size === 'lg' ? $tag.lgHeight(props) : $tag.mdHeight(props)};\n padding-inline: ${props.size === 'sm' ? $tag.smPaddingInline(props) : props.size === 'lg' ? $tag.lgPaddingInline(props) : $tag.mdPaddingInline(props)};\n \n font-family: var(--ksd-typography-font-family);\n font-size: ${props.size === 'sm' ? $tag.smFontSize(props) : props.size === 'lg' ? $tag.lgFontSize(props) : $tag.mdFontSize(props)};\n line-height: ${props.size === 'sm' ? $tag.smLineHeight(props) : props.size === 'lg' ? $tag.lgLineHeight(props) : $tag.mdLineHeight(props)};\n font-weight: ${$tag.fontWeight(props)};\n color: var(--ksd-tag-default-text);\n \n background: var(--ksd-tag-default-bg);\n border: 1px solid var(--ksd-tag-default-border);\n border-radius: ${$tag.borderRadius(props)};\n \n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n \n transition: \n background ${$tag.transition(props)},\n border-color ${$tag.transition(props)};\n \n &:hover:not(:disabled) {\n background: var(--ksd-tag-default-bg-hover);\n border-color: var(--ksd-tag-default-border-hover);\n }\n \n &:active:not(:disabled) {\n background: var(--ksd-tag-default-bg-active);\n border-color: var(--ksd-tag-default-border-active);\n }\n \n &:disabled {\n cursor: not-allowed;\n opacity: ${$tag.disabledOpacity(props)};\n }\n \n &:focus-visible {\n outline: 2px solid var(--ksd-tag-default-border-checked);\n outline-offset: 2px;\n }\n \n svg {\n width: ${props.size === 'sm' ? $tag.smIconSize(props) : props.size === 'lg' ? $tag.lgIconSize(props) : $tag.mdIconSize(props)};\n height: ${props.size === 'sm' ? $tag.smIconSize(props) : props.size === 'lg' ? $tag.lgIconSize(props) : $tag.mdIconSize(props)};\n }\n `}\n`\n","import { forwardRef, useRef, type ReactNode } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport { mergeProps } from '@react-aria/utils'\nimport { CloseOutline, PlusOutline } from '@kingsoft-ai/icons'\nimport {\n TagRoot,\n TagContent,\n IconWrapper,\n CloseButton,\n AddButton,\n type TagVariant,\n type TagSize,\n type TagColor,\n} from './Tag.style'\n\nexport type { TagVariant, TagSize, TagColor }\n\nexport interface TagProps {\n /** 标签变体:默认 | 可选择 */\n variant?: TagVariant\n /** 标签尺寸:小号(18px) | 中号(24px) | 大号(32px) */\n size?: TagSize\n /** 标签颜色 */\n color?: TagColor\n /** 是否显示边框(仅彩色标签适用) */\n bordered?: boolean\n /** 是否可关闭 */\n closable?: boolean\n /** 是否可选择(checkable 变体) */\n checkable?: boolean\n /** 是否已选中(checkable 变体) */\n checked?: boolean\n /** 前置图标 */\n icon?: ReactNode\n /** 是否禁用 */\n disabled?: boolean\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n /** 子元素 */\n children?: ReactNode\n /** 关闭回调 */\n onClose?: () => void\n /** 选中状态变化回调(checkable 变体) */\n onChange?: (checked: boolean) => void\n /** 点击回调 */\n onClick?: () => void\n}\n\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n (\n {\n variant = 'default',\n size = 'md',\n color = 'default',\n bordered = false,\n closable = false,\n checkable = false,\n checked = false,\n icon,\n disabled = false,\n className,\n style,\n children,\n onClose,\n onChange,\n onClick,\n },\n forwardedRef,\n ) => {\n // 确定实际使用的变体\n const actualVariant: TagVariant = checkable ? 'checkable' : variant\n const isChecked = checkable ? checked : false\n\n // 处理点击事件\n const handleClick = () => {\n if (disabled) return\n \n if (checkable && onChange) {\n onChange(!isChecked)\n }\n \n if (onClick) {\n onClick()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (disabled) return\n\n if (actualVariant === 'checkable' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault()\n handleClick()\n }\n }\n\n // 处理关闭事件\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation() // 防止触发标签的点击事件\n if (onClose && !disabled) {\n onClose()\n }\n }\n\n return (\n <TagRoot\n ref={forwardedRef}\n variant={actualVariant}\n size={size}\n color={color}\n bordered={bordered}\n checked={isChecked}\n closable={closable}\n isDisabled={disabled}\n className={className}\n style={style}\n onClick={actualVariant === 'checkable' ? handleClick : onClick}\n onKeyDown={handleKeyDown}\n data-variant={actualVariant}\n data-size={size}\n data-color={color}\n data-checked={isChecked ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n tabIndex={actualVariant === 'checkable' && !disabled ? 0 : undefined}\n role={actualVariant === 'checkable' ? 'checkbox' : undefined}\n aria-checked={actualVariant === 'checkable' ? isChecked : undefined}\n aria-disabled={disabled}\n >\n <TagContent>\n {/* 前置图标 */}\n {icon && (\n <IconWrapper aria-hidden=\"true\">\n {icon}\n </IconWrapper>\n )}\n\n {/* 标签文本 */}\n {children}\n\n {/* 关闭按钮 */}\n {closable && (\n <CloseButton\n size={size}\n onClick={handleClose}\n aria-label=\"关闭\"\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (!disabled && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault()\n handleClose(e as any)\n }\n }}\n aria-disabled={disabled}\n >\n <CloseOutline />\n </CloseButton>\n )}\n </TagContent>\n </TagRoot>\n )\n },\n)\n\nTag.displayName = 'Tag'\n\nexport interface TagAddProps extends Omit<AriaButtonProps, 'elementType'> {\n /** 标签尺寸 */\n size?: TagSize\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n /** 子元素 */\n children?: ReactNode\n}\n\nexport const TagAdd = forwardRef<HTMLButtonElement, TagAddProps>(\n ({ size = 'md', className, style, children = 'New Tag', ...ariaProps }, forwardedRef) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef || innerRef\n\n const { buttonProps } = useButton(\n {\n ...ariaProps,\n elementType: 'button',\n },\n innerRef,\n )\n\n return (\n <AddButton\n {...mergeProps(buttonProps, {\n ref,\n className,\n style,\n })}\n size={size}\n data-size={size}\n >\n <PlusOutline />\n {children}\n </AddButton>\n )\n },\n)\n\nTagAdd.displayName = 'Tag.Add'\n\n// 将 Add 作为 Tag 的静态属性\n;(Tag as any).Add = TagAdd\n\n","/**\n * Select Styled Tokens\n *\n * 将 Select 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Select 组件的 Styled Tokens\n */\nexport const $select = createStyledTokens({\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smHeight: ['components.select.size.sm.height', '--ksd-select-sm-height'],\n smFontSize: ['components.select.size.sm.fontSize', '--ksd-select-sm-font-size'],\n smPaddingInline: ['components.select.size.sm.paddingInline', '--ksd-select-sm-padding-inline'],\n smIconSize: ['components.select.size.sm.iconSize', '--ksd-select-sm-icon-size'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdHeight: ['components.select.size.md.height', '--ksd-select-md-height'],\n mdFontSize: ['components.select.size.md.fontSize', '--ksd-select-md-font-size'],\n mdPaddingInline: ['components.select.size.md.paddingInline', '--ksd-select-md-padding-inline'],\n mdIconSize: ['components.select.size.md.iconSize', '--ksd-select-md-icon-size'],\n\n // ============================================================================\n // 尺寸 - Large\n // ============================================================================\n lgHeight: ['components.select.size.lg.height', '--ksd-select-lg-height'],\n lgFontSize: ['components.select.size.lg.fontSize', '--ksd-select-lg-font-size'],\n lgPaddingInline: ['components.select.size.lg.paddingInline', '--ksd-select-lg-padding-inline'],\n lgIconSize: ['components.select.size.lg.iconSize', '--ksd-select-lg-icon-size'],\n\n // ============================================================================\n // 边框颜色\n // ============================================================================\n borderDefault: ['components.select.border.default', '--ksd-select-border-default'],\n borderHover: ['components.select.border.hover', '--ksd-select-border-hover'],\n borderFocus: ['components.select.border.focus', '--ksd-select-border-focus'],\n borderError: ['components.select.border.error', '--ksd-select-border-error'],\n borderDisabled: ['components.select.border.disabled', '--ksd-select-border-disabled'],\n\n // ============================================================================\n // 背景颜色\n // ============================================================================\n bgDefault: ['components.select.background.default', '--ksd-select-bg-default'],\n bgHover: ['components.select.background.hover', '--ksd-select-bg-hover'],\n bgDisabled: ['components.select.background.disabled', '--ksd-select-bg-disabled'],\n\n // ============================================================================\n // 文字颜色\n // ============================================================================\n textDefault: ['components.select.text.default', '--ksd-select-text-default'],\n textPlaceholder: ['components.select.text.placeholder', '--ksd-select-text-placeholder'],\n textDisabled: ['components.select.text.disabled', '--ksd-select-text-disabled'],\n textError: ['components.select.text.error', '--ksd-select-text-error'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.select.borderRadius', '--ksd-select-border-radius'],\n gap: ['components.select.gap', '--ksd-select-gap'],\n transition: ['components.select.transition', '--ksd-select-transition'],\n\n // ============================================================================\n // Popover\n // ============================================================================\n popoverBg: ['components.select.popover.background', '--ksd-select-popover-bg'],\n popoverBorder: ['components.select.popover.border', '--ksd-select-popover-border'],\n popoverBorderRadius: ['components.select.popover.borderRadius', '--ksd-select-popover-border-radius'],\n popoverShadow: ['components.select.popover.boxShadow', '--ksd-select-popover-shadow'],\n popoverPadding: ['components.select.popover.padding', '--ksd-select-popover-padding'],\n\n // ============================================================================\n // Option\n // ============================================================================\n optionHeight: ['components.select.option.height', '--ksd-select-option-height'],\n optionPaddingInline: ['components.select.option.paddingInline', '--ksd-select-option-padding-inline'],\n optionFontSize: ['components.select.option.fontSize', '--ksd-select-option-font-size'],\n optionBorderRadius: ['components.select.option.borderRadius', '--ksd-select-option-border-radius'],\n optionGap: ['components.select.option.gap', '--ksd-select-option-gap'],\n\n // Option 背景\n optionBgDefault: ['components.select.option.background.default', '--ksd-select-option-bg-default'],\n optionBgHover: ['components.select.option.background.hover', '--ksd-select-option-bg-hover'],\n optionBgSelected: ['components.select.option.background.selected', '--ksd-select-option-bg-selected'],\n optionBgFocused: ['components.select.option.background.focused', '--ksd-select-option-bg-focused'],\n\n // Option 文字\n optionTextDefault: ['components.select.option.text.default', '--ksd-select-option-text-default'],\n optionTextHover: ['components.select.option.text.hover', '--ksd-select-option-text-hover'],\n optionTextSelected: ['components.select.option.text.selected', '--ksd-select-option-text-selected'],\n optionTextDisabled: ['components.select.option.text.disabled', '--ksd-select-option-text-disabled'],\n});\n","/**\n * Select Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $select } from './styled-tokens';\n\nexport const selectSizes = ['sm', 'md', 'lg'] as const\nexport type SelectSize = (typeof selectSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getSizeStyles = (size: SelectSize, isMultiple: boolean, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n ${isMultiple ? `min-height: ${$select.smHeight(props)};` : `height: ${$select.smHeight(props)};`}\n font-size: ${$select.smFontSize(props)};\n padding-inline: ${$select.smPaddingInline(props)};\n ${isMultiple ? 'padding-block: 4px;' : ''}\n `,\n md: css`\n ${isMultiple ? `min-height: ${$select.mdHeight(props)};` : `height: ${$select.mdHeight(props)};`}\n font-size: ${$select.mdFontSize(props)};\n padding-inline: ${$select.mdPaddingInline(props)};\n ${isMultiple ? 'padding-block: 4px;' : ''}\n `,\n lg: css`\n ${isMultiple ? `min-height: ${$select.lgHeight(props)};` : `height: ${$select.lgHeight(props)};`}\n font-size: ${$select.lgFontSize(props)};\n padding-inline: ${$select.lgPaddingInline(props)};\n ${isMultiple ? 'padding-block: 4px;' : ''}\n `,\n }\n return sizeMap[size] || sizeMap.md\n}\n\nexport const SelectWrapper = styled.div<{ fullWidth?: boolean }>`\n display: ${({ fullWidth }) => (fullWidth ? 'flex' : 'inline-flex')};\n flex-direction: column;\n width: ${({ fullWidth }) => (fullWidth ? '100%' : '200px')};\n min-width: 120px;\n position: relative;\n box-sizing: border-box;\n`\n\nexport const SelectTrigger = styled.button<{\n size: SelectSize\n fullWidth?: boolean\n isFocused?: boolean\n isError?: boolean\n isDisabled?: boolean\n isHovered?: boolean\n isOpen?: boolean\n isMultiple?: boolean\n}>`\n ${(props) => css`\n /* 基础重置 */\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n \n /* 样式 */\n border: 1px solid;\n border-color: ${$select.borderDefault(props)};\n border-radius: ${$select.borderRadius(props)};\n background: ${$select.bgDefault(props)};\n color: ${$select.textDefault(props)};\n cursor: pointer;\n outline: none;\n transition: all ${$select.transition(props)};\n\n /* 尺寸 */\n ${getSizeStyles(props.size, !!props.isMultiple, props)}\n\n /* Hover 状态 */\n ${props.isHovered && !props.isFocused && !props.isOpen && !props.isError && !props.isDisabled && css`\n border-color: ${$select.borderHover(props)};\n `}\n\n /* Focus/Open 状态 */\n ${(props.isFocused || props.isOpen) && !props.isError && !props.isDisabled && css`\n border-color: ${$select.borderFocus(props)};\n `}\n\n /* Error 状态 */\n ${props.isError && !props.isDisabled && css`\n border-color: ${$select.borderError(props)};\n color: ${$select.textError(props)};\n `}\n\n /* 禁用状态 */\n ${props.isDisabled && css`\n cursor: not-allowed;\n opacity: 0.6;\n background: ${$select.bgDisabled(props)};\n border-color: ${$select.borderDisabled(props)};\n color: ${$select.textDisabled(props)};\n `}\n `}\n`\n\nexport const SelectValue = styled.span<{ isPlaceholder?: boolean }>`\n ${(props) => css`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: left;\n margin-right: 8px;\n color: ${props.isPlaceholder ? $select.textPlaceholder(props) : 'inherit'};\n `}\n`\n\nexport const SelectIcon = styled.span<{ isOpen?: boolean; size?: SelectSize }>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n flex-shrink: 0;\n transition: transform 0.2s ease;\n transform: ${props.isOpen ? 'rotate(180deg)' : 'rotate(0deg)'};\n color: inherit;\n opacity: 0.5;\n \n svg {\n width: ${props.size === 'sm' ? $select.smIconSize(props) : props.size === 'lg' ? $select.lgIconSize(props) : $select.mdIconSize(props)};\n height: ${props.size === 'sm' ? $select.smIconSize(props) : props.size === 'lg' ? $select.lgIconSize(props) : $select.mdIconSize(props)};\n }\n `}\n`\n\nexport const ListBoxPopup = styled.div`\n ${(props) => css`\n background: ${$select.popoverBg(props)};\n border: ${$select.popoverBorder(props)};\n border-radius: ${$select.popoverBorderRadius(props)};\n box-shadow: ${$select.popoverShadow(props)};\n padding: ${$select.popoverPadding(props)};\n overflow: hidden;\n min-width: 100%;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n `}\n`\n\nexport const ListBoxContent = styled.ul`\n margin: 0;\n padding: 0;\n list-style: none;\n overflow-y: auto;\n outline: none;\n flex: 1;\n\n &::-webkit-scrollbar {\n width: 4px;\n }\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n &::-webkit-scrollbar-thumb {\n background: rgba(0,0,0,0.2);\n border-radius: 4px;\n }\n`\n\nexport const OptionItem = styled.li<{\n isSelected?: boolean\n isFocused?: boolean\n isDisabled?: boolean\n}>`\n ${(props) => css`\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: ${$select.optionHeight(props)};\n padding-inline: ${$select.optionPaddingInline(props)};\n margin-bottom: 2px;\n border-radius: ${$select.optionBorderRadius(props)};\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n outline: none;\n user-select: none;\n font-size: ${$select.optionFontSize(props)};\n \n /* 背景色 */\n background: ${props.isSelected \n ? $select.optionBgSelected(props) \n : props.isFocused \n ? $select.optionBgFocused(props) \n : $select.optionBgDefault(props)};\n \n /* 文字颜色 */\n color: ${props.isDisabled \n ? $select.optionTextDisabled(props) \n : props.isSelected \n ? $select.optionTextSelected(props) \n : $select.optionTextDefault(props)};\n\n &:hover {\n background: ${props.isDisabled \n ? 'transparent' \n : props.isSelected \n ? $select.optionBgSelected(props) \n : $select.optionBgHover(props)};\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n `}\n`\n\nexport const OptionText = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`\n\nexport const OptionIcon = styled.span`\n ${(props) => css`\n margin-left: 8px;\n display: flex;\n align-items: center;\n color: ${$select.optionTextSelected(props)};\n font-size: 14px;\n `}\n`\n\nexport const LoadingWrapper = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n color: ${$select.textPlaceholder(props)};\n font-size: var(--ksd-typography-font-size-xs);\n `}\n`\n\nexport const EmptyState = styled.div`\n ${(props) => css`\n padding: 8px 12px;\n color: ${$select.textDisabled(props)};\n font-size: var(--ksd-typography-font-size-xs);\n text-align: center;\n `}\n`\n\nexport const TagsContainer = styled.div`\n flex: 1;\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n align-items: center;\n min-height: 22px;\n padding-right: 4px;\n`\n\nexport const CheckboxWrapper = styled.span`\n display: inline-flex;\n align-items: center;\n margin-right: 8px;\n flex-shrink: 0;\n pointer-events: none;\n`\n","import { useRef, useLayoutEffect, useState, useEffect, type ReactNode, type RefObject } from 'react'\nimport { useOverlay, Overlay, useOverlayPosition, type AriaPopoverProps, FocusScope, DismissButton } from 'react-aria'\nimport { ListBoxPopup } from './Select.style'\n\ninterface PopoverProps extends Omit<AriaPopoverProps, 'popoverRef'> {\n children: ReactNode\n state: any\n triggerRef: RefObject<Element>\n className?: string\n}\n\nexport function Popover({ children, state, offset = 4, triggerRef, placement = 'bottom start', ...props }: PopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null)\n const [triggerWidth, setTriggerWidth] = useState<number | undefined>(undefined)\n \n // 使用 useLayoutEffect 确保在渲染前获取正确的宽度\n useLayoutEffect(() => {\n if (triggerRef.current) {\n setTriggerWidth(triggerRef.current.getBoundingClientRect().width)\n }\n }, [triggerRef, state.isOpen])\n\n const { overlayProps: overlayPropsFromUseOverlay } = useOverlay(\n {\n ...props,\n shouldCloseOnBlur: false, // 禁用默认的 blur 关闭,使用自定义逻辑\n isDismissable: true,\n onClose: state.close\n },\n popoverRef\n )\n\n const { overlayProps, placement: resolvedPlacement } = useOverlayPosition({\n targetRef: triggerRef,\n overlayRef: popoverRef,\n placement,\n offset,\n isOpen: state.isOpen,\n onClose: state.close\n })\n\n // 全局事件监听:点击外部和焦点移出\n useEffect(() => {\n if (!state.isOpen) return\n\n const onInteractOutside = (event: Event) => {\n const target = event.target as Node\n const popover = popoverRef.current\n const trigger = triggerRef.current\n\n // 如果交互目标既不在弹窗内部也不是触发器,则关闭\n if (\n popover && \n !popover.contains(target) && \n trigger && \n !trigger.contains(target)\n ) {\n state.close()\n }\n }\n\n // mousedown 处理点击外部\n document.addEventListener('mousedown', onInteractOutside)\n // focusin 处理 Tab 键焦点移出 (focusin 支持冒泡,focus 不支持)\n document.addEventListener('focusin', onInteractOutside)\n\n return () => {\n document.removeEventListener('mousedown', onInteractOutside)\n document.removeEventListener('focusin', onInteractOutside)\n }\n }, [state.isOpen, state.close, triggerRef])\n\n return (\n <Overlay>\n <FocusScope restoreFocus>\n <ListBoxPopup\n {...overlayPropsFromUseOverlay}\n {...overlayProps}\n ref={popoverRef}\n data-placement={resolvedPlacement}\n style={{\n ...overlayProps.style,\n zIndex: 10000,\n width: triggerWidth ? `${triggerWidth}px` : 'auto',\n minWidth: triggerWidth ? `${triggerWidth}px` : '120px',\n }}\n >\n <DismissButton onDismiss={state.close} />\n {children}\n <DismissButton onDismiss={state.close} />\n </ListBoxPopup>\n </FocusScope>\n </Overlay>\n )\n}\n","import { useRef } from 'react'\nimport { useListBox, useOption, type AriaListBoxProps } from 'react-aria'\nimport { ListBoxContent, OptionItem, OptionText, OptionIcon, CheckboxWrapper } from './Select.style'\nimport { Checkbox } from '../checkbox'\nimport type { ListState } from '@react-stately/list'\nimport type { Node } from '@react-types/shared'\n\ninterface ListBoxProps extends Omit<AriaListBoxProps<unknown>, 'children'> {\n state: ListState<unknown>\n}\n\nexport function ListBox({ state, ...props }: ListBoxProps) {\n const ref = useRef<HTMLUListElement>(null)\n const { listBoxProps } = useListBox(props, state, ref)\n\n return (\n <ListBoxContent {...listBoxProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Option key={item.key} item={item} state={state} />\n ))}\n </ListBoxContent>\n )\n}\n\ninterface OptionProps {\n item: Node<unknown>\n state: ListState<unknown>\n isMultiple?: boolean\n}\n\nfunction Option({ item, state, isMultiple }: OptionProps) {\n const ref = useRef<HTMLLIElement>(null)\n const { optionProps, isSelected, isFocused, isDisabled } = useOption(\n { key: item.key },\n state,\n ref\n )\n\n return (\n <OptionItem\n {...optionProps}\n ref={ref}\n isSelected={isSelected}\n isFocused={isFocused}\n isDisabled={isDisabled}\n >\n {isMultiple && (\n <CheckboxWrapper aria-hidden=\"true\" onClick={(e) => e.stopPropagation()}>\n <Checkbox checked={isSelected} disabled={isDisabled} tabIndex={-1} />\n </CheckboxWrapper>\n )}\n <OptionText>{item.rendered}</OptionText>\n {!isMultiple && isSelected && (\n <OptionIcon aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </OptionIcon>\n )}\n </OptionItem>\n )\n}\n\n// 多选模式 ListBox\ninterface MultiListBoxProps {\n state: ListState<unknown>\n}\n\nexport function MultiListBox({ state }: MultiListBoxProps) {\n const ref = useRef<HTMLUListElement>(null)\n const { listBoxProps } = useListBox(\n { selectionMode: 'multiple' },\n state,\n ref\n )\n\n return (\n <ListBoxContent {...listBoxProps} ref={ref}>\n {[...state.collection].map((item) => (\n <Option key={item.key} item={item} state={state} isMultiple />\n ))}\n </ListBoxContent>\n )\n}\n\n","import React, { forwardRef, useRef, useMemo, useState } from 'react'\nimport { useSelectState } from '@react-stately/select'\nimport { useListState } from '@react-stately/list'\nimport { useSelect, useButton, HiddenSelect, type AriaSelectProps } from 'react-aria'\nimport { Item, Section } from '@react-stately/collections'\nimport { focusWithoutScrolling } from '@react-aria/utils'\nimport type { PressEvent, Selection as SelectionType, Key } from '@react-types/shared'\n\n// Re-export Selection type for external use\nexport type { Selection } from '@react-types/shared'\nimport { ChevronDownOutline } from '@kingsoft-ai/icons'\nimport { Tag } from '../tag'\nimport { SelectTrigger, SelectValue, SelectIcon, LoadingWrapper, TagsContainer, SelectWrapper } from './Select.style'\nimport { Popover } from './Popover'\nimport { ListBox, MultiListBox } from './ListBox'\nimport type { SelectSize } from './Select.style'\n\nexport type SelectionMode = 'single' | 'multiple'\n\n/**\n * 选项类型定义\n * 推荐使用 options 属性传入选项数据\n */\nexport interface SelectOptionType {\n /** 选项值,作为唯一标识 */\n value: string | number\n /** 选项显示文本 */\n label: React.ReactNode\n /** 是否禁用该选项 */\n disabled?: boolean\n}\n\nexport interface SelectProps<T> extends Omit<AriaSelectProps<T>, 'errorMessage' | 'selectedKey' | 'defaultSelectedKey' | 'onSelectionChange' | 'selectionMode' | 'children' | 'isDisabled' | 'value' | 'defaultValue' | 'onChange'> {\n /** 选择模式:single 单选 | multiple 多选 */\n selectionMode?: SelectionMode\n /** 是否正在加载 */\n loading?: boolean\n /** 是否禁用 */\n disabled?: boolean\n /** 尺寸 */\n size?: SelectSize\n /** 是否全宽 */\n fullWidth?: boolean\n /** 宽度 */\n width?: string | number\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n /** 占位符 */\n placeholder?: string\n /** 错误信息 */\n errorMessage?: React.ReactNode\n /** 多选时最大展示的 Tag 数量 */\n maxTagCount?: number\n /** 受控值(统一 API,单选时为 Key,多选时为 Iterable<Key>,优先级高于 selectedKey/selectedKeys) */\n value?: React.Key | null | Iterable<React.Key>\n /** 默认值(统一 API,单选时为 Key,多选时为 Iterable<Key>,优先级高于 defaultSelectedKey/defaultSelectedKeys) */\n defaultValue?: React.Key | Iterable<React.Key>\n /** 值变化回调(统一 API,优先级高于 onSelectionChange) */\n onChange?: (value: SelectionType) => void\n /** 单选时选中的 key(兼容旧 API) */\n selectedKey?: React.Key | null\n /** 单选时默认选中的 key(兼容旧 API) */\n defaultSelectedKey?: React.Key\n /** 多选时选中的 keys(兼容旧 API) */\n selectedKeys?: Iterable<React.Key>\n /** 多选时默认选中的 keys(兼容旧 API) */\n defaultSelectedKeys?: Iterable<React.Key>\n /** 选择变化回调(兼容旧 API,单选返回 key,多选返回 Set) */\n onSelectionChange?: (keys: SelectionType) => void\n /**\n * 选项数据(推荐使用)\n * \n * 提供 options 时会自动渲染选项列表,无需手动编写 <Select.Item>\n * \n * @example\n * ```tsx\n * <Select\n * options={[\n * { value: 'apple', label: '苹果' },\n * { value: 'banana', label: '香蕉' },\n * { value: 'orange', label: '橙子', disabled: true },\n * ]}\n * />\n * ```\n */\n options?: SelectOptionType[]\n /**\n * 子元素(手动编写选项时使用)\n * \n * 推荐使用 options 属性代替 children\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * <Select.Item key=\"banana\">香蕉</Select.Item>\n * </Select>\n * ```\n */\n children?: React.ReactNode\n}\n\n// 内部使用的 Select 组件\nconst SelectInner = forwardRef(function Select<T extends object>(\n props: SelectProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const {\n selectionMode = 'single',\n loading,\n disabled,\n size = 'md',\n fullWidth = false,\n width,\n className,\n style,\n placeholder = '请选择',\n label,\n description,\n errorMessage,\n maxTagCount,\n // 新统一 API\n value,\n defaultValue,\n onChange,\n // 旧兼容 API\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n options,\n children,\n } = props\n\n const isMultiple = selectionMode === 'multiple'\n\n // 统一处理受控值:value 优先于 selectedKey/selectedKeys\n const finalSelectedKey = isMultiple ? undefined : (value as React.Key | null | undefined) ?? selectedKey\n const finalSelectedKeys = isMultiple ? (value as Iterable<React.Key> | undefined) ?? selectedKeys : undefined\n \n // 统一处理默认值:defaultValue 优先于 defaultSelectedKey/defaultSelectedKeys\n const finalDefaultSelectedKey = isMultiple ? undefined : (defaultValue as React.Key | undefined) ?? defaultSelectedKey\n const finalDefaultSelectedKeys = isMultiple ? (defaultValue as Iterable<React.Key> | undefined) ?? defaultSelectedKeys : undefined\n\n // 统一处理回调:onChange 和 onSelectionChange 都会被调用\n const handleSelectionChange = (keys: SelectionType) => {\n onChange?.(keys)\n onSelectionChange?.(keys)\n }\n\n // 根据 options 或 children 生成内容\n const renderItems = useMemo(() => {\n if (options && options.length > 0) {\n return options.map((option) => (\n <Item key={option.value} textValue={typeof option.label === 'string' ? option.label : String(option.value)}>\n {option.label}\n </Item>\n ))\n }\n return children\n }, [options, children])\n\n // 合并 props,将 children 替换为实际渲染内容,并使用统一后的属性\n const mergedProps = {\n ...props,\n children: renderItems,\n selectedKey: finalSelectedKey,\n defaultSelectedKey: finalDefaultSelectedKey,\n onSelectionChange: handleSelectionChange,\n }\n\n const innerRef = useRef<HTMLButtonElement>(null)\n const triggerRef = (ref as React.RefObject<HTMLButtonElement>) || innerRef\n const lastPointerTypeRef = useRef<PressEvent['pointerType'] | null>(null)\n\n // 单选模式状态\n const singleState = useSelectState(mergedProps as any)\n \n // 多选模式状态\n const multiState = useListState({\n ...mergedProps,\n selectionMode: 'multiple',\n selectedKeys: finalSelectedKeys,\n defaultSelectedKeys: finalDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n } as any)\n \n // 多选时的打开状态需要单独管理\n const [multiOpen, setMultiOpen] = useState(false)\n const effectiveOpen = isMultiple ? multiOpen : singleState.isOpen\n\n // 获取选中项用于渲染 Tags\n const selectedItems = useMemo(() => {\n if (!isMultiple) return []\n const items: Array<{ key: Key; rendered: React.ReactNode }> = []\n const selectedKeySet = multiState.selectionManager.selectedKeys\n for (const item of multiState.collection) {\n if (selectedKeySet.has(item.key)) {\n items.push({ key: item.key, rendered: item.rendered })\n }\n }\n return items\n }, [isMultiple, multiState.selectionManager.selectedKeys, multiState.collection])\n\n // 计算要展示的 Tags\n const { visibleTags, overflowCount } = useMemo(() => {\n if (!isMultiple || selectedItems.length === 0) {\n return { visibleTags: [], overflowCount: 0 }\n }\n if (maxTagCount !== undefined && selectedItems.length > maxTagCount) {\n return {\n visibleTags: selectedItems.slice(0, maxTagCount),\n overflowCount: selectedItems.length - maxTagCount,\n }\n }\n return { visibleTags: selectedItems, overflowCount: 0 }\n }, [isMultiple, selectedItems, maxTagCount])\n\n // 单选模式的 hooks\n const {\n labelProps,\n triggerProps,\n valueProps,\n menuProps,\n descriptionProps,\n errorMessageProps\n } = useSelect(mergedProps as any, singleState, triggerRef)\n\n const handlePressStart = (event: PressEvent) => {\n lastPointerTypeRef.current = event.pointerType\n if (event.pointerType !== 'touch' && event.pointerType !== 'keyboard' && triggerRef.current) {\n focusWithoutScrolling(triggerRef.current)\n }\n }\n\n const handlePress = (event: PressEvent) => {\n const pointerType = event.pointerType || lastPointerTypeRef.current\n if (pointerType === 'keyboard') return\n\n if (isMultiple) {\n setMultiOpen(!multiOpen)\n } else {\n const focusStrategy = pointerType === 'mouse' || pointerType === 'pen' ? null : 'first'\n singleState.toggle(focusStrategy)\n }\n }\n\n const { buttonProps } = useButton(\n {\n ...triggerProps,\n onPressStart: handlePressStart,\n onPress: handlePress\n },\n triggerRef\n )\n\n // 移除 Tag\n const handleRemoveTag = (key: Key) => {\n const newKeys = new Set(multiState.selectionManager.selectedKeys)\n newKeys.delete(key)\n multiState.selectionManager.setSelectedKeys(newKeys)\n handleSelectionChange(newKeys)\n }\n\n // 渲染触发器内容\n const renderTriggerContent = () => {\n if (isMultiple) {\n if (selectedItems.length === 0) {\n return <SelectValue isPlaceholder>{placeholder}</SelectValue>\n }\n return (\n <TagsContainer>\n {visibleTags.map((item) => (\n <Tag\n key={item.key}\n size=\"sm\"\n closable\n onClose={() => handleRemoveTag(item.key)}\n >\n {item.rendered}\n </Tag>\n ))}\n {overflowCount > 0 && <Tag size=\"sm\">+{overflowCount}</Tag>}\n </TagsContainer>\n )\n }\n return (\n <SelectValue {...valueProps} isPlaceholder={!singleState.selectedItem}>\n {singleState.selectedItem ? singleState.selectedItem.rendered : placeholder}\n </SelectValue>\n )\n }\n\n const popoverState = isMultiple \n ? { isOpen: multiOpen, close: () => setMultiOpen(false) }\n : singleState\n\n return (\n <SelectWrapper\n fullWidth={fullWidth}\n className={className}\n style={{\n width: width,\n ...style\n }}\n >\n {label && (\n <label \n {...labelProps} \n style={{ \n fontSize: '12px', \n marginBottom: '4px', \n display: 'block',\n color: 'inherit'\n }}\n >\n {label}\n </label>\n )}\n \n {!isMultiple && (\n <HiddenSelect\n state={singleState}\n triggerRef={triggerRef}\n label={label}\n name={props.name}\n isDisabled={disabled}\n />\n )}\n\n <SelectTrigger\n {...buttonProps}\n ref={triggerRef}\n size={size}\n fullWidth={fullWidth}\n isOpen={effectiveOpen}\n isDisabled={disabled}\n isError={!!errorMessage}\n isMultiple={isMultiple}\n >\n {renderTriggerContent()}\n <SelectIcon isOpen={effectiveOpen} aria-hidden=\"true\" size={size}>\n <ChevronDownOutline width={12} height={12} />\n </SelectIcon>\n </SelectTrigger>\n\n {effectiveOpen && (\n <Popover state={popoverState} triggerRef={triggerRef} placement=\"bottom start\" offset={4}>\n {loading ? (\n <LoadingWrapper>\n <svg \n width=\"16\" \n height=\"16\" \n viewBox=\"0 0 16 16\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ animation: 'spin 1s linear infinite', marginRight: 8 }}\n >\n <style>{`@keyframes spin { 100% { transform: rotate(360deg); } }`}</style>\n <path d=\"M8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5C11.5899 14.5 14.5 11.5899 14.5 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\"/>\n </svg>\n 加载中...\n </LoadingWrapper>\n ) : isMultiple ? (\n <MultiListBox state={multiState} />\n ) : (\n <ListBox {...menuProps} state={singleState} />\n )}\n </Popover>\n )}\n \n {/* Description & Error Message */}\n {description && (\n <div {...descriptionProps} style={{ fontSize: '12px', marginTop: '4px', opacity: 0.6 }}>\n {description}\n </div>\n )}\n {errorMessage && (\n <div {...errorMessageProps} style={{ fontSize: '12px', marginTop: '4px', color: '#ff4d4f' }}>\n {errorMessage}\n </div>\n )}\n </SelectWrapper>\n )\n}) as <T extends object>(props: SelectProps<T> & { ref?: React.Ref<HTMLButtonElement> }) => React.ReactElement\n\n// 为 Select 组件添加静态属性类型\ninterface SelectComponent {\n <T extends object>(props: SelectProps<T> & { ref?: React.Ref<HTMLButtonElement> }): React.ReactElement\n /**\n * 选项组件\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * <Select.Item key=\"banana\">香蕉</Select.Item>\n * </Select>\n * ```\n */\n Item: typeof Item\n /**\n * 分组组件\n * \n * @example\n * ```tsx\n * <Select>\n * <Select.Section title=\"水果\">\n * <Select.Item key=\"apple\">苹果</Select.Item>\n * </Select.Section>\n * </Select>\n * ```\n */\n Section: typeof Section\n}\n\n/**\n * Select 选择器组件\n * \n * 基于 react-aria 实现的无障碍选择器\n * 支持单选和多选模式\n * \n * @example 使用 options(推荐)\n * ```tsx\n * <Select\n * options={[\n * { value: 'apple', label: '苹果' },\n * { value: 'banana', label: '香蕉' },\n * ]}\n * onSelectionChange={(key) => console.log(key)}\n * />\n * ```\n * \n * @example 使用 Select.Item\n * ```tsx\n * const { Item } = Select\n * \n * <Select>\n * <Item key=\"apple\">苹果</Item>\n * <Item key=\"banana\">香蕉</Item>\n * </Select>\n * ```\n */\nexport const Select = SelectInner as SelectComponent\n\n// 挂载静态属性\nSelect.Item = Item\nSelect.Section = Section\n","/**\n * Table Styled Tokens\n *\n * 将 Table 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Table 组件的 Styled Tokens\n */\nexport const $table = createStyledTokens({\n // ============================================================================\n // 基础配置\n // ============================================================================\n borderRadiusSm: ['components.table.borderRadius.sm', '--ksd-table-border-radius-sm'],\n borderRadiusMd: ['components.table.borderRadius.md', '--ksd-table-border-radius-md'],\n borderRadiusLg: ['components.table.borderRadius.lg', '--ksd-table-border-radius-lg'],\n borderColor: ['components.table.borderColor', '--ksd-table-border-color'],\n\n // ============================================================================\n // 背景\n // ============================================================================\n bg: ['components.table.bg', '--ksd-table-bg'],\n headerBg: ['components.table.headerBg', '--ksd-table-header-bg'],\n rowBg: ['components.table.rowBg', '--ksd-table-row-bg'],\n rowHoverBg: ['components.table.rowHoverBg', '--ksd-table-row-hover-bg'],\n rowActiveBg: ['components.table.rowActiveBg', '--ksd-table-row-active-bg'],\n rowSelectedBg: ['components.table.rowSelectedBg', '--ksd-table-row-selected-bg'],\n rowSubrowBg: ['components.table.rowSubrowBg', '--ksd-table-row-subrow-bg'],\n\n // ============================================================================\n // 文字\n // ============================================================================\n headerColor: ['components.table.headerColor', '--ksd-table-header-color'],\n cellColor: ['components.table.cellColor', '--ksd-table-cell-color'],\n\n // ============================================================================\n // 单元格\n // ============================================================================\n cellPaddingSm: ['components.table.cellPadding.sm', '--ksd-table-cell-padding-sm'],\n cellPaddingMd: ['components.table.cellPadding.md', '--ksd-table-cell-padding-md'],\n cellPaddingLg: ['components.table.cellPadding.lg', '--ksd-table-cell-padding-lg'],\n cellFontSize: ['components.table.cellFontSize', '--ksd-table-cell-font-size'],\n cellLineHeight: ['components.table.cellLineHeight', '--ksd-table-cell-line-height'],\n\n // ============================================================================\n // 分割线\n // ============================================================================\n dividerColor: ['components.table.dividerColor', '--ksd-table-divider-color'],\n\n // ============================================================================\n // 滚动条\n // ============================================================================\n scrollbarWidth: ['components.table.scrollbarWidth', '--ksd-table-scrollbar-width'],\n scrollbarThumbColor: ['components.table.scrollbarThumbColor', '--ksd-table-scrollbar-thumb-color'],\n scrollbarTrackColor: ['components.table.scrollbarTrackColor', '--ksd-table-scrollbar-track-color'],\n\n // ============================================================================\n // 排序指示器\n // ============================================================================\n sortIconColor: ['components.table.sortIconColor', '--ksd-table-sort-icon-color'],\n sortIconActiveColor: ['components.table.sortIconActiveColor', '--ksd-table-sort-icon-active-color'],\n\n // ============================================================================\n // 展开按钮\n // ============================================================================\n expandBtnSize: ['components.table.expandBtnSize', '--ksd-table-expand-btn-size'],\n expandIconSize: ['components.table.expandIconSize', '--ksd-table-expand-icon-size'],\n expandIconColor: ['components.table.expandIconColor', '--ksd-table-expand-icon-color'],\n expandIconHoverColor: ['components.table.expandIconHoverColor', '--ksd-table-expand-icon-hover-color'],\n\n // ============================================================================\n // 空状态\n // ============================================================================\n emptyPadding: ['components.table.emptyPadding', '--ksd-table-empty-padding'],\n emptyColor: ['components.table.emptyColor', '--ksd-table-empty-color'],\n emptyFontSize: ['components.table.emptyFontSize', '--ksd-table-empty-font-size'],\n\n // ============================================================================\n // 固定列阴影\n // ============================================================================\n fixedShadowLeft: ['components.table.fixedShadowLeft', '--ksd-table-fixed-shadow-left'],\n fixedShadowRight: ['components.table.fixedShadowRight', '--ksd-table-fixed-shadow-right'],\n\n // ============================================================================\n // 过渡\n // ============================================================================\n transition: ['components.table.transition', '--ksd-table-transition'],\n});\n","/**\n * Table Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $table } from './styled-tokens';\n\nexport const tableSizes = ['sm', 'md', 'lg'] as const\nexport type TableSize = (typeof tableSizes)[number]\n\nexport const tableVariants = ['default', 'bordered', 'striped'] as const\nexport type TableVariant = (typeof tableVariants)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\n// 获取尺寸对应的边框圆角\nconst getTableRadius = (size: TableSize | undefined, props: ThemeProps): string => {\n const sizeKey = size ?? 'md'\n const radiusMap = {\n sm: $table.borderRadiusSm(props),\n md: $table.borderRadiusMd(props),\n lg: $table.borderRadiusLg(props),\n }\n return radiusMap[sizeKey]\n}\n\n// 获取尺寸对应的单元格内边距\nconst getCellPadding = (size: TableSize | undefined, props: ThemeProps): string => {\n const sizeKey = size ?? 'md'\n const paddingMap = {\n sm: $table.cellPaddingSm(props),\n md: $table.cellPaddingMd(props),\n lg: $table.cellPaddingLg(props),\n }\n return paddingMap[sizeKey]\n}\n\nexport const TableContainer = styled.div<{\n size?: TableSize\n fullWidth?: boolean\n scrollX?: number | string\n scrollY?: number | string\n showScrollbar?: boolean\n}>`\n ${(props) => css`\n width: ${props.fullWidth ? '100%' : 'auto'};\n overflow: auto;\n scrollbar-width: ${props.showScrollbar ? 'thin' : 'none'};\n scrollbar-color: ${$table.scrollbarThumbColor(props)} ${$table.scrollbarTrackColor(props)};\n border-top-left-radius: ${getTableRadius(props.size, props)};\n border-top-right-radius: ${getTableRadius(props.size, props)};\n \n &::-webkit-scrollbar {\n width: ${props.showScrollbar ? $table.scrollbarWidth(props) : '0px'};\n height: ${props.showScrollbar ? $table.scrollbarWidth(props) : '0px'};\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: ${$table.scrollbarThumbColor(props)};\n border-radius: 999px;\n }\n\n &::-webkit-scrollbar-track {\n background: ${$table.scrollbarTrackColor(props)};\n }\n \n ${props.scrollX && css`\n max-width: ${typeof props.scrollX === 'number' ? `${props.scrollX}px` : props.scrollX};\n `}\n \n ${props.scrollY && css`\n max-height: ${typeof props.scrollY === 'number' ? `${props.scrollY}px` : props.scrollY};\n `}\n `}\n`\n\nexport const StyledTable = styled.table<{\n size?: TableSize\n variant?: TableVariant\n scrollX?: number | string\n}>`\n ${(props) => css`\n width: 100%;\n ${props.scrollX && css`\n min-width: ${typeof props.scrollX === 'number' ? `${props.scrollX}px` : props.scrollX};\n `}\n border-collapse: separate;\n border-spacing: 0;\n font-family: var(--ksd-typography-font-family);\n font-size: ${$table.cellFontSize(props)};\n background-color: ${$table.bg(props)};\n \n ${props.variant === 'bordered' && css`\n border: 1px solid ${$table.borderColor(props)};\n border-radius: ${getTableRadius(props.size, props)} ${getTableRadius(props.size, props)} 0 0;\n `}\n\n ${props.variant === 'striped' && css`\n tbody tr:nth-of-type(even) {\n --row-bg: ${$table.rowHoverBg(props)};\n }\n `}\n `}\n`\n\nexport const TableHeader = styled.thead`\n ${(props) => css`\n background: ${$table.headerBg(props)};\n position: sticky;\n top: 0;\n z-index: 10;\n `}\n`\n\nexport const TableHeaderRow = styled.tr`\n ${(props) => css`\n border-bottom: 1px solid ${$table.borderColor(props)};\n `}\n`\n\nexport const TableHeaderCell = styled.th<{\n size?: TableSize\n sortable?: boolean\n fixed?: 'left' | 'right'\n align?: 'left' | 'center' | 'right'\n width?: number | string\n}>`\n ${(props) => css`\n padding: ${getCellPadding(props.size, props)};\n text-align: ${props.align || 'left'};\n font-weight: 400;\n font-size: ${$table.cellFontSize(props)};\n color: ${$table.headerColor(props)};\n white-space: nowrap;\n user-select: none;\n position: ${props.fixed ? 'sticky' : 'static'};\n background: ${$table.headerBg(props)};\n \n ${props.width && css`\n width: ${typeof props.width === 'number' ? `${props.width}px` : props.width};\n `}\n\n ${props.fixed === 'left' && css`\n left: 0;\n z-index: 11;\n box-shadow: ${$table.fixedShadowLeft(props)};\n `}\n\n ${props.fixed === 'right' && css`\n right: 0;\n z-index: 11;\n box-shadow: ${$table.fixedShadowRight(props)};\n `}\n\n ${props.sortable && css`\n cursor: pointer;\n transition: background ${$table.transition(props)};\n\n &:hover {\n background: ${$table.rowActiveBg(props)};\n }\n `}\n\n &:first-of-type {\n border-top-left-radius: ${getTableRadius(props.size, props)};\n }\n\n &:last-of-type {\n border-top-right-radius: ${getTableRadius(props.size, props)};\n }\n `}\n`\n\nexport const SortIndicator = styled.span<{ direction?: 'asc' | 'desc' | null }>`\n ${(props) => css`\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin-left: 4px;\n line-height: 1;\n gap: 2px;\n\n svg {\n width: 12px;\n height: 12px;\n color: ${$table.sortIconColor(props)};\n transition: color 0.2s ease, opacity 0.2s ease;\n opacity: 0.4;\n }\n\n svg[data-active='true'] {\n color: ${$table.sortIconActiveColor(props)};\n opacity: 1;\n }\n `}\n`\n\nexport const TableBody = styled.tbody``\n\nexport const TableRow = styled.tr<{\n selectable?: boolean\n selected?: boolean\n expandable?: boolean\n expanded?: boolean\n isSubRow?: boolean\n level?: number\n}>`\n ${(props) => css`\n /* 定义背景色变量,用于同步固定列的背景 */\n --row-bg: ${$table.rowBg(props)};\n\n ${props.isSubRow && css`\n --row-bg: ${$table.rowSubrowBg(props)};\n `}\n\n ${props.selected && css`\n --row-bg: ${$table.rowSelectedBg(props)};\n `}\n\n background-color: var(--row-bg);\n transition: background-color ${$table.transition(props)};\n\n /* 将边框移动到单元格上,确保在 separate 模式下显示且连续 */\n & > td {\n border-bottom: 1px solid ${$table.dividerColor(props)};\n }\n\n &:last-of-type > td {\n border-bottom: none;\n }\n\n ${(props.selectable || props.expandable) && css`\n cursor: pointer;\n `}\n\n &:hover {\n --row-bg: ${props.selected\n ? $table.rowSelectedBg(props)\n : $table.rowHoverBg(props)};\n }\n\n &:active {\n --row-bg: ${props.selected\n ? $table.rowSelectedBg(props)\n : $table.rowActiveBg(props)};\n }\n `}\n`\n\nexport const TableCell = styled.td<{\n size?: TableSize\n fixed?: 'left' | 'right'\n align?: 'left' | 'center' | 'right'\n width?: number | string\n level?: number\n}>`\n ${(props) => css`\n padding: ${getCellPadding(props.size, props)};\n \n ${props.level && props.level > 0 && css`\n padding-left: ${16 + props.level * 24}px;\n `}\n \n text-align: ${props.align || 'left'};\n font-size: ${$table.cellFontSize(props)};\n color: ${$table.cellColor(props)};\n position: ${props.fixed ? 'sticky' : 'static'};\n /* 使用变量确保固定列背景与行背景同步,且不透明 */\n background-color: ${props.fixed \n ? 'var(--row-bg, inherit)' \n : 'inherit'};\n transition: background-color ${$table.transition(props)};\n \n ${props.width && css`\n width: ${typeof props.width === 'number' ? `${props.width}px` : props.width};\n `}\n\n ${props.fixed === 'left' && css`\n left: 0;\n z-index: 9;\n box-shadow: ${$table.fixedShadowLeft(props)};\n `}\n\n ${props.fixed === 'right' && css`\n right: 0;\n z-index: 9;\n box-shadow: ${$table.fixedShadowRight(props)};\n `}\n `}\n`\n\nexport const CheckboxCell = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n`\n\nexport const ExpandButton = styled.button<{ expanded?: boolean }>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: ${$table.expandBtnSize(props)};\n height: ${$table.expandBtnSize(props)};\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 0;\n margin-right: 8px;\n color: ${$table.expandIconColor(props)};\n transition: transform ${$table.transition(props)}, color ${$table.transition(props)};\n\n &:hover {\n color: ${$table.expandIconHoverColor(props)};\n }\n\n svg {\n width: ${$table.expandIconSize(props)};\n height: ${$table.expandIconSize(props)};\n transform: ${props.expanded ? 'rotate(90deg)' : 'none'};\n }\n `}\n`\n\nexport const EmptyState = styled.div`\n ${(props) => css`\n padding: ${$table.emptyPadding(props)};\n text-align: center;\n color: ${$table.emptyColor(props)};\n font-size: ${$table.emptyFontSize(props)};\n `}\n`\n\nexport const CellContent = styled.div<{\n ellipsis?: boolean\n wrapText?: boolean\n}>`\n ${(props) => css`\n ${props.ellipsis && css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n\n ${props.wrapText && css`\n white-space: normal;\n word-break: break-word;\n `}\n `}\n`\n","import { forwardRef, useState, useCallback, useMemo, useEffect, useRef, type ReactNode } from 'react'\nimport { Checkbox } from '../checkbox'\nimport { Radio } from '../radio'\nimport { ChevronUpOutline, ChevronDownOutline, ChevronRightOutline } from '@kingsoft-ai/icons'\nimport {\n TableContainer,\n StyledTable,\n TableHeader,\n TableHeaderRow,\n TableHeaderCell,\n TableBody,\n TableRow,\n TableCell,\n CheckboxCell,\n ExpandButton,\n EmptyState,\n CellContent,\n SortIndicator,\n tableSizes,\n tableVariants,\n type TableSize,\n type TableVariant,\n} from './Table.style'\n\nexport type { TableSize, TableVariant } from './Table.style'\n\nexport const SIZES = tableSizes\nexport const VARIANTS = tableVariants\n\nexport interface TableColumn<T = any> {\n /** 列唯一标识 */\n key: string\n /** 列标题 */\n title?: ReactNode\n /** 列宽度 */\n width?: number | string\n /** 对齐方式 */\n align?: 'left' | 'center' | 'right'\n /** 是否可排序 */\n sortable?: boolean\n /** 固定列 */\n fixed?: 'left' | 'right'\n /** 自定义渲染 */\n render?: (value: any, record: T, index: number) => ReactNode\n /** 是否省略文本 */\n ellipsis?: boolean\n}\n\nexport interface TableDataSource<T = any> {\n /** 唯一标识 */\n id: string | number\n /** 子数据(用于树形结构) */\n children?: TableDataSource<T>[]\n /** 其他数据字段 */\n [key: string]: any\n}\n\nexport interface TableProps<T extends Record<string, any> = Record<string, any>> {\n /** 列配置 */\n columns: TableColumn<T>[]\n /** 数据源 */\n dataSource: T[]\n /** 表格尺寸 */\n size?: TableSize\n /** 表格变体 */\n variant?: TableVariant\n /** 是否显示边框 */\n bordered?: boolean\n /** 是否全宽 */\n fullWidth?: boolean\n /** 滚动配置 */\n scroll?: {\n /** 横向滚动宽度 */\n x?: number | string\n /** 纵向滚动高度 */\n y?: number | string\n }\n /** 是否可选择 */\n selectable?: boolean\n /** 选择类型 */\n selectionMode?: 'single' | 'multiple'\n /** 选中的行 */\n selectedKeys?: Set<string | number> | 'all'\n /** 选中行变化回调 */\n onSelectionChange?: (keys: Set<string | number> | 'all') => void\n /** 是否可展开 */\n expandable?: boolean\n /** 展开的行 */\n expandedKeys?: Set<string | number>\n /** 展开行变化回调 */\n onExpandChange?: (keys: Set<string | number>) => void\n /** 自定义展开内容 */\n expandedRowRender?: (record: T, index: number) => ReactNode\n /** 排序配置 */\n sortConfig?: {\n key: string\n direction: 'asc' | 'desc' | null\n }\n /** 排序变化回调 */\n onSortChange?: (key: string, direction: 'asc' | 'desc' | null) => void\n /** 行点击事件 */\n onRowClick?: (record: T, index: number) => void\n /** 空数据展示 */\n emptyText?: ReactNode\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n /** 是否允许折行 */\n wrapText?: boolean\n /** Loading 状态 */\n loading?: boolean\n}\n\nfunction TableInner<T extends Record<string, any> = Record<string, any>>(\n {\n columns,\n dataSource,\n size = 'md',\n variant = 'default',\n bordered = false,\n fullWidth = true,\n scroll,\n selectable = false,\n selectionMode = 'multiple',\n selectedKeys: controlledSelectedKeys,\n onSelectionChange,\n expandable = false,\n expandedKeys: controlledExpandedKeys,\n onExpandChange,\n expandedRowRender,\n sortConfig,\n onSortChange,\n onRowClick,\n emptyText = '暂无数据',\n className,\n style,\n wrapText = false,\n loading = false,\n }: TableProps<T>,\n ref: React.ForwardedRef<HTMLTableElement>\n) {\n // 内部状态管理\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<Set<string | number>>(new Set())\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<Set<string | number>>(new Set())\n const [isScrollbarVisible, setIsScrollbarVisible] = useState(false)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const scrollHideTimerRef = useRef<number | null>(null)\n\n // 选中状态\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const handleSelectionChange = useCallback((keys: Set<string | number> | 'all') => {\n // 总是将 'all' 转换为包含所有 ID 的 Set,确保外部接收到的是具体的 key 集合\n const newKeys = keys === 'all' ? new Set(dataSource.map(d => d.id)) : keys\n \n if (!controlledSelectedKeys) {\n setInternalSelectedKeys(newKeys)\n }\n onSelectionChange?.(newKeys)\n }, [controlledSelectedKeys, onSelectionChange, dataSource])\n\n // 展开状态\n const expandedKeys = controlledExpandedKeys ?? internalExpandedKeys\n const handleExpandChange = useCallback((key: string | number) => {\n const newKeys = new Set(expandedKeys)\n if (newKeys.has(key)) {\n newKeys.delete(key)\n } else {\n newKeys.add(key)\n }\n if (!controlledExpandedKeys) {\n setInternalExpandedKeys(newKeys)\n }\n onExpandChange?.(newKeys)\n }, [expandedKeys, controlledExpandedKeys, onExpandChange])\n\n // 排序处理\n const handleSort = useCallback((key: string) => {\n if (!onSortChange) return\n \n let newDirection: 'asc' | 'desc' | null = 'asc'\n \n // 如果当前是该列且正在排序\n if (sortConfig?.key === key) {\n if (sortConfig.direction === 'asc') {\n newDirection = 'desc'\n } else if (sortConfig.direction === 'desc') {\n // 从降序切换到取消排序\n newDirection = null\n }\n }\n \n onSortChange(key, newDirection)\n }, [sortConfig, onSortChange])\n\n // 全选状态计算\n const allSelected = useMemo(() => {\n if (!selectable || selectionMode === 'single') return false\n if (selectedKeys === 'all') return true\n if (dataSource.length === 0) return false\n return dataSource.every(record => selectedKeys.has(record.id))\n }, [selectable, selectionMode, selectedKeys, dataSource])\n\n const indeterminate = useMemo(() => {\n if (!selectable || selectionMode === 'single' || selectedKeys === 'all') return false\n if (dataSource.length === 0) return false\n const selectedCount = dataSource.filter(record => selectedKeys.has(record.id)).length\n return selectedCount > 0 && selectedCount < dataSource.length\n }, [selectable, selectionMode, selectedKeys, dataSource])\n\n // 滚动条显示/隐藏\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handleScroll = () => {\n setIsScrollbarVisible(true)\n if (scrollHideTimerRef.current) {\n window.clearTimeout(scrollHideTimerRef.current)\n }\n scrollHideTimerRef.current = window.setTimeout(() => {\n setIsScrollbarVisible(false)\n }, 800)\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n\n return () => {\n container.removeEventListener('scroll', handleScroll)\n if (scrollHideTimerRef.current) {\n window.clearTimeout(scrollHideTimerRef.current)\n }\n }\n }, [])\n\n // 渲染行数据(包含树形结构)\n const renderRows = useCallback((\n data: T[],\n level = 0\n ): React.ReactNode[] => {\n return data.flatMap((record, index) => {\n const isExpanded = expandedKeys.has(record.id)\n const isSelected = selectedKeys instanceof Set && selectedKeys.has(record.id)\n const hasChildren = record.children && record.children.length > 0\n\n const mainRow = (\n <TableRow\n key={record.id}\n selectable={selectable}\n selected={isSelected}\n expandable={expandable}\n expanded={isExpanded}\n level={level}\n onClick={() => {\n if (selectable && selectionMode === 'single') {\n handleSelectionChange(new Set([record.id]))\n }\n onRowClick?.(record, index)\n }}\n >\n {selectable && (\n <TableCell\n key=\"selection-column\"\n size={size}\n width={48}\n align=\"center\"\n >\n <CheckboxCell onClick={(e) => e.stopPropagation()}>\n {selectionMode === 'single' ? (\n <Radio\n checked={isSelected}\n onChange={() => {\n handleSelectionChange(new Set([record.id]))\n }}\n />\n ) : (\n <Checkbox\n checked={isSelected}\n onChange={(checked) => {\n const newKeys = new Set(selectedKeys === 'all' ? dataSource.map(d => d.id) : selectedKeys)\n if (checked) {\n newKeys.add(record.id)\n } else {\n newKeys.delete(record.id)\n }\n handleSelectionChange(newKeys)\n }}\n />\n )}\n </CheckboxCell>\n </TableCell>\n )}\n {columns.map((column, colIndex) => {\n const value = record[column.key]\n const isFirstColumn = colIndex === 0\n\n return (\n <TableCell\n key={column.key}\n size={size}\n fixed={column.fixed}\n align={column.align}\n width={column.width}\n level={isFirstColumn ? level : 0}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {isFirstColumn && expandable && hasChildren && (\n <ExpandButton\n expanded={isExpanded}\n onClick={(e) => {\n e.stopPropagation()\n handleExpandChange(record.id)\n }}\n aria-label={isExpanded ? '收起' : '展开'}\n >\n <ChevronRightOutline />\n </ExpandButton>\n )}\n \n <CellContent ellipsis={column.ellipsis} wrapText={wrapText}>\n {column.render ? column.render(value, record, index) : value}\n </CellContent>\n </div>\n </TableCell>\n )\n })}\n </TableRow>\n )\n\n const expandedRow = isExpanded && expandedRowRender && (\n <TableRow key={`${record.id}-expanded`} isSubRow>\n <TableCell colSpan={columns.length + (selectable ? 1 : 0)} size={size}>\n {expandedRowRender(record, index)}\n </TableCell>\n </TableRow>\n )\n\n const childRows = isExpanded && hasChildren\n ? renderRows(record.children as T[], level + 1)\n : []\n\n return [mainRow, expandedRow, ...childRows].filter(Boolean)\n })\n }, [\n columns,\n size,\n expandable,\n expandedKeys,\n selectedKeys,\n selectable,\n selectionMode,\n expandedRowRender,\n wrapText,\n handleExpandChange,\n handleSelectionChange,\n onRowClick,\n ])\n\n if (dataSource.length === 0 && !loading) {\n return (\n <TableContainer \n size={size}\n ref={containerRef}\n fullWidth={fullWidth} \n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showScrollbar={isScrollbarVisible}\n className={className}\n style={style}\n >\n <EmptyState>{emptyText}</EmptyState>\n </TableContainer>\n )\n }\n\n return (\n <TableContainer \n size={size}\n ref={containerRef}\n fullWidth={fullWidth} \n scrollX={scroll?.x}\n scrollY={scroll?.y}\n showScrollbar={isScrollbarVisible}\n className={className}\n style={style}\n >\n <StyledTable \n ref={ref} \n size={size} \n variant={bordered ? 'bordered' : variant}\n scrollX={scroll?.x}\n >\n <TableHeader>\n <TableHeaderRow>\n {selectable && (\n <TableHeaderCell\n key=\"selection-column\"\n size={size}\n width={48}\n align=\"center\"\n >\n {selectionMode === 'multiple' && (\n <CheckboxCell>\n <Checkbox\n checked={allSelected}\n indeterminate={indeterminate}\n onChange={(checked) => {\n handleSelectionChange(checked ? 'all' : new Set())\n }}\n />\n </CheckboxCell>\n )}\n </TableHeaderCell>\n )}\n {columns.map((column) => (\n <TableHeaderCell\n key={column.key}\n size={size}\n fixed={column.fixed}\n align={column.align}\n width={column.width}\n sortable={column.sortable}\n onClick={() => column.sortable && handleSort(column.key)}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '8px' }}>\n <span>{column.title}</span>\n {column.sortable && (\n <SortIndicator\n direction={sortConfig?.key === column.key ? sortConfig.direction : undefined}\n >\n <ChevronUpOutline data-active={sortConfig?.key === column.key && sortConfig.direction === 'asc'} />\n <ChevronDownOutline data-active={sortConfig?.key === column.key && sortConfig.direction === 'desc'} />\n </SortIndicator>\n )}\n </div>\n </TableHeaderCell>\n ))}\n </TableHeaderRow>\n </TableHeader>\n\n <TableBody>\n {loading ? (\n <TableRow>\n <TableCell colSpan={columns.length + (selectable ? 1 : 0)} size={size}>\n <div style={{ textAlign: 'center', padding: '24px' }}>加载中...</div>\n </TableCell>\n </TableRow>\n ) : (\n renderRows(dataSource)\n )}\n </TableBody>\n </StyledTable>\n </TableContainer>\n )\n}\n\nconst TableWithRef = forwardRef(TableInner) as <T extends Record<string, any> = Record<string, any>>(\n props: TableProps<T> & { ref?: React.ForwardedRef<HTMLTableElement> }\n) => React.ReactElement\n\n;(TableWithRef as any).displayName = 'Table'\n\nexport const Table = TableWithRef\n","/**\n * Switch Styled Tokens\n *\n * 将 Switch 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Switch 组件的 Styled Tokens\n */\nexport const $switch = createStyledTokens({\n // ============================================================================\n // 尺寸 - Small\n // ============================================================================\n smWidth: ['components.switch.size.sm.width', '--ksd-switch-sm-width'],\n smHeight: ['components.switch.size.sm.height', '--ksd-switch-sm-height'],\n smThumbSize: ['components.switch.size.sm.thumbSize', '--ksd-switch-sm-thumb-size'],\n smFontSize: ['components.switch.size.sm.fontSize', '--ksd-switch-sm-font-size'],\n smPaddingInline: ['components.switch.size.sm.paddingInline', '--ksd-switch-sm-padding-inline'],\n\n // ============================================================================\n // 尺寸 - Medium\n // ============================================================================\n mdWidth: ['components.switch.size.md.width', '--ksd-switch-md-width'],\n mdHeight: ['components.switch.size.md.height', '--ksd-switch-md-height'],\n mdThumbSize: ['components.switch.size.md.thumbSize', '--ksd-switch-md-thumb-size'],\n mdFontSize: ['components.switch.size.md.fontSize', '--ksd-switch-md-font-size'],\n mdPaddingInline: ['components.switch.size.md.paddingInline', '--ksd-switch-md-padding-inline'],\n\n // ============================================================================\n // 背景色\n // ============================================================================\n bgUnchecked: ['components.switch.background.unchecked', '--ksd-switch-bg-unchecked'],\n bgChecked: ['components.switch.background.checked', '--ksd-switch-bg-checked'],\n bgDisabled: ['components.switch.background.disabled', '--ksd-switch-bg-disabled'],\n\n // ============================================================================\n // 滑块\n // ============================================================================\n thumbBg: ['components.switch.thumb.background', '--ksd-switch-thumb-bg'],\n thumbShadow: ['components.switch.thumb.shadow', '--ksd-switch-thumb-shadow'],\n\n // ============================================================================\n // 文字\n // ============================================================================\n textColor: ['components.switch.text.color', '--ksd-switch-text-color'],\n textFontSize: ['components.switch.text.fontSize', '--ksd-switch-text-font-size'],\n textFontWeight: ['components.switch.text.fontWeight', '--ksd-switch-text-font-weight'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.switch.borderRadius', '--ksd-switch-border-radius'],\n gap: ['components.switch.gap', '--ksd-switch-gap'],\n transition: ['components.switch.transition', '--ksd-switch-transition'],\n\n // ============================================================================\n // 禁用状态\n // ============================================================================\n disabledOpacity: ['components.switch.disabled.opacity', '--ksd-switch-disabled-opacity'],\n\n // ============================================================================\n // Focus 环\n // ============================================================================\n focusRingColor: ['components.switch.focusRing.color', '--ksd-switch-focus-ring-color'],\n focusRingOffset: ['components.switch.focusRing.offset', '--ksd-switch-focus-ring-offset'],\n});\n","/**\n * Switch Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $switch } from './styled-tokens';\n\nexport const switchSizes = ['sm', 'md'] as const\nexport type SwitchSize = (typeof switchSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\nconst getSizeStyles = (size: SwitchSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n /* 提供尺寸相关的 CSS 变量,方便内部元素计算占位 */\n --switch-thumb-size: ${$switch.smThumbSize(props)};\n --switch-inner-gap: ${$switch.gap(props)};\n\n min-width: ${$switch.smWidth(props)};\n height: ${$switch.smHeight(props)};\n font-size: ${$switch.smFontSize(props)};\n\n /* 滑块尺寸 - 使用后代选择器 */\n & span[data-thumb] {\n width: ${$switch.smThumbSize(props)};\n height: ${$switch.smThumbSize(props)};\n }\n `,\n md: css`\n /* 提供尺寸相关的 CSS 变量,方便内部元素计算占位 */\n --switch-thumb-size: ${$switch.mdThumbSize(props)};\n --switch-inner-gap: ${$switch.gap(props)};\n\n min-width: ${$switch.mdWidth(props)};\n height: ${$switch.mdHeight(props)};\n font-size: ${$switch.mdFontSize(props)};\n\n /* 滑块尺寸 - 使用后代选择器 */\n & span[data-thumb] {\n width: ${$switch.mdThumbSize(props)};\n height: ${$switch.mdThumbSize(props)};\n }\n `,\n }\n\n return sizeMap[size] || sizeMap.md\n}\n\nexport const SwitchRoot = styled.label<{\n size: SwitchSize\n isSelected: boolean\n isDisabled: boolean\n isFocusVisible: boolean\n hasInnerLabel: boolean\n}>`\n ${(props) => css`\n /* 基础布局 */\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n user-select: none;\n \n /* 背景和圆角 */\n background: ${props.isDisabled\n ? $switch.bgDisabled(props)\n : props.isSelected\n ? $switch.bgChecked(props)\n : $switch.bgUnchecked(props)};\n border-radius: ${$switch.borderRadius(props)};\n \n /* \n * 内边距 - 根据 Figma 设计:\n * - 有文字时:选中状态左8px右3px,未选中状态左3px右8px\n * - 无文字时:始终左右各3px\n * - 上下始终3px\n */\n padding: 3px;\n ${props.hasInnerLabel\n ? css`\n padding-left: ${props.isSelected ? '8px' : '3px'};\n padding-right: ${props.isSelected ? '3px' : '8px'};\n `\n : css`\n padding-left: 3px;\n padding-right: 3px;\n `}\n \n /* 过渡动画 - 只对背景色做动画,padding 瞬间切换以配合滑块动画 */\n transition: background-color ${$switch.transition(props)};\n \n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n \n /* Focus 可见状态 - 键盘导航时显示 */\n ${props.isFocusVisible && css`\n outline: none;\n box-shadow: 0 0 0 ${$switch.focusRingOffset(props)} ${$switch.focusRingColor(props)};\n `}\n \n /* 禁用状态 */\n ${props.isDisabled && css`\n opacity: ${$switch.disabledOpacity(props)};\n cursor: not-allowed;\n `}\n `}\n`\n\nexport const SwitchContent = styled.span<{\n isSelected: boolean\n hasInnerLabel: boolean\n}>`\n ${(props) => css`\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n position: relative;\n z-index: 1;\n \n /* 当存在内部文字时,为滑块预留占位,避免文字与滑块重叠\n 预留尺寸 = 滑块尺寸 + 设计间距 */\n ${props.hasInnerLabel && css`\n padding-right: ${props.isSelected\n ? `calc(var(--switch-thumb-size) + ${$switch.gap(props)})`\n : '0'};\n padding-left: ${!props.isSelected\n ? `calc(var(--switch-thumb-size) + ${$switch.gap(props)})`\n : '0'};\n `}\n \n /* 有文字时,根据选中状态调整文字位置 */\n ${props.hasInnerLabel && css`\n justify-content: ${props.isSelected ? 'flex-start' : 'flex-end'};\n `}\n `}\n`\n\nexport const SwitchLabel = styled.span<{\n isSelected: boolean\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n color: ${$switch.textColor(props)};\n font-size: ${$switch.textFontSize(props)};\n font-weight: ${$switch.textFontWeight(props)};\n line-height: 1.5;\n white-space: nowrap;\n user-select: none;\n position: relative;\n z-index: 2;\n `}\n`\n\nexport const SwitchThumb = styled.span<{\n isSelected: boolean\n}>`\n ${(props) => css`\n display: block;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 50%;\n background: ${$switch.thumbBg(props)};\n box-shadow: ${$switch.thumbShadow(props)};\n \n /* 位置控制:未选中在左,选中在右 */\n ${props.isSelected\n ? css`\n right: 0;\n left: auto;\n `\n : css`\n left: 0;\n right: auto;\n `}\n \n /* 平滑的位置过渡动画 */\n transition: \n left ${$switch.transition(props)},\n right ${$switch.transition(props)};\n `}\n`\n\nexport const SwitchLabelWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: var(--ksd-switch-label-gap);\n`\n\nexport const SwitchLabelText = styled.span<{\n isDisabled: boolean\n}>`\n font-size: var(--ksd-switch-label-font-size);\n color: ${({ isDisabled }) =>\n isDisabled\n ? 'var(--ksd-text-disabled)'\n : 'var(--ksd-text-primary)'};\n user-select: none;\n cursor: ${({ isDisabled }) => (isDisabled ? 'not-allowed' : 'pointer')};\n`\n","import { forwardRef, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport { useSwitch, useFocusRing, VisuallyHidden } from 'react-aria'\nimport type { AriaSwitchProps } from 'react-aria'\nimport { useToggleState } from '@react-stately/toggle'\nimport type { ToggleProps } from '@react-types/checkbox'\nimport { mergeProps } from '@react-aria/utils'\nimport {\n SwitchRoot,\n SwitchContent,\n SwitchLabel,\n SwitchThumb,\n SwitchLabelWrapper,\n SwitchLabelText,\n switchSizes,\n type SwitchSize,\n} from './Switch.style'\n\nexport const SIZES = switchSizes\n\nexport type SwitchProps = Omit<AriaSwitchProps, 'children' | 'isDisabled'> & \n Omit<ToggleProps, 'children' | 'isDisabled'> & {\n /** 开关尺寸:小号(20px)、标准(24px) */\n size?: SwitchSize\n /** 选中状态的文字标签(显示在开关内部) */\n checkedLabel?: string\n /** 未选中状态的文字标签(显示在开关内部) */\n uncheckedLabel?: string\n /** 是否禁用(替代 isDisabled) */\n disabled?: boolean\n /** 受控值(统一 API,优先级高于 isSelected) */\n value?: boolean\n /** 默认值(统一 API,优先级高于 defaultSelected) */\n defaultValue?: boolean\n /** 外部描述性标签(显示在开关旁边) */\n children?: ReactNode\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n size = 'md',\n checkedLabel,\n uncheckedLabel,\n disabled = false,\n value,\n defaultValue,\n children,\n className,\n style,\n isSelected,\n defaultSelected,\n ...props\n },\n forwardedRef,\n ) => {\n // 统一处理受控值:value 优先于 isSelected\n const finalIsSelected = value ?? isSelected\n // 统一处理默认值:defaultValue 优先于 defaultSelected\n const finalDefaultSelected = defaultValue ?? defaultSelected\n\n // 使用 react-stately 管理开关状态\n const state = useToggleState({\n ...props,\n isSelected: finalIsSelected,\n defaultSelected: finalDefaultSelected,\n })\n const innerRef = useRef<HTMLInputElement>(null)\n const ref = forwardedRef || innerRef\n\n // 使用 react-aria 的 useSwitch hook 获取无障碍属性\n const { inputProps } = useSwitch(\n {\n ...props,\n isDisabled: disabled,\n },\n state,\n innerRef,\n )\n\n // 使用 useFocusRing 处理键盘焦点样式\n const { isFocusVisible, focusProps } = useFocusRing()\n\n // 当前显示的标签文字\n const currentLabel = state.isSelected ? checkedLabel : uncheckedLabel\n \n // 是否有内部文字标签\n const hasInnerLabel = Boolean(checkedLabel || uncheckedLabel)\n\n // Switch 主体\n const switchElement = (\n <SwitchRoot\n size={size}\n isSelected={state.isSelected}\n isDisabled={disabled}\n isFocusVisible={isFocusVisible}\n hasInnerLabel={hasInnerLabel}\n className={children ? undefined : className}\n style={children ? undefined : style}\n data-selected={state.isSelected ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n >\n {/* 隐藏的原生 input,用于无障碍访问 */}\n <VisuallyHidden>\n <input\n {...mergeProps(inputProps, focusProps)}\n ref={ref}\n />\n </VisuallyHidden>\n\n {/* 开关内容:文字 + 滑块 */}\n <SwitchContent isSelected={state.isSelected} hasInnerLabel={hasInnerLabel}>\n {/* 滑块 - 使用绝对定位,始终渲染 */}\n <SwitchThumb\n isSelected={state.isSelected}\n data-thumb\n aria-hidden=\"true\"\n />\n \n {/* 内部状态文字(如果有) - 相对定位,在滑块上方 */}\n {hasInnerLabel && currentLabel && (\n <SwitchLabel isSelected={state.isSelected}>\n {currentLabel}\n </SwitchLabel>\n )}\n </SwitchContent>\n </SwitchRoot>\n )\n\n // 如果有外部标签,使用 wrapper 包装\n if (children) {\n return (\n <SwitchLabelWrapper className={className} style={style}>\n {switchElement}\n <SwitchLabelText\n isDisabled={disabled}\n onClick={() => {\n if (!disabled) {\n state.toggle()\n }\n }}\n >\n {children}\n </SwitchLabelText>\n </SwitchLabelWrapper>\n )\n }\n\n return switchElement\n },\n)\n\nSwitch.displayName = 'Switch'\n\n","/**\n * Transfer Styled Tokens\n *\n * 将 Transfer 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Transfer 组件的 Styled Tokens\n */\nexport const $transfer = createStyledTokens({\n // ============================================================================\n // Container\n // ============================================================================\n containerGap: ['components.transfer.container.gap', '--ksd-transfer-container-gap'],\n\n // ============================================================================\n // Panel\n // ============================================================================\n panelWidth: ['components.transfer.panel.width', '--ksd-transfer-panel-width'],\n panelHeight: ['components.transfer.panel.height', '--ksd-transfer-panel-height'],\n panelBg: ['components.transfer.panel.background', '--ksd-transfer-panel-bg'],\n panelBorder: ['components.transfer.panel.border', '--ksd-transfer-panel-border'],\n panelBorderRadius: ['components.transfer.panel.borderRadius', '--ksd-transfer-panel-border-radius'],\n\n // ============================================================================\n // Header\n // ============================================================================\n headerHeight: ['components.transfer.header.height', '--ksd-transfer-header-height'],\n headerPadding: ['components.transfer.header.padding', '--ksd-transfer-header-padding'],\n headerFontSize: ['components.transfer.header.fontSize', '--ksd-transfer-header-font-size'],\n headerColor: ['components.transfer.header.color', '--ksd-transfer-header-color'],\n headerBg: ['components.transfer.header.background', '--ksd-transfer-header-bg'],\n\n // ============================================================================\n // List\n // ============================================================================\n listHeight: ['components.transfer.list.height', '--ksd-transfer-list-height'],\n listGap: ['components.transfer.list.gap', '--ksd-transfer-list-gap'],\n listPadding: ['components.transfer.list.padding', '--ksd-transfer-list-padding'],\n\n // ============================================================================\n // Item\n // ============================================================================\n itemHeight: ['components.transfer.item.height', '--ksd-transfer-item-height'],\n itemFontSize: ['components.transfer.item.fontSize', '--ksd-transfer-item-font-size'],\n itemBorderRadius: ['components.transfer.item.borderRadius', '--ksd-transfer-item-border-radius'],\n itemGap: ['components.transfer.item.gap', '--ksd-transfer-item-gap'],\n itemPadding: ['components.transfer.item.padding', '--ksd-transfer-item-padding'],\n itemText: ['components.transfer.item.text.default', '--ksd-transfer-item-text'],\n itemTextSelected: ['components.transfer.item.text.selected', '--ksd-transfer-item-text-selected'],\n itemTextDisabled: ['components.transfer.item.text.disabled', '--ksd-transfer-item-text-disabled'],\n itemCheckboxSize: ['components.transfer.item.checkboxSize', '--ksd-transfer-item-checkbox-size'],\n\n // ============================================================================\n // Operations\n // ============================================================================\n operationsGap: ['components.transfer.operations.gap', '--ksd-transfer-operations-gap'],\n operationsBorderRadius: ['components.transfer.operations.borderRadius', '--ksd-transfer-operations-border-radius'],\n operationsWidth: ['components.transfer.operations.width', '--ksd-transfer-operations-width'],\n operationsHeight: ['components.transfer.operations.height', '--ksd-transfer-operations-height'],\n operationsIconSize: ['components.transfer.operations.iconSize', '--ksd-transfer-operations-icon-size'],\n operationsBorder: ['components.transfer.operations.borderColor.default', '--ksd-transfer-operations-border'],\n operationsBorderDisabled: ['components.transfer.operations.borderColor.disabled', '--ksd-transfer-operations-border-disabled'],\n operationsBorderActive: ['components.transfer.operations.borderColor.active', '--ksd-transfer-operations-border-active'],\n operationsBg: ['components.transfer.operations.backgroundColor.default', '--ksd-transfer-operations-bg'],\n operationsBgDisabled: ['components.transfer.operations.backgroundColor.disabled', '--ksd-transfer-operations-bg-disabled'],\n operationsBgActive: ['components.transfer.operations.backgroundColor.active', '--ksd-transfer-operations-bg-active'],\n operationsIcon: ['components.transfer.operations.iconColor.default', '--ksd-transfer-operations-icon'],\n operationsIconDisabled: ['components.transfer.operations.iconColor.disabled', '--ksd-transfer-operations-icon-disabled'],\n operationsIconActive: ['components.transfer.operations.iconColor.active', '--ksd-transfer-operations-icon-active'],\n\n // ============================================================================\n // Footer\n // ============================================================================\n footerHeight: ['components.transfer.footer.height', '--ksd-transfer-footer-height'],\n footerPaddingInline: ['components.transfer.footer.paddingInline', '--ksd-transfer-footer-padding-inline'],\n footerFontSize: ['components.transfer.footer.fontSize', '--ksd-transfer-footer-font-size'],\n footerColor: ['components.transfer.footer.color', '--ksd-transfer-footer-color'],\n footerBorderTop: ['components.transfer.footer.borderTop', '--ksd-transfer-footer-border-top'],\n footerMarginTop: ['components.transfer.footer.marginTop', '--ksd-transfer-footer-margin-top'],\n\n // ============================================================================\n // Empty\n // ============================================================================\n emptyColor: ['components.transfer.empty.color', '--ksd-transfer-empty-color'],\n emptyFontSize: ['components.transfer.empty.fontSize', '--ksd-transfer-empty-font-size'],\n\n // ============================================================================\n // Search\n // ============================================================================\n searchWidth: ['components.transfer.search.width', '--ksd-transfer-search-width'],\n searchIconColor: ['components.transfer.search.iconColor', '--ksd-transfer-search-icon-color'],\n\n // ============================================================================\n // Transition\n // ============================================================================\n transition: ['components.transfer.transition', '--ksd-transfer-transition'],\n});\n","import { styled, css } from '@kingsoft-ai/theme';\nimport { $transfer } from './styled-tokens';\n\nexport const TransferRoot = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$transfer.containerGap(props)};\n `}\n`;\n\nexport const TransferPanel = styled.div`\n ${(props) => css`\n width: ${$transfer.panelWidth(props)};\n height: ${$transfer.panelHeight(props)};\n background: ${$transfer.panelBg(props)};\n border: ${$transfer.panelBorder(props)};\n border-radius: ${$transfer.panelBorderRadius(props)};\n display: flex;\n flex-direction: column;\n overflow: hidden;\n `}\n`;\n\nexport const TransferHeader = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: ${$transfer.headerHeight(props)};\n padding: ${$transfer.headerPadding(props)};\n font-size: ${$transfer.headerFontSize(props)};\n color: ${$transfer.headerColor(props)};\n background: ${$transfer.headerBg(props)};\n flex-shrink: 0;\n `}\n`;\n\nexport const TransferTitle = styled.span`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const TransferCount = styled.span`\n ${(props) => css`\n color: ${$transfer.headerColor(props)};\n `}\n`;\n\nexport const TransferSearchWrapper = styled.div`\n ${(props) => css`\n padding: 10px 0;\n display: flex;\n flex-shrink: 0;\n width: ${$transfer.searchWidth(props)};\n margin: 0 auto;\n & > div {\n width: 100%;\n >div {\n min-width: 100%;\n }\n }\n `}\n`;\n\nexport const TransferList = styled.div`\n ${(props) => css`\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n padding: ${$transfer.listPadding(props)};\n \n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--ksd-border-divider);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: var(--ksd-border-primary);\n }\n `}\n`;\n\nexport const TransferItem = styled.div<{\n disabled?: boolean;\n selected?: boolean;\n}>`\n ${(props) => css`\n display: flex;\n align-items: center;\n height: ${$transfer.itemHeight(props)};\n font-size: ${$transfer.itemFontSize(props)};\n border-radius: ${$transfer.itemBorderRadius(props)};\n gap: ${$transfer.itemGap(props)};\n cursor: ${props.disabled ? 'not-allowed' : 'pointer'};\n user-select: none;\n transition: ${$transfer.transition(props)};\n padding: ${$transfer.itemPadding(props)};\n color: ${props.disabled\n ? $transfer.itemTextDisabled(props)\n : props.selected\n ? $transfer.itemTextSelected(props)\n : $transfer.itemText(props)};\n `}\n`;\n\nexport const TransferItemLabel = styled.span`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const TransferItemContent = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: ${$transfer.itemGap(props)};\n flex: 1;\n overflow: hidden;\n `}\n`;\n\nexport const TransferItemDeleteButton = styled.button<{ disabled?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n border: none;\n background: transparent;\n cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};\n opacity: ${({ disabled }) => (disabled ? 0.5 : 1)};\n color: var(--ksd-text-tertiary);\n transition: all 0.2s ease;\n padding: 0;\n margin-left: 8px;\n\n svg {\n width: 16px;\n height: 16px;\n }\n`;\n\nexport const TransferOperations = styled.div`\n ${(props) => css`\n display: flex;\n flex-direction: column;\n gap: ${$transfer.operationsGap(props)};\n align-items: center;\n `}\n`;\n\nexport const TransferOperationButton = styled.div<{ disabled?: boolean; active?: boolean }>`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${$transfer.operationsWidth(props)};\n height: ${$transfer.operationsHeight(props)};\n border-radius: 50%;\n border: 1px solid ${props.disabled\n ? $transfer.operationsBorderDisabled(props)\n : props.active\n ? $transfer.operationsBorderActive(props)\n : $transfer.operationsBorder(props)};\n background: ${props.disabled\n ? $transfer.operationsBgDisabled(props)\n : $transfer.operationsBg(props)};\n cursor: ${props.disabled ? 'not-allowed' : 'pointer'};\n transition: all 0.2s ease;\n opacity: ${props.disabled ? 0.5 : 1};\n\n svg {\n width: ${$transfer.operationsIconSize(props)};\n height: ${$transfer.operationsIconSize(props)};\n color: ${props.disabled\n ? $transfer.operationsIconDisabled(props)\n : props.active\n ? $transfer.operationsIconActive(props)\n : $transfer.operationsIcon(props)};\n }\n\n &:hover {\n border-color: ${!props.disabled && $transfer.operationsBorderActive(props)};\n \n svg {\n color: ${!props.disabled && $transfer.operationsIconActive(props)};\n }\n }\n\n &:active {\n border-color: ${$transfer.operationsBorderActive(props)};\n \n svg {\n color: ${$transfer.operationsIconActive(props)};\n }\n }\n `}\n`;\n\nexport const TransferFooter = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n height: ${$transfer.footerHeight(props)};\n padding-inline: ${$transfer.footerPaddingInline(props)};\n font-size: ${$transfer.footerFontSize(props)};\n color: ${$transfer.footerColor(props)};\n border-top: ${$transfer.footerBorderTop(props)};\n margin-top: ${$transfer.footerMarginTop(props)};\n flex-shrink: 0;\n `}\n`;\n\nexport const TransferEmpty = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: ${$transfer.emptyColor(props)};\n font-size: ${$transfer.emptyFontSize(props)};\n `}\n`;\n\nexport const TransferPagination = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 16px;\n border-top: 1px solid var(--ksd-border-divider);\n flex-shrink: 0;\n font-size: 12px;\n color: var(--ksd-text-secondary);\n`;\n\nexport const TransferPaginationInfo = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\nexport const TransferPaginationControls = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nexport const TransferPaginationButton = styled.button<{ disabled?: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 1px solid var(--ksd-border-primary);\n border-radius: var(--ksd-radii-r2);\n background: var(--ksd-background-surface);\n cursor: ${({ disabled }) => disabled ? 'not-allowed' : 'pointer'};\n opacity: ${({ disabled }) => disabled ? 0.5 : 1};\n transition: all 0.2s ease;\n\n &:hover:not(:disabled) {\n border-color: var(--ksd-brand-primary);\n color: var(--ksd-brand-primary);\n }\n\n svg {\n width: 14px;\n height: 14px;\n }\n`;\n\nexport const TransferPageSizeSelector = styled.select`\n height: 24px;\n padding: 0 20px 0 8px;\n border: 1px solid var(--ksd-border-primary);\n border-radius: var(--ksd-radii-r2);\n background: var(--ksd-background-surface);\n font-size: 12px;\n color: var(--ksd-text-primary);\n cursor: pointer;\n outline: none;\n \n &:hover {\n border-color: var(--ksd-brand-primary);\n }\n`;\n","import React, { useState, useMemo, useCallback } from 'react';\nimport { Checkbox } from '../checkbox';\nimport { Input } from '../input';\nimport { Select } from '../select';\nimport {\n ChevronRightOutline,\n ChevronLeftOutline,\n SearchOutline,\n DeleteOutline,\n} from '@kingsoft-ai/icons';\nimport {\n TransferRoot,\n TransferPanel,\n TransferHeader,\n TransferTitle,\n TransferCount,\n TransferSearchWrapper,\n TransferList as StyledTransferList,\n TransferItem,\n TransferItemLabel,\n TransferItemContent,\n TransferItemDeleteButton,\n TransferOperations,\n TransferOperationButton,\n TransferFooter,\n TransferEmpty,\n TransferPagination,\n TransferPaginationInfo,\n TransferPaginationControls,\n TransferPaginationButton,\n} from './Transfer.style';\n\nexport interface TransferItem {\n /** 唯一标识 */\n key: string;\n /** 标题 */\n title: React.ReactNode;\n /** 描述 */\n description?: React.ReactNode;\n /** 是否禁用 */\n disabled?: boolean;\n /** 其他自定义数据 */\n [key: string]: any;\n}\n\nexport interface TransferHeaderProps {\n /** 方向 */\n direction: 'left' | 'right';\n /** 已选中数量 */\n selectedCount: number;\n /** 总数量 */\n totalCount: number;\n /** 选中的keys */\n selectedKeys: Set<string>;\n /** 全选回调 */\n onSelectAll: (checked: boolean) => void;\n /** 标题 */\n title?: React.ReactNode;\n /** 是否显示全选 */\n showSelectAll: boolean;\n /** 是否禁用 */\n disabled?: boolean;\n /** 清空所有选中项回调 */\n onClearAll?: () => void;\n /** 清空模式:'selected' | 'all' */\n clearMode?: 'selected' | 'all';\n}\n\nexport interface TransferActions {\n /** 左侧操作按钮,支持静态元素或动态函数 */\n left?: React.ReactNode | ((selectedKeys: string[]) => React.ReactNode);\n /** 右侧操作按钮,支持静态元素或动态函数 */\n right?: React.ReactNode | ((selectedKeys: string[]) => React.ReactNode);\n}\n\nexport interface TransferProps {\n /** 数据源 */\n dataSource: TransferItem[];\n /** 目标框数据的 key 集合 */\n targetKeys?: string[];\n /** 默认目标框数据的 key 集合 */\n defaultTargetKeys?: string[];\n /** 选中项变化的回调 */\n onChange?: (targetKeys: string[], direction: 'left' | 'right', moveKeys: string[]) => void;\n /** 源框标题 */\n titles?: [React.ReactNode, React.ReactNode];\n /** 是否显示搜索框 */\n showSearch?: boolean;\n /** 搜索框占位符 */\n searchPlaceholder?: [string, string];\n /** 自定义过滤方法 */\n filterOption?: (inputValue: string, item: TransferItem) => boolean;\n /** 自定义渲染每一项 */\n render?: (item: TransferItem) => React.ReactNode;\n /** 是否禁用 */\n disabled?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 操作按钮文本 */\n operations?: [React.ReactNode, React.ReactNode];\n /** 是否显示全选 */\n showSelectAll?: boolean;\n /** 底部渲染函数 */\n footer?: (props: { direction: 'left' | 'right' }) => React.ReactNode;\n /** 列表为空时显示的内容 */\n locale?: {\n itemUnit?: string;\n itemsUnit?: string;\n notFoundContent?: React.ReactNode;\n searchPlaceholder?: string;\n };\n /** 自定义头部渲染 */\n header?: (props: TransferHeaderProps) => React.ReactNode;\n /** 单向模式 */\n oneWay?: boolean;\n /** 自定义操作按钮 */\n actions?: React.ReactNode[] | TransferActions;\n /** 使用分页样式,自定义渲染列表下无效 */\n pagination?: boolean | {\n pageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: number[];\n showPageInfo?: boolean;\n };\n}\n\ninterface TransferListProps {\n direction: 'left' | 'right';\n dataSource: TransferItem[];\n selectedKeys: Set<string>;\n disabled?: boolean;\n showSearch?: boolean;\n searchPlaceholder?: string;\n filterOption?: (inputValue: string, item: TransferItem) => boolean;\n render?: (item: TransferItem) => React.ReactNode;\n onItemSelectChange: (keys: Set<string>) => void;\n title?: React.ReactNode;\n showSelectAll?: boolean;\n footer?: (props: { direction: 'left' | 'right' }) => React.ReactNode;\n locale?: TransferProps['locale'];\n header?: (props: TransferHeaderProps) => React.ReactNode;\n onClearAll?: () => void;\n clearMode?: 'selected' | 'all';\n oneWay?: boolean;\n onItemDelete?: (key: string) => void;\n pagination?: TransferProps['pagination'];\n}\n\nconst TransferList: React.FC<TransferListProps> = ({\n direction,\n dataSource,\n selectedKeys,\n disabled,\n showSearch,\n searchPlaceholder,\n filterOption,\n render,\n onItemSelectChange,\n title,\n showSelectAll = true,\n footer,\n locale,\n header,\n onClearAll,\n clearMode = 'all',\n oneWay = false,\n onItemDelete,\n pagination,\n}) => {\n const [searchValue, setSearchValue] = useState('');\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(\n typeof pagination === 'object' && pagination.pageSize ? pagination.pageSize : 10\n );\n\n // 过滤数据\n const filteredData = useMemo(() => {\n if (!searchValue) return dataSource;\n if (filterOption) {\n return dataSource.filter((item) => filterOption(searchValue, item));\n }\n return dataSource.filter((item) => {\n const title = String(item.title || '');\n const description = String(item.description || '');\n return (\n title.toLowerCase().includes(searchValue.toLowerCase()) ||\n description.toLowerCase().includes(searchValue.toLowerCase())\n );\n });\n }, [dataSource, searchValue, filterOption]);\n\n // 可选择的项(排除禁用项)\n const selectableItems = useMemo(\n () => filteredData.filter((item) => !item.disabled),\n [filteredData]\n );\n\n // 是否启用分页(自定义render时禁用)\n const isPaginationEnabled = pagination && !render;\n\n // 分页后的数据\n const paginatedData = useMemo(() => {\n if (!isPaginationEnabled) return filteredData;\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return filteredData.slice(startIndex, endIndex);\n }, [filteredData, currentPage, pageSize, isPaginationEnabled]);\n\n // 实际显示的数据\n const displayData = isPaginationEnabled ? paginatedData : filteredData;\n\n // 总页数\n const totalPages = useMemo(() => {\n if (!isPaginationEnabled) return 1;\n return Math.ceil(filteredData.length / pageSize);\n }, [filteredData.length, pageSize, isPaginationEnabled]);\n\n // 切换页码\n const handlePageChange = useCallback((page: number) => {\n setCurrentPage(page);\n }, []);\n\n // 切换每页条数\n const handlePageSizeChange = useCallback((size: number) => {\n setPageSize(size);\n setCurrentPage(1);\n }, []);\n\n // 检查是否全选\n const isAllSelected = useMemo(() => {\n if (selectableItems.length === 0) return false;\n return selectableItems.every((item) => selectedKeys.has(item.key));\n }, [selectableItems, selectedKeys]);\n\n // 是否部分选中\n const isIndeterminate = useMemo(() => {\n const selectedCount = selectableItems.filter((item) =>\n selectedKeys.has(item.key)\n ).length;\n return selectedCount > 0 && selectedCount < selectableItems.length;\n }, [selectableItems, selectedKeys]);\n\n // 全选/取消全选\n const handleSelectAll = useCallback(\n (checked: boolean) => {\n const newKeys = new Set(selectedKeys);\n selectableItems.forEach((item) => {\n if (checked) {\n newKeys.add(item.key);\n } else {\n newKeys.delete(item.key);\n }\n });\n onItemSelectChange(newKeys);\n },\n [selectableItems, selectedKeys, onItemSelectChange]\n );\n\n // 切换单项选中状态\n const handleItemToggle = useCallback(\n (key: string) => {\n const newKeys = new Set(selectedKeys);\n if (newKeys.has(key)) {\n newKeys.delete(key);\n } else {\n newKeys.add(key);\n }\n onItemSelectChange(newKeys);\n },\n [selectedKeys, onItemSelectChange]\n );\n\n // 渲染项\n const renderItem = (item: TransferItem) => {\n if (render) {\n return render(item);\n }\n return item.title;\n };\n\n const selectedCount = selectableItems.filter((item) =>\n selectedKeys.has(item.key)\n ).length;\n\n // 默认头部渲染\n const renderDefaultHeader = () => (\n <TransferHeader>\n <TransferTitle>\n {showSelectAll && selectableItems.length > 0 && (\n <Checkbox\n checked={isAllSelected}\n indeterminate={isIndeterminate}\n onChange={handleSelectAll}\n disabled={disabled}\n />\n )}\n {title}\n </TransferTitle>\n <TransferCount>\n {selectedCount}/{dataSource.length}\n </TransferCount>\n </TransferHeader>\n );\n\n return (\n <TransferPanel>\n {/* 头部 */}\n {header ? (\n header({\n direction,\n selectedCount,\n totalCount: dataSource.length,\n selectedKeys,\n onSelectAll: handleSelectAll,\n title,\n showSelectAll,\n disabled,\n onClearAll,\n clearMode,\n })\n ) : (\n renderDefaultHeader()\n )}\n\n {/* 搜索框 */}\n {showSearch && (\n <TransferSearchWrapper>\n <Input\n suffix={<SearchOutline style={{color: 'var(--ksd-transfer-search-icon-color)'}}/>}\n size=\"sm\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder || locale?.searchPlaceholder || '请输入搜索内容'}\n disabled={disabled}\n aria-label=\"搜索输入框\"\n fullWidth\n />\n </TransferSearchWrapper>\n )}\n\n {/* 列表 */}\n <StyledTransferList>\n {displayData.length === 0 ? (\n <TransferEmpty>\n {locale?.notFoundContent || '暂无数据'}\n </TransferEmpty>\n ) : (\n displayData.map((item) => (\n <TransferItem\n key={item.key}\n disabled={disabled || item.disabled}\n selected={selectedKeys.has(item.key)}\n onClick={() => {\n if (!disabled && !item.disabled) {\n handleItemToggle(item.key);\n }\n }}\n >\n <TransferItemContent>\n {/* oneWay模式下,左侧显示checkbox,右侧不显示(右侧有删除按钮) */}\n {(!oneWay || direction === 'left') && (\n <Checkbox\n checked={selectedKeys.has(item.key)}\n disabled={disabled || item.disabled}\n onClick={(e) => {\n e.stopPropagation();\n }}\n />\n )}\n <TransferItemLabel>{renderItem(item)}</TransferItemLabel>\n </TransferItemContent>\n {oneWay && direction === 'right' && onItemDelete && (\n <TransferItemDeleteButton\n onClick={(e) => {\n e.stopPropagation();\n if (!disabled && !item.disabled) {\n onItemDelete(item.key);\n }\n }}\n disabled={disabled || item.disabled}\n >\n <DeleteOutline />\n </TransferItemDeleteButton>\n )}\n </TransferItem>\n ))\n )}\n </StyledTransferList>\n\n {/* 分页 */}\n {isPaginationEnabled && filteredData.length > 0 && (\n <TransferPagination>\n <TransferPaginationInfo>\n {typeof pagination === 'object' && pagination.showPageInfo !== false && (\n <span>\n {(currentPage - 1) * pageSize + 1}-\n {Math.min(currentPage * pageSize, filteredData.length)} / {filteredData.length}\n </span>\n )}\n {typeof pagination === 'object' && pagination.showSizeChanger && (\n <Select\n value={pageSize.toString()}\n onChange={(value) => handlePageSizeChange(Number(value))}\n options={(pagination.pageSizeOptions || [10, 20, 50]).map((size) => ({\n value: size.toString(),\n label: `${size} 条/页`,\n }))}\n style={{ width: '80px', height: '24px', minWidth: '80px' }}\n disabled={disabled}\n />\n )}\n </TransferPaginationInfo>\n <TransferPaginationControls>\n <TransferPaginationButton\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n >\n <ChevronLeftOutline />\n </TransferPaginationButton>\n <span>\n {currentPage} / {totalPages}\n </span>\n <TransferPaginationButton\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n >\n <ChevronRightOutline />\n </TransferPaginationButton>\n </TransferPaginationControls>\n </TransferPagination>\n )}\n\n {/* 底部 */}\n {footer && <TransferFooter>{footer({ direction })}</TransferFooter>}\n </TransferPanel>\n );\n};\n\nexport const Transfer: React.FC<TransferProps> = ({\n dataSource = [],\n targetKeys: controlledTargetKeys,\n defaultTargetKeys = [],\n onChange,\n titles = ['源列表', '目标列表'],\n showSearch = false,\n searchPlaceholder = ['搜索源列表', '搜索目标列表'],\n filterOption,\n render,\n disabled = false,\n className,\n style,\n operations,\n showSelectAll = true,\n footer,\n locale,\n header,\n oneWay = false,\n actions,\n pagination,\n}) => {\n // 内部状态管理(非受控)\n const [internalTargetKeys, setInternalTargetKeys] = useState<Set<string>>(\n new Set(defaultTargetKeys)\n );\n\n // 判断是否受控\n const isControlled = controlledTargetKeys !== undefined;\n const targetKeysSet = useMemo(\n () =>\n isControlled\n ? new Set(controlledTargetKeys)\n : internalTargetKeys,\n [isControlled, controlledTargetKeys, internalTargetKeys]\n );\n\n // 左侧选中的项\n const [leftSelectedKeys, setLeftSelectedKeys] = useState<Set<string>>(new Set());\n // 右侧选中的项\n const [rightSelectedKeys, setRightSelectedKeys] = useState<Set<string>>(new Set());\n\n // 左侧数据源(未选中的项)\n const leftDataSource = useMemo(\n () => dataSource.filter((item) => !targetKeysSet.has(item.key)),\n [dataSource, targetKeysSet]\n );\n\n // 右侧数据源(已选中的项)\n const rightDataSource = useMemo(\n () => dataSource.filter((item) => targetKeysSet.has(item.key)),\n [dataSource, targetKeysSet]\n );\n\n // 移动到右侧\n const moveToRight = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(leftSelectedKeys);\n \n moveKeys.forEach((key) => {\n newTargetKeys.add(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setLeftSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'right', moveKeys);\n }, [targetKeysSet, leftSelectedKeys, isControlled, onChange]);\n\n // 移动到左侧\n const moveToLeft = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(rightSelectedKeys);\n \n moveKeys.forEach((key) => {\n newTargetKeys.delete(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setRightSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'left', moveKeys);\n }, [targetKeysSet, rightSelectedKeys, isControlled, onChange]);\n\n // 清空左侧所有数据(移动到右侧)\n const clearAllLeftData = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const allLeftKeys = leftDataSource.filter(item => !item.disabled).map(item => item.key);\n \n allLeftKeys.forEach((key) => {\n newTargetKeys.add(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setLeftSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'right', allLeftKeys);\n }, [targetKeysSet, leftDataSource, isControlled, onChange]);\n\n // 清空右侧所有数据(移动到左侧)\n const clearAllRightData = useCallback(() => {\n const newTargetKeys = new Set(targetKeysSet);\n const moveKeys = Array.from(targetKeysSet).filter(key => {\n const item = dataSource.find(item => item.key === key);\n return item && !item.disabled;\n });\n \n moveKeys.forEach((key) => {\n newTargetKeys.delete(key);\n });\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n setRightSelectedKeys(new Set());\n onChange?.(Array.from(newTargetKeys), 'left', moveKeys);\n }, [targetKeysSet, dataSource, isControlled, onChange]);\n\n // 删除单个项目\n const handleItemDelete = useCallback(\n (key: string) => {\n const newTargetKeys = new Set(targetKeysSet);\n newTargetKeys.delete(key);\n\n if (!isControlled) {\n setInternalTargetKeys(newTargetKeys);\n }\n\n onChange?.(Array.from(newTargetKeys), 'left', [key]);\n },\n [targetKeysSet, isControlled, onChange]\n );\n\n // 判断操作按钮是否可用\n const canMoveToRight = leftSelectedKeys.size > 0 && !disabled;\n const canMoveToLeft = rightSelectedKeys.size > 0 && !disabled;\n\n // 渲染操作按钮\n const renderActions = () => {\n // 处理对象格式的 actions\n if (actions && typeof actions === 'object' && !Array.isArray(actions)) {\n const { left, right } = actions as TransferActions;\n\n if (oneWay) {\n // 单向模式只显示右侧按钮\n if (right) {\n if (typeof right === 'function') {\n return <React.Fragment key=\"right\">{right(Array.from(leftSelectedKeys))}</React.Fragment>;\n }\n return <React.Fragment key=\"right\">{right}</React.Fragment>;\n }\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n // 双向模式\n return (\n <>\n {left ? (\n typeof left === 'function' ? (\n <React.Fragment key=\"left\">{left(Array.from(leftSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"left\">{left}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n )}\n {right ? (\n typeof right === 'function' ? (\n <React.Fragment key=\"right\">{right(Array.from(rightSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"right\">{right}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n )}\n </>\n );\n }\n\n // 处理数组格式的 actions(向后兼容)\n if (actions && Array.isArray(actions)) {\n if (oneWay) {\n // 单向模式只显示第一个按钮\n const action = actions[0];\n if (!action) {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n if (typeof action === 'string') {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n {action}\n </TransferOperationButton>\n );\n } else if (React.isValidElement(action)) {\n return <React.Fragment key=\"action-0\">{action}</React.Fragment>;\n } else if (typeof action === 'function') {\n return <React.Fragment key=\"action-0\">{(action as any)(Array.from(leftSelectedKeys))}</React.Fragment>;\n }\n return <React.Fragment key=\"action-0\">{action}</React.Fragment>;\n }\n\n // 双向模式\n const leftAction = actions[0];\n const rightAction = actions[1];\n\n return (\n <>\n {leftAction ? (\n typeof leftAction === 'string' ? (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n {leftAction}\n </TransferOperationButton>\n ) : React.isValidElement(leftAction) ? (\n <React.Fragment key=\"left\">{leftAction}</React.Fragment>\n ) : typeof leftAction === 'function' ? (\n <React.Fragment key=\"left\">{(leftAction as any)(Array.from(leftSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"left\">{leftAction}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n )}\n {rightAction ? (\n typeof rightAction === 'string' ? (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n {rightAction}\n </TransferOperationButton>\n ) : React.isValidElement(rightAction) ? (\n <React.Fragment key=\"right\">{rightAction}</React.Fragment>\n ) : typeof rightAction === 'function' ? (\n <React.Fragment key=\"right\">{(rightAction as any)(Array.from(rightSelectedKeys))}</React.Fragment>\n ) : (\n <React.Fragment key=\"right\">{rightAction}</React.Fragment>\n )\n ) : (\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n )}\n </>\n );\n }\n\n // 默认按钮\n if (oneWay) {\n return (\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n );\n }\n\n return (\n <>\n <TransferOperationButton\n onClick={moveToRight}\n disabled={!canMoveToRight}\n >\n <ChevronRightOutline />\n {operations?.[0]}\n </TransferOperationButton>\n <TransferOperationButton\n onClick={moveToLeft}\n disabled={!canMoveToLeft}\n >\n <ChevronLeftOutline />\n {operations?.[1]}\n </TransferOperationButton>\n </>\n );\n };\n\n return (\n <TransferRoot className={className} style={style}>\n {/* 左侧列表 */}\n <TransferList\n direction=\"left\"\n dataSource={leftDataSource}\n selectedKeys={leftSelectedKeys}\n disabled={disabled}\n showSearch={showSearch}\n searchPlaceholder={searchPlaceholder[0]}\n filterOption={filterOption}\n render={render}\n onItemSelectChange={setLeftSelectedKeys}\n title={titles[0]}\n showSelectAll={showSelectAll}\n footer={footer}\n locale={locale}\n header={header}\n onClearAll={clearAllLeftData}\n clearMode=\"all\"\n oneWay={oneWay}\n pagination={pagination}\n />\n\n {/* 操作按钮 */}\n <TransferOperations>\n {renderActions()}\n </TransferOperations>\n\n {/* 右侧列表 */}\n <TransferList\n direction=\"right\"\n dataSource={rightDataSource}\n selectedKeys={rightSelectedKeys}\n disabled={disabled}\n showSearch={showSearch}\n searchPlaceholder={searchPlaceholder[1]}\n filterOption={filterOption}\n render={render}\n onItemSelectChange={setRightSelectedKeys}\n title={titles[1]}\n showSelectAll={showSelectAll}\n footer={footer}\n locale={locale}\n header={header}\n onClearAll={clearAllRightData}\n clearMode=\"all\"\n oneWay={oneWay}\n onItemDelete={oneWay ? handleItemDelete : undefined}\n pagination={pagination}\n />\n </TransferRoot>\n );\n};\n\nTransfer.displayName = 'Transfer';\n\nexport default Transfer;\n","/**\n * Upload Styled Tokens\n *\n * 将 Upload 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Upload 组件的 Styled Tokens\n */\nexport const $upload = createStyledTokens({\n // ============================================================================\n // 拖拽区域\n // ============================================================================\n dropzoneBorderRadius: ['components.upload.dropzone.borderRadius', '--ksd-upload-dropzone-border-radius'],\n dropzonePadding: ['components.upload.dropzone.padding', '--ksd-upload-dropzone-padding'],\n dropzoneGap: ['components.upload.dropzone.gap', '--ksd-upload-dropzone-gap'],\n dropzoneBorder: ['components.upload.dropzone.border', '--ksd-upload-dropzone-border'],\n dropzoneBorderActive: ['components.upload.dropzone.borderActive', '--ksd-upload-dropzone-border-active'],\n dropzoneBg: ['components.upload.dropzone.bg', '--ksd-upload-dropzone-bg'],\n dropzoneBgActive: ['components.upload.dropzone.bgActive', '--ksd-upload-dropzone-bg-active'],\n dropzoneBgDisabled: ['components.upload.dropzone.bgDisabled', '--ksd-upload-dropzone-bg-disabled'],\n\n // ============================================================================\n // 图标\n // ============================================================================\n iconSize: ['components.upload.icon.size', '--ksd-upload-icon-size'],\n iconFillPrimary: ['components.upload.icon.fillPrimary', '--ksd-upload-icon-fill-primary'],\n iconFillSecondary: ['components.upload.icon.fillSecondary', '--ksd-upload-icon-fill-secondary'],\n\n // ============================================================================\n // 主要文字\n // ============================================================================\n mainTextFontSize: ['components.upload.mainText.fontSize', '--ksd-upload-main-text-font-size'],\n mainTextLineHeight: ['components.upload.mainText.lineHeight', '--ksd-upload-main-text-line-height'],\n mainTextColor: ['components.upload.mainText.color', '--ksd-upload-main-text-color'],\n\n // ============================================================================\n // 次要文字\n // ============================================================================\n secondaryTextFontSize: ['components.upload.secondaryText.fontSize', '--ksd-upload-secondary-text-font-size'],\n secondaryTextLineHeight: ['components.upload.secondaryText.lineHeight', '--ksd-upload-secondary-text-line-height'],\n secondaryTextColor: ['components.upload.secondaryText.color', '--ksd-upload-secondary-text-color'],\n\n // ============================================================================\n // 链接\n // ============================================================================\n linkColor: ['components.upload.linkColor', '--ksd-upload-link-color'],\n\n // ============================================================================\n // 文件项\n // ============================================================================\n fileItemPadding: ['components.upload.fileItem.padding', '--ksd-upload-file-item-padding'],\n fileItemBorderRadius: ['components.upload.fileItem.borderRadius', '--ksd-upload-file-item-border-radius'],\n fileItemBg: ['components.upload.fileItem.bg', '--ksd-upload-file-item-bg'],\n fileItemBgHover: ['components.upload.fileItem.bgHover', '--ksd-upload-file-item-bg-hover'],\n fileItemBgSuccess: ['components.upload.fileItem.bgSuccess', '--ksd-upload-file-item-bg-success'],\n fileItemBgError: ['components.upload.fileItem.bgError', '--ksd-upload-file-item-bg-error'],\n\n // ============================================================================\n // 文件图标\n // ============================================================================\n fileIconSize: ['components.upload.fileIconSize', '--ksd-upload-file-icon-size'],\n\n // ============================================================================\n // 文件名\n // ============================================================================\n fileNameFontSize: ['components.upload.fileName.fontSize', '--ksd-upload-file-name-font-size'],\n fileNameColor: ['components.upload.fileName.color', '--ksd-upload-file-name-color'],\n fileNameColorError: ['components.upload.fileName.colorError', '--ksd-upload-file-name-color-error'],\n\n // ============================================================================\n // 文件信息\n // ============================================================================\n fileInfoFontSize: ['components.upload.fileInfo.fontSize', '--ksd-upload-file-info-font-size'],\n fileInfoColor: ['components.upload.fileInfo.color', '--ksd-upload-file-info-color'],\n fileInfoColorSuccess: ['components.upload.fileInfo.colorSuccess', '--ksd-upload-file-info-color-success'],\n fileInfoColorError: ['components.upload.fileInfo.colorError', '--ksd-upload-file-info-color-error'],\n\n // ============================================================================\n // 操作按钮\n // ============================================================================\n actionColor: ['components.upload.action.color', '--ksd-upload-action-color'],\n actionColorHover: ['components.upload.action.colorHover', '--ksd-upload-action-color-hover'],\n\n // ============================================================================\n // 进度条\n // ============================================================================\n progressBg: ['components.upload.progress.bg', '--ksd-upload-progress-bg'],\n progressBarBg: ['components.upload.progress.barBg', '--ksd-upload-progress-bar-bg'],\n progressHeight: ['components.upload.progress.height', '--ksd-upload-progress-height'],\n progressBorderRadius: ['components.upload.progress.borderRadius', '--ksd-upload-progress-border-radius'],\n progressTextFontSize: ['components.upload.progress.textFontSize', '--ksd-upload-progress-text-font-size'],\n progressTextColor: ['components.upload.progress.textColor', '--ksd-upload-progress-text-color'],\n\n // ============================================================================\n // 禁用透明度\n // ============================================================================\n disabledOpacity: ['components.upload.disabledOpacity', '--ksd-upload-disabled-opacity'],\n\n // ============================================================================\n // 过渡\n // ============================================================================\n transition: ['components.upload.transition', '--ksd-upload-transition'],\n\n // ============================================================================\n // Focus 环\n // ============================================================================\n focusRing: ['components.upload.focusRing', '--ksd-upload-focus-ring'],\n});\n","/**\n * Upload Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $upload } from './styled-tokens';\n\nexport const uploadStatuses = ['idle', 'uploading', 'success', 'error'] as const\nexport type UploadStatus = (typeof uploadStatuses)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\n// 获取文件项背景色\nconst getFileItemBg = (status: UploadStatus, props: ThemeProps): string => {\n if (status === 'success') return $upload.fileItemBgSuccess(props)\n if (status === 'error') return $upload.fileItemBgError(props)\n return $upload.fileItemBg(props)\n}\n\n// 获取文件名颜色\nconst getFileNameColor = (status: UploadStatus, props: ThemeProps): string => {\n if (status === 'error') return $upload.fileNameColorError(props)\n return $upload.fileNameColor(props)\n}\n\n// 获取状态图标颜色\nconst getStatusIconColor = (status: UploadStatus, props: ThemeProps): string => {\n if (status === 'success') return $upload.fileInfoColorSuccess(props)\n if (status === 'error') return $upload.fileInfoColorError(props)\n return $upload.fileInfoColor(props)\n}\n\nexport const UploadRoot = styled.div`\n width: 100%;\n`\n\nexport const UploadDropzone = styled.div<{\n isDragActive: boolean\n isDisabled: boolean\n}>`\n ${(props) => css`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: ${$upload.dropzoneGap(props)};\n padding: ${$upload.dropzonePadding(props)};\n border: 1px solid ${props.isDragActive \n ? $upload.dropzoneBorderActive(props) \n : $upload.dropzoneBorder(props)};\n border-radius: ${$upload.dropzoneBorderRadius(props)};\n background: ${props.isDragActive \n ? $upload.dropzoneBgActive(props) \n : $upload.dropzoneBg(props)};\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n transition: ${$upload.transition(props)};\n outline: none;\n\n ${!props.isDisabled && css`\n &:hover {\n border-color: ${$upload.dropzoneBorderActive(props)};\n }\n\n &:focus-visible {\n border-color: ${$upload.dropzoneBorderActive(props)};\n box-shadow: ${$upload.focusRing(props)};\n }\n `}\n\n ${props.isDisabled && css`\n opacity: ${$upload.disabledOpacity(props)};\n background: ${$upload.dropzoneBgDisabled(props)};\n `}\n `}\n`\n\nexport const UploadIconWrapper = styled.div`\n ${(props) => css`\n width: ${$upload.iconSize(props)};\n height: ${$upload.iconSize(props)};\n display: flex;\n align-items: center;\n justify-content: center;\n `}\n`\n\nexport const UploadTextWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n width: 100%;\n font-family: var(--ksd-typography-font-family);\n`\n\nexport const UploadMainText = styled.div`\n ${(props) => css`\n font-size: ${$upload.mainTextFontSize(props)};\n line-height: ${$upload.mainTextLineHeight(props)};\n color: ${$upload.mainTextColor(props)};\n text-align: center;\n width: 100%;\n `}\n`\n\nexport const UploadSecondaryText = styled.p`\n ${(props) => css`\n font-size: ${$upload.secondaryTextFontSize(props)};\n line-height: ${$upload.secondaryTextLineHeight(props)};\n color: ${$upload.secondaryTextColor(props)};\n margin: 0;\n white-space: pre;\n `}\n`\n\nexport const UploadLink = styled.span`\n ${(props) => css`\n color: ${$upload.linkColor(props)};\n cursor: pointer;\n \n &:hover {\n text-decoration: underline;\n }\n `}\n`\n\nexport const FileList = styled.div`\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-top: 16px;\n width: 100%;\n`\n\nexport const FileItem = styled.div<{\n status: UploadStatus\n}>`\n display: flex;\n flex-direction: column;\n gap: 0;\n width: 100%;\n`\n\nexport const FileInfoRow = styled.div<{\n status: UploadStatus\n}>`\n ${(props) => css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px;\n border-radius: ${$upload.fileItemBorderRadius(props)};\n background: ${getFileItemBg(props.status, props)};\n flex: 1;\n `}\n`\n\nexport const FileIcon = styled.span`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: ${$upload.fileNameColor(props)};\n `}\n`\n\nexport const FileName = styled.div<{\n status: UploadStatus\n}>`\n ${(props) => css`\n flex: 1;\n font-family: var(--ksd-typography-font-family);\n font-size: ${$upload.fileNameFontSize(props)};\n line-height: 18px;\n color: ${getFileNameColor(props.status, props)};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n`\n\nexport const StatusIcon = styled.span<{\n status: UploadStatus\n}>`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: ${getStatusIconColor(props.status, props)};\n `}\n`\n\nexport const DeleteButton = styled.button`\n ${(props) => css`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n padding: 0;\n border: none;\n background: transparent;\n color: ${$upload.actionColor(props)};\n cursor: pointer;\n flex-shrink: 0;\n transition: color 0.2s ease;\n\n &:hover {\n color: ${$upload.actionColorHover(props)};\n }\n\n &:focus-visible {\n outline: 2px solid var(--ksd-brand-primary);\n outline-offset: 2px;\n border-radius: 2px;\n }\n `}\n`\n\nexport const ProgressWrapper = styled.div`\n display: flex;\n align-items: center;\n gap: 16px;\n height: 16px;\n margin-top: 0;\n`\n\nexport const ProgressTrack = styled.div`\n ${(props) => css`\n flex: 1;\n height: ${$upload.progressHeight(props)};\n background: ${$upload.progressBg(props)};\n border-radius: ${$upload.progressBorderRadius(props)};\n overflow: hidden;\n `}\n`\n\nexport const ProgressBar = styled.div<{\n percent: number\n}>`\n ${(props) => css`\n height: 100%;\n width: ${props.percent}%;\n background: ${$upload.progressBarBg(props)};\n border-radius: ${$upload.progressBorderRadius(props)};\n transition: width 0.3s ease;\n `}\n`\n\nexport const ProgressText = styled.span`\n ${(props) => css`\n font-family: var(--ksd-typography-font-family);\n font-size: ${$upload.progressTextFontSize(props)};\n line-height: 18px;\n color: ${$upload.progressTextColor(props)};\n white-space: nowrap;\n flex-shrink: 0;\n width: 40px;\n text-align: right;\n `}\n`\n\nexport const HiddenInput = styled.input`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n`\n","import { forwardRef, useRef, useState, type ReactNode, type ChangeEvent, type DragEvent } from 'react'\nimport { useButton } from 'react-aria'\nimport type { AriaButtonProps } from 'react-aria'\nimport {\n UploadRoot,\n UploadDropzone,\n UploadIconWrapper,\n UploadTextWrapper,\n UploadMainText,\n UploadSecondaryText,\n UploadLink,\n FileList,\n FileItem,\n FileInfoRow,\n FileIcon,\n FileName,\n StatusIcon,\n DeleteButton,\n ProgressWrapper,\n ProgressTrack,\n ProgressBar,\n ProgressText,\n HiddenInput,\n uploadStatuses,\n type UploadStatus,\n} from './Upload.style'\n\nexport const STATUSES = uploadStatuses\n\nexport interface UploadFile {\n /** 文件唯一标识 */\n uid: string\n /** 文件名 */\n name: string\n /** 文件对象 */\n file?: File\n /** 上传状态 */\n status: UploadStatus\n /** 上传进度 (0-100) */\n percent?: number\n /** 错误信息 */\n error?: string\n}\n\nexport type UploadProps = {\n /** 接受的文件类型 */\n accept?: string\n /** 是否支持多选 */\n multiple?: boolean\n /** 最大文件大小(字节) */\n maxSize?: number\n /** 最大文件数量 */\n maxCount?: number\n /** 是否禁用 */\n disabled?: boolean\n /** 文件列表 */\n fileList?: UploadFile[]\n /** 默认文件列表 */\n defaultFileList?: UploadFile[]\n /** 文件变化回调 */\n onChange?: (fileList: UploadFile[]) => void\n /** 文件上传前的钩子 */\n beforeUpload?: (file: File) => boolean | Promise<boolean>\n /** 自定义上传逻辑 */\n customRequest?: (options: {\n file: File\n onProgress: (percent: number) => void\n onSuccess: () => void\n onError: (error: Error) => void\n }) => void\n /** 主要提示文本 */\n mainText?: ReactNode\n /** 次要提示文本 */\n secondaryText?: ReactNode\n /** 文件类型提示 */\n fileTypeHint?: ReactNode\n /** 下载模板文本 */\n downloadTemplateText?: ReactNode\n /** 下载模板回调 */\n onDownloadTemplate?: () => void\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n /** 自定义上传图标 */\n icon?: ReactNode\n}\n\nconst DefaultUploadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\">\n <g clipPath=\"url(#clip0_6955_14967)\">\n <path d=\"M6.25 63.1836L28.525 52.195C28.8475 52.0359 29.2023 51.9531 29.5619 51.9531H70.6424C71.0049 51.9531 71.3625 52.0372 71.687 52.1988L93.75 63.1836V91.4062C93.75 92.7007 92.7007 93.75 91.4062 93.75H8.59375C7.29932 93.75 6.25 92.7007 6.25 91.4062V63.1836Z\" style={{ fill: 'var(--ksd-upload-icon-fill-primary)' }}/>\n <path d=\"M6.25 63.1836H34.4859C35.7804 63.1836 36.8297 64.2329 36.8297 65.5273V69.8906C36.8297 71.185 37.879 72.2344 39.1734 72.2344H60.7687C62.0632 72.2344 63.1125 71.185 63.1125 69.8906V65.5273C63.1125 64.2329 64.1618 63.1836 65.4562 63.1836H93.75V92.9688C93.75 93.176 93.6677 93.3747 93.5212 93.5212C93.3747 93.6677 93.1759 93.75 92.9688 93.75H7.03125C6.82405 93.75 6.62534 93.6677 6.47882 93.5212C6.33231 93.3747 6.25 93.176 6.25 92.9688V63.1836Z\" style={{ fill: 'var(--ksd-upload-icon-fill-secondary)' }}/>\n <path d=\"M19.1445 39.9733C19.3009 39.41 20.0994 39.41 20.2558 39.9733C20.797 41.9242 22.3218 43.449 24.2727 43.9902C24.836 44.1466 24.836 44.9451 24.2727 45.1015C22.3218 45.6427 20.797 47.1675 20.2558 49.1184C20.0994 49.6817 19.3009 49.6817 19.1445 49.1184C18.6033 47.1675 17.0785 45.6427 15.1276 45.1015C14.5642 44.9451 14.5643 44.1466 15.1276 43.9902C17.0785 43.449 18.6033 41.9242 19.1445 39.9733Z\" style={{ fill: 'var(--ksd-upload-icon-fill-primary)' }}/>\n <path d=\"M78.1066 35.6488C78.3468 34.7837 79.573 34.7837 79.8132 35.6488C80.6443 38.6449 82.9858 40.9864 85.9819 41.8175C86.8469 42.0577 86.8469 43.2839 85.9819 43.5241C82.9858 44.3552 80.6443 46.6968 79.8132 49.6929C79.573 50.5579 78.3468 50.5579 78.1066 49.6929C77.2755 46.6968 74.9339 44.3552 71.9379 43.5241C71.0728 43.2839 71.0728 42.0577 71.9379 41.8175C74.9339 40.9864 77.2755 38.6449 78.1066 35.6488Z\" style={{ fill: 'var(--ksd-upload-icon-fill-primary)' }}/>\n <path d=\"M49.0173 14.5685C49.733 13.8105 50.9389 13.8105 51.6547 14.5685L62.8375 26.4101C63.9294 27.5668 63.1096 29.469 61.5188 29.4691H57.591C56.0884 29.4691 54.8704 30.6871 54.8704 32.1897L54.8703 41C54.8703 41.5523 54.4226 42 53.8703 42H46.8015C46.2492 42 45.8015 41.5523 45.8015 41L45.8016 32.1897C45.8016 30.6871 44.5835 29.4691 43.0809 29.4691H39.1532C37.5623 29.4691 36.7424 27.5669 37.8345 26.4101L49.0173 14.5685Z\" style={{ fill: 'var(--ksd-upload-icon-fill-primary)' }}/>\n </g>\n <defs>\n <clipPath id=\"clip0_6955_14967\">\n <rect width=\"100\" height=\"100\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n)\n\nconst FileIconSvg = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 1H3.5C2.67157 1 2 1.67157 2 2.5V13.5C2 14.3284 2.67157 15 3.5 15H12.5C13.3284 15 14 14.3284 14 13.5V6M9 1L14 6M9 1V6H14\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M5 7H7\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n <path d=\"M5 10H11\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n)\n\nconst SuccessIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path d=\"M11.3333 5.5L6.75 10.0833L4.66667 8\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst ErrorIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"currentColor\" />\n <path d=\"M10 6L6 10M6 6L10 10\" stroke=\"white\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n)\n\nconst DeleteIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 4.5H12.5M6.5 7V11.5M9.5 7V11.5M10.5 4.5V2.5C10.5 2.22386 10.2761 2 10 2H6C5.72386 2 5.5 2.22386 5.5 2.5V4.5M4.5 4.5H11.5V13C11.5 13.2761 11.2761 13.5 11 13.5H5C4.72386 13.5 4.5 13.2761 4.5 13V4.5Z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst generateUid = () => `upload-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n\nexport const Upload = forwardRef<HTMLDivElement, UploadProps>(\n (\n {\n accept,\n multiple = false,\n maxSize,\n maxCount,\n disabled = false,\n fileList: controlledFileList,\n defaultFileList = [],\n onChange,\n beforeUpload,\n customRequest,\n mainText,\n secondaryText,\n fileTypeHint,\n downloadTemplateText,\n onDownloadTemplate,\n className,\n style,\n icon,\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null)\n const dropzoneRef = useRef<HTMLDivElement>(null)\n\n // 内部文件列表状态\n const [internalFileList, setInternalFileList] = useState<UploadFile[]>(defaultFileList)\n const [isDragActive, setIsDragActive] = useState(false)\n\n // 判断是否受控\n const isControlled = controlledFileList !== undefined\n const fileList = isControlled ? controlledFileList : internalFileList\n\n // 更新文件列表\n const updateFileList = (newFileList: UploadFile[]) => {\n if (!isControlled) {\n setInternalFileList(newFileList)\n }\n onChange?.(newFileList)\n }\n\n // 处理文件选择\n const handleFiles = async (files: FileList | null) => {\n if (!files || files.length === 0) return\n\n const filesArray = Array.from(files)\n\n // 检查文件数量限制\n if (maxCount && fileList.length + filesArray.length > maxCount) {\n console.warn(`最多只能上传 ${maxCount} 个文件`)\n return\n }\n\n // 处理每个文件\n const newFiles: UploadFile[] = []\n \n for (const file of filesArray) {\n // 检查文件大小\n if (maxSize && file.size > maxSize) {\n console.warn(`文件 ${file.name} 超过大小限制`)\n continue\n }\n\n // 执行 beforeUpload 钩子\n if (beforeUpload) {\n try {\n const result = await beforeUpload(file)\n if (!result) continue\n } catch (error) {\n console.error('beforeUpload error:', error)\n continue\n }\n }\n\n const uploadFile: UploadFile = {\n uid: generateUid(),\n name: file.name,\n file,\n status: 'uploading',\n percent: 0,\n }\n\n newFiles.push(uploadFile)\n }\n\n if (newFiles.length === 0) return\n\n // 更新文件列表\n const updatedFileList = [...fileList, ...newFiles]\n updateFileList(updatedFileList)\n\n // 执行上传\n newFiles.forEach((uploadFile) => {\n if (customRequest) {\n customRequest({\n file: uploadFile.file!,\n onProgress: (percent) => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid ? { ...f, percent } : f\n )\n )\n },\n onSuccess: () => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid ? { ...f, status: 'success', percent: 100 } : f\n )\n )\n },\n onError: (error) => {\n updateFileList(\n updatedFileList.map((f) =>\n f.uid === uploadFile.uid\n ? { ...f, status: 'error', error: error.message }\n : f\n )\n )\n },\n })\n } else {\n // 默认模拟上传\n simulateUpload(uploadFile.uid, updatedFileList)\n }\n })\n }\n\n // 模拟上传进度\n const simulateUpload = (uid: string, currentFileList: UploadFile[]) => {\n let percent = 0\n const interval = setInterval(() => {\n percent += 10\n if (percent >= 100) {\n clearInterval(interval)\n updateFileList(\n currentFileList.map((f) =>\n f.uid === uid ? { ...f, status: 'success', percent: 100 } : f\n )\n )\n } else {\n updateFileList(\n currentFileList.map((f) =>\n f.uid === uid ? { ...f, percent } : f\n )\n )\n }\n }, 200)\n }\n\n // 处理文件输入变化\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // 清空 input 值,允许重复选择同一文件\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n }\n\n // 处理拖拽进入\n const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n if (!disabled) {\n setIsDragActive(true)\n }\n }\n\n // 处理拖拽离开\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n }\n\n // 处理拖拽悬停\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n }\n\n // 处理文件放置\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n setIsDragActive(false)\n\n if (disabled) return\n\n const files = e.dataTransfer.files\n handleFiles(files)\n }\n\n // 处理点击上传区域\n const handleClick = () => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }\n\n // 处理删除文件\n const handleDelete = (uid: string) => {\n const newFileList = fileList.filter((f) => f.uid !== uid)\n updateFileList(newFileList)\n }\n\n // 使用 react-aria 的 useButton\n const { buttonProps } = useButton(\n {\n onPress: handleClick,\n isDisabled: disabled,\n } as AriaButtonProps,\n dropzoneRef\n )\n\n // 渲染状态图标\n const renderStatusIcon = (status: UploadStatus) => {\n switch (status) {\n case 'success':\n return <SuccessIcon />\n case 'error':\n return <ErrorIcon />\n default:\n return null\n }\n }\n\n return (\n <UploadRoot ref={ref} className={className} style={style}>\n <UploadDropzone\n {...buttonProps}\n ref={dropzoneRef}\n isDragActive={isDragActive}\n isDisabled={disabled}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"上传文件区域\"\n >\n <UploadIconWrapper>\n {icon || <DefaultUploadIcon />}\n </UploadIconWrapper>\n\n <UploadTextWrapper>\n <UploadMainText>\n {mainText || (\n <>\n 将文件拖到此处,或<UploadLink>点击上传</UploadLink>\n </>\n )}\n </UploadMainText>\n\n {secondaryText && (\n <UploadSecondaryText>{secondaryText}</UploadSecondaryText>\n )}\n\n {(fileTypeHint || downloadTemplateText) && (\n <UploadSecondaryText>\n {fileTypeHint}\n {downloadTemplateText && onDownloadTemplate && (\n <>\n {' '}\n <UploadLink onClick={(e) => {\n e.stopPropagation()\n onDownloadTemplate()\n }}>\n {downloadTemplateText}\n </UploadLink>\n </>\n )}\n </UploadSecondaryText>\n )}\n </UploadTextWrapper>\n\n <HiddenInput\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleInputChange}\n disabled={disabled}\n aria-hidden=\"true\"\n />\n </UploadDropzone>\n\n {fileList.length > 0 && (\n <FileList>\n {fileList.map((file) => (\n <FileItem key={file.uid} status={file.status}>\n <FileInfoRow status={file.status}>\n <FileIcon>\n <FileIconSvg />\n </FileIcon>\n <FileName status={file.status}>{file.name}</FileName>\n {(file.status === 'success' || file.status === 'error') && (\n <>\n <StatusIcon status={file.status}>\n {renderStatusIcon(file.status)}\n </StatusIcon>\n <DeleteButton\n onClick={() => handleDelete(file.uid)}\n aria-label={`删除文件 ${file.name}`}\n >\n <DeleteIcon />\n </DeleteButton>\n </>\n )}\n </FileInfoRow>\n\n {file.status === 'uploading' && (\n <ProgressWrapper>\n <ProgressTrack>\n <ProgressBar percent={file.percent || 0} />\n </ProgressTrack>\n <ProgressText>{file.percent || 0}%</ProgressText>\n </ProgressWrapper>\n )}\n </FileItem>\n ))}\n </FileList>\n )}\n </UploadRoot>\n )\n }\n)\n\nUpload.displayName = 'Upload'\n\n","/**\n * Card Styled Tokens\n *\n * 将 Card 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Card 组件的 Styled Tokens\n *\n * 命名规范:$ 前缀表示这是可在 styled-components 中直接使用的 token 对象\n *\n * @example\n * ```tsx\n * import { $card } from './styled-tokens';\n *\n * const CardContainer = styled.div`\n * background: ${$card.bg};\n * border-radius: ${$card.radius};\n * transition: ${$card.transition};\n * `;\n * ```\n */\nexport const $card = createStyledTokens({\n // ============================================================================\n // Container\n // ============================================================================\n bg: ['components.card.container.background.default', '--ksd-card-bg'],\n border: ['components.card.container.border.default', '--ksd-card-border'],\n borderHover: ['components.card.container.border.hover', '--ksd-card-border-hover'],\n shadowElevated: ['components.card.container.shadow.elevated', '--ksd-card-shadow-elevated'],\n shadowElevatedHover: ['components.card.container.shadow.elevatedHover', '--ksd-card-shadow-elevated-hover'],\n radius: ['components.card.container.radius', '--ksd-card-radius'],\n transition: ['components.card.container.transition', '--ksd-card-transition'],\n\n // ============================================================================\n // Padding\n // ============================================================================\n paddingSm: ['components.card.padding.sm', '--ksd-card-padding-sm'],\n paddingMd: ['components.card.padding.md', '--ksd-card-padding-md'],\n paddingLg: ['components.card.padding.lg', '--ksd-card-padding-lg'],\n\n // ============================================================================\n // Header\n // ============================================================================\n headerPadding: ['components.card.header.padding', '--ksd-card-header-padding'],\n headerBorderBottom: ['components.card.header.borderBottom', '--ksd-card-header-border-bottom'],\n titleColor: ['components.card.header.title.color', '--ksd-card-title-color'],\n titleFontSize: ['components.card.header.title.fontSize', '--ksd-card-title-font-size'],\n titleFontWeight: ['components.card.header.title.fontWeight', '--ksd-card-title-font-weight'],\n extraColor: ['components.card.header.extra.color', '--ksd-card-extra-color'],\n extraFontSize: ['components.card.header.extra.fontSize', '--ksd-card-extra-font-size'],\n\n // ============================================================================\n // Cover\n // ============================================================================\n coverRadius: ['components.card.cover.radius', '--ksd-card-cover-radius'],\n\n // ============================================================================\n // Footer\n // ============================================================================\n footerPadding: ['components.card.footer.padding', '--ksd-card-footer-padding'],\n footerBg: ['components.card.footer.background', '--ksd-card-footer-bg'],\n footerBorderTop: ['components.card.footer.borderTop', '--ksd-card-footer-border-top'],\n});\n","/**\n * Card Styled Components\n *\n * 使用 Styled Token System 实现样式:\n * - JS Token 优先(来自 ThemeProvider,支持用户自定义)\n * - CSS 变量作为 fallback(无 Provider 时的兜底)\n */\n\n// 从 @kingsoft-ai/theme 统一导入 emotion,确保使用同一个实例\nimport { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $card } from './styled-tokens';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled';\n\ntype ThemeProps = { theme?: AppTheme };\n\n// ============================================================================\n// Hover Styles\n// ============================================================================\n\nconst hoverableStyles = (variant: CardVariant, props: ThemeProps) => css`\n cursor: pointer;\n &:hover {\n box-shadow: ${variant === 'elevated' ? $card.shadowElevatedHover(props) : 'none'};\n border-color: ${variant === 'outlined' ? $card.borderHover(props) : 'transparent'};\n }\n`;\n\n// ============================================================================\n// Card Container\n// ============================================================================\n\nexport const CardContainer = styled.div<{\n variant: CardVariant;\n hoverable?: boolean;\n}>`\n ${(props) => css`\n background: ${$card.bg(props)};\n border: ${props.variant === 'outlined' ? `1px solid ${$card.border(props)}` : 'none'};\n box-shadow: ${props.variant === 'elevated' ? $card.shadowElevated(props) : 'none'};\n border-radius: ${$card.radius(props)};\n transition: ${$card.transition(props)};\n display: flex;\n flex-direction: column;\n overflow: hidden;\n ${props.hoverable && hoverableStyles(props.variant, props)}\n `}\n`;\n\n// ============================================================================\n// Card Header\n// ============================================================================\n\nexport const CardHeader = styled.div`\n ${(props) => css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: ${$card.headerPadding(props)};\n border-bottom: ${$card.headerBorderBottom(props)};\n `}\n`;\n\nexport const CardTitle = styled.div`\n ${(props) => css`\n color: ${$card.titleColor(props)};\n font-size: ${$card.titleFontSize(props)};\n font-weight: ${$card.titleFontWeight(props)};\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `}\n`;\n\nexport const CardExtra = styled.div`\n ${(props) => css`\n color: ${$card.extraColor(props)};\n font-size: ${$card.extraFontSize(props)};\n margin-left: 16px;\n `}\n`;\n\n// ============================================================================\n// Card Body\n// ============================================================================\n\nexport const CardBody = styled.div<{ padding?: string }>`\n ${(props) => css`\n padding: ${props.padding || $card.paddingMd(props)};\n flex: 1;\n color: ${$card.titleColor(props)};\n font-size: 14px;\n line-height: 1.6;\n `}\n`;\n\n// ============================================================================\n// Card Cover\n// ============================================================================\n\nexport const CardCover = styled.div`\n ${(props) => css`\n width: 100%;\n position: relative;\n\n > * {\n display: block;\n width: 100%;\n object-fit: cover;\n }\n\n img {\n &:first-of-type {\n border-radius: ${$card.coverRadius(props)};\n }\n }\n `}\n`;\n\n// ============================================================================\n// Card Footer\n// ============================================================================\n\nexport const CardFooter = styled.div`\n ${(props) => css`\n padding: ${$card.footerPadding(props)};\n background: ${$card.footerBg(props)};\n border-top: ${$card.footerBorderTop(props)};\n `}\n`;\n","import React, { ReactNode } from 'react';\nimport {\n CardContainer,\n CardHeader,\n CardTitle,\n CardExtra,\n CardBody,\n CardCover,\n CardFooter,\n type CardVariant,\n} from './Card.style';\n\nexport interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /**\n * Card title\n */\n title?: ReactNode;\n /**\n * Content to render in the top-right corner of the card\n */\n extra?: ReactNode;\n /**\n * Card cover image\n */\n cover?: ReactNode;\n /**\n * Card footer content\n */\n footer?: ReactNode;\n /**\n * Lift up when hovering card\n */\n hoverable?: boolean;\n /**\n * Card variant\n * @default 'elevated'\n */\n variant?: CardVariant;\n /**\n * Custom padding for body\n */\n bodyPadding?: string;\n children?: ReactNode;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n title,\n extra,\n cover,\n footer,\n hoverable = false,\n variant = 'elevated',\n bodyPadding,\n children,\n className,\n ...rest\n },\n ref\n ) => {\n return (\n <CardContainer\n ref={ref}\n variant={variant}\n hoverable={hoverable}\n className={className}\n {...rest}\n >\n {cover && <CardCover>{cover}</CardCover>}\n {(title || extra) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {extra && <CardExtra>{extra}</CardExtra>}\n </CardHeader>\n )}\n <CardBody padding={bodyPadding}>\n {children}\n </CardBody>\n {footer && <CardFooter>{footer}</CardFooter>}\n </CardContainer>\n );\n }\n);\n\nCard.displayName = 'Card';\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CardTokens } from './tokens.types';\n\nexport const getCardTokens: TokenGenerator<CardTokens> = ({ global, semantic }) => ({\n container: {\n background: {\n default: semantic.colors.background.surface,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n },\n shadow: {\n // Softer, more diffuse shadow for \"soft tech\" feel\n elevated: '0px 4px 24px 0px rgba(0, 0, 0, 0.04)',\n elevatedHover: '0px 8px 32px 0px rgba(0, 0, 0, 0.08)',\n outlined: 'none',\n filled: 'none',\n },\n // Increased radius for softer look\n radius: global.radii.r6, // 16px\n transition: 'all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1)',\n },\n padding: {\n sm: global.spacing.md,\n md: global.spacing.xl, // Increased to 24px for more breathing room\n lg: global.spacing.xxl,\n },\n header: {\n padding: `${global.spacing.lg} ${global.spacing.xl} ${global.spacing.md}`, // 16px 24px 12px\n borderBottom: 'none', // Removed hard border\n title: {\n color: semantic.colors.text.primary,\n fontSize: global.typography.fontSize.md, // Reduced to 16px\n fontWeight: global.typography.fontWeight.semibold,\n },\n extra: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.sm,\n },\n },\n cover: {\n radius: `${global.radii.r6} ${global.radii.r6} 0 0`,\n },\n footer: {\n padding: `${global.spacing.md} ${global.spacing.xl}`, // Match horizontal padding of header/body\n background: 'transparent',\n borderTop: `1px solid ${semantic.colors.border.primary}`,\n },\n});\n","/**\n * Tooltip Styled Tokens\n *\n * 将 Tooltip 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Tooltip 组件的 Styled Tokens\n */\nexport const $tooltip = createStyledTokens({\n // ============================================================================\n // 背景与文字\n // ============================================================================\n background: ['components.tooltip.background', '--ksd-tooltip-bg'],\n color: ['components.tooltip.color', '--ksd-tooltip-color'],\n\n // ============================================================================\n // 边框与阴影\n // ============================================================================\n borderRadius: ['components.tooltip.borderRadius', '--ksd-tooltip-border-radius'],\n boxShadow: ['components.tooltip.boxShadow', '--ksd-tooltip-shadow'],\n\n // ============================================================================\n // 尺寸\n // ============================================================================\n padding: ['components.tooltip.padding', '--ksd-tooltip-padding'],\n maxWidth: ['components.tooltip.maxWidth', '--ksd-tooltip-max-width'],\n\n // ============================================================================\n // 文字\n // ============================================================================\n fontSize: ['components.tooltip.fontSize', '--ksd-tooltip-font-size'],\n lineHeight: ['components.tooltip.lineHeight', '--ksd-tooltip-line-height'],\n\n // ============================================================================\n // 箭头\n // ============================================================================\n arrowSize: ['components.tooltip.arrow.size', '--ksd-tooltip-arrow-size'],\n\n // ============================================================================\n // 动画\n // ============================================================================\n animationDuration: ['components.tooltip.animation.duration', '--ksd-tooltip-animation-duration'],\n animationEasing: ['components.tooltip.animation.easing', '--ksd-tooltip-animation-easing'],\n\n // ============================================================================\n // 层级\n // ============================================================================\n zIndex: ['components.tooltip.zIndex', '--ksd-tooltip-z-index'],\n});\n","import { styled, css } from '@kingsoft-ai/theme';\nimport { keyframes } from '@emotion/react';\nimport type { Placement } from '@react-types/overlays';\nimport { $tooltip } from './styled-tokens';\n\nexport type TooltipPlacement = Placement\n\nconst fadeIn = keyframes`\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n`\n\nexport const TooltipContainer = styled.div<{\n placement?: Placement\n}>`\n ${(props) => css`\n z-index: ${$tooltip.zIndex(props)};\n outline: none;\n padding: ${$tooltip.padding(props)};\n max-width: ${$tooltip.maxWidth(props)};\n \n background: ${$tooltip.background(props)};\n color: ${$tooltip.color(props)};\n border-radius: ${$tooltip.borderRadius(props)};\n box-shadow: ${$tooltip.boxShadow(props)};\n \n font-family: var(--ksd-typography-font-family);\n font-size: ${$tooltip.fontSize(props)};\n line-height: ${$tooltip.lineHeight(props)};\n \n animation: ${fadeIn} ${$tooltip.animationDuration(props)}\n ${$tooltip.animationEasing(props)} forwards;\n `}\n`\n\nconst getArrowPosition = (placement?: Placement) => {\n if (!placement) return ''\n \n const positions: Record<string, string> = {\n top: `\n bottom: -4px;\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n `,\n 'top start': `\n bottom: -4px;\n left: 12px;\n transform: rotate(45deg);\n `,\n 'top end': `\n bottom: -4px;\n right: 12px;\n transform: rotate(45deg);\n `,\n bottom: `\n top: -4px;\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n `,\n 'bottom start': `\n top: -4px;\n left: 12px;\n transform: rotate(45deg);\n `,\n 'bottom end': `\n top: -4px;\n right: 12px;\n transform: rotate(45deg);\n `,\n left: `\n right: -4px;\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n `,\n 'left top': `\n right: -4px;\n top: 8px;\n transform: rotate(45deg);\n `,\n 'left bottom': `\n right: -4px;\n bottom: 8px;\n transform: rotate(45deg);\n `,\n right: `\n left: -4px;\n top: 50%;\n transform: translateY(-50%) rotate(45deg);\n `,\n 'right top': `\n left: -4px;\n top: 8px;\n transform: rotate(45deg);\n `,\n 'right bottom': `\n left: -4px;\n bottom: 8px;\n transform: rotate(45deg);\n `,\n }\n \n return positions[placement] || positions.top\n}\n\nexport const TooltipArrow = styled.div<{\n placement?: Placement\n}>`\n ${(props) => css`\n position: absolute;\n width: ${$tooltip.arrowSize(props)};\n height: ${$tooltip.arrowSize(props)};\n pointer-events: none;\n \n &::before {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n background: ${$tooltip.background(props)};\n }\n \n ${getArrowPosition(props.placement)}\n `}\n`\n","import {\n forwardRef,\n useRef,\n useState,\n useCallback,\n useEffect,\n isValidElement,\n type ReactNode,\n type ReactElement,\n type CSSProperties,\n} from 'react'\n// @ts-ignore - react-dom type issue (workspace tsconfig)\nimport { createPortal } from 'react-dom'\nimport { mergeProps } from '@react-aria/utils'\nimport { useFocusWithin, useHover } from 'react-aria'\nimport {\n TooltipContainer,\n TooltipArrow,\n type TooltipPlacement,\n} from './Tooltip.style'\n\nexport type { TooltipPlacement }\n\nexport type TooltipProps = {\n /**\n * 触发 Tooltip 的子元素\n * 必须是可接受 ref 的单一 React 元素\n */\n children: ReactElement\n\n /**\n * Tooltip 显示的内容\n */\n content: ReactNode\n\n /**\n * 弹出位置\n * @default 'top'\n */\n placement?: TooltipPlacement\n\n /**\n * 距离触发元素的偏移量 (px)\n * @default 8\n */\n offset?: number\n\n /**\n * 打开延迟(毫秒)\n * @default 0\n */\n delay?: number\n\n /**\n * 关闭延迟(毫秒)\n * @default 0\n */\n closeDelay?: number\n\n /**\n * 是否禁用 Tooltip(统一 API,优先级高于 isDisabled)\n * @default false\n */\n disabled?: boolean\n\n /**\n * 是否显示箭头\n * @default true\n */\n showArrow?: boolean\n\n /**\n * 受控:是否打开(替代 isOpen,符合 Design System 规范)\n */\n open?: boolean\n\n /**\n * 非受控:默认是否打开\n * @default false\n */\n defaultOpen?: boolean\n\n /**\n * 打开状态变更回调\n */\n onOpenChange?: (open: boolean) => void\n\n /**\n * 自定义类名\n */\n className?: string\n\n /**\n * 自定义样式\n */\n style?: CSSProperties\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n children,\n content,\n placement = 'top',\n offset = 8,\n delay = 0,\n closeDelay = 0,\n disabled = false,\n showArrow = true,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n className,\n style,\n },\n forwardedRef,\n ) => {\n // SSR-safe\n if (typeof document === 'undefined') return children\n\n // 内部状态管理\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Refs\n const triggerRef = useRef<HTMLElement>(null)\n const tooltipRef = useRef<HTMLDivElement>(null)\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // 位置状态\n const [position, setPosition] = useState<{ top: number; left: number }>({ top: 0, left: 0 })\n\n // 清除定时器\n const clearTimers = useCallback(() => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current)\n openTimerRef.current = null\n }\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current)\n closeTimerRef.current = null\n }\n }, [])\n\n // 更新打开状态\n const updateOpen = useCallback(\n (nextOpen: boolean) => {\n if (disabled) return\n if (!isControlled) {\n setInternalOpen(nextOpen)\n }\n onOpenChange?.(nextOpen)\n },\n [disabled, isControlled, onOpenChange],\n )\n\n // 打开 Tooltip\n const handleOpen = useCallback(() => {\n if (disabled) return\n clearTimers()\n\n if (delay > 0) {\n openTimerRef.current = setTimeout(() => {\n updateOpen(true)\n }, delay)\n } else {\n updateOpen(true)\n }\n }, [disabled, delay, clearTimers, updateOpen])\n\n // 关闭 Tooltip\n const handleClose = useCallback(() => {\n clearTimers()\n\n if (closeDelay > 0) {\n closeTimerRef.current = setTimeout(() => {\n updateOpen(false)\n }, closeDelay)\n } else {\n updateOpen(false)\n }\n }, [closeDelay, clearTimers, updateOpen])\n\n // Hover 交互\n const { hoverProps } = useHover({\n isDisabled: disabled,\n onHoverStart: handleOpen,\n onHoverEnd: handleClose,\n })\n\n // Focus 交互\n const { focusWithinProps } = useFocusWithin({\n isDisabled: disabled,\n onFocusWithin: () => handleOpen(),\n onBlurWithin: () => handleClose(),\n })\n\n // 计算 Tooltip 位置\n const updatePosition = useCallback(() => {\n if (!triggerRef.current || !tooltipRef.current) return\n\n const triggerRect = triggerRef.current.getBoundingClientRect()\n const tooltipRect = tooltipRef.current.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n switch (placement) {\n case 'top':\n top = triggerRect.top + scrollY - tooltipRect.height - offset\n left = triggerRect.left + scrollX + (triggerRect.width - tooltipRect.width) / 2\n break\n case 'bottom':\n top = triggerRect.bottom + scrollY + offset\n left = triggerRect.left + scrollX + (triggerRect.width - tooltipRect.width) / 2\n break\n case 'left':\n top = triggerRect.top + scrollY + (triggerRect.height - tooltipRect.height) / 2\n left = triggerRect.left + scrollX - tooltipRect.width - offset\n break\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - tooltipRect.height) / 2\n left = triggerRect.right + scrollX + offset\n break\n }\n\n setPosition({ top, left })\n }, [placement, offset])\n\n // 监听位置更新\n useEffect(() => {\n if (!isOpen) return\n\n // 初始计算位置\n updatePosition()\n\n // 监听滚动和窗口大小变化\n const handleUpdate = () => updatePosition()\n window.addEventListener('scroll', handleUpdate, true)\n window.addEventListener('resize', handleUpdate)\n\n return () => {\n window.removeEventListener('scroll', handleUpdate, true)\n window.removeEventListener('resize', handleUpdate)\n }\n }, [isOpen, updatePosition])\n\n // 清理定时器\n useEffect(() => {\n return () => clearTimers()\n }, [clearTimers])\n\n // 验证 children 是有效的 React 元素\n if (!isValidElement(children)) {\n console.warn('Tooltip: children must be a valid React element')\n return children\n }\n\n // 使用 wrapper 包裹 children,确保 hover 事件不被子组件内部实现覆盖\n const wrapperProps = mergeProps(hoverProps, focusWithinProps, {\n ref: triggerRef,\n 'aria-describedby': isOpen ? 'kai-tooltip' : undefined,\n })\n\n // 使用 span 作为 wrapper,设置 display: inline-block 保持布局\n const trigger = (\n <span \n {...wrapperProps}\n style={{ display: 'inline-block' }}\n >\n {children}\n </span>\n )\n\n // Tooltip 内容\n const tooltipContent = isOpen && !disabled && content ? (\n createPortal(\n <TooltipContainer\n ref={(node) => {\n tooltipRef.current = node\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef) {\n forwardedRef.current = node\n }\n }}\n id=\"kai-tooltip\"\n role=\"tooltip\"\n placement={placement}\n className={className}\n style={{\n ...style,\n position: 'absolute',\n top: position.top,\n left: position.left,\n }}\n data-placement={placement}\n >\n {showArrow && <TooltipArrow placement={placement} />}\n {content}\n </TooltipContainer>,\n document.body,\n )\n ) : null\n\n return (\n <>\n {trigger}\n {tooltipContent}\n </>\n )\n },\n)\n\nTooltip.displayName = 'Tooltip'\n","/**\n * Slider Styled Tokens\n *\n * 将 Slider 的 JS tokens 与 CSS 变量映射,实现:\n * - 有 ThemeProvider 时:使用 JS token 值(可被用户自定义)\n * - 无 ThemeProvider 时:fallback 到 CSS 变量(基础样式)\n */\n\nimport { createStyledTokens } from '../utils/styled-token';\n\n/**\n * Slider 组件的 Styled Tokens\n */\nexport const $slider = createStyledTokens({\n // ============================================================================\n // Track 轨道\n // ============================================================================\n trackBg: ['components.slider.track.background.default', '--ksd-slider-track-bg'],\n trackBgDisabled: ['components.slider.track.background.disabled', '--ksd-slider-track-bg-disabled'],\n trackBorder: ['components.slider.track.border.default', '--ksd-slider-track-border'],\n trackHeightSm: ['components.slider.track.height.sm', '--ksd-slider-track-height-sm'],\n trackHeightMd: ['components.slider.track.height.md', '--ksd-slider-track-height-md'],\n trackHeightLg: ['components.slider.track.height.lg', '--ksd-slider-track-height-lg'],\n\n // ============================================================================\n // Fill 填充区域\n // ============================================================================\n fillBg: ['components.slider.fill.background.default', '--ksd-slider-fill-bg'],\n fillBgHover: ['components.slider.fill.background.hover', '--ksd-slider-fill-bg-hover'],\n fillBgDisabled: ['components.slider.fill.background.disabled', '--ksd-slider-fill-bg-disabled'],\n\n // ============================================================================\n // Thumb 滑块\n // ============================================================================\n thumbBg: ['components.slider.thumb.background.default', '--ksd-slider-thumb-bg'],\n thumbBgHover: ['components.slider.thumb.background.hover', '--ksd-slider-thumb-bg-hover'],\n thumbBgActive: ['components.slider.thumb.background.active', '--ksd-slider-thumb-bg-active'],\n thumbBgDisabled: ['components.slider.thumb.background.disabled', '--ksd-slider-thumb-bg-disabled'],\n thumbBorder: ['components.slider.thumb.border.default', '--ksd-slider-thumb-border'],\n thumbBorderHover: ['components.slider.thumb.border.hover', '--ksd-slider-thumb-border-hover'],\n thumbBorderActive: ['components.slider.thumb.border.active', '--ksd-slider-thumb-border-active'],\n thumbBorderDisabled: ['components.slider.thumb.border.disabled', '--ksd-slider-thumb-border-disabled'],\n thumbShadow: ['components.slider.thumb.shadow.default', '--ksd-slider-thumb-shadow'],\n thumbShadowHover: ['components.slider.thumb.shadow.hover', '--ksd-slider-thumb-shadow-hover'],\n thumbShadowActive: ['components.slider.thumb.shadow.active', '--ksd-slider-thumb-shadow-active'],\n thumbSizeSm: ['components.slider.thumb.size.sm', '--ksd-slider-thumb-size-sm'],\n thumbSizeMd: ['components.slider.thumb.size.md', '--ksd-slider-thumb-size-md'],\n thumbSizeLg: ['components.slider.thumb.size.lg', '--ksd-slider-thumb-size-lg'],\n\n // ============================================================================\n // Label 标签\n // ============================================================================\n labelColor: ['components.slider.label.color.default', '--ksd-slider-label-color'],\n labelColorDisabled: ['components.slider.label.color.disabled', '--ksd-slider-label-color-disabled'],\n labelFontSize: ['components.slider.label.fontSize', '--ksd-slider-label-font-size'],\n labelFontWeight: ['components.slider.label.fontWeight', '--ksd-slider-label-font-weight'],\n\n // ============================================================================\n // Value 数值显示\n // ============================================================================\n valueColor: ['components.slider.value.color.default', '--ksd-slider-value-color'],\n valueColorDisabled: ['components.slider.value.color.disabled', '--ksd-slider-value-color-disabled'],\n valueFontSize: ['components.slider.value.fontSize', '--ksd-slider-value-font-size'],\n\n // ============================================================================\n // Mark 刻度标记\n // ============================================================================\n markDotSize: ['components.slider.mark.dot.size', '--ksd-slider-mark-dot-size'],\n markDotBg: ['components.slider.mark.dot.background.default', '--ksd-slider-mark-dot-bg'],\n markDotBgActive: ['components.slider.mark.dot.background.active', '--ksd-slider-mark-dot-bg-active'],\n markLabelColor: ['components.slider.mark.label.color.default', '--ksd-slider-mark-label-color'],\n markLabelColorActive: ['components.slider.mark.label.color.active', '--ksd-slider-mark-label-color-active'],\n markLabelFontSize: ['components.slider.mark.label.fontSize', '--ksd-slider-mark-label-font-size'],\n\n // ============================================================================\n // Tooltip\n // ============================================================================\n tooltipBg: ['components.slider.tooltip.background', '--ksd-slider-tooltip-bg'],\n tooltipText: ['components.slider.tooltip.text', '--ksd-slider-tooltip-text'],\n tooltipFontSize: ['components.slider.tooltip.fontSize', '--ksd-slider-tooltip-font-size'],\n tooltipBorderRadius: ['components.slider.tooltip.borderRadius', '--ksd-slider-tooltip-border-radius'],\n tooltipPadding: ['components.slider.tooltip.padding', '--ksd-slider-tooltip-padding'],\n tooltipShadow: ['components.slider.tooltip.shadow', '--ksd-slider-tooltip-shadow'],\n\n // ============================================================================\n // Focus Ring\n // ============================================================================\n focusRingColor: ['components.slider.focusRing.color', '--ksd-slider-focus-ring-color'],\n focusRingWidth: ['components.slider.focusRing.width', '--ksd-slider-focus-ring-width'],\n focusRingOffset: ['components.slider.focusRing.offset', '--ksd-slider-focus-ring-offset'],\n\n // ============================================================================\n // 通用属性\n // ============================================================================\n borderRadius: ['components.slider.borderRadius', '--ksd-slider-border-radius'],\n transition: ['components.slider.transition', '--ksd-slider-transition'],\n disabledOpacity: ['components.slider.disabledOpacity', '--ksd-slider-disabled-opacity'],\n});\n","import { styled, css } from '@kingsoft-ai/theme';\nimport type { AppTheme } from '@kingsoft-ai/theme';\nimport { $slider } from './styled-tokens';\n\nexport const sliderSizes = ['sm', 'md', 'lg'] as const\nexport type SliderSize = (typeof sliderSizes)[number]\n\ntype ThemeProps = { theme?: AppTheme };\n\n/**\n * 获取尺寸相关的样式\n */\nconst getSizeStyles = (size: SliderSize, props: ThemeProps) => {\n const sizeMap = {\n sm: css`\n --slider-track-height: ${$slider.trackHeightSm(props)};\n --slider-thumb-size: ${$slider.thumbSizeSm(props)};\n `,\n md: css`\n --slider-track-height: ${$slider.trackHeightMd(props)};\n --slider-thumb-size: ${$slider.thumbSizeMd(props)};\n `,\n lg: css`\n --slider-track-height: ${$slider.trackHeightLg(props)};\n --slider-thumb-size: ${$slider.thumbSizeLg(props)};\n `,\n };\n return sizeMap[size] || sizeMap.md;\n}\n\n/**\n * Slider 根容器\n */\nexport const SliderRoot = styled.div<{\n size: SliderSize\n isDisabled: boolean\n fullWidth: boolean\n}>`\n ${(props) => css`\n /* 基础布局 */\n display: flex;\n flex-direction: column;\n gap: var(--ksd-spacing-sm);\n width: ${props.fullWidth ? '100%' : '200px'};\n font-family: var(--ksd-typography-font-family);\n \n /* 尺寸样式 */\n ${getSizeStyles(props.size, props)}\n \n /* 禁用状态 */\n ${props.isDisabled && css`\n opacity: ${$slider.disabledOpacity(props)};\n cursor: not-allowed;\n pointer-events: none;\n `}\n `}\n`\n\n/**\n * 标签和数值区域\n */\nexport const SliderHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\n/**\n * 标签文字\n */\nexport const SliderLabel = styled.label<{\n isDisabled: boolean\n}>`\n ${(props) => css`\n font-size: ${$slider.labelFontSize(props)};\n font-weight: ${$slider.labelFontWeight(props)};\n color: ${props.isDisabled\n ? $slider.labelColorDisabled(props)\n : $slider.labelColor(props)};\n line-height: 1.4;\n user-select: none;\n `}\n`\n\n/**\n * 数值显示\n */\nexport const SliderValue = styled.span<{\n isDisabled: boolean\n}>`\n ${(props) => css`\n font-size: ${$slider.valueFontSize(props)};\n color: ${props.isDisabled\n ? $slider.valueColorDisabled(props)\n : $slider.valueColor(props)};\n line-height: 1.4;\n font-variant-numeric: tabular-nums;\n `}\n`\n\n/**\n * 轨道容器 - 包含轨道、填充和滑块\n */\nexport const SliderTrackContainer = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n /* 为滑块留出足够的点击空间 */\n padding: calc(var(--slider-thumb-size) / 2) 0;\n touch-action: none;\n`\n\n/**\n * 轨道背景\n */\nexport const SliderTrack = styled.div<{\n isDisabled: boolean\n}>`\n ${(props) => css`\n position: relative;\n width: 100%;\n height: var(--slider-track-height);\n border-radius: calc(var(--slider-track-height) / 2);\n background: ${props.isDisabled\n ? $slider.trackBgDisabled(props)\n : $slider.trackBg(props)};\n cursor: ${props.isDisabled ? 'not-allowed' : 'pointer'};\n `}\n`\n\n/**\n * 已填充区域\n */\nexport const SliderFill = styled.div<{\n isDisabled: boolean\n isHovered: boolean\n}>`\n ${(props) => css`\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n border-radius: inherit;\n background: ${props.isDisabled\n ? $slider.fillBgDisabled(props)\n : props.isHovered\n ? $slider.fillBgHover(props)\n : $slider.fillBg(props)};\n transition: background ${$slider.transition(props)};\n pointer-events: none;\n `}\n`\n\n/**\n * 滑块(拖动按钮)\n */\nexport const SliderThumb = styled.div<{\n isDisabled: boolean\n isFocusVisible: boolean\n isDragging: boolean\n}>`\n ${(props) => css`\n position: absolute;\n top: 50%;\n width: var(--slider-thumb-size);\n height: var(--slider-thumb-size);\n border-radius: ${$slider.borderRadius(props)};\n transform: translate(-50%, -50%);\n \n /* 背景和边框 */\n background: ${props.isDisabled\n ? $slider.thumbBgDisabled(props)\n : props.isDragging\n ? $slider.thumbBgActive(props)\n : $slider.thumbBg(props)};\n border: 2px solid\n ${props.isDisabled\n ? $slider.thumbBorderDisabled(props)\n : props.isDragging\n ? $slider.thumbBorderActive(props)\n : $slider.thumbBorder(props)};\n box-shadow: ${props.isDragging\n ? $slider.thumbShadowActive(props)\n : $slider.thumbShadow(props)};\n \n /* 交互 */\n cursor: ${props.isDisabled ? 'not-allowed' : 'grab'};\n outline: none;\n transition:\n background ${$slider.transition(props)},\n border-color ${$slider.transition(props)},\n box-shadow ${$slider.transition(props)},\n transform 0.1s ease;\n \n /* Hover 状态 */\n &:hover:not([data-disabled='true']) {\n border-color: ${$slider.thumbBorderHover(props)};\n box-shadow: ${$slider.thumbShadowHover(props)};\n }\n \n /* 拖拽状态 */\n ${props.isDragging && css`\n cursor: grabbing;\n transform: translate(-50%, -50%) scale(1.1);\n `}\n \n /* 焦点可见状态 */\n ${props.isFocusVisible && css`\n box-shadow:\n ${$slider.thumbShadow(props)},\n 0 0 0 ${$slider.focusRingWidth(props)} ${$slider.focusRingColor(props)};\n `}\n `}\n`\n\n/**\n * 刻度标记容器\n */\nexport const SliderMarks = styled.div`\n position: relative;\n width: 100%;\n`\n\n/**\n * 单个刻度标记\n */\nexport const SliderMark = styled.div<{\n isActive: boolean\n}>`\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n transform: translateX(-50%);\n`\n\n/**\n * 刻度点\n */\nexport const SliderMarkDot = styled.span<{\n isActive: boolean\n}>`\n ${(props) => css`\n width: ${$slider.markDotSize(props)};\n height: ${$slider.markDotSize(props)};\n border-radius: 50%;\n background: ${props.isActive\n ? $slider.markDotBgActive(props)\n : $slider.markDotBg(props)};\n transition: background ${$slider.transition(props)};\n `}\n`\n\n/**\n * 刻度标签\n */\nexport const SliderMarkLabel = styled.span<{\n isActive: boolean\n}>`\n ${(props) => css`\n font-size: ${$slider.markLabelFontSize(props)};\n color: ${props.isActive\n ? $slider.markLabelColorActive(props)\n : $slider.markLabelColor(props)};\n white-space: nowrap;\n transition: color ${$slider.transition(props)};\n `}\n`\n\n/**\n * Tooltip\n */\nexport const SliderTooltip = styled.div<{\n isVisible: boolean\n}>`\n ${(props) => css`\n position: absolute;\n bottom: calc(100% + 8px);\n left: 50%;\n transform: translateX(-50%);\n padding: ${$slider.tooltipPadding(props)};\n background: ${$slider.tooltipBg(props)};\n color: ${$slider.tooltipText(props)};\n font-size: ${$slider.tooltipFontSize(props)};\n border-radius: ${$slider.tooltipBorderRadius(props)};\n box-shadow: ${$slider.tooltipShadow(props)};\n white-space: nowrap;\n pointer-events: none;\n z-index: 10;\n \n /* 显示/隐藏动画 */\n opacity: ${props.isVisible ? 1 : 0};\n visibility: ${props.isVisible ? 'visible' : 'hidden'};\n transition:\n opacity 0.15s ease,\n visibility 0.15s ease;\n \n /* 小三角箭头 */\n &::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 4px solid transparent;\n border-top-color: ${$slider.tooltipBg(props)};\n }\n `}\n`\n\n/**\n * 输出容器 - 用于显示输入框\n */\nexport const SliderOutput = styled.output`\n ${(props) => css`\n font-size: ${$slider.valueFontSize(props)};\n color: ${$slider.valueColor(props)};\n font-variant-numeric: tabular-nums;\n `}\n`\n","import { forwardRef, useRef, useState, useCallback } from 'react'\nimport type { ReactNode } from 'react'\nimport { useSlider, useSliderThumb, useFocusRing, useHover, VisuallyHidden, mergeProps } from 'react-aria'\nimport { useSliderState } from '@react-stately/slider'\nimport type { AriaSliderProps } from 'react-aria'\nimport type { SliderState } from '@react-stately/slider'\nimport {\n SliderRoot,\n SliderHeader,\n SliderLabel,\n SliderValue,\n SliderTrackContainer,\n SliderTrack,\n SliderFill,\n SliderThumb,\n SliderMarks,\n SliderMark,\n SliderMarkDot,\n SliderMarkLabel,\n SliderTooltip,\n sliderSizes,\n type SliderSize,\n} from './Slider.style'\n\nexport const SIZES = sliderSizes\n\nexport interface SliderMark {\n /** 刻度值 */\n value: number\n /** 刻度标签 */\n label?: ReactNode\n}\n\nexport type SliderProps = Omit<AriaSliderProps, 'isDisabled'> & {\n /** 滑块尺寸:小号(4px轨道)、标准(6px轨道)、大号(8px轨道) */\n size?: SliderSize\n /** 是否禁用(替代 isDisabled) */\n disabled?: boolean\n /** 是否占满容器宽度 */\n fullWidth?: boolean\n /** 是否显示当前数值 */\n showValue?: boolean\n /** 是否显示 tooltip */\n showTooltip?: boolean | 'always' | 'hover'\n /** 刻度标记 */\n marks?: SliderMark[] | boolean\n /** 数值格式化函数 */\n formatValue?: (value: number) => string\n /** 自定义类名 */\n className?: string\n /** 自定义样式(支持 CSS 变量定制) */\n style?: React.CSSProperties\n}\n\n/**\n * Thumb 组件 - 滑块\n */\ninterface ThumbProps {\n state: SliderState\n trackRef: React.RefObject<HTMLDivElement | null>\n index: number\n isDisabled: boolean\n showTooltip: boolean | 'always' | 'hover'\n formatValue?: (value: number) => string\n}\n\nconst Thumb = ({\n state,\n trackRef,\n index,\n isDisabled,\n showTooltip,\n formatValue,\n}: ThumbProps) => {\n const inputRef = useRef<HTMLInputElement>(null)\n const { thumbProps, inputProps, isDragging } = useSliderThumb(\n {\n index,\n trackRef,\n inputRef,\n },\n state\n )\n\n const { focusProps, isFocusVisible } = useFocusRing()\n const { hoverProps, isHovered } = useHover({ isDisabled })\n\n const value = state.getThumbValue(index)\n const percent = state.getThumbPercent(index)\n const displayValue = formatValue ? formatValue(value) : value.toString()\n\n // 计算是否显示 tooltip\n const shouldShowTooltip =\n showTooltip === 'always' ||\n (showTooltip === true && isDragging) ||\n (showTooltip === 'hover' && (isDragging || isFocusVisible || isHovered))\n\n return (\n <SliderThumb\n {...mergeProps(thumbProps, hoverProps)}\n style={{\n left: `${percent * 100}%`,\n }}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n isDragging={isDragging}\n data-disabled={isDisabled ? 'true' : undefined}\n data-dragging={isDragging ? 'true' : undefined}\n >\n <VisuallyHidden>\n <input ref={inputRef} {...mergeProps(inputProps, focusProps)} />\n </VisuallyHidden>\n {showTooltip && (\n <SliderTooltip isVisible={shouldShowTooltip}>{displayValue}</SliderTooltip>\n )}\n </SliderThumb>\n )\n}\n\n/**\n * Slider 滑动组件\n *\n * 基于 react-aria 实现,支持无障碍访问、键盘导航和主题定制。\n *\n * @example\n * ```tsx\n * // 基础用法\n * <Slider label=\"音量\" defaultValue={50} />\n *\n * // 带刻度标记\n * <Slider\n * label=\"进度\"\n * marks={[\n * { value: 0, label: '0%' },\n * { value: 50, label: '50%' },\n * { value: 100, label: '100%' },\n * ]}\n * />\n *\n * // 范围选择\n * <Slider label=\"价格范围\" defaultValue={[20, 80]} />\n * ```\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n size = 'md',\n disabled = false,\n fullWidth = false,\n showValue = true,\n showTooltip = false,\n marks,\n formatValue,\n className,\n style,\n label,\n ...ariaProps\n },\n forwardedRef\n ) => {\n const trackRef = useRef<HTMLDivElement>(null)\n const [isHovered, setIsHovered] = useState(false)\n\n // 创建 slider state\n const state = useSliderState({\n ...ariaProps,\n isDisabled: disabled,\n numberFormatter: new Intl.NumberFormat('zh-CN'),\n })\n\n // 获取 slider props\n const { groupProps, trackProps, labelProps, outputProps } = useSlider(\n {\n ...ariaProps,\n label,\n isDisabled: disabled,\n },\n state,\n trackRef\n )\n\n // 处理 marks\n const computedMarks = useCallback((): SliderMark[] => {\n if (!marks) return []\n if (marks === true) {\n // 自动生成刻度:起点、中点、终点\n const min = state.getThumbMinValue(0)\n const max = state.getThumbMaxValue(0)\n const mid = (min + max) / 2\n return [\n { value: min, label: formatValue ? formatValue(min) : min.toString() },\n { value: mid, label: formatValue ? formatValue(mid) : mid.toString() },\n { value: max, label: formatValue ? formatValue(max) : max.toString() },\n ]\n }\n return marks\n }, [marks, state, formatValue])\n\n // 计算填充区域的宽度(支持范围选择)\n const fillStyle = (() => {\n if (state.values.length === 1) {\n // 单值模式:从起点到当前值\n return {\n left: '0%',\n width: `${state.getThumbPercent(0) * 100}%`,\n }\n } else {\n // 范围模式:从第一个值到第二个值\n const left = state.getThumbPercent(0) * 100\n const right = state.getThumbPercent(1) * 100\n return {\n left: `${left}%`,\n width: `${right - left}%`,\n }\n }\n })()\n\n // 格式化显示的数值\n const displayValue = (() => {\n if (state.values.length === 1) {\n const val = state.values[0]\n return formatValue ? formatValue(val) : val.toString()\n } else {\n const min = state.values[0]\n const max = state.values[1]\n const minStr = formatValue ? formatValue(min) : min.toString()\n const maxStr = formatValue ? formatValue(max) : max.toString()\n return `${minStr} - ${maxStr}`\n }\n })()\n\n const marksList = computedMarks()\n\n return (\n <SliderRoot\n {...groupProps}\n ref={forwardedRef}\n size={size}\n isDisabled={disabled}\n fullWidth={fullWidth}\n className={className}\n style={style}\n data-size={size}\n data-disabled={disabled ? 'true' : undefined}\n >\n {/* 标签和数值区域 */}\n {(label || showValue) && (\n <SliderHeader>\n {label && (\n <SliderLabel {...labelProps} isDisabled={disabled}>\n {label}\n </SliderLabel>\n )}\n {showValue && (\n <SliderValue {...outputProps} isDisabled={disabled}>\n {displayValue}\n </SliderValue>\n )}\n </SliderHeader>\n )}\n\n {/* 轨道区域 */}\n <SliderTrackContainer\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <SliderTrack\n {...trackProps}\n ref={trackRef}\n isDisabled={disabled}\n >\n {/* 填充区域 */}\n <SliderFill\n style={fillStyle}\n isDisabled={disabled}\n isHovered={isHovered}\n />\n </SliderTrack>\n\n {/* 滑块 */}\n {state.values.map((_: number, index: number) => (\n <Thumb\n key={index}\n state={state}\n trackRef={trackRef}\n index={index}\n isDisabled={disabled}\n showTooltip={showTooltip}\n formatValue={formatValue}\n />\n ))}\n </SliderTrackContainer>\n\n {/* 刻度标记 */}\n {marksList.length > 0 && (\n <SliderMarks>\n {marksList.map((mark) => {\n const min = state.getThumbMinValue(0)\n const max = state.getThumbMaxValue(0)\n const percent = ((mark.value - min) / (max - min)) * 100\n const isActive = state.values.some((v: number) => v >= mark.value)\n\n return (\n <SliderMark\n key={mark.value}\n style={{ left: `${percent}%` }}\n isActive={isActive}\n >\n <SliderMarkDot isActive={isActive} />\n {mark.label && (\n <SliderMarkLabel isActive={isActive}>\n {mark.label}\n </SliderMarkLabel>\n )}\n </SliderMark>\n )\n })}\n </SliderMarks>\n )}\n </SliderRoot>\n )\n }\n)\n\nSlider.displayName = 'Slider'\n","import { TokenGenerator } from '../types/theme-utils';\nimport { ButtonTokens, IconButtonTokens } from './tokens.types';\n\nexport const getButtonTokens: TokenGenerator<ButtonTokens> = ({ global, semantic }) => ({\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n text: {\n default: semantic.colors.text.onBrand,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n secondary: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.brand.primary,\n active: semantic.colors.brand.primaryActive,\n },\n shadow: {\n default: 'none',\n },\n },\n text: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: '#F0F0F0', // 文本按钮点击态背景 - note: this was hardcoded in original\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: 'transparent',\n hover: 'transparent',\n active: 'transparent',\n },\n },\n danger: {\n background: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n text: {\n default: semantic.colors.state.dangerOn,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n gradient: {\n background: {\n default: global.gradients.blueViolet,\n gradientFrom: '#0194FF',\n gradientTo: '#D581FF',\n },\n text: {\n default: global.colors.common.white,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: 'none',\n hover: 'none',\n },\n },\n disabled: {\n background: {\n default: semantic.colors.border.primary,\n },\n text: {\n default: semantic.colors.text.disabled,\n },\n opacity: 0.6,\n },\n size: {\n sm: {\n height: '24px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n md: {\n height: '32px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n lg: {\n height: '40px',\n fontSize: global.typography.fontSize.sm, // 14px\n paddingInline: global.spacing.lg, // 16px\n iconSize: '16px',\n },\n },\n borderRadius: global.radii.r3, // 6px - Figma 设计稿圆角\n fontWeight: global.typography.fontWeight.regular, // 400\n gap: global.spacing.sm, // 8px 图标和文字间距\n transition: '0.2s ease',\n});\n\nexport const getIconButtonTokens: TokenGenerator<IconButtonTokens> = ({ global, semantic }) => ({\n appearance: {\n solid: {\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.onBrand,\n },\n },\n neutral: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceStrong,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.state.dangerOn,\n },\n },\n },\n outline: {\n primary: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: 'rgba(44, 111, 231, 0.16)',\n },\n border: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primary,\n active: semantic.colors.brand.primary,\n },\n icon: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n },\n neutral: {\n background: {\n default: 'transparent',\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceStrong,\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n active: semantic.colors.border.strong,\n },\n icon: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: 'transparent',\n hover: semantic.colors.state.dangerSubtle,\n active: 'rgba(237, 28, 28, 0.18)',\n },\n border: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.danger,\n active: semantic.colors.state.danger,\n },\n icon: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n },\n },\n ghost: {\n primary: {\n background: {\n default: 'transparent',\n hover: semantic.colors.brand.primarySubtle,\n active: 'rgba(44, 111, 231, 0.16)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n },\n neutral: {\n background: {\n default: 'transparent',\n hover: 'rgba(10, 24, 51, 0.05)',\n active: 'rgba(10, 24, 51, 0.1)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.text.primary,\n },\n },\n danger: {\n background: {\n default: 'transparent',\n hover: semantic.colors.state.dangerSubtle,\n active: 'rgba(237, 28, 28, 0.18)',\n },\n border: {\n default: 'transparent',\n },\n icon: {\n default: semantic.colors.state.danger,\n hover: semantic.colors.state.dangerHover,\n active: semantic.colors.state.dangerActive,\n },\n },\n },\n },\n disabled: {\n background: semantic.colors.background.surfaceSubtle,\n border: semantic.colors.border.primary,\n icon: semantic.colors.text.disabled,\n opacity: 0.6,\n },\n size: {\n sm: {\n edge: '24px',\n iconSize: '16px',\n },\n md: {\n edge: '32px',\n iconSize: '18px',\n },\n lg: {\n edge: '40px',\n iconSize: '20px',\n },\n },\n borderRadius: global.radii.r3,\n transition: '0.2s ease',\n focusRing: {\n color: 'rgba(44, 111, 231, 0.35)',\n offset: '2px',\n width: '2px',\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { FloatButtonTokens } from './tokens.types';\n\nexport const getFloatButtonTokens: TokenGenerator<FloatButtonTokens> = ({ global, semantic }) => ({\n default: {\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n active: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.primary,\n },\n border: {\n default: semantic.colors.border.primary,\n },\n shadow: {\n default: global.shadows.l1,\n hover: global.shadows.l3,\n },\n },\n primary: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n },\n text: {\n default: semantic.colors.text.onBrand,\n },\n border: {\n default: 'transparent',\n },\n shadow: {\n default: global.shadows.l1,\n hover: global.shadows.l3,\n },\n },\n disabled: {\n background: {\n default: semantic.colors.border.primary,\n },\n text: {\n default: semantic.colors.text.disabled,\n },\n opacity: 0.6,\n },\n size: {\n sm: {\n size: '32px',\n },\n md: {\n size: '40px',\n },\n lg: {\n size: '48px',\n },\n },\n icon: {\n size: global.typography.fontSize.lg,\n },\n description: {\n fontSize: global.typography.fontSize.xs,\n lineHeight: `${global.typography.lineHeight.tight}`,\n },\n});\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CheckboxTokens } from './tokens.types';\n\nexport const getCheckboxTokens: TokenGenerator<CheckboxTokens> = ({ global, semantic }) => ({\n control: {\n size: \"16px\", // Checkbox 尺寸\n borderRadius: global.radii.r2, // 4px - 最小组件圆角\n borderWidth: \"1px\",\n background: {\n default: global.colors.common.white, // 未选中背景:白色\n checked: semantic.colors.brand.primary, // 选中背景:#2C6FE7\n disabled: global.colors.neutral[100], // 禁用未选中:#F0F2F4\n disabledChecked: global.colors.blue[200], // 禁用选中:#AAD1FC\n },\n borderColor: {\n default: global.colors.neutral[400], // 未选中边框:#C2C5CC\n hover: semantic.colors.brand.primary, // hover边框:#2C6FE7\n checked: semantic.colors.brand.primary, // 选中边框:#2C6FE7\n disabled: global.colors.neutral[400], // 禁用边框:#C2C5CC\n disabledChecked: global.colors.blue[200], // 禁用选中边框:#AAD1FC\n },\n icon: {\n color: global.colors.common.white, // 勾选图标颜色:白色\n size: \"10px\", // 图标大小\n },\n },\n focusRing: \"0 0 0 4px rgba(44, 111, 231, 0.18)\",\n gap: global.spacing.sm, // 8px - checkbox和文字间距\n text: {\n label: {\n fontSize: global.typography.fontSize.xs, // 12px\n lineHeight: \"18px\", // 行高18px\n color: global.colors.word[900], // #0A1833\n disabled: global.colors.word[300], // 禁用:#B6BEC2 (实际是#B5BAC2)\n fontWeight: global.typography.fontWeight.regular, // 400\n },\n },\n transition: \"0.16s ease\",\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { RadioTokens } from './tokens.types';\n\nexport const getRadioTokens: TokenGenerator<RadioTokens> = ({ global }) => ({\n control: {\n size: \"16px\",\n borderRadius: \"999px\",\n borderWidth: \"1.5px\",\n background: global.colors.common.white,\n borderColor: {\n default: global.colors.neutral[300],\n hover: global.colors.blue[500],\n checked: global.colors.blue[500],\n disabled: global.colors.neutral[200],\n },\n indicator: {\n size: \"8px\",\n color: global.colors.blue[500],\n disabled: global.colors.word[300],\n },\n },\n focusRing: \"0 0 0 4px rgba(44, 111, 231, 0.18)\",\n gap: \"0.5rem\",\n text: {\n label: {\n fontSize: global.typography.fontSize.xs,\n color: global.colors.word[900],\n disabled: global.colors.word[300],\n fontWeight: global.typography.fontWeight.regular,\n },\n description: {\n color: global.colors.word[600],\n disabled: global.colors.word[300],\n fontSize: global.typography.fontSize.xs,\n },\n },\n disabled: {\n opacity: 0.55,\n },\n transition: \"0.16s ease\",\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SwitchTokens } from './tokens.types';\n\nexport const getSwitchTokens: TokenGenerator<SwitchTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n width: '36px', // 小尺寸开关宽度\n height: '20px', // 小尺寸开关高度\n thumbSize: '16px', // 小尺寸滑块\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: '6px', // 左右内边距\n },\n md: {\n width: '44px', // 中等尺寸开关宽度(根据 Figma: 文字+滑块+间距)\n height: '24px', // 中等尺寸开关高度(Figma 设计)\n thumbSize: '18px', // 滑块尺寸(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px(Figma 设计)\n paddingInline: '8px', // 左右内边距(左8px,右3px考虑滑块位置)\n },\n },\n background: {\n unchecked: global.colors.neutral[300], // 未选中状态:灰色 #D4D6D9\n checked: semantic.colors.brand.primary, // 选中状态:品牌蓝 #2C6FE7\n disabled: global.colors.neutral[200], // 禁用状态:浅灰\n },\n thumb: {\n background: global.colors.common.white, // 滑块:白色\n shadow: '0 1px 3px rgba(0, 0, 0, 0.12)', // 滑块阴影\n },\n text: {\n color: global.colors.common.white, // 文字颜色:白色\n fontSize: global.typography.fontSize.xs, // 12px\n fontWeight: global.typography.fontWeight.regular, // 400\n },\n borderRadius: global.radii.r5, // 12px - 中型容器圆角(Figma 设计)\n gap: global.spacing.xs, // 4px - 文字和滑块的间距(Figma 设计)\n transition: '0.2s cubic-bezier(0.4, 0, 0.2, 1)', // 平滑过渡动画\n disabled: {\n opacity: 0.5, // 禁用时的透明度\n },\n focusRing: {\n color: 'rgba(44, 111, 231, 0.3)', // Focus 环颜色\n offset: '2px', // Focus 环偏移\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { InputTokens } from './tokens.types';\n\nexport const getInputTokens: TokenGenerator<InputTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n height: '24px', // 小号输入框高度\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '14px', // 小号图标尺寸\n },\n md: {\n height: '32px', // 标准输入框高度(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '16px', // 标准图标尺寸\n },\n lg: {\n height: '40px', // 大号输入框高度\n fontSize: global.typography.fontSize.xs, // 12px\n paddingInline: global.spacing.md, // 12px 左右内边距\n iconSize: '18px', // 大号图标尺寸\n },\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n focus: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n disabled: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n error: semantic.colors.state.danger,\n counter: semantic.colors.text.caption,\n },\n borderRadius: global.radii.r3, // 6px - 基础组件圆角\n gap: global.spacing.sm, // 8px - 图标与文字间距(Figma 设计)\n transition: '0.2s ease', // 过渡动画\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SelectTokens } from './tokens.types';\n\nexport const getSelectTokens: TokenGenerator<SelectTokens> = ({ global, semantic }) => ({\n size: {\n sm: {\n height: '24px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '14px',\n },\n md: {\n height: '32px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '16px',\n },\n lg: {\n height: '40px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.md,\n iconSize: '18px',\n },\n },\n border: {\n default: semantic.colors.border.primary,\n hover: semantic.colors.border.strong,\n focus: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n disabled: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surface,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n error: semantic.colors.state.danger,\n },\n borderRadius: global.radii.r3,\n gap: global.spacing.sm,\n transition: '0.2s ease',\n popover: {\n background: semantic.colors.background.surface,\n border: `1px solid ${semantic.colors.border.primary}`,\n borderRadius: global.radii.r3,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n padding: '4px',\n },\n option: {\n height: '32px',\n paddingInline: '8px',\n fontSize: global.typography.fontSize.xs,\n borderRadius: global.radii.r2,\n gap: '8px',\n background: {\n default: 'transparent',\n hover: semantic.colors.background.surfaceSubtle,\n selected: semantic.colors.brand.primarySubtle,\n focused: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n selected: semantic.colors.brand.primary,\n disabled: semantic.colors.text.disabled,\n },\n },\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { NumberFieldTokens } from './tokens.types';\n\nexport const getNumberFieldTokens: TokenGenerator<NumberFieldTokens> = ({ global, semantic }) => ({\n controls: {\n default: 'buttons',\n },\n size: {\n md: {\n height: '24px',\n fontSize: global.typography.fontSize.xs,\n paddingInline: global.spacing.sm,\n },\n lg: {\n height: '32px',\n fontSize: global.typography.fontSize.sm,\n paddingInline: global.spacing.sm,\n },\n },\n input: {\n width: '40px',\n height: '18px',\n paddingInline: global.spacing.sm,\n fontSize: global.typography.fontSize.xs,\n fontWeight: global.typography.fontWeight.regular,\n lineHeight: '18px',\n fontFamily: global.typography.fontFamily,\n },\n control: {\n side: {\n buttonSizeSm: '20px',\n buttonSizeLg: '28px',\n inset: '1px',\n gap: '8px',\n iconSize: '12px',\n widthsm: '100px',\n widthLg: '116px',\n },\n arrows: {\n buttonSizeSm: '10px',\n buttonSizeLg: '14px',\n iconSize: '12px',\n gap: '0px',\n widthsm: '72px',\n widthLg: '80px',\n },\n },\n borderRadius: global.radii.r3,\n border: {\n default: semantic.colors.border.strong,\n hover: semantic.colors.brand.primaryHover,\n disabled: semantic.colors.border.strong,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n disabled: semantic.colors.background.secondary,\n },\n text: {\n default: semantic.colors.text.primary,\n placeholder: semantic.colors.text.placeholder,\n disabled: semantic.colors.text.disabled,\n },\n transition: '0.2s ease',\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { CollapseTokens } from './tokens.types';\n\nexport const getCollapseTokens: TokenGenerator<CollapseTokens> = ({ global, semantic }) => ({\n border: {\n default: semantic.colors.border.primary,\n },\n background: {\n default: semantic.colors.background.surface,\n hover: semantic.colors.background.surfaceSubtle,\n },\n text: {\n default: semantic.colors.text.secondary, // Note: Light used 'rgba(10, 24, 51, 0.6)' (f5), Dark used text.secondary. Assuming text.secondary is correct abstraction.\n title: semantic.colors.text.primary, // Light: 'rgba(10, 24, 51, 0.7)' (f4), Dark: text.primary.\n },\n divider: semantic.colors.border.primary,\n arrow: {\n default: semantic.colors.text.secondary,\n },\n padding: {\n header: '12px 24px',\n content: '0 24px 12px 24px',\n },\n borderRadius: global.radii.r3,\n gap: global.spacing.sm,\n transition: '0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n arrowSize: '16px',\n});\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { TagTokens } from './tokens.types';\n\nexport const getTagTokens: TokenGenerator<TagTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n\n return {\n colors: {\n // 默认颜色(灰色)\n default: {\n background: {\n default: isDark ? 'rgba(148, 163, 184, 0.15)' : global.colors.neutral[100],\n hover: isDark ? 'rgba(148, 163, 184, 0.2)' : global.colors.neutral[200],\n active: isDark ? 'rgba(148, 163, 184, 0.25)' : global.colors.neutral[300],\n checked: semantic.colors.brand.primary,\n checkedHover: semantic.colors.brand.primaryHover,\n checkedActive: semantic.colors.brand.primaryActive,\n },\n text: {\n default: isDark ? global.colors.word[100] : 'rgba(10, 24, 51, 0.7)',\n checked: global.colors.common.white,\n },\n border: {\n default: isDark ? 'rgba(148, 163, 184, 0.28)' : global.colors.neutral[400],\n hover: isDark ? 'rgba(148, 163, 184, 0.38)' : global.colors.neutral[500],\n active: isDark ? 'rgba(148, 163, 184, 0.48)' : global.colors.word[600],\n checked: semantic.colors.brand.primary,\n checkedHover: semantic.colors.brand.primaryHover,\n checkedActive: semantic.colors.brand.primaryActive,\n },\n },\n // 红色 Red\n red: {\n background: {\n default: isDark ? 'rgba(170, 14, 41, 0.12)' : 'rgba(170, 14, 41, 0.08)',\n hover: isDark ? 'rgba(170, 14, 41, 0.16)' : 'rgba(170, 14, 41, 0.12)',\n active: isDark ? 'rgba(170, 14, 41, 0.2)' : 'rgba(170, 14, 41, 0.16)',\n },\n text: {\n default: isDark ? global.colors.red[300] : global.colors.red[700],\n },\n border: {\n default: isDark ? 'rgba(170, 14, 41, 0.3)' : 'rgba(170, 14, 41, 0.25)',\n },\n },\n // 橙色 Orange\n orange: {\n background: {\n default: isDark ? 'rgba(237, 154, 0, 0.12)' : 'rgba(237, 154, 0, 0.08)',\n hover: isDark ? 'rgba(237, 154, 0, 0.16)' : 'rgba(237, 154, 0, 0.12)',\n active: isDark ? 'rgba(237, 154, 0, 0.2)' : 'rgba(237, 154, 0, 0.16)',\n },\n text: {\n default: isDark ? global.colors.orange[300] : global.colors.orange[500],\n },\n border: {\n default: isDark ? 'rgba(237, 154, 0, 0.3)' : 'rgba(237, 154, 0, 0.25)',\n },\n },\n // 黄色 Yellow\n yellow: {\n background: {\n default: isDark ? 'rgba(250, 208, 0, 0.12)' : 'rgba(250, 208, 0, 0.08)',\n hover: isDark ? 'rgba(250, 208, 0, 0.16)' : 'rgba(250, 208, 0, 0.12)',\n active: isDark ? 'rgba(250, 208, 0, 0.2)' : 'rgba(250, 208, 0, 0.16)',\n },\n text: {\n default: isDark ? global.colors.yellow[300] : global.colors.yellow[500],\n },\n border: {\n default: isDark ? 'rgba(250, 208, 0, 0.3)' : 'rgba(250, 208, 0, 0.25)',\n },\n },\n // 绿色 Green\n green: {\n background: {\n default: isDark ? 'rgba(51, 189, 72, 0.12)' : 'rgba(51, 189, 72, 0.08)',\n hover: isDark ? 'rgba(51, 189, 72, 0.16)' : 'rgba(51, 189, 72, 0.12)',\n active: isDark ? 'rgba(51, 189, 72, 0.2)' : 'rgba(51, 189, 72, 0.16)',\n },\n text: {\n default: isDark ? global.colors.green[300] : global.colors.green[500],\n },\n border: {\n default: isDark ? 'rgba(51, 189, 72, 0.3)' : 'rgba(51, 189, 72, 0.25)',\n },\n },\n // 薰衣草色 Lavender\n lavender: {\n background: {\n default: isDark ? 'rgba(99, 79, 214, 0.12)' : 'rgba(99, 79, 214, 0.08)',\n hover: isDark ? 'rgba(99, 79, 214, 0.16)' : 'rgba(99, 79, 214, 0.12)',\n active: isDark ? 'rgba(99, 79, 214, 0.2)' : 'rgba(99, 79, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.lavender[300] : global.colors.lavender[500],\n },\n border: {\n default: isDark ? 'rgba(99, 79, 214, 0.3)' : 'rgba(99, 79, 214, 0.25)',\n },\n },\n // 丁香色 Lilac\n lilac: {\n background: {\n default: isDark ? 'rgba(159, 58, 214, 0.12)' : 'rgba(159, 58, 214, 0.08)',\n hover: isDark ? 'rgba(159, 58, 214, 0.16)' : 'rgba(159, 58, 214, 0.12)',\n active: isDark ? 'rgba(159, 58, 214, 0.2)' : 'rgba(159, 58, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.lilac[300] : global.colors.lilac[500],\n },\n border: {\n default: isDark ? 'rgba(159, 58, 214, 0.3)' : 'rgba(159, 58, 214, 0.25)',\n },\n },\n // 胭脂红 Carmine\n carmine: {\n background: {\n default: isDark ? 'rgba(214, 58, 191, 0.12)' : 'rgba(214, 58, 191, 0.08)',\n hover: isDark ? 'rgba(214, 58, 191, 0.16)' : 'rgba(214, 58, 191, 0.12)',\n active: isDark ? 'rgba(214, 58, 191, 0.2)' : 'rgba(214, 58, 191, 0.16)',\n },\n text: {\n default: isDark ? global.colors.carmine[300] : global.colors.carmine[500],\n },\n border: {\n default: isDark ? 'rgba(214, 58, 191, 0.3)' : 'rgba(214, 58, 191, 0.25)',\n },\n },\n // 玫瑰色 Rose\n rose: {\n background: {\n default: isDark ? 'rgba(229, 30, 100, 0.12)' : 'rgba(229, 30, 100, 0.08)',\n hover: isDark ? 'rgba(229, 30, 100, 0.16)' : 'rgba(229, 30, 100, 0.12)',\n active: isDark ? 'rgba(229, 30, 100, 0.2)' : 'rgba(229, 30, 100, 0.16)',\n },\n text: {\n default: isDark ? global.colors.rose[300] : global.colors.rose[500],\n },\n border: {\n default: isDark ? 'rgba(229, 30, 100, 0.3)' : 'rgba(229, 30, 100, 0.25)',\n },\n },\n // 薄荷色 Mint\n mint: {\n background: {\n default: isDark ? 'rgba(71, 192, 214, 0.12)' : 'rgba(71, 192, 214, 0.08)',\n hover: isDark ? 'rgba(71, 192, 214, 0.16)' : 'rgba(71, 192, 214, 0.12)',\n active: isDark ? 'rgba(71, 192, 214, 0.2)' : 'rgba(71, 192, 214, 0.16)',\n },\n text: {\n default: isDark ? global.colors.mint[300] : global.colors.mint[500],\n },\n border: {\n default: isDark ? 'rgba(71, 192, 214, 0.3)' : 'rgba(71, 192, 214, 0.25)',\n },\n },\n // 橄榄色 Olive\n olive: {\n background: {\n default: isDark ? 'rgba(187, 214, 36, 0.12)' : 'rgba(187, 214, 36, 0.08)',\n hover: isDark ? 'rgba(187, 214, 36, 0.16)' : 'rgba(187, 214, 36, 0.12)',\n active: isDark ? 'rgba(187, 214, 36, 0.2)' : 'rgba(187, 214, 36, 0.16)',\n },\n text: {\n default: isDark ? global.colors.olive[300] : global.colors.olive[500],\n },\n border: {\n default: isDark ? 'rgba(187, 214, 36, 0.3)' : 'rgba(187, 214, 36, 0.25)',\n },\n },\n // 蓝色 Blue\n blue: {\n background: {\n default: isDark ? 'rgba(44, 111, 231, 0.12)' : 'rgba(44, 111, 231, 0.08)',\n hover: isDark ? 'rgba(44, 111, 231, 0.16)' : 'rgba(44, 111, 231, 0.12)',\n active: isDark ? 'rgba(44, 111, 231, 0.2)' : 'rgba(44, 111, 231, 0.16)',\n },\n text: {\n default: semantic.colors.brand.primary,\n },\n border: {\n default: isDark ? 'rgba(44, 111, 231, 0.3)' : 'rgba(44, 111, 231, 0.25)',\n },\n },\n },\n size: {\n sm: {\n height: '18px', // 小号标签高度(Figma 设计)\n fontSize: '10px', // H11-最小标签字号(Figma 设计)\n lineHeight: '16px', // 行高\n paddingInline: global.spacing.sm, // 8px 左右内边距\n gap: global.spacing.xs, // 4px 图标和文字间距\n iconSize: '12px', // 图标尺寸\n closeIconSize: '8px', // 关闭图标尺寸\n },\n md: {\n height: '24px', // 中号标签高度(Figma 设计)\n fontSize: '10px', // H11-最小标签字号(Figma 设计)\n lineHeight: '16px', // 行高\n paddingInline: global.spacing.sm, // 8px 左右内边距\n gap: global.spacing.xs, // 4px 图标和文字间距\n iconSize: '14px', // 图标尺寸\n closeIconSize: '10px', // 关闭图标尺寸\n },\n lg: {\n height: '32px',\n fontSize: global.typography.fontSize.xs, // 12px\n lineHeight: '20px',\n paddingInline: global.spacing.md, // 12px\n gap: global.spacing.sm, // 8px\n iconSize: '16px',\n closeIconSize: '12px',\n },\n },\n fontWeight: global.typography.fontWeight.regular, // 400\n borderRadius: global.radii.r2, // 4px - 最小组件圆角\n transition: '0.2s ease',\n disabled: {\n opacity: 0.5,\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { SkeletonTokens } from './tokens.types';\n\nexport const getSkeletonTokens: TokenGenerator<SkeletonTokens> = ({ global, mode }) => {\n const isDark = mode === 'dark';\n return {\n background: {\n base: isDark ? 'rgba(148, 163, 184, 0.12)' : 'rgba(10, 24, 51, 0.05)',\n highlight: isDark ? 'rgba(148, 163, 184, 0.22)' : 'rgba(10, 24, 51, 0.12)',\n },\n animation: {\n duration: '1.4s',\n easing: 'ease-in-out',\n },\n radius: {\n sm: global.radii.r2,\n md: global.radii.r3,\n lg: global.radii.r4,\n pill: global.radii.r5,\n circle: global.radii.r0,\n },\n block: {\n height: '16px',\n },\n text: {\n lineHeight: '12px',\n gap: global.spacing.sm,\n lastLineWidth: '62%',\n },\n circle: {\n size: '40px',\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { StepperTokens } from './tokens.types';\n\nexport const getStepperTokens: TokenGenerator<StepperTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n return {\n circle: {\n size: {\n md: '32px',\n sm: '24px',\n },\n fontSize: {\n md: global.typography.fontSize.sm,\n sm: global.typography.fontSize.xs,\n },\n iconSize: {\n md: '14px',\n sm: '10px',\n },\n },\n dot: {\n size: {\n md: '10px',\n sm: '8px',\n },\n pulseColor: isDark ? 'rgba(44, 111, 231, 0.35)' : 'rgba(44, 111, 231, 0.25)',\n },\n line: {\n color: {\n default: semantic.colors.border.primary,\n active: semantic.colors.brand.primary,\n },\n size: '1px',\n },\n text: {\n title: {\n color: {\n default: semantic.colors.text.primary,\n active: semantic.colors.brand.primary,\n error: semantic.colors.state.danger,\n waiting: semantic.colors.text.tertiary,\n },\n fontWeight: global.typography.fontWeight.medium,\n fontSize: global.typography.fontSize.sm,\n },\n description: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.xs,\n },\n },\n state: {\n process: {\n color: semantic.colors.brand.primary,\n bg: semantic.colors.brand.primary,\n },\n wait: {\n color: semantic.colors.text.tertiary,\n bg: isDark ? 'rgba(148, 163, 184, 0.2)' : global.colors.neutral[200],\n },\n finish: {\n color: semantic.colors.brand.primary,\n bg: isDark ? 'rgba(44, 111, 231, 0.15)' : semantic.colors.brand.primarySubtle,\n },\n error: {\n color: semantic.colors.state.danger,\n bg: isDark ? 'rgba(170, 14, 41, 0.15)' : semantic.colors.state.dangerSubtle,\n },\n },\n gap: global.spacing.sm,\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { MenuTokens } from './tokens.types';\n\nexport const getMenuTokens: TokenGenerator<MenuTokens> = ({ global, semantic, mode }) => {\n const isDark = mode === 'dark';\n return {\n container: {\n width: {\n expanded: '240px', // 展开宽度(Figma 设计)\n collapsed: '68px', // 折叠宽度(Figma 设计)\n },\n background: isDark ? semantic.colors.background.surface : global.colors.common.white,\n border: `1px solid ${semantic.colors.border.primary}`,\n padding: global.spacing.lg, // 16px 左右内边距\n },\n item: {\n height: '40px', // 菜单项高度(Figma 设计)\n paddingInline: global.spacing.lg, // 16px 左右内边距\n fontSize: global.typography.fontSize.sm, // 14px\n fontWeight: global.typography.fontWeight.regular, // 400\n iconSize: '20px', // 图标尺寸(Figma 设计)\n gap: global.spacing.sm, // 8px 图标和文字间距\n borderRadius: global.radii.r3, // 4px 圆角\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle, // hover 背景\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)', // 选中渐变背景\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.text.primary,\n },\n transition: '0.2s ease',\n },\n subItem: {\n paddingLeft: '20px', // 子菜单左缩进(Figma 设计有4px额外缩进)\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle,\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)',\n },\n },\n group: {\n marginTop: global.spacing.xl, // 24px 分组上边距\n marginBottom: global.spacing.md, // 12px 分组下边距\n gap: global.spacing.xs, // 4px 项目间距\n },\n groupTitle: {\n height: '18px', // 标题高度(Figma 设计)\n fontSize: global.typography.fontSize.xs, // 12px\n fontWeight: global.typography.fontWeight.regular, // 400\n color: semantic.colors.text.secondary, // 辅助文字颜色\n paddingInline: '0',\n marginBottom: global.spacing.sm, // 8px 标题下边距\n },\n scrollbar: {\n width: '8px', // 滚动条宽度(Figma 设计)\n thumbColor: isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.2)', // 滑块颜色\n trackColor: 'transparent', // 轨道颜色\n },\n popover: {\n background: isDark ? semantic.colors.background.surface : global.colors.common.white,\n border: `1px solid ${semantic.colors.border.primary}`,\n borderRadius: global.radii.r4, // 8px 圆角\n boxShadow: isDark ? '0 4px 12px rgba(0, 0, 0, 0.4)' : '0 4px 12px rgba(0, 0, 0, 0.08)', // 悬浮层阴影\n padding: global.spacing.xs, // 4px 内边距\n item: {\n background: {\n default: 'transparent',\n hover: isDark ? semantic.colors.background.surfaceStrong : semantic.colors.background.surfaceSubtle,\n active: isDark ? 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.2) 100%)' \n : 'linear-gradient(90deg, rgba(1, 148, 255, 0) 0%, rgba(1, 148, 255, 0.15) 100%)',\n },\n text: {\n default: semantic.colors.text.primary,\n hover: semantic.colors.text.primary,\n active: semantic.colors.brand.primary,\n },\n },\n },\n };\n};\n\n","import { TokenGenerator } from '../types/theme-utils';\nimport { LinkTokens } from './tokens.types';\n\nexport const getLinkTokens: TokenGenerator<LinkTokens> = ({ semantic }) => {\n return {\n variant: {\n primary: {\n text: {\n default: semantic.colors.brand.primary, // B5 #2c6fe7\n hover: '#2468f2', // Brand B6 (Brighter)\n active: '#2055c6', // Brand Click #2055c6\n disabled: semantic.colors.text.disabled, // F8\n },\n decoration: {\n default: 'none',\n hover: 'none',\n },\n },\n neutral: {\n text: {\n default: semantic.colors.text.primary, // F2 #0a1833e5\n hover: semantic.colors.brand.primary, // B5 #2c6fe7\n active: '#2055c6', // Brand Click\n disabled: semantic.colors.text.disabled,\n },\n decoration: {\n default: 'none',\n hover: 'none',\n },\n },\n },\n size: {\n sm: {\n fontSize: '12px',\n },\n md: {\n fontSize: '14px',\n },\n lg: {\n fontSize: '16px',\n },\n },\n transition: '0.2s ease',\n borderRadius: '4px',\n focusRing: {\n color: semantic.colors.brand.primary,\n offset: '2px',\n },\n };\n};\n","import { TokenGenerator } from '../types/theme-utils';\nimport { TransferTokens } from './tokens.types';\n\n\nexport const getTransferTokens: TokenGenerator<TransferTokens> = ({ global, semantic }) => ({\n // 容器样式\n container: {\n gap: global.spacing.lg,\n },\n // 列表面板样式\n panel: {\n width: '204px',\n height: '240px',\n background: semantic.colors.background.surface,\n border: `1px solid ${semantic.colors.border.neutral}`,\n borderRadius: global.radii.r2,\n },\n // 头部样式\n header: {\n height: '40px',\n padding: '11px 16px',\n fontSize: global.typography.fontSize.xs,\n color: semantic.colors.text.transferHeader,\n background: semantic.colors.background.surfaceSubtle,\n },\n // 列表样式\n list: {\n height: 'calc(100% - 100px)',\n gap: global.spacing.sm,\n padding:'0px 16px 8px 16px',\n },\n // 列表项样式\n item: {\n height: global.spacing.xxl,\n fontSize:global.typography.fontSize.xs,\n borderRadius: global.radii.r2,\n gap: global.spacing.sm,\n padding: `${global.spacing.sm} 0px`,\n text: {\n default: semantic.colors.text.transferHeader,\n selected: semantic.colors.text.primary,\n disabled: semantic.colors.text.disabled,\n },\n checkboxSize: global.spacing.lg,\n },\n // 操作按钮区域\n operations: {\n gap: global.spacing.sm,\n borderRadius: global.radii.r2,\n borderColor: {\n default: semantic.colors.border.neutral,\n disabled: semantic.colors.border.neutral,\n active: semantic.colors.brand.primary,\n },\n backgroundColor: {\n default: semantic.colors.background.surface,\n disabled: global.colors.word[50],\n active: semantic.colors.background.surface,\n },\n width: global.spacing.xxl,\n height: global.spacing.xxl,\n iconSize: global.spacing.lg,\n iconColor: {\n default: global.colors.word[700],\n disabled: semantic.colors.text.transferOperationDisabled,\n active: global.colors.blue[500],\n },\n },\n // 底部样式\n footer: {\n height: global.spacing.xxl,\n paddingInline: global.spacing.sm,\n fontSize: global.typography.fontSize.xs,\n color: semantic.colors.text.secondary,\n borderTop: `1px solid ${semantic.colors.border.divider}`,\n marginTop: global.spacing.md,\n },\n // 空状态\n empty: {\n color: semantic.colors.text.tertiary,\n fontSize: global.typography.fontSize.sm,\n },\n // 搜索框样式\n search: {\n width: '184px',\n iconColor: `${global.colors.word[900]}66`,\n },\n // 过渡动画\n transition: 'all 0.2s ease',\n});\n","/**\n * Modal 组件 Token\n * \n * 基于三层 Token 体系:\n * - Tier 1 (Global): 全局基础值\n * - Tier 2 (Semantic): 语义化映射\n * - Tier 3 (Component): 组件专用 Token\n */\n\nimport { TokenGenerator } from '../types/theme-utils';\nimport { ModalTokens } from './tokens.types';\n\nexport const getModalTokens: TokenGenerator<ModalTokens> = ({ global, semantic, mode }) => ({\n // 尺寸配置\n size: {\n sm: {\n width: '400px',\n maxWidth: '90vw',\n padding: global.spacing.lg, // 16px\n headerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n footerPadding: `${global.spacing.md} ${global.spacing.xl}`, // 12px 24px\n titleFontSize: global.typography.fontSize.md, // 16px\n },\n md: {\n width: '520px',\n maxWidth: '90vw',\n padding: global.spacing.xl, // 24px\n headerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n footerPadding: `${global.spacing.md} ${global.spacing.xl}`, // 12px 24px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n lg: {\n width: '720px',\n maxWidth: '90vw',\n padding: global.spacing.xl, // 24px\n headerPadding: `20px ${global.spacing.xl}`, // 20px 24px\n footerPadding: `${global.spacing.lg} ${global.spacing.xl}`, // 16px 24px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n xl: {\n width: '920px',\n maxWidth: '90vw',\n padding: global.spacing.xxl, // 32px\n headerPadding: `${global.spacing.xl} ${global.spacing.xxl}`, // 24px 32px\n footerPadding: `${global.spacing.lg} ${global.spacing.xxl}`, // 16px 32px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n fullscreen: {\n width: '100vw',\n maxWidth: '100vw',\n padding: global.spacing.xxl, // 32px\n headerPadding: `${global.spacing.xl} ${global.spacing.xxl}`, // 24px 32px\n footerPadding: `${global.spacing.lg} ${global.spacing.xxl}`, // 16px 32px\n titleFontSize: global.typography.fontSize.lg, // 18px\n },\n },\n\n // 遮罩层\n overlay: {\n background: mode === 'light'\n ? 'rgba(10, 24, 51, 0.38)' // 更轻的遮罩(科技、极简)\n : 'rgba(0, 0, 0, 0.55)', // 暗色主题降低厚重感\n backdropFilter: 'blur(4px)', // 轻量毛玻璃\n },\n\n // 容器样式\n container: {\n background: semantic.colors.background.surface,\n borderRadius: global.radii.r5, // 12px - 中型容器圆角\n // 更轻的投影,避免“厚重弹窗感”\n boxShadow: mode === 'light' ? global.shadows.l3 : semantic.shadows.elevation.medium,\n border: mode === 'light'\n ? 'none'\n : `1px solid ${semantic.colors.border.primary}`,\n maxHeight: '85vh',\n },\n\n // 头部样式\n header: {\n background: 'transparent',\n borderBottom: `1px solid ${semantic.colors.border.divider}`,\n minHeight: '56px',\n gap: global.spacing.sm, // 8px\n },\n\n // 标题样式\n title: {\n color: semantic.colors.text.primary,\n fontWeight: global.typography.fontWeight.semibold, // 600\n lineHeight: '1.4',\n },\n\n // 副标题/描述样式\n description: {\n color: semantic.colors.text.secondary,\n fontSize: global.typography.fontSize.sm, // 14px\n lineHeight: '1.5',\n marginTop: global.spacing.xs, // 4px\n },\n\n // 关闭按钮\n closeButton: {\n size: '32px',\n iconSize: '16px',\n color: semantic.colors.text.tertiary,\n hoverColor: semantic.colors.text.primary,\n hoverBackground: semantic.colors.background.surfaceStrong,\n borderRadius: global.radii.r3, // 6px\n },\n\n // 内容区域\n content: {\n color: semantic.colors.text.primary,\n fontSize: global.typography.fontSize.sm, // 14px\n lineHeight: '1.6',\n maxHeight: 'calc(85vh - 160px)', // 减去头部和底部高度\n },\n\n // 底部样式\n footer: {\n background: 'transparent',\n borderTop: `1px solid ${semantic.colors.border.divider}`,\n minHeight: '56px',\n gap: global.spacing.sm, // 8px\n justifyContent: 'flex-end',\n },\n\n // 动画配置\n animation: {\n duration: '0.22s',\n easing: 'cubic-bezier(0.22, 0.61, 0.36, 1)', // 更克制的科技曲线\n scaleFrom: '0.95',\n scaleTo: '1',\n },\n\n // 层级\n zIndex: {\n overlay: 1000,\n container: 1001,\n },\n\n // 过渡\n transition: '0.2s ease',\n});\n\n\n","/**\n * Tooltip 组件 Token\n *\n * 基于三层 Token 体系:\n * - Tier 1 (Global): 全局基础值\n * - Tier 2 (Semantic): 语义化映射\n * - Tier 3 (Component): 组件专用 Token\n */\n\nimport { TokenGenerator } from '../types/theme-utils'\nimport { TooltipTokens } from './tokens.types'\n\nexport const getTooltipTokens: TokenGenerator<TooltipTokens> = ({ global, mode }) => ({\n // 背景与文字\n background: mode === 'light' \n ? 'rgba(10, 24, 51, 0.9)' \n : 'rgba(15, 23, 42, 0.95)', // 深色模式使用深色背景\n color: mode === 'light' \n ? '#ffffff' \n : 'rgba(248, 250, 252, 0.95)', // 深色模式使用浅色文字\n \n // 边框与阴影\n borderRadius: global.radii.r3,\n boxShadow: mode === 'light'\n ? '0 4px 12px rgba(0, 0, 0, 0.15)'\n : '0 4px 16px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(148, 163, 184, 0.15)', // 深色模式增强阴影并添加细微边框\n \n // 尺寸\n padding: `${global.spacing.xs} ${global.spacing.sm}`,\n maxWidth: '280px',\n \n // 文字\n fontSize: global.typography.fontSize.sm,\n lineHeight: '1.5',\n \n // 箭头\n arrow: {\n size: '8px',\n },\n \n // 动画\n animation: {\n duration: '0.15s',\n easing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n },\n \n // 层级\n zIndex: 1100,\n})\n","import { TokenGenerator } from '../types/theme-utils'\nimport { SliderTokens } from './tokens.types'\n\nexport const getSliderTokens: TokenGenerator<SliderTokens> = ({ global, semantic }) => ({\n track: {\n background: {\n default: semantic.colors.background.surfaceStrong,\n disabled: semantic.colors.border.primary,\n },\n border: {\n default: 'transparent',\n },\n height: {\n sm: '4px',\n md: '6px',\n lg: '8px',\n },\n },\n\n fill: {\n background: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n disabled: semantic.colors.text.disabled,\n },\n },\n\n thumb: {\n background: {\n default: global.colors.common.white,\n hover: global.colors.common.white,\n active: global.colors.common.white,\n disabled: semantic.colors.background.surfaceSubtle,\n },\n border: {\n default: semantic.colors.brand.primary,\n hover: semantic.colors.brand.primaryHover,\n active: semantic.colors.brand.primaryActive,\n disabled: semantic.colors.text.disabled,\n },\n shadow: {\n default: global.shadows.l1,\n hover: global.shadows.l2,\n active: global.shadows.l1,\n },\n size: {\n sm: '12px',\n md: '16px',\n lg: '20px',\n },\n },\n\n label: {\n color: {\n default: semantic.colors.text.primary,\n disabled: semantic.colors.text.disabled,\n },\n fontSize: global.typography.fontSize.sm,\n fontWeight: global.typography.fontWeight.regular,\n },\n\n value: {\n color: {\n default: semantic.colors.text.secondary,\n disabled: semantic.colors.text.disabled,\n },\n fontSize: global.typography.fontSize.sm,\n },\n\n mark: {\n dot: {\n size: '6px',\n background: {\n default: semantic.colors.border.strong,\n active: semantic.colors.brand.primary,\n },\n },\n label: {\n color: {\n default: semantic.colors.text.tertiary,\n active: semantic.colors.text.primary,\n },\n fontSize: global.typography.fontSize.xs,\n },\n },\n\n tooltip: {\n background: semantic.colors.text.primary,\n text: semantic.colors.text.inverse,\n fontSize: global.typography.fontSize.xs,\n borderRadius: global.radii.r2,\n padding: `${global.spacing.xs} ${global.spacing.sm}`,\n shadow: global.shadows.l2,\n },\n\n focusRing: {\n color: 'rgba(44, 111, 231, 0.35)',\n width: '2px',\n offset: '2px',\n },\n\n borderRadius: global.radii.r0, // 50% 圆形\n transition: '0.2s ease',\n disabledOpacity: 0.6,\n})\n","import {\n AppTheme,\n globalColors,\n globalSpacing,\n globalRadii,\n globalTypography,\n globalShadows,\n globalGradients,\n lightSemantic,\n darkSemantic,\n SemanticColors,\n SemanticSpacing,\n SemanticBorderRadius,\n SemanticTypography,\n SemanticShadows,\n} from '@kingsoft-ai/theme';\nimport { ThemeContext, ComponentTokens } from './types';\n\nimport { getButtonTokens, getIconButtonTokens } from './button/tokens';\nimport { getFloatButtonTokens } from './floatButton/tokens';\nimport { getCheckboxTokens } from './checkbox/tokens';\nimport { getRadioTokens } from './radio/tokens';\nimport { getSwitchTokens } from './switch/tokens';\nimport { getInputTokens } from './input/tokens';\nimport { getSelectTokens } from './select/tokens';\nimport { getNumberFieldTokens } from './numberInput/tokens';\nimport { getCollapseTokens } from './collapse/tokens';\nimport { getTagTokens } from './tag/tokens';\nimport { getSkeletonTokens } from './skeleton/tokens';\nimport { getStepperTokens } from './stepper/tokens';\nimport { getMenuTokens } from './menu/tokens';\nimport { getLinkTokens } from './link/tokens';\nimport { getTransferTokens } from './transfer/tokens';\nimport { getModalTokens } from './modal/tokens';\nimport { getCardTokens } from './card/tokens';\nimport { getTooltipTokens } from './tooltip/tokens';\nimport { getSliderTokens } from './slider/tokens';\n\nexport const createComponentTokens = (context: ThemeContext): ComponentTokens => ({\n button: getButtonTokens(context),\n floatButton: getFloatButtonTokens(context),\n iconButton: getIconButtonTokens(context),\n checkbox: getCheckboxTokens(context),\n radio: getRadioTokens(context),\n switch: getSwitchTokens(context),\n input: getInputTokens(context),\n select: getSelectTokens(context),\n numberfield: getNumberFieldTokens(context),\n collapse: getCollapseTokens(context),\n tag: getTagTokens(context),\n skeleton: getSkeletonTokens(context),\n stepper: getStepperTokens(context),\n menu: getMenuTokens(context),\n link: getLinkTokens(context),\n transfer: getTransferTokens(context),\n modal: getModalTokens(context),\n card: getCardTokens(context),\n tooltip: getTooltipTokens(context),\n slider: getSliderTokens(context),\n});\n\ninterface SemanticTheme {\n colors: SemanticColors;\n spacing: SemanticSpacing;\n borderRadius: SemanticBorderRadius;\n typography: SemanticTypography;\n shadows: SemanticShadows;\n}\n\nexport const createDesignTheme = (\n semantic: SemanticTheme,\n mode: 'light' | 'dark' = 'light'\n): AppTheme => {\n const global = {\n colors: globalColors,\n spacing: globalSpacing,\n radii: globalRadii,\n typography: globalTypography,\n shadows: globalShadows,\n gradients: globalGradients,\n };\n\n const context: ThemeContext = {\n global,\n semantic,\n mode,\n };\n\n return {\n global,\n semantic,\n components: createComponentTokens(context),\n };\n};\n\nexport const defaultLightDesignTheme = createDesignTheme(lightSemantic, 'light');\nexport const defaultDarkDesignTheme = createDesignTheme(darkSemantic, 'dark');\n\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","'use client'\n\n/**\n * Design 组件的主题提供者\n * \n * 功能:\n * 1. 自动导入 CSS tokens(兜底 - 确保即使只导入 Provider 也有样式)\n * 2. 设置 data-theme 属性以支持主题切换(light/dark)\n * 3. 支持通过 theme prop 覆盖默认主题(JS Token 方案)\n * \n * 样式解析策略:\n * - 不传 theme prop:使用 CSS 变量,通过 data-theme 属性切换 light/dark\n * - 传 theme prop:使用 JS Token,组件样式由 theme 对象决定\n * \n * 这种设计让用户可以选择:\n * - 只需要 light/dark 切换 → 只传 mode,享受 CSS 变量的性能优势\n * - 需要深度自定义 → 传 theme,获得完整的 JS Token 能力\n */\n\nimport type { ReactNode } from 'react'\nimport { useMemo, useEffect } from 'react'\nimport { ThemeProvider } from '@kingsoft-ai/theme'\nimport { defaultLightDesignTheme, defaultDarkDesignTheme } from './theme'\nimport type { AppTheme } from '@kingsoft-ai/theme'\nimport type { DeepPartial } from './types/theme-utils'\nimport deepmerge from 'deepmerge'\nimport { OverlayProvider } from 'react-aria'\n\n// 兜底导入 tokens - 确保即使只导入 Provider 也有样式\nimport './tokens/index.css'\n\nexport interface DesignThemeProviderProps {\n /** 子组件 */\n children: ReactNode\n /** \n * 主题模式\n * @default 'light'\n */\n mode?: 'light' | 'dark'\n /**\n * 自定义主题对象(可选)\n * \n * **重要:这个 prop 决定了样式解析策略**\n * \n * - **不传 theme**:使用 CSS 变量方案\n * - 组件样式通过 CSS 变量解析\n * - light/dark 切换通过 `data-theme` 属性实现\n * - 性能更好,支持在元素上直接覆盖 CSS 变量\n * \n * - **传 theme**:使用 JS Token 方案\n * - 组件样式通过 JavaScript theme 对象解析\n * - 支持完整的主题自定义能力\n * - 会与默认主题进行深度合并\n * \n * @example\n * ```tsx\n * // 只需要 light/dark 切换(推荐大多数场景)\n * <DesignThemeProvider mode=\"dark\">\n * <Card>使用 CSS 变量的卡片</Card>\n * </DesignThemeProvider>\n * \n * // 需要深度自定义主题\n * <DesignThemeProvider theme={{ components: { card: { container: { radius: '24px' } } } }}>\n * <Card>自定义样式的卡片</Card>\n * </DesignThemeProvider>\n * ```\n */\n theme?: DeepPartial<AppTheme>\n /**\n * 是否设置 document data-theme 属性\n * \n * 默认为 true - Provider 会自动设置 document.documentElement 的 data-theme\n * 设为 false 时,Provider 不会修改全局 data-theme,适用于局部主题\n * \n * @default true\n */\n setDocumentTheme?: boolean\n /**\n * 作为 CSS 变量作用域的容器\n * \n * 默认为 undefined - CSS 变量覆盖会应用到内联 style\n * 可以传入 'root' 使覆盖应用到 document.documentElement\n * \n * @default undefined\n */\n cssVarsScope?: 'root' | undefined\n}\n\n/**\n * 将 theme 对象中的语义化颜色映射为 CSS 变量覆盖\n * \n * 仅处理与默认值不同的部分,避免不必要的覆盖\n */\nconst buildCSSVarsOverride = (\n theme: Partial<AppTheme> | undefined,\n baseTheme: AppTheme\n): Record<string, string> => {\n if (!theme) return {}\n \n const vars: Record<string, string> = {}\n \n // 映射语义化颜色到 CSS 变量\n if (theme.semantic?.colors) {\n const { colors } = theme.semantic\n \n // Brand colors\n if (colors.brand?.primary !== baseTheme.semantic.colors.brand.primary) {\n vars['--ksd-brand-primary'] = colors.brand.primary\n }\n if (colors.brand?.primaryHover !== baseTheme.semantic.colors.brand.primaryHover) {\n vars['--ksd-brand-primary-hover'] = colors.brand.primaryHover\n }\n if (colors.brand?.primaryActive !== baseTheme.semantic.colors.brand.primaryActive) {\n vars['--ksd-brand-primary-active'] = colors.brand.primaryActive\n }\n if (colors.brand?.primarySubtle !== baseTheme.semantic.colors.brand.primarySubtle) {\n vars['--ksd-brand-primary-subtle'] = colors.brand.primarySubtle\n }\n \n // Text colors\n if (colors.text?.primary !== baseTheme.semantic.colors.text.primary) {\n vars['--ksd-text-primary'] = colors.text.primary\n }\n if (colors.text?.secondary !== baseTheme.semantic.colors.text.secondary) {\n vars['--ksd-text-secondary'] = colors.text.secondary\n }\n if (colors.text?.tertiary !== baseTheme.semantic.colors.text.tertiary) {\n vars['--ksd-text-tertiary'] = colors.text.tertiary\n }\n if (colors.text?.disabled !== baseTheme.semantic.colors.text.disabled) {\n vars['--ksd-text-disabled'] = colors.text.disabled\n }\n if (colors.text?.placeholder !== baseTheme.semantic.colors.text.placeholder) {\n vars['--ksd-text-placeholder'] = colors.text.placeholder\n }\n \n // Background colors\n if (colors.background?.primary !== baseTheme.semantic.colors.background.primary) {\n vars['--ksd-background-primary'] = colors.background.primary\n }\n if (colors.background?.surface !== baseTheme.semantic.colors.background.surface) {\n vars['--ksd-background-surface'] = colors.background.surface\n }\n if (colors.background?.secondary !== baseTheme.semantic.colors.background.secondary) {\n vars['--ksd-background-secondary'] = colors.background.secondary\n }\n \n // Border colors\n if (colors.border?.primary !== baseTheme.semantic.colors.border.primary) {\n vars['--ksd-border-primary'] = colors.border.primary\n }\n if (colors.border?.strong !== baseTheme.semantic.colors.border.strong) {\n vars['--ksd-border-strong'] = colors.border.strong\n }\n if (colors.border?.divider !== baseTheme.semantic.colors.border.divider) {\n vars['--ksd-border-divider'] = colors.border.divider\n }\n \n // State colors\n if (colors.state?.danger !== baseTheme.semantic.colors.state.danger) {\n vars['--ksd-state-danger'] = colors.state.danger\n }\n if (colors.state?.success !== baseTheme.semantic.colors.state.success) {\n vars['--ksd-state-success'] = colors.state.success\n }\n if (colors.state?.warning !== baseTheme.semantic.colors.state.warning) {\n vars['--ksd-state-warning'] = colors.state.warning\n }\n }\n \n return vars\n}\n\n/**\n * Design 组件主题提供者\n * \n * @example\n * ```tsx\n * // 使用默认亮色主题\n * <DesignThemeProvider>\n * <Button>点击我</Button>\n * </DesignThemeProvider>\n * \n * // 使用暗色主题\n * <DesignThemeProvider mode=\"dark\">\n * <Button>点击我</Button>\n * </DesignThemeProvider>\n * \n * // 使用部分自定义主题(自动与默认主题合并,并映射为 CSS 变量)\n * <DesignThemeProvider theme={{ semantic: { colors: { brand: { primary: '#FF5500' } } } }}>\n * <Button>自定义品牌色的按钮</Button>\n * </DesignThemeProvider>\n * ```\n */\nexport const DesignThemeProvider = ({ \n children, \n mode = 'light',\n theme,\n setDocumentTheme = true,\n cssVarsScope,\n}: DesignThemeProviderProps) => {\n // 根据 mode 选择基础主题\n const baseTheme = mode === 'dark' ? defaultDarkDesignTheme : defaultLightDesignTheme\n \n // ============================================================================\n // 样式解析策略(通过 _useCSSVariables 标记控制)\n // ============================================================================\n // \n // | 场景 | _useCSSVariables | 样式解析策略 |\n // |------------------------|------------------|-------------|\n // | 不传 theme | true | CSS 变量 |\n // | 传 theme | false (显式) | JS Token |\n // | 嵌套 Provider | 内层覆盖外层 | 取决于内层 |\n //\n // 注意:当传了 theme 时,必须显式设置 _useCSSVariables: false\n // 以防止 deepmerge 意外保留外层的标记\n // ============================================================================\n \n const mergedTheme = useMemo(() => {\n if (!theme) {\n // 无自定义 theme:提供带标记的 baseTheme,styled-token 会检测此标记并使用 CSS 变量\n return { ...baseTheme, _useCSSVariables: true as const }\n }\n // 有自定义 theme:使用 JS Token 方案\n // 显式设置 _useCSSVariables: false,确保覆盖外层可能存在的 true 值\n const merged = deepmerge(baseTheme, theme as Partial<AppTheme>)\n return { ...merged, _useCSSVariables: false as const }\n }, [baseTheme, theme])\n \n // 设置 document 的 data-theme 属性(用于 CSS 变量的 light/dark 切换)\n useEffect(() => {\n if (setDocumentTheme) {\n document.documentElement.setAttribute('data-theme', mode)\n }\n // 清理函数:组件卸载时不移除 data-theme,保持最后的状态\n }, [mode, setDocumentTheme])\n \n // 构建 CSS 变量覆盖(仅在有 theme 时)\n const cssVarsOverride = useMemo(() => {\n if (!theme) return {}\n return buildCSSVarsOverride(theme as Partial<AppTheme>, baseTheme)\n }, [theme, baseTheme])\n \n // 如果需要覆盖到 root,使用 useEffect\n useEffect(() => {\n if (cssVarsScope === 'root' && Object.keys(cssVarsOverride).length > 0) {\n const root = document.documentElement\n Object.entries(cssVarsOverride).forEach(([key, value]) => {\n root.style.setProperty(key, value)\n })\n \n // 清理:移除覆盖的变量\n return () => {\n Object.keys(cssVarsOverride).forEach(key => {\n root.style.removeProperty(key)\n })\n }\n }\n }, [cssVarsOverride, cssVarsScope])\n \n // 构建内联样式(用于局部覆盖)\n const wrapperStyle = useMemo(() => {\n if (cssVarsScope === 'root' || Object.keys(cssVarsOverride).length === 0) {\n return { display: 'contents' }\n }\n return {\n display: 'contents',\n ...cssVarsOverride,\n }\n }, [cssVarsOverride, cssVarsScope])\n \n return (\n <ThemeProvider theme={mergedTheme}>\n <OverlayProvider style={wrapperStyle as React.CSSProperties}>\n {children}\n </OverlayProvider>\n </ThemeProvider>\n )\n}\n"],"names":["shouldUseCSSVar","theme","getByPath","obj","path","acc","key","token","themePath","cssVar","createStyledTokens","tokenMap","tokens","tokenWhen","condition","whenTrue","whenFalse","truePath","trueCss","falsePath","falseCss","css","themeValue","fallback","$button","$iconButton","buttonVariants","buttonSizes","getVariantStyles","variant","props","variantMap","getSizeStyles","size","sizeMap","ButtonRoot","styled","ButtonContent","IconWrapper","Label","VARIANTS","SIZES","Button","forwardRef","icon","loading","fullWidth","disabled","isDisabled","className","style","children","ariaProps","forwardedRef","innerRef","useRef","ref","finalDisabled","buttonProps","isPressed","useButton","jsx","mergeProps","iconButtonAppearances","iconButtonTones","iconButtonSizes","appearance","tone","varKey","IconButtonRoot","IconSlot","LoadingSpinner","ICON_BUTTON_APPEARANCES","ICON_BUTTON_TONES","ICON_BUTTON_SIZES","IconButton","label","loadingLabel","isDevEnvironment","useMemo","_b","_a","ariaLabel","ariaLabelledby","jsxs","VisuallyHidden","$checkbox","CheckboxContainer","CheckboxControl","CheckboxIcon","CheckboxLabel","CheckIconSvg","IndeterminateIconSvg","Checkbox","controlledChecked","defaultChecked","indeterminate","onChange","inputProps","inputRef","hover","setHover","useState","internalChecked","setInternalChecked","isControlled","checked","useEffect","event","newChecked","t","n","l","r","o","d","u","a","C","e","h","L","p","k","i","M","v","m","R","f","O","H","V","y","Z","w","N","g","x","j","B","F","A","S","W","U","_","E","q","checkboxButtonSizeTokens","CheckboxButtonContainer","CheckboxButtonWrapper","sizeToken","CheckboxButtonCheckmark","checkmarkSize","checkmarkIcon","CheckboxButton","handleChange","CheckOutline","$collapse","slideDown","keyframes","slideUp","CollapseRoot","CollapseItemWrapper","CollapseHeader","ArrowWrapper","TitleWrapper","TitleText","SuffixWrapper","CollapseContentWrapper","CollapseContentInner","ContentText","Collapse","activeKeyProp","defaultActiveKey","accordion","internalActiveKey","setInternalActiveKey","activeKey","activeKeys","itemKey","expanded","newActiveKey","currentKeys","items","Children","isValidElement","itemCount","child","index","last","cloneElement","CollapseItem","title","suffix","contentRef","contentHeight","setContentHeight","handleToggle","ChevronDownOutline","$floatButton","floatButtonTypes","floatButtonShapes","getTypeStyles","buttonType","getShapeStyles","shape","buttonSize","FloatButtonRoot","FloatButtonContent","Description","TooltipWrapper","getTooltipPosition","placement","TooltipCard","$color","$placement","getArrowPosition","TooltipArrow","TYPES","SHAPES","FloatButton","description","tooltip","showTooltip","setShowTooltip","isTooltipConfig","tooltipConfig","tooltipTitle","tooltipColor","tooltipPlacement","hasTooltip","$input","InputRoot","InputWrapper","StyledInput","ClearButton","Counter","CloseIcon","Input","prefix","clearable","error","errorMessage","showCounter","type","value","defaultValue","onFocus","onBlur","maxLength","id","ariaDescribedBy","restProps","generatedId","isFocused","setIsFocused","isHovered","setIsHovered","internalValue","setInternalValue","currentValue","handleFocus","handleBlur","handleClear","nativeInputValueSetter","currentLength","showClearButton","inputId","descriptionId","errorId","describedBy","$menu","MenuContainer","MenuContent","MenuItemContainer","MenuItemIcon","MenuItemLabel","collapsed","MenuItemArrow","MenuGroupContainer","MenuGroupTitle","MenuGroupItems","SubMenuPopoverContainer","SubMenuPopoverContent","SubMenuPopoverItem","Menu","SubMenuPopover","visible","anchorRef","onClose","onMouseEnter","onMouseLeave","popoverRef","position","setPosition","updatePosition","rect","handleClickOutside","timer","createPortal","MenuItem","active","isSubItem","showArrow","arrowExpanded","subMenu","onClick","itemRef","showPopover","setShowPopover","hoverTimerRef","closeTimerRef","clearTimers","handleMouseEnter","handleMouseLeave","Fragment","node","MenuGroup","SubMenuItem","$link","LinkRoot","Link","linkProps","useLink","$modal","fadeIn","dialogIn","ModalPortalRoot","ModalBackdrop","ModalDialog","ModalDialogHeader","ModalDialogTitle","ModalCloseButton","ModalDialogBody","DefaultCloseIcon","setRef","Modal","open","onOpenChange","hideHeader","isDismissable","closeOnEsc","closeOnOverlay","closeOnOutside","shouldCloseOnInteractOutside","portalContainer","overlayClassName","overlayStyle","dialogClassName","dialogStyle","closeButtonClassName","closeButtonStyle","dialogRef","titleId","useId","requestClose","useCallback","_reason","mountContainer","usePreventScroll","allowUserDismiss","allowEsc","allowOutside","overlayProps","underlayProps","useOverlay","modalProps","useModal","dialogProps","titleProps","useDialog","handleCloseButton","mergedDialogProps","backdropProps","onPointerDown","onMouseDown","rest","content","FocusScope","$numberInput","NumberRoot","NumberGroup","NumberField","ArrowGroup","ArrowButton","SideButton","PlusIcon","PlusOutline","MinusIcon","MinusOutline","UpIcon","ChevronUpOutline","DownIcon","NumberInput","min","max","step","onValueChange","onChangeValue","controls","internal","setInternal","clamp","next","triggerValueChange","setValue","nativeSetter","ev","handleInputChange","raw","parsed","final","increment","decrement","handleKeyDown","atMin","atMax","$radio","RadioWrapper","RadioRoot","RadioNative","RadioIndicator","RadioText","RadioLabel","RadioDescription","Radio","isFocusVisible","setIsFocusVisible","isChecked","$skeleton","shimmerKeyframes","getShimmerAnimation","getRadius","radius","SkeletonRoot","SkeletonStack","SkeletonLine","skeletonVariants","skeletonRadii","toCssSize","Skeleton","width","height","lines","animate","loaded","resolvedWidth","resolvedHeight","lineCount","shouldRenderStack","accessibilityProps","$stepper","ringPop","StepperRoot","orientation","StepRoot","StepIconContainer","StepContent","labelPlacement","StepTitle","StepDescription","StepConnector","iconSizeVar","Stepper","steps","stepProps","status","Step","renderIcon","CloseOutline","resolvedLabelPlacement","iconContent","showVerticalLine","showHorizontalLine","$progress","progressTypes","progressSizes","progressStatuses","getStatusColor","LineProgressRoot","LineProgressTrack","LineProgressBar","ProgressText","StatusIcon","LineProgressInfo","CircleProgressRoot","CircleProgressSvg","CircleProgressTrack","CircleProgressBar","CircleProgressContent","CircleProgressIcon","STATUSES","SuccessIcon","ErrorIcon","WarningIcon","getStatusIcon","Progress","showPercent","showIcon","percent","progressBarProps","labelProps","useProgressBar","shouldShowIcon","getSizeConfig","circleSize","strokeWidth","circumference","strokeDashoffset","showPercentInCircle","$tag","getColorStyles","color","bordered","TagRoot","TagContent","CloseButton","AddButton","Tag","closable","checkable","actualVariant","handleClick","handleClose","TagAdd","$select","selectSizes","isMultiple","SelectWrapper","SelectTrigger","SelectValue","SelectIcon","ListBoxPopup","ListBoxContent","OptionItem","OptionText","OptionIcon","LoadingWrapper","EmptyState","TagsContainer","CheckboxWrapper","Popover","state","offset","triggerRef","triggerWidth","setTriggerWidth","useLayoutEffect","overlayPropsFromUseOverlay","resolvedPlacement","useOverlayPosition","onInteractOutside","target","popover","trigger","Overlay","DismissButton","ListBox","listBoxProps","useListBox","item","Option","optionProps","isSelected","useOption","MultiListBox","SelectInner","selectionMode","placeholder","maxTagCount","selectedKey","defaultSelectedKey","selectedKeys","defaultSelectedKeys","onSelectionChange","options","finalSelectedKey","finalSelectedKeys","finalDefaultSelectedKey","finalDefaultSelectedKeys","handleSelectionChange","keys","renderItems","option","Item","mergedProps","lastPointerTypeRef","singleState","useSelectState","multiState","useListState","multiOpen","setMultiOpen","effectiveOpen","selectedItems","selectedKeySet","visibleTags","overflowCount","triggerProps","valueProps","menuProps","descriptionProps","errorMessageProps","useSelect","handlePressStart","focusWithoutScrolling","handlePress","pointerType","focusStrategy","handleRemoveTag","newKeys","renderTriggerContent","popoverState","HiddenSelect","Select","Section","$table","tableSizes","tableVariants","getTableRadius","sizeKey","getCellPadding","TableContainer","StyledTable","TableHeader","TableHeaderRow","TableHeaderCell","SortIndicator","TableBody","TableRow","TableCell","CheckboxCell","ExpandButton","CellContent","TableInner","columns","dataSource","scroll","selectable","controlledSelectedKeys","expandable","controlledExpandedKeys","onExpandChange","expandedRowRender","sortConfig","onSortChange","onRowClick","emptyText","wrapText","internalSelectedKeys","setInternalSelectedKeys","internalExpandedKeys","setInternalExpandedKeys","isScrollbarVisible","setIsScrollbarVisible","containerRef","scrollHideTimerRef","expandedKeys","handleExpandChange","handleSort","newDirection","allSelected","record","selectedCount","container","handleScroll","renderRows","data","level","isExpanded","hasChildren","mainRow","column","colIndex","isFirstColumn","ChevronRightOutline","expandedRow","childRows","TableWithRef","Table","$switch","switchSizes","SwitchRoot","SwitchContent","SwitchLabel","SwitchThumb","SwitchLabelWrapper","SwitchLabelText","Switch","checkedLabel","uncheckedLabel","defaultSelected","useToggleState","useSwitch","focusProps","useFocusRing","currentLabel","hasInnerLabel","switchElement","$transfer","TransferRoot","TransferPanel","TransferHeader","TransferTitle","TransferCount","TransferSearchWrapper","TransferList","TransferItem","TransferItemLabel","TransferItemContent","TransferItemDeleteButton","TransferOperations","TransferOperationButton","TransferFooter","TransferEmpty","TransferPagination","TransferPaginationInfo","TransferPaginationControls","TransferPaginationButton","direction","showSearch","searchPlaceholder","filterOption","render","onItemSelectChange","showSelectAll","footer","locale","header","onClearAll","clearMode","oneWay","onItemDelete","pagination","searchValue","setSearchValue","currentPage","setCurrentPage","pageSize","setPageSize","filteredData","selectableItems","isPaginationEnabled","paginatedData","startIndex","endIndex","displayData","totalPages","handlePageChange","page","handlePageSizeChange","isAllSelected","isIndeterminate","handleSelectAll","handleItemToggle","renderItem","SearchOutline","StyledTransferList","DeleteOutline","ChevronLeftOutline","Transfer","controlledTargetKeys","defaultTargetKeys","titles","operations","actions","internalTargetKeys","setInternalTargetKeys","targetKeysSet","leftSelectedKeys","setLeftSelectedKeys","rightSelectedKeys","setRightSelectedKeys","leftDataSource","rightDataSource","moveToRight","newTargetKeys","moveKeys","moveToLeft","clearAllLeftData","allLeftKeys","clearAllRightData","handleItemDelete","canMoveToRight","canMoveToLeft","renderActions","left","right","React","action","leftAction","rightAction","$upload","uploadStatuses","getFileItemBg","getFileNameColor","getStatusIconColor","UploadRoot","UploadDropzone","UploadIconWrapper","UploadTextWrapper","UploadMainText","UploadSecondaryText","UploadLink","FileList","FileItem","FileInfoRow","FileIcon","FileName","DeleteButton","ProgressWrapper","ProgressTrack","ProgressBar","HiddenInput","DefaultUploadIcon","FileIconSvg","DeleteIcon","generateUid","Upload","accept","multiple","maxSize","maxCount","controlledFileList","defaultFileList","beforeUpload","customRequest","mainText","secondaryText","fileTypeHint","downloadTemplateText","onDownloadTemplate","dropzoneRef","internalFileList","setInternalFileList","isDragActive","setIsDragActive","fileList","updateFileList","newFileList","handleFiles","files","filesArray","newFiles","file","uploadFile","updatedFileList","simulateUpload","uid","currentFileList","interval","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleDelete","renderStatusIcon","$card","hoverableStyles","CardContainer","CardHeader","CardTitle","CardExtra","CardBody","CardCover","CardFooter","Card","extra","cover","hoverable","bodyPadding","getCardTokens","global","semantic","$tooltip","TooltipContainer","positions","Tooltip","delay","closeDelay","controlledOpen","defaultOpen","internalOpen","setInternalOpen","isOpen","tooltipRef","openTimerRef","updateOpen","nextOpen","handleOpen","hoverProps","useHover","focusWithinProps","useFocusWithin","triggerRect","tooltipRect","scrollX","scrollY","top","handleUpdate","wrapperProps","tooltipContent","$slider","sliderSizes","SliderRoot","SliderHeader","SliderLabel","SliderValue","SliderTrackContainer","SliderTrack","SliderFill","SliderThumb","SliderMarks","SliderMark","SliderMarkDot","SliderMarkLabel","SliderTooltip","Thumb","trackRef","formatValue","thumbProps","isDragging","useSliderThumb","displayValue","shouldShowTooltip","Slider","showValue","marks","useSliderState","groupProps","trackProps","outputProps","useSlider","computedMarks","mid","fillStyle","val","minStr","maxStr","marksList","mark","isActive","getButtonTokens","getIconButtonTokens","getFloatButtonTokens","getCheckboxTokens","getRadioTokens","getSwitchTokens","getInputTokens","getSelectTokens","getNumberFieldTokens","getCollapseTokens","getTagTokens","mode","isDark","getSkeletonTokens","getStepperTokens","getMenuTokens","getLinkTokens","getTransferTokens","getModalTokens","getTooltipTokens","getSliderTokens","createComponentTokens","context","createDesignTheme","globalColors","globalSpacing","globalRadii","globalTypography","globalShadows","globalGradients","defaultLightDesignTheme","lightSemantic","defaultDarkDesignTheme","darkSemantic","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","source","element","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","object","property","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","prev","deepmerge_1","cjs","buildCSSVarsOverride","baseTheme","vars","colors","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","DesignThemeProvider","setDocumentTheme","cssVarsScope","mergedTheme","cssVarsOverride","root","wrapperStyle","ThemeProvider","OverlayProvider"],"mappings":"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","x_google_ignoreList":[100]}