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

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 +21 -7
  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
@@ -38,6 +38,7 @@ export interface ITabsProps {
38
38
  style?: React.CSSProperties;
39
39
  popupClassName?: string;
40
40
  tabBarGutter?: number;
41
+ moreIcon?: React.ReactNode;
41
42
  }
42
43
  declare function Tabs(props: ITabsProps): import("react/jsx-runtime").JSX.Element;
43
44
  declare namespace Tabs {
@@ -23,7 +23,8 @@ function Tabs(props) {
23
23
  }, [items, children]);
24
24
  const firstKey = resolvedItems[0]?.key || "";
25
25
  const [innerActiveKey, setInnerActiveKey] = useState(defaultActiveKey || firstKey);
26
- const activeKey = controlledActiveKey !== void 0 ? controlledActiveKey : innerActiveKey;
26
+ const mergedActiveKey = controlledActiveKey !== void 0 ? controlledActiveKey : innerActiveKey;
27
+ const activeKey = resolvedItems.some((item) => item.key === mergedActiveKey) ? mergedActiveKey : firstKey;
27
28
  const handleTabClick = (key, e) => {
28
29
  if (controlledActiveKey === void 0) setInnerActiveKey(key);
29
30
  onChange?.(key);
@@ -84,14 +85,14 @@ function Tabs(props) {
84
85
  };
85
86
  const showScrollButtons = canScrollLeft || canScrollRight;
86
87
  return /* @__PURE__ */ jsxs("div", {
87
- className: cn("ald-tabs tw-flex", isVertical ? "tw-flex-row" : "tw-flex-col", adaptHeight && "ald-adapt-height tw-h-full", size !== "small" && "ald-tabs-default", monospace && "ald-tabs-monospace", compact && "ald-tabs-compact", !hasDividing && "ald-tabs-no-dividing", className),
88
+ className: cn("ald-tabs ant-tabs tw-flex", isVertical ? "tw-flex-row" : "tw-flex-col", adaptHeight && "ald-adapt-height tw-h-full", size !== "small" && "ald-tabs-default", monospace && "ald-tabs-monospace", compact && "ald-tabs-compact", !hasDividing && "ald-tabs-no-dividing", className),
88
89
  style: {
89
90
  ...style,
90
91
  "--header-bg-color": headerBackgroundColor,
91
92
  "--tabs-padding": `${paddingVal}px`
92
93
  },
93
94
  children: [/* @__PURE__ */ jsxs("div", {
94
- className: cn("ald-tabs-nav tw-flex tw-items-center", !isVertical && hasDividing && "tw-mb-5 tw-border-0 tw-border-b tw-border-solid tw-border-b-[var(--global-cool-grey-100)]", !isVertical && compact && "!tw-mb-0", isVertical && "tw-flex-col tw-border-0 tw-border-r tw-border-solid tw-border-r-[var(--global-cool-grey-100)]", paddingVal && `tw-px-[${paddingVal}px]`),
95
+ className: cn("ald-tabs-nav ant-tabs-nav tw-flex tw-items-center", !isVertical && hasDividing && "tw-mb-5 tw-border-0 tw-border-b tw-border-solid tw-border-b-[var(--global-cool-grey-100)]", !isVertical && compact && "!tw-mb-0", isVertical && "tw-flex-col tw-border-0 tw-border-r tw-border-solid tw-border-r-[var(--global-cool-grey-100)]", paddingVal && `tw-px-[${paddingVal}px]`),
95
96
  style: headerBackgroundColor ? { backgroundColor: headerBackgroundColor } : void 0,
96
97
  children: [
97
98
  extraLeft,
@@ -103,31 +104,37 @@ function Tabs(props) {
103
104
  children: /* @__PURE__ */ jsx(Memo, { size: 16 })
104
105
  }),
105
106
  /* @__PURE__ */ jsx("div", {
106
- ref: navListRef,
107
- className: cn("ald-tabs-nav-list tw-flex tw-flex-1 tw-overflow-hidden", isVertical && "tw-flex-col", monospace && "[&>*]:tw-flex-1", isCard ? "tw-gap-1" : !monospace && "tw-gap-8"),
108
- style: !isVertical ? {
109
- scrollbarWidth: "none",
110
- msOverflowStyle: "none"
111
- } : void 0,
112
- children: resolvedItems.map((item) => {
113
- const isActive = activeKey === item.key;
114
- const showClose = isEditable && item.closable !== false;
115
- return /* @__PURE__ */ jsxs("div", {
116
- className: cn("ald-tabs-tab tw-relative tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-gap-2 tw-whitespace-nowrap tw-transition-colors", isCard ? cn("tw-h-10 tw-rounded-t-[6px] tw-border tw-border-b-0 tw-border-solid tw-px-4 tw-text-sm tw-leading-5", "tw-gap-sp-75", isActive ? "tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--background-default)] tw-font-medium tw-text-[var(--alias-colors-text-selected)]" : "tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtler)] tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit") : cn(size === "small" ? "tw-py-2 tw-text-xs tw-leading-4" : "tw-py-2.5 tw-text-sm tw-leading-5", monospace && "tw-justify-center", isActive ? "tw-font-medium tw-text-[var(--alias-colors-text-selected)]" : "tw-font-medium tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit"), item.disabled && "tw-pointer-events-none tw-cursor-default tw-opacity-50"),
117
- onClick: item.disabled ? void 0 : (e) => handleTabClick(item.key, e),
118
- children: [
119
- item.icon,
120
- /* @__PURE__ */ jsx("span", { children: item.label }),
121
- showClose && /* @__PURE__ */ jsx("span", {
122
- className: "ald-tabs-tab-remove tw-m-0 tw-grid tw-size-4 tw-cursor-pointer tw-place-items-center tw-p-0 tw-text-[var(--alias-colors-icon-subtle)] tw-transition-colors hover:tw-text-[var(--alias-colors-text-default)]",
123
- onClick: (e) => handleRemove(item.key, e),
124
- "aria-label": `Remove ${item.label}`,
125
- children: /* @__PURE__ */ jsx(Memo$2, { size: 12 })
126
- }),
127
- !isCard && isActive && !isVertical && /* @__PURE__ */ jsx("div", { className: "tw-absolute tw-inset-x-0 tw--bottom-px tw-h-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]" }),
128
- !isCard && isActive && isVertical && /* @__PURE__ */ jsx("div", { className: "tw-absolute tw-inset-y-0 tw--right-px tw-w-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]" })
129
- ]
130
- }, item.key);
107
+ className: "ald-tabs-nav-wrap ant-tabs-nav-wrap tw-min-w-0 tw-flex-1",
108
+ children: /* @__PURE__ */ jsx("div", {
109
+ ref: navListRef,
110
+ className: cn("ald-tabs-nav-list ant-tabs-nav-list tw-flex tw-overflow-hidden", isVertical && "tw-flex-col", monospace && "[&>*]:tw-flex-1", isCard ? "tw-gap-1" : !monospace && "tw-gap-8"),
111
+ style: !isVertical ? {
112
+ scrollbarWidth: "none",
113
+ msOverflowStyle: "none"
114
+ } : void 0,
115
+ children: resolvedItems.map((item) => {
116
+ const isActive = activeKey === item.key;
117
+ const showClose = isEditable && item.closable !== false;
118
+ return /* @__PURE__ */ jsxs("div", {
119
+ className: cn("ald-tabs-tab ant-tabs-tab tw-relative tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-gap-2 tw-whitespace-nowrap tw-transition-colors", isCard ? cn("tw-h-10 tw-rounded-t-[6px] tw-border tw-border-b-0 tw-border-solid tw-px-4 tw-text-sm tw-leading-5", "tw-gap-sp-75", isActive ? "tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--background-default)] tw-font-medium tw-text-[var(--alias-colors-text-selected)]" : "tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtler)] tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit") : cn(size === "small" ? "tw-py-2 tw-text-xs tw-leading-4" : "tw-py-2.5 tw-text-sm tw-leading-5", monospace && "tw-justify-center", isActive ? "tw-font-medium tw-text-[var(--alias-colors-text-selected)]" : "tw-font-medium tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit"), item.disabled && "tw-pointer-events-none tw-cursor-default tw-opacity-50"),
120
+ onClick: item.disabled ? void 0 : (e) => handleTabClick(item.key, e),
121
+ children: [
122
+ item.icon,
123
+ /* @__PURE__ */ jsx("span", {
124
+ className: "ant-tabs-tab-btn",
125
+ children: item.label
126
+ }),
127
+ showClose && /* @__PURE__ */ jsx("span", {
128
+ className: "ald-tabs-tab-remove tw-m-0 tw-grid tw-size-4 tw-cursor-pointer tw-place-items-center tw-p-0 tw-text-[var(--alias-colors-icon-subtle)] tw-transition-colors hover:tw-text-[var(--alias-colors-text-default)]",
129
+ onClick: (e) => handleRemove(item.key, e),
130
+ "aria-label": `Remove ${item.label}`,
131
+ children: /* @__PURE__ */ jsx(Memo$2, { size: 12 })
132
+ }),
133
+ !isCard && isActive && !isVertical && /* @__PURE__ */ jsx("div", { className: "ant-tabs-ink-bar tw-absolute tw-inset-x-0 tw--bottom-px tw-h-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]" }),
134
+ !isCard && isActive && isVertical && /* @__PURE__ */ jsx("div", { className: "tw-absolute tw-inset-y-0 tw--right-px tw-w-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]" })
135
+ ]
136
+ }, item.key);
137
+ })
131
138
  })
132
139
  }),
133
140
  showScrollButtons && !isVertical && /* @__PURE__ */ jsx("button", {
@@ -168,12 +175,12 @@ function Tabs(props) {
168
175
  extraRight
169
176
  ]
170
177
  }), /* @__PURE__ */ jsx("div", {
171
- className: "ald-tabs-content tw-min-h-0 tw-flex-1",
178
+ className: cn("ald-tabs-content ant-tabs-content ant-tabs-content-holder tw-min-h-0 tw-flex-1", adaptHeight && "tw-h-full"),
172
179
  children: resolvedItems.map((item) => {
173
180
  const isActive = item.key === activeKey;
174
181
  if (!isActive && destroyInactiveTabPane && !item.forceRender) return null;
175
182
  return /* @__PURE__ */ jsx("div", {
176
- className: cn("ald-tabs-tabpane", isActive ? "tw-block" : "tw-hidden"),
183
+ className: cn("ald-tabs-tabpane ant-tabs-tabpane", adaptHeight && "tw-h-full tw-overflow-y-auto", isActive ? "ant-tabs-tabpane-active tw-block" : "tw-hidden"),
177
184
  role: "tabpanel",
178
185
  children: item.children
179
186
  }, item.key);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tabs/index.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../lib/utils';\nimport { ChevronLeftLine, ChevronRightLine, CloseLightLine } from '../Icon';\nimport TabPane from './TabPane';\n\nexport type TabsSize = 'default' | 'small';\n\ninterface TabItem {\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n closable?: boolean;\n icon?: React.ReactNode;\n forceRender?: boolean;\n className?: string;\n}\n\nexport interface ITabsProps {\n size?: TabsSize;\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (activeKey: string) => void;\n onTabClick?: (activeKey: string, e: React.MouseEvent) => void;\n destroyInactiveTabPane?: boolean;\n centered?: boolean;\n adaptHeight?: boolean;\n tabPosition?: 'left' | 'right' | 'top' | 'bottom';\n className?: string;\n children?: React.ReactNode;\n headerBackgroundColor?: string;\n monospace?: boolean;\n padding?: boolean | number;\n compact?: boolean;\n hasDividing?: boolean;\n items?: TabItem[];\n type?: 'line' | 'card' | 'editable-card';\n tabBarExtraContent?:\n | React.ReactNode\n | { left?: React.ReactNode; right?: React.ReactNode };\n onEdit?: (\n targetKey: string | React.MouseEvent | React.KeyboardEvent,\n action: 'add' | 'remove',\n ) => void;\n hideAdd?: boolean;\n style?: React.CSSProperties;\n popupClassName?: string;\n tabBarGutter?: number;\n}\n\nexport default function Tabs(props: ITabsProps) {\n const {\n size,\n className,\n adaptHeight,\n style = {},\n monospace: propsMonospace,\n tabPosition = 'top',\n padding: propsPadding = false,\n compact,\n hasDividing = true,\n items,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n onChange,\n onTabClick,\n destroyInactiveTabPane,\n tabBarExtraContent,\n headerBackgroundColor,\n children,\n type,\n onEdit,\n hideAdd,\n } = props;\n\n const isEditable = type === 'editable-card';\n const isCard = type === 'card' || type === 'editable-card';\n\n // Derive items from children if not provided\n const resolvedItems: TabItem[] = useMemo(() => {\n if (items) return items;\n return React.Children.toArray(children)\n .filter(React.isValidElement)\n .map((child: any) => ({\n key: child.key || child.props.key || '',\n label: child.props.tab,\n children: child.props.children,\n disabled: child.props.disabled,\n closable: child.props.closable,\n forceRender: child.props.forceRender,\n }));\n }, [items, children]);\n\n const firstKey = resolvedItems[0]?.key || '';\n const [innerActiveKey, setInnerActiveKey] = useState(\n defaultActiveKey || firstKey,\n );\n const activeKey =\n controlledActiveKey !== undefined ? controlledActiveKey : innerActiveKey;\n\n const handleTabClick = (key: string, e: React.MouseEvent) => {\n if (controlledActiveKey === undefined) {\n setInnerActiveKey(key);\n }\n onChange?.(key);\n onTabClick?.(key, e);\n };\n\n const handleRemove = (key: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(key, 'remove');\n };\n\n const handleAdd = (e: React.MouseEvent) => {\n onEdit?.(e, 'add');\n };\n\n const monospace = tabPosition !== 'top' ? false : propsMonospace;\n const paddingVal = useMemo(() => {\n if (tabPosition !== 'top') return 0;\n if (typeof propsPadding === 'number') return propsPadding;\n if (typeof propsPadding === 'boolean' && propsPadding) return 20;\n return 0;\n }, [propsPadding, tabPosition]);\n\n const isVertical = tabPosition === 'left' || tabPosition === 'right';\n\n const extraLeft =\n tabBarExtraContent &&\n typeof tabBarExtraContent === 'object' &&\n 'left' in tabBarExtraContent\n ? tabBarExtraContent.left\n : null;\n const extraRight = tabBarExtraContent\n ? typeof tabBarExtraContent === 'object' && 'right' in tabBarExtraContent\n ? tabBarExtraContent.right\n : React.isValidElement(tabBarExtraContent)\n ? tabBarExtraContent\n : null\n : null;\n\n // Scroll state for overflow\n const navListRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const checkScroll = useCallback(() => {\n const el = navListRef.current;\n if (!el || isVertical) {\n setCanScrollLeft(false);\n setCanScrollRight(false);\n return;\n }\n const { scrollLeft, scrollWidth, clientWidth } = el;\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n }, [isVertical]);\n\n useEffect(() => {\n checkScroll();\n const el = navListRef.current;\n if (!el) return;\n // Use ResizeObserver to detect size changes\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => checkScroll());\n ro.observe(el);\n }\n el.addEventListener('scroll', checkScroll, { passive: true });\n return () => {\n el.removeEventListener('scroll', checkScroll);\n ro?.disconnect();\n };\n }, [checkScroll, resolvedItems.length]);\n\n const scrollBy = (delta: number) => {\n const el = navListRef.current;\n if (el) {\n el.scrollBy({ left: delta, behavior: 'smooth' });\n }\n };\n\n const showScrollButtons = canScrollLeft || canScrollRight;\n\n return (\n <div\n className={cn(\n 'ald-tabs tw-flex',\n isVertical ? 'tw-flex-row' : 'tw-flex-col',\n adaptHeight && 'ald-adapt-height tw-h-full',\n size !== 'small' && 'ald-tabs-default',\n monospace && 'ald-tabs-monospace',\n compact && 'ald-tabs-compact',\n !hasDividing && 'ald-tabs-no-dividing',\n className,\n )}\n style={\n {\n ...style,\n '--header-bg-color': headerBackgroundColor,\n '--tabs-padding': `${paddingVal}px`,\n } as React.CSSProperties\n }\n >\n {/* Tab nav */}\n <div\n className={cn(\n 'ald-tabs-nav tw-flex tw-items-center',\n !isVertical &&\n hasDividing &&\n 'tw-mb-5 tw-border-0 tw-border-b tw-border-solid tw-border-b-[var(--global-cool-grey-100)]',\n !isVertical && compact && '!tw-mb-0',\n isVertical &&\n 'tw-flex-col tw-border-0 tw-border-r tw-border-solid tw-border-r-[var(--global-cool-grey-100)]',\n paddingVal && `tw-px-[${paddingVal}px]`,\n )}\n style={\n headerBackgroundColor\n ? { backgroundColor: headerBackgroundColor }\n : undefined\n }\n >\n {extraLeft}\n\n {/* Scroll left button */}\n {showScrollButtons && !isVertical && (\n <button\n type=\"button\"\n className={cn(\n 'ald-tabs-scroll-btn tw-flex tw-shrink-0 tw-items-center tw-justify-center tw-border-none tw-bg-transparent tw-p-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]',\n !canScrollLeft && 'tw-invisible',\n )}\n onClick={() => scrollBy(-200)}\n aria-label=\"Scroll tabs left\"\n >\n <ChevronLeftLine size={16} />\n </button>\n )}\n\n <div\n ref={navListRef}\n className={cn(\n 'ald-tabs-nav-list tw-flex tw-flex-1 tw-overflow-hidden',\n isVertical && 'tw-flex-col',\n monospace && '[&>*]:tw-flex-1',\n isCard ? 'tw-gap-1' : !monospace && 'tw-gap-8',\n )}\n style={\n !isVertical\n ? { scrollbarWidth: 'none', msOverflowStyle: 'none' }\n : undefined\n }\n >\n {resolvedItems.map((item) => {\n const isActive = activeKey === item.key;\n // For editable-card, closable defaults to true unless explicitly set to false\n const showClose = isEditable && item.closable !== false;\n\n return (\n <div\n key={item.key}\n className={cn(\n 'ald-tabs-tab tw-relative tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-gap-2 tw-whitespace-nowrap tw-transition-colors',\n // Card / editable-card styling\n isCard\n ? cn(\n 'tw-h-10 tw-rounded-t-[6px] tw-border tw-border-b-0 tw-border-solid tw-px-4 tw-text-sm tw-leading-5',\n 'tw-gap-sp-75',\n isActive\n ? 'tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--background-default)] tw-font-medium tw-text-[var(--alias-colors-text-selected)]'\n : 'tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtler)] tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit',\n )\n : cn(\n size === 'small'\n ? 'tw-py-2 tw-text-xs tw-leading-4'\n : 'tw-py-2.5 tw-text-sm tw-leading-5',\n monospace && 'tw-justify-center',\n isActive\n ? 'tw-font-medium tw-text-[var(--alias-colors-text-selected)]'\n : 'tw-font-medium tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit',\n ),\n item.disabled &&\n 'tw-pointer-events-none tw-cursor-default tw-opacity-50',\n )}\n onClick={\n item.disabled ? undefined : (e) => handleTabClick(item.key, e)\n }\n >\n {item.icon}\n <span>{item.label}</span>\n {/* Close button for editable-card */}\n {showClose && (\n <span\n className=\"ald-tabs-tab-remove tw-m-0 tw-grid tw-size-4 tw-cursor-pointer tw-place-items-center tw-p-0 tw-text-[var(--alias-colors-icon-subtle)] tw-transition-colors hover:tw-text-[var(--alias-colors-text-default)]\"\n onClick={(e) => handleRemove(item.key, e)}\n aria-label={`Remove ${item.label}`}\n >\n <CloseLightLine size={12} />\n </span>\n )}\n {/* Active indicator for non-card line tabs */}\n {!isCard && isActive && !isVertical && (\n <div className=\"tw-absolute tw-inset-x-0 tw--bottom-px tw-h-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]\" />\n )}\n {!isCard && isActive && isVertical && (\n <div className=\"tw-absolute tw-inset-y-0 tw--right-px tw-w-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]\" />\n )}\n </div>\n );\n })}\n </div>\n\n {/* Scroll right button */}\n {showScrollButtons && !isVertical && (\n <button\n type=\"button\"\n className={cn(\n 'ald-tabs-scroll-btn tw-flex tw-shrink-0 tw-items-center tw-justify-center tw-border-none tw-bg-transparent tw-p-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]',\n !canScrollRight && 'tw-invisible',\n )}\n onClick={() => scrollBy(200)}\n aria-label=\"Scroll tabs right\"\n >\n <ChevronRightLine size={16} />\n </button>\n )}\n\n {/* Add button for editable-card */}\n {isEditable && !hideAdd && (\n <button\n type=\"button\"\n className=\"ald-tabs-nav-add tw-ml-1 tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-justify-center tw-rounded tw-border tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-default)] tw-px-2 tw-py-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]\"\n onClick={handleAdd}\n aria-label=\"Add tab\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/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 <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </button>\n )}\n\n {extraRight}\n </div>\n\n {/* Tab content */}\n <div className=\"ald-tabs-content tw-min-h-0 tw-flex-1\">\n {resolvedItems.map((item) => {\n const isActive = item.key === activeKey;\n if (!isActive && destroyInactiveTabPane && !item.forceRender) {\n return null;\n }\n return (\n <div\n key={item.key}\n className={cn(\n 'ald-tabs-tabpane',\n isActive ? 'tw-block' : 'tw-hidden',\n )}\n role=\"tabpanel\"\n >\n {item.children}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nTabs.TabPane = TabPane;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tabs/index.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../lib/utils';\nimport { ChevronLeftLine, ChevronRightLine, CloseLightLine } from '../Icon';\nimport TabPane from './TabPane';\n\nexport type TabsSize = 'default' | 'small';\n\ninterface TabItem {\n key: string;\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n closable?: boolean;\n icon?: React.ReactNode;\n forceRender?: boolean;\n className?: string;\n}\n\nexport interface ITabsProps {\n size?: TabsSize;\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (activeKey: string) => void;\n onTabClick?: (activeKey: string, e: React.MouseEvent) => void;\n destroyInactiveTabPane?: boolean;\n centered?: boolean;\n adaptHeight?: boolean;\n tabPosition?: 'left' | 'right' | 'top' | 'bottom';\n className?: string;\n children?: React.ReactNode;\n headerBackgroundColor?: string;\n monospace?: boolean;\n padding?: boolean | number;\n compact?: boolean;\n hasDividing?: boolean;\n items?: TabItem[];\n type?: 'line' | 'card' | 'editable-card';\n tabBarExtraContent?:\n | React.ReactNode\n | { left?: React.ReactNode; right?: React.ReactNode };\n onEdit?: (\n targetKey: string | React.MouseEvent | React.KeyboardEvent,\n action: 'add' | 'remove',\n ) => void;\n hideAdd?: boolean;\n style?: React.CSSProperties;\n popupClassName?: string;\n tabBarGutter?: number;\n moreIcon?: React.ReactNode;\n}\n\nexport default function Tabs(props: ITabsProps) {\n const {\n size,\n className,\n adaptHeight,\n style = {},\n monospace: propsMonospace,\n tabPosition = 'top',\n padding: propsPadding = false,\n compact,\n hasDividing = true,\n items,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n onChange,\n onTabClick,\n destroyInactiveTabPane,\n tabBarExtraContent,\n headerBackgroundColor,\n children,\n type,\n onEdit,\n hideAdd,\n } = props;\n\n const isEditable = type === 'editable-card';\n const isCard = type === 'card' || type === 'editable-card';\n\n // Derive items from children if not provided\n const resolvedItems: TabItem[] = useMemo(() => {\n if (items) return items;\n return React.Children.toArray(children)\n .filter(React.isValidElement)\n .map((child: any) => ({\n key: child.key || child.props.key || '',\n label: child.props.tab,\n children: child.props.children,\n disabled: child.props.disabled,\n closable: child.props.closable,\n forceRender: child.props.forceRender,\n }));\n }, [items, children]);\n\n const firstKey = resolvedItems[0]?.key || '';\n const [innerActiveKey, setInnerActiveKey] = useState(\n defaultActiveKey || firstKey,\n );\n const mergedActiveKey =\n controlledActiveKey !== undefined ? controlledActiveKey : innerActiveKey;\n const activeKey = resolvedItems.some((item) => item.key === mergedActiveKey)\n ? mergedActiveKey\n : firstKey;\n\n const handleTabClick = (key: string, e: React.MouseEvent) => {\n if (controlledActiveKey === undefined) {\n setInnerActiveKey(key);\n }\n onChange?.(key);\n onTabClick?.(key, e);\n };\n\n const handleRemove = (key: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(key, 'remove');\n };\n\n const handleAdd = (e: React.MouseEvent) => {\n onEdit?.(e, 'add');\n };\n\n const monospace = tabPosition !== 'top' ? false : propsMonospace;\n const paddingVal = useMemo(() => {\n if (tabPosition !== 'top') return 0;\n if (typeof propsPadding === 'number') return propsPadding;\n if (typeof propsPadding === 'boolean' && propsPadding) return 20;\n return 0;\n }, [propsPadding, tabPosition]);\n\n const isVertical = tabPosition === 'left' || tabPosition === 'right';\n\n const extraLeft =\n tabBarExtraContent &&\n typeof tabBarExtraContent === 'object' &&\n 'left' in tabBarExtraContent\n ? tabBarExtraContent.left\n : null;\n const extraRight = tabBarExtraContent\n ? typeof tabBarExtraContent === 'object' && 'right' in tabBarExtraContent\n ? tabBarExtraContent.right\n : React.isValidElement(tabBarExtraContent)\n ? tabBarExtraContent\n : null\n : null;\n\n // Scroll state for overflow\n const navListRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const checkScroll = useCallback(() => {\n const el = navListRef.current;\n if (!el || isVertical) {\n setCanScrollLeft(false);\n setCanScrollRight(false);\n return;\n }\n const { scrollLeft, scrollWidth, clientWidth } = el;\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n }, [isVertical]);\n\n useEffect(() => {\n checkScroll();\n const el = navListRef.current;\n if (!el) return;\n // Use ResizeObserver to detect size changes\n let ro: ResizeObserver | undefined;\n if (typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => checkScroll());\n ro.observe(el);\n }\n el.addEventListener('scroll', checkScroll, { passive: true });\n return () => {\n el.removeEventListener('scroll', checkScroll);\n ro?.disconnect();\n };\n }, [checkScroll, resolvedItems.length]);\n\n const scrollBy = (delta: number) => {\n const el = navListRef.current;\n if (el) {\n el.scrollBy({ left: delta, behavior: 'smooth' });\n }\n };\n\n const showScrollButtons = canScrollLeft || canScrollRight;\n\n return (\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-tabs ant-tabs tw-flex',\n isVertical ? 'tw-flex-row' : 'tw-flex-col',\n adaptHeight && 'ald-adapt-height tw-h-full',\n size !== 'small' && 'ald-tabs-default',\n monospace && 'ald-tabs-monospace',\n compact && 'ald-tabs-compact',\n !hasDividing && 'ald-tabs-no-dividing',\n className,\n )}\n style={\n {\n ...style,\n '--header-bg-color': headerBackgroundColor,\n '--tabs-padding': `${paddingVal}px`,\n } as React.CSSProperties\n }\n >\n {/* Tab nav */}\n <div\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-tabs-nav ant-tabs-nav tw-flex tw-items-center',\n !isVertical &&\n hasDividing &&\n 'tw-mb-5 tw-border-0 tw-border-b tw-border-solid tw-border-b-[var(--global-cool-grey-100)]',\n !isVertical && compact && '!tw-mb-0',\n isVertical &&\n 'tw-flex-col tw-border-0 tw-border-r tw-border-solid tw-border-r-[var(--global-cool-grey-100)]',\n paddingVal && `tw-px-[${paddingVal}px]`,\n )}\n style={\n headerBackgroundColor\n ? { backgroundColor: headerBackgroundColor }\n : undefined\n }\n >\n {extraLeft}\n\n {/* Scroll left button */}\n {showScrollButtons && !isVertical && (\n <button\n type=\"button\"\n className={cn(\n 'ald-tabs-scroll-btn tw-flex tw-shrink-0 tw-items-center tw-justify-center tw-border-none tw-bg-transparent tw-p-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]',\n !canScrollLeft && 'tw-invisible',\n )}\n onClick={() => scrollBy(-200)}\n aria-label=\"Scroll tabs left\"\n >\n <ChevronLeftLine size={16} />\n </button>\n )}\n\n <div className=\"ald-tabs-nav-wrap ant-tabs-nav-wrap tw-min-w-0 tw-flex-1\">\n <div\n ref={navListRef}\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-tabs-nav-list ant-tabs-nav-list tw-flex tw-overflow-hidden',\n isVertical && 'tw-flex-col',\n monospace && '[&>*]:tw-flex-1',\n isCard ? 'tw-gap-1' : !monospace && 'tw-gap-8',\n )}\n style={\n !isVertical\n ? { scrollbarWidth: 'none', msOverflowStyle: 'none' }\n : undefined\n }\n >\n {resolvedItems.map((item) => {\n const isActive = activeKey === item.key;\n // For editable-card, closable defaults to true unless explicitly set to false\n const showClose = isEditable && item.closable !== false;\n\n return (\n <div\n key={item.key}\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-tabs-tab ant-tabs-tab tw-relative tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-gap-2 tw-whitespace-nowrap tw-transition-colors',\n // Card / editable-card styling\n isCard\n ? cn(\n 'tw-h-10 tw-rounded-t-[6px] tw-border tw-border-b-0 tw-border-solid tw-px-4 tw-text-sm tw-leading-5',\n 'tw-gap-sp-75',\n isActive\n ? 'tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--background-default)] tw-font-medium tw-text-[var(--alias-colors-text-selected)]'\n : 'tw-border-[var(--alias-colors-border-default)] tw-bg-[var(--alias-colors-bg-skeleton-subtler)] tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit',\n )\n : cn(\n size === 'small'\n ? 'tw-py-2 tw-text-xs tw-leading-4'\n : 'tw-py-2.5 tw-text-sm tw-leading-5',\n monospace && 'tw-justify-center',\n isActive\n ? 'tw-font-medium tw-text-[var(--alias-colors-text-selected)]'\n : 'tw-font-medium tw-text-[var(--alias-colors-text-subtle)] hover:tw-text-inherit',\n ),\n item.disabled &&\n 'tw-pointer-events-none tw-cursor-default tw-opacity-50',\n )}\n onClick={\n item.disabled\n ? undefined\n : (e) => handleTabClick(item.key, e)\n }\n >\n {item.icon}\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n <span className=\"ant-tabs-tab-btn\">{item.label}</span>\n {/* Close button for editable-card */}\n {showClose && (\n <span\n className=\"ald-tabs-tab-remove tw-m-0 tw-grid tw-size-4 tw-cursor-pointer tw-place-items-center tw-p-0 tw-text-[var(--alias-colors-icon-subtle)] tw-transition-colors hover:tw-text-[var(--alias-colors-text-default)]\"\n onClick={(e) => handleRemove(item.key, e)}\n aria-label={`Remove ${item.label}`}\n >\n <CloseLightLine size={12} />\n </span>\n )}\n {/* Active indicator for non-card line tabs */}\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n {!isCard && isActive && !isVertical && (\n <div className=\"ant-tabs-ink-bar tw-absolute tw-inset-x-0 tw--bottom-px tw-h-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]\" />\n )}\n {!isCard && isActive && isVertical && (\n <div className=\"tw-absolute tw-inset-y-0 tw--right-px tw-w-[2px] tw-rounded-[2px] tw-bg-[var(--alias-colors-border-selected)]\" />\n )}\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Scroll right button */}\n {showScrollButtons && !isVertical && (\n <button\n type=\"button\"\n className={cn(\n 'ald-tabs-scroll-btn tw-flex tw-shrink-0 tw-items-center tw-justify-center tw-border-none tw-bg-transparent tw-p-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]',\n !canScrollRight && 'tw-invisible',\n )}\n onClick={() => scrollBy(200)}\n aria-label=\"Scroll tabs right\"\n >\n <ChevronRightLine size={16} />\n </button>\n )}\n\n {/* Add button for editable-card */}\n {isEditable && !hideAdd && (\n <button\n type=\"button\"\n className=\"ald-tabs-nav-add tw-ml-1 tw-flex tw-shrink-0 tw-cursor-pointer tw-items-center tw-justify-center tw-rounded tw-border tw-border-solid tw-border-[var(--border-default)] tw-bg-[var(--background-default)] tw-px-2 tw-py-1 tw-text-[var(--content-secondary)] tw-transition-colors hover:tw-text-[var(--content-primary)]\"\n onClick={handleAdd}\n aria-label=\"Add tab\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/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 <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </button>\n )}\n\n {extraRight}\n </div>\n\n {/* Tab content */}\n {/* antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器 */}\n <div\n className={cn(\n 'ald-tabs-content ant-tabs-content ant-tabs-content-holder tw-min-h-0 tw-flex-1',\n adaptHeight && 'tw-h-full',\n )}\n >\n {resolvedItems.map((item) => {\n const isActive = item.key === activeKey;\n if (!isActive && destroyInactiveTabPane && !item.forceRender) {\n return null;\n }\n return (\n <div\n key={item.key}\n className={cn(\n // antd 兼容:保留 ant-* class,消费方 CSS 可能依赖该选择器\n 'ald-tabs-tabpane ant-tabs-tabpane',\n // v2 行为:adaptHeight 时 tabpane 撑满内容区,子元素的百分比高度才能解析\n adaptHeight && 'tw-h-full tw-overflow-y-auto',\n isActive ? 'ant-tabs-tabpane-active tw-block' : 'tw-hidden',\n )}\n role=\"tabpanel\"\n >\n {item.children}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nTabs.TabPane = TabPane;\n"],"mappings":"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"}
package/dist/Tabs.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './Tabs/index.js';
2
+ export { default } from './Tabs/index.js';
package/dist/Tag.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './Tag/index.js';
2
+ export { default } from './Tag/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './TextLink/index.js';
2
+ export { default } from './TextLink/index.js';
@@ -1,7 +1,9 @@
1
1
  import { default as React } from 'react';
2
2
  export type ActionType = 'hover' | 'focus' | 'click' | 'contextMenu';
3
3
  export interface ITooltipProps {
4
- title: React.ReactNode;
4
+ title?: React.ReactNode;
5
+ /** Alias for title, for Popover-style usage */
6
+ content?: React.ReactNode;
5
7
  destroyTooltipOnHide?: boolean;
6
8
  getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
7
9
  mouseEnterDelay?: number;
@@ -12,7 +14,11 @@ export interface ITooltipProps {
12
14
  open?: boolean;
13
15
  onOpenChange?: (open: boolean) => void;
14
16
  overlayClassName?: string;
17
+ /** Custom class for the root element */
18
+ rootClassName?: string;
15
19
  getTooltipContainer?: (node: HTMLElement) => HTMLElement;
16
20
  children?: React.ReactNode;
21
+ className?: string;
22
+ style?: React.CSSProperties;
17
23
  }
18
24
  export default function Tooltip(props: ITooltipProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { cn } from "../lib/utils.js";
2
+ import { useFloatingPopupZIndex } from "../_utils/floatingLayer.js";
2
3
  import React from "react";
3
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
5
  import * as PopoverPrimitive from "@radix-ui/react-popover";
@@ -68,7 +69,7 @@ function ClickTooltip({ children, title, open, onOpenChange, placement = "top",
68
69
  align,
69
70
  sideOffset: 4,
70
71
  className: cn(contentClasses, overlayClassName),
71
- style: zIndex !== null && zIndex !== void 0 ? { zIndex } : void 0,
72
+ style: { zIndex },
72
73
  children: [title, /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, { className: "tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]" })]
73
74
  })
74
75
  })]
@@ -77,6 +78,7 @@ function ClickTooltip({ children, title, open, onOpenChange, placement = "top",
77
78
  function Tooltip(props) {
78
79
  const { children, title, open, onOpenChange, placement = "top", mouseEnterDelay = 0, mouseLeaveDelay = 0, overlayClassName, trigger, getPopupContainer, getTooltipContainer, zIndex } = props;
79
80
  const { triggerRef, container } = usePortalContainer(getPopupContainer, getTooltipContainer);
81
+ const resolvedZIndex = useFloatingPopupZIndex(zIndex);
80
82
  if (!title && title !== 0) return /* @__PURE__ */ jsx(Fragment, { children });
81
83
  if (isTriggerDisabled(trigger)) return /* @__PURE__ */ jsx(Fragment, { children });
82
84
  if (isClickTrigger(trigger)) return /* @__PURE__ */ jsx(ClickTooltip, {
@@ -85,7 +87,7 @@ function Tooltip(props) {
85
87
  onOpenChange,
86
88
  placement,
87
89
  overlayClassName,
88
- zIndex,
90
+ zIndex: resolvedZIndex,
89
91
  container,
90
92
  triggerRef,
91
93
  children
@@ -111,7 +113,7 @@ function Tooltip(props) {
111
113
  align,
112
114
  sideOffset: 4,
113
115
  className: cn(contentClasses, overlayClassName),
114
- style: zIndex !== null && zIndex !== void 0 ? { zIndex } : void 0,
116
+ style: { zIndex: resolvedZIndex },
115
117
  children: [title, /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]" })]
116
118
  })
117
119
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tooltip/index.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React from 'react';\nimport { cn } from '../lib/utils';\n\nexport type ActionType = 'hover' | 'focus' | 'click' | 'contextMenu';\n\nexport interface ITooltipProps {\n title: React.ReactNode;\n destroyTooltipOnHide?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n mouseEnterDelay?: number;\n mouseLeaveDelay?: number;\n placement?:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n trigger?: ActionType | ActionType[];\n zIndex?: number;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n overlayClassName?: string;\n getTooltipContainer?: (node: HTMLElement) => HTMLElement;\n children?: React.ReactNode;\n}\n\nconst sideMap: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n topLeft: 'top',\n topRight: 'top',\n bottomLeft: 'bottom',\n bottomRight: 'bottom',\n leftTop: 'left',\n leftBottom: 'left',\n rightTop: 'right',\n rightBottom: 'right',\n};\n\nconst alignMap: Record<string, 'start' | 'end' | 'center'> = {\n topLeft: 'start',\n topRight: 'end',\n bottomLeft: 'start',\n bottomRight: 'end',\n leftTop: 'start',\n leftBottom: 'end',\n rightTop: 'start',\n rightBottom: 'end',\n};\n\nfunction isClickTrigger(trigger?: ActionType | ActionType[]): boolean {\n if (!trigger) return false;\n if (Array.isArray(trigger)) return trigger.includes('click');\n return trigger === 'click';\n}\n\nfunction isTriggerDisabled(trigger?: ActionType | ActionType[]): boolean {\n return Array.isArray(trigger) && trigger.length === 0;\n}\n\nconst contentClasses =\n 'ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--alias-colors-bg-skeleton-inverse-subtler)] tw-text-[var(--alias-colors-text-inverse-strong)] tw-animate-in tw-fade-in-0 tw-zoom-in-95';\n\nfunction usePortalContainer(\n getPopupContainer?: (node: HTMLElement) => HTMLElement,\n getTooltipContainer?: (node: HTMLElement) => HTMLElement,\n) {\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const [container, setContainer] = React.useState<HTMLElement | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const getter = getPopupContainer || getTooltipContainer;\n if (getter && triggerRef.current) {\n setContainer(getter(triggerRef.current));\n }\n }, [getPopupContainer, getTooltipContainer]);\n\n return { triggerRef, container };\n}\n\nfunction ClickTooltip({\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n overlayClassName,\n zIndex,\n container,\n triggerRef,\n}: Pick<\n ITooltipProps,\n | 'children'\n | 'title'\n | 'open'\n | 'onOpenChange'\n | 'placement'\n | 'overlayClassName'\n | 'zIndex'\n> & {\n container?: HTMLElement;\n triggerRef: React.RefObject<HTMLElement | null>;\n}) {\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={\n zIndex !== null && zIndex !== undefined ? { zIndex } : undefined\n }\n >\n {title}\n <PopoverPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nexport default function Tooltip(props: ITooltipProps) {\n const {\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n mouseEnterDelay = 0,\n mouseLeaveDelay = 0,\n overlayClassName,\n trigger,\n getPopupContainer,\n getTooltipContainer,\n zIndex,\n } = props;\n\n const { triggerRef, container } = usePortalContainer(\n getPopupContainer,\n getTooltipContainer,\n );\n\n if (!title && title !== 0) {\n return <>{children}</>;\n }\n\n if (isTriggerDisabled(trigger)) {\n return <>{children}</>;\n }\n\n if (isClickTrigger(trigger)) {\n return (\n <ClickTooltip\n title={title}\n open={open}\n onOpenChange={onOpenChange}\n placement={placement}\n overlayClassName={overlayClassName}\n zIndex={zIndex}\n container={container}\n triggerRef={triggerRef}\n >\n {children}\n </ClickTooltip>\n );\n }\n\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <TooltipPrimitive.Provider\n delayDuration={mouseEnterDelay * 1000}\n skipDelayDuration={mouseLeaveDelay * 1000}\n >\n <TooltipPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal container={container}>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={\n zIndex !== null && zIndex !== undefined ? { zIndex } : undefined\n }\n >\n {title}\n <TooltipPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tooltip/index.tsx"],"sourcesContent":["import * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport React from 'react';\nimport { useFloatingPopupZIndex } from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport type ActionType = 'hover' | 'focus' | 'click' | 'contextMenu';\n\nexport interface ITooltipProps {\n title?: React.ReactNode;\n /** Alias for title, for Popover-style usage */\n content?: React.ReactNode;\n destroyTooltipOnHide?: boolean;\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;\n mouseEnterDelay?: number;\n mouseLeaveDelay?: number;\n placement?:\n | 'top'\n | 'left'\n | 'right'\n | 'bottom'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom';\n trigger?: ActionType | ActionType[];\n zIndex?: number;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n overlayClassName?: string;\n /** Custom class for the root element */\n rootClassName?: string;\n getTooltipContainer?: (node: HTMLElement) => HTMLElement;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst sideMap: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'top',\n bottom: 'bottom',\n left: 'left',\n right: 'right',\n topLeft: 'top',\n topRight: 'top',\n bottomLeft: 'bottom',\n bottomRight: 'bottom',\n leftTop: 'left',\n leftBottom: 'left',\n rightTop: 'right',\n rightBottom: 'right',\n};\n\nconst alignMap: Record<string, 'start' | 'end' | 'center'> = {\n topLeft: 'start',\n topRight: 'end',\n bottomLeft: 'start',\n bottomRight: 'end',\n leftTop: 'start',\n leftBottom: 'end',\n rightTop: 'start',\n rightBottom: 'end',\n};\n\nfunction isClickTrigger(trigger?: ActionType | ActionType[]): boolean {\n if (!trigger) return false;\n if (Array.isArray(trigger)) return trigger.includes('click');\n return trigger === 'click';\n}\n\nfunction isTriggerDisabled(trigger?: ActionType | ActionType[]): boolean {\n return Array.isArray(trigger) && trigger.length === 0;\n}\n\nconst contentClasses =\n 'ald-tooltip-overlay tw-z-50 tw-min-h-[28px] tw-rounded-r-50 tw-px-2 tw-py-1.5 tw-text-xs tw-leading-4 tw-bg-[var(--alias-colors-bg-skeleton-inverse-subtler)] tw-text-[var(--alias-colors-text-inverse-strong)] tw-animate-in tw-fade-in-0 tw-zoom-in-95';\n\nfunction usePortalContainer(\n getPopupContainer?: (node: HTMLElement) => HTMLElement,\n getTooltipContainer?: (node: HTMLElement) => HTMLElement,\n) {\n const triggerRef = React.useRef<HTMLElement | null>(null);\n const [container, setContainer] = React.useState<HTMLElement | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const getter = getPopupContainer || getTooltipContainer;\n if (getter && triggerRef.current) {\n setContainer(getter(triggerRef.current));\n }\n }, [getPopupContainer, getTooltipContainer]);\n\n return { triggerRef, container };\n}\n\nfunction ClickTooltip({\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n overlayClassName,\n zIndex,\n container,\n triggerRef,\n}: Pick<\n ITooltipProps,\n | 'children'\n | 'title'\n | 'open'\n | 'onOpenChange'\n | 'placement'\n | 'overlayClassName'\n | 'zIndex'\n> & {\n container?: HTMLElement;\n triggerRef: React.RefObject<HTMLElement | null>;\n}) {\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <PopoverPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={container}>\n <PopoverPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex }}\n >\n {title}\n <PopoverPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n\nexport default function Tooltip(props: ITooltipProps) {\n const {\n children,\n title,\n open,\n onOpenChange,\n placement = 'top',\n mouseEnterDelay = 0,\n mouseLeaveDelay = 0,\n overlayClassName,\n trigger,\n getPopupContainer,\n getTooltipContainer,\n zIndex,\n } = props;\n\n const { triggerRef, container } = usePortalContainer(\n getPopupContainer,\n getTooltipContainer,\n );\n const resolvedZIndex = useFloatingPopupZIndex(zIndex);\n\n if (!title && title !== 0) {\n return <>{children}</>;\n }\n\n if (isTriggerDisabled(trigger)) {\n return <>{children}</>;\n }\n\n if (isClickTrigger(trigger)) {\n return (\n <ClickTooltip\n title={title}\n open={open}\n onOpenChange={onOpenChange}\n placement={placement}\n overlayClassName={overlayClassName}\n zIndex={resolvedZIndex}\n container={container}\n triggerRef={triggerRef}\n >\n {children}\n </ClickTooltip>\n );\n }\n\n const side = sideMap[placement] || 'top';\n const align = alignMap[placement] || 'center';\n\n return (\n <TooltipPrimitive.Provider\n delayDuration={mouseEnterDelay * 1000}\n skipDelayDuration={mouseLeaveDelay * 1000}\n >\n <TooltipPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <TooltipPrimitive.Trigger asChild>\n {React.isValidElement(children) ? (\n React.cloneElement(children as React.ReactElement, {\n ref: triggerRef,\n })\n ) : (\n <span ref={triggerRef as React.RefObject<HTMLSpanElement>}>\n {children}\n </span>\n )}\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal container={container}>\n <TooltipPrimitive.Content\n side={side}\n align={align}\n sideOffset={4}\n className={cn(contentClasses, overlayClassName)}\n style={{ zIndex: resolvedZIndex }}\n >\n {title}\n <TooltipPrimitive.Arrow className=\"tw-fill-[var(--alias-colors-bg-skeleton-inverse-subtler)]\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Tooltip/index.js';
2
+ export { default } from './Tooltip/index.js';
@@ -1,5 +1,6 @@
1
1
  import { cn } from "../lib/utils.js";
2
2
  import Button_default from "../Button/index.js";
3
+ import { FloatingLayerProvider, useFloatingLayer } from "../_utils/floatingLayer.js";
3
4
  import { useEffect, useState } from "react";
4
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region src/Tour/index.tsx
@@ -10,6 +11,7 @@ function Tour(props) {
10
11
  useEffect(() => {
11
12
  if (!open) setInnerCurrent(0);
12
13
  }, [open]);
14
+ const { maskZIndex, contentZIndex, nextLevel } = useFloatingLayer();
13
15
  if (!open || steps.length === 0) return null;
14
16
  const step = steps[current];
15
17
  const isLast = current === steps.length - 1;
@@ -30,47 +32,55 @@ function Tour(props) {
30
32
  };
31
33
  return /* @__PURE__ */ jsxs(Fragment, { children: [mask && /* @__PURE__ */ jsx("div", {
32
34
  className: "ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-black/45",
35
+ style: { zIndex: maskZIndex },
33
36
  onClick: onClose
34
- }), /* @__PURE__ */ jsxs("div", {
37
+ }), /* @__PURE__ */ jsx("div", {
35
38
  className: cn("ald-tour tw-fixed tw-z-[1001] tw-max-w-sm tw-rounded-r-100 tw-bg-[var(--background-default)] tw-p-6 tw-shadow-xl", "tw-left-1/2 tw-top-1/2 tw--translate-x-1/2 tw--translate-y-1/2", className),
36
- children: [
37
- step?.cover && /* @__PURE__ */ jsx("div", {
38
- className: "ald-tour-cover tw-mb-4",
39
- children: step.cover
40
- }),
41
- step?.title && /* @__PURE__ */ jsx("div", {
42
- className: "ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]",
43
- children: step.title
44
- }),
45
- step?.description && /* @__PURE__ */ jsx("div", {
46
- className: "ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]",
47
- children: step.description
48
- }),
49
- /* @__PURE__ */ jsxs("div", {
50
- className: "ald-tour-footer tw-flex tw-items-center tw-justify-between",
51
- children: [/* @__PURE__ */ jsxs("span", {
52
- className: "tw-text-xs tw-text-[var(--content-tertiary)]",
53
- children: [
54
- current + 1,
55
- "/",
56
- steps.length
57
- ]
58
- }), /* @__PURE__ */ jsxs("div", {
59
- className: "tw-flex tw-gap-2",
60
- children: [current > 0 && /* @__PURE__ */ jsx(Button_default, {
61
- type: "secondary",
62
- size: "small",
63
- onClick: goPrev,
64
- children: step?.prevButtonProps?.children || "Prev"
65
- }), /* @__PURE__ */ jsx(Button_default, {
66
- type: "primary",
67
- size: "small",
68
- onClick: goNext,
69
- children: step?.nextButtonProps?.children || (isLast ? "Finish" : "Next")
39
+ style: {
40
+ zIndex: contentZIndex,
41
+ ...step?.style
42
+ },
43
+ children: /* @__PURE__ */ jsxs(FloatingLayerProvider, {
44
+ value: nextLevel,
45
+ children: [
46
+ step?.cover && /* @__PURE__ */ jsx("div", {
47
+ className: "ald-tour-cover tw-mb-4",
48
+ children: step.cover
49
+ }),
50
+ step?.title && /* @__PURE__ */ jsx("div", {
51
+ className: "ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]",
52
+ children: step.title
53
+ }),
54
+ step?.description && /* @__PURE__ */ jsx("div", {
55
+ className: "ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]",
56
+ children: step.description
57
+ }),
58
+ /* @__PURE__ */ jsxs("div", {
59
+ className: "ald-tour-footer tw-flex tw-items-center tw-justify-between",
60
+ children: [/* @__PURE__ */ jsxs("span", {
61
+ className: "tw-text-xs tw-text-[var(--content-tertiary)]",
62
+ children: [
63
+ current + 1,
64
+ "/",
65
+ steps.length
66
+ ]
67
+ }), /* @__PURE__ */ jsxs("div", {
68
+ className: "tw-flex tw-gap-2",
69
+ children: [current > 0 && /* @__PURE__ */ jsx(Button_default, {
70
+ type: "secondary",
71
+ size: "small",
72
+ onClick: goPrev,
73
+ children: step?.prevButtonProps?.children || "Prev"
74
+ }), /* @__PURE__ */ jsx(Button_default, {
75
+ type: "primary",
76
+ size: "small",
77
+ onClick: goNext,
78
+ children: step?.nextButtonProps?.children || (isLast ? "Finish" : "Next")
79
+ })]
70
80
  })]
71
- })]
72
- })
73
- ]
81
+ })
82
+ ]
83
+ })
74
84
  })] });
75
85
  }
76
86
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Tour/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport Button from '../Button';\nimport { cn } from '../lib/utils';\n\nexport interface TourStepProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n cover?: React.ReactNode;\n target?: (() => HTMLElement | null) | null;\n placement?:\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight';\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n nextButtonProps?: { children?: React.ReactNode };\n prevButtonProps?: { children?: React.ReactNode };\n}\n\nexport interface TourProps {\n open?: boolean;\n onClose?: () => void;\n steps?: TourStepProps[];\n current?: number;\n onChange?: (current: number) => void;\n mask?: boolean;\n type?: 'default' | 'primary';\n className?: string;\n onFinish?: () => void;\n}\n\nfunction Tour(props: TourProps) {\n const {\n open = false,\n onClose,\n steps = [],\n current: controlledCurrent,\n onChange,\n mask = true,\n className,\n onFinish,\n } = props;\n\n const [innerCurrent, setInnerCurrent] = useState(0);\n const current = controlledCurrent ?? innerCurrent;\n\n useEffect(() => {\n if (!open) setInnerCurrent(0);\n }, [open]);\n\n if (!open || steps.length === 0) return null;\n\n const step = steps[current];\n const isLast = current === steps.length - 1;\n\n const goNext = () => {\n if (isLast) {\n onFinish?.();\n onClose?.();\n } else {\n const next = current + 1;\n if (controlledCurrent === undefined) setInnerCurrent(next);\n onChange?.(next);\n }\n };\n\n const goPrev = () => {\n const prev = Math.max(0, current - 1);\n if (controlledCurrent === undefined) setInnerCurrent(prev);\n onChange?.(prev);\n };\n\n return (\n <>\n {mask && (\n <div\n className=\"ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-black/45\"\n onClick={onClose}\n />\n )}\n <div\n className={cn(\n 'ald-tour tw-fixed tw-z-[1001] tw-max-w-sm tw-rounded-r-100 tw-bg-[var(--background-default)] tw-p-6 tw-shadow-xl',\n 'tw-left-1/2 tw-top-1/2 tw--translate-x-1/2 tw--translate-y-1/2',\n className,\n )}\n >\n {step?.cover && (\n <div className=\"ald-tour-cover tw-mb-4\">{step.cover}</div>\n )}\n {step?.title && (\n <div className=\"ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]\">\n {step.title}\n </div>\n )}\n {step?.description && (\n <div className=\"ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]\">\n {step.description}\n </div>\n )}\n <div className=\"ald-tour-footer tw-flex tw-items-center tw-justify-between\">\n <span className=\"tw-text-xs tw-text-[var(--content-tertiary)]\">\n {current + 1}/{steps.length}\n </span>\n <div className=\"tw-flex tw-gap-2\">\n {current > 0 && (\n <Button type=\"secondary\" size=\"small\" onClick={goPrev}>\n {step?.prevButtonProps?.children || 'Prev'}\n </Button>\n )}\n <Button type=\"primary\" size=\"small\" onClick={goNext}>\n {step?.nextButtonProps?.children || (isLast ? 'Finish' : 'Next')}\n </Button>\n </div>\n </div>\n </div>\n </>\n );\n}\n\nexport default Tour;\n"],"mappings":";;;;;AAqCA,SAAS,KAAK,OAAkB;CAC9B,MAAM,EACJ,OAAO,OACP,SACA,QAAQ,EAAE,EACV,SAAS,mBACT,UACA,OAAO,MACP,WACA,aACE;CAEJ,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,UAAU,qBAAqB;AAErC,iBAAgB;AACd,MAAI,CAAC,KAAM,iBAAgB,EAAE;IAC5B,CAAC,KAAK,CAAC;AAEV,KAAI,CAAC,QAAQ,MAAM,WAAW,EAAG,QAAO;CAExC,MAAM,OAAO,MAAM;CACnB,MAAM,SAAS,YAAY,MAAM,SAAS;CAE1C,MAAM,eAAe;AACnB,MAAI,QAAQ;AACV,eAAY;AACZ,cAAW;SACN;GACL,MAAM,OAAO,UAAU;AACvB,OAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,cAAW,KAAK;;;CAIpB,MAAM,eAAe;EACnB,MAAM,OAAO,KAAK,IAAI,GAAG,UAAU,EAAE;AACrC,MAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,aAAW,KAAK;;AAGlB,QACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EACE,WAAU;EACV,SAAS;EACT,CAAA,EAEJ,qBAAC,OAAD;EACE,WAAW,GACT,oHACA,kEACA,UACD;YALH;GAOG,MAAM,SACL,oBAAC,OAAD;IAAK,WAAU;cAA0B,KAAK;IAAY,CAAA;GAE3D,MAAM,SACL,oBAAC,OAAD;IAAK,WAAU;cACZ,KAAK;IACF,CAAA;GAEP,MAAM,eACL,oBAAC,OAAD;IAAK,WAAU;cACZ,KAAK;IACF,CAAA;GAER,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,QAAD;KAAM,WAAU;eAAhB;MACG,UAAU;MAAE;MAAE,MAAM;MAChB;QACP,qBAAC,OAAD;KAAK,WAAU;eAAf,CACG,UAAU,KACT,oBAAC,gBAAD;MAAQ,MAAK;MAAY,MAAK;MAAQ,SAAS;gBAC5C,MAAM,iBAAiB,YAAY;MAC7B,CAAA,EAEX,oBAAC,gBAAD;MAAQ,MAAK;MAAU,MAAK;MAAQ,SAAS;gBAC1C,MAAM,iBAAiB,aAAa,SAAS,WAAW;MAClD,CAAA,CACL;OACF;;GACF;IACL,EAAA,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Tour/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport Button from '../Button';\nimport {\n FloatingLayerProvider,\n useFloatingLayer,\n} from '../_utils/floatingLayer';\nimport { cn } from '../lib/utils';\n\nexport interface TourStepProps {\n title?: React.ReactNode;\n description?: React.ReactNode;\n cover?: React.ReactNode;\n target?: (() => HTMLElement | null) | null;\n placement?:\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight';\n mask?: boolean;\n className?: string;\n style?: React.CSSProperties;\n nextButtonProps?: { children?: React.ReactNode };\n prevButtonProps?: { children?: React.ReactNode };\n}\n\nexport interface TourProps {\n open?: boolean;\n onClose?: () => void;\n steps?: TourStepProps[];\n current?: number;\n onChange?: (current: number) => void;\n mask?: boolean;\n type?: 'default' | 'primary';\n className?: string;\n onFinish?: () => void;\n}\n\nfunction Tour(props: TourProps) {\n const {\n open = false,\n onClose,\n steps = [],\n current: controlledCurrent,\n onChange,\n mask = true,\n className,\n onFinish,\n } = props;\n\n const [innerCurrent, setInnerCurrent] = useState(0);\n const current = controlledCurrent ?? innerCurrent;\n\n useEffect(() => {\n if (!open) setInnerCurrent(0);\n }, [open]);\n\n const { maskZIndex, contentZIndex, nextLevel } = useFloatingLayer();\n\n if (!open || steps.length === 0) return null;\n\n const step = steps[current];\n const isLast = current === steps.length - 1;\n\n const goNext = () => {\n if (isLast) {\n onFinish?.();\n onClose?.();\n } else {\n const next = current + 1;\n if (controlledCurrent === undefined) setInnerCurrent(next);\n onChange?.(next);\n }\n };\n\n const goPrev = () => {\n const prev = Math.max(0, current - 1);\n if (controlledCurrent === undefined) setInnerCurrent(prev);\n onChange?.(prev);\n };\n\n return (\n <>\n {mask && (\n <div\n className=\"ald-tour-mask tw-fixed tw-inset-0 tw-z-[1000] tw-bg-black/45\"\n style={{ zIndex: maskZIndex }}\n onClick={onClose}\n />\n )}\n <div\n className={cn(\n 'ald-tour tw-fixed tw-z-[1001] tw-max-w-sm tw-rounded-r-100 tw-bg-[var(--background-default)] tw-p-6 tw-shadow-xl',\n 'tw-left-1/2 tw-top-1/2 tw--translate-x-1/2 tw--translate-y-1/2',\n className,\n )}\n style={{ zIndex: contentZIndex, ...step?.style }}\n >\n <FloatingLayerProvider value={nextLevel}>\n {step?.cover && (\n <div className=\"ald-tour-cover tw-mb-4\">{step.cover}</div>\n )}\n {step?.title && (\n <div className=\"ald-tour-title tw-mb-2 tw-text-base tw-font-semibold tw-text-[var(--content-primary)]\">\n {step.title}\n </div>\n )}\n {step?.description && (\n <div className=\"ald-tour-description tw-mb-4 tw-text-sm tw-text-[var(--content-secondary)]\">\n {step.description}\n </div>\n )}\n <div className=\"ald-tour-footer tw-flex tw-items-center tw-justify-between\">\n <span className=\"tw-text-xs tw-text-[var(--content-tertiary)]\">\n {current + 1}/{steps.length}\n </span>\n <div className=\"tw-flex tw-gap-2\">\n {current > 0 && (\n <Button type=\"secondary\" size=\"small\" onClick={goPrev}>\n {step?.prevButtonProps?.children || 'Prev'}\n </Button>\n )}\n <Button type=\"primary\" size=\"small\" onClick={goNext}>\n {step?.nextButtonProps?.children ||\n (isLast ? 'Finish' : 'Next')}\n </Button>\n </div>\n </div>\n </FloatingLayerProvider>\n </div>\n </>\n );\n}\n\nexport default Tour;\n"],"mappings":";;;;;;AAyCA,SAAS,KAAK,OAAkB;CAC9B,MAAM,EACJ,OAAO,OACP,SACA,QAAQ,EAAE,EACV,SAAS,mBACT,UACA,OAAO,MACP,WACA,aACE;CAEJ,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,UAAU,qBAAqB;AAErC,iBAAgB;AACd,MAAI,CAAC,KAAM,iBAAgB,EAAE;IAC5B,CAAC,KAAK,CAAC;CAEV,MAAM,EAAE,YAAY,eAAe,cAAc,kBAAkB;AAEnE,KAAI,CAAC,QAAQ,MAAM,WAAW,EAAG,QAAO;CAExC,MAAM,OAAO,MAAM;CACnB,MAAM,SAAS,YAAY,MAAM,SAAS;CAE1C,MAAM,eAAe;AACnB,MAAI,QAAQ;AACV,eAAY;AACZ,cAAW;SACN;GACL,MAAM,OAAO,UAAU;AACvB,OAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,cAAW,KAAK;;;CAIpB,MAAM,eAAe;EACnB,MAAM,OAAO,KAAK,IAAI,GAAG,UAAU,EAAE;AACrC,MAAI,sBAAsB,OAAW,iBAAgB,KAAK;AAC1D,aAAW,KAAK;;AAGlB,QACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,QAAQ,YAAY;EAC7B,SAAS;EACT,CAAA,EAEJ,oBAAC,OAAD;EACE,WAAW,GACT,oHACA,kEACA,UACD;EACD,OAAO;GAAE,QAAQ;GAAe,GAAG,MAAM;GAAO;YAEhD,qBAAC,uBAAD;GAAuB,OAAO;aAA9B;IACG,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eAA0B,KAAK;KAAY,CAAA;IAE3D,MAAM,SACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAEP,MAAM,eACL,oBAAC,OAAD;KAAK,WAAU;eACZ,KAAK;KACF,CAAA;IAER,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,qBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,UAAU;OAAE;OAAE,MAAM;OAChB;SACP,qBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,UAAU,KACT,oBAAC,gBAAD;OAAQ,MAAK;OAAY,MAAK;OAAQ,SAAS;iBAC5C,MAAM,iBAAiB,YAAY;OAC7B,CAAA,EAEX,oBAAC,gBAAD;OAAQ,MAAK;OAAU,MAAK;OAAQ,SAAS;iBAC1C,MAAM,iBAAiB,aACrB,SAAS,WAAW;OAChB,CAAA,CACL;QACF;;IACgB;;EACpB,CAAA,CACL,EAAA,CAAA"}
package/dist/Tour.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './Tour/index.js';
2
+ export { default } from './Tour/index.js';
@@ -1,4 +1,4 @@
1
- import { default as RcTree, BasicDataNode } from 'rc-tree';
1
+ import { BasicDataNode } from 'rc-tree';
2
2
  import { DataNode, Key } from 'rc-tree/es/interface';
3
3
  import { TreeProps } from './Tree.js';
4
4
  import * as React from 'react';
@@ -7,7 +7,7 @@ export interface DirectoryTreeProps<T extends BasicDataNode = DataNode> extends
7
7
  expandAction?: ExpandAction;
8
8
  }
9
9
  type DirectoryTreeCompoundedComponent = (<T extends BasicDataNode | DataNode = DataNode>(props: React.PropsWithChildren<DirectoryTreeProps<T>> & {
10
- ref?: React.Ref<RcTree>;
10
+ ref?: React.Ref<any>;
11
11
  }) => React.ReactElement) & {
12
12
  displayName?: string;
13
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DirectoryTree.js","names":[],"sources":["../../src/Tree/DirectoryTree.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport type RcTree from 'rc-tree';\nimport type { BasicDataNode } from 'rc-tree';\nimport type { DataNode, EventDataNode, Key } from 'rc-tree/es/interface';\nimport { conductExpandParent } from 'rc-tree/es/util';\nimport {\n convertDataToEntities,\n convertTreeToData,\n} from 'rc-tree/es/utils/treeUtil';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\n\nimport type { TreeProps } from './Tree';\nimport Tree from './Tree';\nimport { calcRangeKeys, convertDirectoryKeysToNodes } from './utils/dictUtil';\n\nexport type ExpandAction = false | 'click' | 'doubleClick';\n\nexport interface DirectoryTreeProps<T extends BasicDataNode = DataNode>\n extends TreeProps<T> {\n expandAction?: ExpandAction;\n}\n\ntype DirectoryTreeCompoundedComponent = (<\n T extends BasicDataNode | DataNode = DataNode,\n>(\n props: React.PropsWithChildren<DirectoryTreeProps<T>> & {\n ref?: React.Ref<RcTree>;\n },\n) => React.ReactElement) & {\n displayName?: string;\n};\n\nexport interface DirectoryTreeState {\n expandedKeys?: Key[];\n selectedKeys?: Key[];\n}\n\nfunction getTreeData({ treeData, children }: DirectoryTreeProps) {\n return treeData || convertTreeToData(children);\n}\n\nconst DirectoryTree: React.ForwardRefRenderFunction<\n RcTree,\n DirectoryTreeProps\n> = (\n { defaultExpandAll, defaultExpandParent, defaultExpandedKeys, ...props },\n ref,\n) => {\n // Shift click usage\n const lastSelectedKey = React.useRef<Key>();\n\n const cachedSelectedKeys = React.useRef<Key[]>();\n\n const getInitExpandedKeys = () => {\n const { keyEntities } = convertDataToEntities(getTreeData(props));\n\n let initExpandedKeys: Key[];\n\n // Expanded keys\n if (defaultExpandAll) {\n initExpandedKeys = Object.keys(keyEntities);\n } else if (defaultExpandParent) {\n initExpandedKeys = conductExpandParent(\n props.expandedKeys || defaultExpandedKeys || [],\n keyEntities,\n );\n } else {\n initExpandedKeys = (props.expandedKeys || defaultExpandedKeys)!;\n }\n return initExpandedKeys;\n };\n\n const [selectedKeys, setSelectedKeys] = React.useState(\n props.selectedKeys || props.defaultSelectedKeys || [],\n );\n const [expandedKeys, setExpandedKeys] = React.useState(() =>\n getInitExpandedKeys(),\n );\n\n React.useEffect(() => {\n if ('selectedKeys' in props) {\n setSelectedKeys(props.selectedKeys!);\n }\n }, [props.selectedKeys, props]);\n\n React.useEffect(() => {\n if ('expandedKeys' in props) {\n setExpandedKeys(props.expandedKeys!);\n }\n }, [props.expandedKeys, props]);\n\n const onExpand = (\n keys: Key[],\n info: {\n node: EventDataNode<any>;\n expanded: boolean;\n nativeEvent: MouseEvent;\n },\n ) => {\n if (!('expandedKeys' in props)) {\n setExpandedKeys(keys);\n }\n // Call origin function\n return props.onExpand?.(keys, info);\n };\n\n const onSelect = (\n keys: Key[],\n event: {\n event: 'select';\n selected: boolean;\n node: any;\n selectedNodes: DataNode[];\n nativeEvent: MouseEvent;\n },\n ) => {\n const { multiple } = props;\n const { node, nativeEvent } = event;\n const { key = '' } = node;\n\n const treeData = getTreeData(props);\n // const newState: DirectoryTreeState = {};\n\n // We need wrap this event since some value is not same\n const newEvent: any = {\n ...event,\n selected: true, // Directory selected always true\n };\n\n // Windows / Mac single pick\n const ctrlPick: boolean = nativeEvent?.ctrlKey || nativeEvent?.metaKey;\n const shiftPick: boolean = nativeEvent?.shiftKey;\n\n // Generate new selected keys\n let newSelectedKeys: Key[];\n if (multiple && ctrlPick) {\n // Control click\n newSelectedKeys = keys;\n lastSelectedKey.current = key;\n cachedSelectedKeys.current = newSelectedKeys;\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n } else if (multiple && shiftPick) {\n // Shift click\n newSelectedKeys = Array.from(\n new Set([\n ...(cachedSelectedKeys.current || []),\n ...calcRangeKeys({\n treeData,\n expandedKeys,\n startKey: key,\n endKey: lastSelectedKey.current,\n }),\n ]),\n );\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n } else {\n // Single click\n newSelectedKeys = [key];\n lastSelectedKey.current = key;\n cachedSelectedKeys.current = newSelectedKeys;\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n }\n\n props.onSelect?.(newSelectedKeys, newEvent);\n if (!('selectedKeys' in props)) {\n setSelectedKeys(newSelectedKeys);\n }\n };\n const { getPrefixCls, direction } = React.useContext(ConfigContext);\n\n const {\n prefixCls: customizePrefixCls,\n className,\n showIcon = true,\n expandAction = 'click',\n ...otherProps\n } = props;\n\n const prefixCls = getPrefixCls('tree', customizePrefixCls);\n const connectClassName = cn(\n `${prefixCls}-directory`,\n {\n [`${prefixCls}-directory-rtl`]: direction === 'rtl',\n },\n className,\n );\n\n return (\n <Tree\n ref={ref}\n blockNode\n {...otherProps}\n showIcon={showIcon}\n expandAction={expandAction}\n prefixCls={prefixCls}\n className={connectClassName}\n expandedKeys={expandedKeys}\n selectedKeys={selectedKeys}\n onSelect={onSelect}\n onExpand={onExpand}\n />\n );\n};\n\nconst ForwardDirectoryTree = React.forwardRef(\n DirectoryTree,\n) as unknown as DirectoryTreeCompoundedComponent;\n\nif (process.env.NODE_ENV !== 'production') {\n ForwardDirectoryTree.displayName = 'DirectoryTree';\n}\n\nexport default ForwardDirectoryTree;\n"],"mappings":";;;;;;;;;AAsCA,SAAS,YAAY,EAAE,UAAU,YAAgC;AAC/D,QAAO,YAAY,kBAAkB,SAAS;;AAGhD,IAAM,iBAIJ,EAAE,kBAAkB,qBAAqB,qBAAqB,GAAG,SACjE,QACG;CAEH,MAAM,kBAAkB,QAAM,QAAa;CAE3C,MAAM,qBAAqB,QAAM,QAAe;CAEhD,MAAM,4BAA4B;EAChC,MAAM,EAAE,gBAAgB,sBAAsB,YAAY,MAAM,CAAC;EAEjE,IAAI;AAGJ,MAAI,iBACF,oBAAmB,OAAO,KAAK,YAAY;WAClC,oBACT,oBAAmB,oBACjB,MAAM,gBAAgB,uBAAuB,EAAE,EAC/C,YACD;MAED,oBAAoB,MAAM,gBAAgB;AAE5C,SAAO;;CAGT,MAAM,CAAC,cAAc,mBAAmB,QAAM,SAC5C,MAAM,gBAAgB,MAAM,uBAAuB,EAAE,CACtD;CACD,MAAM,CAAC,cAAc,mBAAmB,QAAM,eAC5C,qBAAqB,CACtB;AAED,SAAM,gBAAgB;AACpB,MAAI,kBAAkB,MACpB,iBAAgB,MAAM,aAAc;IAErC,CAAC,MAAM,cAAc,MAAM,CAAC;AAE/B,SAAM,gBAAgB;AACpB,MAAI,kBAAkB,MACpB,iBAAgB,MAAM,aAAc;IAErC,CAAC,MAAM,cAAc,MAAM,CAAC;CAE/B,MAAM,YACJ,MACA,SAKG;AACH,MAAI,EAAE,kBAAkB,OACtB,iBAAgB,KAAK;AAGvB,SAAO,MAAM,WAAW,MAAM,KAAK;;CAGrC,MAAM,YACJ,MACA,UAOG;EACH,MAAM,EAAE,aAAa;EACrB,MAAM,EAAE,MAAM,gBAAgB;EAC9B,MAAM,EAAE,MAAM,OAAO;EAErB,MAAM,WAAW,YAAY,MAAM;EAInC,MAAM,WAAgB;GACpB,GAAG;GACH,UAAU;GACX;EAGD,MAAM,WAAoB,aAAa,WAAW,aAAa;EAC/D,MAAM,YAAqB,aAAa;EAGxC,IAAI;AACJ,MAAI,YAAY,UAAU;AAExB,qBAAkB;AAClB,mBAAgB,UAAU;AAC1B,sBAAmB,UAAU;AAC7B,YAAS,gBAAgB,4BACvB,UACA,gBACD;aACQ,YAAY,WAAW;AAEhC,qBAAkB,MAAM,KACtB,IAAI,IAAI,CACN,GAAI,mBAAmB,WAAW,EAAE,EACpC,GAAG,cAAc;IACf;IACA;IACA,UAAU;IACV,QAAQ,gBAAgB;IACzB,CAAC,CACH,CAAC,CACH;AACD,YAAS,gBAAgB,4BACvB,UACA,gBACD;SACI;AAEL,qBAAkB,CAAC,IAAI;AACvB,mBAAgB,UAAU;AAC1B,sBAAmB,UAAU;AAC7B,YAAS,gBAAgB,4BACvB,UACA,gBACD;;AAGH,QAAM,WAAW,iBAAiB,SAAS;AAC3C,MAAI,EAAE,kBAAkB,OACtB,iBAAgB,gBAAgB;;CAGpC,MAAM,EAAE,cAAc,cAAc,QAAM,WAAW,cAAc;CAEnE,MAAM,EACJ,WAAW,oBACX,WACA,WAAW,MACX,eAAe,SACf,GAAG,eACD;CAEJ,MAAM,YAAY,aAAa,QAAQ,mBAAmB;CAC1D,MAAM,mBAAmB,GACvB,GAAG,UAAU,aACb,GACG,GAAG,UAAU,kBAAkB,cAAc,OAC/C,EACD,UACD;AAED,QACE,oBAAC,MAAD;EACO;EACL,WAAA;EACA,GAAI;EACM;EACI;EACH;EACX,WAAW;EACG;EACA;EACJ;EACA;EACV,CAAA;;AAIN,IAAM,uBAAuB,QAAM,WACjC,cACD;AAED,IAAA,QAAA,IAAA,aAA6B,aAC3B,sBAAqB,cAAc"}
1
+ {"version":3,"file":"DirectoryTree.js","names":[],"sources":["../../src/Tree/DirectoryTree.tsx"],"sourcesContent":["import { cn } from '../lib/utils';\nimport type RcTree from 'rc-tree';\nimport type { BasicDataNode } from 'rc-tree';\nimport type { DataNode, EventDataNode, Key } from 'rc-tree/es/interface';\nimport { conductExpandParent } from 'rc-tree/es/util';\nimport {\n convertDataToEntities,\n convertTreeToData,\n} from 'rc-tree/es/utils/treeUtil';\nimport * as React from 'react';\nimport { ConfigContext } from '../ConfigProvider';\n\nimport type { TreeProps } from './Tree';\nimport Tree from './Tree';\nimport { calcRangeKeys, convertDirectoryKeysToNodes } from './utils/dictUtil';\n\nexport type ExpandAction = false | 'click' | 'doubleClick';\n\nexport interface DirectoryTreeProps<T extends BasicDataNode = DataNode>\n extends TreeProps<T> {\n expandAction?: ExpandAction;\n}\n\ntype DirectoryTreeCompoundedComponent = (<\n T extends BasicDataNode | DataNode = DataNode,\n>(\n props: React.PropsWithChildren<DirectoryTreeProps<T>> & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref?: React.Ref<any>;\n },\n) => React.ReactElement) & {\n displayName?: string;\n};\n\nexport interface DirectoryTreeState {\n expandedKeys?: Key[];\n selectedKeys?: Key[];\n}\n\nfunction getTreeData({ treeData, children }: DirectoryTreeProps) {\n return treeData || convertTreeToData(children);\n}\n\nconst DirectoryTree: React.ForwardRefRenderFunction<\n RcTree,\n DirectoryTreeProps\n> = (\n { defaultExpandAll, defaultExpandParent, defaultExpandedKeys, ...props },\n ref,\n) => {\n // Shift click usage\n const lastSelectedKey = React.useRef<Key>();\n\n const cachedSelectedKeys = React.useRef<Key[]>();\n\n const getInitExpandedKeys = () => {\n const { keyEntities } = convertDataToEntities(getTreeData(props));\n\n let initExpandedKeys: Key[];\n\n // Expanded keys\n if (defaultExpandAll) {\n initExpandedKeys = Object.keys(keyEntities);\n } else if (defaultExpandParent) {\n initExpandedKeys = conductExpandParent(\n props.expandedKeys || defaultExpandedKeys || [],\n keyEntities,\n );\n } else {\n initExpandedKeys = (props.expandedKeys || defaultExpandedKeys)!;\n }\n return initExpandedKeys;\n };\n\n const [selectedKeys, setSelectedKeys] = React.useState(\n props.selectedKeys || props.defaultSelectedKeys || [],\n );\n const [expandedKeys, setExpandedKeys] = React.useState(() =>\n getInitExpandedKeys(),\n );\n\n React.useEffect(() => {\n if ('selectedKeys' in props) {\n setSelectedKeys(props.selectedKeys!);\n }\n }, [props.selectedKeys, props]);\n\n React.useEffect(() => {\n if ('expandedKeys' in props) {\n setExpandedKeys(props.expandedKeys!);\n }\n }, [props.expandedKeys, props]);\n\n const onExpand = (\n keys: Key[],\n info: {\n node: EventDataNode<any>;\n expanded: boolean;\n nativeEvent: MouseEvent;\n },\n ) => {\n if (!('expandedKeys' in props)) {\n setExpandedKeys(keys);\n }\n // Call origin function\n return props.onExpand?.(keys, info);\n };\n\n const onSelect = (\n keys: Key[],\n event: {\n event: 'select';\n selected: boolean;\n node: any;\n selectedNodes: DataNode[];\n nativeEvent: MouseEvent;\n },\n ) => {\n const { multiple } = props;\n const { node, nativeEvent } = event;\n const { key = '' } = node;\n\n const treeData = getTreeData(props);\n // const newState: DirectoryTreeState = {};\n\n // We need wrap this event since some value is not same\n const newEvent: any = {\n ...event,\n selected: true, // Directory selected always true\n };\n\n // Windows / Mac single pick\n const ctrlPick: boolean = nativeEvent?.ctrlKey || nativeEvent?.metaKey;\n const shiftPick: boolean = nativeEvent?.shiftKey;\n\n // Generate new selected keys\n let newSelectedKeys: Key[];\n if (multiple && ctrlPick) {\n // Control click\n newSelectedKeys = keys;\n lastSelectedKey.current = key;\n cachedSelectedKeys.current = newSelectedKeys;\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n } else if (multiple && shiftPick) {\n // Shift click\n newSelectedKeys = Array.from(\n new Set([\n ...(cachedSelectedKeys.current || []),\n ...calcRangeKeys({\n treeData,\n expandedKeys,\n startKey: key,\n endKey: lastSelectedKey.current,\n }),\n ]),\n );\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n } else {\n // Single click\n newSelectedKeys = [key];\n lastSelectedKey.current = key;\n cachedSelectedKeys.current = newSelectedKeys;\n newEvent.selectedNodes = convertDirectoryKeysToNodes(\n treeData,\n newSelectedKeys,\n );\n }\n\n props.onSelect?.(newSelectedKeys, newEvent);\n if (!('selectedKeys' in props)) {\n setSelectedKeys(newSelectedKeys);\n }\n };\n const { getPrefixCls, direction } = React.useContext(ConfigContext);\n\n const {\n prefixCls: customizePrefixCls,\n className,\n showIcon = true,\n expandAction = 'click',\n ...otherProps\n } = props;\n\n const prefixCls = getPrefixCls('tree', customizePrefixCls);\n const connectClassName = cn(\n `${prefixCls}-directory`,\n {\n [`${prefixCls}-directory-rtl`]: direction === 'rtl',\n },\n className,\n );\n\n return (\n <Tree\n ref={ref}\n blockNode\n {...otherProps}\n showIcon={showIcon}\n expandAction={expandAction}\n prefixCls={prefixCls}\n className={connectClassName}\n expandedKeys={expandedKeys}\n selectedKeys={selectedKeys}\n onSelect={onSelect}\n onExpand={onExpand}\n />\n );\n};\n\nconst ForwardDirectoryTree = React.forwardRef(\n DirectoryTree,\n) as unknown as DirectoryTreeCompoundedComponent;\n\nif (process.env.NODE_ENV !== 'production') {\n ForwardDirectoryTree.displayName = 'DirectoryTree';\n}\n\nexport default ForwardDirectoryTree;\n"],"mappings":";;;;;;;;;AAuCA,SAAS,YAAY,EAAE,UAAU,YAAgC;AAC/D,QAAO,YAAY,kBAAkB,SAAS;;AAGhD,IAAM,iBAIJ,EAAE,kBAAkB,qBAAqB,qBAAqB,GAAG,SACjE,QACG;CAEH,MAAM,kBAAkB,QAAM,QAAa;CAE3C,MAAM,qBAAqB,QAAM,QAAe;CAEhD,MAAM,4BAA4B;EAChC,MAAM,EAAE,gBAAgB,sBAAsB,YAAY,MAAM,CAAC;EAEjE,IAAI;AAGJ,MAAI,iBACF,oBAAmB,OAAO,KAAK,YAAY;WAClC,oBACT,oBAAmB,oBACjB,MAAM,gBAAgB,uBAAuB,EAAE,EAC/C,YACD;MAED,oBAAoB,MAAM,gBAAgB;AAE5C,SAAO;;CAGT,MAAM,CAAC,cAAc,mBAAmB,QAAM,SAC5C,MAAM,gBAAgB,MAAM,uBAAuB,EAAE,CACtD;CACD,MAAM,CAAC,cAAc,mBAAmB,QAAM,eAC5C,qBAAqB,CACtB;AAED,SAAM,gBAAgB;AACpB,MAAI,kBAAkB,MACpB,iBAAgB,MAAM,aAAc;IAErC,CAAC,MAAM,cAAc,MAAM,CAAC;AAE/B,SAAM,gBAAgB;AACpB,MAAI,kBAAkB,MACpB,iBAAgB,MAAM,aAAc;IAErC,CAAC,MAAM,cAAc,MAAM,CAAC;CAE/B,MAAM,YACJ,MACA,SAKG;AACH,MAAI,EAAE,kBAAkB,OACtB,iBAAgB,KAAK;AAGvB,SAAO,MAAM,WAAW,MAAM,KAAK;;CAGrC,MAAM,YACJ,MACA,UAOG;EACH,MAAM,EAAE,aAAa;EACrB,MAAM,EAAE,MAAM,gBAAgB;EAC9B,MAAM,EAAE,MAAM,OAAO;EAErB,MAAM,WAAW,YAAY,MAAM;EAInC,MAAM,WAAgB;GACpB,GAAG;GACH,UAAU;GACX;EAGD,MAAM,WAAoB,aAAa,WAAW,aAAa;EAC/D,MAAM,YAAqB,aAAa;EAGxC,IAAI;AACJ,MAAI,YAAY,UAAU;AAExB,qBAAkB;AAClB,mBAAgB,UAAU;AAC1B,sBAAmB,UAAU;AAC7B,YAAS,gBAAgB,4BACvB,UACA,gBACD;aACQ,YAAY,WAAW;AAEhC,qBAAkB,MAAM,KACtB,IAAI,IAAI,CACN,GAAI,mBAAmB,WAAW,EAAE,EACpC,GAAG,cAAc;IACf;IACA;IACA,UAAU;IACV,QAAQ,gBAAgB;IACzB,CAAC,CACH,CAAC,CACH;AACD,YAAS,gBAAgB,4BACvB,UACA,gBACD;SACI;AAEL,qBAAkB,CAAC,IAAI;AACvB,mBAAgB,UAAU;AAC1B,sBAAmB,UAAU;AAC7B,YAAS,gBAAgB,4BACvB,UACA,gBACD;;AAGH,QAAM,WAAW,iBAAiB,SAAS;AAC3C,MAAI,EAAE,kBAAkB,OACtB,iBAAgB,gBAAgB;;CAGpC,MAAM,EAAE,cAAc,cAAc,QAAM,WAAW,cAAc;CAEnE,MAAM,EACJ,WAAW,oBACX,WACA,WAAW,MACX,eAAe,SACf,GAAG,eACD;CAEJ,MAAM,YAAY,aAAa,QAAQ,mBAAmB;CAC1D,MAAM,mBAAmB,GACvB,GAAG,UAAU,aACb,GACG,GAAG,UAAU,kBAAkB,cAAc,OAC/C,EACD,UACD;AAED,QACE,oBAAC,MAAD;EACO;EACL,WAAA;EACA,GAAI;EACM;EACI;EACH;EACX,WAAW;EACG;EACA;EACJ;EACA;EACV,CAAA;;AAIN,IAAM,uBAAuB,QAAM,WACjC,cACD;AAED,IAAA,QAAA,IAAA,aAA6B,aAC3B,sBAAqB,cAAc"}
@@ -1,4 +1,4 @@
1
- import { BasicDataNode, TreeProps as RcTreeProps, default as RcTree } from 'rc-tree';
1
+ import { BasicDataNode, TreeProps as RcTreeProps } from 'rc-tree';
2
2
  import { DataNode, Key } from 'rc-tree/es/interface';
3
3
  import * as React from 'react';
4
4
  export type SwitcherIcon = React.ReactNode | ((props: AldTreeNodeProps) => React.ReactNode);
@@ -132,5 +132,5 @@ export interface TreeProps<T extends BasicDataNode = DataNode> extends Omit<RcTr
132
132
  handlerRender?: (node: T) => React.ReactNode;
133
133
  highlightKeywords?: string;
134
134
  }
135
- declare const Tree: React.ForwardRefExoticComponent<TreeProps<DataNode> & React.RefAttributes<RcTree<import('rc-tree/lib/interface').DataNode>>>;
135
+ declare const Tree: React.ForwardRefExoticComponent<TreeProps<DataNode> & React.RefAttributes<any>>;
136
136
  export default Tree;
@@ -62,7 +62,7 @@ var Tree = React$1.forwardRef((props, ref) => {
62
62
  case "object":
63
63
  mergedDraggable = {
64
64
  ...draggable,
65
- icon: newIcon
65
+ icon: draggable.icon === void 0 ? newIcon : draggable.icon
66
66
  };
67
67
  break;
68
68
  default: break;
@@ -125,7 +125,7 @@ var Tree = React$1.forwardRef((props, ref) => {
125
125
  [`${prefixCls}-rtl`]: direction === "rtl",
126
126
  ["ald-draggable-tree"]: draggable,
127
127
  [`${prefixCls}-no-children`]: noChildren
128
- }, className),
128
+ }, "ant-tree", className),
129
129
  direction,
130
130
  checkable: checkable ? /* @__PURE__ */ jsx("span", { className: `${prefixCls}-checkbox-inner` }) : checkable,
131
131
  selectable,