@tendaui/components 1.2.4 → 1.3.0

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 (406) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +176 -176
  3. package/_util/scroll.ts +9 -0
  4. package/alert/_example/base.tsx +13 -0
  5. package/alert/_example/collapse.tsx +15 -0
  6. package/badge/_example/base.tsx +10 -0
  7. package/badge/_example/count.tsx +29 -0
  8. package/badge/_example/custom-color.tsx +32 -0
  9. package/badge/_example/dot.tsx +26 -0
  10. package/badge/_example/max-count.tsx +26 -0
  11. package/badge/_example/offset.tsx +29 -0
  12. package/badge/_example/shape.tsx +32 -0
  13. package/badge/_example/show-zero.tsx +23 -0
  14. package/badge/_example/size.tsx +35 -0
  15. package/badge/_example/standalone.tsx +14 -0
  16. package/badge/_example/text-count.tsx +26 -0
  17. package/badge/_example/with-button.tsx +23 -0
  18. package/button/_example/block.tsx +18 -0
  19. package/button/_example/disabled.tsx +22 -0
  20. package/button/_example/ghost.tsx +24 -0
  21. package/button/_example/link.tsx +15 -0
  22. package/button/_example/loading.tsx +19 -0
  23. package/button/_example/shape.tsx +18 -0
  24. package/button/_example/size.tsx +18 -0
  25. package/button/_example/suffix.tsx +16 -0
  26. package/button/_example/theme.tsx +14 -0
  27. package/button/_example/variant-base.tsx +24 -0
  28. package/button/_example/variant-dashed.tsx +24 -0
  29. package/button/_example/variant-outline.tsx +24 -0
  30. package/button/_example/variant-text.tsx +24 -0
  31. package/checkbox/_example/base.tsx +8 -0
  32. package/checkbox/_example/controlled.tsx +11 -0
  33. package/checkbox/_example/group-disabled.tsx +13 -0
  34. package/checkbox/_example/group-with-check-all.tsx +22 -0
  35. package/checkbox/_example/group-with-max.tsx +17 -0
  36. package/checkbox/_example/group-with-options.tsx +18 -0
  37. package/checkbox/_example/group.tsx +17 -0
  38. package/checkbox/_example/states.tsx +19 -0
  39. package/color-picker/ColorPicker.tsx +16 -2
  40. package/color-picker/_example/base.tsx +12 -0
  41. package/color-picker/_example/borderless.tsx +17 -0
  42. package/color-picker/_example/clearable.tsx +12 -0
  43. package/color-picker/_example/disabled.tsx +17 -0
  44. package/color-picker/_example/formats.tsx +30 -0
  45. package/color-picker/_example/manual-input.tsx +39 -0
  46. package/color-picker/_example/recent-colors.tsx +19 -0
  47. package/color-picker/_example/swatch-colors.tsx +28 -0
  48. package/color-picker/_example/with-alpha.tsx +21 -0
  49. package/color-picker/components/panel/format/inputs.tsx +1 -1
  50. package/color-picker/components/panel/index.tsx +13 -0
  51. package/color-picker/components/trigger.tsx +64 -13
  52. package/color-picker/defaultProps.ts +4 -1
  53. package/color-picker/utils/color-picker/cmyk.ts +89 -89
  54. package/color-picker/utils/color-picker/color.ts +467 -467
  55. package/color-picker/utils/color-picker/constants.ts +187 -187
  56. package/color-picker/utils/color-picker/draggable.ts +99 -100
  57. package/color-picker/utils/color-picker/format.ts +90 -95
  58. package/color-picker/utils/color-picker/gradient.ts +237 -243
  59. package/color-picker/utils/color-picker/index.ts +7 -7
  60. package/color-picker/utils/color-picker/types.ts +33 -33
  61. package/config-provider/ConfigContext.tsx +1 -0
  62. package/config-provider/ConfigProvider.tsx +18 -1
  63. package/config-provider/type.ts +5 -0
  64. package/dialog/_example/base.tsx +27 -0
  65. package/dialog/_example/confirm-loading.tsx +32 -0
  66. package/dialog/_example/custom-buttons.tsx +24 -0
  67. package/dialog/_example/full-screen.tsx +26 -0
  68. package/dialog/_example/hide-buttons.tsx +39 -0
  69. package/dialog/_example/modeless.tsx +25 -0
  70. package/dialog/_example/placement.tsx +40 -0
  71. package/dialog/_example/plugin-example.tsx +69 -0
  72. package/dialog/_example/themes.tsx +41 -0
  73. package/dialog/hooks/useDialogPosition.ts +35 -35
  74. package/drawer/Drawer.tsx +17 -9
  75. package/drawer/_example/custom-header-footer.tsx +29 -0
  76. package/drawer/_example/default.tsx +20 -0
  77. package/drawer/_example/events.tsx +53 -0
  78. package/drawer/_example/no-footer.tsx +20 -0
  79. package/drawer/_example/no-overlay.tsx +20 -0
  80. package/drawer/_example/placement.tsx +43 -0
  81. package/drawer/_example/size-draggable.tsx +26 -0
  82. package/drawer/_example/size.tsx +40 -0
  83. package/drawer/defaultProps.ts +1 -1
  84. package/fireworks/Fireworks.tsx +1 -10
  85. package/fireworks/index.ts +0 -1
  86. package/fireworks/type.ts +0 -1
  87. package/form/_example/complex.tsx +76 -0
  88. package/form/_example/default.tsx +58 -0
  89. package/form/_example/disabled.tsx +26 -0
  90. package/form/_example/form-list.tsx +74 -0
  91. package/form/_example/inline-layout.tsx +20 -0
  92. package/form/_example/label-align.tsx +46 -0
  93. package/form/_example/methods.tsx +66 -0
  94. package/form/_example/validation.tsx +71 -0
  95. package/form/hooks/useFormItemStyle.tsx +19 -7
  96. package/form/index.ts +20 -2
  97. package/form/type.ts +519 -519
  98. package/global-config/default-config.ts +95 -95
  99. package/global-config/locale/ar_KW.ts +259 -270
  100. package/global-config/locale/en_US.ts +265 -280
  101. package/global-config/locale/it_IT.ts +264 -287
  102. package/global-config/locale/ja_JP.ts +264 -279
  103. package/global-config/locale/ko_KR.ts +264 -279
  104. package/global-config/locale/ru_RU.ts +277 -288
  105. package/global-config/locale/zh_CN.ts +265 -279
  106. package/global-config/locale/zh_TW.ts +265 -279
  107. package/global-config/mobile/default-config.ts +6 -6
  108. package/global-config/mobile/locale/ar_KW.ts +112 -113
  109. package/global-config/mobile/locale/en_US.ts +113 -114
  110. package/global-config/mobile/locale/it_IT.ts +113 -114
  111. package/global-config/mobile/locale/ja_JP.ts +100 -101
  112. package/global-config/mobile/locale/ko_KR.ts +100 -101
  113. package/global-config/mobile/locale/ru_RU.ts +112 -113
  114. package/global-config/mobile/locale/zh_CN.ts +100 -101
  115. package/global-config/mobile/locale/zh_TW.ts +100 -101
  116. package/global-config/t.ts +111 -111
  117. package/hooks/useDebounce.ts +27 -0
  118. package/hooks/useLastest.ts +6 -2
  119. package/hooks/useResizeObserve.ts +0 -1
  120. package/index.ts +1 -1
  121. package/input/Input.tsx +53 -10
  122. package/input/_example/auto-width.tsx +14 -0
  123. package/input/_example/borderless.tsx +17 -0
  124. package/input/_example/clearable.tsx +14 -0
  125. package/input/_example/default.tsx +10 -0
  126. package/input/_example/disabled-readonly.tsx +12 -0
  127. package/input/_example/events.tsx +42 -0
  128. package/input/_example/group.tsx +14 -0
  129. package/input/_example/label-suffix.tsx +12 -0
  130. package/input/_example/max-length.tsx +11 -0
  131. package/input/_example/password.tsx +14 -0
  132. package/input/_example/sizes.tsx +12 -0
  133. package/input/_example/status.tsx +13 -0
  134. package/input/_example/text-align.tsx +12 -0
  135. package/input/_example/with-icon.tsx +13 -0
  136. package/input/type.ts +3 -0
  137. package/input/useLengthLimit.ts +122 -0
  138. package/input-number/InputNumber.tsx +124 -124
  139. package/input-number/_example/align.tsx +23 -0
  140. package/input-number/_example/auto-width.tsx +8 -0
  141. package/input-number/_example/default.tsx +8 -0
  142. package/input-number/_example/events.tsx +45 -0
  143. package/input-number/_example/format.tsx +27 -0
  144. package/input-number/_example/large-number.tsx +17 -0
  145. package/input-number/_example/min-max.tsx +14 -0
  146. package/input-number/_example/sizes.tsx +35 -0
  147. package/input-number/_example/status.tsx +65 -0
  148. package/input-number/_example/step-and-decimal.tsx +14 -0
  149. package/input-number/_example/themes.tsx +21 -0
  150. package/input-number/_example/with-suffix.tsx +12 -0
  151. package/input-number/defaultProps.ts +17 -17
  152. package/input-number/index.ts +9 -9
  153. package/input-number/style/css.js +1 -1
  154. package/input-number/style/index.js +1 -1
  155. package/input-number/useInputNumber.tsx +270 -270
  156. package/ip-input/_example/controlled.tsx +26 -0
  157. package/ip-input/_example/default.tsx +12 -0
  158. package/ip-input/_example/full-featured.tsx +32 -0
  159. package/ip-input/_example/ipv6.tsx +23 -0
  160. package/ip-input/_example/keyboard-navigation.tsx +19 -0
  161. package/ip-input/_example/paste-demo.tsx +23 -0
  162. package/ip-input/_example/states.tsx +21 -0
  163. package/ip-input/_example/with-cidr.tsx +23 -0
  164. package/layout/_example/combine-left.tsx +54 -0
  165. package/layout/_example/combine-right.tsx +54 -0
  166. package/layout/_example/custom-aside-width.tsx +56 -0
  167. package/layout/_example/custom-height.tsx +45 -0
  168. package/layout/_example/double-sidebar.tsx +57 -0
  169. package/layout/_example/side-navigation-right.tsx +51 -0
  170. package/layout/_example/side-navigation.tsx +51 -0
  171. package/layout/_example/top-navigation.tsx +41 -0
  172. package/list/ListItem.tsx +36 -36
  173. package/list/ListItemMeta.tsx +40 -40
  174. package/list/_example/async-loading.tsx +46 -0
  175. package/list/_example/default.tsx +23 -0
  176. package/list/_example/header-footer.tsx +40 -0
  177. package/list/_example/multiline.tsx +24 -0
  178. package/list/_example/scroll-loading.tsx +69 -0
  179. package/list/_example/sizes.tsx +45 -0
  180. package/list/_example/split.tsx +36 -0
  181. package/list/_example/stripe.tsx +24 -0
  182. package/list/_example/virtual-scroll.tsx +51 -0
  183. package/list/_example/with-image.tsx +26 -0
  184. package/list/defaultProps.ts +11 -11
  185. package/list/hooks/useListVirtualScroll.ts +82 -82
  186. package/list/style/css.js +1 -1
  187. package/list/style/index.js +1 -1
  188. package/loading/_example/default.tsx +6 -0
  189. package/loading/_example/delay.tsx +53 -0
  190. package/loading/_example/fullscreen.tsx +29 -0
  191. package/loading/_example/inherit-color.tsx +24 -0
  192. package/loading/_example/no-overlay.tsx +15 -0
  193. package/loading/_example/sizes.tsx +25 -0
  194. package/loading/_example/with-text.tsx +12 -0
  195. package/loading/_example/wrapper.tsx +30 -0
  196. package/locale/LocalReceiver.ts +55 -55
  197. package/locale/ar_KW.ts +7 -7
  198. package/locale/en_US.ts +7 -7
  199. package/locale/it_IT.ts +6 -6
  200. package/locale/ja_JP.ts +6 -6
  201. package/locale/ko_KR.ts +6 -6
  202. package/locale/ru_RU.ts +6 -6
  203. package/locale/zh_CN.ts +5 -5
  204. package/locale/zh_TW.ts +7 -7
  205. package/notification/_example/default.tsx +31 -0
  206. package/notification/_example/long-content.tsx +37 -0
  207. package/notification/_example/stacking.tsx +40 -0
  208. package/notification/_example/types.tsx +78 -0
  209. package/notification/_example/usage-example.tsx +62 -0
  210. package/package.json +4 -3
  211. package/popup/Popup.tsx +17 -5
  212. package/popup/_example/controlled.tsx +32 -0
  213. package/popup/_example/custom-content.tsx +64 -0
  214. package/popup/_example/default.tsx +19 -0
  215. package/popup/_example/delay.tsx +35 -0
  216. package/popup/_example/disabled.tsx +17 -0
  217. package/popup/_example/no-arrow.tsx +17 -0
  218. package/popup/_example/placements.tsx +61 -0
  219. package/popup/_example/triggers.tsx +26 -0
  220. package/radio/_example/allow-uncheck.tsx +19 -0
  221. package/radio/_example/button-style.tsx +40 -0
  222. package/radio/_example/controlled.tsx +13 -0
  223. package/radio/_example/default.tsx +13 -0
  224. package/radio/_example/group-disabled.tsx +22 -0
  225. package/radio/_example/group-with-options.tsx +20 -0
  226. package/radio/_example/group.tsx +19 -0
  227. package/radio/_example/sizes.tsx +37 -0
  228. package/radio/_example/states.tsx +20 -0
  229. package/select/_example/collapsed.tsx +30 -0
  230. package/select/_example/creatable.tsx +36 -0
  231. package/select/_example/custom-content.tsx +26 -0
  232. package/select/_example/default.tsx +29 -0
  233. package/select/_example/disabled.tsx +20 -0
  234. package/select/_example/filterable.tsx +27 -0
  235. package/select/_example/group-options.tsx +44 -0
  236. package/select/_example/label-suffix.tsx +24 -0
  237. package/select/_example/loading.tsx +19 -0
  238. package/select/_example/multiple.tsx +31 -0
  239. package/select/_example/sizes.tsx +20 -0
  240. package/select/_example/status.tsx +27 -0
  241. package/select/type.ts +382 -382
  242. package/select-input/type.ts +280 -280
  243. package/slider/Slider.tsx +13 -5
  244. package/slider/SliderHandleButton.tsx +50 -50
  245. package/slider/_example/custom-label.tsx +19 -0
  246. package/slider/_example/default.tsx +14 -0
  247. package/slider/_example/disabled.tsx +17 -0
  248. package/slider/_example/marks.tsx +31 -0
  249. package/slider/_example/range.tsx +16 -0
  250. package/slider/_example/step.tsx +14 -0
  251. package/slider/_example/vertical.tsx +26 -0
  252. package/slider/_example/with-input-number.tsx +21 -0
  253. package/slider/defaultProps.ts +15 -15
  254. package/slider/style/css.js +1 -1
  255. package/slider/style/index.js +1 -1
  256. package/slider/type.ts +1 -1
  257. package/styles/_global.scss +40 -40
  258. package/styles/_vars.scss +374 -358
  259. package/styles/components/alert/_index.scss +175 -175
  260. package/styles/components/alert/_vars.scss +41 -41
  261. package/styles/components/badge/_index.scss +71 -71
  262. package/styles/components/badge/_vars.scss +26 -26
  263. package/styles/components/button/_index.scss +499 -499
  264. package/styles/components/button/_mixins.scss +40 -40
  265. package/styles/components/button/_vars.scss +121 -121
  266. package/styles/components/checkbox/_index.scss +158 -158
  267. package/styles/components/checkbox/_var.scss +59 -59
  268. package/styles/components/color-picker/_index.scss +586 -586
  269. package/styles/components/color-picker/_vars.scss +79 -79
  270. package/styles/components/dialog/_animate.scss +133 -133
  271. package/styles/components/dialog/_index.scss +310 -312
  272. package/styles/components/dialog/_vars.scss +60 -60
  273. package/styles/components/drawer/_index.scss +206 -205
  274. package/styles/components/drawer/_var.scss +55 -55
  275. package/styles/components/fireworks/_index.scss +86 -86
  276. package/styles/components/fireworks/_vars.scss +5 -5
  277. package/styles/components/form/_index.scss +175 -174
  278. package/styles/components/form/_mixins.scss +74 -74
  279. package/styles/components/form/_vars.scss +101 -101
  280. package/styles/components/input/_index.scss +350 -350
  281. package/styles/components/input/_mixins.scss +120 -118
  282. package/styles/components/input/_vars.scss +130 -130
  283. package/styles/components/input-number/_index.scss +340 -339
  284. package/styles/components/input-number/_vars.scss +56 -56
  285. package/styles/components/ip-input/_index.scss +277 -277
  286. package/styles/components/layout/_index.scss +47 -47
  287. package/styles/components/layout/_vars.scss +19 -19
  288. package/styles/components/layout/doc.scss +74 -74
  289. package/styles/components/list/_index.scss +172 -172
  290. package/styles/components/list/_vars.scss +42 -42
  291. package/styles/components/loading/_index.scss +113 -113
  292. package/styles/components/loading/_vars.scss +40 -40
  293. package/styles/components/notification/_index.scss +144 -144
  294. package/styles/components/notification/_mixins.scss +13 -13
  295. package/styles/components/notification/_vars.scss +60 -60
  296. package/styles/components/popup/_index.scss +78 -78
  297. package/styles/components/popup/_mixin.scss +149 -149
  298. package/styles/components/popup/_vars.scss +33 -33
  299. package/styles/components/radio/_index.scss +376 -376
  300. package/styles/components/radio/_vars.scss +89 -89
  301. package/styles/components/select/_index.scss +291 -291
  302. package/styles/components/select/_var.scss +64 -64
  303. package/styles/components/select-input/_index.scss +5 -5
  304. package/styles/components/select-input/_var.scss +4 -4
  305. package/styles/components/slider/_index.scss +241 -241
  306. package/styles/components/slider/_vars.scss +51 -51
  307. package/styles/components/switch/_index.scss +248 -165
  308. package/styles/components/switch/_vars.scss +63 -63
  309. package/styles/components/table/_index.scss +194 -186
  310. package/styles/components/table/_var.scss +52 -52
  311. package/styles/components/tabs/_index.scss +165 -166
  312. package/styles/components/tabs/_mixins.scss +11 -11
  313. package/styles/components/tabs/_vars.scss +72 -72
  314. package/styles/components/tag/_index.scss +317 -317
  315. package/styles/components/tag/_var.scss +86 -86
  316. package/styles/components/tag-input/_index.scss +164 -164
  317. package/styles/components/tag-input/_vars.scss +17 -17
  318. package/styles/components/tooltip/_index.scss +104 -0
  319. package/styles/components/tooltip/_vars.scss +23 -0
  320. package/styles/mixins/_focus.scss +8 -8
  321. package/styles/mixins/_layout.scss +32 -32
  322. package/styles/mixins/_reset.scss +11 -11
  323. package/styles/mixins/_scrollbar.scss +32 -32
  324. package/styles/mixins/_text.scss +50 -50
  325. package/styles/themes/_dark.scss +169 -169
  326. package/styles/themes/_font.scss +69 -69
  327. package/styles/themes/_index.scss +5 -5
  328. package/styles/themes/_light.scss +170 -170
  329. package/styles/themes/_radius.scss +9 -9
  330. package/styles/themes/_size.scss +68 -68
  331. package/styles/utilities/_animation.scss +58 -58
  332. package/styles/utilities/_tips.scss +10 -10
  333. package/switch/_example/async-change.tsx +25 -0
  334. package/switch/_example/before-change.tsx +22 -0
  335. package/switch/_example/controlled.tsx +14 -0
  336. package/switch/_example/custom-value.tsx +21 -0
  337. package/switch/_example/default.tsx +6 -0
  338. package/switch/_example/disabled.tsx +25 -0
  339. package/switch/_example/loading.tsx +17 -0
  340. package/switch/_example/sizes.tsx +21 -0
  341. package/switch/_example/with-label.tsx +21 -0
  342. package/tab/TabPanel.tsx +9 -6
  343. package/tab/_example/addable.tsx +45 -0
  344. package/tab/_example/card-theme.tsx +22 -0
  345. package/tab/_example/default.tsx +22 -0
  346. package/tab/_example/disabled.tsx +38 -0
  347. package/tab/_example/lazy.tsx +25 -0
  348. package/tab/_example/placement.tsx +36 -0
  349. package/tab/_example/removable.tsx +31 -0
  350. package/tab/_example/sizes.tsx +31 -0
  351. package/tab/_example/with-action.tsx +26 -0
  352. package/table/Cell.tsx +3 -6
  353. package/table/Ellipsis.tsx +73 -0
  354. package/table/_example/alignment.tsx +46 -0
  355. package/table/_example/auto-width.tsx +47 -0
  356. package/table/_example/bordered-stripe-hover.tsx +42 -0
  357. package/table/_example/bordered.tsx +42 -0
  358. package/table/_example/cell-click.tsx +52 -0
  359. package/table/_example/complex.tsx +82 -0
  360. package/table/_example/custom-cell.tsx +68 -0
  361. package/table/_example/custom-empty.tsx +37 -0
  362. package/table/_example/custom-row-class-name.tsx +57 -0
  363. package/table/_example/default.tsx +42 -0
  364. package/table/_example/ellipsis.tsx +56 -0
  365. package/table/_example/empty.tsx +28 -0
  366. package/table/_example/fixed-width.tsx +48 -0
  367. package/table/_example/hover.tsx +42 -0
  368. package/table/_example/row-click.tsx +52 -0
  369. package/table/_example/sizes.tsx +57 -0
  370. package/table/_example/stripe.tsx +42 -0
  371. package/table/_example/vertical-align.tsx +110 -0
  372. package/table/hooks/useTableClassName.ts +3 -3
  373. package/table/index.ts +2 -0
  374. package/table/type.ts +1 -0
  375. package/tag/Tag.tsx +1 -1
  376. package/tag/_example/closable.tsx +44 -0
  377. package/tag/_example/default.tsx +17 -0
  378. package/tag/_example/disabled.tsx +19 -0
  379. package/tag/_example/sizes.tsx +18 -0
  380. package/tag/_example/variants.tsx +37 -0
  381. package/tag-input/_example/collapsed.tsx +27 -0
  382. package/tag-input/_example/controlled-uncontrolled.tsx +26 -0
  383. package/tag-input/_example/default.tsx +15 -0
  384. package/tag-input/_example/disabled-readonly.tsx +21 -0
  385. package/tag-input/_example/events.tsx +64 -0
  386. package/tag-input/_example/excess-display.tsx +27 -0
  387. package/tag-input/_example/max-tags.tsx +22 -0
  388. package/tag-input/_example/sizes.tsx +21 -0
  389. package/tag-input/_example/status.tsx +37 -0
  390. package/tag-input/_example/with-label.tsx +23 -0
  391. package/tag-input/hooks/useTagList.tsx +1 -1
  392. package/tooltip/Tooltip.tsx +76 -0
  393. package/tooltip/_example/base.tsx +26 -0
  394. package/tooltip/_example/custom-content.tsx +47 -0
  395. package/tooltip/_example/placement.tsx +33 -0
  396. package/tooltip/_example/theme.tsx +34 -0
  397. package/tooltip/defaultProps.ts +14 -0
  398. package/tooltip/index.ts +7 -0
  399. package/tooltip/style/index.js +1 -0
  400. package/tooltip/type.ts +99 -0
  401. package/utils/input-number/large-number.ts +423 -423
  402. package/utils/input-number/number.ts +257 -257
  403. package/utils/log/index.ts +3 -3
  404. package/utils/log/log.ts +29 -30
  405. package/utils/log/types.ts +9 -12
  406. package/utils/style.ts +58 -58
