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
@@ -8,6 +8,8 @@ import {
8
8
  } from 'funda-utils/dist/cjs/buffer';
9
9
  import { clsWrite, combinedCls } from 'funda-utils/dist/cjs/cls';
10
10
 
11
+
12
+
11
13
  export type FileProps = {
12
14
  contentRef?: React.ForwardedRef<any>;
13
15
  wrapperClassName?: string;
@@ -41,6 +43,15 @@ export type FileProps = {
41
43
  fetchFuncAsync?: any;
42
44
  fetchFuncMethod?: string;
43
45
  fetchFuncMethodParams?: any[];
46
+ formDataAppend?: (formData: FormData, files: FileList) => void;
47
+ /** Enable chunked upload for large files */
48
+ enableChunkedUpload?: boolean;
49
+ /** Chunk size in bytes (default: 2MB) */
50
+ chunkSize?: number;
51
+ /** Custom function to append chunk data to FormData. Receives (formData: FormData, chunk: Blob, chunkIndex: number, totalChunks: number, file: File) */
52
+ chunkDataAppend?: (formData: FormData, chunk: Blob, chunkIndex: number, totalChunks: number, file: File) => void;
53
+ /** Callback for chunk upload progress. Receives (uploadedBytes: number, totalBytes: number, file: File, chunkIndex: number, totalChunks: number) */
54
+ onChunkProgress?: (uploadedBytes: number, totalBytes: number, file: File, chunkIndex: number, totalChunks: number) => void;
44
55
  onChange?: (e: any, e2: any, value: any) => void;
45
56
  onComplete?: (e: any, e2: any, callback: any, incomingData: string | null | undefined) => void;
46
57
  onProgress?: (files: any, e: any, e2: any) => void;
@@ -79,9 +90,17 @@ const File = forwardRef((props: FileProps, externalRef: any) => {
79
90
  fetchFuncAsync,
80
91
  fetchFuncMethod,
81
92
  fetchFuncMethodParams,
93
+ formDataAppend,
82
94
  onChange,
83
95
  onComplete,
84
96
  onProgress,
97
+
98
+ // Upload file in chunks
99
+ enableChunkedUpload,
100
+ chunkSize = 2 * 1024 * 1024, // Default 2MB
101
+ chunkDataAppend,
102
+ onChunkProgress,
103
+
85
104
  ...attributes
86
105
  } = props;
87
106
 
@@ -144,10 +163,9 @@ const File = forwardRef((props: FileProps, externalRef: any) => {
144
163
 
145
164
  let res = {};
146
165
  if (typeof window === 'undefined') return res;
147
-
148
-
166
+
149
167
  try {
150
- const response = await fetch(url + '?' + new URLSearchParams(fetchParams as any), {
168
+ const response = await fetch(typeof fetchParams !== 'undefined' ? url + '?' + new URLSearchParams(fetchParams as any) : url, {
151
169
  method: methord,
152
170
  body: data,
153
171
  ...rest
@@ -165,6 +183,75 @@ const File = forwardRef((props: FileProps, externalRef: any) => {
165
183
 
166
184
  }
167
185
 
186
+ /**
187
+ * Upload file in chunks
188
+ */
189
+ async function uploadFileInChunks(file: File, url: string, method: string = 'POST'): Promise<any> {
190
+ const totalChunks = Math.ceil(file.size / chunkSize);
191
+ const uploadId = `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
192
+ let uploadedBytes = 0;
193
+
194
+ // Upload each chunk sequentially
195
+ for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
196
+ const start = chunkIndex * chunkSize;
197
+ const end = Math.min(start + chunkSize, file.size);
198
+ const chunk = file.slice(start, end);
199
+
200
+ const formData = new FormData();
201
+
202
+ if (chunkDataAppend) {
203
+ // Use custom chunk data append function
204
+ chunkDataAppend(formData, chunk, chunkIndex, totalChunks, file);
205
+ } else {
206
+ // Default chunk upload format
207
+ formData.append('chunk', chunk);
208
+ formData.append('chunkIndex', chunkIndex.toString());
209
+ formData.append('totalChunks', totalChunks.toString());
210
+ formData.append('uploadId', uploadId);
211
+ formData.append('fileName', file.name);
212
+ formData.append('fileSize', file.size.toString());
213
+ formData.append('fileType', file.type);
214
+ }
215
+
216
+ // Update progress
217
+ uploadedBytes += (end - start);
218
+ onChunkProgress?.(uploadedBytes, file.size, file, chunkIndex, totalChunks);
219
+
220
+ // Upload chunk
221
+ const response: any = await fetchDataDefault(
222
+ url,
223
+ formData,
224
+ method,
225
+ {
226
+ headers: { 'Content-Type': 'multipart/form-data' }
227
+ }
228
+ );
229
+
230
+ // Check if chunk upload failed
231
+ if (response.error) {
232
+ throw new Error(`Chunk ${chunkIndex + 1}/${totalChunks} upload failed: ${response.error}`);
233
+ }
234
+
235
+ // If server returns a specific response indicating chunk upload success/failure, handle it
236
+ if (response.code !== undefined && response.code !== 0 && response.code !== 200) {
237
+ throw new Error(`Chunk ${chunkIndex + 1}/${totalChunks} upload failed: ${response.message || 'Unknown error'}`);
238
+ }
239
+ }
240
+
241
+ // After all chunks are uploaded, return the final response
242
+ // The server should merge chunks and return the final result
243
+ return {
244
+ code: 0,
245
+ message: 'Upload completed',
246
+ data: {
247
+ uploadId,
248
+ fileName: file.name,
249
+ fileSize: file.size,
250
+ totalChunks
251
+ }
252
+ };
253
+ }
254
+
168
255
 
169
256
  function handleLabelEnter(event: any) {
170
257
  event.currentTarget.getElementsByTagName('button')[0].className = labelHoverClassName ? labelHoverClassName : 'btn btn-primary';
@@ -192,26 +279,70 @@ const File = forwardRef((props: FileProps, externalRef: any) => {
192
279
  setProgressing(true);
193
280
 
194
281
 
282
+ // Use the default "fetch()" method to handle file references
195
283
  if (fetchUrl) {
196
284
 
197
- const formData = new FormData();
198
- formData.append('action', 'upload_plug_action');
285
+ // Check if chunked upload is enabled
286
+ if (enableChunkedUpload) {
287
+ // Upload files in chunks
288
+ (async () => {
289
+ try {
290
+ const uploadPromises: Promise<any>[] = [];
291
+
292
+ for (let i = 0; i < curFiles.length; i++) {
293
+ const file = curFiles[i];
294
+ uploadPromises.push(uploadFileInChunks(file, fetchUrl, fetchMethod ? fetchMethod : 'POST'));
295
+ }
199
296
 
200
- for (let i = 0; i < curFiles.length; i++) {
201
- formData.append("clientFiles", curFiles[i]);
202
- }
297
+ const results = await Promise.all(uploadPromises);
298
+
299
+ // Combine results from all files
300
+ const jsonData = {
301
+ code: 0,
302
+ message: 'All files uploaded successfully',
303
+ data: results
304
+ };
305
+
306
+ onComplete?.(fileInputRef.current, submitRef.current, jsonData, incomingData);
307
+ setProgressing(false);
308
+ resetDefaultVal();
309
+ } catch (error: any) {
310
+ const errorResponse = {
311
+ code: -1,
312
+ message: error.message || 'Upload failed',
313
+ error: error
314
+ };
315
+ onComplete?.(fileInputRef.current, submitRef.current, errorResponse, incomingData);
316
+ setProgressing(false);
317
+ }
318
+ })();
319
+ } else {
320
+ // Original non-chunked upload
321
+ const formData = new FormData();
322
+
323
+ if (formDataAppend) {
324
+ // Use custom formData.append function
325
+ formDataAppend(formData, curFiles);
326
+ } else {
327
+ // Default behavior
328
+ formData.append('action', 'upload_plug_action');
329
+ for (let i = 0; i < curFiles.length; i++) {
330
+ formData.append("clientFiles", curFiles[i]);
331
+ }
332
+ }
203
333
 
204
- fetchDataDefault(fetchUrl, formData, fetchMethod ? fetchMethod : 'POST', {
205
- headers: { 'Content-Type': 'multipart/form-data' }
206
- }).then(function (response: any) {
207
- const jsonData = response.data;
208
- onComplete?.(fileInputRef.current, submitRef.current, jsonData, incomingData);
209
- setProgressing(false);
334
+ fetchDataDefault(fetchUrl, formData, fetchMethod ? fetchMethod : 'POST', {
335
+ headers: { 'Content-Type': 'multipart/form-data' }
336
+ }).then(function (response: any) {
337
+ const jsonData = response;
338
+ onComplete?.(fileInputRef.current, submitRef.current, jsonData, incomingData);
339
+ setProgressing(false);
210
340
 
211
- // update default value
212
- resetDefaultVal();
341
+ // update default value
342
+ resetDefaultVal();
213
343
 
214
- });
344
+ });
345
+ }
215
346
  } else {
216
347
 
217
348
 
@@ -322,12 +453,6 @@ const File = forwardRef((props: FileProps, externalRef: any) => {
322
453
  setDefaultValue(null);
323
454
 
324
455
 
325
- //----
326
- //remove focus style
327
- if (val === '') {
328
- rootRef.current?.classList.remove('focus');
329
- }
330
-
331
456
  //
332
457
  onChange?.(fileInputRef.current, submitRef.current, fileInputRef.current.files);
333
458
 
@@ -354,8 +354,6 @@ const Input = forwardRef((props: InputProps, externalRef: any) => {
354
354
 
355
355
 
356
356
  function handleFocus(event: FocusEvent<HTMLInputElement>) {
357
- rootRef.current?.classList.add('focus');
358
-
359
357
  //
360
358
  if (valRef.current) {
361
359
  onFocus?.(event, onComposition, valRef.current);
@@ -365,13 +363,6 @@ const Input = forwardRef((props: InputProps, externalRef: any) => {
365
363
  function handleChange(event: ChangeEvent<HTMLInputElement> | KeyboardEvent<HTMLInputElement> | null, curVal: string) {
366
364
  setChangedVal(curVal);
367
365
 
368
-
369
- //----
370
- //remove focus style
371
- if (curVal === '') {
372
- rootRef.current?.classList.remove('focus');
373
- }
374
-
375
366
  //
376
367
  if (valRef.current) {
377
368
  onChange?.(event, onComposition, valRef.current, curVal);
@@ -390,13 +381,6 @@ const Input = forwardRef((props: InputProps, externalRef: any) => {
390
381
  const el = event.target;
391
382
  const val = event.target.value;
392
383
 
393
-
394
- //----
395
- //remove focus style
396
- if (val === '') {
397
- rootRef.current?.classList.remove('focus');
398
- }
399
-
400
384
  //
401
385
  if (valRef.current) {
402
386
  onBlur?.(event, onComposition, valRef.current);
@@ -520,7 +504,12 @@ const Input = forwardRef((props: InputProps, externalRef: any) => {
520
504
  return (
521
505
  <>
522
506
 
523
- <div className={clsWrite(wrapperClassName, 'mb-3 position-relative')} ref={rootRef}>
507
+ <div className={combinedCls(
508
+ clsWrite(wrapperClassName, 'mb-3 position-relative'),
509
+ {
510
+ 'focus-floating': changedVal !== ''
511
+ }
512
+ )} ref={rootRef}>
524
513
  {label ? <>{typeof label === 'string' ? <label htmlFor={idRes} className="form-label" dangerouslySetInnerHTML={{ __html: `${label}` }}></label> : <label htmlFor={idRes} className="form-label">{label}</label>}</> : null}
525
514
 
526
515
  <div className={combinedCls(
@@ -260,7 +260,7 @@ const NativeSelect = forwardRef((props: NativeSelectProps, externalRef: any) =>
260
260
 
261
261
  //
262
262
  function handleFocus(event: any) {
263
- rootRef.current?.classList.add('focus');
263
+ rootRef.current?.classList.add('focus-floating');
264
264
 
265
265
  //
266
266
  onFocus?.(event);
@@ -283,7 +283,7 @@ const NativeSelect = forwardRef((props: NativeSelectProps, externalRef: any) =>
283
283
 
284
284
  //----
285
285
  //remove focus style
286
- rootRef.current?.classList.remove('focus');
286
+ rootRef.current?.classList.remove('focus-floating');
287
287
 
288
288
  //
289
289
  if ( typeof(onChange) === 'function' ) {
@@ -298,7 +298,7 @@ const NativeSelect = forwardRef((props: NativeSelectProps, externalRef: any) =>
298
298
 
299
299
  //----
300
300
  //remove focus style
301
- rootRef.current?.classList.remove('focus');
301
+ rootRef.current?.classList.remove('focus-floating');
302
302
 
303
303
  //
304
304
  onBlur?.(event);
@@ -183,7 +183,6 @@ const NumberInput = forwardRef((props: NumberInputProps, externalRef: any) => {
183
183
 
184
184
 
185
185
  function handleFocus(event: FocusEvent<HTMLInputElement>) {
186
- rootRef.current?.classList.add('focus');
187
186
 
188
187
  //
189
188
  onFocus?.(event, valRef.current);
@@ -220,12 +219,7 @@ const NumberInput = forwardRef((props: NumberInputProps, externalRef: any) => {
220
219
  setChangedVal(resToInput);
221
220
 
222
221
 
223
- //----
224
- //remove focus style
225
- if (val === '') {
226
- rootRef.current?.classList.remove('focus');
227
- }
228
-
222
+
229
223
  //
230
224
  onChange?.(event, valRef.current, Number(!isNumeric(newVal) ? '0' : resToInput));
231
225
 
@@ -247,13 +241,6 @@ const NumberInput = forwardRef((props: NumberInputProps, externalRef: any) => {
247
241
  setChangedVal('0');
248
242
  }
249
243
 
250
-
251
- //----
252
- //remove focus style
253
- if (val === '') {
254
- rootRef.current?.classList.remove('focus');
255
- }
256
-
257
244
  //
258
245
  onBlur?.(event, valRef.current);
259
246
 
@@ -286,7 +273,12 @@ const NumberInput = forwardRef((props: NumberInputProps, externalRef: any) => {
286
273
  return (
287
274
  <>
288
275
 
289
- <div className={clsWrite(wrapperClassName, 'mb-3 position-relative')} ref={rootRef}>
276
+ <div className={combinedCls(
277
+ clsWrite(wrapperClassName, 'mb-3 position-relative'),
278
+ {
279
+ 'focus-floating': changedVal !== ''
280
+ }
281
+ )} ref={rootRef}>
290
282
  {label ? <>{typeof label === 'string' ? <label htmlFor={idRes} className="form-label" dangerouslySetInnerHTML={{__html: `${label}`}}></label> : <label htmlFor={idRes} className="form-label">{label}</label>}</> : null}
291
283
 
292
284
  <div className="position-relative">
@@ -0,0 +1,251 @@
1
+ import React, { useState, useRef, useEffect, useImperativeHandle, forwardRef, useMemo, createContext, useContext } from 'react';
2
+
3
+ import useComId from 'funda-utils/dist/cjs/useComId';
4
+ import useClickOutside from 'funda-utils/dist/cjs/useClickOutside';
5
+ import {
6
+ getAbsolutePositionOfStage
7
+ } from 'funda-utils/dist/cjs/getElementProperty';
8
+ import { getElCSS } from 'funda-utils/dist/cjs/inputsCalculation';
9
+
10
+ // Context for Popover state management
11
+ export interface PopoverContextValue {
12
+ isOpen: boolean;
13
+ setIsOpen: (open: boolean) => void;
14
+ triggerRef: React.RefObject<HTMLElement>;
15
+ contentRef: React.RefObject<HTMLDivElement>;
16
+ id: string;
17
+ direction?: string;
18
+ offset?: number;
19
+ exceededSidePosOffset?: number;
20
+ size?: string;
21
+ popupArrowColor?: number[];
22
+ popupContentStyle?: React.CSSProperties;
23
+ wrapperClassName?: string;
24
+ position: { x: string; y: string };
25
+ setPosition: (pos: { x: string; y: string }) => void;
26
+ popupArrowStyle?: React.CSSProperties;
27
+ }
28
+
29
+ export const PopoverContext = createContext<PopoverContextValue | null>(null);
30
+
31
+ export const usePopoverContext = () => {
32
+ const context = useContext(PopoverContext);
33
+ if (!context) {
34
+ throw new Error('Popover components must be used within a Popover');
35
+ }
36
+ return context;
37
+ };
38
+
39
+ // Main Popover component (container)
40
+ export type PopoverProps = {
41
+ /** The direction of the tip. Defaults to `top`. Possible values are: `top`, `top-right`, `top-left`, `bottom`, `bottom-right`, `bottom-left` */
42
+ direction?: string;
43
+ /** Position offset */
44
+ offset?: number;
45
+ /** Offset px that exceeds the far right or left side of the screen */
46
+ exceededSidePosOffset?: number;
47
+ /** The size of the content area. Defaults to `auto`. Possible values are: `auto`, `large`, `medium`, `small` */
48
+ size?: string;
49
+ /** Custom color for the popup arrow */
50
+ popupArrowColor?: number[];
51
+ /** Custom style for the popup content */
52
+ popupContentStyle?: React.CSSProperties;
53
+ /** The class name of the control wrapper. */
54
+ wrapperClassName?: string;
55
+ /** -- */
56
+ id?: string;
57
+ /** Controls whether the Popover is open (controlled mode) */
58
+ open?: boolean;
59
+ /** Callback fired when the open state changes (controlled mode) */
60
+ onOpenChange?: (open: boolean) => void;
61
+ children: React.ReactNode;
62
+ };
63
+
64
+ const Popover = forwardRef<any, PopoverProps>((props, ref) => {
65
+ const {
66
+ direction,
67
+ offset,
68
+ exceededSidePosOffset,
69
+ size,
70
+ popupArrowColor,
71
+ popupContentStyle,
72
+ wrapperClassName,
73
+ id,
74
+ open,
75
+ onOpenChange,
76
+ children
77
+ } = props;
78
+
79
+ const POS_OFFSET = Number(offset) || 4;
80
+ const EXCEEDED_SIDE_POS_OFFSET = Number(exceededSidePosOffset) || 15;
81
+ const uniqueID = useComId();
82
+ const idRes = id || uniqueID;
83
+ const triggerRef = useRef<HTMLElement>(null);
84
+ const contentRef = useRef<HTMLDivElement>(null);
85
+ const [uncontrolledOpen, setUncontrolledOpen] = useState<boolean>(false);
86
+ const isControlled = typeof open === 'boolean';
87
+ const isOpen = isControlled ? !!open : uncontrolledOpen;
88
+ const [position, setPosition] = useState<{ x: string; y: string }>({
89
+ x: '0',
90
+ y: '0'
91
+ });
92
+
93
+ const setIsOpen = (nextOpen: boolean) => {
94
+ if (!isControlled) {
95
+ setUncontrolledOpen(nextOpen);
96
+ }
97
+ if (typeof onOpenChange === 'function') {
98
+ onOpenChange(nextOpen);
99
+ }
100
+ };
101
+
102
+ const popupArrowStyle = useMemo(() => {
103
+ if (
104
+ typeof popupArrowColor !== 'undefined' &&
105
+ Array.isArray(popupArrowColor) &&
106
+ popupArrowColor.length === 4
107
+ ) {
108
+ return {
109
+ '--cus-popover-arrow-bg-top': `url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%28${popupArrowColor[0]},%20${popupArrowColor[1]},%20${popupArrowColor[2]},%20${popupArrowColor[3]}%29%22%20transform%3D%22rotate%280%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E") no-repeat`,
110
+ '--cus-popover-arrow-bg-bottom': `url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%28${popupArrowColor[0]},%20${popupArrowColor[1]},%20${popupArrowColor[2]},%20${popupArrowColor[3]}%29%22%20transform%3D%22rotate%28180%2018%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E") no-repeat`,
111
+ '--cus-popover-arrow-bg-left': `url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%28${popupArrowColor[0]},%20${popupArrowColor[1]},%20${popupArrowColor[2]},%20${popupArrowColor[3]}%29%22%20transform%3D%22rotate%28-90%2018%2018%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E") no-repeat`,
112
+ '--cus-popover-arrow-bg-right': `url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%28${popupArrowColor[0]},%20${popupArrowColor[1]},%20${popupArrowColor[2]},%20${popupArrowColor[3]}%29%22%20transform%3D%22rotate%2890%206%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E") no-repeat`,
113
+ } as React.CSSProperties;
114
+ }
115
+ return undefined;
116
+ }, [popupArrowColor]);
117
+
118
+ // Calculate position based on trigger element
119
+ const calculatePosition = () => {
120
+ const triggerEl = triggerRef.current;
121
+ if (!triggerEl) return;
122
+
123
+ const { x, y, width, height } = getAbsolutePositionOfStage(triggerEl);
124
+ const pos = direction || 'top';
125
+
126
+ if (pos.indexOf('top') >= 0) {
127
+ setPosition({
128
+ x: x + (width / 2) + 'px',
129
+ y: y - height - POS_OFFSET + 'px'
130
+ });
131
+ } else if (pos.indexOf('bottom') >= 0) {
132
+ setPosition({
133
+ x: x + (width / 2) + 'px',
134
+ y: y + height + POS_OFFSET + 'px'
135
+ });
136
+ }
137
+ };
138
+
139
+ // Expose show/hide methods to parent via ref
140
+ useImperativeHandle(ref, () => ({
141
+ show: () => {
142
+ calculatePosition();
143
+ setIsOpen(true);
144
+ },
145
+ hide: () => {
146
+ setIsOpen(false);
147
+ }
148
+ }), [direction, POS_OFFSET]);
149
+
150
+ // Click outside to close
151
+ useClickOutside({
152
+ enabled: isOpen && triggerRef.current !== null,
153
+ isOutside: (event: any) => {
154
+ // Prevent closing when clicking inside the popover wrapper
155
+ if (contentRef.current && contentRef.current.contains(event.target)) {
156
+ return false;
157
+ }
158
+ return (
159
+ triggerRef.current !== event.target &&
160
+ !triggerRef.current?.contains(event.target as HTMLElement)
161
+ );
162
+ },
163
+ handle: () => {
164
+ setIsOpen(false);
165
+ }
166
+ }, [isOpen]);
167
+
168
+ const exceededOffsetInit = () => {
169
+ // Determine whether it exceeds the far right or left side of the screen
170
+ //------------------
171
+ const _modalRef: any = contentRef.current;
172
+ if (_modalRef === null) return;
173
+
174
+
175
+ const _modalContent = _modalRef.querySelector('.cus-popover__content');
176
+ if (!_modalContent) return;
177
+
178
+ const _modalBox = _modalContent.getBoundingClientRect();
179
+ if (typeof _modalContent.dataset.offset === 'undefined' && _modalBox.left > 0) {
180
+
181
+ // Adjust the coordinates due to height
182
+ //------------------
183
+ const triggerEl: any = document.querySelector(`[data-overlay-id="${_modalRef.id}"]`);
184
+ if (triggerEl !== null) {
185
+ let pos = triggerEl.dataset.microtipPosition;
186
+ if (typeof pos === 'undefined') pos = 'top';
187
+
188
+ const _offsetY = _modalBox.height - getElCSS(_modalContent, 'font-size', true) - getElCSS(_modalContent, 'padding-top', true) - getElCSS(_modalContent, 'padding-bottom', true);
189
+
190
+ if (pos.indexOf('top') >= 0) {
191
+ _modalRef.style.transform = `translateY(-${_offsetY}px)`;
192
+ }
193
+ }
194
+
195
+ // 10 pixels is used to account for some bias in mobile devices
196
+ if ((_modalBox.right + 10) > window.innerWidth) {
197
+ const _modalOffsetPosition = _modalBox.right - window.innerWidth + EXCEEDED_SIDE_POS_OFFSET;
198
+ _modalContent.dataset.offset = _modalOffsetPosition;
199
+ _modalContent.style.marginLeft = `-${_modalOffsetPosition}px`;
200
+ }
201
+
202
+ if ((_modalBox.left - 10) < 0) {
203
+ const _modalOffsetPosition = Math.abs(_modalBox.left) + EXCEEDED_SIDE_POS_OFFSET;
204
+ _modalContent.dataset.offset = _modalOffsetPosition;
205
+ _modalContent.style.marginLeft = `${_modalOffsetPosition}px`;
206
+ }
207
+ }
208
+ };
209
+
210
+ // Update position when opening
211
+ useEffect(() => {
212
+ if (isOpen) {
213
+ calculatePosition();
214
+ }
215
+ }, [isOpen, direction, POS_OFFSET]);
216
+
217
+ // Prevent element data from being unable to be obtained when ref is null
218
+ useEffect(() => {
219
+ exceededOffsetInit();
220
+ });
221
+
222
+
223
+
224
+ const contextValue: PopoverContextValue = {
225
+ isOpen,
226
+ setIsOpen,
227
+ triggerRef,
228
+ contentRef,
229
+ id: idRes,
230
+ direction,
231
+ offset,
232
+ exceededSidePosOffset,
233
+ size,
234
+ popupArrowColor,
235
+ popupContentStyle,
236
+ wrapperClassName,
237
+ position,
238
+ setPosition,
239
+ popupArrowStyle
240
+ };
241
+
242
+ return (
243
+ <PopoverContext.Provider value={contextValue}>
244
+ {children}
245
+ </PopoverContext.Provider>
246
+ );
247
+ });
248
+
249
+ Popover.displayName = 'Popover';
250
+
251
+ export default Popover;
@@ -0,0 +1,51 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { combinedCls } from 'funda-utils/dist/cjs/cls';
3
+
4
+
5
+ import { usePopoverContext } from './Popover';
6
+
7
+ export type PopoverCloseProps = {
8
+ asChild?: boolean;
9
+ className?: string;
10
+ children?: React.ReactNode;
11
+ } & React.HTMLAttributes<HTMLElement>;
12
+
13
+ const PopoverClose = forwardRef<HTMLElement, PopoverCloseProps>((props, ref) => {
14
+ const { asChild, className, children, onClick, ...rest } = props;
15
+ const { setIsOpen } = usePopoverContext();
16
+
17
+ const handleClick = (event: React.MouseEvent<HTMLElement>) => {
18
+ if (typeof onClick === 'function') {
19
+ onClick(event);
20
+ }
21
+
22
+ if (!event.defaultPrevented) {
23
+ setIsOpen(false);
24
+ }
25
+ };
26
+
27
+ const closeProps: any = {
28
+ ref,
29
+ className: combinedCls('cus-popover__close', className),
30
+ onClick: handleClick,
31
+ ...rest
32
+ };
33
+
34
+ if (asChild && React.isValidElement(children)) {
35
+ return React.cloneElement(children as React.ReactElement<any>, {
36
+ ...closeProps,
37
+ ...(children.props || {})
38
+ });
39
+ }
40
+
41
+ return (
42
+ <button type="button" {...closeProps}>
43
+ {children || 'Close'}
44
+ </button>
45
+ );
46
+ });
47
+
48
+ PopoverClose.displayName = 'PopoverClose';
49
+
50
+ export default PopoverClose;
51
+