funda-ui 4.7.624 → 4.7.701

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 (613) hide show
  1. package/{publish/CascadingSelect → CascadingSelect}/index.js +2 -2
  2. package/{publish/CascadingSelectE2E → CascadingSelectE2E}/index.js +2 -2
  3. package/{publish/Chatbox → Chatbox}/index.js +3 -17
  4. package/{publish/lib/cjs/Checkbox → Checkbox}/index.js +3 -3
  5. package/{publish/lib/cjs/ColorPicker → ColorPicker}/index.js +3 -18
  6. package/{publish/lib/cjs/Date → Date}/index.js +3 -18
  7. package/{publish/lib/cjs/EventCalendarTimeline → EventCalendarTimeline}/index.d.ts +1 -1
  8. package/{publish/EventCalendarTimeline → EventCalendarTimeline}/index.js +11 -1
  9. package/{publish/File → File}/index.d.ts +9 -0
  10. package/{publish/lib/cjs/File → File}/index.js +245 -93
  11. package/{publish/lib/cjs/Input → Input}/index.js +3 -18
  12. package/{publish/lib/cjs/LiveSearch → LiveSearch}/index.js +3 -18
  13. package/{publish/NativeSelect → NativeSelect}/index.js +3 -3
  14. package/{publish/NumberInput → NumberInput}/index.js +3 -18
  15. package/{publish/lib/css/Tooltip → Popover}/index.css +69 -69
  16. package/Popover/index.d.ts +4 -0
  17. package/{publish/lib/cjs/Tooltip → Popover}/index.js +301 -271
  18. package/README.md +3 -116
  19. package/{publish/lib/cjs/Radio → Radio}/index.js +3 -3
  20. package/{publish/lib/cjs/RangeSlider → RangeSlider}/index.js +3 -18
  21. package/{publish/SearchBar → SearchBar}/index.js +3 -18
  22. package/{publish/Select → Select}/index.js +3 -2
  23. package/{publish/Switch → Switch}/index.js +3 -3
  24. package/TagInput/index.css +91 -0
  25. package/{publish/lib/cjs/TagInput → TagInput}/index.js +12 -23
  26. package/{publish/lib/cjs/Textarea → Textarea}/index.js +3 -17
  27. package/Utils/useSSE.d.ts +9 -0
  28. package/{publish/lib/cjs/Utils/useKeyPress.js → Utils/useSSE.js} +88 -77
  29. package/{publish/all.d.ts → all.d.ts} +1 -0
  30. package/{publish/all.js → all.js} +1 -0
  31. package/lib/cjs/CascadingSelect/index.js +2 -2
  32. package/lib/cjs/CascadingSelectE2E/index.js +2 -2
  33. package/lib/cjs/Chatbox/index.js +3 -17
  34. package/lib/cjs/Checkbox/index.js +3 -3
  35. package/lib/cjs/ColorPicker/index.js +3 -18
  36. package/lib/cjs/Date/index.js +3 -18
  37. package/lib/cjs/EventCalendarTimeline/index.d.ts +1 -1
  38. package/lib/cjs/EventCalendarTimeline/index.js +11 -1
  39. package/lib/cjs/File/index.d.ts +9 -0
  40. package/lib/cjs/File/index.js +245 -93
  41. package/lib/cjs/Input/index.js +3 -18
  42. package/lib/cjs/LiveSearch/index.js +3 -18
  43. package/lib/cjs/NativeSelect/index.js +3 -3
  44. package/lib/cjs/NumberInput/index.js +3 -18
  45. package/lib/cjs/Popover/index.d.ts +4 -0
  46. package/{publish/lib/cjs/DropdownMenu → lib/cjs/Popover}/index.js +553 -252
  47. package/lib/cjs/Radio/index.js +3 -3
  48. package/lib/cjs/RangeSlider/index.js +3 -18
  49. package/lib/cjs/SearchBar/index.js +3 -18
  50. package/lib/cjs/Select/index.js +3 -2
  51. package/lib/cjs/Switch/index.js +3 -3
  52. package/lib/cjs/TagInput/index.js +12 -23
  53. package/lib/cjs/Textarea/index.js +3 -17
  54. package/lib/cjs/Utils/useSSE.d.ts +9 -0
  55. package/{publish/lib/cjs/Utils/useAutosizeTextArea.js → lib/cjs/Utils/useSSE.js} +90 -110
  56. package/lib/cjs/index.d.ts +1 -0
  57. package/lib/cjs/index.js +1 -0
  58. package/lib/css/Popover/index.css +198 -0
  59. package/lib/css/TagInput/index.css +31 -31
  60. package/lib/esm/CascadingSelect/index.tsx +2 -2
  61. package/lib/esm/CascadingSelectE2E/index.tsx +2 -2
  62. package/lib/esm/Checkbox/index.tsx +3 -3
  63. package/lib/esm/ColorPicker/index.tsx +4 -15
  64. package/lib/esm/EventCalendarTimeline/index.tsx +11 -2
  65. package/lib/esm/File/index.tsx +148 -23
  66. package/lib/esm/Input/index.tsx +6 -17
  67. package/lib/esm/NativeSelect/index.tsx +3 -3
  68. package/lib/esm/NumberInput/index.tsx +7 -15
  69. package/lib/esm/Popover/Popover.tsx +251 -0
  70. package/lib/esm/Popover/PopoverClose.tsx +51 -0
  71. package/lib/esm/Popover/PopoverContent.tsx +72 -0
  72. package/lib/esm/Popover/PopoverTrigger.tsx +62 -0
  73. package/{publish/lib/esm/Tooltip → lib/esm/Popover}/index.scss +61 -61
  74. package/lib/esm/Popover/index.tsx +4 -0
  75. package/lib/esm/Radio/index.tsx +3 -3
  76. package/lib/esm/SearchBar/index.tsx +8 -12
  77. package/lib/esm/Select/index.tsx +2 -2
  78. package/lib/esm/Switch/index.tsx +3 -3
  79. package/lib/esm/TagInput/index.scss +24 -24
  80. package/lib/esm/TagInput/index.tsx +13 -20
  81. package/lib/esm/Textarea/index.tsx +6 -14
  82. package/lib/esm/Utils/hooks/useSSE.tsx +109 -0
  83. package/lib/esm/index.js +1 -0
  84. package/package.json +1 -591
  85. package/.gitattributes +0 -2
  86. package/README_PUBLISH.md +0 -328
  87. package/logo.png +0 -0
  88. package/preview.png +0 -0
  89. package/publish/Checkbox/index.js +0 -673
  90. package/publish/ColorPicker/index.js +0 -662
  91. package/publish/Date/index.js +0 -6368
  92. package/publish/EventCalendarTimeline/index.d.ts +0 -100
  93. package/publish/File/index.js +0 -1751
  94. package/publish/Input/index.js +0 -1486
  95. package/publish/LICENSE +0 -21
  96. package/publish/LiveSearch/index.js +0 -4180
  97. package/publish/README.md +0 -328
  98. package/publish/Radio/index.js +0 -1838
  99. package/publish/RangeSlider/index.js +0 -2696
  100. package/publish/TagInput/index.css +0 -91
  101. package/publish/TagInput/index.js +0 -1227
  102. package/publish/Textarea/index.js +0 -1795
  103. package/publish/lib/cjs/Accordion/index.d.ts +0 -2
  104. package/publish/lib/cjs/Accordion/index.js +0 -667
  105. package/publish/lib/cjs/BackToTop/index.d.ts +0 -17
  106. package/publish/lib/cjs/BackToTop/index.js +0 -904
  107. package/publish/lib/cjs/CascadingSelect/index.d.ts +0 -80
  108. package/publish/lib/cjs/CascadingSelect/index.js +0 -3383
  109. package/publish/lib/cjs/CascadingSelectE2E/index.d.ts +0 -91
  110. package/publish/lib/cjs/CascadingSelectE2E/index.js +0 -3988
  111. package/publish/lib/cjs/Chatbox/index.d.ts +0 -101
  112. package/publish/lib/cjs/Chatbox/index.js +0 -7037
  113. package/publish/lib/cjs/Checkbox/index.d.ts +0 -28
  114. package/publish/lib/cjs/ColorPicker/index.d.ts +0 -27
  115. package/publish/lib/cjs/Date/index.d.ts +0 -70
  116. package/publish/lib/cjs/DigitalClock/index.d.ts +0 -7
  117. package/publish/lib/cjs/DigitalClock/index.js +0 -402
  118. package/publish/lib/cjs/DragDropList/index.d.ts +0 -45
  119. package/publish/lib/cjs/DragDropList/index.js +0 -1586
  120. package/publish/lib/cjs/DropdownMenu/index.d.ts +0 -38
  121. package/publish/lib/cjs/DynamicFields/index.d.ts +0 -40
  122. package/publish/lib/cjs/DynamicFields/index.js +0 -818
  123. package/publish/lib/cjs/EventCalendar/index.d.ts +0 -61
  124. package/publish/lib/cjs/EventCalendar/index.js +0 -3789
  125. package/publish/lib/cjs/EventCalendarTimeline/index.js +0 -6141
  126. package/publish/lib/cjs/File/index.d.ts +0 -40
  127. package/publish/lib/cjs/HorizontalScrollContent/index.d.ts +0 -14
  128. package/publish/lib/cjs/HorizontalScrollContent/index.js +0 -426
  129. package/publish/lib/cjs/Input/index.d.ts +0 -59
  130. package/publish/lib/cjs/LiveSearch/index.d.ts +0 -70
  131. package/publish/lib/cjs/MasonryLayout/index.d.ts +0 -14
  132. package/publish/lib/cjs/MasonryLayout/index.js +0 -689
  133. package/publish/lib/cjs/ModalDialog/index.d.ts +0 -83
  134. package/publish/lib/cjs/ModalDialog/index.js +0 -1719
  135. package/publish/lib/cjs/ModeSwitch/index.d.ts +0 -17
  136. package/publish/lib/cjs/ModeSwitch/index.js +0 -202
  137. package/publish/lib/cjs/MultilevelDropdownMenu/index.d.ts +0 -20
  138. package/publish/lib/cjs/MultilevelDropdownMenu/index.js +0 -930
  139. package/publish/lib/cjs/MultipleCheckboxes/index.d.ts +0 -66
  140. package/publish/lib/cjs/MultipleCheckboxes/index.js +0 -2337
  141. package/publish/lib/cjs/MultipleSelect/index.d.ts +0 -65
  142. package/publish/lib/cjs/MultipleSelect/index.js +0 -4197
  143. package/publish/lib/cjs/NativeSelect/index.d.ts +0 -37
  144. package/publish/lib/cjs/NativeSelect/index.js +0 -2052
  145. package/publish/lib/cjs/NumberInput/index.d.ts +0 -40
  146. package/publish/lib/cjs/NumberInput/index.js +0 -1191
  147. package/publish/lib/cjs/Pagination/index.d.ts +0 -51
  148. package/publish/lib/cjs/Pagination/index.js +0 -612
  149. package/publish/lib/cjs/Radio/index.d.ts +0 -45
  150. package/publish/lib/cjs/RangeSlider/index.d.ts +0 -22
  151. package/publish/lib/cjs/Refresher/index.d.ts +0 -22
  152. package/publish/lib/cjs/Refresher/index.js +0 -564
  153. package/publish/lib/cjs/RootPortal/index.d.ts +0 -9
  154. package/publish/lib/cjs/RootPortal/index.js +0 -148
  155. package/publish/lib/cjs/ScrollReveal/index.d.ts +0 -21
  156. package/publish/lib/cjs/ScrollReveal/index.js +0 -401
  157. package/publish/lib/cjs/Scrollbar/index.d.ts +0 -17
  158. package/publish/lib/cjs/Scrollbar/index.js +0 -1107
  159. package/publish/lib/cjs/SearchBar/index.d.ts +0 -41
  160. package/publish/lib/cjs/SearchBar/index.js +0 -701
  161. package/publish/lib/cjs/Select/index.d.ts +0 -107
  162. package/publish/lib/cjs/Select/index.js +0 -6540
  163. package/publish/lib/cjs/ShowMoreLess/index.d.ts +0 -36
  164. package/publish/lib/cjs/ShowMoreLess/index.js +0 -387
  165. package/publish/lib/cjs/SplitterPanel/index.d.ts +0 -20
  166. package/publish/lib/cjs/SplitterPanel/index.js +0 -800
  167. package/publish/lib/cjs/Stepper/index.d.ts +0 -26
  168. package/publish/lib/cjs/Stepper/index.js +0 -568
  169. package/publish/lib/cjs/Switch/index.d.ts +0 -25
  170. package/publish/lib/cjs/Switch/index.js +0 -630
  171. package/publish/lib/cjs/Table/index.d.ts +0 -12
  172. package/publish/lib/cjs/Table/index.js +0 -2311
  173. package/publish/lib/cjs/Tabs/index.d.ts +0 -3
  174. package/publish/lib/cjs/Tabs/index.js +0 -771
  175. package/publish/lib/cjs/TagInput/index.d.ts +0 -37
  176. package/publish/lib/cjs/Textarea/index.d.ts +0 -50
  177. package/publish/lib/cjs/Toast/index.d.ts +0 -3
  178. package/publish/lib/cjs/Toast/index.js +0 -1345
  179. package/publish/lib/cjs/Tooltip/index.d.ts +0 -38
  180. package/publish/lib/cjs/Tree/index.d.ts +0 -78
  181. package/publish/lib/cjs/Tree/index.js +0 -2330
  182. package/publish/lib/cjs/Utils/anim.d.ts +0 -11
  183. package/publish/lib/cjs/Utils/anim.js +0 -846
  184. package/publish/lib/cjs/Utils/bodyScrollLock.d.ts +0 -8
  185. package/publish/lib/cjs/Utils/bodyScrollLock.js +0 -311
  186. package/publish/lib/cjs/Utils/buffer.d.ts +0 -67
  187. package/publish/lib/cjs/Utils/buffer.js +0 -343
  188. package/publish/lib/cjs/Utils/cls.d.ts +0 -15
  189. package/publish/lib/cjs/Utils/cls.js +0 -124
  190. package/publish/lib/cjs/Utils/convert.d.ts +0 -25
  191. package/publish/lib/cjs/Utils/convert.js +0 -109
  192. package/publish/lib/cjs/Utils/date.d.ts +0 -227
  193. package/publish/lib/cjs/Utils/date.js +0 -587
  194. package/publish/lib/cjs/Utils/dom.d.ts +0 -13
  195. package/publish/lib/cjs/Utils/dom.js +0 -215
  196. package/publish/lib/cjs/Utils/easing.d.ts +0 -29
  197. package/publish/lib/cjs/Utils/easing.js +0 -221
  198. package/publish/lib/cjs/Utils/extract.d.ts +0 -66
  199. package/publish/lib/cjs/Utils/extract.js +0 -195
  200. package/publish/lib/cjs/Utils/format-string.d.ts +0 -65
  201. package/publish/lib/cjs/Utils/format-string.js +0 -167
  202. package/publish/lib/cjs/Utils/formdata.d.ts +0 -13
  203. package/publish/lib/cjs/Utils/formdata.js +0 -131
  204. package/publish/lib/cjs/Utils/getElementProperty.d.ts +0 -52
  205. package/publish/lib/cjs/Utils/getElementProperty.js +0 -189
  206. package/publish/lib/cjs/Utils/guid.d.ts +0 -7
  207. package/publish/lib/cjs/Utils/guid.js +0 -67
  208. package/publish/lib/cjs/Utils/initDefaultOptions.d.ts +0 -10
  209. package/publish/lib/cjs/Utils/initDefaultOptions.js +0 -607
  210. package/publish/lib/cjs/Utils/inputsCalculation.d.ts +0 -28
  211. package/publish/lib/cjs/Utils/inputsCalculation.js +0 -188
  212. package/publish/lib/cjs/Utils/math.d.ts +0 -77
  213. package/publish/lib/cjs/Utils/math.js +0 -305
  214. package/publish/lib/cjs/Utils/object.d.ts +0 -18
  215. package/publish/lib/cjs/Utils/object.js +0 -120
  216. package/publish/lib/cjs/Utils/os.d.ts +0 -2
  217. package/publish/lib/cjs/Utils/os.js +0 -104
  218. package/publish/lib/cjs/Utils/performance.d.ts +0 -3
  219. package/publish/lib/cjs/Utils/performance.js +0 -94
  220. package/publish/lib/cjs/Utils/sanitize.d.ts +0 -14
  221. package/publish/lib/cjs/Utils/sanitize.js +0 -87
  222. package/publish/lib/cjs/Utils/time.d.ts +0 -40
  223. package/publish/lib/cjs/Utils/time.js +0 -177
  224. package/publish/lib/cjs/Utils/tree.d.ts +0 -40
  225. package/publish/lib/cjs/Utils/tree.js +0 -195
  226. package/publish/lib/cjs/Utils/useAutosizeTextArea.d.ts +0 -10
  227. package/publish/lib/cjs/Utils/useBoundedDrag.d.ts +0 -125
  228. package/publish/lib/cjs/Utils/useBoundedDrag.js +0 -380
  229. package/publish/lib/cjs/Utils/useClickOutside.d.ts +0 -33
  230. package/publish/lib/cjs/Utils/useClickOutside.js +0 -166
  231. package/publish/lib/cjs/Utils/useComId.d.ts +0 -6
  232. package/publish/lib/cjs/Utils/useComId.js +0 -114
  233. package/publish/lib/cjs/Utils/useDebounce.d.ts +0 -20
  234. package/publish/lib/cjs/Utils/useDebounce.js +0 -138
  235. package/publish/lib/cjs/Utils/useDragDropPosition.d.ts +0 -166
  236. package/publish/lib/cjs/Utils/useDragDropPosition.js +0 -453
  237. package/publish/lib/cjs/Utils/useDraggable.d.ts +0 -62
  238. package/publish/lib/cjs/Utils/useDraggable.js +0 -348
  239. package/publish/lib/cjs/Utils/useHistoryTracker.d.ts +0 -166
  240. package/publish/lib/cjs/Utils/useHistoryTracker.js +0 -649
  241. package/publish/lib/cjs/Utils/useInterval.d.ts +0 -5
  242. package/publish/lib/cjs/Utils/useInterval.js +0 -168
  243. package/publish/lib/cjs/Utils/useIsMobile.d.ts +0 -2
  244. package/publish/lib/cjs/Utils/useIsMobile.js +0 -232
  245. package/publish/lib/cjs/Utils/useKeyPress.d.ts +0 -44
  246. package/publish/lib/cjs/Utils/useSessionStorageListener.d.ts +0 -2
  247. package/publish/lib/cjs/Utils/useSessionStorageListener.js +0 -157
  248. package/publish/lib/cjs/Utils/useStreamController.d.ts +0 -71
  249. package/publish/lib/cjs/Utils/useStreamController.js +0 -494
  250. package/publish/lib/cjs/Utils/useThrottle.d.ts +0 -2
  251. package/publish/lib/cjs/Utils/useThrottle.js +0 -136
  252. package/publish/lib/cjs/Utils/useWindowScroll.d.ts +0 -12
  253. package/publish/lib/cjs/Utils/useWindowScroll.js +0 -217
  254. package/publish/lib/cjs/Utils/validate.d.ts +0 -53
  255. package/publish/lib/cjs/Utils/validate.js +0 -536
  256. package/publish/lib/cjs/Utils/viewport.d.ts +0 -7
  257. package/publish/lib/cjs/Utils/viewport.js +0 -64
  258. package/publish/lib/cjs/index.d.ts +0 -49
  259. package/publish/lib/cjs/index.js +0 -50
  260. package/publish/lib/css/BackToTop/index.css +0 -34
  261. package/publish/lib/css/CascadingSelect/index.css +0 -245
  262. package/publish/lib/css/CascadingSelectE2E/index.css +0 -245
  263. package/publish/lib/css/Chatbox/index.css +0 -774
  264. package/publish/lib/css/ColorPicker/index.css +0 -58
  265. package/publish/lib/css/Date/index.css +0 -434
  266. package/publish/lib/css/DragDropList/index.css +0 -188
  267. package/publish/lib/css/DropdownMenu/index.css +0 -151
  268. package/publish/lib/css/EventCalendar/index.css +0 -300
  269. package/publish/lib/css/EventCalendarTimeline/index.css +0 -694
  270. package/publish/lib/css/HorizontalScrollContent/index.css +0 -70
  271. package/publish/lib/css/LiveSearch/index.css +0 -88
  272. package/publish/lib/css/MultilevelDropdownMenu/index.css +0 -38
  273. package/publish/lib/css/MultipleSelect/index.css +0 -313
  274. package/publish/lib/css/RangeSlider/index.css +0 -150
  275. package/publish/lib/css/Scrollbar/index.css +0 -176
  276. package/publish/lib/css/Select/index.css +0 -434
  277. package/publish/lib/css/ShowMoreLess/index.css +0 -23
  278. package/publish/lib/css/SplitterPanel/index.css +0 -63
  279. package/publish/lib/css/Stepper/index.css +0 -250
  280. package/publish/lib/css/Table/index.css +0 -584
  281. package/publish/lib/css/TagInput/index.css +0 -91
  282. package/publish/lib/css/Toast/index.css +0 -149
  283. package/publish/lib/css/Tree/index.css +0 -237
  284. package/publish/lib/esm/Accordion/Accordion.tsx +0 -185
  285. package/publish/lib/esm/Accordion/AccordionItem.tsx +0 -248
  286. package/publish/lib/esm/Accordion/index.tsx +0 -2
  287. package/publish/lib/esm/BackToTop/index.scss +0 -47
  288. package/publish/lib/esm/BackToTop/index.tsx +0 -177
  289. package/publish/lib/esm/CascadingSelect/Group.tsx +0 -83
  290. package/publish/lib/esm/CascadingSelect/index.scss +0 -330
  291. package/publish/lib/esm/CascadingSelect/index.tsx +0 -1397
  292. package/publish/lib/esm/CascadingSelectE2E/Group.tsx +0 -87
  293. package/publish/lib/esm/CascadingSelectE2E/index.scss +0 -333
  294. package/publish/lib/esm/CascadingSelectE2E/index.tsx +0 -1684
  295. package/publish/lib/esm/Chatbox/PureLoader.tsx +0 -47
  296. package/publish/lib/esm/Chatbox/TypingEffect.tsx +0 -56
  297. package/publish/lib/esm/Chatbox/index.scss +0 -966
  298. package/publish/lib/esm/Chatbox/index.tsx +0 -1742
  299. package/publish/lib/esm/Chatbox/utils/func.ts +0 -180
  300. package/publish/lib/esm/Checkbox/index.tsx +0 -206
  301. package/publish/lib/esm/ColorPicker/index.scss +0 -91
  302. package/publish/lib/esm/ColorPicker/index.tsx +0 -204
  303. package/publish/lib/esm/Date/Calendar.tsx +0 -723
  304. package/publish/lib/esm/Date/index.scss +0 -567
  305. package/publish/lib/esm/Date/index.tsx +0 -1797
  306. package/publish/lib/esm/Date/localization/en_US.js +0 -13
  307. package/publish/lib/esm/Date/localization/zh_CN.js +0 -12
  308. package/publish/lib/esm/DigitalClock/index.tsx +0 -74
  309. package/publish/lib/esm/DragDropList/index.scss +0 -245
  310. package/publish/lib/esm/DragDropList/index.tsx +0 -504
  311. package/publish/lib/esm/DropdownMenu/Option.tsx +0 -55
  312. package/publish/lib/esm/DropdownMenu/index.scss +0 -205
  313. package/publish/lib/esm/DropdownMenu/index.tsx +0 -378
  314. package/publish/lib/esm/DynamicFields/index.tsx +0 -409
  315. package/publish/lib/esm/EventCalendar/index.scss +0 -407
  316. package/publish/lib/esm/EventCalendar/index.tsx +0 -1005
  317. package/publish/lib/esm/EventCalendarTimeline/index.scss +0 -926
  318. package/publish/lib/esm/EventCalendarTimeline/index.tsx +0 -2686
  319. package/publish/lib/esm/File/index.tsx +0 -477
  320. package/publish/lib/esm/HorizontalScrollContent/index.scss +0 -87
  321. package/publish/lib/esm/HorizontalScrollContent/index.tsx +0 -171
  322. package/publish/lib/esm/Input/index.tsx +0 -641
  323. package/publish/lib/esm/LiveSearch/index.scss +0 -129
  324. package/publish/lib/esm/LiveSearch/index.tsx +0 -1058
  325. package/publish/lib/esm/MasonryLayout/index.tsx +0 -326
  326. package/publish/lib/esm/ModalDialog/index.tsx +0 -572
  327. package/publish/lib/esm/ModeSwitch/index.tsx +0 -82
  328. package/publish/lib/esm/MultilevelDropdownMenu/ItemList.tsx +0 -265
  329. package/publish/lib/esm/MultilevelDropdownMenu/index.scss +0 -79
  330. package/publish/lib/esm/MultilevelDropdownMenu/index.tsx +0 -77
  331. package/publish/lib/esm/MultipleCheckboxes/index.tsx +0 -849
  332. package/publish/lib/esm/MultipleSelect/index.scss +0 -398
  333. package/publish/lib/esm/MultipleSelect/index.tsx +0 -769
  334. package/publish/lib/esm/MultipleSelect/utils/func.ts +0 -63
  335. package/publish/lib/esm/NativeSelect/index.tsx +0 -396
  336. package/publish/lib/esm/NativeSelect/utils/func.ts +0 -51
  337. package/publish/lib/esm/NumberInput/index.tsx +0 -425
  338. package/publish/lib/esm/Pagination/index.tsx +0 -286
  339. package/publish/lib/esm/Pagination/pagination-navigators.tsx +0 -60
  340. package/publish/lib/esm/Radio/index.tsx +0 -694
  341. package/publish/lib/esm/RangeSlider/index.scss +0 -186
  342. package/publish/lib/esm/RangeSlider/index.tsx +0 -241
  343. package/publish/lib/esm/Refresher/index.tsx +0 -121
  344. package/publish/lib/esm/RootPortal/index.tsx +0 -59
  345. package/publish/lib/esm/ScrollReveal/index.tsx +0 -148
  346. package/publish/lib/esm/Scrollbar/index.scss +0 -221
  347. package/publish/lib/esm/Scrollbar/index.tsx +0 -561
  348. package/publish/lib/esm/SearchBar/index.tsx +0 -252
  349. package/publish/lib/esm/Select/index.scss +0 -639
  350. package/publish/lib/esm/Select/index.tsx +0 -3104
  351. package/publish/lib/esm/Select/utils/func.ts +0 -98
  352. package/publish/lib/esm/ShowMoreLess/index.scss +0 -27
  353. package/publish/lib/esm/ShowMoreLess/index.tsx +0 -145
  354. package/publish/lib/esm/SplitterPanel/index.scss +0 -82
  355. package/publish/lib/esm/SplitterPanel/index.tsx +0 -174
  356. package/publish/lib/esm/Stepper/index.scss +0 -315
  357. package/publish/lib/esm/Stepper/index.tsx +0 -325
  358. package/publish/lib/esm/Switch/index.tsx +0 -149
  359. package/publish/lib/esm/Table/Table.tsx +0 -351
  360. package/publish/lib/esm/Table/TableBody.tsx +0 -41
  361. package/publish/lib/esm/Table/TableCaption.tsx +0 -34
  362. package/publish/lib/esm/Table/TableCell.tsx +0 -126
  363. package/publish/lib/esm/Table/TableColgroup.tsx +0 -38
  364. package/publish/lib/esm/Table/TableContext.tsx +0 -26
  365. package/publish/lib/esm/Table/TableFoot.tsx +0 -28
  366. package/publish/lib/esm/Table/TableHead.tsx +0 -28
  367. package/publish/lib/esm/Table/TableRow.tsx +0 -76
  368. package/publish/lib/esm/Table/index.scss +0 -418
  369. package/publish/lib/esm/Table/index.tsx +0 -14
  370. package/publish/lib/esm/Table/utils/DragHandleSprite.tsx +0 -46
  371. package/publish/lib/esm/Table/utils/SortSprite.tsx +0 -63
  372. package/publish/lib/esm/Table/utils/TableFilter.tsx +0 -56
  373. package/publish/lib/esm/Table/utils/ToggleSelection.tsx +0 -255
  374. package/publish/lib/esm/Table/utils/func.ts +0 -182
  375. package/publish/lib/esm/Table/utils/hooks/useTableDraggable.tsx +0 -342
  376. package/publish/lib/esm/Table/utils/hooks/useTableKeyPress.tsx +0 -255
  377. package/publish/lib/esm/Table/utils/hooks/useTableResponsive.tsx +0 -92
  378. package/publish/lib/esm/Table/utils/hooks/useTableSort.tsx +0 -187
  379. package/publish/lib/esm/Tabs/TabList.tsx +0 -50
  380. package/publish/lib/esm/Tabs/TabPanel.tsx +0 -44
  381. package/publish/lib/esm/Tabs/Tabs.tsx +0 -282
  382. package/publish/lib/esm/Tabs/index.tsx +0 -3
  383. package/publish/lib/esm/TagInput/index.scss +0 -126
  384. package/publish/lib/esm/TagInput/index.tsx +0 -379
  385. package/publish/lib/esm/Textarea/index.tsx +0 -621
  386. package/publish/lib/esm/Toast/Item.tsx +0 -165
  387. package/publish/lib/esm/Toast/Toast.tsx +0 -391
  388. package/publish/lib/esm/Toast/ToastContext.tsx +0 -104
  389. package/publish/lib/esm/Toast/__toast.vanilla.js +0 -422
  390. package/publish/lib/esm/Toast/index.scss +0 -197
  391. package/publish/lib/esm/Toast/index.tsx +0 -3
  392. package/publish/lib/esm/Toast/types.ts +0 -60
  393. package/publish/lib/esm/Toast/useToast.tsx +0 -72
  394. package/publish/lib/esm/Tooltip/index.tsx +0 -416
  395. package/publish/lib/esm/Tree/TreeList.tsx +0 -600
  396. package/publish/lib/esm/Tree/index.scss +0 -384
  397. package/publish/lib/esm/Tree/index.tsx +0 -661
  398. package/publish/lib/esm/Tree/init-height.tsx +0 -40
  399. package/publish/lib/esm/Tree/utils/func.ts +0 -15
  400. package/publish/lib/esm/Utils/hooks/useAutosizeTextArea.tsx +0 -131
  401. package/publish/lib/esm/Utils/hooks/useBoundedDrag.tsx +0 -301
  402. package/publish/lib/esm/Utils/hooks/useClickOutside.tsx +0 -69
  403. package/publish/lib/esm/Utils/hooks/useComId.tsx +0 -13
  404. package/publish/lib/esm/Utils/hooks/useDebounce.tsx +0 -40
  405. package/publish/lib/esm/Utils/hooks/useDragDropPosition.tsx +0 -417
  406. package/publish/lib/esm/Utils/hooks/useDraggable.tsx +0 -265
  407. package/publish/lib/esm/Utils/hooks/useHistoryTracker.tsx +0 -554
  408. package/publish/lib/esm/Utils/hooks/useInterval.tsx +0 -74
  409. package/publish/lib/esm/Utils/hooks/useIsMobile.tsx +0 -139
  410. package/publish/lib/esm/Utils/hooks/useKeyPress.tsx +0 -104
  411. package/publish/lib/esm/Utils/hooks/useSessionStorageListener.tsx +0 -45
  412. package/publish/lib/esm/Utils/hooks/useStreamController.tsx +0 -277
  413. package/publish/lib/esm/Utils/hooks/useThrottle.tsx +0 -39
  414. package/publish/lib/esm/Utils/hooks/useWindowScroll.tsx +0 -83
  415. package/publish/lib/esm/Utils/libs/anim.ts +0 -96
  416. package/publish/lib/esm/Utils/libs/buffer.ts +0 -262
  417. package/publish/lib/esm/Utils/libs/cls.ts +0 -64
  418. package/publish/lib/esm/Utils/libs/convert.ts +0 -59
  419. package/publish/lib/esm/Utils/libs/date.ts +0 -598
  420. package/publish/lib/esm/Utils/libs/dom.ts +0 -150
  421. package/publish/lib/esm/Utils/libs/easing.ts +0 -201
  422. package/publish/lib/esm/Utils/libs/extract.ts +0 -160
  423. package/publish/lib/esm/Utils/libs/format-string.ts +0 -116
  424. package/publish/lib/esm/Utils/libs/formdata.ts +0 -93
  425. package/publish/lib/esm/Utils/libs/getElementProperty.ts +0 -150
  426. package/publish/lib/esm/Utils/libs/guid.ts +0 -16
  427. package/publish/lib/esm/Utils/libs/initDefaultOptions.ts +0 -43
  428. package/publish/lib/esm/Utils/libs/inputsCalculation.ts +0 -160
  429. package/publish/lib/esm/Utils/libs/math.ts +0 -276
  430. package/publish/lib/esm/Utils/libs/object.ts +0 -68
  431. package/publish/lib/esm/Utils/libs/os.ts +0 -63
  432. package/publish/lib/esm/Utils/libs/performance.ts +0 -47
  433. package/publish/lib/esm/Utils/libs/sanitize.ts +0 -55
  434. package/publish/lib/esm/Utils/libs/time.ts +0 -139
  435. package/publish/lib/esm/Utils/libs/tree.ts +0 -119
  436. package/publish/lib/esm/Utils/libs/validate.ts +0 -434
  437. package/publish/lib/esm/Utils/libs/viewport.ts +0 -20
  438. package/publish/lib/esm/Utils/plugins/bodyScrollLock.ts +0 -286
  439. package/publish/lib/esm/index.js +0 -47
  440. package/publish/package.json +0 -1
  441. /package/{publish/Accordion → Accordion}/index.d.ts +0 -0
  442. /package/{publish/Accordion → Accordion}/index.js +0 -0
  443. /package/{publish/BackToTop → BackToTop}/index.css +0 -0
  444. /package/{publish/BackToTop → BackToTop}/index.d.ts +0 -0
  445. /package/{publish/BackToTop → BackToTop}/index.js +0 -0
  446. /package/{publish/CascadingSelect → CascadingSelect}/index.css +0 -0
  447. /package/{publish/CascadingSelect → CascadingSelect}/index.d.ts +0 -0
  448. /package/{publish/CascadingSelectE2E → CascadingSelectE2E}/index.css +0 -0
  449. /package/{publish/CascadingSelectE2E → CascadingSelectE2E}/index.d.ts +0 -0
  450. /package/{publish/Chatbox → Chatbox}/index.css +0 -0
  451. /package/{publish/Chatbox → Chatbox}/index.d.ts +0 -0
  452. /package/{publish/Checkbox → Checkbox}/index.d.ts +0 -0
  453. /package/{publish/ColorPicker → ColorPicker}/index.css +0 -0
  454. /package/{publish/ColorPicker → ColorPicker}/index.d.ts +0 -0
  455. /package/{publish/Date → Date}/index.css +0 -0
  456. /package/{publish/Date → Date}/index.d.ts +0 -0
  457. /package/{publish/DigitalClock → DigitalClock}/index.d.ts +0 -0
  458. /package/{publish/DigitalClock → DigitalClock}/index.js +0 -0
  459. /package/{publish/DragDropList → DragDropList}/index.css +0 -0
  460. /package/{publish/DragDropList → DragDropList}/index.d.ts +0 -0
  461. /package/{publish/DragDropList → DragDropList}/index.js +0 -0
  462. /package/{publish/DropdownMenu → DropdownMenu}/index.css +0 -0
  463. /package/{publish/DropdownMenu → DropdownMenu}/index.d.ts +0 -0
  464. /package/{publish/DropdownMenu → DropdownMenu}/index.js +0 -0
  465. /package/{publish/DynamicFields → DynamicFields}/index.d.ts +0 -0
  466. /package/{publish/DynamicFields → DynamicFields}/index.js +0 -0
  467. /package/{publish/EventCalendar → EventCalendar}/index.css +0 -0
  468. /package/{publish/EventCalendar → EventCalendar}/index.d.ts +0 -0
  469. /package/{publish/EventCalendar → EventCalendar}/index.js +0 -0
  470. /package/{publish/EventCalendarTimeline → EventCalendarTimeline}/index.css +0 -0
  471. /package/{publish/HorizontalScrollContent → HorizontalScrollContent}/index.css +0 -0
  472. /package/{publish/HorizontalScrollContent → HorizontalScrollContent}/index.d.ts +0 -0
  473. /package/{publish/HorizontalScrollContent → HorizontalScrollContent}/index.js +0 -0
  474. /package/{publish/Input → Input}/index.d.ts +0 -0
  475. /package/{publish/LiveSearch → LiveSearch}/index.css +0 -0
  476. /package/{publish/LiveSearch → LiveSearch}/index.d.ts +0 -0
  477. /package/{publish/MasonryLayout → MasonryLayout}/index.d.ts +0 -0
  478. /package/{publish/MasonryLayout → MasonryLayout}/index.js +0 -0
  479. /package/{publish/ModalDialog → ModalDialog}/index.d.ts +0 -0
  480. /package/{publish/ModalDialog → ModalDialog}/index.js +0 -0
  481. /package/{publish/ModeSwitch → ModeSwitch}/index.d.ts +0 -0
  482. /package/{publish/ModeSwitch → ModeSwitch}/index.js +0 -0
  483. /package/{publish/MultilevelDropdownMenu → MultilevelDropdownMenu}/index.css +0 -0
  484. /package/{publish/MultilevelDropdownMenu → MultilevelDropdownMenu}/index.d.ts +0 -0
  485. /package/{publish/MultilevelDropdownMenu → MultilevelDropdownMenu}/index.js +0 -0
  486. /package/{publish/MultipleCheckboxes → MultipleCheckboxes}/index.d.ts +0 -0
  487. /package/{publish/MultipleCheckboxes → MultipleCheckboxes}/index.js +0 -0
  488. /package/{publish/MultipleSelect → MultipleSelect}/index.css +0 -0
  489. /package/{publish/MultipleSelect → MultipleSelect}/index.d.ts +0 -0
  490. /package/{publish/MultipleSelect → MultipleSelect}/index.js +0 -0
  491. /package/{publish/NativeSelect → NativeSelect}/index.d.ts +0 -0
  492. /package/{publish/NumberInput → NumberInput}/index.d.ts +0 -0
  493. /package/{publish/Pagination → Pagination}/index.d.ts +0 -0
  494. /package/{publish/Pagination → Pagination}/index.js +0 -0
  495. /package/{publish/Radio → Radio}/index.d.ts +0 -0
  496. /package/{publish/RangeSlider → RangeSlider}/index.css +0 -0
  497. /package/{publish/RangeSlider → RangeSlider}/index.d.ts +0 -0
  498. /package/{publish/Refresher → Refresher}/index.d.ts +0 -0
  499. /package/{publish/Refresher → Refresher}/index.js +0 -0
  500. /package/{publish/RootPortal → RootPortal}/index.d.ts +0 -0
  501. /package/{publish/RootPortal → RootPortal}/index.js +0 -0
  502. /package/{publish/ScrollReveal → ScrollReveal}/index.d.ts +0 -0
  503. /package/{publish/ScrollReveal → ScrollReveal}/index.js +0 -0
  504. /package/{publish/Scrollbar → Scrollbar}/index.css +0 -0
  505. /package/{publish/Scrollbar → Scrollbar}/index.d.ts +0 -0
  506. /package/{publish/Scrollbar → Scrollbar}/index.js +0 -0
  507. /package/{publish/SearchBar → SearchBar}/index.d.ts +0 -0
  508. /package/{publish/Select → Select}/index.css +0 -0
  509. /package/{publish/Select → Select}/index.d.ts +0 -0
  510. /package/{publish/ShowMoreLess → ShowMoreLess}/index.css +0 -0
  511. /package/{publish/ShowMoreLess → ShowMoreLess}/index.d.ts +0 -0
  512. /package/{publish/ShowMoreLess → ShowMoreLess}/index.js +0 -0
  513. /package/{publish/SplitterPanel → SplitterPanel}/index.css +0 -0
  514. /package/{publish/SplitterPanel → SplitterPanel}/index.d.ts +0 -0
  515. /package/{publish/SplitterPanel → SplitterPanel}/index.js +0 -0
  516. /package/{publish/Stepper → Stepper}/index.css +0 -0
  517. /package/{publish/Stepper → Stepper}/index.d.ts +0 -0
  518. /package/{publish/Stepper → Stepper}/index.js +0 -0
  519. /package/{publish/Switch → Switch}/index.d.ts +0 -0
  520. /package/{publish/Table → Table}/index.css +0 -0
  521. /package/{publish/Table → Table}/index.d.ts +0 -0
  522. /package/{publish/Table → Table}/index.js +0 -0
  523. /package/{publish/Tabs → Tabs}/index.d.ts +0 -0
  524. /package/{publish/Tabs → Tabs}/index.js +0 -0
  525. /package/{publish/TagInput → TagInput}/index.d.ts +0 -0
  526. /package/{publish/Textarea → Textarea}/index.d.ts +0 -0
  527. /package/{publish/Toast → Toast}/index.css +0 -0
  528. /package/{publish/Toast → Toast}/index.d.ts +0 -0
  529. /package/{publish/Toast → Toast}/index.js +0 -0
  530. /package/{publish/Tooltip → Tooltip}/index.css +0 -0
  531. /package/{publish/Tooltip → Tooltip}/index.d.ts +0 -0
  532. /package/{publish/Tooltip → Tooltip}/index.js +0 -0
  533. /package/{publish/Tree → Tree}/index.css +0 -0
  534. /package/{publish/Tree → Tree}/index.d.ts +0 -0
  535. /package/{publish/Tree → Tree}/index.js +0 -0
  536. /package/{publish/Utils → Utils}/anim.d.ts +0 -0
  537. /package/{publish/Utils → Utils}/anim.js +0 -0
  538. /package/{publish/Utils → Utils}/bodyScrollLock.d.ts +0 -0
  539. /package/{publish/Utils → Utils}/bodyScrollLock.js +0 -0
  540. /package/{publish/Utils → Utils}/buffer.d.ts +0 -0
  541. /package/{publish/Utils → Utils}/buffer.js +0 -0
  542. /package/{publish/Utils → Utils}/cls.d.ts +0 -0
  543. /package/{publish/Utils → Utils}/cls.js +0 -0
  544. /package/{publish/Utils → Utils}/convert.d.ts +0 -0
  545. /package/{publish/Utils → Utils}/convert.js +0 -0
  546. /package/{publish/Utils → Utils}/date.d.ts +0 -0
  547. /package/{publish/Utils → Utils}/date.js +0 -0
  548. /package/{publish/Utils → Utils}/dom.d.ts +0 -0
  549. /package/{publish/Utils → Utils}/dom.js +0 -0
  550. /package/{publish/Utils → Utils}/easing.d.ts +0 -0
  551. /package/{publish/Utils → Utils}/easing.js +0 -0
  552. /package/{publish/Utils → Utils}/extract.d.ts +0 -0
  553. /package/{publish/Utils → Utils}/extract.js +0 -0
  554. /package/{publish/Utils → Utils}/format-string.d.ts +0 -0
  555. /package/{publish/Utils → Utils}/format-string.js +0 -0
  556. /package/{publish/Utils → Utils}/formdata.d.ts +0 -0
  557. /package/{publish/Utils → Utils}/formdata.js +0 -0
  558. /package/{publish/Utils → Utils}/getElementProperty.d.ts +0 -0
  559. /package/{publish/Utils → Utils}/getElementProperty.js +0 -0
  560. /package/{publish/Utils → Utils}/guid.d.ts +0 -0
  561. /package/{publish/Utils → Utils}/guid.js +0 -0
  562. /package/{publish/Utils → Utils}/initDefaultOptions.d.ts +0 -0
  563. /package/{publish/Utils → Utils}/initDefaultOptions.js +0 -0
  564. /package/{publish/Utils → Utils}/inputsCalculation.d.ts +0 -0
  565. /package/{publish/Utils → Utils}/inputsCalculation.js +0 -0
  566. /package/{publish/Utils → Utils}/math.d.ts +0 -0
  567. /package/{publish/Utils → Utils}/math.js +0 -0
  568. /package/{publish/Utils → Utils}/object.d.ts +0 -0
  569. /package/{publish/Utils → Utils}/object.js +0 -0
  570. /package/{publish/Utils → Utils}/os.d.ts +0 -0
  571. /package/{publish/Utils → Utils}/os.js +0 -0
  572. /package/{publish/Utils → Utils}/performance.d.ts +0 -0
  573. /package/{publish/Utils → Utils}/performance.js +0 -0
  574. /package/{publish/Utils → Utils}/sanitize.d.ts +0 -0
  575. /package/{publish/Utils → Utils}/sanitize.js +0 -0
  576. /package/{publish/Utils → Utils}/time.d.ts +0 -0
  577. /package/{publish/Utils → Utils}/time.js +0 -0
  578. /package/{publish/Utils → Utils}/tree.d.ts +0 -0
  579. /package/{publish/Utils → Utils}/tree.js +0 -0
  580. /package/{publish/Utils → Utils}/useAutosizeTextArea.d.ts +0 -0
  581. /package/{publish/Utils → Utils}/useAutosizeTextArea.js +0 -0
  582. /package/{publish/Utils → Utils}/useBoundedDrag.d.ts +0 -0
  583. /package/{publish/Utils → Utils}/useBoundedDrag.js +0 -0
  584. /package/{publish/Utils → Utils}/useClickOutside.d.ts +0 -0
  585. /package/{publish/Utils → Utils}/useClickOutside.js +0 -0
  586. /package/{publish/Utils → Utils}/useComId.d.ts +0 -0
  587. /package/{publish/Utils → Utils}/useComId.js +0 -0
  588. /package/{publish/Utils → Utils}/useDebounce.d.ts +0 -0
  589. /package/{publish/Utils → Utils}/useDebounce.js +0 -0
  590. /package/{publish/Utils → Utils}/useDragDropPosition.d.ts +0 -0
  591. /package/{publish/Utils → Utils}/useDragDropPosition.js +0 -0
  592. /package/{publish/Utils → Utils}/useDraggable.d.ts +0 -0
  593. /package/{publish/Utils → Utils}/useDraggable.js +0 -0
  594. /package/{publish/Utils → Utils}/useHistoryTracker.d.ts +0 -0
  595. /package/{publish/Utils → Utils}/useHistoryTracker.js +0 -0
  596. /package/{publish/Utils → Utils}/useInterval.d.ts +0 -0
  597. /package/{publish/Utils → Utils}/useInterval.js +0 -0
  598. /package/{publish/Utils → Utils}/useIsMobile.d.ts +0 -0
  599. /package/{publish/Utils → Utils}/useIsMobile.js +0 -0
  600. /package/{publish/Utils → Utils}/useKeyPress.d.ts +0 -0
  601. /package/{publish/Utils → Utils}/useKeyPress.js +0 -0
  602. /package/{publish/Utils → Utils}/useSessionStorageListener.d.ts +0 -0
  603. /package/{publish/Utils → Utils}/useSessionStorageListener.js +0 -0
  604. /package/{publish/Utils → Utils}/useStreamController.d.ts +0 -0
  605. /package/{publish/Utils → Utils}/useStreamController.js +0 -0
  606. /package/{publish/Utils → Utils}/useThrottle.d.ts +0 -0
  607. /package/{publish/Utils → Utils}/useThrottle.js +0 -0
  608. /package/{publish/Utils → Utils}/useWindowScroll.d.ts +0 -0
  609. /package/{publish/Utils → Utils}/useWindowScroll.js +0 -0
  610. /package/{publish/Utils → Utils}/validate.d.ts +0 -0
  611. /package/{publish/Utils → Utils}/validate.js +0 -0
  612. /package/{publish/Utils → Utils}/viewport.d.ts +0 -0
  613. /package/{publish/Utils → Utils}/viewport.js +0 -0