@@ -1,257 +1,257 @@
1
- import { isUndefined, isString, isNumber } from "lodash-es";
2
- /** 普通数相关方法 */
3
- import {
4
- compareNumber,
5
- formatENumber,
6
- largeNumberToFixed,
7
- isInputNumber,
8
- largeNumberAdd,
9
- largeNumberSubtract
10
- } from "./large-number";
11
- import log from "../log";
12
- import type { InputNumberDecimalPlaces } from "./large-number";
13
-
14
- export * from "./large-number";
15
-
16
- export type NumberType = number | string;
17
-
18
- // 小于最大值,才允许继续添加
19
- export function canAddNumber(num: NumberType, max: NumberType, largeNumber = false): boolean {
20
- if (!num && num !== 0) return true;
21
- if (largeNumber && isString(num)) {
22
- return compareNumber(num, max, largeNumber) < 0;
23
- }
24
- return num < max;
25
- }
26
-
27
- // 大于最小值,才允许继续减少
28
- export function canReduceNumber(num: NumberType, min: NumberType, largeNumber = false): boolean {
29
- if (!num && num !== 0) return true;
30
- if (largeNumber && isString(num)) {
31
- return compareNumber(num, min, largeNumber) > 0;
32
- }
33
- return num > min;
34
- }
35
-
36
- /**
37
- * 将数字控制在 max 和 min 之间
38
- */
39
- export function putInRangeNumber(
40
- val: NumberType,
41
- params: {
42
- max?: NumberType;
43
- min?: NumberType;
44
- lastValue?: NumberType;
45
- largeNumber?: boolean;
46
- }
47
- ) {
48
- if (val === "") return undefined;
49
- const { max, min, lastValue, largeNumber } = params;
50
- if (!isInputNumber(val)) return lastValue;
51
- if (largeNumber && (isString(max) || max === Infinity) && (isString(min) || min === -Infinity)) {
52
- if (compareNumber(max, val, largeNumber) < 0) return max;
53
- if (compareNumber(min, val, largeNumber) > 0) return min;
54
- return val;
55
- }
56
- return Math.max(Number(min), Math.min(Number(max), Number(val)));
57
- }
58
-
59
- /**
60
- * 仅支持正数,小数加法精度处理,小数部分和整数部分分开处理
61
- */
62
- export function positiveAdd(num1: number, num2: number): number {
63
- if (!num1 || !num2) return (num1 || 0) + (num2 || 0);
64
- const r1 = num1.toString().split(".")[1]?.length || 0;
65
- const r2 = num2.toString().split(".")[1]?.length || 0;
66
- // 整数不存在精度问题,直接返回
67
- if (!r1 && !r2) return num1 + num2;
68
- let newNumber1 = num1;
69
- let newNumber2 = num2;
70
- const diff = Math.abs(r1 - r2);
71
- const digit = 10 ** Math.max(r1, r2);
72
- if (diff > 0) {
73
- const cm = 10 ** diff;
74
- if (r1 > r2) {
75
- newNumber1 = Number(num1.toString().replace(".", ""));
76
- newNumber2 = Number(num2.toString().replace(".", "")) * cm;
77
- } else {
78
- newNumber1 = Number(num1.toString().replace(".", "")) * cm;
79
- newNumber2 = Number(num2.toString().replace(".", ""));
80
- }
81
- } else {
82
- newNumber1 = Number(num1.toString().replace(".", ""));
83
- newNumber2 = Number(num2.toString().replace(".", ""));
84
- }
85
- return (newNumber1 + newNumber2) / digit;
86
- }
87
-
88
- /**
89
- * 正数,小数减法精度处理,小数部分和整数部分分开处理
90
- */
91
- export function positiveSubtract(num1: number, num2: number): number {
92
- if (!num1 || !num2) return (num1 || 0) - (num2 || 0);
93
- const r1 = num1.toString().split(".")[1]?.length || 0;
94
- const r2 = num2.toString().split(".")[1]?.length || 0;
95
- const digit = 10 ** Math.max(r1, r2);
96
- const n = r1 >= r2 ? r1 : r2;
97
- return Number(((num1 * digit - num2 * digit) / digit).toFixed(n));
98
- }
99
-
100
- /**
101
- * 支持正数、负数、小数等全部数字的加法
102
- * -0.766 + 1 => 1 - 0.766
103
- * -1 + (-0.766) => - (1 + 0.766)
104
- * 1 + (-0.766) => 1 - 0.766
105
- * 1 + 0.766 => 1 + 0.766
106
- */
107
- export function add(num1: number, num2: number): number {
108
- if (num1 < 0 && num2 > 0) return positiveSubtract(num2, Math.abs(num1));
109
- if (num1 < 0 && num2 < 0) return positiveAdd(Math.abs(num1), Math.abs(num2)) * -1;
110
- if (num1 > 0 && num2 < 0) return positiveSubtract(num1, Math.abs(num2));
111
- return positiveAdd(num1, num2);
112
- }
113
-
114
- /**
115
- * 支持正数、负数、小数等全部数字的减法
116
- * -0.766 - 1 => - (1 + 0.766)
117
- * -1 - (-0.766) => 0.766 - 1
118
- * 1 - (-0.766) => 1 + 0.766
119
- * 1 - 0.766 => 1 - 0.766
120
- */
121
- export function subtract(num1: number, num2: number): number {
122
- if (num1 < 0 && num2 > 0) return positiveAdd(Math.abs(num1), num2) * -1;
123
- if (num1 < 0 && num2 < 0) return positiveSubtract(Math.abs(num2), Math.abs(num1));
124
- if (num1 > 0 && num2 < 0) return positiveAdd(num1, Math.abs(num2));
125
- return positiveSubtract(num1, num2);
126
- }
127
-
128
- export function getStepValue(p: {
129
- op: "add" | "reduce";
130
- step: NumberType;
131
- max?: NumberType;
132
- min?: NumberType;
133
- lastValue?: NumberType;
134
- largeNumber?: boolean;
135
- }) {
136
- const { op, step, lastValue, max, min, largeNumber } = p;
137
- if (Number(step) <= 0) {
138
- log.error("InputNumber", "step must be larger than 0.");
139
- return lastValue;
140
- }
141
- const tStep = isNumber(step) ? String(step) : step;
142
- let newVal;
143
- if (op === "add") {
144
- if (largeNumber && isString(lastValue)) {
145
- newVal = largeNumberAdd(String(lastValue), String(tStep));
146
- } else {
147
- newVal = add(Number(lastValue || 0), Number(step));
148
- }
149
- } else if (op === "reduce") {
150
- if (largeNumber && isString(lastValue)) {
151
- newVal = largeNumberSubtract(String(lastValue), String(tStep));
152
- } else {
153
- newVal = subtract(Number(lastValue || 0), Number(step));
154
- }
155
- }
156
- if (isUndefined(lastValue)) {
157
- newVal = putInRangeNumber(newVal, { max, min, lastValue, largeNumber });
158
- }
159
- return largeNumber ? newVal : Number(newVal);
160
- }
161
-
162
- export type InputNumberErrorType = "exceed-maximum" | "below-minimum" | undefined;
163
-
164
- /**
165
- * 最大值和最小值校验
166
- */
167
- export function getMaxOrMinValidateResult(p: {
168
- largeNumber: boolean;
169
- value: NumberType;
170
- max: NumberType;
171
- min: NumberType;
172
- }): InputNumberErrorType {
173
- const { largeNumber, value, max, min } = p;
174
- if (isUndefined(value) || isUndefined(largeNumber)) return undefined;
175
- if (largeNumber && isNumber(value)) {
176
- log.warn("InputNumber", "largeNumber value must be a string.");
177
- }
178
- let error: InputNumberErrorType;
179
- if (compareNumber(value, max, largeNumber) > 0) {
180
- error = "exceed-maximum";
181
- } else if (compareNumber(value, min, largeNumber) < 0) {
182
- error = "below-minimum";
183
- } else {
184
- error = undefined;
185
- }
186
- return error;
187
- }
188
-
189
- export const specialCode = ["-", ".", "e", "E", "+"];
190
-
191
- /**
192
- * 是否允许输入当前字符,输入字符校验
193
- * 1.23E+08 就表示 1.23 乘 10 的 8 次方
194
- * 2e3 表示 2 乘 10 的 3 次方
195
- */
196
- export function canInputNumber(number: string | undefined | null, largeNumber?: boolean) {
197
- if (["", null, undefined].includes(number)) return true;
198
- // 数字最前方不允许出现连续的两个 0
199
- if (number.slice(0, 2) === "00") return false;
200
- // 不能出现空格
201
- if (number.match(/\s/g)) return false;
202
- // 只能出现一个点(.)
203
- if (number.match(/\./g)?.length > 1) return false;
204
- // 只能出现一个e(e)
205
- if (number.match(/e/g)?.length > 1) return false;
206
- // 只能出现一个负号(-)或 一个正号(+),并且在第一个位置;但允许 3e+10 这种形式
207
- const tmpNumber = number.slice(1);
208
- const tmpMatched = tmpNumber.match(/(\+|-)/g);
209
- if (tmpMatched && (!/e(\+|-)/i.test(tmpNumber) || tmpMatched.length > 1)) return false;
210
- // 允许输入数字字符
211
- const isNumber = (largeNumber && isInputNumber(number)) || !Number.isNaN(Number(number));
212
- if (!isNumber && !specialCode.includes(number.slice(-1))) return false;
213
- if (/e/i.test(number) && (!/\de/i.test(number) || /e\./.test(number))) return false;
214
- return true;
215
- }
216
-
217
- /**
218
- * 是否允许设置组件新值,触发 onChange 事件
219
- */
220
- export function canSetValue(number: string, lastNumber: number) {
221
- return parseFloat(number) !== lastNumber && !Number.isNaN(Number(number));
222
- }
223
-
224
- /**
225
- * 1. 格式化未输入完成的数字,如:如:2e/2+/2.等
226
- * 2. 处理小数点 decimalPlaces
227
- * 3. 格式化大数字 formatENumber
228
- */
229
- export function formatUnCompleteNumber(
230
- number: string,
231
- extra: {
232
- decimalPlaces?: InputNumberDecimalPlaces;
233
- largeNumber?: boolean;
234
- isToFixed?: boolean;
235
- } = {}
236
- ): number | string {
237
- if (["", null, undefined].includes(number) || !/\d+/.test(number)) return undefined;
238
- const { decimalPlaces, largeNumber, isToFixed } = extra;
239
- let newNumber = number.replace(/[.|+|\-|e]$/, "");
240
- if (largeNumber) {
241
- newNumber = formatENumber(newNumber);
242
- }
243
- if (decimalPlaces !== undefined) {
244
- newNumber = largeNumberToFixed(newNumber, decimalPlaces, largeNumber);
245
- }
246
- if (largeNumber) return newNumber;
247
- return isToFixed ? newNumber : parseFloat(newNumber);
248
- }
249
-
250
- /**
251
- * 对千分位进行处理 111,111,222 -> 111111222
252
- */
253
- export function formatThousandths(number: string) {
254
- const thousandthsRegExp = /^[-+]?\d{1,3}(,\d{3})*(\.(\d*))?$/;
255
- if (thousandthsRegExp.test(number)) return number.replace(/,/g, "");
256
- return number;
257
- }
1
+ import { isUndefined, isString, isNumber } from "lodash-es";
2
+ /** 普通数相关方法 */
3
+ import {
4
+ compareNumber,
5
+ formatENumber,
6
+ largeNumberToFixed,
7
+ isInputNumber,
8
+ largeNumberAdd,
9
+ largeNumberSubtract
10
+ } from "./large-number";
11
+ import log from "../log";
12
+ import type { InputNumberDecimalPlaces } from "./large-number";
13
+
14
+ export * from "./large-number";
15
+
16
+ export type NumberType = number | string;
17
+
18
+ // 小于最大值,才允许继续添加
19
+ export function canAddNumber(num: NumberType, max: NumberType, largeNumber = false): boolean {
20
+ if (!num && num !== 0) return true;
21
+ if (largeNumber && isString(num)) {
22
+ return compareNumber(num, max, largeNumber) < 0;
23
+ }
24
+ return num < max;
25
+ }
26
+
27
+ // 大于最小值,才允许继续减少
28
+ export function canReduceNumber(num: NumberType, min: NumberType, largeNumber = false): boolean {
29
+ if (!num && num !== 0) return true;
30
+ if (largeNumber && isString(num)) {
31
+ return compareNumber(num, min, largeNumber) > 0;
32
+ }
33
+ return num > min;
34
+ }
35
+
36
+ /**
37
+ * 将数字控制在 max 和 min 之间
38
+ */
39
+ export function putInRangeNumber(
40
+ val: NumberType,
41
+ params: {
42
+ max?: NumberType;
43
+ min?: NumberType;
44
+ lastValue?: NumberType;
45
+ largeNumber?: boolean;
46
+ }
47
+ ) {
48
+ if (val === "") return undefined;
49
+ const { max, min, lastValue, largeNumber } = params;
50
+ if (!isInputNumber(val)) return lastValue;
51
+ if (largeNumber && (isString(max) || max === Infinity) && (isString(min) || min === -Infinity)) {
52
+ if (compareNumber(max, val, largeNumber) < 0) return max;
53
+ if (compareNumber(min, val, largeNumber) > 0) return min;
54
+ return val;
55
+ }
56
+ return Math.max(Number(min), Math.min(Number(max), Number(val)));
57
+ }
58
+
59
+ /**
60
+ * 仅支持正数,小数加法精度处理,小数部分和整数部分分开处理
61
+ */
62
+ export function positiveAdd(num1: number, num2: number): number {
63
+ if (!num1 || !num2) return (num1 || 0) + (num2 || 0);
64
+ const r1 = num1.toString().split(".")[1]?.length || 0;
65
+ const r2 = num2.toString().split(".")[1]?.length || 0;
66
+ // 整数不存在精度问题,直接返回
67
+ if (!r1 && !r2) return num1 + num2;
68
+ let newNumber1 = num1;
69
+ let newNumber2 = num2;
70
+ const diff = Math.abs(r1 - r2);
71
+ const digit = 10 ** Math.max(r1, r2);
72
+ if (diff > 0) {
73
+ const cm = 10 ** diff;
74
+ if (r1 > r2) {
75
+ newNumber1 = Number(num1.toString().replace(".", ""));
76
+ newNumber2 = Number(num2.toString().replace(".", "")) * cm;
77
+ } else {
78
+ newNumber1 = Number(num1.toString().replace(".", "")) * cm;
79
+ newNumber2 = Number(num2.toString().replace(".", ""));
80
+ }
81
+ } else {
82
+ newNumber1 = Number(num1.toString().replace(".", ""));
83
+ newNumber2 = Number(num2.toString().replace(".", ""));
84
+ }
85
+ return (newNumber1 + newNumber2) / digit;
86
+ }
87
+
88
+ /**
89
+ * 正数,小数减法精度处理,小数部分和整数部分分开处理
90
+ */
91
+ export function positiveSubtract(num1: number, num2: number): number {
92
+ if (!num1 || !num2) return (num1 || 0) - (num2 || 0);
93
+ const r1 = num1.toString().split(".")[1]?.length || 0;
94
+ const r2 = num2.toString().split(".")[1]?.length || 0;
95
+ const digit = 10 ** Math.max(r1, r2);
96
+ const n = r1 >= r2 ? r1 : r2;
97
+ return Number(((num1 * digit - num2 * digit) / digit).toFixed(n));
98
+ }
99
+
100
+ /**
101
+ * 支持正数、负数、小数等全部数字的加法
102
+ * -0.766 + 1 => 1 - 0.766
103
+ * -1 + (-0.766) => - (1 + 0.766)
104
+ * 1 + (-0.766) => 1 - 0.766
105
+ * 1 + 0.766 => 1 + 0.766
106
+ */
107
+ export function add(num1: number, num2: number): number {
108
+ if (num1 < 0 && num2 > 0) return positiveSubtract(num2, Math.abs(num1));
109
+ if (num1 < 0 && num2 < 0) return positiveAdd(Math.abs(num1), Math.abs(num2)) * -1;
110
+ if (num1 > 0 && num2 < 0) return positiveSubtract(num1, Math.abs(num2));
111
+ return positiveAdd(num1, num2);
112
+ }
113
+
114
+ /**
115
+ * 支持正数、负数、小数等全部数字的减法
116
+ * -0.766 - 1 => - (1 + 0.766)
117
+ * -1 - (-0.766) => 0.766 - 1
118
+ * 1 - (-0.766) => 1 + 0.766
119
+ * 1 - 0.766 => 1 - 0.766
120
+ */
121
+ export function subtract(num1: number, num2: number): number {
122
+ if (num1 < 0 && num2 > 0) return positiveAdd(Math.abs(num1), num2) * -1;
123
+ if (num1 < 0 && num2 < 0) return positiveSubtract(Math.abs(num2), Math.abs(num1));
124
+ if (num1 > 0 && num2 < 0) return positiveAdd(num1, Math.abs(num2));
125
+ return positiveSubtract(num1, num2);
126
+ }
127
+
128
+ export function getStepValue(p: {
129
+ op: "add" | "reduce";
130
+ step: NumberType;
131
+ max?: NumberType;
132
+ min?: NumberType;
133
+ lastValue?: NumberType;
134
+ largeNumber?: boolean;
135
+ }) {
136
+ const { op, step, lastValue, max, min, largeNumber } = p;
137
+ if (Number(step) <= 0) {
138
+ log.error("InputNumber", "step must be larger than 0.");
139
+ return lastValue;
140
+ }
141
+ const tStep = isNumber(step) ? String(step) : step;
142
+ let newVal;
143
+ if (op === "add") {
144
+ if (largeNumber && isString(lastValue)) {
145
+ newVal = largeNumberAdd(String(lastValue), String(tStep));
146
+ } else {
147
+ newVal = add(Number(lastValue || 0), Number(step));
148
+ }
149
+ } else if (op === "reduce") {
150
+ if (largeNumber && isString(lastValue)) {
151
+ newVal = largeNumberSubtract(String(lastValue), String(tStep));
152
+ } else {
153
+ newVal = subtract(Number(lastValue || 0), Number(step));
154
+ }
155
+ }
156
+ if (isUndefined(lastValue)) {
157
+ newVal = putInRangeNumber(newVal, { max, min, lastValue, largeNumber });
158
+ }
159
+ return largeNumber ? newVal : Number(newVal);
160
+ }
161
+
162
+ export type InputNumberErrorType = "exceed-maximum" | "below-minimum" | undefined;
163
+
164
+ /**
165
+ * 最大值和最小值校验
166
+ */
167
+ export function getMaxOrMinValidateResult(p: {
168
+ largeNumber: boolean;
169
+ value: NumberType;
170
+ max: NumberType;
171
+ min: NumberType;
172
+ }): InputNumberErrorType {
173
+ const { largeNumber, value, max, min } = p;
174
+ if (isUndefined(value) || isUndefined(largeNumber)) return undefined;
175
+ if (largeNumber && isNumber(value)) {
176
+ log.warn("InputNumber", "largeNumber value must be a string.");
177
+ }
178
+ let error: InputNumberErrorType;
179
+ if (compareNumber(value, max, largeNumber) > 0) {
180
+ error = "exceed-maximum";
181
+ } else if (compareNumber(value, min, largeNumber) < 0) {
182
+ error = "below-minimum";
183
+ } else {
184
+ error = undefined;
185
+ }
186
+ return error;
187
+ }
188
+
189
+ export const specialCode = ["-", ".", "e", "E", "+"];
190
+
191
+ /**
192
+ * 是否允许输入当前字符,输入字符校验
193
+ * 1.23E+08 就表示 1.23 乘 10 的 8 次方
194
+ * 2e3 表示 2 乘 10 的 3 次方
195
+ */
196
+ export function canInputNumber(number: string | undefined | null, largeNumber?: boolean) {
197
+ if (["", null, undefined].includes(number)) return true;
198
+ // 数字最前方不允许出现连续的两个 0
199
+ if (number.slice(0, 2) === "00") return false;
200
+ // 不能出现空格
201
+ if (number.match(/\s/g)) return false;
202
+ // 只能出现一个点(.)
203
+ if (number.match(/\./g)?.length > 1) return false;
204
+ // 只能出现一个e(e)
205
+ if (number.match(/e/g)?.length > 1) return false;
206
+ // 只能出现一个负号(-)或 一个正号(+),并且在第一个位置;但允许 3e+10 这种形式
207
+ const tmpNumber = number.slice(1);
208
+ const tmpMatched = tmpNumber.match(/(\+|-)/g);
209
+ if (tmpMatched && (!/e(\+|-)/i.test(tmpNumber) || tmpMatched.length > 1)) return false;
210
+ // 允许输入数字字符
211
+ const isNumber = (largeNumber && isInputNumber(number)) || !Number.isNaN(Number(number));
212
+ if (!isNumber && !specialCode.includes(number.slice(-1))) return false;
213
+ if (/e/i.test(number) && (!/\de/i.test(number) || /e\./.test(number))) return false;
214
+ return true;
215
+ }
216
+
217
+ /**
218
+ * 是否允许设置组件新值,触发 onChange 事件
219
+ */
220
+ export function canSetValue(number: string, lastNumber: number) {
221
+ return parseFloat(number) !== lastNumber && !Number.isNaN(Number(number));
222
+ }
223
+
224
+ /**
225
+ * 1. 格式化未输入完成的数字,如:如:2e/2+/2.等
226
+ * 2. 处理小数点 decimalPlaces
227
+ * 3. 格式化大数字 formatENumber
228
+ */
229
+ export function formatUnCompleteNumber(
230
+ number: string,
231
+ extra: {
232
+ decimalPlaces?: InputNumberDecimalPlaces;
233
+ largeNumber?: boolean;
234
+ isToFixed?: boolean;
235
+ } = {}
236
+ ): number | string {
237
+ if (["", null, undefined].includes(number) || !/\d+/.test(number)) return undefined;
238
+ const { decimalPlaces, largeNumber, isToFixed } = extra;
239
+ let newNumber = number.replace(/[.|+|\-|e]$/, "");
240
+ if (largeNumber) {
241
+ newNumber = formatENumber(newNumber);
242
+ }
243
+ if (decimalPlaces !== undefined) {
244
+ newNumber = largeNumberToFixed(newNumber, decimalPlaces, largeNumber);
245
+ }
246
+ if (largeNumber) return newNumber;
247
+ return isToFixed ? newNumber : parseFloat(newNumber);
248
+ }
249
+
250
+ /**
251
+ * 对千分位进行处理 111,111,222 -> 111111222
252
+ */
253
+ export function formatThousandths(number: string) {
254
+ const thousandthsRegExp = /^[-+]?\d{1,3}(,\d{3})*(\.(\d*))?$/;
255
+ if (thousandthsRegExp.test(number)) return number.replace(/,/g, "");
256
+ return number;
257
+ }
@@ -1,3 +1,3 @@
1
- import log from './log';
2
-
3
- export default log;
1
+ import log from "./log";
2
+
3
+ export default log;
package/utils/log/log.ts CHANGED
@@ -1,30 +1,29 @@
1
- /* eslint-disable no-console */
2
- import { Log } from './types';
3
-
4
- const logSet = new Set();
5
-
6
- const log: Log = {
7
- warn(componentName, message): void {
8
- console.warn(`TDesign ${componentName} Warn: ${message}`);
9
- },
10
- warnOnce(componentName, message): void {
11
- const msgContent = `TDesign ${componentName} Warn: ${message}`;
12
- if (logSet.has(msgContent)) return;
13
- logSet.add(msgContent);
14
- console.warn(msgContent);
15
- },
16
- error(componentName, message): void {
17
- console.error(`TDesign ${componentName} Error: ${message}`);
18
- },
19
- errorOnce(componentName, message): void {
20
- const msgContent = `TDesign ${componentName} Error: ${message}`;
21
- if (logSet.has(msgContent)) return;
22
- logSet.add(msgContent);
23
- console.error(msgContent);
24
- },
25
- info(componentName, message): void {
26
- console.info(`TDesign ${componentName} Info: ${message}`);
27
- },
28
- };
29
-
30
- export default log;
1
+ import { Log } from "./types";
2
+
3
+ const logSet = new Set();
4
+
5
+ const log: Log = {
6
+ warn(componentName, message): void {
7
+ console.warn(`TDesign ${componentName} Warn: ${message}`);
8
+ },
9
+ warnOnce(componentName, message): void {
10
+ const msgContent = `TDesign ${componentName} Warn: ${message}`;
11
+ if (logSet.has(msgContent)) return;
12
+ logSet.add(msgContent);
13
+ console.warn(msgContent);
14
+ },
15
+ error(componentName, message): void {
16
+ console.error(`TDesign ${componentName} Error: ${message}`);
17
+ },
18
+ errorOnce(componentName, message): void {
19
+ const msgContent = `TDesign ${componentName} Error: ${message}`;
20
+ if (logSet.has(msgContent)) return;
21
+ logSet.add(msgContent);
22
+ console.error(msgContent);
23
+ },
24
+ info(componentName, message): void {
25
+ console.info(`TDesign ${componentName} Info: ${message}`);
26
+ }
27
+ };
28
+
29
+ export default log;
@@ -1,12 +1,9 @@
1
- export type LogFunction = (
2
- componentName: string,
3
- message: string,
4
- ) => void;
5
-
6
- export interface Log {
7
- warn: LogFunction;
8
- warnOnce: LogFunction;
9
- error: LogFunction;
10
- errorOnce: LogFunction;
11
- info: LogFunction;
12
- }
1
+ export type LogFunction = (componentName: string, message: string) => void;
2
+
3
+ export interface Log {
4
+ warn: LogFunction;
5
+ warnOnce: LogFunction;
6
+ error: LogFunction;
7
+ errorOnce: LogFunction;
8
+ info: LogFunction;
9
+ }