@aloudata/aloudata-design 3.0.0-beta.2 → 3.0.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/AMenu.d.ts +2 -0
  2. package/dist/AProgress/index.d.ts +1 -1
  3. package/dist/AProgress/index.js +19 -5
  4. package/dist/AProgress/index.js.map +1 -1
  5. package/dist/AProgress.d.ts +2 -0
  6. package/dist/Alert/index.d.ts +1 -1
  7. package/dist/Alert/index.js +22 -8
  8. package/dist/Alert/index.js.map +1 -1
  9. package/dist/Alert.d.ts +2 -0
  10. package/dist/App.d.ts +2 -0
  11. package/dist/Avatar/component/Avatar/index.d.ts +1 -1
  12. package/dist/Avatar/component/Avatar/index.js +4 -4
  13. package/dist/Avatar/component/Avatar/index.js.map +1 -1
  14. package/dist/Avatar/component/Avatar/type.d.ts +1 -1
  15. package/dist/Avatar/component/Avatar/type.js +6 -1
  16. package/dist/Avatar/component/Avatar/type.js.map +1 -1
  17. package/dist/Avatar/component/Avatar.d.ts +2 -0
  18. package/dist/Avatar/index.js +67 -8
  19. package/dist/Avatar/index.js.map +1 -1
  20. package/dist/Avatar.d.ts +2 -0
  21. package/dist/Badge/index.d.ts +1 -0
  22. package/dist/Badge/index.js +32 -9
  23. package/dist/Badge/index.js.map +1 -1
  24. package/dist/Badge.d.ts +2 -0
  25. package/dist/Breadcrumb/index.js +21 -12
  26. package/dist/Breadcrumb/index.js.map +1 -1
  27. package/dist/Breadcrumb.d.ts +2 -0
  28. package/dist/Button/index.d.ts +4 -0
  29. package/dist/Button/index.js +39 -32
  30. package/dist/Button/index.js.map +1 -1
  31. package/dist/Button.d.ts +2 -0
  32. package/dist/Card/index.js +5 -5
  33. package/dist/Card/index.js.map +1 -1
  34. package/dist/Card.d.ts +2 -0
  35. package/dist/Carousel.d.ts +2 -0
  36. package/dist/Checkbox/component/CheckboxGroup.d.ts +2 -0
  37. package/dist/Checkbox/index.js +5 -12
  38. package/dist/Checkbox/index.js.map +1 -1
  39. package/dist/Checkbox/type.d.ts +4 -1
  40. package/dist/Checkbox.d.ts +2 -0
  41. package/dist/Col.d.ts +2 -0
  42. package/dist/Collapse/index.d.ts +2 -0
  43. package/dist/Collapse/index.js +40 -24
  44. package/dist/Collapse/index.js.map +1 -1
  45. package/dist/Collapse.d.ts +2 -0
  46. package/dist/ColorPicker/ComplexColorPicker.d.ts +2 -0
  47. package/dist/ColorPicker.d.ts +2 -0
  48. package/dist/ConfigProvider.d.ts +2 -0
  49. package/dist/DataPreviewTable/components/Body.d.ts +2 -0
  50. package/dist/DataPreviewTable/components/DragBar.d.ts +2 -0
  51. package/dist/DataPreviewTable/components/Header.d.ts +2 -0
  52. package/dist/DataPreviewTable/index.js +1 -1
  53. package/dist/DataPreviewTable/index.js.map +1 -1
  54. package/dist/DataPreviewTable.d.ts +2 -0
  55. package/dist/DatePicker/index.d.ts +38 -3
  56. package/dist/DatePicker/index.js +55 -9
  57. package/dist/DatePicker/index.js.map +1 -1
  58. package/dist/DatePicker.d.ts +2 -0
  59. package/dist/Divider.d.ts +2 -0
  60. package/dist/DoubleCircleIcon.d.ts +2 -0
  61. package/dist/Drawer/index.d.ts +2 -0
  62. package/dist/Drawer/index.js +102 -47
  63. package/dist/Drawer/index.js.map +1 -1
  64. package/dist/Drawer.d.ts +2 -0
  65. package/dist/Dropdown/index.d.ts +5 -0
  66. package/dist/Dropdown/index.js +155 -34
  67. package/dist/Dropdown/index.js.map +1 -1
  68. package/dist/Dropdown.d.ts +2 -0
  69. package/dist/Empty.d.ts +2 -0
  70. package/dist/Form/index.d.ts +54 -4
  71. package/dist/Form/index.js +61 -34
  72. package/dist/Form/index.js.map +1 -1
  73. package/dist/Form.d.ts +2 -0
  74. package/dist/HighlightText/index.js +1 -1
  75. package/dist/HighlightText/index.js.map +1 -1
  76. package/dist/HighlightText.d.ts +2 -0
  77. package/dist/Icon.d.ts +2 -0
  78. package/dist/IconButton.d.ts +2 -0
  79. package/dist/Input/components/Input/index.d.ts +8 -2
  80. package/dist/Input/components/Input/index.js +18 -6
  81. package/dist/Input/components/Input/index.js.map +1 -1
  82. package/dist/Input/components/Input.d.ts +2 -0
  83. package/dist/Input/components/Password.d.ts +2 -0
  84. package/dist/Input/components/TextArea/index.d.ts +4 -0
  85. package/dist/Input/components/TextArea/index.js.map +1 -1
  86. package/dist/Input/components/TextArea.d.ts +2 -0
  87. package/dist/Input.d.ts +2 -0
  88. package/dist/InputNumber/type.d.ts +3 -2
  89. package/dist/InputNumber.d.ts +2 -0
  90. package/dist/InputSearch/index.js +0 -1
  91. package/dist/InputSearch/index.js.map +1 -1
  92. package/dist/InputSearch.d.ts +2 -0
  93. package/dist/Layout/index.js +1 -1
  94. package/dist/Layout/index.js.map +1 -1
  95. package/dist/Layout.d.ts +2 -0
  96. package/dist/List.d.ts +2 -0
  97. package/dist/LogicTree/DisplayLogicTree.d.ts +1 -1
  98. package/dist/LogicTree/DisplayLogicTree.js.map +1 -1
  99. package/dist/LogicTree/components/DisplayLogicItem/index.d.ts +1 -1
  100. package/dist/LogicTree/components/DisplayLogicItem/index.js +1 -1
  101. package/dist/LogicTree/components/DisplayLogicItem/index.js.map +1 -1
  102. package/dist/LogicTree/components/DisplayLogicItem.d.ts +2 -0
  103. package/dist/LogicTree/components/LogicItem/index.js +2 -3
  104. package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
  105. package/dist/LogicTree/components/LogicItem.d.ts +2 -0
  106. package/dist/LogicTree/index.d.ts +1 -1
  107. package/dist/LogicTree/index.js +26 -10
  108. package/dist/LogicTree/index.js.map +1 -1
  109. package/dist/LogicTree.d.ts +2 -0
  110. package/dist/MemberPicker/components/NickLabel.js +1 -1
  111. package/dist/MemberPicker/components/NickLabel.js.map +1 -1
  112. package/dist/MemberPicker/components/Panel.js +13 -14
  113. package/dist/MemberPicker/components/Panel.js.map +1 -1
  114. package/dist/MemberPicker/index.js +10 -5
  115. package/dist/MemberPicker/index.js.map +1 -1
  116. package/dist/MemberPicker/utils.d.ts +2 -0
  117. package/dist/MemberPicker.d.ts +2 -0
  118. package/dist/Menu/index.d.ts +4 -0
  119. package/dist/Menu/index.js +35 -13
  120. package/dist/Menu/index.js.map +1 -1
  121. package/dist/Menu.d.ts +2 -0
  122. package/dist/Modal/index.d.ts +6 -2
  123. package/dist/Modal/index.js +119 -66
  124. package/dist/Modal/index.js.map +1 -1
  125. package/dist/Modal.d.ts +2 -0
  126. package/dist/OverflowCount.d.ts +2 -0
  127. package/dist/Pagination.d.ts +2 -0
  128. package/dist/Popconfirm/index.js +6 -1
  129. package/dist/Popconfirm/index.js.map +1 -1
  130. package/dist/Popconfirm.d.ts +2 -0
  131. package/dist/Popover/index.d.ts +1 -0
  132. package/dist/Popover/index.js +5 -3
  133. package/dist/Popover/index.js.map +1 -1
  134. package/dist/Popover.d.ts +2 -0
  135. package/dist/Progress/index.d.ts +0 -3
  136. package/dist/Progress/index.js +0 -3
  137. package/dist/Progress/index.js.map +1 -1
  138. package/dist/Progress.d.ts +2 -0
  139. package/dist/Radio/components/Group.d.ts +2 -0
  140. package/dist/Radio/components/Radio/index.js +14 -25
  141. package/dist/Radio/components/Radio/index.js.map +1 -1
  142. package/dist/Radio/components/Radio.d.ts +2 -0
  143. package/dist/Radio.d.ts +2 -0
  144. package/dist/RenameInput/index.js +0 -1
  145. package/dist/RenameInput/index.js.map +1 -1
  146. package/dist/RenameInput.d.ts +2 -0
  147. package/dist/Result.d.ts +2 -0
  148. package/dist/Row.d.ts +2 -0
  149. package/dist/ScrollArea.d.ts +2 -0
  150. package/dist/Select/BaseSelect.js +12 -7
  151. package/dist/Select/BaseSelect.js.map +1 -1
  152. package/dist/Select/Selector/MultipleSelector.js +10 -6
  153. package/dist/Select/Selector/MultipleSelector.js.map +1 -1
  154. package/dist/Select/Selector/index.d.ts +2 -0
  155. package/dist/Select/Selector/index.js +1 -1
  156. package/dist/Select/Selector/index.js.map +1 -1
  157. package/dist/Select/Selector.d.ts +2 -0
  158. package/dist/Select/components/Suffix.js +1 -1
  159. package/dist/Select/components/Suffix.js.map +1 -1
  160. package/dist/Select/interface.d.ts +4 -0
  161. package/dist/Select/utils/getWidthStyle.js.map +1 -1
  162. package/dist/Select.d.ts +2 -0
  163. package/dist/Skeleton.d.ts +2 -0
  164. package/dist/Slider.d.ts +2 -0
  165. package/dist/Space.d.ts +2 -0
  166. package/dist/Spin/CustomIcon.d.ts +2 -0
  167. package/dist/Spin.d.ts +2 -0
  168. package/dist/StatusLight.d.ts +2 -0
  169. package/dist/Steps/components/CustomDot.d.ts +2 -0
  170. package/dist/Steps/components/ProcessIcon.d.ts +2 -0
  171. package/dist/Steps/components/Step.d.ts +2 -0
  172. package/dist/Steps/index.js +6 -6
  173. package/dist/Steps/index.js.map +1 -1
  174. package/dist/Steps.d.ts +2 -0
  175. package/dist/Switch/index.js +2 -2
  176. package/dist/Switch/index.js.map +1 -1
  177. package/dist/Switch/test.d.ts +2 -0
  178. package/dist/Switch.d.ts +2 -0
  179. package/dist/Table/components/Footer/index.js +1 -1
  180. package/dist/Table/components/Footer/index.js.map +1 -1
  181. package/dist/Table/components/Footer.d.ts +2 -0
  182. package/dist/Table/hooks/useRowDnd.js +2 -8
  183. package/dist/Table/hooks/useRowDnd.js.map +1 -1
  184. package/dist/Table/hooks/useRowSelection.d.ts +1 -1
  185. package/dist/Table/hooks/useRowSelection.js +7 -9
  186. package/dist/Table/hooks/useRowSelection.js.map +1 -1
  187. package/dist/Table/index.js +1 -1
  188. package/dist/Table/index.js.map +1 -1
  189. package/dist/Table.d.ts +2 -0
  190. package/dist/Tabs/index.d.ts +1 -0
  191. package/dist/Tabs/index.js +37 -30
  192. package/dist/Tabs/index.js.map +1 -1
  193. package/dist/Tabs.d.ts +2 -0
  194. package/dist/Tag.d.ts +2 -0
  195. package/dist/TextLink.d.ts +2 -0
  196. package/dist/Tooltip/index.d.ts +7 -1
  197. package/dist/Tooltip/index.js +5 -3
  198. package/dist/Tooltip/index.js.map +1 -1
  199. package/dist/Tooltip.d.ts +2 -0
  200. package/dist/Tour/index.js +48 -38
  201. package/dist/Tour/index.js.map +1 -1
  202. package/dist/Tour.d.ts +2 -0
  203. package/dist/Tree/DirectoryTree.d.ts +2 -2
  204. package/dist/Tree/DirectoryTree.js.map +1 -1
  205. package/dist/Tree/Tree.d.ts +2 -2
  206. package/dist/Tree/Tree2.js +2 -2
  207. package/dist/Tree/Tree2.js.map +1 -1
  208. package/dist/Tree/index.d.ts +5 -2
  209. package/dist/Tree/index.js.map +1 -1
  210. package/dist/Tree.d.ts +2 -0
  211. package/dist/Typography.d.ts +2 -0
  212. package/dist/Upload/index.d.ts +15 -2
  213. package/dist/Upload/index.js +4 -2
  214. package/dist/Upload/index.js.map +1 -1
  215. package/dist/Upload.d.ts +2 -0
  216. package/dist/User.d.ts +2 -0
  217. package/dist/Watermark.d.ts +2 -0
  218. package/dist/_utils/floatingLayer.d.ts +15 -0
  219. package/dist/_utils/floatingLayer.js +30 -0
  220. package/dist/_utils/floatingLayer.js.map +1 -0
  221. package/dist/_utils/storybookArgTypes.d.ts +11 -0
  222. package/dist/_utils/storybookArgTypes.js +2 -0
  223. package/dist/aloudata-design.css +1 -1
  224. package/dist/index.d.ts +15 -6
  225. package/dist/index.js +8 -3
  226. package/dist/message.d.ts +2 -0
  227. package/dist/notification.d.ts +2 -0
  228. package/dist/theme/createTheme.d.ts +2 -0
  229. package/dist/theme/createTheme.js +46 -0
  230. package/dist/theme/createTheme.js.map +1 -0
  231. package/dist/theme/defaultTheme.d.ts +2 -0
  232. package/dist/theme/defaultTheme.js +19 -0
  233. package/dist/theme/defaultTheme.js.map +1 -0
  234. package/dist/theme/index.d.ts +5 -0
  235. package/dist/theme/index.js +4 -0
  236. package/dist/theme/initAldTheme.d.ts +2 -0
  237. package/dist/theme/initAldTheme.js +26 -0
  238. package/dist/theme/initAldTheme.js.map +1 -0
  239. package/dist/theme/themeToCssVars.d.ts +2 -0
  240. package/dist/theme/themeToCssVars.js +144 -0
  241. package/dist/theme/themeToCssVars.js.map +1 -0
  242. package/dist/theme/tokenMap.d.ts +5 -0
  243. package/dist/theme/tokenMap.js +12 -0
  244. package/dist/theme/tokenMap.js.map +1 -0
  245. package/dist/theme/types.d.ts +20 -0
  246. package/dist/theme/types.js +2 -0
  247. package/dist/theme.d.ts +2 -0
  248. package/package.json +10 -4
  249. package/dist/_utils/SimpleOverflow.d.ts +0 -14
  250. package/dist/_utils/SimpleOverflow.js +0 -61
  251. package/dist/_utils/SimpleOverflow.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Tree2.js","names":[],"sources":["../../src/Tree/Tree.tsx"],"sourcesContent":["import './tree.css';\nimport { cn } from '../lib/utils';\nimport { produce } from 'immer';\nimport { noop } from 'lodash';\nimport type { BasicDataNode, TreeProps as RcTreeProps } from 'rc-tree';\nimport RcTree from 'rc-tree';\nimport type { DataNode, Key } from 'rc-tree/es/interface';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\nimport HighlightText from '../HighlightText';\nimport { ArrowRightLightLine, DragLine } from '../Icon';\nimport collapseMotion from '../_utils/motion';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport dropIndicatorRender from './utils/dropIndicator';\nimport renderSwitcherIcon from './utils/iconUtil';\nconst TREE_SWITCH_CION_SIZE = 16;\nconst NODE_DISABLE_CLASS_NAME = 'ald-tree-node-disabled';\nexport type SwitcherIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\nexport type TreeLeafIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\n\nexport interface AldTreeNodeAttribute {\n eventKey: string;\n prefixCls: string;\n className: string;\n expanded: boolean;\n selected: boolean;\n checked: boolean;\n halfChecked: boolean;\n children: React.ReactNode;\n title: React.ReactNode;\n pos: string;\n dragOver: boolean;\n dragOverGapTop: boolean;\n dragOverGapBottom: boolean;\n isLeaf: boolean;\n selectable: boolean;\n disabled: boolean;\n disableCheckbox: boolean;\n}\n\nexport interface AldTreeNodeProps {\n className?: string;\n checkable?: boolean;\n disabled?: boolean;\n disableCheckbox?: boolean;\n title?: string | React.ReactNode;\n key?: Key;\n eventKey?: string;\n isLeaf?: boolean;\n checked?: boolean;\n expanded?: boolean;\n loading?: boolean;\n selected?: boolean;\n selectable?: boolean;\n icon?:\n | ((treeNode: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode;\n children?: React.ReactNode;\n [customProp: string]: any;\n}\n\nexport type AldTreeNode = React.Component<AldTreeNodeProps, object>;\n\nexport interface AldTreeNodeBaseEvent {\n node: AldTreeNode;\n nativeEvent: MouseEvent;\n}\n\nexport interface AldTreeNodeCheckedEvent extends AldTreeNodeBaseEvent {\n event: 'check';\n checked?: boolean;\n checkedNodes?: AldTreeNode[];\n}\n\nexport interface AldTreeNodeSelectedEvent extends AldTreeNodeBaseEvent {\n event: 'select';\n selected?: boolean;\n selectedNodes?: DataNode[];\n}\n\nexport interface AldTreeNodeExpandedEvent extends AldTreeNodeBaseEvent {\n expanded?: boolean;\n}\n\nexport interface AldTreeNodeMouseEvent {\n node: AldTreeNode;\n event: React.DragEvent<HTMLElement>;\n}\n\nexport interface AldTreeNodeDragEnterEvent extends AldTreeNodeMouseEvent {\n expandedKeys: Key[];\n}\n\nexport interface AldTreeNodeAttribute {\n node: AldTreeNode;\n dragNode: AldTreeNode;\n dragNodesKeys: Key[];\n dropPosition: number;\n dropToGap?: boolean;\n event: React.MouseEvent<HTMLElement>;\n}\n\n// [Legacy] Compatible for v3\nexport type TreeNodeNormal = DataNode;\n\ntype DraggableFn = (node: DataNode) => boolean;\n\ninterface DraggableConfig {\n icon?: React.ReactNode | false;\n nodeDraggable?: DraggableFn;\n}\n\nexport interface TreeProps<T extends BasicDataNode = DataNode>\n extends Omit<\n RcTreeProps<T>,\n | 'prefixCls'\n | 'showLine'\n | 'direction'\n | 'draggable'\n | 'icon'\n | 'switcherIcon'\n | 'filterTreeNode'\n > {\n showLine?: boolean | { showLeafIcon: boolean | TreeLeafIcon };\n className?: string;\n /** 是否支持多选 */\n multiple?: boolean;\n /** 是否自动展开父节点 */\n autoExpandParent?: boolean;\n /** Checkable状态下节点选择完全受控(父子节点选中状态不再关联) */\n checkStrictly?: boolean;\n /** 是否支持选中 */\n checkable?: boolean;\n /** 是否禁用树 */\n disabled?: boolean;\n /** 默认展开所有树节点 */\n defaultExpandAll?: boolean;\n /** 默认展开对应树节点 */\n defaultExpandParent?: boolean;\n /** 默认展开指定的树节点 */\n defaultExpandedKeys?: Key[];\n /** (受控)展开指定的树节点 */\n expandedKeys?: Key[];\n /** (受控)选中复选框的树节点 */\n checkedKeys?: Key[] | { checked: Key[]; halfChecked: Key[] };\n /** 默认选中复选框的树节点 */\n defaultCheckedKeys?: Key[];\n /** (受控)设置选中的树节点 */\n selectedKeys?: Key[];\n /** 默认选中的树节点 */\n defaultSelectedKeys?: Key[];\n selectable?: boolean;\n /** 点击树节点触发 */\n filterTreeNode?: (node: DataNode) => boolean;\n loadedKeys?: Key[];\n /** 设置节点可拖拽(IE>8) */\n draggable?: DraggableFn | boolean | DraggableConfig;\n style?: React.CSSProperties;\n showIcon?: boolean;\n icon?:\n | ((nodeProps: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode\n | RcTreeProps<T>['icon'];\n switcherIcon?: SwitcherIcon | RcTreeProps<T>['switcherIcon'];\n prefixCls?: string;\n children?: React.ReactNode;\n blockNode?: boolean;\n size?: 'large' | 'small';\n titleRender?: (node: T) => React.ReactNode;\n showTabLeader?: boolean;\n handlerRender?: (node: T) => React.ReactNode;\n highlightKeywords?: string;\n}\n\nconst Tree = React.forwardRef<RcTree, TreeProps>((props, ref) => {\n const { locale } = React.useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getPrefixCls, direction, virtual } = React.useContext(ConfigContext);\n const size = props.size || 'large';\n const {\n className,\n showIcon = false,\n showLine,\n blockNode = false,\n children,\n checkable = false,\n selectable = true,\n draggable,\n titleRender,\n showTabLeader,\n handlerRender = noop,\n filterTreeNode,\n treeData,\n highlightKeywords,\n motion = { ...collapseMotion, motionAppear: false },\n ...rest\n } = props;\n const prefixCls = getPrefixCls('tree', 'ald-tree');\n\n const customTitleRender = React.useCallback(\n (node: DataNode) => {\n const renderedTitle = titleRender\n ? titleRender(node)\n : typeof node.title === 'function'\n ? node.title(node)\n : node.title;\n return (\n <>\n {renderedTitle}\n {showTabLeader && <div className=\"ald-tree-tab-leader\"></div>}\n {handlerRender && (handlerRender(node) as React.ReactNode)}\n </>\n );\n },\n [titleRender, showTabLeader, handlerRender],\n );\n const newProps = {\n ...rest,\n checkable,\n selectable,\n showIcon,\n motion,\n blockNode,\n showLine: Boolean(showLine),\n dropIndicatorRender,\n titleRender: customTitleRender,\n };\n\n const draggableConfig = React.useMemo(() => {\n if (!draggable) {\n return false;\n }\n const newIcon = (\n <DragLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n ></DragLine>\n );\n let mergedDraggable: DraggableConfig = {\n icon: newIcon,\n };\n switch (typeof draggable) {\n case 'function':\n mergedDraggable.nodeDraggable = draggable;\n break;\n case 'object':\n mergedDraggable = { ...draggable, icon: newIcon };\n break;\n default:\n break;\n // Do nothing\n }\n\n return mergedDraggable;\n }, [draggable]);\n const renderIndent = (nodeProps: AldTreeNodeProps) => {\n const { pos, isLeaf } = nodeProps as AldTreeNodeProps & { pos?: string };\n // Determine level from `pos` string (e.g. \"0-0-1\" → level 2)\n const level = pos ? pos.split('-').length - 1 : 0;\n const iconSize = TREE_SWITCH_CION_SIZE;\n let indentWidth = isLeaf ? iconSize : 0;\n indentWidth += level * (iconSize / 2);\n return <span style={{ width: indentWidth, flexShrink: 0 }}></span>;\n };\n const newTreeData = React.useMemo(() => {\n if (!filterTreeNode || !treeData) return treeData;\n\n const shouldNodeDisabled = (node: DataNode): boolean => {\n // 初始化一个标志来表示是否需要为当前节点添加className\n let shouldAddDisabled = true;\n if (filterTreeNode(node)) {\n shouldAddDisabled = false;\n }\n\n if (node.children) {\n // 遍历当前节点的子节点,只要有一个子节点不disable,则该不需要添加className\n const allChildrenShouldAddDisabled = node.children.reduce(\n (pre, child) => {\n return shouldNodeDisabled(child) && pre;\n },\n shouldAddDisabled,\n );\n shouldAddDisabled = allChildrenShouldAddDisabled;\n }\n\n // 如果shouldAddDisabled为true,就为当前节点添加className\n if (shouldAddDisabled) {\n node.className = node.className?.includes(NODE_DISABLE_CLASS_NAME)\n ? node.className\n : cn(node.className, NODE_DISABLE_CLASS_NAME);\n } else {\n const reg = /ald-tree-node-disabled/g;\n node.className?.replace(reg, ' ');\n }\n if (highlightKeywords && typeof node.title !== 'function') {\n node.title = (\n <HighlightText keyword={highlightKeywords}>\n {node.title}\n </HighlightText>\n );\n }\n return shouldAddDisabled;\n };\n const newTreeData = produce(treeData, (draft) => {\n for (const rootNode of draft) {\n shouldNodeDisabled(rootNode);\n }\n });\n return newTreeData;\n }, [filterTreeNode, treeData, highlightKeywords]);\n\n const noChildren = React.useMemo(() => {\n if (newTreeData?.length) {\n return newTreeData.every((node) => {\n return !node.children?.length && node.isLeaf !== false;\n });\n }\n return true;\n }, [newTreeData]);\n\n return (\n <RcTree\n itemHeight={20}\n ref={ref}\n virtual={virtual}\n {...newProps}\n prefixCls={prefixCls}\n treeData={newTreeData}\n className={cn(\n {\n [`${prefixCls}-icon-hide`]: !showIcon,\n [`${prefixCls}-block-node`]: blockNode,\n [`${prefixCls}-unselectable`]: !selectable,\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n ['ald-draggable-tree']: draggable,\n [`${prefixCls}-no-children`]: noChildren,\n },\n className,\n )}\n direction={direction as any}\n checkable={\n checkable ? (\n <span className={`${prefixCls}-checkbox-inner`} />\n ) : (\n checkable\n )\n }\n selectable={selectable}\n // @ts-ignore\n switcherIcon={(nodeProps: AldTreeNodeProps) => {\n return (\n <>\n {renderIndent(nodeProps)}\n {renderSwitcherIcon(\n prefixCls,\n <ArrowRightLightLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n >\n {t.Tree.expand}\n </ArrowRightLightLine>,\n showLine,\n nodeProps,\n TREE_SWITCH_CION_SIZE,\n )}\n </>\n );\n }}\n draggable={draggableConfig}\n >\n {children}\n </RcTree>\n );\n});\n\nexport default Tree;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tree2.js","names":[],"sources":["../../src/Tree/Tree.tsx"],"sourcesContent":["import './tree.css';\nimport { cn } from '../lib/utils';\nimport { produce } from 'immer';\nimport { noop } from 'lodash';\nimport type { BasicDataNode, TreeProps as RcTreeProps } from 'rc-tree';\nimport RcTree from 'rc-tree';\nimport type { DataNode, Key } from 'rc-tree/es/interface';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\nimport HighlightText from '../HighlightText';\nimport { ArrowRightLightLine, DragLine } from '../Icon';\nimport collapseMotion from '../_utils/motion';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport dropIndicatorRender from './utils/dropIndicator';\nimport renderSwitcherIcon from './utils/iconUtil';\nconst TREE_SWITCH_CION_SIZE = 16;\nconst NODE_DISABLE_CLASS_NAME = 'ald-tree-node-disabled';\nexport type SwitcherIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\nexport type TreeLeafIcon =\n | React.ReactNode\n | ((props: AldTreeNodeProps) => React.ReactNode);\n\nexport interface AldTreeNodeAttribute {\n eventKey: string;\n prefixCls: string;\n className: string;\n expanded: boolean;\n selected: boolean;\n checked: boolean;\n halfChecked: boolean;\n children: React.ReactNode;\n title: React.ReactNode;\n pos: string;\n dragOver: boolean;\n dragOverGapTop: boolean;\n dragOverGapBottom: boolean;\n isLeaf: boolean;\n selectable: boolean;\n disabled: boolean;\n disableCheckbox: boolean;\n}\n\nexport interface AldTreeNodeProps {\n className?: string;\n checkable?: boolean;\n disabled?: boolean;\n disableCheckbox?: boolean;\n title?: string | React.ReactNode;\n key?: Key;\n eventKey?: string;\n isLeaf?: boolean;\n checked?: boolean;\n expanded?: boolean;\n loading?: boolean;\n selected?: boolean;\n selectable?: boolean;\n icon?:\n | ((treeNode: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode;\n children?: React.ReactNode;\n [customProp: string]: any;\n}\n\nexport type AldTreeNode = React.Component<AldTreeNodeProps, object>;\n\nexport interface AldTreeNodeBaseEvent {\n node: AldTreeNode;\n nativeEvent: MouseEvent;\n}\n\nexport interface AldTreeNodeCheckedEvent extends AldTreeNodeBaseEvent {\n event: 'check';\n checked?: boolean;\n checkedNodes?: AldTreeNode[];\n}\n\nexport interface AldTreeNodeSelectedEvent extends AldTreeNodeBaseEvent {\n event: 'select';\n selected?: boolean;\n selectedNodes?: DataNode[];\n}\n\nexport interface AldTreeNodeExpandedEvent extends AldTreeNodeBaseEvent {\n expanded?: boolean;\n}\n\nexport interface AldTreeNodeMouseEvent {\n node: AldTreeNode;\n event: React.DragEvent<HTMLElement>;\n}\n\nexport interface AldTreeNodeDragEnterEvent extends AldTreeNodeMouseEvent {\n expandedKeys: Key[];\n}\n\nexport interface AldTreeNodeAttribute {\n node: AldTreeNode;\n dragNode: AldTreeNode;\n dragNodesKeys: Key[];\n dropPosition: number;\n dropToGap?: boolean;\n event: React.MouseEvent<HTMLElement>;\n}\n\n// [Legacy] Compatible for v3\nexport type TreeNodeNormal = DataNode;\n\ntype DraggableFn = (node: DataNode) => boolean;\n\ninterface DraggableConfig {\n icon?: React.ReactNode | false;\n nodeDraggable?: DraggableFn;\n}\n\nexport interface TreeProps<T extends BasicDataNode = DataNode>\n extends Omit<\n RcTreeProps<T>,\n | 'prefixCls'\n | 'showLine'\n | 'direction'\n | 'draggable'\n | 'icon'\n | 'switcherIcon'\n | 'filterTreeNode'\n > {\n showLine?: boolean | { showLeafIcon: boolean | TreeLeafIcon };\n className?: string;\n /** 是否支持多选 */\n multiple?: boolean;\n /** 是否自动展开父节点 */\n autoExpandParent?: boolean;\n /** Checkable状态下节点选择完全受控(父子节点选中状态不再关联) */\n checkStrictly?: boolean;\n /** 是否支持选中 */\n checkable?: boolean;\n /** 是否禁用树 */\n disabled?: boolean;\n /** 默认展开所有树节点 */\n defaultExpandAll?: boolean;\n /** 默认展开对应树节点 */\n defaultExpandParent?: boolean;\n /** 默认展开指定的树节点 */\n defaultExpandedKeys?: Key[];\n /** (受控)展开指定的树节点 */\n expandedKeys?: Key[];\n /** (受控)选中复选框的树节点 */\n checkedKeys?: Key[] | { checked: Key[]; halfChecked: Key[] };\n /** 默认选中复选框的树节点 */\n defaultCheckedKeys?: Key[];\n /** (受控)设置选中的树节点 */\n selectedKeys?: Key[];\n /** 默认选中的树节点 */\n defaultSelectedKeys?: Key[];\n selectable?: boolean;\n /** 点击树节点触发 */\n filterTreeNode?: (node: DataNode) => boolean;\n loadedKeys?: Key[];\n /** 设置节点可拖拽(IE>8) */\n draggable?: DraggableFn | boolean | DraggableConfig;\n style?: React.CSSProperties;\n showIcon?: boolean;\n icon?:\n | ((nodeProps: AldTreeNodeAttribute) => React.ReactNode)\n | React.ReactNode\n | RcTreeProps<T>['icon'];\n switcherIcon?: SwitcherIcon | RcTreeProps<T>['switcherIcon'];\n prefixCls?: string;\n children?: React.ReactNode;\n blockNode?: boolean;\n size?: 'large' | 'small';\n titleRender?: (node: T) => React.ReactNode;\n showTabLeader?: boolean;\n handlerRender?: (node: T) => React.ReactNode;\n highlightKeywords?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Tree = React.forwardRef<any, TreeProps>((props, ref) => {\n const { locale } = React.useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getPrefixCls, direction, virtual } = React.useContext(ConfigContext);\n const size = props.size || 'large';\n const {\n className,\n showIcon = false,\n showLine,\n blockNode = false,\n children,\n checkable = false,\n selectable = true,\n draggable,\n titleRender,\n showTabLeader,\n handlerRender = noop,\n filterTreeNode,\n treeData,\n highlightKeywords,\n motion = { ...collapseMotion, motionAppear: false },\n ...rest\n } = props;\n const prefixCls = getPrefixCls('tree', 'ald-tree');\n\n const customTitleRender = React.useCallback(\n (node: DataNode) => {\n const renderedTitle = titleRender\n ? titleRender(node)\n : typeof node.title === 'function'\n ? node.title(node)\n : node.title;\n return (\n <>\n {renderedTitle}\n {showTabLeader && <div className=\"ald-tree-tab-leader\"></div>}\n {handlerRender && (handlerRender(node) as React.ReactNode)}\n </>\n );\n },\n [titleRender, showTabLeader, handlerRender],\n );\n const newProps = {\n ...rest,\n checkable,\n selectable,\n showIcon,\n motion,\n blockNode,\n showLine: Boolean(showLine),\n dropIndicatorRender,\n titleRender: customTitleRender,\n };\n\n const draggableConfig = React.useMemo(() => {\n if (!draggable) {\n return false;\n }\n const newIcon = (\n <DragLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n ></DragLine>\n );\n let mergedDraggable: DraggableConfig = {\n icon: newIcon,\n };\n switch (typeof draggable) {\n case 'function':\n mergedDraggable.nodeDraggable = draggable;\n break;\n case 'object':\n mergedDraggable = {\n ...draggable,\n icon: draggable.icon === undefined ? newIcon : draggable.icon,\n };\n break;\n default:\n break;\n // Do nothing\n }\n\n return mergedDraggable;\n }, [draggable]);\n const renderIndent = (nodeProps: AldTreeNodeProps) => {\n const { pos, isLeaf } = nodeProps as AldTreeNodeProps & { pos?: string };\n // Determine level from `pos` string (e.g. \"0-0-1\" → level 2)\n const level = pos ? pos.split('-').length - 1 : 0;\n const iconSize = TREE_SWITCH_CION_SIZE;\n let indentWidth = isLeaf ? iconSize : 0;\n indentWidth += level * (iconSize / 2);\n return <span style={{ width: indentWidth, flexShrink: 0 }}></span>;\n };\n const newTreeData = React.useMemo(() => {\n if (!filterTreeNode || !treeData) return treeData;\n\n const shouldNodeDisabled = (node: DataNode): boolean => {\n // 初始化一个标志来表示是否需要为当前节点添加className\n let shouldAddDisabled = true;\n if (filterTreeNode(node)) {\n shouldAddDisabled = false;\n }\n\n if (node.children) {\n // 遍历当前节点的子节点,只要有一个子节点不disable,则该不需要添加className\n const allChildrenShouldAddDisabled = node.children.reduce(\n (pre, child) => {\n return shouldNodeDisabled(child) && pre;\n },\n shouldAddDisabled,\n );\n shouldAddDisabled = allChildrenShouldAddDisabled;\n }\n\n // 如果shouldAddDisabled为true,就为当前节点添加className\n if (shouldAddDisabled) {\n node.className = node.className?.includes(NODE_DISABLE_CLASS_NAME)\n ? node.className\n : cn(node.className, NODE_DISABLE_CLASS_NAME);\n } else {\n const reg = /ald-tree-node-disabled/g;\n node.className?.replace(reg, ' ');\n }\n if (highlightKeywords && typeof node.title !== 'function') {\n node.title = (\n <HighlightText keyword={highlightKeywords}>\n {node.title}\n </HighlightText>\n );\n }\n return shouldAddDisabled;\n };\n const newTreeData = produce(treeData, (draft) => {\n for (const rootNode of draft) {\n shouldNodeDisabled(rootNode);\n }\n });\n return newTreeData;\n }, [filterTreeNode, treeData, highlightKeywords]);\n\n const noChildren = React.useMemo(() => {\n if (newTreeData?.length) {\n return newTreeData.every((node) => {\n return !node.children?.length && node.isLeaf !== false;\n });\n }\n return true;\n }, [newTreeData]);\n\n return (\n <RcTree\n itemHeight={20}\n ref={ref}\n virtual={virtual}\n {...newProps}\n prefixCls={prefixCls}\n treeData={newTreeData}\n className={cn(\n {\n [`${prefixCls}-icon-hide`]: !showIcon,\n [`${prefixCls}-block-node`]: blockNode,\n [`${prefixCls}-unselectable`]: !selectable,\n [`${prefixCls}-large`]: size === 'large',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n ['ald-draggable-tree']: draggable,\n [`${prefixCls}-no-children`]: noChildren,\n },\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-tree',\n className,\n )}\n direction={direction as any}\n checkable={\n checkable ? (\n <span className={`${prefixCls}-checkbox-inner`} />\n ) : (\n checkable\n )\n }\n selectable={selectable}\n // @ts-ignore\n switcherIcon={(nodeProps: AldTreeNodeProps) => {\n return (\n <>\n {renderIndent(nodeProps)}\n {renderSwitcherIcon(\n prefixCls,\n <ArrowRightLightLine\n size={TREE_SWITCH_CION_SIZE}\n color={'var(--alias-colors-icon-subtle)'}\n >\n {t.Tree.expand}\n </ArrowRightLightLine>,\n showLine,\n nodeProps,\n TREE_SWITCH_CION_SIZE,\n )}\n </>\n );\n }}\n draggable={draggableConfig}\n >\n {children}\n </RcTree>\n );\n});\n\nexport default Tree;\n"],"mappings":"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"}
@@ -1,13 +1,16 @@
1
- import { default as RcTree, BasicDataNode, TreeNode } from 'rc-tree';
1
+ import { BasicDataNode, TreeNode } from 'rc-tree';
2
2
  import { DataNode } from 'rc-tree/es/interface';
3
3
  import { default as DirectoryTree } from './DirectoryTree.js';
4
4
  import { TreeProps } from './Tree.js';
5
+ import type * as React from 'react';
5
6
  export type { EventDataNode } from 'rc-tree/es/interface';
6
7
  export type { ExpandAction as DirectoryTreeExpandAction, DirectoryTreeProps, } from './DirectoryTree.js';
7
8
  export type { AldTreeNode, AldTreeNodeAttribute, AldTreeNodeCheckedEvent, AldTreeNodeExpandedEvent, AldTreeNodeMouseEvent, AldTreeNodeProps, AldTreeNodeSelectedEvent, TreeProps, } from './Tree.js';
8
9
  export type { DataNode };
10
+ /** Public Tree ref type — hides rc-tree internals from consumers */
11
+ export type TreeRef = any;
9
12
  type CompoundedComponent = (<T extends BasicDataNode | DataNode = DataNode>(props: React.PropsWithChildren<TreeProps<T>> & {
10
- ref?: React.Ref<RcTree>;
13
+ ref?: React.Ref<TreeRef>;
11
14
  }) => React.ReactElement) & {
12
15
  TreeNode: typeof TreeNode;
13
16
  DirectoryTree: typeof DirectoryTree;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tree/index.tsx"],"sourcesContent":["import type RcTree from 'rc-tree';\nimport type { BasicDataNode } from 'rc-tree';\nimport { TreeNode } from 'rc-tree';\nimport type { DataNode } from 'rc-tree/es/interface';\nimport DirectoryTree from './DirectoryTree';\nimport type { TreeProps } from './Tree';\nimport TreePure from './Tree';\n\nexport type { EventDataNode } from 'rc-tree/es/interface';\nexport type {\n ExpandAction as DirectoryTreeExpandAction,\n DirectoryTreeProps,\n} from './DirectoryTree';\nexport type {\n AldTreeNode,\n AldTreeNodeAttribute,\n AldTreeNodeCheckedEvent,\n AldTreeNodeExpandedEvent,\n AldTreeNodeMouseEvent,\n AldTreeNodeProps,\n AldTreeNodeSelectedEvent,\n TreeProps,\n} from './Tree';\nexport type { DataNode };\n\ntype CompoundedComponent = (<T extends BasicDataNode | DataNode = DataNode>(\n props: React.PropsWithChildren<TreeProps<T>> & { ref?: React.Ref<RcTree> },\n) => React.ReactElement) & {\n TreeNode: typeof TreeNode;\n DirectoryTree: typeof DirectoryTree;\n};\n\nconst Tree = TreePure as unknown as CompoundedComponent;\nTree.DirectoryTree = DirectoryTree;\nTree.TreeNode = TreeNode;\n\nexport default Tree;\n"],"mappings":";;;;AAgCA,IAAM,OAAO;AACb,KAAK,gBAAgB;AACrB,KAAK,WAAW"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tree/index.tsx"],"sourcesContent":["import type * as React from 'react';\nimport type { BasicDataNode } from 'rc-tree';\nimport { TreeNode } from 'rc-tree';\nimport type { DataNode } from 'rc-tree/es/interface';\nimport DirectoryTree from './DirectoryTree';\nimport type { TreeProps } from './Tree';\nimport TreePure from './Tree';\n\nexport type { EventDataNode } from 'rc-tree/es/interface';\nexport type {\n ExpandAction as DirectoryTreeExpandAction,\n DirectoryTreeProps,\n} from './DirectoryTree';\nexport type {\n AldTreeNode,\n AldTreeNodeAttribute,\n AldTreeNodeCheckedEvent,\n AldTreeNodeExpandedEvent,\n AldTreeNodeMouseEvent,\n AldTreeNodeProps,\n AldTreeNodeSelectedEvent,\n TreeProps,\n} from './Tree';\nexport type { DataNode };\n\n/** Public Tree ref type — hides rc-tree internals from consumers */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TreeRef = any;\n\ntype CompoundedComponent = (<T extends BasicDataNode | DataNode = DataNode>(\n props: React.PropsWithChildren<TreeProps<T>> & {\n ref?: React.Ref<TreeRef>;\n },\n) => React.ReactElement) & {\n TreeNode: typeof TreeNode;\n DirectoryTree: typeof DirectoryTree;\n};\n\nconst Tree = TreePure as unknown as CompoundedComponent;\nTree.DirectoryTree = DirectoryTree;\nTree.TreeNode = TreeNode;\n\nexport default Tree;\n"],"mappings":";;;;AAsCA,IAAM,OAAO;AACb,KAAK,gBAAgB;AACrB,KAAK,WAAW"}
package/dist/Tree.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './Tree/index.js';
2
+ export { default } from './Tree/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './Typography/index.js';
2
+ export { default } from './Typography/index.js';
@@ -1,4 +1,4 @@
1
- import { RcFile as RcUploadFile, UploadProgressEvent, UploadProps as RcUploadProps } from 'rc-upload/es/interface';
1
+ import { RcFile as RcUploadFile, UploadProgressEvent } from 'rc-upload/es/interface';
2
2
  import { default as React } from 'react';
3
3
  export interface UploadFile<T = any> {
4
4
  uid: string;
@@ -33,7 +33,20 @@ export interface UploadProps<T = any> {
33
33
  data?: Record<string, unknown> | ((file: RcFile | string | Blob) => Record<string, unknown>);
34
34
  withCredentials?: boolean;
35
35
  beforeUpload?: (file: RcFile, fileList: RcFile[]) => boolean | Promise<void | Blob | File>;
36
- customRequest?: RcUploadProps['customRequest'];
36
+ customRequest?: (options: {
37
+ file: RcFile;
38
+ filename?: string;
39
+ data?: Record<string, unknown>;
40
+ headers?: Record<string, string>;
41
+ onProgress?: (event: {
42
+ percent: number;
43
+ }) => void;
44
+ onSuccess?: (body: unknown, xhr?: XMLHttpRequest) => void;
45
+ onError?: (event: Error) => void;
46
+ withCredentials?: boolean;
47
+ action?: string;
48
+ method?: string;
49
+ }) => void;
37
50
  disabled?: boolean;
38
51
  fileList?: UploadFile<T>[];
39
52
  defaultFileList?: UploadFile<T>[];
@@ -313,9 +313,11 @@ function Dragger(props) {
313
313
  className: cn("ald-upload-dragger-wrapper", className),
314
314
  style: mergedStyle,
315
315
  children: /* @__PURE__ */ jsx("div", {
316
- className: cn("ald-upload-dragger", {
316
+ className: cn("ald-upload-dragger ant-upload-drag", {
317
317
  "ald-upload-drag-hover": dragOver,
318
- "ald-upload-disabled": disabled
318
+ "ant-upload-drag-hover": dragOver,
319
+ "ald-upload-disabled": disabled,
320
+ "ant-upload-disabled": disabled
319
321
  }),
320
322
  onDragOver: (e) => {
321
323
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Upload/index.tsx"],"sourcesContent":["import './upload.css';\n\nimport RcUpload from 'rc-upload';\nimport type {\n RcFile as RcUploadFile,\n UploadProgressEvent,\n UploadProps as RcUploadProps,\n} from 'rc-upload/es/interface';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n CheckCircleFill,\n CloseCircleFill,\n CloseLightLine,\n EyeOnLine,\n LoadingLine,\n TrashLightLine,\n} from '../Icon';\nimport { cn } from '../lib/utils';\nimport Tooltip from '../Tooltip';\n\n// ---------------------------------------------------------------------------\n// Public types – preserved from the previous API surface\n// ---------------------------------------------------------------------------\n\nexport interface UploadFile<T = any> {\n uid: string;\n name: string;\n status?: 'uploading' | 'done' | 'error' | 'removed';\n url?: string;\n thumbUrl?: string;\n size?: number;\n type?: string;\n percent?: number;\n originFileObj?: RcFile;\n response?: T;\n error?: any;\n linkProps?: any;\n}\n\nexport type RcFile = RcUploadFile;\n\nexport interface UploadChangeParam<T = UploadFile> {\n file: T;\n fileList: T[];\n event?: UploadProgressEvent;\n}\n\nexport interface ShowUploadListInterface {\n showRemoveIcon?: boolean;\n showPreviewIcon?: boolean;\n showDownloadIcon?: boolean;\n}\n\nexport interface UploadProps<T = any> {\n accept?: string;\n action?: string | ((file: RcFile) => string | Promise<string>);\n method?: 'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch';\n headers?: Record<string, string>;\n data?:\n | Record<string, unknown>\n | ((file: RcFile | string | Blob) => Record<string, unknown>);\n withCredentials?: boolean;\n beforeUpload?: (\n file: RcFile,\n fileList: RcFile[],\n ) => boolean | Promise<void | Blob | File>;\n customRequest?: RcUploadProps['customRequest'];\n disabled?: boolean;\n fileList?: UploadFile<T>[];\n defaultFileList?: UploadFile<T>[];\n maxCount?: number;\n multiple?: boolean;\n directory?: boolean;\n name?: string;\n listType?: 'text' | 'picture' | 'picture-card';\n showUploadList?: boolean | ShowUploadListInterface;\n onChange?: (info: UploadChangeParam<UploadFile<T>>) => void;\n onRemove?: (file: UploadFile<T>) => void | boolean | Promise<void | boolean>;\n onPreview?: (file: UploadFile<T>) => void;\n onDownload?: (file: UploadFile<T>) => void;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n openFileDialogOnClick?: boolean;\n /** @deprecated Use `id` instead */\n prefixCls?: string;\n id?: string;\n}\n\nexport interface UploadListProps {\n items?: UploadFile[];\n listType?: 'text' | 'picture' | 'picture-card';\n showUploadList?: boolean | ShowUploadListInterface;\n onRemove?: (file: UploadFile) => void;\n onPreview?: (file: UploadFile) => void;\n onDownload?: (file: UploadFile) => void;\n disabled?: boolean;\n}\n\nexport interface DraggerProps extends UploadProps {\n height?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet fileUid = 0;\n\nfunction getUid(): string {\n fileUid += 1;\n return `ald-upload-${Date.now()}-${fileUid}`;\n}\n\nfunction fileToUploadFile(\n file: RcFile,\n status: UploadFile['status'] = 'uploading',\n): UploadFile {\n return {\n uid: file.uid ?? getUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status,\n percent: 0,\n originFileObj: file,\n };\n}\n\nfunction isImageUrl(file: UploadFile): boolean {\n if (file.type) return file.type.startsWith('image/');\n const ext = file.name?.split('.').pop()?.toLowerCase() ?? '';\n return ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg', 'ico'].includes(\n ext,\n );\n}\n\nfunction getThumbUrl(file: UploadFile): string | undefined {\n if (file.thumbUrl) return file.thumbUrl;\n if (file.url) return file.url;\n if (file.originFileObj && isImageUrl(file)) {\n try {\n return URL.createObjectURL(file.originFileObj);\n } catch {\n return undefined;\n }\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// UploadList\n// ---------------------------------------------------------------------------\n\nfunction UploadList({\n items = [],\n listType = 'text',\n showUploadList = true,\n onRemove,\n onPreview,\n disabled,\n}: UploadListProps) {\n if (!showUploadList || items.length === 0) return null;\n\n const showConfig: ShowUploadListInterface =\n typeof showUploadList === 'object'\n ? showUploadList\n : {\n showRemoveIcon: true,\n showPreviewIcon: true,\n showDownloadIcon: false,\n };\n\n const isPictureType = listType === 'picture' || listType === 'picture-card';\n\n return (\n <ul className={cn('ald-upload-list', `ald-upload-list-${listType}`)}>\n {items.map((file) => {\n const thumbUrl = isPictureType ? getThumbUrl(file) : undefined;\n\n return (\n <li\n key={file.uid}\n className={cn(\n 'ald-upload-list-item',\n `ald-upload-list-item-${file.status || 'done'}`,\n )}\n >\n {/* Thumbnail for picture types */}\n {isPictureType && (\n <div className=\"ald-upload-list-item-thumbnail\">\n {thumbUrl ? (\n <img src={thumbUrl} alt={file.name} />\n ) : (\n <div className=\"ald-upload-list-item-file-icon\">\n <FileIcon />\n </div>\n )}\n </div>\n )}\n\n {/* Status icon for text type */}\n {!isPictureType && (\n <span className=\"ald-upload-list-item-status-icon\">\n {file.status === 'uploading' && (\n <span className=\"ald-upload-list-item-loading-icon\">\n <LoadingLine style={{ fontSize: 14 }} />\n </span>\n )}\n {file.status === 'done' && (\n <CheckCircleFill style={{ fontSize: 14 }} />\n )}\n {file.status === 'error' && (\n <CloseCircleFill style={{ fontSize: 14 }} />\n )}\n </span>\n )}\n\n {/* File name */}\n <Tooltip title={file.name}>\n <span\n className=\"ald-upload-list-item-name\"\n onClick={() => onPreview?.(file)}\n style={onPreview ? { cursor: 'pointer' } : undefined}\n >\n {file.name}\n </span>\n </Tooltip>\n\n {/* Actions */}\n <span className=\"ald-upload-list-item-actions\">\n {showConfig.showPreviewIcon &&\n onPreview &&\n file.status === 'done' && (\n <button\n type=\"button\"\n className=\"ald-upload-list-item-action\"\n title=\"Preview\"\n onClick={() => onPreview(file)}\n >\n <EyeOnLine style={{ fontSize: 14 }} />\n </button>\n )}\n {showConfig.showRemoveIcon !== false && !disabled && (\n <button\n type=\"button\"\n className=\"ald-upload-list-item-action\"\n title=\"Remove\"\n onClick={() => onRemove?.(file)}\n >\n {listType === 'picture-card' ? (\n <TrashLightLine style={{ fontSize: 14 }} />\n ) : (\n <CloseLightLine style={{ fontSize: 14 }} />\n )}\n </button>\n )}\n </span>\n\n {/* Progress bar */}\n {file.status === 'uploading' && (\n <div className=\"ald-upload-list-item-progress\">\n <div\n className=\"ald-upload-list-item-progress-bar\"\n style={{ width: `${file.percent ?? 0}%` }}\n />\n </div>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Simple file icon SVG (inline to avoid extra dependency)\n// ---------------------------------------------------------------------------\n\nfunction FileIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Upload component\n// ---------------------------------------------------------------------------\n\nfunction Upload<T = any>(props: UploadProps<T>) {\n const {\n accept,\n action,\n method,\n headers,\n data,\n withCredentials,\n beforeUpload,\n customRequest,\n disabled = false,\n fileList: controlledFileList,\n defaultFileList,\n maxCount,\n multiple,\n directory,\n name = 'file',\n listType = 'text',\n showUploadList = true,\n onChange,\n onRemove,\n onPreview,\n onDownload,\n className,\n style,\n children,\n openFileDialogOnClick = true,\n id,\n } = props;\n\n const isControlled = controlledFileList !== undefined;\n const [internalFileList, setInternalFileList] = useState<UploadFile<T>[]>(\n defaultFileList ?? [],\n );\n\n const mergedFileList = isControlled ? controlledFileList! : internalFileList;\n\n // Keep a ref to latest list so callbacks always see fresh state\n const fileListRef = useRef(mergedFileList);\n fileListRef.current = mergedFileList;\n\n const rcUploadRef = useRef<any>(null);\n\n // ----- helpers to update state & fire onChange -----\n\n const updateFileList = useCallback(\n (newFile: UploadFile<T>, event?: UploadProgressEvent) => {\n const nextList = fileListRef.current.map((f) =>\n f.uid === newFile.uid ? newFile : f,\n );\n // If the file is new, append it\n if (!nextList.some((f) => f.uid === newFile.uid)) {\n nextList.push(newFile);\n }\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n onChange?.({\n file: newFile,\n fileList: nextList,\n event,\n });\n },\n [isControlled, onChange],\n );\n\n // ----- rc-upload callback props -----\n\n const onBatchStart: RcUploadProps['onBatchStart'] = useCallback(\n (batchFileInfoList: { file: RcFile; parsedFile: any }[]) => {\n let nextList = [...fileListRef.current];\n\n for (const { file } of batchFileInfoList) {\n const uploadFile = fileToUploadFile(file, 'uploading') as UploadFile<T>;\n\n if (maxCount && nextList.length >= maxCount) {\n // replace if maxCount === 1, otherwise skip\n if (maxCount === 1) {\n nextList = [uploadFile];\n }\n continue;\n }\n nextList.push(uploadFile);\n }\n\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n\n // Fire onChange for the first new file\n const firstNew = batchFileInfoList[0];\n if (firstNew) {\n const f = nextList.find((x) => x.uid === firstNew.file.uid);\n if (f) {\n onChange?.({ file: f, fileList: nextList });\n }\n }\n },\n [isControlled, maxCount, onChange],\n );\n\n const onRcProgress = useCallback(\n (event: UploadProgressEvent, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'uploading',\n percent: event.percent ?? 0,\n };\n updateFileList(updated, event);\n },\n [updateFileList],\n );\n\n const onRcSuccess = useCallback(\n (response: any, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'done',\n percent: 100,\n response,\n };\n updateFileList(updated);\n },\n [updateFileList],\n );\n\n const onRcError = useCallback(\n (error: Error, _ret: any, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'error',\n error,\n };\n updateFileList(updated);\n },\n [updateFileList],\n );\n\n // ----- remove handler -----\n\n const handleRemove = useCallback(\n async (file: UploadFile<T>) => {\n const result = await onRemove?.(file as any);\n if (result === false) return;\n const nextList = fileListRef.current.filter((f) => f.uid !== file.uid);\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n const removedFile: UploadFile<T> = { ...file, status: 'removed' };\n onChange?.({ file: removedFile, fileList: nextList });\n },\n [isControlled, onChange, onRemove],\n );\n\n // ----- rc-upload props -----\n\n const rcUploadProps: RcUploadProps = useMemo(\n () => ({\n accept,\n action: action as RcUploadProps['action'],\n method,\n headers,\n data: data as RcUploadProps['data'],\n withCredentials,\n beforeUpload: beforeUpload as RcUploadProps['beforeUpload'],\n customRequest,\n disabled,\n multiple,\n directory,\n name,\n openFileDialogOnClick,\n id,\n prefixCls: 'ald-upload',\n onBatchStart,\n onProgress: onRcProgress,\n onSuccess: onRcSuccess,\n onError: onRcError,\n }),\n [\n accept,\n action,\n method,\n headers,\n data,\n withCredentials,\n beforeUpload,\n customRequest,\n disabled,\n multiple,\n directory,\n name,\n openFileDialogOnClick,\n id,\n onBatchStart,\n onRcProgress,\n onRcSuccess,\n onRcError,\n ],\n );\n\n const isPictureCard = listType === 'picture-card';\n\n return (\n <span\n className={cn(\n 'ald-upload',\n { 'ald-upload-disabled': disabled },\n className,\n )}\n style={style}\n >\n {isPictureCard ? (\n // picture-card: render list first, then the upload trigger\n <>\n <UploadList\n items={mergedFileList as UploadFile[]}\n listType={listType}\n showUploadList={showUploadList}\n onRemove={handleRemove as any}\n onPreview={onPreview as any}\n onDownload={onDownload as any}\n disabled={disabled}\n />\n {(!maxCount || mergedFileList.length < maxCount) && (\n <RcUpload {...rcUploadProps} ref={rcUploadRef}>\n <div className=\"ald-upload-select\">{children}</div>\n </RcUpload>\n )}\n </>\n ) : (\n // text / picture: render trigger then list\n <>\n <RcUpload {...rcUploadProps} ref={rcUploadRef}>\n <div className=\"ald-upload-select\">{children}</div>\n </RcUpload>\n <UploadList\n items={mergedFileList as UploadFile[]}\n listType={listType}\n showUploadList={showUploadList}\n onRemove={handleRemove as any}\n onPreview={onPreview as any}\n onDownload={onDownload as any}\n disabled={disabled}\n />\n </>\n )}\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Dragger sub-component\n// ---------------------------------------------------------------------------\n\nfunction Dragger(props: DraggerProps) {\n const { height, style, disabled, className, children, ...restProps } = props;\n const [dragOver, setDragOver] = useState(false);\n\n const mergedStyle: React.CSSProperties = {\n ...style,\n ...(height !== null && height !== undefined ? { height } : {}),\n };\n\n return (\n <Upload\n {...restProps}\n disabled={disabled}\n className={cn('ald-upload-dragger-wrapper', className)}\n style={mergedStyle}\n >\n <div\n className={cn('ald-upload-dragger', {\n 'ald-upload-drag-hover': dragOver,\n 'ald-upload-disabled': disabled,\n })}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={() => setDragOver(false)}\n >\n {children}\n </div>\n </Upload>\n );\n}\n\nUpload.Dragger = Dragger;\n\nexport default Upload as typeof Upload & { Dragger: typeof Dragger };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Upload/index.tsx"],"sourcesContent":["import './upload.css';\n\nimport RcUpload from 'rc-upload';\nimport type {\n RcFile as RcUploadFile,\n UploadProgressEvent,\n UploadProps as RcUploadProps,\n} from 'rc-upload/es/interface';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n CheckCircleFill,\n CloseCircleFill,\n CloseLightLine,\n EyeOnLine,\n LoadingLine,\n TrashLightLine,\n} from '../Icon';\nimport { cn } from '../lib/utils';\nimport Tooltip from '../Tooltip';\n\n// ---------------------------------------------------------------------------\n// Public types – preserved from the previous API surface\n// ---------------------------------------------------------------------------\n\nexport interface UploadFile<T = any> {\n uid: string;\n name: string;\n status?: 'uploading' | 'done' | 'error' | 'removed';\n url?: string;\n thumbUrl?: string;\n size?: number;\n type?: string;\n percent?: number;\n originFileObj?: RcFile;\n response?: T;\n error?: any;\n linkProps?: any;\n}\n\nexport type RcFile = RcUploadFile;\n\nexport interface UploadChangeParam<T = UploadFile> {\n file: T;\n fileList: T[];\n event?: UploadProgressEvent;\n}\n\nexport interface ShowUploadListInterface {\n showRemoveIcon?: boolean;\n showPreviewIcon?: boolean;\n showDownloadIcon?: boolean;\n}\n\nexport interface UploadProps<T = any> {\n accept?: string;\n action?: string | ((file: RcFile) => string | Promise<string>);\n method?: 'POST' | 'PUT' | 'PATCH' | 'post' | 'put' | 'patch';\n headers?: Record<string, string>;\n data?:\n | Record<string, unknown>\n | ((file: RcFile | string | Blob) => Record<string, unknown>);\n withCredentials?: boolean;\n beforeUpload?: (\n file: RcFile,\n fileList: RcFile[],\n ) => boolean | Promise<void | Blob | File>;\n customRequest?: (options: {\n file: RcFile;\n filename?: string;\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n onProgress?: (event: { percent: number }) => void;\n onSuccess?: (body: unknown, xhr?: XMLHttpRequest) => void;\n onError?: (event: Error) => void;\n withCredentials?: boolean;\n action?: string;\n method?: string;\n }) => void;\n disabled?: boolean;\n fileList?: UploadFile<T>[];\n defaultFileList?: UploadFile<T>[];\n maxCount?: number;\n multiple?: boolean;\n directory?: boolean;\n name?: string;\n listType?: 'text' | 'picture' | 'picture-card';\n showUploadList?: boolean | ShowUploadListInterface;\n onChange?: (info: UploadChangeParam<UploadFile<T>>) => void;\n onRemove?: (file: UploadFile<T>) => void | boolean | Promise<void | boolean>;\n onPreview?: (file: UploadFile<T>) => void;\n onDownload?: (file: UploadFile<T>) => void;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n openFileDialogOnClick?: boolean;\n /** @deprecated Use `id` instead */\n prefixCls?: string;\n id?: string;\n}\n\nexport interface UploadListProps {\n items?: UploadFile[];\n listType?: 'text' | 'picture' | 'picture-card';\n showUploadList?: boolean | ShowUploadListInterface;\n onRemove?: (file: UploadFile) => void;\n onPreview?: (file: UploadFile) => void;\n onDownload?: (file: UploadFile) => void;\n disabled?: boolean;\n}\n\nexport interface DraggerProps extends UploadProps {\n height?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet fileUid = 0;\n\nfunction getUid(): string {\n fileUid += 1;\n return `ald-upload-${Date.now()}-${fileUid}`;\n}\n\nfunction fileToUploadFile(\n file: RcFile,\n status: UploadFile['status'] = 'uploading',\n): UploadFile {\n return {\n uid: file.uid ?? getUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status,\n percent: 0,\n originFileObj: file,\n };\n}\n\nfunction isImageUrl(file: UploadFile): boolean {\n if (file.type) return file.type.startsWith('image/');\n const ext = file.name?.split('.').pop()?.toLowerCase() ?? '';\n return ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg', 'ico'].includes(\n ext,\n );\n}\n\nfunction getThumbUrl(file: UploadFile): string | undefined {\n if (file.thumbUrl) return file.thumbUrl;\n if (file.url) return file.url;\n if (file.originFileObj && isImageUrl(file)) {\n try {\n return URL.createObjectURL(file.originFileObj);\n } catch {\n return undefined;\n }\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// UploadList\n// ---------------------------------------------------------------------------\n\nfunction UploadList({\n items = [],\n listType = 'text',\n showUploadList = true,\n onRemove,\n onPreview,\n disabled,\n}: UploadListProps) {\n if (!showUploadList || items.length === 0) return null;\n\n const showConfig: ShowUploadListInterface =\n typeof showUploadList === 'object'\n ? showUploadList\n : {\n showRemoveIcon: true,\n showPreviewIcon: true,\n showDownloadIcon: false,\n };\n\n const isPictureType = listType === 'picture' || listType === 'picture-card';\n\n return (\n <ul className={cn('ald-upload-list', `ald-upload-list-${listType}`)}>\n {items.map((file) => {\n const thumbUrl = isPictureType ? getThumbUrl(file) : undefined;\n\n return (\n <li\n key={file.uid}\n className={cn(\n 'ald-upload-list-item',\n `ald-upload-list-item-${file.status || 'done'}`,\n )}\n >\n {/* Thumbnail for picture types */}\n {isPictureType && (\n <div className=\"ald-upload-list-item-thumbnail\">\n {thumbUrl ? (\n <img src={thumbUrl} alt={file.name} />\n ) : (\n <div className=\"ald-upload-list-item-file-icon\">\n <FileIcon />\n </div>\n )}\n </div>\n )}\n\n {/* Status icon for text type */}\n {!isPictureType && (\n <span className=\"ald-upload-list-item-status-icon\">\n {file.status === 'uploading' && (\n <span className=\"ald-upload-list-item-loading-icon\">\n <LoadingLine style={{ fontSize: 14 }} />\n </span>\n )}\n {file.status === 'done' && (\n <CheckCircleFill style={{ fontSize: 14 }} />\n )}\n {file.status === 'error' && (\n <CloseCircleFill style={{ fontSize: 14 }} />\n )}\n </span>\n )}\n\n {/* File name */}\n <Tooltip title={file.name}>\n <span\n className=\"ald-upload-list-item-name\"\n onClick={() => onPreview?.(file)}\n style={onPreview ? { cursor: 'pointer' } : undefined}\n >\n {file.name}\n </span>\n </Tooltip>\n\n {/* Actions */}\n <span className=\"ald-upload-list-item-actions\">\n {showConfig.showPreviewIcon &&\n onPreview &&\n file.status === 'done' && (\n <button\n type=\"button\"\n className=\"ald-upload-list-item-action\"\n title=\"Preview\"\n onClick={() => onPreview(file)}\n >\n <EyeOnLine style={{ fontSize: 14 }} />\n </button>\n )}\n {showConfig.showRemoveIcon !== false && !disabled && (\n <button\n type=\"button\"\n className=\"ald-upload-list-item-action\"\n title=\"Remove\"\n onClick={() => onRemove?.(file)}\n >\n {listType === 'picture-card' ? (\n <TrashLightLine style={{ fontSize: 14 }} />\n ) : (\n <CloseLightLine style={{ fontSize: 14 }} />\n )}\n </button>\n )}\n </span>\n\n {/* Progress bar */}\n {file.status === 'uploading' && (\n <div className=\"ald-upload-list-item-progress\">\n <div\n className=\"ald-upload-list-item-progress-bar\"\n style={{ width: `${file.percent ?? 0}%` }}\n />\n </div>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Simple file icon SVG (inline to avoid extra dependency)\n// ---------------------------------------------------------------------------\n\nfunction FileIcon() {\n return (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Upload component\n// ---------------------------------------------------------------------------\n\nfunction Upload<T = any>(props: UploadProps<T>) {\n const {\n accept,\n action,\n method,\n headers,\n data,\n withCredentials,\n beforeUpload,\n customRequest,\n disabled = false,\n fileList: controlledFileList,\n defaultFileList,\n maxCount,\n multiple,\n directory,\n name = 'file',\n listType = 'text',\n showUploadList = true,\n onChange,\n onRemove,\n onPreview,\n onDownload,\n className,\n style,\n children,\n openFileDialogOnClick = true,\n id,\n } = props;\n\n const isControlled = controlledFileList !== undefined;\n const [internalFileList, setInternalFileList] = useState<UploadFile<T>[]>(\n defaultFileList ?? [],\n );\n\n const mergedFileList = isControlled ? controlledFileList! : internalFileList;\n\n // Keep a ref to latest list so callbacks always see fresh state\n const fileListRef = useRef(mergedFileList);\n fileListRef.current = mergedFileList;\n\n const rcUploadRef = useRef<any>(null);\n\n // ----- helpers to update state & fire onChange -----\n\n const updateFileList = useCallback(\n (newFile: UploadFile<T>, event?: UploadProgressEvent) => {\n const nextList = fileListRef.current.map((f) =>\n f.uid === newFile.uid ? newFile : f,\n );\n // If the file is new, append it\n if (!nextList.some((f) => f.uid === newFile.uid)) {\n nextList.push(newFile);\n }\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n onChange?.({\n file: newFile,\n fileList: nextList,\n event,\n });\n },\n [isControlled, onChange],\n );\n\n // ----- rc-upload callback props -----\n\n const onBatchStart: RcUploadProps['onBatchStart'] = useCallback(\n (batchFileInfoList: { file: RcFile; parsedFile: any }[]) => {\n let nextList = [...fileListRef.current];\n\n for (const { file } of batchFileInfoList) {\n const uploadFile = fileToUploadFile(file, 'uploading') as UploadFile<T>;\n\n if (maxCount && nextList.length >= maxCount) {\n // replace if maxCount === 1, otherwise skip\n if (maxCount === 1) {\n nextList = [uploadFile];\n }\n continue;\n }\n nextList.push(uploadFile);\n }\n\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n\n // Fire onChange for the first new file\n const firstNew = batchFileInfoList[0];\n if (firstNew) {\n const f = nextList.find((x) => x.uid === firstNew.file.uid);\n if (f) {\n onChange?.({ file: f, fileList: nextList });\n }\n }\n },\n [isControlled, maxCount, onChange],\n );\n\n const onRcProgress = useCallback(\n (event: UploadProgressEvent, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'uploading',\n percent: event.percent ?? 0,\n };\n updateFileList(updated, event);\n },\n [updateFileList],\n );\n\n const onRcSuccess = useCallback(\n (response: any, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'done',\n percent: 100,\n response,\n };\n updateFileList(updated);\n },\n [updateFileList],\n );\n\n const onRcError = useCallback(\n (error: Error, _ret: any, file: RcFile) => {\n const target = fileListRef.current.find((f) => f.uid === file.uid);\n if (!target) return;\n const updated: UploadFile<T> = {\n ...target,\n status: 'error',\n error,\n };\n updateFileList(updated);\n },\n [updateFileList],\n );\n\n // ----- remove handler -----\n\n const handleRemove = useCallback(\n async (file: UploadFile<T>) => {\n const result = await onRemove?.(file as any);\n if (result === false) return;\n const nextList = fileListRef.current.filter((f) => f.uid !== file.uid);\n if (!isControlled) {\n setInternalFileList(nextList);\n }\n const removedFile: UploadFile<T> = { ...file, status: 'removed' };\n onChange?.({ file: removedFile, fileList: nextList });\n },\n [isControlled, onChange, onRemove],\n );\n\n // ----- rc-upload props -----\n\n const rcUploadProps: RcUploadProps = useMemo(\n () => ({\n accept,\n action: action as RcUploadProps['action'],\n method,\n headers,\n data: data as RcUploadProps['data'],\n withCredentials,\n beforeUpload: beforeUpload as RcUploadProps['beforeUpload'],\n customRequest: customRequest as RcUploadProps['customRequest'],\n disabled,\n multiple,\n directory,\n name,\n openFileDialogOnClick,\n id,\n prefixCls: 'ald-upload',\n onBatchStart,\n onProgress: onRcProgress,\n onSuccess: onRcSuccess,\n onError: onRcError,\n }),\n [\n accept,\n action,\n method,\n headers,\n data,\n withCredentials,\n beforeUpload,\n customRequest,\n disabled,\n multiple,\n directory,\n name,\n openFileDialogOnClick,\n id,\n onBatchStart,\n onRcProgress,\n onRcSuccess,\n onRcError,\n ],\n );\n\n const isPictureCard = listType === 'picture-card';\n\n return (\n <span\n className={cn(\n 'ald-upload',\n { 'ald-upload-disabled': disabled },\n className,\n )}\n style={style}\n >\n {isPictureCard ? (\n // picture-card: render list first, then the upload trigger\n <>\n <UploadList\n items={mergedFileList as UploadFile[]}\n listType={listType}\n showUploadList={showUploadList}\n onRemove={handleRemove as any}\n onPreview={onPreview as any}\n onDownload={onDownload as any}\n disabled={disabled}\n />\n {(!maxCount || mergedFileList.length < maxCount) && (\n <RcUpload {...rcUploadProps} ref={rcUploadRef}>\n <div className=\"ald-upload-select\">{children}</div>\n </RcUpload>\n )}\n </>\n ) : (\n // text / picture: render trigger then list\n <>\n <RcUpload {...rcUploadProps} ref={rcUploadRef}>\n <div className=\"ald-upload-select\">{children}</div>\n </RcUpload>\n <UploadList\n items={mergedFileList as UploadFile[]}\n listType={listType}\n showUploadList={showUploadList}\n onRemove={handleRemove as any}\n onPreview={onPreview as any}\n onDownload={onDownload as any}\n disabled={disabled}\n />\n </>\n )}\n </span>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Dragger sub-component\n// ---------------------------------------------------------------------------\n\nfunction Dragger(props: DraggerProps) {\n const { height, style, disabled, className, children, ...restProps } = props;\n const [dragOver, setDragOver] = useState(false);\n\n const mergedStyle: React.CSSProperties = {\n ...style,\n ...(height !== null && height !== undefined ? { height } : {}),\n };\n\n return (\n <Upload\n {...restProps}\n disabled={disabled}\n className={cn('ald-upload-dragger-wrapper', className)}\n style={mergedStyle}\n >\n <div\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n className={cn('ald-upload-dragger ant-upload-drag', {\n 'ald-upload-drag-hover': dragOver,\n 'ant-upload-drag-hover': dragOver,\n 'ald-upload-disabled': disabled,\n 'ant-upload-disabled': disabled,\n })}\n onDragOver={(e) => {\n e.preventDefault();\n if (!disabled) setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={() => setDragOver(false)}\n >\n {children}\n </div>\n </Upload>\n );\n}\n\nUpload.Dragger = Dragger;\n\nexport default Upload as typeof Upload & { Dragger: typeof Dragger };\n"],"mappings":";;;;;;;;;;;;;AAsHA,IAAI,UAAU;AAEd,SAAS,SAAiB;AACxB,YAAW;AACX,QAAO,cAAc,KAAK,KAAK,CAAC,GAAG;;AAGrC,SAAS,iBACP,MACA,SAA+B,aACnB;AACZ,QAAO;EACL,KAAK,KAAK,OAAO,QAAQ;EACzB,MAAM,KAAK;EACX,MAAM,KAAK;EACX,MAAM,KAAK;EACX;EACA,SAAS;EACT,eAAe;EAChB;;AAGH,SAAS,WAAW,MAA2B;AAC7C,KAAI,KAAK,KAAM,QAAO,KAAK,KAAK,WAAW,SAAS;CACpD,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI;AAC1D,QAAO;EAAC;EAAO;EAAO;EAAQ;EAAO;EAAO;EAAQ;EAAO;EAAM,CAAC,SAChE,IACD;;AAGH,SAAS,YAAY,MAAsC;AACzD,KAAI,KAAK,SAAU,QAAO,KAAK;AAC/B,KAAI,KAAK,IAAK,QAAO,KAAK;AAC1B,KAAI,KAAK,iBAAiB,WAAW,KAAK,CACxC,KAAI;AACF,SAAO,IAAI,gBAAgB,KAAK,cAAc;SACxC;AACN;;;AAUN,SAAS,WAAW,EAClB,QAAQ,EAAE,EACV,WAAW,QACX,iBAAiB,MACjB,UACA,WACA,YACkB;AAClB,KAAI,CAAC,kBAAkB,MAAM,WAAW,EAAG,QAAO;CAElD,MAAM,aACJ,OAAO,mBAAmB,WACtB,iBACA;EACE,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;EACnB;CAEP,MAAM,gBAAgB,aAAa,aAAa,aAAa;AAE7D,QACE,oBAAC,MAAD;EAAI,WAAW,GAAG,mBAAmB,mBAAmB,WAAW;YAChE,MAAM,KAAK,SAAS;GACnB,MAAM,WAAW,gBAAgB,YAAY,KAAK,GAAG;AAErD,UACE,qBAAC,MAAD;IAEE,WAAW,GACT,wBACA,wBAAwB,KAAK,UAAU,SACxC;cALH;KAQG,iBACC,oBAAC,OAAD;MAAK,WAAU;gBACZ,WACC,oBAAC,OAAD;OAAK,KAAK;OAAU,KAAK,KAAK;OAAQ,CAAA,GAEtC,oBAAC,OAAD;OAAK,WAAU;iBACb,oBAAC,UAAD,EAAY,CAAA;OACR,CAAA;MAEJ,CAAA;KAIP,CAAC,iBACA,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,KAAK,WAAW,eACf,oBAAC,QAAD;QAAM,WAAU;kBACd,oBAAC,QAAD,EAAa,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA;QACnC,CAAA;OAER,KAAK,WAAW,UACf,oBAAC,MAAD,EAAiB,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA;OAE7C,KAAK,WAAW,WACf,oBAAC,QAAD,EAAiB,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA;OAEzC;;KAIT,oBAAC,SAAD;MAAS,OAAO,KAAK;gBACnB,oBAAC,QAAD;OACE,WAAU;OACV,eAAe,YAAY,KAAK;OAChC,OAAO,YAAY,EAAE,QAAQ,WAAW,GAAG;iBAE1C,KAAK;OACD,CAAA;MACC,CAAA;KAGV,qBAAC,QAAD;MAAM,WAAU;gBAAhB,CACG,WAAW,mBACV,aACA,KAAK,WAAW,UACd,oBAAC,UAAD;OACE,MAAK;OACL,WAAU;OACV,OAAM;OACN,eAAe,UAAU,KAAK;iBAE9B,oBAAC,QAAD,EAAW,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA;OAC/B,CAAA,EAEZ,WAAW,mBAAmB,SAAS,CAAC,YACvC,oBAAC,UAAD;OACE,MAAK;OACL,WAAU;OACV,OAAM;OACN,eAAe,WAAW,KAAK;iBAE9B,aAAa,iBACZ,oBAAC,QAAD,EAAgB,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA,GAE3C,oBAAC,QAAD,EAAgB,OAAO,EAAE,UAAU,IAAI,EAAI,CAAA;OAEtC,CAAA,CAEN;;KAGN,KAAK,WAAW,eACf,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,OAAD;OACE,WAAU;OACV,OAAO,EAAE,OAAO,GAAG,KAAK,WAAW,EAAE,IAAI;OACzC,CAAA;MACE,CAAA;KAEL;MAtFE,KAAK,IAsFP;IAEP;EACC,CAAA;;AAQT,SAAS,WAAW;AAClB,QACE,qBAAC,OAAD;EACE,OAAM;EACN,QAAO;EACP,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;YARjB,CAUE,oBAAC,QAAD,EAAM,GAAE,8DAA+D,CAAA,EACvE,oBAAC,YAAD,EAAU,QAAO,kBAAmB,CAAA,CAChC;;;AAQV,SAAS,OAAgB,OAAuB;CAC9C,MAAM,EACJ,QACA,QACA,QACA,SACA,MACA,iBACA,cACA,eACA,WAAW,OACX,UAAU,oBACV,iBACA,UACA,UACA,WACA,OAAO,QACP,WAAW,QACX,iBAAiB,MACjB,UACA,UACA,WACA,YACA,WACA,OACA,UACA,wBAAwB,MACxB,OACE;CAEJ,MAAM,eAAe,uBAAuB;CAC5C,MAAM,CAAC,kBAAkB,uBAAuB,SAC9C,mBAAmB,EAAE,CACtB;CAED,MAAM,iBAAiB,eAAe,qBAAsB;CAG5D,MAAM,cAAc,OAAO,eAAe;AAC1C,aAAY,UAAU;CAEtB,MAAM,cAAc,OAAY,KAAK;CAIrC,MAAM,iBAAiB,aACpB,SAAwB,UAAgC;EACvD,MAAM,WAAW,YAAY,QAAQ,KAAK,MACxC,EAAE,QAAQ,QAAQ,MAAM,UAAU,EACnC;AAED,MAAI,CAAC,SAAS,MAAM,MAAM,EAAE,QAAQ,QAAQ,IAAI,CAC9C,UAAS,KAAK,QAAQ;AAExB,MAAI,CAAC,aACH,qBAAoB,SAAS;AAE/B,aAAW;GACT,MAAM;GACN,UAAU;GACV;GACD,CAAC;IAEJ,CAAC,cAAc,SAAS,CACzB;CAID,MAAM,eAA8C,aACjD,sBAA2D;EAC1D,IAAI,WAAW,CAAC,GAAG,YAAY,QAAQ;AAEvC,OAAK,MAAM,EAAE,UAAU,mBAAmB;GACxC,MAAM,aAAa,iBAAiB,MAAM,YAAY;AAEtD,OAAI,YAAY,SAAS,UAAU,UAAU;AAE3C,QAAI,aAAa,EACf,YAAW,CAAC,WAAW;AAEzB;;AAEF,YAAS,KAAK,WAAW;;AAG3B,MAAI,CAAC,aACH,qBAAoB,SAAS;EAI/B,MAAM,WAAW,kBAAkB;AACnC,MAAI,UAAU;GACZ,MAAM,IAAI,SAAS,MAAM,MAAM,EAAE,QAAQ,SAAS,KAAK,IAAI;AAC3D,OAAI,EACF,YAAW;IAAE,MAAM;IAAG,UAAU;IAAU,CAAC;;IAIjD;EAAC;EAAc;EAAU;EAAS,CACnC;CAED,MAAM,eAAe,aAClB,OAA4B,SAAiB;EAC5C,MAAM,SAAS,YAAY,QAAQ,MAAM,MAAM,EAAE,QAAQ,KAAK,IAAI;AAClE,MAAI,CAAC,OAAQ;AAMb,iBAL+B;GAC7B,GAAG;GACH,QAAQ;GACR,SAAS,MAAM,WAAW;GAC3B,EACuB,MAAM;IAEhC,CAAC,eAAe,CACjB;CAED,MAAM,cAAc,aACjB,UAAe,SAAiB;EAC/B,MAAM,SAAS,YAAY,QAAQ,MAAM,MAAM,EAAE,QAAQ,KAAK,IAAI;AAClE,MAAI,CAAC,OAAQ;AAOb,iBAN+B;GAC7B,GAAG;GACH,QAAQ;GACR,SAAS;GACT;GACD,CACsB;IAEzB,CAAC,eAAe,CACjB;CAED,MAAM,YAAY,aACf,OAAc,MAAW,SAAiB;EACzC,MAAM,SAAS,YAAY,QAAQ,MAAM,MAAM,EAAE,QAAQ,KAAK,IAAI;AAClE,MAAI,CAAC,OAAQ;AAMb,iBAL+B;GAC7B,GAAG;GACH,QAAQ;GACR;GACD,CACsB;IAEzB,CAAC,eAAe,CACjB;CAID,MAAM,eAAe,YACnB,OAAO,SAAwB;AAE7B,MADe,MAAM,WAAW,KAAY,KAC7B,MAAO;EACtB,MAAM,WAAW,YAAY,QAAQ,QAAQ,MAAM,EAAE,QAAQ,KAAK,IAAI;AACtE,MAAI,CAAC,aACH,qBAAoB,SAAS;EAE/B,MAAM,cAA6B;GAAE,GAAG;GAAM,QAAQ;GAAW;AACjE,aAAW;GAAE,MAAM;GAAa,UAAU;GAAU,CAAC;IAEvD;EAAC;EAAc;EAAU;EAAS,CACnC;CAID,MAAM,gBAA+B,eAC5B;EACL;EACQ;EACR;EACA;EACM;EACN;EACc;EACC;EACf;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA,YAAY;EACZ,WAAW;EACX,SAAS;EACV,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,gBAAgB,aAAa;AAEnC,QACE,oBAAC,QAAD;EACE,WAAW,GACT,cACA,EAAE,uBAAuB,UAAU,EACnC,UACD;EACM;YAEN,gBAEC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,YAAD;GACE,OAAO;GACG;GACM;GAChB,UAAU;GACC;GACC;GACF;GACV,CAAA,GACA,CAAC,YAAY,eAAe,SAAS,aACrC,oBAAC,UAAD;GAAU,GAAI;GAAe,KAAK;aAChC,oBAAC,OAAD;IAAK,WAAU;IAAqB;IAAe,CAAA;GAC1C,CAAA,CAEZ,EAAA,CAAA,GAGH,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,UAAD;GAAU,GAAI;GAAe,KAAK;aAChC,oBAAC,OAAD;IAAK,WAAU;IAAqB;IAAe,CAAA;GAC1C,CAAA,EACX,oBAAC,YAAD;GACE,OAAO;GACG;GACM;GAChB,UAAU;GACC;GACC;GACF;GACV,CAAA,CACD,EAAA,CAAA;EAEA,CAAA;;AAQX,SAAS,QAAQ,OAAqB;CACpC,MAAM,EAAE,QAAQ,OAAO,UAAU,WAAW,UAAU,GAAG,cAAc;CACvE,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,cAAmC;EACvC,GAAG;EACH,GAAI,WAAW,QAAQ,WAAW,SAAY,EAAE,QAAQ,GAAG,EAAE;EAC9D;AAED,QACE,oBAAC,QAAD;EACE,GAAI;EACM;EACV,WAAW,GAAG,8BAA8B,UAAU;EACtD,OAAO;YAEP,oBAAC,OAAD;GAEE,WAAW,GAAG,sCAAsC;IAClD,yBAAyB;IACzB,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACxB,CAAC;GACF,aAAa,MAAM;AACjB,MAAE,gBAAgB;AAClB,QAAI,CAAC,SAAU,aAAY,KAAK;;GAElC,mBAAmB,YAAY,MAAM;GACrC,cAAc,YAAY,MAAM;GAE/B;GACG,CAAA;EACC,CAAA;;AAIb,OAAO,UAAU"}
@@ -0,0 +1,2 @@
1
+ export * from './Upload/index.js';
2
+ export { default } from './Upload/index.js';
package/dist/User.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './User/index.js';
2
+ export { default } from './User/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './Watermark/index.js';
2
+ export { default } from './Watermark/index.js';
@@ -0,0 +1,15 @@
1
+ import { default as React } from 'react';
2
+ export declare const FLOATING_LAYER_BASE_Z_INDEX = 1000;
3
+ export declare const FLOATING_LAYER_STEP = 10;
4
+ export declare function useFloatingLayer(baseZIndex?: number): {
5
+ level: number;
6
+ maskZIndex: number;
7
+ contentZIndex: number;
8
+ popupZIndex: number;
9
+ nextLevel: number;
10
+ };
11
+ export declare function useFloatingPopupZIndex(zIndex?: number): number;
12
+ export declare function FloatingLayerProvider({ children, value, }: {
13
+ children: React.ReactNode;
14
+ value: number;
15
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { createContext, useContext } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/_utils/floatingLayer.tsx
4
+ var FLOATING_LAYER_BASE_Z_INDEX = 1e3;
5
+ var FloatingLayerContext = createContext(0);
6
+ function useFloatingLayer(baseZIndex = FLOATING_LAYER_BASE_Z_INDEX) {
7
+ const level = useContext(FloatingLayerContext);
8
+ const maskZIndex = baseZIndex + level * 10;
9
+ return {
10
+ level,
11
+ maskZIndex,
12
+ contentZIndex: maskZIndex + 1,
13
+ popupZIndex: maskZIndex + 2,
14
+ nextLevel: level + 1
15
+ };
16
+ }
17
+ function useFloatingPopupZIndex(zIndex) {
18
+ const { popupZIndex } = useFloatingLayer();
19
+ return zIndex ?? popupZIndex;
20
+ }
21
+ function FloatingLayerProvider({ children, value }) {
22
+ return /* @__PURE__ */ jsx(FloatingLayerContext.Provider, {
23
+ value,
24
+ children
25
+ });
26
+ }
27
+ //#endregion
28
+ export { FloatingLayerProvider, useFloatingLayer, useFloatingPopupZIndex };
29
+
30
+ //# sourceMappingURL=floatingLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"floatingLayer.js","names":[],"sources":["../../src/_utils/floatingLayer.tsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nexport const FLOATING_LAYER_BASE_Z_INDEX = 1000;\nexport const FLOATING_LAYER_STEP = 10;\n\nconst FloatingLayerContext = createContext(0);\n\nexport function useFloatingLayer(baseZIndex = FLOATING_LAYER_BASE_Z_INDEX) {\n const level = useContext(FloatingLayerContext);\n const maskZIndex = baseZIndex + level * FLOATING_LAYER_STEP;\n\n return {\n level,\n maskZIndex,\n contentZIndex: maskZIndex + 1,\n popupZIndex: maskZIndex + 2,\n nextLevel: level + 1,\n };\n}\n\nexport function useFloatingPopupZIndex(zIndex?: number) {\n const { popupZIndex } = useFloatingLayer();\n return zIndex ?? popupZIndex;\n}\n\nexport function FloatingLayerProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: number;\n}) {\n return (\n <FloatingLayerContext.Provider value={value}>\n {children}\n </FloatingLayerContext.Provider>\n );\n}\n"],"mappings":";;;AAEA,IAAa,8BAA8B;AAG3C,IAAM,uBAAuB,cAAc,EAAE;AAE7C,SAAgB,iBAAiB,aAAa,6BAA6B;CACzE,MAAM,QAAQ,WAAW,qBAAqB;CAC9C,MAAM,aAAa,aAAa,QAAA;AAEhC,QAAO;EACL;EACA;EACA,eAAe,aAAa;EAC5B,aAAa,aAAa;EAC1B,WAAW,QAAQ;EACpB;;AAGH,SAAgB,uBAAuB,QAAiB;CACtD,MAAM,EAAE,gBAAgB,kBAAkB;AAC1C,QAAO,UAAU;;AAGnB,SAAgB,sBAAsB,EACpC,UACA,SAIC;AACD,QACE,oBAAC,qBAAqB,UAAtB;EAAsC;EACnC;EAC6B,CAAA"}
@@ -0,0 +1,11 @@
1
+ type ArgTypeConfig = {
2
+ description?: string;
3
+ table?: {
4
+ disable?: boolean;
5
+ [key: string]: unknown;
6
+ };
7
+ [key: string]: unknown;
8
+ };
9
+ type ArgTypesConfig = Record<string, ArgTypeConfig>;
10
+ export declare function withChineseDescriptions<const TArgTypes extends ArgTypesConfig>(argTypes: TArgTypes): TArgTypes;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ // type-only module stub
2
+ export {};