aha-components 1.5.5 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/components/Button/index.tsx","../src/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\nexport type ButtonType = 'default' | 'primary';\nexport type ButtonSize = 'small' | 'mediumSmall' | 'medium' | 'large';\n\nexport interface ButtonProps {\n /** 按钮内容 */\n children?: React.ReactNode;\n /** 按钮类型 */\n type?: ButtonType;\n /** 按钮尺寸 */\n size?: ButtonSize;\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否加载中 */\n loading?: boolean;\n /** 点击事件 */\n onClick?: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n /** 按钮原生type */\n htmlType?: 'button' | 'submit' | 'reset';\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 图标 */\n icon?: React.ReactNode;\n /** 图标位置 */\n iconPosition?: 'left' | 'right';\n [key: string]: any;\n}\n\n// 尺寸配置:高度分别为 32、36、40、48px\nconst SIZE_CONFIG = {\n small: {\n height: '32px',\n paddingLeft: '12px',\n paddingRight: '12px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '16px',\n gap: '6px',\n },\n mediumSmall: {\n height: '36px',\n paddingLeft: '14px',\n paddingRight: '14px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '16px',\n gap: '6px',\n },\n medium: {\n height: '40px',\n paddingLeft: '16px',\n paddingRight: '16px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '18px',\n gap: '8px',\n },\n large: {\n height: '48px',\n paddingLeft: '20px',\n paddingRight: '20px',\n fontSize: '16px',\n lineHeight: '24px',\n iconSize: '20px',\n gap: '8px',\n },\n};\n\n// Loading 图标组件\nconst LoadingIcon: React.FC<{ size: number; color: string }> = ({ size, color }) => {\n // 使用 React 方式注入样式,避免在模块顶层操作 DOM\n const loadingStyles = `\n @keyframes aha-button-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `;\n\n return (\n <>\n <style>{loadingStyles}</style>\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n animation: 'aha-button-spin 1s linear infinite',\n }}\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};\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n type = 'default',\n size = 'medium',\n disabled = false,\n loading = false,\n onClick,\n htmlType = 'button',\n className = '',\n style,\n icon,\n iconPosition = 'left',\n ...rest\n}) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const sizeConfig = SIZE_CONFIG[size];\n const isDisabled = disabled || loading;\n\n // 计算按钮样式\n const getButtonStyles = (): React.CSSProperties => {\n const baseStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n paddingLeft: sizeConfig.paddingLeft,\n paddingRight: sizeConfig.paddingRight,\n fontSize: sizeConfig.fontSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500,\n fontFamily: 'DM Sans, sans-serif',\n borderRadius: '8px',\n border: 'none',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition: 'all 0.2s',\n userSelect: 'none',\n WebkitTapHighlightColor: 'transparent',\n ...style,\n };\n\n if (type === 'primary') {\n // Primary 按钮:使用主题色,所有状态下文字都是白色\n baseStyle.color = '#FFFFFF';\n baseStyle.backgroundColor = primaryColor;\n if (disabled) {\n // disabled状态:保持primary样式,通过降低透明度表示禁用\n baseStyle.opacity = 0.4;\n baseStyle.cursor = 'not-allowed';\n } else if (loading) {\n // loading状态:保持primary样式(主题色背景)\n baseStyle.backgroundColor = primaryColor;\n } else if (isPressed) {\n baseStyle.backgroundColor = '#EC470A'; // 按下时的深色\n } else if (isHovered) {\n baseStyle.backgroundColor = '#FD843A'; // hover时的浅色\n }\n } else {\n // Default 按钮:白色背景,灰色边框\n if (disabled) {\n // disabled状态:灰色背景,灰色文字\n baseStyle.backgroundColor = '#FAFAF9';\n baseStyle.color = '#D6D3D1';\n baseStyle.border = '1px solid #E7E5E4';\n } else if (loading) {\n // loading状态:保持default样式(白色背景+边框)\n baseStyle.backgroundColor = '#FFFFFF';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #E7E5E4';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n } else if (isPressed) {\n baseStyle.backgroundColor = '#F5F5F4';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #D7D3D0';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n } else if (isHovered) {\n // Hover 状态:浅灰色背景,边框稍微变深,增强阴影\n baseStyle.backgroundColor = '#FAFAF9';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #D7D3D0';\n baseStyle.boxShadow = '0px 2px 4px 0px rgba(12, 10, 9, 0.08)';\n } else {\n baseStyle.backgroundColor = '#FFFFFF';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #E7E5E4';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n }\n }\n\n return baseStyle;\n };\n\n // 处理点击事件\n const handleClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n // 渲染图标\n const renderIcon = () => {\n if (loading) {\n // loading时,根据按钮类型确定颜色\n // primary按钮:白色图标;default按钮:黑色图标\n const iconColor = type === 'primary' ? '#FFFFFF' : '#101828';\n const iconSize = parseInt(sizeConfig.iconSize.replace('px', ''));\n return <LoadingIcon size={iconSize} color={iconColor} />;\n }\n if (icon) {\n return (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n );\n }\n return null;\n };\n\n const buttonStyle = getButtonStyles();\n\n return (\n <button\n type={htmlType}\n className={`aha-button aha-button--${type} aha-button--${size} ${isDisabled ? 'aha-button--disabled' : ''} ${loading ? 'aha-button--loading' : ''} ${className}`}\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 {/* loading时,图标总是在左侧显示,忽略iconPosition */}\n {loading && renderIcon()}\n {!loading && iconPosition === 'left' && renderIcon()}\n {children && <span style={{ display: 'inline-block' }}>{children}</span>}\n {!loading && iconPosition === 'right' && renderIcon()}\n </button>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default Button;\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 { 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 = (\n item: number | string,\n index: number\n ): 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=\"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: \"none\",\n background: isActive ? \"#FAFAF9\" : \"white\",\n backgroundColor: isActive ? \"#FAFAF9\" : \"white\",\n color: isActive ? primaryColor : \"#79716B\",\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 上一页\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 下一页\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 {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 <div className=\"flex items-center gap-1\">\n <LeftArrowIcon /> <span>Previous</span>\n </div>\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 <div className=\"flex items-center gap-1\">\n <LeftArrowIcon /> <span>Previous</span>\n </div>\n </Button>\n )}\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 0 }}>\n {getPageNumbers().map((item, index) => renderItem(item, index))}\n </div>\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 <div className=\"flex items-center gap-1\">\n <span>Next</span> <RightArrowIcon />\n </div>\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 <div className=\"flex items-center gap-1\">\n <span>Next</span> <RightArrowIcon />\n </div>\n </Button>\n )}\n\n {showSizeChanger && (\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n style={{\n padding: size === \"small\" ? \"6px 12px\" : \"8px 12px\",\n border: \"1px solid #EAECF0\",\n borderRadius: \"8px\",\n fontSize: size === \"small\" ? \"12px\" : \"14px\",\n lineHeight: size === \"small\" ? \"18px\" : \"20px\",\n color: \"#101828\",\n fontFamily: \"DM Sans, sans-serif\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n backgroundColor: \"white\",\n outline: \"none\",\n transition: \"all 0.2s\",\n }}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = primaryColor;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = \"#EAECF0\";\n }}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size} 条/页\n </option>\n ))}\n </select>\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 跳至\n </span>\n <input\n type=\"number\"\n min=\"1\"\n value={jumpToPage}\n onChange={(e) => setJumpToPage(e.target.value)}\n onKeyPress={(e) => e.key === \"Enter\" && handleJumpTo()}\n disabled={disabled}\n style={{\n width: \"56px\",\n height: size === \"small\" ? \"28px\" : \"36px\",\n padding: \"0 8px\",\n border: \"1px solid #EAECF0\",\n borderRadius: \"8px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#101828\",\n fontFamily: \"DM Sans, sans-serif\",\n outline: \"none\",\n transition: \"all 0.2s\",\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = primaryColor;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = \"#EAECF0\";\n }}\n />\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n 页\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 确定\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// ==================== 类型定义 ====================\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 // ==================== 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 ref={tableRef} className={`aha-table aha-table-mobile-wrapper ${className}`} style={wrapperStyle} {...rest}>\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 </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 ref={tableRef} className={`aha-table ${className}`} style={wrapperStyle} {...rest}>\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 </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_CONFIG","small","height","paddingLeft","paddingRight","fontSize","lineHeight","iconSize","gap","mediumSmall","medium","large","LoadingIcon","_a","size","color","_jsxs","jsxs","_Fragment","children","_jsx","width","viewBox","fill","style","animation","jsx","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","opacity","Button","baseStyle","_b","type","_c","_d","disabled","_e","loading","onClick","_f","htmlType","_g","className","icon","_h","iconPosition","rest","_j","_k","useState","isHovered","setIsHovered","_l","isPressed","setIsPressed","sizeConfig","isDisabled","renderIcon","iconColor","parseInt","replace","display","alignItems","justifyContent","flexShrink","buttonStyle","position","fontWeight","fontFamily","borderRadius","border","cursor","outline","transition","userSelect","WebkitTapHighlightColor","backgroundColor","boxShadow","preventDefault","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","displayName","CheckIcon","xmlns","d","strokeLinejoin","MinusIcon","SortIcon","SortDescIcon","SortAscIcon","LeftArrowIcon","RightArrowIcon","Pagination","controlledCurrent","current","defaultCurrent","total","controlledPageSize","pageSize","defaultPageSize","showSizeChanger","pageSizeOptions","showQuickJumper","showTotal","onChange","onShowSizeChange","simple","hideOnSinglePage","_m","_o","responsive","showLessItems","itemRender","_q","_r","internalCurrent","setInternalCurrent","_s","internalPageSize","setInternalPageSize","_t","jumpToPage","setJumpToPage","totalPages","useMemo","Math","ceil","useEffect","undefined","handlePageChange","page","handleJumpTo","marginRight","margin","marginLeft","start","end","min","flexWrap","padding","_","pages","push","getPageNumbers","map","item","index","isActive","element","minWidth","background","max","renderItem","value","newPageSize","Number","target","newTotalPages","newCurrent","currentTarget","borderColor","onKeyPress","key","onFocus","onBlur","goButton","Checkbox","checked","indeterminate","isChecked","minHeight","boxSizing","pointerEvents","ref","el","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","columns","dataSource","rowSelection","pagination","bordered","locale","showHeader","title","footer","summary","scroll","_p","tableLayout","onSorterChange","onPaginationChange","onRow","innerClassName","expandable","rowClassName","onHeaderRow","sticky","selectedRowKeys","defaultSelectedRowKeys","setSelectedRowKeys","Map","sorters","setSorters","_u","defaultExpandedRowKeys","expandedRowKeys","setExpandedRowKeys","_v","currentPage","setCurrentPage","_w","setPageSize","_x","draggedRowIndex","setDraggedRowIndex","_y","dragOverRowIndex","setDragOverRowIndex","_z","isMobile","setIsMobile","tableRef","useRef","headerRef","checkMobile","window","innerWidth","addEventListener","removeEventListener","handleSelect","useCallback","selected","checkboxProps","getCheckboxProps","newSelectedRowKeys","filter","k","selectedRows","includes","onSelect","Event","handleSelectAll","currentPageData","keys","changeRows","onSelectAll","handleSort","column","columnKey","isArray","dataIndex","join","newSorters","delete","set","sorterArray","entries","find","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","Boolean","paginatedData","renderCell","render","getFixedOffset","columnIndex","fixed","isHeader","fixedDirection","offset","columnWidth","renderHeader","enabledRows","enabledKeys","allSelected","someSelected","headerColumns","colIndex","sortOrder","get","fixedOffset","align","maxWidth","left","right","zIndex","textAlign","borderBottom","onHeaderCell","sortColumn","selectWidth","selectColumn","hideSelectAll","every","some","columnTitle","unshift","headerRowProps","handleDragStart","handleDragOver","handleDrop","dropIndex","newData","draggedItem","splice","handleDragEnd","renderEmpty","emptyText","content","colSpan","renderRows","isSelected","isExpanded","rowProps","isLastRow","React","Fragment","draggable","onDragStart","onDragOver","onDrop","onDragEnd","cellProps","onCell","rowSpan","expandedRowRender","renderPagination","marginTop","hasFixedColumns","hasAllColumnWidths","totalWidth","x","sum","String","effectiveTableLayout","tableStyle","borderCollapse","borderSpacing","overflow","wrapperStyle","maxHeight","y","marginBottom","startsWith","displayValue","paddingBottom","flex","scrollContainerStyle","overflowX","overflowY"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Table.js","sources":["../node_modules/tslib/tslib.es6.js","../src/theme/ThemeContext.tsx","../src/components/Button/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\nexport type ButtonType = 'default' | 'primary';\nexport type ButtonSize = 'small' | 'mediumSmall' | 'medium' | 'large';\n\nexport interface ButtonProps {\n /** 按钮内容 */\n children?: React.ReactNode;\n /** 按钮类型 */\n type?: ButtonType;\n /** 按钮尺寸 */\n size?: ButtonSize;\n /** 是否禁用 */\n disabled?: boolean;\n /** 是否加载中 */\n loading?: boolean;\n /** 点击事件 */\n onClick?: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n /** 按钮原生type */\n htmlType?: 'button' | 'submit' | 'reset';\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n /** 图标 */\n icon?: React.ReactNode;\n /** 图标位置 */\n iconPosition?: 'left' | 'right';\n [key: string]: any;\n}\n\n// 尺寸配置:高度分别为 32、36、40、48px\nconst SIZE_CONFIG = {\n small: {\n height: '32px',\n paddingLeft: '12px',\n paddingRight: '12px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '16px',\n gap: '6px',\n },\n mediumSmall: {\n height: '36px',\n paddingLeft: '14px',\n paddingRight: '14px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '16px',\n gap: '6px',\n },\n medium: {\n height: '40px',\n paddingLeft: '16px',\n paddingRight: '16px',\n fontSize: '14px',\n lineHeight: '20px',\n iconSize: '18px',\n gap: '8px',\n },\n large: {\n height: '48px',\n paddingLeft: '20px',\n paddingRight: '20px',\n fontSize: '16px',\n lineHeight: '24px',\n iconSize: '20px',\n gap: '8px',\n },\n};\n\n// Loading 图标组件\nconst LoadingIcon: React.FC<{ size: number; color: string }> = ({ size, color }) => {\n // 使用 React 方式注入样式,避免在模块顶层操作 DOM\n const loadingStyles = `\n @keyframes aha-button-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `;\n\n return (\n <>\n <style>{loadingStyles}</style>\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n animation: 'aha-button-spin 1s linear infinite',\n }}\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};\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n type = 'default',\n size = 'medium',\n disabled = false,\n loading = false,\n onClick,\n htmlType = 'button',\n className = '',\n style,\n icon,\n iconPosition = 'left',\n ...rest\n}) => {\n const { primaryColor = '#FB6011' } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n\n const sizeConfig = SIZE_CONFIG[size];\n const isDisabled = disabled || loading;\n\n // 计算按钮样式\n const getButtonStyles = (): React.CSSProperties => {\n const baseStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n paddingLeft: sizeConfig.paddingLeft,\n paddingRight: sizeConfig.paddingRight,\n fontSize: sizeConfig.fontSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500,\n fontFamily: 'DM Sans, sans-serif',\n borderRadius: '8px',\n border: 'none',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n transition: 'all 0.2s',\n userSelect: 'none',\n WebkitTapHighlightColor: 'transparent',\n ...style,\n };\n\n if (type === 'primary') {\n // Primary 按钮:使用主题色,所有状态下文字都是白色\n baseStyle.color = '#FFFFFF';\n baseStyle.backgroundColor = primaryColor;\n if (disabled) {\n // disabled状态:保持primary样式,通过降低透明度表示禁用\n baseStyle.opacity = 0.4;\n baseStyle.cursor = 'not-allowed';\n } else if (loading) {\n // loading状态:保持primary样式(主题色背景)\n baseStyle.backgroundColor = primaryColor;\n } else if (isPressed) {\n baseStyle.backgroundColor = '#EC470A'; // 按下时的深色\n } else if (isHovered) {\n baseStyle.backgroundColor = '#FD843A'; // hover时的浅色\n }\n } else {\n // Default 按钮:白色背景,灰色边框\n if (disabled) {\n // disabled状态:灰色背景,灰色文字\n baseStyle.backgroundColor = '#FAFAF9';\n baseStyle.color = '#D6D3D1';\n baseStyle.border = '1px solid #E7E5E4';\n } else if (loading) {\n // loading状态:保持default样式(白色背景+边框)\n baseStyle.backgroundColor = '#FFFFFF';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #E7E5E4';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n } else if (isPressed) {\n baseStyle.backgroundColor = '#F5F5F4';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #D7D3D0';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n } else if (isHovered) {\n // Hover 状态:浅灰色背景,边框稍微变深,增强阴影\n baseStyle.backgroundColor = '#FAFAF9';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #D7D3D0';\n baseStyle.boxShadow = '0px 2px 4px 0px rgba(12, 10, 9, 0.08)';\n } else {\n baseStyle.backgroundColor = '#FFFFFF';\n baseStyle.color = '#101828';\n baseStyle.border = '1px solid #E7E5E4';\n baseStyle.boxShadow = '0px 1px 2px 0px rgba(12, 10, 9, 0.05)';\n }\n }\n\n return baseStyle;\n };\n\n // 处理点击事件\n const handleClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n if (isDisabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n // 渲染图标\n const renderIcon = () => {\n if (loading) {\n // loading时,根据按钮类型确定颜色\n // primary按钮:白色图标;default按钮:黑色图标\n const iconColor = type === 'primary' ? '#FFFFFF' : '#101828';\n const iconSize = parseInt(sizeConfig.iconSize.replace('px', ''));\n return <LoadingIcon size={iconSize} color={iconColor} />;\n }\n if (icon) {\n return (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizeConfig.iconSize,\n height: sizeConfig.iconSize,\n flexShrink: 0,\n }}\n >\n {icon}\n </span>\n );\n }\n return null;\n };\n\n const buttonStyle = getButtonStyles();\n\n return (\n <button\n type={htmlType}\n className={`aha-button aha-button--${type} aha-button--${size} ${isDisabled ? 'aha-button--disabled' : ''} ${loading ? 'aha-button--loading' : ''} ${className}`}\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 {/* loading时,图标总是在左侧显示,忽略iconPosition */}\n {loading && renderIcon()}\n {!loading && iconPosition === 'left' && renderIcon()}\n {children && <span style={{ display: 'inline-block' }}>{children}</span>}\n {!loading && iconPosition === 'right' && renderIcon()}\n </button>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default Button;\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 { 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 = (\n item: number | string,\n index: number\n ): 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=\"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: \"none\",\n background: isActive ? \"#FAFAF9\" : \"white\",\n backgroundColor: isActive ? \"#FAFAF9\" : \"white\",\n color: isActive ? primaryColor : \"#79716B\",\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, index) => renderItem(item, index))}\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 onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n style={{\n padding: size === \"small\" ? \"6px 12px\" : \"8px 12px\",\n border: \"1px solid #EAECF0\",\n borderRadius: \"8px\",\n fontSize: size === \"small\" ? \"12px\" : \"14px\",\n lineHeight: size === \"small\" ? \"18px\" : \"20px\",\n color: \"#101828\",\n fontFamily: \"DM Sans, sans-serif\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n backgroundColor: \"white\",\n outline: \"none\",\n transition: \"all 0.2s\",\n }}\n onMouseEnter={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = primaryColor;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = \"#EAECF0\";\n }}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size} 条/页\n </option>\n ))}\n </select>\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 跳至\n </span>\n <input\n type=\"number\"\n min=\"1\"\n value={jumpToPage}\n onChange={(e) => setJumpToPage(e.target.value)}\n onKeyPress={(e) => e.key === \"Enter\" && handleJumpTo()}\n disabled={disabled}\n style={{\n width: \"56px\",\n height: size === \"small\" ? \"28px\" : \"36px\",\n padding: \"0 8px\",\n border: \"1px solid #EAECF0\",\n borderRadius: \"8px\",\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#101828\",\n fontFamily: \"DM Sans, sans-serif\",\n outline: \"none\",\n transition: \"all 0.2s\",\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = primaryColor;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = \"#EAECF0\";\n }}\n />\n <span\n style={{\n fontSize: \"14px\",\n lineHeight: \"20px\",\n color: \"#475467\",\n }}\n >\n 页\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 确定\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// ==================== 类型定义 ====================\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 // ==================== 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 ref={tableRef} className={`aha-table aha-table-mobile-wrapper ${className}`} style={wrapperStyle} {...rest}>\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 </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 ref={tableRef} className={`aha-table ${className}`} style={wrapperStyle} {...rest}>\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 </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_CONFIG","small","height","paddingLeft","paddingRight","fontSize","lineHeight","iconSize","gap","mediumSmall","medium","large","LoadingIcon","_a","size","color","_jsxs","jsxs","_Fragment","children","_jsx","width","viewBox","fill","style","animation","jsx","cx","cy","r","stroke","strokeWidth","strokeLinecap","strokeDasharray","strokeDashoffset","opacity","Button","baseStyle","_b","type","_c","_d","disabled","_e","loading","onClick","_f","htmlType","_g","className","icon","_h","iconPosition","rest","_j","_k","useState","isHovered","setIsHovered","_l","isPressed","setIsPressed","sizeConfig","isDisabled","renderIcon","iconColor","parseInt","replace","display","alignItems","justifyContent","flexShrink","buttonStyle","position","fontWeight","fontFamily","borderRadius","border","cursor","outline","transition","userSelect","WebkitTapHighlightColor","backgroundColor","boxShadow","preventDefault","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","displayName","CheckIcon","xmlns","d","strokeLinejoin","MinusIcon","SortIcon","SortDescIcon","SortAscIcon","LeftArrowIcon","RightArrowIcon","Pagination","controlledCurrent","current","defaultCurrent","total","controlledPageSize","pageSize","defaultPageSize","showSizeChanger","pageSizeOptions","showQuickJumper","showTotal","onChange","onShowSizeChange","simple","hideOnSinglePage","_m","_o","responsive","showLessItems","itemRender","_q","_r","internalCurrent","setInternalCurrent","_s","internalPageSize","setInternalPageSize","_t","jumpToPage","setJumpToPage","totalPages","useMemo","Math","ceil","useEffect","undefined","handlePageChange","page","handleJumpTo","marginRight","margin","marginLeft","start","end","min","flexWrap","Fragment","padding","_","pages","push","getPageNumbers","map","item","index","isActive","element","minWidth","background","max","renderItem","value","newPageSize","Number","target","newTotalPages","newCurrent","currentTarget","borderColor","onKeyPress","key","onFocus","onBlur","goButton","Checkbox","checked","indeterminate","isChecked","minHeight","boxSizing","pointerEvents","ref","el","getValue","obj","path","reduce","acc","getRowKey","record","rowKey","SortIconComponent","order","columns","dataSource","rowSelection","pagination","bordered","locale","showHeader","title","footer","summary","scroll","_p","tableLayout","onSorterChange","onPaginationChange","onRow","innerClassName","expandable","rowClassName","onHeaderRow","sticky","selectedRowKeys","defaultSelectedRowKeys","setSelectedRowKeys","Map","sorters","setSorters","_u","defaultExpandedRowKeys","expandedRowKeys","setExpandedRowKeys","_v","currentPage","setCurrentPage","_w","setPageSize","_x","draggedRowIndex","setDraggedRowIndex","_y","dragOverRowIndex","setDragOverRowIndex","_z","isMobile","setIsMobile","tableRef","useRef","headerRef","checkMobile","window","innerWidth","addEventListener","removeEventListener","handleSelect","useCallback","selected","checkboxProps","getCheckboxProps","newSelectedRowKeys","filter","k","selectedRows","includes","onSelect","Event","handleSelectAll","currentPageData","keys","changeRows","onSelectAll","handleSort","column","columnKey","isArray","dataIndex","join","newSorters","delete","set","sorterArray","entries","find","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","Boolean","paginatedData","renderCell","render","getFixedOffset","columnIndex","fixed","isHeader","fixedDirection","offset","columnWidth","renderHeader","enabledRows","enabledKeys","allSelected","someSelected","headerColumns","colIndex","sortOrder","get","fixedOffset","align","maxWidth","left","right","zIndex","textAlign","borderBottom","onHeaderCell","sortColumn","selectWidth","selectColumn","hideSelectAll","every","some","columnTitle","unshift","headerRowProps","handleDragStart","handleDragOver","handleDrop","dropIndex","newData","draggedItem","splice","handleDragEnd","renderEmpty","emptyText","content","colSpan","renderRows","isSelected","isExpanded","rowProps","isLastRow","React","draggable","onDragStart","onDragOver","onDrop","onDragEnd","cellProps","onCell","rowSpan","expandedRowRender","renderPagination","marginTop","hasFixedColumns","hasAllColumnWidths","totalWidth","x","sum","String","effectiveTableLayout","tableStyle","borderCollapse","borderSpacing","overflow","wrapperStyle","maxHeight","y","marginBottom","startsWith","displayValue","paddingBottom","flex","scrollContainerStyle","overflowX","overflowY"],"mappings":"0HA+BWA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,CACV,EACMH,EAASa,MAAMC,KAAMP,UAChC,EAEO,SAASQ,EAAOX,EAAGY,GACtB,IAAIb,EAAI,CAAA,EACR,IAAK,IAAIM,KAAKL,EAAOH,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,IAAMO,EAAEC,QAAQR,GAAK,IAC9EN,EAAEM,GAAKL,EAAEK,IACb,GAAS,MAALL,GAAqD,mBAAjCH,OAAOiB,sBACtB,KAAIb,EAAI,EAAb,IAAgBI,EAAIR,OAAOiB,sBAAsBd,GAAIC,EAAII,EAAED,OAAQH,IAC3DW,EAAEC,QAAQR,EAAEJ,IAAM,GAAKJ,OAAOS,UAAUS,qBAAqBP,KAAKR,EAAGK,EAAEJ,MACvEF,EAAEM,EAAEJ,IAAMD,EAAEK,EAAEJ,IAF4B,CAItD,OAAOF,CACX,CAiKO,SAASiB,EAAcC,EAAIC,EAAMC,GACpC,GAAIA,GAA6B,IAArBhB,UAAUC,OAAc,IAAK,IAA4BgB,EAAxBnB,EAAI,EAAGoB,EAAIH,EAAKd,OAAYH,EAAIoB,EAAGpB,KACxEmB,GAAQnB,KAAKiB,IACRE,IAAIA,EAAKE,MAAMhB,UAAUiB,MAAMf,KAAKU,EAAM,EAAGjB,IAClDmB,EAAGnB,GAAKiB,EAAKjB,IAGrB,OAAOgB,EAAGO,OAAOJ,GAAME,MAAMhB,UAAUiB,MAAMf,KAAKU,GACtD,CA2GkD,mBAApBO,iBAAiCA,gBClU/D,IAAMC,EAA4B,CAChCC,aAAc,WAGVC,EAAeC,EAAAA,cAA2BH,GAsBnCI,EAAW,WACtB,IAAMC,EAAUC,aAAWJ,GAC3B,OAAKG,GAEIL,CAGX,ECNMO,EAAc,CAClBC,MAAO,CACLC,OAAQ,OACRC,YAAa,OACbC,aAAc,OACdC,SAAU,OACVC,WAAY,OACZC,SAAU,OACVC,IAAK,OAEPC,YAAa,CACXP,OAAQ,OACRC,YAAa,OACbC,aAAc,OACdC,SAAU,OACVC,WAAY,OACZC,SAAU,OACVC,IAAK,OAEPE,OAAQ,CACNR,OAAQ,OACRC,YAAa,OACbC,aAAc,OACdC,SAAU,OACVC,WAAY,OACZC,SAAU,OACVC,IAAK,OAEPG,MAAO,CACLT,OAAQ,OACRC,YAAa,OACbC,aAAc,OACdC,SAAU,OACVC,WAAY,OACZC,SAAU,OACVC,IAAK,QAKHI,EAAyD,SAACC,OAAEC,EAAID,EAAAC,KAAEC,EAAKF,EAAAE,MAS3E,OACEC,EACEC,KAAAC,WAAA,CAAAC,SAAA,CAAAC,MAAA,QAAA,CAAAD,SATkB,oIAUlBH,EAAAA,KACE,MAAA,CAAAK,MAAOP,EACPZ,OAAQY,EACRQ,QAAQ,YACRC,KAAK,OACLC,MAAO,CACLC,UAAW,sCACZN,SAAA,CAEDC,EACEM,IAAA,SAAA,CAAAC,GAAG,KACHC,GAAG,KACHC,EAAE,KACFC,OAAQf,EACRgB,YAAY,IACZC,cAAc,QACdC,gBAAgB,KAChBC,iBAAiB,KACjBC,QAAQ,QAEVf,EAAAA,IAAA,SAAA,CACEO,GAAG,KACHC,GAAG,KACHC,EAAE,KACFC,OAAQf,EACRgB,YAAY,IACZC,cAAc,QACdC,gBAAgB,KAChBC,iBAAiB,YAK3B,EAEME,EAAgC,SAACvB,GACrC,IAsBQwB,EAtBRlB,EAAQN,EAAAM,SACRmB,EAAAzB,EAAA0B,KAAAA,OAAO,IAAAD,EAAA,UAASA,EAChBE,EAAe3B,EAAAC,KAAfA,OAAO,IAAA0B,EAAA,SAAQA,EACfC,EAAgB5B,EAAA6B,SAAhBA,OAAQ,IAAAD,GAAQA,EAChBE,EAAA9B,EAAA+B,QAAAA,OAAU,IAAAD,KACVE,EAAOhC,EAAAgC,QACPC,EAAmBjC,EAAAkC,SAAnBA,OAAQ,IAAAD,EAAG,SAAQA,EACnBE,EAAAnC,EAAAoC,UAAAA,OAAY,IAAAD,EAAA,KACZxB,EAAKX,EAAAW,MACL0B,EAAIrC,EAAAqC,KACJC,EAAAtC,EAAAuC,aAAAA,OAAe,IAAAD,EAAA,OAAMA,EAClBE,EAAI3E,EAAAmC,EAZ8B,gHAc7ByC,EAA6BzD,IAAUH,aAAvCA,OAAY,IAAA4D,EAAG,UAASA,EAC1BC,EAA4BC,EAAAA,UAAS,GAApCC,EAASF,EAAA,GAAEG,EAAYH,EAAA,GACxBI,EAA4BH,EAAAA,UAAS,GAApCI,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAExBG,EAAa9D,EAAYc,GACzBiD,EAAarB,GAAYE,EAwFzBoB,EAAa,WACjB,GAAIpB,EAAS,CAGX,IAAMqB,EAAqB,YAAT1B,EAAqB,UAAY,UAC7ChC,EAAW2D,SAASJ,EAAWvD,SAAS4D,QAAQ,KAAM,KAC5D,OAAO/C,EAAAA,IAACR,EAAW,CAACE,KAAMP,EAAUQ,MAAOkD,GAC5C,CACD,OAAIf,EAEA9B,EACEM,IAAA,OAAA,CAAAF,MAAO,CACL4C,QAAS,cACTC,WAAY,SACZC,eAAgB,SAChBjD,MAAOyC,EAAWvD,SAClBL,OAAQ4D,EAAWvD,SACnBgE,WAAY,GAGbpD,SAAA+B,IAIA,IACT,EAEMsB,GA/GEnC,KACJoC,SAAU,WACVL,QAAS,cACTC,WAAY,SACZC,eAAgB,SAChB9D,IAAKsD,EAAWtD,IAChBN,OAAQ4D,EAAW5D,OACnBC,YAAa2D,EAAW3D,YACxBC,aAAc0D,EAAW1D,aACzBC,SAAUyD,EAAWzD,SACrBC,WAAYwD,EAAWxD,WACvBoE,WAAY,IACZC,WAAY,sBACZC,aAAc,MACdC,OAAQ,OACRC,OAAQf,EAAa,cAAgB,UACrCgB,QAAS,OACTC,WAAY,WACZC,WAAY,OACZC,wBAAyB,eACtB1D,GAGQ,YAATe,GAEFF,EAAUtB,MAAQ,UAClBsB,EAAU8C,gBAAkBzF,EACxBgD,GAEFL,EAAUF,QAAU,GACpBE,EAAUyC,OAAS,eACVlC,EAETP,EAAU8C,gBAAkBzF,EACnBkE,EACTvB,EAAU8C,gBAAkB,UACnB1B,IACTpB,EAAU8C,gBAAkB,YAI1BzC,GAEFL,EAAU8C,gBAAkB,UAC5B9C,EAAUtB,MAAQ,UAClBsB,EAAUwC,OAAS,qBACVjC,GAETP,EAAU8C,gBAAkB,UAC5B9C,EAAUtB,MAAQ,UAClBsB,EAAUwC,OAAS,oBACnBxC,EAAU+C,UAAY,yCACbxB,GACTvB,EAAU8C,gBAAkB,UAC5B9C,EAAUtB,MAAQ,UAClBsB,EAAUwC,OAAS,oBACnBxC,EAAU+C,UAAY,yCACb3B,GAETpB,EAAU8C,gBAAkB,UAC5B9C,EAAUtB,MAAQ,UAClBsB,EAAUwC,OAAS,oBACnBxC,EAAU+C,UAAY,0CAEtB/C,EAAU8C,gBAAkB,UAC5B9C,EAAUtB,MAAQ,UAClBsB,EAAUwC,OAAS,oBACnBxC,EAAU+C,UAAY,yCAInB/C,GA0CT,OACErB,EACEC,KAAA,SAAAtD,EAAA,CAAA4E,KAAMQ,EACNE,UAAW,0BAAA1D,OAA0BgD,EAAI,iBAAAhD,OAAgBuB,EAAI,KAAAvB,OAAIwE,EAAa,uBAAyB,GAAE,KAAAxE,OAAIqD,EAAU,sBAAwB,GAAE,KAAArD,OAAI0D,GACrJP,SAAUqB,EACVlB,QA3CgB,SAAClE,GACfoF,EACFpF,EAAE0G,iBAGJxC,SAAAA,EAAUlE,EACZ,EAsCI2G,aAAc,WAAM,OAACvB,GAAcL,GAAa,IAChD6B,aAAc,WACZ7B,GAAa,GACbG,GAAa,EACf,EACA2B,YAAa,WAAM,OAACzB,GAAcF,GAAa,EAA5B,EACnB4B,UAAW,WAAM,OAAA5B,GAAa,IAC9BrC,MAAOgD,GACHnB,EAGH,CAAAlC,SAAA,CAAAyB,GAAWoB,KACVpB,GAA4B,SAAjBQ,GAA2BY,IACvC7C,GAAYC,EAAAM,IAAA,OAAA,CAAMF,MAAO,CAAE4C,QAAS,gBAAmBjD,SAAAA,KACtDyB,GAA4B,UAAjBQ,GAA4BY,OAG/C,EAEA5B,EAAOsD,YAAc,SCtRd,IAAMC,EAGR,SAAC9E,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BJ,EAAAA,IACE,MAAA,CAAAC,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,EAEPL,SAAAC,EAAAM,IAAA,OAAA,CACEmE,EAAE,yCACF/D,OAAO,QACPC,YAAY,IACZC,cAAc,QACd8D,eAAe,WAfU,EAqBlBC,EAGR,SAAClF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BJ,EAAAA,IACE,MAAA,CAAAC,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,EAEPL,SAAAC,EAAAM,IAAA,OAAA,CACEmE,EAAE,cACF/D,OAAO,QACPC,YAAY,IACZC,cAAc,QACd8D,eAAe,WAfU,EAqBlBE,EAGR,SAACnF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BJ,EAAAA,IACE,MAAA,CAAAC,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,EAEPL,SAAAC,EAAAM,IAAA,OAAA,CACEmE,EAAE,4CACF/D,OAAO,UACPC,YAAY,MACZC,cAAc,QACd8D,eAAe,WAfU,EAqBlBG,EAGR,SAACpF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BR,OAAA,MAAA,CACEK,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,YAEPJ,MACE,OAAA,CAAAyE,EAAE,uBACF/D,OAAO,UACPC,YAAY,MACZC,cAAc,QACd8D,eAAe,UAEjB1E,MAAA,OAAA,CACEyE,EAAE,wBACF/D,OAAO,eACPC,YAAY,MACZC,cAAc,QACd8D,eAAe,YAtBU,EA4BlBI,EAGR,SAACrF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BR,OAAA,MAAA,CACEK,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,YAEPJ,MACE,OAAA,CAAAyE,EAAE,wBACF/D,OAAO,UACPC,YAAY,MACZC,cAAc,QACd8D,eAAe,UAEjB1E,MAAA,OAAA,CACEyE,EAAE,uBACF/D,OAAO,eACPC,YAAY,MACZC,cAAc,QACd8D,eAAe,YAtBU,EA2BlBK,EAGR,SAACtF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BJ,EAAAA,IACE,MAAA,CAAAC,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,EAEPL,SAAAC,EAAAM,IAAA,OAAA,CACEmE,EAAE,4EACF/D,OAAO,eACPC,YAAY,UACZC,cAAc,QACd8D,eAAe,WAfU,EAoBlBM,EAGR,SAACvF,OAAEoC,EAASpC,EAAAoC,UAAEzB,EAAKX,EAAAW,MAAO,OAC7BJ,EAAAA,IACE,MAAA,CAAAC,MAAM,KACNnB,OAAO,KACPoB,QAAQ,YACRC,KAAK,OACLqE,MAAM,6BACN3C,UAAWA,EACXzB,MAAOA,EAEPL,SAAAC,EAAAM,IAAA,OAAA,CACEmE,EAAE,4EACF/D,OAAO,eACPC,YAAY,UACZC,cAAc,QACd8D,eAAe,WAfU,EClIzBO,EAAwC,SAACxF,OACpCyF,EAAiBzF,EAAA0F,QAC1BjE,EAAAzB,EAAA2F,eAAAA,OAAiB,IAAAlE,EAAA,EAACA,EAClBE,EAAS3B,EAAA4F,MAATA,OAAK,IAAAjE,EAAG,EAACA,EACCkE,EAAkB7F,EAAA8F,SAC5BlE,EAAA5B,EAAA+F,gBAAAA,OAAkB,IAAAnE,EAAA,GAAEA,EACpBE,EAAuB9B,EAAAgG,gBAAvBA,OAAkB,IAAAlE,GAAKA,EACvBG,EAA2CjC,EAAAiG,gBAA3CA,OAAe,IAAAhE,EAAG,CAAC,KAAM,KAAM,KAAM,OAAMA,EAC3CE,EAAuBnC,EAAAkG,gBAAvBA,OAAe,IAAA/D,GAAQA,EACvBgE,EAASnG,EAAAmG,UACTC,EAAQpG,EAAAoG,SACRC,EAAgBrG,EAAAqG,iBAChB/D,EAAAtC,EAAAsG,OAAAA,OAAS,IAAAhE,GAAKA,EACdG,EAAgBzC,EAAA6B,SAAhBA,OAAW,IAAAY,GAAKA,EAChBC,EAAwB1C,EAAAuG,iBAAxBA,OAAgB,IAAA7D,GAAQA,EACxBI,EAAA9C,EAAAoC,UAAAA,aAAY,GAAEU,EACdnC,EAAKX,EAAAW,MACL6F,EAAgBxG,EAAAC,KAAhBA,OAAI,IAAAuG,EAAG,UAASA,EAChBC,EAAAzG,EAAA0G,WAAAA,OAAa,IAAAD,GAAKA,EACGzG,EAAA2G,cACrB,IAAAC,EAAU5G,EAAA4G,WAEFC,EAA6B7H,IAAUH,aAAvCA,OAAY,IAAAgI,EAAG,UAASA,EAC1BC,EAAwCnE,EAAAA,SAASgD,GAAhDoB,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAA0CtE,EAAAA,SAASoD,GAAlDmB,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GACtCG,EAA8BzE,EAAAA,SAAS,IAAtC0E,EAAUD,EAAA,GAAEE,EAAaF,EAAA,GAE1B1B,EAAUD,QAAAA,EAAqBsB,EAC/BjB,EAAWD,QAAAA,EAAsBqB,EAEjCK,EAAaC,EAAOA,QACxB,WAAM,OAAAC,KAAKC,KAAK9B,EAAQE,EAAS,EACjC,CAACF,EAAOE,IAGV6B,EAAAA,UAAU,gBACkBC,IAAtBnC,GACFuB,EAAmBvB,EAEvB,EAAG,CAACA,IAEJkC,EAAAA,UAAU,gBACmBC,IAAvB/B,GACFsB,EAAoBtB,EAExB,EAAG,CAACA,IAEJ,IAAMgC,EAAmB,SAACC,GACpBA,EAAO,GAAKA,EAAOP,GAAcO,IAASpC,GAAW7D,SAE/B+F,IAAtBnC,GACFuB,EAAmBc,GAErB1B,SAAAA,EAAW0B,EAAMhC,GACnB,EAiBMiC,GAAe,WACnB,IAAMD,EAAOzE,SAASgE,EAAY,IAC9BS,GAAQ,GAAKA,GAAQP,IACvBM,EAAiBC,GACjBR,EAAc,IAElB,EA6HA,GAAIf,GAAoBgB,GAAc,EACpC,OAAO,KAGT,GAAIjB,EACF,OACEnG,EAAAA,KACE,MAAA,CAAAiC,UAAW,wCAAA1D,OAAwC0D,GACnDzB,MAAOA,EAAKL,SAAA,CAEZC,EAAAA,IAACgB,EAAM,CACLS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAA3B,EACf7D,SAAUA,GAAwB,IAAZ6D,EACtBhE,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLqH,YAAa,MACbhE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OACfzD,SAEDC,MAAC+E,EAAa,CAAA,KAEhBnF,EAAAC,KAAA,OAAA,CACEO,MAAO,CACLsH,OAAQ,QACRzI,SAAU,OACVC,WAAY,OACZS,MAAO,UACP4D,WAAY,uBAGbxD,SAAA,CAAAoF,QAAY6B,KAEfhH,EAACM,IAAAU,EACC,CAAAS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAAE,EAC5C7D,SAAUA,GAAY6D,IAAY6B,EAClC7F,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLuH,WAAY,MACZlE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OACfzD,SAEDC,EAAAA,IAACgF,EAAc,CAAA,QAMvB,IAAM4C,IAASzC,EAAU,GAAKI,EAAW,EACnCsC,GAAMX,KAAKY,IAAI3C,EAAUI,EAAUF,GAEzC,OACEzF,EAAAC,KAAA,MAAA,CACEgC,UAAW,yBAAyB1D,OAAA0D,GACpCzB,MAAK7D,EAAA,CACHyG,QAAS,OACTC,WAAY,SACZC,eAAgB,gBAChB6E,SAAU5B,EAAa,OAAS,SAChC5C,WAAY,uBACTnD,GAGJL,SAAA,CAAA6F,GACC5F,EAAKM,IAAA,MAAA,CAAAuB,UAAU,wFAAuF9B,SACnG6F,EAAUP,EAAO,CAACuC,GAAOC,OAI9BjI,EAAAC,KAAA,MAAA,CACEO,MAAO,CACL4C,QAAS,OACTC,WAAY,SACZ7D,IAAK,QACNW,SAAA,CAEAsF,EAAQ,GACPrF,EAAAM,IAAAR,EAAAkI,SAAA,CAAAjI,SACGsG,EACCA,EACElB,EAAU,EACV,OACAnF,EAAAA,IAACgB,EAAM,CACLS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAAE,EAC5C7D,SAAUA,GAAwB,IAAZ6D,EACtBhE,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLtB,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACT7I,IAAK,MACLqE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OAGhBzD,SAAAC,EAAAM,IAACyE,EAAa,CAAA,MAIlB/E,EAACM,IAAAU,GACCS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAAE,EAC5C7D,SAAUA,GAAwB,IAAZ6D,EACtBhE,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLtB,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACT7I,IAAK,MACLqE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OAGhBzD,SAAAC,EAAAA,IAAC+E,EAAa,CAAA,OAMtB/E,EAAKM,IAAA,MAAA,CAAAF,MAAO,CAAE4C,QAAS,OAAQC,WAAY,SAAU7D,IAAK,OACvDW,SAzPc,WACrB,GAAIiH,GAAc,EAChB,OAAO/I,MAAMJ,KAAK,CAAEd,OAAQiK,GAAc,SAACkB,EAAGtL,GAAM,OAAAA,EAAI,CAAC,GAG3D,IAAMuL,EAA6B,GAEnC,GAAIhD,GAAW,EAAG,CAChB,IAAK,IAAIvI,EAAI,EAAGA,GAAK,EAAGA,IACtBuL,EAAMC,KAAKxL,GAEbuL,EAAMC,KAAK,aACXD,EAAMC,KAAKpB,EACZ,MAAM,GAAI7B,GAAW6B,EAAa,EAAG,CACpCmB,EAAMC,KAAK,GACXD,EAAMC,KAAK,aACX,IAASxL,EAAIoK,EAAa,EAAGpK,GAAKoK,EAAYpK,IAC5CuL,EAAMC,KAAKxL,EAEd,KAAM,CACLuL,EAAMC,KAAK,GACXD,EAAMC,KAAK,aACX,IAASxL,EAAIuI,EAAU,EAAGvI,GAAKuI,EAAU,EAAGvI,IAC1CuL,EAAMC,KAAKxL,GAEbuL,EAAMC,KAAK,aACXD,EAAMC,KAAKpB,EACZ,CAED,OAAOmB,CACT,CA2NSE,GAAiBC,IAAI,SAACC,EAAMC,GAAU,OAzN5B,SACjBD,GAGA,GAAoB,iBAATA,EAAmB,CAC5B,IAAME,EAAWF,IAASpD,EACpBuD,EACJ1I,MAACgB,EAAM,CAELS,QAAS,WAAM,OAAA6F,EAAiBiB,IAChCjH,SAAUA,EACVH,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLuI,SAAmB,UAATjJ,EAAmB,OAAS,OACtCZ,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACTP,OAAQ,EACRpE,WAAYmF,EAAW,IAAM,IAC7BhF,OAAQ,OACRmF,WAAYH,EAAW,UAAY,QACnC1E,gBAAiB0E,EAAW,UAAY,QACxC9I,MAAO8I,EAAWnK,EAAe,UACjC0F,UAAW,OACXR,aAAc,OACfzD,SAEAwI,GAnBIA,GAuBT,OAAOlC,EAAaA,EAAWkC,EAAM,OAAQG,GAAWA,CACzD,CAED,GAAa,cAATH,EAsBF,OArBMG,EACJ1I,EAAAA,IAACgB,EAEC,CAAAS,QAAS,WAAM,OAAA6F,EAAiBJ,KAAK2B,IAAI,EAAG1D,EAAU,KACtD7D,SAAUA,EACVH,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLuI,SAAmB,UAATjJ,EAAmB,OAAS,OACtCZ,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACTP,OAAQ,EACRjE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OAZZzD,SAAA,OAAA,aAmBDsG,EACHA,EAAWlB,EAAU,EAAG,YAAauD,GACrCA,EAGN,GAAa,cAATH,EAsBF,OArBMG,EACJ1I,EAAAA,IAACgB,EAEC,CAAAS,QAAS,WAAM,OAAA6F,EAAiBJ,KAAKY,IAAId,EAAY7B,EAAU,KAC/D7D,SAAUA,EACVH,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLuI,SAAmB,UAATjJ,EAAmB,OAAS,OACtCZ,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACTP,OAAQ,EACRjE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OAZZzD,SAAA,OAAA,aAmBDsG,EACHA,EAAWlB,EAAU,EAAG,YAAauD,GACrCA,EAGN,OAAO,IACT,CAgI+CI,CAAWP,EAAY,KAG/DlD,EAAQ,GACPrF,EAAAA,IACGF,EAAAA,SAAA,CAAAC,SAAAsG,EACCA,EACElB,EAAU,EACV,OACAnF,EAACM,IAAAU,GACCS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAAE,EAC5C7D,SAAUA,GAAY6D,IAAY6B,EAClC7F,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLtB,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACT7I,IAAK,MACLqE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OAGhBzD,SAAAC,EAAAM,IAAC0E,EAAc,CAAA,MAInBhF,EAACM,IAAAU,GACCS,QAAS,WAAM,OAAA6F,EAAiBnC,EAAU,EAAE,EAC5C7D,SAAUA,GAAY6D,IAAY6B,EAClC7F,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLtB,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,SACT7I,IAAK,MACLqE,OAAQ,oBACRO,UAAW,OACXR,aAAc,OACfzD,SAEDC,MAACgF,EAAc,CAAA,OAMtBS,GACCzF,EAAAA,cACE+I,MAAOxD,EACPM,SAAU,SAACtI,GAAM,OAlUGyL,EAkUkBC,OAAO1L,EAAE2L,OAAOH,OAjUxDI,EAAgBjC,KAAKC,KAAK9B,EAAQ2D,GAClCI,EAAajE,EAAUgE,EAAgBA,EAAgBhE,OAElCkC,IAAvB/B,GACFsB,EAAoBoC,QAEI3B,IAAtBnC,GACFuB,EAAmB2C,GAGrBtD,SAAAA,EAAmBsD,EAAYJ,QAC/BnD,SAAAA,EAAWuD,EAAYJ,IAZI,IAACA,EACtBG,EACAC,CAgU+D,EAC7D9H,SAAUA,EACVlB,MAAO,CACL6H,QAAkB,UAATvI,EAAmB,WAAa,WACzC+D,OAAQ,oBACRD,aAAc,MACdvE,SAAmB,UAATS,EAAmB,OAAS,OACtCR,WAAqB,UAATQ,EAAmB,OAAS,OACxCC,MAAO,UACP4D,WAAY,sBACZG,OAAQpC,EAAW,cAAgB,UACnCyC,gBAAiB,QACjBJ,QAAS,OACTC,WAAY,YAEdM,aAAc,SAAC3G,GACR+D,IACH/D,EAAE8L,cAAcjJ,MAAMkJ,YAAchL,EAExC,EACA6F,aAAc,SAAC5G,GACbA,EAAE8L,cAAcjJ,MAAMkJ,YAAc,SACrC,EAEAvJ,SAAA2F,EAAgB4C,IAAI,SAAC5I,GAAS,OAC7BE,EAAAA,KAAmB,SAAA,CAAAmJ,MAAOrJ,EAAIK,SAAA,CAC3BL,EAAI,SADMA,EAGd,KAIJiG,GACC/F,EAAAA,KAAA,MAAA,CACEQ,MAAO,CACL4C,QAAS,OACTC,WAAY,SACZ7D,IAAK,MACLmE,WAAY,uBAGdxD,SAAA,CAAAC,EAAAA,IAAA,OAAA,CACEI,MAAO,CACLnB,SAAU,OACVC,WAAY,OACZS,MAAO,WAIJI,SAAA,OACPC,EAAAA,IACE,QAAA,CAAAmB,KAAK,SACL2G,IAAI,IACJiB,MAAOjC,EACPjB,SAAU,SAACtI,GAAM,OAAAwJ,EAAcxJ,EAAE2L,OAAOH,MAAM,EAC9CQ,WAAY,SAAChM,GAAM,MAAU,UAAVA,EAAEiM,KAAmBhC,IAAc,EACtDlG,SAAUA,EACVlB,MAAO,CACLH,MAAO,OACPnB,OAAiB,UAATY,EAAmB,OAAS,OACpCuI,QAAS,QACTxE,OAAQ,oBACRD,aAAc,MACdvE,SAAU,OACVC,WAAY,OACZS,MAAO,UACP4D,WAAY,sBACZI,QAAS,OACTC,WAAY,YAEd6F,QAAS,SAAClM,GACRA,EAAE8L,cAAcjJ,MAAMkJ,YAAchL,CACtC,EACAoL,OAAQ,SAACnM,GACPA,EAAE8L,cAAcjJ,MAAMkJ,YAAc,SACrC,IAEHtJ,EAAAA,IACE,OAAA,CAAAI,MAAO,CACLnB,SAAU,OACVC,WAAY,OACZS,MAAO,WACRI,SAAA,MAIyB,iBAApB4F,GAAgCA,EAAgBgE,SACtD3J,MAACgB,GACCS,QAAS+F,GACTlG,SAAUA,EACVH,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLqD,OAAQ,oBACRO,UAAW,OACXR,aAAc,OACfzD,SAEA4F,EAAgBgE,WAGnB3J,EAAAA,IAACgB,EACC,CAAAS,QAAS+F,GACTlG,SAAUA,EACVH,KAAK,UACLzB,KAAe,YAATA,EAAqB,SAAW,QACtCU,MAAO,CACLqD,OAAQ,oBACRO,UAAW,OACXR,aAAc,OACfzD,SAAA,eAUjB,ECpgBM6J,EAAoC,SAACnK,GACzC,IAAAyB,EAAAzB,EAAAoK,QAAAA,OAAU,IAAA3I,KACVE,EAAA3B,EAAAqK,cAAAA,cAAqB1I,EACrBC,EAAA5B,EAAA6B,SAAAA,OAAQ,IAAAD,GAAQA,EAChBwE,EAAQpG,EAAAoG,SACRtE,cAAAM,OAAY,IAAAN,EAAA,KACZnB,EAAKX,EAAAW,MACLL,EAAQN,EAAAM,SAEAzB,EAAiBG,iBAYnBsL,EAAYF,GAAWC,EACvB/F,EAAkBzC,EACpB,UACAyI,EACAzL,EACA,QACEgL,EAAchI,EAAW,UAAYyI,EAAYzL,EAAe,UAEtE,OACEsB,EACEC,KAAA,MAAA,CAAAgC,UAAW,gBAAgB1D,OAAA0D,GAC3BzB,SACE4C,QAAS,cACTC,WAAY,SACZ7D,IAAK,MACLsE,OAAQpC,EAAW,cAAgB,WAChClB,GAELqB,QA5BgB,SAAClE,GACf+D,IAMJuE,SAAAA,EAJuB,CACrBqD,OAAQ,CAAEW,SAAUA,GACpBR,cAAe,CAAEQ,SAAUA,KAG/B,EAsBI9J,SAAA,CAAAC,EAAAM,IAAA,MAAA,CACEF,MAAO,CACLiD,SAAU,WACVpD,MAAO,OACPnB,OAAQ,OACR6J,SAAU,OACVqB,UAAW,OACXxG,aAAc,MACdC,OAAQ,aAAatF,OAAAmL,GACrBvF,gBAAeA,EACff,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBU,WAAY,WACZT,WAAY,EACZ8G,UAAW,cAGblK,SAAAC,EAAAA,IAAA,MAAA,CACEI,MAAO,CACL4C,QAAS,OACTC,WAAY,SACZC,eAAgB,SAChBjD,MAAO,OACPnB,OAAQ,OACRiC,QAASgJ,EAAY,EAAI,EACzBnG,WAAY,eACZsG,cAAe,QAGhBnK,SAAA+J,EACC9J,EAAAA,IAAC2E,EAAU,CAAAvE,MAAO,CAAEH,MAAO,OAAQnB,OAAQ,OAAQkE,QAAS,WAE5DhD,EAAAA,IAACuE,EAAU,CAAAnE,MAAO,CAAEH,MAAO,OAAQnB,OAAQ,OAAQkE,QAAS,eAIjEjD,GACCC,EAAAA,IACE,OAAA,CAAAI,MAAO,CACLnB,SAAU,OACVC,WAAY,OACZS,MAAO2B,EAAW,UAAY,UAC9BiC,WAAY,uBACbxD,SAEAA,IAGLC,EAAAM,IAAA,QAAA,CACEa,KAAK,WACL0I,QAASA,EACTM,IAAK,SAACC,GACAA,IAAIA,EAAGN,cAAgBA,EAC5B,EACDjE,SAAUA,EACVvE,SAAUA,EACVlB,MAAO,CACLiD,SAAU,WACVtC,QAAS,EACTd,MAAO,EACPnB,OAAQ,EACRoL,cAAe,QAChB,cACW,WAIpB,EAEAN,EAAStF,YAAc,WCsCvB,IAAM+F,EAAW,SAACC,EAAUC,GAC1B,MAAoB,iBAATA,EACFD,aAAG,EAAHA,EAAMC,GAERA,EAAKC,OAAO,SAACC,EAAKjB,GAAQ,OAAAiB,aAAG,EAAHA,EAAMjB,IAAMc,EAC/C,EAEMI,EAAY,SAAKC,EAAWC,WAChC,MAAsB,mBAAXA,EACFA,EAAOD,GAEM,iBAAXC,EAC0B,QAA5BnL,EAAA4K,EAASM,EAAQC,UAAW,IAAAnL,EAAAA,EAAA,GAEX,UAAlBkL,EAAenB,WAAG,IAAAtI,EAAAA,EAAI,EAChC,EAIM2J,EAAqD,SAACpL,GAAE,IAAAqL,EAAKrL,EAAAqL,MACzDxM,EAAiBG,iBAEzB,MAAc,WAAVqM,EAEA9K,EAAAA,IAAC8E,EAAW,CAAC1E,MAAO,CAAET,MAAOrB,KAGnB,YAAVwM,EAEA9K,EAAAA,IAAC6E,EAAY,CAACzE,MAAO,CAAET,MAAOrB,KAIhC0B,EAAAM,IAACsE,EAAQ,CAAA,EAEb,kBAMc,SAAsCnF,eAClDiC,EAAYjC,EAAAsL,QAAZA,OAAO,IAAArJ,EAAG,GAAEA,EACZE,EAAAnC,EAAAuL,WAAAA,OAAa,IAAApJ,EAAA,GAAEA,EACfG,EAActC,EAAAmL,OAAdA,OAAM,IAAA7I,EAAG,MAAKA,EACdkJ,EAAYxL,EAAAwL,aACZ/I,EAAkBzC,EAAAyL,WAAlBA,OAAU,IAAAhJ,GAAQA,EAClBC,EAAA1C,EAAAC,KAAAA,OAAO,IAAAyC,EAAA,SAAQA,EACfI,EAAgB9C,EAAA0L,SAAhBA,OAAQ,IAAA5I,GAAQA,EAChB9C,EAAA+B,QAAA,IACA4J,EAAM3L,EAAA2L,OACNlF,EAAAzG,EAAA4L,WAAAA,OAAa,IAAAnF,GAAIA,EACjBoF,EAAK7L,EAAA6L,MACLC,EAAM9L,EAAA8L,OACNC,EAAO/L,EAAA+L,QACPC,EAAMhM,EAAAgM,OACNC,EAAoBjM,EAAAkM,YAApBA,OAAW,IAAAD,EAAG,OAAMA,EACpB7F,EAAQpG,EAAAoG,SACR+F,EAAcnM,EAAAmM,eACdC,EAAkBpM,EAAAoM,mBAClBC,EAAKrM,EAAAqM,MACLxF,EAAA7G,EAAAoC,UAAAA,OAAY,IAAAyE,EAAA,GAAEA,EACdC,EAAmB9G,EAAAsM,eAAnBA,OAAc,IAAAxF,EAAG,GAAEA,EACnBnG,EAAKX,EAAAW,MACL4L,EAAUvM,EAAAuM,WACVC,EAAYxM,EAAAwM,aACZC,EAAWzM,EAAAyM,YACLzM,EAAA0M,OAAA,IACHlK,EAAI3E,EAAAmC,EA3B2C,oTA8B5CiH,EAAwCtE,EAAQA,UACpD6I,aAAY,EAAZA,EAAcmB,mBAAmBnB,aAAY,EAAZA,EAAcoB,yBAA0B,IADpED,EAAe1F,EAAA,GAAE4F,OAKxBlF,EAAAA,UAAU,gBAC8BC,KAAlC4D,aAAY,EAAZA,EAAcmB,kBAChBE,EAAmBrB,EAAamB,kBAEjC,CAACnB,aAAA,EAAAA,EAAcmB,kBACZ,IAAAvF,EAAwBzE,EAAAA,SAAiC,IAAImK,KAA5DC,GAAO3F,EAAA,GAAE4F,QACVC,GAAwCtK,EAAQA,UACpD4J,eAAAA,EAAYW,yBAA0B,IADjCC,SAAiBC,SAGlBC,GAAgC1K,EAAQA,SAC5C8I,GAAoC,iBAAfA,IAChBA,EAAW/F,SAAW+F,EAAW9F,iBAClC,GAHC2H,GAAWD,GAAA,GAAEE,GAAcF,GAAA,GAK5BG,GAA0B7K,EAAQA,SACtC8I,GAAoC,iBAAfA,IAChBA,EAAW3F,UAAY2F,EAAW1F,kBACnC,IAHCD,GAAQ0H,GAAA,GAAEC,GAAWD,GAAA,GAO5B7F,EAAAA,UAAU,WACJ8D,GAAoC,iBAAfA,SACI7D,IAAvB6D,EAAW/F,SACb6H,GAAe9B,EAAW/F,cAEAkC,IAAxB6D,EAAW3F,UACb2H,GAAYhC,EAAW3F,UAG7B,EAAG,CAAC2F,IACE,IAAAiC,GAAwC/K,EAAAA,SAAwB,MAA/DgL,GAAeD,GAAA,GAAEE,GAAkBF,GAAA,GACpCG,GAA0ClL,EAAAA,SAAwB,MAAjEmL,GAAgBD,GAAA,GAAEE,GAAmBF,GAAA,GACtCG,GAA0BrL,EAAAA,UAAS,GAAlCsL,GAAQD,GAAA,GAAEE,GAAWF,GAAA,GACtBG,GAAWC,SAAuB,MAClCC,GAAYD,SAAgC,MAGlDzG,EAAAA,UAAU,WACR,IAAM2G,EAAc,WAClBJ,GAAYK,OAAOC,WAAa,IAClC,EAGA,OAFAF,IACAC,OAAOE,iBAAiB,SAAUH,GAC3B,WAAM,OAAAC,OAAOG,oBAAoB,SAAUJ,GACnD,EAAE,IAGH,IAAMK,GAAeC,EAAAA,YAAY,SAAC1D,EAAW2D,aAErCC,EAAiD,QAAjC9O,EAAAwL,aAAA,EAAAA,EAAcuD,wBAAmB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAAN,GACvD,KAAI4D,aAAa,EAAbA,EAAejN,UAAnB,CAIA,IACImN,EADEjF,EAAMkB,EAAUC,EAAQC,GAI5B6D,EADyB,WAAvBxD,aAAY,EAAZA,EAAc9J,MACKmN,EAAW,CAAC9E,GAAO,GAEpC8E,EACuB3Q,EAAAA,EAAA,GAAAyO,GAAiB,GAAA,CAAA5C,OAErB4C,EAAgBsC,OAAO,SAAAC,GAAK,OAAAA,IAAMnF,CAAN,GAIrD8C,EAAmBmC,GAEnB,IAAMG,EAAe5D,EAAW0D,OAAO,SAAAjK,GAAK,OAAAgK,EAAmBI,SAASnE,EAAUjG,EAAGmG,GAAQ,GAEvE,QAAtB1J,EAAA+J,aAAY,EAAZA,EAAcpF,gBAAQ,IAAA3E,GAAAA,EAAA/D,KAAA8N,EAAGwD,EAAoBG,WAC7CxN,EAAA6J,aAAY,EAAZA,EAAc6D,gCAAWnE,EAAQ2D,EAAUM,EAAc,IAAIG,MAAM,UApBlE,CAqBF,EAAE,CAAC3C,EAAiBxB,EAAQK,EAAcD,IAErCgE,GAAkBX,EAAAA,YAAY,SAACC,EAAmBW,WAEhDC,EAAOD,EACVP,OAAO,SAAAjK,GAAC,IAAAhF,EAAI,QAAkC,QAAjCA,EAAAwL,eAAAA,EAAcuD,wBAAmB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAAxG,GAAGnD,SAAQ,GACzDgH,IAAI,SAAA7D,GAAK,OAAAiG,EAAUjG,EAAGmG,EAAb,GACN6D,EAAqBH,EAAWY,EAAO,GAE7C5C,EAAmBmC,GAEnB,IAAMG,EAAe5D,EAAW0D,OAAO,SAAAjK,GAAK,OAAAgK,EAAmBI,SAASnE,EAAUjG,EAAGmG,GAAQ,GACvFuE,EAAab,EAAWW,EAAgBP,OAAO,SAAAjK,GAAC,IAAAhF,EAAI,QAA+B,QAA9BA,EAAAwL,eAAAA,EAAcuD,wBAAgB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAGxG,GAAGnD,SAAQ,GAAI,GAErF,QAAtB7B,EAAAwL,aAAY,EAAZA,EAAcpF,gBAAQ,IAAApG,GAAAA,EAAAtC,KAAA8N,EAAGwD,EAAoBG,GACjB,QAA5B1N,EAAA+J,aAAY,EAAZA,EAAcmE,mBAAc,IAAAlO,GAAAA,EAAA/D,KAAA8N,EAAAqD,EAAUM,EAAcO,EACrD,EAAE,CAACvE,EAAQK,EAAcD,IAGpBqE,GAAahB,EAAAA,YAAY,SAACiB,EAAuBxE,GACrD,IAAMyE,EAAYD,EAAO9F,MAAQvL,MAAMuR,QAAQF,EAAOG,WAAaH,EAAOG,UAAUC,KAAK,KAAOJ,EAAOG,WACvG,GAAKF,EAAL,CAEA,IAAMI,EAAa,IAAIpD,IAAIC,IAEb,OAAV1B,EACF6E,EAAWC,OAAOL,GAElBI,EAAWE,IAAIN,EAAqBzE,GAGtC2B,GAAWkD,GAGX,IAAMG,EAAiC7R,MAAMJ,KAAK8R,EAAWI,WAAWzH,IAAI,SAAC7I,OAAC+J,EAAG/J,EAAA,GAAEqL,EAAKrL,EAAA,GAKtF,MAAO,CACL6P,OALUvE,EAAQiF,KAAK,SAAAC,GAEvB,OADaA,EAAEzG,MAAQvL,MAAMuR,QAAQS,EAAER,WAAaQ,EAAER,UAAUC,KAAK,KAAOO,EAAER,cAC9DjG,CAClB,IAEiB8F,EACfxE,MAAOA,EACPoF,MAAO1G,EACP+F,UAAW/F,EAEf,GAGM2G,EAAiC,CACrCb,OAAMA,EACNxE,MAAOA,EACPoF,MAAOX,EACPA,UAAWA,GAITD,EAAO1D,gBACT0D,EAAO1D,eAAeuE,GAIpBvE,GACFA,EAAsC,IAAvBkE,EAAY/S,OAAe+S,EAAY,GAAKA,GAIzDjK,GACFA,EACE,CAAEV,QAAS4H,GAAaxH,SAAQA,IAChC,CAAA,EACuB,IAAvBuK,EAAY/S,OAAe+S,EAAY,GAAKA,EAC5C,CAAEM,kBAAmBpF,EAAYqF,OAAQ,QAlDtB,CAqDzB,EAAG,CAAC7D,GAAS3G,EAAU+F,EAAgBmB,GAAaxH,GAAUyF,EAAYD,IAGrDsD,cAAY,SAAC1D,EAAW2F,WAEvCC,EADE/G,EAAMkB,EAAUC,EAAQC,GAI5B2F,EADED,EACuB3S,EAAAA,EAAA,GAAAiP,IAAiB,GAAA,CAAApD,OAErBoD,GAAgB8B,OAAO,SAAAC,GAAK,OAAAA,IAAMnF,CAAN,GAGnDqD,GAAmB0D,GACC,QAApB9Q,EAAAuM,aAAU,EAAVA,EAAYwE,gBAAQ,IAAA/Q,GAAAA,EAAAtC,KAAA6O,EAAGsE,EAAU3F,GACD,QAAhCzJ,EAAA8K,aAAA,EAAAA,EAAYyE,4BAAoB,IAAAvP,GAAAA,EAAA/D,KAAA6O,EAAGuE,EACpC,EAAE,CAAC3D,GAAiBhC,EAAQoB,IAG7B,IAqfQ0E,GArfFC,GAAmBtC,EAAAA,YAAY,WACnC,IAAIuC,EAASjT,EAAA,GAAOqN,GAAU,GAiC9B,OA9BIwB,GAAQ9M,KAAO,GACjBkR,EAAUC,KAAK,SAACC,EAAGC,GAEjB,IADA,IACYC,EAAA,SAAAzB,EAAWzE,GACrB,IAAMwE,EAASvE,EAAQiF,KAAK,SAAAiB,GAE1B,OADeA,EAAIzH,MAAQvL,MAAMuR,QAAQyB,EAAIxB,WAAawB,EAAIxB,UAAUC,KAAK,KAAOuB,EAAIxB,cACtEF,CACpB,GAEA,IAAKD,EAAiB,MAAA,WAEtB,IAAI4B,EAAgB,EAEpB,GAA6B,mBAAlB5B,EAAO6B,OAChBD,EAAgB5B,EAAO6B,OAAOL,EAAGC,QAC5B,IAAsB,IAAlBzB,EAAO6B,OAAiB,CACjC,IAAMC,EAAO/G,EAASyG,EAAGxB,EAAOG,WAAaF,GACvC8B,EAAOhH,EAAS0G,EAAGzB,EAAOG,WAAaF,GACzC6B,EAAOC,EAAMH,GAAiB,EACzBE,EAAOC,IAAMH,EAAgB,EACvC,CAED,OAAsB,IAAlBA,SACe,WAAVpG,EAAqBoG,GAAiBA,QAD/C,OAnB+BI,EADXrT,MAAMJ,KAAK2O,GAAQuD,WACRwB,EAAAD,EAAAvU,OAAAwU,IAAa,CAAnC,IAAA9R,OAAC+R,EAAAR,EAASvR,EAAA,GAAOA,EAAA,wCAsB3B,CACD,OAAO,CACT,GAGKmR,CACR,EAAE,CAAC5F,EAAYwB,GAASzB,IAEnB0G,GAAgBd,KAIhBe,GAAqBC,QAAQzG,GAAoC,iBAAfA,QAAgD7D,IAArB6D,EAAW7F,OACxFuM,GAAgB3K,EAAAA,QAAQ,WAC5B,IAAmB,IAAfiE,IAAyBA,EAAY,OAAOuG,GAChD,GAAIC,GAAoB,OAAOD,GAC/B,IAAM7J,GAASmF,GAAc,GAAKxH,GAC5BsC,EAAMD,EAAQrC,GACpB,OAAOkM,GAAcvT,MAAM0J,EAAOC,EACpC,EAAG,CAAC4J,GAAe1E,GAAaxH,GAAU2F,EAAYwG,KAEhDpK,GAAmB+G,EAAAA,YAAY,SAAC9G,EAAc7H,WAC5CsJ,EAActJ,QAAAA,EAAQ6F,GAgB5B,GAfAyH,GAAezF,GACX7H,GAAMwN,GAAYxN,GAGlBmM,GACFA,EAAmBtE,EAAMyB,GAIvBkC,GAAoC,iBAAfA,IACJ,QAAnBzL,EAAAyL,EAAWrF,gBAAQ,IAAApG,GAAAA,EAAAtC,KAAA+N,EAAG3D,EAAM7H,GACxBA,IAAiC,QAA3BwB,EAAAgK,EAAWpF,wBAAgB,IAAA5E,GAAAA,EAAA/D,KAAA+N,EAAG3D,EAAM7H,KAI5CmG,EAAU,CACZ,IAAMiK,EAAiC7R,MAAMJ,KAAK2O,GAAQuD,WAAWzH,IAAI,SAAC7I,OAAC+J,EAAG/J,EAAA,GAAEqL,EAAKrL,EAAA,GAKnF,MAAO,CACL6P,OALUvE,EAAQiF,KAAK,SAAAC,GAEvB,OADaA,EAAEzG,MAAQvL,MAAMuR,QAAQS,EAAER,WAAaQ,EAAER,UAAUC,KAAK,KAAOO,EAAER,cAC9DjG,CAClB,GAGEsB,MAAOA,EACPoF,MAAO1G,EACP+F,UAAW/F,EAEf,GAEA3D,EACE,CAAEV,QAASoC,EAAMhC,SAAUyD,GAC3B,CAAA,EACuB,IAAvB8G,EAAY/S,OAAe+S,EAAY,GAAKA,EAC5C,CAAEM,kBAAmBqB,GAAepB,OAAQ,YAE/C,CACH,EAAG,CAACnF,EAAYW,EAAoBhG,EAAUN,GAAUiH,GAASzB,EAAS0G,KAGpEI,GAAaxD,EAAWA,YAAC,SAACiB,EAAuB3E,EAAWnC,GAChE,IAAMO,EAAQsB,EAASM,EAAQ2E,EAAOG,WAAa,IAEnD,OAAIH,EAAOwC,OACFxC,EAAOwC,OAAO/I,EAAO4B,EAAQnC,GAG/BO,CACR,EAAE,IAGGgJ,GAAiB1D,EAAWA,YAAC,SAAC2D,EAAqBC,EAA+CC,GACtG,GAAKD,EAAL,CAEA,IAAME,GAA2B,IAAVF,EAAiB,OAASA,EAC7CG,EAAS,EAEb,GAAuB,SAAnBD,EAA2B,CAG7B,GAAIlH,IAAwC,SAAvBA,EAAagH,QAA2C,IAAvBhH,EAAagH,OAIjEG,GAHwD,iBAA7BnH,EAAaoH,YACpCpH,EAAaoH,YACwB,iBAA7BpH,EAAaoH,YAA2BvP,SAASmI,EAAaoH,aAAe,GAI3F,IAAK,IAAIzV,EAAI,EAAGA,EAAIoV,EAAapV,IAAK,CAEpC,GAAkB,UADZqU,EAAMlG,EAAQnO,IACZqV,QAAkC,IAAdhB,EAAIgB,MAI9BG,GAHiBnB,EAAIhR,MACK,iBAAdgR,EAAIhR,MAAqBgR,EAAIhR,MAAQ6C,SAASmO,EAAIhR,QAAoB,EAC9E,GAGP,CACD,OAAOmS,CACR,CAAM,GAAuB,UAAnBD,EAA4B,CAErC,IAASvV,EAAIoV,EAAc,EAAGpV,EAAImO,EAAQhO,OAAQH,IAAK,CACrD,IAAMqU,EACN,GAAkB,WADZA,EAAMlG,EAAQnO,IACZqV,MAING,GAHiBnB,EAAIhR,MACK,iBAAdgR,EAAIhR,MAAqBgR,EAAIhR,MAAQ6C,SAASmO,EAAIhR,QAAoB,EAC9E,GAGP,CAED,GAAIgL,GAAuC,UAAvBA,EAAagH,MAI/BG,GAHwD,iBAA7BnH,EAAaoH,YACpCpH,EAAaoH,YACwB,iBAA7BpH,EAAaoH,YAA2BvP,SAASmI,EAAaoH,aAAe,GAG3F,OAAOD,CACR,CA5C2B,CA+C9B,EAAG,CAACrH,EAASE,IAGPqH,GAAejE,EAAAA,YAAY,WAC/B,IAAKhD,EAAY,OAAO,KAExB,IAmGgBkH,EACAC,EACAC,EACAC,EAtGVC,EAAgB5H,EAAQzC,IAAI,SAACgH,EAAQsD,SACnCrD,EAAYD,EAAO9F,MAAQvL,MAAMuR,QAAQF,EAAOG,WAAaH,EAAOG,UAAUC,KAAK,KAAOJ,EAAOG,YAAcmD,EAC/GC,EAAYrG,GAAQsG,IAAIvD,IAAwB,KAChDwD,EAAchB,GAAea,EAAUtD,EAAO2C,OAAO,GACrDI,EAAc/C,EAAOrP,MACE,iBAAjBqP,EAAOrP,MAAqB,UAAGqP,EAAOrP,MAAS,MAAGqP,EAAOrP,WACjEoH,EAEJ,OACErH,EAAAM,IAAA,KAAA/D,EAAA,CAEEsF,UAAW,GAAG1D,OAAAmR,EAAOzN,WAAa,GAAM,KAAA1D,OAAAmR,EAAO0D,MAAQ,QAAA7U,OAAQmR,EAAO0D,OAAU,IAChF5S,MAAO,CACLH,MAAOoS,EACP1J,SAAU2G,EAAO3G,SAAuC,iBAApB2G,EAAO3G,SAAwB,GAAAxK,OAAGmR,EAAO3G,SAAY,MAAG2G,EAAO3G,SAAa0J,QAAehL,EAC/H4L,SAAUZ,EACVhP,SAAUiM,EAAO2C,MAAQ,SAAW,WACpCiB,KAAuB,SAAjB5D,EAAO2C,QAAqC,IAAjB3C,EAAO2C,WAAkC5K,IAAhB0L,EAA4B,UAAGA,EAAW,MAAO,SAAO1L,EAClH8L,MAAwB,UAAjB7D,EAAO2C,WAAqC5K,IAAhB0L,EAA4B,GAAA5U,OAAG4U,EAAW,MAAO,SAAO1L,EAC3F+L,OAAQ9D,EAAO2C,MAA0B,SAAjB3C,EAAO2C,QAAqC,IAAjB3C,EAAO2C,MAAiB,GAAK,EAAK,EACrFlO,iBAAiBuL,EAAO2C,MAAQ,WAChCjO,UAA4B,SAAjBsL,EAAO2C,QAAqC,IAAjB3C,EAAO2C,MACzC,gCACiB,UAAjB3C,EAAO2C,MACP,sCACA5K,EACJY,QAAS,YACToL,UAAW/D,EAAO0D,OAAS,OAC3BM,aAAc,oBACdhQ,WAAY,IACZrE,SAAU,OACVC,WAAY,OACZS,MAAO,UACP4D,WAAY,yBAEU,QAAnB9D,EAAA6P,EAAOiE,oBAAY,IAAA9T,OAAA,EAAAA,EAAAtC,KAAAmS,EAAGA,KAAW,CAAE,EAExC,CAAAvP,SAAAH,EAAAC,KAAA,MAAA,CACEO,MAAO,CACL4C,QAAS,OACTC,WAAY,SACZ7D,IAAK,MACL8D,eAAiC,UAAjBoM,EAAO0D,MAAoB,WAA8B,WAAjB1D,EAAO0D,MAAqB,SAAW,cAGjGjT,SAAA,CAAAC,MAAA,OAAA,CAAMI,MAAO,CAAEkD,WAAY,IAAKrE,SAAU,OAAQC,WAAY,OAAQS,MAAO,WAAWI,SAC7D,mBAAjBuP,EAAOhE,MAAuBgE,EAAOhE,MAAM,CAAEuH,UAASA,EAAEW,WAAYlE,IAAYA,EAAOhE,QAEhGgE,EAAO6B,QACNnR,EAAAA,IACE,SAAA,CAAAyB,QAAS,WAEP4N,GAAWC,EADqB,OAAduD,EAAqB,SAAyB,WAAdA,EAAyB,UAAY,KAExF,EACDzS,MAAO,CACLqD,OAAQ,OACRmF,WAAY,OACZlF,OAAQ,UACRV,QAAS,OACTC,WAAY,SACZgF,QAAS,MACTtI,MAAOkT,EAAY,UAAY,WAChC9S,SAEDC,MAAC6K,EAAiB,CAACC,MAAO+H,QAAaxL,WAtDxCkI,EA4DX,GAGA,GAAItE,EAAc,CAChB,IAAMwI,EAAkD,iBAA7BxI,EAAaoH,YACpC,GAAAlU,OAAG8M,EAAaoH,YAAe,MACM,iBAA7BpH,EAAaoH,YAA2BpH,EAAaoH,YAAc,OACzEqB,EACJ1T,EAAAA,IAAA,KAAA,CAEEI,MAAO,CACLH,MAAOwT,EACPpQ,SAAU4H,EAAagH,MAAQ,SAAW,WAC1CiB,KAA6B,SAAvBjI,EAAagH,QAA2C,IAAvBhH,EAAagH,MAAiB,WAAQ5K,EAC7E8L,MAA8B,UAAvBlI,EAAagH,MAAoB,WAAQ5K,EAChD+L,OAAQnI,EAAagH,MAAgC,SAAvBhH,EAAagH,QAA2C,IAAvBhH,EAAagH,MAAiB,GAAK,GAAM,EACxGlO,gBAAiB,UACjBkE,QAAS,YACTqL,aAAc,oBACdhQ,WAAY,IACZrE,SAAU,OACVC,WAAY,OACZS,MAAO,UACP4D,WAAY,sBACZ8P,UAAW,UACZtT,SAEDH,EAAKC,KAAA,MAAA,CAAAO,MAAO,CAAE4C,QAAS,OAAQC,WAAY,SAAUC,eAAgB,UAClEnD,SAAA,EAACkL,EAAa0I,eAAuC,UAAtB1I,EAAa9J,OACrCoR,EAAcX,GAAclD,OAAO,SAAAjK,GAAK,IAAAhF,EAAA,QAA8B,UAA7BwL,EAAauD,wBAAgB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAGxG,GAAGnD,SAAQ,GACpFkR,EAAcD,EAAYjK,IAAI,SAAA7D,GAAK,OAAAiG,EAAUjG,EAAGmG,EAAO,GACvD6H,EAAcF,EAAYxV,OAAS,GAAKyV,EAAYoB,MAAM,SAAApK,GAAO,OAAA4C,EAAgByC,SAASrF,EAAI,GAC9FkJ,EAAeF,EAAYqB,KAAK,SAAArK,GAAO,OAAA4C,EAAgByC,SAASrF,EAAI,GAGxExJ,EAAAM,IAACsJ,EAAQ,CACPC,QAAS4I,EACT3I,cAAe4I,IAAiBD,EAChC5M,SAAU,SAACtI,GAAM,OAAAyR,GAAgBzR,EAAE2L,OAAOW,QAAS+H,GAAc,KAItE3G,EAAa6I,aAAe9T,MAAM,OAAA,CAAAI,MAAO,CAAEuH,WAAYsD,EAAa0I,cAAgB,EAAI,OAAU5T,SAAAkL,EAAa6I,kBAjC9G,aAqCRnB,EAAcoB,QAAQL,EACvB,CAED,IAAMM,EAAiB9H,aAAW,EAAXA,EAAcnB,EAAS,GAE9C,OACE/K,EAAAA,IAAO,QAAA,CAAAmK,IAAK2D,YACV9N,EAAAA,IAAQ,KAAAzD,EAAA,CAAA,EAACyX,GAAkB,GAAG,CAAAjU,SAAG4S,MAGtC,EAAE,CAAC5H,EAASM,EAAYmB,GAASvB,EAAcmB,EAAiBwF,GAAehH,EAAQyE,GAAYL,GAAiB5D,EAAQc,EAAa6F,KAGpIkC,GAAkB5F,cAAY,SAAC7F,GACnC6E,GAAmB7E,EACpB,EAAE,IAEG0L,GAAiB7F,EAAAA,YAAY,SAAC9Q,EAAoBiL,GACtDjL,EAAE0G,iBACFuJ,GAAoBhF,EACrB,EAAE,IAEG2L,GAAa9F,EAAAA,YAAY,SAAC9Q,EAAoB6W,GAElD,GADA7W,EAAE0G,iBACsB,OAApBmJ,IAA4BA,KAAoBgH,EAGlD,OAFA/G,GAAmB,WACnBG,GAAoB,MAItB,IAAM6G,EAAO1W,EAAA,GAAOiU,IAAa,GAC3B0C,EAAcD,EAAQjH,IAC5BiH,EAAQE,OAAOnH,GAAiB,GAChCiH,EAAQE,OAAOH,EAAW,EAAGE,GAG7BjH,GAAmB,MACnBG,GAAoB,KACtB,EAAG,CAACJ,GAAiBwE,KAEf4C,GAAgBnG,EAAAA,YAAY,WAChChB,GAAmB,MACnBG,GAAoB,KACrB,EAAE,IAGGiH,GAAcpG,EAAAA,YAAY,WAC9B,IAAMqG,EAAYtJ,aAAA,EAAAA,EAAQsJ,UACpBC,EACiB,mBAAdD,EACHA,SACcrN,IAAdqN,EACAA,EACA,UACAE,EAAU7J,EAAQhO,QAAUkO,EAAe,EAAI,GACrD,OACEjL,MAAA,KAAA,CAAI6B,UAAU,wBAAuB9B,SACnCC,EAAIM,IAAA,KAAA,CAAAsU,QAASA,EAASxU,MAAO,CAC3B6H,QAAS,YACToL,UAAW,SACX1T,MAAO,UACPV,SAAU,OACVC,WAAY,OACZqE,WAAY,sBACZ+P,aAAc,OACdvP,gBAAiB,SAClBhE,SACE4U,KAIR,EAAE,CAACvJ,eAAAA,EAAQsJ,UAAW3J,EAAQhO,OAAQkO,IAGjC4J,GAAaxG,EAAAA,YAAY,WAC7B,OAA6B,IAAzBuD,GAAc7U,OACT0X,KAEF7C,GAActJ,IAAI,SAACqC,EAAQnC,SAC1BgB,EAAMkB,EAAUC,EAAQC,GACxBkK,EAAa1I,EAAgByC,SAASrF,GACtCuL,EAAanI,GAAgBiC,SAASrF,GACtCwL,GAAWlJ,aAAK,EAALA,EAAQnB,EAAQnC,KAAU,CAAA,EACrCyM,EAAYzM,IAAUoJ,GAAc7U,OAAS,EAEnD,OACE6C,EAAAC,KAACqV,EAAMlN,SACL,CAAAjI,SAAA,CAAAH,EAAAC,KAAA,KAAAtD,EAAA,CACEsF,UAAW,UAA2B,mBAAjBoK,EAA8BA,EAAatB,EAAQnC,GAASyD,GAAgB,GAAM,KAAA9N,OAAAiP,KAAoB5E,EAAQ,WAAa,GAAE,KAAArK,OAAIoP,KAAqB/E,EAAQ,YAAc,IACjM2M,WAAW,EACXC,YAAa,WAAM,OAAAnB,GAAgBzL,EAAM,EACzC6M,WAAY,SAAC9X,GAAM,OAAA2W,GAAe3W,EAAGiL,EAAM,EAC3C8M,OAAQ,SAAC/X,GAAM,OAAA4W,GAAW5W,EAAGiL,IAC7B+M,UAAWf,GACXpU,MACE7D,EAAA,CAAAmH,OAAQ,OACR3C,QAASqM,KAAoB5E,EAAQ,GAAM,EAC3CzE,gBAAiBwJ,KAAqB/E,EAAQ,UAAY,QAC1D5E,WAAY,yBACToR,EAAS5U,OAEd8D,aAAc,SAAC3G,GACT6P,KAAoB5E,GAAS+E,KAAqB/E,IACpDjL,EAAE8L,cAAcjJ,MAAM2D,gBAAkB,UAE5C,EACAI,aAAc,SAAC5G,GACT6P,KAAoB5E,GAAS+E,KAAqB/E,IACpDjL,EAAE8L,cAAcjJ,MAAM2D,gBAAkB,WAGxCiR,EAEH,CAAAjV,SAAA,CAAAkL,GACCjL,MAAA,KAAA,CACEI,MAAO,CACLH,MAA2C,iBAA7BgL,EAAaoH,YACvB,GAAAlU,OAAG8M,EAAaoH,YAAe,MACM,iBAA7BpH,EAAaoH,YAA2BpH,EAAaoH,YAAc,OAC/EhP,SAAU4H,EAAagH,MAAQ,SAAW,WAC1CiB,KAA6B,SAAvBjI,EAAagH,QAA2C,IAAvBhH,EAAagH,MAAiB,WAAQ5K,EAC7E8L,MAA8B,UAAvBlI,EAAagH,MAAoB,WAAQ5K,EAChD+L,OAAQnI,EAAagH,MAAgC,SAAvBhH,EAAagH,QAA2C,IAAvBhH,EAAagH,MAAiB,GAAK,GAAM,EACxGlO,gBAAiB,QACjBkE,QAAS,OACTqL,aAAc2B,EAAY,OAAS,oBACnC5B,UAAW,UACZtT,SAEDC,EAAAA,IAAK,MAAA,CAAAI,MAAO,CAAE4C,QAAS,OAAQC,WAAY,SAAUC,eAAgB,UAAUnD,SAC7EC,EAAAA,IAAC4J,EACC,CAAAC,QAASiL,EACTjP,SAAU,SAACtI,GAAM,OAAA6Q,GAAazD,EAAQpN,EAAE2L,OAAOW,UAC/CvI,SAA0C,QAAhC7B,EAAAwL,EAAauD,wBAAmB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAAN,GAAQrJ,eAKzDyJ,EAAQzC,IAAI,SAACgH,EAAQsD,SACdrD,EAAYD,EAAO9F,MAAQvL,MAAMuR,QAAQF,EAAOG,WAAaH,EAAOG,UAAUC,KAAK,KAAOJ,EAAOG,YAAcmD,EAC/G4C,GAA4B,QAAhB/V,EAAA6P,EAAOmG,cAAS,IAAAhW,OAAA,EAAAA,EAAAtC,KAAAmS,EAAA3E,EAAQnC,KAAU,GAC9CuK,EAAchB,GAAea,EAAUtD,EAAO2C,OAAO,GACrDI,EAAc/C,EAAOrP,MACE,iBAAjBqP,EAAOrP,MAAqB,UAAGqP,EAAOrP,MAAS,MAAGqP,EAAOrP,WACjEoH,EAEJ,OACErH,cAEE6B,UAAW,UAAGyN,EAAOzN,WAAa,GAAE,KAAA1D,OAAImR,EAAO0D,MAAQ,eAAQ1D,EAAO0D,OAAU,IAChF5S,MAAK7D,EAAA,CACH0D,MAAOoS,EACP1J,SAAU2G,EAAO3G,SAAuC,iBAApB2G,EAAO3G,SAAwB,GAAAxK,OAAGmR,EAAO3G,eAAe2G,EAAO3G,SAAa0J,QAAehL,EAC/H4L,SAAUZ,EACVhP,SAAUiM,EAAO2C,MAAQ,SAAW,WACpCiB,KAAuB,SAAjB5D,EAAO2C,QAAqC,IAAjB3C,EAAO2C,WAAkC5K,IAAhB0L,EAA4B,GAAG5U,OAAA4U,QAAkB,SAAO1L,EAClH8L,MAAwB,UAAjB7D,EAAO2C,WAAqC5K,IAAhB0L,EAA4B,GAAA5U,OAAG4U,EAAW,MAAO,SAAO1L,EAC3F+L,OAAQ9D,EAAO2C,MAA0B,SAAjB3C,EAAO2C,QAAqC,IAAjB3C,EAAO2C,MAAiB,GAAK,EAAK,EACrFlO,gBAAiB,QACjBC,UAA4B,SAAjBsL,EAAO2C,QAAqC,IAAjB3C,EAAO2C,MACzC,gCACiB,UAAjB3C,EAAO2C,MACP,sCACA5K,EACJY,QAAS,OACTqL,aAAc2B,EAAY,OAAS,oBACnChW,SAAU,OACVC,WAAY,OACZS,MAAO,UACP4D,WAAY,sBACZ8P,UAAW/D,EAAO0D,OAAS,QACxBwC,EAAUpV,OAEfwU,QAAStF,EAAOsF,QAChBc,QAASpG,EAAOoG,SACZF,EAEH,CAAAzV,SAAA8R,GAAWvC,EAAQ3E,EAAQnC,KA7BvB+G,UAkCZvD,aAAU,EAAVA,EAAY2J,oBAAqBZ,GAChC/U,EACEM,IAAA,KAAA,CAAAP,SAAAC,EAAAM,IAAA,KAAA,CAAIsU,QAAS7J,EAAQhO,QAAUkO,EAAe,EAAI,YAC/Ce,EAAW2J,kBAAkBhL,EAAQnC,EAAO,GAAG,SAnGnCgB,EAyGzB,EACF,EAAG,CAACoI,GAAehH,EAAQwB,EAAiBQ,GAAiB3B,EAAcF,EAASe,EAAOG,EAAcmC,GAAcyD,GAAY7F,EAAYoB,GAAiBG,GAAkB0G,GAAiBC,GAAgBC,GAAYK,GAAezC,GAAgB0C,KAGxPmB,GAAmB,iBACvB,IAAmB,IAAf1K,IAAyBA,EAAY,OAAO,KAEhD,IAAM7F,EAA4B,QAApB5F,EAAAyL,EAAW7F,aAAS,IAAA5F,EAAAA,EAAAgS,GAAc1U,OAC1CsG,EAAW6H,EAAW7H,UAAY,cAExC,OACErD,EACEM,IAAA,MAAA,CAAAF,MAAO,CACLyV,UAAW,OACX7S,QAAS,OACTE,eAAgBG,EAASwL,SAAS,SAAW,WAAaxL,EAASwL,SAAS,QAAU,aAAe,UACtG9O,SAEDC,EAACM,IAAA2E,EACC,CAAAE,QAAS4H,GACT1H,MAAOA,EACPE,SAAUA,GACVE,gBAAiByF,EAAWzF,gBAC5BC,gBAAiBwF,EAAWxF,gBAC5BC,gBAAiBuF,EAAWvF,gBAC5BC,UAAWsF,EAAWtF,UACtBC,SAAUyB,GACVxB,iBAAkBwB,GAClBvB,OAAQmF,EAAWnF,OACnBI,WAAY+E,EAAW/E,WACvBzG,KAAe,UAATA,EAAmB,QAAU,aAI3C,EAmFMoW,GAAkB7O,EAAAA,QAAQ,WAC9B,OAAO8D,EAAQ8I,KAAK,SAAA5C,GAAO,OAAAA,EAAIgB,KAAK,IAAMhH,GAAgBA,EAAagH,KACzE,EAAG,CAAClH,EAASE,IAGP8K,GAAqB9O,EAAAA,QAAQ,WACjC,OAAO8D,EAAQ6I,MAAM,SAAA3C,GAAO,OAAAA,EAAIhR,WAAYgL,GAAgBA,EAAaoH,YAC3E,EAAG,CAACtH,EAASE,IAKP+K,GAAa/O,EAAAA,QAAQ,WAEzB,GAAIwE,aAAM,EAANA,EAAQwK,EAAG,CACb,GAAwB,iBAAbxK,EAAOwK,EAChB,OAAOxK,EAAOwK,EACT,IAAiB,IAAbxK,EAAOwK,EAShB,OAPiBlL,EAAQP,OAAO,SAAC0L,EAAKjF,GAIpC,OAAOiF,GAHGjF,EAAIhR,MACY,iBAAdgR,EAAIhR,MAAqBgR,EAAIhR,MAAQ6C,SAASqT,OAAOlF,EAAIhR,OAAO8C,QAAQ,KAAM,MAAQ,EAC9F,IAEL,EAAE,IACuBkI,EAAoD,iBAA7BA,EAAaoH,YAA2BpH,EAAaoH,YAAcvP,SAASqT,OAAOlL,EAAaoH,aAAe,MAAMtP,QAAQ,KAAM,MAAQ,GAAM,EAGrM,CAID,GAAI+S,GAaF,OAXsB/K,EAAQP,OAAO,SAAC0L,EAAKjF,GACzC,OAAIA,EAAIgB,OAAShB,EAAIhR,MAEZiW,GADwB,iBAAdjF,EAAIhR,MAAqBgR,EAAIhR,MAAQ6C,SAASqT,OAAOlF,EAAIhR,OAAO8C,QAAQ,KAAM,MAAQ,GAGlGmT,CACR,EAAE,IACwBjL,GAAgBA,EAAagH,OAAShH,EAAaoH,YACrC,iBAA7BpH,EAAaoH,YAA2BpH,EAAaoH,YAAcvP,SAASqT,OAAOlL,EAAaoH,aAAatP,QAAQ,KAAM,MAAQ,GAC3I,EAOP,EAAE,CAACgI,EAASU,aAAM,EAANA,EAAQwK,EAAGhL,EAAc6K,KAGhCM,GAAuBnP,EAAAA,QAAQ,WACnC,MAAoB,UAAhB0E,GACAmK,IACAC,IAEAhL,EAAQ8I,KAAK,SAAA5C,GAAO,OAAAA,EAAIhR,QAJQ,QAK7B0L,CACR,EAAE,CAACA,EAAamK,GAAiBC,GAAoBhL,IAEhDsL,GACJ9Z,EAAAA,EAAA,CAAA0D,MAAO,OACP0I,SAAUqN,GAAa,UAAGA,GAAU,MAAO,OAC3CM,eAAgB,WAChBC,cAAe,EACf5K,YAAayK,GACbrS,gBAAiB,SACboH,GAAY,CAAE3H,aAAc,MAAOC,OAAQ,sBAAsB,CACrE+S,SAAU,WAGNC,MACJpT,SAAU,WACVpD,MAAO,OACPgT,SAAU,OACVyD,UAAgC,iBAAdjL,aAAA,EAAAA,EAAQkL,GAAiB,GAAAxY,OAAGsN,EAAOkL,EAAC,WAAOtP,EAC7D7D,aAAc,OACXpD,GAIL,GAAIsN,GACF,OACE9N,EAAKC,KAAA,MAAAtD,EAAA,CAAA4N,IAAKyD,GAAU/L,UAAW,sCAAsC1D,OAAA0D,GAAazB,MAAOqW,IAAkBxU,EACxG,CAAAlC,SAAA,CAAAuL,GAAStL,EAAKM,IAAA,MAAA,CAAAF,MAAO,CAAEwW,aAAc,QAAQ7W,SAAGuL,EAAMmG,MACtDvG,GAAoC,iBAAfA,IAA8C,QAAnBhK,EAAAgK,EAAW7H,gBAAQ,IAAAnC,OAAA,EAAAA,EAAE2V,WAAW,SAAUjB,MAtKzFlF,GACyB,mBAAtBtF,aAAM,EAANA,EAAQsJ,WACXtJ,EAAOsJ,iBACerN,KAAtB+D,eAAAA,EAAQsJ,WACRtJ,EAAOsJ,UACP,UACuB,IAAzB9C,GAAc7U,OAEdiD,EAAKM,IAAA,MAAA,CAAAuB,UAAU,yCAAyCzB,MAAO,CAC7D6H,QAAS,YACToL,UAAW,SACX1T,MAAO,UACPV,SAAU,OACVC,WAAY,OACZqE,WAAY,uBAEXxD,SAAA2Q,KAKL1Q,MAAA,MAAA,CAAK6B,UAAU,mBAAkB9B,SAC9B6R,GAActJ,IAAI,SAACqC,EAAQnC,SACpBgB,EAAMkB,EAAUC,EAAQC,GACxBkK,EAAa1I,EAAgByC,SAASrF,GAE5C,OACE5J,OAEE,MAAA,CAAAiC,UAAW,wBAAA1D,OAAwB2W,EAAa,WAAa,IAC7D1U,MAAO,CACLqD,OAAQ,oBACRD,aAAc,MACdyE,QAAS,OACT2O,aAAc,OACd7S,gBAAiB+Q,EAAa,UAAY,SAG3C/U,SAAA,CAAAkL,GACCjL,MAAK,MAAA,CAAAI,MAAO,CAAEwW,aAAc,OAC1B7W,SAAAC,MAAC4J,EACC,CAAAC,QAASiL,EACTjP,SAAU,SAACtI,GAAM,OAAA6Q,GAAazD,EAAQpN,EAAE2L,OAAOW,UAC/CvI,SAAuC,QAA7B7B,EAAAwL,EAAauD,wBAAgB,IAAA/O,OAAA,EAAAA,EAAAtC,KAAA8N,EAAGN,GAAQrJ,aAIvDyJ,EAAQzC,IAAI,SAACgH,GACZ,IAAMC,EAAYD,EAAO9F,MAAQvL,MAAMuR,QAAQF,EAAOG,WAAaH,EAAOG,UAAUC,KAAK,KAAOJ,EAAOG,WACjG1G,EAAQsB,EAASM,EAAQ2E,EAAOG,WAAa,IAC7CqH,EAAexH,EAAOwC,OAASxC,EAAOwC,OAAO/I,EAAO4B,EAAQnC,GAASO,EAE3E,OACEnJ,EAEEC,KAAA,MAAA,CAAAO,MAAO,CACL4C,QAAS,OACTE,eAAgB,gBAChB0T,aAAc,MACdG,cAAe,MACfzD,aAAc,qBAGhBvT,SAAA,CAAAH,OAAA,OAAA,CAAMQ,MAAO,CAAEkD,WAAY,OAAQ3D,MAAO,kBACf,mBAAjB2P,EAAOhE,MAAuBgE,EAAOhE,MAAM,CAAE,GAAIgE,EAAOhE,MAC3D,OACPtL,EAAAA,IAAM,OAAA,CAAAI,MAAO,CAAE4W,KAAM,EAAG3D,UAAW,SAAStT,SAAG+W,MAZ1CvH,EAeX,KAzCK/F,EA4CV,MAgGA+B,GAAUvL,EAAAA,WAAKI,MAAO,CAAEyV,UAAW,QAAW9V,SAAAwL,EAAOkG,MACrDvG,IAAqC,iBAAfA,KAAgD,QAArB9J,EAAA8J,EAAW7H,gBAAU,IAAAjC,OAAA,EAAAA,EAAAyV,WAAW,UAAkBjB,SAM1G,IAAMqB,GAA4C,CAChD5T,SAAU,WACV6T,WAAYzL,aAAM,EAANA,EAAQwK,IAAKH,GAAmB,OAAS,UACrDqB,WAAW1L,eAAAA,EAAQkL,GAAI,OAAS,UAChC1W,MAAO,OAGPgT,UAAwB,KAAdxH,eAAAA,EAAQwK,GACd,OACqB,iBAAdxK,aAAA,EAAAA,EAAQwK,GACf,GAAA9X,OAAGsN,EAAOwK,EAAK,WACf5O,EACJqP,UAAgC,iBAAdjL,aAAA,EAAAA,EAAQkL,GAAiB,GAAAxY,OAAGsN,EAAOkL,EAAK,WAAGtP,EAE7D7D,aAAc,OAGhB,OACE5D,EAAAC,KAAA,MAAAtD,EAAA,CAAK4N,IAAKyD,GAAU/L,UAAW,aAAa1D,OAAA0D,GAAazB,MAAOqW,IAAkBxU,EAAI,CAAAlC,SAAA,CACnFuL,GAAStL,EAAKM,IAAA,MAAA,CAAAF,MAAO,CAAEwW,aAAc,iBAAWtL,EAAMmG,MACtDvG,GAAoC,iBAAfA,IAAgD,QAArB7J,EAAA6J,EAAW7H,gBAAU,IAAAhC,OAAA,EAAAA,EAAAwV,WAAW,SAAUjB,KAC3F5V,EAAAA,IAAK,MAAA,CAAAI,MAAO6W,GACVlX,SAAAC,EAAAA,IAAA,MAAA,CAAKI,MAAO,CACVH,MAAO,OACP0I,SAAUqN,GAAa,GAAG7X,OAAA6X,GAAc,MAAG,OAC3ChT,QAAS,SAETjD,SAAAH,EAAAA,KAAA,QAAA,CAAOQ,MAAOiW,GAAYxU,UAAWkK,EAAchM,SAAA,CAChDuS,KACDtS,EAAQM,IAAA,QAAA,CAAAP,SAAA8U,OACPrJ,GACCxL,EAAAA,IACE,QAAA,CAAAD,SAAAC,EAAAA,IAAA,KAAA,CAAAD,SACEC,EAAIM,IAAA,KAAA,CAAAsU,QAAS7J,EAAQhO,QAAUkO,EAAe,EAAI,GAAKlL,SAAAyL,EAAQiG,iBAO1ElG,GAAUvL,EAAAA,IAAK,MAAA,CAAAI,MAAO,CAAEyV,UAAW,QAAQ9V,SAAGwL,EAAOkG,MACrDvG,IAAqC,iBAAfA,KAAgD,QAArB3J,EAAA2J,EAAW7H,gBAAU,IAAA9B,OAAA,EAAAA,EAAAsV,WAAW,UAAkBjB,QAG1G","x_google_ignoreList":[0]}