aha-components 1.7.11 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +10 -0
  2. package/dist/Avatar.esm.js +2 -0
  3. package/dist/Avatar.esm.js.map +1 -0
  4. package/dist/Avatar.js +2 -0
  5. package/dist/Avatar.js.map +1 -0
  6. package/dist/Badge.esm.js +2 -0
  7. package/dist/Badge.esm.js.map +1 -0
  8. package/dist/Badge.js +2 -0
  9. package/dist/Badge.js.map +1 -0
  10. package/dist/Checkbox.esm.js +1 -1
  11. package/dist/Checkbox.esm.js.map +1 -1
  12. package/dist/Checkbox.js +1 -1
  13. package/dist/Checkbox.js.map +1 -1
  14. package/dist/Radio.esm.js +1 -1
  15. package/dist/Radio.esm.js.map +1 -1
  16. package/dist/Radio.js +1 -1
  17. package/dist/Radio.js.map +1 -1
  18. package/dist/Table.esm.js +1 -1
  19. package/dist/Table.esm.js.map +1 -1
  20. package/dist/Table.js +1 -1
  21. package/dist/Table.js.map +1 -1
  22. package/dist/Tag.esm.js +1 -1
  23. package/dist/Tag.esm.js.map +1 -1
  24. package/dist/Tag.js +1 -1
  25. package/dist/Tag.js.map +1 -1
  26. package/dist/Textarea.esm.js +1 -1
  27. package/dist/Textarea.esm.js.map +1 -1
  28. package/dist/Textarea.js +1 -1
  29. package/dist/Textarea.js.map +1 -1
  30. package/dist/components/Avatar/Avatar.stories.d.ts +12 -0
  31. package/dist/components/Avatar/index.d.ts +42 -0
  32. package/dist/components/Badge/Badge.stories.d.ts +15 -0
  33. package/dist/components/Badge/index.d.ts +71 -0
  34. package/dist/components/Checkbox/Checkbox.stories.d.ts +5 -4
  35. package/dist/components/Checkbox/index.d.ts +6 -0
  36. package/dist/components/Radio/Radio.stories.d.ts +6 -4
  37. package/dist/components/Radio/index.d.ts +6 -0
  38. package/dist/components/Tag/Tag.stories.d.ts +5 -8
  39. package/dist/components/Tag/index.d.ts +24 -2
  40. package/dist/components/Textarea/Textarea.stories.d.ts +2 -0
  41. package/dist/components/Textarea/Textarea.test.d.ts +1 -0
  42. package/dist/components/Textarea/index.d.ts +12 -0
  43. package/dist/design-tokens/theme.css +26 -0
  44. package/dist/design-tokens/theme.tailwind4.css +26 -0
  45. package/dist/index.css +3848 -0
  46. package/dist/index.d.ts +153 -4
  47. package/dist/index.esm.css +3848 -0
  48. package/dist/index.esm.js +1 -1
  49. package/dist/index.esm.js.map +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/theme.css +26 -0
  53. package/dist/tokens.d.ts +28 -0
  54. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Table.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/components/Button/index.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 } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n /** 输入框大小 */\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否显示错误状态 */\n error?: boolean;\n /** 是否只读 */\n readOnly?: boolean;\n /** 输入框前缀图标 */\n prefix?: React.ReactNode;\n /** 输入框后缀图标 */\n suffix?: React.ReactNode;\n /** 允许清除 */\n allowClear?: boolean;\n /** 清除回调 */\n onClear?: () => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 输入框类型 */\n type?: string;\n /** 占位符 */\n placeholder?: string;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 变化回调 */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** 聚焦回调 */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** 失焦回调 */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** 按下回车回调 */\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'medium',\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 ...restProps\n },\n ref\n ) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = React.useState(\n defaultValue || value || ''\n );\n const [focused, setFocused] = React.useState(false);\n\n // 合并 ref\n useEffect(() => {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n inputRef.current;\n }\n }, [ref]);\n\n // 受控/非受控处理\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value);\n }\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) {\n onPressEnter(e);\n }\n restProps.onKeyDown?.(e);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!isControlled) {\n setInternalValue('');\n }\n // 创建一个清除事件\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 // 尺寸样式 - 高度包含边框(1px),实际内容区域需要减去上下边框(2px)\n // 字体 16px,line-height 24px,需要计算合适的 padding\n const sizeStyles = {\n small: {\n height: '32px', // 包含边框的实际高度\n paddingTop: '3px',\n paddingBottom: '3px',\n },\n mediumSmall: {\n height: '36px', // 包含边框的实际高度\n paddingTop: '5px',\n paddingBottom: '5px',\n },\n medium: {\n height: '40px', // 包含边框的实际高度\n paddingTop: '7px',\n paddingBottom: '7px',\n },\n large: {\n height: '48px', // 包含边框的实际高度\n paddingTop: '11px',\n paddingBottom: '11px',\n },\n };\n\n // 计算 padding-right\n const hasRightContent = suffix || showClear;\n const paddingRight = hasRightContent ? '40px' : '12px'; // 如果有后缀或清除按钮,右边留出空间\n\n const baseStyles: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '8px', // rounded-md (0.5rem)\n border: `1px solid ${error ? '#F04438' : focused ? primaryColor : '#D7D3D0'}`,\n backgroundColor: disabled ? '#FAFAF9' : readOnly ? '#FAFAF9' : '#FFFFFF',\n color: disabled ? '#98A2B3' : '#1C1917',\n fontSize: '16px', // text-base - 至少 16px 避免 iOS Safari 自动缩放\n fontWeight: 400,\n lineHeight: '24px',\n paddingLeft: prefix ? '40px' : '12px', // 所有情况下,如果没有前缀,padding-left 都是 12px\n paddingRight,\n paddingTop: sizeStyles[size].paddingTop,\n paddingBottom: sizeStyles[size].paddingBottom,\n transition: 'all 0.2s',\n outline: 'none',\n WebkitAppearance: 'none', // 移除 iOS Safari 默认样式\n MozAppearance: 'textfield', // 移除 Firefox 数字输入框的上下箭头\n appearance: 'none',\n ...style,\n };\n\n // 占位符样式通过 CSS 类名处理\n const placeholderStyles = `\n .aha-input-wrapper input::placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input::-webkit-input-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input::-moz-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input:-ms-input-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n /* 移动端优化 */\n .aha-input-wrapper input {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\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\"] {\n -moz-appearance: textfield;\n }\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 return (\n <>\n <style>{placeholderStyles}</style>\n <div\n className={`aha-input-wrapper ${className}`}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n }}\n >\n {prefix && (\n <span\n style={{\n position: 'absolute',\n left: '12px',\n display: 'flex',\n alignItems: 'center',\n color: disabled ? '#98A2B3' : '#78716C',\n zIndex: 1,\n pointerEvents: 'none',\n }}\n >\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\n style={{\n position: 'absolute',\n right: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: disabled ? '#98A2B3' : '#78716C',\n zIndex: 1,\n }}\n >\n {showClear && <ClearIcon />}\n {suffix && <span style={{ pointerEvents: 'none' }}>{suffix}</span>}\n </span>\n )}\n </div>\n </>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n\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 from 'react';\nimport { CheckIcon, MinusIcon } from '../../icons';\nimport { useTheme } from '../../theme/ThemeContext';\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}\n\nconst Checkbox: React.FC<CheckboxProps> = ({\n checked = false,\n indeterminate = false,\n disabled = false,\n onChange,\n className = '',\n style,\n children,\n}) => {\n const { primaryColor } = useTheme();\n \n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n // 创建一个合成事件来触发 onChange\n const syntheticEvent = {\n target: { checked: !checked },\n currentTarget: { checked: !checked },\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(syntheticEvent);\n };\n\n const isChecked = checked || indeterminate;\n const backgroundColor = disabled\n ? '#FAFAF9'\n : isChecked\n ? primaryColor\n : 'white';\n const borderColor = disabled ? '#FAFAF9' : isChecked ? primaryColor : '#D7D3D0';\n\n return (\n <div\n className={`aha-checkbox ${className}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n ...style,\n }}\n onClick={handleClick}\n >\n <div\n style={{\n position: 'relative',\n width: '20px',\n height: '20px',\n minWidth: '20px',\n minHeight: '20px',\n borderRadius: '4px', // spacing-sm 通常是 4px\n border: `1px solid ${borderColor}`,\n backgroundColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.2s',\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '14px',\n height: '14px',\n opacity: isChecked ? 1 : 0,\n transition: 'opacity 0.2s',\n pointerEvents: 'none',\n }}\n >\n {indeterminate ? (\n <MinusIcon style={{ width: '14px', height: '14px', display: 'block' }} />\n ) : (\n <CheckIcon style={{ width: '14px', height: '14px', display: 'block' }} />\n )}\n </div>\n </div>\n {children && (\n <span\n style={{\n fontSize: '14px',\n lineHeight: '20px',\n color: disabled ? '#98A2B3' : '#101828',\n fontFamily: 'DM Sans, sans-serif',\n }}\n >\n {children}\n </span>\n )}\n <input\n type=\"checkbox\"\n checked={checked}\n ref={(el) => {\n if (el) el.indeterminate = indeterminate;\n }}\n onChange={onChange}\n disabled={disabled}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n pointerEvents: 'none',\n }}\n aria-hidden=\"true\"\n />\n </div>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport default Checkbox;\n\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","_Fragment","children","_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","Input","forwardRef","ref","error","readOnly","prefix","suffix","allowClear","onClear","placeholder","value","defaultValue","onChange","onFocus","onBlur","onPressEnter","restProps","inputRef","useRef","React","internalValue","setInternalValue","setFocused","useEffect","current","isControlled","undefined","currentValue","handleClear","stopPropagation","target","currentTarget","focus","showClear","sizeStyles","paddingTop","paddingBottom","baseStyles","boxSizing","WebkitAppearance","MozAppearance","appearance","left","zIndex","pointerEvents","onKeyDown","key","autoComplete","autoCorrect","autoCapitalize","spellCheck","right","xmlns","strokeLinejoin","Select","controlledValue","options","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","label","String","toLowerCase","search","filteredOptions","useMemo","updatePosition_1","rect","getBoundingClientRect","estimatedDropdownHeight","offsetHeight","Math","min","max","spaceBelow","window","innerHeight","bottom","spaceAbove","top","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","newValue","selectedOptions","hasValue","renderTags","tagsToShow","remainingCount","flexWrap","flex","minWidth","map","tagProps","closable","onClose","Fragment","maxWidth","textOverflow","marginLeft","WebkitTouchCallout","touchAction","newOpen","setTimeout","onTouchStart","onTouchEnd","tabIndex","minHeight","val","background","transform","createPortal","maxHeight","transformOrigin","WebkitOverflowScrolling","overscrollBehavior","textAlign","index","isSelected","isFocused","selected","body","CheckIcon","MinusIcon","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","margin","start","end","_","pages","push","getPageNumbers","item","isActive","element","renderItem","Number","newPageSize","newTotalPages","newCurrent","goButton","Checkbox","checked","indeterminate","isChecked","borderColor","el","TableLoadingSpinner","strokeDasharray","strokeDashoffset","TableLoadingOverlay","spinColor","content","role","inset","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","Table","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","marginTop","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.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/components/Button/index.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 } from 'react';\nimport { useTheme } from '../../theme/ThemeContext';\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix' | 'suffix'> {\n /** 输入框大小 */\n size?: 'small' | 'mediumSmall' | 'medium' | 'large';\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否显示错误状态 */\n error?: boolean;\n /** 是否只读 */\n readOnly?: boolean;\n /** 输入框前缀图标 */\n prefix?: React.ReactNode;\n /** 输入框后缀图标 */\n suffix?: React.ReactNode;\n /** 允许清除 */\n allowClear?: boolean;\n /** 清除回调 */\n onClear?: () => void;\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 输入框类型 */\n type?: string;\n /** 占位符 */\n placeholder?: string;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 变化回调 */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /** 聚焦回调 */\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** 失焦回调 */\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n /** 按下回车回调 */\n onPressEnter?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = 'medium',\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 ...restProps\n },\n ref\n ) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalValue, setInternalValue] = React.useState(\n defaultValue || value || ''\n );\n const [focused, setFocused] = React.useState(false);\n\n // 合并 ref\n useEffect(() => {\n if (typeof ref === 'function') {\n ref(inputRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n inputRef.current;\n }\n }, [ref]);\n\n // 受控/非受控处理\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value);\n }\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) {\n onPressEnter(e);\n }\n restProps.onKeyDown?.(e);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!isControlled) {\n setInternalValue('');\n }\n // 创建一个清除事件\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 // 尺寸样式 - 高度包含边框(1px),实际内容区域需要减去上下边框(2px)\n // 字体 16px,line-height 24px,需要计算合适的 padding\n const sizeStyles = {\n small: {\n height: '32px', // 包含边框的实际高度\n paddingTop: '3px',\n paddingBottom: '3px',\n },\n mediumSmall: {\n height: '36px', // 包含边框的实际高度\n paddingTop: '5px',\n paddingBottom: '5px',\n },\n medium: {\n height: '40px', // 包含边框的实际高度\n paddingTop: '7px',\n paddingBottom: '7px',\n },\n large: {\n height: '48px', // 包含边框的实际高度\n paddingTop: '11px',\n paddingBottom: '11px',\n },\n };\n\n // 计算 padding-right\n const hasRightContent = suffix || showClear;\n const paddingRight = hasRightContent ? '40px' : '12px'; // 如果有后缀或清除按钮,右边留出空间\n\n const baseStyles: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n fontFamily: \"DM Sans, sans-serif\",\n borderRadius: '8px', // rounded-md (0.5rem)\n border: `1px solid ${error ? '#F04438' : focused ? primaryColor : '#D7D3D0'}`,\n backgroundColor: disabled ? '#FAFAF9' : readOnly ? '#FAFAF9' : '#FFFFFF',\n color: disabled ? '#98A2B3' : '#1C1917',\n fontSize: '16px', // text-base - 至少 16px 避免 iOS Safari 自动缩放\n fontWeight: 400,\n lineHeight: '24px',\n paddingLeft: prefix ? '40px' : '12px', // 所有情况下,如果没有前缀,padding-left 都是 12px\n paddingRight,\n paddingTop: sizeStyles[size].paddingTop,\n paddingBottom: sizeStyles[size].paddingBottom,\n transition: 'all 0.2s',\n outline: 'none',\n WebkitAppearance: 'none', // 移除 iOS Safari 默认样式\n MozAppearance: 'textfield', // 移除 Firefox 数字输入框的上下箭头\n appearance: 'none',\n ...style,\n };\n\n // 占位符样式通过 CSS 类名处理\n const placeholderStyles = `\n .aha-input-wrapper input::placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input::-webkit-input-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input::-moz-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n .aha-input-wrapper input:-ms-input-placeholder {\n color: #D7D3D0;\n font-size: 16px;\n font-weight: 400;\n opacity: 1;\n }\n /* 移动端优化 */\n .aha-input-wrapper input {\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n touch-action: manipulation;\n }\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\"] {\n -moz-appearance: textfield;\n }\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 return (\n <>\n <style>{placeholderStyles}</style>\n <div\n className={`aha-input-wrapper ${className}`}\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n width: '100%',\n }}\n >\n {prefix && (\n <span\n style={{\n position: 'absolute',\n left: '12px',\n display: 'flex',\n alignItems: 'center',\n color: disabled ? '#98A2B3' : '#78716C',\n zIndex: 1,\n pointerEvents: 'none',\n }}\n >\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\n style={{\n position: 'absolute',\n right: '12px',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: disabled ? '#98A2B3' : '#78716C',\n zIndex: 1,\n }}\n >\n {showClear && <ClearIcon />}\n {suffix && <span style={{ pointerEvents: 'none' }}>{suffix}</span>}\n </span>\n )}\n </div>\n </>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n\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","_Fragment","children","_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","Input","forwardRef","ref","error","readOnly","prefix","suffix","allowClear","onClear","placeholder","value","defaultValue","onChange","onFocus","onBlur","onPressEnter","restProps","inputRef","useRef","React","internalValue","setInternalValue","setFocused","useEffect","current","isControlled","undefined","currentValue","handleClear","stopPropagation","target","currentTarget","focus","showClear","sizeStyles","paddingTop","paddingBottom","baseStyles","boxSizing","WebkitAppearance","MozAppearance","appearance","left","zIndex","pointerEvents","onKeyDown","key","autoComplete","autoCorrect","autoCapitalize","spellCheck","right","xmlns","strokeLinejoin","Select","controlledValue","options","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","label","String","toLowerCase","search","filteredOptions","useMemo","updatePosition_1","rect","getBoundingClientRect","estimatedDropdownHeight","offsetHeight","Math","min","max","spaceBelow","window","innerHeight","bottom","spaceAbove","top","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","newValue","selectedOptions","hasValue","renderTags","tagsToShow","remainingCount","flexWrap","flex","minWidth","map","tagProps","closable","onClose","Fragment","maxWidth","textOverflow","marginLeft","WebkitTouchCallout","touchAction","newOpen","setTimeout","onTouchStart","onTouchEnd","tabIndex","minHeight","val","background","transform","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","margin","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","flexDirection","TableLoadingSpinner","strokeDasharray","strokeDashoffset","TableLoadingOverlay","spinColor","content","inset","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","Table","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]}