@sth87/shadcn-design-system 0.0.1

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 (760) hide show
  1. package/README.md +487 -0
  2. package/dist/cjs/_virtual/_commonjsHelpers.cjs +2 -0
  3. package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +1 -0
  4. package/dist/cjs/_virtual/index.cjs +2 -0
  5. package/dist/cjs/_virtual/index.cjs.map +1 -0
  6. package/dist/cjs/_virtual/index2.cjs +2 -0
  7. package/dist/cjs/_virtual/index2.cjs.map +1 -0
  8. package/dist/cjs/components/Accordion/Accordion.cjs +2 -0
  9. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -0
  10. package/dist/cjs/components/Avatar/Avatar.cjs +2 -0
  11. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -0
  12. package/dist/cjs/components/Badge/Badge.cjs +2 -0
  13. package/dist/cjs/components/Badge/Badge.cjs.map +1 -0
  14. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +2 -0
  15. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -0
  16. package/dist/cjs/components/Button/Button.cjs +2 -0
  17. package/dist/cjs/components/Button/Button.cjs.map +1 -0
  18. package/dist/cjs/components/Button/ButtonGroup.cjs +2 -0
  19. package/dist/cjs/components/Button/ButtonGroup.cjs.map +1 -0
  20. package/dist/cjs/components/Calendar/Calendar.cjs +2 -0
  21. package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -0
  22. package/dist/cjs/components/Carousel/Carousel.cjs +2 -0
  23. package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -0
  24. package/dist/cjs/components/Checkbox/Checkbox.cjs +2 -0
  25. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -0
  26. package/dist/cjs/components/Collapsible/Collapsible.cjs +2 -0
  27. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -0
  28. package/dist/cjs/components/Command/Command.cjs +2 -0
  29. package/dist/cjs/components/Command/Command.cjs.map +1 -0
  30. package/dist/cjs/components/Command/index.cjs +2 -0
  31. package/dist/cjs/components/Command/index.cjs.map +1 -0
  32. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +2 -0
  33. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -0
  34. package/dist/cjs/components/ContextMenu/index.cjs +2 -0
  35. package/dist/cjs/components/ContextMenu/index.cjs.map +1 -0
  36. package/dist/cjs/components/Cropper/Cropper.cjs +2 -0
  37. package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -0
  38. package/dist/cjs/components/Cropper/CropperTool.cjs +2 -0
  39. package/dist/cjs/components/Cropper/CropperTool.cjs.map +1 -0
  40. package/dist/cjs/components/Cropper/utils.cjs +2 -0
  41. package/dist/cjs/components/Cropper/utils.cjs.map +1 -0
  42. package/dist/cjs/components/DatePicker/DatePicker.cjs +2 -0
  43. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -0
  44. package/dist/cjs/components/DatePicker/RangePicker.cjs +2 -0
  45. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -0
  46. package/dist/cjs/components/DatePicker/TimePicker.cjs +2 -0
  47. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -0
  48. package/dist/cjs/components/Dialog/Dialog.cjs +2 -0
  49. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -0
  50. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +2 -0
  51. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -0
  52. package/dist/cjs/components/DropdownMenu/index.cjs +2 -0
  53. package/dist/cjs/components/DropdownMenu/index.cjs.map +1 -0
  54. package/dist/cjs/components/FloatLabel.cjs +2 -0
  55. package/dist/cjs/components/FloatLabel.cjs.map +1 -0
  56. package/dist/cjs/components/Glass/Glass.cjs +2 -0
  57. package/dist/cjs/components/Glass/Glass.cjs.map +1 -0
  58. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +2 -0
  59. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -0
  60. package/dist/cjs/components/ImageViewer/ImageViewer.css +1 -0
  61. package/dist/cjs/components/Input/Input.cjs +2 -0
  62. package/dist/cjs/components/Input/Input.cjs.map +1 -0
  63. package/dist/cjs/components/InputOTP/InputOTP.cjs +2 -0
  64. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -0
  65. package/dist/cjs/components/Interactive/CursorFollow.cjs +2 -0
  66. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -0
  67. package/dist/cjs/components/Marquee/Marquee.cjs +2 -0
  68. package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -0
  69. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +2 -0
  70. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +1 -0
  71. package/dist/cjs/components/Marquee/index.cjs +2 -0
  72. package/dist/cjs/components/Marquee/index.cjs.map +1 -0
  73. package/dist/cjs/components/Masonry/Masonry.cjs +2 -0
  74. package/dist/cjs/components/Masonry/Masonry.cjs.map +1 -0
  75. package/dist/cjs/components/Masonry/MasonryWrapper.cjs +2 -0
  76. package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +1 -0
  77. package/dist/cjs/components/Pagination/Pagination.cjs +2 -0
  78. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -0
  79. package/dist/cjs/components/Pagination/index.cjs +2 -0
  80. package/dist/cjs/components/Pagination/index.cjs.map +1 -0
  81. package/dist/cjs/components/Popover/Popover.cjs +2 -0
  82. package/dist/cjs/components/Popover/Popover.cjs.map +1 -0
  83. package/dist/cjs/components/Popover/index.cjs +2 -0
  84. package/dist/cjs/components/Popover/index.cjs.map +1 -0
  85. package/dist/cjs/components/QrCode/QrCode.cjs +2 -0
  86. package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -0
  87. package/dist/cjs/components/QrCode/index.cjs +2 -0
  88. package/dist/cjs/components/QrCode/index.cjs.map +1 -0
  89. package/dist/cjs/components/Radio/Radio.cjs +2 -0
  90. package/dist/cjs/components/Radio/Radio.cjs.map +1 -0
  91. package/dist/cjs/components/Rate/Rate.cjs +2 -0
  92. package/dist/cjs/components/Rate/Rate.cjs.map +1 -0
  93. package/dist/cjs/components/Resizable/Resizable.cjs +2 -0
  94. package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -0
  95. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +2 -0
  96. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -0
  97. package/dist/cjs/components/Select/Select.cjs +2 -0
  98. package/dist/cjs/components/Select/Select.cjs.map +1 -0
  99. package/dist/cjs/components/Separator/Separator.cjs +2 -0
  100. package/dist/cjs/components/Separator/Separator.cjs.map +1 -0
  101. package/dist/cjs/components/Sheet/Sheet.cjs +6 -0
  102. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -0
  103. package/dist/cjs/components/Sidebar/Sidebar.cjs +2 -0
  104. package/dist/cjs/components/Sidebar/Sidebar.cjs.map +1 -0
  105. package/dist/cjs/components/Skeleton/Skeleton.cjs +2 -0
  106. package/dist/cjs/components/Skeleton/Skeleton.cjs.map +1 -0
  107. package/dist/cjs/components/Slider/Slider.cjs +2 -0
  108. package/dist/cjs/components/Slider/Slider.cjs.map +1 -0
  109. package/dist/cjs/components/Stepper/Stepper.cjs +2 -0
  110. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -0
  111. package/dist/cjs/components/Stepper/StepperWrapper.cjs +2 -0
  112. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -0
  113. package/dist/cjs/components/Stepper/index.cjs +2 -0
  114. package/dist/cjs/components/Stepper/index.cjs.map +1 -0
  115. package/dist/cjs/components/Switch/Switch.cjs +2 -0
  116. package/dist/cjs/components/Switch/Switch.cjs.map +1 -0
  117. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +2 -0
  118. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -0
  119. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +2 -0
  120. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -0
  121. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +2 -0
  122. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -0
  123. package/dist/cjs/components/Table/data-table-column-header.cjs +2 -0
  124. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -0
  125. package/dist/cjs/components/Table/data-table-pagination.cjs +2 -0
  126. package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -0
  127. package/dist/cjs/components/Table/data-table.cjs +2 -0
  128. package/dist/cjs/components/Table/data-table.cjs.map +1 -0
  129. package/dist/cjs/components/Tabs/Tabs.cjs +2 -0
  130. package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -0
  131. package/dist/cjs/components/Tabs/classes.cjs +2 -0
  132. package/dist/cjs/components/Tabs/classes.cjs.map +1 -0
  133. package/dist/cjs/components/Textarea/Textarea.cjs +2 -0
  134. package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -0
  135. package/dist/cjs/components/TimeGridView.cjs +2 -0
  136. package/dist/cjs/components/TimeGridView.cjs.map +1 -0
  137. package/dist/cjs/components/Toast/Toast.cjs +2 -0
  138. package/dist/cjs/components/Toast/Toast.cjs.map +1 -0
  139. package/dist/cjs/components/Toggle/Toggle.cjs +2 -0
  140. package/dist/cjs/components/Toggle/Toggle.cjs.map +1 -0
  141. package/dist/cjs/components/Tooltip/Tooltip.cjs +2 -0
  142. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -0
  143. package/dist/cjs/components/Tour/Tour.cjs +2 -0
  144. package/dist/cjs/components/Tour/Tour.cjs.map +1 -0
  145. package/dist/cjs/components/Tour/TourWrapper.cjs +2 -0
  146. package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -0
  147. package/dist/cjs/components/Tour/index.cjs +2 -0
  148. package/dist/cjs/components/Tour/index.cjs.map +1 -0
  149. package/dist/cjs/components/Upload/Upload.cjs +4 -0
  150. package/dist/cjs/components/Upload/Upload.cjs.map +1 -0
  151. package/dist/cjs/components/WheelColumn.cjs +2 -0
  152. package/dist/cjs/components/WheelColumn.cjs.map +1 -0
  153. package/dist/cjs/constants/common.cjs +2 -0
  154. package/dist/cjs/constants/common.cjs.map +1 -0
  155. package/dist/cjs/favicon.ico +0 -0
  156. package/dist/cjs/hooks/use-callback-ref.cjs +2 -0
  157. package/dist/cjs/hooks/use-callback-ref.cjs.map +1 -0
  158. package/dist/cjs/hooks/use-debounced-callback.cjs +2 -0
  159. package/dist/cjs/hooks/use-debounced-callback.cjs.map +1 -0
  160. package/dist/cjs/hooks/use-debounced-value.cjs +2 -0
  161. package/dist/cjs/hooks/use-debounced-value.cjs.map +1 -0
  162. package/dist/cjs/hooks/use-event-listener.cjs +2 -0
  163. package/dist/cjs/hooks/use-event-listener.cjs.map +1 -0
  164. package/dist/cjs/hooks/use-intersection-observer.cjs +2 -0
  165. package/dist/cjs/hooks/use-intersection-observer.cjs.map +1 -0
  166. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +2 -0
  167. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +1 -0
  168. package/dist/cjs/hooks/use-media-query.cjs +2 -0
  169. package/dist/cjs/hooks/use-media-query.cjs.map +1 -0
  170. package/dist/cjs/hooks/use-on-click-outside.cjs +2 -0
  171. package/dist/cjs/hooks/use-on-click-outside.cjs.map +1 -0
  172. package/dist/cjs/hooks/use-script.cjs +2 -0
  173. package/dist/cjs/hooks/use-script.cjs.map +1 -0
  174. package/dist/cjs/hooks/use-scroll-lock.cjs +2 -0
  175. package/dist/cjs/hooks/use-scroll-lock.cjs.map +1 -0
  176. package/dist/cjs/image.png +0 -0
  177. package/dist/cjs/index.cjs +2 -0
  178. package/dist/cjs/index.cjs.map +1 -0
  179. package/dist/cjs/lib/TextAnimation/BlurText.cjs +2 -0
  180. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -0
  181. package/dist/cjs/lib/TextAnimation/CircularText.cjs +2 -0
  182. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -0
  183. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +2 -0
  184. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -0
  185. package/dist/cjs/lib/TextAnimation/GradientText.cjs +2 -0
  186. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -0
  187. package/dist/cjs/lib/TextAnimation/RollingText.cjs +2 -0
  188. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -0
  189. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +2 -0
  190. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -0
  191. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +2 -0
  192. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -0
  193. package/dist/cjs/lib/TextAnimation/SplittingText.cjs +2 -0
  194. package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +1 -0
  195. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +2 -0
  196. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -0
  197. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +2 -0
  198. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -0
  199. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +22 -0
  200. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -0
  201. package/dist/cjs/lib/TextAnimation/TypingText.cjs +2 -0
  202. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -0
  203. package/dist/cjs/lib/TextAnimation/WritingText.cjs +2 -0
  204. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -0
  205. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +253 -0
  206. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +1 -0
  207. package/dist/cjs/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
  208. package/dist/cjs/styles/animation.css +1 -0
  209. package/dist/cjs/styles/index.css +1 -0
  210. package/dist/cjs/styles/theme.css +1 -0
  211. package/dist/cjs/utils/animations.cjs +2 -0
  212. package/dist/cjs/utils/animations.cjs.map +1 -0
  213. package/dist/cjs/utils/css.cjs +2 -0
  214. package/dist/cjs/utils/css.cjs.map +1 -0
  215. package/dist/cjs/utils/data-table.cjs +2 -0
  216. package/dist/cjs/utils/data-table.cjs.map +1 -0
  217. package/dist/cjs/utils/datetime.cjs +2 -0
  218. package/dist/cjs/utils/datetime.cjs.map +1 -0
  219. package/dist/cjs/vite.svg +1 -0
  220. package/dist/cjs/wave.png +0 -0
  221. package/dist/esm/_virtual/_commonjsHelpers.js +7 -0
  222. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
  223. package/dist/esm/_virtual/index.js +8 -0
  224. package/dist/esm/_virtual/index.js.map +1 -0
  225. package/dist/esm/_virtual/index2.js +5 -0
  226. package/dist/esm/_virtual/index2.js.map +1 -0
  227. package/dist/esm/components/Accordion/Accordion.js +190 -0
  228. package/dist/esm/components/Accordion/Accordion.js.map +1 -0
  229. package/dist/esm/components/Avatar/Avatar.js +93 -0
  230. package/dist/esm/components/Avatar/Avatar.js.map +1 -0
  231. package/dist/esm/components/Badge/Badge.js +35 -0
  232. package/dist/esm/components/Badge/Badge.js.map +1 -0
  233. package/dist/esm/components/Breadcrumb/Breadcrumb.js +102 -0
  234. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -0
  235. package/dist/esm/components/Button/Button.js +53 -0
  236. package/dist/esm/components/Button/Button.js.map +1 -0
  237. package/dist/esm/components/Button/ButtonGroup.js +53 -0
  238. package/dist/esm/components/Button/ButtonGroup.js.map +1 -0
  239. package/dist/esm/components/Calendar/Calendar.js +40 -0
  240. package/dist/esm/components/Calendar/Calendar.js.map +1 -0
  241. package/dist/esm/components/Carousel/Carousel.js +510 -0
  242. package/dist/esm/components/Carousel/Carousel.js.map +1 -0
  243. package/dist/esm/components/Checkbox/Checkbox.js +79 -0
  244. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -0
  245. package/dist/esm/components/Collapsible/Collapsible.js +107 -0
  246. package/dist/esm/components/Collapsible/Collapsible.js.map +1 -0
  247. package/dist/esm/components/Command/Command.js +113 -0
  248. package/dist/esm/components/Command/Command.js.map +1 -0
  249. package/dist/esm/components/Command/index.js +16 -0
  250. package/dist/esm/components/Command/index.js.map +1 -0
  251. package/dist/esm/components/ContextMenu/ContextMenu.js +131 -0
  252. package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -0
  253. package/dist/esm/components/ContextMenu/index.js +24 -0
  254. package/dist/esm/components/ContextMenu/index.js.map +1 -0
  255. package/dist/esm/components/Cropper/Cropper.js +1014 -0
  256. package/dist/esm/components/Cropper/Cropper.js.map +1 -0
  257. package/dist/esm/components/Cropper/CropperTool.js +157 -0
  258. package/dist/esm/components/Cropper/CropperTool.js.map +1 -0
  259. package/dist/esm/components/Cropper/utils.js +108 -0
  260. package/dist/esm/components/Cropper/utils.js.map +1 -0
  261. package/dist/esm/components/DatePicker/DatePicker.js +263 -0
  262. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -0
  263. package/dist/esm/components/DatePicker/RangePicker.js +456 -0
  264. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -0
  265. package/dist/esm/components/DatePicker/TimePicker.js +444 -0
  266. package/dist/esm/components/DatePicker/TimePicker.js.map +1 -0
  267. package/dist/esm/components/Dialog/Dialog.js +223 -0
  268. package/dist/esm/components/Dialog/Dialog.js.map +1 -0
  269. package/dist/esm/components/DropdownMenu/DropdownMenu.js +196 -0
  270. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -0
  271. package/dist/esm/components/DropdownMenu/index.js +24 -0
  272. package/dist/esm/components/DropdownMenu/index.js.map +1 -0
  273. package/dist/esm/components/FloatLabel.js +59 -0
  274. package/dist/esm/components/FloatLabel.js.map +1 -0
  275. package/dist/esm/components/Glass/Glass.js +93 -0
  276. package/dist/esm/components/Glass/Glass.js.map +1 -0
  277. package/dist/esm/components/ImageViewer/ImageViewer.css +1 -0
  278. package/dist/esm/components/ImageViewer/ImageViewer.js +273 -0
  279. package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -0
  280. package/dist/esm/components/Input/Input.js +267 -0
  281. package/dist/esm/components/Input/Input.js.map +1 -0
  282. package/dist/esm/components/InputOTP/InputOTP.js +70 -0
  283. package/dist/esm/components/InputOTP/InputOTP.js.map +1 -0
  284. package/dist/esm/components/Interactive/CursorFollow.js +257 -0
  285. package/dist/esm/components/Interactive/CursorFollow.js.map +1 -0
  286. package/dist/esm/components/Marquee/Marquee.js +419 -0
  287. package/dist/esm/components/Marquee/Marquee.js.map +1 -0
  288. package/dist/esm/components/Marquee/MarqueeWrapper.js +25 -0
  289. package/dist/esm/components/Marquee/MarqueeWrapper.js.map +1 -0
  290. package/dist/esm/components/Marquee/index.js +15 -0
  291. package/dist/esm/components/Marquee/index.js.map +1 -0
  292. package/dist/esm/components/Masonry/Masonry.js +840 -0
  293. package/dist/esm/components/Masonry/Masonry.js.map +1 -0
  294. package/dist/esm/components/Masonry/MasonryWrapper.js +19 -0
  295. package/dist/esm/components/Masonry/MasonryWrapper.js.map +1 -0
  296. package/dist/esm/components/Pagination/Pagination.js +209 -0
  297. package/dist/esm/components/Pagination/Pagination.js.map +1 -0
  298. package/dist/esm/components/Pagination/index.js +14 -0
  299. package/dist/esm/components/Pagination/index.js.map +1 -0
  300. package/dist/esm/components/Popover/Popover.js +51 -0
  301. package/dist/esm/components/Popover/Popover.js.map +1 -0
  302. package/dist/esm/components/Popover/index.js +9 -0
  303. package/dist/esm/components/Popover/index.js.map +1 -0
  304. package/dist/esm/components/QrCode/QrCode.js +300 -0
  305. package/dist/esm/components/QrCode/QrCode.js.map +1 -0
  306. package/dist/esm/components/QrCode/index.js +16 -0
  307. package/dist/esm/components/QrCode/index.js.map +1 -0
  308. package/dist/esm/components/Radio/Radio.js +74 -0
  309. package/dist/esm/components/Radio/Radio.js.map +1 -0
  310. package/dist/esm/components/Rate/Rate.js +191 -0
  311. package/dist/esm/components/Rate/Rate.js.map +1 -0
  312. package/dist/esm/components/Resizable/Resizable.js +89 -0
  313. package/dist/esm/components/Resizable/Resizable.js.map +1 -0
  314. package/dist/esm/components/ScrollArea/ScrollArea.js +45 -0
  315. package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -0
  316. package/dist/esm/components/Select/Select.js +199 -0
  317. package/dist/esm/components/Select/Select.js.map +1 -0
  318. package/dist/esm/components/Separator/Separator.js +7 -0
  319. package/dist/esm/components/Separator/Separator.js.map +1 -0
  320. package/dist/esm/components/Sheet/Sheet.js +141 -0
  321. package/dist/esm/components/Sheet/Sheet.js.map +1 -0
  322. package/dist/esm/components/Sidebar/Sidebar.js +30 -0
  323. package/dist/esm/components/Sidebar/Sidebar.js.map +1 -0
  324. package/dist/esm/components/Skeleton/Skeleton.js +12 -0
  325. package/dist/esm/components/Skeleton/Skeleton.js.map +1 -0
  326. package/dist/esm/components/Slider/Slider.js +420 -0
  327. package/dist/esm/components/Slider/Slider.js.map +1 -0
  328. package/dist/esm/components/Stepper/Stepper.js +886 -0
  329. package/dist/esm/components/Stepper/Stepper.js.map +1 -0
  330. package/dist/esm/components/Stepper/StepperWrapper.js +80 -0
  331. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -0
  332. package/dist/esm/components/Stepper/index.js +21 -0
  333. package/dist/esm/components/Stepper/index.js.map +1 -0
  334. package/dist/esm/components/Switch/Switch.js +126 -0
  335. package/dist/esm/components/Switch/Switch.js.map +1 -0
  336. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +126 -0
  337. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -0
  338. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +138 -0
  339. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -0
  340. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +164 -0
  341. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -0
  342. package/dist/esm/components/Table/data-table-column-header.js +82 -0
  343. package/dist/esm/components/Table/data-table-column-header.js.map +1 -0
  344. package/dist/esm/components/Table/data-table-pagination.js +73 -0
  345. package/dist/esm/components/Table/data-table-pagination.js.map +1 -0
  346. package/dist/esm/components/Table/data-table.js +94 -0
  347. package/dist/esm/components/Table/data-table.js.map +1 -0
  348. package/dist/esm/components/Tabs/Tabs.js +540 -0
  349. package/dist/esm/components/Tabs/Tabs.js.map +1 -0
  350. package/dist/esm/components/Tabs/classes.js +345 -0
  351. package/dist/esm/components/Tabs/classes.js.map +1 -0
  352. package/dist/esm/components/Textarea/Textarea.js +132 -0
  353. package/dist/esm/components/Textarea/Textarea.js.map +1 -0
  354. package/dist/esm/components/TimeGridView.js +101 -0
  355. package/dist/esm/components/TimeGridView.js.map +1 -0
  356. package/dist/esm/components/Toast/Toast.js +80 -0
  357. package/dist/esm/components/Toast/Toast.js.map +1 -0
  358. package/dist/esm/components/Toggle/Toggle.js +23 -0
  359. package/dist/esm/components/Toggle/Toggle.js.map +1 -0
  360. package/dist/esm/components/Tooltip/Tooltip.js +120 -0
  361. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -0
  362. package/dist/esm/components/Tour/Tour.js +948 -0
  363. package/dist/esm/components/Tour/Tour.js.map +1 -0
  364. package/dist/esm/components/Tour/TourWrapper.js +67 -0
  365. package/dist/esm/components/Tour/TourWrapper.js.map +1 -0
  366. package/dist/esm/components/Tour/index.js +38 -0
  367. package/dist/esm/components/Tour/index.js.map +1 -0
  368. package/dist/esm/components/Upload/Upload.js +948 -0
  369. package/dist/esm/components/Upload/Upload.js.map +1 -0
  370. package/dist/esm/components/WheelColumn.js +127 -0
  371. package/dist/esm/components/WheelColumn.js.map +1 -0
  372. package/dist/esm/constants/common.js +5 -0
  373. package/dist/esm/constants/common.js.map +1 -0
  374. package/dist/esm/favicon.ico +0 -0
  375. package/dist/esm/hooks/use-callback-ref.js +14 -0
  376. package/dist/esm/hooks/use-callback-ref.js.map +1 -0
  377. package/dist/esm/hooks/use-debounced-callback.js +21 -0
  378. package/dist/esm/hooks/use-debounced-callback.js.map +1 -0
  379. package/dist/esm/hooks/use-debounced-value.js +12 -0
  380. package/dist/esm/hooks/use-debounced-value.js.map +1 -0
  381. package/dist/esm/hooks/use-event-listener.js +21 -0
  382. package/dist/esm/hooks/use-event-listener.js.map +1 -0
  383. package/dist/esm/hooks/use-intersection-observer.js +56 -0
  384. package/dist/esm/hooks/use-intersection-observer.js.map +1 -0
  385. package/dist/esm/hooks/use-isomorphic-layout-effect.js +6 -0
  386. package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +1 -0
  387. package/dist/esm/hooks/use-media-query.js +22 -0
  388. package/dist/esm/hooks/use-media-query.js.map +1 -0
  389. package/dist/esm/hooks/use-on-click-outside.js +18 -0
  390. package/dist/esm/hooks/use-on-click-outside.js.map +1 -0
  391. package/dist/esm/hooks/use-script.js +46 -0
  392. package/dist/esm/hooks/use-script.js.map +1 -0
  393. package/dist/esm/hooks/use-scroll-lock.js +27 -0
  394. package/dist/esm/hooks/use-scroll-lock.js.map +1 -0
  395. package/dist/esm/image.png +0 -0
  396. package/dist/esm/index.js +223 -0
  397. package/dist/esm/index.js.map +1 -0
  398. package/dist/esm/lib/TextAnimation/BlurText.js +84 -0
  399. package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -0
  400. package/dist/esm/lib/TextAnimation/CircularText.js +96 -0
  401. package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -0
  402. package/dist/esm/lib/TextAnimation/FlipWords.js +103 -0
  403. package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -0
  404. package/dist/esm/lib/TextAnimation/GradientText.js +54 -0
  405. package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -0
  406. package/dist/esm/lib/TextAnimation/RollingText.js +70 -0
  407. package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -0
  408. package/dist/esm/lib/TextAnimation/RotatingText.js +38 -0
  409. package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -0
  410. package/dist/esm/lib/TextAnimation/ShimmeringText.js +64 -0
  411. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -0
  412. package/dist/esm/lib/TextAnimation/SplittingText.js +86 -0
  413. package/dist/esm/lib/TextAnimation/SplittingText.js.map +1 -0
  414. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +59 -0
  415. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -0
  416. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +128 -0
  417. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -0
  418. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +135 -0
  419. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -0
  420. package/dist/esm/lib/TextAnimation/TypingText.js +118 -0
  421. package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -0
  422. package/dist/esm/lib/TextAnimation/WritingText.js +45 -0
  423. package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -0
  424. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +865 -0
  425. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +1 -0
  426. package/dist/esm/node_modules/.pnpm/viewerjs@1.11.7/node_modules/viewerjs/dist/viewer.css +1 -0
  427. package/dist/esm/styles/animation.css +1 -0
  428. package/dist/esm/styles/index.css +1 -0
  429. package/dist/esm/styles/theme.css +1 -0
  430. package/dist/esm/utils/animations.js +189 -0
  431. package/dist/esm/utils/animations.js.map +1 -0
  432. package/dist/esm/utils/css.js +25 -0
  433. package/dist/esm/utils/css.js.map +1 -0
  434. package/dist/esm/utils/data-table.js +20 -0
  435. package/dist/esm/utils/data-table.js.map +1 -0
  436. package/dist/esm/utils/datetime.js +17 -0
  437. package/dist/esm/utils/datetime.js.map +1 -0
  438. package/dist/esm/vite.svg +1 -0
  439. package/dist/esm/wave.png +0 -0
  440. package/dist/types/components/Accordion/Accordion.d.ts +49 -0
  441. package/dist/types/components/Accordion/Accordion.d.ts.map +1 -0
  442. package/dist/types/components/Accordion/index.d.ts +3 -0
  443. package/dist/types/components/Accordion/index.d.ts.map +1 -0
  444. package/dist/types/components/Avatar/Avatar.d.ts +18 -0
  445. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -0
  446. package/dist/types/components/Avatar/index.d.ts +3 -0
  447. package/dist/types/components/Avatar/index.d.ts.map +1 -0
  448. package/dist/types/components/Badge/Badge.d.ts +10 -0
  449. package/dist/types/components/Badge/Badge.d.ts.map +1 -0
  450. package/dist/types/components/Badge/index.d.ts +2 -0
  451. package/dist/types/components/Badge/index.d.ts.map +1 -0
  452. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +23 -0
  453. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  454. package/dist/types/components/Breadcrumb/index.d.ts +2 -0
  455. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -0
  456. package/dist/types/components/Button/Button.d.ts +10 -0
  457. package/dist/types/components/Button/Button.d.ts.map +1 -0
  458. package/dist/types/components/Button/ButtonGroup.d.ts +16 -0
  459. package/dist/types/components/Button/ButtonGroup.d.ts.map +1 -0
  460. package/dist/types/components/Button/index.d.ts +5 -0
  461. package/dist/types/components/Button/index.d.ts.map +1 -0
  462. package/dist/types/components/Calendar/Calendar.d.ts +15 -0
  463. package/dist/types/components/Calendar/Calendar.d.ts.map +1 -0
  464. package/dist/types/components/Calendar/index.d.ts +3 -0
  465. package/dist/types/components/Calendar/index.d.ts.map +1 -0
  466. package/dist/types/components/Carousel/Carousel.d.ts +79 -0
  467. package/dist/types/components/Carousel/Carousel.d.ts.map +1 -0
  468. package/dist/types/components/Carousel/index.d.ts +4 -0
  469. package/dist/types/components/Carousel/index.d.ts.map +1 -0
  470. package/dist/types/components/Checkbox/Checkbox.d.ts +15 -0
  471. package/dist/types/components/Checkbox/Checkbox.d.ts.map +1 -0
  472. package/dist/types/components/Checkbox/index.d.ts +2 -0
  473. package/dist/types/components/Checkbox/index.d.ts.map +1 -0
  474. package/dist/types/components/Collapsible/Collapsible.d.ts +17 -0
  475. package/dist/types/components/Collapsible/Collapsible.d.ts.map +1 -0
  476. package/dist/types/components/Collapsible/index.d.ts +2 -0
  477. package/dist/types/components/Collapsible/index.d.ts.map +1 -0
  478. package/dist/types/components/Command/Command.d.ts +39 -0
  479. package/dist/types/components/Command/Command.d.ts.map +1 -0
  480. package/dist/types/components/Command/index.d.ts +15 -0
  481. package/dist/types/components/Command/index.d.ts.map +1 -0
  482. package/dist/types/components/ContextMenu/ContextMenu.d.ts +64 -0
  483. package/dist/types/components/ContextMenu/ContextMenu.d.ts.map +1 -0
  484. package/dist/types/components/ContextMenu/index.d.ts +23 -0
  485. package/dist/types/components/ContextMenu/index.d.ts.map +1 -0
  486. package/dist/types/components/Cropper/Cropper.d.ts +86 -0
  487. package/dist/types/components/Cropper/Cropper.d.ts.map +1 -0
  488. package/dist/types/components/Cropper/CropperTool.d.ts +149 -0
  489. package/dist/types/components/Cropper/CropperTool.d.ts.map +1 -0
  490. package/dist/types/components/Cropper/index.d.ts +4 -0
  491. package/dist/types/components/Cropper/index.d.ts.map +1 -0
  492. package/dist/types/components/Cropper/utils.d.ts +130 -0
  493. package/dist/types/components/Cropper/utils.d.ts.map +1 -0
  494. package/dist/types/components/DatePicker/DatePicker.d.ts +56 -0
  495. package/dist/types/components/DatePicker/DatePicker.d.ts.map +1 -0
  496. package/dist/types/components/DatePicker/RangePicker.d.ts +42 -0
  497. package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -0
  498. package/dist/types/components/DatePicker/TimePicker.d.ts +43 -0
  499. package/dist/types/components/DatePicker/TimePicker.d.ts.map +1 -0
  500. package/dist/types/components/DatePicker/index.d.ts +7 -0
  501. package/dist/types/components/DatePicker/index.d.ts.map +1 -0
  502. package/dist/types/components/Dialog/Dialog.d.ts +45 -0
  503. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -0
  504. package/dist/types/components/Dialog/index.d.ts +2 -0
  505. package/dist/types/components/Dialog/index.d.ts.map +1 -0
  506. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts +65 -0
  507. package/dist/types/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
  508. package/dist/types/components/DropdownMenu/index.d.ts +22 -0
  509. package/dist/types/components/DropdownMenu/index.d.ts.map +1 -0
  510. package/dist/types/components/FloatLabel.d.ts +8 -0
  511. package/dist/types/components/FloatLabel.d.ts.map +1 -0
  512. package/dist/types/components/Glass/Glass.d.ts +10 -0
  513. package/dist/types/components/Glass/Glass.d.ts.map +1 -0
  514. package/dist/types/components/Glass/index.d.ts +2 -0
  515. package/dist/types/components/Glass/index.d.ts.map +1 -0
  516. package/dist/types/components/ImageViewer/ImageViewer.d.ts +58 -0
  517. package/dist/types/components/ImageViewer/ImageViewer.d.ts.map +1 -0
  518. package/dist/types/components/ImageViewer/index.d.ts +4 -0
  519. package/dist/types/components/ImageViewer/index.d.ts.map +1 -0
  520. package/dist/types/components/Input/Input.d.ts +27 -0
  521. package/dist/types/components/Input/Input.d.ts.map +1 -0
  522. package/dist/types/components/Input/index.d.ts +2 -0
  523. package/dist/types/components/Input/index.d.ts.map +1 -0
  524. package/dist/types/components/InputOTP/InputOTP.d.ts +20 -0
  525. package/dist/types/components/InputOTP/InputOTP.d.ts.map +1 -0
  526. package/dist/types/components/InputOTP/index.d.ts +2 -0
  527. package/dist/types/components/InputOTP/index.d.ts.map +1 -0
  528. package/dist/types/components/Interactive/3DCard.d.ts +28 -0
  529. package/dist/types/components/Interactive/3DCard.d.ts.map +1 -0
  530. package/dist/types/components/Interactive/3DMarquee.d.ts +20 -0
  531. package/dist/types/components/Interactive/3DMarquee.d.ts.map +1 -0
  532. package/dist/types/components/Interactive/CursorFollow.d.ts +75 -0
  533. package/dist/types/components/Interactive/CursorFollow.d.ts.map +1 -0
  534. package/dist/types/components/Interactive/index.cursor.d.ts +7 -0
  535. package/dist/types/components/Interactive/index.cursor.d.ts.map +1 -0
  536. package/dist/types/components/Interactive/index.d.ts +2 -0
  537. package/dist/types/components/Interactive/index.d.ts.map +1 -0
  538. package/dist/types/components/Label/Label.d.ts +3 -0
  539. package/dist/types/components/Label/Label.d.ts.map +1 -0
  540. package/dist/types/components/Label/index.d.ts +2 -0
  541. package/dist/types/components/Label/index.d.ts.map +1 -0
  542. package/dist/types/components/Marquee/Marquee.d.ts +31 -0
  543. package/dist/types/components/Marquee/Marquee.d.ts.map +1 -0
  544. package/dist/types/components/Marquee/MarqueeWrapper.d.ts +10 -0
  545. package/dist/types/components/Marquee/MarqueeWrapper.d.ts.map +1 -0
  546. package/dist/types/components/Marquee/index.d.ts +13 -0
  547. package/dist/types/components/Marquee/index.d.ts.map +1 -0
  548. package/dist/types/components/Masonry/Masonry.d.ts +41 -0
  549. package/dist/types/components/Masonry/Masonry.d.ts.map +1 -0
  550. package/dist/types/components/Masonry/MasonryWrapper.d.ts +29 -0
  551. package/dist/types/components/Masonry/MasonryWrapper.d.ts.map +1 -0
  552. package/dist/types/components/Masonry/index.d.ts +5 -0
  553. package/dist/types/components/Masonry/index.d.ts.map +1 -0
  554. package/dist/types/components/Pagination/Pagination.d.ts +24 -0
  555. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -0
  556. package/dist/types/components/Pagination/index.d.ts +11 -0
  557. package/dist/types/components/Pagination/index.d.ts.map +1 -0
  558. package/dist/types/components/Popover/Popover.d.ts +22 -0
  559. package/dist/types/components/Popover/Popover.d.ts.map +1 -0
  560. package/dist/types/components/Popover/index.d.ts +5 -0
  561. package/dist/types/components/Popover/index.d.ts.map +1 -0
  562. package/dist/types/components/QrCode/QrCode.d.ts +51 -0
  563. package/dist/types/components/QrCode/QrCode.d.ts.map +1 -0
  564. package/dist/types/components/QrCode/index.d.ts +13 -0
  565. package/dist/types/components/QrCode/index.d.ts.map +1 -0
  566. package/dist/types/components/Radio/Radio.d.ts +35 -0
  567. package/dist/types/components/Radio/Radio.d.ts.map +1 -0
  568. package/dist/types/components/Radio/index.d.ts +2 -0
  569. package/dist/types/components/Radio/index.d.ts.map +1 -0
  570. package/dist/types/components/Rate/Rate.d.ts +26 -0
  571. package/dist/types/components/Rate/Rate.d.ts.map +1 -0
  572. package/dist/types/components/Rate/index.d.ts +3 -0
  573. package/dist/types/components/Rate/index.d.ts.map +1 -0
  574. package/dist/types/components/Resizable/Resizable.d.ts +71 -0
  575. package/dist/types/components/Resizable/Resizable.d.ts.map +1 -0
  576. package/dist/types/components/Resizable/index.d.ts +4 -0
  577. package/dist/types/components/Resizable/index.d.ts.map +1 -0
  578. package/dist/types/components/ScrollArea/ScrollArea.d.ts +19 -0
  579. package/dist/types/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  580. package/dist/types/components/ScrollArea/index.d.ts +2 -0
  581. package/dist/types/components/ScrollArea/index.d.ts.map +1 -0
  582. package/dist/types/components/Select/Select.d.ts +33 -0
  583. package/dist/types/components/Select/Select.d.ts.map +1 -0
  584. package/dist/types/components/Select/index.d.ts +2 -0
  585. package/dist/types/components/Select/index.d.ts.map +1 -0
  586. package/dist/types/components/Separator/Separator.d.ts +5 -0
  587. package/dist/types/components/Separator/Separator.d.ts.map +1 -0
  588. package/dist/types/components/Separator/index.d.ts +2 -0
  589. package/dist/types/components/Separator/index.d.ts.map +1 -0
  590. package/dist/types/components/Sheet/Sheet.d.ts +36 -0
  591. package/dist/types/components/Sheet/Sheet.d.ts.map +1 -0
  592. package/dist/types/components/Sheet/index.d.ts +2 -0
  593. package/dist/types/components/Sheet/index.d.ts.map +1 -0
  594. package/dist/types/components/Sidebar/Sidebar.d.ts +50 -0
  595. package/dist/types/components/Sidebar/Sidebar.d.ts.map +1 -0
  596. package/dist/types/components/Sidebar/index.d.ts +4 -0
  597. package/dist/types/components/Sidebar/index.d.ts.map +1 -0
  598. package/dist/types/components/Skeleton/Skeleton.d.ts +6 -0
  599. package/dist/types/components/Skeleton/Skeleton.d.ts.map +1 -0
  600. package/dist/types/components/Skeleton/index.d.ts +2 -0
  601. package/dist/types/components/Skeleton/index.d.ts.map +1 -0
  602. package/dist/types/components/Slider/Slider.d.ts +25 -0
  603. package/dist/types/components/Slider/Slider.d.ts.map +1 -0
  604. package/dist/types/components/Slider/index.d.ts +2 -0
  605. package/dist/types/components/Slider/index.d.ts.map +1 -0
  606. package/dist/types/components/Stepper/Stepper.d.ts +86 -0
  607. package/dist/types/components/Stepper/Stepper.d.ts.map +1 -0
  608. package/dist/types/components/Stepper/StepperWrapper.d.ts +25 -0
  609. package/dist/types/components/Stepper/StepperWrapper.d.ts.map +1 -0
  610. package/dist/types/components/Stepper/index.d.ts +18 -0
  611. package/dist/types/components/Stepper/index.d.ts.map +1 -0
  612. package/dist/types/components/Switch/Switch.d.ts +14 -0
  613. package/dist/types/components/Switch/Switch.d.ts.map +1 -0
  614. package/dist/types/components/Switch/index.d.ts +2 -0
  615. package/dist/types/components/Switch/index.d.ts.map +1 -0
  616. package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts +9 -0
  617. package/dist/types/components/Table/TableFilter/data-table-date-filter.d.ts.map +1 -0
  618. package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts +11 -0
  619. package/dist/types/components/Table/TableFilter/data-table-filter-popover.d.ts.map +1 -0
  620. package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts +8 -0
  621. package/dist/types/components/Table/TableFilter/data-table-slider-filter.d.ts.map +1 -0
  622. package/dist/types/components/Table/TableWrapper.d.ts +2 -0
  623. package/dist/types/components/Table/TableWrapper.d.ts.map +1 -0
  624. package/dist/types/components/Table/data-table-column-header.d.ts +9 -0
  625. package/dist/types/components/Table/data-table-column-header.d.ts.map +1 -0
  626. package/dist/types/components/Table/data-table-pagination.d.ts +12 -0
  627. package/dist/types/components/Table/data-table-pagination.d.ts.map +1 -0
  628. package/dist/types/components/Table/data-table-toolbar.d.ts +10 -0
  629. package/dist/types/components/Table/data-table-toolbar.d.ts.map +1 -0
  630. package/dist/types/components/Table/data-table-view-options.d.ts +9 -0
  631. package/dist/types/components/Table/data-table-view-options.d.ts.map +1 -0
  632. package/dist/types/components/Table/data-table.d.ts +18 -0
  633. package/dist/types/components/Table/data-table.d.ts.map +1 -0
  634. package/dist/types/components/Table/index.d.ts +2 -0
  635. package/dist/types/components/Table/index.d.ts.map +1 -0
  636. package/dist/types/components/Table/select-column.d.ts +5 -0
  637. package/dist/types/components/Table/select-column.d.ts.map +1 -0
  638. package/dist/types/components/Tabs/Tabs.d.ts +22 -0
  639. package/dist/types/components/Tabs/Tabs.d.ts.map +1 -0
  640. package/dist/types/components/Tabs/classes.d.ts +29 -0
  641. package/dist/types/components/Tabs/classes.d.ts.map +1 -0
  642. package/dist/types/components/Tabs/index.d.ts +4 -0
  643. package/dist/types/components/Tabs/index.d.ts.map +1 -0
  644. package/dist/types/components/Tabs/types.d.ts +15 -0
  645. package/dist/types/components/Tabs/types.d.ts.map +1 -0
  646. package/dist/types/components/Textarea/Textarea.d.ts +17 -0
  647. package/dist/types/components/Textarea/Textarea.d.ts.map +1 -0
  648. package/dist/types/components/Textarea/index.d.ts +2 -0
  649. package/dist/types/components/Textarea/index.d.ts.map +1 -0
  650. package/dist/types/components/Theme/ThemeShowcase.d.ts +3 -0
  651. package/dist/types/components/Theme/ThemeShowcase.d.ts.map +1 -0
  652. package/dist/types/components/TimeGridView.d.ts +15 -0
  653. package/dist/types/components/TimeGridView.d.ts.map +1 -0
  654. package/dist/types/components/Toast/Toast.d.ts +12 -0
  655. package/dist/types/components/Toast/Toast.d.ts.map +1 -0
  656. package/dist/types/components/Toast/index.d.ts +3 -0
  657. package/dist/types/components/Toast/index.d.ts.map +1 -0
  658. package/dist/types/components/Toggle/Toggle.d.ts +10 -0
  659. package/dist/types/components/Toggle/Toggle.d.ts.map +1 -0
  660. package/dist/types/components/Toggle/index.d.ts +2 -0
  661. package/dist/types/components/Toggle/index.d.ts.map +1 -0
  662. package/dist/types/components/Tooltip/Tooltip.d.ts +19 -0
  663. package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -0
  664. package/dist/types/components/Tooltip/index.d.ts +3 -0
  665. package/dist/types/components/Tooltip/index.d.ts.map +1 -0
  666. package/dist/types/components/Tour/Tour.d.ts +105 -0
  667. package/dist/types/components/Tour/Tour.d.ts.map +1 -0
  668. package/dist/types/components/Tour/TourWrapper.d.ts +46 -0
  669. package/dist/types/components/Tour/TourWrapper.d.ts.map +1 -0
  670. package/dist/types/components/Tour/index.d.ts +36 -0
  671. package/dist/types/components/Tour/index.d.ts.map +1 -0
  672. package/dist/types/components/TreeSelect/TreeSelect.d.ts +2 -0
  673. package/dist/types/components/TreeSelect/TreeSelect.d.ts.map +1 -0
  674. package/dist/types/components/TreeSelect/index.d.ts +2 -0
  675. package/dist/types/components/TreeSelect/index.d.ts.map +1 -0
  676. package/dist/types/components/Upload/Upload.d.ts +69 -0
  677. package/dist/types/components/Upload/Upload.d.ts.map +1 -0
  678. package/dist/types/components/Upload/index.d.ts +2 -0
  679. package/dist/types/components/Upload/index.d.ts.map +1 -0
  680. package/dist/types/components/WheelColumn.d.ts +15 -0
  681. package/dist/types/components/WheelColumn.d.ts.map +1 -0
  682. package/dist/types/config/data-table.d.ts +125 -0
  683. package/dist/types/config/data-table.d.ts.map +1 -0
  684. package/dist/types/constants/common.d.ts +4 -0
  685. package/dist/types/constants/common.d.ts.map +1 -0
  686. package/dist/types/constants/theme.d.ts +13 -0
  687. package/dist/types/constants/theme.d.ts.map +1 -0
  688. package/dist/types/hooks/index.d.ts +10 -0
  689. package/dist/types/hooks/index.d.ts.map +1 -0
  690. package/dist/types/hooks/use-callback-ref.d.ts +10 -0
  691. package/dist/types/hooks/use-callback-ref.d.ts.map +1 -0
  692. package/dist/types/hooks/use-data-table.d.ts +26 -0
  693. package/dist/types/hooks/use-data-table.d.ts.map +1 -0
  694. package/dist/types/hooks/use-debounced-callback.d.ts +2 -0
  695. package/dist/types/hooks/use-debounced-callback.d.ts.map +1 -0
  696. package/dist/types/hooks/use-debounced-value.d.ts +9 -0
  697. package/dist/types/hooks/use-debounced-value.d.ts.map +1 -0
  698. package/dist/types/hooks/use-event-listener.d.ts +7 -0
  699. package/dist/types/hooks/use-event-listener.d.ts.map +1 -0
  700. package/dist/types/hooks/use-intersection-observer.d.ts +20 -0
  701. package/dist/types/hooks/use-intersection-observer.d.ts.map +1 -0
  702. package/dist/types/hooks/use-isomorphic-layout-effect.d.ts +3 -0
  703. package/dist/types/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
  704. package/dist/types/hooks/use-media-query.d.ts +7 -0
  705. package/dist/types/hooks/use-media-query.d.ts.map +1 -0
  706. package/dist/types/hooks/use-mouse-position.d.ts +14 -0
  707. package/dist/types/hooks/use-mouse-position.d.ts.map +1 -0
  708. package/dist/types/hooks/use-on-click-outside.d.ts +5 -0
  709. package/dist/types/hooks/use-on-click-outside.d.ts.map +1 -0
  710. package/dist/types/hooks/use-script.d.ts +9 -0
  711. package/dist/types/hooks/use-script.d.ts.map +1 -0
  712. package/dist/types/hooks/use-scroll-lock.d.ts +13 -0
  713. package/dist/types/hooks/use-scroll-lock.d.ts.map +1 -0
  714. package/dist/types/index.d.ts +72 -0
  715. package/dist/types/index.d.ts.map +1 -0
  716. package/dist/types/lib/TextAnimation/BlurText.d.ts +18 -0
  717. package/dist/types/lib/TextAnimation/BlurText.d.ts.map +1 -0
  718. package/dist/types/lib/TextAnimation/CircularText.d.ts +10 -0
  719. package/dist/types/lib/TextAnimation/CircularText.d.ts.map +1 -0
  720. package/dist/types/lib/TextAnimation/FlipWords.d.ts +10 -0
  721. package/dist/types/lib/TextAnimation/FlipWords.d.ts.map +1 -0
  722. package/dist/types/lib/TextAnimation/GradientText.d.ts +11 -0
  723. package/dist/types/lib/TextAnimation/GradientText.d.ts.map +1 -0
  724. package/dist/types/lib/TextAnimation/RollingText.d.ts +12 -0
  725. package/dist/types/lib/TextAnimation/RollingText.d.ts.map +1 -0
  726. package/dist/types/lib/TextAnimation/RotatingText.d.ts +11 -0
  727. package/dist/types/lib/TextAnimation/RotatingText.d.ts.map +1 -0
  728. package/dist/types/lib/TextAnimation/ShimmeringText.d.ts +12 -0
  729. package/dist/types/lib/TextAnimation/ShimmeringText.d.ts.map +1 -0
  730. package/dist/types/lib/TextAnimation/SplittingText.d.ts +26 -0
  731. package/dist/types/lib/TextAnimation/SplittingText.d.ts.map +1 -0
  732. package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts +10 -0
  733. package/dist/types/lib/TextAnimation/TextGenerateEffect.d.ts.map +1 -0
  734. package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts +6 -0
  735. package/dist/types/lib/TextAnimation/TextHoverEffect.d.ts.map +1 -0
  736. package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts +20 -0
  737. package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -0
  738. package/dist/types/lib/TextAnimation/TypingText.d.ts +27 -0
  739. package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -0
  740. package/dist/types/lib/TextAnimation/WritingText.d.ts +13 -0
  741. package/dist/types/lib/TextAnimation/WritingText.d.ts.map +1 -0
  742. package/dist/types/lib/TextAnimation/index.d.ts +16 -0
  743. package/dist/types/lib/TextAnimation/index.d.ts.map +1 -0
  744. package/dist/types/types/data-table.d.ts +44 -0
  745. package/dist/types/types/data-table.d.ts.map +1 -0
  746. package/dist/types/types/theme.d.ts +11 -0
  747. package/dist/types/types/theme.d.ts.map +1 -0
  748. package/dist/types/types/variables.d.ts +6 -0
  749. package/dist/types/types/variables.d.ts.map +1 -0
  750. package/dist/types/utils/animations.d.ts +47 -0
  751. package/dist/types/utils/animations.d.ts.map +1 -0
  752. package/dist/types/utils/css.d.ts +4 -0
  753. package/dist/types/utils/css.d.ts.map +1 -0
  754. package/dist/types/utils/data-table.d.ts +13 -0
  755. package/dist/types/utils/data-table.d.ts.map +1 -0
  756. package/dist/types/utils/datetime.d.ts +2 -0
  757. package/dist/types/utils/datetime.d.ts.map +1 -0
  758. package/dist/types/utils/parsers.d.ts +38 -0
  759. package/dist/types/utils/parsers.d.ts.map +1 -0
  760. package/package.json +968 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Upload.js","sources":["../../../../src/components/Upload/Upload.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useRef, useState, useCallback } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport {\n Upload as UploadIcon,\n X,\n File,\n FileText,\n Image as ImageIcon,\n Film,\n Music,\n Archive,\n FileCode,\n CheckCircle2,\n AlertCircle,\n Loader2,\n Eye,\n Download,\n Trash2,\n CloudUploadIcon,\n} from \"lucide-react\";\nimport { toast } from \"../Toast/Toast\";\nimport Dialog from \"../Dialog/Dialog\";\n\n// Variants for upload container\nconst uploadVariants = cva(\n \"relative flex justify-center items-center rounded-lg transition-all duration-200 cursor-pointer select-none\",\n {\n variants: {\n variant: {\n outline: \"border border-foreground/10 bg-background text-foreground\",\n primaryOutline: \"border border-primary bg-background text-primary\",\n icon: \"border border-primary text-primary bg-background rounded-xl p-2\",\n avatar:\n \"border-2 border-dashed border-foreground/20 bg-background !w-full !h-full flex-col text-center hover:border-foreground/40 !p-1\",\n avatarCircle:\n \"border-2 border-dashed border-foreground/20 bg-background !w-full !h-full rounded-full flex-col text-center hover:border-foreground/40 !p-1\",\n dropzone:\n \"border border-foreground/10 bg-background flex-col text-center py-10\",\n primaryDropzone:\n \"border border-primary bg-primary/10 flex-col text-center py-10\",\n secondaryDropzone:\n \"border border-foreground/10 bg-foreground/10 flex-col text-center py-10\",\n },\n\n size: {\n small: \"h-8 p-[6px] text-sm\",\n medium: \"h-10 p-2 text-base\",\n large: \"h-12 p-3 text-base\",\n },\n\n status: {\n idle: \"\",\n dragover: \"border-primary bg-primary/5 scale-[1.02]\",\n disabled: \"opacity-50 cursor-not-allowed\",\n },\n },\n\n defaultVariants: {\n variant: \"outline\",\n size: \"medium\",\n status: \"idle\",\n },\n },\n);\n\n// File status type\nexport type FileStatus = \"uploading\" | \"done\" | \"error\" | \"removed\";\n\n// Upload file item interface\nexport interface UploadFile {\n uid: string;\n name: string;\n status?: FileStatus;\n url?: string;\n thumbUrl?: string;\n size?: number;\n type?: string;\n percent?: number;\n error?: Error;\n response?: any;\n originFileObj?: File;\n}\n\n// Upload props interface\nexport interface UploadProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\" | \"size\">,\n VariantProps<typeof uploadVariants> {\n // Core props\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n fileList?: UploadFile[];\n defaultFileList?: UploadFile[];\n\n // Upload behavior\n action?: string | ((file: File) => string);\n customRequest?: (options: {\n file: File;\n onProgress: (percent: number) => void;\n onSuccess: (response: any) => void;\n onError: (error: Error) => void;\n }) => void;\n beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<boolean>;\n onChange?: (info: { file: UploadFile; fileList: UploadFile[] }) => void;\n onRemove?: (file: UploadFile) => boolean | Promise<boolean> | void;\n onPreview?: (file: UploadFile) => void;\n onDownload?: (file: UploadFile) => void;\n\n // Validation\n maxCount?: number;\n maxSize?: number; // in bytes\n\n // Display\n listType?: \"text\" | \"picture\" | \"picture-card\" | \"picture-circle\";\n showUploadList?:\n | boolean\n | {\n showPreviewIcon?: boolean;\n showRemoveIcon?: boolean;\n showDownloadIcon?: boolean;\n };\n pictureCardSize?: number; // Size in pixels for picture-card (default: auto based on cols)\n pictureCardCols?: number; // Number of columns for picture-card grid (default: 3)\n compact?: boolean; // Compact mode - shows as small button\n iconOnly?: boolean; // Show only icon without text in compact mode\n showBorder?: boolean; // Show border around upload area (default: true)\n uploadText?: string; // Custom text for upload area (default: \"Click to upload or drag and drop\")\n uploadDescription?: string; // Custom description text for upload area\n uploadIcon?: React.ReactNode; // Custom icon for upload area\n // Content\n children?: React.ReactNode;\n\n // Headers for upload request\n headers?: Record<string, string>;\n withCredentials?: boolean;\n\n // Drag and drop\n directory?: boolean;\n}\n\n// Helper function to get file icon based on type\nconst getFileIcon = (file: UploadFile) => {\n const type = file.type || \"\";\n const name = file.name.toLowerCase();\n\n if (type.startsWith(\"image/\")) return <ImageIcon className=\"h-4 w-4\" />;\n if (type.startsWith(\"video/\")) return <Film className=\"h-4 w-4\" />;\n if (type.startsWith(\"audio/\")) return <Music className=\"h-4 w-4\" />;\n if (name.endsWith(\".zip\") || name.endsWith(\".rar\") || name.endsWith(\".7z\"))\n return <Archive className=\"h-4 w-4\" />;\n if (\n name.endsWith(\".js\") ||\n name.endsWith(\".ts\") ||\n name.endsWith(\".jsx\") ||\n name.endsWith(\".tsx\") ||\n name.endsWith(\".css\") ||\n name.endsWith(\".html\")\n )\n return <FileCode className=\"h-4 w-4\" />;\n if (name.endsWith(\".txt\") || name.endsWith(\".md\"))\n return <FileText className=\"h-4 w-4\" />;\n return <File className=\"h-4 w-4\" />;\n};\n\n// Helper function to format file size\nconst formatFileSize = (bytes: number): string => {\n if (bytes === 0) return \"0 Bytes\";\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + \" \" + sizes[i];\n};\n\n// Generate unique ID\nconst generateUID = () => {\n return `upload-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\nconst UploadBase = React.forwardRef<HTMLDivElement, UploadProps>(\n (\n {\n className,\n variant,\n accept,\n multiple = false,\n disabled = false,\n fileList: controlledFileList,\n defaultFileList = [],\n action,\n customRequest,\n beforeUpload,\n onChange,\n onRemove,\n onPreview,\n onDownload,\n maxCount,\n maxSize,\n listType = \"text\",\n showUploadList = true,\n pictureCardSize,\n pictureCardCols = 3,\n iconOnly = false,\n showBorder = true,\n uploadText = \"Click to upload\",\n uploadDescription,\n uploadIcon,\n size = \"medium\",\n children,\n headers,\n withCredentials,\n directory = false,\n ...props\n },\n ref,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [internalFileList, setInternalFileList] =\n useState<UploadFile[]>(defaultFileList);\n const [isDragOver, setIsDragOver] = useState(false);\n\n // Built-in preview dialog state\n const [previewOpen, setPreviewOpen] = useState(false);\n const [previewImage, setPreviewImage] = useState(\"\");\n const [previewTitle, setPreviewTitle] = useState(\"\");\n\n // Use controlled or uncontrolled fileList\n const fileList = controlledFileList ?? internalFileList;\n const setFileList = controlledFileList ? undefined : setInternalFileList;\n\n // Check if dropzone variant\n const isDropzoneVariant = [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant || \"\");\n\n // Auto set listType to 'text' when directory mode is enabled or when uploading with dropzone variants\n const effectiveListType = directory\n ? \"text\"\n : isDropzoneVariant && fileList.length > 0\n ? \"text\"\n : listType;\n\n // Track the latest fileList for controlled mode\n const fileListRef = useRef<UploadFile[]>(fileList);\n fileListRef.current = fileList;\n\n // Check if can upload more files\n const canUploadMore = maxCount\n ? fileList.length < maxCount\n : directory || multiple\n ? true\n : fileList.length === 0;\n\n // Update file list\n const updateFileList = useCallback(\n (updater: (prev: UploadFile[]) => UploadFile[], file?: UploadFile) => {\n const newList = updater(fileListRef.current);\n\n if (setFileList) {\n setFileList(updater);\n }\n\n // Trigger onChange for controlled mode\n if (onChange) {\n // Always trigger onChange with the new list\n const dummyFile = file || ({} as UploadFile);\n onChange({ file: dummyFile, fileList: newList });\n }\n },\n [setFileList, onChange],\n );\n\n // Upload file\n const uploadFile = useCallback(\n (file: File) => {\n // Generate preview URL immediately for images\n const previewUrl = file.type.startsWith(\"image/\")\n ? URL.createObjectURL(file)\n : undefined;\n\n const uploadFileObj: UploadFile = {\n uid: generateUID(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: \"uploading\",\n percent: 0,\n originFileObj: file,\n url: previewUrl,\n thumbUrl: previewUrl,\n };\n\n // Add to file list immediately\n updateFileList((prev) => [...prev, uploadFileObj], uploadFileObj);\n\n // Custom request\n if (customRequest) {\n customRequest({\n file,\n onProgress: (percent) => {\n const updatedFile = { ...uploadFileObj, percent };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? updatedFile : f,\n ),\n updatedFile,\n );\n },\n onSuccess: (response) => {\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n response,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n ),\n successFile,\n );\n },\n onError: (error) => {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? errorFile : f,\n ),\n errorFile,\n );\n },\n });\n } else if (action) {\n // Default upload using fetch\n const url = typeof action === \"function\" ? action(file) : action;\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const xhr = new XMLHttpRequest();\n\n xhr.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) {\n const percent = Math.round((e.loaded / e.total) * 100);\n const updatedFile = { ...uploadFileObj, percent };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? updatedFile : f,\n ),\n updatedFile,\n );\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = JSON.parse(xhr.responseText);\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n response,\n url: response.url || response.data?.url,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n ),\n successFile,\n );\n } else {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error: new Error(`Upload failed with status ${xhr.status}`),\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? errorFile : f,\n ),\n errorFile,\n );\n }\n });\n\n xhr.addEventListener(\"error\", () => {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error: new Error(\"Network error\"),\n };\n updateFileList(\n (prev) =>\n prev.map((f) => (f.uid === uploadFileObj.uid ? errorFile : f)),\n errorFile,\n );\n });\n\n xhr.open(\"POST\", url);\n\n // Set headers\n if (headers) {\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n }\n\n if (withCredentials) {\n xhr.withCredentials = true;\n }\n\n xhr.send(formData);\n } else {\n // No action or customRequest, just mark as done (for preview only)\n setTimeout(() => {\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n ),\n successFile,\n );\n }, 100);\n }\n },\n [action, customRequest, updateFileList, headers, withCredentials],\n );\n\n // Handle file selection\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n\n console.log(\"=== handleFileChange DEBUG ===\");\n console.log(\"Files from browser:\", files.length);\n console.log(\"Directory mode:\", directory);\n console.log(\"Multiple mode:\", multiple);\n console.log(\"Current fileList length:\", fileList.length);\n console.log(\n \"File names:\",\n files.map((f) => f.name),\n );\n\n if (files.length === 0) return;\n\n // Check multiple - if multiple is false and there's already a file, reject (except for directory upload)\n if (!directory && !multiple && fileList.length > 0) {\n toast.error(\n \"You can only upload one file. Please remove the existing file first.\",\n );\n return;\n }\n\n // Check max count\n if (maxCount && fileList.length + files.length > maxCount) {\n toast.error(`You can only upload up to ${maxCount} file(s)`);\n return;\n }\n\n // Process each file - collect valid files first\n let uploadedCount = 0;\n const validFiles: File[] = [];\n\n for (const file of files) {\n console.log(`\\n📁 Processing: ${file.name}`);\n\n // Check max size\n if (maxSize && file.size > maxSize) {\n console.log(\n `❌ REJECTED: File size ${file.size} exceeds maxSize ${maxSize}`,\n );\n toast.error(\n `${file.name} exceeds maximum size of ${formatFileSize(maxSize)}`,\n );\n continue;\n }\n\n // Before upload hook\n if (beforeUpload) {\n console.log(`🔍 Calling beforeUpload for ${file.name}...`);\n const result = await beforeUpload(file, files);\n if (result === false) {\n console.log(`❌ REJECTED by beforeUpload: ${file.name}`);\n continue;\n }\n console.log(`✅ beforeUpload passed for ${file.name}`);\n }\n\n console.log(`✅ Valid file: ${file.name}`);\n validFiles.push(file);\n uploadedCount++;\n }\n\n console.log(\n `\\n📊 Summary: ${uploadedCount} / ${files.length} files will be uploaded`,\n );\n\n // Create upload file objects for all valid files at once\n const uploadFileObjects: UploadFile[] = validFiles.map((file) => {\n const previewUrl = file.type.startsWith(\"image/\")\n ? URL.createObjectURL(file)\n : undefined;\n\n return {\n uid: generateUID(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: \"uploading\" as FileStatus,\n percent: 0,\n originFileObj: file,\n url: previewUrl,\n thumbUrl: previewUrl,\n };\n });\n\n // Add all files to list at once\n updateFileList((prev) => [...prev, ...uploadFileObjects]);\n\n // Then trigger upload for each file\n uploadFileObjects.forEach((uploadFileObj, index) => {\n const file = validFiles[index];\n\n // Start upload process\n if (customRequest) {\n customRequest({\n file,\n onProgress: (percent) => {\n const updatedFile = { ...uploadFileObj, percent };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? updatedFile : f,\n ),\n updatedFile,\n );\n },\n onSuccess: (response) => {\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n response,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n ),\n successFile,\n );\n },\n onError: (error) => {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? errorFile : f,\n ),\n errorFile,\n );\n },\n });\n } else if (action) {\n // Default upload using XHR - similar implementation\n const url = typeof action === \"function\" ? action(file) : action;\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const xhr = new XMLHttpRequest();\n\n xhr.upload.addEventListener(\"progress\", (e) => {\n if (e.lengthComputable) {\n const percent = Math.round((e.loaded / e.total) * 100);\n const updatedFile = { ...uploadFileObj, percent };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? updatedFile : f,\n ),\n updatedFile,\n );\n }\n });\n\n xhr.addEventListener(\"load\", () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n const response = JSON.parse(xhr.responseText);\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n response,\n url: response.url || response.data?.url,\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n ),\n successFile,\n );\n } else {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error: new Error(`Upload failed with status ${xhr.status}`),\n };\n updateFileList(\n (prev) =>\n prev.map((f) =>\n f.uid === uploadFileObj.uid ? errorFile : f,\n ),\n errorFile,\n );\n }\n });\n\n xhr.addEventListener(\"error\", () => {\n const errorFile = {\n ...uploadFileObj,\n status: \"error\" as FileStatus,\n error: new Error(\"Network error\"),\n };\n updateFileList(\n (prev) =>\n prev.map((f) => (f.uid === uploadFileObj.uid ? errorFile : f)),\n errorFile,\n );\n });\n\n xhr.open(\"POST\", url);\n\n if (headers) {\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n }\n\n if (withCredentials) {\n xhr.withCredentials = true;\n }\n\n xhr.send(formData);\n } else {\n // No action or customRequest, just mark as done (mock upload)\n console.log(\n `⏱️ Mock upload starting for ${file.name} (delay: ${100 + index * 50}ms)`,\n );\n setTimeout(\n () => {\n console.log(`✅ Mock upload complete for ${file.name}`);\n const successFile = {\n ...uploadFileObj,\n status: \"done\" as FileStatus,\n percent: 100,\n };\n updateFileList((prev) => {\n console.log(\n `📝 Updating status for ${file.name}, current list:`,\n prev.length,\n );\n return prev.map((f) =>\n f.uid === uploadFileObj.uid ? successFile : f,\n );\n }, successFile);\n },\n 100 + index * 50,\n ); // Stagger completion times\n }\n });\n\n // Reset input\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n };\n\n // Handle remove\n const handleRemove = async (file: UploadFile) => {\n if (onRemove) {\n const result = await onRemove(file);\n if (result === false) return;\n }\n\n updateFileList((prev) => prev.filter((f) => f.uid !== file.uid), {\n ...file,\n status: \"removed\" as FileStatus,\n });\n\n // Revoke object URL if exists\n if (file.url && file.url.startsWith(\"blob:\")) {\n URL.revokeObjectURL(file.url);\n }\n };\n\n // Handle drag and drop\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (!disabled && canUploadMore) {\n setIsDragOver(true);\n }\n };\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (disabled || !canUploadMore) return;\n\n let files = Array.from(e.dataTransfer.files);\n\n if (files.length === 0) return;\n\n // Check multiple - if multiple is false and there's already a file, reject\n if (!multiple && fileList.length > 0) {\n toast.error(\n \"You can only upload one file. Please remove the existing file first.\",\n );\n return;\n }\n\n // Check multiple - only allow 1 file if multiple is false\n if (!multiple && files.length > 1) {\n toast.error(\"You can only upload one file at a time\");\n files = [files[0]]; // Take only the first file\n }\n\n // Check max count\n if (maxCount && fileList.length + files.length > maxCount) {\n toast.error(`You can only upload up to ${maxCount} file(s)`);\n return;\n }\n\n // Process each file\n for (const file of files) {\n // Check accept\n if (accept && !file.type.match(new RegExp(accept.replace(/,/g, \"|\")))) {\n continue;\n }\n\n // Check max size\n if (maxSize && file.size > maxSize) {\n toast.error(\n `${file.name} exceeds maximum size of ${formatFileSize(maxSize)}`,\n );\n continue;\n }\n\n // Before upload hook\n if (beforeUpload) {\n const result = await beforeUpload(file, files);\n if (result === false) continue;\n }\n\n uploadFile(file);\n }\n };\n\n // Click to upload\n const handleClick = () => {\n if (!disabled && canUploadMore) {\n inputRef.current?.click();\n }\n };\n\n // Handle preview - use built-in dialog if no onPreview provided\n const handlePreview = (file: UploadFile) => {\n if (onPreview) {\n onPreview(file);\n } else {\n // Built-in preview for images\n if (file.url || file.thumbUrl) {\n setPreviewImage(file.url || file.thumbUrl || \"\");\n setPreviewTitle(file.name);\n setPreviewOpen(true);\n }\n }\n };\n\n // Handle download - use built-in download if no onDownload provided\n const handleDownload = async (file: UploadFile) => {\n if (onDownload) {\n onDownload(file);\n } else {\n // Built-in download - handle cross-origin URLs\n if (file.url) {\n // Don't allow download for uploading or error status\n if (file.status === \"uploading\") {\n toast.error(\"Please wait until the file finishes uploading\");\n return;\n }\n if (file.status === \"error\") {\n toast.error(\"Cannot download file with error status\");\n return;\n }\n\n try {\n // For cross-origin URLs (like Unsplash), we need to fetch and create a blob\n const response = await fetch(file.url);\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.href = blobUrl;\n link.download = file.name;\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n // Clean up blob URL after download\n setTimeout(() => URL.revokeObjectURL(blobUrl), 100);\n } catch {\n // Fallback to direct link if fetch fails (e.g., CORS issues)\n const link = document.createElement(\"a\");\n link.href = file.url;\n link.download = file.name;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n }\n };\n\n // Show upload list config\n const uploadListConfig =\n typeof showUploadList === \"boolean\"\n ? {\n showPreviewIcon: true,\n showRemoveIcon: true,\n showDownloadIcon: true,\n }\n : {\n showPreviewIcon: showUploadList.showPreviewIcon ?? true,\n showRemoveIcon: showUploadList.showRemoveIcon ?? true,\n showDownloadIcon: showUploadList.showDownloadIcon ?? true,\n };\n\n return (\n <>\n <div ref={ref} className={cn(className)} {...props}>\n {/* Upload Area - Always show, just disable when needed */}\n <div\n className={cn(\n uploadVariants({\n variant,\n status:\n disabled || !canUploadMore\n ? \"disabled\"\n : isDragOver\n ? \"dragover\"\n : \"idle\",\n size: [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant as any)\n ? undefined\n : size,\n }),\n [\"dropzone\", \"primaryDropzone\", \"secondaryDropzone\"].includes(\n variant as any,\n ) && \"min-h-[180px] min-w-[300px]\",\n !showBorder && \"border-0\",\n !iconOnly &&\n variant !== \"avatar\" &&\n variant !== \"avatarCircle\" &&\n \"px-4\",\n // Remove disabled opacity for avatar variants when image is shown\n (variant === \"avatar\" || variant === \"avatarCircle\") &&\n fileList.length > 0 &&\n fileList[0].url &&\n \"opacity-100!\",\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={handleClick}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n className=\"hidden\"\n {...(directory\n ? ({ webkitdirectory: \"\", directory: \"\" } as any)\n : {})}\n />\n\n {/* Avatar variant - show image if exists and not disabled, otherwise show children */}\n {variant === \"avatar\" || variant === \"avatarCircle\" ? (\n <>\n {fileList.length > 0 && fileList[0].url && !disabled ? (\n <div className=\"relative w-full h-full group\">\n <img\n draggable={false}\n src={fileList[0].url || fileList[0].thumbUrl}\n alt={fileList[0].name}\n className={cn(\n \"w-full h-full object-cover\",\n variant === \"avatarCircle\" && \"rounded-full\",\n variant === \"avatar\" && \"rounded-lg\",\n )}\n />\n {/* Delete button overlay */}\n <div\n className={cn(\n \"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center\",\n variant === \"avatarCircle\" && \"rounded-full\",\n variant === \"avatar\" && \"rounded-lg\",\n )}\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(fileList[0]);\n }}\n >\n <Trash2 className=\"h-6 w-6 text-white cursor-pointer hover:scale-110 transition-transform\" />\n </div>\n </div>\n ) : (\n children\n )}\n </>\n ) : (\n <div\n className={cn(\n \"flex items-center justify-center gap-2\",\n [\"secondaryDropzone\", \"dropzone\", \"primaryDropzone\"].includes(\n variant as any,\n ) && \"flex-col\",\n )}\n >\n {uploadIcon ? (\n <div\n className={cn(\n [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant as any)\n ? \"h-10 w-10\"\n : size === \"small\"\n ? \"h-5 w-5\"\n : \"h-6 w-6\",\n variant === \"outline\" && \"text-gray-500\",\n [\n \"primaryDropzone\",\n \"secondaryDropzone\",\n \"primaryOutline\",\n ].includes(variant as any) && \"text-primary\",\n )}\n >\n {uploadIcon}\n </div>\n ) : (\n <>\n {iconOnly ? (\n <UploadIcon\n className={cn(\n [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant as any)\n ? \"h-10 w-10\"\n : size === \"small\"\n ? \"h-5 w-5\"\n : \"h-6 w-6\",\n variant === \"outline\" && \"text-gray-500\",\n [\n \"secondaryDropzone\",\n \"primaryDropzone\",\n \"primaryOutline\",\n ].includes(variant as any) && \"text-primary\",\n )}\n />\n ) : (\n <CloudUploadIcon\n className={cn(\n [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant as any)\n ? \"h-10 w-10\"\n : size === \"small\"\n ? \"h-5 w-5\"\n : \"h-6 w-6\",\n variant === \"outline\" && \"text-gray-500\",\n [\n \"primaryDropzone\",\n \"secondaryDropzone\",\n \"primaryOutline\",\n ].includes(variant as any) && \"text-primary\",\n )}\n />\n )}\n </>\n )}\n {!iconOnly && (\n <>\n <span className=\"font-medium whitespace-nowrap text-sm\">\n {uploadText}\n </span>\n {uploadDescription &&\n [\n \"dropzone\",\n \"primaryDropzone\",\n \"secondaryDropzone\",\n ].includes(variant as any) && (\n <span className=\"text-xs text-gray-500\">\n {uploadDescription}\n </span>\n )}\n </>\n )}\n </div>\n )}\n </div>\n\n {/* File List */}\n {showUploadList && fileList.length > 0 && (\n <div\n className={cn(\n \"mt-4\",\n (effectiveListType === \"picture-card\" ||\n effectiveListType === \"picture-circle\") &&\n \"grid gap-2\",\n effectiveListType === \"picture\" && \"space-y-2\",\n )}\n style={{\n gridTemplateColumns:\n effectiveListType === \"picture-card\" ||\n effectiveListType === \"picture-circle\"\n ? `repeat(${pictureCardCols}, 1fr)`\n : undefined,\n minWidth:\n effectiveListType === \"picture-card\" ||\n effectiveListType === \"picture-circle\"\n ? \"100px\"\n : undefined,\n }}\n >\n {fileList\n .filter((file) => file.response !== Upload.LIST_IGNORE)\n .map((file) => (\n <FileItem\n key={file.uid}\n file={file}\n listType={effectiveListType}\n onRemove={() => handleRemove(file)}\n onPreview={handlePreview}\n onDownload={handleDownload}\n showPreviewIcon={uploadListConfig.showPreviewIcon}\n showRemoveIcon={uploadListConfig.showRemoveIcon}\n showDownloadIcon={uploadListConfig.showDownloadIcon}\n pictureCardSize={pictureCardSize}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Built-in preview dialog */}\n <Dialog\n open={previewOpen}\n onOpenChange={setPreviewOpen}\n title={previewTitle}\n size=\"lg\"\n >\n <img\n src={previewImage}\n alt={previewTitle}\n className=\"w-full h-auto max-h-[70vh] object-contain\"\n />\n </Dialog>\n </>\n );\n },\n);\n\nUploadBase.displayName = \"Upload\";\n\n// Add static property for LIST_IGNORE\ninterface UploadComponent extends React.ForwardRefExoticComponent<\n UploadProps & React.RefAttributes<HTMLDivElement>\n> {\n LIST_IGNORE: string;\n}\n\nexport const Upload = UploadBase as UploadComponent;\nUpload.LIST_IGNORE = \"LIST_IGNORE\";\n\n// File Item Component\ninterface FileItemProps {\n file: UploadFile;\n listType: \"text\" | \"picture\" | \"picture-card\" | \"picture-circle\";\n onRemove: () => void;\n onPreview?: (file: UploadFile) => void;\n onDownload?: (file: UploadFile) => void;\n showPreviewIcon?: boolean;\n showRemoveIcon?: boolean;\n showDownloadIcon?: boolean;\n pictureCardSize?: number;\n}\n\nconst FileItem: React.FC<FileItemProps> = ({\n file,\n listType,\n onRemove,\n onPreview,\n onDownload,\n showPreviewIcon,\n showRemoveIcon,\n showDownloadIcon,\n // pictureCardSize, // Unused currently\n}) => {\n const isImage = file.type?.startsWith(\"image/\");\n const canPreview = isImage || file.url;\n\n if (listType === \"picture-card\") {\n return (\n <div\n className=\"relative aspect-square rounded-lg border bg-muted/50 overflow-hidden group\"\n style={{\n width: \"100px\",\n height: \"100px\",\n minWidth: \"100px\",\n minHeight: \"100px\",\n padding: \"4px\",\n }}\n >\n {/* Image or Icon */}\n {file.url && isImage ? (\n <img\n src={file.thumbUrl || file.url}\n alt={file.name}\n className=\"h-full w-full object-cover rounded-lg\"\n />\n ) : (\n <div className=\"flex items-center justify-center h-full\">\n {getFileIcon(file)}\n </div>\n )}\n\n {/* Upload Progress */}\n {file.status === \"uploading\" && (\n <div className=\"absolute inset-0 bg-background/80 flex items-center justify-center\">\n <div className=\"w-full px-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"text-xs\">{file.percent}%</span>\n </div>\n <div className=\"h-1 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n </div>\n </div>\n )}\n\n {/* Status Icon */}\n {file.status === \"done\" && (\n <div className=\"absolute top-2 right-2 bg-green-500 rounded-full p-1\">\n <CheckCircle2 className=\"h-4 w-4 text-white\" />\n </div>\n )}\n {file.status === \"error\" && (\n <div className=\"absolute top-2 right-2 bg-red-500 rounded-full p-1\">\n <AlertCircle className=\"h-4 w-4 text-white\" />\n </div>\n )}\n\n {/* Hover Actions */}\n <div className=\"absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2\">\n {showPreviewIcon && canPreview && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPreview?.(file);\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4 text-white\" />\n </button>\n )}\n {showDownloadIcon && file.url && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDownload?.(file);\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4 text-white\" />\n </button>\n )}\n {showRemoveIcon && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Remove\"\n >\n <Trash2 className=\"h-4 w-4 text-white\" />\n </button>\n )}\n </div>\n\n {/* File name tooltip */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/60 p-2 text-white text-xs truncate opacity-0 group-hover:opacity-100 transition-opacity\">\n {file.name}\n </div>\n </div>\n );\n }\n\n if (listType === \"picture-circle\") {\n return (\n <div\n className={cn(\n \"relative aspect-square rounded-full border bg-muted/50 overflow-hidden group\",\n file.status === \"done\" && \"border-2 border-green-500\",\n file.status === \"error\" && \"border-2 border-red-500\",\n )}\n style={{\n width: \"100px\",\n height: \"100px\",\n minWidth: \"100px\",\n minHeight: \"100px\",\n padding: \"4px\",\n }}\n >\n {/* Image or Icon */}\n {file.url && isImage ? (\n <img\n src={file.thumbUrl || file.url}\n alt={file.name}\n className=\"h-full w-full object-cover rounded-full\"\n />\n ) : (\n <div className=\"flex items-center justify-center h-full rounded-full bg-muted\">\n {getFileIcon(file)}\n </div>\n )}\n\n {/* Upload Progress */}\n {file.status === \"uploading\" && (\n <div className=\"absolute inset-0 bg-background/80 flex items-center justify-center rounded-full\">\n <div className=\"w-full px-4\">\n <div className=\"flex items-center gap-2 mb-2 justify-center\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"text-xs\">{file.percent}%</span>\n </div>\n <div className=\"h-1 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n </div>\n </div>\n )}\n\n {/* Hover Actions */}\n <div className=\"absolute inset-0 bg-black/60 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2 rounded-full\">\n {showPreviewIcon && canPreview && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPreview?.(file);\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4 text-white\" />\n </button>\n )}\n {showDownloadIcon && file.url && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDownload?.(file);\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4 text-white\" />\n </button>\n )}\n {showRemoveIcon && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className=\"p-1 rounded-full bg-background/20 hover:bg-background/30 transition-colors\"\n title=\"Remove\"\n >\n <Trash2 className=\"h-4 w-4 text-white\" />\n </button>\n )}\n {/* File name tooltip */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/60 p-2 text-white text-xs truncate opacity-0 group-hover:opacity-100 transition-opacity\">\n {file.name}\n </div>\n </div>\n </div>\n );\n }\n\n if (listType === \"picture\") {\n return (\n <div className=\"flex items-center gap-3 p-2 rounded-lg border bg-background hover:bg-muted/50 transition-colors group\">\n {/* Thumbnail */}\n <div className=\"shrink-0 h-10 w-10 rounded overflow-hidden bg-muted flex items-center justify-center\">\n {file.url && isImage ? (\n <img\n src={file.thumbUrl || file.url}\n alt={file.name}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n getFileIcon(file)\n )}\n </div>\n\n {/* Info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{file.name}</p>\n <div className=\"flex items-center gap-2 mt-1\">\n {file.size && (\n <span className=\"text-xs text-muted-foreground\">\n {formatFileSize(file.size)}\n </span>\n )}\n {file.status === \"uploading\" && (\n <span className=\"text-xs text-primary\">{file.percent}%</span>\n )}\n {file.status === \"done\" && (\n <CheckCircle2 className=\"h-4 w-4 text-green-500\" />\n )}\n {file.status === \"error\" && (\n <AlertCircle className=\"h-4 w-4 text-red-500\" />\n )}\n </div>\n {file.status === \"uploading\" && (\n <div className=\"h-1 bg-muted rounded-full overflow-hidden mt-2\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n {showPreviewIcon && canPreview && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPreview?.(file);\n }}\n className=\"p-1.5 rounded hover:bg-muted transition-colors\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n )}\n {showDownloadIcon && file.url && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDownload?.(file);\n }}\n className=\"p-1.5 rounded hover:bg-muted transition-colors\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4\" />\n </button>\n )}\n {showRemoveIcon && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className=\"p-1.5 rounded hover:bg-destructive/10 transition-colors text-destructive\"\n title=\"Remove\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n }\n\n // Text list\n return (\n <div className=\"flex items-center gap-2 p-2 rounded hover:bg-muted/50 transition-colors group\">\n {/* Icon */}\n <div className=\"shrink-0\">{getFileIcon(file)}</div>\n\n {/* Info */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm truncate\">{file.name}</p>\n {/* Status */}\n {file.status === \"done\" && (\n <CheckCircle2 className=\"h-4 w-4 text-green-500 shrink-0\" />\n )}\n {file.status === \"error\" && (\n <AlertCircle className=\"h-4 w-4 text-red-500 shrink-0\" />\n )}\n {file.status === \"uploading\" && (\n <Loader2 className=\"h-4 w-4 animate-spin shrink-0\" />\n )}\n </div>\n\n {file.status === \"uploading\" && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-1 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${file.percent}%` }}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {file.percent}%\n </span>\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n {showPreviewIcon && canPreview && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onPreview?.(file);\n }}\n className=\"p-1 rounded hover:bg-muted transition-colors\"\n title=\"Preview\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n )}\n {showDownloadIcon && file.url && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDownload?.(file);\n }}\n className=\"p-1 rounded hover:bg-muted transition-colors\"\n title=\"Download\"\n >\n <Download className=\"h-4 w-4\" />\n </button>\n )}\n {showRemoveIcon && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className=\"p-1 rounded hover:bg-destructive/10 transition-colors text-destructive\"\n title=\"Remove\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default Upload;\n"],"names":["uploadVariants","cva","getFileIcon","file","type","name","jsx","ImageIcon","Film","Music","Archive","FileCode","FileText","File","formatFileSize","bytes","k","sizes","i","generateUID","UploadBase","React","className","variant","accept","multiple","disabled","controlledFileList","defaultFileList","action","customRequest","beforeUpload","onChange","onRemove","onPreview","onDownload","maxCount","maxSize","listType","showUploadList","pictureCardSize","pictureCardCols","iconOnly","showBorder","uploadText","uploadDescription","uploadIcon","size","children","headers","withCredentials","directory","props","ref","inputRef","useRef","internalFileList","setInternalFileList","useState","isDragOver","setIsDragOver","previewOpen","setPreviewOpen","previewImage","setPreviewImage","previewTitle","setPreviewTitle","fileList","setFileList","isDropzoneVariant","effectiveListType","fileListRef","canUploadMore","updateFileList","useCallback","updater","newList","uploadFile","previewUrl","uploadFileObj","prev","percent","updatedFile","f","response","successFile","error","errorFile","url","formData","xhr","e","key","value","handleFileChange","files","toast","uploadedCount","validFiles","uploadFileObjects","index","handleRemove","handleDragOver","handleDragLeave","handleDrop","handleClick","handlePreview","handleDownload","blob","blobUrl","link","uploadListConfig","jsxs","Fragment","cn","Trash2","UploadIcon","CloudUploadIcon","Upload","FileItem","Dialog","showPreviewIcon","showRemoveIcon","showDownloadIcon","isImage","canPreview","Loader2","CheckCircle2","AlertCircle","Eye","Download","X"],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { jsxs as y, jsx as a } from "react/jsx-runtime";