@@ -1,1797 +0,0 @@
1
- import React, { useState, useRef, useEffect, forwardRef, KeyboardEvent, ChangeEvent, FocusEvent, useImperativeHandle } from 'react';
2
-
3
- import Input from 'funda-input';
4
- import RootPortal from 'funda-root-portal';
5
-
6
- import useComId from 'funda-utils/dist/cjs/useComId';
7
- import {
8
- padZero,
9
- dateFormat,
10
- isTimeString,
11
- getNow,
12
- isValidDate,
13
- isValidHours,
14
- isValidMinutesAndSeconds,
15
- isValidYear,
16
- isValidMonth,
17
- isValidDay,
18
- getCurrentYear,
19
- getCurrentMonth,
20
- getCurrentDay,
21
- getLastDayInMonth
22
- } from 'funda-utils/dist/cjs/date';
23
- import useWindowScroll from 'funda-utils/dist/cjs/useWindowScroll';
24
- import useClickOutside from 'funda-utils/dist/cjs/useClickOutside';
25
- import {
26
- getAbsolutePositionOfStage
27
- } from 'funda-utils/dist/cjs/getElementProperty';
28
- import { isNumeric } from 'funda-utils/dist/cjs/math';
29
- import { clsWrite, combinedCls } from 'funda-utils/dist/cjs/cls';
30
-
31
-
32
- import Calendar from './Calendar';
33
-
34
-
35
-
36
- // Localization
37
- import i18n__en_US from './localization/en_US';
38
- import i18n__zh_CN from './localization/zh_CN';
39
-
40
-
41
-
42
-
43
-
44
- export type DateProps = {
45
- contentRef?: React.ForwardedRef<any>; // could use "Array" on contentRef.current, such as contentRef.current[0], contentRef.current[1]
46
- popupRef?: React.ForwardedRef<any>; // could use "Array" on popupRef.current, such as popupRef.current[0], popupRef.current[1]
47
- depth?: number;
48
- popupClassName?: string;
49
- triggerClassName?: string;
50
- wrapperClassName?: string;
51
- controlClassName?: string;
52
- controlGroupWrapperClassName?: string;
53
- controlGroupTextClassName?: string;
54
- enableEntireAreaPopup?: boolean;
55
- delimiter?: string;
56
- hideClearButton?: boolean;
57
- showToolsWhenHover?: boolean;
58
- offset?: number;
59
- exceededSidePosOffset?: number;
60
- localization?: 'en_US' | 'zh_CN';
61
- type?: 'date' | 'datetime-local' | 'time';
62
- onlyTime?: boolean;
63
- truncateSeconds?: boolean;
64
- valueUseSlash?: boolean;
65
- defaultValue?: string;
66
- value?: string;
67
- clickInitValue?: string;
68
- min?: string;
69
- max?: string;
70
- placeholder?: string;
71
- label?: React.ReactNode | string;
72
- units?: string;
73
- name?: string;
74
- alt?: any;
75
- disabled?: any;
76
- requiredLabel?: React.ReactNode | string;
77
- required?: any;
78
- readOnly?: any;
79
- iconLeft?: React.ReactNode | string;
80
- iconRight?: React.ReactNode | string;
81
-
82
- /** -- */
83
- id?: string;
84
- style?: React.CSSProperties;
85
- autoComplete?: string;
86
- tabIndex?: number;
87
- [key: `data-${string}`]: string | undefined;
88
- onLoad?: (e: any, data: any, allSplittingInputs: any[]) => void;
89
- onChange?: (e: any, data: any, isValidDate: boolean, allSplittingInputs: any[]) => void;
90
- onBlur?: (e: any, allSplittingInputs: any[]) => void;
91
- onFocus?: (e: any, allSplittingInputs: any[]) => void;
92
- onPressEnter?: (e: any, allSplittingInputs: any[]) => void;
93
- onOpenPopup?: (allSplittingInputs: any[]) => void;
94
- onClosePopup?: (allSplittingInputs: any[]) => void;
95
- //
96
- onChangeDate?: (currentData: any) => void;
97
- onChangeMonth?: (currentData: any) => void;
98
- onChangeYear?: (currentData: any) => void;
99
- onChangeToday?: (currentData: any) => void;
100
- onChangeHours?: (currentData: any) => void;
101
- onChangeMinutes?: (currentData: any) => void;
102
- onChangeSeconds?: (currentData: any) => void;
103
- onClear?: (currentData: any) => void;
104
-
105
-
106
-
107
- // calendar
108
- langHoursTitle?: string;
109
- langMinutesTitle?: string;
110
- langSecondsTitle?: string;
111
- langWeek?: string[];
112
- langWeekFull?: string[];
113
- langMonths?: string[];
114
- langMonthsFull?: string[];
115
- langToday?: string;
116
- };
117
-
118
-
119
- const Date = forwardRef((props: DateProps, externalRef: any) => {
120
- const {
121
- contentRef,
122
- popupRef,
123
- depth,
124
- triggerClassName,
125
- popupClassName,
126
- wrapperClassName,
127
- controlClassName,
128
- controlGroupWrapperClassName,
129
- controlGroupTextClassName,
130
- enableEntireAreaPopup,
131
- delimiter,
132
- hideClearButton,
133
- showToolsWhenHover,
134
- offset,
135
- exceededSidePosOffset,
136
- localization,
137
- type,
138
- onlyTime,
139
- truncateSeconds,
140
- valueUseSlash,
141
- disabled,
142
- requiredLabel,
143
- required,
144
- readOnly,
145
- defaultValue,
146
- value,
147
- clickInitValue,
148
- min,
149
- max,
150
- placeholder,
151
- label,
152
- units,
153
- name,
154
- alt,
155
- id,
156
- iconLeft,
157
- iconRight,
158
- autoComplete,
159
- style,
160
- tabIndex,
161
- onLoad,
162
- onChange,
163
- onBlur,
164
- onFocus,
165
- onPressEnter,
166
- onOpenPopup,
167
- onClosePopup,
168
-
169
- //
170
- onChangeDate,
171
- onChangeMonth,
172
- onChangeYear,
173
- onChangeToday,
174
- onChangeHours,
175
- onChangeMinutes,
176
- onChangeSeconds,
177
- onClear,
178
-
179
-
180
- //calendar
181
- langHoursTitle,
182
- langMinutesTitle,
183
- langSecondsTitle,
184
- langWeek,
185
- langWeekFull,
186
- langMonths,
187
- langMonthsFull,
188
- langToday,
189
-
190
- //
191
- ...attributes
192
- } = props;
193
-
194
-
195
- const DEPTH = depth || 1055; // the default value same as bootstrap
196
- const MIN_SPACE_FOR_DROPDOWN = 200; // Minimum space needed to show dropdown below trigger
197
-
198
-
199
- const defaultValueIsEmpty = (s: any) => {
200
- return typeof s === 'undefined' || s === null || s === 'null' || s === '';
201
- };
202
-
203
- const propExist = (p: any) => {
204
- return typeof p !== 'undefined' && p !== null && p !== '';
205
- };
206
-
207
-
208
-
209
- // Localization
210
- let _langHoursTitle = langHoursTitle || 'Hours';
211
- let _langMinutesTitle = langMinutesTitle || 'Minutes';
212
- let _langSecondsTitle= langSecondsTitle || 'Seconds';
213
- let _langWeek = langWeek;
214
- let _langWeekFull = langWeekFull;
215
- let _langMonths = langMonths;
216
- let _langMonthsFull = langMonthsFull;
217
- let _langToday = langToday;
218
-
219
- //
220
- const DELIMITER_DATE = delimiter || '/';
221
- const DELIMITER_TIME = ':';
222
- const SHOW_TOOLS_ENABLED = !(typeof showToolsWhenHover === 'undefined' || showToolsWhenHover === false);
223
- const HIDE_CLEAR_BTN_ENABLED = !(typeof hideClearButton === 'undefined' || hideClearButton === false);
224
-
225
- //
226
- const COM_HAS_DATE = typeof onlyTime === 'undefined' || onlyTime === false;
227
- const COM_HAS_TIME = type === 'datetime-local' || type === 'time';
228
- const COM_NO_SECONDS = typeof truncateSeconds === 'undefined' || truncateSeconds === false;
229
-
230
-
231
-
232
- // placeholder
233
- let datePlaceholder = placeholder || placeholder === '' ? placeholder : 'yyyy/MM/dd HH:mm:ss';
234
-
235
- if (typeof placeholder === 'undefined') {
236
- datePlaceholder = `${COM_HAS_DATE ? 'yyyy/MM/dd ' : ''}${COM_HAS_TIME ? `HH:mm${COM_NO_SECONDS ? ':ss' : ''}` : ''}`;
237
- }
238
-
239
- if (typeof localization === 'string') {
240
-
241
- switch (localization) {
242
- case 'en_US':
243
- _langHoursTitle = i18n__en_US.hoursTitle;
244
- _langMinutesTitle = i18n__en_US.minutesTitle;
245
- _langSecondsTitle = i18n__en_US.secondsTitle;
246
- _langWeek = i18n__en_US.week;
247
- _langWeekFull = i18n__en_US.weekFull;
248
- _langMonths = i18n__en_US.months;
249
- _langMonthsFull = i18n__en_US.monthsFull;
250
- _langToday = i18n__en_US.today;
251
- break;
252
-
253
- case 'zh_CN':
254
- _langHoursTitle = i18n__zh_CN.hoursTitle;
255
- _langMinutesTitle = i18n__zh_CN.minutesTitle;
256
- _langSecondsTitle = i18n__zh_CN.secondsTitle;
257
- _langWeek = i18n__zh_CN.week;
258
- _langWeekFull = i18n__zh_CN.weekFull;
259
- _langMonths = i18n__zh_CN.months;
260
- _langMonthsFull = i18n__zh_CN.monthsFull;
261
- _langToday = i18n__zh_CN.today;
262
- break;
263
-
264
- }
265
-
266
- }
267
-
268
-
269
-
270
- //
271
- const POS_OFFSET = Number(offset) || 10;
272
- const EXCEEDED_SIDE_POS_OFFSET = Number(exceededSidePosOffset) || 15;
273
- const uniqueID = useComId();
274
- const idRes = id || uniqueID;
275
- const rootRef = useRef<any>(null);
276
- const modalRef = useRef<any>(null);
277
- const inputRef = useRef<any>(null);
278
- const listContentRef = useRef<any>(null);
279
-
280
- const partedInputYear = useRef<HTMLInputElement | null>(null);
281
- const partedInputMonth = useRef<HTMLInputElement | null>(null);
282
- const partedInputDay = useRef<HTMLInputElement | null>(null);
283
- const partedInputHours = useRef<HTMLInputElement | null>(null);
284
- const partedInputMinutes = useRef<HTMLInputElement | null>(null);
285
- const partedInputSeconds = useRef<HTMLInputElement | null>(null);
286
-
287
- const [dateDefaultValueExist, setDateDefaultValueExist] = useState<boolean>(false);
288
- const [initSplitClickEvOk, setInitSplitClickEvOk] = useState<boolean>(false);
289
- const [splitVals, setSplitVals] = useState<any[]>(['0000','00','00','00','00','00']);
290
- const [changedVal, setChangedVal] = useState<string>(value || '');
291
- const [isShow, setIsShow] = useState<boolean>(false);
292
- const [dateVal, setDateVal] = useState<string>('');
293
- const [timeVal, setTimeVal] = useState<string[]>(['00', '00', '00']);
294
-
295
- const hoursArr = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];
296
- const msArr = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59'];
297
-
298
- // blur for popup window
299
- const popupBlurEnabled = useRef<boolean>(false); // DO NOT USE 'useState()'
300
-
301
-
302
- // effective element movement on keystroke
303
- const [focusableSplitInputId, setFocusableSplitInputId] = useState<string>(COM_HAS_DATE ? 'el-year' : 'el-hours');
304
- const [splitInputsIds] = useState<string[]>(['el-year', 'el-month', 'el-day', 'el-hours', 'el-minutes', 'el-seconds']);
305
- const splitInputs = useRef(new Map<string, HTMLElement>());
306
- const splitInputsTabIndex = tabIndex || 0;
307
-
308
-
309
-
310
- //
311
- const getAllSplittingInputs = () => {
312
- return [
313
- partedInputYear.current,
314
- partedInputMonth.current,
315
- partedInputDay.current,
316
- partedInputHours.current,
317
- partedInputMinutes.current,
318
- partedInputSeconds.current
319
- ];
320
- };
321
-
322
- const onlyHHmm = (str: string) => {
323
- // match HH:mm
324
- const timePattern = /^([01]\d|2[0-3]):([0-5]\d)$/;
325
- return timePattern.test(str);
326
- };
327
-
328
-
329
- // exposes the following methods
330
- useImperativeHandle(
331
- popupRef,
332
- () => ({
333
- close: () => {
334
- popwinPosHide();
335
- handleBlur(null);
336
- }
337
- }),
338
- [popupRef],
339
- );
340
-
341
- useImperativeHandle(
342
- contentRef,
343
- () => ({
344
- control: () => {
345
- return getAllSplittingInputs();
346
- },
347
- getLatestVal: () => {
348
- return !dateDefaultValueExist ? `` : valueResConverter(changedVal);
349
- },
350
- clear: (cb?: any) => {
351
- clearAll();
352
- cb?.();
353
-
354
- onChange?.(inputRef.current, '', false, getAllSplittingInputs());
355
- },
356
- blur: (cb?: any) => {
357
- getAllSplittingInputs().forEach((el: any) => {
358
- if (el !== null) el.blur();
359
- });
360
-
361
- handleBlur(null);
362
- cb?.();
363
- },
364
- /*
365
- set('2024-04-18 21:54:09', () => { console.log('callback') }])
366
- */
367
- set: (value: any, cb?: any) => {
368
-
369
- const [curInitSplitClickEvOk, curNoTargetVal, curTargetVal] = getActualDefaultValue(value, true);
370
- setDateDefaultValueExist(defaultValueIsEmpty(value) ? false : true);
371
- initValue(curTargetVal);
372
-
373
- cb?.();
374
-
375
- onChange?.(inputRef.current, value, isValidDate(value), getAllSplittingInputs());
376
- }
377
- }),
378
- [contentRef, dateDefaultValueExist, changedVal],
379
- );
380
-
381
-
382
- // click outside
383
- useClickOutside({
384
- enabled: isShow && rootRef.current,
385
- isOutside: (event: any) => {
386
- return event.target.closest(`.date2d__wrapper`) === null && event.target.closest(`.date2d-cal__wrapper`) === null;
387
- },
388
- handle: (event: any) => {
389
- popwinPosHide();
390
-
391
- //remove focus style
392
- rootRef.current?.classList.remove('focus');
393
-
394
- // move out the popup window
395
- if (popupBlurEnabled.current) {
396
- onBlur?.(inputRef.current, getAllSplittingInputs());
397
- popupBlurEnabled.current = false;
398
- }
399
- }
400
- }, [isShow, rootRef]);
401
-
402
-
403
-
404
-
405
- // Add function to the element that should be used as the scrollable area.
406
- // const [scrollData, windowScrollUpdate] = useWindowScroll({
407
- // performance: ['debounce', 50], // "['debounce', 500]" or "['throttle', 500]"
408
- // handle: (scrollData: any) => {
409
- // popwinPosHide();
410
- // }
411
- // });
412
-
413
-
414
-
415
- const getFullTimeData = (v: Date | String, padZeroEnabled: boolean = true) => {
416
-
417
- if (typeof v === 'string' && !isValidDate(v)) {
418
- return {
419
- res: '0000-00-00 00:00:00',
420
- resNoSeconds: '0000-00-00 00:00',
421
- date: `0000-00-00`,
422
- year: `0000`,
423
- month: `00`,
424
- day: `00`,
425
- hours: `00`,
426
- minutes: `00`,
427
- seconds: `00`
428
- }
429
- }
430
-
431
- const date: any = dateFormat(v as any);
432
-
433
- const year = date.getFullYear();
434
- const month = padZero(date.getMonth() + 1, padZeroEnabled);
435
- const day = padZero(date.getDate(), padZeroEnabled);
436
- const hours = padZero(date.getHours(), padZeroEnabled);
437
- const minutes = padZero(date.getMinutes(), padZeroEnabled);
438
- const seconds = padZero(date.getSeconds(), padZeroEnabled);
439
- const res = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
440
- const res2 = `${year}-${month}-${day} ${hours}:${minutes}`;
441
-
442
- return {
443
- res: res,
444
- resNoSeconds: res2,
445
- date: `${year}-${month}-${day}`,
446
- year: `${year}`,
447
- month: `${month}`,
448
- day: `${day}`,
449
- hours: `${hours}`,
450
- minutes: `${minutes}`,
451
- seconds: `${seconds}`
452
- }
453
- };
454
-
455
-
456
- //
457
- const MIN: any = typeof min !== 'undefined' && min !== '' && min !== null && isValidDate(min) ? getFullTimeData(min) : '';
458
- const MAX: any = typeof max !== 'undefined' && max !== '' && max !== null && isValidDate(max) ? getFullTimeData(max) : '';
459
-
460
- const getActualDefaultValue = (v?: any, init: boolean = false) => {
461
- const _v = getFullTimeData(getNow());
462
- const _nowVal: any = `${_v.date} ${_v.hours}:${_v.minutes}:${_v.seconds}`;
463
-
464
- // expected default value (only HH:mm:ss)
465
- const _expectedValue = isTimeString(v) || onlyHHmm(v) ? `${_v.date} ${onlyHHmm(v) ? v + ':00' : v}` : v;
466
-
467
-
468
- if (!init) setInitSplitClickEvOk(true);
469
-
470
-
471
- if (!initSplitClickEvOk) {
472
-
473
-
474
- let noTargetVal = typeof clickInitValue === 'undefined' || clickInitValue === null || clickInitValue === 'null' || clickInitValue === '';
475
- if (!defaultValueIsEmpty(v)) {
476
- noTargetVal = true;
477
- }
478
-
479
- //
480
- let targetVal: any = noTargetVal ? (defaultValueIsEmpty(v) ? _nowVal : _expectedValue) : clickInitValue;
481
-
482
- if (typeof v === 'undefined') {
483
- targetVal = noTargetVal ? _nowVal : clickInitValue;
484
- }
485
-
486
- //
487
- return [false, noTargetVal, targetVal];
488
- } else {
489
-
490
-
491
- let targetVal: any = defaultValueIsEmpty(v) ? _nowVal : _expectedValue;
492
-
493
- if (typeof v === 'undefined') {
494
- targetVal = _nowVal;
495
- }
496
-
497
- return [true, true, targetVal];
498
- }
499
-
500
-
501
-
502
- };
503
-
504
-
505
-
506
- function popwinPosInit() {
507
-
508
- if (modalRef.current === null || listContentRef.current === null || inputRef.current === null) return;
509
-
510
-
511
- // update modal position
512
- const _modalRef: any = modalRef.current;
513
- const _triggerRef: any = inputRef.current;
514
-
515
- // console.log(getAbsolutePositionOfStage(_triggerRef));
516
-
517
- if (_modalRef === null) return;
518
-
519
- const { x, y, width, height } = getAbsolutePositionOfStage(_triggerRef);
520
- const _triggerBox = _triggerRef.getBoundingClientRect();
521
- let targetPos = '';
522
-
523
-
524
- // STEP 1:
525
- //-----------
526
- // Detect position
527
- if (window.innerHeight - _triggerBox.top > MIN_SPACE_FOR_DROPDOWN) {
528
- targetPos = 'bottom';
529
- } else {
530
- targetPos = 'top';
531
- }
532
-
533
- // STEP 2:
534
- //-----------
535
- // Adjust position
536
- if (targetPos === 'top') {
537
- _modalRef.style.left = x + 'px';
538
- //_modalRef.style.top = y - POS_OFFSET - (listContentRef.current.clientHeight) - 2 + 'px';
539
- _modalRef.style.marginTop = 0;
540
- _modalRef.style.top = 'auto';
541
- _modalRef.style.bottom = (window.innerHeight - _triggerBox.top) + POS_OFFSET + 2 + 'px';
542
- _modalRef.style.setProperty('position', 'fixed', 'important');
543
- _modalRef.classList.add('pos-top');
544
- }
545
-
546
- if (targetPos === 'bottom') {
547
- _modalRef.style.marginTop = 0;
548
- _modalRef.style.left = x + 'px';
549
- _modalRef.style.bottom = 'auto';
550
- _modalRef.style.top = y + height + POS_OFFSET + 'px';
551
- _modalRef.style.setProperty('position', 'absolute', 'important');
552
- _modalRef.classList.remove('pos-top');
553
- }
554
-
555
- // STEP 3:
556
- //-----------
557
- // Determine whether it exceeds the far right or left side of the screen
558
- // Determine whether it exceeds the max height of the popup
559
- const _modalContent = _modalRef;
560
- const _modalBox = _modalContent.getBoundingClientRect();
561
- if (typeof _modalContent.dataset.offset === 'undefined' && _modalBox.left > 0) {
562
-
563
- // 10 pixels is used to account for some bias in mobile devices
564
- if ((_modalBox.right + 10) > window.innerWidth) {
565
- const _modalOffsetPosition = _modalBox.right - window.innerWidth + EXCEEDED_SIDE_POS_OFFSET;
566
- _modalContent.dataset.offset = _modalOffsetPosition;
567
- _modalContent.style.marginLeft = `-${_modalOffsetPosition}px`;
568
- // console.log('_modalPosition: ', _modalOffsetPosition)
569
- }
570
-
571
-
572
- if ((_modalBox.left - 10) < 0) {
573
- const _modalOffsetPosition = Math.abs(_modalBox.left) + EXCEEDED_SIDE_POS_OFFSET;
574
- _modalContent.dataset.offset = _modalOffsetPosition;
575
- _modalContent.style.marginLeft = `${_modalOffsetPosition}px`;
576
- // console.log('_modalPosition: ', _modalOffsetPosition)
577
- }
578
-
579
- if (window.innerHeight - _modalBox.bottom < 0) {
580
- _modalRef.style.marginTop = `${window.innerHeight - _modalBox.bottom}px`;
581
- }
582
-
583
- }
584
-
585
- }
586
-
587
- function popwinPosHide() {
588
- setIsShow(false);
589
- onClosePopup?.(getAllSplittingInputs());
590
-
591
- }
592
-
593
-
594
-
595
- function handleShow() {
596
- setIsShow(true);
597
-
598
- setTimeout(() => {
599
- popwinPosInit();
600
-
601
- onOpenPopup?.(getAllSplittingInputs());
602
-
603
- }, 0);
604
-
605
- // focus
606
- handleFocus(null);
607
-
608
- }
609
-
610
-
611
- function handleFocus(event: FocusEvent<HTMLElement> | null) {
612
- rootRef.current?.classList.add('focus');
613
-
614
-
615
- //
616
- onFocus?.(inputRef.current, getAllSplittingInputs());
617
-
618
- }
619
-
620
- function handleChange(e: React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent<HTMLInputElement> | null, isComposition: boolean, el: HTMLInputElement, value: string) {
621
-
622
- onChange?.(inputRef.current, value, isValidDate(value), getAllSplittingInputs());
623
-
624
- }
625
-
626
-
627
- function handleBlur(event: FocusEvent<HTMLElement> | null) {
628
-
629
- //remove focus style
630
- rootRef.current?.classList.remove('focus');
631
-
632
- //
633
- onBlur?.(inputRef.current, getAllSplittingInputs());
634
- }
635
-
636
-
637
- function handleInitSplitClickEv(e: any) {
638
- e.preventDefault();
639
- e.stopPropagation(); // Avoid triggering other inputs
640
-
641
- // If disabled or readOnly, the operations are not performed
642
- if (disabled || readOnly) {
643
- return;
644
- }
645
-
646
- e.target.select();
647
-
648
-
649
- resetDefauleValueExist();
650
-
651
- // Automatically pop up a pop-up window
652
- if (enableEntireAreaPopup) {
653
- handleShow();
654
- }
655
-
656
- // If there is no valid default value in the input field,
657
- // onChange should be triggered only after the resetDefauleValueExist() function is processed
658
- if (!dateDefaultValueExist) {
659
- const _date = `${splitVals[0]}-${splitVals[1]}-${splitVals[2]}`;
660
- const _full = `${_date} ${splitVals[3]}:${splitVals[4]}:${splitVals[5]}`;
661
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
662
- }
663
-
664
-
665
- }
666
-
667
- async function handleKeyPressed(event: KeyboardEvent<HTMLDivElement>) {
668
- const key = event.code;
669
-
670
- if (key === 'Enter' || key === 'NumpadEnter') {
671
- event.preventDefault();
672
-
673
- getAllSplittingInputs().forEach((el: any) => {
674
- if (el !== null) el.blur();
675
- });
676
-
677
- handleBlur(null);
678
-
679
- //
680
- onPressEnter?.(inputRef.current, getAllSplittingInputs());
681
- }
682
- }
683
-
684
- async function handleKeyPressedForSplitInputs(event: KeyboardEvent<HTMLDivElement>) {
685
- const key = event.code;
686
- const btnMark = (event.target as any).dataset.mark;
687
- const isNumLockOn = event.getModifierState && event.getModifierState('NumLock');
688
-
689
- // Check for both regular arrow keys and numpad arrow keys
690
- // Numpad2/4/6/8 trigger direction is allowed only when NumLock is off
691
- const isLeftArrow = key === 'ArrowLeft' || (key === 'Numpad4' && !isNumLockOn);
692
- const isRightArrow = key === 'ArrowRight' || (key === 'Numpad6' && !isNumLockOn);
693
-
694
- const move = (direction: 'left' | 'right') => {
695
- const currentIndex = splitInputsIds.findIndex((s: string) => s === btnMark);
696
- const nextIndex = direction === 'left'
697
- ? currentIndex === 0 ? splitInputsIds.length - 1 : currentIndex - 1
698
- : currentIndex === splitInputsIds.length - 1 ? 0 : currentIndex + 1;
699
-
700
- const nextOption = splitInputsIds.at(nextIndex);
701
- if (nextOption) {
702
- setTimeout(() => {
703
- (splitInputs.current.get(nextOption) as HTMLInputElement)?.select();
704
- }, 0);
705
- setFocusableSplitInputId(nextOption);
706
- }
707
- };
708
-
709
- if (isLeftArrow) {
710
- move('left');
711
- }
712
-
713
- if (isRightArrow) {
714
- move('right');
715
- }
716
- }
717
-
718
-
719
- function clearAll() {
720
- setDateDefaultValueExist(false);
721
- onChange?.(inputRef.current, '', false, getAllSplittingInputs());
722
- }
723
-
724
-
725
-
726
- function resetDefauleValueExist() {
727
- // Does the current input box have a "valid default value"?
728
- if (!dateDefaultValueExist) setDateDefaultValueExist(true);
729
- }
730
-
731
- function resetPopupBlurStatus() {
732
- if (!popupBlurEnabled.current) popupBlurEnabled.current = true;
733
- }
734
-
735
-
736
- function valueResConverter(inputData: any) {
737
- const v = isValidDate(inputData) ? inputData : `${getFullTimeData(getNow()).date} ${inputData}`;
738
-
739
-
740
- const _onlyTime = `${getFullTimeData(v).hours}:${getFullTimeData(v).minutes}${truncateSeconds ? `` : `:${getFullTimeData(v).seconds}`}`;
741
- const _date = `${getFullTimeData(v).year}${valueUseSlash ? `/` : '-'}${getFullTimeData(v).month}${valueUseSlash ? `/` : '-'}${getFullTimeData(v).day}`;
742
- const _time = COM_HAS_TIME ? ` ${getFullTimeData(v).hours}:${getFullTimeData(v).minutes}${truncateSeconds ? `` : `:${getFullTimeData(v).seconds}`}` : '';
743
-
744
- return onlyTime ? _onlyTime : `${_date}${_time}`;
745
- }
746
-
747
-
748
-
749
- function checkDisabledSeconds(curYear: number | string, curMonth: number, curDay: number | string, curHours: number | string, curMinutes: number | string, curSeconds: number | string) {
750
- let res: boolean = false;
751
-
752
- // maximum
753
- if (MAX !== '') {
754
- if (Number(curYear) > Number(MAX.year)) {
755
- res = true;
756
- }
757
-
758
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) > Number(MAX.month)) {
759
- res = true;
760
- }
761
-
762
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) > Number(MAX.day)) {
763
- res = true;
764
- }
765
-
766
-
767
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) > Number(MAX.hours) ) {
768
- res = true;
769
- }
770
-
771
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) === Number(MAX.hours) && Number(curMinutes) > Number(MAX.minutes) ) {
772
- res = true;
773
- }
774
-
775
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) === Number(MAX.hours) && Number(curMinutes) === Number(MAX.minutes) && Number(curSeconds) > Number(MAX.seconds) ) {
776
- res = true;
777
- }
778
- }
779
-
780
- // minimum
781
- if (MIN !== '') {
782
- if (Number(curYear) < Number(MIN.year)) {
783
- res = true;
784
- }
785
-
786
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) < Number(MIN.month)) {
787
- res = true;
788
- }
789
-
790
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) < Number(MIN.day)) {
791
- res = true;
792
- }
793
-
794
-
795
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) < Number(MIN.hours) ) {
796
- res = true;
797
- }
798
-
799
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) === Number(MIN.hours) && Number(curMinutes) < Number(MIN.minutes) ) {
800
- res = true;
801
- }
802
-
803
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) === Number(MIN.hours) && Number(curMinutes) === Number(MIN.minutes) && Number(curSeconds) < Number(MIN.seconds) ) {
804
- res = true;
805
- }
806
- }
807
-
808
-
809
- return res;
810
- }
811
-
812
-
813
- function checkDisabledMinutes(curYear: number | string, curMonth: number, curDay: number | string, curHours: number | string, curMinutes: number | string) {
814
- let res: boolean = false;
815
-
816
- // maximum
817
- if (MAX !== '') {
818
- if (Number(curYear) > Number(MAX.year)) {
819
- res = true;
820
- }
821
-
822
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) > Number(MAX.month)) {
823
- res = true;
824
- }
825
-
826
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) > Number(MAX.day)) {
827
- res = true;
828
- }
829
-
830
-
831
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) > Number(MAX.hours) ) {
832
- res = true;
833
- }
834
-
835
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) === Number(MAX.hours) && Number(curMinutes) > Number(MAX.minutes) ) {
836
- res = true;
837
- }
838
- }
839
-
840
- // minimum
841
- if (MIN !== '') {
842
- if (Number(curYear) < Number(MIN.year)) {
843
- res = true;
844
- }
845
-
846
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) < Number(MIN.month)) {
847
- res = true;
848
- }
849
-
850
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) < Number(MIN.day)) {
851
- res = true;
852
- }
853
-
854
-
855
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) < Number(MIN.hours) ) {
856
- res = true;
857
- }
858
-
859
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) === Number(MIN.hours) && Number(curMinutes) < Number(MIN.minutes) ) {
860
- res = true;
861
- }
862
- }
863
-
864
-
865
- return res;
866
- }
867
-
868
-
869
- function checkDisabledHours(curYear: number | string, curMonth: number, curDay: number | string, curHours: number | string) {
870
- let res: boolean = false;
871
-
872
- // maximum
873
- if (MAX !== '') {
874
- if (Number(curYear) > Number(MAX.year)) {
875
- res = true;
876
- }
877
-
878
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) > Number(MAX.month)) {
879
- res = true;
880
- }
881
-
882
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) > Number(MAX.day)) {
883
- res = true;
884
- }
885
-
886
-
887
- if (Number(curYear) === Number(MAX.year) && Number(curMonth+1) === Number(MAX.month) && Number(curDay) === Number(MAX.day) && Number(curHours) > Number(MAX.hours) ) {
888
- res = true;
889
- }
890
- }
891
-
892
- // minimum
893
- if (MIN !== '') {
894
- if (Number(curYear) < Number(MIN.year)) {
895
- res = true;
896
- }
897
-
898
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) < Number(MIN.month)) {
899
- res = true;
900
- }
901
-
902
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) < Number(MIN.day)) {
903
- res = true;
904
- }
905
-
906
-
907
- if (Number(curYear) === Number(MIN.year) && Number(curMonth+1) === Number(MIN.month) && Number(curDay) === Number(MIN.day) && Number(curHours) < Number(MIN.hours) ) {
908
- res = true;
909
- }
910
- }
911
-
912
- return res;
913
- }
914
-
915
- function initValue(v: any) {
916
- const _res = valueResConverter(v);
917
-
918
- setChangedVal(_res);
919
-
920
- if (isValidDate(v)) {
921
-
922
- const {
923
- date,
924
- year,
925
- month,
926
- day,
927
- hours,
928
- minutes,
929
- seconds
930
- } = getFullTimeData(v);
931
-
932
-
933
- setDateVal(date);
934
- setTimeVal([hours, minutes, seconds]);
935
- setSplitVals([year, month, day, hours, minutes, seconds]);
936
- }
937
-
938
- return [_res, v]
939
-
940
- }
941
-
942
- function tools() {
943
- return <span className={combinedCls(
944
- 'date2d__control-tools',
945
- {
946
- 'date2d__control-tools--hover-show-tools': SHOW_TOOLS_ENABLED
947
- }
948
-
949
- )}>
950
-
951
- <a
952
- tabIndex={-1}
953
- href="#"
954
- className={combinedCls(
955
- 'date2d__control-tools__close',
956
- {
957
- 'd-none': HIDE_CLEAR_BTN_ENABLED || !dateDefaultValueExist || disabled || readOnly
958
- }
959
- )} onClick={(e: React.MouseEvent) => {
960
- e.preventDefault();
961
- e.stopPropagation(); // Avoid triggering pop-ups
962
-
963
- // If disabled or readOnly, the operations are not performed
964
- if (disabled || readOnly) {
965
- return;
966
- }
967
-
968
- clearAll();
969
- onClear?.(getFullTimeData(''));
970
- }}
971
- ><svg width="12px" height="12px" viewBox="0 0 1024 1024"><path fill="#000" d="M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z" /></svg></a>
972
-
973
- <a
974
- tabIndex={-1}
975
- href="#"
976
- className="date2d__control-tools__trigger"
977
- onClick={(e: React.MouseEvent) => {
978
- e.preventDefault();
979
- e.stopPropagation(); // Avoid triggering pop-ups
980
-
981
- // If disabled or readOnly, the operations are not performed
982
- if (disabled || readOnly) {
983
- return;
984
- }
985
-
986
- handleShow();
987
- }}
988
- >
989
- <svg width="14px" height="14px" viewBox="0 0 24 24" fill="none">
990
- <path d="M3 9H21M9 15L11 17L15 13M7 3V5M17 3V5M6.2 21H17.8C18.9201 21 19.4802 21 19.908 20.782C20.2843 20.5903 20.5903 20.2843 20.782 19.908C21 19.4802 21 18.9201 21 17.8V8.2C21 7.07989 21 6.51984 20.782 6.09202C20.5903 5.71569 20.2843 5.40973 19.908 5.21799C19.4802 5 18.9201 5 17.8 5H6.2C5.0799 5 4.51984 5 4.09202 5.21799C3.71569 5.40973 3.40973 5.71569 3.21799 6.09202C3 6.51984 3 7.07989 3 8.2V17.8C3 18.9201 3 19.4802 3.21799 19.908C3.40973 20.2843 3.71569 20.5903 4.09202 20.782C4.51984 21 5.07989 21 6.2 21Z" stroke="#000000" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
991
- </svg>
992
- </a>
993
-
994
- </span>;
995
- }
996
-
997
-
998
- useEffect(() => {
999
-
1000
-
1001
- // update default value
1002
- //--------------
1003
- const [curInitSplitClickEvOk, curNoTargetVal, curTargetVal] = getActualDefaultValue(value, true);
1004
- setDateDefaultValueExist(defaultValueIsEmpty(value) ? false : true);
1005
- const [a, b] = initValue(curTargetVal);
1006
- onLoad?.(a, getFullTimeData(b), getAllSplittingInputs());
1007
-
1008
-
1009
- }, [value]);
1010
-
1011
- useEffect(() => {
1012
-
1013
- // update default value (It does not re-render the component because the incoming value changes.)
1014
- //--------------
1015
- if (typeof defaultValue !== 'undefined') { //REQUIRED
1016
- const [curInitSplitClickEvOk, curNoTargetVal, curTargetVal] = getActualDefaultValue(defaultValue, true);
1017
- setDateDefaultValueExist(defaultValueIsEmpty(defaultValue) ? false : true);
1018
- const [a, b] = initValue(curTargetVal);
1019
- onLoad?.(a, getFullTimeData(b), getAllSplittingInputs());
1020
- }
1021
-
1022
- }, []);
1023
-
1024
-
1025
- return (
1026
- <>
1027
-
1028
- {label ? <>{typeof label === 'string' ? <div className="date2d__label"><label htmlFor={idRes} className="form-label" dangerouslySetInnerHTML={{ __html: `${label}` }}></label></div> : <div className="date2d__label"><label htmlFor={idRes} className="form-label">{label}</label></div>}</> : null}
1029
-
1030
-
1031
- <div
1032
- ref={rootRef}
1033
- data-overlay-id={`date2d__wrapper-${idRes}`}
1034
- className={combinedCls(
1035
- 'date2d__trigger d-inline-block',
1036
- `is-${type}`,
1037
- triggerClassName,
1038
- {
1039
- 'date2d__trigger--hover-show-tools': SHOW_TOOLS_ENABLED
1040
- }
1041
- )}
1042
- onFocus={handleFocus}
1043
- onBlur={handleBlur}
1044
- onKeyDown={handleKeyPressed}
1045
- onClick={enableEntireAreaPopup && !disabled && !readOnly ? handleShow : () => {}}
1046
-
1047
- >
1048
-
1049
-
1050
- <div className="date2d__control">
1051
- <Input
1052
- ref={(node) => {
1053
- inputRef.current = node;
1054
- if (typeof externalRef === 'function') {
1055
- externalRef(node);
1056
- } else if (externalRef) {
1057
- externalRef.current = node;
1058
- }
1059
- }}
1060
- disabled={disabled}
1061
- readOnly={readOnly}
1062
- tabIndex={-1}
1063
- type="text"
1064
- inputMode="none"
1065
- data-date-info={JSON.stringify(getFullTimeData(changedVal))}
1066
- wrapperClassName={wrapperClassName}
1067
- controlClassName={controlClassName}
1068
- controlExClassName=""
1069
- controlGroupWrapperClassName={controlGroupWrapperClassName}
1070
- controlGroupTextClassName={controlGroupTextClassName}
1071
- id={idRes}
1072
- name={name}
1073
- alt={alt}
1074
- placeholder={datePlaceholder}
1075
- value={!dateDefaultValueExist ? `` : valueResConverter(changedVal)}
1076
- autoComplete="off"
1077
- onChange={handleChange}
1078
- label=""
1079
- units={units}
1080
- iconLeft={iconLeft}
1081
- iconRight={iconRight}
1082
- requiredLabel={requiredLabel}
1083
- required={required}
1084
- appendControl={<>
1085
- <div className="date2d__control__inputplaceholder">
1086
-
1087
-
1088
- {/*
1089
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1090
- +++++++++++++++++++ Split Inputs +++++++++++++++++++++++++++++
1091
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1092
- */}
1093
- {COM_HAS_DATE ? <>
1094
- <input
1095
- ref={(node) => {
1096
- partedInputYear.current = node;
1097
- if (node) {
1098
- splitInputs.current.set(splitInputsIds[0], node);
1099
- } else {
1100
- splitInputs.current.delete(splitInputsIds[0]);
1101
- }
1102
- }}
1103
- tabIndex={splitInputsTabIndex}
1104
- data-mark={`${splitInputsIds[0]}`}
1105
- onKeyDown={handleKeyPressedForSplitInputs}
1106
- inputMode="numeric"
1107
- className="date2d__control__inputplaceholder--year"
1108
- value={!dateDefaultValueExist ? `` : splitVals[0]}
1109
- maxLength={4}
1110
- autoComplete="off"
1111
- disabled={disabled || null}
1112
- readOnly={readOnly || null}
1113
- onClick={handleInitSplitClickEv}
1114
- onChange={(e: any) => {
1115
- let _val = e.target.value;
1116
- if (_val !== '' && !isValidYear(_val) && isNumeric(_val) && Number(_val) > 9999) _val = '9999';
1117
- if (_val !== '' && !isValidYear(_val) && !isNumeric(_val)) _val = `${getCurrentYear()}`;
1118
-
1119
- const _date = `${_val}-${splitVals[1]}-${splitVals[2]}`;
1120
- const _full = `${_date} ${splitVals[3]}:${splitVals[4]}:${splitVals[5]}`;
1121
-
1122
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1123
- setSplitVals((prevState: string[]) => {
1124
- return [_val, prevState[1], prevState[2], prevState[3], prevState[4], prevState[5]];
1125
- });
1126
-
1127
- // update other data
1128
- setDateVal(_date);
1129
- setChangedVal(_full);
1130
- setTimeVal([splitVals[3], splitVals[4], splitVals[5]]);
1131
-
1132
- // Auto focus to next input if year is 4 digits
1133
- if (_val.length === 4) {
1134
- const nextInput = splitInputs.current.get(splitInputsIds[1]);
1135
- if (nextInput) {
1136
- (nextInput as HTMLInputElement).focus();
1137
- (nextInput as HTMLInputElement).select();
1138
- }
1139
- }
1140
- }}
1141
- {...attributes}
1142
- />
1143
- {dateDefaultValueExist ? DELIMITER_DATE : null}
1144
- <input
1145
- ref={(node) => {
1146
- partedInputMonth.current = node;
1147
- if (node) {
1148
- splitInputs.current.set(splitInputsIds[1], node);
1149
- } else {
1150
- splitInputs.current.delete(splitInputsIds[1]);
1151
- }
1152
- }}
1153
- tabIndex={splitInputsTabIndex}
1154
- data-mark={`${splitInputsIds[1]}`}
1155
- onKeyDown={handleKeyPressedForSplitInputs}
1156
- inputMode="numeric"
1157
- className="date2d__control__inputplaceholder--month"
1158
- value={!dateDefaultValueExist ? `` : splitVals[1]}
1159
- maxLength={2}
1160
- autoComplete="off"
1161
- disabled={disabled || null}
1162
- readOnly={readOnly || null}
1163
- onClick={handleInitSplitClickEv}
1164
- onChange={(e: any) => {
1165
- let _val = e.target.value;
1166
- if (_val !== '' && !isValidMonth(_val) && isNumeric(_val)) {
1167
- if (Number(_val) > 12) _val = '12';
1168
- if (Number(_val) < 1 && Number(_val) > 0) _val = '01';
1169
- }
1170
- if (_val !== '' && !isValidMonth(_val) && !isNumeric(_val)) _val = `${getCurrentMonth()}`;
1171
-
1172
- const _date = `${splitVals[0]}-${_val}-${splitVals[2]}`;
1173
- const _full = `${_date} ${splitVals[3]}:${splitVals[4]}:${splitVals[5]}`;
1174
-
1175
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1176
- setSplitVals((prevState: string[]) => {
1177
- return [prevState[0], _val, prevState[2], prevState[3], prevState[4], prevState[5]];
1178
- });
1179
-
1180
- // update other data
1181
- setDateVal(_date);
1182
- setChangedVal(_full);
1183
- setTimeVal([splitVals[3], splitVals[4], splitVals[5]]);
1184
-
1185
- // Auto focus to next input if month is 2 digits
1186
- if (_val.length === 2) {
1187
- const nextInput = splitInputs.current.get(splitInputsIds[2]);
1188
- if (nextInput) {
1189
- (nextInput as HTMLInputElement).focus();
1190
- (nextInput as HTMLInputElement).select();
1191
- }
1192
- }
1193
- }}
1194
- {...attributes}
1195
- />
1196
- {dateDefaultValueExist ? DELIMITER_DATE : null}
1197
- <input
1198
- ref={(node) => {
1199
- partedInputDay.current = node;
1200
- if (node) {
1201
- splitInputs.current.set(splitInputsIds[2], node);
1202
- } else {
1203
- splitInputs.current.delete(splitInputsIds[2]);
1204
- }
1205
- }}
1206
- tabIndex={splitInputsTabIndex}
1207
- data-mark={`${splitInputsIds[2]}`}
1208
- onKeyDown={handleKeyPressedForSplitInputs}
1209
- inputMode="numeric"
1210
- className="date2d__control__inputplaceholder--day"
1211
- value={!dateDefaultValueExist ? `` : splitVals[2]}
1212
- maxLength={2}
1213
- autoComplete="off"
1214
- disabled={disabled || null}
1215
- readOnly={readOnly || null}
1216
- onClick={handleInitSplitClickEv}
1217
- onChange={(e: any) => {
1218
- let _val = e.target.value;
1219
-
1220
- const _day = `${splitVals[0]}-${splitVals[1]}-01`;
1221
- const d = getLastDayInMonth(_day, new window.Date(_day).getMonth() + 1);
1222
-
1223
- if (_val !== '' && isValidDay(_val) && isNumeric(_val)) {
1224
- if (Number(_val) > Number(d)) _val = `${d}`;
1225
- }
1226
-
1227
- if (_val !== '' && !isValidDay(_val) && isNumeric(_val)) {
1228
- if (Number(_val) > Number(d)) _val = `${d}`;
1229
- if (Number(_val) < 1 && Number(_val) > 0) _val = '01';
1230
- }
1231
- if (_val !== '' && !isValidDay(_val) && !isNumeric(_val)) _val = `${getCurrentDay()}`;
1232
-
1233
- const _date = `${splitVals[0]}-${splitVals[1]}-${_val}`;
1234
- const _full = `${_date} ${splitVals[3]}:${splitVals[4]}:${splitVals[5]}`;
1235
-
1236
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1237
- setSplitVals((prevState: string[]) => {
1238
- return [prevState[0], prevState[1], _val, prevState[3], prevState[4], prevState[5]];
1239
- });
1240
-
1241
- // update other data
1242
- setDateVal(_date);
1243
- setChangedVal(_full);
1244
- setTimeVal([splitVals[3], splitVals[4], splitVals[5]]);
1245
-
1246
- // Auto focus to next input if day is 2 digits
1247
- if (_val.length === 2) {
1248
- const nextInput = splitInputs.current.get(splitInputsIds[3]);
1249
- if (nextInput) {
1250
- (nextInput as HTMLInputElement).focus();
1251
- (nextInput as HTMLInputElement).select();
1252
- }
1253
- }
1254
- }}
1255
- {...attributes}
1256
- />
1257
- &nbsp;
1258
-
1259
- </> : null}
1260
-
1261
- {COM_HAS_TIME ? <>
1262
- {/* TIME CONTROL */}
1263
- <input
1264
- ref={(node) => {
1265
- partedInputHours.current = node;
1266
- if (node) {
1267
- splitInputs.current.set(splitInputsIds[3], node);
1268
- } else {
1269
- splitInputs.current.delete(splitInputsIds[3]);
1270
- }
1271
- }}
1272
- tabIndex={splitInputsTabIndex}
1273
- data-mark={`${splitInputsIds[3]}`}
1274
- onKeyDown={handleKeyPressedForSplitInputs}
1275
- inputMode="numeric"
1276
- className="date2d__control__inputplaceholder--hours"
1277
- value={!dateDefaultValueExist ? `` : splitVals[3]}
1278
- maxLength={2}
1279
- autoComplete="off"
1280
- disabled={disabled || null}
1281
- readOnly={readOnly || null}
1282
- onClick={handleInitSplitClickEv}
1283
- onChange={(e: any) => {
1284
- let _val = e.target.value;
1285
- if (_val !== '' && !isValidHours(_val) && isNumeric(_val) && Number(_val) > 23) _val = '23';
1286
- if (_val !== '' && !isValidHours(_val) && !isNumeric(_val)) _val = '00';
1287
-
1288
-
1289
- const _date = `${splitVals[0]}-${splitVals[1]}-${splitVals[2]}`;
1290
- const _full = `${_date} ${_val}:${splitVals[4]}:${splitVals[5]}`;
1291
-
1292
-
1293
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1294
- setSplitVals((prevState: string[]) => {
1295
- return [prevState[0], prevState[1], prevState[2], _val, prevState[4], prevState[5]];
1296
- });
1297
-
1298
- // update other data
1299
- setDateVal(_date);
1300
- setChangedVal(_full);
1301
- setTimeVal([_val, splitVals[4], splitVals[5]]);
1302
-
1303
- // Auto focus to next input if hour is 2 digits
1304
- if (_val.length === 2) {
1305
- const nextInput = splitInputs.current.get(splitInputsIds[4]);
1306
- if (nextInput) {
1307
- (nextInput as HTMLInputElement).focus();
1308
- (nextInput as HTMLInputElement).select();
1309
- }
1310
- }
1311
- }}
1312
- {...attributes}
1313
- />
1314
- {/* TIME CONTROL */}
1315
-
1316
- {/* TIME CONTROL */}
1317
- {dateDefaultValueExist ? DELIMITER_TIME : null}
1318
- <input
1319
- ref={(node) => {
1320
- partedInputMinutes.current = node;
1321
- if (node) {
1322
- splitInputs.current.set(splitInputsIds[4], node);
1323
- } else {
1324
- splitInputs.current.delete(splitInputsIds[4]);
1325
- }
1326
- }}
1327
- tabIndex={splitInputsTabIndex}
1328
- data-mark={`${splitInputsIds[4]}`}
1329
- onKeyDown={handleKeyPressedForSplitInputs}
1330
- inputMode="numeric"
1331
- className="date2d__control__inputplaceholder--minutes"
1332
- value={!dateDefaultValueExist ? `` : splitVals[4]}
1333
- maxLength={2}
1334
- autoComplete="off"
1335
- disabled={disabled || null}
1336
- readOnly={readOnly || null}
1337
- onClick={handleInitSplitClickEv}
1338
- onChange={(e: any) => {
1339
- let _val = e.target.value;
1340
- if (_val !== '' && !isValidMinutesAndSeconds(_val) && isNumeric(_val) && Number(_val) > 59) _val = '59';
1341
- if (_val !== '' && !isValidMinutesAndSeconds(_val) && !isNumeric(_val)) _val = '00';
1342
-
1343
-
1344
- const _date = `${splitVals[0]}-${splitVals[1]}-${splitVals[2]}`;
1345
- const _full = `${_date} ${splitVals[3]}:${_val}:${splitVals[5]}`;
1346
-
1347
-
1348
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1349
- setSplitVals((prevState: string[]) => {
1350
- return [prevState[0], prevState[1], prevState[2], prevState[3], _val, prevState[5]];
1351
- });
1352
-
1353
- // update other data
1354
- setDateVal(_date);
1355
- setChangedVal(_full);
1356
- setTimeVal([splitVals[3], _val, splitVals[5]]);
1357
-
1358
- // Auto focus to next input if minute is 2 digits
1359
- if (_val.length === 2) {
1360
- const nextInput = splitInputs.current.get(splitInputsIds[5]);
1361
- if (nextInput) {
1362
- (nextInput as HTMLInputElement).focus();
1363
- (nextInput as HTMLInputElement).select();
1364
- }
1365
- }
1366
- }}
1367
- {...attributes}
1368
- />
1369
- {/* TIME CONTROL */}
1370
-
1371
-
1372
- {/* TIME CONTROL */}
1373
- {(COM_NO_SECONDS) ? <>
1374
- {dateDefaultValueExist ? DELIMITER_TIME : null}
1375
- <input
1376
- ref={(node) => {
1377
- partedInputSeconds.current = node;
1378
- if (node) {
1379
- splitInputs.current.set(splitInputsIds[5], node);
1380
- } else {
1381
- splitInputs.current.delete(splitInputsIds[5]);
1382
- }
1383
- }}
1384
- tabIndex={splitInputsTabIndex}
1385
- data-mark={`${splitInputsIds[5]}`}
1386
- onKeyDown={handleKeyPressedForSplitInputs}
1387
- inputMode="numeric"
1388
- className="date2d__control__inputplaceholder--seconds"
1389
- value={!dateDefaultValueExist ? `` : splitVals[5]}
1390
- maxLength={2}
1391
- autoComplete="off"
1392
- disabled={disabled || null}
1393
- readOnly={readOnly || null}
1394
- onClick={handleInitSplitClickEv}
1395
- onChange={(e: any) => {
1396
- let _val = e.target.value;
1397
- if (_val !== '' && !isValidMinutesAndSeconds(_val) && isNumeric(_val) && Number(_val) > 59) _val = '59';
1398
- if (_val !== '' && !isValidMinutesAndSeconds(_val) && !isNumeric(_val)) _val = '00';
1399
-
1400
-
1401
- const _date = `${splitVals[0]}-${splitVals[1]}-${splitVals[2]}`;
1402
- const _full = `${_date} ${splitVals[3]}:${splitVals[4]}:${_val}`;
1403
-
1404
-
1405
- onChange?.(inputRef.current, valueResConverter(_full), isValidDate(_full), getAllSplittingInputs());
1406
- setSplitVals((prevState: string[]) => {
1407
- return [prevState[0], prevState[1], prevState[2], prevState[3], prevState[4], _val];
1408
- });
1409
-
1410
-
1411
- // update other data
1412
- setDateVal(_date);
1413
- setChangedVal(_full);
1414
- setTimeVal([splitVals[3], splitVals[4], _val]);
1415
- // No auto focus for the last input (seconds)
1416
- }}
1417
- {...attributes}
1418
- />
1419
- </> : null}
1420
- {/* TIME CONTROL */}
1421
- </> : null}
1422
-
1423
-
1424
- {/*
1425
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1426
- +++++++++++++++++++ /Split Inputs +++++++++++++++++++++++++++++
1427
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1428
- */}
1429
-
1430
- </div>
1431
-
1432
-
1433
-
1434
- {/* TOOLS */}
1435
- {propExist(iconRight) ? tools() : null}
1436
- {/* /TOOLS */}
1437
-
1438
-
1439
- </>}
1440
- style={style}
1441
- {...attributes}
1442
- />
1443
-
1444
- {/* TOOLS */}
1445
- {!propExist(iconRight) ? tools() : null}
1446
- {/* /TOOLS */}
1447
-
1448
-
1449
- </div>
1450
-
1451
-
1452
-
1453
- </div>
1454
-
1455
-
1456
- <RootPortal show={isShow} containerClassName={combinedCls(
1457
- 'Date',
1458
- `Date--${type}`
1459
- )}>
1460
- <div
1461
- ref={modalRef}
1462
- id={`date2d__wrapper-${idRes}`}
1463
- className={combinedCls(
1464
- 'date2d__wrapper',
1465
- `is-${type}`,
1466
- popupClassName,
1467
- 'active'
1468
- )}
1469
- style={{
1470
- display: 'none',
1471
- zIndex: DEPTH
1472
- }}
1473
- {...attributes}
1474
- >
1475
-
1476
-
1477
- <div
1478
- ref={listContentRef}
1479
- className="date2d__tools-container d-flex flex-row"
1480
- >
1481
- {/* CALENDAR */}
1482
- {COM_HAS_DATE ? <>
1483
- <div className="date2d__calendar">
1484
- <Calendar
1485
- min={min}
1486
- max={max}
1487
- customTodayDate={changedVal}
1488
- langWeek={_langWeek}
1489
- langWeekFull={_langWeekFull}
1490
- langMonths={_langMonths}
1491
- langMonthsFull={_langMonthsFull}
1492
- langToday={_langToday}
1493
- onChangeDate={(e: any, currentData: any) => {
1494
- // If disabled or readOnly, the operations are not performed
1495
- if (disabled || readOnly) {
1496
- return;
1497
- }
1498
-
1499
- resetDefauleValueExist();
1500
-
1501
- //
1502
- const _v = getFullTimeData(`${currentData.date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1503
- setDateVal(currentData.date);
1504
- setChangedVal(`${currentData.date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1505
- setSplitVals((prevState: string[]) => {
1506
- return [_v.year, _v.month, _v.day, prevState[3], prevState[4], prevState[5]];
1507
- });
1508
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1509
-
1510
- //
1511
- onChangeDate?.(_v);
1512
-
1513
- //
1514
- resetPopupBlurStatus();
1515
-
1516
-
1517
- }}
1518
- onChangeToday={(currentData: any) => {
1519
- // If disabled or readOnly, the operations are not performed
1520
- if (disabled || readOnly) {
1521
- return;
1522
- }
1523
-
1524
- resetDefauleValueExist();
1525
-
1526
- //
1527
- const _date = `${currentData.year}-${currentData.month}-${currentData.day}`;
1528
- const _v = getFullTimeData(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1529
- setDateVal(`${_date}`);
1530
- setChangedVal(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1531
- setSplitVals((prevState: string[]) => {
1532
- return [_v.year, _v.month, _v.day, prevState[3], prevState[4], prevState[5]];
1533
- });
1534
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1535
-
1536
- //
1537
- onChangeToday?.(_v);
1538
-
1539
- //
1540
- resetPopupBlurStatus();
1541
-
1542
- }}
1543
- onChangeMonth={(currentData: any) => {
1544
- resetDefauleValueExist();
1545
-
1546
- //
1547
- const _date = `${currentData.year}-${currentData.month}-${currentData.day}`;
1548
- const _v = getFullTimeData(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1549
- setDateVal(_date);
1550
- setChangedVal(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1551
- setSplitVals((prevState: string[]) => {
1552
- return [_v.year, _v.month, _v.day, prevState[3], prevState[4], prevState[5]];
1553
- });
1554
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1555
-
1556
- //
1557
- onChangeMonth?.(_v);
1558
-
1559
- //
1560
- resetPopupBlurStatus();
1561
-
1562
- }}
1563
- onChangeYear={(currentData: any) => {
1564
- resetDefauleValueExist();
1565
-
1566
- //
1567
- const _date = `${currentData.year}-${currentData.month}-${currentData.day}`;
1568
- const _v = getFullTimeData(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1569
- setDateVal(_date);
1570
- setChangedVal(`${_date} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1571
- setSplitVals((prevState: string[]) => {
1572
- return [_v.year, _v.month, _v.day, prevState[3], prevState[4], prevState[5]];
1573
- });
1574
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1575
-
1576
- //
1577
- onChangeYear?.(_v);
1578
-
1579
- //
1580
- resetPopupBlurStatus();
1581
-
1582
-
1583
- }}
1584
- />
1585
- </div>
1586
- </> : null}
1587
-
1588
- {/* /CALENDAR */}
1589
-
1590
-
1591
- {COM_HAS_TIME ? <>
1592
-
1593
- {/* TIME CONTROL */}
1594
- <div className="date2d__hourslist border-end">
1595
- <h3>{_langHoursTitle}</h3>
1596
-
1597
- <ul>
1598
- {hoursArr.map((hour: string, i: number) => {
1599
-
1600
- const _curVal = getFullTimeData(`${dateVal} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1601
-
1602
- return <li key={i}>
1603
- <a
1604
- data-value={hour}
1605
- href="#"
1606
- tabIndex={-1}
1607
- onClick={(e: React.MouseEvent) => {
1608
- e.preventDefault();
1609
-
1610
- // If disabled or readOnly, the operations are not performed
1611
- if (disabled || readOnly) {
1612
- return;
1613
- }
1614
-
1615
- resetDefauleValueExist();
1616
-
1617
- //
1618
- const _val = (e.currentTarget as any).dataset.value;
1619
- const _v = getFullTimeData(`${dateVal} ${_val}:${timeVal[1]}:${timeVal[2]}`);
1620
-
1621
-
1622
- setChangedVal(`${dateVal} ${_val}:${timeVal[1]}:${timeVal[2]}`);
1623
- setTimeVal((prevState: string[]) => {
1624
- return [_val, prevState[1], prevState[2]];
1625
- });
1626
- setSplitVals((prevState: string[]) => {
1627
- return [prevState[0], prevState[1], prevState[2], _v.hours, prevState[4], prevState[5]];
1628
- });
1629
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1630
-
1631
- //
1632
- onChangeHours?.(_v);
1633
-
1634
-
1635
- //
1636
- resetPopupBlurStatus();
1637
-
1638
- }}
1639
- className={combinedCls(
1640
- {
1641
- 'selected': timeVal[0] == hour,
1642
- 'disabled': checkDisabledHours(_curVal.year, Number(_curVal.month)-1, _curVal.day, hour)
1643
- }
1644
- )}
1645
- >
1646
- {hour}
1647
- </a>
1648
- </li>
1649
- })}
1650
-
1651
- </ul>
1652
- </div>
1653
- {/* TIME CONTROL */}
1654
-
1655
- {/* TIME CONTROL */}
1656
- <div className="date2d__minuteslist border-end">
1657
- <h3>{_langMinutesTitle}</h3>
1658
-
1659
- <ul>
1660
- {msArr.map((v: string, i: number) => {
1661
- const _curVal = getFullTimeData(`${dateVal} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1662
-
1663
- return <li key={i}>
1664
- <a
1665
- data-value={v}
1666
- href="#"
1667
- tabIndex={-1}
1668
- onClick={(e: React.MouseEvent) => {
1669
- e.preventDefault();
1670
-
1671
- // If disabled or readOnly, the operations are not performed
1672
- if (disabled || readOnly) {
1673
- return;
1674
- }
1675
-
1676
- resetDefauleValueExist();
1677
-
1678
- //
1679
- const _val = (e.currentTarget as any).dataset.value;
1680
- const _v = getFullTimeData(`${dateVal} ${timeVal[0]}:${_val}:${timeVal[2]}`);
1681
-
1682
- setChangedVal(`${dateVal} ${timeVal[0]}:${_val}:${timeVal[2]}`);
1683
- setTimeVal((prevState: string[]) => {
1684
- return [prevState[0], _val, prevState[2]];
1685
- });
1686
- setSplitVals((prevState: string[]) => {
1687
- return [prevState[0], prevState[1], prevState[2], prevState[3], _v.minutes, prevState[5]];
1688
- });
1689
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1690
-
1691
- //
1692
- onChangeMinutes?.(_v);
1693
-
1694
-
1695
- //
1696
- resetPopupBlurStatus();
1697
-
1698
-
1699
- }}
1700
- className={combinedCls(
1701
- {
1702
- 'selected': timeVal[1] == v,
1703
- 'disabled': checkDisabledMinutes(_curVal.year, Number(_curVal.month)-1, _curVal.day, _curVal.hours, v)
1704
- }
1705
- )}
1706
- >
1707
-
1708
- {v}
1709
- </a>
1710
- </li>
1711
- })}
1712
-
1713
- </ul>
1714
- </div>
1715
- {/* TIME CONTROL */}
1716
-
1717
-
1718
- {/* TIME CONTROL */}
1719
- {(COM_NO_SECONDS) ? <>
1720
- <div className="date2d__secondslist border-end">
1721
- <h3>{_langSecondsTitle}</h3>
1722
-
1723
- <ul>
1724
- {msArr.map((v: string, i: number) => {
1725
- const _curVal = getFullTimeData(`${dateVal} ${timeVal[0]}:${timeVal[1]}:${timeVal[2]}`);
1726
-
1727
- return <li key={i}>
1728
- <a
1729
- data-value={v}
1730
- href="#"
1731
- tabIndex={-1}
1732
- onClick={(e: React.MouseEvent) => {
1733
- e.preventDefault();
1734
-
1735
- // If disabled or readOnly, the operations are not performed
1736
- if (disabled || readOnly) {
1737
- return;
1738
- }
1739
-
1740
- resetDefauleValueExist();
1741
-
1742
- //
1743
- const _val = (e.currentTarget as any).dataset.value;
1744
- const _v = getFullTimeData(`${dateVal} ${timeVal[0]}:${timeVal[1]}:${_val}`);
1745
- setChangedVal(`${dateVal} ${timeVal[0]}:${timeVal[1]}:${_val}`);
1746
- setTimeVal((prevState: string[]) => {
1747
- return [prevState[0], prevState[1], _val];
1748
- });
1749
- setSplitVals((prevState: string[]) => {
1750
- return [prevState[0], prevState[1], prevState[2], prevState[3], prevState[5], _v.seconds ];
1751
- });
1752
- onChange?.(inputRef.current, _v, true, getAllSplittingInputs());
1753
-
1754
- //
1755
- onChangeSeconds?.(_v);
1756
-
1757
-
1758
- //
1759
- resetPopupBlurStatus();
1760
-
1761
- }}
1762
- className={combinedCls(
1763
- {
1764
- 'selected': timeVal[2] == v,
1765
- 'disabled': checkDisabledSeconds(_curVal.year, Number(_curVal.month)-1, _curVal.day, _curVal.hours, _curVal.minutes, v)
1766
- }
1767
- )}
1768
- >
1769
-
1770
- {v}
1771
- </a>
1772
- </li>
1773
- })}
1774
-
1775
- </ul>
1776
- </div>
1777
- </> : null}
1778
- {/* TIME CONTROL */}
1779
- </> : null}
1780
-
1781
-
1782
-
1783
- </div>
1784
-
1785
- </div>
1786
- </RootPortal>
1787
-
1788
-
1789
-
1790
-
1791
-
1792
- </>
1793
- )
1794
- });
1795
-
1796
-
1797
- export default Date;