bi-components-library 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +221 -0
- package/dist/index.es.js +1557 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +33 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.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/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 { 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","lightTheme","theme"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/dist/vite.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "bi-components-library",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "SealSeek BI 组件库 - 基于 Ant Design 的企业级 React 组件",
|
|
7
|
+
"keywords": ["react", "components", "antd", "typescript", "ui"],
|
|
8
|
+
"author": "SealSeek Team",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"module": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": "./dist/index.js",
|
|
20
|
+
"types": "./dist/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./styles": "./dist/style.css"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"react": ">=18.0.0",
|
|
26
|
+
"react-dom": ">=18.0.0",
|
|
27
|
+
"antd": ">=5.0.0",
|
|
28
|
+
"@ant-design/icons": ">=5.0.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"dev": "vite",
|
|
32
|
+
"build": "tsc -b && vite build",
|
|
33
|
+
"lint": "eslint .",
|
|
34
|
+
"preview": "vite preview"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@ant-design/icons": "^6.0.2",
|
|
38
|
+
"antd": "^5.27.4",
|
|
39
|
+
"react": "^19",
|
|
40
|
+
"react-dom": "^19",
|
|
41
|
+
"react-router-dom": "^7.9.2"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@eslint/js": "^9.30.1",
|
|
45
|
+
"@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.2",
|
|
46
|
+
"@rollup/pluginutils": "^5.3.0",
|
|
47
|
+
"@storybook/react-docgen-typescript-plugin": "^1.0.1",
|
|
48
|
+
"@types/react": "^19.1.8",
|
|
49
|
+
"@types/react-dom": "^19.1.6",
|
|
50
|
+
"@vitejs/plugin-react-swc": "^3.10.2",
|
|
51
|
+
"eslint": "^9.30.1",
|
|
52
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
53
|
+
"eslint-plugin-react-refresh": "^0.4.20",
|
|
54
|
+
"globals": "^16.3.0",
|
|
55
|
+
"react-docgen-typescript-plugin": "^1.0.8",
|
|
56
|
+
"typescript": "~5.8.3",
|
|
57
|
+
"typescript-eslint": "^8.35.1",
|
|
58
|
+
"vite": "^7.0.4"
|
|
59
|
+
}
|
|
60
|
+
}
|