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
package/src/Input.tsx DELETED
@@ -1,202 +0,0 @@
1
- import { isNil, omit } from 'lodash-es'
2
- import { Show, createMemo, splitProps } from 'solid-js'
3
- import type { JSX, JSXElement, Component } from 'solid-js'
4
- import cs from 'classnames'
5
- import createControllableValue from './hooks/createControllableValue'
6
- import { Dynamic } from 'solid-js/web'
7
- import Compact from './Compact'
8
-
9
- type CommonInputProps<T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement> =
10
- JSX.CustomAttributes<T> & {
11
- textarea?: boolean
12
- defaultValue?: string | undefined
13
- value?: string | undefined
14
- addonBefore?: JSXElement
15
- addonAfter?: JSXElement
16
- prefix?: JSXElement
17
- suffix?: JSXElement
18
- placeholder?: string
19
- /**
20
- * 仅供 InputNumber 使用
21
- */
22
- actions?: JSXElement
23
- /**
24
- * 设置校验状态
25
- */
26
- status?: 'error' | 'warning'
27
- onChange?: JSX.InputEventHandler<T, InputEvent>
28
- onPressEnter?: JSX.EventHandler<T, KeyboardEvent>
29
- onKeyDown?: JSX.EventHandler<T, KeyboardEvent>
30
- }
31
-
32
- const statusClassDict = {
33
- default: (disabled: boolean) =>
34
- cs(
35
- 'ant-[border:1px_solid_var(--ant-color-border)]',
36
- !disabled &&
37
- 'hover:ant-border-[var(--primary-color)] focus-within:ant-border-[var(--primary-color)] focus-within:ant-[box-shadow:0_0_0_2px_rgba(5,145,255,0.1)]',
38
- ),
39
- error: (disabled: boolean) =>
40
- cs(
41
- 'ant-[border:1px_solid_var(--ant-color-error)]',
42
- !disabled &&
43
- 'hover:ant-border-[var(--light-error-color)] focus-within:ant-[box-shadow:0_0_0_2px_rgba(255,38,5,.06)]',
44
- ),
45
- warning: (disabled: boolean) =>
46
- cs(
47
- 'ant-[border:1px_solid_var(--warning-color)]',
48
- !disabled &&
49
- 'hover:ant-border-[var(--color-warning-border-hover)] focus-within:ant-[box-shadow:0_0_0_2px_rgba(255,215,5,.1)]',
50
- ),
51
- }
52
-
53
- export function CommonInput<T extends HTMLInputElement | HTMLTextAreaElement = HTMLInputElement>(
54
- props: CommonInputProps<T> &
55
- Omit<JSX.InputHTMLAttributes<T>, 'onChange' | 'onInput' | 'onKeyDown'>,
56
- ) {
57
- const [{ style, onChange, onPressEnter, onKeyDown }, inputProps] = splitProps(props, [
58
- 'defaultValue',
59
- 'value',
60
- 'class',
61
- 'addonBefore',
62
- 'addonAfter',
63
- 'suffix',
64
- 'onChange',
65
- 'onPressEnter',
66
- 'onKeyDown',
67
- 'actions',
68
- 'style',
69
- ])
70
-
71
- const [_, controllableProps] = splitProps(props, ['onChange'])
72
- const [value, setValue] = createControllableValue(controllableProps)
73
-
74
- const inputWrapClass = createMemo(() =>
75
- cs(
76
- 'ant-px-11px ant-py-4px ant-rounded-6px',
77
- !props.textarea && 'ant-h-32px',
78
- props.addonBefore ? 'ant-rounded-l-0' : Compact.compactItemRoundedLeftClass,
79
- props.addonAfter ? 'ant-rounded-r-0' : Compact.compactItemRoundedRightClass,
80
- statusClassDict[props.status ?? 'default'](!!inputProps.disabled),
81
- Compact.compactItemRounded0Class,
82
- Compact.compactItemZIndexClass,
83
- ),
84
- )
85
- const hasPrefixOrSuffix = createMemo(
86
- () => !isNil(props.prefix) || !isNil(props.suffix) || !isNil(props.actions),
87
- )
88
- const inputJSX = (
89
- <Dynamic<Component<JSX.InputHTMLAttributes<HTMLInputElement>>>
90
- component={
91
- (props.textarea ? 'textarea' : 'input') as unknown as Component<
92
- JSX.InputHTMLAttributes<HTMLInputElement>
93
- >
94
- }
95
- {...(inputProps as JSX.InputHTMLAttributes<HTMLInputElement>)}
96
- class={cs(
97
- 'ant-w-full ant-[outline:none] ant-text-14px',
98
- !hasPrefixOrSuffix() && inputWrapClass(),
99
- inputProps.disabled &&
100
- 'ant-bg-[var(--ant-color-bg-container-disabled)] ant-cursor-not-allowed',
101
- )}
102
- value={value() ?? ''}
103
- onInput={e => {
104
- setValue(e.target.value)
105
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
106
- onChange?.(e as any)
107
-
108
- if (Object.keys(props).includes('value')) {
109
- e.target.value = value()
110
- }
111
- }}
112
- onKeyDown={e => {
113
- if (e.key === 'Enter') {
114
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
115
- onPressEnter?.(e as any)
116
- }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
119
- onKeyDown?.(e as any)
120
- }}
121
- />
122
- )
123
-
124
- return (
125
- <div class={cs('ant-flex ant-w-full', Compact.compactItemClass)} style={style}>
126
- <Show when={props.addonBefore}>
127
- <div
128
- class={cs(
129
- 'ant-shrink-0 ant-flex ant-justify-center ant-items-center ant-px-11px ant-bg-[rgba(0,0,0,.02)] ant-[border:1px_solid_var(--ant-color-border)] ant-border-r-0 ant-rounded-l-6px ant-text-14px',
130
- Compact.compactItemRounded0Class,
131
- Compact.compactItemRoundedLeftClass,
132
- )}
133
- >
134
- {props.addonBefore}
135
- </div>
136
- </Show>
137
-
138
- <Show when={hasPrefixOrSuffix()} fallback={inputJSX}>
139
- <div
140
- class={cs(
141
- 'ant-flex ant-items-center ant-w-full ant-relative ant-[--input-after-display:none] hover:ant-[--input-after-display:block] p:hover-child[input]:ant-border-[var(--primary-color)]',
142
- inputWrapClass(),
143
- )}
144
- >
145
- <Show when={props.prefix}>
146
- <div class="ant-mr-4px">{props.prefix}</div>
147
- </Show>
148
-
149
- {inputJSX}
150
-
151
- <Show when={props.suffix}>
152
- <div class="ant-ml-4px">{props.suffix}</div>
153
- </Show>
154
-
155
- <Show when={props.actions}>
156
- <div class="ant-[display:var(--input-after-display)] ant-absolute ant-top-0 ant-bottom-0 ant-right-0 ant-h-[calc(100%-2px)] ant-translate-y-1px -ant-translate-x-1px">
157
- {props.actions}
158
- </div>
159
- </Show>
160
- </div>
161
- </Show>
162
-
163
- <Show when={props.addonAfter}>
164
- <div
165
- class={cs(
166
- 'ant-shrink-0 ant-flex ant-justify-center ant-items-center ant-px-11px ant-bg-[rgba(0,0,0,.02)] ant-[border:1px_solid_var(--ant-color-border)] ant-border-l-0 ant-rounded-r-6px ant-text-14px',
167
- Compact.compactItemRounded0Class,
168
- Compact.compactItemRoundedRightClass,
169
- )}
170
- >
171
- {props.addonAfter}
172
- </div>
173
- </Show>
174
- </div>
175
- )
176
- }
177
-
178
- export type InputProps = Omit<CommonInputProps, 'actions' | 'textarea'> &
179
- Omit<JSX.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'onInput' | 'onKeyDown'>
180
-
181
- export type TextAreaProps = Omit<
182
- CommonInputProps<HTMLTextAreaElement>,
183
- 'prefix' | 'suffix' | 'textarea'
184
- > &
185
- Omit<
186
- JSX.TextareaHTMLAttributes<HTMLTextAreaElement>,
187
- 'actions' | 'onChange' | 'onInput' | 'onKeyDown'
188
- >
189
-
190
- const Input: Component<InputProps> & {
191
- TextArea: Component<TextAreaProps>
192
- } = props => {
193
- return <CommonInput {...omit(props, ['actions'])} />
194
- }
195
-
196
- Input.TextArea = props => {
197
- return (
198
- <CommonInput<HTMLTextAreaElement> textarea {...omit(props, ['prefix', 'suffix', 'actions'])} />
199
- )
200
- }
201
-
202
- export default Input
@@ -1,46 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest'
2
- import { fireEvent, render } from '@solidjs/testing-library'
3
- import InputNumber from './InputNumber'
4
- import '@testing-library/jest-dom'
5
-
6
- describe('InputNumber component', () => {
7
- it('onChange', () => {
8
- const onChange = vi.fn()
9
- const { getByPlaceholderText } = render(() => (
10
- <InputNumber placeholder="input-number" onChange={onChange} />
11
- ))
12
-
13
- const input: HTMLInputElement = getByPlaceholderText('input-number')
14
- input.value = '123'
15
- fireEvent.input(input)
16
- expect(onChange).toHaveBeenLastCalledWith(123)
17
-
18
- input.value = '1234'
19
- fireEvent.input(input)
20
- expect(onChange).toBeCalledTimes(2)
21
- expect(onChange).toHaveBeenLastCalledWith(1234)
22
-
23
- input.value = '1234'
24
- fireEvent.input(input)
25
- expect(onChange).toBeCalledTimes(2)
26
-
27
- input.value = '1234.'
28
- fireEvent.input(input)
29
- expect(onChange).toBeCalledTimes(2)
30
-
31
- input.value = '1234.0'
32
- fireEvent.input(input)
33
- expect(onChange).toBeCalledTimes(2)
34
-
35
- input.value = '1234.01'
36
- fireEvent.input(input)
37
- expect(onChange).toBeCalledTimes(3)
38
-
39
- input.value = '123x'
40
- fireEvent.input(input)
41
- expect(onChange).toBeCalledTimes(3)
42
-
43
- fireEvent.blur(input)
44
- expect(onChange).toBeCalledTimes(3)
45
- })
46
- })
@@ -1,125 +0,0 @@
1
- import { type Component, createEffect, on, splitProps, untrack, createSignal, mergeProps } from 'solid-js'
2
- import { CommonInput, type InputProps } from './Input'
3
- import { clamp, isNil } from 'lodash-es'
4
- import { dispatchEventHandlerUnion } from './utils/solid'
5
-
6
- export interface InputNumberProps
7
- extends Omit<
8
- InputProps,
9
- 'defaultValue' | 'value' | 'onChange' | 'inputAfter' | 'onKeyDown' | 'min' | 'max' | 'suffix'
10
- > {
11
- defaultValue?: number | null | undefined
12
- value?: number | null | undefined
13
- onChange?: (value: number | null) => void
14
- min?: number
15
- max?: number
16
- }
17
-
18
- const isEmptyValue = (value: number | string | null | undefined) => isNil(value) || value === ''
19
-
20
- const actionBtnClass =
21
- 'ant-text-12px ant-flex ant-justify-center ant-items-center ant-h-1/2 ant-cursor-pointer ant-opacity-70 hover:ant-h-100% hover:ant-text-[var(--primary-color)] ant-transition-color ant-transition-height ant-transition-duration-500'
22
-
23
- const InputNumber: Component<InputNumberProps> = _props => {
24
- const props = mergeProps({
25
- min: -Infinity,
26
- max: Infinity,
27
- }, _props)
28
- const [_, inputProps] = splitProps(props, [
29
- 'defaultValue',
30
- 'value',
31
- 'onChange',
32
- 'onBlur',
33
- ])
34
-
35
- const clampValue = (v: number) => untrack(() => clamp(v, props.min, props.max))
36
-
37
- let prev: number | null = null
38
- const updatePrev = (v: number | null) => {
39
- if (prev === v) return
40
-
41
- prev = v
42
- props.onChange?.(prev)
43
- }
44
-
45
- const [value, setValue] = createSignal<number | string | null | undefined>(untrack(() => props.value ?? props.defaultValue))
46
- createEffect(on(() => props.value, () => {
47
- setValue(props.value)
48
- }, {
49
- defer: true
50
- }))
51
-
52
- const add = (addon: number) => {
53
- let newValue: number | null
54
- if (isEmptyValue(value())) {
55
- newValue = clampValue(addon)
56
- } else {
57
- const num = Number(value())
58
- newValue = Number.isNaN(num) ? null : clampValue(num + addon)
59
- }
60
-
61
- if (!Object.keys(props).includes('value')) {
62
- setValue(newValue)
63
- }
64
- updatePrev(newValue)
65
- }
66
- const up = () => {
67
- add(1)
68
- }
69
- const down = () => {
70
- add(-1)
71
- }
72
-
73
- return (
74
- <CommonInput
75
- {...inputProps}
76
- actions={
77
- <div class="ant-flex ant-flex-col ant-h-full ant-w-24px ant-[border-left:1px_solid_var(--ant-color-border)]">
78
- <div class={actionBtnClass} onClick={up}>
79
- <div class="i-ant-design:up-outlined" />
80
- </div>
81
- <div
82
- class={`ant-[border-top:1px_solid_var(--ant-color-border)] ${actionBtnClass}`}
83
- onClick={down}
84
- >
85
- <div class="i-ant-design:down-outlined" />
86
- </div>
87
- </div>
88
- }
89
- value={`${value() ?? ''}`}
90
- onKeyDown={e => {
91
- switch (e.key) {
92
- case 'ArrowUp':
93
- up()
94
- e.preventDefault()
95
- return
96
- case 'ArrowDown':
97
- down()
98
- e.preventDefault()
99
- }
100
- }}
101
- onChange={e => {
102
- const newValue = e.target.value
103
- setValue(newValue)
104
-
105
- let newValueNum: number | null = Number(newValue)
106
- if (Number.isNaN(newValueNum)) return
107
-
108
- if (isEmptyValue(newValue)) {
109
- newValueNum = null
110
- } else {
111
- newValueNum = clampValue(newValueNum)
112
- }
113
-
114
- updatePrev(newValueNum)
115
- }}
116
- onBlur={e => {
117
- setValue(props.value ?? prev)
118
-
119
- dispatchEventHandlerUnion(props.onBlur, e)
120
- }}
121
- />
122
- )
123
- }
124
-
125
- export default InputNumber
package/src/Modal.tsx DELETED
@@ -1,220 +0,0 @@
1
- import { type JSXElement, Show, createSignal, untrack, type Ref, mergeProps } from 'solid-js'
2
- import { Portal, render } from 'solid-js/web'
3
- import Button from './Button'
4
- import cs from 'classnames'
5
-
6
- export interface ModalInstance {
7
- open: () => void
8
- close: () => void
9
- /**
10
- * 与 close 相似,但关闭时会销毁 Modal 里的子元素
11
- * @returns
12
- */
13
- destroy: () => void
14
- }
15
-
16
- export interface ModalProps {
17
- ref?: Ref<ModalInstance>
18
- title?: JSXElement
19
- defaultOpen?: boolean
20
- width?: string
21
- height?: string
22
- children?: JSXElement
23
- /**
24
- * 垂直居中展示 Modal
25
- */
26
- centered?: boolean
27
- /**
28
- * 点击蒙层是否允许关闭
29
- * 默认 true
30
- */
31
- maskClosable?: boolean
32
- /**
33
- * 设置为 false 时隐藏关闭按钮
34
- */
35
- closeIcon?: boolean
36
- footer?: boolean | ((modal: ModalInstance) => JSXElement)
37
- /**
38
- * 返回 true,会自动关闭 modal
39
- */
40
- onOk?: () => boolean | Promise<boolean>
41
- afterClose?: () => void
42
- /**
43
- * 自定义渲染对话框
44
- */
45
- modalRender?: () => JSXElement
46
- }
47
-
48
- export interface MethodProps
49
- extends Pick<ModalProps, 'title' | 'children' | 'onOk' | 'afterClose'> {}
50
-
51
- function Modal(_props: ModalProps) {
52
- const props = mergeProps({ footer: true }, _props)
53
- const [open, setOpen] = createSignal(props.defaultOpen ?? false)
54
- const [hide, setHide] = createSignal(false)
55
- let cleanup: () => void
56
-
57
- const instance: ModalInstance = {
58
- open() {
59
- setOpen(true)
60
- setHide(false)
61
-
62
- const originOverflow = document.body.style.overflow
63
- document.body.style.overflow = 'hidden'
64
-
65
- const onKeyup = (e: KeyboardEvent) => {
66
- if (e.key === 'Escape') {
67
- instance.close()
68
- }
69
- }
70
- document.addEventListener('keyup', onKeyup)
71
-
72
- cleanup = () => {
73
- document.body.style.overflow = originOverflow
74
- document.removeEventListener('keyup', onKeyup)
75
- }
76
- },
77
- close() {
78
- setHide(true)
79
- cleanup()
80
- props.afterClose?.()
81
- },
82
- destroy() {
83
- setOpen(false)
84
- cleanup()
85
- props.afterClose?.()
86
- },
87
- }
88
- untrack(() => {
89
- if (typeof props.ref === 'function') {
90
- props.ref?.(instance)
91
- }
92
- })
93
-
94
- const [confirmLoading, setConfirmLoading] = createSignal(false)
95
-
96
- return (
97
- <Show when={open()}>
98
- <Portal>
99
- <div
100
- class={cs(
101
- 'ant-fixed ant-justify-center ant-inset-0 ant-bg-[rgba(0,0,0,.45)] ant-flex ant-z-1000',
102
- props.centered && 'ant-items-center',
103
- )}
104
- onClick={() => {
105
- if (props.maskClosable ?? true) {
106
- instance.close()
107
- }
108
- }}
109
- style={{ display: hide() ? 'none' : undefined }}
110
- >
111
- <Show when={typeof props.modalRender !== 'function'} fallback={props.modalRender!()}>
112
- <div
113
- class={cs(
114
- 'ant-absolute ant-px-24px ant-py-20px ant-rounded-8px ant-overflow-hidden ant-bg-white ant-flex ant-flex-col',
115
- // '!ant-[animation-duration:.5s]',
116
- !props.centered && 'ant-top-100px',
117
- )}
118
- onClick={e => {
119
- e.stopPropagation()
120
- }}
121
- style={{
122
- width: props.width ?? '520px',
123
- height: props.height,
124
- }}
125
- >
126
- {/* 关闭按钮 */}
127
- <Show when={props.closeIcon !== false}>
128
- <Button
129
- type="text"
130
- class={cs(
131
- 'ant-rm-size-btn !ant-w-22px !ant-h-22px !ant-flex !ant-justify-center !ant-items-center ant-text-center ant-text-18px !ant-absolute !ant-top-16px !ant-right-16px ant-z-1000 ant-text-[rgba(0,0,0,.45)] hover:!ant-text-[rgba(0,0,0,.88)]',
132
- )}
133
- onClick={() => {
134
- instance.close()
135
- }}
136
- >
137
- <span class="i-ant-design:close-outlined" />
138
- </Button>
139
- </Show>
140
-
141
- <div class="ant-text-[rgba(0,0,0,.88)] ant-text-16px ant-font-600 ant-mb-8px">
142
- {props.title}
143
- </div>
144
- <div class="ant-grow">{props.children}</div>
145
-
146
- <Show when={props.footer !== false}>
147
- <div class="ant-mt-12px">
148
- <Show
149
- when={typeof props.footer !== 'function'}
150
- fallback={typeof props.footer === 'function' && props.footer(instance)}
151
- >
152
- <div class="ant-flex ant-gap-8px ant-justify-end">
153
- <Button
154
- onClick={() => {
155
- instance.close()
156
- }}
157
- >
158
- 取消
159
- </Button>
160
- <Button
161
- type="primary"
162
- loading={confirmLoading()}
163
- // eslint-disable-next-line solid/reactivity, @typescript-eslint/no-misused-promises
164
- onClick={async () => {
165
- if (!props.onOk) return
166
-
167
- let res = props.onOk?.()
168
- if (res instanceof Promise) {
169
- setConfirmLoading(true)
170
- res = await res.finally(() => setConfirmLoading(false))
171
- }
172
- if (res) {
173
- instance.close()
174
- }
175
- }}
176
- >
177
- 确定
178
- </Button>
179
- </div>
180
- </Show>
181
- </div>
182
- </Show>
183
- </div>
184
- </Show>
185
- </div>
186
- </Portal>
187
- </Show>
188
- )
189
- }
190
-
191
- Modal.warning = (props: MethodProps) => {
192
- const div = document.createElement('div')
193
- document.body.appendChild(div)
194
- const dispose = render(
195
- () => (
196
- <Modal
197
- width="416px"
198
- maskClosable={false}
199
- closeIcon={false}
200
- {...props}
201
- title={
202
- <>
203
- <span class="i-ant-design:exclamation-circle ant-text-22px ant-mr-12px ant-text-[var(--warning-color)]" />
204
- {props.title}
205
- </>
206
- }
207
- children={<div class="ant-ml-34px">{props.children}</div>}
208
- defaultOpen
209
- afterClose={() => {
210
- document.body.removeChild(div)
211
- dispose()
212
- props.afterClose?.()
213
- }}
214
- />
215
- ),
216
- div,
217
- )
218
- }
219
-
220
- export default Modal
@@ -1,75 +0,0 @@
1
- import { type Component, type JSXElement, createSignal, mergeProps, untrack, splitProps } from 'solid-js'
2
- import Button from './Button'
3
- import Tooltip, { type TooltipProps } from './Tooltip'
4
-
5
- interface PopconfirmProps extends Pick<TooltipProps, 'placement' | 'arrow'> {
6
- title?: JSXElement
7
- content?: JSXElement
8
- children: JSXElement
9
- onCancel?: () => void
10
- onConfirm?: () => void
11
- /**
12
- * 确认按钮文字
13
- * 默认:确定
14
- */
15
- okText?: string
16
- /**
17
- * 取消按钮文字
18
- * 默认:取消
19
- */
20
- cancelText?: string
21
- }
22
-
23
- const Popconfirm: Component<PopconfirmProps> = props => {
24
- const mergedProps = mergeProps({ okText: '确定', cancelText: '取消' }, props)
25
- const [tooltipProps] = splitProps(props, ['placement', 'arrow'])
26
- const [open, setOpen] = createSignal(false)
27
-
28
- return (
29
- <Tooltip
30
- mode="light"
31
- trigger="click"
32
- open={open()}
33
- onOpenChange={setOpen}
34
- content={
35
- <div>
36
- <div class="ant-mb-8px ant-flex ant-items-center">
37
- <span class="i-ant-design:exclamation-circle-fill ant-text-#faad14" />
38
- <span class="ant-ml-8px ant-text-[rgba(0,0,0,0.88)] ant-font-600">{mergedProps.title}</span>
39
- </div>
40
-
41
- <div class="ant-ml-22px ant-mb-8px ant-text-[rgba(0,0,0,0.88)]">{mergedProps.content}</div>
42
-
43
- <div class="ant-text-right">
44
- <Button
45
- class="ant-ml-8px"
46
- size="small"
47
- onClick={() => {
48
- setOpen(false)
49
- untrack(() => mergedProps.onCancel?.())
50
- }}
51
- >
52
- {mergedProps.cancelText}
53
- </Button>
54
- <Button
55
- class="ant-ml-8px"
56
- type="primary"
57
- size="small"
58
- onClick={() => {
59
- setOpen(false)
60
- untrack(() => mergedProps.onConfirm?.())
61
- }}
62
- >
63
- {mergedProps.okText}
64
- </Button>
65
- </div>
66
- </div>
67
- }
68
- {...tooltipProps}
69
- >
70
- {mergedProps.children}
71
- </Tooltip>
72
- )
73
- }
74
-
75
- export default Popconfirm
package/src/Popover.tsx DELETED
@@ -1,30 +0,0 @@
1
- import { type Component, type JSXElement, Show } from 'solid-js'
2
- import Tooltip, { Content, type TooltipProps } from './Tooltip'
3
-
4
- interface PopoverProps extends TooltipProps {
5
- title?: JSXElement
6
- }
7
-
8
- const Popover: Component<PopoverProps> = props => {
9
- return (
10
- <Tooltip
11
- mode="light"
12
- {...props}
13
- content={close =>
14
- <div>
15
- <Show when={props.title}>
16
- <div class="ant-mb-8px ant-flex ant-items-center">
17
- <span class="ant-text-[rgba(0,0,0,0.88)] ant-font-600">{props.title}</span>
18
- </div>
19
- </Show>
20
-
21
- <div class="ant-text-[rgba(0,0,0,0.88)]">
22
- <Content content={props.content} close={close} />
23
- </div>
24
- </div>
25
- }
26
- />
27
- )
28
- }
29
-
30
- export default Popover