bi-components-library 1.0.2 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../node_modules/.pnpm/react@19.1.1/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.1.1/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.1.1/node_modules/react/jsx-runtime.js","../src/components/Button/index.tsx","../src/components/Card/index.tsx","../src/components/AppModal/index.tsx","../src/components/PageTable/index.tsx","../src/components/XcIcon/index.tsx","../src/components/EmptyAndSpin/index.tsx","../src/components/BackButton/index.tsx","../src/components/LinkButton/index.tsx","../src/components/AdvancedTable/index.tsx","../src/components/DynamicInput/index.tsx","../src/components/DynamicTextArea/index.tsx","../src/components/VideoCard/index.tsx","../src/components/Waterfall/index.tsx","../src/theme.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from \"react\";\nimport { Button as AntButton, type ButtonProps as AntButtonProps } from \"antd\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"dashed\" | \"link\" | \"text\";\n\nexport interface ButtonProps extends Omit<AntButtonProps, 'type' | 'ghost' | 'variant'> {\n /** 视觉风格 */\n variant?: ButtonVariant;\n /** 是否加载中 */\n loading?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<ButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 基础按钮,用于触发操作 */\nexport const Button: React.FC<ButtonProps> = ({\n variant = \"primary\",\n loading = false,\n children,\n ...rest\n}) => {\n // 将自定义 variant 映射到 antd 的 type\n const getAntdType = (variant: ButtonVariant): AntButtonProps['type'] => {\n switch (variant) {\n case \"primary\":\n return \"primary\";\n case \"ghost\":\n return \"default\";\n case \"dashed\":\n return \"dashed\";\n case \"link\":\n return \"link\";\n case \"text\":\n return \"text\";\n default:\n return \"primary\";\n }\n };\n\n return (\n <AntButton\n {...rest}\n type={getAntdType(variant)}\n loading={loading}\n ghost={variant === \"ghost\"}\n >\n {children}\n </AntButton>\n );\n};\n\n// 手动添加 docgen 信息\n(Button as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Button\",\n description: \"基础按钮,用于触发操作\",\n props: {\n variant: {\n name: \"variant\",\n required: false,\n description: \"视觉风格\",\n type: { name: \"ButtonVariant\", raw: '\"primary\" | \"ghost\" | \"dashed\" | \"link\" | \"text\"' },\n defaultValue: { value: '\"primary\"' }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"按钮内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"按钮大小\",\n type: { name: \"ButtonSize\", raw: '\"small\" | \"middle\" | \"large\"' }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: MouseEvent) => void\" }\n }\n }\n};\n","import React from \"react\";\nimport { Card as AntCard, type CardProps as AntCardProps } from \"antd\";\n\nexport interface CardProps extends Omit<AntCardProps, 'title'> {\n /** 标题 */\n title?: React.ReactNode;\n /** 内容区域 */\n children?: React.ReactNode;\n /** 是否显示边框 */\n bordered?: boolean;\n /** 是否可悬停 */\n hoverable?: boolean;\n /** 卡片大小 */\n size?: \"default\" | \"small\";\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<CardProps> & { __docgenInfo?: DocgenInfo };\n\n/** 卡片容器,用于分组内容 */\nexport const Card: React.FC<CardProps> = ({ \n title, \n children, \n bordered = true,\n hoverable = false,\n size = \"default\",\n ...rest \n}) => (\n <AntCard\n {...rest}\n title={title}\n bordered={bordered}\n hoverable={hoverable}\n size={size}\n >\n {children}\n </AntCard>\n);\n\n// 手动添加 docgen 信息\n(Card as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Card\",\n description: \"卡片容器,用于分组内容\",\n props: {\n title: {\n name: \"title\",\n required: false,\n description: \"标题\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"内容区域\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n bordered: {\n name: \"bordered\",\n required: false,\n description: \"是否显示边框\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n hoverable: {\n name: \"hoverable\",\n required: false,\n description: \"是否可悬停\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"卡片大小\",\n type: { name: \"CardSize\", raw: '\"default\" | \"small\"' },\n defaultValue: { value: '\"default\"' }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n actions: {\n name: \"actions\",\n required: false,\n description: \"卡片操作组\",\n type: { name: \"ReactNode[]\", raw: \"React.ReactNode[]\" }\n }\n }\n};\n","import React from \"react\";\nimport { Modal, type ModalProps } from \"antd\";\n\nexport interface AppModalProps extends ModalProps {\n /** 是否显示默认的确定和取消按钮 */\n showDefaultFooter?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<AppModalProps> & { __docgenInfo?: DocgenInfo };\n\n/** 应用级模态框组件,基于 Ant Design Modal 封装 */\nexport const AppModal: React.FC<AppModalProps> = ({ \n showDefaultFooter = true,\n ...props \n}) => {\n const footer = props.footer !== undefined \n ? props.footer \n : showDefaultFooter \n ? (_: React.ReactNode, { OkBtn, CancelBtn }: { OkBtn: React.ComponentType<Record<string, unknown>>; CancelBtn: React.ComponentType<Record<string, unknown>> }) => (\n <>\n <OkBtn />\n <CancelBtn />\n </>\n )\n : null;\n\n return (\n <Modal\n {...props}\n footer={footer}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(AppModal as ComponentWithDocgen).__docgenInfo = {\n displayName: \"AppModal\",\n description: \"应用级模态框组件,基于 Ant Design Modal 封装\",\n props: {\n showDefaultFooter: {\n name: \"showDefaultFooter\",\n required: false,\n description: \"是否显示默认的确定和取消按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n title: {\n name: \"title\",\n required: false,\n description: \"模态框标题\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n open: {\n name: \"open\",\n required: false,\n description: \"是否显示模态框\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n onCancel: {\n name: \"onCancel\",\n required: false,\n description: \"取消按钮点击事件\",\n type: { name: \"function\", raw: \"(e: React.MouseEvent<HTMLElement>) => void\" }\n },\n onOk: {\n name: \"onOk\",\n required: false,\n description: \"确定按钮点击事件\",\n type: { name: \"function\", raw: \"(e: React.MouseEvent<HTMLElement>) => void\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"模态框内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n width: {\n name: \"width\",\n required: false,\n description: \"模态框宽度\",\n type: { name: \"string | number\", raw: \"string | number\" }\n },\n centered: {\n name: \"centered\",\n required: false,\n description: \"是否居中显示\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n maskClosable: {\n name: \"maskClosable\",\n required: false,\n description: \"点击蒙层是否允许关闭\",\n type: { name: \"boolean\", raw: \"boolean\" }\n }\n }\n};\n","import React from \"react\";\nimport { Table, type TableProps } from \"antd\";\n\nexport interface PageTableProps extends TableProps<Record<string, unknown>> {\n /** 水平滚动宽度 */\n scrollX?: number;\n /** 是否显示分页器 */\n showPagination?: boolean;\n /** 默认页面大小 */\n defaultPageSize?: number;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<PageTableProps> & { __docgenInfo?: DocgenInfo };\n\n/** 页面级表格组件,高度铺满容器,自动滚动 */\nexport const PageTable: React.FC<PageTableProps> = ({\n scrollX,\n showPagination = true,\n defaultPageSize = 10,\n ...props\n}) => {\n return (\n <Table\n {...props}\n scroll={{ \n x: scrollX || 'max-content', \n y: '50vh' \n }}\n pagination={showPagination ? {\n hideOnSinglePage: true,\n showSizeChanger: true,\n showQuickJumper: true,\n defaultPageSize,\n ...props.pagination,\n } : false}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(PageTable as ComponentWithDocgen).__docgenInfo = {\n displayName: \"PageTable\",\n description: \"页面级表格组件,高度铺满容器,自动滚动\",\n props: {\n scrollX: {\n name: \"scrollX\",\n required: false,\n description: \"水平滚动宽度\",\n type: { name: \"number\", raw: \"number\" }\n },\n showPagination: {\n name: \"showPagination\",\n required: false,\n description: \"是否显示分页器\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n defaultPageSize: {\n name: \"defaultPageSize\",\n required: false,\n description: \"默认页面大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"10\" }\n },\n columns: {\n name: \"columns\",\n required: false,\n description: \"表格列配置\",\n type: { name: \"ColumnType[]\", raw: \"ColumnType<any>[]\" }\n },\n dataSource: {\n name: \"dataSource\",\n required: false,\n description: \"数据源\",\n type: { name: \"any[]\", raw: \"any[]\" }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n rowKey: {\n name: \"rowKey\",\n required: false,\n description: \"行数据的 Key\",\n type: { name: \"string | function\", raw: \"string | ((record: any) => string)\" }\n }\n }\n};\n","import React from \"react\";\nimport { createFromIconfontCN } from '@ant-design/icons';\n\nconst IconFont = createFromIconfontCN({\n scriptUrl: ['https://at.alicdn.com/t/c/font_4968458_eh91gfr4j9e.js'],\n});\n\nexport interface XcIconProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** 图标名称 */\n name: string;\n /** 图标大小 */\n size?: number | string;\n /** 图标颜色 */\n color?: string;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<XcIconProps> & { __docgenInfo?: DocgenInfo };\n\n/** 自定义图标组件,基于 iconfont */\nexport const XcIcon: React.FC<XcIconProps> = ({ \n name, \n size, \n color, \n style,\n ...props \n}) => {\n const iconStyle = {\n fontSize: size,\n color,\n ...style,\n };\n\n return (\n <IconFont \n {...props} \n type={name} \n style={iconStyle}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(XcIcon as ComponentWithDocgen).__docgenInfo = {\n displayName: \"XcIcon\",\n description: \"自定义图标组件,基于 iconfont\",\n props: {\n name: {\n name: \"name\",\n required: true,\n description: \"图标名称\",\n type: { name: \"string\", raw: \"string\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"图标大小\",\n type: { name: \"number | string\", raw: \"number | string\" }\n },\n color: {\n name: \"color\",\n required: false,\n description: \"图标颜色\",\n type: { name: \"string\", raw: \"string\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n","import React from \"react\";\nimport { Empty, Flex, Spin } from \"antd\";\n\nexport interface EmptyAndSpinProps {\n /** 是否加载中 */\n loading: boolean;\n /** 空状态描述 */\n description?: React.ReactNode;\n /** 自定义类名 */\n className?: string;\n /** 空状态额外内容 */\n emptyChildren?: React.ReactNode;\n /** 加载中提示文字 */\n loadingText?: string;\n /** 空状态图片 */\n emptyImage?: string;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<EmptyAndSpinProps> & { __docgenInfo?: DocgenInfo };\n\n/** 空状态和加载状态组合组件 */\nexport const EmptyAndSpin: React.FC<EmptyAndSpinProps> = ({ \n loading, \n description = \"暂无数据\", \n className, \n emptyChildren,\n loadingText,\n emptyImage\n}) => {\n if (loading) {\n return (\n <Flex\n className={`pt-10 w-full ${className || ''}`}\n align=\"center\"\n justify=\"center\"\n vertical\n >\n <Spin size=\"large\" />\n {loadingText && <div className=\"mt-4 text-gray-500\">{loadingText}</div>}\n </Flex>\n );\n }\n\n return (\n <Flex\n className={`pt-10 w-full ${className || ''}`}\n align=\"center\"\n justify=\"center\"\n >\n <Empty\n image={emptyImage}\n description={description}\n imageStyle={{ height: 180 }}\n >\n {emptyChildren}\n </Empty>\n </Flex>\n );\n};\n\n// 手动添加 docgen 信息\n(EmptyAndSpin as ComponentWithDocgen).__docgenInfo = {\n displayName: \"EmptyAndSpin\",\n description: \"空状态和加载状态组合组件\",\n props: {\n loading: {\n name: \"loading\",\n required: true,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n description: {\n name: \"description\",\n required: false,\n description: \"空状态描述\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" },\n defaultValue: { value: '\"暂无数据\"' }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n emptyChildren: {\n name: \"emptyChildren\",\n required: false,\n description: \"空状态额外内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n loadingText: {\n name: \"loadingText\",\n required: false,\n description: \"加载中提示文字\",\n type: { name: \"string\", raw: \"string\" }\n },\n emptyImage: {\n name: \"emptyImage\",\n required: false,\n description: \"空状态图片\",\n type: { name: \"string\", raw: \"string\" }\n }\n }\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { LeftOutlined } from '@ant-design/icons';\n\nexport interface BackButtonProps {\n /** 点击事件 */\n onClick?: () => void;\n /** 是否显示文字 */\n showText?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 按钮大小 */\n size?: \"small\" | \"middle\" | \"large\";\n /** 按钮类型 */\n type?: \"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\";\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<BackButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 返回按钮组件 */\nexport const BackButton: React.FC<BackButtonProps> = ({ \n onClick, \n showText = false,\n className,\n size = \"small\",\n type = \"default\"\n}) => {\n return (\n <Button\n size={size}\n type={type}\n icon={<LeftOutlined />}\n className={`cursor-pointer ${className || ''}`}\n onClick={onClick}\n >\n {showText && \"返回\"}\n </Button>\n );\n};\n\n// 手动添加 docgen 信息\n(BackButton as ComponentWithDocgen).__docgenInfo = {\n displayName: \"BackButton\",\n description: \"返回按钮组件\",\n props: {\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n showText: {\n name: \"showText\",\n required: false,\n description: \"是否显示文字\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"按钮大小\",\n type: { name: \"ButtonSize\", raw: '\"small\" | \"middle\" | \"large\"' },\n defaultValue: { value: '\"small\"' }\n },\n type: {\n name: \"type\",\n required: false,\n description: \"按钮类型\",\n type: { name: \"ButtonType\", raw: '\"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\"' },\n defaultValue: { value: '\"default\"' }\n }\n }\n};\n","import React from \"react\";\nimport { Button, type ButtonProps } from \"antd\";\n\nexport interface LinkButtonProps extends ButtonProps {\n /** 是否去除默认内边距 */\n removePadding?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<LinkButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 链接样式按钮组件,适用于表格操作列 */\nexport const LinkButton: React.FC<LinkButtonProps> = ({ \n removePadding = true,\n className,\n ...props \n}) => {\n const linkClassName = removePadding \n ? `px-0 h-auto ${className || ''}` \n : className;\n\n return (\n <Button \n type=\"link\" \n {...props} \n className={linkClassName}\n >\n {props.children}\n </Button>\n );\n};\n\n// 手动添加 docgen 信息\n(LinkButton as ComponentWithDocgen).__docgenInfo = {\n displayName: \"LinkButton\",\n description: \"链接样式按钮组件,适用于表格操作列\",\n props: {\n removePadding: {\n name: \"removePadding\",\n required: false,\n description: \"是否去除默认内边距\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"按钮内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: React.MouseEvent<HTMLButtonElement>) => void\" }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n }\n }\n};\n","import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { Table, Input, Select, Button, Space, Form, Card } from \"antd\";\nimport { SearchOutlined, ReloadOutlined } from \"@ant-design/icons\";\nimport type { TableProps, TablePaginationConfig } from \"antd\";\nimport type { ColumnType } from \"antd/es/table\";\n\nconst { Option } = Select;\n\n// 搜索字段配置\nexport interface SearchFieldConfig {\n /** 字段名 */\n key: string;\n /** 字段标签 */\n label: string;\n /** 搜索类型 */\n type: 'input' | 'select';\n /** 选择器选项(当type为select时使用) */\n options?: Array<{ label: string; value: string | number }>;\n /** 占位符 */\n placeholder?: string;\n /** 默认值 */\n defaultValue?: unknown;\n}\n\n// 列配置扩展\nexport interface AdvancedColumnType<T = Record<string, unknown>> extends ColumnType<T> {\n /** 是否支持排序 */\n sortable?: boolean;\n /** 自定义渲染函数 */\n render?: (value: unknown, record: T, index: number) => React.ReactNode;\n}\n\n// 请求参数\nexport interface RequestParams {\n /** 页码 */\n page: number;\n /** 每页大小 */\n pageSize: number;\n /** 排序字段 */\n sortField?: string;\n /** 排序方向 */\n sortOrder?: 'ascend' | 'descend';\n /** 搜索参数 */\n searchParams?: Record<string, unknown>;\n}\n\n// 请求响应\nexport interface RequestResponse<T = Record<string, unknown>> {\n /** 数据列表 */\n data: T[];\n /** 总数 */\n total: number;\n /** 是否成功 */\n success: boolean;\n /** 错误信息 */\n message?: string;\n}\n\n// 组件属性\nexport interface AdvancedTableProps<T = Record<string, unknown>> extends Omit<TableProps<T>, 'dataSource' | 'loading' | 'pagination'> {\n /** 列配置 */\n columns: AdvancedColumnType<T>[];\n /** 异步请求函数 */\n request?: (params: RequestParams) => Promise<RequestResponse<T>>;\n /** 搜索字段配置 */\n searchFields?: SearchFieldConfig[];\n /** 是否显示搜索区域 */\n showSearch?: boolean;\n /** 是否显示刷新按钮 */\n showRefresh?: boolean;\n /** 默认页面大小 */\n defaultPageSize?: number;\n /** 页面大小选项 */\n pageSizeOptions?: string[];\n /** 是否自动加载 */\n autoLoad?: boolean;\n /** 请求参数(外部控制) */\n externalParams?: Record<string, unknown>;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<AdvancedTableProps> & { __docgenInfo?: DocgenInfo };\n\n/** 高阶表格组件,支持异步请求、搜索、排序等功能 */\nexport const AdvancedTable: React.FC<AdvancedTableProps> = ({\n columns,\n request,\n searchFields = [],\n showSearch = true,\n showRefresh = true,\n defaultPageSize = 10,\n pageSizeOptions = ['10', '20', '50', '100'],\n autoLoad = true,\n externalParams = {},\n ...tableProps\n}) => {\n // 状态管理\n const [dataSource, setDataSource] = useState<Record<string, unknown>[]>([]);\n const [loading, setLoading] = useState(false);\n const [pagination, setPagination] = useState({\n current: 1,\n pageSize: defaultPageSize,\n total: 0,\n });\n const [searchParams, setSearchParams] = useState<Record<string, unknown>>({});\n const [sortInfo, setSortInfo] = useState<{\n field?: string;\n order?: 'ascend' | 'descend';\n }>({});\n\n // 搜索表单\n const [form] = Form.useForm();\n \n // 使用 ref 来避免依赖问题\n const paginationRef = useRef(pagination);\n paginationRef.current = pagination;\n // 使用 ref 来避免 externalParams 的依赖问题\n const externalParamsRef = useRef(externalParams);\n externalParamsRef.current = externalParams;\n\n // 使用 ref 来跟踪是否已经初始化\n const initializedRef = useRef(false);\n\n // 处理列配置\n const processedColumns = useMemo(() => {\n return columns.map((col) => {\n const { sortable, render, ...restCol } = col;\n \n return {\n ...restCol,\n sorter: sortable ? true : undefined,\n render: render || ((value: unknown) => value as React.ReactNode),\n };\n });\n }, [columns]);\n\n // 加载数据\n const loadData = useCallback(async (params: Partial<RequestParams> = {}) => {\n if (!request) return;\n\n setLoading(true);\n try {\n const requestParams: RequestParams = {\n page: paginationRef.current.current,\n pageSize: paginationRef.current.pageSize,\n sortField: sortInfo.field,\n sortOrder: sortInfo.order,\n searchParams: { ...searchParams, ...externalParamsRef.current },\n ...params,\n };\n\n const response = await request(requestParams);\n \n if (response.success) {\n setDataSource(response.data);\n setPagination(prev => ({\n ...prev,\n total: response.total,\n current: requestParams.page || prev.current,\n }));\n }\n } catch (error) {\n console.error('加载数据失败:', error);\n } finally {\n setLoading(false);\n }\n }, [request, sortInfo, searchParams]);\n\n // 搜索处理\n const handleSearch = useCallback((values: Record<string, unknown>) => {\n setSearchParams(values);\n setPagination(prev => ({ ...prev, current: 1 }));\n }, []);\n\n // 重置搜索\n const handleReset = useCallback(() => {\n form.resetFields();\n setSearchParams({});\n setPagination(prev => ({ ...prev, current: 1 }));\n }, [form]);\n\n // 刷新数据\n const handleRefresh = useCallback(() => {\n loadData();\n }, [loadData]);\n\n // 分页变化\n const handleTableChange = useCallback((pagination: TablePaginationConfig, _filters: unknown, sorter: unknown) => {\n const newPagination = {\n current: pagination.current || 1,\n pageSize: pagination.pageSize || defaultPageSize,\n total: pagination.total || 0,\n };\n \n const newSortInfo = {\n field: (sorter as { field?: string })?.field,\n order: (sorter as { order?: 'ascend' | 'descend' })?.order,\n };\n\n setPagination(newPagination);\n setSortInfo(newSortInfo);\n }, [defaultPageSize]);\n\n // 初始加载和外部参数变化时重新加载\n useEffect(() => {\n const hasExternalParams = Object.keys(externalParams).length > 0;\n\n // 如果是自动加载且未初始化,或者是外部参数变化\n if ((autoLoad && !initializedRef.current) || hasExternalParams) {\n loadData();\n initializedRef.current = true;\n }\n }, [autoLoad, externalParams, loadData]);\n\n return (\n <div>\n {/* 搜索区域 */}\n {showSearch && searchFields.length > 0 && (\n <Card size=\"small\" style={{ marginBottom: 16 }}>\n <Form\n form={form}\n layout=\"inline\"\n onFinish={handleSearch}\n initialValues={searchFields.reduce((acc, field) => {\n if (field.defaultValue !== undefined) {\n acc[field.key] = field.defaultValue;\n }\n return acc;\n }, {} as Record<string, unknown>)}\n >\n {searchFields.map((field) => (\n <Form.Item key={field.key} name={field.key} label={field.label}>\n {field.type === 'input' ? (\n <Input\n placeholder={field.placeholder || `请输入${field.label}`}\n style={{ width: 200 }}\n />\n ) : (\n <Select\n placeholder={field.placeholder || `请选择${field.label}`}\n style={{ width: 200 }}\n allowClear\n >\n {field.options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.label}\n </Option>\n ))}\n </Select>\n )}\n </Form.Item>\n ))}\n \n <Form.Item>\n <Space>\n <Button type=\"primary\" htmlType=\"submit\" icon={<SearchOutlined />}>\n 查询\n </Button>\n <Button onClick={handleReset}>重置</Button>\n {showRefresh && (\n <Button icon={<ReloadOutlined />} onClick={handleRefresh}>\n 刷新\n </Button>\n )}\n </Space>\n </Form.Item>\n </Form>\n </Card>\n )}\n\n {/* 表格 */}\n <Table\n {...tableProps}\n columns={processedColumns}\n dataSource={dataSource}\n loading={loading}\n pagination={{\n ...pagination,\n showSizeChanger: true,\n showQuickJumper: true,\n showTotal: (total, range) => `第 ${range[0]}-${range[1]} 条/共 ${total} 条`,\n pageSizeOptions,\n }}\n onChange={handleTableChange}\n scroll={{ x: 'max-content', y: '50vh' }}\n />\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(AdvancedTable as ComponentWithDocgen).__docgenInfo = {\n displayName: \"AdvancedTable\",\n description: \"高阶表格组件,支持异步请求、搜索、排序等功能\",\n props: {\n columns: {\n name: \"columns\",\n required: true,\n description: \"列配置\",\n type: { name: \"AdvancedColumnType[]\", raw: \"AdvancedColumnType<any>[]\" }\n },\n request: {\n name: \"request\",\n required: false,\n description: \"异步请求函数\",\n type: { name: \"function\", raw: \"(params: RequestParams) => Promise<RequestResponse>\" }\n },\n searchFields: {\n name: \"searchFields\",\n required: false,\n description: \"搜索字段配置\",\n type: { name: \"SearchFieldConfig[]\", raw: \"SearchFieldConfig[]\" },\n defaultValue: { value: \"[]\" }\n },\n showSearch: {\n name: \"showSearch\",\n required: false,\n description: \"是否显示搜索区域\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n showRefresh: {\n name: \"showRefresh\",\n required: false,\n description: \"是否显示刷新按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n defaultPageSize: {\n name: \"defaultPageSize\",\n required: false,\n description: \"默认页面大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"10\" }\n },\n pageSizeOptions: {\n name: \"pageSizeOptions\",\n required: false,\n description: \"页面大小选项\",\n type: { name: \"string[]\", raw: \"string[]\" },\n defaultValue: { value: '[\"10\", \"20\", \"50\", \"100\"]' }\n },\n autoLoad: {\n name: \"autoLoad\",\n required: false,\n description: \"是否自动加载\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n externalParams: {\n name: \"externalParams\",\n required: false,\n description: \"外部请求参数\",\n type: { name: \"Record<string, any>\", raw: \"Record<string, any>\" },\n defaultValue: { value: \"{}\" }\n }\n }\n};\n","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { Input } from \"antd\";\n\nexport interface DynamicInputProps {\n /** 动态展示的文案数组 */\n texts: string[];\n /** 输入框占位符 */\n placeholder?: string;\n /** 动画速度(毫秒) */\n animationSpeed?: number;\n /** 是否自动播放动画 */\n autoPlay?: boolean;\n /** 输入框值 */\n value?: string;\n /** 输入框变化回调 */\n onChange?: (value: string) => void;\n /** 其他 Input 属性 */\n [key: string]: unknown;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<DynamicInputProps> & { __docgenInfo?: DocgenInfo };\n\n/** 动态文案输入框组件,支持流式文字动画效果 */\nexport const DynamicInput: React.FC<DynamicInputProps> = ({\n texts = [],\n placeholder = \"请输入内容\",\n animationSpeed = 100,\n autoPlay = true,\n value,\n onChange,\n ...inputProps\n}) => {\n const [currentText, setCurrentText] = useState(\"\");\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isAnimating, setIsAnimating] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isTyping, setIsTyping] = useState(false);\n \n const animationRef = useRef<number | undefined>(undefined);\n const typingRef = useRef<number | undefined>(undefined);\n const textsRef = useRef(texts);\n const currentIndexRef = useRef(currentIndex);\n const isFocusedRef = useRef(isFocused);\n const currentTextRef = useRef(currentText);\n\n // 更新 refs\n useEffect(() => {\n textsRef.current = texts;\n currentIndexRef.current = currentIndex;\n isFocusedRef.current = isFocused;\n currentTextRef.current = currentText;\n });\n\n // 打字机效果\n const typeText = useCallback((text: string, callback?: () => void) => {\n let index = 0;\n setIsTyping(true);\n \n const typeChar = () => {\n if (index < text.length) {\n setCurrentText(text.slice(0, index + 1));\n index++;\n typingRef.current = window.setTimeout(typeChar, animationSpeed);\n } else {\n setIsTyping(false);\n callback?.();\n }\n };\n \n typeChar();\n }, [animationSpeed]);\n\n // 删除文字效果\n const deleteText = useCallback((callback?: () => void) => {\n let index = currentTextRef.current.length;\n \n const deleteChar = () => {\n if (index > 0) {\n setCurrentText(currentTextRef.current.slice(0, index - 1));\n index--;\n typingRef.current = window.setTimeout(deleteChar, animationSpeed / 2);\n } else {\n callback?.();\n }\n };\n \n deleteChar();\n }, [animationSpeed]);\n\n // 循环播放动画\n const playAnimation = useCallback(() => {\n if (textsRef.current.length === 0 || isFocusedRef.current) return;\n \n setIsAnimating(true);\n \n const currentTextItem = textsRef.current[currentIndexRef.current];\n \n // 如果当前有文字,先删除\n if (currentTextRef.current) {\n deleteText(() => {\n // 删除完成后,开始输入新文字\n typeText(currentTextItem, () => {\n // 输入完成后,等待一段时间再继续\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length);\n setIsAnimating(false);\n }, 2000);\n });\n });\n } else {\n // 直接输入新文字\n typeText(currentTextItem, () => {\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length);\n setIsAnimating(false);\n }, 2000);\n });\n }\n }, [deleteText, typeText]);\n\n // 开始动画\n useEffect(() => {\n if (autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n \n return () => {\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n };\n }, [currentIndex, isFocused, autoPlay, texts.length, playAnimation]);\n\n // 当索引变化时重新播放动画\n useEffect(() => {\n if (!isAnimating && autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n }, [currentIndex, isAnimating, autoPlay, texts.length, isFocused, playAnimation]);\n\n // 处理焦点事件\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // 清除所有动画\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n setIsAnimating(false);\n setIsTyping(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n // 如果输入框为空,重新开始动画\n if (!value && texts.length > 0) {\n setCurrentText(\"\");\n setCurrentIndex(0);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onChange?.(e);\n };\n\n // 获取显示的占位符文本\n const getPlaceholderText = () => {\n if (isFocused || value) {\n return placeholder;\n }\n return currentText || placeholder;\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <Input\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(inputProps as any)}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={getPlaceholderText()}\n style={{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(inputProps as any).style,\n position: \"relative\",\n zIndex: 1,\n }}\n />\n \n {/* 动态文字覆盖层 */}\n {!isFocused && !value && currentText && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: 11,\n paddingRight: 11,\n color: \"#bfbfbf\",\n pointerEvents: \"none\",\n zIndex: 2,\n fontSize: 14,\n fontFamily: \"inherit\",\n }}\n >\n <span>{currentText}</span>\n {/* 光标效果 */}\n {isTyping && (\n <span\n style={{\n display: \"inline-block\",\n width: 1,\n height: \"1.2em\",\n backgroundColor: \"#1890ff\",\n marginLeft: 2,\n animation: \"blink 1s infinite\",\n }}\n />\n )}\n </div>\n )}\n \n {/* 添加光标闪烁动画 */}\n <style>\n {`\n @keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `}\n </style>\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(DynamicInput as ComponentWithDocgen).__docgenInfo = {\n displayName: \"DynamicInput\",\n description: \"动态文案输入框组件,支持流式文字动画效果\",\n props: {\n texts: {\n name: \"texts\",\n required: true,\n description: \"动态展示的文案数组\",\n type: { name: \"string[]\", raw: \"string[]\" }\n },\n placeholder: {\n name: \"placeholder\",\n required: false,\n description: \"输入框占位符\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"请输入内容\"' }\n },\n animationSpeed: {\n name: \"animationSpeed\",\n required: false,\n description: \"动画速度(毫秒)\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"100\" }\n },\n autoPlay: {\n name: \"autoPlay\",\n required: false,\n description: \"是否自动播放动画\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n value: {\n name: \"value\",\n required: false,\n description: \"输入框值\",\n type: { name: \"string\", raw: \"string\" }\n },\n onChange: {\n name: \"onChange\",\n required: false,\n description: \"输入框变化回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n }\n }\n};","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { Button } from \"antd\";\nimport { SendOutlined } from \"@ant-design/icons\";\n\n/**\n * DynamicTextArea 组件的属性接口\n * 支持受控和非受控两种模式,具有动态文案动画效果\n */\nexport interface DynamicTextAreaProps {\n /** 动态展示的文案数组,会循环播放打字机效果 */\n texts: string[];\n /** 输入框占位符文本 */\n placeholder?: string;\n /** 打字机动画的速度,单位毫秒,数值越小速度越快 */\n animationSpeed?: number;\n /** 是否自动播放动态文案动画 */\n autoPlay?: boolean;\n /** 输入框的值,用于受控模式 */\n value?: string;\n /** 输入框值变化时的回调函数,用于受控模式 */\n onChange?: (value: string) => void;\n /** 点击提交按钮时的回调函数 */\n onSubmit?: (value: string) => void;\n /** 最大输入字符数限制 */\n maxLength?: number;\n /** 是否在底部显示字数统计 */\n showCount?: boolean;\n /** 提交按钮的文本内容 */\n submitText?: string;\n /** 是否禁用整个组件 */\n disabled?: boolean;\n /** 文本域的行数,影响初始高度 */\n rows?: number;\n /** 自定义样式对象 */\n style?: React.CSSProperties;\n /** 其他原生 textarea 属性 */\n [key: string]: unknown;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<DynamicTextAreaProps> & { __docgenInfo?: DocgenInfo };\n\n/**\n * 动态文案文本域组件\n * \n * 功能特性:\n * 1. 支持受控和非受控两种模式\n * 2. 动态文案打字机效果,循环播放预设文案\n * 3. 内置提交按钮,位于文本框右下角\n * 4. 支持字数限制和字数统计显示\n * 5. 支持键盘快捷键提交(Ctrl+Enter 或 Cmd+Enter)\n * 6. 智能占位符显示,避免与动态文案重叠\n * \n * @param props - 组件属性\n * @returns JSX 元素\n */\nexport const DynamicTextArea: React.FC<DynamicTextAreaProps> = ({\n texts = [], // 动态文案数组,默认为空数组\n placeholder = \"请输入内容\", // 占位符文本\n animationSpeed = 100, // 打字机动画速度,毫秒\n autoPlay = true, // 是否自动播放动画\n value = \"\", // 受控模式的值\n onChange, // 受控模式的变化回调\n onSubmit, // 提交回调\n maxLength = 500, // 最大字符数限制\n showCount = true, // 是否显示字数统计\n submitText = \"发送\", // 提交按钮文本\n disabled = false, // 是否禁用组件\n rows = 4, // 文本域行数\n style, // 自定义样式\n ...otherProps // 其他原生属性\n}) => {\n // ==================== 状态管理 ====================\n \n /** 当前显示的动态文案内容 */\n const [currentText, setCurrentText] = useState(\"\");\n \n /** 当前播放的文案在数组中的索引 */\n const [currentIndex, setCurrentIndex] = useState(0);\n \n /** 是否正在播放动画(用于控制动画循环) */\n const [isAnimating, setIsAnimating] = useState(false);\n \n /** 文本域是否获得焦点 */\n const [isFocused, setIsFocused] = useState(false);\n \n /** 是否正在打字(用于显示光标效果) */\n const [isTyping, setIsTyping] = useState(false);\n \n /** 非受控模式下的内部状态值 */\n const [internalValue, setInternalValue] = useState(value || \"\");\n \n // ==================== Refs 引用 ====================\n \n /** 动画定时器引用,用于清除动画 */\n const animationRef = useRef<number | undefined>(undefined);\n \n /** 打字机效果定时器引用,用于清除打字动画 */\n const typingRef = useRef<number | undefined>(undefined);\n \n /** 文案数组的引用,避免闭包问题 */\n const textsRef = useRef(texts);\n \n /** 当前索引的引用,避免闭包问题 */\n const currentIndexRef = useRef(currentIndex);\n \n /** 焦点状态的引用,避免闭包问题 */\n const isFocusedRef = useRef(isFocused);\n \n /** 当前文案的引用,避免闭包问题 */\n const currentTextRef = useRef(currentText);\n \n /** 文本域 DOM 元素的引用 */\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // ==================== 副作用更新 ====================\n \n /**\n * 更新所有 refs 的值,确保在回调函数中能获取到最新的状态\n * 这是为了避免闭包陷阱,确保动画函数能访问到最新的状态值\n */\n useEffect(() => {\n textsRef.current = texts;\n currentIndexRef.current = currentIndex;\n isFocusedRef.current = isFocused;\n currentTextRef.current = currentText;\n });\n\n // ==================== 动画效果函数 ====================\n \n /**\n * 打字机效果函数\n * 逐字符显示文本,模拟真实的打字过程\n * \n * @param text - 要显示的完整文本\n * @param callback - 打字完成后的回调函数\n */\n const typeText = useCallback((text: string, callback?: () => void) => {\n let index = 0; // 当前显示的字符索引\n setIsTyping(true); // 开始打字状态,显示光标\n \n const typeChar = () => {\n if (index < text.length) {\n // 显示从开始到当前索引的字符\n setCurrentText(text.slice(0, index + 1));\n index++;\n // 设置定时器,继续下一个字符\n typingRef.current = window.setTimeout(typeChar, animationSpeed);\n } else {\n // 打字完成\n setIsTyping(false); // 隐藏光标\n callback?.(); // 执行完成回调\n }\n };\n \n typeChar(); // 开始打字\n }, [animationSpeed]);\n\n /**\n * 删除文字效果函数\n * 逐字符删除文本,模拟删除过程\n * \n * @param callback - 删除完成后的回调函数\n */\n const deleteText = useCallback((callback?: () => void) => {\n let index = currentTextRef.current.length; // 从最后一个字符开始删除\n \n const deleteChar = () => {\n if (index > 0) {\n // 删除一个字符\n setCurrentText(currentTextRef.current.slice(0, index - 1));\n index--;\n // 设置定时器,继续删除下一个字符(删除速度比打字快一倍)\n typingRef.current = window.setTimeout(deleteChar, animationSpeed / 2);\n } else {\n // 删除完成\n callback?.(); // 执行完成回调\n }\n };\n \n deleteChar(); // 开始删除\n }, [animationSpeed]);\n\n /**\n * 循环播放动画函数\n * 控制整个动画流程:删除当前文案 -> 输入新文案 -> 等待 -> 循环\n * \n * 动画流程:\n * 1. 检查是否有文案且未获得焦点\n * 2. 如果有当前文案,先删除\n * 3. 删除完成后,输入新的文案\n * 4. 输入完成后,等待2秒\n * 5. 切换到下一个文案,重新开始循环\n */\n const playAnimation = useCallback(() => {\n // 如果没有文案或已获得焦点,则不播放动画\n if (textsRef.current.length === 0 || isFocusedRef.current) return;\n \n setIsAnimating(true); // 标记正在播放动画\n \n const currentTextItem = textsRef.current[currentIndexRef.current]; // 获取当前要显示的文案\n \n // 如果当前有文案,先删除再输入新文案\n if (currentTextRef.current) {\n deleteText(() => {\n // 删除完成后的回调:开始输入新文案\n typeText(currentTextItem, () => {\n // 输入完成后的回调:等待2秒后切换到下一个文案\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length); // 循环到下一个文案\n setIsAnimating(false); // 标记动画结束\n }, 2000); // 等待2秒\n });\n });\n } else {\n // 如果当前没有文案,直接输入新文案\n typeText(currentTextItem, () => {\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length); // 循环到下一个文案\n setIsAnimating(false); // 标记动画结束\n }, 2000); // 等待2秒\n });\n }\n }, [deleteText, typeText]);\n\n // 开始动画\n useEffect(() => {\n if (autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n \n return () => {\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n };\n }, [currentIndex, isFocused, autoPlay, texts.length, playAnimation]);\n\n // 当索引变化时重新播放动画\n useEffect(() => {\n if (!isAnimating && autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n }, [currentIndex, isAnimating, autoPlay, texts.length, isFocused, playAnimation]);\n\n // 处理焦点事件\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n // 清除所有动画\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n setIsAnimating(false);\n setIsTyping(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(false);\n // 如果输入框为空,重新开始动画\n if (!value && texts.length > 0) {\n setCurrentText(\"\");\n setCurrentIndex(0);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n if (maxLength && newValue.length > maxLength) {\n return; // 超过最大长度时不更新\n }\n \n // 如果是受控模式,调用外部 onChange\n if (onChange) {\n onChange(newValue);\n } else {\n // 非受控模式,更新内部状态\n setInternalValue(newValue);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onChange?.(e);\n };\n\n const handleSubmit = () => {\n const currentValue = onChange ? value : internalValue;\n if (currentValue.trim() && !disabled) {\n onSubmit?.(currentValue);\n // 非受控模式下,提交后清空内部状态\n if (!onChange) {\n setInternalValue(\"\");\n }\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Ctrl+Enter 或 Cmd+Enter 提交\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onKeyDown?.(e);\n };\n\n const currentValue = onChange ? value : internalValue;\n const isSubmitDisabled = disabled || !currentValue.trim() || (maxLength ? currentValue.length > maxLength : false);\n\n return (\n <div style={{ position: \"relative\", ...style }}>\n <div style={{ position: \"relative\" }}>\n <textarea\n ref={textareaRef}\n value={onChange ? value : internalValue}\n onChange={handleChange}\n onFocus={(e) => {\n e.target.style.borderColor = \"#1890ff\";\n e.target.style.boxShadow = \"0 0 0 2px rgba(24, 144, 255, 0.2)\";\n handleFocus(e);\n }}\n onBlur={(e) => {\n e.target.style.borderColor = \"#d9d9d9\";\n e.target.style.boxShadow = \"none\";\n handleBlur(e);\n }}\n onKeyDown={handleKeyDown}\n placeholder={isFocused || currentValue ? placeholder : \"\"} // 只在聚焦或有值时显示 placeholder\n maxLength={maxLength}\n rows={rows}\n disabled={disabled}\n style={{\n width: \"100%\",\n minHeight: `${rows * 24 + 16}px`,\n padding: \"8px 60px 8px 12px\", // 右侧留出按钮空间\n border: \"1px solid #d9d9d9\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n lineHeight: \"1.5\",\n fontFamily: \"inherit\",\n resize: \"vertical\",\n outline: \"none\",\n transition: \"border-color 0.3s, box-shadow 0.3s\",\n backgroundColor: \"#fff\",\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(otherProps as any).style,\n }}\n {...otherProps}\n />\n \n {/* 动态文字覆盖层 - 只在未聚焦且无值时显示 */}\n {!isFocused && !currentValue && currentText && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"flex-start\",\n paddingTop: 8,\n paddingLeft: 12,\n paddingRight: 12,\n color: \"#bfbfbf\",\n pointerEvents: \"none\",\n zIndex: 2,\n fontSize: 14,\n fontFamily: \"inherit\",\n lineHeight: \"1.5\",\n }}\n >\n <span>{currentText}</span>\n {/* 光标效果 */}\n {isTyping && (\n <span\n style={{\n display: \"inline-block\",\n width: 1,\n height: \"1.2em\",\n backgroundColor: \"#1890ff\",\n marginLeft: 2,\n animation: \"blink 1s infinite\",\n }}\n />\n )}\n </div>\n )}\n \n {/* 提交按钮 */}\n <div\n style={{\n position: \"absolute\",\n bottom: 8,\n right: 8,\n zIndex: 3,\n }}\n >\n <Button\n type=\"primary\"\n size=\"small\"\n icon={<SendOutlined />}\n onClick={handleSubmit}\n disabled={isSubmitDisabled}\n style={{\n borderRadius: 6,\n minWidth: 32,\n height: 32,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {submitText}\n </Button>\n </div>\n </div>\n \n {/* 字数统计 */}\n {showCount && (\n <div\n style={{\n marginTop: 4,\n textAlign: \"right\",\n fontSize: \"12px\",\n color: \"#999\",\n }}\n >\n {currentValue.length}/{maxLength}\n </div>\n )}\n \n {/* 添加光标闪烁动画 */}\n <style>\n {`\n @keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `}\n </style>\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(DynamicTextArea as ComponentWithDocgen).__docgenInfo = {\n displayName: \"DynamicTextArea\",\n description: \"动态文案文本域组件,支持流式文字动画效果\",\n props: {\n texts: {\n name: \"texts\",\n required: true,\n description: \"动态展示的文案数组\",\n type: { name: \"string[]\", raw: \"string[]\" }\n },\n placeholder: {\n name: \"placeholder\",\n required: false,\n description: \"输入框占位符\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"请输入内容\"' }\n },\n animationSpeed: {\n name: \"animationSpeed\",\n required: false,\n description: \"动画速度(毫秒)\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"100\" }\n },\n autoPlay: {\n name: \"autoPlay\",\n required: false,\n description: \"是否自动播放动画\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n value: {\n name: \"value\",\n required: false,\n description: \"输入框值\",\n type: { name: \"string\", raw: \"string\" }\n },\n onChange: {\n name: \"onChange\",\n required: false,\n description: \"输入框变化回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n },\n onSubmit: {\n name: \"onSubmit\",\n required: false,\n description: \"提交回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n },\n maxLength: {\n name: \"maxLength\",\n required: false,\n description: \"最大输入字数\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"500\" }\n },\n showCount: {\n name: \"showCount\",\n required: false,\n description: \"是否显示字数统计\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n submitText: {\n name: \"submitText\",\n required: false,\n description: \"提交按钮文本\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"发送\"' }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用提交按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n rows: {\n name: \"rows\",\n required: false,\n description: \"文本域行数\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"4\" }\n }\n }\n};","import React, { useRef, useState, useCallback } from \"react\";\nimport { Card as AntCard, type CardProps as AntCardProps } from \"antd\";\nimport { PlayCircleOutlined, PauseCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.css\";\n\nexport interface VideoCardProps extends Omit<AntCardProps, 'title' | 'children'> {\n /** 视频源地址 */\n src: string;\n /** 视频海报图片 */\n poster?: string;\n /** 卡片宽度 */\n width?: number | string;\n /** 卡片高度 */\n height?: number | string;\n /** 视频宽度 */\n videoWidth?: number | string;\n /** 视频高度 */\n videoHeight?: number | string;\n /** 是否显示播放按钮 */\n showPlayButton?: boolean;\n /** 是否自动播放(鼠标悬浮时) */\n autoPlayOnHover?: boolean;\n /** 点击事件 */\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n /** 视频加载完成事件 */\n onVideoLoaded?: () => void;\n /** 视频播放事件 */\n onVideoPlay?: () => void;\n /** 视频暂停事件 */\n onVideoPause?: () => void;\n /** 视频结束事件 */\n onVideoEnded?: () => void;\n /** 自定义样式类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<VideoCardProps> & { __docgenInfo?: DocgenInfo };\n\n/** 视频卡片组件,支持鼠标悬浮播放控制 */\nexport const VideoCard: React.FC<VideoCardProps> = ({\n src,\n poster,\n width = 300,\n height,\n videoWidth, // 参数保留但不使用,由CSS控制\n videoHeight, // 参数保留但不使用,由CSS控制\n showPlayButton = true,\n autoPlayOnHover = true,\n onClick,\n onVideoLoaded,\n onVideoPlay,\n onVideoPause,\n onVideoEnded,\n className,\n style,\n ...rest\n}) => {\n // 忽略videoWidth和videoHeight,video尺寸完全由CSS控制\n void videoWidth;\n void videoHeight;\n const videoRef = useRef<HTMLVideoElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n\n // 播放视频\n const playVideo = useCallback(() => {\n if (videoRef.current) {\n videoRef.current.play();\n setIsPlaying(true);\n onVideoPlay?.();\n }\n }, [onVideoPlay]);\n\n // 暂停视频\n const pauseVideo = useCallback(() => {\n if (videoRef.current) {\n videoRef.current.pause();\n setIsPlaying(false);\n onVideoPause?.();\n }\n }, [onVideoPause]);\n\n // 切换播放状态\n const togglePlay = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (isPlaying) {\n pauseVideo();\n } else {\n playVideo();\n }\n }, [isPlaying, playVideo, pauseVideo]);\n\n // 鼠标进入\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n if (autoPlayOnHover && !isPlaying) {\n playVideo();\n }\n }, [autoPlayOnHover, isPlaying, playVideo]);\n\n // 鼠标离开\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n if (autoPlayOnHover && isPlaying) {\n pauseVideo();\n }\n }, [autoPlayOnHover, isPlaying, pauseVideo]);\n\n // 视频加载完成\n const handleVideoLoaded = useCallback(() => {\n setIsLoaded(true);\n onVideoLoaded?.();\n }, [onVideoLoaded]);\n\n // 视频播放事件\n const handleVideoPlay = useCallback(() => {\n setIsPlaying(true);\n onVideoPlay?.();\n }, [onVideoPlay]);\n\n // 视频暂停事件\n const handleVideoPause = useCallback(() => {\n setIsPlaying(false);\n onVideoPause?.();\n }, [onVideoPause]);\n\n // 视频结束事件\n const handleVideoEnded = useCallback(() => {\n setIsPlaying(false);\n onVideoEnded?.();\n }, [onVideoEnded]);\n\n // 卡片点击事件\n const handleCardClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n }, [onClick]);\n\n return (\n <AntCard\n {...rest}\n className={`video-card ${className || ''}`}\n style={{\n width,\n height,\n padding: 0,\n overflow: 'hidden',\n cursor: onClick ? 'pointer' : 'default',\n border: 'none',\n borderRadius: 0,\n ...style\n }}\n bordered={false}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleCardClick}\n >\n <div className=\"video-card-container\">\n <video\n ref={videoRef}\n src={src}\n poster={poster}\n preload=\"metadata\"\n onLoadedData={handleVideoLoaded}\n onPlay={handleVideoPlay}\n onPause={handleVideoPause}\n onEnded={handleVideoEnded}\n muted={true}\n loop={true}\n />\n \n {/* 播放/暂停按钮 */}\n {showPlayButton && (\n <div \n className={`video-play-button ${isHovered ? 'hovered' : ''}`}\n onClick={togglePlay}\n >\n {isPlaying ? (\n <PauseCircleOutlined className=\"play-icon\" />\n ) : (\n <PlayCircleOutlined className=\"play-icon\" />\n )}\n </div>\n )}\n\n {/* 加载遮罩 */}\n {!isLoaded && (\n <div className=\"video-loading-mask\">\n <div className=\"loading-spinner\" />\n </div>\n )}\n </div>\n </AntCard>\n );\n};\n\n// 手动添加 docgen 信息\n(VideoCard as ComponentWithDocgen).__docgenInfo = {\n displayName: \"VideoCard\",\n description: \"视频卡片组件,支持鼠标悬浮播放控制\",\n props: {\n src: {\n name: \"src\",\n required: true,\n description: \"视频源地址\",\n type: { name: \"string\", raw: \"string\" }\n },\n poster: {\n name: \"poster\",\n required: false,\n description: \"视频海报图片\",\n type: { name: \"string\", raw: \"string\" }\n },\n width: {\n name: \"width\",\n required: false,\n description: \"卡片宽度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: \"300\" }\n },\n height: {\n name: \"height\",\n required: false,\n description: \"卡片高度\",\n type: { name: \"number | string\", raw: \"number | string\" }\n },\n videoWidth: {\n name: \"videoWidth\",\n required: false,\n description: \"视频宽度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: '\"100%\"' }\n },\n videoHeight: {\n name: \"videoHeight\",\n required: false,\n description: \"视频高度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: '\"100%\"' }\n },\n showPlayButton: {\n name: \"showPlayButton\",\n required: false,\n description: \"是否显示播放按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n autoPlayOnHover: {\n name: \"autoPlayOnHover\",\n required: false,\n description: \"是否自动播放(鼠标悬浮时)\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: React.MouseEvent<HTMLDivElement>) => void\" }\n },\n onVideoLoaded: {\n name: \"onVideoLoaded\",\n required: false,\n description: \"视频加载完成事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoPlay: {\n name: \"onVideoPlay\",\n required: false,\n description: \"视频播放事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoPause: {\n name: \"onVideoPause\",\n required: false,\n description: \"视频暂停事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoEnded: {\n name: \"onVideoEnded\",\n required: false,\n description: \"视频结束事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义样式类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\nimport { VideoCard } from \"../VideoCard\";\nimport \"./index.css\";\n\nexport interface WaterfallItem {\n /** 媒体资源地址 */\n url: string;\n /** 媒体类型,不传则自动根据后缀判断 */\n type?: 'image' | 'video';\n /** 视频海报图(仅视频有效) */\n poster?: string;\n /** 唯一标识 */\n id?: string | number;\n /** 点击回调 */\n onClick?: (item: WaterfallItem) => void;\n}\n\nexport interface WaterfallProps {\n /** 媒体资源数组 */\n items: WaterfallItem[];\n /** 列数(默认会根据屏幕宽度自动响应) */\n columns?: number;\n /** 间隔大小 */\n gap?: number;\n /** 是否启用响应式布局 */\n responsive?: boolean;\n /** 响应式断点配置 */\n breakpoints?: {\n xs?: number; // < 576px\n sm?: number; // >= 576px\n md?: number; // >= 768px\n lg?: number; // >= 992px\n xl?: number; // >= 1200px\n xxl?: number; // >= 1600px\n };\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<WaterfallProps> & { __docgenInfo?: DocgenInfo };\n\n// 判断是否为视频 URL\nconst isVideoUrl = (url: string): boolean => {\n const videoExtensions = ['.mp4', '.webm', '.ogg', '.mov', '.avi', '.wmv', '.flv', '.mkv'];\n return videoExtensions.some(ext => url.toLowerCase().includes(ext));\n};\n\n// 获取媒体类型\nconst getMediaType = (item: WaterfallItem): 'image' | 'video' => {\n if (item.type) return item.type;\n if (isVideoUrl(item.url)) return 'video';\n return 'image';\n};\n\n/** 瀑布流布局组件,支持图片和视频混合展示 */\nexport const Waterfall: React.FC<WaterfallProps> = ({\n items,\n columns,\n gap = 0,\n responsive = true,\n breakpoints = {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n xxl: 6\n },\n className,\n style\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [columnCount, setColumnCount] = useState<number>(columns || breakpoints.md || 3);\n const itemRefs = useRef<Map<string | number, HTMLDivElement>>(new Map());\n\n // 计算当前应该显示的列数\n const calculateColumns = useCallback(() => {\n if (!responsive || columns) {\n return columns || breakpoints.md || 3;\n }\n\n const width = window.innerWidth;\n \n if (width < 576) return breakpoints.xs || 1;\n if (width < 768) return breakpoints.sm || 2;\n if (width < 992) return breakpoints.md || 3;\n if (width < 1200) return breakpoints.lg || 4;\n if (width < 1600) return breakpoints.xl || 5;\n return breakpoints.xxl || 6;\n }, [responsive, columns, breakpoints]);\n\n // 布局计算\n const calculateLayout = useCallback(() => {\n if (!containerRef.current) return;\n\n const cols = columnCount;\n const container = containerRef.current;\n const containerWidth = container.offsetWidth;\n const columnWidth = (containerWidth - gap * (cols - 1)) / cols;\n \n // 初始化每列的高度\n const heights = new Array(cols).fill(0);\n\n // 为每个元素计算位置\n items.forEach((item, index) => {\n const key = item.id || index;\n const element = itemRefs.current.get(key);\n \n if (!element) return;\n\n // 找到最短的列\n const minHeight = Math.min(...heights);\n const columnIndex = heights.indexOf(minHeight);\n\n // 计算位置\n const left = columnIndex * (columnWidth + gap);\n const top = heights[columnIndex];\n\n // 设置元素位置和宽度\n element.style.position = 'absolute';\n element.style.left = `${left}px`;\n element.style.top = `${top}px`;\n element.style.width = `${columnWidth}px`;\n\n // 更新列高度\n heights[columnIndex] += element.offsetHeight + gap;\n });\n\n // 设置容器高度\n const maxHeight = Math.max(...heights);\n container.style.height = `${maxHeight}px`;\n }, [items, columnCount, gap]);\n\n // 处理窗口大小变化\n useEffect(() => {\n const handleResize = () => {\n const newColumns = calculateColumns();\n if (newColumns !== columnCount) {\n setColumnCount(newColumns);\n }\n };\n\n if (responsive) {\n window.addEventListener('resize', handleResize);\n handleResize();\n \n return () => window.removeEventListener('resize', handleResize);\n }\n }, [responsive, calculateColumns, columnCount]);\n\n // 重新计算布局\n useEffect(() => {\n // 等待所有图片和视频加载完成后再计算布局\n const timer = setTimeout(() => {\n calculateLayout();\n }, 100);\n\n return () => clearTimeout(timer);\n }, [items, columnCount, calculateLayout]);\n\n // 图片加载完成后重新计算布局\n const handleImageLoad = useCallback(() => {\n calculateLayout();\n }, [calculateLayout]);\n\n // 处理项目点击\n const handleItemClick = useCallback((item: WaterfallItem) => {\n item.onClick?.(item);\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={`waterfall-container ${className || ''}`}\n style={{\n position: 'relative',\n width: '100%',\n ...style\n }}\n >\n {items.map((item, index) => {\n const key = item.id || index;\n const mediaType = getMediaType(item);\n\n return (\n <div\n key={key}\n ref={el => {\n if (el) {\n itemRefs.current.set(key, el);\n } else {\n itemRefs.current.delete(key);\n }\n }}\n className=\"waterfall-item\"\n >\n {mediaType === 'video' ? (\n <div style={{ width: '100%', position: 'relative', paddingBottom: '56.25%' }}>\n <div style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' }}>\n <VideoCard\n src={item.url}\n poster={item.poster}\n width=\"100%\"\n height=\"100%\"\n onClick={() => handleItemClick(item)}\n onVideoLoaded={handleImageLoad}\n autoPlayOnHover={true}\n showPlayButton={false}\n />\n </div>\n </div>\n ) : (\n <div \n className=\"waterfall-image-wrapper\"\n onClick={() => handleItemClick(item)}\n >\n <img\n src={item.url}\n alt={`瀑布流图片 ${index + 1}`}\n className=\"waterfall-image\"\n onLoad={handleImageLoad}\n onError={handleImageLoad}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(Waterfall as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Waterfall\",\n description: \"瀑布流布局组件,支持图片和视频混合展示\",\n props: {\n items: {\n name: \"items\",\n required: true,\n description: \"媒体资源数组\",\n type: { name: \"WaterfallItem[]\", raw: \"WaterfallItem[]\" }\n },\n columns: {\n name: \"columns\",\n required: false,\n description: \"列数(默认会根据屏幕宽度自动响应)\",\n type: { name: \"number\", raw: \"number\" }\n },\n gap: {\n name: \"gap\",\n required: false,\n description: \"间隔大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"0\" }\n },\n responsive: {\n name: \"responsive\",\n required: false,\n description: \"是否启用响应式布局\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n breakpoints: {\n name: \"breakpoints\",\n required: false,\n description: \"响应式断点配置\",\n type: { name: \"object\", raw: \"{ xs?: number; sm?: number; md?: number; lg?: number; xl?: number; xxl?: number; }\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n\n","import { theme } from 'antd';\n\n// 明亮主题配置\nexport const lightTheme = {\n algorithm: theme.defaultAlgorithm,\n token: {\n // 主色\n colorPrimary: '#3b82f6',\n colorSuccess: '#10b981',\n colorWarning: '#f59e0b',\n colorError: '#ef4444',\n colorInfo: '#3b82f6',\n \n // 背景色\n colorBgBase: '#ffffff',\n colorBgContainer: '#ffffff',\n colorBgElevated: '#ffffff',\n colorBgLayout: '#f8fafc',\n \n // 文字色\n colorTextBase: '#1e293b',\n colorText: '#1e293b',\n colorTextSecondary: '#64748b',\n colorTextTertiary: '#94a3b8',\n colorTextQuaternary: '#cbd5e1',\n \n // 边框色\n colorBorder: '#e2e8f0',\n colorBorderSecondary: '#f1f5f9',\n \n // 阴影\n boxShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n boxShadowSecondary: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n \n // 圆角\n borderRadius: 8,\n borderRadiusLG: 12,\n borderRadiusSM: 6,\n \n // 字体\n fontFamily: 'Inter, system-ui, Arial, sans-serif',\n fontSize: 14,\n fontSizeLG: 16,\n fontSizeSM: 12,\n \n // 间距\n padding: 16,\n paddingLG: 24,\n paddingSM: 12,\n paddingXS: 8,\n \n // 高度\n controlHeight: 32,\n controlHeightLG: 40,\n controlHeightSM: 24,\n },\n components: {\n Button: {\n borderRadius: 8,\n controlHeight: 32,\n fontWeight: 500,\n },\n Card: {\n borderRadiusLG: 12,\n boxShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n },\n Input: {\n borderRadius: 8,\n controlHeight: 32,\n },\n Table: {\n borderRadiusLG: 8,\n headerBg: '#f8fafc',\n headerColor: '#374151',\n },\n },\n};\n\nexport default lightTheme;\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","Button","variant","loading","rest","getAntdType","jsx","AntButton","Card","title","bordered","hoverable","size","AntCard","AppModal","showDefaultFooter","footer","_","OkBtn","CancelBtn","jsxs","Fragment","Modal","PageTable","scrollX","showPagination","defaultPageSize","Table","IconFont","createFromIconfontCN","XcIcon","color","style","iconStyle","EmptyAndSpin","description","className","emptyChildren","loadingText","emptyImage","Flex","Spin","Empty","BackButton","onClick","showText","LeftOutlined","LinkButton","removePadding","linkClassName","Option","Select","AdvancedTable","columns","request","searchFields","showSearch","showRefresh","pageSizeOptions","autoLoad","externalParams","tableProps","dataSource","setDataSource","useState","setLoading","pagination","setPagination","searchParams","setSearchParams","sortInfo","setSortInfo","form","Form","paginationRef","useRef","externalParamsRef","initializedRef","processedColumns","useMemo","col","sortable","render","restCol","loadData","useCallback","params","requestParams","response","prev","error","handleSearch","values","handleReset","handleRefresh","handleTableChange","_filters","sorter","newPagination","newSortInfo","useEffect","hasExternalParams","acc","field","Input","option","Space","SearchOutlined","ReloadOutlined","total","range","DynamicInput","texts","placeholder","animationSpeed","autoPlay","onChange","inputProps","currentText","setCurrentText","currentIndex","setCurrentIndex","isAnimating","setIsAnimating","isFocused","setIsFocused","isTyping","setIsTyping","animationRef","typingRef","textsRef","currentIndexRef","isFocusedRef","currentTextRef","typeText","text","callback","index","typeChar","deleteText","deleteChar","playAnimation","currentTextItem","handleFocus","e","handleBlur","handleChange","getPlaceholderText","DynamicTextArea","onSubmit","maxLength","showCount","submitText","disabled","rows","otherProps","internalValue","setInternalValue","textareaRef","newValue","handleSubmit","currentValue","handleKeyDown","isSubmitDisabled","SendOutlined","VideoCard","src","poster","width","height","videoWidth","videoHeight","showPlayButton","autoPlayOnHover","onVideoLoaded","onVideoPlay","onVideoPause","onVideoEnded","videoRef","isPlaying","setIsPlaying","isHovered","setIsHovered","isLoaded","setIsLoaded","playVideo","pauseVideo","togglePlay","handleMouseEnter","handleMouseLeave","handleVideoLoaded","handleVideoPlay","handleVideoPause","handleVideoEnded","handleCardClick","event","PauseCircleOutlined","PlayCircleOutlined","isVideoUrl","url","ext","getMediaType","item","Waterfall","items","gap","responsive","breakpoints","containerRef","columnCount","setColumnCount","itemRefs","calculateColumns","calculateLayout","cols","container","columnWidth","heights","element","minHeight","columnIndex","left","top","maxHeight","handleResize","newColumns","timer","handleImageLoad","handleItemClick","mediaType","el","lightTheme","theme"],"mappings":";;;;;;;;;;;;;;;;;AAWA,MAAIA,IAAqB,OAAO,IAAI,4BAA4B,GAC9DC,IAAsB,OAAO,IAAI,gBAAgB;AACnD,WAASC,EAAQC,GAAMC,GAAQC,GAAU;AACvC,QAAIC,IAAM;AAGV,QAFWD,MAAX,WAAwBC,IAAM,KAAKD,IACxBD,EAAO,QAAlB,WAA0BE,IAAM,KAAKF,EAAO,MACxC,SAASA,GAAQ;AACnB,MAAAC,IAAW,CAAA;AACX,eAASE,KAAYH;AACnB,QAAUG,MAAV,UAAuBF,EAASE,CAAQ,IAAIH,EAAOG,CAAQ;AAAA,IACjE,MAAS,CAAAF,IAAWD;AAClB,WAAAA,IAASC,EAAS,KACX;AAAA,MACL,UAAUL;AAAA,MACV,MAAMG;AAAA,MACN,KAAKG;AAAA,MACL,KAAgBF,MAAX,SAAoBA,IAAS;AAAA,MAClC,OAAOC;AAAA;EAEX;AACA,SAAAG,EAAA,WAAmBP,GACnBO,EAAA,MAAcN,GACdM,EAAA,OAAeN;;;;;;;;;;;;;;wBCtBE,QAAQ,IAAI,aAA7B,gBACG,WAAY;AACX,aAASO,EAAyBN,GAAM;AACtC,UAAYA,KAAR,KAAc,QAAO;AACzB,UAAmB,OAAOA,KAAtB;AACF,eAAOA,EAAK,aAAaO,IACrB,OACAP,EAAK,eAAeA,EAAK,QAAQ;AACvC,UAAiB,OAAOA,KAApB,SAA0B,QAAOA;AACrC,cAAQA,GAAI;AAAA,QACV,KAAKF;AACH,iBAAO;AAAA,QACT,KAAKU;AACH,iBAAO;AAAA,QACT,KAAKC;AACH,iBAAO;AAAA,QACT,KAAKC;AACH,iBAAO;AAAA,QACT,KAAKC;AACH,iBAAO;AAAA,QACT,KAAKC;AACH,iBAAO;AAAA,MACjB;AACM,UAAiB,OAAOZ,KAApB;AACF,gBACgB,OAAOA,EAAK,OAAzB,YACC,QAAQ;AAAA,UACN;AAAA,WAEJA,EAAK,UACf;AAAA,UACU,KAAKa;AACH,mBAAO;AAAA,UACT,KAAKC;AACH,oBAAQd,EAAK,eAAe,aAAa;AAAA,UAC3C,KAAKe;AACH,oBAAQf,EAAK,SAAS,eAAe,aAAa;AAAA,UACpD,KAAKgB;AACH,gBAAIC,IAAYjB,EAAK;AACrB,mBAAAA,IAAOA,EAAK,aACZA,MACIA,IAAOiB,EAAU,eAAeA,EAAU,QAAQ,IACnDjB,IAAcA,MAAP,KAAc,gBAAgBA,IAAO,MAAM,eAC9CA;AAAA,UACT,KAAKkB;AACH,mBACGD,IAAYjB,EAAK,eAAe,MACxBiB,MAAT,OACIA,IACAX,EAAyBN,EAAK,IAAI,KAAK;AAAA,UAE/C,KAAKmB;AACH,YAAAF,IAAYjB,EAAK,UACjBA,IAAOA,EAAK;AACZ,gBAAI;AACF,qBAAOM,EAAyBN,EAAKiB,CAAS,CAAC;AAAA,YAC7D,QAAwB;AAAA,YAAA;AAAA,QACxB;AACM,aAAO;AAAA,IACb;AACI,aAASG,EAAmBC,GAAO;AACjC,aAAO,KAAKA;AAAA,IAClB;AACI,aAASC,EAAuBD,GAAO;AACrC,UAAI;AACF,QAAAD,EAAmBC,CAAK;AACxB,YAAIE,IAA2B;AAAA,MACvC,QAAkB;AACV,QAAAA,IAA2B;AAAA,MACnC;AACM,UAAIA,GAA0B;AAC5B,QAAAA,IAA2B;AAC3B,YAAIC,IAAwBD,EAAyB,OACjDE,IACc,OAAO,UAAtB,cACC,OAAO,eACPJ,EAAM,OAAO,WAAW,KAC1BA,EAAM,YAAY,QAClB;AACF,eAAAG,EAAsB;AAAA,UACpBD;AAAA,UACA;AAAA,UACAE;AAAA,WAEKL,EAAmBC,CAAK;AAAA,MACvC;AAAA,IACA;AACI,aAASK,EAAY1B,GAAM;AACzB,UAAIA,MAASF,EAAqB,QAAO;AACzC,UACe,OAAOE,KAApB,YACSA,MAAT,QACAA,EAAK,aAAamB;AAElB,eAAO;AACT,UAAI;AACF,YAAIQ,IAAOrB,EAAyBN,CAAI;AACxC,eAAO2B,IAAO,MAAMA,IAAO,MAAM;AAAA,MACzC,QAAkB;AACV,eAAO;AAAA,MACf;AAAA,IACA;AACI,aAASC,IAAW;AAClB,UAAIC,IAAaC,EAAqB;AACtC,aAAgBD,MAAT,OAAsB,OAAOA,EAAW,SAAQ;AAAA,IAC7D;AACI,aAASE,IAAe;AACtB,aAAO,MAAM,uBAAuB;AAAA,IAC1C;AACI,aAASC,EAAY/B,GAAQ;AAC3B,UAAIgC,EAAe,KAAKhC,GAAQ,KAAK,GAAG;AACtC,YAAIiC,IAAS,OAAO,yBAAyBjC,GAAQ,KAAK,EAAE;AAC5D,YAAIiC,KAAUA,EAAO,eAAgB,QAAO;AAAA,MACpD;AACM,aAAkBjC,EAAO,QAAlB;AAAA,IACb;AACI,aAASkC,EAA2BC,GAAOC,GAAa;AACtD,eAASC,IAAwB;AAC/B,QAAAC,MACIA,IAA6B,IAC/B,QAAQ;AAAA,UACN;AAAA,UACAF;AAAA,QACZ;AAAA,MACA;AACM,MAAAC,EAAsB,iBAAiB,IACvC,OAAO,eAAeF,GAAO,OAAO;AAAA,QAClC,KAAKE;AAAA,QACL,cAAc;AAAA,MACtB,CAAO;AAAA,IACP;AACI,aAASE,IAAyC;AAChD,UAAIC,IAAgBnC,EAAyB,KAAK,IAAI;AACtD,aAAAoC,EAAuBD,CAAa,MAChCC,EAAuBD,CAAa,IAAI,IAC1C,QAAQ;AAAA,QACN;AAAA,MACV,IACMA,IAAgB,KAAK,MAAM,KACTA,MAAX,SAA2BA,IAAgB;AAAA,IACxD;AACI,aAASE,EACP3C,GACAG,GACAyC,GACAC,GACAC,GACAV,GACAW,GACAC,GACA;AACA,aAAAJ,IAAOR,EAAM,KACbpC,IAAO;AAAA,QACL,UAAUH;AAAA,QACV,MAAMG;AAAA,QACN,KAAKG;AAAA,QACL,OAAOiC;AAAA,QACP,QAAQU;AAAA,UAEWF,MAAX,SAAkBA,IAAO,UAAnC,OACI,OAAO,eAAe5C,GAAM,OAAO;AAAA,QACjC,YAAY;AAAA,QACZ,KAAKwC;AAAA,OACN,IACD,OAAO,eAAexC,GAAM,OAAO,EAAE,YAAY,IAAI,OAAO,MAAM,GACtEA,EAAK,SAAS,CAAA,GACd,OAAO,eAAeA,EAAK,QAAQ,aAAa;AAAA,QAC9C,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACf,CAAO,GACD,OAAO,eAAeA,GAAM,cAAc;AAAA,QACxC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,MACf,CAAO,GACD,OAAO,eAAeA,GAAM,eAAe;AAAA,QACzC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO+C;AAAA,MACf,CAAO,GACD,OAAO,eAAe/C,GAAM,cAAc;AAAA,QACxC,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAOgD;AAAA,MACf,CAAO,GACD,OAAO,WAAW,OAAO,OAAOhD,EAAK,KAAK,GAAG,OAAO,OAAOA,CAAI,IACxDA;AAAA,IACb;AACI,aAASiD,EACPjD,GACAC,GACAC,GACAgD,GACAL,GACAD,GACAG,GACAC,GACA;AACA,UAAIG,IAAWlD,EAAO;AACtB,UAAekD,MAAX;AACF,YAAID;AACF,cAAIE,EAAYD,CAAQ,GAAG;AACzB,iBACED,IAAmB,GACnBA,IAAmBC,EAAS,QAC5BD;AAEA,cAAAG,EAAkBF,EAASD,CAAgB,CAAC;AAC9C,mBAAO,UAAU,OAAO,OAAOC,CAAQ;AAAA,UACnD;AACY,oBAAQ;AAAA,cACN;AAAA;YAED,CAAAE,EAAkBF,CAAQ;AACjC,UAAIlB,EAAe,KAAKhC,GAAQ,KAAK,GAAG;AACtC,QAAAkD,IAAW7C,EAAyBN,CAAI;AACxC,YAAIsD,IAAO,OAAO,KAAKrD,CAAM,EAAE,OAAO,SAAUsD,IAAG;AACjD,iBAAiBA,OAAV;AAAA,QACjB,CAAS;AACD,QAAAL,IACE,IAAII,EAAK,SACL,oBAAoBA,EAAK,KAAK,SAAS,IAAI,WAC3C,kBACNE,EAAsBL,IAAWD,CAAgB,MAC7CI,IACA,IAAIA,EAAK,SAAS,MAAMA,EAAK,KAAK,SAAS,IAAI,WAAW,MAC5D,QAAQ;AAAA,UACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UACAJ;AAAA,UACAC;AAAA,UACAG;AAAA,UACAH;AAAA,WAEDK,EAAsBL,IAAWD,CAAgB,IAAI;AAAA,MAChE;AAMM,UALAC,IAAW,MACAjD,MAAX,WACGoB,EAAuBpB,CAAQ,GAAIiD,IAAW,KAAKjD,IACtD8B,EAAY/B,CAAM,MACfqB,EAAuBrB,EAAO,GAAG,GAAIkD,IAAW,KAAKlD,EAAO,MAC3D,SAASA,GAAQ;AACnB,QAAAC,IAAW,CAAA;AACX,iBAASE,KAAYH;AACnB,UAAUG,MAAV,UAAuBF,EAASE,CAAQ,IAAIH,EAAOG,CAAQ;AAAA,MACrE,MAAa,CAAAF,IAAWD;AAClB,aAAAkD,KACEhB;AAAA,QACEjC;AAAA,QACe,OAAOF,KAAtB,aACIA,EAAK,eAAeA,EAAK,QAAQ,YACjCA;AAAA,SAED2C;AAAA,QACL3C;AAAA,QACAmD;AAAA,QACAP;AAAA,QACAC;AAAA,QACAjB,EAAQ;AAAA,QACR1B;AAAA,QACA6C;AAAA,QACAC;AAAA;IAER;AACI,aAASK,EAAkBI,GAAM;AAC/B,MAAa,OAAOA,KAApB,YACWA,MAAT,QACAA,EAAK,aAAa5D,KAClB4D,EAAK,WACJA,EAAK,OAAO,YAAY;AAAA,IACjC;AACI,QAAIC,IAAQC,IACV9D,IAAqB,OAAO,IAAI,4BAA4B,GAC5DgB,IAAoB,OAAO,IAAI,cAAc,GAC7Cf,IAAsB,OAAO,IAAI,gBAAgB,GACjDW,IAAyB,OAAO,IAAI,mBAAmB,GACvDD,IAAsB,OAAO,IAAI,gBAAgB,GAE/CO,IAAsB,OAAO,IAAI,gBAAgB,GACnDD,IAAqB,OAAO,IAAI,eAAe,GAC/CE,IAAyB,OAAO,IAAI,mBAAmB,GACvDN,IAAsB,OAAO,IAAI,gBAAgB,GACjDC,IAA2B,OAAO,IAAI,qBAAqB,GAC3DO,IAAkB,OAAO,IAAI,YAAY,GACzCC,IAAkB,OAAO,IAAI,YAAY,GACzCP,IAAsB,OAAO,IAAI,gBAAgB,GACjDL,IAAyB,OAAO,IAAI,wBAAwB,GAC5DuB,IACE4B,EAAM,iEACRzB,IAAiB,OAAO,UAAU,gBAClCmB,IAAc,MAAM,SACpBQ,IAAa,QAAQ,aACjB,QAAQ,aACR,WAAY;AACV,aAAO;AAAA,IACnB;AACI,IAAAF,IAAQ;AAAA,MACN,0BAA0B,SAAUG,GAAmB;AACrD,eAAOA,EAAiB;AAAA,MAChC;AAAA;AAEI,QAAItB,GACAG,IAAyB,CAAA,GACzBoB,IAAyBJ,EAAM,yBAAyB;AAAA,MAC1DA;AAAA,MACA3B;AAAA,IACN,EAAK,GACGgC,IAAwBH,EAAWlC,EAAYK,CAAY,CAAC,GAC5DyB,IAAwB,CAAA;AAC5B,IAAAQ,GAAA,WAAmBlE,GACnBkE,GAAA,MAAc,SAAUhE,GAAMC,GAAQC,GAAU2C,GAAQD,GAAM;AAC5D,UAAIqB,IACF,MAAMnC,EAAqB;AAC7B,aAAOmB;AAAA,QACLjD;AAAA,QACAC;AAAA,QACAC;AAAA,QACA;AAAA,QACA2C;AAAA,QACAD;AAAA,QACAqB,IACI,MAAM,uBAAuB,IAC7BH;AAAA,QACJG,IAAmBL,EAAWlC,EAAY1B,CAAI,CAAC,IAAI+D;AAAA;IAE3D,GACIC,GAAA,OAAe,SAAUhE,GAAMC,GAAQC,GAAU2C,GAAQD,GAAM;AAC7D,UAAIqB,IACF,MAAMnC,EAAqB;AAC7B,aAAOmB;AAAA,QACLjD;AAAA,QACAC;AAAA,QACAC;AAAA,QACA;AAAA,QACA2C;AAAA,QACAD;AAAA,QACAqB,IACI,MAAM,uBAAuB,IAC7BH;AAAA,QACJG,IAAmBL,EAAWlC,EAAY1B,CAAI,CAAC,IAAI+D;AAAA;IAE3D;AAAA,EACA,EAAG;;;;wBCnWC,QAAQ,IAAI,aAAa,eAC3BG,GAAA,UAAiBP,GAAA,IAEjBO,GAAA,UAAiBC,GAAA;;;ACsBZ,MAAMC,KAAgC,CAAC;AAAA,EAC5C,SAAAC,IAAU;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,UAAAnB;AAAA,EACA,GAAGoB;AACL,MAAM;AAEJ,QAAMC,IAAc,CAACH,MAAmD;AACtE,YAAQA,GAAAA;AAAAA,MACN,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAEA,SACEI,gBAAAA,EAAAA;AAAAA,IAACC;AAAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,MAAMC,EAAYH,CAAO;AAAA,MACzB,SAAAC;AAAA,MACA,OAAOD,MAAY;AAAA,MAElB,UAAAlB;AAAA,IAAA;AAAA,EAAA;AAGP;AAGCiB,GAA+B,eAAe;AAAA,EAC7C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,iBAAiB,KAAK,mDAAA;AAAA,MACpC,cAAc,EAAE,OAAO,YAAA;AAAA,IAAY;AAAA,IAErC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,QAAA;AAAA,IAAQ;AAAA,IAEjC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,cAAc,KAAK,+BAAA;AAAA,IAA+B;AAAA,IAElE,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,8BAAA;AAAA,IAA8B;AAAA,EAC/D;AAEJ;AC5EO,MAAMO,KAA4B,CAAC;AAAA,EACxC,OAAAC;AAAA,EACA,UAAAzB;AAAA,EACA,UAAA0B,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,GAAGR;AACL,MACEE,gBAAAA,EAAAA;AAAAA,EAACO;AAAAA,EAAA;AAAA,IACE,GAAGT;AAAA,IACJ,OAAAK;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC;AAAA,IAEC,UAAA5B;AAAA,EAAA;AACH;AAIDwB,GAA6B,eAAe;AAAA,EAC3C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,QAAA;AAAA,IAAQ;AAAA,IAEjC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,sBAAA;AAAA,MAC/B,cAAc,EAAE,OAAO,YAAA;AAAA,IAAY;AAAA,IAErC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,eAAe,KAAK,oBAAA;AAAA,IAAoB;AAAA,EACxD;AAEJ;AC9EO,MAAMM,KAAoC,CAAC;AAAA,EAChD,mBAAAC,IAAoB;AAAA,EACpB,GAAG9C;AACL,MAAM;AACJ,QAAM+C,IAAS/C,EAAM,WAAW,SAC5BA,EAAM,SACN8C,IACE,CAACE,GAAoB,EAAE,OAAAC,GAAO,WAAAC,EAAA,MAC5BC,gBAAAA,EAAAA,KAAAC,EAAAA,UAAA,EACE,UAAA;AAAA,IAAAf,gBAAAA,EAAAA,IAACY,GAAA,EAAM;AAAA,0BACNC,GAAA,CAAA,CAAU;AAAA,EAAA,EAAA,CACb,IAEF;AAEN,SACEb,gBAAAA,EAAAA;AAAAA,IAACgB;AAAA,IAAA;AAAA,MACE,GAAGrD;AAAA,MACJ,QAAA+C;AAAA,IAAA;AAAA,EAAA;AAGN;AAGCF,GAAiC,eAAe;AAAA,EAC/C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,6CAAA;AAAA,IAA6C;AAAA,IAE9E,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,6CAAA;AAAA,IAA6C;AAAA,IAE9E,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAE1D,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,EAC1C;AAEJ;AChFO,MAAMS,KAAsC,CAAC;AAAA,EAClD,SAAAC;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,iBAAAC,IAAkB;AAAA,EAClB,GAAGzD;AACL,MAEIqC,gBAAAA,EAAAA;AAAAA,EAACqB;AAAA,EAAA;AAAA,IACE,GAAG1D;AAAA,IACJ,QAAQ;AAAA,MACN,GAAGuD,KAAW;AAAA,MACd,GAAG;AAAA,IAAA;AAAA,IAEL,YAAYC,IAAiB;AAAA,MAC3B,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,iBAAAC;AAAA,MACA,GAAGzD,EAAM;AAAA,IAAA,IACP;AAAA,EAAA;AAAA;AAMTsD,GAAkC,eAAe;AAAA,EAChD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,KAAA;AAAA,IAAK;AAAA,IAE9B,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,gBAAgB,KAAK,oBAAA;AAAA,IAAoB;AAAA,IAEzD,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,SAAS,KAAK,QAAA;AAAA,IAAQ;AAAA,IAEtC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,qBAAqB,KAAK,qCAAA;AAAA,IAAqC;AAAA,EAC/E;AAEJ;AClGA,MAAMK,KAAWC,GAAqB;AAAA,EACpC,WAAW,CAAC,uDAAuD;AACrE,CAAC,GA0BYC,KAAgC,CAAC;AAAA,EAC5C,MAAAtE;AAAA,EACA,MAAAoD;AAAA,EACA,OAAAmB;AAAA,EACA,OAAAC;AAAA,EACA,GAAG/D;AACL,MAAM;AACJ,QAAMgE,IAAY;AAAA,IAChB,UAAUrB;AAAA,IACV,OAAAmB;AAAA,IACA,GAAGC;AAAA,EAAA;AAGL,SACE1B,gBAAAA,EAAAA;AAAAA,IAACsB;AAAA,IAAA;AAAA,MACE,GAAG3D;AAAA,MACJ,MAAMT;AAAA,MACN,OAAOyE;AAAA,IAAA;AAAA,EAAA;AAGb;AAGCH,GAA+B,eAAe;AAAA,EAC7C,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAE1D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,iBAAiB,KAAK,sBAAA;AAAA,IAAsB;AAAA,EAC5D;AAEJ;ACxDO,MAAMI,KAA4C,CAAC;AAAA,EACxD,SAAA/B;AAAA,EACA,aAAAgC,IAAc;AAAA,EACd,WAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AACF,MACMpC,IAEAiB,gBAAAA,EAAAA;AAAAA,EAACoB;AAAA,EAAA;AAAA,IACC,WAAW,gBAAgBJ,KAAa,EAAE;AAAA,IAC1C,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,UAAQ;AAAA,IAER,UAAA;AAAA,MAAA9B,gBAAAA,EAAAA,IAACmC,IAAA,EAAK,MAAK,QAAA,CAAQ;AAAA,MAClBH,KAAehC,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sBAAsB,UAAAgC,EAAA,CAAY;AAAA,IAAA;AAAA,EAAA;AAAA,IAMrEhC,gBAAAA,EAAAA;AAAAA,EAACkC;AAAA,EAAA;AAAA,IACC,WAAW,gBAAgBJ,KAAa,EAAE;AAAA,IAC1C,OAAM;AAAA,IACN,SAAQ;AAAA,IAER,UAAA9B,gBAAAA,EAAAA;AAAAA,MAACoC;AAAA,MAAA;AAAA,QACC,OAAOH;AAAA,QACP,aAAAJ;AAAA,QACA,YAAY,EAAE,QAAQ,IAAA;AAAA,QAErB,UAAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA;AAMLH,GAAqC,eAAe;AAAA,EACnD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,MAChC,cAAc,EAAE,OAAO,SAAA;AAAA,IAAS;AAAA,IAElC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,EACxC;AAEJ;ACnFO,MAAMS,KAAwC,CAAC;AAAA,EACpD,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAT;AAAA,EACA,MAAAxB,IAAO;AAAA,EACP,MAAA/E,IAAO;AACT,MAEIyE,gBAAAA,EAAAA;AAAAA,EAACL;AAAAA,EAAA;AAAA,IACC,MAAAW;AAAA,IACA,MAAA/E;AAAA,IACA,4BAAOiH,IAAA,EAAa;AAAA,IACpB,WAAW,kBAAkBV,KAAa,EAAE;AAAA,IAC5C,SAAAQ;AAAA,IAEC,UAAAC,KAAY;AAAA,EAAA;AAAA;AAMlBF,GAAmC,eAAe;AAAA,EACjD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,aAAA;AAAA,IAAa;AAAA,IAE9C,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,QAAA;AAAA,IAAQ;AAAA,IAEjC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,cAAc,KAAK,+BAAA;AAAA,MACjC,cAAc,EAAE,OAAO,UAAA;AAAA,IAAU;AAAA,IAEnC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,cAAc,KAAK,qDAAA;AAAA,MACjC,cAAc,EAAE,OAAO,YAAA;AAAA,IAAY;AAAA,EACrC;AAEJ;ACpEO,MAAMI,KAAwC,CAAC;AAAA,EACpD,eAAAC,IAAgB;AAAA,EAChB,WAAAZ;AAAA,EACA,GAAGnE;AACL,MAAM;AACJ,QAAMgF,IAAgBD,IAClB,eAAeZ,KAAa,EAAE,KAC9BA;AAEJ,SACE9B,gBAAAA,EAAAA;AAAAA,IAACL;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACJ,GAAGhC;AAAA,MACJ,WAAWgF;AAAA,MAEV,UAAAhF,EAAM;AAAA,IAAA;AAAA,EAAA;AAGb;AAGC8E,GAAmC,eAAe;AAAA,EACjD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,aAAa,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAEpD,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,uDAAA;AAAA,IAAuD;AAAA,IAExF,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,IAAU;AAAA,IAE1C,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,EACxC;AAEJ;AC1EA,MAAM,EAAE,QAAAG,OAAWC,IAyFNC,KAA8C,CAAC;AAAA,EAC1D,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC,IAAe,CAAA;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,EACd,iBAAA/B,IAAkB;AAAA,EAClB,iBAAAgC,IAAkB,CAAC,MAAM,MAAM,MAAM,KAAK;AAAA,EAC1C,UAAAC,IAAW;AAAA,EACX,gBAAAC,IAAiB,CAAA;AAAA,EACjB,GAAGC;AACL,MAAM;AAEJ,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAoC,CAAA,CAAE,GACpE,CAAC7D,GAAS8D,CAAU,IAAID,EAAS,EAAK,GACtC,CAACE,GAAYC,CAAa,IAAIH,EAAS;AAAA,IAC3C,SAAS;AAAA,IACT,UAAUtC;AAAA,IACV,OAAO;AAAA,EAAA,CACR,GACK,CAAC0C,GAAcC,CAAe,IAAIL,EAAkC,CAAA,CAAE,GACtE,CAACM,GAAUC,CAAW,IAAIP,EAG7B,CAAA,CAAE,GAGC,CAACQ,CAAI,IAAIC,GAAK,QAAA,GAGdC,IAAgBC,EAAOT,CAAU;AACvC,EAAAQ,EAAc,UAAUR;AAExB,QAAMU,IAAoBD,EAAOf,CAAc;AAC/C,EAAAgB,EAAkB,UAAUhB;AAG5B,QAAMiB,IAAiBF,EAAO,EAAK,GAG7BG,IAAmBC,GAAQ,MACxB1B,EAAQ,IAAI,CAAC2B,MAAQ;AAC1B,UAAM,EAAE,UAAAC,GAAU,QAAAC,GAAQ,GAAGC,MAAYH;AAEzC,WAAO;AAAA,MACL,GAAGG;AAAA,MACH,QAAQF,IAAW,KAAO;AAAA,MAC1B,QAAQC,MAAW,CAAChI,MAAmBA;AAAA,IAAA;AAAA,EAE3C,CAAC,GACA,CAACmG,CAAO,CAAC,GAGN+B,IAAWC,EAAY,OAAOC,IAAiC,CAAA,MAAO;AAC1E,QAAKhC,GAEL;AAAA,MAAAW,EAAW,EAAI;AACf,UAAI;AACF,cAAMsB,IAA+B;AAAA,UACnC,MAAMb,EAAc,QAAQ;AAAA,UAC5B,UAAUA,EAAc,QAAQ;AAAA,UAChC,WAAWJ,EAAS;AAAA,UACpB,WAAWA,EAAS;AAAA,UACpB,cAAc,EAAE,GAAGF,GAAc,GAAGQ,EAAkB,QAAA;AAAA,UACtD,GAAGU;AAAA,QAAA,GAGCE,IAAW,MAAMlC,EAAQiC,CAAa;AAE5C,QAAIC,EAAS,YACXzB,EAAcyB,EAAS,IAAI,GAC3BrB,EAAc,CAAAsB,OAAS;AAAA,UACrB,GAAGA;AAAA,UACH,OAAOD,EAAS;AAAA,UAChB,SAASD,EAAc,QAAQE,EAAK;AAAA,QAAA,EACpC;AAAA,MAEN,SAASC,GAAO;AACd,gBAAQ,MAAM,WAAWA,CAAK;AAAA,MAChC,UAAA;AACE,QAAAzB,EAAW,EAAK;AAAA,MAClB;AAAA;AAAA,EACF,GAAG,CAACX,GAASgB,GAAUF,CAAY,CAAC,GAG9BuB,IAAeN,EAAY,CAACO,MAAoC;AACpE,IAAAvB,EAAgBuB,CAAM,GACtBzB,EAAc,QAAS,EAAE,GAAGsB,GAAM,SAAS,IAAI;AAAA,EACjD,GAAG,CAAA,CAAE,GAGCI,IAAcR,EAAY,MAAM;AACpC,IAAAb,EAAK,YAAA,GACLH,EAAgB,CAAA,CAAE,GAClBF,EAAc,QAAS,EAAE,GAAGsB,GAAM,SAAS,IAAI;AAAA,EACjD,GAAG,CAACjB,CAAI,CAAC,GAGHsB,IAAgBT,EAAY,MAAM;AACtC,IAAAD,EAAA;AAAA,EACF,GAAG,CAACA,CAAQ,CAAC,GAGPW,IAAoBV,EAAY,CAACnB,GAAmC8B,GAAmBC,MAAoB;AAC/G,UAAMC,IAAgB;AAAA,MACpB,SAAShC,EAAW,WAAW;AAAA,MAC/B,UAAUA,EAAW,YAAYxC;AAAA,MACjC,OAAOwC,EAAW,SAAS;AAAA,IAAA,GAGvBiC,IAAc;AAAA,MAClB,OAAQF,GAA+B;AAAA,MACvC,OAAQA,GAA6C;AAAA,IAAA;AAGvD,IAAA9B,EAAc+B,CAAa,GAC3B3B,EAAY4B,CAAW;AAAA,EACzB,GAAG,CAACzE,CAAe,CAAC;AAGpB,SAAA0E,EAAU,MAAM;AACd,UAAMC,IAAoB,OAAO,KAAKzC,CAAc,EAAE,SAAS;AAG/D,KAAKD,KAAY,CAACkB,EAAe,WAAYwB,OAC3CjB,EAAA,GACAP,EAAe,UAAU;AAAA,EAE7B,GAAG,CAAClB,GAAUC,GAAgBwB,CAAQ,CAAC,0BAGpC,OAAA,EAEE,UAAA;AAAA,IAAA5B,KAAcD,EAAa,SAAS,KACnCjD,gBAAAA,EAAAA,IAACE,IAAA,EAAK,MAAK,SAAQ,OAAO,EAAE,cAAc,GAAA,GACxC,UAAAY,gBAAAA,EAAAA;AAAAA,MAACqD;AAAA,MAAA;AAAA,QACC,MAAAD;AAAA,QACA,QAAO;AAAA,QACP,UAAUmB;AAAA,QACV,eAAepC,EAAa,OAAO,CAAC+C,GAAKC,OACnCA,EAAM,iBAAiB,WACzBD,EAAIC,EAAM,GAAG,IAAIA,EAAM,eAElBD,IACN,CAAA,CAA6B;AAAA,QAE/B,UAAA;AAAA,UAAA/C,EAAa,IAAI,CAACgD,MACjBjG,gBAAAA,EAAAA,IAACmE,GAAK,MAAL,EAA0B,MAAM8B,EAAM,KAAK,OAAOA,EAAM,OACtD,UAAAA,EAAM,SAAS,UACdjG,gBAAAA,EAAAA;AAAAA,YAACkG;AAAA,YAAA;AAAA,cACC,aAAaD,EAAM,eAAe,MAAMA,EAAM,KAAK;AAAA,cACnD,OAAO,EAAE,OAAO,IAAA;AAAA,YAAI;AAAA,UAAA,IAGtBjG,gBAAAA,EAAAA;AAAAA,YAAC6C;AAAA,YAAA;AAAA,cACC,aAAaoD,EAAM,eAAe,MAAMA,EAAM,KAAK;AAAA,cACnD,OAAO,EAAE,OAAO,IAAA;AAAA,cAChB,YAAU;AAAA,cAET,UAAAA,EAAM,SAAS,IAAI,CAACE,MACnBnG,gBAAAA,EAAAA,IAAC4C,IAAA,EAA0B,OAAOuD,EAAO,OACtC,UAAAA,EAAO,MAAA,GADGA,EAAO,KAEpB,CACD;AAAA,YAAA;AAAA,UAAA,KAhBSF,EAAM,GAmBtB,CACD;AAAA,UAEDjG,gBAAAA,EAAAA,IAACmE,GAAK,MAAL,EACC,iCAACiC,IAAA,EACC,UAAA;AAAA,YAAApG,gBAAAA,EAAAA,IAACL,GAAA,EAAO,MAAK,WAAU,UAAS,UAAS,MAAMK,gBAAAA,EAAAA,IAACqG,IAAA,CAAA,CAAe,GAAI,UAAA,KAAA,CAEnE;AAAA,YACArG,gBAAAA,EAAAA,IAACL,GAAA,EAAO,SAAS4F,GAAa,UAAA,MAAE;AAAA,YAC/BpC,2BACExD,GAAA,EAAO,4BAAO2G,IAAA,CAAA,CAAe,GAAI,SAASd,GAAe,UAAA,KAAA,CAE1D;AAAA,UAAA,EAAA,CAEJ,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IAIFxF,gBAAAA,EAAAA;AAAAA,MAACqB;AAAA,MAAA;AAAA,QACE,GAAGkC;AAAA,QACJ,SAASiB;AAAA,QACT,YAAAhB;AAAA,QACA,SAAA3D;AAAA,QACA,YAAY;AAAA,UACV,GAAG+D;AAAA,UACH,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,WAAW,CAAC2C,GAAOC,MAAU,KAAKA,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,QAAQD,CAAK;AAAA,UACnE,iBAAAnD;AAAA,QAAA;AAAA,QAEF,UAAUqC;AAAA,QACV,QAAQ,EAAE,GAAG,eAAe,GAAG,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,EACxC,GACF;AAEJ;AAGC3C,GAAsC,eAAe;AAAA,EACpD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,wBAAwB,KAAK,4BAAA;AAAA,IAA4B;AAAA,IAEzE,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,sDAAA;AAAA,IAAsD;AAAA,IAEvF,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,uBAAuB,KAAK,sBAAA;AAAA,MAC1C,cAAc,EAAE,OAAO,KAAA;AAAA,IAAK;AAAA,IAE9B,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,KAAA;AAAA,IAAK;AAAA,IAE9B,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,WAAA;AAAA,MAC/B,cAAc,EAAE,OAAO,4BAAA;AAAA,IAA4B;AAAA,IAErD,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,uBAAuB,KAAK,sBAAA;AAAA,MAC1C,cAAc,EAAE,OAAO,KAAA;AAAA,IAAK;AAAA,EAC9B;AAEJ;AC7UO,MAAM2D,KAA4C,CAAC;AAAA,EACxD,OAAAC,IAAQ,CAAA;AAAA,EACR,aAAAC,IAAc;AAAA,EACd,gBAAAC,IAAiB;AAAA,EACjB,UAAAC,IAAW;AAAA,EACX,OAAAjK;AAAA,EACA,UAAAkK;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAaC,CAAc,IAAIvD,EAAS,EAAE,GAC3C,CAACwD,GAAcC,CAAe,IAAIzD,EAAS,CAAC,GAC5C,CAAC0D,GAAaC,CAAc,IAAI3D,EAAS,EAAK,GAC9C,CAAC4D,GAAWC,CAAY,IAAI7D,EAAS,EAAK,GAC1C,CAAC8D,GAAUC,CAAW,IAAI/D,EAAS,EAAK,GAExCgE,IAAerD,EAA2B,MAAS,GACnDsD,IAAYtD,EAA2B,MAAS,GAChDuD,IAAWvD,EAAOqC,CAAK,GACvBmB,IAAkBxD,EAAO6C,CAAY,GACrCY,IAAezD,EAAOiD,CAAS,GAC/BS,IAAiB1D,EAAO2C,CAAW;AAGzC,EAAAlB,EAAU,MAAM;AACd,IAAA8B,EAAS,UAAUlB,GACnBmB,EAAgB,UAAUX,GAC1BY,EAAa,UAAUR,GACvBS,EAAe,UAAUf;AAAA,EAC3B,CAAC;AAGD,QAAMgB,IAAWjD,EAAY,CAACkD,GAAcC,MAA0B;AACpE,QAAIC,IAAQ;AACZ,IAAAV,EAAY,EAAI;AAEhB,UAAMW,IAAW,MAAM;AACrB,MAAID,IAAQF,EAAK,UACfhB,EAAegB,EAAK,MAAM,GAAGE,IAAQ,CAAC,CAAC,GACvCA,KACAR,EAAU,UAAU,OAAO,WAAWS,GAAUxB,CAAc,MAE9Da,EAAY,EAAK,GACjBS,IAAA;AAAA,IAEJ;AAEA,IAAAE,EAAA;AAAA,EACF,GAAG,CAACxB,CAAc,CAAC,GAGbyB,IAAatD,EAAY,CAACmD,MAA0B;AACxD,QAAIC,IAAQJ,EAAe,QAAQ;AAEnC,UAAMO,IAAa,MAAM;AACvB,MAAIH,IAAQ,KACVlB,EAAec,EAAe,QAAQ,MAAM,GAAGI,IAAQ,CAAC,CAAC,GACzDA,KACAR,EAAU,UAAU,OAAO,WAAWW,GAAY1B,IAAiB,CAAC,KAEpEsB,IAAA;AAAA,IAEJ;AAEA,IAAAI,EAAA;AAAA,EACF,GAAG,CAAC1B,CAAc,CAAC,GAGb2B,IAAgBxD,EAAY,MAAM;AACtC,QAAI6C,EAAS,QAAQ,WAAW,KAAKE,EAAa,QAAS;AAE3D,IAAAT,EAAe,EAAI;AAEnB,UAAMmB,IAAkBZ,EAAS,QAAQC,EAAgB,OAAO;AAGhE,IAAIE,EAAe,UACjBM,EAAW,MAAM;AAEf,MAAAL,EAASQ,GAAiB,MAAM;AAE9B,QAAAd,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,UAAAP,EAAgB,CAAChC,OAAUA,IAAO,KAAKyC,EAAS,QAAQ,MAAM,GAC9DP,EAAe,EAAK;AAAA,QACtB,GAAG,GAAI;AAAA,MACT,CAAC;AAAA,IACH,CAAC,IAGDW,EAASQ,GAAiB,MAAM;AAC9B,MAAAd,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,QAAAP,EAAgB,CAAChC,OAAUA,IAAO,KAAKyC,EAAS,QAAQ,MAAM,GAC9DP,EAAe,EAAK;AAAA,MACtB,GAAG,GAAI;AAAA,IACT,CAAC;AAAA,EAEL,GAAG,CAACgB,GAAYL,CAAQ,CAAC;AAGzB,EAAAlC,EAAU,OACJe,KAAYH,EAAM,SAAS,KAAK,CAACY,KACnCiB,EAAA,GAGK,MAAM;AACX,IAAIb,EAAa,WACf,OAAO,aAAaA,EAAa,OAAO,GAEtCC,EAAU,WACZ,OAAO,aAAaA,EAAU,OAAO;AAAA,EAEzC,IACC,CAACT,GAAcI,GAAWT,GAAUH,EAAM,QAAQ6B,CAAa,CAAC,GAGnEzC,EAAU,MAAM;AACd,IAAI,CAACsB,KAAeP,KAAYH,EAAM,SAAS,KAAK,CAACY,KACnDiB,EAAA;AAAA,EAEJ,GAAG,CAACrB,GAAcE,GAAaP,GAAUH,EAAM,QAAQY,GAAWiB,CAAa,CAAC;AAGhF,QAAME,IAAc,CAACC,MAA0C;AAC7D,IAAAnB,EAAa,EAAI,GAEbG,EAAa,WACf,OAAO,aAAaA,EAAa,OAAO,GAEtCC,EAAU,WACZ,OAAO,aAAaA,EAAU,OAAO,GAEvCN,EAAe,EAAK,GACpBI,EAAY,EAAK,GAEhBV,EAAmB,UAAU2B,CAAC;AAAA,EACjC,GAEMC,IAAa,CAACD,MAA0C;AAC5D,IAAAnB,EAAa,EAAK,GAEd,CAAC3K,KAAS8J,EAAM,SAAS,MAC3BO,EAAe,EAAE,GACjBE,EAAgB,CAAC,IAGlBJ,EAAmB,SAAS2B,CAAC;AAAA,EAChC,GAEME,IAAe,CAACF,MAA2C;AAC/D,IAAA5B,IAAW4B,EAAE,OAAO,KAAK,GAExB3B,EAAmB,WAAW2B,CAAC;AAAA,EAClC,GAGMG,IAAqB,MACrBvB,KAAa1K,IACR+J,IAEFK,KAAeL;AAGxB,gCACG,OAAA,EAAI,OAAO,EAAE,UAAU,cACtB,UAAA;AAAA,IAAA3G,gBAAAA,EAAAA;AAAAA,MAACkG;AAAA,MAAA;AAAA,QAEE,GAAIa;AAAA,QACL,OAAAnK;AAAA,QACA,UAAUgM;AAAA,QACV,SAASH;AAAA,QACT,QAAQE;AAAA,QACR,aAAaE,EAAA;AAAA,QACb,OAAO;AAAA;AAAA,UAEL,GAAI9B,EAAmB;AAAA,UACvB,UAAU;AAAA,UACV,QAAQ;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,IAID,CAACO,KAAa,CAAC1K,KAASoK,KACvBlG,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,cAAc;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,YAAY;AAAA,QAAA;AAAA,QAGd,UAAA;AAAA,UAAAd,gBAAAA,EAAAA,IAAC,UAAM,UAAAgH,EAAA,CAAY;AAAA,UAElBQ,KACCxH,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,iBAAiB;AAAA,gBACjB,YAAY;AAAA,gBACZ,WAAW;AAAA,cAAA;AAAA,YACb;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,0BAML,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAMH;AAAA,EAAA,GACF;AAEJ;AAGCyG,GAAqC,eAAe;AAAA,EACnD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,WAAA;AAAA,IAAW;AAAA,IAE5C,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,UAAA;AAAA,IAAU;AAAA,IAEnC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,MAAA;AAAA,IAAM;AAAA,IAE/B,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,0BAAA;AAAA,IAA0B;AAAA,EAC3D;AAEJ;AClPO,MAAMqC,KAAkD,CAAC;AAAA,EAC9D,OAAApC,IAAQ,CAAA;AAAA;AAAA,EACR,aAAAC,IAAc;AAAA;AAAA,EACd,gBAAAC,IAAiB;AAAA;AAAA,EACjB,UAAAC,IAAW;AAAA;AAAA,EACX,OAAAjK,IAAQ;AAAA;AAAA,EACR,UAAAkK;AAAA;AAAA,EACA,UAAAiC;AAAA;AAAA,EACA,WAAAC,IAAY;AAAA;AAAA,EACZ,WAAAC,IAAY;AAAA;AAAA,EACZ,YAAAC,IAAa;AAAA;AAAA,EACb,UAAAC,IAAW;AAAA;AAAA,EACX,MAAAC,IAAO;AAAA;AAAA,EACP,OAAA1H;AAAA;AAAA,EACA,GAAG2H;AAAA;AACL,MAAM;AAIJ,QAAM,CAACrC,GAAaC,CAAc,IAAIvD,EAAS,EAAE,GAG3C,CAACwD,GAAcC,CAAe,IAAIzD,EAAS,CAAC,GAG5C,CAAC0D,GAAaC,CAAc,IAAI3D,EAAS,EAAK,GAG9C,CAAC4D,GAAWC,CAAY,IAAI7D,EAAS,EAAK,GAG1C,CAAC8D,GAAUC,CAAW,IAAI/D,EAAS,EAAK,GAGxC,CAAC4F,GAAeC,CAAgB,IAAI7F,EAAS9G,KAAS,EAAE,GAKxD8K,IAAerD,EAA2B,MAAS,GAGnDsD,IAAYtD,EAA2B,MAAS,GAGhDuD,IAAWvD,EAAOqC,CAAK,GAGvBmB,IAAkBxD,EAAO6C,CAAY,GAGrCY,IAAezD,EAAOiD,CAAS,GAG/BS,IAAiB1D,EAAO2C,CAAW,GAGnCwC,IAAcnF,EAA4B,IAAI;AAQpD,EAAAyB,EAAU,MAAM;AACd,IAAA8B,EAAS,UAAUlB,GACnBmB,EAAgB,UAAUX,GAC1BY,EAAa,UAAUR,GACvBS,EAAe,UAAUf;AAAA,EAC3B,CAAC;AAWD,QAAMgB,IAAWjD,EAAY,CAACkD,GAAcC,MAA0B;AACpE,QAAIC,IAAQ;AACZ,IAAAV,EAAY,EAAI;AAEhB,UAAMW,IAAW,MAAM;AACrB,MAAID,IAAQF,EAAK,UAEfhB,EAAegB,EAAK,MAAM,GAAGE,IAAQ,CAAC,CAAC,GACvCA,KAEAR,EAAU,UAAU,OAAO,WAAWS,GAAUxB,CAAc,MAG9Da,EAAY,EAAK,GACjBS,IAAA;AAAA,IAEJ;AAEA,IAAAE,EAAA;AAAA,EACF,GAAG,CAACxB,CAAc,CAAC,GAQbyB,IAAatD,EAAY,CAACmD,MAA0B;AACxD,QAAIC,IAAQJ,EAAe,QAAQ;AAEnC,UAAMO,IAAa,MAAM;AACvB,MAAIH,IAAQ,KAEVlB,EAAec,EAAe,QAAQ,MAAM,GAAGI,IAAQ,CAAC,CAAC,GACzDA,KAEAR,EAAU,UAAU,OAAO,WAAWW,GAAY1B,IAAiB,CAAC,KAGpEsB,IAAA;AAAA,IAEJ;AAEA,IAAAI,EAAA;AAAA,EACF,GAAG,CAAC1B,CAAc,CAAC,GAab2B,IAAgBxD,EAAY,MAAM;AAEtC,QAAI6C,EAAS,QAAQ,WAAW,KAAKE,EAAa,QAAS;AAE3D,IAAAT,EAAe,EAAI;AAEnB,UAAMmB,IAAkBZ,EAAS,QAAQC,EAAgB,OAAO;AAGhE,IAAIE,EAAe,UACjBM,EAAW,MAAM;AAEf,MAAAL,EAASQ,GAAiB,MAAM;AAE9B,QAAAd,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,UAAAP,EAAgB,CAAChC,OAAUA,IAAO,KAAKyC,EAAS,QAAQ,MAAM,GAC9DP,EAAe,EAAK;AAAA,QACtB,GAAG,GAAI;AAAA,MACT,CAAC;AAAA,IACH,CAAC,IAGDW,EAASQ,GAAiB,MAAM;AAC9B,MAAAd,EAAa,UAAU,OAAO,WAAW,MAAM;AAC7C,QAAAP,EAAgB,CAAChC,OAAUA,IAAO,KAAKyC,EAAS,QAAQ,MAAM,GAC9DP,EAAe,EAAK;AAAA,MACtB,GAAG,GAAI;AAAA,IACT,CAAC;AAAA,EAEL,GAAG,CAACgB,GAAYL,CAAQ,CAAC;AAGzB,EAAAlC,EAAU,OACJe,KAAYH,EAAM,SAAS,KAAK,CAACY,KACnCiB,EAAA,GAGK,MAAM;AACX,IAAIb,EAAa,WACf,OAAO,aAAaA,EAAa,OAAO,GAEtCC,EAAU,WACZ,OAAO,aAAaA,EAAU,OAAO;AAAA,EAEzC,IACC,CAACT,GAAcI,GAAWT,GAAUH,EAAM,QAAQ6B,CAAa,CAAC,GAGnEzC,EAAU,MAAM;AACd,IAAI,CAACsB,KAAeP,KAAYH,EAAM,SAAS,KAAK,CAACY,KACnDiB,EAAA;AAAA,EAEJ,GAAG,CAACrB,GAAcE,GAAaP,GAAUH,EAAM,QAAQY,GAAWiB,CAAa,CAAC;AAGhF,QAAME,IAAc,CAACC,MAA6C;AAChE,IAAAnB,EAAa,EAAI,GAEbG,EAAa,WACf,OAAO,aAAaA,EAAa,OAAO,GAEtCC,EAAU,WACZ,OAAO,aAAaA,EAAU,OAAO,GAEvCN,EAAe,EAAK,GACpBI,EAAY,EAAK,GAEhB4B,EAAmB,UAAUX,CAAC;AAAA,EACjC,GAEMC,IAAa,CAACD,MAA6C;AAC/D,IAAAnB,EAAa,EAAK,GAEd,CAAC3K,KAAS8J,EAAM,SAAS,MAC3BO,EAAe,EAAE,GACjBE,EAAgB,CAAC,IAGlBkC,EAAmB,SAASX,CAAC;AAAA,EAChC,GAEME,IAAe,CAACF,MAA8C;AAClE,UAAMe,IAAWf,EAAE,OAAO;AAC1B,IAAIM,KAAaS,EAAS,SAAST,MAK/BlC,IACFA,EAAS2C,CAAQ,IAGjBF,EAAiBE,CAAQ,GAI1BJ,EAAmB,WAAWX,CAAC;AAAA,EAClC,GAEMgB,IAAe,MAAM;AACzB,UAAMC,IAAe7C,IAAWlK,IAAQ0M;AACxC,IAAIK,EAAa,UAAU,CAACR,MAC1BJ,IAAWY,CAAY,GAElB7C,KACHyC,EAAiB,EAAE;AAAA,EAGzB,GAEMK,IAAgB,CAAClB,MAAgD;AAErE,KAAKA,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,YACxCA,EAAE,eAAA,GACFgB,EAAA,IAGDL,EAAmB,YAAYX,CAAC;AAAA,EACnC,GAEMiB,IAAe7C,IAAWlK,IAAQ0M,GAClCO,IAAmBV,KAAY,CAACQ,EAAa,WAAWX,IAAYW,EAAa,SAASX,IAAY;AAE5G,SACElI,gBAAAA,EAAAA,KAAC,SAAI,OAAO,EAAE,UAAU,YAAY,GAAGY,KACrC,UAAA;AAAA,IAAAZ,gBAAAA,EAAAA,KAAC,OAAA,EAAI,OAAO,EAAE,UAAU,cACtB,UAAA;AAAA,MAAAd,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKwJ;AAAA,UACL,OAAO1C,IAAWlK,IAAQ0M;AAAA,UAC1B,UAAUV;AAAA,UACV,SAAS,CAACF,MAAM;AACd,YAAAA,EAAE,OAAO,MAAM,cAAc,WAC7BA,EAAE,OAAO,MAAM,YAAY,qCAC3BD,EAAYC,CAAC;AAAA,UACf;AAAA,UACA,QAAQ,CAACA,MAAM;AACb,YAAAA,EAAE,OAAO,MAAM,cAAc,WAC7BA,EAAE,OAAO,MAAM,YAAY,QAC3BC,EAAWD,CAAC;AAAA,UACd;AAAA,UACA,WAAWkB;AAAA,UACX,aAAatC,KAAaqC,IAAehD,IAAc;AAAA,UACvD,WAAAqC;AAAA,UACA,MAAAI;AAAA,UACA,UAAAD;AAAA,UACA,OAAO;AAAA,YACL,OAAO;AAAA,YACP,WAAW,GAAGC,IAAO,KAAK,EAAE;AAAA,YAC5B,SAAS;AAAA;AAAA,YACT,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,iBAAiB;AAAA;AAAA,YAEjB,GAAIC,EAAmB;AAAA,UAAA;AAAA,UAExB,GAAGA;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,CAAC/B,KAAa,CAACqC,KAAgB3C,KAC9BlG,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,aAAa;AAAA,YACb,cAAc;AAAA,YACd,OAAO;AAAA,YACP,eAAe;AAAA,YACf,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,YAAY;AAAA,UAAA;AAAA,UAGd,UAAA;AAAA,YAAAd,gBAAAA,EAAAA,IAAC,UAAM,UAAAgH,EAAA,CAAY;AAAA,YAElBQ,KACCxH,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,iBAAiB;AAAA,kBACjB,YAAY;AAAA,kBACZ,WAAW;AAAA,gBAAA;AAAA,cACb;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAMNA,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,UAAA;AAAA,UAGV,UAAAA,gBAAAA,EAAAA;AAAAA,YAACL;AAAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,4BAAOmK,IAAA,EAAa;AAAA,cACpB,SAASJ;AAAA,cACT,UAAUG;AAAA,cACV,OAAO;AAAA,gBACL,cAAc;AAAA,gBACd,UAAU;AAAA,gBACV,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,cAAA;AAAA,cAGjB,UAAAX;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGCD,KACCnI,gBAAAA,EAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,QAGR,UAAA;AAAA,UAAA6I,EAAa;AAAA,UAAO;AAAA,UAAEX;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,0BAK1B,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAAA,CAMH;AAAA,EAAA,GACF;AAEJ;AAGCF,GAAwC,eAAe;AAAA,EACtD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,WAAA;AAAA,IAAW;AAAA,IAE5C,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,UAAA;AAAA,IAAU;AAAA,IAEnC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,MAAA;AAAA,IAAM;AAAA,IAE/B,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,0BAAA;AAAA,IAA0B;AAAA,IAE3D,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,0BAAA;AAAA,IAA0B;AAAA,IAE3D,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,MAAA;AAAA,IAAM;AAAA,IAE/B,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,QAAA;AAAA,IAAQ;AAAA,IAEjC,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,IAAA;AAAA,IAAI;AAAA,EAC7B;AAEJ;ACjfO,MAAMiB,KAAsC,CAAC;AAAA,EAClD,KAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,QAAAC;AAAA,EACA,YAAAC;AAAA;AAAA,EACA,aAAAC;AAAA;AAAA,EACA,gBAAAC,IAAiB;AAAA,EACjB,iBAAAC,IAAkB;AAAA,EAClB,SAAAjI;AAAA,EACA,eAAAkI;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAA7I;AAAA,EACA,OAAAJ;AAAA,EACA,GAAG5B;AACL,MAAM;AAIJ,QAAM8K,IAAWvG,EAAyB,IAAI,GACxC,CAACwG,GAAWC,CAAY,IAAIpH,EAAS,EAAK,GAC1C,CAACqH,GAAWC,CAAY,IAAItH,EAAS,EAAK,GAC1C,CAACuH,GAAUC,CAAW,IAAIxH,EAAS,EAAK,GAGxCyH,IAAYpG,EAAY,MAAM;AAClC,IAAI6F,EAAS,YACXA,EAAS,QAAQ,KAAA,GACjBE,EAAa,EAAI,GACjBL,IAAA;AAAA,EAEJ,GAAG,CAACA,CAAW,CAAC,GAGVW,IAAarG,EAAY,MAAM;AACnC,IAAI6F,EAAS,YACXA,EAAS,QAAQ,MAAA,GACjBE,EAAa,EAAK,GAClBJ,IAAA;AAAA,EAEJ,GAAG,CAACA,CAAY,CAAC,GAGXW,IAAatG,EAAY,CAAC2D,MAAwB;AACtD,IAAAA,EAAE,gBAAA,GACEmC,IACFO,EAAA,IAEAD,EAAA;AAAA,EAEJ,GAAG,CAACN,GAAWM,GAAWC,CAAU,CAAC,GAG/BE,IAAmBvG,EAAY,MAAM;AACzC,IAAAiG,EAAa,EAAI,GACbT,KAAmB,CAACM,KACtBM,EAAA;AAAA,EAEJ,GAAG,CAACZ,GAAiBM,GAAWM,CAAS,CAAC,GAGpCI,IAAmBxG,EAAY,MAAM;AACzC,IAAAiG,EAAa,EAAK,GACdT,KAAmBM,KACrBO,EAAA;AAAA,EAEJ,GAAG,CAACb,GAAiBM,GAAWO,CAAU,CAAC,GAGrCI,IAAoBzG,EAAY,MAAM;AAC1C,IAAAmG,EAAY,EAAI,GAChBV,IAAA;AAAA,EACF,GAAG,CAACA,CAAa,CAAC,GAGZiB,IAAkB1G,EAAY,MAAM;AACxC,IAAA+F,EAAa,EAAI,GACjBL,IAAA;AAAA,EACF,GAAG,CAACA,CAAW,CAAC,GAGViB,IAAmB3G,EAAY,MAAM;AACzC,IAAA+F,EAAa,EAAK,GAClBJ,IAAA;AAAA,EACF,GAAG,CAACA,CAAY,CAAC,GAGXiB,IAAmB5G,EAAY,MAAM;AACzC,IAAA+F,EAAa,EAAK,GAClBH,IAAA;AAAA,EACF,GAAG,CAACA,CAAY,CAAC,GAGXiB,IAAkB7G,EAAY,CAAC8G,MAA4C;AAC/E,IAAAvJ,IAAUuJ,CAAK;AAAA,EACjB,GAAG,CAACvJ,CAAO,CAAC;AAEZ,SACEtC,gBAAAA,EAAAA;AAAAA,IAACO;AAAAA,IAAA;AAAA,MACE,GAAGT;AAAA,MACJ,WAAW,cAAcgC,KAAa,EAAE;AAAA,MACxC,OAAO;AAAA,QACL,OAAAoI;AAAA,QACA,QAAAC;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ7H,IAAU,YAAY;AAAA,QAC9B,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,GAAGZ;AAAA,MAAA;AAAA,MAEL,UAAU;AAAA,MACV,cAAc4J;AAAA,MACd,cAAcC;AAAA,MACd,SAASK;AAAA,MAET,UAAA9K,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,QAAAd,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK4K;AAAA,YACL,KAAAZ;AAAA,YACA,QAAAC;AAAA,YACA,SAAQ;AAAA,YACR,cAAcuB;AAAA,YACd,QAAQC;AAAA,YACR,SAASC;AAAA,YACT,SAASC;AAAA,YACT,OAAO;AAAA,YACP,MAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAIPrB,KACCtK,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,qBAAqB+K,IAAY,YAAY,EAAE;AAAA,YAC1D,SAASM;AAAA,YAER,UAAAR,0BACEiB,IAAA,EAAoB,WAAU,aAAY,IAE3C9L,gBAAAA,EAAAA,IAAC+L,IAAA,EAAmB,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAM/C,CAACd,KACAjL,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,sBACb,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kBAAA,CAAkB,EAAA,CACnC;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAGC+J,GAAkC,eAAe;AAAA,EAChD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,MACtC,cAAc,EAAE,OAAO,MAAA;AAAA,IAAM;AAAA,IAE/B,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAE1D,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,MACtC,cAAc,EAAE,OAAO,SAAA;AAAA,IAAS;AAAA,IAElC,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,MACtC,cAAc,EAAE,OAAO,SAAA;AAAA,IAAS;AAAA,IAElC,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,oDAAA;AAAA,IAAoD;AAAA,IAErF,eAAe;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,aAAA;AAAA,IAAa;AAAA,IAE9C,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,aAAA;AAAA,IAAa;AAAA,IAE9C,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,aAAA;AAAA,IAAa;AAAA,IAE9C,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,YAAY,KAAK,aAAA;AAAA,IAAa;AAAA,IAE9C,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,iBAAiB,KAAK,sBAAA;AAAA,IAAsB;AAAA,EAC5D;AAEJ;AC/PA,MAAMiC,KAAa,CAACC,MACM,CAAC,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,EACjE,KAAK,CAAAC,MAAOD,EAAI,cAAc,SAASC,CAAG,CAAC,GAI9DC,KAAe,CAACC,MAChBA,EAAK,OAAaA,EAAK,OACvBJ,GAAWI,EAAK,GAAG,IAAU,UAC1B,SAIIC,KAAsC,CAAC;AAAA,EAClD,OAAAC;AAAA,EACA,SAAAvJ;AAAA,EACA,KAAAwJ,IAAM;AAAA,EACN,YAAAC,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAAA,EAEP,WAAA3K;AAAA,EACA,OAAAJ;AACF,MAAM;AACJ,QAAMgL,IAAerI,EAAuB,IAAI,GAC1C,CAACsI,GAAaC,CAAc,IAAIlJ,EAAiBX,KAAW0J,EAAY,MAAM,CAAC,GAC/EI,IAAWxI,EAA6C,oBAAI,KAAK,GAGjEyI,IAAmB/H,EAAY,MAAM;AACzC,QAAI,CAACyH,KAAczJ;AACjB,aAAOA,KAAW0J,EAAY,MAAM;AAGtC,UAAMvC,IAAQ,OAAO;AAErB,WAAIA,IAAQ,MAAYuC,EAAY,MAAM,IACtCvC,IAAQ,MAAYuC,EAAY,MAAM,IACtCvC,IAAQ,MAAYuC,EAAY,MAAM,IACtCvC,IAAQ,OAAauC,EAAY,MAAM,IACvCvC,IAAQ,OAAauC,EAAY,MAAM,IACpCA,EAAY,OAAO;AAAA,EAC5B,GAAG,CAACD,GAAYzJ,GAAS0J,CAAW,CAAC,GAG/BM,IAAkBhI,EAAY,MAAM;AACxC,QAAI,CAAC2H,EAAa,QAAS;AAE3B,UAAMM,IAAOL,GACPM,IAAYP,EAAa,SAEzBQ,KADiBD,EAAU,cACKV,KAAOS,IAAO,MAAMA,GAGpDG,IAAU,IAAI,MAAMH,CAAI,EAAE,KAAK,CAAC;AAGtC,IAAAV,EAAM,QAAQ,CAACF,GAAMjE,MAAU;AAC7B,YAAMzM,IAAM0Q,EAAK,MAAMjE,GACjBiF,IAAUP,EAAS,QAAQ,IAAInR,CAAG;AAExC,UAAI,CAAC0R,EAAS;AAGd,YAAMC,IAAY,KAAK,IAAI,GAAGF,CAAO,GAC/BG,IAAcH,EAAQ,QAAQE,CAAS,GAGvCE,IAAOD,KAAeJ,IAAcX,IACpCiB,IAAML,EAAQG,CAAW;AAG/B,MAAAF,EAAQ,MAAM,WAAW,YACzBA,EAAQ,MAAM,OAAO,GAAGG,CAAI,MAC5BH,EAAQ,MAAM,MAAM,GAAGI,CAAG,MAC1BJ,EAAQ,MAAM,QAAQ,GAAGF,CAAW,MAGpCC,EAAQG,CAAW,KAAKF,EAAQ,eAAeb;AAAA,IACjD,CAAC;AAGD,UAAMkB,IAAY,KAAK,IAAI,GAAGN,CAAO;AACrC,IAAAF,EAAU,MAAM,SAAS,GAAGQ,CAAS;AAAA,EACvC,GAAG,CAACnB,GAAOK,GAAaJ,CAAG,CAAC;AAG5B,EAAAzG,EAAU,MAAM;AACd,UAAM4H,IAAe,MAAM;AACzB,YAAMC,IAAab,EAAA;AACnB,MAAIa,MAAehB,KACjBC,EAAee,CAAU;AAAA,IAE7B;AAEA,QAAInB;AACF,oBAAO,iBAAiB,UAAUkB,CAAY,GAC9CA,EAAA,GAEO,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAElE,GAAG,CAAClB,GAAYM,GAAkBH,CAAW,CAAC,GAG9C7G,EAAU,MAAM;AAEd,UAAM8H,IAAQ,WAAW,MAAM;AAC7B,MAAAb,EAAA;AAAA,IACF,GAAG,GAAG;AAEN,WAAO,MAAM,aAAaa,CAAK;AAAA,EACjC,GAAG,CAACtB,GAAOK,GAAaI,CAAe,CAAC;AAGxC,QAAMc,IAAkB9I,EAAY,MAAM;AACxC,IAAAgI,EAAA;AAAA,EACF,GAAG,CAACA,CAAe,CAAC,GAGde,IAAkB/I,EAAY,CAACqH,MAAwB;AAC3D,IAAAA,EAAK,UAAUA,CAAI;AAAA,EACrB,GAAG,CAAA,CAAE;AAEL,SACEpM,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK0M;AAAA,MACL,WAAW,uBAAuB5K,KAAa,EAAE;AAAA,MACjD,OAAO;AAAA,QACL,UAAU;AAAA,QACV,OAAO;AAAA,QACP,GAAGJ;AAAA,MAAA;AAAA,MAGJ,UAAA4K,EAAM,IAAI,CAACF,GAAMjE,MAAU;AAC1B,cAAMzM,IAAM0Q,EAAK,MAAMjE,GACjB4F,IAAY5B,GAAaC,CAAI;AAEnC,eACEpM,gBAAAA,EAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,KAAK,CAAAgO,MAAM;AACT,cAAIA,IACFnB,EAAS,QAAQ,IAAInR,GAAKsS,CAAE,IAE5BnB,EAAS,QAAQ,OAAOnR,CAAG;AAAA,YAE/B;AAAA,YACA,WAAU;AAAA,YAET,UAAAqS,MAAc,UACb/N,gBAAAA,EAAAA,IAAC,OAAA,EAAI,OAAO,EAAE,OAAO,QAAQ,UAAU,YAAY,eAAe,SAAA,GAChE,UAAAA,gBAAAA,EAAAA,IAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,MAAM,GAAG,OAAO,QAAQ,QAAQ,OAAA,GAC1E,UAAAA,gBAAAA,EAAAA;AAAAA,cAAC+J;AAAA,cAAA;AAAA,gBACC,KAAKqC,EAAK;AAAA,gBACV,QAAQA,EAAK;AAAA,gBACb,OAAM;AAAA,gBACN,QAAO;AAAA,gBACP,SAAS,MAAM0B,EAAgB1B,CAAI;AAAA,gBACnC,eAAeyB;AAAA,gBACf,iBAAiB;AAAA,gBACjB,gBAAgB;AAAA,cAAA;AAAA,YAAA,EAClB,CACF,GACF,IAEA7N,gBAAAA,EAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM8N,EAAgB1B,CAAI;AAAA,gBAEnC,UAAApM,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,KAAKoM,EAAK;AAAA,oBACV,KAAK,SAASjE,IAAQ,CAAC;AAAA,oBACvB,WAAU;AAAA,oBACV,QAAQ0F;AAAA,oBACR,SAASA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACX;AAAA,YAAA;AAAA,UACF;AAAA,UArCGnS;AAAA,QAAA;AAAA,MAyCX,CAAC;AAAA,IAAA;AAAA,EAAA;AAGP;AAGC2Q,GAAkC,eAAe;AAAA,EAChD,aAAa;AAAA,EACb,aAAa;AAAA,EACb,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,mBAAmB,KAAK,kBAAA;AAAA,IAAkB;AAAA,IAE1D,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,KAAK;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,MAC7B,cAAc,EAAE,OAAO,IAAA;AAAA,IAAI;AAAA,IAE7B,YAAY;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,WAAW,KAAK,UAAA;AAAA,MAC9B,cAAc,EAAE,OAAO,OAAA;AAAA,IAAO;AAAA,IAEhC,aAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,qFAAA;AAAA,IAAqF;AAAA,IAEpH,WAAW;AAAA,MACT,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,UAAU,KAAK,SAAA;AAAA,IAAS;AAAA,IAExC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM,EAAE,MAAM,iBAAiB,KAAK,sBAAA;AAAA,IAAsB;AAAA,EAC5D;AAEJ;ACrSO,MAAM4B,KAAa;AAAA,EACxB,WAAWC,GAAM;AAAA,EACjB,OAAO;AAAA;AAAA,IAEL,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA;AAAA,IAGX,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,eAAe;AAAA;AAAA,IAGf,eAAe;AAAA,IACf,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA;AAAA,IAGrB,aAAa;AAAA,IACb,sBAAsB;AAAA;AAAA,IAGtB,WAAW;AAAA,IACX,oBAAoB;AAAA;AAAA,IAGpB,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,gBAAgB;AAAA;AAAA,IAGhB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA;AAAA,IAGZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA;AAAA,IAGX,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,EAAA;AAAA,EAEnB,YAAY;AAAA,IACV,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,eAAe;AAAA,MACf,YAAY;AAAA,IAAA;AAAA,IAEd,MAAM;AAAA,MACJ,gBAAgB;AAAA,MAChB,WAAW;AAAA,IAAA;AAAA,IAEb,OAAO;AAAA,MACL,cAAc;AAAA,MACd,eAAe;AAAA,IAAA;AAAA,IAEjB,OAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"index.es.js","sources":["../node_modules/.pnpm/react@19.1.1/node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/.pnpm/react@19.1.1/node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/.pnpm/react@19.1.1/node_modules/react/jsx-runtime.js","../src/components/Button/index.tsx","../src/components/Card/index.tsx","../src/components/AppModal/index.tsx","../src/components/PageTable/index.tsx","../src/components/XcIcon/index.tsx","../src/components/EmptyAndSpin/index.tsx","../src/components/BackButton/index.tsx","../src/components/LinkButton/index.tsx","../src/components/AdvancedTable/index.tsx","../src/components/DynamicInput/index.tsx","../src/components/DynamicTextArea/index.tsx","../src/components/VideoCard/index.tsx","../src/components/Waterfall/index.tsx","../src/theme.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React from \"react\";\nimport { Button as AntButton, type ButtonProps as AntButtonProps } from \"antd\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"dashed\" | \"link\" | \"text\";\n\nexport interface ButtonProps extends Omit<AntButtonProps, 'type' | 'ghost' | 'variant'> {\n /** 视觉风格 */\n variant?: ButtonVariant;\n /** 是否加载中 */\n loading?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<ButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 基础按钮,用于触发操作 */\nexport const Button: React.FC<ButtonProps> = ({\n variant = \"primary\",\n loading = false,\n children,\n ...rest\n}) => {\n // 将自定义 variant 映射到 antd 的 type\n const getAntdType = (variant: ButtonVariant): AntButtonProps['type'] => {\n switch (variant) {\n case \"primary\":\n return \"primary\";\n case \"ghost\":\n return \"default\";\n case \"dashed\":\n return \"dashed\";\n case \"link\":\n return \"link\";\n case \"text\":\n return \"text\";\n default:\n return \"primary\";\n }\n };\n\n return (\n <AntButton\n {...rest}\n type={getAntdType(variant)}\n loading={loading}\n ghost={variant === \"ghost\"}\n >\n {children}\n </AntButton>\n );\n};\n\n// 手动添加 docgen 信息\n(Button as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Button\",\n description: \"基础按钮,用于触发操作\",\n props: {\n variant: {\n name: \"variant\",\n required: false,\n description: \"视觉风格\",\n type: { name: \"ButtonVariant\", raw: '\"primary\" | \"ghost\" | \"dashed\" | \"link\" | \"text\"' },\n defaultValue: { value: '\"primary\"' }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"按钮内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"按钮大小\",\n type: { name: \"ButtonSize\", raw: '\"small\" | \"middle\" | \"large\"' }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: MouseEvent) => void\" }\n }\n }\n};\n","import React from \"react\";\nimport { Card as AntCard, type CardProps as AntCardProps } from \"antd\";\n\nexport interface CardProps extends Omit<AntCardProps, 'title'> {\n /** 标题 */\n title?: React.ReactNode;\n /** 内容区域 */\n children?: React.ReactNode;\n /** 是否显示边框 */\n bordered?: boolean;\n /** 是否可悬停 */\n hoverable?: boolean;\n /** 卡片大小 */\n size?: \"default\" | \"small\";\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<CardProps> & { __docgenInfo?: DocgenInfo };\n\n/** 卡片容器,用于分组内容 */\nexport const Card: React.FC<CardProps> = ({ \n title, \n children, \n bordered = true,\n hoverable = false,\n size = \"default\",\n ...rest \n}) => (\n <AntCard\n {...rest}\n title={title}\n bordered={bordered}\n hoverable={hoverable}\n size={size}\n >\n {children}\n </AntCard>\n);\n\n// 手动添加 docgen 信息\n(Card as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Card\",\n description: \"卡片容器,用于分组内容\",\n props: {\n title: {\n name: \"title\",\n required: false,\n description: \"标题\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"内容区域\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n bordered: {\n name: \"bordered\",\n required: false,\n description: \"是否显示边框\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n hoverable: {\n name: \"hoverable\",\n required: false,\n description: \"是否可悬停\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"卡片大小\",\n type: { name: \"CardSize\", raw: '\"default\" | \"small\"' },\n defaultValue: { value: '\"default\"' }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n actions: {\n name: \"actions\",\n required: false,\n description: \"卡片操作组\",\n type: { name: \"ReactNode[]\", raw: \"React.ReactNode[]\" }\n }\n }\n};\n","import React from \"react\";\nimport { Modal, type ModalProps } from \"antd\";\n\nexport interface AppModalProps extends ModalProps {\n /** 是否显示默认的确定和取消按钮 */\n showDefaultFooter?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<AppModalProps> & { __docgenInfo?: DocgenInfo };\n\n/** 应用级模态框组件,基于 Ant Design Modal 封装 */\nexport const AppModal: React.FC<AppModalProps> = ({ \n showDefaultFooter = true,\n ...props \n}) => {\n const footer = props.footer !== undefined \n ? props.footer \n : showDefaultFooter \n ? (_: React.ReactNode, { OkBtn, CancelBtn }: { OkBtn: React.ComponentType<Record<string, unknown>>; CancelBtn: React.ComponentType<Record<string, unknown>> }) => (\n <>\n <OkBtn />\n <CancelBtn />\n </>\n )\n : null;\n\n return (\n <Modal\n {...props}\n footer={footer}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(AppModal as ComponentWithDocgen).__docgenInfo = {\n displayName: \"AppModal\",\n description: \"应用级模态框组件,基于 Ant Design Modal 封装\",\n props: {\n showDefaultFooter: {\n name: \"showDefaultFooter\",\n required: false,\n description: \"是否显示默认的确定和取消按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n title: {\n name: \"title\",\n required: false,\n description: \"模态框标题\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n open: {\n name: \"open\",\n required: false,\n description: \"是否显示模态框\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n onCancel: {\n name: \"onCancel\",\n required: false,\n description: \"取消按钮点击事件\",\n type: { name: \"function\", raw: \"(e: React.MouseEvent<HTMLElement>) => void\" }\n },\n onOk: {\n name: \"onOk\",\n required: false,\n description: \"确定按钮点击事件\",\n type: { name: \"function\", raw: \"(e: React.MouseEvent<HTMLElement>) => void\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"模态框内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n width: {\n name: \"width\",\n required: false,\n description: \"模态框宽度\",\n type: { name: \"string | number\", raw: \"string | number\" }\n },\n centered: {\n name: \"centered\",\n required: false,\n description: \"是否居中显示\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n maskClosable: {\n name: \"maskClosable\",\n required: false,\n description: \"点击蒙层是否允许关闭\",\n type: { name: \"boolean\", raw: \"boolean\" }\n }\n }\n};\n","import React from \"react\";\nimport { Table, type TableProps } from \"antd\";\n\nexport interface PageTableProps extends TableProps<Record<string, unknown>> {\n /** 水平滚动宽度 */\n scrollX?: number;\n /** 是否显示分页器 */\n showPagination?: boolean;\n /** 默认页面大小 */\n defaultPageSize?: number;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<PageTableProps> & { __docgenInfo?: DocgenInfo };\n\n/** 页面级表格组件,高度铺满容器,自动滚动 */\nexport const PageTable: React.FC<PageTableProps> = ({\n scrollX,\n showPagination = true,\n defaultPageSize = 10,\n ...props\n}) => {\n return (\n <Table\n {...props}\n scroll={{ \n x: scrollX || 'max-content', \n y: '50vh' \n }}\n pagination={showPagination ? {\n hideOnSinglePage: true,\n showSizeChanger: true,\n showQuickJumper: true,\n defaultPageSize,\n ...props.pagination,\n } : false}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(PageTable as ComponentWithDocgen).__docgenInfo = {\n displayName: \"PageTable\",\n description: \"页面级表格组件,高度铺满容器,自动滚动\",\n props: {\n scrollX: {\n name: \"scrollX\",\n required: false,\n description: \"水平滚动宽度\",\n type: { name: \"number\", raw: \"number\" }\n },\n showPagination: {\n name: \"showPagination\",\n required: false,\n description: \"是否显示分页器\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n defaultPageSize: {\n name: \"defaultPageSize\",\n required: false,\n description: \"默认页面大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"10\" }\n },\n columns: {\n name: \"columns\",\n required: false,\n description: \"表格列配置\",\n type: { name: \"ColumnType[]\", raw: \"ColumnType<any>[]\" }\n },\n dataSource: {\n name: \"dataSource\",\n required: false,\n description: \"数据源\",\n type: { name: \"any[]\", raw: \"any[]\" }\n },\n loading: {\n name: \"loading\",\n required: false,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n rowKey: {\n name: \"rowKey\",\n required: false,\n description: \"行数据的 Key\",\n type: { name: \"string | function\", raw: \"string | ((record: any) => string)\" }\n }\n }\n};\n","import React from \"react\";\nimport { createFromIconfontCN } from '@ant-design/icons';\n\nconst IconFont = createFromIconfontCN({\n scriptUrl: ['https://at.alicdn.com/t/c/font_4968458_eh91gfr4j9e.js'],\n});\n\nexport interface XcIconProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** 图标名称 */\n name: string;\n /** 图标大小 */\n size?: number | string;\n /** 图标颜色 */\n color?: string;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<XcIconProps> & { __docgenInfo?: DocgenInfo };\n\n/** 自定义图标组件,基于 iconfont */\nexport const XcIcon: React.FC<XcIconProps> = ({ \n name, \n size, \n color, \n style,\n ...props \n}) => {\n const iconStyle = {\n fontSize: size,\n color,\n ...style,\n };\n\n return (\n <IconFont \n {...props} \n type={name} \n style={iconStyle}\n />\n );\n};\n\n// 手动添加 docgen 信息\n(XcIcon as ComponentWithDocgen).__docgenInfo = {\n displayName: \"XcIcon\",\n description: \"自定义图标组件,基于 iconfont\",\n props: {\n name: {\n name: \"name\",\n required: true,\n description: \"图标名称\",\n type: { name: \"string\", raw: \"string\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"图标大小\",\n type: { name: \"number | string\", raw: \"number | string\" }\n },\n color: {\n name: \"color\",\n required: false,\n description: \"图标颜色\",\n type: { name: \"string\", raw: \"string\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n","import React from \"react\";\nimport { Empty, Flex, Spin } from \"antd\";\n\nexport interface EmptyAndSpinProps {\n /** 是否加载中 */\n loading: boolean;\n /** 空状态描述 */\n description?: React.ReactNode;\n /** 自定义类名 */\n className?: string;\n /** 空状态额外内容 */\n emptyChildren?: React.ReactNode;\n /** 加载中提示文字 */\n loadingText?: string;\n /** 空状态图片 */\n emptyImage?: string;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<EmptyAndSpinProps> & { __docgenInfo?: DocgenInfo };\n\n/** 空状态和加载状态组合组件 */\nexport const EmptyAndSpin: React.FC<EmptyAndSpinProps> = ({ \n loading, \n description = \"暂无数据\", \n className, \n emptyChildren,\n loadingText,\n emptyImage\n}) => {\n if (loading) {\n return (\n <Flex\n className={`pt-10 w-full ${className || ''}`}\n align=\"center\"\n justify=\"center\"\n vertical\n >\n <Spin size=\"large\" />\n {loadingText && <div className=\"mt-4 text-gray-500\">{loadingText}</div>}\n </Flex>\n );\n }\n\n return (\n <Flex\n className={`pt-10 w-full ${className || ''}`}\n align=\"center\"\n justify=\"center\"\n >\n <Empty\n image={emptyImage}\n description={description}\n imageStyle={{ height: 180 }}\n >\n {emptyChildren}\n </Empty>\n </Flex>\n );\n};\n\n// 手动添加 docgen 信息\n(EmptyAndSpin as ComponentWithDocgen).__docgenInfo = {\n displayName: \"EmptyAndSpin\",\n description: \"空状态和加载状态组合组件\",\n props: {\n loading: {\n name: \"loading\",\n required: true,\n description: \"是否加载中\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n description: {\n name: \"description\",\n required: false,\n description: \"空状态描述\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" },\n defaultValue: { value: '\"暂无数据\"' }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n emptyChildren: {\n name: \"emptyChildren\",\n required: false,\n description: \"空状态额外内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n loadingText: {\n name: \"loadingText\",\n required: false,\n description: \"加载中提示文字\",\n type: { name: \"string\", raw: \"string\" }\n },\n emptyImage: {\n name: \"emptyImage\",\n required: false,\n description: \"空状态图片\",\n type: { name: \"string\", raw: \"string\" }\n }\n }\n};\n","import React from \"react\";\nimport { Button } from \"antd\";\nimport { LeftOutlined } from '@ant-design/icons';\n\nexport interface BackButtonProps {\n /** 点击事件 */\n onClick?: () => void;\n /** 是否显示文字 */\n showText?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 按钮大小 */\n size?: \"small\" | \"middle\" | \"large\";\n /** 按钮类型 */\n type?: \"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\";\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<BackButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 返回按钮组件 */\nexport const BackButton: React.FC<BackButtonProps> = ({ \n onClick, \n showText = false,\n className,\n size = \"small\",\n type = \"default\"\n}) => {\n return (\n <Button\n size={size}\n type={type}\n icon={<LeftOutlined />}\n className={`cursor-pointer ${className || ''}`}\n onClick={onClick}\n >\n {showText && \"返回\"}\n </Button>\n );\n};\n\n// 手动添加 docgen 信息\n(BackButton as ComponentWithDocgen).__docgenInfo = {\n displayName: \"BackButton\",\n description: \"返回按钮组件\",\n props: {\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n showText: {\n name: \"showText\",\n required: false,\n description: \"是否显示文字\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n size: {\n name: \"size\",\n required: false,\n description: \"按钮大小\",\n type: { name: \"ButtonSize\", raw: '\"small\" | \"middle\" | \"large\"' },\n defaultValue: { value: '\"small\"' }\n },\n type: {\n name: \"type\",\n required: false,\n description: \"按钮类型\",\n type: { name: \"ButtonType\", raw: '\"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\"' },\n defaultValue: { value: '\"default\"' }\n }\n }\n};\n","import React from \"react\";\nimport { Button, type ButtonProps } from \"antd\";\n\nexport interface LinkButtonProps extends ButtonProps {\n /** 是否去除默认内边距 */\n removePadding?: boolean;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<LinkButtonProps> & { __docgenInfo?: DocgenInfo };\n\n/** 链接样式按钮组件,适用于表格操作列 */\nexport const LinkButton: React.FC<LinkButtonProps> = ({ \n removePadding = true,\n className,\n ...props \n}) => {\n const linkClassName = removePadding \n ? `px-0 h-auto ${className || ''}` \n : className;\n\n return (\n <Button \n type=\"link\" \n {...props} \n className={linkClassName}\n >\n {props.children}\n </Button>\n );\n};\n\n// 手动添加 docgen 信息\n(LinkButton as ComponentWithDocgen).__docgenInfo = {\n displayName: \"LinkButton\",\n description: \"链接样式按钮组件,适用于表格操作列\",\n props: {\n removePadding: {\n name: \"removePadding\",\n required: false,\n description: \"是否去除默认内边距\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n children: {\n name: \"children\",\n required: false,\n description: \"按钮内容\",\n type: { name: \"ReactNode\", raw: \"React.ReactNode\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: React.MouseEvent<HTMLButtonElement>) => void\" }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用\",\n type: { name: \"boolean\", raw: \"boolean\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n }\n }\n};\n","import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { Table, Input, Select, Button, Space, Form, Card } from \"antd\";\nimport { SearchOutlined, ReloadOutlined } from \"@ant-design/icons\";\nimport type { TableProps, TablePaginationConfig } from \"antd\";\nimport type { ColumnType } from \"antd/es/table\";\n\nconst { Option } = Select;\n\n// 搜索字段配置\nexport interface SearchFieldConfig {\n /** 字段名 */\n key: string;\n /** 字段标签 */\n label: string;\n /** 搜索类型 */\n type: 'input' | 'select';\n /** 选择器选项(当type为select时使用) */\n options?: Array<{ label: string; value: string | number }>;\n /** 占位符 */\n placeholder?: string;\n /** 默认值 */\n defaultValue?: unknown;\n}\n\n// 列配置扩展\nexport interface AdvancedColumnType<T = Record<string, unknown>> extends ColumnType<T> {\n /** 是否支持排序 */\n sortable?: boolean;\n /** 自定义渲染函数 */\n render?: (value: unknown, record: T, index: number) => React.ReactNode;\n}\n\n// 请求参数\nexport interface RequestParams {\n /** 页码 */\n page: number;\n /** 每页大小 */\n pageSize: number;\n /** 排序字段 */\n sortField?: string;\n /** 排序方向 */\n sortOrder?: 'ascend' | 'descend';\n /** 搜索参数 */\n searchParams?: Record<string, unknown>;\n}\n\n// 请求响应\nexport interface RequestResponse<T = Record<string, unknown>> {\n /** 数据列表 */\n data: T[];\n /** 总数 */\n total: number;\n /** 是否成功 */\n success: boolean;\n /** 错误信息 */\n message?: string;\n}\n\n// 组件属性\nexport interface AdvancedTableProps<T = Record<string, unknown>> extends Omit<TableProps<T>, 'dataSource' | 'loading' | 'pagination'> {\n /** 列配置 */\n columns: AdvancedColumnType<T>[];\n /** 异步请求函数 */\n request?: (params: RequestParams) => Promise<RequestResponse<T>>;\n /** 搜索字段配置 */\n searchFields?: SearchFieldConfig[];\n /** 是否显示搜索区域 */\n showSearch?: boolean;\n /** 是否显示刷新按钮 */\n showRefresh?: boolean;\n /** 默认页面大小 */\n defaultPageSize?: number;\n /** 页面大小选项 */\n pageSizeOptions?: string[];\n /** 是否自动加载 */\n autoLoad?: boolean;\n /** 请求参数(外部控制) */\n externalParams?: Record<string, unknown>;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<AdvancedTableProps> & { __docgenInfo?: DocgenInfo };\n\n/** 高阶表格组件,支持异步请求、搜索、排序等功能 */\nexport const AdvancedTable: React.FC<AdvancedTableProps> = ({\n columns,\n request,\n searchFields = [],\n showSearch = true,\n showRefresh = true,\n defaultPageSize = 10,\n pageSizeOptions = ['10', '20', '50', '100'],\n autoLoad = true,\n externalParams = {},\n ...tableProps\n}) => {\n // 状态管理\n const [dataSource, setDataSource] = useState<Record<string, unknown>[]>([]);\n const [loading, setLoading] = useState(false);\n const [pagination, setPagination] = useState({\n current: 1,\n pageSize: defaultPageSize,\n total: 0,\n });\n const [searchParams, setSearchParams] = useState<Record<string, unknown>>({});\n const [sortInfo, setSortInfo] = useState<{\n field?: string;\n order?: 'ascend' | 'descend';\n }>({});\n\n // 搜索表单\n const [form] = Form.useForm();\n \n // 使用 ref 来避免依赖问题\n const paginationRef = useRef(pagination);\n paginationRef.current = pagination;\n // 使用 ref 来避免 externalParams 的依赖问题\n const externalParamsRef = useRef(externalParams);\n externalParamsRef.current = externalParams;\n\n // 使用 ref 来跟踪是否已经初始化\n const initializedRef = useRef(false);\n\n // 处理列配置\n const processedColumns = useMemo(() => {\n return columns.map((col) => {\n const { sortable, render, ...restCol } = col;\n \n return {\n ...restCol,\n sorter: sortable ? true : undefined,\n render: render || ((value: unknown) => value as React.ReactNode),\n };\n });\n }, [columns]);\n\n // 加载数据\n const loadData = useCallback(async (params: Partial<RequestParams> = {}) => {\n if (!request) return;\n\n setLoading(true);\n try {\n const requestParams: RequestParams = {\n page: paginationRef.current.current,\n pageSize: paginationRef.current.pageSize,\n sortField: sortInfo.field,\n sortOrder: sortInfo.order,\n searchParams: { ...searchParams, ...externalParamsRef.current },\n ...params,\n };\n\n const response = await request(requestParams);\n \n if (response.success) {\n setDataSource(response.data);\n setPagination(prev => ({\n ...prev,\n total: response.total,\n current: requestParams.page || prev.current,\n }));\n }\n } catch (error) {\n console.error('加载数据失败:', error);\n } finally {\n setLoading(false);\n }\n }, [request, sortInfo, searchParams]);\n\n // 搜索处理\n const handleSearch = useCallback((values: Record<string, unknown>) => {\n setSearchParams(values);\n setPagination(prev => ({ ...prev, current: 1 }));\n }, []);\n\n // 重置搜索\n const handleReset = useCallback(() => {\n form.resetFields();\n setSearchParams({});\n setPagination(prev => ({ ...prev, current: 1 }));\n }, [form]);\n\n // 刷新数据\n const handleRefresh = useCallback(() => {\n loadData();\n }, [loadData]);\n\n // 分页变化\n const handleTableChange = useCallback((pagination: TablePaginationConfig, _filters: unknown, sorter: unknown) => {\n const newPagination = {\n current: pagination.current || 1,\n pageSize: pagination.pageSize || defaultPageSize,\n total: pagination.total || 0,\n };\n \n const newSortInfo = {\n field: (sorter as { field?: string })?.field,\n order: (sorter as { order?: 'ascend' | 'descend' })?.order,\n };\n\n setPagination(newPagination);\n setSortInfo(newSortInfo);\n }, [defaultPageSize]);\n\n // 初始加载和外部参数变化时重新加载\n useEffect(() => {\n const hasExternalParams = Object.keys(externalParams).length > 0;\n\n // 如果是自动加载且未初始化,或者是外部参数变化\n if ((autoLoad && !initializedRef.current) || hasExternalParams) {\n loadData();\n initializedRef.current = true;\n }\n }, [autoLoad, externalParams, loadData]);\n\n return (\n <div>\n {/* 搜索区域 */}\n {showSearch && searchFields.length > 0 && (\n <Card size=\"small\" style={{ marginBottom: 16 }}>\n <Form\n form={form}\n layout=\"inline\"\n onFinish={handleSearch}\n initialValues={searchFields.reduce((acc, field) => {\n if (field.defaultValue !== undefined) {\n acc[field.key] = field.defaultValue;\n }\n return acc;\n }, {} as Record<string, unknown>)}\n >\n {searchFields.map((field) => (\n <Form.Item key={field.key} name={field.key} label={field.label}>\n {field.type === 'input' ? (\n <Input\n placeholder={field.placeholder || `请输入${field.label}`}\n style={{ width: 200 }}\n />\n ) : (\n <Select\n placeholder={field.placeholder || `请选择${field.label}`}\n style={{ width: 200 }}\n allowClear\n >\n {field.options?.map((option) => (\n <Option key={option.value} value={option.value}>\n {option.label}\n </Option>\n ))}\n </Select>\n )}\n </Form.Item>\n ))}\n \n <Form.Item>\n <Space>\n <Button type=\"primary\" htmlType=\"submit\" icon={<SearchOutlined />}>\n 查询\n </Button>\n <Button onClick={handleReset}>重置</Button>\n {showRefresh && (\n <Button icon={<ReloadOutlined />} onClick={handleRefresh}>\n 刷新\n </Button>\n )}\n </Space>\n </Form.Item>\n </Form>\n </Card>\n )}\n\n {/* 表格 */}\n <Table\n {...tableProps}\n columns={processedColumns}\n dataSource={dataSource}\n loading={loading}\n pagination={{\n ...pagination,\n showSizeChanger: true,\n showQuickJumper: true,\n showTotal: (total, range) => `第 ${range[0]}-${range[1]} 条/共 ${total} 条`,\n pageSizeOptions,\n }}\n onChange={handleTableChange}\n scroll={{ x: 'max-content', y: '50vh' }}\n />\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(AdvancedTable as ComponentWithDocgen).__docgenInfo = {\n displayName: \"AdvancedTable\",\n description: \"高阶表格组件,支持异步请求、搜索、排序等功能\",\n props: {\n columns: {\n name: \"columns\",\n required: true,\n description: \"列配置\",\n type: { name: \"AdvancedColumnType[]\", raw: \"AdvancedColumnType<any>[]\" }\n },\n request: {\n name: \"request\",\n required: false,\n description: \"异步请求函数\",\n type: { name: \"function\", raw: \"(params: RequestParams) => Promise<RequestResponse>\" }\n },\n searchFields: {\n name: \"searchFields\",\n required: false,\n description: \"搜索字段配置\",\n type: { name: \"SearchFieldConfig[]\", raw: \"SearchFieldConfig[]\" },\n defaultValue: { value: \"[]\" }\n },\n showSearch: {\n name: \"showSearch\",\n required: false,\n description: \"是否显示搜索区域\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n showRefresh: {\n name: \"showRefresh\",\n required: false,\n description: \"是否显示刷新按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n defaultPageSize: {\n name: \"defaultPageSize\",\n required: false,\n description: \"默认页面大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"10\" }\n },\n pageSizeOptions: {\n name: \"pageSizeOptions\",\n required: false,\n description: \"页面大小选项\",\n type: { name: \"string[]\", raw: \"string[]\" },\n defaultValue: { value: '[\"10\", \"20\", \"50\", \"100\"]' }\n },\n autoLoad: {\n name: \"autoLoad\",\n required: false,\n description: \"是否自动加载\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n externalParams: {\n name: \"externalParams\",\n required: false,\n description: \"外部请求参数\",\n type: { name: \"Record<string, any>\", raw: \"Record<string, any>\" },\n defaultValue: { value: \"{}\" }\n }\n }\n};\n","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { Input } from \"antd\";\n\nexport interface DynamicInputProps {\n /** 动态展示的文案数组 */\n texts: string[];\n /** 输入框占位符 */\n placeholder?: string;\n /** 动画速度(毫秒) */\n animationSpeed?: number;\n /** 是否自动播放动画 */\n autoPlay?: boolean;\n /** 输入框值 */\n value?: string;\n /** 输入框变化回调 */\n onChange?: (value: string) => void;\n /** 其他 Input 属性 */\n [key: string]: unknown;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<DynamicInputProps> & { __docgenInfo?: DocgenInfo };\n\n/** 动态文案输入框组件,支持流式文字动画效果 */\nexport const DynamicInput: React.FC<DynamicInputProps> = ({\n texts = [],\n placeholder = \"请输入内容\",\n animationSpeed = 100,\n autoPlay = true,\n value,\n onChange,\n ...inputProps\n}) => {\n const [currentText, setCurrentText] = useState(\"\");\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isAnimating, setIsAnimating] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [isTyping, setIsTyping] = useState(false);\n \n const animationRef = useRef<number | undefined>(undefined);\n const typingRef = useRef<number | undefined>(undefined);\n const textsRef = useRef(texts);\n const currentIndexRef = useRef(currentIndex);\n const isFocusedRef = useRef(isFocused);\n const currentTextRef = useRef(currentText);\n\n // 更新 refs\n useEffect(() => {\n textsRef.current = texts;\n currentIndexRef.current = currentIndex;\n isFocusedRef.current = isFocused;\n currentTextRef.current = currentText;\n });\n\n // 打字机效果\n const typeText = useCallback((text: string, callback?: () => void) => {\n let index = 0;\n setIsTyping(true);\n \n const typeChar = () => {\n if (index < text.length) {\n setCurrentText(text.slice(0, index + 1));\n index++;\n typingRef.current = window.setTimeout(typeChar, animationSpeed);\n } else {\n setIsTyping(false);\n callback?.();\n }\n };\n \n typeChar();\n }, [animationSpeed]);\n\n // 删除文字效果\n const deleteText = useCallback((callback?: () => void) => {\n let index = currentTextRef.current.length;\n \n const deleteChar = () => {\n if (index > 0) {\n setCurrentText(currentTextRef.current.slice(0, index - 1));\n index--;\n typingRef.current = window.setTimeout(deleteChar, animationSpeed / 2);\n } else {\n callback?.();\n }\n };\n \n deleteChar();\n }, [animationSpeed]);\n\n // 循环播放动画\n const playAnimation = useCallback(() => {\n if (textsRef.current.length === 0 || isFocusedRef.current) return;\n \n setIsAnimating(true);\n \n const currentTextItem = textsRef.current[currentIndexRef.current];\n \n // 如果当前有文字,先删除\n if (currentTextRef.current) {\n deleteText(() => {\n // 删除完成后,开始输入新文字\n typeText(currentTextItem, () => {\n // 输入完成后,等待一段时间再继续\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length);\n setIsAnimating(false);\n }, 2000);\n });\n });\n } else {\n // 直接输入新文字\n typeText(currentTextItem, () => {\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length);\n setIsAnimating(false);\n }, 2000);\n });\n }\n }, [deleteText, typeText]);\n\n // 开始动画\n useEffect(() => {\n if (autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n \n return () => {\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n };\n }, [currentIndex, isFocused, autoPlay, texts.length, playAnimation]);\n\n // 当索引变化时重新播放动画\n useEffect(() => {\n if (!isAnimating && autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n }, [currentIndex, isAnimating, autoPlay, texts.length, isFocused, playAnimation]);\n\n // 处理焦点事件\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // 清除所有动画\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n setIsAnimating(false);\n setIsTyping(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n // 如果输入框为空,重新开始动画\n if (!value && texts.length > 0) {\n setCurrentText(\"\");\n setCurrentIndex(0);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (inputProps as any).onChange?.(e);\n };\n\n // 获取显示的占位符文本\n const getPlaceholderText = () => {\n if (isFocused || value) {\n return placeholder;\n }\n return currentText || placeholder;\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <Input\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n {...(inputProps as any)}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={getPlaceholderText()}\n style={{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(inputProps as any).style,\n position: \"relative\",\n zIndex: 1,\n }}\n />\n \n {/* 动态文字覆盖层 */}\n {!isFocused && !value && currentText && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: 11,\n paddingRight: 11,\n color: \"#bfbfbf\",\n pointerEvents: \"none\",\n zIndex: 2,\n fontSize: 14,\n fontFamily: \"inherit\",\n }}\n >\n <span>{currentText}</span>\n {/* 光标效果 */}\n {isTyping && (\n <span\n style={{\n display: \"inline-block\",\n width: 1,\n height: \"1.2em\",\n backgroundColor: \"#1890ff\",\n marginLeft: 2,\n animation: \"blink 1s infinite\",\n }}\n />\n )}\n </div>\n )}\n \n {/* 添加光标闪烁动画 */}\n <style>\n {`\n @keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `}\n </style>\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(DynamicInput as ComponentWithDocgen).__docgenInfo = {\n displayName: \"DynamicInput\",\n description: \"动态文案输入框组件,支持流式文字动画效果\",\n props: {\n texts: {\n name: \"texts\",\n required: true,\n description: \"动态展示的文案数组\",\n type: { name: \"string[]\", raw: \"string[]\" }\n },\n placeholder: {\n name: \"placeholder\",\n required: false,\n description: \"输入框占位符\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"请输入内容\"' }\n },\n animationSpeed: {\n name: \"animationSpeed\",\n required: false,\n description: \"动画速度(毫秒)\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"100\" }\n },\n autoPlay: {\n name: \"autoPlay\",\n required: false,\n description: \"是否自动播放动画\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n value: {\n name: \"value\",\n required: false,\n description: \"输入框值\",\n type: { name: \"string\", raw: \"string\" }\n },\n onChange: {\n name: \"onChange\",\n required: false,\n description: \"输入框变化回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n }\n }\n};","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { Button } from \"antd\";\nimport { SendOutlined } from \"@ant-design/icons\";\n\n/**\n * DynamicTextArea 组件的属性接口\n * 支持受控和非受控两种模式,具有动态文案动画效果\n */\nexport interface DynamicTextAreaProps {\n /** 动态展示的文案数组,会循环播放打字机效果 */\n texts: string[];\n /** 输入框占位符文本 */\n placeholder?: string;\n /** 打字机动画的速度,单位毫秒,数值越小速度越快 */\n animationSpeed?: number;\n /** 是否自动播放动态文案动画 */\n autoPlay?: boolean;\n /** 输入框的值,用于受控模式 */\n value?: string;\n /** 输入框值变化时的回调函数,用于受控模式 */\n onChange?: (value: string) => void;\n /** 点击提交按钮时的回调函数 */\n onSubmit?: (value: string) => void;\n /** 最大输入字符数限制 */\n maxLength?: number;\n /** 是否在底部显示字数统计 */\n showCount?: boolean;\n /** 提交按钮的文本内容 */\n submitText?: string;\n /** 是否禁用整个组件 */\n disabled?: boolean;\n /** 文本域的行数,影响初始高度 */\n rows?: number;\n /** 自定义样式对象 */\n style?: React.CSSProperties;\n /** 其他原生 textarea 属性 */\n [key: string]: unknown;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<DynamicTextAreaProps> & { __docgenInfo?: DocgenInfo };\n\n/**\n * 动态文案文本域组件\n * \n * 功能特性:\n * 1. 支持受控和非受控两种模式\n * 2. 动态文案打字机效果,循环播放预设文案\n * 3. 内置提交按钮,位于文本框右下角\n * 4. 支持字数限制和字数统计显示\n * 5. 支持键盘快捷键提交(Ctrl+Enter 或 Cmd+Enter)\n * 6. 智能占位符显示,避免与动态文案重叠\n * \n * @param props - 组件属性\n * @returns JSX 元素\n */\nexport const DynamicTextArea: React.FC<DynamicTextAreaProps> = ({\n texts = [], // 动态文案数组,默认为空数组\n placeholder = \"请输入内容\", // 占位符文本\n animationSpeed = 100, // 打字机动画速度,毫秒\n autoPlay = true, // 是否自动播放动画\n value = \"\", // 受控模式的值\n onChange, // 受控模式的变化回调\n onSubmit, // 提交回调\n maxLength = 500, // 最大字符数限制\n showCount = true, // 是否显示字数统计\n submitText = \"发送\", // 提交按钮文本\n disabled = false, // 是否禁用组件\n rows = 4, // 文本域行数\n style, // 自定义样式\n ...otherProps // 其他原生属性\n}) => {\n // ==================== 状态管理 ====================\n \n /** 当前显示的动态文案内容 */\n const [currentText, setCurrentText] = useState(\"\");\n \n /** 当前播放的文案在数组中的索引 */\n const [currentIndex, setCurrentIndex] = useState(0);\n \n /** 是否正在播放动画(用于控制动画循环) */\n const [isAnimating, setIsAnimating] = useState(false);\n \n /** 文本域是否获得焦点 */\n const [isFocused, setIsFocused] = useState(false);\n \n /** 是否正在打字(用于显示光标效果) */\n const [isTyping, setIsTyping] = useState(false);\n \n /** 非受控模式下的内部状态值 */\n const [internalValue, setInternalValue] = useState(value || \"\");\n \n // ==================== Refs 引用 ====================\n \n /** 动画定时器引用,用于清除动画 */\n const animationRef = useRef<number | undefined>(undefined);\n \n /** 打字机效果定时器引用,用于清除打字动画 */\n const typingRef = useRef<number | undefined>(undefined);\n \n /** 文案数组的引用,避免闭包问题 */\n const textsRef = useRef(texts);\n \n /** 当前索引的引用,避免闭包问题 */\n const currentIndexRef = useRef(currentIndex);\n \n /** 焦点状态的引用,避免闭包问题 */\n const isFocusedRef = useRef(isFocused);\n \n /** 当前文案的引用,避免闭包问题 */\n const currentTextRef = useRef(currentText);\n \n /** 文本域 DOM 元素的引用 */\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // ==================== 副作用更新 ====================\n \n /**\n * 更新所有 refs 的值,确保在回调函数中能获取到最新的状态\n * 这是为了避免闭包陷阱,确保动画函数能访问到最新的状态值\n */\n useEffect(() => {\n textsRef.current = texts;\n currentIndexRef.current = currentIndex;\n isFocusedRef.current = isFocused;\n currentTextRef.current = currentText;\n });\n\n // ==================== 动画效果函数 ====================\n \n /**\n * 打字机效果函数\n * 逐字符显示文本,模拟真实的打字过程\n * \n * @param text - 要显示的完整文本\n * @param callback - 打字完成后的回调函数\n */\n const typeText = useCallback((text: string, callback?: () => void) => {\n let index = 0; // 当前显示的字符索引\n setIsTyping(true); // 开始打字状态,显示光标\n \n const typeChar = () => {\n if (index < text.length) {\n // 显示从开始到当前索引的字符\n setCurrentText(text.slice(0, index + 1));\n index++;\n // 设置定时器,继续下一个字符\n typingRef.current = window.setTimeout(typeChar, animationSpeed);\n } else {\n // 打字完成\n setIsTyping(false); // 隐藏光标\n callback?.(); // 执行完成回调\n }\n };\n \n typeChar(); // 开始打字\n }, [animationSpeed]);\n\n /**\n * 删除文字效果函数\n * 逐字符删除文本,模拟删除过程\n * \n * @param callback - 删除完成后的回调函数\n */\n const deleteText = useCallback((callback?: () => void) => {\n let index = currentTextRef.current.length; // 从最后一个字符开始删除\n \n const deleteChar = () => {\n if (index > 0) {\n // 删除一个字符\n setCurrentText(currentTextRef.current.slice(0, index - 1));\n index--;\n // 设置定时器,继续删除下一个字符(删除速度比打字快一倍)\n typingRef.current = window.setTimeout(deleteChar, animationSpeed / 2);\n } else {\n // 删除完成\n callback?.(); // 执行完成回调\n }\n };\n \n deleteChar(); // 开始删除\n }, [animationSpeed]);\n\n /**\n * 循环播放动画函数\n * 控制整个动画流程:删除当前文案 -> 输入新文案 -> 等待 -> 循环\n * \n * 动画流程:\n * 1. 检查是否有文案且未获得焦点\n * 2. 如果有当前文案,先删除\n * 3. 删除完成后,输入新的文案\n * 4. 输入完成后,等待2秒\n * 5. 切换到下一个文案,重新开始循环\n */\n const playAnimation = useCallback(() => {\n // 如果没有文案或已获得焦点,则不播放动画\n if (textsRef.current.length === 0 || isFocusedRef.current) return;\n \n setIsAnimating(true); // 标记正在播放动画\n \n const currentTextItem = textsRef.current[currentIndexRef.current]; // 获取当前要显示的文案\n \n // 如果当前有文案,先删除再输入新文案\n if (currentTextRef.current) {\n deleteText(() => {\n // 删除完成后的回调:开始输入新文案\n typeText(currentTextItem, () => {\n // 输入完成后的回调:等待2秒后切换到下一个文案\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length); // 循环到下一个文案\n setIsAnimating(false); // 标记动画结束\n }, 2000); // 等待2秒\n });\n });\n } else {\n // 如果当前没有文案,直接输入新文案\n typeText(currentTextItem, () => {\n animationRef.current = window.setTimeout(() => {\n setCurrentIndex((prev) => (prev + 1) % textsRef.current.length); // 循环到下一个文案\n setIsAnimating(false); // 标记动画结束\n }, 2000); // 等待2秒\n });\n }\n }, [deleteText, typeText]);\n\n // 开始动画\n useEffect(() => {\n if (autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n \n return () => {\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n };\n }, [currentIndex, isFocused, autoPlay, texts.length, playAnimation]);\n\n // 当索引变化时重新播放动画\n useEffect(() => {\n if (!isAnimating && autoPlay && texts.length > 0 && !isFocused) {\n playAnimation();\n }\n }, [currentIndex, isAnimating, autoPlay, texts.length, isFocused, playAnimation]);\n\n // 处理焦点事件\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n // 清除所有动画\n if (animationRef.current) {\n window.clearTimeout(animationRef.current);\n }\n if (typingRef.current) {\n window.clearTimeout(typingRef.current);\n }\n setIsAnimating(false);\n setIsTyping(false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(false);\n // 如果输入框为空,重新开始动画\n if (!value && texts.length > 0) {\n setCurrentText(\"\");\n setCurrentIndex(0);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onBlur?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n if (maxLength && newValue.length > maxLength) {\n return; // 超过最大长度时不更新\n }\n \n // 如果是受控模式,调用外部 onChange\n if (onChange) {\n onChange(newValue);\n } else {\n // 非受控模式,更新内部状态\n setInternalValue(newValue);\n }\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onChange?.(e);\n };\n\n const handleSubmit = () => {\n const currentValue = onChange ? value : internalValue;\n if (currentValue.trim() && !disabled) {\n onSubmit?.(currentValue);\n // 非受控模式下,提交后清空内部状态\n if (!onChange) {\n setInternalValue(\"\");\n }\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Ctrl+Enter 或 Cmd+Enter 提交\n if ((e.ctrlKey || e.metaKey) && e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (otherProps as any).onKeyDown?.(e);\n };\n\n const currentValue = onChange ? value : internalValue;\n const isSubmitDisabled = disabled || !currentValue.trim() || (maxLength ? currentValue.length > maxLength : false);\n\n return (\n <div style={{ position: \"relative\", ...style }}>\n <div style={{ position: \"relative\" }}>\n <textarea\n ref={textareaRef}\n value={onChange ? value : internalValue}\n onChange={handleChange}\n onFocus={(e) => {\n e.target.style.borderColor = \"#1890ff\";\n e.target.style.boxShadow = \"0 0 0 2px rgba(24, 144, 255, 0.2)\";\n handleFocus(e);\n }}\n onBlur={(e) => {\n e.target.style.borderColor = \"#d9d9d9\";\n e.target.style.boxShadow = \"none\";\n handleBlur(e);\n }}\n onKeyDown={handleKeyDown}\n placeholder={isFocused || currentValue ? placeholder : \"\"} // 只在聚焦或有值时显示 placeholder\n maxLength={maxLength}\n rows={rows}\n disabled={disabled}\n style={{\n width: \"100%\",\n minHeight: `${rows * 24 + 16}px`,\n padding: \"8px 60px 8px 12px\", // 右侧留出按钮空间\n border: \"1px solid #d9d9d9\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n lineHeight: \"1.5\",\n fontFamily: \"inherit\",\n resize: \"vertical\",\n outline: \"none\",\n transition: \"border-color 0.3s, box-shadow 0.3s\",\n backgroundColor: \"#fff\",\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...(otherProps as any).style,\n }}\n {...otherProps}\n />\n \n {/* 动态文字覆盖层 - 只在未聚焦且无值时显示 */}\n {!isFocused && !currentValue && currentText && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"flex-start\",\n paddingTop: 8,\n paddingLeft: 12,\n paddingRight: 12,\n color: \"#bfbfbf\",\n pointerEvents: \"none\",\n zIndex: 2,\n fontSize: 14,\n fontFamily: \"inherit\",\n lineHeight: \"1.5\",\n }}\n >\n <span>{currentText}</span>\n {/* 光标效果 */}\n {isTyping && (\n <span\n style={{\n display: \"inline-block\",\n width: 1,\n height: \"1.2em\",\n backgroundColor: \"#1890ff\",\n marginLeft: 2,\n animation: \"blink 1s infinite\",\n }}\n />\n )}\n </div>\n )}\n \n {/* 提交按钮 */}\n <div\n style={{\n position: \"absolute\",\n bottom: 8,\n right: 8,\n zIndex: 3,\n }}\n >\n <Button\n type=\"primary\"\n size=\"small\"\n icon={<SendOutlined />}\n onClick={handleSubmit}\n disabled={isSubmitDisabled}\n style={{\n borderRadius: 6,\n minWidth: 32,\n height: 32,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {submitText}\n </Button>\n </div>\n </div>\n \n {/* 字数统计 */}\n {showCount && (\n <div\n style={{\n marginTop: 4,\n textAlign: \"right\",\n fontSize: \"12px\",\n color: \"#999\",\n }}\n >\n {currentValue.length}/{maxLength}\n </div>\n )}\n \n {/* 添加光标闪烁动画 */}\n <style>\n {`\n @keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n `}\n </style>\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(DynamicTextArea as ComponentWithDocgen).__docgenInfo = {\n displayName: \"DynamicTextArea\",\n description: \"动态文案文本域组件,支持流式文字动画效果\",\n props: {\n texts: {\n name: \"texts\",\n required: true,\n description: \"动态展示的文案数组\",\n type: { name: \"string[]\", raw: \"string[]\" }\n },\n placeholder: {\n name: \"placeholder\",\n required: false,\n description: \"输入框占位符\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"请输入内容\"' }\n },\n animationSpeed: {\n name: \"animationSpeed\",\n required: false,\n description: \"动画速度(毫秒)\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"100\" }\n },\n autoPlay: {\n name: \"autoPlay\",\n required: false,\n description: \"是否自动播放动画\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n value: {\n name: \"value\",\n required: false,\n description: \"输入框值\",\n type: { name: \"string\", raw: \"string\" }\n },\n onChange: {\n name: \"onChange\",\n required: false,\n description: \"输入框变化回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n },\n onSubmit: {\n name: \"onSubmit\",\n required: false,\n description: \"提交回调\",\n type: { name: \"function\", raw: \"(value: string) => void\" }\n },\n maxLength: {\n name: \"maxLength\",\n required: false,\n description: \"最大输入字数\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"500\" }\n },\n showCount: {\n name: \"showCount\",\n required: false,\n description: \"是否显示字数统计\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n submitText: {\n name: \"submitText\",\n required: false,\n description: \"提交按钮文本\",\n type: { name: \"string\", raw: \"string\" },\n defaultValue: { value: '\"发送\"' }\n },\n disabled: {\n name: \"disabled\",\n required: false,\n description: \"是否禁用提交按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"false\" }\n },\n rows: {\n name: \"rows\",\n required: false,\n description: \"文本域行数\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"4\" }\n }\n }\n};","import React, { useRef, useState, useCallback } from \"react\";\nimport { Card as AntCard, type CardProps as AntCardProps } from \"antd\";\nimport { PlayCircleOutlined, PauseCircleOutlined } from \"@ant-design/icons\";\nimport \"./index.css\";\n\nexport interface VideoCardProps extends Omit<AntCardProps, 'title' | 'children'> {\n /** 视频源地址 */\n src: string;\n /** 视频海报图片 */\n poster?: string;\n /** 卡片宽度 */\n width?: number | string;\n /** 卡片高度 */\n height?: number | string;\n /** 视频宽度 */\n videoWidth?: number | string;\n /** 视频高度 */\n videoHeight?: number | string;\n /** 是否显示播放按钮 */\n showPlayButton?: boolean;\n /** 是否自动播放(鼠标悬浮时) */\n autoPlayOnHover?: boolean;\n /** 点击事件 */\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n /** 视频加载完成事件 */\n onVideoLoaded?: () => void;\n /** 视频播放事件 */\n onVideoPlay?: () => void;\n /** 视频暂停事件 */\n onVideoPause?: () => void;\n /** 视频结束事件 */\n onVideoEnded?: () => void;\n /** 自定义样式类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<VideoCardProps> & { __docgenInfo?: DocgenInfo };\n\n/** 视频卡片组件,支持鼠标悬浮播放控制 */\nexport const VideoCard: React.FC<VideoCardProps> = ({\n src,\n poster,\n width = 300,\n height,\n videoWidth, // 参数保留但不使用,由CSS控制\n videoHeight, // 参数保留但不使用,由CSS控制\n showPlayButton = true,\n autoPlayOnHover = true,\n onClick,\n onVideoLoaded,\n onVideoPlay,\n onVideoPause,\n onVideoEnded,\n className,\n style,\n ...rest\n}) => {\n // 忽略videoWidth和videoHeight,video尺寸完全由CSS控制\n void videoWidth;\n void videoHeight;\n const videoRef = useRef<HTMLVideoElement>(null);\n const [isPlaying, setIsPlaying] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n const [isLoaded, setIsLoaded] = useState(false);\n\n // 播放视频\n const playVideo = useCallback(() => {\n if (videoRef.current) {\n videoRef.current.play();\n setIsPlaying(true);\n onVideoPlay?.();\n }\n }, [onVideoPlay]);\n\n // 暂停视频\n const pauseVideo = useCallback(() => {\n if (videoRef.current) {\n videoRef.current.pause();\n setIsPlaying(false);\n onVideoPause?.();\n }\n }, [onVideoPause]);\n\n // 切换播放状态\n const togglePlay = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n if (isPlaying) {\n pauseVideo();\n } else {\n playVideo();\n }\n }, [isPlaying, playVideo, pauseVideo]);\n\n // 鼠标进入\n const handleMouseEnter = useCallback(() => {\n setIsHovered(true);\n if (autoPlayOnHover && !isPlaying) {\n playVideo();\n }\n }, [autoPlayOnHover, isPlaying, playVideo]);\n\n // 鼠标离开\n const handleMouseLeave = useCallback(() => {\n setIsHovered(false);\n if (autoPlayOnHover && isPlaying) {\n pauseVideo();\n }\n }, [autoPlayOnHover, isPlaying, pauseVideo]);\n\n // 视频加载完成\n const handleVideoLoaded = useCallback(() => {\n setIsLoaded(true);\n onVideoLoaded?.();\n }, [onVideoLoaded]);\n\n // 视频播放事件\n const handleVideoPlay = useCallback(() => {\n setIsPlaying(true);\n onVideoPlay?.();\n }, [onVideoPlay]);\n\n // 视频暂停事件\n const handleVideoPause = useCallback(() => {\n setIsPlaying(false);\n onVideoPause?.();\n }, [onVideoPause]);\n\n // 视频结束事件\n const handleVideoEnded = useCallback(() => {\n setIsPlaying(false);\n onVideoEnded?.();\n }, [onVideoEnded]);\n\n // 卡片点击事件\n const handleCardClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n }, [onClick]);\n\n return (\n <AntCard\n {...rest}\n className={`video-card ${className || ''}`}\n style={{\n width,\n height,\n padding: 0,\n overflow: 'hidden',\n cursor: onClick ? 'pointer' : 'default',\n border: 'none',\n borderRadius: 0,\n ...style\n }}\n bordered={false}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleCardClick}\n >\n <div className=\"video-card-container\">\n <video\n ref={videoRef}\n src={src}\n poster={poster}\n preload=\"metadata\"\n onLoadedData={handleVideoLoaded}\n onPlay={handleVideoPlay}\n onPause={handleVideoPause}\n onEnded={handleVideoEnded}\n muted={true}\n loop={true}\n />\n \n {/* 播放/暂停按钮 */}\n {showPlayButton && (\n <div \n className={`video-play-button ${isHovered ? 'hovered' : ''}`}\n onClick={togglePlay}\n >\n {isPlaying ? (\n <PauseCircleOutlined className=\"play-icon\" />\n ) : (\n <PlayCircleOutlined className=\"play-icon\" />\n )}\n </div>\n )}\n\n {/* 加载遮罩 */}\n {!isLoaded && (\n <div className=\"video-loading-mask\">\n <div className=\"loading-spinner\" />\n </div>\n )}\n </div>\n </AntCard>\n );\n};\n\n// 手动添加 docgen 信息\n(VideoCard as ComponentWithDocgen).__docgenInfo = {\n displayName: \"VideoCard\",\n description: \"视频卡片组件,支持鼠标悬浮播放控制\",\n props: {\n src: {\n name: \"src\",\n required: true,\n description: \"视频源地址\",\n type: { name: \"string\", raw: \"string\" }\n },\n poster: {\n name: \"poster\",\n required: false,\n description: \"视频海报图片\",\n type: { name: \"string\", raw: \"string\" }\n },\n width: {\n name: \"width\",\n required: false,\n description: \"卡片宽度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: \"300\" }\n },\n height: {\n name: \"height\",\n required: false,\n description: \"卡片高度\",\n type: { name: \"number | string\", raw: \"number | string\" }\n },\n videoWidth: {\n name: \"videoWidth\",\n required: false,\n description: \"视频宽度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: '\"100%\"' }\n },\n videoHeight: {\n name: \"videoHeight\",\n required: false,\n description: \"视频高度\",\n type: { name: \"number | string\", raw: \"number | string\" },\n defaultValue: { value: '\"100%\"' }\n },\n showPlayButton: {\n name: \"showPlayButton\",\n required: false,\n description: \"是否显示播放按钮\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n autoPlayOnHover: {\n name: \"autoPlayOnHover\",\n required: false,\n description: \"是否自动播放(鼠标悬浮时)\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n onClick: {\n name: \"onClick\",\n required: false,\n description: \"点击事件\",\n type: { name: \"function\", raw: \"(event: React.MouseEvent<HTMLDivElement>) => void\" }\n },\n onVideoLoaded: {\n name: \"onVideoLoaded\",\n required: false,\n description: \"视频加载完成事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoPlay: {\n name: \"onVideoPlay\",\n required: false,\n description: \"视频播放事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoPause: {\n name: \"onVideoPause\",\n required: false,\n description: \"视频暂停事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n onVideoEnded: {\n name: \"onVideoEnded\",\n required: false,\n description: \"视频结束事件\",\n type: { name: \"function\", raw: \"() => void\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义样式类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\nimport { VideoCard } from \"../VideoCard\";\nimport \"./index.css\";\n\nexport interface WaterfallItem {\n /** 媒体资源地址 */\n url: string;\n /** 媒体类型,不传则自动根据后缀判断 */\n type?: 'image' | 'video';\n /** 视频海报图(仅视频有效) */\n poster?: string;\n /** 唯一标识 */\n id?: string | number;\n /** 点击回调 */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClick?: (item: any) => void;\n /** 其他自定义数据 */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface WaterfallProps {\n /** 媒体资源数组 */\n items: WaterfallItem[];\n /** 列数(默认会根据屏幕宽度自动响应) */\n columns?: number;\n /** 间隔大小 */\n gap?: number;\n /** 是否启用响应式布局 */\n responsive?: boolean;\n /** 响应式断点配置 */\n breakpoints?: {\n xs?: number; // < 576px\n sm?: number; // >= 576px\n md?: number; // >= 768px\n lg?: number; // >= 992px\n xl?: number; // >= 1200px\n xxl?: number; // >= 1600px\n };\n /** 自定义类名 */\n className?: string;\n /** 自定义样式 */\n style?: React.CSSProperties;\n}\n\ntype DocgenInfo = {\n displayName: string;\n description: string;\n props: Record<string, {\n name: string;\n required: boolean;\n description: string;\n type: { name: string; raw: string };\n defaultValue?: { value: string };\n }>;\n};\n\ntype ComponentWithDocgen = React.FC<WaterfallProps> & { __docgenInfo?: DocgenInfo };\n\n// 判断是否为视频 URL\nconst isVideoUrl = (url: string): boolean => {\n const videoExtensions = ['.mp4', '.webm', '.ogg', '.mov', '.avi', '.wmv', '.flv', '.mkv'];\n return videoExtensions.some(ext => url.toLowerCase().includes(ext));\n};\n\n// 获取媒体类型\nconst getMediaType = (item: WaterfallItem): 'image' | 'video' => {\n if (item.type) return item.type;\n if (isVideoUrl(item.url)) return 'video';\n return 'image';\n};\n\n/** 瀑布流布局组件,支持图片和视频混合展示 */\nexport const Waterfall: React.FC<WaterfallProps> = ({\n items,\n columns,\n gap = 0,\n responsive = true,\n breakpoints = {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n xxl: 6\n },\n className,\n style\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [columnCount, setColumnCount] = useState<number>(columns || breakpoints.md || 3);\n const itemRefs = useRef<Map<string | number, HTMLDivElement>>(new Map());\n\n // 计算当前应该显示的列数\n const calculateColumns = useCallback(() => {\n if (!responsive || columns) {\n return columns || breakpoints.md || 3;\n }\n\n const width = window.innerWidth;\n \n if (width < 576) return breakpoints.xs || 1;\n if (width < 768) return breakpoints.sm || 2;\n if (width < 992) return breakpoints.md || 3;\n if (width < 1200) return breakpoints.lg || 4;\n if (width < 1600) return breakpoints.xl || 5;\n return breakpoints.xxl || 6;\n }, [responsive, columns, breakpoints]);\n\n // 布局计算\n const calculateLayout = useCallback(() => {\n if (!containerRef.current) return;\n\n const cols = columnCount;\n const container = containerRef.current;\n const containerWidth = container.offsetWidth;\n const columnWidth = (containerWidth - gap * (cols - 1)) / cols;\n \n // 初始化每列的高度\n const heights = new Array(cols).fill(0);\n\n // 为每个元素计算位置\n items.forEach((item, index) => {\n const key = item.id || index;\n const element = itemRefs.current.get(key);\n \n if (!element) return;\n\n // 找到最短的列\n const minHeight = Math.min(...heights);\n const columnIndex = heights.indexOf(minHeight);\n\n // 计算位置\n const left = columnIndex * (columnWidth + gap);\n const top = heights[columnIndex];\n\n // 设置元素位置和宽度\n element.style.position = 'absolute';\n element.style.left = `${left}px`;\n element.style.top = `${top}px`;\n element.style.width = `${columnWidth}px`;\n\n // 更新列高度\n heights[columnIndex] += element.offsetHeight + gap;\n });\n\n // 设置容器高度\n const maxHeight = Math.max(...heights);\n container.style.height = `${maxHeight}px`;\n }, [items, columnCount, gap]);\n\n // 处理窗口大小变化\n useEffect(() => {\n const handleResize = () => {\n const newColumns = calculateColumns();\n if (newColumns !== columnCount) {\n setColumnCount(newColumns);\n }\n };\n\n if (responsive) {\n window.addEventListener('resize', handleResize);\n handleResize();\n \n return () => window.removeEventListener('resize', handleResize);\n }\n }, [responsive, calculateColumns, columnCount]);\n\n // 重新计算布局\n useEffect(() => {\n // 等待所有图片和视频加载完成后再计算布局\n const timer = setTimeout(() => {\n calculateLayout();\n }, 100);\n\n return () => clearTimeout(timer);\n }, [items, columnCount, calculateLayout]);\n\n // 图片加载完成后重新计算布局\n const handleImageLoad = useCallback(() => {\n calculateLayout();\n }, [calculateLayout]);\n\n // 处理项目点击\n const handleItemClick = useCallback((item: WaterfallItem) => {\n item.onClick?.(item);\n }, []);\n\n return (\n <div\n ref={containerRef}\n className={`waterfall-container ${className || ''}`}\n style={{\n position: 'relative',\n width: '100%',\n ...style\n }}\n >\n {items.map((item, index) => {\n const key = item.id || index;\n const mediaType = getMediaType(item);\n\n return (\n <div\n key={key}\n ref={el => {\n if (el) {\n itemRefs.current.set(key, el);\n } else {\n itemRefs.current.delete(key);\n }\n }}\n className=\"waterfall-item\"\n >\n {mediaType === 'video' ? (\n <div style={{ \n width: '100%', \n position: 'relative', \n paddingBottom: '56.25%',\n cursor: item.onClick ? 'pointer' : 'default'\n }}>\n <div style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' }}>\n <VideoCard\n src={item.url}\n poster={item.poster}\n width=\"100%\"\n height=\"100%\"\n onClick={() => handleItemClick(item)}\n onVideoLoaded={handleImageLoad}\n autoPlayOnHover={true}\n showPlayButton={false}\n />\n </div>\n </div>\n ) : (\n <div \n className=\"waterfall-image-wrapper\"\n onClick={() => handleItemClick(item)}\n style={{ cursor: item.onClick ? 'pointer' : 'default' }}\n >\n <img\n src={item.url}\n alt={`瀑布流图片 ${index + 1}`}\n className=\"waterfall-image\"\n onLoad={handleImageLoad}\n onError={handleImageLoad}\n style={{ display: 'block', width: '100%', height: 'auto' }}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\n// 手动添加 docgen 信息\n(Waterfall as ComponentWithDocgen).__docgenInfo = {\n displayName: \"Waterfall\",\n description: \"瀑布流布局组件,支持图片和视频混合展示\",\n props: {\n items: {\n name: \"items\",\n required: true,\n description: \"媒体资源数组\",\n type: { name: \"WaterfallItem[]\", raw: \"WaterfallItem[]\" }\n },\n columns: {\n name: \"columns\",\n required: false,\n description: \"列数(默认会根据屏幕宽度自动响应)\",\n type: { name: \"number\", raw: \"number\" }\n },\n gap: {\n name: \"gap\",\n required: false,\n description: \"间隔大小\",\n type: { name: \"number\", raw: \"number\" },\n defaultValue: { value: \"0\" }\n },\n responsive: {\n name: \"responsive\",\n required: false,\n description: \"是否启用响应式布局\",\n type: { name: \"boolean\", raw: \"boolean\" },\n defaultValue: { value: \"true\" }\n },\n breakpoints: {\n name: \"breakpoints\",\n required: false,\n description: \"响应式断点配置\",\n type: { name: \"object\", raw: \"{ xs?: number; sm?: number; md?: number; lg?: number; xl?: number; xxl?: number; }\" }\n },\n className: {\n name: \"className\",\n required: false,\n description: \"自定义类名\",\n type: { name: \"string\", raw: \"string\" }\n },\n style: {\n name: \"style\",\n required: false,\n description: \"自定义样式\",\n type: { name: \"CSSProperties\", raw: \"React.CSSProperties\" }\n }\n }\n};\n\n","import { theme } from 'antd';\n\n// 明亮主题配置\nexport const lightTheme = {\n algorithm: theme.defaultAlgorithm,\n token: {\n // 主色\n colorPrimary: '#3b82f6',\n colorSuccess: '#10b981',\n colorWarning: '#f59e0b',\n colorError: '#ef4444',\n colorInfo: '#3b82f6',\n \n // 背景色\n colorBgBase: '#ffffff',\n colorBgContainer: '#ffffff',\n colorBgElevated: '#ffffff',\n colorBgLayout: '#f8fafc',\n \n // 文字色\n colorTextBase: '#1e293b',\n colorText: '#1e293b',\n colorTextSecondary: '#64748b',\n colorTextTertiary: '#94a3b8',\n colorTextQuaternary: '#cbd5e1',\n \n // 边框色\n colorBorder: '#e2e8f0',\n colorBorderSecondary: '#f1f5f9',\n \n // 阴影\n boxShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n boxShadowSecondary: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n \n // 圆角\n borderRadius: 8,\n borderRadiusLG: 12,\n borderRadiusSM: 6,\n \n // 字体\n fontFamily: 'Inter, system-ui, Arial, sans-serif',\n fontSize: 14,\n fontSizeLG: 16,\n fontSizeSM: 12,\n \n // 间距\n padding: 16,\n paddingLG: 24,\n paddingSM: 12,\n paddingXS: 8,\n \n // 高度\n controlHeight: 32,\n controlHeightLG: 40,\n controlHeightSM: 24,\n },\n components: {\n Button: {\n borderRadius: 8,\n controlHeight: 32,\n fontWeight: 500,\n },\n Card: {\n borderRadiusLG: 12,\n boxShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',\n },\n Input: {\n borderRadius: 8,\n controlHeight: 32,\n },\n Table: {\n borderRadiusLG: 8,\n headerBg: '#f8fafc',\n headerColor: '#374151',\n },\n },\n};\n\nexport default lightTheme;\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","Button","variant","loading","rest","getAntdType","jsx","AntButton","Card","title","bordered","hoverable","size","AntCard","AppModal","showDefaultFooter","footer","_","OkBtn","CancelBtn","jsxs","Fragment","Modal","PageTable","scrollX","showPagination","defaultPageSize","Table","IconFont","createFromIconfontCN","XcIcon","color","style","iconStyle","EmptyAndSpin","description","className","emptyChildren","loadingText","emptyImage","Flex","Spin","Empty","BackButton","onClick","showText","LeftOutlined","LinkButton","removePadding","linkClassName","Option","Select","AdvancedTable","columns","request","searchFields","showSearch","showRefresh","pageSizeOptions","autoLoad","externalParams","tableProps","dataSource","setDataSource","useState","setLoading","pagination","setPagination","searchParams","setSearchParams","sortInfo","setSortInfo","form","Form","paginationRef","useRef","externalParamsRef","initializedRef","processedColumns","useMemo","col","sortable","render","restCol","loadData","useCallback","params","requestParams","response","prev","error","handleSearch","values","handleReset","handleRefresh","handleTableChange","_filters","sorter","newPagination","newSortInfo","useEffect","hasExternalParams","acc","field","Input","option","Space","SearchOutlined","ReloadOutlined","total","range","DynamicInput","texts","placeholder","animationSpeed","autoPlay","onChange","inputProps","currentText","setCurrentText","currentIndex","setCurrentIndex","isAnimating","setIsAnimating","isFocused","setIsFocused","isTyping","setIsTyping","animationRef","typingRef","textsRef","currentIndexRef","isFocusedRef","currentTextRef","typeText","text","callback","index","typeChar","deleteText","deleteChar","playAnimation","currentTextItem","handleFocus","e","handleBlur","handleChange","getPlaceholderText","DynamicTextArea","onSubmit","maxLength","showCount","submitText","disabled","rows","otherProps","internalValue","setInternalValue","textareaRef","newValue","handleSubmit","currentValue","handleKeyDown","isSubmitDisabled","SendOutlined","VideoCard","src","poster","width","height","videoWidth","videoHeight","showPlayButton","autoPlayOnHover","onVideoLoaded","onVideoPlay","onVideoPause","onVideoEnded","videoRef","isPlaying","setIsPlaying","isHovered","setIsHovered","isLoaded","setIsLoaded","playVideo","pauseVideo","togglePlay","handleMouseEnter","handleMouseLeave","handleVideoLoaded","handleVideoPlay","handleVideoPause","handleVideoEnded","handleCardClick","event","PauseCircleOutlined","PlayCircleOutlined","isVideoUrl","url","ext","getMediaType","item","Waterfall","items","gap","responsive","breakpoints","containerRef","columnCount","setColumnCount","itemRefs","calculateColumns","calculateLayout","cols","container","columnWidth","heights","element","minHeight","columnIndex","left","top","maxHeight","handleResize","newColumns","timer","handleImageLoad","handleItemClick","mediaType","el","lightTheme","theme"],"mappings":"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","x_google_ignoreList":[0,1,2]}