@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,44 +1,59 @@
1
1
  import { cn } from "../lib/utils.js";
2
- import Memo from "../Icon/components/ArrowDownLightLine.js";
3
- import Memo$1 from "../Icon/components/ArrowRightLightLine.js";
4
- import React, { useState } from "react";
2
+ import Memo from "../Icon/components/ArrowRightLightLine.js";
3
+ import React, { useRef, useState } from "react";
5
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
5
  //#region src/Collapse/index.tsx
7
6
  /** Internal rendering component for a single panel */
8
7
  function CollapsePanelInternal(props) {
9
- const { header, isActive, onToggle, disabled, extra, className, style, children, forceRender, expandIcon, expandIconPosition = "start" } = props;
8
+ const { header, isActive, onToggle, disabled, extra, className, style, children, forceRender, expandIcon, expandIconPosition = "start", bordered } = props;
9
+ const contentRef = useRef(null);
10
+ const [rendered, setRendered] = useState(isActive || !!forceRender);
11
+ if (isActive && !rendered) setRendered(true);
12
+ const handleTransitionEnd = () => {
13
+ if (!isActive && !forceRender) setRendered(false);
14
+ };
15
+ const iconNode = expandIcon ? expandIcon({ isActive }) : /* @__PURE__ */ jsx(Memo, {
16
+ size: 20,
17
+ color: "var(--alias-colors-icon-subtle)"
18
+ });
10
19
  const iconElement = /* @__PURE__ */ jsx("span", {
11
- className: "ald-collapse-expand-icon tw-flex tw-items-center",
12
- children: expandIcon ? expandIcon({ isActive }) : isActive ? /* @__PURE__ */ jsx(Memo, {
13
- size: 20,
14
- color: "var(--alias-colors-icon-subtle)"
15
- }) : /* @__PURE__ */ jsx(Memo$1, {
16
- size: 20,
17
- color: "var(--alias-colors-icon-subtle)"
18
- })
20
+ className: "ald-collapse-expand-icon ant-collapse-expand-icon tw-flex tw-items-center",
21
+ style: {
22
+ transform: isActive ? "rotate(90deg)" : "rotate(0deg)",
23
+ transition: "transform 200ms"
24
+ },
25
+ children: iconNode
19
26
  });
20
27
  return /* @__PURE__ */ jsxs("div", {
21
- className: cn("ald-collapse-item tw-border-b tw-border-solid tw-border-[var(--border-default)]", isActive && "ald-collapse-item-active", disabled && "tw-pointer-events-none tw-opacity-50", className),
28
+ className: cn("ald-collapse-item ant-collapse-item tw-w-full", isActive && "ald-collapse-item-active", disabled && "tw-pointer-events-none tw-opacity-50", className),
22
29
  style,
23
30
  children: [/* @__PURE__ */ jsxs("div", {
24
- className: "ald-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-px-4 tw-py-3",
31
+ className: "ald-collapse-header ant-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-p-3",
25
32
  onClick: disabled ? void 0 : onToggle,
26
33
  children: [
27
34
  expandIconPosition === "start" && iconElement,
28
35
  /* @__PURE__ */ jsx("span", {
29
- className: "ald-collapse-header-text tw-flex-1",
36
+ className: "ald-collapse-header-text ant-collapse-header-text tw-flex-1 tw-text-sm tw-font-medium tw-leading-5 tw-text-[var(--content-primary)]",
30
37
  children: header
31
38
  }),
32
39
  extra && /* @__PURE__ */ jsx("span", {
33
- className: "ald-collapse-extra",
40
+ className: "ald-collapse-extra ant-collapse-extra",
34
41
  children: extra
35
42
  }),
36
43
  expandIconPosition === "end" && iconElement
37
44
  ]
38
- }), (isActive || forceRender) && /* @__PURE__ */ jsx("div", {
39
- className: "ald-collapse-content tw-px-4 tw-pb-4",
40
- style: !isActive && forceRender ? { display: "none" } : void 0,
41
- children
45
+ }), /* @__PURE__ */ jsx("div", {
46
+ className: "tw-grid tw-transition-[grid-template-rows] tw-duration-200",
47
+ style: { gridTemplateRows: isActive ? "1fr" : "0fr" },
48
+ onTransitionEnd: handleTransitionEnd,
49
+ children: /* @__PURE__ */ jsx("div", {
50
+ className: "tw-overflow-hidden",
51
+ children: rendered && /* @__PURE__ */ jsx("div", {
52
+ ref: contentRef,
53
+ className: cn("ald-collapse-content ant-collapse-content tw-flex tw-items-start tw-gap-2.5 tw-self-stretch", bordered ? "tw-bg-[var(--background-default)] tw-p-4" : "tw-pb-4 tw-pl-10 tw-pr-4 tw-pt-0"),
54
+ children
55
+ })
56
+ })
42
57
  })]
43
58
  });
44
59
  }
@@ -75,7 +90,7 @@ function panelChildrenToItems(children) {
75
90
  return items;
76
91
  }