2
+ import * as Y from "react";
3
+ import { memo as _, useRef as S, useState as D, useCallback as F, useEffect as H } from "react";
4
+ import { cn as k } from "@dsui/ui/index";
5
+ const P = (t) => String(t).padStart(2, "0"), W = (t = "primary") => ({
6
+ primary: "text-primary",
7
+ secondary: "text-secondary",
8
+ accent: "text-accent",
9
+ destructive: "text-destructive",
10
+ muted: "text-muted-foreground",
11
+ success: "text-success",
12
+ error: "text-error",
13
+ warning: "text-warning",
14
+ foreground: "text-foreground"
15
+ })[t], $ = _(
16
+ Y.forwardRef(
17
+ ({
18
+ items: t,
19
+ value: o,
20
+ onChange: u,
21
+ timeLabel: d,
22
+ itemClassName: N,
23
+ isItemDisabled: f,
24
+ disabled: p,
25
+ color: C = "primary"
26
+ }, i) => {
27
+ const r = S(
28
+ null
29
+ ), l = S(null), [M, j] = D(0), h = F(() => {
30
+ if (!l.current || p) return;
31
+ const e = l.current, c = e.scrollTop;
32
+ j(c), r.current && clearTimeout(r.current), r.current = setTimeout(() => {
33
+ const m = e.scrollTop, n = 40, g = e.clientHeight / 2, x = m - 120 + g;
34
+ let s = t[0], v = 1 / 0;
35
+ t.forEach((E, z) => {
36
+ const I = z * n + n / 2, T = Math.abs(I - x);
37
+ T < v && (v = T, s = E);
38
+ }), s !== o && !f(s) && u(s);
39
+ }, 150);
40
+ }, [t, o, u, f, p]);
41
+ H(() => {
42
+ const e = l.current;
43
+ if (e)
44
+ return e.addEventListener("scroll", h, { passive: !0 }), () => {
45
+ e.removeEventListener("scroll", h), r.current && clearTimeout(r.current);
46
+ };
47
+ }, [h]), H(() => () => {
48
+ r.current && clearTimeout(r.current);
49
+ }, []);
50
+ const R = (e, c) => {
51
+ const g = 120 + e * 40 + 20, w = Math.abs(
52
+ g - (M + 128)
53
+ ), x = 256 / 2;
54
+ return {
55
+ opacity: Math.max(
56
+ 0.3,
57
+ 1 - w / x * 0.7
58
+ ),
59
+ fontSize: c ? "1.3rem" : "1rem",
60
+ transition: "opacity 0.2s ease, transform 0.2s ease"
61
+ };
62
+ };
63
+ return /* @__PURE__ */ y("div", { className: "flex flex-col items-center gap-2 w-full h-full max-h-72", children: [
64
+ d && /* @__PURE__ */ a("div", { className: "text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center h-8", children: d }),
65
+ /* @__PURE__ */ y(
66
+ "div",
67
+ {
68
+ className: k(
69
+ "relative w-full",
70
+ d ? "h-[calc(100%_-_2rem)]" : " h-full"
71
+ ),
72
+ children: [
73
+ /* @__PURE__ */ a("div", { className: "absolute top-1/2 left-0 right-0 h-10 -translate-y-1/2 border-t border-b border-border pointer-events-none z-10" }),
74
+ /* @__PURE__ */ y(
75
+ "div",
76
+ {
77
+ ref: (e) => {
78
+ l.current = e, typeof i == "function" ? i(e) : i && (i.current = e);
79
+ },
80
+ className: k(
81
+ "relative h-full w-full min-w-20 min-h-60 overflow-y-scroll scroll-smooth",
82
+ "[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent",
83
+ "[&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-thumb]:rounded",
84
+ "flex flex-col snap-y snap-mandatory",
85
+ N
86
+ ),
87
+ style: {
88
+ maskImage: "linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)",
89
+ WebkitMaskImage: "linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)"
90
+ },
91
+ children: [
92
+ /* @__PURE__ */ a("div", { className: "h-[calc(50%-1.25rem)] flex-shrink-0" }),
93
+ t.map((e, c) => {
94
+ const m = f(e), n = o !== void 0 && e === o, b = R(c, n);
95
+ return /* @__PURE__ */ a(
96
+ "div",
97
+ {
98
+ onClick: p || m ? void 0 : () => u(e),
99
+ "data-selected": n || void 0,
100
+ className: k(
101
+ "h-10 flex-shrink-0 flex items-center justify-center transition-all snap-center",
102
+ "cursor-pointer text-lg font-medium select-none",
103
+ "disabled:opacity-30 disabled:cursor-not-allowed disabled:line-through",
104
+ n ? `${W(C)} font-bold` : "text-muted-foreground"
105
+ ),
106
+ style: b,
107
+ children: P(e)
108
+ },
109
+ e
110
+ );
111
+ }),
112
+ /* @__PURE__ */ a("div", { className: "h-[calc(50%-1.25rem)] flex-shrink-0" })
113
+ ]
114
+ }
115
+ )
116
+ ]
117
+ }
118
+ )
119
+ ] });
120
+ }
121
+ )
122
+ );
123
+ $.displayName = "TimeColumnwheel";
124
+ export {
125
+ $ as TimeColumnwheel
126
+ };
127
+ //# sourceMappingURL=WheelColumn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref,\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (closestItem !== selectedValue && !isItemDisabled(closestItem)) {\n onChangeCol(closestItem);\n }\n }, 150); // 150ms debounce\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY),\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7,\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"flex flex-col items-center gap-2 w-full h-full max-h-72\">\n {timeLabel && (\n <div className=\"text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"relative w-full\",\n timeLabel ? \"h-[calc(100%_-_2rem)]\" : \" h-full\",\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"absolute top-1/2 left-0 right-0 h-10 -translate-y-1/2 border-t border-b border-border pointer-events-none z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"relative h-full w-full min-w-20 min-h-60 overflow-y-scroll scroll-smooth\",\n \"[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent\",\n \"[&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-thumb]:rounded\",\n \"flex flex-col snap-y snap-mandatory\",\n itemClassName,\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"h-10 flex-shrink-0 flex items-center justify-center transition-all snap-center\",\n \"cursor-pointer text-lg font-medium select-none\",\n \"disabled:opacity-30 disabled:cursor-not-allowed disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} font-bold`\n : \"text-muted-foreground\",\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n },\n ),\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","useEffect","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ const y = "dd/MM/yyyy";
2
+ export {
3
+ y as DATE_FORMAT
4
+ };
5
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sources":["../../../src/constants/common.ts"],"sourcesContent":["export const DATE_FORMAT = \"dd/MM/yyyy\";\nexport const TIME_FORMAT = \"HH:mm\";\nexport const DATE_TIME_FORMAT = `${DATE_FORMAT} ${TIME_FORMAT}`;\n"],"names":["DATE_FORMAT"],"mappings":"AAAO,MAAMA,IAAc;"}
Binary file
@@ -0,0 +1,14 @@
1
+ import * as e from "react";
2
+ function c(r) {
3
+ const t = e.useRef(r);
4
+ return e.useEffect(() => {
5
+ t.current = r;
6
+ }), e.useMemo(
7
+ () => ((...u) => t.current?.(...u)),
8
+ []
9
+ );
10
+ }
11
+ export {
12
+ c as useCallbackRef
13
+ };
14
+ //# sourceMappingURL=use-callback-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-callback-ref.js","sources":["../../../src/hooks/use-callback-ref.ts"],"sourcesContent":["import * as React from \"react\";\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx\n */\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: never[]) => unknown>(\n callback: T | undefined,\n): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(\n () => ((...args) => callbackRef.current?.(...args)) as T,\n [],\n );\n}\n\nexport { useCallbackRef };\n"],"names":["useCallbackRef","callback","callbackRef","React","args"],"mappings":";AAUA,SAASA,EACPC,GACG;AACH,QAAMC,IAAcC,EAAM,OAAOF,CAAQ;AAEzC,SAAAE,EAAM,UAAU,MAAM;AACpB,IAAAD,EAAY,UAAUD;AAAA,EACxB,CAAC,GAGME,EAAM;AAAA,IACX,OAAO,IAAIC,MAASF,EAAY,UAAU,GAAGE,CAAI;AAAA,IACjD,CAAA;AAAA,EAAC;AAEL;"}
@@ -0,0 +1,21 @@
1
+ import * as t from "react";
2
+ import { useCallbackRef as n } from "./use-callback-ref.js";
3
+ function s(u, c) {
4
+ const o = n(u), e = t.useRef(0);
5
+ return t.useEffect(
6
+ () => () => window.clearTimeout(e.current),
7
+ []
8
+ ), t.useCallback(
9
+ (...r) => {
10
+ window.clearTimeout(e.current), e.current = window.setTimeout(
11
+ () => o(...r),
12
+ c
13
+ );
14
+ },
15
+ [o, c]
16
+ );
17
+ }
18
+ export {
19
+ s as useDebouncedCallback
20
+ };
21
+ //# sourceMappingURL=use-debounced-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-callback.js","sources":["../../../src/hooks/use-debounced-callback.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { useCallbackRef } from \"@/hooks/use-callback-ref\";\n\nexport function useDebouncedCallback<T extends (...args: never[]) => unknown>(\n callback: T,\n delay: number,\n) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = React.useRef(0);\n React.useEffect(\n () => () => window.clearTimeout(debounceTimerRef.current),\n [],\n );\n\n const setValue = React.useCallback(\n (...args: Parameters<T>) => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(\n () => handleCallback(...args),\n delay,\n );\n },\n [handleCallback, delay],\n );\n\n return setValue;\n}\n"],"names":["useDebouncedCallback","callback","delay","handleCallback","useCallbackRef","debounceTimerRef","React","args"],"mappings":";;AAIO,SAASA,EACdC,GACAC,GACA;AACA,QAAMC,IAAiBC,EAAeH,CAAQ,GACxCI,IAAmBC,EAAM,OAAO,CAAC;AACvC,SAAAA,EAAM;AAAA,IACJ,MAAM,MAAM,OAAO,aAAaD,EAAiB,OAAO;AAAA,IACxD,CAAA;AAAA,EAAC,GAGcC,EAAM;AAAA,IACrB,IAAIC,MAAwB;AAC1B,aAAO,aAAaF,EAAiB,OAAO,GAC5CA,EAAiB,UAAU,OAAO;AAAA,QAChC,MAAMF,EAAe,GAAGI,CAAI;AAAA,QAC5BL;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA,CAACC,GAAgBD,CAAK;AAAA,EAAA;AAI1B;"}
@@ -0,0 +1,12 @@
1
+ import { useState as s, useRef as a } from "react";
2
+ import { useDebouncedCallback as d } from "./use-debounced-callback.js";
3
+ function b(u, t) {
4
+ const e = u instanceof Function ? u() : u, [c, r] = s(
5
+ e
6
+ ), n = a(e), o = d(r, t);
7
+ return n.current !== e && (o(e), n.current = e), [c, o];
8
+ }
9
+ export {
10
+ b as useDebounceValue
11
+ };
12
+ //# sourceMappingURL=use-debounced-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-value.js","sources":["../../../src/hooks/use-debounced-value.ts"],"sourcesContent":["\"use client\";\nimport { useRef, useState } from \"react\";\nimport { useDebouncedCallback } from \"./use-debounced-callback\";\n\n/**\n * Custom hook that returns a debounced version of the provided value, along with a function to update it.\n * @param initialValue The value to be debounced\n * @param delay The delay in milliseconds before the value is updated (default is 500ms)\n * @param options Optional configurations for the debouncing behavior\n * @returns An array containing the debounced value and the function to update it\n */\nexport function useDebounceValue<T>(\n initialValue: T | (() => T),\n delay: number,\n): [T, (value: T) => void] {\n const unwrappedInitialValue =\n initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState<T>(\n unwrappedInitialValue,\n );\n const previousValueRef = useRef<T | undefined>(unwrappedInitialValue);\n const updateDebouncedValue = useDebouncedCallback(setDebouncedValue, delay);\n // Update the debounced value if the initial value changes\n if (previousValueRef.current !== unwrappedInitialValue) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\n"],"names":["useDebounceValue","initialValue","delay","unwrappedInitialValue","debouncedValue","setDebouncedValue","useState","previousValueRef","useRef","updateDebouncedValue","useDebouncedCallback"],"mappings":";;AAWO,SAASA,EACdC,GACAC,GACyB;AACzB,QAAMC,IACJF,aAAwB,WAAWA,EAAA,IAAiBA,GAChD,CAACG,GAAgBC,CAAiB,IAAIC;AAAA,IAC1CH;AAAA,EAAA,GAEII,IAAmBC,EAAsBL,CAAqB,GAC9DM,IAAuBC,EAAqBL,GAAmBH,CAAK;AAE1E,SAAIK,EAAiB,YAAYJ,MAC/BM,EAAqBN,CAAqB,GAC1CI,EAAiB,UAAUJ,IAEtB,CAACC,GAAgBK,CAAoB;AAC9C;"}
@@ -0,0 +1,21 @@
1
+ import { useRef as f, useEffect as i } from "react";
2
+ import { useIsomorphicLayoutEffect as E } from "./use-isomorphic-layout-effect.js";
3
+ function m(r, t, s, n) {
4
+ const u = f(t);
5
+ E(() => {
6
+ u.current = t;
7
+ }, [t]), i(() => {
8
+ const e = s?.current ?? window;
9
+ if (!(e && e.addEventListener)) return;
10
+ const c = (o) => {
11
+ u.current(o);
12
+ };
13
+ return e.addEventListener(r, c, n), () => {
14
+ e.removeEventListener(r, c, n);
15
+ };
16
+ }, [r, s, n]);
17
+ }
18
+ export {
19
+ m as useEventListener
20
+ };
21
+ //# sourceMappingURL=use-event-listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-event-listener.js","sources":["../../../src/hooks/use-event-listener.ts"],"sourcesContent":["\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport type { RefObject } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\n\n// MediaQueryList Event based useEventListener interface\nfunction useEventListener<K extends keyof MediaQueryListEventMap>(\n eventName: K,\n handler: (event: MediaQueryListEventMap[K]) => void,\n element: RefObject<MediaQueryList>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Window Event based useEventListener interface\nfunction useEventListener<K extends keyof WindowEventMap>(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Element Event based useEventListener interface\nfunction useEventListener<\n K extends keyof HTMLElementEventMap & keyof SVGElementEventMap,\n T extends Element = K extends keyof HTMLElementEventMap\n ? HTMLDivElement\n : SVGElement,\n>(\n eventName: K,\n handler:\n | ((event: HTMLElementEventMap[K]) => void)\n | ((event: SVGElementEventMap[K]) => void),\n element: RefObject<T>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\n// Document Event based useEventListener interface\nfunction useEventListener<K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void,\n element: RefObject<Document>,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n KW extends keyof WindowEventMap,\n KH extends keyof HTMLElementEventMap & keyof SVGElementEventMap,\n KM extends keyof MediaQueryListEventMap,\n T extends HTMLElement | SVGAElement | MediaQueryList = HTMLElement,\n>(\n eventName: KW | KH | KM,\n handler: (\n event:\n | WindowEventMap[KW]\n | HTMLElementEventMap[KH]\n | SVGElementEventMap[KH]\n | MediaQueryListEventMap[KM]\n | Event,\n ) => void,\n element?: RefObject<T>,\n options?: boolean | AddEventListenerOptions,\n) {\n // Create a ref that stores handler\n const savedHandler = useRef(handler);\n\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(() => {\n // Define the listening target\n const targetElement: T | Window = element?.current ?? window;\n if (!(targetElement && targetElement.addEventListener)) return;\n // Create event listener that calls handler function stored in ref\n const listener: typeof handler = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n // Remove event listener on cleanup\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n"],"names":["useEventListener","eventName","handler","element","options","savedHandler","useRef","useIsomorphicLayoutEffect","useEffect","targetElement","listener","event"],"mappings":";;AA4CA,SAASA,EAMPC,GACAC,GAQAC,GACAC,GACA;AAEA,QAAMC,IAAeC,EAAOJ,CAAO;AAEnC,EAAAK,EAA0B,MAAM;AAC9B,IAAAF,EAAa,UAAUH;AAAA,EACzB,GAAG,CAACA,CAAO,CAAC,GAEZM,EAAU,MAAM;AAEd,UAAMC,IAA4BN,GAAS,WAAW;AACtD,QAAI,EAAEM,KAAiBA,EAAc,kBAAmB;AAExD,UAAMC,IAA2B,CAACC,MAAU;AAC1C,MAAAN,EAAa,QAAQM,CAAK;AAAA,IAC5B;AACA,WAAAF,EAAc,iBAAiBR,GAAWS,GAAUN,CAAO,GAEpD,MAAM;AACX,MAAAK,EAAc,oBAAoBR,GAAWS,GAAUN,CAAO;AAAA,IAChE;AAAA,EACF,GAAG,CAACH,GAAWE,GAASC,CAAO,CAAC;AAClC;"}
@@ -0,0 +1,56 @@
1
+ import { useState as g, useRef as h, useEffect as I } from "react";
2
+ function A({
3
+ threshold: f = 0,
4
+ root: a = null,
5
+ rootMargin: l = "0%",
6
+ freezeOnceVisible: s = !1,
7
+ initialIsIntersecting: i = !1,
8
+ onChange: R
9
+ } = {}) {
10
+ const [r, b] = g(null), [t, v] = g(() => ({
11
+ isIntersecting: i,
12
+ entry: void 0
13
+ })), u = h(void 0);
14
+ u.current = R;
15
+ const c = t.entry?.isIntersecting && s;
16
+ I(() => {
17
+ if (!r || !("IntersectionObserver" in window) || c) return;
18
+ const n = new IntersectionObserver(
19
+ (m) => {
20
+ const p = Array.isArray(n.thresholds) ? n.thresholds : [n.thresholds];
21
+ m.forEach((o) => {
22
+ const d = o.isIntersecting && p.some(
23
+ (w) => o.intersectionRatio >= w
24
+ );
25
+ v({ isIntersecting: d, entry: o }), u.current && u.current(d, o);
26
+ });
27
+ },
28
+ { threshold: f, root: a, rootMargin: l }
29
+ );
30
+ return n.observe(r), () => {
31
+ n.disconnect();
32
+ };
33
+ }, [
34
+ r,
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ JSON.stringify(f),
37
+ a,
38
+ l,
39
+ c,
40
+ s
41
+ ]);
42
+ const y = h(null);
43
+ I(() => {
44
+ !r && t.entry?.target && !s && !c && y.current !== t.entry.target && (y.current = t.entry.target, v({ isIntersecting: i, entry: void 0 }));
45
+ }, [r, t.entry, s, c, i]);
46
+ const e = [
47
+ b,
48
+ !!t.isIntersecting,
49
+ t.entry
50
+ ];
51
+ return e.ref = e[0], e.isIntersecting = e[1], e.entry = e[2], e;
52
+ }
53
+ export {
54
+ A as useIntersectionObserver
55
+ };
56
+ //# sourceMappingURL=use-intersection-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-intersection-observer.js","sources":["../../../src/hooks/use-intersection-observer.ts"],"sourcesContent":["\"use client\";\nimport { useEffect, useRef, useState } from \"react\";\ntype State = {\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\ntype UseIntersectionObserverOptions = {\n root?: Element | Document | null;\n rootMargin?: string;\n threshold?: number | number[];\n freezeOnceVisible?: boolean;\n onChange?: (\n isIntersecting: boolean,\n entry: IntersectionObserverEntry,\n ) => void;\n initialIsIntersecting?: boolean;\n};\ntype IntersectionReturn = [\n (node?: Element | null) => void,\n boolean,\n IntersectionObserverEntry | undefined,\n] & {\n ref: (node?: Element | null) => void;\n isIntersecting: boolean;\n entry?: IntersectionObserverEntry;\n};\nexport function useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange,\n}: UseIntersectionObserverOptions = {}): IntersectionReturn {\n const [ref, setRef] = useState<Element | null>(null);\n const [state, setState] = useState<State>(() => ({\n isIntersecting: initialIsIntersecting,\n entry: undefined,\n }));\n const callbackRef =\n useRef<UseIntersectionObserverOptions[\"onChange\"]>(undefined);\n callbackRef.current = onChange;\n const frozen = state.entry?.isIntersecting && freezeOnceVisible;\n useEffect(() => {\n // Ensure we have a ref to observe\n if (!ref) return;\n // Ensure the browser supports the Intersection Observer API\n if (!(\"IntersectionObserver\" in window)) return;\n // Skip if frozen\n if (frozen) return;\n let unobserve: (() => void) | undefined;\n const observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]): void => {\n const thresholds = Array.isArray(observer.thresholds)\n ? observer.thresholds\n : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting =\n entry.isIntersecting &&\n thresholds.some(\n (threshold) => entry.intersectionRatio >= threshold,\n );\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = undefined;\n }\n });\n },\n { threshold, root, rootMargin },\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible,\n ]);\n // ensures that if the observed element changes, the intersection observer is reinitialized\n const prevRef = useRef<Element | null>(null);\n useEffect(() => {\n if (\n !ref &&\n state.entry?.target &&\n !freezeOnceVisible &&\n !frozen &&\n prevRef.current !== state.entry.target\n ) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: undefined });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry,\n ] as IntersectionReturn;\n // Support object destructuring, by adding the specific values.\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\n// Export types\nexport type { UseIntersectionObserverOptions, IntersectionReturn };\n"],"names":["useIntersectionObserver","threshold","root","rootMargin","freezeOnceVisible","initialIsIntersecting","onChange","ref","setRef","useState","state","setState","callbackRef","useRef","frozen","useEffect","observer","entries","thresholds","entry","isIntersecting","prevRef","result"],"mappings":";AA0BO,SAASA,EAAwB;AAAA,EACtC,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa;AAAA,EACb,mBAAAC,IAAoB;AAAA,EACpB,uBAAAC,IAAwB;AAAA,EACxB,UAAAC;AACF,IAAoC,IAAwB;AAC1D,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAyB,IAAI,GAC7C,CAACC,GAAOC,CAAQ,IAAIF,EAAgB,OAAO;AAAA,IAC/C,gBAAgBJ;AAAA,IAChB,OAAO;AAAA,EAAA,EACP,GACIO,IACJC,EAAmD,MAAS;AAC9D,EAAAD,EAAY,UAAUN;AACtB,QAAMQ,IAASJ,EAAM,OAAO,kBAAkBN;AAC9C,EAAAW,EAAU,MAAM;AAMd,QAJI,CAACR,KAED,EAAE,0BAA0B,WAE5BO,EAAQ;AAEZ,UAAME,IAAW,IAAI;AAAA,MACnB,CAACC,MAA+C;AAC9C,cAAMC,IAAa,MAAM,QAAQF,EAAS,UAAU,IAChDA,EAAS,aACT,CAACA,EAAS,UAAU;AACxB,QAAAC,EAAQ,QAAQ,CAACE,MAAU;AACzB,gBAAMC,IACJD,EAAM,kBACND,EAAW;AAAA,YACT,CAACjB,MAAckB,EAAM,qBAAqBlB;AAAAA,UAAA;AAE9C,UAAAU,EAAS,EAAE,gBAAAS,GAAgB,OAAAD,GAAO,GAC9BP,EAAY,WACdA,EAAY,QAAQQ,GAAgBD,CAAK;AAAA,QAM7C,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAAlB,GAAW,MAAAC,GAAM,YAAAC,EAAA;AAAA,IAAW;AAEhC,WAAAa,EAAS,QAAQT,CAAG,GACb,MAAM;AACX,MAAAS,EAAS,WAAA;AAAA,IACX;AAAA,EAEF,GAAG;AAAA,IACDT;AAAA;AAAA,IAEA,KAAK,UAAUN,CAAS;AAAA,IACxBC;AAAA,IACAC;AAAA,IACAW;AAAA,IACAV;AAAA,EAAA,CACD;AAED,QAAMiB,IAAUR,EAAuB,IAAI;AAC3C,EAAAE,EAAU,MAAM;AACd,IACE,CAACR,KACDG,EAAM,OAAO,UACb,CAACN,KACD,CAACU,KACDO,EAAQ,YAAYX,EAAM,MAAM,WAEhCW,EAAQ,UAAUX,EAAM,MAAM,QAC9BC,EAAS,EAAE,gBAAgBN,GAAuB,OAAO,QAAW;AAAA,EAExE,GAAG,CAACE,GAAKG,EAAM,OAAON,GAAmBU,GAAQT,CAAqB,CAAC;AACvE,QAAMiB,IAAS;AAAA,IACbd;AAAA,IACA,CAAC,CAACE,EAAM;AAAA,IACRA,EAAM;AAAA,EAAA;AAGR,SAAAY,EAAO,MAAMA,EAAO,CAAC,GACrBA,EAAO,iBAAiBA,EAAO,CAAC,GAChCA,EAAO,QAAQA,EAAO,CAAC,GAChBA;AACT;"}
@@ -0,0 +1,6 @@
1
+ import * as e from "react";
2
+ const o = typeof window < "u" ? e.useLayoutEffect : e.useEffect;
3
+ export {
4
+ o as useIsomorphicLayoutEffect
5
+ };
6
+ //# sourceMappingURL=use-isomorphic-layout-effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-isomorphic-layout-effect.js","sources":["../../../src/hooks/use-isomorphic-layout-effect.ts"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n"],"names":["useIsomorphicLayoutEffect","React"],"mappings":";AAGO,MAAMA,IACX,OAAO,SAAW,MAAcC,EAAM,kBAAkBA,EAAM;"}
@@ -0,0 +1,22 @@
1
+ import { useState as c } from "react";
2
+ import { useIsomorphicLayoutEffect as d } from "./use-isomorphic-layout-effect.js";
3
+ const m = typeof window > "u";
4
+ function u(n, {
5
+ defaultValue: r = !1,
6
+ initializeWithValue: s = !0
7
+ } = {}) {
8
+ const i = (e) => m ? r : window.matchMedia(e).matches, [o, a] = c(() => s ? i(n) : r);
9
+ function t() {
10
+ a(i(n));
11
+ }
12
+ return d(() => {
13
+ const e = window.matchMedia(n);
14
+ return t(), e.addListener ? e.addListener(t) : e.addEventListener("change", t), () => {
15
+ e.removeListener ? e.removeListener(t) : e.removeEventListener("change", t);
16
+ };
17
+ }, [n]), o;
18
+ }
19
+ export {
20
+ u as useMediaQuery
21
+ };
22
+ //# sourceMappingURL=use-media-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-media-query.js","sources":["../../../src/hooks/use-media-query.ts"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\n\ntype UseMediaQueryOptions = {\n defaultValue?: boolean;\n initializeWithValue?: boolean;\n};\n\nconst IS_SERVER = typeof window === \"undefined\";\n\nexport function useMediaQuery(\n query: string,\n {\n defaultValue = false,\n initializeWithValue = true,\n }: UseMediaQueryOptions = {},\n): boolean {\n const getMatches = (query: string): boolean => {\n if (IS_SERVER) {\n return defaultValue;\n }\n return window.matchMedia(query).matches;\n };\n\n const [matches, setMatches] = useState<boolean>(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n\n // Handles the change event of the media query.\n function handleChange() {\n setMatches(getMatches(query));\n }\n\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n // Triggered at the first client-side load and if query changes\n handleChange();\n // Use deprecated `addListener` and `removeListener` to support Safari < 14 (#135)\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n\n return matches;\n}\n\nexport type { UseMediaQueryOptions };\n"],"names":["IS_SERVER","useMediaQuery","query","defaultValue","initializeWithValue","getMatches","matches","setMatches","useState","handleChange","useIsomorphicLayoutEffect","matchMedia"],"mappings":";;AAUA,MAAMA,IAAY,OAAO,SAAW;AAE7B,SAASC,EACdC,GACA;AAAA,EACE,cAAAC,IAAe;AAAA,EACf,qBAAAC,IAAsB;AACxB,IAA0B,IACjB;AACT,QAAMC,IAAa,CAACH,MACdF,IACKG,IAEF,OAAO,WAAWD,CAAK,EAAE,SAG5B,CAACI,GAASC,CAAU,IAAIC,EAAkB,MAC1CJ,IACKC,EAAWH,CAAK,IAElBC,CACR;AAGD,WAASM,IAAe;AACtB,IAAAF,EAAWF,EAAWH,CAAK,CAAC;AAAA,EAC9B;AAEA,SAAAQ,EAA0B,MAAM;AAC9B,UAAMC,IAAa,OAAO,WAAWT,CAAK;AAE1C,WAAAO,EAAA,GAEIE,EAAW,cACbA,EAAW,YAAYF,CAAY,IAEnCE,EAAW,iBAAiB,UAAUF,CAAY,GAE7C,MAAM;AACX,MAAIE,EAAW,iBACbA,EAAW,eAAeF,CAAY,IAEtCE,EAAW,oBAAoB,UAAUF,CAAY;AAAA,IAEzD;AAAA,EACF,GAAG,CAACP,CAAK,CAAC,GAEHI;AACT;"}
@@ -0,0 +1,18 @@
1
+ import { useEventListener as u } from "./use-event-listener.js";
2
+ function d(t, i, s = "mousedown", o = {}) {
3
+ u(
4
+ s,
5
+ (e) => {
6
+ const n = e.target;
7
+ if (!n || !n.isConnected)
8
+ return;
9
+ (Array.isArray(t) ? t.filter((r) => !!r.current).every((r) => r.current && !r.current.contains(n)) : t?.current && !t?.current.contains(n)) && i(e);
10
+ },
11
+ void 0,
12
+ o
13
+ );
14
+ }
15
+ export {
16
+ d as useOnClickOutside
17
+ };
18
+ //# sourceMappingURL=use-on-click-outside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-on-click-outside.js","sources":["../../../src/hooks/use-on-click-outside.ts"],"sourcesContent":["\"use client\";\nimport type { RefObject } from \"react\";\nimport { useEventListener } from \"./use-event-listener\";\n\ntype EventType =\n | \"mousedown\"\n | \"mouseup\"\n | \"touchstart\"\n | \"touchend\"\n | \"focusin\"\n | \"focusout\";\n\nexport function useOnClickOutside<T extends HTMLElement = HTMLElement>(\n ref: RefObject<T | null> | RefObject<T | null>[],\n handler: (event: MouseEvent | TouchEvent | FocusEvent) => void,\n eventType: EventType = \"mousedown\",\n eventListenerOptions: AddEventListenerOptions = {},\n): void {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target as Node;\n // Do nothing if the target is not connected element with document\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref)\n ? ref\n .filter((r) => Boolean(r.current))\n .every((r) => r.current && !r.current.contains(target))\n : ref?.current && !ref?.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n undefined,\n eventListenerOptions,\n );\n}\n\n// Export types\nexport type { EventType };\n"],"names":["useOnClickOutside","ref","handler","eventType","eventListenerOptions","useEventListener","event","target"],"mappings":";AAYO,SAASA,EACdC,GACAC,GACAC,IAAuB,aACvBC,IAAgD,IAC1C;AACN,EAAAC;AAAA,IACEF;AAAA,IACA,CAACG,MAAU;AACT,YAAMC,IAASD,EAAM;AAErB,UAAI,CAACC,KAAU,CAACA,EAAO;AACrB;AAOF,OALkB,MAAM,QAAQN,CAAG,IAC/BA,EACG,OAAO,CAAC,MAAM,EAAQ,EAAE,OAAQ,EAChC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,QAAQ,SAASM,CAAM,CAAC,IACxDN,GAAK,WAAW,CAACA,GAAK,QAAQ,SAASM,CAAM,MAE/CL,EAAQI,CAAK;AAAA,IAEjB;AAAA,IACA;AAAA,IACAF;AAAA,EAAA;AAEJ;"}