antd-solid 0.0.11 → 0.0.13

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 (347) hide show
  1. package/css/index.css +10 -73
  2. package/dist/index.esm.js +7802 -2378
  3. package/dist/index.umd.js +1 -1
  4. package/es/Alert/index.d.ts +10 -0
  5. package/es/Alert/index.js +26 -0
  6. package/es/Button/index.d.ts +32 -0
  7. package/es/Button/index.js +123 -0
  8. package/es/Button/index.scss.js +6 -0
  9. package/es/Checkbox/Group.d.ts +19 -0
  10. package/es/Checkbox/Group.js +49 -0
  11. package/es/Checkbox/index.d.ts +15 -0
  12. package/es/Checkbox/index.js +60 -0
  13. package/es/CodeInput/index.d.ts +18 -0
  14. package/es/CodeInput/index.js +72 -0
  15. package/es/Collapse/Item.d.ts +46 -0
  16. package/es/Collapse/Item.js +130 -0
  17. package/es/Collapse/context.d.ts +5 -0
  18. package/es/Collapse/context.js +8 -0
  19. package/es/Collapse/index.d.ts +25 -10
  20. package/es/Collapse/index.js +95 -74
  21. package/es/Collapse/utils.d.ts +8 -0
  22. package/es/Collapse/utils.js +35 -0
  23. package/es/ColorPicker/ColorPickerInput.d.ts +3 -0
  24. package/es/ColorPicker/ColorPickerInput.js +250 -0
  25. package/es/ColorPicker/ColorPickerSelect.d.ts +3 -0
  26. package/es/ColorPicker/ColorPickerSelect.js +71 -0
  27. package/es/ColorPicker/ColorPickerSlider.d.ts +3 -0
  28. package/es/ColorPicker/ColorPickerSlider.js +115 -0
  29. package/es/ColorPicker/color.d.ts +24 -0
  30. package/es/ColorPicker/color.js +63 -0
  31. package/es/ColorPicker/context.d.ts +9 -0
  32. package/es/ColorPicker/context.js +5 -0
  33. package/es/ColorPicker/index.d.ts +31 -0
  34. package/es/ColorPicker/index.js +139 -0
  35. package/es/Command/context.d.ts +9 -0
  36. package/es/Command/context.js +11 -0
  37. package/es/Command/createCommand.d.ts +17 -0
  38. package/es/Command/createCommand.js +112 -0
  39. package/es/Command/index.d.ts +7 -0
  40. package/es/Command/index.js +9 -0
  41. package/es/Command/useCommandProps.d.ts +13 -0
  42. package/es/Command/useCommandProps.js +28 -0
  43. package/es/Compact/CompactContextIsolator.d.ts +3 -0
  44. package/es/Compact/CompactContextIsolator.js +15 -0
  45. package/es/Compact/context.d.ts +4 -0
  46. package/es/Compact/context.js +7 -0
  47. package/es/Compact/index.d.ts +14 -0
  48. package/es/Compact/index.js +32 -0
  49. package/es/Compact/index.scss.js +6 -0
  50. package/es/ConfigProvider/context.d.ts +11 -0
  51. package/es/ConfigProvider/context.js +15 -0
  52. package/es/ConfigProvider/dark/colorAlgorithm.d.ts +2 -0
  53. package/es/ConfigProvider/dark/colorAlgorithm.js +9 -0
  54. package/es/ConfigProvider/dark/colors.d.ts +3 -0
  55. package/es/ConfigProvider/dark/colors.js +47 -0
  56. package/es/ConfigProvider/dark/index.d.ts +2 -0
  57. package/es/ConfigProvider/dark/index.js +11 -0
  58. package/es/ConfigProvider/index.d.ts +32 -0
  59. package/es/ConfigProvider/index.js +44 -0
  60. package/es/ConfigProvider/light/colorAlgorithm.d.ts +2 -0
  61. package/es/ConfigProvider/light/colorAlgorithm.js +9 -0
  62. package/es/ConfigProvider/light/colors.d.ts +3 -0
  63. package/es/ConfigProvider/light/colors.js +45 -0
  64. package/es/ConfigProvider/light/index.d.ts +2 -0
  65. package/es/ConfigProvider/light/index.js +11 -0
  66. package/es/ConfigProvider/seed.d.ts +3 -0
  67. package/es/ConfigProvider/seed.js +22 -0
  68. package/es/ConfigProvider/types/index.d.ts +594 -0
  69. package/es/ConfigProvider/types/index.js +1 -0
  70. package/es/ConfigProvider/utils/genColorMapToken.d.ts +7 -0
  71. package/es/ConfigProvider/utils/genColorMapToken.js +85 -0
  72. package/es/ConfigProvider/utils/getAlphaColor.d.ts +2 -0
  73. package/es/ConfigProvider/utils/getAlphaColor.js +44 -0
  74. package/es/ConfigProvider/utils/index.d.ts +3 -0
  75. package/es/ConfigProvider/utils/index.js +181 -0
  76. package/es/ContextMenu/index.d.ts +8 -0
  77. package/es/ContextMenu/index.js +99 -0
  78. package/es/Cursor/index.d.ts +6 -0
  79. package/es/Cursor/index.js +71 -0
  80. package/es/DelayShow/index.d.ts +16 -0
  81. package/es/DelayShow/index.js +27 -0
  82. package/es/Divider/index.d.ts +17 -0
  83. package/es/Divider/index.js +71 -0
  84. package/es/Drawer/index.d.ts +20 -16
  85. package/es/Drawer/index.js +162 -112
  86. package/es/Drawer/index.scss.js +1 -1
  87. package/es/Dropdown/index.d.ts +16 -0
  88. package/es/Dropdown/index.js +47 -0
  89. package/es/Element/index.d.ts +10 -0
  90. package/es/Element/index.js +42 -0
  91. package/es/Empty/PRESENTED_IMAGE_SIMPLE.d.ts +2 -1
  92. package/es/Empty/PRESENTED_IMAGE_SIMPLE.js +25 -9
  93. package/es/Empty/assets/EmptySvg.js +1 -1
  94. package/es/Empty/assets/SimpleEmptySvg.js +1 -1
  95. package/es/Empty/index.d.ts +9 -3
  96. package/es/Empty/index.js +24 -9
  97. package/es/Form/Form.d.ts +8 -5
  98. package/es/Form/Form.js +50 -34
  99. package/es/Form/FormItem.d.ts +10 -5
  100. package/es/Form/FormItem.js +121 -104
  101. package/es/Form/context.d.ts +9 -9
  102. package/es/Form/context.js +4 -2
  103. package/es/Fragment/index.d.ts +4 -0
  104. package/es/Fragment/index.js +7 -0
  105. package/es/Image/index.d.ts +10 -0
  106. package/es/Image/index.js +37 -0
  107. package/es/Input/TextArea.d.ts +23 -0
  108. package/es/Input/TextArea.js +84 -0
  109. package/es/Input/index.d.ts +44 -0
  110. package/es/Input/index.js +213 -0
  111. package/es/Input/index.scss.js +6 -0
  112. package/es/InputNumber/index.d.ts +30 -0
  113. package/es/InputNumber/index.js +122 -0
  114. package/es/{InputNumber.test.js → InputNumber/index.test.js} +2 -1
  115. package/es/Menu/InternalMenu.d.ts +22 -0
  116. package/es/Menu/InternalMenu.js +196 -0
  117. package/es/Menu/index.d.ts +75 -0
  118. package/es/Menu/index.js +64 -0
  119. package/es/Message/Message.d.ts +9 -0
  120. package/es/Message/Message.js +34 -0
  121. package/es/Message/index.d.ts +12 -0
  122. package/es/Message/index.js +80 -0
  123. package/es/Message/index.scss.js +6 -0
  124. package/es/Message/useMessage.d.ts +6 -0
  125. package/es/Message/useMessage.js +54 -0
  126. package/es/Modal/index.d.ts +73 -0
  127. package/es/Modal/index.js +237 -0
  128. package/es/Modal/index.scss.js +6 -0
  129. package/es/Modal/useModal.d.ts +5 -0
  130. package/es/Modal/useModal.js +51 -0
  131. package/es/Modal/warning.d.ts +5 -0
  132. package/es/Modal/warning.js +43 -0
  133. package/es/{Popconfirm.d.ts → Popconfirm/index.d.ts} +2 -2
  134. package/es/Popconfirm/index.js +62 -0
  135. package/es/{Popover.d.ts → Popover/index.d.ts} +2 -2
  136. package/es/{Popover.js → Popover/index.js} +7 -12
  137. package/es/Progress/Circle.d.ts +16 -0
  138. package/es/Progress/Circle.js +122 -0
  139. package/es/Progress/index.d.ts +6 -4
  140. package/es/Progress/index.js +75 -60
  141. package/es/Radio/Button.d.ts +7 -0
  142. package/es/Radio/Button.js +72 -0
  143. package/es/Radio/Group.d.ts +18 -0
  144. package/es/Radio/Group.js +57 -0
  145. package/es/Radio/index.d.ts +14 -0
  146. package/es/Radio/index.js +68 -0
  147. package/es/RangeInput/index.d.ts +23 -0
  148. package/es/RangeInput/index.js +208 -0
  149. package/es/Result/index.js +49 -0
  150. package/es/Segmented/index.d.ts +10 -7
  151. package/es/Segmented/index.js +54 -53
  152. package/es/Select/index.d.ts +17 -0
  153. package/es/Select/index.js +75 -0
  154. package/es/SelectInput/index.d.ts +39 -0
  155. package/es/SelectInput/index.js +245 -0
  156. package/es/Slider/index.d.ts +47 -0
  157. package/es/Slider/index.js +177 -0
  158. package/es/Space/index.d.ts +13 -0
  159. package/es/Space/index.js +16 -0
  160. package/es/Spin/index.d.ts +19 -0
  161. package/es/Spin/index.js +82 -0
  162. package/es/{Switch.d.ts → Switch/index.d.ts} +9 -0
  163. package/es/Switch/index.js +41 -0
  164. package/es/{Table.d.ts → Table/index.d.ts} +6 -2
  165. package/es/Table/index.js +71 -0
  166. package/es/Tabs/index.d.ts +49 -0
  167. package/es/Tabs/index.js +256 -0
  168. package/es/Timeline/index.js +31 -0
  169. package/es/Tooltip/context.d.ts +5 -0
  170. package/es/Tooltip/context.js +5 -0
  171. package/es/Tooltip/index.d.ts +64 -0
  172. package/es/Tooltip/index.js +499 -0
  173. package/es/Transformer/index.d.ts +88 -0
  174. package/es/Transformer/index.js +882 -0
  175. package/es/Tree/SingleLevelTree.d.ts +28 -0
  176. package/es/Tree/SingleLevelTree.js +299 -0
  177. package/es/Tree/index.d.ts +83 -0
  178. package/es/Tree/index.js +197 -0
  179. package/es/TreeFor/index.d.ts +31 -0
  180. package/es/TreeFor/index.js +80 -0
  181. package/es/TreeSelect/index.d.ts +26 -0
  182. package/es/TreeSelect/index.js +98 -0
  183. package/es/Upload/index.d.ts +64 -0
  184. package/es/Upload/index.js +112 -0
  185. package/es/assets/svg/ColorPickUp.d.ts +4 -0
  186. package/es/assets/svg/ColorPickUp.js +25 -0
  187. package/es/assets/svg/Crosshair.d.ts +7 -0
  188. package/es/assets/svg/Crosshair.js +51 -0
  189. package/es/assets/svg/Resize.d.ts +4 -0
  190. package/es/assets/svg/Resize.js +25 -0
  191. package/es/assets/svg/Rotate.d.ts +4 -0
  192. package/es/assets/svg/Rotate.js +20 -0
  193. package/es/assets/svg/RotateArrow.d.ts +4 -0
  194. package/es/assets/svg/RotateArrow.js +21 -0
  195. package/es/assets/svg/common.d.ts +2 -0
  196. package/es/assets/svg/common.js +9 -0
  197. package/es/hooks/createControllableValue.d.ts +1 -1
  198. package/es/hooks/createControllableValue.js +16 -17
  199. package/es/hooks/createTransition.d.ts +6 -2
  200. package/es/hooks/createTransition.js +12 -8
  201. package/es/hooks/useClickAway.d.ts +1 -1
  202. package/es/hooks/useClickAway.js +4 -3
  203. package/es/hooks/useComponentSize.d.ts +3 -0
  204. package/es/hooks/useComponentSize.js +12 -0
  205. package/es/hooks/useCounter.d.ts +12 -0
  206. package/es/hooks/useCounter.js +30 -0
  207. package/es/hooks/useFocus.d.ts +2 -0
  208. package/es/hooks/useFocus.js +24 -0
  209. package/es/hooks/useHover.d.ts +2 -0
  210. package/es/hooks/useHover.js +33 -0
  211. package/es/hooks/useLocale.d.ts +1 -0
  212. package/es/hooks/useLocale.js +11 -0
  213. package/es/hooks/useMouse.d.ts +1 -0
  214. package/es/hooks/useMouse.js +18 -0
  215. package/es/hooks/useScroll.d.ts +2 -0
  216. package/es/hooks/useScroll.js +29 -0
  217. package/es/hooks/useSize.d.ts +8 -2
  218. package/es/hooks/useSize.js +25 -13
  219. package/es/hooks/useVirtualList.d.ts +14 -0
  220. package/es/hooks/useVirtualList.js +45 -0
  221. package/es/index.d.ts +59 -8
  222. package/es/index.js +53 -23
  223. package/es/locale/en_US.d.ts +3 -0
  224. package/es/locale/en_US.js +9 -0
  225. package/es/locale/index.d.ts +5 -0
  226. package/es/locale/index.js +1 -0
  227. package/es/locale/zh_CN.d.ts +3 -0
  228. package/es/locale/zh_CN.js +9 -0
  229. package/es/types/index.d.ts +11 -2
  230. package/es/utils/animation.d.ts +6 -0
  231. package/es/utils/animation.js +20 -0
  232. package/es/utils/array.d.ts +2 -1
  233. package/es/utils/array.js +5 -1
  234. package/es/utils/domPoint.d.ts +7 -0
  235. package/es/utils/domPoint.js +11 -0
  236. package/es/utils/math.d.ts +17 -0
  237. package/es/utils/math.js +25 -0
  238. package/es/utils/number.d.ts +1 -0
  239. package/es/utils/number.js +14 -0
  240. package/es/utils/setupGlobalDrag.d.ts +10 -0
  241. package/es/utils/setupGlobalDrag.js +38 -0
  242. package/es/utils/solid.d.ts +2 -2
  243. package/es/utils/solid.js +7 -8
  244. package/package.json +10 -11
  245. package/es/Button.d.ts +0 -19
  246. package/es/Button.js +0 -73
  247. package/es/ColorPicker.d.ts +0 -8
  248. package/es/ColorPicker.js +0 -6
  249. package/es/Compact.d.ts +0 -12
  250. package/es/Compact.js +0 -17
  251. package/es/DatePicker.d.ts +0 -19
  252. package/es/DatePicker.js +0 -9
  253. package/es/Image.d.ts +0 -9
  254. package/es/Image.js +0 -22
  255. package/es/Input.d.ts +0 -29
  256. package/es/Input.js +0 -144
  257. package/es/InputNumber.d.ts +0 -11
  258. package/es/InputNumber.js +0 -92
  259. package/es/Modal.d.ts +0 -48
  260. package/es/Modal.js +0 -209
  261. package/es/Popconfirm.js +0 -64
  262. package/es/Radio.d.ts +0 -27
  263. package/es/Radio.js +0 -93
  264. package/es/Result.js +0 -29
  265. package/es/Select.d.ts +0 -16
  266. package/es/Select.js +0 -113
  267. package/es/Skeleton.d.ts +0 -9
  268. package/es/Skeleton.js +0 -9
  269. package/es/Spin.d.ts +0 -9
  270. package/es/Spin.js +0 -22
  271. package/es/Switch.js +0 -30
  272. package/es/Table.js +0 -57
  273. package/es/Tabs.d.ts +0 -17
  274. package/es/Tabs.js +0 -117
  275. package/es/Timeline.js +0 -30
  276. package/es/Tooltip.d.ts +0 -34
  277. package/es/Tooltip.js +0 -302
  278. package/es/Tree.d.ts +0 -28
  279. package/es/Tree.js +0 -198
  280. package/es/Upload.d.ts +0 -11
  281. package/es/Upload.js +0 -6
  282. package/es/hooks/createUpdateEffect.d.ts +0 -5
  283. package/es/hooks/createUpdateEffect.js +0 -12
  284. package/es/utils/EventEmitter.d.ts +0 -7
  285. package/es/utils/EventEmitter.js +0 -13
  286. package/es/utils/ReactToSolid.d.ts +0 -8
  287. package/es/utils/ReactToSolid.js +0 -30
  288. package/es/utils/SolidToReact.d.ts +0 -8
  289. package/es/utils/SolidToReact.js +0 -23
  290. package/es/utils/component.d.ts +0 -31
  291. package/es/utils/component.js +0 -68
  292. package/es/utils/zh_CN.d.ts +0 -2
  293. package/es/utils/zh_CN.js +0 -236
  294. package/src/Button.tsx +0 -128
  295. package/src/Collapse/index.tsx +0 -86
  296. package/src/ColorPicker.tsx +0 -11
  297. package/src/Compact.tsx +0 -15
  298. package/src/DatePicker.tsx +0 -30
  299. package/src/Drawer/index.scss +0 -53
  300. package/src/Drawer/index.tsx +0 -212
  301. package/src/Empty/PRESENTED_IMAGE_SIMPLE.tsx +0 -15
  302. package/src/Empty/assets/EmptySvg.tsx +0 -43
  303. package/src/Empty/assets/SimpleEmptySvg.tsx +0 -16
  304. package/src/Empty/index.tsx +0 -20
  305. package/src/Form/Form.tsx +0 -94
  306. package/src/Form/FormItem.tsx +0 -141
  307. package/src/Form/context.ts +0 -16
  308. package/src/Form/index.ts +0 -13
  309. package/src/Image.tsx +0 -29
  310. package/src/Input.tsx +0 -202
  311. package/src/InputNumber.test.tsx +0 -46
  312. package/src/InputNumber.tsx +0 -125
  313. package/src/Modal.tsx +0 -220
  314. package/src/Popconfirm.tsx +0 -75
  315. package/src/Popover.tsx +0 -30
  316. package/src/Progress/index.tsx +0 -73
  317. package/src/Radio.tsx +0 -142
  318. package/src/Result.tsx +0 -38
  319. package/src/Segmented/index.tsx +0 -95
  320. package/src/Select.tsx +0 -128
  321. package/src/Skeleton.tsx +0 -14
  322. package/src/Spin.tsx +0 -23
  323. package/src/Switch.tsx +0 -34
  324. package/src/Table.tsx +0 -53
  325. package/src/Tabs.tsx +0 -131
  326. package/src/Timeline.tsx +0 -33
  327. package/src/Tooltip.tsx +0 -340
  328. package/src/Tree.tsx +0 -246
  329. package/src/Upload.tsx +0 -10
  330. package/src/hooks/createControllableValue.ts +0 -68
  331. package/src/hooks/createTransition.ts +0 -52
  332. package/src/hooks/createUpdateEffect.ts +0 -16
  333. package/src/hooks/index.ts +0 -2
  334. package/src/hooks/useClickAway.ts +0 -18
  335. package/src/hooks/useSize.ts +0 -26
  336. package/src/index.ts +0 -47
  337. package/src/types/index.ts +0 -5
  338. package/src/utils/EventEmitter.ts +0 -15
  339. package/src/utils/ReactToSolid.tsx +0 -38
  340. package/src/utils/SolidToReact.tsx +0 -27
  341. package/src/utils/array.ts +0 -21
  342. package/src/utils/component.tsx +0 -85
  343. package/src/utils/solid.ts +0 -61
  344. package/src/utils/zh_CN.ts +0 -236
  345. /package/es/{InputNumber.test.d.ts → InputNumber/index.test.d.ts} +0 -0
  346. /package/es/{Result.d.ts → Result/index.d.ts} +0 -0
  347. /package/es/{Timeline.d.ts → Timeline/index.d.ts} +0 -0