77
92
  var Collapse = (props) => {
78
- const { defaultActiveKey = [], activeKey: controlledActiveKey, accordion, onChange, className, style, bordered = true, expandIconPosition, expandIcon, items: itemsProp, children } = props;
93
+ const { defaultActiveKey = [], activeKey: controlledActiveKey, accordion, onChange, className, style, bordered = true, ghost, expandIconPosition, expandIcon, items: itemsProp, children } = props;
79
94
  const resolvedPosition = expandIconPosition === "left" ? "start" : expandIconPosition === "right" ? "end" : expandIconPosition ?? "start";
80
95
  const normalizeKeys = (keys) => {
81
96
  if (!keys) return [];
@@ -92,7 +107,7 @@ var Collapse = (props) => {
92
107
  };
93
108
  const items = itemsProp || (children ? panelChildrenToItems(children) : void 0);
94
109
  const renderItems = () => {
95
- if (items && items.length > 0) return items.map((item) => /* @__PURE__ */ jsx(CollapsePanelInternal, {
110
+ if (items && items.length > 0) return items.map((item, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [index > 0 && /* @__PURE__ */ jsx("div", { className: "ald-collapse-divider" }), /* @__PURE__ */ jsx(CollapsePanelInternal, {
96
111
  panelKey: item.key,
97
112
  header: item.label,
98
113
  isActive: activeKeys.includes(item.key),
@@ -104,12 +119,13 @@ var Collapse = (props) => {
104
119
  forceRender: item.forceRender,
105
120
  expandIcon,
106
121
  expandIconPosition: resolvedPosition,
122
+ bordered,
107
123
  children: item.children
108
- }, item.key));
124
+ })] }, item.key));
109
125
  return children;
110
126
  };
111
127
  return /* @__PURE__ */ jsx("div", {
112
- className: cn("ald-collapse", bordered && "tw-rounded-[6px] tw-border tw-border-solid tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtle)]", className),
128
+ className: cn("ald-collapse ant-collapse tw-flex tw-flex-col tw-items-start tw-overflow-hidden tw-rounded-r-75 [&>.ald-collapse-divider]:tw-h-px [&>.ald-collapse-divider]:tw-w-full [&>.ald-collapse-divider]:tw-bg-[var(--border-default)]", !bordered && !ghost && "tw-bg-[var(--background-neutral-subtle)]", bordered && "tw-border tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-neutral-subtle)]", className),
113
129
  style,
114
130
  children: renderItems()
115
131
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Collapse/index.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ArrowDownLightLine, ArrowRightLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface CollapsePanelProps {\n key: string;\n header?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n disabled?: boolean;\n extra?: React.ReactNode;\n forceRender?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n}\n\nexport interface CollapseProps {\n activeKey?: string | string[];\n defaultActiveKey?: string | string[];\n accordion?: boolean;\n onChange?: (key: string | string[]) => void;\n className?: string;\n style?: React.CSSProperties;\n bordered?: boolean;\n expandIconPosition?: 'start' | 'end' | 'left' | 'right';\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n ghost?: boolean;\n size?: 'large' | 'middle' | 'small';\n collapsible?: 'header' | 'icon' | 'disabled';\n children?: React.ReactNode;\n items?: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }>;\n}\n\n/** Internal rendering component for a single panel */\nfunction CollapsePanelInternal(props: {\n panelKey: string;\n header: React.ReactNode;\n isActive: boolean;\n onToggle: () => void;\n disabled?: boolean;\n extra?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n forceRender?: boolean;\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n}) {\n const {\n header,\n isActive,\n onToggle,\n disabled,\n extra,\n className,\n style,\n children,\n forceRender,\n expandIcon,\n expandIconPosition = 'start',\n } = props;\n\n const iconNode = expandIcon ? (\n expandIcon({ isActive })\n ) : isActive ? (\n <ArrowDownLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n ) : (\n <ArrowRightLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n );\n\n const iconElement = (\n <span className=\"ald-collapse-expand-icon tw-flex tw-items-center\">\n {iconNode}\n </span>\n );\n\n return (\n <div\n className={cn(\n 'ald-collapse-item tw-border-b tw-border-solid tw-border-[var(--border-default)]',\n isActive && 'ald-collapse-item-active',\n disabled && 'tw-pointer-events-none tw-opacity-50',\n className,\n )}\n style={style}\n >\n <div\n className=\"ald-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-px-4 tw-py-3\"\n onClick={disabled ? undefined : onToggle}\n >\n {expandIconPosition === 'start' && iconElement}\n <span className=\"ald-collapse-header-text tw-flex-1\">{header}</span>\n {extra && <span className=\"ald-collapse-extra\">{extra}</span>}\n {expandIconPosition === 'end' && iconElement}\n </div>\n {(isActive || forceRender) && (\n <div\n className=\"ald-collapse-content tw-px-4 tw-pb-4\"\n style={!isActive && forceRender ? { display: 'none' } : undefined}\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Checks whether a React element is a Collapse.Panel.\n * We tag the Panel component with a `__COLLAPSE_PANEL` flag\n * so we can detect it regardless of module wrapper differences.\n */\nfunction isPanelElement(\n child: React.ReactNode,\n): child is React.ReactElement<CollapsePanelProps> {\n if (!React.isValidElement(child)) return false;\n return (child.type as any)?.__COLLAPSE_PANEL === true;\n}\n\n/**\n * Convert Collapse.Panel children into the internal items format.\n */\nfunction panelChildrenToItems(children: React.ReactNode) {\n const items: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }> = [];\n\n React.Children.forEach(children, (child) => {\n if (!isPanelElement(child)) return;\n const {\n header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n } = child.props;\n\n // The `key` prop is not part of child.props in React — access it from child.key\n const panelKey =\n child.key !== null && child.key !== undefined ? String(child.key) : '';\n\n items.push({\n key: panelKey,\n label: header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n });\n });\n\n return items;\n}\n\nconst Collapse = (props: CollapseProps) => {\n const {\n defaultActiveKey = [],\n activeKey: controlledActiveKey,\n accordion,\n onChange,\n className,\n style,\n bordered = true,\n expandIconPosition,\n expandIcon,\n items: itemsProp,\n children,\n } = props;\n\n const resolvedPosition =\n expandIconPosition === 'left'\n ? 'start'\n : expandIconPosition === 'right'\n ? 'end'\n : expandIconPosition ?? 'start';\n\n const normalizeKeys = (keys: string | string[] | undefined): string[] => {\n if (!keys) return [];\n return Array.isArray(keys) ? keys : [keys];\n };\n\n const [internalActiveKey, setInternalActiveKey] = useState<string[]>(\n normalizeKeys(defaultActiveKey),\n );\n\n const activeKeys =\n controlledActiveKey !== undefined\n ? normalizeKeys(controlledActiveKey)\n : internalActiveKey;\n\n const toggleKey = (key: string) => {\n let newKeys: string[];\n if (accordion) {\n newKeys = activeKeys.includes(key) ? [] : [key];\n } else {\n newKeys = activeKeys.includes(key)\n ? activeKeys.filter((k) => k !== key)\n : [...activeKeys, key];\n }\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(newKeys);\n }\n onChange?.(accordion ? newKeys[0] || '' : newKeys);\n };\n\n // Resolve items: from `items` prop, or by converting Panel children\n const items =\n itemsProp || (children ? panelChildrenToItems(children) : undefined);\n\n const renderItems = () => {\n if (items && items.length > 0) {\n return items.map((item) => (\n <CollapsePanelInternal\n key={item.key}\n panelKey={item.key}\n header={item.label}\n isActive={activeKeys.includes(item.key)}\n onToggle={() => toggleKey(item.key)}\n disabled={item.disabled || item.collapsible === 'disabled'}\n extra={item.extra}\n className={item.className}\n style={item.style}\n forceRender={item.forceRender}\n expandIcon={expandIcon}\n expandIconPosition={resolvedPosition}\n >\n {item.children}\n </CollapsePanelInternal>\n ));\n }\n // If children are not Panel elements (rare fallback), render them as-is\n return children;\n };\n\n return (\n <div\n className={cn(\n 'ald-collapse',\n bordered &&\n 'tw-rounded-[6px] tw-border tw-border-solid tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtle)]',\n className,\n )}\n style={style}\n >\n {renderItems()}\n </div>\n );\n};\n\n/**\n * Collapse.Panel — legacy sub-component for backwards compatibility.\n * When used as a child of <Collapse>, the parent extracts its props\n * and renders the panels via the internal CollapsePanelInternal component.\n * Panel itself never renders directly; the parent handles rendering.\n */\nconst Panel: React.FC<CollapsePanelProps> = ({ children }) => {\n // This component should never render on its own — Collapse extracts\n // its props. But if used outside of Collapse, render children as fallback.\n return <>{children}</>;\n};\n\n// Tag for detection by isPanelElement\n(Panel as any).__COLLAPSE_PANEL = true;\n\nCollapse.Panel = Panel;\n\nexport default Collapse;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Collapse/index.tsx"],"sourcesContent":["import React, { useRef, useState } from 'react';\nimport { ArrowRightLightLine } from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface CollapsePanelProps {\n key: string;\n header?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n disabled?: boolean;\n extra?: React.ReactNode;\n forceRender?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n showArrow?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\nexport interface CollapseProps {\n activeKey?: string | string[];\n defaultActiveKey?: string | string[];\n accordion?: boolean;\n onChange?: (key: string | string[]) => void;\n className?: string;\n style?: React.CSSProperties;\n bordered?: boolean;\n expandIconPosition?: 'start' | 'end' | 'left' | 'right';\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n ghost?: boolean;\n size?: 'large' | 'middle' | 'small';\n collapsible?: 'header' | 'icon' | 'disabled';\n children?: React.ReactNode;\n items?: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }>;\n}\n\n/** Internal rendering component for a single panel */\nfunction CollapsePanelInternal(props: {\n panelKey: string;\n header: React.ReactNode;\n isActive: boolean;\n onToggle: () => void;\n disabled?: boolean;\n extra?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n forceRender?: boolean;\n expandIcon?: (props: { isActive: boolean }) => React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n bordered?: boolean;\n}) {\n const {\n header,\n isActive,\n onToggle,\n disabled,\n extra,\n className,\n style,\n children,\n forceRender,\n expandIcon,\n expandIconPosition = 'start',\n bordered,\n } = props;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [rendered, setRendered] = useState(isActive || !!forceRender);\n\n // Ensure content is in DOM before expanding so transition can play\n if (isActive && !rendered) {\n setRendered(true);\n }\n\n const handleTransitionEnd = () => {\n if (!isActive && !forceRender) {\n setRendered(false);\n }\n };\n\n const iconNode = expandIcon ? (\n expandIcon({ isActive })\n ) : (\n <ArrowRightLightLine size={20} color=\"var(--alias-colors-icon-subtle)\" />\n );\n\n // antd 兼容:保留 ant-collapse-expand-icon class,消费方 CSS 可能依赖该选择器\n const iconElement = (\n <span\n className=\"ald-collapse-expand-icon ant-collapse-expand-icon tw-flex tw-items-center\"\n style={{\n transform: isActive ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 200ms',\n }}\n >\n {iconNode}\n </span>\n );\n\n return (\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-collapse-item ant-collapse-item tw-w-full',\n isActive && 'ald-collapse-item-active',\n disabled && 'tw-pointer-events-none tw-opacity-50',\n className,\n )}\n style={style}\n >\n <div\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n className=\"ald-collapse-header ant-collapse-header tw-flex tw-cursor-pointer tw-items-center tw-gap-2 tw-p-3\"\n onClick={disabled ? undefined : onToggle}\n >\n {expandIconPosition === 'start' && iconElement}\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n <span className=\"ald-collapse-header-text ant-collapse-header-text tw-flex-1 tw-text-sm tw-font-medium tw-leading-5 tw-text-[var(--content-primary)]\">\n {header}\n </span>\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n {extra && (\n <span className=\"ald-collapse-extra ant-collapse-extra\">{extra}</span>\n )}\n {expandIconPosition === 'end' && iconElement}\n </div>\n <div\n className=\"tw-grid tw-transition-[grid-template-rows] tw-duration-200\"\n style={{ gridTemplateRows: isActive ? '1fr' : '0fr' }}\n onTransitionEnd={handleTransitionEnd}\n >\n <div className=\"tw-overflow-hidden\">\n {rendered && (\n <div\n ref={contentRef}\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n className={cn(\n 'ald-collapse-content ant-collapse-content tw-flex tw-items-start tw-gap-2.5 tw-self-stretch',\n bordered\n ? 'tw-bg-[var(--background-default)] tw-p-4'\n : 'tw-pb-4 tw-pl-10 tw-pr-4 tw-pt-0',\n )}\n >\n {children}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Checks whether a React element is a Collapse.Panel.\n * We tag the Panel component with a `__COLLAPSE_PANEL` flag\n * so we can detect it regardless of module wrapper differences.\n */\nfunction isPanelElement(\n child: React.ReactNode,\n): child is React.ReactElement<CollapsePanelProps> {\n if (!React.isValidElement(child)) return false;\n return (child.type as any)?.__COLLAPSE_PANEL === true;\n}\n\n/**\n * Convert Collapse.Panel children into the internal items format.\n */\nfunction panelChildrenToItems(children: React.ReactNode) {\n const items: Array<{\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n extra?: React.ReactNode;\n disabled?: boolean;\n collapsible?: 'header' | 'icon' | 'disabled';\n forceRender?: boolean;\n }> = [];\n\n React.Children.forEach(children, (child) => {\n if (!isPanelElement(child)) return;\n const {\n header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n } = child.props;\n\n // The `key` prop is not part of child.props in React — access it from child.key\n const panelKey =\n child.key !== null && child.key !== undefined ? String(child.key) : '';\n\n items.push({\n key: panelKey,\n label: header,\n children: panelChildren,\n className,\n style,\n extra,\n disabled,\n collapsible,\n forceRender,\n });\n });\n\n return items;\n}\n\nconst Collapse = (props: CollapseProps) => {\n const {\n defaultActiveKey = [],\n activeKey: controlledActiveKey,\n accordion,\n onChange,\n className,\n style,\n bordered = true,\n ghost,\n expandIconPosition,\n expandIcon,\n items: itemsProp,\n children,\n } = props;\n\n const resolvedPosition =\n expandIconPosition === 'left'\n ? 'start'\n : expandIconPosition === 'right'\n ? 'end'\n : expandIconPosition ?? 'start';\n\n const normalizeKeys = (keys: string | string[] | undefined): string[] => {\n if (!keys) return [];\n return Array.isArray(keys) ? keys : [keys];\n };\n\n const [internalActiveKey, setInternalActiveKey] = useState<string[]>(\n normalizeKeys(defaultActiveKey),\n );\n\n const activeKeys =\n controlledActiveKey !== undefined\n ? normalizeKeys(controlledActiveKey)\n : internalActiveKey;\n\n const toggleKey = (key: string) => {\n let newKeys: string[];\n if (accordion) {\n newKeys = activeKeys.includes(key) ? [] : [key];\n } else {\n newKeys = activeKeys.includes(key)\n ? activeKeys.filter((k) => k !== key)\n : [...activeKeys, key];\n }\n if (controlledActiveKey === undefined) {\n setInternalActiveKey(newKeys);\n }\n onChange?.(accordion ? newKeys[0] || '' : newKeys);\n };\n\n // Resolve items: from `items` prop, or by converting Panel children\n const items =\n itemsProp || (children ? panelChildrenToItems(children) : undefined);\n\n const renderItems = () => {\n if (items && items.length > 0) {\n return items.map((item, index) => (\n <React.Fragment key={item.key}>\n {index > 0 && <div className=\"ald-collapse-divider\" />}\n <CollapsePanelInternal\n panelKey={item.key}\n header={item.label}\n isActive={activeKeys.includes(item.key)}\n onToggle={() => toggleKey(item.key)}\n disabled={item.disabled || item.collapsible === 'disabled'}\n extra={item.extra}\n className={item.className}\n style={item.style}\n forceRender={item.forceRender}\n expandIcon={expandIcon}\n expandIconPosition={resolvedPosition}\n bordered={bordered}\n >\n {item.children}\n </CollapsePanelInternal>\n </React.Fragment>\n ));\n }\n // If children are not Panel elements (rare fallback), render them as-is\n return children;\n };\n\n return (\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-collapse ant-collapse tw-flex tw-flex-col tw-items-start tw-overflow-hidden tw-rounded-r-75 [&>.ald-collapse-divider]:tw-h-px [&>.ald-collapse-divider]:tw-w-full [&>.ald-collapse-divider]:tw-bg-[var(--border-default)]',\n !bordered && !ghost && 'tw-bg-[var(--background-neutral-subtle)]',\n bordered &&\n 'tw-border tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-neutral-subtle)]',\n className,\n )}\n style={style}\n >\n {renderItems()}\n </div>\n );\n};\n\n/**\n * Collapse.Panel — legacy sub-component for backwards compatibility.\n * When used as a child of <Collapse>, the parent extracts its props\n * and renders the panels via the internal CollapsePanelInternal component.\n * Panel itself never renders directly; the parent handles rendering.\n */\nconst Panel: React.FC<CollapsePanelProps> = ({ children }) => {\n // This component should never render on its own — Collapse extracts\n // its props. But if used outside of Collapse, render children as fallback.\n return <>{children}</>;\n};\n\n// Tag for detection by isPanelElement\n(Panel as any).__COLLAPSE_PANEL = true;\n\nCollapse.Panel = Panel;\n\nexport default Collapse;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Collapse/index.js';
2
+ export { default } from './Collapse/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './ComplexColorPicker/index.js';
2
+ export { default } from './ComplexColorPicker/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './ColorPicker/index.js';
2
+ export { default } from './ColorPicker/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './ConfigProvider/index.js';
2
+ export { default } from './ConfigProvider/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './Body/index.js';
2
+ export { default } from './Body/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './DragBar/index.js';
2
+ export { default } from './DragBar/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './Header/index.js';
2
+ export { default } from './Header/index.js';
@@ -1,8 +1,8 @@
1
1
  import { cn } from "../lib/utils.js";
2
+ import Progress_default from "../Progress/index.js";
2
3
  import { LocaleContext, getTranslator } from "../locale/default.js";
3
4
  import ScrollArea_default from "../ScrollArea/index.js";
4
5
  /* empty css */
5
- import Progress_default from "../Progress/index.js";
6
6
  import CustomSpin from "../Spin/index.js";
7
7
  import Body_default from "./components/Body/index.js";
8
8
  import Error_default from "./components/Body/Error.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/DataPreviewTable/index.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport './data-preview-table.css';\nimport React, {\n forwardRef,\n memo,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport Progress, { IProgressRef } from '../Progress';\nimport ScrollArea from '../ScrollArea';\nimport Spin from '../Spin';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport Body from './components/Body';\nimport Error from './components/Body/Error';\nimport Header from './components/Header';\nimport { CELL_HEIGHT, DEFAULT_HEADER_HEIGHT } from './constant';\nimport useDirection from './hooks/useDirection';\nimport { DataPreviewTableRef, ITableProps } from './interface';\n\nconst DataPreviewTable = forwardRef(function (\n props: ITableProps,\n ref: React.Ref<DataPreviewTableRef>,\n) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n columns = [],\n datasource = [],\n width,\n height,\n headerHeight = 0,\n loading,\n dataStatus,\n errorMsg = t.DataPreviewTable.dataLoadFailed,\n } = props;\n\n const realHeaderHeight = Math.max(headerHeight, DEFAULT_HEADER_HEIGHT);\n const contentHeight = useMemo(() => {\n return datasource.length * CELL_HEIGHT + realHeaderHeight;\n }, [datasource, realHeaderHeight]);\n const wrapRef = useRef<HTMLDivElement>(null);\n const progressRef = useRef<IProgressRef>(null);\n const {\n columnRange,\n rowRange,\n onScroll,\n columnLayout,\n setColumnsWidth,\n tableColumns,\n contentWidth,\n } = useDirection(columns, wrapRef);\n\n useImperativeHandle(ref, () => ({\n scrollToColumnInView: (columnId: string) => {\n // 实现scrollTo方法\n const columnPos = columnLayout[columnId];\n if (!columnPos) return;\n // 根据容器的宽度,容器的scrollLeft,columnPos,判断当前列是否在可视区域内\n const { scrollLeft } = wrapRef.current as HTMLDivElement;\n const { left, width } = columnPos;\n const containerWidth = wrapRef.current?.clientWidth || 0;\n if (left < scrollLeft) {\n // 左边不可见\n wrapRef.current?.scrollTo({\n left,\n behavior: 'smooth',\n });\n } else if (left + width > scrollLeft + containerWidth) {\n // 右边不可见\n wrapRef.current?.scrollTo({\n left: left + width - containerWidth,\n behavior: 'smooth',\n });\n }\n },\n progressRestart: () => {\n progressRef.current?.restart();\n },\n }));\n\n const skeletonRows = useMemo(() => {\n if (!wrapRef.current) return 0;\n const rows = Math.ceil(\n ((wrapRef.current?.clientHeight || 0) - realHeaderHeight) / CELL_HEIGHT,\n );\n return rows - 1 < 0 ? 0 : rows - 1;\n }, [realHeaderHeight]);\n\n return (\n <ScrollArea\n ref={wrapRef}\n style={{ width, height, willChange: 'transform' }}\n onViewportScroll={() => {\n // const { scrollTop, scrollLeft } = e.target as HTMLDivElement;\n onScroll();\n }}\n className={cn(props.className, 'ald-data-preview-table', {\n 'ald-data-preview-table-show-skeleton': dataStatus === 'pending',\n })}\n >\n <div\n style={{\n height:\n dataStatus === 'pending'\n ? skeletonRows * CELL_HEIGHT + realHeaderHeight\n : contentHeight,\n position: 'relative',\n width: 'fit-content',\n }}\n >\n <div className=\"ald-data-preview-sticky\">\n <Progress\n className=\"ald-data-preview-progress\"\n loading={!!loading}\n ref={progressRef}\n ></Progress>\n <Header\n contentWidth={contentWidth}\n headerHeight={realHeaderHeight}\n columns={tableColumns}\n columnLayout={columnLayout}\n setWidth={setColumnsWidth}\n columnRange={columnRange}\n />\n </div>\n {dataStatus === 'pending' && tableColumns.length > 0 && (\n <div className=\"ald-data-preview-loading\">\n <Spin />\n </div>\n )}\n {dataStatus === 'success' && (\n <Body\n columns={tableColumns}\n columnRange={columnRange}\n columnLayout={columnLayout}\n datasource={datasource}\n rowRange={rowRange}\n headerHeight={realHeaderHeight}\n />\n )}\n {dataStatus === 'error' && (\n <Error\n errorMsg={errorMsg}\n wrapWidth={wrapRef.current?.clientWidth || 0}\n />\n )}\n </div>\n </ScrollArea>\n );\n});\n\nexport default memo(DataPreviewTable);\n"],"mappings":";;;;;;;;;;;;AA0JA,IAAA,2BAAe,KArIU,WAAW,SAClC,OACA,KACA;CACA,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UAAU,EAAE,EACZ,aAAa,EAAE,EACf,OACA,QACA,eAAe,GACf,SACA,YACA,WAAW,EAAE,iBAAiB,mBAC5B;CAEJ,MAAM,mBAAmB,KAAK,IAAI,cAAA,GAAoC;CACtE,MAAM,gBAAgB,cAAc;AAClC,SAAO,WAAW,SAAA,KAAuB;IACxC,CAAC,YAAY,iBAAiB,CAAC;CAClC,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,cAAc,OAAqB,KAAK;CAC9C,MAAM,EACJ,aACA,UACA,UACA,cACA,iBACA,cACA,iBACE,aAAa,SAAS,QAAQ;AAElC,qBAAoB,YAAY;EAC9B,uBAAuB,aAAqB;GAE1C,MAAM,YAAY,aAAa;AAC/B,OAAI,CAAC,UAAW;GAEhB,MAAM,EAAE,eAAe,QAAQ;GAC/B,MAAM,EAAE,MAAM,UAAU;GACxB,MAAM,iBAAiB,QAAQ,SAAS,eAAe;AACvD,OAAI,OAAO,WAET,SAAQ,SAAS,SAAS;IACxB;IACA,UAAU;IACX,CAAC;YACO,OAAO,QAAQ,aAAa,eAErC,SAAQ,SAAS,SAAS;IACxB,MAAM,OAAO,QAAQ;IACrB,UAAU;IACX,CAAC;;EAGN,uBAAuB;AACrB,eAAY,SAAS,SAAS;;EAEjC,EAAE;CAEH,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,QAAQ,QAAS,QAAO;EAC7B,MAAM,OAAO,KAAK,OACd,QAAQ,SAAS,gBAAgB,KAAK,oBAAA,GACzC;AACD,SAAO,OAAO,IAAI,IAAI,IAAI,OAAO;IAChC,CAAC,iBAAiB,CAAC;AAEtB,QACE,oBAAC,oBAAD;EACE,KAAK;EACL,OAAO;GAAE;GAAO;GAAQ,YAAY;GAAa;EACjD,wBAAwB;AAEtB,aAAU;;EAEZ,WAAW,GAAG,MAAM,WAAW,0BAA0B,EACvD,wCAAwC,eAAe,WACxD,CAAC;YAEF,qBAAC,OAAD;GACE,OAAO;IACL,QACE,eAAe,YACX,eAAA,KAA6B,mBAC7B;IACN,UAAU;IACV,OAAO;IACR;aARH;IAUE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,kBAAD;MACE,WAAU;MACV,SAAS,CAAC,CAAC;MACX,KAAK;MACK,CAAA,EACZ,oBAAC,QAAD;MACgB;MACd,cAAc;MACd,SAAS;MACK;MACd,UAAU;MACG;MACb,CAAA,CACE;;IACL,eAAe,aAAa,aAAa,SAAS,KACjD,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,YAAD,EAAQ,CAAA;KACJ,CAAA;IAEP,eAAe,aACd,oBAAC,cAAD;KACE,SAAS;KACI;KACC;KACF;KACF;KACV,cAAc;KACd,CAAA;IAEH,eAAe,WACd,oBAAC,eAAD;KACY;KACV,WAAW,QAAQ,SAAS,eAAe;KAC3C,CAAA;IAEA;;EACK,CAAA;EAEf,CAEmC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/DataPreviewTable/index.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport './data-preview-table.css';\nimport React, {\n forwardRef,\n memo,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport Progress, { IProgressRef } from '../Progress';\nimport ScrollArea from '../ScrollArea';\nimport Spin from '../Spin';\nimport { LocaleContext, getTranslator } from '../locale/default';\nimport Body from './components/Body';\nimport Error from './components/Body/Error';\nimport Header from './components/Header';\nimport { CELL_HEIGHT, DEFAULT_HEADER_HEIGHT } from './constant';\nimport useDirection from './hooks/useDirection';\nimport { DataPreviewTableRef, ITableProps } from './interface';\n\nconst DataPreviewTable = forwardRef(function (\n props: ITableProps,\n ref: React.Ref<DataPreviewTableRef>,\n) {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const {\n columns = [],\n datasource = [],\n width,\n height,\n headerHeight = 0,\n loading,\n dataStatus,\n errorMsg = t.DataPreviewTable.dataLoadFailed,\n } = props;\n\n const realHeaderHeight = Math.max(headerHeight, DEFAULT_HEADER_HEIGHT);\n const contentHeight = useMemo(() => {\n return datasource.length * CELL_HEIGHT + realHeaderHeight;\n }, [datasource, realHeaderHeight]);\n const wrapRef = useRef<HTMLDivElement>(null);\n const progressRef = useRef<IProgressRef>(null);\n const {\n columnRange,\n rowRange,\n onScroll,\n columnLayout,\n setColumnsWidth,\n tableColumns,\n contentWidth,\n } = useDirection(columns, wrapRef);\n\n useImperativeHandle(ref, () => ({\n scrollToColumnInView: (columnId: string) => {\n // 实现scrollTo方法\n const columnPos = columnLayout[columnId];\n if (!columnPos) return;\n // 根据容器的宽度,容器的scrollLeft,columnPos,判断当前列是否在可视区域内\n const { scrollLeft } = wrapRef.current as HTMLDivElement;\n const { left, width } = columnPos;\n const containerWidth = wrapRef.current?.clientWidth || 0;\n if (left < scrollLeft) {\n // 左边不可见\n wrapRef.current?.scrollTo({\n left,\n behavior: 'smooth',\n });\n } else if (left + width > scrollLeft + containerWidth) {\n // 右边不可见\n wrapRef.current?.scrollTo({\n left: left + width - containerWidth,\n behavior: 'smooth',\n });\n }\n },\n progressRestart: () => {\n progressRef.current?.restart();\n },\n }));\n\n const skeletonRows = useMemo(() => {\n if (!wrapRef.current) return 0;\n const rows = Math.ceil(\n ((wrapRef.current?.clientHeight || 0) - realHeaderHeight) / CELL_HEIGHT,\n );\n return rows - 1 < 0 ? 0 : rows - 1;\n }, [realHeaderHeight]);\n\n return (\n <ScrollArea\n ref={wrapRef}\n style={{ width, height, willChange: 'transform' }}\n onViewportScroll={() => {\n // const { scrollTop, scrollLeft } = e.target as HTMLDivElement;\n onScroll();\n }}\n className={cn(props.className, 'ald-data-preview-table', {\n 'ald-data-preview-table-show-skeleton': dataStatus === 'pending',\n })}\n >\n <div\n style={{\n height:\n dataStatus === 'pending'\n ? skeletonRows * CELL_HEIGHT + realHeaderHeight\n : contentHeight,\n position: 'relative',\n width: 'fit-content',\n }}\n >\n <div className=\"ald-data-preview-sticky\">\n <Progress\n className=\"ald-data-preview-progress\"\n loading={!!loading}\n ref={progressRef}\n />\n <Header\n contentWidth={contentWidth}\n headerHeight={realHeaderHeight}\n columns={tableColumns}\n columnLayout={columnLayout}\n setWidth={setColumnsWidth}\n columnRange={columnRange}\n />\n </div>\n {dataStatus === 'pending' && tableColumns.length > 0 && (\n <div className=\"ald-data-preview-loading\">\n <Spin />\n </div>\n )}\n {dataStatus === 'success' && (\n <Body\n columns={tableColumns}\n columnRange={columnRange}\n columnLayout={columnLayout}\n datasource={datasource}\n rowRange={rowRange}\n headerHeight={realHeaderHeight}\n />\n )}\n {dataStatus === 'error' && (\n <Error\n errorMsg={errorMsg}\n wrapWidth={wrapRef.current?.clientWidth || 0}\n />\n )}\n </div>\n </ScrollArea>\n );\n});\n\nexport default memo(DataPreviewTable);\n"],"mappings":";;;;;;;;;;;;AA0JA,IAAA,2BAAe,KArIU,WAAW,SAClC,OACA,KACA;CACA,MAAM,EAAE,WAAW,WAAW,cAAc;CAC5C,MAAM,IAAI,cAAc,OAAO;CAE/B,MAAM,EACJ,UAAU,EAAE,EACZ,aAAa,EAAE,EACf,OACA,QACA,eAAe,GACf,SACA,YACA,WAAW,EAAE,iBAAiB,mBAC5B;CAEJ,MAAM,mBAAmB,KAAK,IAAI,cAAA,GAAoC;CACtE,MAAM,gBAAgB,cAAc;AAClC,SAAO,WAAW,SAAA,KAAuB;IACxC,CAAC,YAAY,iBAAiB,CAAC;CAClC,MAAM,UAAU,OAAuB,KAAK;CAC5C,MAAM,cAAc,OAAqB,KAAK;CAC9C,MAAM,EACJ,aACA,UACA,UACA,cACA,iBACA,cACA,iBACE,aAAa,SAAS,QAAQ;AAElC,qBAAoB,YAAY;EAC9B,uBAAuB,aAAqB;GAE1C,MAAM,YAAY,aAAa;AAC/B,OAAI,CAAC,UAAW;GAEhB,MAAM,EAAE,eAAe,QAAQ;GAC/B,MAAM,EAAE,MAAM,UAAU;GACxB,MAAM,iBAAiB,QAAQ,SAAS,eAAe;AACvD,OAAI,OAAO,WAET,SAAQ,SAAS,SAAS;IACxB;IACA,UAAU;IACX,CAAC;YACO,OAAO,QAAQ,aAAa,eAErC,SAAQ,SAAS,SAAS;IACxB,MAAM,OAAO,QAAQ;IACrB,UAAU;IACX,CAAC;;EAGN,uBAAuB;AACrB,eAAY,SAAS,SAAS;;EAEjC,EAAE;CAEH,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,QAAQ,QAAS,QAAO;EAC7B,MAAM,OAAO,KAAK,OACd,QAAQ,SAAS,gBAAgB,KAAK,oBAAA,GACzC;AACD,SAAO,OAAO,IAAI,IAAI,IAAI,OAAO;IAChC,CAAC,iBAAiB,CAAC;AAEtB,QACE,oBAAC,oBAAD;EACE,KAAK;EACL,OAAO;GAAE;GAAO;GAAQ,YAAY;GAAa;EACjD,wBAAwB;AAEtB,aAAU;;EAEZ,WAAW,GAAG,MAAM,WAAW,0BAA0B,EACvD,wCAAwC,eAAe,WACxD,CAAC;YAEF,qBAAC,OAAD;GACE,OAAO;IACL,QACE,eAAe,YACX,eAAA,KAA6B,mBAC7B;IACN,UAAU;IACV,OAAO;IACR;aARH;IAUE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,kBAAD;MACE,WAAU;MACV,SAAS,CAAC,CAAC;MACX,KAAK;MACL,CAAA,EACF,oBAAC,QAAD;MACgB;MACd,cAAc;MACd,SAAS;MACK;MACd,UAAU;MACG;MACb,CAAA,CACE;;IACL,eAAe,aAAa,aAAa,SAAS,KACjD,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,YAAD,EAAQ,CAAA;KACJ,CAAA;IAEP,eAAe,aACd,oBAAC,cAAD;KACE,SAAS;KACI;KACC;KACF;KACF;KACV,cAAc;KACd,CAAA;IAEH,eAAe,WACd,oBAAC,eAAD;KACY;KACV,WAAW,QAAQ,SAAS,eAAe;KAC3C,CAAA;IAEA;;EACK,CAAA;EAEf,CAEmC"}
@@ -0,0 +1,2 @@
1
+ export * from './DataPreviewTable/index.js';
2
+ export { default } from './DataPreviewTable/index.js';
@@ -1,10 +1,18 @@
1
1
  import { Dayjs } from 'dayjs';
2
2
  import { default as React } from 'react';
3
3
  import { PickerProps, RangePickerProps as RcRangePickerProps, PickerRef } from 'rc-picker';
4
- import { RangePickerRef } from 'rc-picker/es/interface';
4
+ import { PanelMode, RangePickerRef } from 'rc-picker/es/interface';
5
5
  import { SizeType } from '../ConfigProvider/sizeContext';
6
6
  export type RangeValue<T = Dayjs> = [T | null, T | null] | null;
7
- export interface DatePickerProps extends Omit<PickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls'> {
7
+ /**
8
+ * disabledDate compat: rc-picker v4 requires (date, info) => boolean,
9
+ * but antd v4 consumers pass (current) => boolean. We accept both.
10
+ */
11
+ type DisabledDateCompat = (current: Dayjs, info?: {
12
+ type: PanelMode;
13
+ from?: Dayjs;
14
+ }) => boolean;
15
+ export interface DatePickerProps extends Omit<PickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'> {
8
16
  /** Override size from ConfigProvider */
9
17
  size?: SizeType;
10
18
  /** Validation status */
@@ -13,12 +21,39 @@ export interface DatePickerProps extends Omit<PickerProps<Dayjs>, 'generateConfi
13
21
  bordered?: boolean;
14
22
  /** Custom prefixCls */
15
23
  prefixCls?: string;
24
+ /**
25
+ * Narrowed onChange — single picker uses Dayjs | null, not Dayjs | Dayjs[].
26
+ * Uses import('dayjs').Dayjs to avoid duplicate-dayjs type conflicts.
27
+ */
28
+ onChange?: (date: import('dayjs').Dayjs | null, dateString: string) => void;
29
+ /**
30
+ * disabledDate — accepts both rc-picker v4 signature and antd v4 compat
31
+ * signature `(current: Dayjs) => boolean`.
32
+ */
33
+ disabledDate?: DisabledDateCompat;
34
+ /** Callback when a date is selected on the panel */
35
+ onSelect?: (date: Dayjs) => void;
36
+ /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */
37
+ popupClassName?: string;
38
+ /** Override locale for this picker instance. Defaults to ConfigProvider locale. */
39
+ locale?: Record<string, any>;
16
40
  }
17
- export interface RangePickerProps extends Omit<RcRangePickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls'> {
41
+ export interface RangePickerProps extends Omit<RcRangePickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'> {
18
42
  size?: SizeType;
19
43
  status?: 'error' | 'warning';
20
44
  bordered?: boolean;
21
45
  prefixCls?: string;
46
+ /** Narrowed onChange for RangePicker */
47
+ onChange?: (dates: [import('dayjs').Dayjs | null, import('dayjs').Dayjs | null] | null, dateStrings: [string, string]) => void;
48
+ /**
49
+ * disabledDate — accepts both rc-picker v4 signature and antd v4 compat
50
+ * signature `(current: Dayjs) => boolean`.
51
+ */
52
+ disabledDate?: DisabledDateCompat;
53
+ /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */
54
+ popupClassName?: string;
55
+ /** Override locale for this picker instance. Defaults to ConfigProvider locale. */
56
+ locale?: Record<string, any>;
22
57
  }
