aha-components 1.8.3 → 1.8.5
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/Avatar.esm.js +1 -1
- package/dist/Avatar.esm.js.map +1 -1
- package/dist/Avatar.js +1 -1
- package/dist/Avatar.js.map +1 -1
- package/dist/Badge.esm.js +1 -1
- package/dist/Badge.esm.js.map +1 -1
- package/dist/Badge.js +1 -1
- package/dist/Badge.js.map +1 -1
- package/dist/Button.esm.js +1 -1
- package/dist/Button.esm.js.map +1 -1
- package/dist/Button.js +1 -1
- package/dist/Button.js.map +1 -1
- package/dist/Checkbox.esm.js +1 -1
- package/dist/Checkbox.esm.js.map +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/Checkbox.js.map +1 -1
- package/dist/DatePicker.esm.js.map +1 -1
- package/dist/DatePicker.js.map +1 -1
- package/dist/Drawer.esm.js.map +1 -1
- package/dist/Drawer.js.map +1 -1
- package/dist/Form.esm.js.map +1 -1
- package/dist/Form.js.map +1 -1
- package/dist/Input.esm.js +1 -1
- package/dist/Input.esm.js.map +1 -1
- package/dist/Input.js +1 -1
- package/dist/Input.js.map +1 -1
- package/dist/Loading.esm.js +1 -1
- package/dist/Loading.esm.js.map +1 -1
- package/dist/Loading.js +1 -1
- package/dist/Loading.js.map +1 -1
- package/dist/MenuList.esm.js.map +1 -1
- package/dist/MenuList.js.map +1 -1
- package/dist/Pagination.esm.js +1 -1
- package/dist/Pagination.esm.js.map +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/Pagination.js.map +1 -1
- package/dist/Popover.esm.js +1 -1
- package/dist/Popover.esm.js.map +1 -1
- package/dist/Popover.js +1 -1
- package/dist/Popover.js.map +1 -1
- package/dist/Progress.esm.js.map +1 -1
- package/dist/Progress.js.map +1 -1
- package/dist/Radio.esm.js +1 -1
- package/dist/Radio.esm.js.map +1 -1
- package/dist/Radio.js +1 -1
- package/dist/Radio.js.map +1 -1
- package/dist/Select.esm.js.map +1 -1
- package/dist/Select.js.map +1 -1
- package/dist/Switch.esm.js.map +1 -1
- package/dist/Switch.js.map +1 -1
- package/dist/Tab.esm.js.map +1 -1
- package/dist/Tab.js.map +1 -1
- package/dist/Table.esm.js +1 -1
- package/dist/Table.esm.js.map +1 -1
- package/dist/Table.js +1 -1
- package/dist/Table.js.map +1 -1
- package/dist/Tag.esm.js.map +1 -1
- package/dist/Tag.js.map +1 -1
- package/dist/Textarea.esm.js +1 -1
- package/dist/Textarea.esm.js.map +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/Textarea.js.map +1 -1
- package/dist/Toast.esm.js.map +1 -1
- package/dist/Toast.js.map +1 -1
- package/dist/Tooltip.esm.js.map +1 -1
- package/dist/Tooltip.js.map +1 -1
- package/dist/components/Alert/icon.d.ts +5 -5
- package/dist/components/Badge/index.d.ts +2 -1
- package/dist/components/Button/index.d.ts +2 -2
- package/dist/components/Table/index.d.ts +1 -1
- package/dist/components/Toast/icon.d.ts +5 -5
- package/dist/components/shared/badgeColors.d.ts +25 -0
- package/dist/components/shared/buttonStyles.d.ts +18 -0
- package/dist/components/shared/colorUtils.d.ts +6 -0
- package/dist/components/shared/controlStyles.d.ts +27 -0
- package/dist/components/shared/fieldStyles.d.ts +37 -0
- package/dist/index.css +3848 -0
- package/dist/index.d.ts +29 -5
- package/dist/index.esm.css +3848 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tokens.d.ts +14 -14
- package/package.json +1 -1
package/dist/Table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/components/Button/index.tsx","../src/components/Input/InputGroup.tsx","../src/components/Input/index.tsx","../src/components/Select/index.tsx","../src/icons/index.tsx","../src/components/Pagination/index.tsx","../src/components/Checkbox/index.tsx","../src/components/Table/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { createContext, useContext, useMemo } from 'react';\n\nexport interface ThemeConfig {\n primaryColor?: string;\n}\n\nconst defaultTheme: ThemeConfig = {\n primaryColor: '#FB6011',\n};\n\nconst ThemeContext = createContext<ThemeConfig>(defaultTheme);\n\nexport interface ThemeProviderProps {\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n const themeValue = useMemo(() => {\n return {\n ...defaultTheme,\n ...theme,\n };\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={themeValue}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeConfig => {\n const context = useContext(ThemeContext);\n if (!context) {\n // 如果没有 Provider,返回默认主题\n return defaultTheme;\n }\n return context;\n};\n\n// 导出默认主题色,供组件内部使用\nexport const getDefaultPrimaryColor = () => defaultTheme.primaryColor!;\n\n","import React, { useState } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\n\n/**\n * 对齐 Figma: Untitled UI v7 — Buttons\n * 维度:Size × Hierarchy × State × Icon only\n * Size: sm(36) / md(40) / lg(44) / xl(48)\n * Hierarchy: primary / secondary / tertiary / link-color / link-gray\n * State: default / hover / focused / disabled / loading\n * Icon only: boolean\n */\n\nexport type ButtonHierarchy =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'link-color'\n | 'link-gray'\n | 'destructive-primary'\n | 'destructive-secondary'\n | 'destructive-tertiary'\n | 'destructive-link'\n // legacy alias\n | 'default';\n\nexport type ButtonSize =\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n // legacy aliases\n | 'small'\n | 'mediumSmall'\n | 'medium'\n | 'large';\n\nexport type ButtonType = ButtonHierarchy;\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n /** 按钮层级(对应 Figma Hierarchy)。`default` 为 `secondary` 的旧名 */\n type?: ButtonHierarchy;\n /** 按钮尺寸(对应 Figma Size)。旧名会映射到新尺寸 */\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n /** 仅图标按钮。不传 `children`、仅传 `icon` 时自动开启 */\n iconOnly?: boolean;\n /** 受控的 Focused 视觉态,用于 Storybook 预览设计稿;真实键盘焦点由 :focus-visible 处理 */\n focused?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n htmlType?: 'button' | 'submit' | 'reset';\n className?: string;\n style?: React.CSSProperties;\n icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n [key: string]: any;\n}\n\ntype NormalizedSize = 'sm' | 'md' | 'lg' | 'xl';\ntype NormalizedHierarchy = 'primary' | 'secondary' | 'tertiary' | 'link-color' | 'link-gray' | 'destructive-primary' | 'destructive-secondary' | 'destructive-tertiary' | 'destructive-link';\n\nconst SIZE_ALIAS: Record<ButtonSize, NormalizedSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n small: 'sm',\n mediumSmall: 'sm',\n medium: 'md',\n large: 'xl',\n};\n\nconst HIERARCHY_ALIAS: Record<ButtonHierarchy, NormalizedHierarchy> = {\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'tertiary',\n 'link-color': 'link-color',\n 'link-gray': 'link-gray',\n 'destructive-primary': 'destructive-primary',\n 'destructive-secondary': 'destructive-secondary',\n 'destructive-tertiary': 'destructive-tertiary',\n 'destructive-link': 'destructive-link',\n default: 'secondary',\n};\n\n/** Figma 标注的尺寸参数:高度、内边距、字号/行高、图标尺寸、间距 */\nconst SIZE_TOKENS: Record<\n NormalizedSize,\n {\n height: number;\n paddingX: number;\n paddingXLg: number; // lg/xl 大号内边距(与图标拼接时稍大)\n fontSize: number;\n lineHeight: number;\n iconSize: number;\n gap: number;\n iconOnlyPad: number;\n }\n> = {\n sm: { height: 36, paddingX: 12, paddingXLg: 12, fontSize: 14, lineHeight: 20, iconSize: 20, gap: 4, iconOnlyPad: 8 },\n md: { height: 40, paddingX: 14, paddingXLg: 14, fontSize: 14, lineHeight: 20, iconSize: 20, gap: 4, iconOnlyPad: 10 },\n lg: { height: 44, paddingX: 16, paddingXLg: 16, fontSize: 16, lineHeight: 24, iconSize: 20, gap: 6, iconOnlyPad: 12 },\n xl: { height: 48, paddingX: 18, paddingXLg: 18, fontSize: 16, lineHeight: 24, iconSize: 20, gap: 6, iconOnlyPad: 14 },\n};\n\nconst LoadingSpinner: React.FC<{ size: number; color: string }> = ({ size, color }) => (\n <>\n <style>{`@keyframes aha-button-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}`}</style>\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden\n style={{ animation: 'aha-button-spin 1s linear infinite', flexShrink: 0 }}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeWidth=\"2\" opacity=\"0.25\" />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </>\n);\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n type = 'secondary',\n size = 'md',\n disabled = false,\n loading = false,\n iconOnly,\n focused = false,\n onClick,\n htmlType = 'button',\n className = '',\n style,\n icon,\n iconPosition = 'left',\n ...rest\n}) => {\n const { primaryColor } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const hierarchy = HIERARCHY_ALIAS[type] || 'secondary';\n const s = SIZE_TOKENS[SIZE_ALIAS[size] || 'md'];\n\n const isIconOnly = iconOnly ?? (!!icon && children == null);\n const isLink = hierarchy === 'link-color' || hierarchy === 'link-gray' || hierarchy === 'destructive-link';\n const isDisabled = disabled || loading;\n const showFocusRing = focused;\n\n const themeBrand = primaryColor; // 允许 ThemeProvider 覆盖主色\n\n /** 根据 hierarchy+state 计算视觉 token */\n const getVisuals = (): {\n bg: string;\n color: string;\n iconColor: string;\n border: string;\n boxShadow: string;\n textDecoration?: string;\n } => {\n // Disabled — 所有层级共享一套「灰态」,但 link/tertiary 无边框/阴影\n if (disabled) {\n if (hierarchy === 'primary' || hierarchy === 'secondary' || hierarchy === 'destructive-primary' || hierarchy === 'destructive-secondary') {\n return {\n bg: 'var(--color-bg-disabled, #f5f5f4)',\n color: 'var(--color-fg-disabled, #a9a29d)',\n iconColor: 'var(--color-fg-disabled, #a9a29d)',\n border: '1px solid var(--color-border-disabled_subtle, #e7e5e4)',\n boxShadow: 'none',\n };\n }\n return {\n bg: 'transparent',\n color: 'var(--color-fg-disabled, #a9a29d)',\n iconColor: 'var(--color-fg-disabled, #a9a29d)',\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n const interactive = isHovered || isPressed;\n\n if (hierarchy === 'primary') {\n const bg = interactive\n ? 'var(--color-bg-brand-solid_hover, #ec470a)'\n : themeBrand || 'var(--color-bg-brand-solid, #fb6011)';\n return {\n bg,\n color: 'var(--color-text-white, #ffffff)',\n iconColor: 'var(--color-brand-300, #feb073)',\n border: 'none',\n boxShadow: 'var(--shadow-xs-skeuomorphic, 0 1px 2px 0 rgba(10,13,18,.05))',\n };\n }\n\n if (hierarchy === 'secondary') {\n return {\n bg: interactive\n ? 'var(--color-bg-primary_hover, #fafaf9)'\n : 'var(--color-bg-primary, #ffffff)',\n color: interactive\n ? 'var(--color-text-secondary_hover, #292524)'\n : 'var(--color-text-secondary, #44403c)',\n iconColor: interactive\n ? 'var(--color-fg-quaternary_hover, #79716b)'\n : 'var(--color-fg-quaternary, #a9a29d)',\n border: 'none',\n boxShadow: 'var(--shadow-xs-skeuomorphic)',\n };\n }\n\n if (hierarchy === 'tertiary') {\n return {\n bg: interactive ? 'var(--color-bg-primary_hover, #fafaf9)' : 'transparent',\n color: interactive\n ? 'var(--color-text-tertiary_hover, #44403c)'\n : 'var(--color-text-tertiary, #57534e)',\n iconColor: interactive\n ? 'var(--color-fg-quaternary_hover, #79716b)'\n : 'var(--color-fg-quaternary, #a9a29d)',\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n if (hierarchy === 'link-color') {\n return {\n bg: 'transparent',\n color: interactive\n ? 'var(--color-text-brand-secondary_hover, #c4330a)'\n : 'var(--color-text-brand-secondary, #ec470a)',\n iconColor: 'var(--color-fg-brand-secondary_alt, #fb6011)',\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n }\n\n if (hierarchy === 'link-gray') {\n return {\n bg: 'transparent',\n color: interactive\n ? 'var(--color-text-tertiary_hover, #44403c)'\n : 'var(--color-text-tertiary, #57534e)',\n iconColor: 'var(--color-fg-quaternary, #a9a29d)',\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n }\n\n if (hierarchy === 'destructive-primary') {\n return {\n bg: interactive\n ? 'var(--color-error-600)'\n : 'var(--color-error-500)',\n color: 'var(--color-text-white)',\n iconColor: interactive\n ? 'var(--color-error-200)'\n : 'var(--color-error-300)',\n border: 'none',\n boxShadow: 'var(--shadow-xs-skeuomorphic)',\n };\n }\n\n if (hierarchy === 'destructive-secondary') {\n return {\n bg: interactive\n ? 'var(--color-bg-error-primary)'\n : 'var(--color-bg-primary)',\n color: 'var(--color-text-error-primary)',\n iconColor: 'var(--color-fg-error-secondary)',\n border: 'none',\n // 用 error border 色替换 skeuomorphic 中的暗色 inset,保持与 secondary 一致的 shadow 结构\n boxShadow: 'inset 0 0 0 1px var(--color-border-error_subtle), inset 0 -2px 0 0 rgba(10,13,18,0.05), 0 1px 2px 0 rgba(10,13,18,0.05)',\n };\n }\n\n if (hierarchy === 'destructive-tertiary') {\n return {\n bg: interactive ? 'var(--color-bg-error-primary)' : 'transparent',\n color: 'var(--color-text-error-primary)',\n iconColor: 'var(--color-fg-error-secondary)',\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n // destructive-link\n return {\n bg: 'transparent',\n color: interactive\n ? 'var(--color-text-error-primary_hover)'\n : 'var(--color-text-error-primary)',\n iconColor: 'var(--color-fg-error-secondary)',\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n };\n\n const visuals = getVisuals();\n\n /** focus ring: primary/secondary 使用 skeuomorphic 版本叠加基础阴影;其余使用纯环 */\n const focusShadow = (() => {\n if (!showFocusRing) return undefined;\n const isDestructive = hierarchy === 'destructive-primary' || hierarchy === 'destructive-secondary' || hierarchy === 'destructive-tertiary' || hierarchy === 'destructive-link';\n if (isDestructive) {\n if (hierarchy === 'destructive-primary' || hierarchy === 'destructive-secondary') {\n return 'var(--focus-ring-error-shadow-xs-skeuomorphic)';\n }\n return 'var(--focus-ring-error)';\n }\n if (hierarchy === 'primary' || hierarchy === 'secondary') {\n return 'var(--focus-ring-shadow-xs-skeuomorphic, 0 0 0 2px #fff, 0 0 0 4px #fb6011)';\n }\n return 'var(--focus-ring, 0 0 0 2px #fff, 0 0 0 4px #fb6011)';\n })();\n\n const buttonStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: s.gap,\n fontFamily: 'var(--font-family-body, \"DM Sans\", system-ui, sans-serif)',\n fontWeight: 600,\n fontSize: s.fontSize,\n lineHeight: `${s.lineHeight}px`,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition: 'background-color .15s ease, color .15s ease, box-shadow .15s ease',\n userSelect: 'none',\n WebkitTapHighlightColor: 'transparent',\n whiteSpace: 'nowrap',\n backgroundColor: visuals.bg,\n color: visuals.color,\n border: visuals.border,\n boxShadow: focusShadow ?? visuals.boxShadow,\n textDecoration: visuals.textDecoration,\n ...style,\n };\n\n if (isLink) {\n // Link 类:保留与同尺寸按钮一致的高度和横向内边距,无背景、无边框\n buttonStyle.borderRadius = '4px';\n buttonStyle.overflow = 'hidden';\n if (isIconOnly) {\n buttonStyle.width = s.height;\n buttonStyle.height = s.height;\n buttonStyle.padding = 0;\n } else {\n buttonStyle.height = s.height;\n buttonStyle.paddingLeft = s.paddingX;\n buttonStyle.paddingRight = s.paddingX;\n }\n } else {\n buttonStyle.borderRadius = 'var(--radius-md, 8px)';\n if (isIconOnly) {\n buttonStyle.width = s.height;\n buttonStyle.height = s.height;\n buttonStyle.padding = 0;\n } else {\n buttonStyle.height = s.height;\n buttonStyle.paddingLeft = s.paddingX;\n buttonStyle.paddingRight = s.paddingX;\n }\n }\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n const renderIcon = () => {\n if (loading) {\n return <LoadingSpinner size={s.iconSize} color={visuals.iconColor} />;\n }\n if (!icon) return null;\n return (\n <span\n aria-hidden\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: s.iconSize,\n height: s.iconSize,\n color: visuals.iconColor,\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n );\n };\n\n const showLeftIcon = loading || (icon && iconPosition === 'left');\n const showRightIcon = !loading && icon && iconPosition === 'right';\n\n return (\n <button\n type={htmlType}\n className={[\n 'aha-button',\n `aha-button--${hierarchy}`,\n `aha-button--${SIZE_ALIAS[size] || 'md'}`,\n isIconOnly && 'aha-button--icon-only',\n isDisabled && 'aha-button--disabled',\n loading && 'aha-button--loading',\n showFocusRing && 'aha-button--focused',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={isDisabled}\n onClick={handleClick}\n onMouseEnter={() => !isDisabled && setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onMouseDown={() => !isDisabled && setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n style={buttonStyle}\n {...rest}\n >\n {showLeftIcon && renderIcon()}\n {!isIconOnly && children}\n {showRightIcon && renderIcon()}\n {/* icon-only 且没传 icon 时,允许 children 作为图标 */}\n {isIconOnly && !icon && !loading && children}\n </button>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import React, { forwardRef, useRef, useEffect, useState } from 'react';\nimport { InputProps } from './index';\n\nexport interface InputGroupProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n error?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n /** Text addon on the left (e.g. \"https://\") — auto-styled with correct padding */\n leadingText?: React.ReactNode;\n /** Text addon on the right (e.g. \"USD\") — auto-styled with correct padding */\n trailingText?: React.ReactNode;\n /** Raw ReactNode on the left (dropdown, icon button, etc.) — no padding added */\n leadingAddon?: React.ReactNode;\n /** Raw ReactNode on the right (button, select, etc.) — no padding added */\n trailingAddon?: React.ReactNode;\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n required?: boolean;\n hintText?: string;\n}\n\nconst SHADOW_XS = 'var(--shadow-xs)';\n\nconst sizeMap: Record<NonNullable<InputGroupProps['size']>, { pt: string; pb: string }> = {\n small: { pt: '5px', pb: '5px' },\n mediumSmall: { pt: '7px', pb: '7px' },\n medium: { pt: '9px', pb: '9px' },\n large: { pt: '11px', pb: '11px' },\n};\n\nconst InputGroup = forwardRef<HTMLInputElement, InputGroupProps>(({\n size = 'mediumSmall',\n error = false,\n disabled = false,\n readOnly = false,\n prefix,\n suffix,\n leadingText,\n trailingText,\n leadingAddon,\n trailingAddon,\n className = '',\n style,\n onFocus,\n onBlur,\n onKeyDown,\n onPressEnter,\n value,\n defaultValue,\n onChange,\n placeholder,\n type = 'text',\n label,\n required,\n hintText,\n ...restProps\n}, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n\n useEffect(() => {\n if (typeof ref === 'function') ref(inputRef.current);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = inputRef.current;\n }, [ref]);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && onPressEnter) onPressEnter(e);\n onKeyDown?.(e);\n };\n\n const getFocusStyles = (): React.CSSProperties => {\n if (disabled) return { border: '1px solid var(--color-border-disabled)', boxShadow: SHADOW_XS, outline: 'none' };\n if (error && focused) return { border: '1px solid var(--color-border-error)', boxShadow: SHADOW_XS, outline: '2px solid var(--color-border-error)', outlineOffset: '-2px' };\n if (error) return { border: '1px solid var(--color-border-error_subtle)', boxShadow: SHADOW_XS, outline: 'none' };\n if (focused) return { border: '1px solid var(--color-border-brand)', boxShadow: SHADOW_XS, outline: '2px solid var(--color-border-brand)', outlineOffset: '-2px' };\n return { border: '1px solid var(--color-border-primary)', boxShadow: SHADOW_XS, outline: 'none' };\n };\n\n const { border, boxShadow, outline, outlineOffset } = getFocusStyles();\n const { pt, pb } = sizeMap[size];\n const dividerColor = disabled ? 'var(--color-border-disabled)' : 'var(--color-border-primary)';\n const iconColor = disabled ? 'var(--color-fg-disabled)' : 'var(--color-fg-quaternary)';\n const hasPrefixIcon = !!prefix;\n const hasSuffixIcon = !!suffix;\n\n const iconSlotStyle: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n color: iconColor,\n zIndex: 1,\n pointerEvents: 'none',\n };\n\n const addonTextStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n paddingTop: pt,\n paddingBottom: pb,\n paddingLeft: '14px',\n paddingRight: '12px',\n color: 'var(--color-text-tertiary)',\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-md)',\n lineHeight: 'var(--line-height-text-md)',\n whiteSpace: 'nowrap',\n flexShrink: 0,\n backgroundColor: disabled ? 'var(--color-bg-disabled_subtle)' : 'transparent',\n };\n\n const groupEl = (\n <div\n className={`aha-input-group ${className}`}\n style={{\n display: 'flex',\n alignItems: 'stretch',\n width: '100%',\n border,\n boxShadow,\n outline,\n outlineOffset,\n borderRadius: 'var(--radius-md)',\n backgroundColor: disabled || readOnly ? 'var(--color-bg-disabled_subtle)' : 'var(--color-bg-primary)',\n overflow: 'hidden',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n ...style,\n }}\n >\n {/* Leading text addon (auto-padded) */}\n {leadingText !== undefined && (\n <div style={{ ...addonTextStyle, borderRight: `1px solid ${dividerColor}` }}>\n {leadingText}\n </div>\n )}\n {/* Leading raw addon (no auto-padding) */}\n {leadingAddon !== undefined && (\n <div style={{ display: 'flex', alignItems: 'stretch', flexShrink: 0, borderRight: `1px solid ${dividerColor}` }}>\n {leadingAddon}\n </div>\n )}\n\n {/* Input area */}\n <div style={{ flex: 1, position: 'relative', display: 'flex', alignItems: 'stretch', minWidth: 0 }}>\n {hasPrefixIcon && (\n <span style={{ ...iconSlotStyle, left: '14px' }}>{prefix}</span>\n )}\n <input\n ref={inputRef}\n type={type}\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={{\n flex: 1,\n border: 'none',\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-md)',\n fontWeight: 400,\n lineHeight: 'var(--line-height-text-md)',\n backgroundColor: 'transparent',\n color: disabled ? 'var(--color-text-disabled)' : 'var(--color-text-primary)',\n paddingTop: pt,\n paddingBottom: pb,\n paddingLeft: hasPrefixIcon ? '40px' : '14px',\n paddingRight: hasSuffixIcon ? '40px' : '14px',\n }}\n autoComplete={restProps.autoComplete || 'off'}\n {...restProps}\n />\n {hasSuffixIcon && (\n <span style={{ ...iconSlotStyle, right: '14px' }}>{suffix}</span>\n )}\n </div>\n\n {/* Trailing text addon (auto-padded) */}\n {trailingText !== undefined && (\n <div style={{ ...addonTextStyle, paddingLeft: '12px', paddingRight: '14px', borderLeft: `1px solid ${dividerColor}` }}>\n {trailingText}\n </div>\n )}\n {/* Trailing raw addon (no auto-padding) */}\n {trailingAddon !== undefined && (\n <div style={{ display: 'flex', alignItems: 'stretch', flexShrink: 0, borderLeft: `1px solid ${dividerColor}` }}>\n {trailingAddon}\n </div>\n )}\n </div>\n );\n\n if (!label && !hintText) return groupEl;\n\n const labelStyle: React.CSSProperties = {\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-sm)',\n fontWeight: 500,\n lineHeight: '20px',\n color: 'var(--color-text-secondary)',\n };\n\n const hintStyle: React.CSSProperties = {\n margin: 0,\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-sm)',\n fontWeight: 400,\n lineHeight: '20px',\n color: error ? 'var(--color-error-600)' : 'var(--color-text-tertiary)',\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px', width: '100%' }}>\n {label && (\n <label style={labelStyle}>\n {label}\n {required && <span style={{ color: 'var(--color-error-600)', marginLeft: '2px' }}>*</span>}\n </label>\n )}\n {groupEl}\n {hintText && <p style={hintStyle}>{hintText}</p>}\n </div>\n );\n});\n\nInputGroup.displayName = 'InputGroup';\n\nexport default InputGroup;\n","import React, { forwardRef, useRef, useEffect } from 'react';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n disabled?: boolean;\n error?: boolean;\n readOnly?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n allowClear?: boolean;\n onClear?: () => void;\n className?: string;\n style?: React.CSSProperties;\n type?: string;\n placeholder?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n label?: string;\n required?: boolean;\n hintText?: string;\n}\n\n// sm=36px, mediumSmall=40px, md=44px (matches Figma md), lg=48px\n// With box-sizing:border-box: height = 1px border × 2 + paddingTop + 24px lineHeight + paddingBottom\nconst sizeStyles: Record<NonNullable<InputProps['size']>, React.CSSProperties> = {\n small: { height: '36px', paddingTop: '5px', paddingBottom: '5px' },\n mediumSmall: { height: '40px', paddingTop: '7px', paddingBottom: '7px' },\n medium: { height: '44px', paddingTop: '9px', paddingBottom: '9px' },\n large: { height: '48px', paddingTop: '11px', paddingBottom: '11px' },\n};\n\nconst SHADOW_XS = 'var(--shadow-xs)';\n\nconst ClearIcon: React.FC<{ onClick: (e: React.MouseEvent) => void }> = ({ onClick }) => (\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 onClick={onClick}\n style={{ cursor: 'pointer', flexShrink: 0 }}\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\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'mediumSmall',\n disabled = false,\n error = false,\n readOnly = false,\n prefix,\n suffix,\n allowClear = false,\n onClear,\n className = '',\n style,\n type = 'text',\n placeholder,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onPressEnter,\n label,\n required,\n hintText,\n ...restProps\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = React.useState(defaultValue || value || '');\n const [focused, setFocused] = React.useState(false);\n\n useEffect(() => {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = inputRef.current;\n }\n }, [ref]);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && onPressEnter) onPressEnter(e);\n restProps.onKeyDown?.(e);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!isControlled) setInternalValue('');\n const syntheticEvent = {\n target: { value: '' },\n currentTarget: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n onClear?.();\n inputRef.current?.focus();\n };\n\n const showClear = allowClear && currentValue && !disabled;\n\n const getFocusStyles = (): React.CSSProperties => {\n if (disabled) return {\n border: '1px solid var(--color-border-disabled)',\n boxShadow: SHADOW_XS,\n outline: 'none',\n };\n if (error && focused) return {\n border: '1px solid var(--color-border-error)',\n boxShadow: SHADOW_XS,\n outline: '2px solid var(--color-border-error)',\n outlineOffset: '-2px',\n };\n if (error) return {\n border: '1px solid var(--color-border-error_subtle)',\n boxShadow: SHADOW_XS,\n outline: 'none',\n };\n if (focused) return {\n border: '1px solid var(--color-border-brand)',\n boxShadow: SHADOW_XS,\n outline: '2px solid var(--color-border-brand)',\n outlineOffset: '-2px',\n };\n return {\n border: '1px solid var(--color-border-primary)',\n boxShadow: SHADOW_XS,\n outline: 'none',\n };\n };\n\n const { border, boxShadow, outline, outlineOffset } = getFocusStyles();\n const { height, paddingTop, paddingBottom } = sizeStyles[size];\n\n const hasRightContent = suffix || showClear;\n const paddingLeft = prefix ? '40px' : '14px';\n const paddingRight = hasRightContent ? '40px' : '14px';\n\n const baseStyles: React.CSSProperties = {\n width: '100%',\n height,\n boxSizing: 'border-box',\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-md)',\n fontWeight: 400,\n lineHeight: 'var(--line-height-text-md)',\n borderRadius: 'var(--radius-md)',\n border,\n boxShadow,\n backgroundColor:\n disabled || readOnly\n ? 'var(--color-bg-disabled_subtle)'\n : 'var(--color-bg-primary)',\n color: disabled ? 'var(--color-text-disabled)' : 'var(--color-text-primary)',\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease, outline-color 0.15s ease',\n outline,\n outlineOffset,\n WebkitAppearance: 'none',\n MozAppearance: 'textfield',\n appearance: 'none',\n ...style,\n };\n\n const placeholderStyles = `\n .aha-input-wrapper input::placeholder {\n color: var(--color-text-placeholder);\n font-size: var(--font-size-text-md);\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input::-webkit-input-placeholder { color: var(--color-text-placeholder); }\n .aha-input-wrapper input::-moz-placeholder { color: var(--color-text-placeholder); }\n .aha-input-wrapper input:-ms-input-placeholder { color: var(--color-text-placeholder); }\n .aha-input-wrapper input {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\n .aha-input-wrapper input[type=\"number\"]::-webkit-inner-spin-button,\n .aha-input-wrapper input[type=\"number\"]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .aha-input-wrapper input[type=\"number\"] { -moz-appearance: textfield; }\n `;\n\n const iconColor = disabled\n ? 'var(--color-fg-disabled)'\n : 'var(--color-fg-quaternary)';\n\n const iconSlotStyle: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n color: iconColor,\n zIndex: 1,\n };\n\n const inputEl = (\n <>\n <style>{placeholderStyles}</style>\n <div\n className={`aha-input-wrapper ${className}`}\n style={{ position: 'relative', display: 'block', width: '100%' }}\n >\n {prefix && (\n <span style={{ ...iconSlotStyle, left: '14px', pointerEvents: 'none' }}>\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n type={type}\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={baseStyles}\n autoComplete={restProps.autoComplete || 'off'}\n autoCorrect={restProps.autoCorrect || 'off'}\n autoCapitalize={restProps.autoCapitalize || 'off'}\n spellCheck={restProps.spellCheck || false}\n {...restProps}\n />\n {(suffix || showClear) && (\n <span style={{ ...iconSlotStyle, right: '14px', gap: 'var(--spacing-xs)' }}>\n {showClear && <ClearIcon onClick={handleClear} />}\n {suffix}\n </span>\n )}\n </div>\n </>\n );\n\n if (!label && !hintText) return inputEl;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px', width: '100%' }}>\n {label && (\n <label style={{\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-sm)',\n fontWeight: 500,\n lineHeight: '20px',\n color: 'var(--color-text-secondary)',\n }}>\n {label}\n {required && (\n <span style={{ color: 'var(--color-error-600)', marginLeft: '2px' }}>*</span>\n )}\n </label>\n )}\n {inputEl}\n {hintText && (\n <p style={{\n margin: 0,\n fontFamily: 'var(--font-family-body)',\n fontSize: 'var(--font-size-text-sm)',\n fontWeight: 400,\n lineHeight: '20px',\n color: error ? 'var(--color-error-600)' : 'var(--color-text-tertiary)',\n }}>\n {hintText}\n </p>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n\nexport { default as InputGroup } from './InputGroup';\nexport type { InputGroupProps } from './InputGroup';\nexport { default as InputTags } from './InputTags';\nexport type { InputTagsProps } from './InputTags';\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../theme/ThemeContext';\n\nexport interface SelectOption {\n label: React.ReactNode;\n value: string | number;\n disabled?: boolean;\n [key: string]: any;\n}\n\nexport interface SelectProps {\n /** 当前选中的值 */\n value?: string | number | (string | number)[];\n /** 默认选中的值 */\n defaultValue?: string | number | (string | number)[];\n /** 选项数据 */\n options?: SelectOption[];\n /** 是否支持多选 */\n mode?: 'multiple' | 'tags';\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否显示错误状态 */\n error?: boolean;\n /** 占位符 */\n placeholder?: string;\n /** 尺寸 */\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n /** 是否可搜索 */\n showSearch?: boolean;\n /** 搜索过滤函数 */\n filterOption?: boolean | ((input: string, option: SelectOption) => boolean);\n /** 是否允许清除 */\n allowClear?: boolean;\n /** 变化回调 */\n onChange?: (\n value: string | number | (string | number)[],\n option: SelectOption | SelectOption[]\n ) => void;\n /** 选择回调 */\n onSelect?: (value: string | number, option: SelectOption) => void;\n /** 取消选择回调 */\n onDeselect?: (value: string | number, option: SelectOption) => void;\n /** 搜索回调 */\n onSearch?: (value: string) => void;\n /** 聚焦回调 */\n onFocus?: (e: React.FocusEvent) => void;\n /** 失焦回调 */\n onBlur?: (e: React.FocusEvent) => void;\n /** 下拉框打开回调 */\n onDropdownVisibleChange?: (open: boolean) => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 下拉框类名 */\n dropdownClassName?: string;\n /** 下拉框样式 */\n dropdownStyle?: React.CSSProperties;\n /** 是否默认打开 */\n defaultOpen?: boolean;\n /** 是否打开(受控) */\n open?: boolean;\n /** 最大标签数量 */\n maxTagCount?: number | 'responsive';\n /** 标签渲染函数 */\n tagRender?: (props: {\n label: React.ReactNode;\n value: string | number;\n closable: boolean;\n onClose: () => void;\n }) => React.ReactNode;\n /** 选项渲染函数 */\n optionRender?: (option: SelectOption, info: {\n selected: boolean;\n focused: boolean;\n disabled: boolean;\n }) => React.ReactNode;\n}\n\nconst Select: React.FC<SelectProps> = ({\n value: controlledValue,\n defaultValue,\n options = [],\n mode,\n disabled = false,\n error = false,\n placeholder = 'Please select',\n size = 'medium',\n showSearch = false,\n filterOption = true,\n allowClear = false,\n onChange,\n onSelect,\n onDeselect,\n onSearch,\n onFocus,\n onBlur,\n onDropdownVisibleChange,\n className = '',\n style,\n dropdownClassName = '',\n dropdownStyle,\n defaultOpen = false,\n open: controlledOpen,\n maxTagCount,\n tagRender,\n optionRender,\n}) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const [internalValue, setInternalValue] = useState<\n string | number | (string | number)[] | undefined\n >(defaultValue !== undefined ? defaultValue : (mode ? [] : undefined));\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [searchValue, setSearchValue] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n const selectRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [dropdownPosition, setDropdownPosition] = useState<{\n top: number;\n left: number;\n width: number;\n placement: 'top' | 'bottom';\n } | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const isOpenControlled = controlledOpen !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n const isOpen = isOpenControlled ? controlledOpen : internalOpen;\n const isMultiple = mode === 'multiple' || mode === 'tags';\n\n // 获取选中的选项\n const getSelectedOptions = useCallback((): SelectOption[] => {\n if (!currentValue) return [];\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n return options.filter((opt) => values.includes(opt.value));\n }, [currentValue, options]);\n\n // 过滤选项\n const getFilteredOptions = useCallback((): SelectOption[] => {\n if (!showSearch || !searchValue) return options;\n\n if (filterOption === false) return options;\n\n if (typeof filterOption === 'function') {\n return options.filter((opt) => filterOption(searchValue, opt));\n }\n\n // 默认过滤:匹配 label\n return options.filter((opt) => {\n const label = String(opt.label || '').toLowerCase();\n const search = searchValue.toLowerCase();\n return label.includes(search);\n });\n }, [options, searchValue, showSearch, filterOption]);\n\n const filteredOptions = useMemo(() => getFilteredOptions(), [getFilteredOptions]);\n\n // 计算下拉框位置\n useEffect(() => {\n if (isOpen && selectRef.current) {\n const updatePosition = () => {\n if (selectRef.current) {\n const rect = selectRef.current.getBoundingClientRect();\n const estimatedDropdownHeight =\n dropdownRef.current?.offsetHeight ??\n Math.min(256, Math.max(40, filteredOptions.length * 40));\n const gap = 4;\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const shouldOpenUp =\n spaceBelow < estimatedDropdownHeight + gap && spaceAbove > spaceBelow;\n const top = shouldOpenUp\n ? rect.top + window.scrollY - estimatedDropdownHeight - gap\n : rect.bottom + window.scrollY + gap;\n\n setDropdownPosition({\n top,\n left: rect.left + window.scrollX,\n width: rect.width,\n placement: shouldOpenUp ? 'top' : 'bottom',\n });\n }\n };\n\n updatePosition();\n requestAnimationFrame(updatePosition);\n\n // 监听窗口大小变化和滚动,更新位置\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n } else {\n setDropdownPosition(null);\n }\n }, [isOpen, filteredOptions.length]);\n\n // 点击外部关闭(支持鼠标和触摸事件)\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n if (\n selectRef.current &&\n !selectRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n setSearchValue('');\n }\n };\n\n if (isOpen) {\n // 使用 capture 阶段确保能捕获到事件\n document.addEventListener('mousedown', handleClickOutside, true);\n document.addEventListener('touchstart', handleClickOutside, true);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside, true);\n document.removeEventListener('touchstart', handleClickOutside, true);\n };\n }\n }, [isOpen, isOpenControlled, onDropdownVisibleChange]);\n\n // 键盘导航\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n } else if (e.key === 'Enter' && focusedIndex >= 0) {\n e.preventDefault();\n const option = filteredOptions[focusedIndex];\n if (option && !option.disabled) {\n handleSelect(option);\n }\n } else if (e.key === 'Escape') {\n e.preventDefault();\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n selectRef.current?.focus();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, filteredOptions, focusedIndex, isOpenControlled, onDropdownVisibleChange]);\n\n // 滚动到聚焦项\n useEffect(() => {\n if (focusedIndex >= 0 && dropdownRef.current) {\n const items = dropdownRef.current.querySelectorAll('.aha-select-option');\n const focusedItem = items[focusedIndex] as HTMLElement;\n if (focusedItem) {\n focusedItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [focusedIndex]);\n\n const handleSelect = useCallback((option: SelectOption) => {\n if (option.disabled) return;\n\n if (isMultiple) {\n const currentValues = Array.isArray(currentValue) ? currentValue : [];\n const isSelected = currentValues.includes(option.value);\n\n let newValues: (string | number)[];\n if (isSelected) {\n newValues = currentValues.filter((v) => v !== option.value);\n onDeselect?.(option.value, option);\n } else {\n newValues = [...currentValues, option.value];\n onSelect?.(option.value, option);\n }\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n // 计算选中的选项\n const selectedOptions = options.filter((opt) => newValues.includes(opt.value));\n onChange?.(newValues, selectedOptions);\n } else {\n if (!isControlled) {\n setInternalValue(option.value);\n }\n onChange?.(option.value, option);\n onSelect?.(option.value, option);\n\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n setSearchValue('');\n selectRef.current?.focus();\n }\n }, [isMultiple, currentValue, isControlled, isOpenControlled, options, onChange, onSelect, onDeselect, onDropdownVisibleChange]);\n\n const handleRemoveTag = useCallback((e: React.MouseEvent, value: string | number) => {\n e.stopPropagation();\n if (isMultiple && Array.isArray(currentValue)) {\n const newValues = currentValue.filter((v) => v !== value);\n const option = options.find((opt) => opt.value === value);\n if (!isControlled) {\n setInternalValue(newValues);\n }\n onChange?.(newValues, getSelectedOptions());\n onDeselect?.(value, option!);\n }\n }, [isMultiple, currentValue, isControlled, options, onChange, onDeselect, getSelectedOptions]);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n const newValue: string | number | (string | number)[] | undefined = isMultiple ? [] : undefined;\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue as any, []);\n setSearchValue('');\n };\n\n const handleToggle = () => {\n if (disabled) return;\n const newOpen = !isOpen;\n if (!isOpenControlled) {\n setInternalOpen(newOpen);\n }\n onDropdownVisibleChange?.(newOpen);\n if (newOpen && showSearch) {\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n } else {\n setSearchValue('');\n }\n };\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setSearchValue(val);\n onSearch?.(val);\n setFocusedIndex(-1);\n };\n\n const handleFocus = (e: React.FocusEvent) => {\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent) => {\n onBlur?.(e);\n };\n\n // 尺寸样式 - 对齐 Input 组件\n const sizeStyles = {\n small: {\n height: '32px',\n paddingTop: '3px',\n paddingBottom: '3px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n mediumSmall: {\n height: '36px',\n paddingTop: '5px',\n paddingBottom: '5px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n medium: {\n height: '40px',\n paddingTop: '7px',\n paddingBottom: '7px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n large: {\n height: '48px',\n paddingTop: '11px',\n paddingBottom: '11px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n };\n\n const selectedOptions = useMemo(() => getSelectedOptions(), [getSelectedOptions]);\n const showClear = useMemo(() => allowClear && currentValue && !disabled, [allowClear, currentValue, disabled]);\n const hasValue = useMemo(() => \n isMultiple\n ? Array.isArray(currentValue) && currentValue.length > 0\n : currentValue !== undefined && currentValue !== null && currentValue !== '',\n [isMultiple, currentValue]\n );\n\n // 渲染标签 - 使用 useMemo 优化\n const renderTags = useMemo(() => {\n if (!isMultiple || !Array.isArray(currentValue) || currentValue.length === 0) {\n return null;\n }\n\n const tagsToShow =\n maxTagCount === 'responsive'\n ? selectedOptions.slice(0, 2) // 简化处理\n : maxTagCount\n ? selectedOptions.slice(0, maxTagCount)\n : selectedOptions;\n\n const remainingCount =\n maxTagCount && selectedOptions.length > tagsToShow.length\n ? selectedOptions.length - tagsToShow.length\n : 0;\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '4px',\n flex: 1,\n minWidth: 0,\n }}\n >\n {tagsToShow.map((option) => {\n const tagProps = {\n label: option.label,\n value: option.value,\n closable: !disabled,\n onClose: () => handleRemoveTag({} as any, option.value),\n };\n\n if (tagRender) {\n return <React.Fragment key={option.value}>{tagRender(tagProps)}</React.Fragment>;\n }\n\n return (\n <span\n key={option.value}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n backgroundColor: '#F5F5F4',\n borderRadius: '4px',\n fontSize: '12px',\n lineHeight: '18px',\n color: '#101828',\n fontFamily: \"DM Sans, sans-serif\",\n maxWidth: '100%',\n }}\n >\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {option.label}\n </span>\n {!disabled && (\n <span\n onClick={(e) => handleRemoveTag(e, option.value)}\n style={{\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n color: '#78716C',\n marginLeft: '4px',\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 3L3 9M3 3L9 9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )}\n </span>\n );\n })}\n {remainingCount > 0 && (\n <span\n style={{\n fontSize: '12px',\n lineHeight: '18px',\n color: '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n +{remainingCount}\n </span>\n )}\n </div>\n );\n }, [isMultiple, currentValue, selectedOptions, maxTagCount, disabled, tagRender]);\n\n // 下拉箭头图标\n const ArrowIcon = ({ isOpen: open }: { isOpen: boolean }) => (\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 transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease-in-out',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"#78716C\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n\n // 清除图标\n const ClearIcon = () => (\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 onClick={handleClear}\n style={{\n cursor: 'pointer',\n flexShrink: 0,\n color: '#78716C',\n }}\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 const dropdownAnimationStyles = `\n @keyframes dropdownFadeIn {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `;\n\n return (\n <>\n <style>{dropdownAnimationStyles}</style>\n <div\n ref={selectRef}\n className={`aha-select ${className}`}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n minWidth: '120px',\n boxSizing: 'border-box',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '8px', // rounded-md\n border: `1px solid ${error ? '#F04438' : isOpen ? primaryColor : '#D7D3D0'}`,\n backgroundColor: disabled ? '#FAFAF9' : '#FFFFFF',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 0.2s',\n paddingLeft: '12px',\n paddingRight: '36px', // 为箭头和清除按钮留出空间(箭头16px + 右边距12px + 清除按钮8px)\n paddingTop: sizeStyles[size].paddingTop,\n paddingBottom: sizeStyles[size].paddingBottom,\n fontSize: sizeStyles[size].fontSize,\n lineHeight: sizeStyles[size].lineHeight,\n fontWeight: 400,\n WebkitTapHighlightColor: 'transparent', // 移动端移除点击高亮\n WebkitTouchCallout: 'none', // 禁用长按菜单\n touchAction: 'manipulation', // 优化触摸响应\n userSelect: 'none', // 禁用文本选择\n ...style,\n }}\n onClick={handleToggle}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onTouchStart={(e) => {\n // 移动端触摸优化\n if (!disabled) {\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n onTouchEnd={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n tabIndex={disabled ? -1 : 0}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: '8px',\n }}\n >\n {isMultiple ? (\n (renderTags || (placeholder ? (\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: '#79716B',\n fontSize: '16px',\n lineHeight: '24px',\n fontWeight: 400,\n }}\n >\n {placeholder}\n </span>\n ) : (\n <span style={{ flex: 1, minHeight: '24px' }} />\n )))) : showSearch && isOpen ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={searchValue}\n onChange={handleSearch}\n onClick={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n style={{\n flex: 1,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: '16px', // 至少 16px 避免 iOS Safari 自动缩放\n lineHeight: '24px',\n fontWeight: 400,\n color: disabled ? '#98A2B3' : '#1C1917',\n fontFamily: \"DM Sans, sans-serif\",\n minWidth: 0,\n WebkitAppearance: 'none',\n appearance: 'none',\n }}\n placeholder={hasValue ? undefined : placeholder}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n />\n ) : (\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: hasValue\n ? disabled\n ? '#98A2B3'\n : '#1C1917'\n : '#79716B',\n fontSize: '16px',\n lineHeight: '24px',\n fontWeight: 400,\n minHeight: '24px',\n display: 'inline-block',\n }}\n >\n {hasValue\n ? selectedOptions[0]?.label || currentValue\n : placeholder || '\\u00A0'}\n </span>\n )}\n </div>\n\n <div\n style={{\n position: 'absolute',\n right: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {showClear && <ClearIcon />}\n <ArrowIcon isOpen={isOpen} />\n </div>\n </div>\n\n {isOpen && dropdownPosition && createPortal(\n <div\n ref={dropdownRef}\n className={`aha-select-dropdown ${dropdownClassName}`}\n style={{\n position: 'absolute',\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n width: `${dropdownPosition.width}px`,\n zIndex: 1050,\n backgroundColor: '#FFFFFF',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n border: '1px solid #E7E5E4',\n maxHeight: '256px',\n overflow: 'auto',\n opacity: 0,\n transform:\n dropdownPosition.placement === 'top'\n ? 'translateY(8px)'\n : 'translateY(-8px)',\n animation: 'dropdownFadeIn 0.2s ease-out forwards',\n transformOrigin:\n dropdownPosition.placement === 'top'\n ? 'bottom center'\n : 'top center',\n WebkitOverflowScrolling: 'touch', // iOS 平滑滚动\n overscrollBehavior: 'contain', // 防止滚动穿透\n ...dropdownStyle,\n }}\n >\n {filteredOptions.length === 0 ? (\n <div\n style={{\n padding: '8px 16px',\n textAlign: 'center',\n color: '#78716C',\n fontSize: '14px',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n No data\n </div>\n ) : (\n filteredOptions.map((option, index) => {\n const isSelected = isMultiple\n ? Array.isArray(currentValue) && currentValue.includes(option.value)\n : currentValue === option.value;\n const isFocused = index === focusedIndex;\n\n // 如果提供了自定义渲染函数,使用自定义渲染\n if (optionRender) {\n return (\n <div\n key={option.value}\n className={`aha-select-option ${!option.disabled ? 'hover:bg-[#FAFAF9]' : ''} ${isSelected ? 'bg-[#FAFAF9]' : ''}`}\n onClick={() => !option.disabled && handleSelect(option)}\n style={{\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.2s',\n }}\n >\n {optionRender(option, {\n selected: isSelected,\n focused: isFocused,\n disabled: option.disabled || false,\n })}\n </div>\n );\n }\n\n // 默认渲染\n return (\n <div\n key={option.value}\n className={`aha-select-option ${!option.disabled ? 'hover:bg-[#FAFAF9]' : ''} ${isSelected ? 'bg-[#FAFAF9]' : ''}`}\n onClick={() => handleSelect(option)}\n style={{\n padding: '8px 16px',\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n color: option.disabled ? '#98A2B3' : '#101828',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: \"DM Sans, sans-serif\",\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n transition: 'background-color 0.2s',\n }}\n >\n <span>{option.label}</span>\n {/* 只有选中时才显示标识 */}\n {isSelected && (\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 className={isFocused ? 'hidden' : ''}\n >\n <path\n d=\"M13.3333 4L6 11.3333L2.66667 8\"\n stroke={primaryColor}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n })\n )}\n </div>,\n document.body\n )}\n </>\n );\n};\n\nSelect.displayName = 'Select';\n\nexport default Select;\n\n","import React from \"react\";\n\n// Checkbox 选中图标\nexport const CheckIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Checkbox 半选中图标(减号)\nexport const MinusIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <path\n d=\"M3.5 7H10.5\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标\nexport const SortIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 降序\nexport const SortDescIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 升序\nexport const SortAscIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M8.5 7.5L6 10L3.5 7.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 4.5L6 2L3.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向左的箭头\nexport const LeftArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M15.8334 10H4.16675M4.16675 10L10.0001 15.8334M4.16675 10L10.0001 4.16669\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向右的箭头\nexport const RightArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M4.16675 10H15.8334M15.8334 10L10.0001 4.16669M15.8334 10L10.0001 15.8334\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 提示信息图标\nexport const TooltipIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <g clipPath=\"url(#clip0_54_1653)\">\n <path\n d=\"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_54_1653\">\n <rect width=\"16\" height=\"16\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { useTheme } from \"../../theme/ThemeContext\";\nimport Button from \"../Button\";\nimport Input from \"../Input\";\nimport Select from \"../Select\";\nimport { LeftArrowIcon, RightArrowIcon } from \"../../icons\";\n\nexport interface PaginationProps {\n current?: number;\n defaultCurrent?: number;\n total?: number;\n pageSize?: number;\n defaultPageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: string[];\n showQuickJumper?: boolean | { goButton?: React.ReactNode };\n showTotal?: (total: number, range: [number, number]) => React.ReactNode;\n onChange?: (page: number, pageSize?: number) => void;\n onShowSizeChange?: (current: number, size: number) => void;\n simple?: boolean;\n disabled?: boolean;\n hideOnSinglePage?: boolean;\n className?: string;\n style?: React.CSSProperties;\n size?: \"default\" | \"small\";\n responsive?: boolean;\n showLessItems?: boolean;\n itemRender?: (\n page: number,\n type: \"page\" | \"prev\" | \"next\" | \"jump-prev\" | \"jump-next\",\n originalElement: React.ReactNode\n ) => React.ReactNode;\n}\n\nconst Pagination: React.FC<PaginationProps> = ({\n current: controlledCurrent,\n defaultCurrent = 1,\n total = 0,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n showSizeChanger = false,\n pageSizeOptions = [\"10\", \"20\", \"50\", \"100\"],\n showQuickJumper = false,\n showTotal,\n onChange,\n onShowSizeChange,\n simple = false,\n disabled = false,\n hideOnSinglePage = false,\n className = \"\",\n style,\n size = \"default\",\n responsive = false,\n showLessItems = false,\n itemRender,\n}) => {\n const { primaryColor = \"#FB6011\" } = useTheme();\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const [jumpToPage, setJumpToPage] = useState(\"\");\n\n const current = controlledCurrent ?? internalCurrent;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const totalPages = useMemo(\n () => Math.ceil(total / pageSize),\n [total, pageSize]\n );\n\n useEffect(() => {\n if (controlledCurrent !== undefined) {\n setInternalCurrent(controlledCurrent);\n }\n }, [controlledCurrent]);\n\n useEffect(() => {\n if (controlledPageSize !== undefined) {\n setInternalPageSize(controlledPageSize);\n }\n }, [controlledPageSize]);\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === current || disabled) return;\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page);\n }\n onChange?.(page, pageSize);\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n const newTotalPages = Math.ceil(total / newPageSize);\n const newCurrent = current > newTotalPages ? newTotalPages : current;\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newPageSize);\n }\n if (controlledCurrent === undefined) {\n setInternalCurrent(newCurrent);\n }\n\n onShowSizeChange?.(newCurrent, newPageSize);\n onChange?.(newCurrent, newPageSize);\n };\n\n const handleJumpTo = () => {\n const page = parseInt(jumpToPage, 10);\n if (page >= 1 && page <= totalPages) {\n handlePageChange(page);\n setJumpToPage(\"\");\n }\n };\n\n const getPageNumbers = (): (number | string)[] => {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | string)[] = [];\n\n if (current <= 4) {\n for (let i = 1; i <= 5; i++) {\n pages.push(i);\n }\n pages.push(\"jump-next\");\n pages.push(totalPages);\n } else if (current >= totalPages - 3) {\n pages.push(1);\n pages.push(\"jump-prev\");\n for (let i = totalPages - 4; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n pages.push(\"jump-prev\");\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i);\n }\n pages.push(\"jump-next\");\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const renderItem = (item: number | string): React.ReactNode => {\n if (typeof item === \"number\") {\n const isActive = item === current;\n const element = (\n <Button\n key={item}\n onClick={() => handlePageChange(item)}\n disabled={disabled}\n type={isActive ? \"primary\" : \"default\"}\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n fontWeight: isActive ? 500 : 400,\n border: isActive ? `1px solid ${primaryColor}` : undefined,\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n {item}\n </Button>\n );\n\n return itemRender ? itemRender(item, \"page\", element) : element;\n }\n\n if (item === \"jump-prev\") {\n const element = (\n <Button\n key=\"jump-prev\"\n onClick={() => handlePageChange(Math.max(1, current - 5))}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n •••\n </Button>\n );\n\n return itemRender\n ? itemRender(current - 5, \"jump-prev\", element)\n : element;\n }\n\n if (item === \"jump-next\") {\n const element = (\n <Button\n key=\"jump-next\"\n onClick={() => handlePageChange(Math.min(totalPages, current + 5))}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n •••\n </Button>\n );\n\n return itemRender\n ? itemRender(current + 5, \"jump-next\", element)\n : element;\n }\n\n return null;\n };\n\n if (hideOnSinglePage && totalPages <= 1) {\n return null;\n }\n\n if (simple) {\n return (\n <div\n className={`aha-pagination aha-pagination-simple ${className}`}\n style={style}\n >\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n marginRight: \"8px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n <span\n style={{\n margin: \"0 8px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {current} / {totalPages}\n </span>\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n marginLeft: \"8px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n </div>\n );\n }\n\n const start = (current - 1) * pageSize + 1;\n const end = Math.min(current * pageSize, total);\n\n return (\n <div\n className={`aha-pagination w-full ${className}`}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: responsive ? \"wrap\" : \"nowrap\",\n fontFamily: \"DM Sans, sans-serif\",\n ...style,\n }}\n >\n {showTotal && (\n <div className=\"justify-start text-Text-text-secondary text-sm font-medium font-['DM_Sans'] leading-5\">\n {showTotal(total, [start, end])}\n </div>\n )}\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {total > 0 && (\n <>\n {itemRender ? (\n itemRender(\n current - 1,\n \"prev\",\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n )\n ) : (\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n )}\n </>\n )}\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n {getPageNumbers().map((item) => renderItem(item))}\n </div>\n\n {total > 0 && (\n <>\n {itemRender ? (\n itemRender(\n current + 1,\n \"next\",\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n )\n ) : (\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n )}\n </>\n )}\n\n {showSizeChanger && (\n <Select\n value={pageSize}\n options={pageSizeOptions.map((s) => ({\n label: `${s} / page`,\n value: Number(s),\n }))}\n onChange={(val) => handlePageSizeChange(Number(val))}\n disabled={disabled}\n size={size === \"small\" ? \"small\" : \"medium\"}\n style={{ minWidth: size === \"small\" ? 80 : 96 }}\n />\n )}\n\n {showQuickJumper && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n Go to\n </span>\n <Input\n type=\"number\"\n min={1}\n value={jumpToPage}\n onChange={(e) => setJumpToPage(e.target.value)}\n onPressEnter={handleJumpTo}\n disabled={disabled}\n size={size === \"small\" ? \"small\" : \"medium\"}\n style={{ width: 56, minWidth: 56 }}\n />\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n page\n </span>\n {typeof showQuickJumper === \"object\" && showQuickJumper.goButton ? (\n <Button\n onClick={handleJumpTo}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n {showQuickJumper.goButton}\n </Button>\n ) : (\n <Button\n onClick={handleJumpTo}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n OK\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Pagination;\n","import React, { useState } from 'react';\n\nexport interface CheckboxProps {\n checked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n /** sm = 16px, md = 20px */\n size?: 'sm' | 'md';\n /** Secondary description rendered below the label */\n hint?: React.ReactNode;\n /** Force focused appearance (useful for Storybook demos) */\n isFocused?: boolean;\n}\n\nconst Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n indeterminate = false,\n disabled = false,\n onChange,\n className = '',\n style,\n children,\n size = 'sm',\n hint,\n isFocused: isFocusedProp,\n}) => {\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n\n const isActive = checked || indeterminate;\n const showFocus = isFocusedProp ?? focused;\n\n const handleClick = () => {\n if (disabled) return;\n const syntheticEvent = {\n target: { checked: !checked },\n currentTarget: { checked: !checked },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handleClick();\n }\n };\n\n const boxSize = size === 'sm' ? '16px' : '20px';\n const iconSize = size === 'sm' ? '12px' : '14px';\n const borderRadius = size === 'sm' ? 'var(--radius-xs, 4px)' : 'var(--radius-sm, 6px)';\n const fontSize = size === 'sm' ? 'var(--font-size-text-sm, 14px)' : 'var(--font-size-text-md, 16px)';\n const lineHeight = size === 'sm' ? 'var(--line-height-text-sm, 20px)' : 'var(--line-height-text-md, 24px)';\n const gap = size === 'sm' ? 'var(--spacing-md, 8px)' : 'var(--spacing-lg, 12px)';\n\n const getBoxBg = () => {\n if (disabled) return 'var(--color-bg-disabled_subtle, #fafaf9)';\n if (isActive) return hovered ? 'var(--color-bg-brand-solid_hover, #ec470a)' : 'var(--color-bg-brand-solid, #fb6011)';\n return hovered ? 'var(--color-bg-primary_hover, #fafaf9)' : 'var(--color-bg-primary, #ffffff)';\n };\n\n const getBoxBorder = () => {\n if (disabled) return '1px solid var(--color-border-disabled, #d7d3d0)';\n if (isActive) return hovered ? '1px solid var(--color-bg-brand-solid_hover, #ec470a)' : '1px solid var(--color-bg-brand-solid, #fb6011)';\n return '1px solid var(--color-border-primary, #d7d3d0)';\n };\n\n // Disabled active: use muted icon so it's visible on the light bg\n const iconColor = disabled && isActive\n ? 'var(--color-fg-disabled_subtle, #d7d3d0)'\n : 'var(--color-fg-white, #ffffff)';\n\n const hasLabel = children || hint;\n\n return (\n <div\n className={`aha-checkbox ${className}`}\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n ...style,\n }}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => !disabled && setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => !disabled && setFocused(true)}\n onBlur={() => setFocused(false)}\n >\n {/* Checkbox box */}\n <div\n style={{\n position: 'relative',\n width: boxSize,\n height: boxSize,\n minWidth: boxSize,\n minHeight: boxSize,\n flexShrink: 0,\n borderRadius,\n border: getBoxBorder(),\n backgroundColor: getBoxBg(),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.15s, border-color 0.15s, box-shadow 0.15s',\n boxSizing: 'border-box',\n boxShadow: showFocus ? 'var(--focus-ring, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px #fb6011)' : 'none',\n marginTop: hasLabel ? '2px' : '0',\n }}\n >\n {/* Indeterminate dash */}\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n style={{\n position: 'absolute',\n width: iconSize,\n height: iconSize,\n color: iconColor,\n opacity: indeterminate ? 1 : 0,\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n }}\n >\n <path d=\"M2.91675 7H11.0834\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n\n {/* Check mark */}\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n style={{\n position: 'absolute',\n width: iconSize,\n height: iconSize,\n color: iconColor,\n opacity: checked && !indeterminate ? 1 : 0,\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n }}\n >\n <path d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n\n {/* Label + hint */}\n {hasLabel && (\n <div style={{ display: 'inline-flex', flexDirection: 'column', gap: size === 'md' ? 'var(--spacing-xxs, 2px)' : '0' }}>\n {children && (\n <span\n style={{\n fontSize,\n lineHeight,\n fontWeight: 'var(--font-weight-medium, 500)' as React.CSSProperties['fontWeight'],\n fontFamily: 'var(--font-family-body, \"DM Sans\", sans-serif)',\n color: disabled ? 'var(--color-text-disabled, #79716b)' : 'var(--color-text-secondary, #44403c)',\n userSelect: 'none',\n }}\n >\n {children}\n </span>\n )}\n {hint && (\n <span\n style={{\n fontSize,\n lineHeight,\n fontWeight: 'var(--font-weight-regular, 400)' as React.CSSProperties['fontWeight'],\n fontFamily: 'var(--font-family-body, \"DM Sans\", sans-serif)',\n color: 'var(--color-text-tertiary, #57534e)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {hint}\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import React, { useState, useMemo, useCallback, useRef, useEffect } from 'react';\nimport Pagination from '../Pagination';\nimport Checkbox from '../Checkbox';\nimport { SortIcon, SortDescIcon, SortAscIcon } from '../../icons';\nimport { useTheme } from '../../theme/ThemeContext';\n\n// ==================== Loading 遮罩 ====================\n\nconst TableLoadingSpinner: React.FC<{ color: string }> = ({ color }) => (\n <>\n <style>{`\n @keyframes aha-table-loading-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n <svg\n width={32}\n height={32}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden\n style={{ animation: 'aha-table-loading-spin 1s linear infinite' }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"24\"\n opacity={0.3}\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"16\"\n />\n </svg>\n </>\n);\n\nconst TableLoadingOverlay: React.FC<{\n loading: boolean | React.ReactNode;\n spinColor: string;\n}> = ({ loading, spinColor }) => {\n if (!loading) return null;\n const content = loading === true ? <TableLoadingSpinner color={spinColor} /> : loading;\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading\"\n className=\"aha-table-loading-overlay\"\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.55)',\n pointerEvents: 'auto',\n }}\n >\n {content}\n </div>\n );\n};\n\n// ==================== 类型定义 ====================\n\nexport type SortOrder = 'ascend' | 'descend' | null;\nexport type TableSize = 'small' | 'middle' | 'large';\nexport type TableLayout = 'auto' | 'fixed';\n\nexport interface SorterResult<T = any> {\n column?: ColumnType<T>;\n order?: SortOrder;\n field?: string | string[];\n columnKey?: string | string[];\n}\n\nexport interface TableCurrentDataSource<T = any> {\n currentDataSource: T[];\n action: 'paginate' | 'sort';\n}\n\nexport interface SelectionItem {\n key: string | number;\n text: React.ReactNode;\n onSelect?: (changeableRowKeys: (string | number)[]) => void;\n}\n\nexport interface TableRowSelection<T = any> {\n type?: 'checkbox' | 'radio';\n selectedRowKeys?: (string | number)[];\n defaultSelectedRowKeys?: (string | number)[];\n onChange?: (selectedRowKeys: (string | number)[], selectedRows: T[]) => void;\n onSelect?: (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;\n onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;\n onSelectInvert?: (selectedRowKeys: (string | number)[]) => void;\n onSelectNone?: () => void;\n getCheckboxProps?: (record: T) => {\n disabled?: boolean;\n name?: string;\n };\n hideSelectAll?: boolean;\n fixed?: boolean | 'left' | 'right';\n columnWidth?: string | number;\n columnTitle?: string | React.ReactNode;\n checkStrictly?: boolean;\n preserveSelectedRowKeys?: boolean;\n renderCell?: (checked: boolean, record: T, index: number, node: React.ReactNode) => React.ReactNode;\n}\n\nexport interface ColumnType<T = any> {\n title?: React.ReactNode | ((props: { sortOrder?: SortOrder; sortColumn?: ColumnType<T> }) => React.ReactNode);\n key?: string;\n dataIndex?: string | string[];\n align?: 'left' | 'right' | 'center';\n ellipsis?: boolean | { showTitle?: boolean };\n colSpan?: number;\n width?: string | number;\n minWidth?: string | number;\n fixed?: boolean | 'left' | 'right';\n render?: (value: any, record: T, index: number) => React.ReactNode;\n sorter?: boolean | ((a: T, b: T) => number) | { compare?: (a: T, b: T) => number; multiple?: number };\n sortOrder?: SortOrder | SortOrder[];\n defaultSortOrder?: SortOrder;\n onCell?: (record: T, index?: number) => React.HTMLAttributes<HTMLTableCellElement>;\n onHeaderCell?: (column: ColumnType<T>) => React.HTMLAttributes<HTMLTableCellElement>;\n className?: string;\n children?: ColumnType<T>[];\n onSorterChange?: (sorter: SorterResult<T>) => void;\n rowSpan?: number;\n rowScope?: 'row' | 'col' | 'rowgroup' | 'colgroup';\n}\n\nexport interface TableProps<T = any> {\n columns?: ColumnType<T>[];\n dataSource?: T[];\n rowKey?: string | ((record: T) => string | number);\n rowSelection?: TableRowSelection<T>;\n pagination?: false | {\n current?: number;\n pageSize?: number;\n total?: number;\n defaultCurrent?: number;\n defaultPageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: string[];\n showQuickJumper?: boolean | { goButton?: React.ReactNode };\n showTotal?: (total: number, range: [number, number]) => React.ReactNode;\n onChange?: (page: number, pageSize?: number) => void;\n onShowSizeChange?: (current: number, size: number) => void;\n position?: 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight';\n simple?: boolean;\n responsive?: boolean;\n };\n size?: TableSize;\n bordered?: boolean;\n loading?: boolean | React.ReactNode;\n locale?: {\n emptyText?: React.ReactNode | (() => React.ReactNode);\n selectAll?: React.ReactNode;\n selectInvert?: React.ReactNode;\n selectNone?: React.ReactNode;\n selectionAll?: React.ReactNode;\n sortTitle?: string;\n expand?: string;\n collapse?: string;\n triggerDesc?: string;\n triggerAsc?: string;\n cancelSort?: string;\n };\n showHeader?: boolean;\n title?: (currentData: T[]) => React.ReactNode;\n footer?: (currentData: T[]) => React.ReactNode;\n summary?: (currentData: T[]) => React.ReactNode;\n scroll?: {\n x?: number | string | true;\n y?: number | string;\n scrollToFirstRowOnChange?: boolean;\n };\n tableLayout?: TableLayout;\n onChange?: (pagination: any, filters: Record<string, any>, sorter: SorterResult<T> | SorterResult<T>[], extra: TableCurrentDataSource<T>) => void;\n onSorterChange?: (sorter: SorterResult<T> | SorterResult<T>[]) => void;\n onPaginationChange?: (page: number, pageSize: number) => void;\n onRow?: (record: T, index?: number) => React.HTMLAttributes<HTMLTableRowElement>;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n className?: string;\n innerClassName?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n expandable?: {\n expandedRowKeys?: (string | number)[];\n defaultExpandedRowKeys?: (string | number)[];\n expandedRowRender?: (record: T, index: number, indent: number, expanded: boolean) => React.ReactNode;\n expandRowByClick?: boolean;\n onExpand?: (expanded: boolean, record: T) => void;\n onExpandedRowsChange?: (expandedKeys: (string | number)[]) => void;\n defaultExpandAllRows?: boolean;\n indentSize?: number;\n expandIcon?: (props: { expanded: boolean; onExpand: (record: T, e: React.MouseEvent<HTMLElement>) => void; record: T }) => React.ReactNode;\n rowExpandable?: (record: T) => boolean;\n };\n indentSize?: number;\n rowClassName?: string | ((record: T, index: number) => string);\n onHeaderRow?: (columns: ColumnType<T>[], index?: number) => React.HTMLAttributes<HTMLTableRowElement>;\n components?: {\n header?: {\n cell?: React.ComponentType<any>;\n row?: React.ComponentType<any>;\n wrapper?: React.ComponentType<any>;\n };\n body?: {\n cell?: React.ComponentType<any>;\n row?: React.ComponentType<any>;\n wrapper?: React.ComponentType<any>;\n };\n };\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number; getContainer?: () => HTMLElement };\n}\n\n// ==================== 工具函数 ====================\n\nconst getValue = (obj: any, path: string | string[]): any => {\n if (typeof path === 'string') {\n return obj?.[path];\n }\n return path.reduce((acc, key) => acc?.[key], obj);\n};\n\nconst getRowKey = <T,>(record: T, rowKey?: string | ((record: T) => string | number)): string | number => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n if (typeof rowKey === 'string') {\n return getValue(record, rowKey) ?? '';\n }\n return (record as any).key ?? '';\n};\n\n// ==================== 默认图标 ====================\n\nconst SortIconComponent: React.FC<{ order?: SortOrder }> = ({ order }) => {\n const { primaryColor } = useTheme();\n \n if (order === 'ascend') {\n return (\n <SortAscIcon style={{ color: primaryColor }}/>\n );\n }\n if (order === 'descend') {\n return (\n <SortDescIcon style={{ color: primaryColor }}/>\n );\n }\n return (\n <SortIcon/>\n );\n};\n\n\n\n// ==================== Table 组件 ====================\n\nconst Table = <T extends Record<string, any> = any>({\n columns = [],\n dataSource = [],\n rowKey = 'key',\n rowSelection,\n pagination = false,\n size = 'middle',\n bordered = false,\n loading = false,\n locale,\n showHeader = true,\n title,\n footer,\n summary,\n scroll,\n tableLayout = 'auto',\n onChange,\n onSorterChange,\n onPaginationChange,\n onRow,\n className = '',\n innerClassName = '',\n style,\n expandable,\n rowClassName,\n onHeaderRow,\n sticky,\n ...rest\n}: TableProps<T>) => {\n const { primaryColor } = useTheme();\n const loadingSpinColor = primaryColor || '#FB6011';\n\n // ==================== State ====================\n const [selectedRowKeys, setSelectedRowKeys] = useState<(string | number)[]>(\n rowSelection?.selectedRowKeys || rowSelection?.defaultSelectedRowKeys || []\n );\n\n // 同步外部传入的 selectedRowKeys\n useEffect(() => {\n if (rowSelection?.selectedRowKeys !== undefined) {\n setSelectedRowKeys(rowSelection.selectedRowKeys);\n }\n }, [rowSelection?.selectedRowKeys]);\n const [sorters, setSorters] = useState<Map<string, SortOrder>>(new Map());\n const [expandedRowKeys, setExpandedRowKeys] = useState<(string | number)[]>(\n expandable?.defaultExpandedRowKeys || []\n );\n const [currentPage, setCurrentPage] = useState(\n pagination && typeof pagination === 'object' \n ? (pagination.current || pagination.defaultCurrent || 1) \n : 1\n );\n const [pageSize, setPageSize] = useState(\n pagination && typeof pagination === 'object' \n ? (pagination.pageSize || pagination.defaultPageSize || 10) \n : 10\n );\n\n // 同步外部传入的 pagination\n useEffect(() => {\n if (pagination && typeof pagination === 'object') {\n if (pagination.current !== undefined) {\n setCurrentPage(pagination.current);\n }\n if (pagination.pageSize !== undefined) {\n setPageSize(pagination.pageSize);\n }\n }\n }, [pagination]);\n const [draggedRowIndex, setDraggedRowIndex] = useState<number | null>(null);\n const [dragOverRowIndex, setDragOverRowIndex] = useState<number | null>(null);\n const [isMobile, setIsMobile] = useState(false);\n const tableRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<HTMLTableSectionElement>(null);\n\n // 检测移动端\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 768);\n };\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // ==================== 处理行选择 ====================\n const handleSelect = useCallback((record: T, selected: boolean) => {\n // 检查是否禁用\n const checkboxProps = rowSelection?.getCheckboxProps?.(record);\n if (checkboxProps?.disabled) {\n return;\n }\n\n const key = getRowKey(record, rowKey);\n let newSelectedRowKeys: (string | number)[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedRowKeys = selected ? [key] : [];\n } else {\n if (selected) {\n newSelectedRowKeys = [...selectedRowKeys, key];\n } else {\n newSelectedRowKeys = selectedRowKeys.filter(k => k !== key);\n }\n }\n\n setSelectedRowKeys(newSelectedRowKeys);\n \n const selectedRows = dataSource.filter(d => newSelectedRowKeys.includes(getRowKey(d, rowKey)));\n \n rowSelection?.onChange?.(newSelectedRowKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, new Event('select'));\n }, [selectedRowKeys, rowKey, rowSelection, dataSource]);\n\n const handleSelectAll = useCallback((selected: boolean, currentPageData: T[]) => {\n // 只选择未禁用的行\n const keys = currentPageData\n .filter(d => !rowSelection?.getCheckboxProps?.(d).disabled)\n .map(d => getRowKey(d, rowKey));\n const newSelectedRowKeys = selected ? keys : [];\n \n setSelectedRowKeys(newSelectedRowKeys);\n \n const selectedRows = dataSource.filter(d => newSelectedRowKeys.includes(getRowKey(d, rowKey)));\n const changeRows = selected ? currentPageData.filter(d => !rowSelection?.getCheckboxProps?.(d).disabled) : [];\n \n rowSelection?.onChange?.(newSelectedRowKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, changeRows);\n }, [rowKey, rowSelection, dataSource]);\n\n // ==================== 处理排序 ====================\n const handleSort = useCallback((column: ColumnType<T>, order: SortOrder) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex);\n if (!columnKey) return;\n\n const newSorters = new Map(sorters);\n \n if (order === null) {\n newSorters.delete(columnKey as string);\n } else {\n newSorters.set(columnKey as string, order);\n }\n\n setSorters(newSorters);\n \n // 构建排序结果数组\n const sorterArray: SorterResult<T>[] = Array.from(newSorters.entries()).map(([key, order]) => {\n const col = columns.find(c => {\n const cKey = c.key || (Array.isArray(c.dataIndex) ? c.dataIndex.join('.') : c.dataIndex);\n return cKey === key;\n });\n return {\n column: col || column,\n order: order!,\n field: key,\n columnKey: key,\n };\n });\n \n // 当前列的排序结果\n const currentSorter: SorterResult<T> = {\n column,\n order: order!,\n field: columnKey as string,\n columnKey: columnKey as string,\n };\n \n // 调用列的 onSorterChange 回调(单个列的排序变化)\n if (column.onSorterChange) {\n column.onSorterChange(currentSorter);\n }\n \n // 调用 Table 的 onSorterChange 回调(所有列的排序变化)\n if (onSorterChange) {\n onSorterChange(sorterArray.length === 1 ? sorterArray[0] : sorterArray);\n }\n \n // 触发 onChange(综合回调,包含分页、筛选、排序)\n if (onChange) {\n onChange(\n { current: currentPage, pageSize },\n {},\n sorterArray.length === 1 ? sorterArray[0] : sorterArray,\n { currentDataSource: dataSource, action: 'sort' }\n );\n }\n }, [sorters, onChange, onSorterChange, currentPage, pageSize, dataSource, columns]);\n\n // ==================== 处理展开 ====================\n const handleExpand = useCallback((record: T, expanded: boolean) => {\n const key = getRowKey(record, rowKey);\n let newExpandedRowKeys: (string | number)[];\n \n if (expanded) {\n newExpandedRowKeys = [...expandedRowKeys, key];\n } else {\n newExpandedRowKeys = expandedRowKeys.filter(k => k !== key);\n }\n \n setExpandedRowKeys(newExpandedRowKeys);\n expandable?.onExpand?.(expanded, record);\n expandable?.onExpandedRowsChange?.(newExpandedRowKeys);\n }, [expandedRowKeys, rowKey, expandable]);\n\n // ==================== 数据处理 ====================\n const getProcessedData = useCallback((): T[] => {\n let processed = [...dataSource];\n\n // 排序\n if (sorters.size > 0) {\n processed.sort((a, b) => {\n const sorterEntries = Array.from(sorters.entries());\n for (const [columnKey, order] of sorterEntries) {\n const column = columns.find(col => {\n const colKey = col.key || (Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : col.dataIndex);\n return colKey === columnKey;\n });\n \n if (!column) continue;\n \n let compareResult = 0;\n \n if (typeof column.sorter === 'function') {\n compareResult = column.sorter(a, b);\n } else if (column.sorter === true) {\n const aVal = getValue(a, column.dataIndex || columnKey);\n const bVal = getValue(b, column.dataIndex || columnKey);\n if (aVal < bVal) compareResult = -1;\n else if (aVal > bVal) compareResult = 1;\n }\n \n if (compareResult !== 0) {\n return order === 'ascend' ? compareResult : -compareResult;\n }\n }\n return 0;\n });\n }\n\n return processed;\n }, [dataSource, sorters, columns]);\n\n const processedData = getProcessedData();\n\n // ==================== 分页处理 ====================\n // 当传入 pagination.total 时视为服务端分页:dataSource 已是当前页数据,不再做客户端 slice\n const isServerPagination = Boolean(pagination && typeof pagination === 'object' && pagination.total !== undefined);\n const paginatedData = useMemo(() => {\n if (pagination === false || !pagination) return processedData;\n if (isServerPagination) return processedData;\n const start = (currentPage - 1) * pageSize;\n const end = start + pageSize;\n return processedData.slice(start, end);\n }, [processedData, currentPage, pageSize, pagination, isServerPagination]);\n\n const handlePageChange = useCallback((page: number, size?: number) => {\n const newPageSize = size ?? pageSize;\n setCurrentPage(page);\n if (size) setPageSize(size);\n \n // 调用 Table 的 onPaginationChange 回调(专门用于分页变化)\n if (onPaginationChange) {\n onPaginationChange(page, newPageSize);\n }\n \n // 调用 pagination 内部的回调(保持向后兼容)\n if (pagination && typeof pagination === 'object') {\n pagination.onChange?.(page, size);\n if (size) pagination.onShowSizeChange?.(page, size);\n }\n \n // 触发 Table 的 onChange(综合回调,包含分页、筛选、排序)\n if (onChange) {\n const sorterArray: SorterResult<T>[] = Array.from(sorters.entries()).map(([key, order]) => {\n const col = columns.find(c => {\n const cKey = c.key || (Array.isArray(c.dataIndex) ? c.dataIndex.join('.') : c.dataIndex);\n return cKey === key;\n });\n return {\n column: col,\n order: order!,\n field: key,\n columnKey: key,\n };\n });\n \n onChange(\n { current: page, pageSize: newPageSize },\n {},\n sorterArray.length === 1 ? sorterArray[0] : sorterArray,\n { currentDataSource: processedData, action: 'paginate' }\n );\n }\n }, [pagination, onPaginationChange, onChange, pageSize, sorters, columns, processedData]);\n\n // ==================== 渲染单元格 ====================\n const renderCell = useCallback((column: ColumnType<T>, record: T, index: number): React.ReactNode => {\n const value = getValue(record, column.dataIndex || '');\n \n if (column.render) {\n return column.render(value, record, index);\n }\n \n return value;\n }, []);\n\n // ==================== 计算固定列的偏移量 ====================\n const getFixedOffset = useCallback((columnIndex: number, fixed: 'left' | 'right' | boolean | undefined, isHeader: boolean = false) => {\n if (!fixed) return undefined;\n \n const fixedDirection = fixed === true ? 'left' : fixed;\n let offset = 0;\n \n if (fixedDirection === 'left') {\n // 计算左侧固定列的偏移量\n // 如果有行选择且固定在左侧,先加上选择列的宽度\n if (rowSelection && (rowSelection.fixed === 'left' || rowSelection.fixed === true)) {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? rowSelection.columnWidth \n : (typeof rowSelection.columnWidth === 'string' ? parseInt(rowSelection.columnWidth) : 60);\n offset += selectWidth;\n }\n // 然后加上前面所有左侧固定列的宽度\n for (let i = 0; i < columnIndex; i++) {\n const col = columns[i];\n if (col.fixed === 'left' || col.fixed === true) {\n const colWidth = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(col.width as string) || 0)\n : 150; // 默认宽度\n offset += colWidth;\n }\n }\n return offset;\n } else if (fixedDirection === 'right') {\n // 计算右侧固定列的偏移量\n for (let i = columnIndex + 1; i < columns.length; i++) {\n const col = columns[i];\n if (col.fixed === 'right') {\n const colWidth = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(col.width as string) || 0)\n : 150; // 默认宽度\n offset += colWidth;\n }\n }\n // 如果有行选择且固定在右侧,需要加上选择列的宽度\n if (rowSelection && rowSelection.fixed === 'right') {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? rowSelection.columnWidth \n : (typeof rowSelection.columnWidth === 'string' ? parseInt(rowSelection.columnWidth) : 60);\n offset += selectWidth;\n }\n return offset;\n }\n \n return undefined;\n }, [columns, rowSelection]);\n\n // ==================== 渲染表头 ====================\n const renderHeader = useCallback(() => {\n if (!showHeader) return null;\n\n const headerColumns = columns.map((column, colIndex) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex) || colIndex;\n const sortOrder = sorters.get(columnKey as string) || null;\n const fixedOffset = getFixedOffset(colIndex, column.fixed, true);\n const columnWidth = column.width \n ? (typeof column.width === 'number' ? `${column.width}px` : column.width)\n : undefined;\n\n return (\n <th\n key={columnKey}\n className={`${column.className || ''} ${column.align ? `text-${column.align}` : ''}`}\n style={{\n width: columnWidth,\n minWidth: column.minWidth ? (typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth) : (columnWidth || undefined),\n maxWidth: columnWidth,\n position: column.fixed ? 'sticky' : 'relative',\n left: column.fixed === 'left' || column.fixed === true ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n right: column.fixed === 'right' ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n zIndex: column.fixed ? (column.fixed === 'left' || column.fixed === true ? 10 : 9) : 1,\n backgroundColor: column.fixed ? '#F9FAFB' : '#F9FAFB',\n boxShadow: column.fixed === 'left' || column.fixed === true \n ? '2px 0 4px rgba(0, 0, 0, 0.05)' \n : column.fixed === 'right' \n ? '-2px 0 4px rgba(0, 0, 0, 0.05)' \n : undefined,\n padding: '12px 16px',\n textAlign: column.align || 'left',\n borderBottom: '1px solid #EAECF0',\n fontWeight: 600,\n fontSize: '12px',\n lineHeight: '18px',\n color: '#475467',\n fontFamily: 'DM Sans, sans-serif',\n }}\n {...(column.onHeaderCell?.(column) || {})}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n justifyContent: column.align === 'right' ? 'flex-end' : column.align === 'center' ? 'center' : 'flex-start',\n }}\n >\n <span style={{ fontWeight: 600, fontSize: '12px', lineHeight: '18px', color: '#475467' }}>\n {typeof column.title === 'function' ? column.title({ sortOrder, sortColumn: column }) : column.title}\n </span>\n {column.sorter && (\n <button\n onClick={() => {\n const nextOrder = sortOrder === null ? 'ascend' : sortOrder === 'ascend' ? 'descend' : null;\n handleSort(column, nextOrder);\n }}\n style={{\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n padding: '2px',\n color: sortOrder ? '#475467' : '#98A2B3',\n }}\n >\n <SortIconComponent order={sortOrder || undefined} />\n </button>\n )}\n </div>\n </th>\n );\n });\n\n // 如果有行选择,添加选择列\n if (rowSelection) {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? `${rowSelection.columnWidth}px` \n : (typeof rowSelection.columnWidth === 'string' ? rowSelection.columnWidth : '60px');\n const selectColumn = (\n <th\n key=\"selection\"\n style={{\n width: selectWidth,\n position: rowSelection.fixed ? 'sticky' : 'relative',\n left: rowSelection.fixed === 'left' || rowSelection.fixed === true ? '0px' : undefined,\n right: rowSelection.fixed === 'right' ? '0px' : undefined,\n zIndex: rowSelection.fixed ? (rowSelection.fixed === 'left' || rowSelection.fixed === true ? 12 : 11) : 1,\n backgroundColor: '#F9FAFB',\n padding: '12px 16px',\n borderBottom: '1px solid #EAECF0',\n fontWeight: 600,\n fontSize: '12px',\n lineHeight: '18px',\n color: '#475467',\n fontFamily: 'DM Sans, sans-serif',\n textAlign: 'center',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {!rowSelection.hideSelectAll && rowSelection.type !== 'radio' && (() => {\n const enabledRows = paginatedData.filter(d => !rowSelection.getCheckboxProps?.(d).disabled);\n const enabledKeys = enabledRows.map(d => getRowKey(d, rowKey));\n const allSelected = enabledRows.length > 0 && enabledKeys.every(key => selectedRowKeys.includes(key));\n const someSelected = enabledKeys.some(key => selectedRowKeys.includes(key));\n \n return (\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={(e) => handleSelectAll(e.target.checked, paginatedData)}\n />\n );\n })()}\n {rowSelection.columnTitle && <span style={{ marginLeft: rowSelection.hideSelectAll ? 0 : '8px' }}>{rowSelection.columnTitle}</span>}\n </div>\n </th>\n );\n headerColumns.unshift(selectColumn);\n }\n\n const headerRowProps = onHeaderRow?.(columns, 0);\n \n return (\n <thead ref={headerRef}>\n <tr {...(headerRowProps || {})}>{headerColumns}</tr>\n </thead>\n );\n }, [columns, showHeader, sorters, rowSelection, selectedRowKeys, paginatedData, rowKey, handleSort, handleSelectAll, locale, onHeaderRow, getFixedOffset]);\n\n // ==================== 拖拽排序处理 ====================\n const handleDragStart = useCallback((index: number) => {\n setDraggedRowIndex(index);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent, index: number) => {\n e.preventDefault();\n setDragOverRowIndex(index);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedRowIndex === null || draggedRowIndex === dropIndex) {\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n return;\n }\n\n const newData = [...paginatedData];\n const draggedItem = newData[draggedRowIndex];\n newData.splice(draggedRowIndex, 1);\n newData.splice(dropIndex, 0, draggedItem);\n\n // 这里可以触发 onChange 回调,让外部处理数据更新\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n }, [draggedRowIndex, paginatedData]);\n\n const handleDragEnd = useCallback(() => {\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n }, []);\n\n // ==================== 渲染空状态 ====================\n const renderEmpty = useCallback(() => {\n const emptyText = locale?.emptyText;\n const content =\n typeof emptyText === 'function'\n ? emptyText()\n : emptyText !== undefined\n ? emptyText\n : 'No data';\n const colSpan = columns.length + (rowSelection ? 1 : 0);\n return (\n <tr className=\"aha-table-placeholder\">\n <td colSpan={colSpan} style={{\n padding: '48px 16px',\n textAlign: 'center',\n color: '#98A2B3',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: 'DM Sans, sans-serif',\n borderBottom: 'none',\n backgroundColor: 'white',\n }}>\n {content}\n </td>\n </tr>\n );\n }, [locale?.emptyText, columns.length, rowSelection]);\n\n // ==================== 渲染表格行 ====================\n const renderRows = useCallback(() => {\n if (paginatedData.length === 0) {\n return renderEmpty();\n }\n return paginatedData.map((record, index) => {\n const key = getRowKey(record, rowKey);\n const isSelected = selectedRowKeys.includes(key);\n const isExpanded = expandedRowKeys.includes(key);\n const rowProps = onRow?.(record, index) || {};\n const isLastRow = index === paginatedData.length - 1;\n\n return (\n <React.Fragment key={key}>\n <tr\n className={`${typeof rowClassName === 'function' ? rowClassName(record, index) : rowClassName || ''} ${draggedRowIndex === index ? 'dragging' : ''} ${dragOverRowIndex === index ? 'drag-over' : ''}`}\n draggable={true}\n onDragStart={() => handleDragStart(index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDrop={(e) => handleDrop(e, index)}\n onDragEnd={handleDragEnd}\n style={{\n cursor: 'move',\n opacity: draggedRowIndex === index ? 0.5 : 1,\n backgroundColor: dragOverRowIndex === index ? '#F9FAFB' : 'white',\n transition: 'background-color 0.2s',\n ...rowProps.style,\n }}\n onMouseEnter={(e) => {\n if (draggedRowIndex !== index && dragOverRowIndex !== index) {\n e.currentTarget.style.backgroundColor = '#F9FAFB';\n }\n }}\n onMouseLeave={(e) => {\n if (draggedRowIndex !== index && dragOverRowIndex !== index) {\n e.currentTarget.style.backgroundColor = 'white';\n }\n }}\n {...rowProps}\n >\n {rowSelection && (\n <td\n style={{\n width: typeof rowSelection.columnWidth === 'number' \n ? `${rowSelection.columnWidth}px` \n : (typeof rowSelection.columnWidth === 'string' ? rowSelection.columnWidth : '60px'),\n position: rowSelection.fixed ? 'sticky' : 'relative',\n left: rowSelection.fixed === 'left' || rowSelection.fixed === true ? '0px' : undefined,\n right: rowSelection.fixed === 'right' ? '0px' : undefined,\n zIndex: rowSelection.fixed ? (rowSelection.fixed === 'left' || rowSelection.fixed === true ? 12 : 11) : 1,\n backgroundColor: 'white',\n padding: '16px',\n borderBottom: isLastRow ? 'none' : '1px solid #EAECF0',\n textAlign: 'center',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleSelect(record, e.target.checked)}\n disabled={rowSelection.getCheckboxProps?.(record).disabled}\n />\n </div>\n </td>\n )}\n {columns.map((column, colIndex) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex) || colIndex;\n const cellProps = column.onCell?.(record, index) || {};\n const fixedOffset = getFixedOffset(colIndex, column.fixed, false);\n const columnWidth = column.width \n ? (typeof column.width === 'number' ? `${column.width}px` : column.width)\n : undefined;\n \n return (\n <td\n key={columnKey}\n className={`${column.className || ''} ${column.align ? `text-${column.align}` : ''}`}\n style={{\n width: columnWidth,\n minWidth: column.minWidth ? (typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth) : (columnWidth || undefined),\n maxWidth: columnWidth,\n position: column.fixed ? 'sticky' : 'relative',\n left: column.fixed === 'left' || column.fixed === true ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n right: column.fixed === 'right' ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n zIndex: column.fixed ? (column.fixed === 'left' || column.fixed === true ? 10 : 9) : 1,\n backgroundColor: 'white',\n boxShadow: column.fixed === 'left' || column.fixed === true \n ? '2px 0 4px rgba(0, 0, 0, 0.05)' \n : column.fixed === 'right' \n ? '-2px 0 4px rgba(0, 0, 0, 0.05)' \n : undefined,\n padding: '16px',\n borderBottom: isLastRow ? 'none' : '1px solid #EAECF0',\n fontSize: '14px',\n lineHeight: '20px',\n color: '#101828',\n fontFamily: 'DM Sans, sans-serif',\n textAlign: column.align || 'left',\n ...cellProps.style,\n }}\n colSpan={column.colSpan}\n rowSpan={column.rowSpan}\n {...cellProps}\n >\n {renderCell(column, record, index)}\n </td>\n );\n })}\n </tr>\n {expandable?.expandedRowRender && isExpanded && (\n <tr>\n <td colSpan={columns.length + (rowSelection ? 1 : 0)}>\n {expandable.expandedRowRender(record, index, 0, true)}\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n });\n }, [paginatedData, rowKey, selectedRowKeys, expandedRowKeys, rowSelection, columns, onRow, rowClassName, handleSelect, renderCell, expandable, draggedRowIndex, dragOverRowIndex, handleDragStart, handleDragOver, handleDrop, handleDragEnd, getFixedOffset, renderEmpty]);\n\n // ==================== 渲染分页 ====================\n const renderPagination = () => {\n if (pagination === false || !pagination) return null;\n \n const total = pagination.total ?? processedData.length;\n const position = pagination.position || 'bottomRight';\n \n return (\n <div\n style={{\n marginTop: '16px',\n display: 'flex',\n justifyContent: position.includes('Right') ? 'flex-end' : position.includes('Left') ? 'flex-start' : 'center',\n }}\n >\n <Pagination\n current={currentPage}\n total={total}\n pageSize={pageSize}\n showSizeChanger={pagination.showSizeChanger}\n pageSizeOptions={pagination.pageSizeOptions}\n showQuickJumper={pagination.showQuickJumper}\n showTotal={pagination.showTotal}\n onChange={handlePageChange}\n onShowSizeChange={handlePageChange}\n simple={pagination.simple}\n responsive={pagination.responsive}\n size={size === 'small' ? 'small' : 'default'}\n />\n </div>\n );\n };\n\n // ==================== 移动端渲染 ====================\n const renderMobileView = () => {\n const emptyContent =\n typeof locale?.emptyText === 'function'\n ? locale.emptyText()\n : locale?.emptyText !== undefined\n ? locale.emptyText\n : 'No data';\n if (paginatedData.length === 0) {\n return (\n <div className=\"aha-table-mobile aha-table-placeholder\" style={{\n padding: '48px 16px',\n textAlign: 'center',\n color: '#98A2B3',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: 'DM Sans, sans-serif',\n }}>\n {emptyContent}\n </div>\n );\n }\n return (\n <div className=\"aha-table-mobile\">\n {paginatedData.map((record, index) => {\n const key = getRowKey(record, rowKey);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <div\n key={key}\n className={`aha-table-mobile-row ${isSelected ? 'selected' : ''}`}\n style={{\n border: '1px solid #e8e8e8',\n borderRadius: '4px',\n padding: '12px',\n marginBottom: '12px',\n backgroundColor: isSelected ? '#e6f7ff' : 'white',\n }}\n >\n {rowSelection && (\n <div style={{ marginBottom: '8px' }}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleSelect(record, e.target.checked)}\n disabled={rowSelection.getCheckboxProps?.(record).disabled}\n />\n </div>\n )}\n {columns.map((column) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex);\n const value = getValue(record, column.dataIndex || '');\n const displayValue = column.render ? column.render(value, record, index) : value;\n \n return (\n <div\n key={columnKey}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n paddingBottom: '8px',\n borderBottom: '1px solid #f0f0f0',\n }}\n >\n <span style={{ fontWeight: 'bold', color: '#666' }}>\n {typeof column.title === 'function' ? column.title({}) : column.title}:\n </span>\n <span style={{ flex: 1, textAlign: 'right' }}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n };\n\n // ==================== 主渲染 ====================\n // 检查是否有固定列\n const hasFixedColumns = useMemo(() => {\n return columns.some(col => col.fixed) || (rowSelection && rowSelection.fixed);\n }, [columns, rowSelection]);\n\n // 检查是否所有列都有宽度\n const hasAllColumnWidths = useMemo(() => {\n return columns.every(col => col.width) && (!rowSelection || rowSelection.columnWidth);\n }, [columns, rowSelection]);\n\n // 计算表格总宽度\n // 只有在设置了 scroll.x 或者有固定列且需要滚动时,才使用固定宽度\n // 否则使用 100% 让表格撑满父元素\n const totalWidth = useMemo(() => {\n // 如果设置了 scroll.x,使用 scroll.x 作为表格宽度(Ant Design 的方式)\n if (scroll?.x) {\n if (typeof scroll.x === 'number') {\n return scroll.x;\n } else if (scroll.x === true) {\n // scroll.x === true 时,计算所有列的宽度总和\n const widthSum = columns.reduce((sum, col) => {\n const w = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(String(col.width).replace('px', '')) || 0)\n : 150; // 默认宽度\n return sum + w;\n }, 0);\n const total = widthSum + (rowSelection ? (typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : parseInt(String(rowSelection.columnWidth || '60').replace('px', '')) || 60) : 0);\n return total;\n }\n }\n \n // 如果有固定列,需要计算最小宽度以确保固定列能正常工作\n // 但表格本身仍然使用 100% 宽度撑满父元素\n if (hasFixedColumns) {\n // 计算所有固定列的宽度总和,作为最小宽度\n const fixedWidthSum = columns.reduce((sum, col) => {\n if (col.fixed && col.width) {\n const w = typeof col.width === 'number' ? col.width : parseInt(String(col.width).replace('px', '')) || 0;\n return sum + w;\n }\n return sum;\n }, 0);\n const rowSelectionWidth = (rowSelection && rowSelection.fixed && rowSelection.columnWidth) \n ? (typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : parseInt(String(rowSelection.columnWidth).replace('px', '')) || 60)\n : 0;\n // 返回最小宽度,但表格宽度仍然使用 100%\n return fixedWidthSum + rowSelectionWidth;\n }\n \n // 默认返回 undefined,让表格使用 100% 宽度撑满父元素\n return undefined;\n }, [columns, scroll?.x, rowSelection, hasFixedColumns]);\n\n // 如果有固定列或所有列都有 width,使用 fixed layout\n const effectiveTableLayout = useMemo(() => {\n if (tableLayout === 'fixed') return 'fixed';\n if (hasFixedColumns) return 'fixed';\n if (hasAllColumnWidths) return 'fixed';\n // 如果有部分列设置了宽度,也使用 fixed layout,让未设置宽度的列自适应\n if (columns.some(col => col.width)) return 'fixed';\n return tableLayout;\n }, [tableLayout, hasFixedColumns, hasAllColumnWidths, columns]);\n\n const tableStyle: React.CSSProperties = {\n width: '100%', // 始终使用 100% 宽度撑满父元素\n minWidth: totalWidth ? `${totalWidth}px` : '100%', // 如果有固定列,设置最小宽度\n borderCollapse: 'separate',\n borderSpacing: 0,\n tableLayout: effectiveTableLayout,\n backgroundColor: 'white',\n ...(bordered && { borderRadius: '8px', border: '1px solid #EAECF0' }),\n overflow: 'hidden',\n };\n\n const wrapperStyle: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n maxWidth: '100%',\n maxHeight: typeof scroll?.y === 'number' ? `${scroll.y}px` : undefined,\n borderRadius: '8px',\n ...style,\n };\n\n // 移动端使用卡片式布局\n if (isMobile) {\n return (\n <div\n ref={tableRef}\n className={`aha-table aha-table-mobile-wrapper ${className}`}\n style={wrapperStyle}\n aria-busy={loading ? true : undefined}\n {...rest}\n >\n {title && <div style={{ marginBottom: '16px' }}>{title(processedData)}</div>}\n {pagination && typeof pagination === 'object' && pagination.position?.startsWith('top') && renderPagination()}\n {renderMobileView()}\n {footer && <div style={{ marginTop: '16px' }}>{footer(processedData)}</div>}\n {pagination && (typeof pagination === 'object' ? !pagination.position?.startsWith('top') : true) && renderPagination()}\n <TableLoadingOverlay loading={loading} spinColor={loadingSpinColor} />\n </div>\n );\n }\n\n // 滚动容器的样式\n const scrollContainerStyle: React.CSSProperties = {\n position: 'relative',\n overflowX: (scroll?.x || hasFixedColumns) ? 'auto' : 'visible',\n overflowY: scroll?.y ? 'auto' : 'visible',\n width: '100%',\n // 关键:容器宽度必须小于表格宽度,才能触发滚动\n // 只有在设置了 scroll.x 时才限制容器宽度\n maxWidth: scroll?.x === true \n ? '100%' \n : typeof scroll?.x === 'number' \n ? `${scroll.x}px` \n : undefined,\n maxHeight: typeof scroll?.y === 'number' ? `${scroll.y}px` : undefined,\n // 确保滚动容器有明确的边界\n borderRadius: '8px',\n };\n\n return (\n <div\n ref={tableRef}\n className={`aha-table ${className}`}\n style={wrapperStyle}\n aria-busy={loading ? true : undefined}\n {...rest}\n >\n {title && <div style={{ marginBottom: '16px' }}>{title(processedData)}</div>}\n {pagination && typeof pagination === 'object' && pagination.position?.startsWith('top') && renderPagination()}\n <div style={scrollContainerStyle}>\n <div style={{ \n width: '100%', \n minWidth: totalWidth ? `${totalWidth}px` : '100%', \n display: 'block' \n }}>\n <table style={tableStyle} className={innerClassName}>\n {renderHeader()}\n <tbody>{renderRows()}</tbody>\n {summary && (\n <tfoot>\n <tr>\n <td colSpan={columns.length + (rowSelection ? 1 : 0)}>{summary(processedData)}</td>\n </tr>\n </tfoot>\n )}\n </table>\n </div>\n </div>\n {footer && <div style={{ marginTop: '16px' }}>{footer(processedData)}</div>}\n {pagination && (typeof pagination === 'object' ? !pagination.position?.startsWith('top') : true) && renderPagination()}\n <TableLoadingOverlay loading={loading} spinColor={loadingSpinColor} />\n </div>\n );\n};\n\nexport default Table;\n\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArray","to","from","pack","ar","l","Array","slice","concat","SuppressedError","defaultTheme","primaryColor","ThemeContext","createContext","useTheme","context","useContext","SIZE_ALIAS","sm","md","lg","xl","small","mediumSmall","medium","large","HIERARCHY_ALIAS","primary","secondary","tertiary","default","SIZE_TOKENS","height","paddingX","paddingXLg","fontSize","lineHeight","iconSize","gap","iconOnlyPad","LoadingSpinner","_a","size","color","_jsxs","jsxs","_Fragment","Fragment","children","_jsx","jsx","width","viewBox","fill","style","animation","flexShrink","cx","cy","r","stroke","strokeWidth","opacity","d","strokeLinecap","Button","_b","type","_c","_d","disabled","_e","loading","iconOnly","_f","focused","onClick","_g","htmlType","_h","className","icon","_j","iconPosition","rest","_k","useState","isHovered","setIsHovered","_l","isPressed","setIsPressed","hierarchy","isIconOnly","isLink","isDisabled","showFocusRing","themeBrand","visuals","bg","iconColor","border","boxShadow","interactive","textDecoration","getVisuals","focusShadow","buttonStyle","position","display","alignItems","justifyContent","fontFamily","fontWeight","cursor","outline","transition","userSelect","WebkitTapHighlightColor","whiteSpace","backgroundColor","borderRadius","overflow","padding","paddingLeft","paddingRight","renderIcon","showLeftIcon","showRightIcon","filter","Boolean","join","preventDefault","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","displayName","SHADOW_XS","sizeMap","pt","pb","forwardRef","ref","error","readOnly","prefix","suffix","leadingText","trailingText","leadingAddon","trailingAddon","onFocus","onBlur","onKeyDown","onPressEnter","value","defaultValue","onChange","placeholder","label","required","hintText","restProps","inputRef","useRef","setFocused","internalValue","setInternalValue","useEffect","current","isControlled","undefined","currentValue","outlineOffset","dividerColor","hasPrefixIcon","hasSuffixIcon","iconSlotStyle","top","transform","zIndex","pointerEvents","addonTextStyle","paddingTop","paddingBottom","groupEl","boxSizing","borderRight","flex","minWidth","left","target","key","autoComplete","right","borderLeft","hintStyle","margin","flexDirection","marginLeft","sizeStyles","ClearIcon","xmlns","strokeLinejoin","Input","allowClear","onClear","React","showClear","_m","baseStyles","WebkitAppearance","MozAppearance","appearance","inputEl","autoCorrect","autoCapitalize","spellCheck","stopPropagation","currentTarget","focus","Select","controlledValue","options","mode","showSearch","filterOption","onSelect","onDeselect","onSearch","onDropdownVisibleChange","dropdownClassName","dropdownStyle","_o","defaultOpen","controlledOpen","open","maxTagCount","tagRender","optionRender","_p","_q","_r","internalOpen","setInternalOpen","_s","searchValue","setSearchValue","_t","focusedIndex","setFocusedIndex","selectRef","dropdownRef","_u","dropdownPosition","setDropdownPosition","isOpenControlled","isOpen","isMultiple","getSelectedOptions","useCallback","values","isArray","opt","includes","getFilteredOptions","String","toLowerCase","search","filteredOptions","useMemo","updatePosition_1","rect","getBoundingClientRect","estimatedDropdownHeight","offsetHeight","Math","min","max","spaceBelow","window","innerHeight","bottom","spaceAbove","shouldOpenUp","top_1","scrollY","scrollX","placement","requestAnimationFrame","addEventListener","removeEventListener","handleClickOutside","event","contains","document","handleKeyDown","prev","option","handleSelect","focusedItem","querySelectorAll","scrollIntoView","block","behavior","newValues_1","currentValues","v","selectedOptions_1","handleRemoveTag","newValues","find","handleClear","newValue","selectedOptions","hasValue","renderTags","tagsToShow","remainingCount","flexWrap","map","tagProps","closable","onClose","maxWidth","textOverflow","WebkitTouchCallout","touchAction","newOpen","setTimeout","onTouchStart","onTouchEnd","tabIndex","minHeight","val","background","createPortal","maxHeight","transformOrigin","WebkitOverflowScrolling","overscrollBehavior","textAlign","index","isSelected","isFocused","selected","body","SortIcon","SortDescIcon","SortAscIcon","LeftArrowIcon","RightArrowIcon","Pagination","controlledCurrent","defaultCurrent","total","controlledPageSize","pageSize","defaultPageSize","showSizeChanger","pageSizeOptions","showQuickJumper","showTotal","onShowSizeChange","simple","hideOnSinglePage","responsive","showLessItems","itemRender","internalCurrent","setInternalCurrent","internalPageSize","setInternalPageSize","jumpToPage","setJumpToPage","totalPages","ceil","handlePageChange","page","handleJumpTo","parseInt","marginRight","start","end","_","pages","push","getPageNumbers","item","isActive","element","renderItem","Number","newPageSize","newTotalPages","newCurrent","goButton","Checkbox","checked","indeterminate","hint","isFocusedProp","hovered","setHovered","showFocus","handleClick","boxSize","hasLabel","role","marginTop","TableLoadingSpinner","strokeDasharray","strokeDashoffset","TableLoadingOverlay","spinColor","content","inset","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","columns","dataSource","rowSelection","pagination","bordered","locale","showHeader","title","footer","summary","scroll","tableLayout","onSorterChange","onPaginationChange","onRow","innerClassName","expandable","rowClassName","onHeaderRow","sticky","loadingSpinColor","selectedRowKeys","defaultSelectedRowKeys","setSelectedRowKeys","Map","sorters","setSorters","defaultExpandedRowKeys","expandedRowKeys","setExpandedRowKeys","_v","currentPage","setCurrentPage","_w","setPageSize","_x","draggedRowIndex","setDraggedRowIndex","_y","dragOverRowIndex","setDragOverRowIndex","_z","isMobile","setIsMobile","tableRef","headerRef","checkMobile","innerWidth","checkboxProps","getCheckboxProps","newSelectedRowKeys","k","selectedRows","Event","handleSelectAll","currentPageData","keys","changeRows","onSelectAll","handleSort","column","columnKey","dataIndex","newSorters","delete","set","sorterArray","entries","c","field","currentSorter","currentDataSource","action","expanded","newExpandedRowKeys","onExpand","onExpandedRowsChange","emptyContent","getProcessedData","processed","sort","a","b","_loop_1","col","compareResult","sorter","aVal","bVal","sorterEntries_1","_i","state_1","processedData","isServerPagination","paginatedData","renderCell","render","getFixedOffset","columnIndex","fixed","isHeader","fixedDirection","offset","columnWidth","renderHeader","enabledRows","enabledKeys","allSelected","someSelected","headerColumns","colIndex","sortOrder","get","fixedOffset","align","borderBottom","onHeaderCell","sortColumn","selectWidth","selectColumn","hideSelectAll","every","some","columnTitle","unshift","headerRowProps","handleDragStart","handleDragOver","handleDrop","dropIndex","newData","draggedItem","splice","handleDragEnd","renderEmpty","emptyText","colSpan","renderRows","isExpanded","rowProps","isLastRow","draggable","onDragStart","onDragOver","onDrop","onDragEnd","cellProps","onCell","rowSpan","expandedRowRender","renderPagination","hasFixedColumns","hasAllColumnWidths","totalWidth","x","sum","replace","effectiveTableLayout","tableStyle","borderCollapse","borderSpacing","wrapperStyle","y","marginBottom","startsWith","displayValue","scrollContainerStyle","overflowX","overflowY"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@3.30.0_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/tokens.ts","../src/components/shared/colorUtils.ts","../src/components/shared/buttonStyles.ts","../src/components/Button/index.tsx","../src/components/shared/fieldStyles.ts","../src/components/Input/InputGroup.tsx","../src/components/Input/index.tsx","../src/components/Select/index.tsx","../src/icons/index.tsx","../src/components/Pagination/index.tsx","../src/components/shared/controlStyles.ts","../src/components/Checkbox/index.tsx","../src/components/Table/index.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import React, { createContext, useContext, useMemo } from 'react';\n\nexport interface ThemeConfig {\n primaryColor?: string;\n}\n\nconst defaultTheme: ThemeConfig = {\n primaryColor: '#FB6011',\n};\n\nconst ThemeContext = createContext<ThemeConfig>(defaultTheme);\n\nexport interface ThemeProviderProps {\n theme?: ThemeConfig;\n children: React.ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme, children }) => {\n const themeValue = useMemo(() => {\n return {\n ...defaultTheme,\n ...theme,\n };\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={themeValue}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeConfig => {\n const context = useContext(ThemeContext);\n if (!context) {\n // 如果没有 Provider,返回默认主题\n return defaultTheme;\n }\n return context;\n};\n\n// 导出默认主题色,供组件内部使用\nexport const getDefaultPrimaryColor = () => defaultTheme.primaryColor!;\n\n","/**\n * Aha Components — Design Tokens (TypeScript)\n * Source: Untitled UI (Tokens Studio export), brand: Orange (#fb6011)\n * Synced with tokens.json / theme.css\n */\n\n// ─────────────────────────────────────────\n// Primitives: Base\n// ─────────────────────────────────────────\nexport const colorBase = {\n white: '#ffffff',\n black: '#000000',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Brand (Orange)\n// ─────────────────────────────────────────\nexport const colorBrandScale = {\n 25: '#fff9f2',\n 50: '#fff6ed',\n 100: '#ffead5',\n 200: '#ffd1a9',\n 300: '#feb073',\n 400: '#fd843a',\n 500: '#fb6011',\n 600: '#ec470a',\n 700: '#c4330a',\n 800: '#9b2911',\n 900: '#7d2511',\n 950: '#441006',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Error\n// ─────────────────────────────────────────\nexport const colorErrorScale = {\n 25: '#fffbfa',\n 50: '#fef3f2',\n 100: '#fee4e2',\n 200: '#fecdca',\n 300: '#fda29b',\n 400: '#f97066',\n 500: '#f04438',\n 600: '#d92d20',\n 700: '#b42318',\n 800: '#912018',\n 900: '#7a271a',\n 950: '#55160c',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Warning\n// ─────────────────────────────────────────\nexport const colorWarningScale = {\n 25: '#fffcf5',\n 50: '#fffaeb',\n 100: '#fef0c7',\n 200: '#fedf89',\n 300: '#fec84b',\n 400: '#fdb022',\n 500: '#f79009',\n 600: '#dc6803',\n 700: '#b54708',\n 800: '#93370d',\n 900: '#7a2e0e',\n 950: '#4e1d09',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Success\n// ─────────────────────────────────────────\nexport const colorSuccessScale = {\n 25: '#f6fef9',\n 50: '#ecfdf3',\n 100: '#dcfae6',\n 200: '#abefc6',\n 300: '#75e0a7',\n 400: '#47cd89',\n 500: '#17b26a',\n 600: '#079455',\n 700: '#067647',\n 800: '#085d3a',\n 900: '#074d31',\n 950: '#053321',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Gray (warm gray — neutral scale)\n// ─────────────────────────────────────────\nexport const colorGray = {\n 25: '#fdfdfc',\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d7d3d0',\n 400: '#a9a29d',\n 500: '#79716b',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n 950: '#171412',\n} as const;\n\n// Backward-compat alias (components use colorNeutral[200] etc.)\nexport const colorNeutral = colorGray;\n\n// ─────────────────────────────────────────\n// Primitives: Gray Blue\n// ─────────────────────────────────────────\nexport const colorGrayBlue = {\n 25: '#fcfcfd',\n 50: '#f8f9fc',\n 100: '#eaecf5',\n 200: '#d5d9eb',\n 300: '#b3b8db',\n 400: '#717bbc',\n 500: '#4e5ba6',\n 600: '#3e4784',\n 700: '#363f72',\n 800: '#293056',\n 900: '#101323',\n 950: '#0d0f1c',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Moss\n// ─────────────────────────────────────────\nexport const colorMoss = {\n 25: '#fafdf7',\n 50: '#f5fbee',\n 100: '#e6f4d7',\n 200: '#ceeab0',\n 300: '#acdc79',\n 400: '#86cb3c',\n 500: '#669f2a',\n 600: '#4f7a21',\n 700: '#3f621a',\n 800: '#335015',\n 900: '#2b4212',\n 950: '#1a280b',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Green Light\n// ─────────────────────────────────────────\nexport const colorGreenLight = {\n 25: '#fafef5',\n 50: '#f3fee7',\n 100: '#e3fbcc',\n 200: '#d0f8ab',\n 300: '#a6ef67',\n 400: '#85e13a',\n 500: '#66c61c',\n 600: '#4ca30d',\n 700: '#3b7c0f',\n 800: '#326212',\n 900: '#2b5314',\n 950: '#15290a',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Green\n// ─────────────────────────────────────────\nexport const colorGreen = {\n 25: '#f6fef9',\n 50: '#edfcf2',\n 100: '#d3f8df',\n 200: '#aaf0c4',\n 300: '#73e2a3',\n 400: '#3ccb7f',\n 500: '#16b364',\n 600: '#099250',\n 700: '#087443',\n 800: '#095c37',\n 900: '#084c2e',\n 950: '#052e1c',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Teal\n// ─────────────────────────────────────────\nexport const colorTeal = {\n 25: '#f6fefc',\n 50: '#f0fdf9',\n 100: '#ccfbef',\n 200: '#99f6e0',\n 300: '#5fe9d0',\n 400: '#2ed3b7',\n 500: '#15b79e',\n 600: '#0e9384',\n 700: '#107569',\n 800: '#125d56',\n 900: '#134e48',\n 950: '#0a2926',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Cyan\n// ─────────────────────────────────────────\nexport const colorCyan = {\n 25: '#f5feff',\n 50: '#ecfdff',\n 100: '#cff9fe',\n 200: '#a5f0fc',\n 300: '#67e3f9',\n 400: '#22ccee',\n 500: '#06aed4',\n 600: '#088ab2',\n 700: '#0e7090',\n 800: '#155b75',\n 900: '#164c63',\n 950: '#0d2d3a',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Blue Light\n// ─────────────────────────────────────────\nexport const colorBlueLight = {\n 25: '#f5fbff',\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#b9e6fe',\n 300: '#7cd4fd',\n 400: '#36bffa',\n 500: '#0ba5ec',\n 600: '#0086c9',\n 700: '#026aa2',\n 800: '#065986',\n 900: '#0b4a6f',\n 950: '#062c41',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Blue\n// ─────────────────────────────────────────\nexport const colorBlue = {\n 25: '#f5faff',\n 50: '#eff8ff',\n 100: '#d1e9ff',\n 200: '#b2ddff',\n 300: '#84caff',\n 400: '#53b1fd',\n 500: '#2e90fa',\n 600: '#1570ef',\n 700: '#175cd3',\n 800: '#1849a9',\n 900: '#194185',\n 950: '#102a56',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Blue Dark\n// ─────────────────────────────────────────\nexport const colorBlueDark = {\n 25: '#f5f8ff',\n 50: '#eff4ff',\n 100: '#d1e0ff',\n 200: '#b2ccff',\n 300: '#84adff',\n 400: '#528bff',\n 500: '#2970ff',\n 600: '#155eef',\n 700: '#004eeb',\n 800: '#0040c1',\n 900: '#00359e',\n 950: '#002266',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Indigo\n// ─────────────────────────────────────────\nexport const colorIndigo = {\n 25: '#f5f8ff',\n 50: '#eef4ff',\n 100: '#e0eaff',\n 200: '#c7d7fe',\n 300: '#a4bcfd',\n 400: '#8098f9',\n 500: '#6172f3',\n 600: '#444ce7',\n 700: '#3538cd',\n 800: '#2d31a6',\n 900: '#2d3282',\n 950: '#1f235b',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Violet\n// ─────────────────────────────────────────\nexport const colorViolet = {\n 25: '#fbfaff',\n 50: '#f5f3ff',\n 100: '#ece9fe',\n 200: '#ddd6fe',\n 300: '#c3b5fd',\n 400: '#a48afb',\n 500: '#875bf7',\n 600: '#7839ee',\n 700: '#6927da',\n 800: '#5720b7',\n 900: '#491c96',\n 950: '#2e125e',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Purple\n// ─────────────────────────────────────────\nexport const colorPurple = {\n 25: '#fafaff',\n 50: '#f4f3ff',\n 100: '#ebe9fe',\n 200: '#d9d6fe',\n 300: '#bdb4fe',\n 400: '#9b8afb',\n 500: '#7a5af8',\n 600: '#6938ef',\n 700: '#5925dc',\n 800: '#4a1fb8',\n 900: '#3e1c96',\n 950: '#27115f',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Fuchsia\n// ─────────────────────────────────────────\nexport const colorFuchsia = {\n 25: '#fefaff',\n 50: '#fdf4ff',\n 100: '#fbe8ff',\n 200: '#f6d0fe',\n 300: '#eeaafd',\n 400: '#e478fa',\n 500: '#d444f1',\n 600: '#ba24d5',\n 700: '#9f1ab1',\n 800: '#821890',\n 900: '#6f1877',\n 950: '#47104c',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Pink\n// ─────────────────────────────────────────\nexport const colorPink = {\n 25: '#fef6fb',\n 50: '#fdf2fa',\n 100: '#fce7f6',\n 200: '#fcceee',\n 300: '#faa7e0',\n 400: '#f670c7',\n 500: '#ee46bc',\n 600: '#dd2590',\n 700: '#c11574',\n 800: '#9e165f',\n 900: '#851651',\n 950: '#4e0d30',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Rose\n// ─────────────────────────────────────────\nexport const colorRose = {\n 25: '#fff5f6',\n 50: '#fff1f3',\n 100: '#ffe4e8',\n 200: '#fecdd6',\n 300: '#fea3b4',\n 400: '#fd6f8e',\n 500: '#f63d68',\n 600: '#e31b54',\n 700: '#c01048',\n 800: '#a11043',\n 900: '#89123e',\n 950: '#510b24',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Orange Dark\n// ─────────────────────────────────────────\nexport const colorOrangeDark = {\n 25: '#fff9f5',\n 50: '#fff4ed',\n 100: '#ffe6d5',\n 200: '#ffd6ae',\n 300: '#ff9c66',\n 400: '#ff692e',\n 500: '#ff4405',\n 600: '#e62e05',\n 700: '#bc1b06',\n 800: '#97180c',\n 900: '#771a0d',\n 950: '#57130a',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Orange\n// ─────────────────────────────────────────\nexport const colorOrange = {\n 25: '#fefaf5',\n 50: '#fef6ee',\n 100: '#fdead7',\n 200: '#f9dbaf',\n 300: '#f7b27a',\n 400: '#f38744',\n 500: '#ef6820',\n 600: '#e04f16',\n 700: '#b93815',\n 800: '#932f19',\n 900: '#772917',\n 950: '#511c10',\n} as const;\n\n// ─────────────────────────────────────────\n// Primitives: Yellow\n// ─────────────────────────────────────────\nexport const colorYellow = {\n 25: '#fefdf0',\n 50: '#fefbe8',\n 100: '#fef7c3',\n 200: '#feee95',\n 300: '#fde272',\n 400: '#fac515',\n 500: '#eaaa08',\n 600: '#ca8504',\n 700: '#a15c07',\n 800: '#854a0e',\n 900: '#713b12',\n 950: '#542c0d',\n} as const;\n\n// ─────────────────────────────────────────\n// Backward-compat: colorBrand (used by components)\n// ─────────────────────────────────────────\nexport const colorBrand = {\n primary: colorBrandScale[500], // #fb6011\n hover: colorBrandScale[400], // #fd843a\n pressed: colorBrandScale[600], // #ec470a\n} as const;\n\n// ─────────────────────────────────────────\n// Backward-compat: colorSemantic (used by components)\n// ─────────────────────────────────────────\nexport const colorSemantic = {\n success: {\n bg: colorSuccessScale[50], // #ecfdf3\n text: colorSuccessScale[600], // #079455\n border: colorSuccessScale[200], // #abefc6\n fill: colorSuccessScale[500], // #17b26a\n icon: colorSuccessScale[600], // #079455\n },\n error: {\n bg: colorErrorScale[50], // #fef3f2\n text: colorErrorScale[700], // #b42318\n border: colorErrorScale[200], // #fecdca\n strong: colorErrorScale[500], // #f04438 (used for input error border)\n fill: colorErrorScale[600], // #d92d20\n icon: colorErrorScale[500], // #f04438\n },\n warning: {\n bg: colorWarningScale[50], // #fffaeb\n text: colorWarningScale[600], // #dc6803\n border: colorWarningScale[200], // #fedf89\n fill: colorWarningScale[400], // #fdb022\n icon: colorWarningScale[600], // #dc6803\n },\n info: {\n bg: colorBlue[50], // #eff8ff\n text: colorBlue[700], // #175cd3\n border: colorBlue[200], // #b2ddff\n fill: colorBlue[500], // #2e90fa\n icon: colorBlue[600], // #1570ef\n },\n} as const;\n\n// ─────────────────────────────────────────\n// Backward-compat: colorDecorative (Tag 系列)\n// ─────────────────────────────────────────\nexport const colorDecorative = {\n Green: { bg: colorSuccessScale[50], text: colorSuccessScale[700], border: colorSuccessScale[200], fill: colorSuccessScale[500], icon: colorSuccessScale[600] },\n Red: { bg: colorErrorScale[50], text: colorErrorScale[800], border: colorErrorScale[200], fill: colorErrorScale[500], icon: colorErrorScale[600] },\n Orange: { bg: colorBrandScale[50], text: colorBrandScale[800], border: colorBrandScale[200], fill: colorBrandScale[500], icon: colorBrandScale[700] },\n Cyan: { bg: colorCyan[50], text: colorCyan[700], border: colorCyan[200], fill: colorCyan[500], icon: colorCyan[600] },\n Violet: { bg: colorViolet[50], text: colorViolet[700], border: colorViolet[200], fill: colorViolet[500], icon: colorViolet[600] },\n Pink: { bg: colorPink[50], text: colorPink[700], border: colorPink[200], fill: colorPink[500], icon: colorPink[600] },\n Yellow: { bg: colorWarningScale[50], text: colorWarningScale[700], border: colorWarningScale[200], fill: colorWarningScale[400], icon: colorWarningScale[600] },\n Blue: { bg: colorBlue[50], text: colorBlue[700], border: colorBlue[200], fill: colorBlue[500], icon: colorBlue[600] },\n Gray: { bg: colorGray[100], text: colorGray[700], border: colorGray[200], fill: colorGray[700], icon: colorGray[600] },\n} as const;\n\nexport type DecorativeColor = keyof typeof colorDecorative;\n\n// ─────────────────────────────────────────\n// Semantic tokens — Light mode\n// ─────────────────────────────────────────\nexport const semanticText = {\n primary: '#1c1917',\n secondary: '#44403c',\n tertiary: '#57534e',\n quaternary: '#79716b',\n disabled: '#79716b',\n placeholder: '#79716b',\n placeholderSubtle: '#d7d3d0',\n white: '#ffffff',\n brandPrimary: '#7d2511',\n brandSecondary: '#ec470a',\n brandTertiary: '#fb6011',\n errorPrimary: '#d92d20',\n warningPrimary: '#dc6803',\n successPrimary: '#079455',\n} as const;\n\nexport const semanticBorder = {\n primary: '#d7d3d0',\n secondary: '#e7e5e4',\n tertiary: '#f5f5f4',\n brand: '#fb6011',\n error: '#f04438',\n errorSubtle: '#fda29b',\n disabled: '#d7d3d0',\n disabledSubtle: '#e7e5e4',\n} as const;\n\nexport const semanticBg = {\n primary: '#ffffff',\n secondary: '#fafaf9',\n tertiary: '#f5f5f4',\n quaternary: '#e7e5e4',\n disabled: '#f5f5f4',\n disabledSubtle: '#fafaf9',\n overlay: '#171412',\n brandPrimary: '#fff6ed',\n brandSecondary: '#ffead5',\n brandSolid: '#fb6011',\n brandSolidHover: '#ec470a',\n errorPrimary: '#fef3f2',\n errorSolid: '#d92d20',\n warningPrimary: '#fffaeb',\n warningSolid: '#dc6803',\n successPrimary: '#ecfdf3',\n successSolid: '#079455',\n} as const;\n\nexport const semanticFg = {\n primary: '#1c1917',\n secondary: '#44403c',\n tertiary: '#57534e',\n quaternary: '#a9a29d',\n disabled: '#a9a29d',\n disabledSubtle: '#d7d3d0',\n white: '#ffffff',\n brandPrimary: '#fb6011',\n brandSecondary: '#fb6011',\n errorPrimary: '#d92d20',\n errorSecondary: '#f04438',\n warningPrimary: '#dc6803',\n warningSecondary: '#f79009',\n successPrimary: '#079455',\n successSecondary: '#17b26a',\n} as const;\n\n// ─────────────────────────────────────────\n// Typography\n// ─────────────────────────────────────────\nexport const typography = {\n fontFamily: {\n display: '\"DM Sans\", system-ui, -apple-system, sans-serif',\n body: '\"DM Sans\", system-ui, -apple-system, sans-serif',\n base: '\"DM Sans\", system-ui, -apple-system, sans-serif',\n },\n fontSize: {\n // Text\n xs: '12px',\n sm: '14px',\n base: '16px',\n md: '16px',\n lg: '18px',\n xl: '20px',\n // Display\n displayXs: '24px',\n displaySm: '30px',\n displayMd: '36px',\n displayLg: '48px',\n displayXl: '60px',\n display2xl: '72px',\n },\n fontWeight: {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n // Text\n xs: '18px',\n sm: '20px',\n base: '24px',\n md: '24px',\n lg: '28px',\n xl: '30px',\n // Display\n displayXs: '32px',\n displaySm: '38px',\n displayMd: '44px',\n displayLg: '60px',\n displayXl: '72px',\n display2xl: '90px',\n },\n} as const;\n\n// ─────────────────────────────────────────\n// Spacing (named scale)\n// ─────────────────────────────────────────\nexport const spacing = {\n none: '0px',\n xxs: '2px',\n xs: '4px',\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n '2xl': '20px',\n '3xl': '24px',\n '4xl': '32px',\n '5xl': '40px',\n '6xl': '48px',\n '7xl': '64px',\n '8xl': '80px',\n '9xl': '96px',\n '10xl': '128px',\n '11xl': '160px',\n // Legacy numeric aliases\n 0: '0px',\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '20px',\n} as const;\n\n// ─────────────────────────────────────────\n// Radius\n// ─────────────────────────────────────────\nexport const radius = {\n none: '0px',\n xxs: '2px',\n xs: '4px',\n sm: '6px',\n md: '8px',\n lg: '10px',\n xl: '12px',\n '2xl': '16px',\n '3xl': '20px',\n '4xl': '24px',\n full: '9999px',\n} as const;\n\n// ─────────────────────────────────────────\n// Component Sizing (project-specific)\n// ─────────────────────────────────────────\nexport const sizing = {\n tag: {\n sm: '20px',\n lg: '24px',\n },\n field: {\n sm: '32px',\n ms: '36px',\n md: '40px',\n lg: '48px',\n },\n icon: {\n sm: '14px',\n md: '16px',\n lg: '18px',\n xl: '20px',\n },\n} as const;\n\n// ─────────────────────────────────────────\n// Border\n// ─────────────────────────────────────────\nexport const border = {\n radius: {\n sm: radius.sm, // 6px — Alert, Tag\n md: radius.md, // 8px — Button, Input (default)\n lg: radius.lg, // 10px\n xl: radius.xl, // 12px\n full: radius.full,\n },\n width: '1px',\n color: {\n default: semanticBorder.secondary, // #e7e5e4\n hover: semanticBorder.primary, // #d7d3d0\n focus: semanticBorder.brand, // #fb6011\n error: semanticBorder.error, // #f04438\n disabled: semanticBorder.disabled, // #d7d3d0\n },\n} as const;\n\n// ─────────────────────────────────────────\n// Shadow\n// ─────────────────────────────────────────\nexport const shadow = {\n xs: '0px 1px 2px 0px #0a0d120d',\n xsSkeuomorphic: 'inset 0px 0px 0px 1px #0a0d122e, inset 0px -2px 0px 0px #0a0d120d, 0px 1px 2px 0px #0a0d120d',\n sm: '0px 1px 3px 0px #0a0d121a, 0px 1px 2px -1px #0a0d121a',\n md: '0px 4px 6px -1px #0a0d121a, 0px 2px 4px -2px #0a0d120f',\n lg: '0px 12px 16px -4px #0a0d1214, 0px 4px 6px -2px #0a0d1208, 0px 2px 2px -1px #0a0d120a',\n xl: '0px 20px 24px -4px #0a0d1214, 0px 8px 8px -4px #0a0d1208, 0px 3px 3px -1.5px #0a0d120a',\n '2xl': '0px 24px 48px -12px #0a0d122e, 0px 4px 4px -2px #0a0d120a',\n '3xl': '0px 32px 64px -12px #0a0d1224, 0px 5px 5px -2.5px #0a0d120a',\n} as const;\n\n// ─────────────────────────────────────────\n// Focus Rings\n// ─────────────────────────────────────────\nexport const focusRing = {\n default: `0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorBrandScale[500]}`,\n shadowXs: `0px 1px 2px 0px #0a0d120d, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorBrandScale[500]}`,\n shadowXsSkeuomorphic: `inset 0px 0px 0px 1px #0a0d122e, inset 0px -2px 0px 0px #0a0d120d, 0px 1px 2px 0px #0a0d120d, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorBrandScale[500]}`,\n shadowSm: `0px 1px 3px 0px #0a0d121a, 0px 1px 2px 0px #0a0d121a, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorBrandScale[500]}`,\n error: `0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorErrorScale[500]}`,\n errorShadowXs: `0px 1px 2px 0px #0a0d120d, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorErrorScale[500]}`,\n errorShadowXsSkeuomorphic: `inset 0px 0px 0px 1px #0a0d122e, inset 0px -2px 0px 0px #0a0d120d, 0px 1px 2px 0px #0a0d120d, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${colorErrorScale[500]}`,\n} as const;\n\n// ─────────────────────────────────────────\n// Backdrop Blur\n// ─────────────────────────────────────────\nexport const backdropBlur = {\n sm: 'blur(8px)',\n md: 'blur(16px)',\n lg: 'blur(24px)',\n xl: 'blur(40px)',\n} as const;\n\n// ─────────────────────────────────────────\n// Motion\n// ─────────────────────────────────────────\nexport const motion = {\n duration: { base: '0.2s' },\n easing: { base: 'ease' },\n transition: { base: 'all 0.2s ease' },\n} as const;\n\n// ─────────────────────────────────────────\n// 默认 Export(全量)\n// ─────────────────────────────────────────\nconst tokens = {\n color: {\n base: colorBase,\n brand: colorBrandScale,\n error: colorErrorScale,\n warning: colorWarningScale,\n success: colorSuccessScale,\n gray: colorGray,\n grayBlue: colorGrayBlue,\n moss: colorMoss,\n greenLight: colorGreenLight,\n green: colorGreen,\n teal: colorTeal,\n cyan: colorCyan,\n blueLight: colorBlueLight,\n blue: colorBlue,\n blueDark: colorBlueDark,\n indigo: colorIndigo,\n violet: colorViolet,\n purple: colorPurple,\n fuchsia: colorFuchsia,\n pink: colorPink,\n rose: colorRose,\n orangeDark: colorOrangeDark,\n orange: colorOrange,\n yellow: colorYellow,\n // semantic\n semantic: {\n text: semanticText,\n border: semanticBorder,\n bg: semanticBg,\n fg: semanticFg,\n },\n // backward-compat\n neutral: colorNeutral,\n decorative: colorDecorative,\n },\n typography,\n spacing,\n radius,\n sizing,\n border,\n shadow,\n focusRing,\n backdropBlur,\n motion,\n} as const;\n\nexport default tokens;\n","import { colorBrandScale } from '../../tokens';\n\n/** 默认品牌色(与 ThemeProvider 默认值一致,忽略大小写) */\nexport const DEFAULT_BRAND_COLOR = colorBrandScale[500];\n\nexport function isDefaultBrandColor(color?: string): boolean {\n if (!color) return true;\n return color.toLowerCase() === DEFAULT_BRAND_COLOR.toLowerCase();\n}\n\nexport function resolveBrandColor(color?: string): string {\n return color || DEFAULT_BRAND_COLOR;\n}\n\n/** 品牌 hover 色:与旧版 CSS 变量 fallback `--color-bg-brand-solid_hover` 保持一致 */\nexport const BRAND_HOVER_COLOR = colorBrandScale[600];\n","import {\n colorBrandScale,\n colorErrorScale,\n focusRing,\n radius,\n semanticBg,\n semanticBorder,\n semanticFg,\n semanticText,\n shadow,\n typography,\n} from '../../tokens';\nimport { BRAND_HOVER_COLOR, isDefaultBrandColor, resolveBrandColor } from './colorUtils';\n\nconst DEFAULT_BRAND_ICON = colorBrandScale[500];\n\nexport type ButtonNormalizedHierarchy =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'link-color'\n | 'link-gray'\n | 'destructive-primary'\n | 'destructive-secondary'\n | 'destructive-tertiary'\n | 'destructive-link';\n\nexport interface ButtonVisuals {\n bg: string;\n color: string;\n iconColor: string;\n border: string;\n boxShadow: string;\n textDecoration?: string;\n}\n\nexport function getButtonVisuals(options: {\n hierarchy: ButtonNormalizedHierarchy;\n disabled: boolean;\n interactive: boolean;\n brandColor?: string;\n}): ButtonVisuals {\n const { hierarchy, disabled, interactive } = options;\n const brand = resolveBrandColor(options.brandColor);\n const brandHover = BRAND_HOVER_COLOR;\n const brandText = colorBrandScale[600];\n const brandTextHover = colorBrandScale[700];\n\n if (disabled) {\n if (\n hierarchy === 'default' ||\n hierarchy === 'primary' ||\n hierarchy === 'secondary' ||\n hierarchy === 'destructive-primary' ||\n hierarchy === 'destructive-secondary'\n ) {\n return {\n bg: semanticBg.disabled,\n color: semanticFg.disabled,\n iconColor: semanticFg.disabled,\n border: `1px solid ${semanticBorder.disabledSubtle}`,\n boxShadow: 'none',\n };\n }\n return {\n bg: 'transparent',\n color: semanticFg.disabled,\n iconColor: semanticFg.disabled,\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n if (hierarchy === 'default') {\n return {\n bg: interactive ? semanticBg.secondary : semanticBg.primary,\n color: interactive ? brandText : semanticText.secondary,\n iconColor: interactive ? DEFAULT_BRAND_ICON : semanticFg.quaternary,\n border: interactive ? `1px solid ${DEFAULT_BRAND_ICON}` : `1px solid ${semanticBorder.primary}`,\n boxShadow: 'none',\n };\n }\n\n if (hierarchy === 'primary') {\n return {\n bg: interactive ? brandHover : brand,\n color: semanticText.white,\n iconColor: colorBrandScale[300],\n border: 'none',\n boxShadow: shadow.xsSkeuomorphic,\n };\n }\n\n if (hierarchy === 'secondary') {\n return {\n bg: interactive ? semanticBg.secondary : semanticBg.primary,\n color: interactive ? colorGrayHoverText() : semanticText.secondary,\n iconColor: interactive ? '#79716b' : semanticFg.quaternary,\n border: 'none',\n boxShadow: shadow.xsSkeuomorphic,\n };\n }\n\n if (hierarchy === 'tertiary') {\n return {\n bg: interactive ? semanticBg.secondary : 'transparent',\n color: interactive ? colorGray700Text() : semanticText.tertiary,\n iconColor: interactive ? '#79716b' : semanticFg.quaternary,\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n if (hierarchy === 'link-color') {\n return {\n bg: 'transparent',\n color: interactive ? brandTextHover : brandText,\n iconColor: DEFAULT_BRAND_ICON,\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n }\n\n if (hierarchy === 'link-gray') {\n return {\n bg: 'transparent',\n color: interactive ? colorGray700Text() : semanticText.tertiary,\n iconColor: semanticFg.quaternary,\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n }\n\n if (hierarchy === 'destructive-primary') {\n return {\n bg: interactive ? colorErrorScale[600] : colorErrorScale[500],\n color: semanticText.white,\n iconColor: interactive ? colorErrorScale[200] : colorErrorScale[300],\n border: 'none',\n boxShadow: shadow.xsSkeuomorphic,\n };\n }\n\n if (hierarchy === 'destructive-secondary') {\n return {\n bg: interactive ? semanticBg.errorPrimary : semanticBg.primary,\n color: semanticText.errorPrimary,\n iconColor: semanticFg.errorSecondary,\n border: 'none',\n boxShadow: `inset 0 0 0 1px ${semanticBorder.errorSubtle}, inset 0 -2px 0 0 rgba(10,13,18,0.05), 0 1px 2px 0 rgba(10,13,18,0.05)`,\n };\n }\n\n if (hierarchy === 'destructive-tertiary') {\n return {\n bg: interactive ? semanticBg.errorPrimary : 'transparent',\n color: semanticText.errorPrimary,\n iconColor: semanticFg.errorSecondary,\n border: 'none',\n boxShadow: 'none',\n };\n }\n\n return {\n bg: 'transparent',\n color: interactive ? colorErrorScale[700] : semanticText.errorPrimary,\n iconColor: semanticFg.errorSecondary,\n border: 'none',\n boxShadow: 'none',\n textDecoration: interactive ? 'underline' : 'none',\n };\n}\n\nfunction colorGrayHoverText() {\n return '#292524';\n}\n\nfunction colorGray700Text() {\n return '#44403c';\n}\n\nexport function getButtonFocusShadow(\n hierarchy: ButtonNormalizedHierarchy,\n showFocusRing: boolean,\n brandColor?: string,\n): string | undefined {\n if (!showFocusRing) return undefined;\n\n const isDestructive =\n hierarchy === 'destructive-primary' ||\n hierarchy === 'destructive-secondary' ||\n hierarchy === 'destructive-tertiary' ||\n hierarchy === 'destructive-link';\n\n if (isDestructive) {\n if (hierarchy === 'destructive-primary' || hierarchy === 'destructive-secondary') {\n return focusRing.errorShadowXsSkeuomorphic;\n }\n return focusRing.error;\n }\n\n if (hierarchy === 'primary' || hierarchy === 'secondary') {\n if (isDefaultBrandColor(brandColor)) {\n return focusRing.shadowXsSkeuomorphic;\n }\n return `${shadow.xsSkeuomorphic}, 0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${brandColor}`;\n }\n\n if (isDefaultBrandColor(brandColor)) {\n return focusRing.default;\n }\n return `0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${brandColor}`;\n}\n\nexport const buttonFontFamily = typography.fontFamily.body;\nexport const buttonRadiusMd = radius.md;\n","import React, { useState } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\nimport {\n buttonFontFamily,\n buttonRadiusMd,\n getButtonFocusShadow,\n getButtonVisuals,\n} from '../shared/buttonStyles';\n\n/**\n * 对齐 Figma: Untitled UI v7 — Buttons\n * 维度:Size × Hierarchy × State × Icon only\n * Size: sm(36) / md(40) / lg(44) / xl(48)\n * Hierarchy: primary / secondary / tertiary / link-color / link-gray\n * State: default / hover / focused / disabled / loading\n * Icon only: boolean\n */\n\nexport type ButtonHierarchy =\n | 'default'\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'link-color'\n | 'link-gray'\n | 'destructive-primary'\n | 'destructive-secondary'\n | 'destructive-tertiary'\n | 'destructive-link';\n\nexport type ButtonSize =\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n // legacy aliases\n | 'small'\n | 'mediumSmall'\n | 'medium'\n | 'large';\n\nexport type ButtonType = ButtonHierarchy;\n\nexport interface ButtonProps {\n children?: React.ReactNode;\n /** 按钮层级。`default` 为带边框白底(对齐 antd);`secondary` 为 Figma 无边框 skeuomorphic 样式 */\n type?: ButtonHierarchy;\n /** 按钮尺寸(对应 Figma Size)。旧名会映射到新尺寸 */\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n /** 仅图标按钮。不传 `children`、仅传 `icon` 时自动开启 */\n iconOnly?: boolean;\n /** 受控的 Focused 视觉态,用于 Storybook 预览设计稿;真实键盘焦点由 :focus-visible 处理 */\n focused?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n htmlType?: 'button' | 'submit' | 'reset';\n className?: string;\n style?: React.CSSProperties;\n icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n [key: string]: any;\n}\n\ntype NormalizedSize = 'sm' | 'md' | 'lg' | 'xl';\ntype NormalizedHierarchy = 'default' | 'primary' | 'secondary' | 'tertiary' | 'link-color' | 'link-gray' | 'destructive-primary' | 'destructive-secondary' | 'destructive-tertiary' | 'destructive-link';\n\nconst SIZE_ALIAS: Record<ButtonSize, NormalizedSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n small: 'sm',\n mediumSmall: 'sm',\n medium: 'md',\n large: 'xl',\n};\n\nconst HIERARCHY_ALIAS: Record<ButtonHierarchy, NormalizedHierarchy> = {\n default: 'default',\n primary: 'primary',\n secondary: 'secondary',\n tertiary: 'tertiary',\n 'link-color': 'link-color',\n 'link-gray': 'link-gray',\n 'destructive-primary': 'destructive-primary',\n 'destructive-secondary': 'destructive-secondary',\n 'destructive-tertiary': 'destructive-tertiary',\n 'destructive-link': 'destructive-link',\n};\n\n/** Figma 标注的尺寸参数:高度、内边距、字号/行高、图标尺寸、间距 */\nconst SIZE_TOKENS: Record<\n NormalizedSize,\n {\n height: number;\n paddingX: number;\n paddingXLg: number; // lg/xl 大号内边距(与图标拼接时稍大)\n fontSize: number;\n lineHeight: number;\n iconSize: number;\n gap: number;\n iconOnlyPad: number;\n }\n> = {\n sm: { height: 36, paddingX: 12, paddingXLg: 12, fontSize: 14, lineHeight: 20, iconSize: 20, gap: 4, iconOnlyPad: 8 },\n md: { height: 40, paddingX: 14, paddingXLg: 14, fontSize: 14, lineHeight: 20, iconSize: 20, gap: 4, iconOnlyPad: 10 },\n lg: { height: 44, paddingX: 16, paddingXLg: 16, fontSize: 16, lineHeight: 24, iconSize: 20, gap: 6, iconOnlyPad: 12 },\n xl: { height: 48, paddingX: 18, paddingXLg: 18, fontSize: 16, lineHeight: 24, iconSize: 20, gap: 6, iconOnlyPad: 14 },\n};\n\nconst LoadingSpinner: React.FC<{ size: number; color: string }> = ({ size, color }) => (\n <>\n <style>{`@keyframes aha-button-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}`}</style>\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden\n style={{ animation: 'aha-button-spin 1s linear infinite', flexShrink: 0 }}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke={color} strokeWidth=\"2\" opacity=\"0.25\" />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n </>\n);\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n type = 'default',\n size = 'md',\n disabled = false,\n loading = false,\n iconOnly,\n focused = false,\n onClick,\n htmlType = 'button',\n className = '',\n style,\n icon,\n iconPosition = 'left',\n ...rest\n}) => {\n const { primaryColor } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const hierarchy = HIERARCHY_ALIAS[type] || 'default';\n const s = SIZE_TOKENS[SIZE_ALIAS[size] || 'md'];\n\n const isIconOnly = iconOnly ?? (!!icon && children == null);\n const isLink = hierarchy === 'link-color' || hierarchy === 'link-gray' || hierarchy === 'destructive-link';\n const isDisabled = disabled || loading;\n const showFocusRing = focused;\n\n const themeBrand = primaryColor;\n\n const visuals = getButtonVisuals({\n hierarchy,\n disabled,\n interactive: isHovered || isPressed,\n brandColor: themeBrand,\n });\n\n const focusShadow = getButtonFocusShadow(hierarchy, showFocusRing, themeBrand);\n\n const buttonStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: s.gap,\n fontFamily: buttonFontFamily,\n fontWeight: 600,\n fontSize: s.fontSize,\n lineHeight: `${s.lineHeight}px`,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition: 'background-color .15s ease, color .15s ease, box-shadow .15s ease',\n userSelect: 'none',\n WebkitTapHighlightColor: 'transparent',\n whiteSpace: 'nowrap',\n backgroundColor: visuals.bg,\n color: visuals.color,\n border: visuals.border,\n boxShadow: focusShadow ?? visuals.boxShadow,\n textDecoration: visuals.textDecoration,\n ...style,\n };\n\n if (isLink) {\n // Link 类:保留与同尺寸按钮一致的高度和横向内边距,无背景、无边框\n buttonStyle.borderRadius = '4px';\n buttonStyle.overflow = 'hidden';\n if (isIconOnly) {\n buttonStyle.width = s.height;\n buttonStyle.height = s.height;\n buttonStyle.padding = 0;\n } else {\n buttonStyle.height = s.height;\n buttonStyle.paddingLeft = s.paddingX;\n buttonStyle.paddingRight = s.paddingX;\n }\n } else {\n buttonStyle.borderRadius = buttonRadiusMd;\n if (isIconOnly) {\n buttonStyle.width = s.height;\n buttonStyle.height = s.height;\n buttonStyle.padding = 0;\n } else {\n buttonStyle.height = s.height;\n buttonStyle.paddingLeft = s.paddingX;\n buttonStyle.paddingRight = s.paddingX;\n }\n }\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n const renderIcon = () => {\n if (loading) {\n return <LoadingSpinner size={s.iconSize} color={visuals.iconColor} />;\n }\n if (!icon) return null;\n return (\n <span\n aria-hidden\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: s.iconSize,\n height: s.iconSize,\n color: visuals.iconColor,\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n );\n };\n\n const showLeftIcon = loading || (icon && iconPosition === 'left');\n const showRightIcon = !loading && icon && iconPosition === 'right';\n\n return (\n <button\n type={htmlType}\n className={[\n 'aha-button',\n `aha-button--${hierarchy}`,\n `aha-button--${SIZE_ALIAS[size] || 'md'}`,\n isIconOnly && 'aha-button--icon-only',\n isDisabled && 'aha-button--disabled',\n loading && 'aha-button--loading',\n showFocusRing && 'aha-button--focused',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={isDisabled}\n onClick={handleClick}\n onMouseEnter={() => !isDisabled && setIsHovered(true)}\n onMouseLeave={() => {\n setIsHovered(false);\n setIsPressed(false);\n }}\n onMouseDown={() => !isDisabled && setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n style={buttonStyle}\n {...rest}\n >\n {showLeftIcon && renderIcon()}\n {!isIconOnly && children}\n {showRightIcon && renderIcon()}\n {/* icon-only 且没传 icon 时,允许 children 作为图标 */}\n {isIconOnly && !icon && !loading && children}\n </button>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default Button;\n","import type React from 'react';\nimport {\n colorErrorScale,\n radius,\n semanticBg,\n semanticBorder,\n semanticFg,\n semanticText,\n shadow,\n spacing,\n typography,\n} from '../../tokens';\n\nexport const fieldFontFamily = typography.fontFamily.body;\nexport const fieldFontSizeMd = typography.fontSize.md;\nexport const fieldFontSizeSm = typography.fontSize.sm;\nexport const fieldFontSizeXs = typography.fontSize.xs;\nexport const fieldLineHeightMd = typography.lineHeight.md;\nexport const fieldLineHeightSm = typography.lineHeight.sm;\nexport const fieldLineHeightXs = typography.lineHeight.xs;\nexport const fieldRadiusMd = radius.md;\nexport const fieldShadowXs = shadow.xs;\nexport const fieldSpacingXs = spacing.xs;\n\nexport const fieldColors = {\n textPrimary: semanticText.primary,\n textSecondary: semanticText.secondary,\n textTertiary: semanticText.tertiary,\n textDisabled: semanticText.disabled,\n textPlaceholder: semanticText.placeholder,\n borderPrimary: semanticBorder.primary,\n borderDisabled: semanticBorder.disabled,\n borderBrand: semanticBorder.brand,\n borderError: semanticBorder.error,\n borderErrorSubtle: semanticBorder.errorSubtle,\n bgPrimary: semanticBg.primary,\n bgDisabledSubtle: semanticBg.disabledSubtle,\n fgDisabled: semanticFg.disabled,\n fgQuaternary: semanticFg.quaternary,\n error600: colorErrorScale[600],\n} as const;\n\nexport function getFieldFocusStyles(options: {\n disabled?: boolean;\n error?: boolean;\n focused?: boolean;\n brandColor?: string;\n}): React.CSSProperties {\n const { disabled = false, error = false, focused = false, brandColor } = options;\n const c = fieldColors;\n const boxShadow = fieldShadowXs;\n const brand = brandColor || c.borderBrand;\n\n if (disabled) {\n return { border: `1px solid ${c.borderDisabled}`, boxShadow, outline: 'none' };\n }\n if (error && focused) {\n return {\n border: `1px solid ${c.borderError}`,\n boxShadow,\n outline: `2px solid ${c.borderError}`,\n outlineOffset: '-2px',\n };\n }\n if (error) {\n return { border: `1px solid ${c.borderErrorSubtle}`, boxShadow, outline: 'none' };\n }\n if (focused) {\n return {\n border: `1px solid ${brand}`,\n boxShadow,\n outline: `2px solid ${brand}`,\n outlineOffset: '-2px',\n };\n }\n return { border: `1px solid ${c.borderPrimary}`, boxShadow, outline: 'none' };\n}\n\nexport function getFieldLabelStyle(): React.CSSProperties {\n return {\n fontFamily: fieldFontFamily,\n fontSize: fieldFontSizeSm,\n fontWeight: 500,\n lineHeight: fieldLineHeightSm,\n color: fieldColors.textSecondary,\n };\n}\n\nexport function getFieldHintStyle(error = false): React.CSSProperties {\n return {\n margin: 0,\n fontFamily: fieldFontFamily,\n fontSize: fieldFontSizeSm,\n fontWeight: 400,\n lineHeight: fieldLineHeightSm,\n color: error ? fieldColors.error600 : fieldColors.textTertiary,\n };\n}\n\nexport function getPlaceholderCss(\n selector: string,\n extraRules = '',\n placeholderColor = fieldColors.textPlaceholder,\n): string {\n return `\n ${selector}::placeholder {\n color: ${placeholderColor};\n font-size: ${fieldFontSizeMd};\n font-weight: 400;\n opacity: 1;\n }\n ${selector}::-webkit-input-placeholder { color: ${placeholderColor}; }\n ${selector}::-moz-placeholder { color: ${placeholderColor}; }\n ${selector}:-ms-input-placeholder { color: ${placeholderColor}; }\n ${extraRules}\n `;\n}\n","import React, { forwardRef, useRef, useEffect, useState } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\nimport { InputProps } from './index';\nimport {\n fieldColors,\n fieldFontFamily,\n fieldFontSizeMd,\n fieldLineHeightMd,\n fieldRadiusMd,\n getFieldFocusStyles,\n getFieldHintStyle,\n getFieldLabelStyle,\n} from '../shared/fieldStyles';\n\nexport interface InputGroupProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n error?: boolean;\n readOnly?: boolean;\n disabled?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n /** Text addon on the left (e.g. \"https://\") — auto-styled with correct padding */\n leadingText?: React.ReactNode;\n /** Text addon on the right (e.g. \"USD\") — auto-styled with correct padding */\n trailingText?: React.ReactNode;\n /** Raw ReactNode on the left (dropdown, icon button, etc.) — no padding added */\n leadingAddon?: React.ReactNode;\n /** Raw ReactNode on the right (button, select, etc.) — no padding added */\n trailingAddon?: React.ReactNode;\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n required?: boolean;\n hintText?: string;\n}\n\nconst sizeMap: Record<NonNullable<InputGroupProps['size']>, { pt: string; pb: string }> = {\n small: { pt: '5px', pb: '5px' },\n mediumSmall: { pt: '7px', pb: '7px' },\n medium: { pt: '9px', pb: '9px' },\n large: { pt: '11px', pb: '11px' },\n};\n\nconst InputGroup = forwardRef<HTMLInputElement, InputGroupProps>(({\n size = 'mediumSmall',\n error = false,\n disabled = false,\n readOnly = false,\n prefix,\n suffix,\n leadingText,\n trailingText,\n leadingAddon,\n trailingAddon,\n className = '',\n style,\n onFocus,\n onBlur,\n onKeyDown,\n onPressEnter,\n value,\n defaultValue,\n onChange,\n placeholder,\n type = 'text',\n label,\n required,\n hintText,\n ...restProps\n}, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const { primaryColor } = useTheme();\n\n useEffect(() => {\n if (typeof ref === 'function') ref(inputRef.current);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = inputRef.current;\n }, [ref]);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && onPressEnter) onPressEnter(e);\n onKeyDown?.(e);\n };\n\n const focusStyles = getFieldFocusStyles({ disabled, error, focused, brandColor: primaryColor });\n const { border, boxShadow, outline, outlineOffset } = focusStyles;\n const { pt, pb } = sizeMap[size];\n const dividerColor = disabled ? fieldColors.borderDisabled : fieldColors.borderPrimary;\n const iconColor = disabled ? fieldColors.fgDisabled : fieldColors.fgQuaternary;\n const hasPrefixIcon = !!prefix;\n const hasSuffixIcon = !!suffix;\n\n const iconSlotStyle: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n color: iconColor,\n zIndex: 1,\n pointerEvents: 'none',\n };\n\n const addonTextStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n paddingTop: pt,\n paddingBottom: pb,\n paddingLeft: '14px',\n paddingRight: '12px',\n color: fieldColors.textTertiary,\n fontFamily: fieldFontFamily,\n fontSize: fieldFontSizeMd,\n lineHeight: fieldLineHeightMd,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n backgroundColor: disabled ? fieldColors.bgDisabledSubtle : 'transparent',\n };\n\n const groupEl = (\n <div\n className={`aha-input-group ${className}`}\n style={{\n display: 'flex',\n alignItems: 'stretch',\n width: '100%',\n border,\n boxShadow,\n outline,\n outlineOffset,\n borderRadius: fieldRadiusMd,\n backgroundColor: disabled || readOnly ? fieldColors.bgDisabledSubtle : fieldColors.bgPrimary,\n overflow: 'hidden',\n boxSizing: 'border-box',\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease',\n ...style,\n }}\n >\n {leadingText !== undefined && (\n <div style={{ ...addonTextStyle, borderRight: `1px solid ${dividerColor}` }}>\n {leadingText}\n </div>\n )}\n {leadingAddon !== undefined && (\n <div style={{ display: 'flex', alignItems: 'stretch', flexShrink: 0, borderRight: `1px solid ${dividerColor}` }}>\n {leadingAddon}\n </div>\n )}\n\n <div style={{ flex: 1, position: 'relative', display: 'flex', alignItems: 'stretch', minWidth: 0 }}>\n {hasPrefixIcon && (\n <span style={{ ...iconSlotStyle, left: '14px' }}>{prefix}</span>\n )}\n <input\n ref={inputRef}\n type={type}\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={{\n flex: 1,\n border: 'none',\n outline: 'none',\n width: '100%',\n boxSizing: 'border-box',\n fontFamily: fieldFontFamily,\n fontSize: fieldFontSizeMd,\n fontWeight: 400,\n lineHeight: fieldLineHeightMd,\n backgroundColor: 'transparent',\n color: disabled ? fieldColors.textDisabled : fieldColors.textPrimary,\n paddingTop: pt,\n paddingBottom: pb,\n paddingLeft: hasPrefixIcon ? '40px' : '14px',\n paddingRight: hasSuffixIcon ? '40px' : '14px',\n }}\n autoComplete={restProps.autoComplete || 'off'}\n {...restProps}\n />\n {hasSuffixIcon && (\n <span style={{ ...iconSlotStyle, right: '14px' }}>{suffix}</span>\n )}\n </div>\n\n {trailingText !== undefined && (\n <div style={{ ...addonTextStyle, paddingLeft: '12px', paddingRight: '14px', borderLeft: `1px solid ${dividerColor}` }}>\n {trailingText}\n </div>\n )}\n {trailingAddon !== undefined && (\n <div style={{ display: 'flex', alignItems: 'stretch', flexShrink: 0, borderLeft: `1px solid ${dividerColor}` }}>\n {trailingAddon}\n </div>\n )}\n </div>\n );\n\n if (!label && !hintText) return groupEl;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px', width: '100%' }}>\n {label && (\n <label style={getFieldLabelStyle()}>\n {label}\n {required && <span style={{ color: fieldColors.error600, marginLeft: '2px' }}>*</span>}\n </label>\n )}\n {groupEl}\n {hintText && <p style={getFieldHintStyle(error)}>{hintText}</p>}\n </div>\n );\n});\n\nInputGroup.displayName = 'InputGroup';\n\nexport default InputGroup;\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\nimport {\n fieldColors,\n fieldFontFamily,\n fieldFontSizeMd,\n fieldLineHeightMd,\n fieldRadiusMd,\n fieldSpacingXs,\n getFieldFocusStyles,\n getFieldHintStyle,\n getFieldLabelStyle,\n getPlaceholderCss,\n} from '../shared/fieldStyles';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n disabled?: boolean;\n error?: boolean;\n readOnly?: boolean;\n prefix?: React.ReactNode;\n suffix?: React.ReactNode;\n allowClear?: boolean;\n onClear?: () => void;\n className?: string;\n style?: React.CSSProperties;\n type?: string;\n placeholder?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n label?: string;\n required?: boolean;\n hintText?: string;\n}\n\n// sm=36px, mediumSmall=40px, md=44px (matches Figma md), lg=48px\n// With box-sizing:border-box: height = 1px border × 2 + paddingTop + 24px lineHeight + paddingBottom\nconst sizeStyles: Record<NonNullable<InputProps['size']>, React.CSSProperties> = {\n small: { height: '36px', paddingTop: '5px', paddingBottom: '5px' },\n mediumSmall: { height: '40px', paddingTop: '7px', paddingBottom: '7px' },\n medium: { height: '44px', paddingTop: '9px', paddingBottom: '9px' },\n large: { height: '48px', paddingTop: '11px', paddingBottom: '11px' },\n};\n\nconst ClearIcon: React.FC<{ onClick: (e: React.MouseEvent) => void }> = ({ onClick }) => (\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 onClick={onClick}\n style={{ cursor: 'pointer', flexShrink: 0 }}\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\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'mediumSmall',\n disabled = false,\n error = false,\n readOnly = false,\n prefix,\n suffix,\n allowClear = false,\n onClear,\n className = '',\n style,\n type = 'text',\n placeholder,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n onPressEnter,\n label,\n required,\n hintText,\n ...restProps\n },\n ref\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = React.useState(defaultValue || value || '');\n const [focused, setFocused] = React.useState(false);\n const { primaryColor } = useTheme();\n\n useEffect(() => {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = inputRef.current;\n }\n }, [ref]);\n\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n onChange?.(e);\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && onPressEnter) onPressEnter(e);\n restProps.onKeyDown?.(e);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!isControlled) setInternalValue('');\n const syntheticEvent = {\n target: { value: '' },\n currentTarget: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n onClear?.();\n inputRef.current?.focus();\n };\n\n const showClear = allowClear && currentValue && !disabled;\n const focusStyles = getFieldFocusStyles({ disabled, error, focused, brandColor: primaryColor });\n const { height, paddingTop, paddingBottom } = sizeStyles[size];\n const hasRightContent = suffix || showClear;\n const paddingLeft = prefix ? '40px' : '14px';\n const paddingRight = hasRightContent ? '40px' : '14px';\n\n const baseStyles: React.CSSProperties = {\n width: '100%',\n height,\n boxSizing: 'border-box',\n fontFamily: fieldFontFamily,\n fontSize: fieldFontSizeMd,\n fontWeight: 400,\n lineHeight: fieldLineHeightMd,\n borderRadius: fieldRadiusMd,\n ...focusStyles,\n backgroundColor:\n disabled || readOnly ? fieldColors.bgDisabledSubtle : fieldColors.bgPrimary,\n color: disabled ? fieldColors.textDisabled : fieldColors.textPrimary,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n transition: 'border-color 0.15s ease, box-shadow 0.15s ease, outline-color 0.15s ease',\n WebkitAppearance: 'none',\n MozAppearance: 'textfield',\n appearance: 'none',\n ...style,\n };\n\n const placeholderStyles = getPlaceholderCss(\n '.aha-input-wrapper input',\n `\n .aha-input-wrapper input {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\n .aha-input-wrapper input[type=\"number\"]::-webkit-inner-spin-button,\n .aha-input-wrapper input[type=\"number\"]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .aha-input-wrapper input[type=\"number\"] { -moz-appearance: textfield; }\n `,\n );\n\n const iconColor = disabled ? fieldColors.fgDisabled : fieldColors.fgQuaternary;\n\n const iconSlotStyle: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n display: 'flex',\n alignItems: 'center',\n color: iconColor,\n zIndex: 1,\n };\n\n const inputEl = (\n <>\n <style>{placeholderStyles}</style>\n <div\n className={`aha-input-wrapper ${className}`}\n style={{ position: 'relative', display: 'block', width: '100%' }}\n >\n {prefix && (\n <span style={{ ...iconSlotStyle, left: '14px', pointerEvents: 'none' }}>\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n type={type}\n value={currentValue}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={baseStyles}\n autoComplete={restProps.autoComplete || 'off'}\n autoCorrect={restProps.autoCorrect || 'off'}\n autoCapitalize={restProps.autoCapitalize || 'off'}\n spellCheck={restProps.spellCheck || false}\n {...restProps}\n />\n {(suffix || showClear) && (\n <span style={{ ...iconSlotStyle, right: '14px', gap: fieldSpacingXs }}>\n {showClear && <ClearIcon onClick={handleClear} />}\n {suffix}\n </span>\n )}\n </div>\n </>\n );\n\n if (!label && !hintText) return inputEl;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px', width: '100%' }}>\n {label && (\n <label style={getFieldLabelStyle()}>\n {label}\n {required && (\n <span style={{ color: fieldColors.error600, marginLeft: '2px' }}>*</span>\n )}\n </label>\n )}\n {inputEl}\n {hintText && <p style={getFieldHintStyle(error)}>{hintText}</p>}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n\nexport { default as InputGroup } from './InputGroup';\nexport type { InputGroupProps } from './InputGroup';\nexport { default as InputTags } from './InputTags';\nexport type { InputTagsProps } from './InputTags';\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useTheme } from '../../theme/ThemeContext';\n\nexport interface SelectOption {\n label: React.ReactNode;\n value: string | number;\n disabled?: boolean;\n [key: string]: any;\n}\n\nexport interface SelectProps {\n /** 当前选中的值 */\n value?: string | number | (string | number)[];\n /** 默认选中的值 */\n defaultValue?: string | number | (string | number)[];\n /** 选项数据 */\n options?: SelectOption[];\n /** 是否支持多选 */\n mode?: 'multiple' | 'tags';\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否显示错误状态 */\n error?: boolean;\n /** 占位符 */\n placeholder?: string;\n /** 尺寸 */\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n /** 是否可搜索 */\n showSearch?: boolean;\n /** 搜索过滤函数 */\n filterOption?: boolean | ((input: string, option: SelectOption) => boolean);\n /** 是否允许清除 */\n allowClear?: boolean;\n /** 变化回调 */\n onChange?: (\n value: string | number | (string | number)[],\n option: SelectOption | SelectOption[]\n ) => void;\n /** 选择回调 */\n onSelect?: (value: string | number, option: SelectOption) => void;\n /** 取消选择回调 */\n onDeselect?: (value: string | number, option: SelectOption) => void;\n /** 搜索回调 */\n onSearch?: (value: string) => void;\n /** 聚焦回调 */\n onFocus?: (e: React.FocusEvent) => void;\n /** 失焦回调 */\n onBlur?: (e: React.FocusEvent) => void;\n /** 下拉框打开回调 */\n onDropdownVisibleChange?: (open: boolean) => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 下拉框类名 */\n dropdownClassName?: string;\n /** 下拉框样式 */\n dropdownStyle?: React.CSSProperties;\n /** 是否默认打开 */\n defaultOpen?: boolean;\n /** 是否打开(受控) */\n open?: boolean;\n /** 最大标签数量 */\n maxTagCount?: number | 'responsive';\n /** 标签渲染函数 */\n tagRender?: (props: {\n label: React.ReactNode;\n value: string | number;\n closable: boolean;\n onClose: () => void;\n }) => React.ReactNode;\n /** 选项渲染函数 */\n optionRender?: (option: SelectOption, info: {\n selected: boolean;\n focused: boolean;\n disabled: boolean;\n }) => React.ReactNode;\n}\n\nconst Select: React.FC<SelectProps> = ({\n value: controlledValue,\n defaultValue,\n options = [],\n mode,\n disabled = false,\n error = false,\n placeholder = 'Please select',\n size = 'medium',\n showSearch = false,\n filterOption = true,\n allowClear = false,\n onChange,\n onSelect,\n onDeselect,\n onSearch,\n onFocus,\n onBlur,\n onDropdownVisibleChange,\n className = '',\n style,\n dropdownClassName = '',\n dropdownStyle,\n defaultOpen = false,\n open: controlledOpen,\n maxTagCount,\n tagRender,\n optionRender,\n}) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const [internalValue, setInternalValue] = useState<\n string | number | (string | number)[] | undefined\n >(defaultValue !== undefined ? defaultValue : (mode ? [] : undefined));\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const [searchValue, setSearchValue] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n const selectRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const [dropdownPosition, setDropdownPosition] = useState<{\n top: number;\n left: number;\n width: number;\n placement: 'top' | 'bottom';\n } | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const isOpenControlled = controlledOpen !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n const isOpen = isOpenControlled ? controlledOpen : internalOpen;\n const isMultiple = mode === 'multiple' || mode === 'tags';\n\n // 获取选中的选项\n const getSelectedOptions = useCallback((): SelectOption[] => {\n if (!currentValue) return [];\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n return options.filter((opt) => values.includes(opt.value));\n }, [currentValue, options]);\n\n // 过滤选项\n const getFilteredOptions = useCallback((): SelectOption[] => {\n if (!showSearch || !searchValue) return options;\n\n if (filterOption === false) return options;\n\n if (typeof filterOption === 'function') {\n return options.filter((opt) => filterOption(searchValue, opt));\n }\n\n // 默认过滤:匹配 label\n return options.filter((opt) => {\n const label = String(opt.label || '').toLowerCase();\n const search = searchValue.toLowerCase();\n return label.includes(search);\n });\n }, [options, searchValue, showSearch, filterOption]);\n\n const filteredOptions = useMemo(() => getFilteredOptions(), [getFilteredOptions]);\n\n // 计算下拉框位置\n useEffect(() => {\n if (isOpen && selectRef.current) {\n const updatePosition = () => {\n if (selectRef.current) {\n const rect = selectRef.current.getBoundingClientRect();\n const estimatedDropdownHeight =\n dropdownRef.current?.offsetHeight ??\n Math.min(256, Math.max(40, filteredOptions.length * 40));\n const gap = 4;\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const shouldOpenUp =\n spaceBelow < estimatedDropdownHeight + gap && spaceAbove > spaceBelow;\n const top = shouldOpenUp\n ? rect.top + window.scrollY - estimatedDropdownHeight - gap\n : rect.bottom + window.scrollY + gap;\n\n setDropdownPosition({\n top,\n left: rect.left + window.scrollX,\n width: rect.width,\n placement: shouldOpenUp ? 'top' : 'bottom',\n });\n }\n };\n\n updatePosition();\n requestAnimationFrame(updatePosition);\n\n // 监听窗口大小变化和滚动,更新位置\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n } else {\n setDropdownPosition(null);\n }\n }, [isOpen, filteredOptions.length]);\n\n // 点击外部关闭(支持鼠标和触摸事件)\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n if (\n selectRef.current &&\n !selectRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n setSearchValue('');\n }\n };\n\n if (isOpen) {\n // 使用 capture 阶段确保能捕获到事件\n document.addEventListener('mousedown', handleClickOutside, true);\n document.addEventListener('touchstart', handleClickOutside, true);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside, true);\n document.removeEventListener('touchstart', handleClickOutside, true);\n };\n }\n }, [isOpen, isOpenControlled, onDropdownVisibleChange]);\n\n // 键盘导航\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n } else if (e.key === 'Enter' && focusedIndex >= 0) {\n e.preventDefault();\n const option = filteredOptions[focusedIndex];\n if (option && !option.disabled) {\n handleSelect(option);\n }\n } else if (e.key === 'Escape') {\n e.preventDefault();\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n selectRef.current?.focus();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [isOpen, filteredOptions, focusedIndex, isOpenControlled, onDropdownVisibleChange]);\n\n // 滚动到聚焦项\n useEffect(() => {\n if (focusedIndex >= 0 && dropdownRef.current) {\n const items = dropdownRef.current.querySelectorAll('.aha-select-option');\n const focusedItem = items[focusedIndex] as HTMLElement;\n if (focusedItem) {\n focusedItem.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }\n }, [focusedIndex]);\n\n const handleSelect = useCallback((option: SelectOption) => {\n if (option.disabled) return;\n\n if (isMultiple) {\n const currentValues = Array.isArray(currentValue) ? currentValue : [];\n const isSelected = currentValues.includes(option.value);\n\n let newValues: (string | number)[];\n if (isSelected) {\n newValues = currentValues.filter((v) => v !== option.value);\n onDeselect?.(option.value, option);\n } else {\n newValues = [...currentValues, option.value];\n onSelect?.(option.value, option);\n }\n\n if (!isControlled) {\n setInternalValue(newValues);\n }\n // 计算选中的选项\n const selectedOptions = options.filter((opt) => newValues.includes(opt.value));\n onChange?.(newValues, selectedOptions);\n } else {\n if (!isControlled) {\n setInternalValue(option.value);\n }\n onChange?.(option.value, option);\n onSelect?.(option.value, option);\n\n if (!isOpenControlled) {\n setInternalOpen(false);\n }\n onDropdownVisibleChange?.(false);\n setSearchValue('');\n selectRef.current?.focus();\n }\n }, [isMultiple, currentValue, isControlled, isOpenControlled, options, onChange, onSelect, onDeselect, onDropdownVisibleChange]);\n\n const handleRemoveTag = useCallback((e: React.MouseEvent, value: string | number) => {\n e.stopPropagation();\n if (isMultiple && Array.isArray(currentValue)) {\n const newValues = currentValue.filter((v) => v !== value);\n const option = options.find((opt) => opt.value === value);\n if (!isControlled) {\n setInternalValue(newValues);\n }\n onChange?.(newValues, getSelectedOptions());\n onDeselect?.(value, option!);\n }\n }, [isMultiple, currentValue, isControlled, options, onChange, onDeselect, getSelectedOptions]);\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n const newValue: string | number | (string | number)[] | undefined = isMultiple ? [] : undefined;\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue as any, []);\n setSearchValue('');\n };\n\n const handleToggle = () => {\n if (disabled) return;\n const newOpen = !isOpen;\n if (!isOpenControlled) {\n setInternalOpen(newOpen);\n }\n onDropdownVisibleChange?.(newOpen);\n if (newOpen && showSearch) {\n setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n } else {\n setSearchValue('');\n }\n };\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value;\n setSearchValue(val);\n onSearch?.(val);\n setFocusedIndex(-1);\n };\n\n const handleFocus = (e: React.FocusEvent) => {\n onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent) => {\n onBlur?.(e);\n };\n\n // 尺寸样式 - 对齐 Input 组件\n const sizeStyles = {\n small: {\n height: '32px',\n paddingTop: '3px',\n paddingBottom: '3px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n mediumSmall: {\n height: '36px',\n paddingTop: '5px',\n paddingBottom: '5px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n medium: {\n height: '40px',\n paddingTop: '7px',\n paddingBottom: '7px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n large: {\n height: '48px',\n paddingTop: '11px',\n paddingBottom: '11px',\n fontSize: '16px',\n lineHeight: '24px',\n },\n };\n\n const selectedOptions = useMemo(() => getSelectedOptions(), [getSelectedOptions]);\n const showClear = useMemo(() => allowClear && currentValue && !disabled, [allowClear, currentValue, disabled]);\n const hasValue = useMemo(() => \n isMultiple\n ? Array.isArray(currentValue) && currentValue.length > 0\n : currentValue !== undefined && currentValue !== null && currentValue !== '',\n [isMultiple, currentValue]\n );\n\n // 渲染标签 - 使用 useMemo 优化\n const renderTags = useMemo(() => {\n if (!isMultiple || !Array.isArray(currentValue) || currentValue.length === 0) {\n return null;\n }\n\n const tagsToShow =\n maxTagCount === 'responsive'\n ? selectedOptions.slice(0, 2) // 简化处理\n : maxTagCount\n ? selectedOptions.slice(0, maxTagCount)\n : selectedOptions;\n\n const remainingCount =\n maxTagCount && selectedOptions.length > tagsToShow.length\n ? selectedOptions.length - tagsToShow.length\n : 0;\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '4px',\n flex: 1,\n minWidth: 0,\n }}\n >\n {tagsToShow.map((option) => {\n const tagProps = {\n label: option.label,\n value: option.value,\n closable: !disabled,\n onClose: () => handleRemoveTag({} as any, option.value),\n };\n\n if (tagRender) {\n return <React.Fragment key={option.value}>{tagRender(tagProps)}</React.Fragment>;\n }\n\n return (\n <span\n key={option.value}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n backgroundColor: '#F5F5F4',\n borderRadius: '4px',\n fontSize: '12px',\n lineHeight: '18px',\n color: '#101828',\n fontFamily: \"DM Sans, sans-serif\",\n maxWidth: '100%',\n }}\n >\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {option.label}\n </span>\n {!disabled && (\n <span\n onClick={(e) => handleRemoveTag(e, option.value)}\n style={{\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n color: '#78716C',\n marginLeft: '4px',\n }}\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 3L3 9M3 3L9 9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )}\n </span>\n );\n })}\n {remainingCount > 0 && (\n <span\n style={{\n fontSize: '12px',\n lineHeight: '18px',\n color: '#78716C',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n +{remainingCount}\n </span>\n )}\n </div>\n );\n }, [isMultiple, currentValue, selectedOptions, maxTagCount, disabled, tagRender]);\n\n // 下拉箭头图标\n const ArrowIcon = ({ isOpen: open }: { isOpen: boolean }) => (\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 transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease-in-out',\n flexShrink: 0,\n }}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"#78716C\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n\n // 清除图标\n const ClearIcon = () => (\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 onClick={handleClear}\n style={{\n cursor: 'pointer',\n flexShrink: 0,\n color: '#78716C',\n }}\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 const dropdownAnimationStyles = `\n @keyframes dropdownFadeIn {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `;\n\n return (\n <>\n <style>{dropdownAnimationStyles}</style>\n <div\n ref={selectRef}\n className={`aha-select ${className}`}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n minWidth: '120px',\n boxSizing: 'border-box',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '8px', // rounded-md\n border: `1px solid ${error ? '#F04438' : isOpen ? primaryColor : '#D7D3D0'}`,\n backgroundColor: disabled ? '#FAFAF9' : '#FFFFFF',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 0.2s',\n paddingLeft: '12px',\n paddingRight: '36px', // 为箭头和清除按钮留出空间(箭头16px + 右边距12px + 清除按钮8px)\n paddingTop: sizeStyles[size].paddingTop,\n paddingBottom: sizeStyles[size].paddingBottom,\n fontSize: sizeStyles[size].fontSize,\n lineHeight: sizeStyles[size].lineHeight,\n fontWeight: 400,\n WebkitTapHighlightColor: 'transparent', // 移动端移除点击高亮\n WebkitTouchCallout: 'none', // 禁用长按菜单\n touchAction: 'manipulation', // 优化触摸响应\n userSelect: 'none', // 禁用文本选择\n ...style,\n }}\n onClick={handleToggle}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onTouchStart={(e) => {\n // 移动端触摸优化\n if (!disabled) {\n e.currentTarget.style.opacity = '0.8';\n }\n }}\n onTouchEnd={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n tabIndex={disabled ? -1 : 0}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n minWidth: 0,\n gap: '8px',\n }}\n >\n {isMultiple ? (\n (renderTags || (placeholder ? (\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: '#79716B',\n fontSize: '16px',\n lineHeight: '24px',\n fontWeight: 400,\n }}\n >\n {placeholder}\n </span>\n ) : (\n <span style={{ flex: 1, minHeight: '24px' }} />\n )))) : showSearch && isOpen ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={searchValue}\n onChange={handleSearch}\n onClick={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n style={{\n flex: 1,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: '16px', // 至少 16px 避免 iOS Safari 自动缩放\n lineHeight: '24px',\n fontWeight: 400,\n color: disabled ? '#98A2B3' : '#1C1917',\n fontFamily: \"DM Sans, sans-serif\",\n minWidth: 0,\n WebkitAppearance: 'none',\n appearance: 'none',\n }}\n placeholder={hasValue ? undefined : placeholder}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n />\n ) : (\n <span\n style={{\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: hasValue\n ? disabled\n ? '#98A2B3'\n : '#1C1917'\n : '#79716B',\n fontSize: '16px',\n lineHeight: '24px',\n fontWeight: 400,\n minHeight: '24px',\n display: 'inline-block',\n }}\n >\n {hasValue\n ? selectedOptions[0]?.label || currentValue\n : placeholder || '\\u00A0'}\n </span>\n )}\n </div>\n\n <div\n style={{\n position: 'absolute',\n right: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {showClear && <ClearIcon />}\n <ArrowIcon isOpen={isOpen} />\n </div>\n </div>\n\n {isOpen && dropdownPosition && createPortal(\n <div\n ref={dropdownRef}\n className={`aha-select-dropdown ${dropdownClassName}`}\n style={{\n position: 'absolute',\n top: `${dropdownPosition.top}px`,\n left: `${dropdownPosition.left}px`,\n width: `${dropdownPosition.width}px`,\n zIndex: 1050,\n backgroundColor: '#FFFFFF',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n border: '1px solid #E7E5E4',\n maxHeight: '256px',\n overflow: 'auto',\n opacity: 0,\n transform:\n dropdownPosition.placement === 'top'\n ? 'translateY(8px)'\n : 'translateY(-8px)',\n animation: 'dropdownFadeIn 0.2s ease-out forwards',\n transformOrigin:\n dropdownPosition.placement === 'top'\n ? 'bottom center'\n : 'top center',\n WebkitOverflowScrolling: 'touch', // iOS 平滑滚动\n overscrollBehavior: 'contain', // 防止滚动穿透\n ...dropdownStyle,\n }}\n >\n {filteredOptions.length === 0 ? (\n <div\n style={{\n padding: '8px 16px',\n textAlign: 'center',\n color: '#78716C',\n fontSize: '14px',\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n No data\n </div>\n ) : (\n filteredOptions.map((option, index) => {\n const isSelected = isMultiple\n ? Array.isArray(currentValue) && currentValue.includes(option.value)\n : currentValue === option.value;\n const isFocused = index === focusedIndex;\n\n // 如果提供了自定义渲染函数,使用自定义渲染\n if (optionRender) {\n return (\n <div\n key={option.value}\n className={`aha-select-option ${!option.disabled ? 'hover:bg-[#FAFAF9]' : ''} ${isSelected ? 'bg-[#FAFAF9]' : ''}`}\n onClick={() => !option.disabled && handleSelect(option)}\n style={{\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n transition: 'background-color 0.2s',\n }}\n >\n {optionRender(option, {\n selected: isSelected,\n focused: isFocused,\n disabled: option.disabled || false,\n })}\n </div>\n );\n }\n\n // 默认渲染\n return (\n <div\n key={option.value}\n className={`aha-select-option ${!option.disabled ? 'hover:bg-[#FAFAF9]' : ''} ${isSelected ? 'bg-[#FAFAF9]' : ''}`}\n onClick={() => handleSelect(option)}\n style={{\n padding: '8px 16px',\n cursor: option.disabled ? 'not-allowed' : 'pointer',\n color: option.disabled ? '#98A2B3' : '#101828',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: \"DM Sans, sans-serif\",\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n transition: 'background-color 0.2s',\n }}\n >\n <span>{option.label}</span>\n {/* 只有选中时才显示标识 */}\n {isSelected && (\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 className={isFocused ? 'hidden' : ''}\n >\n <path\n d=\"M13.3333 4L6 11.3333L2.66667 8\"\n stroke={primaryColor}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n );\n })\n )}\n </div>,\n document.body\n )}\n </>\n );\n};\n\nSelect.displayName = 'Select';\n\nexport default Select;\n\n","import React from \"react\";\n\n// Checkbox 选中图标\nexport const CheckIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <path\n d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Checkbox 半选中图标(减号)\nexport const MinusIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <path\n d=\"M3.5 7H10.5\"\n stroke=\"white\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标\nexport const SortIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 降序\nexport const SortDescIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M3.5 4.5L6 2L8.5 4.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M3.5 7.5L6 10L8.5 7.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\n// Sort 图标 升序\nexport const SortAscIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M8.5 7.5L6 10L3.5 7.5\"\n stroke=\"#A9A29D\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M8.5 4.5L6 2L3.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向左的箭头\nexport const LeftArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M15.8334 10H4.16675M4.16675 10L10.0001 15.8334M4.16675 10L10.0001 4.16669\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 向右的箭头\nexport const RightArrowIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n style={style}\n >\n <path\n d=\"M4.16675 10H15.8334M15.8334 10L10.0001 4.16669M15.8334 10L10.0001 15.8334\"\n stroke=\"currentColor\"\n strokeWidth=\"1.66667\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n// 提示信息图标\nexport const TooltipIcon: React.FC<{\n className?: string;\n style?: React.CSSProperties;\n}> = ({ className, style }) => (\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 className={className}\n style={style}\n >\n <g clipPath=\"url(#clip0_54_1653)\">\n <path\n d=\"M6.06 6C6.21674 5.55444 6.5261 5.17873 6.9333 4.93942C7.34051 4.7001 7.81926 4.61262 8.28479 4.69247C8.75031 4.77232 9.17255 5.01434 9.47672 5.37568C9.78089 5.73702 9.94737 6.19434 9.94667 6.66666C9.94667 8 7.94667 8.66666 7.94667 8.66666M8 11.3333H8.00667M14.6667 8C14.6667 11.6819 11.6819 14.6667 8 14.6667C4.3181 14.6667 1.33333 11.6819 1.33333 8C1.33333 4.3181 4.3181 1.33333 8 1.33333C11.6819 1.33333 14.6667 4.3181 14.6667 8Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_54_1653\">\n <rect width=\"16\" height=\"16\" fill=\"currentColor\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { useTheme } from \"../../theme/ThemeContext\";\nimport Button from \"../Button\";\nimport Input from \"../Input\";\nimport Select from \"../Select\";\nimport { LeftArrowIcon, RightArrowIcon } from \"../../icons\";\n\nexport interface PaginationProps {\n current?: number;\n defaultCurrent?: number;\n total?: number;\n pageSize?: number;\n defaultPageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: string[];\n showQuickJumper?: boolean | { goButton?: React.ReactNode };\n showTotal?: (total: number, range: [number, number]) => React.ReactNode;\n onChange?: (page: number, pageSize?: number) => void;\n onShowSizeChange?: (current: number, size: number) => void;\n simple?: boolean;\n disabled?: boolean;\n hideOnSinglePage?: boolean;\n className?: string;\n style?: React.CSSProperties;\n size?: \"default\" | \"small\";\n responsive?: boolean;\n showLessItems?: boolean;\n itemRender?: (\n page: number,\n type: \"page\" | \"prev\" | \"next\" | \"jump-prev\" | \"jump-next\",\n originalElement: React.ReactNode\n ) => React.ReactNode;\n}\n\nconst Pagination: React.FC<PaginationProps> = ({\n current: controlledCurrent,\n defaultCurrent = 1,\n total = 0,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n showSizeChanger = false,\n pageSizeOptions = [\"10\", \"20\", \"50\", \"100\"],\n showQuickJumper = false,\n showTotal,\n onChange,\n onShowSizeChange,\n simple = false,\n disabled = false,\n hideOnSinglePage = false,\n className = \"\",\n style,\n size = \"default\",\n responsive = false,\n showLessItems = false,\n itemRender,\n}) => {\n const { primaryColor = \"#FB6011\" } = useTheme();\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const [jumpToPage, setJumpToPage] = useState(\"\");\n\n const current = controlledCurrent ?? internalCurrent;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const totalPages = useMemo(\n () => Math.ceil(total / pageSize),\n [total, pageSize]\n );\n\n useEffect(() => {\n if (controlledCurrent !== undefined) {\n setInternalCurrent(controlledCurrent);\n }\n }, [controlledCurrent]);\n\n useEffect(() => {\n if (controlledPageSize !== undefined) {\n setInternalPageSize(controlledPageSize);\n }\n }, [controlledPageSize]);\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || page === current || disabled) return;\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page);\n }\n onChange?.(page, pageSize);\n };\n\n const handlePageSizeChange = (newPageSize: number) => {\n const newTotalPages = Math.ceil(total / newPageSize);\n const newCurrent = current > newTotalPages ? newTotalPages : current;\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newPageSize);\n }\n if (controlledCurrent === undefined) {\n setInternalCurrent(newCurrent);\n }\n\n onShowSizeChange?.(newCurrent, newPageSize);\n onChange?.(newCurrent, newPageSize);\n };\n\n const handleJumpTo = () => {\n const page = parseInt(jumpToPage, 10);\n if (page >= 1 && page <= totalPages) {\n handlePageChange(page);\n setJumpToPage(\"\");\n }\n };\n\n const getPageNumbers = (): (number | string)[] => {\n if (totalPages <= 7) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | string)[] = [];\n\n if (current <= 4) {\n for (let i = 1; i <= 5; i++) {\n pages.push(i);\n }\n pages.push(\"jump-next\");\n pages.push(totalPages);\n } else if (current >= totalPages - 3) {\n pages.push(1);\n pages.push(\"jump-prev\");\n for (let i = totalPages - 4; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n pages.push(1);\n pages.push(\"jump-prev\");\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i);\n }\n pages.push(\"jump-next\");\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const renderItem = (item: number | string): React.ReactNode => {\n if (typeof item === \"number\") {\n const isActive = item === current;\n const element = (\n <Button\n key={item}\n onClick={() => handlePageChange(item)}\n disabled={disabled}\n type={isActive ? \"primary\" : \"default\"}\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n fontWeight: isActive ? 500 : 400,\n border: isActive ? `1px solid ${primaryColor}` : undefined,\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n {item}\n </Button>\n );\n\n return itemRender ? itemRender(item, \"page\", element) : element;\n }\n\n if (item === \"jump-prev\") {\n const element = (\n <Button\n key=\"jump-prev\"\n onClick={() => handlePageChange(Math.max(1, current - 5))}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n •••\n </Button>\n );\n\n return itemRender\n ? itemRender(current - 5, \"jump-prev\", element)\n : element;\n }\n\n if (item === \"jump-next\") {\n const element = (\n <Button\n key=\"jump-next\"\n onClick={() => handlePageChange(Math.min(totalPages, current + 5))}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n minWidth: size === \"small\" ? \"32px\" : \"36px\",\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n margin: 0,\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n •••\n </Button>\n );\n\n return itemRender\n ? itemRender(current + 5, \"jump-next\", element)\n : element;\n }\n\n return null;\n };\n\n if (hideOnSinglePage && totalPages <= 1) {\n return null;\n }\n\n if (simple) {\n return (\n <div\n className={`aha-pagination aha-pagination-simple ${className}`}\n style={style}\n >\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n marginRight: \"8px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n <span\n style={{\n margin: \"0 8px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n {current} / {totalPages}\n </span>\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n marginLeft: \"8px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n </div>\n );\n }\n\n const start = (current - 1) * pageSize + 1;\n const end = Math.min(current * pageSize, total);\n\n return (\n <div\n className={`aha-pagination w-full ${className}`}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: responsive ? \"wrap\" : \"nowrap\",\n fontFamily: \"DM Sans, sans-serif\",\n ...style,\n }}\n >\n {showTotal && (\n <div className=\"justify-start text-Text-text-secondary text-sm font-medium font-['DM_Sans'] leading-5\">\n {showTotal(total, [start, end])}\n </div>\n )}\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n }}\n >\n {total > 0 && (\n <>\n {itemRender ? (\n itemRender(\n current - 1,\n \"prev\",\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n )\n ) : (\n <Button\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <LeftArrowIcon />\n </Button>\n )}\n </>\n )}\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n {getPageNumbers().map((item) => renderItem(item))}\n </div>\n\n {total > 0 && (\n <>\n {itemRender ? (\n itemRender(\n current + 1,\n \"next\",\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n )\n ) : (\n <Button\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n height: size === \"small\" ? \"32px\" : \"36px\",\n padding: \"0 12px\",\n gap: \"4px\",\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n <RightArrowIcon />\n </Button>\n )}\n </>\n )}\n\n {showSizeChanger && (\n <Select\n value={pageSize}\n options={pageSizeOptions.map((s) => ({\n label: `${s} / page`,\n value: Number(s),\n }))}\n onChange={(val) => handlePageSizeChange(Number(val))}\n disabled={disabled}\n size={size === \"small\" ? \"small\" : \"medium\"}\n style={{ minWidth: size === \"small\" ? 80 : 96 }}\n />\n )}\n\n {showQuickJumper && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"DM Sans, sans-serif\",\n }}\n >\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n Go to\n </span>\n <Input\n type=\"number\"\n min={1}\n value={jumpToPage}\n onChange={(e) => setJumpToPage(e.target.value)}\n onPressEnter={handleJumpTo}\n disabled={disabled}\n size={size === \"small\" ? \"small\" : \"medium\"}\n style={{ width: 56, minWidth: 56 }}\n />\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n page\n </span>\n {typeof showQuickJumper === \"object\" && showQuickJumper.goButton ? (\n <Button\n onClick={handleJumpTo}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n {showQuickJumper.goButton}\n </Button>\n ) : (\n <Button\n onClick={handleJumpTo}\n disabled={disabled}\n type=\"default\"\n size={size === \"default\" ? \"medium\" : \"small\"}\n style={{\n border: \"1px solid #EAECF0\",\n boxShadow: \"none\",\n borderRadius: \"8px\",\n }}\n >\n OK\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default Pagination;\n","import type React from 'react';\nimport {\n focusRing,\n radius,\n semanticBg,\n semanticBorder,\n semanticFg,\n semanticText,\n spacing,\n typography,\n} from '../../tokens';\nimport { BRAND_HOVER_COLOR, isDefaultBrandColor, resolveBrandColor } from './colorUtils';\n\nexport const controlFontFamily = typography.fontFamily.body;\nexport const controlFontWeightMedium = typography.fontWeight.medium;\nexport const controlFontWeightRegular = typography.fontWeight.regular;\n\nexport function getControlTypography(size: 'sm' | 'md') {\n return {\n fontSize: size === 'sm' ? typography.fontSize.sm : typography.fontSize.md,\n lineHeight: size === 'sm' ? typography.lineHeight.sm : typography.lineHeight.md,\n gap: size === 'sm' ? spacing.md : spacing.lg,\n hintGap: size === 'md' ? spacing.xxs : '0',\n };\n}\n\nexport function getCheckboxBorderRadius(size: 'sm' | 'md') {\n return size === 'sm' ? radius.xs : radius.sm;\n}\n\nexport function getControlBoxStyles(options: {\n disabled: boolean;\n active: boolean;\n hovered: boolean;\n brandColor?: string;\n}) {\n const { disabled, active, hovered } = options;\n const brand = resolveBrandColor(options.brandColor);\n const brandHover = BRAND_HOVER_COLOR;\n\n const bg = (() => {\n if (disabled) return semanticBg.disabledSubtle;\n if (active) return hovered ? brandHover : brand;\n return hovered ? semanticBg.secondary : semanticBg.primary;\n })();\n\n const border = (() => {\n if (disabled) return `1px solid ${semanticBorder.disabled}`;\n if (active) return `1px solid ${hovered ? brandHover : brand}`;\n return `1px solid ${semanticBorder.primary}`;\n })();\n\n return { bg, border };\n}\n\nexport function getControlFocusShadow(showFocus: boolean, brandColor?: string): string {\n if (!showFocus) return 'none';\n if (isDefaultBrandColor(brandColor)) return focusRing.default;\n return `0px 0px 0px 2px #ffffff, 0px 0px 0px 4px ${brandColor}`;\n}\n\nexport function getControlLabelStyle(options: {\n size: 'sm' | 'md';\n disabled: boolean;\n}): React.CSSProperties {\n const { fontSize, lineHeight } = getControlTypography(options.size);\n return {\n fontSize,\n lineHeight,\n fontWeight: controlFontWeightMedium,\n fontFamily: controlFontFamily,\n color: options.disabled ? semanticText.disabled : semanticText.secondary,\n userSelect: 'none',\n };\n}\n\nexport function getControlHintStyle(size: 'sm' | 'md'): React.CSSProperties {\n const { fontSize, lineHeight } = getControlTypography(size);\n return {\n fontSize,\n lineHeight,\n fontWeight: controlFontWeightRegular,\n fontFamily: controlFontFamily,\n color: semanticText.tertiary,\n };\n}\n\nexport function getControlActiveIconColor(disabled: boolean, active: boolean): string {\n if (disabled && active) return semanticFg.disabledSubtle;\n return semanticFg.white;\n}\n","import React, { useState } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\nimport {\n getCheckboxBorderRadius,\n getControlActiveIconColor,\n getControlBoxStyles,\n getControlFocusShadow,\n getControlHintStyle,\n getControlLabelStyle,\n getControlTypography,\n} from '../shared/controlStyles';\n\nexport interface CheckboxProps {\n checked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n /** sm = 16px, md = 20px */\n size?: 'sm' | 'md';\n /** Secondary description rendered below the label */\n hint?: React.ReactNode;\n /** Force focused appearance (useful for Storybook demos) */\n isFocused?: boolean;\n}\n\nconst Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n indeterminate = false,\n disabled = false,\n onChange,\n className = '',\n style,\n children,\n size = 'sm',\n hint,\n isFocused: isFocusedProp,\n}) => {\n const { primaryColor } = useTheme();\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n\n const isActive = checked || indeterminate;\n const showFocus = isFocusedProp ?? focused;\n\n const handleClick = () => {\n if (disabled) return;\n const syntheticEvent = {\n target: { checked: !checked },\n currentTarget: { checked: !checked },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n handleClick();\n }\n };\n\n const boxSize = size === 'sm' ? '16px' : '20px';\n const iconSize = size === 'sm' ? '12px' : '14px';\n const borderRadius = getCheckboxBorderRadius(size);\n const { gap, hintGap } = getControlTypography(size);\n const { bg, border } = getControlBoxStyles({\n disabled,\n active: isActive,\n hovered,\n brandColor: primaryColor,\n });\n const iconColor = getControlActiveIconColor(disabled, isActive);\n const hasLabel = children || hint;\n\n return (\n <div\n className={`aha-checkbox ${className}`}\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n style={{\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap,\n cursor: disabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n ...style,\n }}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => !disabled && setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => !disabled && setFocused(true)}\n onBlur={() => setFocused(false)}\n >\n <div\n style={{\n position: 'relative',\n width: boxSize,\n height: boxSize,\n minWidth: boxSize,\n minHeight: boxSize,\n flexShrink: 0,\n borderRadius,\n border,\n backgroundColor: bg,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.15s, border-color 0.15s, box-shadow 0.15s',\n boxSizing: 'border-box',\n boxShadow: getControlFocusShadow(showFocus, primaryColor),\n marginTop: hasLabel ? '2px' : '0',\n }}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n style={{\n position: 'absolute',\n width: iconSize,\n height: iconSize,\n color: iconColor,\n opacity: indeterminate ? 1 : 0,\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n }}\n >\n <path d=\"M2.91675 7H11.0834\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n style={{\n position: 'absolute',\n width: iconSize,\n height: iconSize,\n color: iconColor,\n opacity: checked && !indeterminate ? 1 : 0,\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n }}\n >\n <path d=\"M11.6666 3.5L5.24992 9.91667L2.33325 7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n\n {hasLabel && (\n <div style={{ display: 'inline-flex', flexDirection: 'column', gap: hintGap }}>\n {children && (\n <span style={getControlLabelStyle({ size, disabled })}>\n {children}\n </span>\n )}\n {hint && (\n <span\n style={getControlHintStyle(size)}\n onClick={(e) => e.stopPropagation()}\n >\n {hint}\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n","import React, { useState, useMemo, useCallback, useRef, useEffect } from 'react';\nimport Pagination from '../Pagination';\nimport Checkbox from '../Checkbox';\nimport { SortIcon, SortDescIcon, SortAscIcon } from '../../icons';\nimport { useTheme } from '../../theme/ThemeContext';\n\n// ==================== Loading 遮罩 ====================\n\nconst TableLoadingSpinner: React.FC<{ color: string }> = ({ color }) => (\n <>\n <style>{`\n @keyframes aha-table-loading-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n <svg\n width={32}\n height={32}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden\n style={{ animation: 'aha-table-loading-spin 1s linear infinite' }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"24\"\n opacity={0.3}\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"16\"\n />\n </svg>\n </>\n);\n\nconst TableLoadingOverlay: React.FC<{\n loading: boolean | React.ReactNode;\n spinColor: string;\n}> = ({ loading, spinColor }) => {\n if (!loading) return null;\n const content = loading === true ? <TableLoadingSpinner color={spinColor} /> : loading;\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading\"\n className=\"aha-table-loading-overlay\"\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(255, 255, 255, 0.55)',\n pointerEvents: 'auto',\n }}\n >\n {content}\n </div>\n );\n};\n\n// ==================== 类型定义 ====================\n\nexport type SortOrder = 'ascend' | 'descend' | null;\nexport type TableSize = 'small' | 'middle' | 'large';\nexport type TableLayout = 'auto' | 'fixed';\n\nexport interface SorterResult<T = any> {\n column?: ColumnType<T>;\n order?: SortOrder;\n field?: string | string[];\n columnKey?: string | string[];\n}\n\nexport interface TableCurrentDataSource<T = any> {\n currentDataSource: T[];\n action: 'paginate' | 'sort';\n}\n\nexport interface SelectionItem {\n key: string | number;\n text: React.ReactNode;\n onSelect?: (changeableRowKeys: (string | number)[]) => void;\n}\n\nexport interface TableRowSelection<T = any> {\n type?: 'checkbox' | 'radio';\n selectedRowKeys?: (string | number)[];\n defaultSelectedRowKeys?: (string | number)[];\n onChange?: (selectedRowKeys: (string | number)[], selectedRows: T[]) => void;\n onSelect?: (record: T, selected: boolean, selectedRows: T[], nativeEvent: Event) => void;\n onSelectAll?: (selected: boolean, selectedRows: T[], changeRows: T[]) => void;\n onSelectInvert?: (selectedRowKeys: (string | number)[]) => void;\n onSelectNone?: () => void;\n getCheckboxProps?: (record: T) => {\n disabled?: boolean;\n name?: string;\n };\n hideSelectAll?: boolean;\n fixed?: boolean | 'left' | 'right';\n columnWidth?: string | number;\n columnTitle?: string | React.ReactNode;\n checkStrictly?: boolean;\n preserveSelectedRowKeys?: boolean;\n renderCell?: (checked: boolean, record: T, index: number, node: React.ReactNode) => React.ReactNode;\n}\n\nexport interface ColumnType<T = any> {\n title?: React.ReactNode | ((props: { sortOrder?: SortOrder; sortColumn?: ColumnType<T> }) => React.ReactNode);\n key?: string;\n dataIndex?: string | string[];\n align?: 'left' | 'right' | 'center';\n ellipsis?: boolean | { showTitle?: boolean };\n colSpan?: number;\n width?: string | number;\n minWidth?: string | number;\n fixed?: boolean | 'left' | 'right';\n render?: (value: any, record: T, index: number) => React.ReactNode;\n sorter?: boolean | ((a: T, b: T) => number) | { compare?: (a: T, b: T) => number; multiple?: number };\n sortOrder?: SortOrder | SortOrder[];\n defaultSortOrder?: SortOrder;\n onCell?: (record: T, index?: number) => React.HTMLAttributes<HTMLTableCellElement>;\n onHeaderCell?: (column: ColumnType<T>) => React.HTMLAttributes<HTMLTableCellElement>;\n className?: string;\n children?: ColumnType<T>[];\n onSorterChange?: (sorter: SorterResult<T>) => void;\n rowSpan?: number;\n rowScope?: 'row' | 'col' | 'rowgroup' | 'colgroup';\n}\n\nexport interface TableProps<T = any> {\n columns?: ColumnType<T>[];\n dataSource?: T[];\n rowKey?: string | ((record: T) => string | number);\n rowSelection?: TableRowSelection<T>;\n pagination?: false | {\n current?: number;\n pageSize?: number;\n total?: number;\n defaultCurrent?: number;\n defaultPageSize?: number;\n showSizeChanger?: boolean;\n pageSizeOptions?: string[];\n showQuickJumper?: boolean | { goButton?: React.ReactNode };\n showTotal?: (total: number, range: [number, number]) => React.ReactNode;\n onChange?: (page: number, pageSize?: number) => void;\n onShowSizeChange?: (current: number, size: number) => void;\n position?: 'topLeft' | 'topCenter' | 'topRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight';\n simple?: boolean;\n responsive?: boolean;\n };\n size?: TableSize;\n bordered?: boolean;\n loading?: boolean | React.ReactNode;\n locale?: {\n emptyText?: React.ReactNode | (() => React.ReactNode);\n selectAll?: React.ReactNode;\n selectInvert?: React.ReactNode;\n selectNone?: React.ReactNode;\n selectionAll?: React.ReactNode;\n sortTitle?: string;\n expand?: string;\n collapse?: string;\n triggerDesc?: string;\n triggerAsc?: string;\n cancelSort?: string;\n };\n showHeader?: boolean;\n title?: (currentData: T[]) => React.ReactNode;\n footer?: (currentData: T[]) => React.ReactNode;\n summary?: (currentData: T[]) => React.ReactNode;\n scroll?: {\n x?: number | string | true;\n y?: number | string;\n scrollToFirstRowOnChange?: boolean;\n };\n tableLayout?: TableLayout;\n onChange?: (pagination: any, filters: Record<string, any>, sorter: SorterResult<T> | SorterResult<T>[], extra: TableCurrentDataSource<T>) => void;\n onSorterChange?: (sorter: SorterResult<T> | SorterResult<T>[]) => void;\n onPaginationChange?: (page: number, pageSize: number) => void;\n onRow?: (record: T, index?: number) => React.HTMLAttributes<HTMLTableRowElement>;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n className?: string;\n innerClassName?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n expandable?: {\n expandedRowKeys?: (string | number)[];\n defaultExpandedRowKeys?: (string | number)[];\n expandedRowRender?: (record: T, index: number, indent: number, expanded: boolean) => React.ReactNode;\n expandRowByClick?: boolean;\n onExpand?: (expanded: boolean, record: T) => void;\n onExpandedRowsChange?: (expandedKeys: (string | number)[]) => void;\n defaultExpandAllRows?: boolean;\n indentSize?: number;\n expandIcon?: (props: { expanded: boolean; onExpand: (record: T, e: React.MouseEvent<HTMLElement>) => void; record: T }) => React.ReactNode;\n rowExpandable?: (record: T) => boolean;\n };\n indentSize?: number;\n rowClassName?: string | ((record: T, index: number) => string);\n onHeaderRow?: (columns: ColumnType<T>[], index?: number) => React.HTMLAttributes<HTMLTableRowElement>;\n components?: {\n header?: {\n cell?: React.ComponentType<any>;\n row?: React.ComponentType<any>;\n wrapper?: React.ComponentType<any>;\n };\n body?: {\n cell?: React.ComponentType<any>;\n row?: React.ComponentType<any>;\n wrapper?: React.ComponentType<any>;\n };\n };\n sticky?: boolean | { offsetHeader?: number; offsetScroll?: number; getContainer?: () => HTMLElement };\n}\n\n// ==================== 工具函数 ====================\n\nconst getValue = (obj: any, path: string | string[]): any => {\n if (typeof path === 'string') {\n return obj?.[path];\n }\n return path.reduce((acc, key) => acc?.[key], obj);\n};\n\nconst getRowKey = <T,>(record: T, rowKey?: string | ((record: T) => string | number)): string | number => {\n if (typeof rowKey === 'function') {\n return rowKey(record);\n }\n if (typeof rowKey === 'string') {\n return getValue(record, rowKey) ?? '';\n }\n return (record as any).key ?? '';\n};\n\n// ==================== 默认图标 ====================\n\nconst SortIconComponent: React.FC<{ order?: SortOrder }> = ({ order }) => {\n const { primaryColor } = useTheme();\n \n if (order === 'ascend') {\n return (\n <SortAscIcon style={{ color: primaryColor }}/>\n );\n }\n if (order === 'descend') {\n return (\n <SortDescIcon style={{ color: primaryColor }}/>\n );\n }\n return (\n <SortIcon/>\n );\n};\n\n\n\n// ==================== Table 组件 ====================\n\nconst Table = <T extends Record<string, any> = any>({\n columns = [],\n dataSource = [],\n rowKey = 'key',\n rowSelection,\n pagination = false,\n size = 'middle',\n bordered = false,\n loading = false,\n locale,\n showHeader = true,\n title,\n footer,\n summary,\n scroll,\n tableLayout = 'auto',\n onChange,\n onSorterChange,\n onPaginationChange,\n onRow,\n className = '',\n innerClassName = '',\n style,\n expandable,\n rowClassName,\n onHeaderRow,\n sticky,\n ...rest\n}: TableProps<T>) => {\n const { primaryColor } = useTheme();\n const loadingSpinColor = primaryColor || '#FB6011';\n\n // ==================== State ====================\n const [selectedRowKeys, setSelectedRowKeys] = useState<(string | number)[]>(\n rowSelection?.selectedRowKeys || rowSelection?.defaultSelectedRowKeys || []\n );\n\n // 同步外部传入的 selectedRowKeys\n useEffect(() => {\n if (rowSelection?.selectedRowKeys !== undefined) {\n setSelectedRowKeys(rowSelection.selectedRowKeys);\n }\n }, [rowSelection?.selectedRowKeys]);\n const [sorters, setSorters] = useState<Map<string, SortOrder>>(new Map());\n const [expandedRowKeys, setExpandedRowKeys] = useState<(string | number)[]>(\n expandable?.defaultExpandedRowKeys || []\n );\n const [currentPage, setCurrentPage] = useState(\n pagination && typeof pagination === 'object' \n ? (pagination.current || pagination.defaultCurrent || 1) \n : 1\n );\n const [pageSize, setPageSize] = useState(\n pagination && typeof pagination === 'object' \n ? (pagination.pageSize || pagination.defaultPageSize || 10) \n : 10\n );\n\n // 同步外部传入的 pagination\n useEffect(() => {\n if (pagination && typeof pagination === 'object') {\n if (pagination.current !== undefined) {\n setCurrentPage(pagination.current);\n }\n if (pagination.pageSize !== undefined) {\n setPageSize(pagination.pageSize);\n }\n }\n }, [pagination]);\n const [draggedRowIndex, setDraggedRowIndex] = useState<number | null>(null);\n const [dragOverRowIndex, setDragOverRowIndex] = useState<number | null>(null);\n const [isMobile, setIsMobile] = useState(false);\n const tableRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<HTMLTableSectionElement>(null);\n\n // 检测移动端\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth < 768);\n };\n checkMobile();\n window.addEventListener('resize', checkMobile);\n return () => window.removeEventListener('resize', checkMobile);\n }, []);\n\n // ==================== 处理行选择 ====================\n const handleSelect = useCallback((record: T, selected: boolean) => {\n // 检查是否禁用\n const checkboxProps = rowSelection?.getCheckboxProps?.(record);\n if (checkboxProps?.disabled) {\n return;\n }\n\n const key = getRowKey(record, rowKey);\n let newSelectedRowKeys: (string | number)[];\n \n if (rowSelection?.type === 'radio') {\n newSelectedRowKeys = selected ? [key] : [];\n } else {\n if (selected) {\n newSelectedRowKeys = [...selectedRowKeys, key];\n } else {\n newSelectedRowKeys = selectedRowKeys.filter(k => k !== key);\n }\n }\n\n setSelectedRowKeys(newSelectedRowKeys);\n \n const selectedRows = dataSource.filter(d => newSelectedRowKeys.includes(getRowKey(d, rowKey)));\n \n rowSelection?.onChange?.(newSelectedRowKeys, selectedRows);\n rowSelection?.onSelect?.(record, selected, selectedRows, new Event('select'));\n }, [selectedRowKeys, rowKey, rowSelection, dataSource]);\n\n const handleSelectAll = useCallback((selected: boolean, currentPageData: T[]) => {\n // 只选择未禁用的行\n const keys = currentPageData\n .filter(d => !rowSelection?.getCheckboxProps?.(d).disabled)\n .map(d => getRowKey(d, rowKey));\n const newSelectedRowKeys = selected ? keys : [];\n \n setSelectedRowKeys(newSelectedRowKeys);\n \n const selectedRows = dataSource.filter(d => newSelectedRowKeys.includes(getRowKey(d, rowKey)));\n const changeRows = selected ? currentPageData.filter(d => !rowSelection?.getCheckboxProps?.(d).disabled) : [];\n \n rowSelection?.onChange?.(newSelectedRowKeys, selectedRows);\n rowSelection?.onSelectAll?.(selected, selectedRows, changeRows);\n }, [rowKey, rowSelection, dataSource]);\n\n // ==================== 处理排序 ====================\n const handleSort = useCallback((column: ColumnType<T>, order: SortOrder) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex);\n if (!columnKey) return;\n\n const newSorters = new Map(sorters);\n \n if (order === null) {\n newSorters.delete(columnKey as string);\n } else {\n newSorters.set(columnKey as string, order);\n }\n\n setSorters(newSorters);\n \n // 构建排序结果数组\n const sorterArray: SorterResult<T>[] = Array.from(newSorters.entries()).map(([key, order]) => {\n const col = columns.find(c => {\n const cKey = c.key || (Array.isArray(c.dataIndex) ? c.dataIndex.join('.') : c.dataIndex);\n return cKey === key;\n });\n return {\n column: col || column,\n order: order!,\n field: key,\n columnKey: key,\n };\n });\n \n // 当前列的排序结果\n const currentSorter: SorterResult<T> = {\n column,\n order: order!,\n field: columnKey as string,\n columnKey: columnKey as string,\n };\n \n // 调用列的 onSorterChange 回调(单个列的排序变化)\n if (column.onSorterChange) {\n column.onSorterChange(currentSorter);\n }\n \n // 调用 Table 的 onSorterChange 回调(所有列的排序变化)\n if (onSorterChange) {\n onSorterChange(sorterArray.length === 1 ? sorterArray[0] : sorterArray);\n }\n \n // 触发 onChange(综合回调,包含分页、筛选、排序)\n if (onChange) {\n onChange(\n { current: currentPage, pageSize },\n {},\n sorterArray.length === 1 ? sorterArray[0] : sorterArray,\n { currentDataSource: dataSource, action: 'sort' }\n );\n }\n }, [sorters, onChange, onSorterChange, currentPage, pageSize, dataSource, columns]);\n\n // ==================== 处理展开 ====================\n const handleExpand = useCallback((record: T, expanded: boolean) => {\n const key = getRowKey(record, rowKey);\n let newExpandedRowKeys: (string | number)[];\n \n if (expanded) {\n newExpandedRowKeys = [...expandedRowKeys, key];\n } else {\n newExpandedRowKeys = expandedRowKeys.filter(k => k !== key);\n }\n \n setExpandedRowKeys(newExpandedRowKeys);\n expandable?.onExpand?.(expanded, record);\n expandable?.onExpandedRowsChange?.(newExpandedRowKeys);\n }, [expandedRowKeys, rowKey, expandable]);\n\n // ==================== 数据处理 ====================\n const getProcessedData = useCallback((): T[] => {\n let processed = [...dataSource];\n\n // 排序\n if (sorters.size > 0) {\n processed.sort((a, b) => {\n const sorterEntries = Array.from(sorters.entries());\n for (const [columnKey, order] of sorterEntries) {\n const column = columns.find(col => {\n const colKey = col.key || (Array.isArray(col.dataIndex) ? col.dataIndex.join('.') : col.dataIndex);\n return colKey === columnKey;\n });\n \n if (!column) continue;\n \n let compareResult = 0;\n \n if (typeof column.sorter === 'function') {\n compareResult = column.sorter(a, b);\n } else if (column.sorter === true) {\n const aVal = getValue(a, column.dataIndex || columnKey);\n const bVal = getValue(b, column.dataIndex || columnKey);\n if (aVal < bVal) compareResult = -1;\n else if (aVal > bVal) compareResult = 1;\n }\n \n if (compareResult !== 0) {\n return order === 'ascend' ? compareResult : -compareResult;\n }\n }\n return 0;\n });\n }\n\n return processed;\n }, [dataSource, sorters, columns]);\n\n const processedData = getProcessedData();\n\n // ==================== 分页处理 ====================\n // 当传入 pagination.total 时视为服务端分页:dataSource 已是当前页数据,不再做客户端 slice\n const isServerPagination = Boolean(pagination && typeof pagination === 'object' && pagination.total !== undefined);\n const paginatedData = useMemo(() => {\n if (pagination === false || !pagination) return processedData;\n if (isServerPagination) return processedData;\n const start = (currentPage - 1) * pageSize;\n const end = start + pageSize;\n return processedData.slice(start, end);\n }, [processedData, currentPage, pageSize, pagination, isServerPagination]);\n\n const handlePageChange = useCallback((page: number, size?: number) => {\n const newPageSize = size ?? pageSize;\n setCurrentPage(page);\n if (size) setPageSize(size);\n \n // 调用 Table 的 onPaginationChange 回调(专门用于分页变化)\n if (onPaginationChange) {\n onPaginationChange(page, newPageSize);\n }\n \n // 调用 pagination 内部的回调(保持向后兼容)\n if (pagination && typeof pagination === 'object') {\n pagination.onChange?.(page, size);\n if (size) pagination.onShowSizeChange?.(page, size);\n }\n \n // 触发 Table 的 onChange(综合回调,包含分页、筛选、排序)\n if (onChange) {\n const sorterArray: SorterResult<T>[] = Array.from(sorters.entries()).map(([key, order]) => {\n const col = columns.find(c => {\n const cKey = c.key || (Array.isArray(c.dataIndex) ? c.dataIndex.join('.') : c.dataIndex);\n return cKey === key;\n });\n return {\n column: col,\n order: order!,\n field: key,\n columnKey: key,\n };\n });\n \n onChange(\n { current: page, pageSize: newPageSize },\n {},\n sorterArray.length === 1 ? sorterArray[0] : sorterArray,\n { currentDataSource: processedData, action: 'paginate' }\n );\n }\n }, [pagination, onPaginationChange, onChange, pageSize, sorters, columns, processedData]);\n\n // ==================== 渲染单元格 ====================\n const renderCell = useCallback((column: ColumnType<T>, record: T, index: number): React.ReactNode => {\n const value = getValue(record, column.dataIndex || '');\n \n if (column.render) {\n return column.render(value, record, index);\n }\n \n return value;\n }, []);\n\n // ==================== 计算固定列的偏移量 ====================\n const getFixedOffset = useCallback((columnIndex: number, fixed: 'left' | 'right' | boolean | undefined, isHeader: boolean = false) => {\n if (!fixed) return undefined;\n \n const fixedDirection = fixed === true ? 'left' : fixed;\n let offset = 0;\n \n if (fixedDirection === 'left') {\n // 计算左侧固定列的偏移量\n // 如果有行选择且固定在左侧,先加上选择列的宽度\n if (rowSelection && (rowSelection.fixed === 'left' || rowSelection.fixed === true)) {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? rowSelection.columnWidth \n : (typeof rowSelection.columnWidth === 'string' ? parseInt(rowSelection.columnWidth) : 60);\n offset += selectWidth;\n }\n // 然后加上前面所有左侧固定列的宽度\n for (let i = 0; i < columnIndex; i++) {\n const col = columns[i];\n if (col.fixed === 'left' || col.fixed === true) {\n const colWidth = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(col.width as string) || 0)\n : 150; // 默认宽度\n offset += colWidth;\n }\n }\n return offset;\n } else if (fixedDirection === 'right') {\n // 计算右侧固定列的偏移量\n for (let i = columnIndex + 1; i < columns.length; i++) {\n const col = columns[i];\n if (col.fixed === 'right') {\n const colWidth = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(col.width as string) || 0)\n : 150; // 默认宽度\n offset += colWidth;\n }\n }\n // 如果有行选择且固定在右侧,需要加上选择列的宽度\n if (rowSelection && rowSelection.fixed === 'right') {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? rowSelection.columnWidth \n : (typeof rowSelection.columnWidth === 'string' ? parseInt(rowSelection.columnWidth) : 60);\n offset += selectWidth;\n }\n return offset;\n }\n \n return undefined;\n }, [columns, rowSelection]);\n\n // ==================== 渲染表头 ====================\n const renderHeader = useCallback(() => {\n if (!showHeader) return null;\n\n const headerColumns = columns.map((column, colIndex) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex) || colIndex;\n const sortOrder = sorters.get(columnKey as string) || null;\n const fixedOffset = getFixedOffset(colIndex, column.fixed, true);\n const columnWidth = column.width \n ? (typeof column.width === 'number' ? `${column.width}px` : column.width)\n : undefined;\n\n return (\n <th\n key={columnKey}\n className={`${column.className || ''} ${column.align ? `text-${column.align}` : ''}`}\n style={{\n width: columnWidth,\n minWidth: column.minWidth ? (typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth) : (columnWidth || undefined),\n maxWidth: columnWidth,\n position: column.fixed ? 'sticky' : 'relative',\n left: column.fixed === 'left' || column.fixed === true ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n right: column.fixed === 'right' ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n zIndex: column.fixed ? (column.fixed === 'left' || column.fixed === true ? 10 : 9) : 1,\n backgroundColor: column.fixed ? '#F9FAFB' : '#F9FAFB',\n boxShadow: column.fixed === 'left' || column.fixed === true \n ? '2px 0 4px rgba(0, 0, 0, 0.05)' \n : column.fixed === 'right' \n ? '-2px 0 4px rgba(0, 0, 0, 0.05)' \n : undefined,\n padding: '12px 16px',\n textAlign: column.align || 'left',\n borderBottom: '1px solid #EAECF0',\n fontWeight: 600,\n fontSize: '12px',\n lineHeight: '18px',\n color: '#475467',\n fontFamily: 'DM Sans, sans-serif',\n }}\n {...(column.onHeaderCell?.(column) || {})}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n justifyContent: column.align === 'right' ? 'flex-end' : column.align === 'center' ? 'center' : 'flex-start',\n }}\n >\n <span style={{ fontWeight: 600, fontSize: '12px', lineHeight: '18px', color: '#475467' }}>\n {typeof column.title === 'function' ? column.title({ sortOrder, sortColumn: column }) : column.title}\n </span>\n {column.sorter && (\n <button\n onClick={() => {\n const nextOrder = sortOrder === null ? 'ascend' : sortOrder === 'ascend' ? 'descend' : null;\n handleSort(column, nextOrder);\n }}\n style={{\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n padding: '2px',\n color: sortOrder ? '#475467' : '#98A2B3',\n }}\n >\n <SortIconComponent order={sortOrder || undefined} />\n </button>\n )}\n </div>\n </th>\n );\n });\n\n // 如果有行选择,添加选择列\n if (rowSelection) {\n const selectWidth = typeof rowSelection.columnWidth === 'number' \n ? `${rowSelection.columnWidth}px` \n : (typeof rowSelection.columnWidth === 'string' ? rowSelection.columnWidth : '60px');\n const selectColumn = (\n <th\n key=\"selection\"\n style={{\n width: selectWidth,\n position: rowSelection.fixed ? 'sticky' : 'relative',\n left: rowSelection.fixed === 'left' || rowSelection.fixed === true ? '0px' : undefined,\n right: rowSelection.fixed === 'right' ? '0px' : undefined,\n zIndex: rowSelection.fixed ? (rowSelection.fixed === 'left' || rowSelection.fixed === true ? 12 : 11) : 1,\n backgroundColor: '#F9FAFB',\n padding: '12px 16px',\n borderBottom: '1px solid #EAECF0',\n fontWeight: 600,\n fontSize: '12px',\n lineHeight: '18px',\n color: '#475467',\n fontFamily: 'DM Sans, sans-serif',\n textAlign: 'center',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {!rowSelection.hideSelectAll && rowSelection.type !== 'radio' && (() => {\n const enabledRows = paginatedData.filter(d => !rowSelection.getCheckboxProps?.(d).disabled);\n const enabledKeys = enabledRows.map(d => getRowKey(d, rowKey));\n const allSelected = enabledRows.length > 0 && enabledKeys.every(key => selectedRowKeys.includes(key));\n const someSelected = enabledKeys.some(key => selectedRowKeys.includes(key));\n \n return (\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={(e) => handleSelectAll(e.target.checked, paginatedData)}\n />\n );\n })()}\n {rowSelection.columnTitle && <span style={{ marginLeft: rowSelection.hideSelectAll ? 0 : '8px' }}>{rowSelection.columnTitle}</span>}\n </div>\n </th>\n );\n headerColumns.unshift(selectColumn);\n }\n\n const headerRowProps = onHeaderRow?.(columns, 0);\n \n return (\n <thead ref={headerRef}>\n <tr {...(headerRowProps || {})}>{headerColumns}</tr>\n </thead>\n );\n }, [columns, showHeader, sorters, rowSelection, selectedRowKeys, paginatedData, rowKey, handleSort, handleSelectAll, locale, onHeaderRow, getFixedOffset]);\n\n // ==================== 拖拽排序处理 ====================\n const handleDragStart = useCallback((index: number) => {\n setDraggedRowIndex(index);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent, index: number) => {\n e.preventDefault();\n setDragOverRowIndex(index);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n if (draggedRowIndex === null || draggedRowIndex === dropIndex) {\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n return;\n }\n\n const newData = [...paginatedData];\n const draggedItem = newData[draggedRowIndex];\n newData.splice(draggedRowIndex, 1);\n newData.splice(dropIndex, 0, draggedItem);\n\n // 这里可以触发 onChange 回调,让外部处理数据更新\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n }, [draggedRowIndex, paginatedData]);\n\n const handleDragEnd = useCallback(() => {\n setDraggedRowIndex(null);\n setDragOverRowIndex(null);\n }, []);\n\n // ==================== 渲染空状态 ====================\n const renderEmpty = useCallback(() => {\n const emptyText = locale?.emptyText;\n const content =\n typeof emptyText === 'function'\n ? emptyText()\n : emptyText !== undefined\n ? emptyText\n : 'No data';\n const colSpan = columns.length + (rowSelection ? 1 : 0);\n return (\n <tr className=\"aha-table-placeholder\">\n <td colSpan={colSpan} style={{\n padding: '48px 16px',\n textAlign: 'center',\n color: '#98A2B3',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: 'DM Sans, sans-serif',\n borderBottom: 'none',\n backgroundColor: 'white',\n }}>\n {content}\n </td>\n </tr>\n );\n }, [locale?.emptyText, columns.length, rowSelection]);\n\n // ==================== 渲染表格行 ====================\n const renderRows = useCallback(() => {\n if (paginatedData.length === 0) {\n return renderEmpty();\n }\n return paginatedData.map((record, index) => {\n const key = getRowKey(record, rowKey);\n const isSelected = selectedRowKeys.includes(key);\n const isExpanded = expandedRowKeys.includes(key);\n const rowProps = onRow?.(record, index) || {};\n const isLastRow = index === paginatedData.length - 1;\n\n return (\n <React.Fragment key={key}>\n <tr\n className={`${typeof rowClassName === 'function' ? rowClassName(record, index) : rowClassName || ''} ${draggedRowIndex === index ? 'dragging' : ''} ${dragOverRowIndex === index ? 'drag-over' : ''}`}\n draggable={true}\n onDragStart={() => handleDragStart(index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDrop={(e) => handleDrop(e, index)}\n onDragEnd={handleDragEnd}\n style={{\n cursor: 'move',\n opacity: draggedRowIndex === index ? 0.5 : 1,\n backgroundColor: dragOverRowIndex === index ? '#F9FAFB' : 'white',\n transition: 'background-color 0.2s',\n ...rowProps.style,\n }}\n onMouseEnter={(e) => {\n if (draggedRowIndex !== index && dragOverRowIndex !== index) {\n e.currentTarget.style.backgroundColor = '#F9FAFB';\n }\n }}\n onMouseLeave={(e) => {\n if (draggedRowIndex !== index && dragOverRowIndex !== index) {\n e.currentTarget.style.backgroundColor = 'white';\n }\n }}\n {...rowProps}\n >\n {rowSelection && (\n <td\n style={{\n width: typeof rowSelection.columnWidth === 'number' \n ? `${rowSelection.columnWidth}px` \n : (typeof rowSelection.columnWidth === 'string' ? rowSelection.columnWidth : '60px'),\n position: rowSelection.fixed ? 'sticky' : 'relative',\n left: rowSelection.fixed === 'left' || rowSelection.fixed === true ? '0px' : undefined,\n right: rowSelection.fixed === 'right' ? '0px' : undefined,\n zIndex: rowSelection.fixed ? (rowSelection.fixed === 'left' || rowSelection.fixed === true ? 12 : 11) : 1,\n backgroundColor: 'white',\n padding: '16px',\n borderBottom: isLastRow ? 'none' : '1px solid #EAECF0',\n textAlign: 'center',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleSelect(record, e.target.checked)}\n disabled={rowSelection.getCheckboxProps?.(record).disabled}\n />\n </div>\n </td>\n )}\n {columns.map((column, colIndex) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex) || colIndex;\n const cellProps = column.onCell?.(record, index) || {};\n const fixedOffset = getFixedOffset(colIndex, column.fixed, false);\n const columnWidth = column.width \n ? (typeof column.width === 'number' ? `${column.width}px` : column.width)\n : undefined;\n \n return (\n <td\n key={columnKey}\n className={`${column.className || ''} ${column.align ? `text-${column.align}` : ''}`}\n style={{\n width: columnWidth,\n minWidth: column.minWidth ? (typeof column.minWidth === 'number' ? `${column.minWidth}px` : column.minWidth) : (columnWidth || undefined),\n maxWidth: columnWidth,\n position: column.fixed ? 'sticky' : 'relative',\n left: column.fixed === 'left' || column.fixed === true ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n right: column.fixed === 'right' ? (fixedOffset !== undefined ? `${fixedOffset}px` : '0') : undefined,\n zIndex: column.fixed ? (column.fixed === 'left' || column.fixed === true ? 10 : 9) : 1,\n backgroundColor: 'white',\n boxShadow: column.fixed === 'left' || column.fixed === true \n ? '2px 0 4px rgba(0, 0, 0, 0.05)' \n : column.fixed === 'right' \n ? '-2px 0 4px rgba(0, 0, 0, 0.05)' \n : undefined,\n padding: '16px',\n borderBottom: isLastRow ? 'none' : '1px solid #EAECF0',\n fontSize: '14px',\n lineHeight: '20px',\n color: '#101828',\n fontFamily: 'DM Sans, sans-serif',\n textAlign: column.align || 'left',\n ...cellProps.style,\n }}\n colSpan={column.colSpan}\n rowSpan={column.rowSpan}\n {...cellProps}\n >\n {renderCell(column, record, index)}\n </td>\n );\n })}\n </tr>\n {expandable?.expandedRowRender && isExpanded && (\n <tr>\n <td colSpan={columns.length + (rowSelection ? 1 : 0)}>\n {expandable.expandedRowRender(record, index, 0, true)}\n </td>\n </tr>\n )}\n </React.Fragment>\n );\n });\n }, [paginatedData, rowKey, selectedRowKeys, expandedRowKeys, rowSelection, columns, onRow, rowClassName, handleSelect, renderCell, expandable, draggedRowIndex, dragOverRowIndex, handleDragStart, handleDragOver, handleDrop, handleDragEnd, getFixedOffset, renderEmpty]);\n\n // ==================== 渲染分页 ====================\n const renderPagination = () => {\n if (pagination === false || !pagination) return null;\n \n const total = pagination.total ?? processedData.length;\n const position = pagination.position || 'bottomRight';\n \n return (\n <div\n style={{\n marginTop: '16px',\n display: 'flex',\n justifyContent: position.includes('Right') ? 'flex-end' : position.includes('Left') ? 'flex-start' : 'center',\n }}\n >\n <Pagination\n current={currentPage}\n total={total}\n pageSize={pageSize}\n showSizeChanger={pagination.showSizeChanger}\n pageSizeOptions={pagination.pageSizeOptions}\n showQuickJumper={pagination.showQuickJumper}\n showTotal={pagination.showTotal}\n onChange={handlePageChange}\n onShowSizeChange={handlePageChange}\n simple={pagination.simple}\n responsive={pagination.responsive}\n size={size === 'small' ? 'small' : 'default'}\n />\n </div>\n );\n };\n\n // ==================== 移动端渲染 ====================\n const renderMobileView = () => {\n const emptyContent =\n typeof locale?.emptyText === 'function'\n ? locale.emptyText()\n : locale?.emptyText !== undefined\n ? locale.emptyText\n : 'No data';\n if (paginatedData.length === 0) {\n return (\n <div className=\"aha-table-mobile aha-table-placeholder\" style={{\n padding: '48px 16px',\n textAlign: 'center',\n color: '#98A2B3',\n fontSize: '14px',\n lineHeight: '20px',\n fontFamily: 'DM Sans, sans-serif',\n }}>\n {emptyContent}\n </div>\n );\n }\n return (\n <div className=\"aha-table-mobile\">\n {paginatedData.map((record, index) => {\n const key = getRowKey(record, rowKey);\n const isSelected = selectedRowKeys.includes(key);\n \n return (\n <div\n key={key}\n className={`aha-table-mobile-row ${isSelected ? 'selected' : ''}`}\n style={{\n border: '1px solid #e8e8e8',\n borderRadius: '4px',\n padding: '12px',\n marginBottom: '12px',\n backgroundColor: isSelected ? '#e6f7ff' : 'white',\n }}\n >\n {rowSelection && (\n <div style={{ marginBottom: '8px' }}>\n <Checkbox\n checked={isSelected}\n onChange={(e) => handleSelect(record, e.target.checked)}\n disabled={rowSelection.getCheckboxProps?.(record).disabled}\n />\n </div>\n )}\n {columns.map((column) => {\n const columnKey = column.key || (Array.isArray(column.dataIndex) ? column.dataIndex.join('.') : column.dataIndex);\n const value = getValue(record, column.dataIndex || '');\n const displayValue = column.render ? column.render(value, record, index) : value;\n \n return (\n <div\n key={columnKey}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n paddingBottom: '8px',\n borderBottom: '1px solid #f0f0f0',\n }}\n >\n <span style={{ fontWeight: 'bold', color: '#666' }}>\n {typeof column.title === 'function' ? column.title({}) : column.title}:\n </span>\n <span style={{ flex: 1, textAlign: 'right' }}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n };\n\n // ==================== 主渲染 ====================\n // 检查是否有固定列\n const hasFixedColumns = useMemo(() => {\n return columns.some(col => col.fixed) || (rowSelection && rowSelection.fixed);\n }, [columns, rowSelection]);\n\n // 检查是否所有列都有宽度\n const hasAllColumnWidths = useMemo(() => {\n return columns.every(col => col.width) && (!rowSelection || rowSelection.columnWidth);\n }, [columns, rowSelection]);\n\n // 计算表格总宽度\n // 只有在设置了 scroll.x 或者有固定列且需要滚动时,才使用固定宽度\n // 否则使用 100% 让表格撑满父元素\n const totalWidth = useMemo(() => {\n // 如果设置了 scroll.x,使用 scroll.x 作为表格宽度(Ant Design 的方式)\n if (scroll?.x) {\n if (typeof scroll.x === 'number') {\n return scroll.x;\n } else if (scroll.x === true) {\n // scroll.x === true 时,计算所有列的宽度总和\n const widthSum = columns.reduce((sum, col) => {\n const w = col.width \n ? (typeof col.width === 'number' ? col.width : parseInt(String(col.width).replace('px', '')) || 0)\n : 150; // 默认宽度\n return sum + w;\n }, 0);\n const total = widthSum + (rowSelection ? (typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : parseInt(String(rowSelection.columnWidth || '60').replace('px', '')) || 60) : 0);\n return total;\n }\n }\n \n // 如果有固定列,需要计算最小宽度以确保固定列能正常工作\n // 但表格本身仍然使用 100% 宽度撑满父元素\n if (hasFixedColumns) {\n // 计算所有固定列的宽度总和,作为最小宽度\n const fixedWidthSum = columns.reduce((sum, col) => {\n if (col.fixed && col.width) {\n const w = typeof col.width === 'number' ? col.width : parseInt(String(col.width).replace('px', '')) || 0;\n return sum + w;\n }\n return sum;\n }, 0);\n const rowSelectionWidth = (rowSelection && rowSelection.fixed && rowSelection.columnWidth) \n ? (typeof rowSelection.columnWidth === 'number' ? rowSelection.columnWidth : parseInt(String(rowSelection.columnWidth).replace('px', '')) || 60)\n : 0;\n // 返回最小宽度,但表格宽度仍然使用 100%\n return fixedWidthSum + rowSelectionWidth;\n }\n \n // 默认返回 undefined,让表格使用 100% 宽度撑满父元素\n return undefined;\n }, [columns, scroll?.x, rowSelection, hasFixedColumns]);\n\n // 如果有固定列或所有列都有 width,使用 fixed layout\n const effectiveTableLayout = useMemo(() => {\n if (tableLayout === 'fixed') return 'fixed';\n if (hasFixedColumns) return 'fixed';\n if (hasAllColumnWidths) return 'fixed';\n // 如果有部分列设置了宽度,也使用 fixed layout,让未设置宽度的列自适应\n if (columns.some(col => col.width)) return 'fixed';\n return tableLayout;\n }, [tableLayout, hasFixedColumns, hasAllColumnWidths, columns]);\n\n const tableStyle: React.CSSProperties = {\n width: '100%', // 始终使用 100% 宽度撑满父元素\n minWidth: totalWidth ? `${totalWidth}px` : '100%', // 如果有固定列,设置最小宽度\n borderCollapse: 'separate',\n borderSpacing: 0,\n tableLayout: effectiveTableLayout,\n backgroundColor: 'white',\n ...(bordered && { borderRadius: '8px', border: '1px solid #EAECF0' }),\n overflow: 'hidden',\n };\n\n const wrapperStyle: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n maxWidth: '100%',\n maxHeight: typeof scroll?.y === 'number' ? `${scroll.y}px` : undefined,\n borderRadius: '8px',\n ...style,\n };\n\n // 移动端使用卡片式布局\n if (isMobile) {\n return (\n <div\n ref={tableRef}\n className={`aha-table aha-table-mobile-wrapper ${className}`}\n style={wrapperStyle}\n aria-busy={loading ? true : undefined}\n {...rest}\n >\n {title && <div style={{ marginBottom: '16px' }}>{title(processedData)}</div>}\n {pagination && typeof pagination === 'object' && pagination.position?.startsWith('top') && renderPagination()}\n {renderMobileView()}\n {footer && <div style={{ marginTop: '16px' }}>{footer(processedData)}</div>}\n {pagination && (typeof pagination === 'object' ? !pagination.position?.startsWith('top') : true) && renderPagination()}\n <TableLoadingOverlay loading={loading} spinColor={loadingSpinColor} />\n </div>\n );\n }\n\n // 滚动容器的样式\n const scrollContainerStyle: React.CSSProperties = {\n position: 'relative',\n overflowX: (scroll?.x || hasFixedColumns) ? 'auto' : 'visible',\n overflowY: scroll?.y ? 'auto' : 'visible',\n width: '100%',\n // 关键:容器宽度必须小于表格宽度,才能触发滚动\n // 只有在设置了 scroll.x 时才限制容器宽度\n maxWidth: scroll?.x === true \n ? '100%' \n : typeof scroll?.x === 'number' \n ? `${scroll.x}px` \n : undefined,\n maxHeight: typeof scroll?.y === 'number' ? `${scroll.y}px` : undefined,\n // 确保滚动容器有明确的边界\n borderRadius: '8px',\n };\n\n return (\n <div\n ref={tableRef}\n className={`aha-table ${className}`}\n style={wrapperStyle}\n aria-busy={loading ? true : undefined}\n {...rest}\n >\n {title && <div style={{ marginBottom: '16px' }}>{title(processedData)}</div>}\n {pagination && typeof pagination === 'object' && pagination.position?.startsWith('top') && renderPagination()}\n <div style={scrollContainerStyle}>\n <div style={{ \n width: '100%', \n minWidth: totalWidth ? `${totalWidth}px` : '100%', \n display: 'block' \n }}>\n <table style={tableStyle} className={innerClassName}>\n {renderHeader()}\n <tbody>{renderRows()}</tbody>\n {summary && (\n <tfoot>\n <tr>\n <td colSpan={columns.length + (rowSelection ? 1 : 0)}>{summary(processedData)}</td>\n </tr>\n </tfoot>\n )}\n </table>\n </div>\n </div>\n {footer && <div style={{ marginTop: '16px' }}>{footer(processedData)}</div>}\n {pagination && (typeof pagination === 'object' ? !pagination.position?.startsWith('top') : true) && renderPagination()}\n <TableLoadingOverlay loading={loading} spinColor={loadingSpinColor} />\n </div>\n );\n};\n\nexport default Table;\n\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__spreadArray","to","from","pack","ar","l","Array","slice","concat","SuppressedError","defaultTheme","primaryColor","ThemeContext","createContext","useTheme","context","useContext","colorBrandScale","colorErrorScale","semanticText","semanticBorder","semanticBg","semanticFg","typography","display","body","base","xs","sm","md","lg","xl","displayXs","displaySm","displayMd","displayLg","displayXl","display2xl","regular","medium","semibold","bold","spacing","radius","shadow","focusRing","default","shadowXs","shadowXsSkeuomorphic","shadowSm","error","errorShadowXs","errorShadowXsSkeuomorphic","DEFAULT_BRAND_COLOR","isDefaultBrandColor","color","toLowerCase","resolveBrandColor","BRAND_HOVER_COLOR","DEFAULT_BRAND_ICON","buttonFontFamily","buttonRadiusMd","SIZE_ALIAS","small","mediumSmall","large","HIERARCHY_ALIAS","primary","secondary","tertiary","SIZE_TOKENS","height","paddingX","paddingXLg","fontSize","lineHeight","iconSize","gap","iconOnlyPad","LoadingSpinner","_a","size","_jsxs","jsxs","_Fragment","Fragment","children","_jsx","jsx","width","viewBox","fill","style","animation","flexShrink","cx","cy","r","stroke","strokeWidth","opacity","d","strokeLinecap","Button","_b","type","_c","_d","disabled","_e","loading","iconOnly","_f","focused","onClick","_g","htmlType","_h","className","icon","_j","iconPosition","rest","_k","useState","isHovered","setIsHovered","_l","isPressed","setIsPressed","hierarchy","isIconOnly","isLink","isDisabled","showFocusRing","themeBrand","visuals","options","interactive","brand","brandColor","brandHover","brandText","brandTextHover","bg","iconColor","border","boxShadow","textDecoration","getButtonVisuals","focusShadow","getButtonFocusShadow","buttonStyle","position","alignItems","justifyContent","fontFamily","fontWeight","cursor","outline","transition","userSelect","WebkitTapHighlightColor","whiteSpace","backgroundColor","borderRadius","overflow","padding","paddingLeft","paddingRight","renderIcon","showLeftIcon","showRightIcon","filter","Boolean","join","preventDefault","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","displayName","fieldFontFamily","fieldFontSizeMd","fieldFontSizeSm","fieldLineHeightMd","fieldLineHeightSm","fieldRadiusMd","fieldShadowXs","fieldSpacingXs","fieldColors","textPrimary","textSecondary","textTertiary","textDisabled","textPlaceholder","borderPrimary","borderDisabled","borderBrand","borderError","borderErrorSubtle","bgPrimary","bgDisabledSubtle","fgDisabled","fgQuaternary","error600","getFieldFocusStyles","c","outlineOffset","getFieldLabelStyle","getFieldHintStyle","margin","sizeMap","pt","pb","forwardRef","ref","readOnly","prefix","suffix","leadingText","trailingText","leadingAddon","trailingAddon","onFocus","onBlur","onKeyDown","onPressEnter","value","defaultValue","onChange","placeholder","label","required","hintText","restProps","inputRef","useRef","setFocused","internalValue","setInternalValue","useEffect","current","isControlled","undefined","currentValue","focusStyles","dividerColor","hasPrefixIcon","hasSuffixIcon","iconSlotStyle","top","transform","zIndex","pointerEvents","addonTextStyle","paddingTop","paddingBottom","groupEl","boxSizing","borderRight","flex","minWidth","left","target","key","autoComplete","right","borderLeft","flexDirection","marginLeft","sizeStyles","ClearIcon","xmlns","strokeLinejoin","Input","allowClear","onClear","React","selector","extraRules","placeholderColor","showClear","baseStyles","WebkitAppearance","MozAppearance","appearance","placeholderStyles","inputEl","autoCorrect","autoCapitalize","spellCheck","stopPropagation","currentTarget","focus","Select","controlledValue","mode","showSearch","filterOption","onSelect","onDeselect","onSearch","onDropdownVisibleChange","_m","dropdownClassName","dropdownStyle","_o","defaultOpen","controlledOpen","open","maxTagCount","tagRender","optionRender","_p","_q","_r","internalOpen","setInternalOpen","_s","searchValue","setSearchValue","_t","focusedIndex","setFocusedIndex","selectRef","dropdownRef","_u","dropdownPosition","setDropdownPosition","isOpenControlled","isOpen","isMultiple","getSelectedOptions","useCallback","values","isArray","opt","includes","getFilteredOptions","String","search","filteredOptions","useMemo","updatePosition_1","rect","getBoundingClientRect","estimatedDropdownHeight","offsetHeight","Math","min","max","spaceBelow","window","innerHeight","bottom","spaceAbove","shouldOpenUp","top_1","scrollY","scrollX","placement","requestAnimationFrame","addEventListener","removeEventListener","handleClickOutside","event","contains","document","handleKeyDown","prev","option","handleSelect","focusedItem","querySelectorAll","scrollIntoView","block","behavior","newValues_1","currentValues","v","selectedOptions_1","handleRemoveTag","newValues","find","handleClear","newValue","selectedOptions","hasValue","renderTags","tagsToShow","remainingCount","flexWrap","map","tagProps","closable","onClose","maxWidth","textOverflow","WebkitTouchCallout","touchAction","newOpen","setTimeout","onTouchStart","onTouchEnd","tabIndex","minHeight","val","background","createPortal","maxHeight","transformOrigin","WebkitOverflowScrolling","overscrollBehavior","textAlign","index","isSelected","isFocused","selected","SortIcon","SortDescIcon","SortAscIcon","LeftArrowIcon","RightArrowIcon","Pagination","controlledCurrent","defaultCurrent","total","controlledPageSize","pageSize","defaultPageSize","showSizeChanger","pageSizeOptions","showQuickJumper","showTotal","onShowSizeChange","simple","hideOnSinglePage","responsive","showLessItems","itemRender","internalCurrent","setInternalCurrent","internalPageSize","setInternalPageSize","jumpToPage","setJumpToPage","totalPages","ceil","handlePageChange","page","handleJumpTo","parseInt","marginRight","start","end","_","pages","push","getPageNumbers","item","isActive","element","renderItem","Number","newPageSize","newTotalPages","newCurrent","goButton","controlFontFamily","controlFontWeightMedium","controlFontWeightRegular","getControlTypography","hintGap","getControlFocusShadow","showFocus","getControlLabelStyle","getControlHintStyle","Checkbox","checked","indeterminate","hint","isFocusedProp","hovered","setHovered","handleClick","boxSize","getCheckboxBorderRadius","active","getControlBoxStyles","getControlActiveIconColor","hasLabel","role","marginTop","TableLoadingSpinner","strokeDasharray","strokeDashoffset","TableLoadingOverlay","spinColor","content","inset","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","columns","dataSource","rowSelection","pagination","bordered","locale","showHeader","title","footer","summary","scroll","tableLayout","onSorterChange","onPaginationChange","onRow","innerClassName","expandable","rowClassName","onHeaderRow","sticky","loadingSpinColor","selectedRowKeys","defaultSelectedRowKeys","setSelectedRowKeys","Map","sorters","setSorters","defaultExpandedRowKeys","expandedRowKeys","setExpandedRowKeys","_v","currentPage","setCurrentPage","_w","setPageSize","_x","draggedRowIndex","setDraggedRowIndex","_y","dragOverRowIndex","setDragOverRowIndex","_z","isMobile","setIsMobile","tableRef","headerRef","checkMobile","innerWidth","checkboxProps","getCheckboxProps","newSelectedRowKeys","k","selectedRows","Event","handleSelectAll","currentPageData","keys","changeRows","onSelectAll","handleSort","column","columnKey","dataIndex","newSorters","delete","set","sorterArray","entries","field","currentSorter","currentDataSource","action","expanded","newExpandedRowKeys","onExpand","onExpandedRowsChange","emptyContent","getProcessedData","processed","sort","a","b","_loop_1","col","compareResult","sorter","aVal","bVal","sorterEntries_1","_i","state_1","processedData","isServerPagination","paginatedData","renderCell","render","getFixedOffset","columnIndex","fixed","isHeader","fixedDirection","offset","columnWidth","renderHeader","enabledRows","enabledKeys","allSelected","someSelected","headerColumns","colIndex","sortOrder","get","fixedOffset","align","borderBottom","onHeaderCell","sortColumn","selectWidth","selectColumn","hideSelectAll","every","some","columnTitle","unshift","headerRowProps","handleDragStart","handleDragOver","handleDrop","dropIndex","newData","draggedItem","splice","handleDragEnd","renderEmpty","emptyText","colSpan","renderRows","isExpanded","rowProps","isLastRow","draggable","onDragStart","onDragOver","onDrop","onDragEnd","cellProps","onCell","rowSpan","expandedRowRender","renderPagination","hasFixedColumns","hasAllColumnWidths","totalWidth","x","sum","replace","effectiveTableLayout","tableStyle","borderCollapse","borderSpacing","wrapperStyle","y","marginBottom","startsWith","displayValue","scrollContainerStyle","overflowX","overflowY"],"mappings":"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","x_google_ignoreList":[0]}
|