@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.
- package/dist/index.cjs +3150 -2478
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +7430 -6241
- package/dist/index.mjs.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/DesignThemeProvider.d.ts +25 -20
- package/dist/types/button/Button.d.ts +4 -19
- package/dist/types/button/Button.style.d.ts +4 -35
- package/dist/types/button/IconButton.d.ts +4 -5
- package/dist/types/button/IconButton.style.d.ts +4 -7
- package/dist/types/button/styled-tokens.d.ts +582 -0
- package/dist/types/button/tokens.d.ts +1 -1
- package/dist/types/button/tokens.types.d.ts +190 -0
- package/dist/types/card/Card.d.ts +0 -6
- package/dist/types/card/Card.style.d.ts +4 -7
- package/dist/types/card/styled-tokens.d.ts +130 -0
- package/dist/types/card/tokens.d.ts +1 -1
- package/dist/types/card/tokens.types.d.ts +48 -0
- package/dist/types/checkbox/Checkbox.d.ts +0 -7
- package/dist/types/checkbox/Checkbox.style.d.ts +29 -7
- package/dist/types/checkbox/CheckboxButton.d.ts +0 -16
- package/dist/types/checkbox/CheckboxButton.style.d.ts +24 -12
- package/dist/types/checkbox/styled-tokens.d.ts +122 -0
- package/dist/types/checkbox/tokens.d.ts +1 -1
- package/dist/types/checkbox/tokens.types.d.ts +39 -0
- package/dist/types/collapse/Collapse.d.ts +2 -34
- package/dist/types/collapse/Collapse.style.d.ts +4 -43
- package/dist/types/collapse/styled-tokens.d.ts +77 -0
- package/dist/types/collapse/tokens.d.ts +1 -1
- package/dist/types/collapse/tokens.types.d.ts +28 -0
- package/dist/types/context/ThemeContext.d.ts +24 -0
- package/dist/types/context/index.d.ts +2 -0
- package/dist/types/floatButton/FloatButton.d.ts +0 -21
- package/dist/types/floatButton/FloatButton.style.d.ts +0 -31
- package/dist/types/floatButton/styled-tokens.d.ts +127 -0
- package/dist/types/floatButton/tokens.d.ts +1 -1
- package/dist/types/floatButton/tokens.types.d.ts +66 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/input/Input.d.ts +4 -22
- package/dist/types/input/Input.style.d.ts +4 -48
- package/dist/types/input/styled-tokens.d.ts +147 -0
- package/dist/types/input/tokens.d.ts +1 -1
- package/dist/types/input/tokens.types.d.ts +46 -0
- package/dist/types/link/Link.d.ts +4 -0
- package/dist/types/link/Link.style.d.ts +4 -10
- package/dist/types/link/styled-tokens.d.ts +107 -0
- package/dist/types/link/tokens.d.ts +1 -1
- package/dist/types/link/tokens.types.d.ts +39 -0
- package/dist/types/menu/Menu.d.ts +0 -25
- package/dist/types/menu/Menu.style.d.ts +4 -43
- package/dist/types/menu/MenuItem.d.ts +0 -6
- package/dist/types/menu/styled-tokens.d.ts +217 -0
- package/dist/types/menu/tokens.d.ts +1 -1
- package/dist/types/menu/tokens.types.d.ts +79 -0
- package/dist/types/modal/Modal.d.ts +0 -8
- package/dist/types/modal/Modal.style.d.ts +4 -11
- package/dist/types/modal/styled-tokens.d.ts +370 -0
- package/dist/types/modal/tokens.d.ts +1 -1
- package/dist/types/modal/tokens.types.d.ts +107 -0
- package/dist/types/numberInput/NumberInput.d.ts +2 -22
- package/dist/types/numberInput/NumberInput.style.d.ts +4 -7
- package/dist/types/numberInput/styled-tokens.d.ts +192 -0
- package/dist/types/numberInput/tokens.d.ts +1 -1
- package/dist/types/numberInput/tokens.types.d.ts +65 -0
- package/dist/types/progress/Progress.d.ts +4 -27
- package/dist/types/progress/Progress.style.d.ts +4 -43
- package/dist/types/progress/styled-tokens.d.ts +137 -0
- package/dist/types/progress/tokens.d.ts +3 -0
- package/dist/types/progress/tokens.types.d.ts +52 -0
- package/dist/types/radio/Radio.d.ts +4 -0
- package/dist/types/radio/Radio.style.d.ts +9 -28
- package/dist/types/radio/styled-tokens.d.ts +122 -0
- package/dist/types/radio/tokens.d.ts +1 -1
- package/dist/types/radio/tokens.types.d.ts +41 -0
- package/dist/types/select/Select.style.d.ts +4 -7
- package/dist/types/select/styled-tokens.d.ts +237 -0
- package/dist/types/select/tokens.d.ts +1 -1
- package/dist/types/select/tokens.types.d.ts +72 -0
- package/dist/types/skeleton/Skeleton.style.d.ts +0 -25
- package/dist/types/skeleton/styled-tokens.d.ts +82 -0
- package/dist/types/skeleton/tokens.d.ts +1 -1
- package/dist/types/skeleton/tokens.types.d.ts +31 -0
- package/dist/types/slider/Slider.d.ts +74 -0
- package/dist/types/slider/Slider.style.d.ts +125 -0
- package/dist/types/slider/__tests__/Slider.test.d.ts +13 -0
- package/dist/types/slider/index.d.ts +2 -0
- package/dist/types/slider/styled-tokens.d.ts +252 -0
- package/dist/types/slider/tokens.d.ts +3 -0
- package/dist/types/slider/tokens.types.d.ts +121 -0
- package/dist/types/stepper/Stepper.d.ts +3 -0
- package/dist/types/stepper/Stepper.style.d.ts +4 -7
- package/dist/types/stepper/styled-tokens.d.ts +157 -0
- package/dist/types/stepper/tokens.d.ts +1 -1
- package/dist/types/stepper/tokens.types.d.ts +68 -0
- package/dist/types/switch/Switch.d.ts +4 -35
- package/dist/types/switch/Switch.style.d.ts +4 -56
- package/dist/types/switch/styled-tokens.d.ts +132 -0
- package/dist/types/switch/tokens.d.ts +1 -1
- package/dist/types/switch/tokens.types.d.ts +45 -0
- package/dist/types/table/Table.d.ts +2 -0
- package/dist/types/table/Table.style.d.ts +4 -7
- package/dist/types/table/styled-tokens.d.ts +182 -0
- package/dist/types/table/tokens.d.ts +3 -0
- package/dist/types/table/tokens.types.d.ts +43 -0
- package/dist/types/tag/Tag.d.ts +4 -36
- package/dist/types/tag/Tag.style.d.ts +5 -41
- package/dist/types/tag/styled-tokens.d.ts +140 -0
- package/dist/types/tag/tokens.d.ts +1 -1
- package/dist/types/tag/tokens.types.d.ts +76 -0
- package/dist/types/theme.d.ts +1 -2
- package/dist/types/tooltip/Tooltip.d.ts +0 -18
- package/dist/types/tooltip/Tooltip.style.d.ts +0 -19
- package/dist/types/tooltip/styled-tokens.d.ts +72 -0
- package/dist/types/tooltip/tokens.d.ts +1 -1
- package/dist/types/tooltip/tokens.types.d.ts +21 -0
- package/dist/types/transfer/Transfer.d.ts +0 -20
- package/dist/types/transfer/Transfer.style.d.ts +0 -10
- package/dist/types/transfer/styled-tokens.d.ts +252 -0
- package/dist/types/transfer/tokens.d.ts +1 -1
- package/dist/types/transfer/tokens.types.d.ts +79 -0
- package/dist/types/types/index.d.ts +64 -4
- package/dist/types/upload/Upload.d.ts +2 -21
- package/dist/types/upload/Upload.style.d.ts +4 -64
- package/dist/types/upload/styled-tokens.d.ts +227 -0
- package/dist/types/upload/tokens.d.ts +3 -0
- package/dist/types/upload/tokens.types.d.ts +66 -0
- package/dist/types/utils/index.d.ts +4 -0
- package/dist/types/utils/styled-token.d.ts +117 -0
- package/package.json +5 -4
- package/dist/styles.css +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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","o","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","renderChildren","items","Children","isValidElement","itemCount","child","last","cloneElement","CollapseItem","title","suffix","contentRef","setContentHeight","handleToggle","handleKeyDown","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","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","finalIsSelected","finalDefaultSelected","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","renderDefaultHeader","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":"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","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.cjs","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","handleChange","event","newChecked","t","n","l","r","o","d","u","s","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","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","renderChildren","items","Children","isValidElement","itemCount","child","index","last","cloneElement","CollapseItem","title","suffix","contentRef","contentHeight","setContentHeight","handleToggle","handleKeyDown","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","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","finalIsSelected","finalDefaultSelected","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","renderDefaultHeader","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]}
|