23
58
  export type YearPickerProps = DatePickerProps;
24
59
  export type QuarterPickerProps = DatePickerProps;
@@ -4,7 +4,7 @@ import SizeContext from "../ConfigProvider/sizeContext.js";
4
4
  import { LocaleContext } from "../locale/default.js";
5
5
  /* empty css */
6
6
  import enUSDatePicker from "rc-picker/es/locale/en_US";
7
- import { forwardRef, useContext } from "react";
7
+ import React, { forwardRef, useContext } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  import { Picker, RangePicker } from "rc-picker";
10
10
  import dayjsGenerateConfig from "rc-picker/es/generate/dayjs";
@@ -14,35 +14,81 @@ var SIZE_CLS = {
14
14
  large: "ald-picker-lg"
15
15
  };
16
16
  var InternalDatePicker = forwardRef((props, ref) => {
17
- const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", ...restProps } = props;
17
+ const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, onSelect: _onSelect, popupClassName, locale: localeProp, ...restProps } = props;
18
18
  const ctxSize = useContext(SizeContext);
19
19
  const size = customSize || ctxSize || "middle";
20
20
  const ctxDisabled = useContext(DisabledContext);
21
21
  const mergedDisabled = customDisabled ?? ctxDisabled;
22
+ const ctxLocale = useContext(LocaleContext);
23
+ const pickerLocale = localeProp || ctxLocale?.DatePicker || enUSDatePicker;
24
+ const sizeCls = SIZE_CLS[size] || "";
25
+ const rcOnChange = React.useMemo(() => {
26
+ if (!onChange) return void 0;
27
+ return (date, dateString) => {
28
+ onChange(Array.isArray(date) ? date[0] : date, Array.isArray(dateString) ? dateString[0] : dateString);
29
+ };
30
+ }, [onChange]);
31
+ const rcDisabledDate = React.useMemo(() => {
32
+ if (!disabledDate) return void 0;
33
+ return (date, info) => disabledDate(date, info);
34
+ }, [disabledDate]);
35
+ const mergedClassNames = React.useMemo(() => {
36
+ if (!popupClassName) return restProps.classNames;
37
+ return {
38
+ ...restProps.classNames,
39
+ popup: cn(restProps.classNames?.popup, popupClassName)
40
+ };
41
+ }, [popupClassName, restProps.classNames]);
22
42
  return /* @__PURE__ */ jsx(Picker, {
23
43
  ref,
24
44
  generateConfig: dayjsGenerateConfig,
25
- locale: useContext(LocaleContext)?.DatePicker || enUSDatePicker,
45
+ locale: pickerLocale,
26
46
  prefixCls,
27
47
  disabled: mergedDisabled,
28
- className: cn(SIZE_CLS[size] || "", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
29
- ...restProps
48
+ className: cn(sizeCls, "ant-picker", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
49
+ ...restProps,
50
+ classNames: mergedClassNames,
51
+ onChange: rcOnChange,
52
+ disabledDate: rcDisabledDate
30
53
  });
31
54
  });
32
55
  var InternalRangePicker = forwardRef((props, ref) => {
33
- const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", ...restProps } = props;
56
+ const { size: customSize, disabled: customDisabled, className, status, bordered = true, prefixCls = "ald-picker", onChange, disabledDate, popupClassName, locale: localeProp, ...restProps } = props;
34
57
  const ctxSize = useContext(SizeContext);
35
58
  const size = customSize || ctxSize || "middle";
36
59
  const ctxDisabled = useContext(DisabledContext);
37
60
  const mergedDisabled = customDisabled ?? ctxDisabled;
61
+ const ctxLocale = useContext(LocaleContext);
62
+ const pickerLocale = localeProp || ctxLocale?.DatePicker || enUSDatePicker;
63
+ const sizeCls = SIZE_CLS[size] || "";
64
+ const rcOnChange = React.useMemo(() => {
65
+ if (!onChange) return void 0;
66
+ return (dates, dateStrings) => {
67
+ onChange(dates, dateStrings);
68
+ };
69
+ }, [onChange]);
70
+ const rcDisabledDate = React.useMemo(() => {
71
+ if (!disabledDate) return void 0;
72
+ return (date, info) => disabledDate(date, info);
73
+ }, [disabledDate]);
74
+ const mergedClassNames = React.useMemo(() => {
75
+ if (!popupClassName) return restProps.classNames;
76
+ return {
77
+ ...restProps.classNames,
78
+ popup: cn(restProps.classNames?.popup, popupClassName)
79
+ };
80
+ }, [popupClassName, restProps.classNames]);
38
81
  return /* @__PURE__ */ jsx(RangePicker, {
39
82
  ref,
40
83
  generateConfig: dayjsGenerateConfig,
41
- locale: useContext(LocaleContext)?.DatePicker || enUSDatePicker,
84
+ locale: pickerLocale,
42
85
  prefixCls,
43
86
  disabled: mergedDisabled,
44
- className: cn(SIZE_CLS[size] || "", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
45
- ...restProps
87
+ className: cn(sizeCls, "ant-picker", !bordered && "ald-picker-borderless", status === "error" && "ald-picker-status-error", status === "warning" && "ald-picker-status-warning", className),
88
+ ...restProps,
89
+ classNames: mergedClassNames,
90
+ onChange: rcOnChange,
91
+ disabledDate: rcDisabledDate
46
92
  });
47
93
  });
48
94
  function createPickerVariant(pickerMode, defaultPlaceholder) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/DatePicker/index.tsx"],"sourcesContent":["import type { Dayjs } from 'dayjs';\nimport React, { forwardRef, useContext } from 'react';\nimport { Picker, RangePicker as RcRangePicker } from 'rc-picker';\nimport type {\n PickerProps,\n RangePickerProps as RcRangePickerProps,\n PickerRef,\n} from 'rc-picker';\nimport type { RangePickerRef } from 'rc-picker/es/interface';\nimport dayjsGenerateConfig from 'rc-picker/es/generate/dayjs';\nimport enUS from 'rc-picker/es/locale/en_US';\nimport { LocaleContext } from '../locale/default';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext, { type SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport './date-picker.css';\n\n// ---- Types ----\n// Re-export compatible types\nexport type RangeValue<T = Dayjs> = [T | null, T | null] | null;\n\nexport interface DatePickerProps\n extends Omit<PickerProps<Dayjs>, 'generateConfig' | 'locale' | 'prefixCls'> {\n /** Override size from ConfigProvider */\n size?: SizeType;\n /** Validation status */\n status?: 'error' | 'warning';\n /** @deprecated Use `variant` or className instead */\n bordered?: boolean;\n /** Custom prefixCls */\n prefixCls?: string;\n}\n\nexport interface RangePickerProps\n extends Omit<\n RcRangePickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls'\n > {\n size?: SizeType;\n status?: 'error' | 'warning';\n bordered?: boolean;\n prefixCls?: string;\n}\n\nexport type YearPickerProps = DatePickerProps;\nexport type QuarterPickerProps = DatePickerProps;\nexport type MonthPickerProps = DatePickerProps;\nexport type WeekPickerProps = DatePickerProps;\nexport type TimePickerProps = DatePickerProps;\n\n// ---- Size mapping ----\nconst SIZE_CLS: Record<string, string> = {\n small: 'ald-picker-sm',\n large: 'ald-picker-lg',\n};\n\n// ---- DatePicker ----\nconst InternalDatePicker = forwardRef<PickerRef, DatePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n // antd locale 对象包含 DatePicker 字段(即 rc-picker 格式的 locale)\n const pickerLocale = ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n return (\n <Picker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n />\n );\n },\n) as React.ForwardRefExoticComponent<\n DatePickerProps & React.RefAttributes<PickerRef>\n> & {\n RangePicker: typeof InternalRangePicker;\n WeekPicker: typeof WeekPicker;\n MonthPicker: typeof MonthPicker;\n YearPicker: typeof YearPicker;\n TimePicker: typeof TimePicker;\n QuarterPicker: typeof QuarterPicker;\n};\n\n// ---- RangePicker ----\nconst InternalRangePicker = forwardRef<RangePickerRef, RangePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n const pickerLocale = ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n return (\n <RcRangePicker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n />\n );\n },\n);\n\n// ---- Picker variants ----\nfunction createPickerVariant(\n pickerMode: DatePickerProps['picker'],\n defaultPlaceholder: string,\n) {\n const PickerVariant = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker={pickerMode}\n placeholder={props.placeholder ?? defaultPlaceholder}\n {...props}\n />\n ));\n PickerVariant.displayName = `DatePicker.${pickerMode}Picker`;\n return PickerVariant;\n}\n\nconst WeekPicker = createPickerVariant('week', 'Select week');\nconst MonthPicker = createPickerVariant('month', 'Select month');\nconst YearPicker = createPickerVariant('year', 'Select year');\nconst QuarterPicker = createPickerVariant('quarter', 'Select quarter');\n\nconst TimePicker = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker=\"time\"\n placeholder={props.placeholder ?? 'Select time'}\n {...props}\n />\n));\nTimePicker.displayName = 'DatePicker.TimePicker';\n\n// ---- Attach sub-components ----\nInternalDatePicker.RangePicker = InternalRangePicker;\nInternalDatePicker.WeekPicker = WeekPicker;\nInternalDatePicker.MonthPicker = MonthPicker;\nInternalDatePicker.YearPicker = YearPicker;\nInternalDatePicker.TimePicker = TimePicker;\nInternalDatePicker.QuarterPicker = QuarterPicker;\n\nconst DatePicker = InternalDatePicker;\nexport default DatePicker;\n"],"mappings":";;;;;;;;;;;AAmDA,IAAM,WAAmC;CACvC,OAAO;CACP,OAAO;CACR;AAGD,IAAM,qBAAqB,YACxB,OAAO,QAAQ;CACd,MAAM,EACJ,MAAM,YACN,UAAU,gBACV,WACA,QACA,WAAW,MACX,YAAY,cACZ,GAAG,cACD;CAEJ,MAAM,UAAU,WAAW,YAAY;CACvC,MAAM,OAAO,cAAc,WAAW;CACtC,MAAM,cAAc,WAAW,gBAAgB;CAC/C,MAAM,iBAAiB,kBAAkB;AAOzC,QACE,oBAAC,QAAD;EACO;EACL,gBAAgB;EAChB,QAVc,WAAW,cAAc,EAEX,cAAc;EAS/B;EACX,UAAU;EACV,WAAW,GATC,SAAS,SAAS,IAW5B,CAAC,YAAY,yBACb,WAAW,WAAW,2BACtB,WAAW,aAAa,6BACxB,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AAYD,IAAM,sBAAsB,YACzB,OAAO,QAAQ;CACd,MAAM,EACJ,MAAM,YACN,UAAU,gBACV,WACA,QACA,WAAW,MACX,YAAY,cACZ,GAAG,cACD;CAEJ,MAAM,UAAU,WAAW,YAAY;CACvC,MAAM,OAAO,cAAc,WAAW;CACtC,MAAM,cAAc,WAAW,gBAAgB;CAC/C,MAAM,iBAAiB,kBAAkB;AAMzC,QACE,oBAAC,aAAD;EACO;EACL,gBAAgB;EAChB,QATc,WAAW,cAAc,EACX,cAAc;EAS/B;EACX,UAAU;EACV,WAAW,GATC,SAAS,SAAS,IAW5B,CAAC,YAAY,yBACb,WAAW,WAAW,2BACtB,WAAW,aAAa,6BACxB,UACD;EACD,GAAI;EACJ,CAAA;EAGP;AAGD,SAAS,oBACP,YACA,oBACA;CACA,MAAM,gBAAgB,YAAwC,OAAO,QACnE,oBAAC,oBAAD;EACO;EACL,QAAQ;EACR,aAAa,MAAM,eAAe;EAClC,GAAI;EACJ,CAAA,CACF;AACF,eAAc,cAAc,cAAc,WAAW;AACrD,QAAO;;AAGT,IAAM,aAAa,oBAAoB,QAAQ,cAAc;AAC7D,IAAM,cAAc,oBAAoB,SAAS,eAAe;AAChE,IAAM,aAAa,oBAAoB,QAAQ,cAAc;AAC7D,IAAM,gBAAgB,oBAAoB,WAAW,iBAAiB;AAEtE,IAAM,aAAa,YAAwC,OAAO,QAChE,oBAAC,oBAAD;CACO;CACL,QAAO;CACP,aAAa,MAAM,eAAe;CAClC,GAAI;CACJ,CAAA,CACF;AACF,WAAW,cAAc;AAGzB,mBAAmB,cAAc;AACjC,mBAAmB,aAAa;AAChC,mBAAmB,cAAc;AACjC,mBAAmB,aAAa;AAChC,mBAAmB,aAAa;AAChC,mBAAmB,gBAAgB;AAEnC,IAAM,aAAa"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/DatePicker/index.tsx"],"sourcesContent":["import type { Dayjs } from 'dayjs';\nimport React, { forwardRef, useContext } from 'react';\nimport { Picker, RangePicker as RcRangePicker } from 'rc-picker';\nimport type {\n PickerProps,\n RangePickerProps as RcRangePickerProps,\n PickerRef,\n} from 'rc-picker';\nimport type { PanelMode, RangePickerRef } from 'rc-picker/es/interface';\nimport dayjsGenerateConfig from 'rc-picker/es/generate/dayjs';\nimport enUS from 'rc-picker/es/locale/en_US';\nimport { LocaleContext } from '../locale/default';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport SizeContext, { type SizeType } from '../ConfigProvider/sizeContext';\nimport { cn } from '../lib/utils';\nimport './date-picker.css';\n\n// ---- Types ----\n// Re-export compatible types\nexport type RangeValue<T = Dayjs> = [T | null, T | null] | null;\n\n/**\n * disabledDate compat: rc-picker v4 requires (date, info) => boolean,\n * but antd v4 consumers pass (current) => boolean. We accept both.\n */\ntype DisabledDateCompat = (\n current: Dayjs,\n info?: { type: PanelMode; from?: Dayjs },\n) => boolean;\n\nexport interface DatePickerProps\n extends Omit<\n PickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n /** Override size from ConfigProvider */\n size?: SizeType;\n /** Validation status */\n status?: 'error' | 'warning';\n /** @deprecated Use `variant` or className instead */\n bordered?: boolean;\n /** Custom prefixCls */\n prefixCls?: string;\n /**\n * Narrowed onChange — single picker uses Dayjs | null, not Dayjs | Dayjs[].\n * Uses import('dayjs').Dayjs to avoid duplicate-dayjs type conflicts.\n */\n onChange?: (date: import('dayjs').Dayjs | null, dateString: string) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** Callback when a date is selected on the panel */\n onSelect?: (date: Dayjs) => void;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n /** Override locale for this picker instance. Defaults to ConfigProvider locale. */\n locale?: Record<string, any>;\n}\n\nexport interface RangePickerProps\n extends Omit<\n RcRangePickerProps<Dayjs>,\n 'generateConfig' | 'locale' | 'prefixCls' | 'onChange' | 'disabledDate'\n > {\n size?: SizeType;\n status?: 'error' | 'warning';\n bordered?: boolean;\n prefixCls?: string;\n /** Narrowed onChange for RangePicker */\n onChange?: (\n dates: [import('dayjs').Dayjs | null, import('dayjs').Dayjs | null] | null,\n dateStrings: [string, string],\n ) => void;\n /**\n * disabledDate — accepts both rc-picker v4 signature and antd v4 compat\n * signature `(current: Dayjs) => boolean`.\n */\n disabledDate?: DisabledDateCompat;\n /** @deprecated Use `classNames.popup` instead. Preserved for antd v4 compat. */\n popupClassName?: string;\n /** Override locale for this picker instance. Defaults to ConfigProvider locale. */\n locale?: Record<string, any>;\n}\n\nexport type YearPickerProps = DatePickerProps;\nexport type QuarterPickerProps = DatePickerProps;\nexport type MonthPickerProps = DatePickerProps;\nexport type WeekPickerProps = DatePickerProps;\nexport type TimePickerProps = DatePickerProps;\n\n// ---- Size mapping ----\nconst SIZE_CLS: Record<string, string> = {\n small: 'ald-picker-sm',\n large: 'ald-picker-lg',\n};\n\n// ---- DatePicker ----\nconst InternalDatePicker = forwardRef<PickerRef, DatePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n onSelect: _onSelect, // exclude from restProps\n popupClassName,\n locale: localeProp,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n // antd locale 对象包含 DatePicker 字段(即 rc-picker 格式的 locale)\n const pickerLocale = localeProp || ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (date: Dayjs | Dayjs[], dateString: string | string[]) => {\n onChange(\n (Array.isArray(date) ? date[0] : date) as Dayjs | null,\n Array.isArray(dateString) ? dateString[0] : dateString,\n );\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <Picker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-picker',\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n) as React.ForwardRefExoticComponent<\n DatePickerProps & React.RefAttributes<PickerRef>\n> & {\n RangePicker: typeof InternalRangePicker;\n WeekPicker: typeof WeekPicker;\n MonthPicker: typeof MonthPicker;\n YearPicker: typeof YearPicker;\n TimePicker: typeof TimePicker;\n QuarterPicker: typeof QuarterPicker;\n};\n\n// ---- RangePicker ----\nconst InternalRangePicker = forwardRef<RangePickerRef, RangePickerProps>(\n (props, ref) => {\n const {\n size: customSize,\n disabled: customDisabled,\n className,\n status,\n bordered = true,\n prefixCls = 'ald-picker',\n onChange,\n disabledDate,\n popupClassName,\n locale: localeProp,\n ...restProps\n } = props;\n\n const ctxSize = useContext(SizeContext);\n const size = customSize || ctxSize || 'middle';\n const ctxDisabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? ctxDisabled;\n const ctxLocale = useContext(LocaleContext);\n const pickerLocale = localeProp || ctxLocale?.DatePicker || enUS;\n\n const sizeCls = SIZE_CLS[size] || '';\n\n // Wrap narrowed onChange to match rc-picker's wider signature\n const rcOnChange = React.useMemo(() => {\n if (!onChange) return undefined;\n return (\n dates: [Dayjs | null, Dayjs | null] | null,\n dateStrings: [string, string],\n ) => {\n onChange(dates, dateStrings);\n };\n }, [onChange]);\n\n // Wrap compat disabledDate to rc-picker v4 signature\n const rcDisabledDate = React.useMemo(() => {\n if (!disabledDate) return undefined;\n return (date: Dayjs, info: { type: PanelMode; from?: Dayjs }) =>\n disabledDate(date, info);\n }, [disabledDate]);\n\n // Merge popupClassName into classNames.popup for rc-picker v4\n const mergedClassNames = React.useMemo(() => {\n if (!popupClassName) return restProps.classNames;\n return {\n ...restProps.classNames,\n popup: cn(restProps.classNames?.popup, popupClassName),\n };\n }, [popupClassName, restProps.classNames]);\n\n return (\n <RcRangePicker<Dayjs>\n ref={ref}\n generateConfig={dayjsGenerateConfig}\n locale={pickerLocale}\n prefixCls={prefixCls}\n disabled={mergedDisabled}\n className={cn(\n sizeCls,\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ant-picker',\n !bordered && 'ald-picker-borderless',\n status === 'error' && 'ald-picker-status-error',\n status === 'warning' && 'ald-picker-status-warning',\n className,\n )}\n {...restProps}\n classNames={mergedClassNames}\n onChange={rcOnChange}\n disabledDate={rcDisabledDate}\n />\n );\n },\n);\n\n// ---- Picker variants ----\nfunction createPickerVariant(\n pickerMode: DatePickerProps['picker'],\n defaultPlaceholder: string,\n) {\n const PickerVariant = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker={pickerMode}\n placeholder={props.placeholder ?? defaultPlaceholder}\n {...props}\n />\n ));\n PickerVariant.displayName = `DatePicker.${pickerMode}Picker`;\n return PickerVariant;\n}\n\nconst WeekPicker = createPickerVariant('week', 'Select week');\nconst MonthPicker = createPickerVariant('month', 'Select month');\nconst YearPicker = createPickerVariant('year', 'Select year');\nconst QuarterPicker = createPickerVariant('quarter', 'Select quarter');\n\nconst TimePicker = forwardRef<PickerRef, DatePickerProps>((props, ref) => (\n <InternalDatePicker\n ref={ref}\n picker=\"time\"\n placeholder={props.placeholder ?? 'Select time'}\n {...props}\n />\n));\nTimePicker.displayName = 'DatePicker.TimePicker';\n\n// ---- Attach sub-components ----\nInternalDatePicker.RangePicker = InternalRangePicker;\nInternalDatePicker.WeekPicker = WeekPicker;\nInternalDatePicker.MonthPicker = MonthPicker;\nInternalDatePicker.YearPicker = YearPicker;\nInternalDatePicker.TimePicker = TimePicker;\nInternalDatePicker.QuarterPicker = QuarterPicker;\n\nconst DatePicker = InternalDatePicker;\nexport default DatePicker;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './DatePicker/index.js';
2
+ export { default } from './DatePicker/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './Divider/index.js';
2
+ export { default } from './Divider/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './DoubleCircleIcon/index.js';
2
+ export { default } from './DoubleCircleIcon/index.js';
@@ -3,6 +3,7 @@ export interface DrawerProps {
3
3
  open?: boolean;
4
4
  onClose?: (e?: React.MouseEvent | React.KeyboardEvent) => void;
5
5
  title?: React.ReactNode;
6
+ description?: React.ReactNode;
6
7
  placement?: 'top' | 'right' | 'bottom' | 'left';
7
8
  width?: number | string;
8
9
  height?: number | string;
@@ -16,6 +17,7 @@ export interface DrawerProps {
16
17
  contentWrapperStyle?: React.CSSProperties;
17
18
  bodyStyle?: React.CSSProperties;
18
19
  headerStyle?: React.CSSProperties;
20
+ maskStyle?: React.CSSProperties;
19
21
  footer?: React.ReactNode;
20
22
  footerStyle?: React.CSSProperties;
21
23
  extra?: React.ReactNode;