@@ -0,0 +1,28 @@
1
+ import { type Accessor, type Setter, type JSXElement } from 'solid-js';
2
+ import { type CheckNode, type TreeNode, type TreeProps } from '.';
3
+ import { type Key } from '../types';
4
+ interface SingleLevelTreeProps<T extends {} = TreeNode> extends Pick<TreeProps<T>, 'treeData' | 'draggable' | 'onDrop' | 'blockNode' | 'checkable' | 'multiple' | 'checkStrategy' | 'checkOnClick' | 'indentSize' | 'selectable'> {
5
+ indentSize: number;
6
+ /**
7
+ * 缩进次数
8
+ */
9
+ indent: number;
10
+ parentIndexes?: number[];
11
+ selectedKeys: Accessor<any[]>;
12
+ setSelectedKeys: Setter<any[] | undefined>;
13
+ draggableNode: Accessor<T | null>;
14
+ setDraggableNode: Setter<T | null>;
15
+ draggableIndexes: Accessor<number[] | null>;
16
+ setDraggableIndexes: Setter<number[] | null>;
17
+ isDraggable: (key: T | null) => boolean;
18
+ expandedKeys: Accessor<any[]>;
19
+ setExpandedKeys: Setter<any[]>;
20
+ setCheckedKeys: Setter<any[]>;
21
+ checkedMap: Accessor<Map<Key, CheckNode<T>>>;
22
+ getTitle: (node: T) => JSXElement;
23
+ getKey: (node: T) => Key;
24
+ getChildren: (node: T) => T[] | undefined;
25
+ getNodeByIndexes: (indexes: number[]) => T | undefined;
26
+ }
27
+ declare const SingleLevelTree: <T extends {} = TreeNode>(props: SingleLevelTreeProps<T>) => import("solid-js").JSX.Element;
28
+ export default SingleLevelTree;
@@ -0,0 +1,299 @@
1
+ import { delegateEvents, createComponent, insert, effect, className, setAttribute, memo, mergeProps, template, use } from 'solid-js/web';
2
+ import { isEmpty, last, uniq } from 'lodash-es';
3
+ import { For, createMemo, createSignal, untrack, Show } from 'solid-js';
4
+ import cs from 'classnames';
5
+ import Checkbox from '../Checkbox/index.js';
6
+
7
+ var _tmpl$ = /*#__PURE__*/template(`<span class=i-ant-design:caret-down-outlined>`),
8
+ _tmpl$2 = /*#__PURE__*/template(`<div><div><div class=flex-shrink-0 aria-label=indent></div><div></div><div>`),
9
+ _tmpl$3 = /*#__PURE__*/template(`<span class=i-ant-design:caret-right-outlined>`);
10
+ const SingleLevelTree = props => {
11
+ return createComponent(For, {
12
+ get each() {
13
+ return props.treeData;
14
+ },
15
+ children: (item, i) => {
16
+ let contentRef;
17
+ const indexes = createMemo(() => [...(props.parentIndexes ?? []), i()]);
18
+ const children = createMemo(() => props.getChildren(item));
19
+ /**
20
+ * 是否是末尾节点
21
+ */
22
+ const isEndNode = createMemo(() => isEmpty(children()));
23
+ const isExpanded = createMemo(() => !isEndNode() && props.expandedKeys().includes(props.getKey(item)));
24
+ const onCheck = () => {
25
+ const checked = !props.checkedMap().get(props.getKey(item))?.checked;
26
+ const key = props.getKey(item);
27
+ /**
28
+ * 获取所有受影响的父节点
29
+ * @param node
30
+ * @param parentKeys
31
+ * @returns
32
+ */
33
+ const getAllParentKeys = (node, parentKeys = []) => {
34
+ if (node.parent) {
35
+ if (checked) {
36
+ node.parent.checkedChildCount++;
37
+ }
38
+ if (node.parent.checkedChildCount === node.parent.totalChildCount) {
39
+ parentKeys.push(node.parent.key);
40
+ return getAllParentKeys(node.parent, parentKeys);
41
+ }
42
+ }
43
+ return parentKeys;
44
+ };
45
+ /**
46
+ * 获取所有受影响的子节点
47
+ * @param node
48
+ * @param parentKeys
49
+ * @returns
50
+ */
51
+ const getAllChildKeys = (list, onlyEndNode = false) => {
52
+ if (isEmpty(list)) return [];
53
+ return list.flatMap(v => {
54
+ const nextLevelChildren = props.getChildren(v);
55
+ if (!isEmpty(nextLevelChildren)) {
56
+ return [...(onlyEndNode ? [] : [props.getKey(v)]), ...getAllChildKeys(nextLevelChildren)];
57
+ }
58
+ return [props.getKey(v)];
59
+ });
60
+ };
61
+ if (props.checkStrategy === 'parent') {
62
+ const parentKeys = getAllParentKeys(props.checkedMap().get(key), [key]);
63
+ const root = props.checkedMap().get(last(parentKeys));
64
+ const addKeys = checked ? [root.key] : props.getChildren(root.treeNode)?.map(node => props.getKey(node)).filter(k => !parentKeys.includes(k));
65
+ const deleteKeys = checked ? getAllChildKeys(props.getChildren(root.treeNode)) : [key, root.key].concat(getAllChildKeys(children()));
66
+ const deleteChildDict = new Map(deleteKeys.map(k => [k, true]));
67
+ props.setCheckedKeys(keys => keys.concat(addKeys ?? []).filter(k => !deleteChildDict.has(k)));
68
+ return;
69
+ }
70
+ let updateKeys = [];
71
+ if (props.checkStrategy === 'all') {
72
+ updateKeys = [key].concat(getAllChildKeys(children())).concat(getAllParentKeys(props.checkedMap().get(key)));
73
+ } else if (props.checkStrategy === 'child') {
74
+ if (isEndNode()) {
75
+ updateKeys = [key];
76
+ } else {
77
+ updateKeys = getAllChildKeys(children(), true);
78
+ }
79
+ }
80
+ if (checked) {
81
+ props.setCheckedKeys(keys => uniq([...keys, ...updateKeys]));
82
+ } else {
83
+ const deleteChildDict = new Map(updateKeys.map(k => [k, true]));
84
+ props.setCheckedKeys(keys => keys.filter(k => !deleteChildDict.has(k)));
85
+ }
86
+ };
87
+ let dragEnterClientX = 0;
88
+ const [targetIndexes, setTargetIndexes] = createSignal(untrack(indexes));
89
+ const [isTarget, setIsTarget] = createSignal(false);
90
+ const [targetPosition, setTargetPosition] = createSignal('before');
91
+ const setTargetPositionAndLevelOffset = e => {
92
+ const middleY = e.target.getBoundingClientRect().top + e.target.clientHeight / 2;
93
+ const position = e.clientY < middleY ? 'before' : 'after';
94
+ setTargetPosition(position);
95
+ if (position === 'after') {
96
+ if (isExpanded()) {
97
+ setTargetIndexes([...indexes(), 0]);
98
+ return;
99
+ }
100
+ let isLastNode = props.treeData?.length === i() + 1;
101
+ if (isLastNode && e.clientX < dragEnterClientX) {
102
+ const levelOffset = Math.ceil((e.clientX - dragEnterClientX) / props.indentSize);
103
+ if (levelOffset < 0) {
104
+ setTargetIndexes(() => {
105
+ const _indexes = [...indexes()];
106
+ for (let _i = 0; _i < -levelOffset; _i++) {
107
+ if (_i > 0) {
108
+ if (_indexes.length < 2) break;
109
+ const grandfatherNode = props.getNodeByIndexes(_indexes.slice(0, -1));
110
+ isLastNode = grandfatherNode ? props.getChildren(grandfatherNode)?.length === last(_indexes) + 1 : false;
111
+ if (!isLastNode) break;
112
+ }
113
+ _indexes.pop();
114
+ }
115
+ _indexes[_indexes.length - 1] = _indexes[_indexes.length - 1] + 1;
116
+ return _indexes;
117
+ });
118
+ return;
119
+ }
120
+ }
121
+ if (isEndNode() && e.clientX > dragEnterClientX) {
122
+ const levelOffset = (e.clientX - dragEnterClientX) / props.indentSize;
123
+ if (levelOffset >= 1) {
124
+ setTargetIndexes([...indexes(), 0]);
125
+ return;
126
+ }
127
+ }
128
+ } else {
129
+ // 上一个兄弟节点
130
+ let prevNode = i() > 0 ? props.treeData?.[i() - 1] : undefined;
131
+ let isPrevNodeExpanded = prevNode ? !isEmpty(props.getChildren(prevNode)) && props.expandedKeys().includes(props.getKey(prevNode)) : false;
132
+ if (isPrevNodeExpanded && e.clientX > dragEnterClientX) {
133
+ const levelOffset = Math.floor((e.clientX - dragEnterClientX) / props.indentSize);
134
+ if (levelOffset > 0) {
135
+ setTargetIndexes(() => {
136
+ const _indexes = [...indexes().slice(0, -1), i() - 1];
137
+ for (let _i = 0; _i < levelOffset; _i++) {
138
+ if (_i > 0) {
139
+ prevNode = props.getNodeByIndexes(_indexes);
140
+ isPrevNodeExpanded = prevNode ? !isEmpty(props.getChildren(prevNode)) && props.expandedKeys().includes(props.getKey(prevNode)) : false;
141
+ if (!isPrevNodeExpanded) break;
142
+ }
143
+ _indexes.push(props.getChildren(prevNode).length);
144
+ }
145
+ return _indexes;
146
+ });
147
+ return;
148
+ }
149
+ }
150
+ }
151
+ setTargetIndexes(position === 'before' ? indexes() : [...indexes().slice(0, -1), last(indexes()) + 1]);
152
+ };
153
+ return [(() => {
154
+ var _el$ = _tmpl$2(),
155
+ _el$2 = _el$.firstChild,
156
+ _el$3 = _el$2.firstChild,
157
+ _el$4 = _el$3.nextSibling,
158
+ _el$6 = _el$4.nextSibling;
159
+ _el$.addEventListener("drop", () => {
160
+ setIsTarget(false);
161
+ props.onDrop?.({
162
+ dragNode: props.draggableNode(),
163
+ dragIndexes: props.draggableIndexes(),
164
+ targetIndexes: targetIndexes()
165
+ });
166
+ });
167
+ _el$.addEventListener("dragleave", () => {
168
+ setIsTarget(false);
169
+ });
170
+ _el$.addEventListener("dragenter", e => {
171
+ dragEnterClientX = e.clientX;
172
+ setIsTarget(true);
173
+ setTargetPositionAndLevelOffset(e);
174
+ });
175
+ _el$.addEventListener("dragover", e => {
176
+ e.preventDefault();
177
+ setTargetPositionAndLevelOffset(e);
178
+ });
179
+ _el$.addEventListener("dragend", () => {
180
+ props.setDraggableNode(null);
181
+ props.setDraggableIndexes(null);
182
+ });
183
+ _el$.addEventListener("dragstart", () => {
184
+ props.setDraggableNode(item);
185
+ props.setDraggableIndexes(indexes());
186
+ });
187
+ insert(_el$4, createComponent(Show, {
188
+ get when() {
189
+ return isExpanded();
190
+ },
191
+ get fallback() {
192
+ return (() => {
193
+ var _el$7 = _tmpl$3();
194
+ _el$7.$$click = () => {
195
+ const key = props.getKey(item);
196
+ props.setExpandedKeys(l => [...l, key]);
197
+ };
198
+ return _el$7;
199
+ })();
200
+ },
201
+ get children() {
202
+ var _el$5 = _tmpl$();
203
+ _el$5.$$click = () => {
204
+ const key = props.getKey(item);
205
+ props.setExpandedKeys(l => l.filter(k => k !== key));
206
+ };
207
+ return _el$5;
208
+ }
209
+ }));
210
+ insert(_el$2, createComponent(Show, {
211
+ get when() {
212
+ return props.checkable;
213
+ },
214
+ get children() {
215
+ return createComponent(Checkbox, {
216
+ "class": "mr-8px mt-2px",
217
+ get checked() {
218
+ return props.checkedMap().get(props.getKey(item))?.checked;
219
+ },
220
+ get indeterminate() {
221
+ return props.checkedMap().get(props.getKey(item))?.indeterminate;
222
+ },
223
+ onChange: onCheck
224
+ });
225
+ }
226
+ }), _el$6);
227
+ _el$6.$$click = () => {
228
+ const key = props.getKey(item);
229
+ if (!props.selectable) return;
230
+ if (props.multiple) {
231
+ props.setSelectedKeys(keys => {
232
+ keys = keys ?? [];
233
+ if (keys.includes(key)) {
234
+ return keys.filter(n => n !== key);
235
+ }
236
+ return [...keys, key];
237
+ });
238
+ } else {
239
+ props.setSelectedKeys(keys => {
240
+ return keys?.includes(key) ? [] : [key];
241
+ });
242
+ }
243
+ if (props.checkOnClick) {
244
+ onCheck();
245
+ }
246
+ };
247
+ var _ref$ = contentRef;
248
+ typeof _ref$ === "function" ? use(_ref$, _el$6) : contentRef = _el$6;
249
+ insert(_el$6, () => props.getTitle(item));
250
+ effect(_p$ => {
251
+ var _v$ = cs('p-[var(--ant-tree-node-wrapper-padding)] relative', props.draggableNode() && 'child[]:pointer-events-none', isTarget() && ['before:content-empty before:inline-block before:w-8px before:h-8px before:absolute before:left-[var(--ant-tree-target-node-left)] before:-translate-x-full before:rounded-1/2 before:[border:2px_solid_var(--ant-color-primary)]', 'after:content-empty after:inline-block after:h-2px after:absolute after:left-[var(--ant-tree-target-node-left)] after:right-0 after:bg-[var(--ant-color-primary)]', targetPosition() === 'before' ? 'before:top-0 before:translate-y--1/2 after:top--1px' : 'before:bottom-0 before:translate-y-1/2 after:bottom--1px']),
252
+ _v$2 = `calc(${contentRef?.offsetLeft ?? 0}px + ${contentRef && window.getComputedStyle(contentRef).paddingLeft || '0px'} + ${(targetIndexes().length - indexes().length) * props.indentSize}px)`,
253
+ _v$3 = props.draggable,
254
+ _v$4 = cs('flex items-center relative', props.isDraggable(item) && 'after:content-empty after:absolute after:inset--1px after:[border:1px_solid_var(--ant-color-primary)]'),
255
+ _v$5 = `${props.indent * props.indentSize}px`,
256
+ _v$6 = cs('flex-shrink-0 w-[var(--ant-tree-expand-icon-width)] flex items-center justify-center cursor-pointer', isEndNode() && 'opacity-0'),
257
+ _v$7 = cs('rounded-[var(--ant-border-radius-sm)] px-[var(--ant-padding-xxs)] cursor-pointer relative min-w-0', props.blockNode && 'w-full', props.isDraggable(item) || props.selectedKeys()?.includes(props.getKey(item)) ? 'bg-[var(--ant-tree-node-selected-bg)]' : 'hover:bg-[var(--ant-tree-node-hover-bg)]');
258
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
259
+ _v$2 !== _p$.t && ((_p$.t = _v$2) != null ? _el$.style.setProperty("--ant-tree-target-node-left", _v$2) : _el$.style.removeProperty("--ant-tree-target-node-left"));
260
+ _v$3 !== _p$.a && setAttribute(_el$, "draggable", _p$.a = _v$3);
261
+ _v$4 !== _p$.o && className(_el$2, _p$.o = _v$4);
262
+ _v$5 !== _p$.i && ((_p$.i = _v$5) != null ? _el$3.style.setProperty("width", _v$5) : _el$3.style.removeProperty("width"));
263
+ _v$6 !== _p$.n && className(_el$4, _p$.n = _v$6);
264
+ _v$7 !== _p$.s && className(_el$6, _p$.s = _v$7);
265
+ return _p$;
266
+ }, {
267
+ e: undefined,
268
+ t: undefined,
269
+ a: undefined,
270
+ o: undefined,
271
+ i: undefined,
272
+ n: undefined,
273
+ s: undefined
274
+ });
275
+ return _el$;
276
+ })(), createComponent(Show, {
277
+ get when() {
278
+ return memo(() => !!isExpanded())() && !isEndNode();
279
+ },
280
+ get children() {
281
+ return createComponent(SingleLevelTree, mergeProps(props, {
282
+ get treeData() {
283
+ return children();
284
+ },
285
+ get indent() {
286
+ return props.indent + 1;
287
+ },
288
+ get parentIndexes() {
289
+ return indexes();
290
+ }
291
+ }));
292
+ }
293
+ })];
294
+ }
295
+ });
296
+ };
297
+ delegateEvents(["click"]);
298
+
299
+ export { SingleLevelTree as default };
@@ -0,0 +1,83 @@
1
+ import { type JSXElement, type JSX } from 'solid-js';
2
+ import { type StyleProps } from '../types';
3
+ import { type CheckboxProps } from '../Checkbox';
4
+ export interface CheckNode<T extends {} = TreeNode> extends CheckboxProps {
5
+ key: any;
6
+ parent?: CheckNode<T>;
7
+ treeNode: T;
8
+ checkedChildCount?: number;
9
+ totalChildCount?: number;
10
+ }
11
+ export interface TreeNode {
12
+ key: any;
13
+ title: JSXElement;
14
+ children?: TreeNode[] | undefined;
15
+ }
16
+ export interface TreeProps<T extends {} = TreeNode> extends StyleProps {
17
+ /**
18
+ * 支持点选多个节点(节点本身)
19
+ */
20
+ multiple?: boolean;
21
+ treeData?: T[];
22
+ defaultSelectedKeys?: any[] | undefined | null;
23
+ selectedKeys?: any[] | undefined | null;
24
+ onSelect?: (selectedKeys: any[]) => void;
25
+ /**
26
+ * 是否可选中
27
+ * 默认 true
28
+ */
29
+ selectable?: boolean;
30
+ defaultExpandedKeys?: any[] | undefined | null;
31
+ expandedKeys?: any[] | undefined | null;
32
+ onExpand?: (expandedKeys: any[]) => void;
33
+ /**
34
+ * 是否节点占据一行
35
+ */
36
+ blockNode?: boolean;
37
+ defaultExpandAll?: boolean;
38
+ checkable?: boolean;
39
+ /**
40
+ * 设置节点可拖拽
41
+ */
42
+ draggable?: boolean;
43
+ onDrop?: (info: {
44
+ dragNode: T;
45
+ dragIndexes: number[];
46
+ targetIndexes: number[];
47
+ }) => void;
48
+ /**
49
+ * 默认选中复选框的树节点
50
+ */
51
+ defaultCheckedKeys?: any[] | undefined | null;
52
+ checkedKeys?: any[] | undefined | null;
53
+ onCheck?: (checkedKeys: any[], e: {
54
+ checked: boolean;
55
+ halfCheckedKeys: any[];
56
+ }) => void;
57
+ /**
58
+ * 自定义节点 title、key、children 的字段
59
+ * 默认 { title: 'title', key: 'key', children: 'children' }
60
+ */
61
+ fieldNames?: {
62
+ title?: string | ((node: T) => JSXElement);
63
+ key?: string | ((node: T) => any);
64
+ children?: string | ((node: T) => T[] | undefined);
65
+ };
66
+ /**
67
+ * 默认 'all'
68
+ * 设置勾选策略来指定勾选回调返回的值,all 表示回调函数值为全部选中节点;parent 表示回调函数值为父节点(当父节点下所有子节点都选中时);child 表示回调函数值为子节点
69
+ */
70
+ checkStrategy?: 'all' | 'parent' | 'child';
71
+ /**
72
+ * 是否允许点击节点进行勾选,仅在 checkable 为 true 时生效
73
+ */
74
+ checkOnClick?: boolean;
75
+ /**
76
+ * 缩进宽度
77
+ * 默认 24
78
+ */
79
+ indentSize?: number;
80
+ fallback?: JSX.Element;
81
+ }
82
+ declare function Tree<T extends {} = TreeNode>(_props: TreeProps<T>): JSX.Element;
83
+ export default Tree;
@@ -0,0 +1,197 @@
1
+ import { createComponent, mergeProps as mergeProps$1 } from 'solid-js/web';
2
+ import { mergeProps, untrack, createMemo, createSignal, createSelector, Show } from 'solid-js';
3
+ import { isEmpty, get, pull } from 'lodash-es';
4
+ import cs from 'classnames';
5
+ import createControllableValue from '../hooks/createControllableValue.js';
6
+ import SingleLevelTree from './SingleLevelTree.js';
7
+ import Element from '../Element/index.js';
8
+
9
+ function Tree(_props) {
10
+ const props = mergeProps({
11
+ checkStrategy: 'all',
12
+ indentSize: 24,
13
+ selectable: true
14
+ }, _props);
15
+ const fieldNames = Object.assign({
16
+ title: 'title',
17
+ key: 'key',
18
+ children: 'children'
19
+ }, untrack(() => props.fieldNames));
20
+ const getTitle = node => {
21
+ const titleFieldName = fieldNames.title;
22
+ return typeof titleFieldName === 'function' ? titleFieldName(node) : get(node, titleFieldName);
23
+ };
24
+ const getKey = node => {
25
+ const keyFieldName = fieldNames.key;
26
+ return typeof keyFieldName === 'function' ? keyFieldName(node) : get(node, keyFieldName);
27
+ };
28
+ const getChildren = node => {
29
+ const childrenFieldName = fieldNames.children;
30
+ return typeof childrenFieldName === 'function' ? childrenFieldName(node) : get(node, childrenFieldName);
31
+ };
32
+ const [_selectedKeys, setSelectedKeys] = createControllableValue(props, {
33
+ defaultValuePropName: 'defaultSelectedKeys',
34
+ valuePropName: 'selectedKeys',
35
+ trigger: 'onSelect'
36
+ });
37
+ const selectedKeys = createMemo(() => _selectedKeys() ?? []);
38
+ const [_expandedKeys, setExpandedKeys] = createControllableValue(props, {
39
+ defaultValuePropName: 'defaultExpandedKeys',
40
+ valuePropName: 'expandedKeys',
41
+ trigger: 'onExpand',
42
+ defaultValue: untrack(() => {
43
+ if (!props.defaultExpandAll) return [];
44
+ const collectKeys = list => {
45
+ if (!list) return [];
46
+ return list.flatMap(item => [getKey(item), ...collectKeys(getChildren(item))]);
47
+ };
48
+ return collectKeys(props.treeData);
49
+ })
50
+ });
51
+ const expandedKeys = createMemo(() => _expandedKeys() ?? []);
52
+ const [_checkedKeys, setCheckedKeys] = createControllableValue(props, {
53
+ defaultValuePropName: 'defaultCheckedKeys',
54
+ valuePropName: 'checkedKeys',
55
+ trigger: 'onCheck'
56
+ });
57
+ // TODO
58
+ // 由于 treeForEach 中会对 checkedKeys 直接修改,为避免直接修改外部的传值,这里先拷贝一份
59
+ const checkedKeys = createMemo(() => [...(_checkedKeys() ?? [])]);
60
+ const checkedMap = createMemo(() => {
61
+ const map = new Map();
62
+ const checkedKeyDict = new Map(checkedKeys()?.map(k => [k, true]));
63
+ const treeForEach = (list, parent) => {
64
+ let checked = true;
65
+ let indeterminate = false;
66
+ let checkedChildCount = 0;
67
+ list?.forEach(item => {
68
+ const key = getKey(item);
69
+ const children = getChildren(item);
70
+ const checkNode = {
71
+ key,
72
+ checked: checkedKeyDict.has(key),
73
+ indeterminate: false,
74
+ parent,
75
+ treeNode: item
76
+ };
77
+ // 对外部传值进行修补
78
+ switch (props.checkStrategy) {
79
+ case 'all':
80
+ {
81
+ if (parent?.checked) {
82
+ checkNode.checked = true;
83
+ if (!checkedKeyDict.has(key)) {
84
+ checkedKeyDict.set(key, true);
85
+ checkedKeys().push(key);
86
+ }
87
+ }
88
+ break;
89
+ }
90
+ case 'parent':
91
+ {
92
+ if (parent?.checked) {
93
+ checkNode.checked = true;
94
+ if (checkedKeyDict.has(key)) {
95
+ checkedKeyDict.delete(key);
96
+ pull(checkedKeys(), key);
97
+ } else {
98
+ checkedKeyDict.set(key, true);
99
+ }
100
+ }
101
+ break;
102
+ }
103
+ case 'child':
104
+ {
105
+ if (isEmpty(children)) {
106
+ if (!checkedKeyDict.has(key) && parent?.checked) {
107
+ checkedKeyDict.set(key, true);
108
+ checkedKeys().push(key);
109
+ }
110
+ } else {
111
+ if (checkedKeyDict.has(key)) {
112
+ checkedKeyDict.delete(key);
113
+ pull(checkedKeys(), key);
114
+ }
115
+ }
116
+ break;
117
+ }
118
+ }
119
+ if (isEmpty(children)) {
120
+ checkNode.checked = !!parent?.checked || checkedKeyDict.has(key);
121
+ } else {
122
+ Object.assign(checkNode, treeForEach(children, checkNode));
123
+ checkNode.totalChildCount = children?.length;
124
+ }
125
+ map.set(key, checkNode);
126
+ if (!checkNode.checked) {
127
+ checked = false;
128
+ } else {
129
+ checkedChildCount++;
130
+ }
131
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
132
+ if (checkNode.checked || checkNode.indeterminate) {
133
+ indeterminate = true;
134
+ }
135
+ });
136
+ return {
137
+ checked,
138
+ indeterminate,
139
+ totalChildCount: list?.length,
140
+ checkedChildCount
141
+ };
142
+ };
143
+ treeForEach(props.treeData);
144
+ return map;
145
+ });
146
+ const [draggableNode, setDraggableNode] = createSignal(null);
147
+ const isDraggable = createSelector(draggableNode);
148
+ const [draggableIndexes, setDraggableIndexes] = createSignal(null);
149
+ const getNodeByIndexes = (indexes, treeData) => {
150
+ if (indexes.length === 0 || !treeData) return;
151
+ if (indexes.length === 1) return treeData[indexes[0]];
152
+ return getNodeByIndexes(indexes.slice(1), getChildren(treeData[indexes[0]]));
153
+ };
154
+ return createComponent(Show, {
155
+ get when() {
156
+ return !isEmpty(props.treeData);
157
+ },
158
+ get fallback() {
159
+ return props.fallback;
160
+ },
161
+ get children() {
162
+ return createComponent(Element, {
163
+ get ["class"]() {
164
+ return cs(props.class, 'text-[var(--ant-color-text)]');
165
+ },
166
+ get style() {
167
+ return props.style;
168
+ },
169
+ get children() {
170
+ return createComponent(SingleLevelTree, mergeProps$1(props, {
171
+ get treeData() {
172
+ return props.treeData;
173
+ },
174
+ indent: 0,
175
+ selectedKeys: selectedKeys,
176
+ setSelectedKeys: setSelectedKeys,
177
+ draggableNode: draggableNode,
178
+ setDraggableNode: setDraggableNode,
179
+ draggableIndexes: draggableIndexes,
180
+ setDraggableIndexes: setDraggableIndexes,
181
+ isDraggable: isDraggable,
182
+ expandedKeys: expandedKeys,
183
+ setExpandedKeys: setExpandedKeys,
184
+ setCheckedKeys: setCheckedKeys,
185
+ getTitle: getTitle,
186
+ getKey: getKey,
187
+ getChildren: getChildren,
188
+ checkedMap: checkedMap,
189
+ getNodeByIndexes: indexes => getNodeByIndexes(indexes, props.treeData)
190
+ }));
191
+ }
192
+ });
193
+ }
194
+ });
195
+ }
196
+
197
+ export { Tree as default };
@@ -0,0 +1,31 @@
1
+ import { type Accessor, type JSX } from 'solid-js';
2
+ interface TreeForProps<T> {
3
+ each: T[] | undefined | null;
4
+ fallback?: JSX.Element;
5
+ /**
6
+ * 下一层的 each
7
+ */
8
+ nextEach: (item: T) => T[] | undefined | null;
9
+ expanded?: (item: T, options: {
10
+ index: Accessor<number>;
11
+ parentList: T[] | undefined;
12
+ parentIndexes: number[] | undefined;
13
+ }) => boolean;
14
+ /**
15
+ * 监听某个 child 隐藏或显示
16
+ * 某些情况下,父级的显示与否取决于是否 child 是否显示
17
+ */
18
+ onChildChange?: (child: T, when: boolean) => void;
19
+ parentList?: T[] | undefined;
20
+ parentIndexes?: number[];
21
+ children: (item: T, options: {
22
+ index: Accessor<number>;
23
+ parentList: T[] | undefined;
24
+ parentIndexes: number[] | undefined;
25
+ isParent: Accessor<boolean>;
26
+ isEmptyChildren: Accessor<boolean>;
27
+ onChildChange?: (child: T, when: boolean) => void;
28
+ }) => JSX.Element;
29
+ }
30
+ declare function TreeFor<T>(props: TreeForProps<T>): JSX.Element;
31
+ export default TreeFor;