@sth87/shadcn-design-system 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. package/AI_README.md +114 -51
  2. package/README.md +83 -27
  3. package/dist/AI_CONTEXT.md +51 -52
  4. package/dist/cjs/_virtual/_commonjsHelpers.cjs +0 -1
  5. package/dist/cjs/_virtual/index.cjs +0 -1
  6. package/dist/cjs/_virtual/index2.cjs +0 -1
  7. package/dist/cjs/components/Accordion/Accordion.cjs +0 -1
  8. package/dist/cjs/components/Accordion/index.cjs +1 -0
  9. package/dist/cjs/components/Avatar/Avatar.cjs +1 -2
  10. package/dist/cjs/components/Avatar/index.cjs +1 -0
  11. package/dist/cjs/components/Badge/Badge.cjs +0 -1
  12. package/dist/cjs/components/Badge/index.cjs +1 -0
  13. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +0 -1
  14. package/dist/cjs/components/Breadcrumb/index.cjs +1 -0
  15. package/dist/cjs/components/Button/Button.cjs +0 -1
  16. package/dist/cjs/components/Button/ButtonGroup.cjs +0 -1
  17. package/dist/cjs/components/Button/index.cjs +1 -0
  18. package/dist/cjs/components/Calendar/Calendar.cjs +1 -2
  19. package/dist/cjs/components/Calendar/index.cjs +1 -0
  20. package/dist/cjs/components/Carousel/Carousel.cjs +0 -1
  21. package/dist/cjs/components/Carousel/index.cjs +1 -0
  22. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -2
  23. package/dist/cjs/components/Checkbox/index.cjs +1 -0
  24. package/dist/cjs/components/Collapsible/Collapsible.cjs +0 -1
  25. package/dist/cjs/components/Collapsible/index.cjs +1 -0
  26. package/dist/cjs/components/Command/Command.cjs +0 -1
  27. package/dist/cjs/components/Command/index.cjs +0 -1
  28. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +0 -1
  29. package/dist/cjs/components/ContextMenu/index.cjs +0 -1
  30. package/dist/cjs/components/Cropper/Cropper.cjs +1 -2
  31. package/dist/cjs/components/Cropper/CropperTool.cjs +0 -1
  32. package/dist/cjs/components/Cropper/index.cjs +1 -0
  33. package/dist/cjs/components/Cropper/utils.cjs +0 -1
  34. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -2
  35. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -2
  36. package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -2
  37. package/dist/cjs/components/DatePicker/index.cjs +1 -0
  38. package/dist/cjs/components/Dialog/Dialog.cjs +0 -1
  39. package/dist/cjs/components/Dialog/index.cjs +1 -0
  40. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +0 -1
  41. package/dist/cjs/components/DropdownMenu/index.cjs +0 -1
  42. package/dist/cjs/components/FloatLabel.cjs +0 -1
  43. package/dist/cjs/components/Glass/Glass.cjs +1 -2
  44. package/dist/cjs/components/Glass/index.cjs +1 -0
  45. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -2
  46. package/dist/cjs/components/ImageViewer/index.cjs +1 -0
  47. package/dist/cjs/components/Input/Input.cjs +1 -2
  48. package/dist/cjs/components/Input/index.cjs +1 -0
  49. package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -2
  50. package/dist/cjs/components/InputOTP/index.cjs +1 -0
  51. package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -2
  52. package/dist/cjs/components/Interactive/index.cjs +1 -0
  53. package/dist/cjs/components/Label/index.cjs +1 -0
  54. package/dist/cjs/components/Marquee/Marquee.cjs +1 -2
  55. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +0 -1
  56. package/dist/cjs/components/Marquee/index.cjs +0 -1
  57. package/dist/cjs/components/Masonry/Masonry.cjs +1 -2
  58. package/dist/cjs/components/Masonry/MasonryWrapper.cjs +0 -1
  59. package/dist/cjs/components/Masonry/index.cjs +1 -0
  60. package/dist/cjs/components/Pagination/Pagination.cjs +0 -1
  61. package/dist/cjs/components/Pagination/index.cjs +0 -1
  62. package/dist/cjs/components/Popover/Popover.cjs +0 -1
  63. package/dist/cjs/components/Popover/index.cjs +1 -2
  64. package/dist/cjs/components/QrCode/QrCode.cjs +1 -2
  65. package/dist/cjs/components/QrCode/index.cjs +0 -1
  66. package/dist/cjs/components/Radio/Radio.cjs +1 -2
  67. package/dist/cjs/components/Radio/index.cjs +1 -0
  68. package/dist/cjs/components/Rate/Rate.cjs +0 -1
  69. package/dist/cjs/components/Rate/index.cjs +1 -0
  70. package/dist/cjs/components/Resizable/Resizable.cjs +0 -1
  71. package/dist/cjs/components/Resizable/index.cjs +1 -0
  72. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +0 -1
  73. package/dist/cjs/components/ScrollArea/index.cjs +1 -0
  74. package/dist/cjs/components/Select/Select.cjs +1 -2
  75. package/dist/cjs/components/Select/index.cjs +1 -0
  76. package/dist/cjs/components/Separator/Separator.cjs +0 -1
  77. package/dist/cjs/components/Separator/index.cjs +1 -0
  78. package/dist/cjs/components/Sheet/Sheet.cjs +0 -1
  79. package/dist/cjs/components/Sheet/index.cjs +1 -0
  80. package/dist/cjs/components/Sidebar/Sidebar.cjs +0 -1
  81. package/dist/cjs/components/Sidebar/index.cjs +1 -0
  82. package/dist/cjs/components/Skeleton/Skeleton.cjs +0 -1
  83. package/dist/cjs/components/Skeleton/index.cjs +1 -0
  84. package/dist/cjs/components/Slider/Slider.cjs +0 -1
  85. package/dist/cjs/components/Slider/index.cjs +1 -0
  86. package/dist/cjs/components/Stepper/Stepper.cjs +1 -2
  87. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -2
  88. package/dist/cjs/components/Stepper/index.cjs +0 -1
  89. package/dist/cjs/components/Switch/Switch.cjs +0 -1
  90. package/dist/cjs/components/Switch/index.cjs +1 -0
  91. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -2
  92. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -2
  93. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -2
  94. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -2
  95. package/dist/cjs/components/Table/data-table-pagination.cjs +1 -2
  96. package/dist/cjs/components/Table/data-table-toolbar.cjs +1 -2
  97. package/dist/cjs/components/Table/data-table-view-options.cjs +1 -2
  98. package/dist/cjs/components/Table/data-table.cjs +1 -2
  99. package/dist/cjs/components/Table/index.cjs +1 -0
  100. package/dist/cjs/components/Table/select-column.cjs +0 -1
  101. package/dist/cjs/components/Tabs/Tabs.cjs +1 -2
  102. package/dist/cjs/components/Tabs/classes.cjs +1 -2
  103. package/dist/cjs/components/Tabs/index.cjs +1 -0
  104. package/dist/cjs/components/Textarea/Textarea.cjs +1 -2
  105. package/dist/cjs/components/Textarea/index.cjs +1 -0
  106. package/dist/cjs/components/TimeGridView.cjs +1 -2
  107. package/dist/cjs/components/Toast/Toast.cjs +1 -2
  108. package/dist/cjs/components/Toast/index.cjs +1 -0
  109. package/dist/cjs/components/Toggle/Toggle.cjs +0 -1
  110. package/dist/cjs/components/Toggle/index.cjs +1 -0
  111. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -2
  112. package/dist/cjs/components/Tooltip/index.cjs +1 -0
  113. package/dist/cjs/components/Tour/Tour.cjs +1 -2
  114. package/dist/cjs/components/Tour/TourWrapper.cjs +0 -1
  115. package/dist/cjs/components/Tour/index.cjs +0 -1
  116. package/dist/cjs/components/TreeSelect/TreeSelect.cjs +0 -1
  117. package/dist/cjs/components/TreeSelect/index.cjs +1 -0
  118. package/dist/cjs/components/Upload/Upload.cjs +0 -1
  119. package/dist/cjs/components/Upload/index.cjs +1 -0
  120. package/dist/cjs/components/WheelColumn.cjs +1 -2
  121. package/dist/cjs/config/data-table.cjs +0 -1
  122. package/dist/cjs/constants/common.cjs +0 -1
  123. package/dist/cjs/hooks/index.cjs +1 -0
  124. package/dist/cjs/hooks/use-callback-ref.cjs +0 -1
  125. package/dist/cjs/hooks/use-data-table.cjs +1 -2
  126. package/dist/cjs/hooks/use-debounced-callback.cjs +1 -2
  127. package/dist/cjs/hooks/use-debounced-value.cjs +1 -2
  128. package/dist/cjs/hooks/use-event-listener.cjs +1 -2
  129. package/dist/cjs/hooks/use-intersection-observer.cjs +0 -1
  130. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +0 -1
  131. package/dist/cjs/hooks/use-media-query.cjs +1 -2
  132. package/dist/cjs/hooks/use-mouse-position.cjs +1 -0
  133. package/dist/cjs/hooks/use-on-click-outside.cjs +1 -2
  134. package/dist/cjs/hooks/use-script.cjs +0 -1
  135. package/dist/cjs/hooks/use-scroll-lock.cjs +1 -2
  136. package/dist/cjs/index.cjs +1 -2
  137. package/dist/cjs/lib/TextAnimation/BlurText.cjs +0 -1
  138. package/dist/cjs/lib/TextAnimation/CircularText.cjs +0 -1
  139. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -2
  140. package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -2
  141. package/dist/cjs/lib/TextAnimation/RollingText.cjs +0 -1
  142. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -2
  143. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -2
  144. package/dist/cjs/lib/TextAnimation/SplittingText.cjs +0 -1
  145. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -2
  146. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +0 -1
  147. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +0 -1
  148. package/dist/cjs/lib/TextAnimation/TypingText.cjs +0 -1
  149. package/dist/cjs/lib/TextAnimation/WritingText.cjs +0 -1
  150. package/dist/cjs/lib/TextAnimation/index.cjs +1 -0
  151. package/dist/cjs/lib/utils.cjs +1 -0
  152. package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs +0 -1
  153. package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs +0 -1
  154. package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs +0 -1
  155. package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs +0 -1
  156. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs +0 -1
  157. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +0 -1
  158. package/dist/cjs/packages/ui/src/components/accordion.cjs +0 -1
  159. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +0 -1
  160. package/dist/cjs/packages/ui/src/components/avatar.cjs +0 -1
  161. package/dist/cjs/packages/ui/src/components/badge.cjs +0 -1
  162. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +0 -1
  163. package/dist/cjs/packages/ui/src/components/button-group.cjs +0 -1
  164. package/dist/cjs/packages/ui/src/components/button.cjs +0 -1
  165. package/dist/cjs/packages/ui/src/components/calendar.cjs +0 -1
  166. package/dist/cjs/packages/ui/src/components/checkbox.cjs +0 -1
  167. package/dist/cjs/packages/ui/src/components/collapsible.cjs +0 -1
  168. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -2
  169. package/dist/cjs/packages/ui/src/components/command.cjs +0 -1
  170. package/dist/cjs/packages/ui/src/components/context-menu.cjs +0 -1
  171. package/dist/cjs/packages/ui/src/components/dialog.cjs +0 -1
  172. package/dist/cjs/packages/ui/src/components/drawer.cjs +0 -1
  173. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +0 -1
  174. package/dist/cjs/packages/ui/src/components/input-otp.cjs +0 -1
  175. package/dist/cjs/packages/ui/src/components/input.cjs +0 -1
  176. package/dist/cjs/packages/ui/src/components/label.cjs +0 -1
  177. package/dist/cjs/packages/ui/src/components/pagination.cjs +0 -1
  178. package/dist/cjs/packages/ui/src/components/popover.cjs +0 -1
  179. package/dist/cjs/packages/ui/src/components/radio-group.cjs +0 -1
  180. package/dist/cjs/packages/ui/src/components/resizable.cjs +0 -1
  181. package/dist/cjs/packages/ui/src/components/scroll-area.cjs +0 -1
  182. package/dist/cjs/packages/ui/src/components/select.cjs +1 -2
  183. package/dist/cjs/packages/ui/src/components/separator.cjs +0 -1
  184. package/dist/cjs/packages/ui/src/components/sheet.cjs +0 -1
  185. package/dist/cjs/packages/ui/src/components/sidebar.cjs +0 -1
  186. package/dist/cjs/packages/ui/src/components/skeleton.cjs +0 -1
  187. package/dist/cjs/packages/ui/src/components/switch.cjs +0 -1
  188. package/dist/cjs/packages/ui/src/components/table.cjs +0 -1
  189. package/dist/cjs/packages/ui/src/components/tabs.cjs +0 -1
  190. package/dist/cjs/packages/ui/src/components/textarea.cjs +0 -1
  191. package/dist/cjs/packages/ui/src/components/toggle.cjs +0 -1
  192. package/dist/cjs/packages/ui/src/components/tooltip.cjs +0 -1
  193. package/dist/cjs/packages/ui/src/components/tree-view.cjs +0 -1
  194. package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs +0 -1
  195. package/dist/cjs/packages/ui/src/lib/compose-refs.cjs +0 -1
  196. package/dist/cjs/packages/ui/src/lib/utils.cjs +0 -1
  197. package/dist/cjs/utils/animations.cjs +1 -2
  198. package/dist/cjs/utils/css.cjs +0 -1
  199. package/dist/cjs/utils/data-table.cjs +0 -1
  200. package/dist/cjs/utils/datetime.cjs +0 -1
  201. package/dist/cjs/utils/parsers.cjs +0 -1
  202. package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
  203. package/dist/esm/_virtual/index.js +0 -1
  204. package/dist/esm/_virtual/index2.js +0 -1
  205. package/dist/esm/components/Accordion/Accordion.js +0 -1
  206. package/dist/esm/components/Accordion/index.js +9 -0
  207. package/dist/esm/components/Avatar/Avatar.js +32 -63
  208. package/dist/esm/components/Avatar/index.js +4 -0
  209. package/dist/esm/components/Badge/Badge.js +0 -1
  210. package/dist/esm/components/Badge/index.js +5 -0
  211. package/dist/esm/components/Breadcrumb/Breadcrumb.js +0 -1
  212. package/dist/esm/components/Breadcrumb/index.js +5 -0
  213. package/dist/esm/components/Button/Button.js +0 -1
  214. package/dist/esm/components/Button/ButtonGroup.js +0 -1
  215. package/dist/esm/components/Button/index.js +10 -0
  216. package/dist/esm/components/Calendar/Calendar.js +25 -57
  217. package/dist/esm/components/Calendar/index.js +5 -0
  218. package/dist/esm/components/Carousel/Carousel.js +0 -1
  219. package/dist/esm/components/Carousel/index.js +6 -0
  220. package/dist/esm/components/Checkbox/Checkbox.js +29 -58
  221. package/dist/esm/components/Checkbox/index.js +5 -0
  222. package/dist/esm/components/Collapsible/Collapsible.js +0 -1
  223. package/dist/esm/components/Collapsible/index.js +5 -0
  224. package/dist/esm/components/Command/Command.js +0 -1
  225. package/dist/esm/components/Command/index.js +0 -1
  226. package/dist/esm/components/ContextMenu/ContextMenu.js +0 -1
  227. package/dist/esm/components/ContextMenu/index.js +0 -1
  228. package/dist/esm/components/Cropper/Cropper.js +261 -292
  229. package/dist/esm/components/Cropper/CropperTool.js +0 -1
  230. package/dist/esm/components/Cropper/index.js +17 -0
  231. package/dist/esm/components/Cropper/utils.js +0 -1
  232. package/dist/esm/components/DatePicker/DatePicker.js +94 -122
  233. package/dist/esm/components/DatePicker/RangePicker.js +202 -230
  234. package/dist/esm/components/DatePicker/TimePicker.js +63 -92
  235. package/dist/esm/components/DatePicker/index.js +8 -0
  236. package/dist/esm/components/Dialog/Dialog.js +0 -1
  237. package/dist/esm/components/Dialog/index.js +5 -0
  238. package/dist/esm/components/DropdownMenu/DropdownMenu.js +0 -1
  239. package/dist/esm/components/DropdownMenu/index.js +0 -1
  240. package/dist/esm/components/FloatLabel.js +0 -1
  241. package/dist/esm/components/Glass/Glass.js +7 -39
  242. package/dist/esm/components/Glass/index.js +5 -0
  243. package/dist/esm/components/ImageViewer/ImageViewer.js +95 -126
  244. package/dist/esm/components/ImageViewer/index.js +7 -0
  245. package/dist/esm/components/Input/Input.js +0 -1
  246. package/dist/esm/components/Input/index.js +5 -0
  247. package/dist/esm/components/InputOTP/InputOTP.js +28 -58
  248. package/dist/esm/components/InputOTP/index.js +5 -0
  249. package/dist/esm/components/Interactive/CursorFollow.js +90 -122
  250. package/dist/esm/components/Interactive/index.js +9 -0
  251. package/dist/esm/components/Label/index.js +4 -0
  252. package/dist/esm/components/Marquee/Marquee.js +78 -109
  253. package/dist/esm/components/Marquee/MarqueeWrapper.js +0 -1
  254. package/dist/esm/components/Marquee/index.js +0 -1
  255. package/dist/esm/components/Masonry/Masonry.js +67 -100
  256. package/dist/esm/components/Masonry/MasonryWrapper.js +0 -1
  257. package/dist/esm/components/Masonry/index.js +10 -0
  258. package/dist/esm/components/Pagination/Pagination.js +0 -1
  259. package/dist/esm/components/Pagination/index.js +0 -1
  260. package/dist/esm/components/Popover/Popover.js +0 -1
  261. package/dist/esm/components/Popover/index.js +3 -3
  262. package/dist/esm/components/QrCode/QrCode.js +126 -157
  263. package/dist/esm/components/QrCode/index.js +0 -1
  264. package/dist/esm/components/Radio/Radio.js +36 -67
  265. package/dist/esm/components/Radio/index.js +5 -0
  266. package/dist/esm/components/Rate/Rate.js +0 -1
  267. package/dist/esm/components/Rate/index.js +5 -0
  268. package/dist/esm/components/Resizable/Resizable.js +0 -1
  269. package/dist/esm/components/Resizable/index.js +13 -0
  270. package/dist/esm/components/ScrollArea/ScrollArea.js +0 -1
  271. package/dist/esm/components/ScrollArea/index.js +5 -0
  272. package/dist/esm/components/Select/Select.js +0 -1
  273. package/dist/esm/components/Select/index.js +5 -0
  274. package/dist/esm/components/Separator/Separator.js +0 -1
  275. package/dist/esm/components/Separator/index.js +5 -0
  276. package/dist/esm/components/Sheet/Sheet.js +0 -1
  277. package/dist/esm/components/Sheet/index.js +5 -0
  278. package/dist/esm/components/Sidebar/Sidebar.js +0 -1
  279. package/dist/esm/components/Sidebar/index.js +29 -0
  280. package/dist/esm/components/Skeleton/Skeleton.js +0 -1
  281. package/dist/esm/components/Skeleton/index.js +5 -0
  282. package/dist/esm/components/Slider/Slider.js +0 -1
  283. package/dist/esm/components/Slider/index.js +5 -0
  284. package/dist/esm/components/Stepper/Stepper.js +72 -102
  285. package/dist/esm/components/Stepper/StepperWrapper.js +42 -74
  286. package/dist/esm/components/Stepper/index.js +0 -1
  287. package/dist/esm/components/Switch/Switch.js +0 -1
  288. package/dist/esm/components/Switch/index.js +5 -0
  289. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +2 -3
  290. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +12 -13
  291. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +66 -97
  292. package/dist/esm/components/Table/data-table-column-header.js +41 -73
  293. package/dist/esm/components/Table/data-table-pagination.js +30 -63
  294. package/dist/esm/components/Table/data-table-toolbar.js +43 -74
  295. package/dist/esm/components/Table/data-table-view-options.js +85 -116
  296. package/dist/esm/components/Table/data-table.js +52 -85
  297. package/dist/esm/components/Table/index.js +20 -0
  298. package/dist/esm/components/Table/select-column.js +0 -1
  299. package/dist/esm/components/Tabs/Tabs.js +0 -1
  300. package/dist/esm/components/Tabs/classes.js +23 -57
  301. package/dist/esm/components/Tabs/index.js +5 -0
  302. package/dist/esm/components/Textarea/Textarea.js +0 -1
  303. package/dist/esm/components/Textarea/index.js +5 -0
  304. package/dist/esm/components/TimeGridView.js +33 -65
  305. package/dist/esm/components/Toast/Toast.js +39 -71
  306. package/dist/esm/components/Toast/index.js +6 -0
  307. package/dist/esm/components/Toggle/Toggle.js +0 -1
  308. package/dist/esm/components/Toggle/index.js +5 -0
  309. package/dist/esm/components/Tooltip/Tooltip.js +34 -65
  310. package/dist/esm/components/Tooltip/index.js +4 -0
  311. package/dist/esm/components/Tour/Tour.js +331 -361
  312. package/dist/esm/components/Tour/TourWrapper.js +0 -1
  313. package/dist/esm/components/Tour/index.js +0 -1
  314. package/dist/esm/components/TreeSelect/TreeSelect.js +0 -1
  315. package/dist/esm/components/TreeSelect/index.js +5 -0
  316. package/dist/esm/components/Upload/Upload.js +0 -1
  317. package/dist/esm/components/Upload/index.js +4 -0
  318. package/dist/esm/components/WheelColumn.js +37 -69
  319. package/dist/esm/config/data-table.js +0 -1
  320. package/dist/esm/constants/common.js +0 -1
  321. package/dist/esm/hooks/index.js +26 -0
  322. package/dist/esm/hooks/use-callback-ref.js +0 -1
  323. package/dist/esm/hooks/use-data-table.js +0 -1
  324. package/dist/esm/hooks/use-debounced-callback.js +0 -1
  325. package/dist/esm/hooks/use-debounced-value.js +0 -1
  326. package/dist/esm/hooks/use-event-listener.js +0 -1
  327. package/dist/esm/hooks/use-intersection-observer.js +0 -1
  328. package/dist/esm/hooks/use-isomorphic-layout-effect.js +0 -1
  329. package/dist/esm/hooks/use-media-query.js +0 -1
  330. package/dist/esm/hooks/use-mouse-position.js +27 -0
  331. package/dist/esm/hooks/use-on-click-outside.js +0 -1
  332. package/dist/esm/hooks/use-script.js +0 -1
  333. package/dist/esm/hooks/use-scroll-lock.js +0 -1
  334. package/dist/esm/index.js +241 -268
  335. package/dist/esm/lib/TextAnimation/BlurText.js +0 -1
  336. package/dist/esm/lib/TextAnimation/CircularText.js +0 -1
  337. package/dist/esm/lib/TextAnimation/FlipWords.js +28 -60
  338. package/dist/esm/lib/TextAnimation/GradientText.js +26 -58
  339. package/dist/esm/lib/TextAnimation/RollingText.js +0 -1
  340. package/dist/esm/lib/TextAnimation/RotatingText.js +27 -59
  341. package/dist/esm/lib/TextAnimation/ShimmeringText.js +26 -58
  342. package/dist/esm/lib/TextAnimation/SplittingText.js +0 -1
  343. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +29 -61
  344. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +0 -1
  345. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +0 -1
  346. package/dist/esm/lib/TextAnimation/TypingText.js +0 -1
  347. package/dist/esm/lib/TextAnimation/WritingText.js +0 -1
  348. package/dist/esm/lib/TextAnimation/index.js +28 -0
  349. package/dist/esm/lib/utils.js +12 -0
  350. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -1
  351. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js +0 -1
  352. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -1
  353. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -1
  354. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js +0 -1
  355. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +0 -1
  356. package/dist/esm/packages/ui/src/components/accordion.js +0 -1
  357. package/dist/esm/packages/ui/src/components/alert-dialog.js +0 -1
  358. package/dist/esm/packages/ui/src/components/avatar.js +0 -1
  359. package/dist/esm/packages/ui/src/components/badge.js +0 -1
  360. package/dist/esm/packages/ui/src/components/breadcrumb.js +0 -1
  361. package/dist/esm/packages/ui/src/components/button-group.js +0 -1
  362. package/dist/esm/packages/ui/src/components/button.js +0 -1
  363. package/dist/esm/packages/ui/src/components/calendar.js +0 -1
  364. package/dist/esm/packages/ui/src/components/checkbox.js +0 -1
  365. package/dist/esm/packages/ui/src/components/collapsible.js +0 -1
  366. package/dist/esm/packages/ui/src/components/combobox.js +96 -81
  367. package/dist/esm/packages/ui/src/components/command.js +0 -1
  368. package/dist/esm/packages/ui/src/components/context-menu.js +0 -1
  369. package/dist/esm/packages/ui/src/components/dialog.js +0 -1
  370. package/dist/esm/packages/ui/src/components/drawer.js +0 -1
  371. package/dist/esm/packages/ui/src/components/dropdown-menu.js +0 -1
  372. package/dist/esm/packages/ui/src/components/input-otp.js +0 -1
  373. package/dist/esm/packages/ui/src/components/input.js +0 -1
  374. package/dist/esm/packages/ui/src/components/label.js +0 -1
  375. package/dist/esm/packages/ui/src/components/pagination.js +0 -1
  376. package/dist/esm/packages/ui/src/components/popover.js +0 -1
  377. package/dist/esm/packages/ui/src/components/radio-group.js +0 -1
  378. package/dist/esm/packages/ui/src/components/resizable.js +0 -1
  379. package/dist/esm/packages/ui/src/components/scroll-area.js +0 -1
  380. package/dist/esm/packages/ui/src/components/select.js +89 -83
  381. package/dist/esm/packages/ui/src/components/separator.js +0 -1
  382. package/dist/esm/packages/ui/src/components/sheet.js +0 -1
  383. package/dist/esm/packages/ui/src/components/sidebar.js +0 -1
  384. package/dist/esm/packages/ui/src/components/skeleton.js +0 -1
  385. package/dist/esm/packages/ui/src/components/switch.js +0 -1
  386. package/dist/esm/packages/ui/src/components/table.js +0 -1
  387. package/dist/esm/packages/ui/src/components/tabs.js +0 -1
  388. package/dist/esm/packages/ui/src/components/textarea.js +0 -1
  389. package/dist/esm/packages/ui/src/components/toggle.js +0 -1
  390. package/dist/esm/packages/ui/src/components/tooltip.js +0 -1
  391. package/dist/esm/packages/ui/src/components/tree-view.js +1 -2
  392. package/dist/esm/packages/ui/src/hooks/use-mobile.js +0 -1
  393. package/dist/esm/packages/ui/src/lib/compose-refs.js +0 -1
  394. package/dist/esm/packages/ui/src/lib/utils.js +0 -1
  395. package/dist/esm/utils/animations.js +40 -73
  396. package/dist/esm/utils/css.js +0 -1
  397. package/dist/esm/utils/data-table.js +0 -1
  398. package/dist/esm/utils/datetime.js +0 -1
  399. package/dist/esm/utils/parsers.js +0 -1
  400. package/dist/types/components/Accordion/index.d.ts +1 -1
  401. package/dist/types/components/Accordion/index.d.ts.map +1 -1
  402. package/dist/types/components/Badge/index.d.ts +1 -1
  403. package/dist/types/components/Badge/index.d.ts.map +1 -1
  404. package/dist/types/components/Breadcrumb/index.d.ts +1 -1
  405. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  406. package/dist/types/components/Button/index.d.ts +1 -1
  407. package/dist/types/components/Button/index.d.ts.map +1 -1
  408. package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
  409. package/dist/types/components/Checkbox/index.d.ts +1 -1
  410. package/dist/types/components/Checkbox/index.d.ts.map +1 -1
  411. package/dist/types/components/Collapsible/index.d.ts +1 -1
  412. package/dist/types/components/Collapsible/index.d.ts.map +1 -1
  413. package/dist/types/components/Cropper/Cropper.d.ts.map +1 -1
  414. package/dist/types/components/Dialog/index.d.ts +1 -1
  415. package/dist/types/components/Dialog/index.d.ts.map +1 -1
  416. package/dist/types/components/Glass/index.d.ts +1 -1
  417. package/dist/types/components/Glass/index.d.ts.map +1 -1
  418. package/dist/types/components/Input/index.d.ts +1 -1
  419. package/dist/types/components/Input/index.d.ts.map +1 -1
  420. package/dist/types/components/InputOTP/index.d.ts +1 -1
  421. package/dist/types/components/InputOTP/index.d.ts.map +1 -1
  422. package/dist/types/components/Label/Label.d.ts +1 -1
  423. package/dist/types/components/Label/Label.d.ts.map +1 -1
  424. package/dist/types/components/Marquee/Marquee.d.ts +1 -1
  425. package/dist/types/components/Marquee/Marquee.d.ts.map +1 -1
  426. package/dist/types/components/Masonry/Masonry.d.ts.map +1 -1
  427. package/dist/types/components/Popover/index.d.ts +1 -0
  428. package/dist/types/components/Popover/index.d.ts.map +1 -1
  429. package/dist/types/components/QrCode/QrCode.d.ts.map +1 -1
  430. package/dist/types/components/Radio/index.d.ts +1 -1
  431. package/dist/types/components/Radio/index.d.ts.map +1 -1
  432. package/dist/types/components/ScrollArea/index.d.ts +1 -1
  433. package/dist/types/components/ScrollArea/index.d.ts.map +1 -1
  434. package/dist/types/components/Select/index.d.ts +1 -1
  435. package/dist/types/components/Select/index.d.ts.map +1 -1
  436. package/dist/types/components/Sheet/index.d.ts +1 -1
  437. package/dist/types/components/Sheet/index.d.ts.map +1 -1
  438. package/dist/types/components/Skeleton/index.d.ts +1 -1
  439. package/dist/types/components/Skeleton/index.d.ts.map +1 -1
  440. package/dist/types/components/Slider/Slider.d.ts +1 -1
  441. package/dist/types/components/Slider/index.d.ts +1 -1
  442. package/dist/types/components/Slider/index.d.ts.map +1 -1
  443. package/dist/types/components/Stepper/Stepper.d.ts.map +1 -1
  444. package/dist/types/components/Switch/Switch.d.ts +1 -1
  445. package/dist/types/components/Switch/index.d.ts +1 -1
  446. package/dist/types/components/Switch/index.d.ts.map +1 -1
  447. package/dist/types/components/Tabs/index.d.ts +1 -1
  448. package/dist/types/components/Tabs/index.d.ts.map +1 -1
  449. package/dist/types/components/Textarea/index.d.ts +1 -1
  450. package/dist/types/components/Textarea/index.d.ts.map +1 -1
  451. package/dist/types/components/Toggle/Toggle.d.ts +1 -1
  452. package/dist/types/components/Toggle/index.d.ts +1 -1
  453. package/dist/types/components/Toggle/index.d.ts.map +1 -1
  454. package/dist/types/components/Tour/Tour.d.ts.map +1 -1
  455. package/dist/types/hooks/index.d.ts +3 -0
  456. package/dist/types/hooks/index.d.ts.map +1 -1
  457. package/dist/types/index.d.ts +23 -6
  458. package/dist/types/index.d.ts.map +1 -1
  459. package/dist/types/lib/utils.d.ts +1 -1
  460. package/dist/types/lib/utils.d.ts.map +1 -1
  461. package/dist/types/packages/ui/src/components/badge.d.ts +3 -3
  462. package/dist/types/packages/ui/src/components/button.d.ts +2 -2
  463. package/dist/types/packages/ui/src/components/checkbox.d.ts +1 -1
  464. package/dist/types/packages/ui/src/components/combobox.d.ts +2 -2
  465. package/dist/types/packages/ui/src/components/combobox.d.ts.map +1 -1
  466. package/dist/types/packages/ui/src/components/input-otp.d.ts +1 -1
  467. package/dist/types/packages/ui/src/components/input.d.ts +1 -1
  468. package/dist/types/packages/ui/src/components/radio-group.d.ts +1 -1
  469. package/dist/types/packages/ui/src/components/select.d.ts +2 -2
  470. package/dist/types/packages/ui/src/components/select.d.ts.map +1 -1
  471. package/dist/types/packages/ui/src/components/switch.d.ts +1 -1
  472. package/dist/types/packages/ui/src/components/textarea.d.ts +1 -1
  473. package/dist/types/packages/ui/src/components/toggle.d.ts +1 -1
  474. package/dist/types/utils/parsers.d.ts +1 -1
  475. package/package.json +258 -258
  476. package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +0 -1
  477. package/dist/cjs/_virtual/index.cjs.map +0 -1
  478. package/dist/cjs/_virtual/index2.cjs.map +0 -1
  479. package/dist/cjs/components/Accordion/Accordion.cjs.map +0 -1
  480. package/dist/cjs/components/Avatar/Avatar.cjs.map +0 -1
  481. package/dist/cjs/components/Badge/Badge.cjs.map +0 -1
  482. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +0 -1
  483. package/dist/cjs/components/Button/Button.cjs.map +0 -1
  484. package/dist/cjs/components/Button/ButtonGroup.cjs.map +0 -1
  485. package/dist/cjs/components/Calendar/Calendar.cjs.map +0 -1
  486. package/dist/cjs/components/Carousel/Carousel.cjs.map +0 -1
  487. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +0 -1
  488. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +0 -1
  489. package/dist/cjs/components/Command/Command.cjs.map +0 -1
  490. package/dist/cjs/components/Command/index.cjs.map +0 -1
  491. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +0 -1
  492. package/dist/cjs/components/ContextMenu/index.cjs.map +0 -1
  493. package/dist/cjs/components/Cropper/Cropper.cjs.map +0 -1
  494. package/dist/cjs/components/Cropper/CropperTool.cjs.map +0 -1
  495. package/dist/cjs/components/Cropper/utils.cjs.map +0 -1
  496. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +0 -1
  497. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +0 -1
  498. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +0 -1
  499. package/dist/cjs/components/Dialog/Dialog.cjs.map +0 -1
  500. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +0 -1
  501. package/dist/cjs/components/DropdownMenu/index.cjs.map +0 -1
  502. package/dist/cjs/components/FloatLabel.cjs.map +0 -1
  503. package/dist/cjs/components/Glass/Glass.cjs.map +0 -1
  504. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +0 -1
  505. package/dist/cjs/components/Input/Input.cjs.map +0 -1
  506. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +0 -1
  507. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +0 -1
  508. package/dist/cjs/components/Marquee/Marquee.cjs.map +0 -1
  509. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +0 -1
  510. package/dist/cjs/components/Marquee/index.cjs.map +0 -1
  511. package/dist/cjs/components/Masonry/Masonry.cjs.map +0 -1
  512. package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +0 -1
  513. package/dist/cjs/components/Pagination/Pagination.cjs.map +0 -1
  514. package/dist/cjs/components/Pagination/index.cjs.map +0 -1
  515. package/dist/cjs/components/Popover/Popover.cjs.map +0 -1
  516. package/dist/cjs/components/Popover/index.cjs.map +0 -1
  517. package/dist/cjs/components/QrCode/QrCode.cjs.map +0 -1
  518. package/dist/cjs/components/QrCode/index.cjs.map +0 -1
  519. package/dist/cjs/components/Radio/Radio.cjs.map +0 -1
  520. package/dist/cjs/components/Rate/Rate.cjs.map +0 -1
  521. package/dist/cjs/components/Resizable/Resizable.cjs.map +0 -1
  522. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +0 -1
  523. package/dist/cjs/components/Select/Select.cjs.map +0 -1
  524. package/dist/cjs/components/Separator/Separator.cjs.map +0 -1
  525. package/dist/cjs/components/Sheet/Sheet.cjs.map +0 -1
  526. package/dist/cjs/components/Sidebar/Sidebar.cjs.map +0 -1
  527. package/dist/cjs/components/Skeleton/Skeleton.cjs.map +0 -1
  528. package/dist/cjs/components/Slider/Slider.cjs.map +0 -1
  529. package/dist/cjs/components/Stepper/Stepper.cjs.map +0 -1
  530. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +0 -1
  531. package/dist/cjs/components/Stepper/index.cjs.map +0 -1
  532. package/dist/cjs/components/Switch/Switch.cjs.map +0 -1
  533. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +0 -1
  534. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +0 -1
  535. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +0 -1
  536. package/dist/cjs/components/Table/data-table-column-header.cjs.map +0 -1
  537. package/dist/cjs/components/Table/data-table-pagination.cjs.map +0 -1
  538. package/dist/cjs/components/Table/data-table-toolbar.cjs.map +0 -1
  539. package/dist/cjs/components/Table/data-table-view-options.cjs.map +0 -1
  540. package/dist/cjs/components/Table/data-table.cjs.map +0 -1
  541. package/dist/cjs/components/Table/select-column.cjs.map +0 -1
  542. package/dist/cjs/components/Tabs/Tabs.cjs.map +0 -1
  543. package/dist/cjs/components/Tabs/classes.cjs.map +0 -1
  544. package/dist/cjs/components/Textarea/Textarea.cjs.map +0 -1
  545. package/dist/cjs/components/TimeGridView.cjs.map +0 -1
  546. package/dist/cjs/components/Toast/Toast.cjs.map +0 -1
  547. package/dist/cjs/components/Toggle/Toggle.cjs.map +0 -1
  548. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +0 -1
  549. package/dist/cjs/components/Tour/Tour.cjs.map +0 -1
  550. package/dist/cjs/components/Tour/TourWrapper.cjs.map +0 -1
  551. package/dist/cjs/components/Tour/index.cjs.map +0 -1
  552. package/dist/cjs/components/TreeSelect/TreeSelect.cjs.map +0 -1
  553. package/dist/cjs/components/Upload/Upload.cjs.map +0 -1
  554. package/dist/cjs/components/WheelColumn.cjs.map +0 -1
  555. package/dist/cjs/config/data-table.cjs.map +0 -1
  556. package/dist/cjs/constants/common.cjs.map +0 -1
  557. package/dist/cjs/hooks/use-callback-ref.cjs.map +0 -1
  558. package/dist/cjs/hooks/use-data-table.cjs.map +0 -1
  559. package/dist/cjs/hooks/use-debounced-callback.cjs.map +0 -1
  560. package/dist/cjs/hooks/use-debounced-value.cjs.map +0 -1
  561. package/dist/cjs/hooks/use-event-listener.cjs.map +0 -1
  562. package/dist/cjs/hooks/use-intersection-observer.cjs.map +0 -1
  563. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +0 -1
  564. package/dist/cjs/hooks/use-media-query.cjs.map +0 -1
  565. package/dist/cjs/hooks/use-on-click-outside.cjs.map +0 -1
  566. package/dist/cjs/hooks/use-script.cjs.map +0 -1
  567. package/dist/cjs/hooks/use-scroll-lock.cjs.map +0 -1
  568. package/dist/cjs/index.cjs.map +0 -1
  569. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +0 -1
  570. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +0 -1
  571. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +0 -1
  572. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +0 -1
  573. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +0 -1
  574. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +0 -1
  575. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +0 -1
  576. package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +0 -1
  577. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +0 -1
  578. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +0 -1
  579. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +0 -1
  580. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +0 -1
  581. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +0 -1
  582. package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs.map +0 -1
  583. package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs.map +0 -1
  584. package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs.map +0 -1
  585. package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs.map +0 -1
  586. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
  587. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +0 -1
  588. package/dist/cjs/packages/ui/src/components/accordion.cjs.map +0 -1
  589. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +0 -1
  590. package/dist/cjs/packages/ui/src/components/avatar.cjs.map +0 -1
  591. package/dist/cjs/packages/ui/src/components/badge.cjs.map +0 -1
  592. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +0 -1
  593. package/dist/cjs/packages/ui/src/components/button-group.cjs.map +0 -1
  594. package/dist/cjs/packages/ui/src/components/button.cjs.map +0 -1
  595. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +0 -1
  596. package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +0 -1
  597. package/dist/cjs/packages/ui/src/components/collapsible.cjs.map +0 -1
  598. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +0 -1
  599. package/dist/cjs/packages/ui/src/components/command.cjs.map +0 -1
  600. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +0 -1
  601. package/dist/cjs/packages/ui/src/components/dialog.cjs.map +0 -1
  602. package/dist/cjs/packages/ui/src/components/drawer.cjs.map +0 -1
  603. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +0 -1
  604. package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +0 -1
  605. package/dist/cjs/packages/ui/src/components/input.cjs.map +0 -1
  606. package/dist/cjs/packages/ui/src/components/label.cjs.map +0 -1
  607. package/dist/cjs/packages/ui/src/components/pagination.cjs.map +0 -1
  608. package/dist/cjs/packages/ui/src/components/popover.cjs.map +0 -1
  609. package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +0 -1
  610. package/dist/cjs/packages/ui/src/components/resizable.cjs.map +0 -1
  611. package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +0 -1
  612. package/dist/cjs/packages/ui/src/components/select.cjs.map +0 -1
  613. package/dist/cjs/packages/ui/src/components/separator.cjs.map +0 -1
  614. package/dist/cjs/packages/ui/src/components/sheet.cjs.map +0 -1
  615. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +0 -1
  616. package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +0 -1
  617. package/dist/cjs/packages/ui/src/components/switch.cjs.map +0 -1
  618. package/dist/cjs/packages/ui/src/components/table.cjs.map +0 -1
  619. package/dist/cjs/packages/ui/src/components/tabs.cjs.map +0 -1
  620. package/dist/cjs/packages/ui/src/components/textarea.cjs.map +0 -1
  621. package/dist/cjs/packages/ui/src/components/toggle.cjs.map +0 -1
  622. package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +0 -1
  623. package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +0 -1
  624. package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs.map +0 -1
  625. package/dist/cjs/packages/ui/src/lib/compose-refs.cjs.map +0 -1
  626. package/dist/cjs/packages/ui/src/lib/utils.cjs.map +0 -1
  627. package/dist/cjs/utils/animations.cjs.map +0 -1
  628. package/dist/cjs/utils/css.cjs.map +0 -1
  629. package/dist/cjs/utils/data-table.cjs.map +0 -1
  630. package/dist/cjs/utils/datetime.cjs.map +0 -1
  631. package/dist/cjs/utils/parsers.cjs.map +0 -1
  632. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  633. package/dist/esm/_virtual/index.js.map +0 -1
  634. package/dist/esm/_virtual/index2.js.map +0 -1
  635. package/dist/esm/components/Accordion/Accordion.js.map +0 -1
  636. package/dist/esm/components/Avatar/Avatar.js.map +0 -1
  637. package/dist/esm/components/Badge/Badge.js.map +0 -1
  638. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +0 -1
  639. package/dist/esm/components/Button/Button.js.map +0 -1
  640. package/dist/esm/components/Button/ButtonGroup.js.map +0 -1
  641. package/dist/esm/components/Calendar/Calendar.js.map +0 -1
  642. package/dist/esm/components/Carousel/Carousel.js.map +0 -1
  643. package/dist/esm/components/Checkbox/Checkbox.js.map +0 -1
  644. package/dist/esm/components/Collapsible/Collapsible.js.map +0 -1
  645. package/dist/esm/components/Command/Command.js.map +0 -1
  646. package/dist/esm/components/Command/index.js.map +0 -1
  647. package/dist/esm/components/ContextMenu/ContextMenu.js.map +0 -1
  648. package/dist/esm/components/ContextMenu/index.js.map +0 -1
  649. package/dist/esm/components/Cropper/Cropper.js.map +0 -1
  650. package/dist/esm/components/Cropper/CropperTool.js.map +0 -1
  651. package/dist/esm/components/Cropper/utils.js.map +0 -1
  652. package/dist/esm/components/DatePicker/DatePicker.js.map +0 -1
  653. package/dist/esm/components/DatePicker/RangePicker.js.map +0 -1
  654. package/dist/esm/components/DatePicker/TimePicker.js.map +0 -1
  655. package/dist/esm/components/Dialog/Dialog.js.map +0 -1
  656. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +0 -1
  657. package/dist/esm/components/DropdownMenu/index.js.map +0 -1
  658. package/dist/esm/components/FloatLabel.js.map +0 -1
  659. package/dist/esm/components/Glass/Glass.js.map +0 -1
  660. package/dist/esm/components/ImageViewer/ImageViewer.js.map +0 -1
  661. package/dist/esm/components/Input/Input.js.map +0 -1
  662. package/dist/esm/components/InputOTP/InputOTP.js.map +0 -1
  663. package/dist/esm/components/Interactive/CursorFollow.js.map +0 -1
  664. package/dist/esm/components/Marquee/Marquee.js.map +0 -1
  665. package/dist/esm/components/Marquee/MarqueeWrapper.js.map +0 -1
  666. package/dist/esm/components/Marquee/index.js.map +0 -1
  667. package/dist/esm/components/Masonry/Masonry.js.map +0 -1
  668. package/dist/esm/components/Masonry/MasonryWrapper.js.map +0 -1
  669. package/dist/esm/components/Pagination/Pagination.js.map +0 -1
  670. package/dist/esm/components/Pagination/index.js.map +0 -1
  671. package/dist/esm/components/Popover/Popover.js.map +0 -1
  672. package/dist/esm/components/Popover/index.js.map +0 -1
  673. package/dist/esm/components/QrCode/QrCode.js.map +0 -1
  674. package/dist/esm/components/QrCode/index.js.map +0 -1
  675. package/dist/esm/components/Radio/Radio.js.map +0 -1
  676. package/dist/esm/components/Rate/Rate.js.map +0 -1
  677. package/dist/esm/components/Resizable/Resizable.js.map +0 -1
  678. package/dist/esm/components/ScrollArea/ScrollArea.js.map +0 -1
  679. package/dist/esm/components/Select/Select.js.map +0 -1
  680. package/dist/esm/components/Separator/Separator.js.map +0 -1
  681. package/dist/esm/components/Sheet/Sheet.js.map +0 -1
  682. package/dist/esm/components/Sidebar/Sidebar.js.map +0 -1
  683. package/dist/esm/components/Skeleton/Skeleton.js.map +0 -1
  684. package/dist/esm/components/Slider/Slider.js.map +0 -1
  685. package/dist/esm/components/Stepper/Stepper.js.map +0 -1
  686. package/dist/esm/components/Stepper/StepperWrapper.js.map +0 -1
  687. package/dist/esm/components/Stepper/index.js.map +0 -1
  688. package/dist/esm/components/Switch/Switch.js.map +0 -1
  689. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +0 -1
  690. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +0 -1
  691. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +0 -1
  692. package/dist/esm/components/Table/data-table-column-header.js.map +0 -1
  693. package/dist/esm/components/Table/data-table-pagination.js.map +0 -1
  694. package/dist/esm/components/Table/data-table-toolbar.js.map +0 -1
  695. package/dist/esm/components/Table/data-table-view-options.js.map +0 -1
  696. package/dist/esm/components/Table/data-table.js.map +0 -1
  697. package/dist/esm/components/Table/select-column.js.map +0 -1
  698. package/dist/esm/components/Tabs/Tabs.js.map +0 -1
  699. package/dist/esm/components/Tabs/classes.js.map +0 -1
  700. package/dist/esm/components/Textarea/Textarea.js.map +0 -1
  701. package/dist/esm/components/TimeGridView.js.map +0 -1
  702. package/dist/esm/components/Toast/Toast.js.map +0 -1
  703. package/dist/esm/components/Toggle/Toggle.js.map +0 -1
  704. package/dist/esm/components/Tooltip/Tooltip.js.map +0 -1
  705. package/dist/esm/components/Tour/Tour.js.map +0 -1
  706. package/dist/esm/components/Tour/TourWrapper.js.map +0 -1
  707. package/dist/esm/components/Tour/index.js.map +0 -1
  708. package/dist/esm/components/TreeSelect/TreeSelect.js.map +0 -1
  709. package/dist/esm/components/Upload/Upload.js.map +0 -1
  710. package/dist/esm/components/WheelColumn.js.map +0 -1
  711. package/dist/esm/config/data-table.js.map +0 -1
  712. package/dist/esm/constants/common.js.map +0 -1
  713. package/dist/esm/hooks/use-callback-ref.js.map +0 -1
  714. package/dist/esm/hooks/use-data-table.js.map +0 -1
  715. package/dist/esm/hooks/use-debounced-callback.js.map +0 -1
  716. package/dist/esm/hooks/use-debounced-value.js.map +0 -1
  717. package/dist/esm/hooks/use-event-listener.js.map +0 -1
  718. package/dist/esm/hooks/use-intersection-observer.js.map +0 -1
  719. package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +0 -1
  720. package/dist/esm/hooks/use-media-query.js.map +0 -1
  721. package/dist/esm/hooks/use-on-click-outside.js.map +0 -1
  722. package/dist/esm/hooks/use-script.js.map +0 -1
  723. package/dist/esm/hooks/use-scroll-lock.js.map +0 -1
  724. package/dist/esm/index.js.map +0 -1
  725. package/dist/esm/lib/TextAnimation/BlurText.js.map +0 -1
  726. package/dist/esm/lib/TextAnimation/CircularText.js.map +0 -1
  727. package/dist/esm/lib/TextAnimation/FlipWords.js.map +0 -1
  728. package/dist/esm/lib/TextAnimation/GradientText.js.map +0 -1
  729. package/dist/esm/lib/TextAnimation/RollingText.js.map +0 -1
  730. package/dist/esm/lib/TextAnimation/RotatingText.js.map +0 -1
  731. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +0 -1
  732. package/dist/esm/lib/TextAnimation/SplittingText.js.map +0 -1
  733. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +0 -1
  734. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +0 -1
  735. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +0 -1
  736. package/dist/esm/lib/TextAnimation/TypingText.js.map +0 -1
  737. package/dist/esm/lib/TextAnimation/WritingText.js.map +0 -1
  738. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  739. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  740. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  741. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  742. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
  743. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +0 -1
  744. package/dist/esm/packages/ui/src/components/accordion.js.map +0 -1
  745. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +0 -1
  746. package/dist/esm/packages/ui/src/components/avatar.js.map +0 -1
  747. package/dist/esm/packages/ui/src/components/badge.js.map +0 -1
  748. package/dist/esm/packages/ui/src/components/breadcrumb.js.map +0 -1
  749. package/dist/esm/packages/ui/src/components/button-group.js.map +0 -1
  750. package/dist/esm/packages/ui/src/components/button.js.map +0 -1
  751. package/dist/esm/packages/ui/src/components/calendar.js.map +0 -1
  752. package/dist/esm/packages/ui/src/components/checkbox.js.map +0 -1
  753. package/dist/esm/packages/ui/src/components/collapsible.js.map +0 -1
  754. package/dist/esm/packages/ui/src/components/combobox.js.map +0 -1
  755. package/dist/esm/packages/ui/src/components/command.js.map +0 -1
  756. package/dist/esm/packages/ui/src/components/context-menu.js.map +0 -1
  757. package/dist/esm/packages/ui/src/components/dialog.js.map +0 -1
  758. package/dist/esm/packages/ui/src/components/drawer.js.map +0 -1
  759. package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +0 -1
  760. package/dist/esm/packages/ui/src/components/input-otp.js.map +0 -1
  761. package/dist/esm/packages/ui/src/components/input.js.map +0 -1
  762. package/dist/esm/packages/ui/src/components/label.js.map +0 -1
  763. package/dist/esm/packages/ui/src/components/pagination.js.map +0 -1
  764. package/dist/esm/packages/ui/src/components/popover.js.map +0 -1
  765. package/dist/esm/packages/ui/src/components/radio-group.js.map +0 -1
  766. package/dist/esm/packages/ui/src/components/resizable.js.map +0 -1
  767. package/dist/esm/packages/ui/src/components/scroll-area.js.map +0 -1
  768. package/dist/esm/packages/ui/src/components/select.js.map +0 -1
  769. package/dist/esm/packages/ui/src/components/separator.js.map +0 -1
  770. package/dist/esm/packages/ui/src/components/sheet.js.map +0 -1
  771. package/dist/esm/packages/ui/src/components/sidebar.js.map +0 -1
  772. package/dist/esm/packages/ui/src/components/skeleton.js.map +0 -1
  773. package/dist/esm/packages/ui/src/components/switch.js.map +0 -1
  774. package/dist/esm/packages/ui/src/components/table.js.map +0 -1
  775. package/dist/esm/packages/ui/src/components/tabs.js.map +0 -1
  776. package/dist/esm/packages/ui/src/components/textarea.js.map +0 -1
  777. package/dist/esm/packages/ui/src/components/toggle.js.map +0 -1
  778. package/dist/esm/packages/ui/src/components/tooltip.js.map +0 -1
  779. package/dist/esm/packages/ui/src/components/tree-view.js.map +0 -1
  780. package/dist/esm/packages/ui/src/hooks/use-mobile.js.map +0 -1
  781. package/dist/esm/packages/ui/src/lib/compose-refs.js.map +0 -1
  782. package/dist/esm/packages/ui/src/lib/utils.js.map +0 -1
  783. package/dist/esm/utils/animations.js.map +0 -1
  784. package/dist/esm/utils/css.js.map +0 -1
  785. package/dist/esm/utils/data-table.js.map +0 -1
  786. package/dist/esm/utils/datetime.js.map +0 -1
  787. package/dist/esm/utils/parsers.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"CursorFollow.cjs","sources":["../../../../src/components/Interactive/CursorFollow.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useMotionValue,\n useSpring,\n AnimatePresence,\n type HTMLMotionProps,\n type SpringOptions,\n} from \"motion/react\";\n\nimport { cn } from \"@dsui/ui/index\";\n\n// Transition presets\ntype TransitionPreset = \"slow\" | \"normal\" | \"fast\" | \"realtime\";\n\nconst TRANSITION_PRESETS: Record<TransitionPreset, SpringOptions> = {\n slow: { stiffness: 100, damping: 20, bounce: 0 },\n normal: { stiffness: 500, damping: 50, bounce: 0 },\n fast: { stiffness: 1000, damping: 80, bounce: 0 },\n realtime: { stiffness: 2000, damping: 100, bounce: 0 },\n};\n\ntype CursorContextType = {\n cursorPos: { x: number; y: number };\n isActive: boolean;\n containerRef: React.RefObject<HTMLDivElement | null>;\n cursorRef: React.RefObject<HTMLDivElement | null>;\n};\n\nconst CursorContext = React.createContext<CursorContextType | undefined>(\n undefined\n);\n\nconst useCursor = (): CursorContextType => {\n const context = React.useContext(CursorContext);\n if (!context) {\n throw new Error(\"useCursor must be used within a CursorProvider\");\n }\n return context;\n};\n\ntype Align =\n | \"top\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"left\"\n | \"right\"\n | \"center\";\n\ntype CursorVariantKey = \"default\" | \"pointer\";\ntype CursorVariant = CursorVariantKey | React.ReactNode;\n\n// Predefined cursor variants\nconst cursorVariants: Record<CursorVariantKey, React.ReactNode> = {\n default: null, // Use system cursor\n pointer: (\n <div className=\"ds:h-5 ds:w-5 ds:rounded-full ds:bg-white/30 ds:border-2 ds:border-white\" />\n ),\n};\n\ntype CursorProviderProps = React.ComponentProps<\"div\"> & {\n children: React.ReactNode;\n /** Auto-setup cursor with variant (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Auto-setup follow element with content */\n followText?: React.ReactNode;\n /** Show follow element (default: true when followText is provided) */\n showFollow?: boolean;\n /** Follow element alignment */\n followAlign?: Align;\n /** Follow element side offset */\n followSideOffset?: number;\n /** Follow element transition preset */\n followTransition?: TransitionPreset;\n};\n\nfunction CursorProvider({\n ref,\n children,\n cursorType = \"default\",\n followText,\n showFollow,\n followAlign = \"bottom-right\",\n followSideOffset = 15,\n followTransition = \"normal\",\n ...props\n}: CursorProviderProps) {\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => containerRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const parent = containerRef.current.parentElement;\n if (!parent) return;\n\n if (getComputedStyle(parent).position === \"static\") {\n parent.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = parent.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n parent.addEventListener(\"mousemove\", handleMouseMove);\n parent.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n parent.removeEventListener(\"mousemove\", handleMouseMove);\n parent.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Auto-setup: determine if we should show cursor and follow\n const shouldShowCursor = cursorType !== undefined;\n const shouldShowFollowElement = showFollow ?? followText !== undefined;\n\n // Convert preset to SpringOptions\n const transitionConfig = TRANSITION_PRESETS[followTransition];\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <div ref={containerRef} data-slot=\"cursor-provider\" {...props}>\n {children}\n\n {/* Auto-setup Cursor */}\n {shouldShowCursor && <Cursor cursorType={cursorType} />}\n\n {/* Auto-setup CursorFollow */}\n {shouldShowFollowElement && (\n <CursorFollow\n followText={followText}\n align={followAlign}\n sideOffset={followSideOffset}\n transition={transitionConfig}\n />\n )}\n </div>\n </CursorContext.Provider>\n );\n}\n\ntype CursorProps = HTMLMotionProps<\"div\"> & {\n children?: React.ReactNode;\n cursorType?: CursorVariant;\n};\n\nfunction Cursor({\n ref,\n children,\n cursorType = \"default\",\n className,\n style,\n ...props\n}: CursorProps) {\n const { cursorPos, isActive, containerRef, cursorRef } = useCursor();\n React.useImperativeHandle(ref as React.Ref<HTMLDivElement>, () => cursorRef.current as HTMLDivElement);\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Determine which content to render\n const getCursorContent = () => {\n if (children) return children;\n\n // Check if cursorType is a preset key\n if (typeof cursorType === \"string\" && cursorType in cursorVariants) {\n return cursorVariants[cursorType as CursorVariantKey];\n }\n\n // Otherwise treat it as custom ReactNode\n return cursorType;\n };\n\n const cursorContent = getCursorContent();\n\n // Only hide system cursor if we have custom content to show\n const shouldHideSystemCursor = cursorContent !== null;\n\n React.useEffect(() => {\n const parentElement = containerRef.current?.parentElement;\n\n if (parentElement && isActive && shouldHideSystemCursor) {\n parentElement.style.cursor = \"none\";\n }\n\n return () => {\n if (parentElement) parentElement.style.cursor = \"default\";\n };\n }, [containerRef, isActive, shouldHideSystemCursor]);\n\n React.useEffect(() => {\n x.set(cursorPos.x);\n y.set(cursorPos.y);\n }, [cursorPos, x, y]);\n\n // Only render if we have content to show\n if (!cursorContent) return null;\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorRef}\n data-slot=\"cursor\"\n className={cn(\n \"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9999 ds:absolute\",\n className\n )}\n style={{ top: y, left: x, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {cursorContent}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\ntype CursorFollowProps = HTMLMotionProps<\"div\"> & {\n sideOffset?: number;\n align?: Align;\n transition?: SpringOptions;\n transitionPreset?: TransitionPreset;\n children?: React.ReactNode;\n followText?: React.ReactNode;\n};\n\nfunction CursorFollow({\n ref,\n sideOffset = 15,\n align = \"bottom-right\",\n children,\n className,\n style,\n followText,\n transition,\n transitionPreset = \"normal\",\n ...props\n}: CursorFollowProps) {\n const { cursorPos, isActive, cursorRef } = useCursor();\n const cursorFollowRef = React.useRef<HTMLDivElement>(null);\n React.useImperativeHandle(\n ref as React.Ref<HTMLDivElement>,\n () => cursorFollowRef.current as HTMLDivElement\n );\n\n const x = useMotionValue(0);\n const y = useMotionValue(0);\n\n // Use custom transition if provided, otherwise use preset\n const finalTransition = transition || TRANSITION_PRESETS[transitionPreset];\n\n const springX = useSpring(x, finalTransition);\n const springY = useSpring(y, finalTransition);\n\n const calculateOffset = React.useCallback(() => {\n const rect = cursorFollowRef.current?.getBoundingClientRect();\n const width = rect?.width ?? 0;\n const height = rect?.height ?? 0;\n\n let newOffset;\n\n switch (align) {\n case \"center\":\n newOffset = { x: width / 2, y: height / 2 };\n break;\n case \"top\":\n newOffset = { x: width / 2, y: height + sideOffset };\n break;\n case \"top-left\":\n newOffset = { x: width + sideOffset, y: height + sideOffset };\n break;\n case \"top-right\":\n newOffset = { x: -sideOffset, y: height + sideOffset };\n break;\n case \"bottom\":\n newOffset = { x: width / 2, y: -sideOffset };\n break;\n case \"bottom-left\":\n newOffset = { x: width + sideOffset, y: -sideOffset };\n break;\n case \"bottom-right\":\n newOffset = { x: -sideOffset, y: -sideOffset };\n break;\n case \"left\":\n newOffset = { x: width + sideOffset, y: height / 2 };\n break;\n case \"right\":\n newOffset = { x: -sideOffset, y: height / 2 };\n break;\n default:\n newOffset = { x: 0, y: 0 };\n }\n\n return newOffset;\n }, [align, sideOffset]);\n\n React.useEffect(() => {\n const offset = calculateOffset();\n const cursorRect = cursorRef.current?.getBoundingClientRect();\n const cursorWidth = cursorRect?.width ?? 20;\n const cursorHeight = cursorRect?.height ?? 20;\n\n x.set(cursorPos.x - offset.x + cursorWidth / 2);\n y.set(cursorPos.y - offset.y + cursorHeight / 2);\n }, [calculateOffset, cursorPos, cursorRef, x, y]);\n\n // Determine follow content based on children or followText\n const getFollowContent = () => {\n if (children) return children;\n\n if (followText) {\n // If followText is a string, wrap it with default styling\n if (typeof followText === \"string\") {\n return (\n <div className=\"ds:px-4 ds:py-2 ds:bg-white ds:rounded-md ds:shadow-lg ds:text-sm ds:font-medium\">\n {followText}\n </div>\n );\n }\n // If it's a ReactNode, render it directly\n return followText;\n }\n\n return null;\n };\n\n return (\n <AnimatePresence>\n {isActive && (\n <motion.div\n ref={cursorFollowRef}\n data-slot=\"cursor-follow\"\n className={cn(\n \"ds:transform-[translate(-50%,-50%)] ds:pointer-events-none ds:z-9998 ds:absolute\",\n className\n )}\n style={{ top: springY, left: springX, ...style }}\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0, opacity: 0 }}\n {...props}\n >\n {getFollowContent()}\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n// Hook for easy cursor setup (Method 2)\ntype useCursorFollowOptions = {\n /** Cursor variant type (preset key or custom ReactNode) */\n cursorType?: CursorVariant;\n /** Follow element content */\n followText?: React.ReactNode;\n /** Show follow element */\n showFollow?: boolean;\n /** Follow element alignment */\n align?: Align;\n /** Follow element side offset */\n sideOffset?: number;\n /** Follow element transition preset */\n transitionPreset?: TransitionPreset;\n /** Additional className for the container */\n className?: string;\n /** Additional style for the container */\n style?: React.CSSProperties;\n};\n\ntype UseCursorFollowType = {\n ref: React.RefObject<HTMLDivElement | null>;\n className: string;\n style: React.CSSProperties;\n \"data-cursor-container\": true;\n children: (children: React.ReactNode) => React.ReactElement;\n};\n\nfunction useCursorFollow(\n options: useCursorFollowOptions = {}\n): UseCursorFollowType {\n const {\n cursorType = \"default\",\n followText,\n showFollow,\n align = \"bottom-right\",\n sideOffset = 15,\n transitionPreset = \"normal\",\n className,\n style,\n } = options;\n\n const [cursorPos, setCursorPos] = React.useState({ x: 0, y: 0 });\n const [isActive, setIsActive] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const cursorRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!containerRef.current) return;\n\n const element = containerRef.current;\n if (getComputedStyle(element).position === \"static\") {\n element.style.position = \"relative\";\n }\n\n const handleMouseMove = (e: MouseEvent) => {\n const rect = element.getBoundingClientRect();\n setCursorPos({ x: e.clientX - rect.left, y: e.clientY - rect.top });\n setIsActive(true);\n };\n const handleMouseLeave = () => setIsActive(false);\n\n element.addEventListener(\"mousemove\", handleMouseMove);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n\n return () => {\n element.removeEventListener(\"mousemove\", handleMouseMove);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n };\n }, []);\n\n // Only hide system cursor if cursorType is not 'default'\n const shouldHideSystemCursor = cursorType !== \"default\";\n\n React.useEffect(() => {\n if (!containerRef.current || !isActive || !shouldHideSystemCursor) return;\n const element = containerRef.current;\n element.style.cursor = \"none\";\n return () => {\n element.style.cursor = \"default\";\n };\n }, [isActive, shouldHideSystemCursor]);\n\n // Render function for cursor elements\n const renderCursorElements = React.useCallback(() => {\n if (!isActive) return null;\n\n return (\n <CursorContext.Provider\n value={{ cursorPos, isActive, containerRef, cursorRef }}\n >\n <Cursor cursorType={cursorType} />\n {(showFollow ?? followText !== undefined) && (\n <CursorFollow\n followText={followText}\n align={align}\n sideOffset={sideOffset}\n transitionPreset={transitionPreset}\n />\n )}\n </CursorContext.Provider>\n );\n }, [\n isActive,\n cursorPos,\n cursorType,\n followText,\n showFollow,\n align,\n sideOffset,\n transitionPreset,\n ]);\n\n // Return props that can be spread on the container element\n return {\n ref: containerRef,\n className: cn(\"ds:relative\", className),\n style: { ...style },\n \"data-cursor-container\": true as const,\n children: (children: React.ReactNode) => (\n <>\n {children}\n {renderCursorElements()}\n </>\n ),\n };\n}\n\nexport {\n CursorProvider,\n Cursor,\n CursorFollow,\n useCursor,\n useCursorFollow,\n TRANSITION_PRESETS,\n type CursorContextType,\n type CursorProviderProps,\n type CursorProps,\n type CursorFollowProps,\n type CursorVariant,\n type CursorVariantKey,\n type Align,\n type useCursorFollowOptions,\n type TransitionPreset,\n};\n"],"names":["TRANSITION_PRESETS","CursorContext","React","useCursor","context","cursorVariants","jsx","CursorProvider","ref","children","cursorType","followText","showFollow","followAlign","followSideOffset","followTransition","props","cursorPos","setCursorPos","isActive","setIsActive","containerRef","cursorRef","parent","handleMouseMove","e","rect","handleMouseLeave","shouldShowCursor","shouldShowFollowElement","transitionConfig","Cursor","CursorFollow","className","style","x","useMotionValue","y","cursorContent","shouldHideSystemCursor","parentElement","AnimatePresence","motion","cn","sideOffset","align","transition","transitionPreset","cursorFollowRef","finalTransition","springX","useSpring","springY","calculateOffset","width","height","newOffset","offset","cursorRect","cursorWidth","cursorHeight","getFollowContent","useCursorFollow","options","element","renderCursorElements","jsxs","Fragment"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Marquee.cjs","sources":["../../../../src/components/Marquee/Marquee.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Marquee\";\nconst CONTENT_NAME = \"MarqueeContent\";\n\ntype Side = \"left\" | \"right\" | \"top\" | \"bottom\";\ntype Orientation = \"horizontal\" | \"vertical\";\ntype Direction = \"ltr\" | \"rtl\";\n\ntype RootElement = React.ComponentRef<typeof MarqueeRoot>;\ntype ContentElement = React.ComponentRef<typeof MarqueeContent>;\n\ninterface Dimensions {\n width: number;\n height: number;\n}\n\ninterface ElementDimensions {\n rootSize: number;\n contentSize: number;\n}\n\nfunction createResizeObserverStore() {\n const listeners = new Set<() => void>();\n let observer: ResizeObserver | null = null;\n const elements = new Map<Element, Dimensions>();\n const refCounts = new Map<Element, number>();\n const isSupported = typeof ResizeObserver !== \"undefined\";\n let notificationScheduled = false;\n\n const snapshotCache = new WeakMap<\n Element,\n WeakMap<\n Element,\n { horizontal: ElementDimensions; vertical: ElementDimensions }\n >\n >();\n\n function notify() {\n if (notificationScheduled) return;\n notificationScheduled = true;\n queueMicrotask(() => {\n notificationScheduled = false;\n for (const callback of listeners) {\n callback();\n }\n });\n }\n\n function cleanup() {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n elements.clear();\n refCounts.clear();\n }\n\n function subscribe(callback: () => void) {\n listeners.add(callback);\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) {\n cleanup();\n }\n };\n }\n\n function getSnapshot(\n rootElement: RootElement | null,\n contentElement: ContentElement | null,\n orientation: Orientation\n ): ElementDimensions | null {\n if (!rootElement || !contentElement) return null;\n\n const rootDims = elements.get(rootElement);\n const contentDims = elements.get(contentElement);\n\n if (!rootDims || !contentDims) return null;\n\n const rootSize =\n orientation === \"vertical\" ? rootDims.height : rootDims.width;\n const contentSize =\n orientation === \"vertical\" ? contentDims.height : contentDims.width;\n\n let rootCache = snapshotCache.get(rootElement);\n if (!rootCache) {\n rootCache = new WeakMap();\n snapshotCache.set(rootElement, rootCache);\n }\n\n let contentCache = rootCache.get(contentElement);\n if (!contentCache) {\n contentCache = {\n horizontal: { rootSize: -1, contentSize: -1 },\n vertical: { rootSize: -1, contentSize: -1 },\n };\n rootCache.set(contentElement, contentCache);\n }\n\n const cached = contentCache[orientation];\n if (cached.rootSize === rootSize && cached.contentSize === contentSize) {\n return cached;\n }\n\n const snapshot = { rootSize, contentSize };\n contentCache[orientation] = snapshot;\n return snapshot;\n }\n\n function observe(\n rootElement: RootElement | null,\n contentElement: Element | null\n ) {\n if (!isSupported || !rootElement || !contentElement) return;\n\n if (!observer) {\n observer = new ResizeObserver((entries) => {\n let hasChanged = false;\n\n for (const entry of entries) {\n const element = entry.target;\n const { width, height } = entry.contentRect;\n\n const currentData = elements.get(element);\n\n if (\n !currentData ||\n currentData.width !== width ||\n currentData.height !== height\n ) {\n elements.set(element, { width, height });\n hasChanged = true;\n }\n }\n\n if (hasChanged) {\n notify();\n }\n });\n }\n\n refCounts.set(rootElement, (refCounts.get(rootElement) ?? 0) + 1);\n refCounts.set(contentElement, (refCounts.get(contentElement) ?? 0) + 1);\n\n observer.observe(rootElement);\n observer.observe(contentElement);\n\n const rootRect = rootElement.getBoundingClientRect();\n const contentRect = contentElement.getBoundingClientRect();\n\n const rootData = { width: rootRect.width, height: rootRect.height };\n const contentData = {\n width: contentRect.width,\n height: contentRect.height,\n };\n\n elements.set(rootElement, rootData);\n elements.set(contentElement, contentData);\n\n if (\n rootData.width > 0 &&\n rootData.height > 0 &&\n contentData.width > 0 &&\n contentData.height > 0\n ) {\n notify();\n }\n }\n\n function unobserve(\n rootElement: RootElement | null,\n contentElement: Element | null\n ) {\n if (!observer || !rootElement || !contentElement) return;\n\n const rootCount = (refCounts.get(rootElement) ?? 1) - 1;\n const contentCount = (refCounts.get(contentElement) ?? 1) - 1;\n\n if (rootCount <= 0) {\n observer.unobserve(rootElement);\n elements.delete(rootElement);\n refCounts.delete(rootElement);\n } else {\n refCounts.set(rootElement, rootCount);\n }\n\n if (contentCount <= 0) {\n observer.unobserve(contentElement);\n elements.delete(contentElement);\n refCounts.delete(contentElement);\n } else {\n refCounts.set(contentElement, contentCount);\n }\n }\n\n return {\n subscribe,\n getSnapshot,\n observe,\n unobserve,\n };\n}\n\nconst resizeObserverStore = createResizeObserverStore();\n\nfunction useResizeObserverStore(\n rootRef: React.RefObject<RootElement | null>,\n contentRef: React.RefObject<ContentElement | null>,\n orientation: Orientation\n) {\n const onSubscribe = React.useCallback(\n (callback: () => void) => resizeObserverStore.subscribe(callback),\n []\n );\n\n const getSnapshot = React.useCallback(\n () =>\n resizeObserverStore.getSnapshot(\n rootRef.current,\n contentRef.current,\n orientation\n ),\n [rootRef, contentRef, orientation]\n );\n\n return React.useSyncExternalStore(onSubscribe, getSnapshot, getSnapshot);\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dir?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dir ?? contextDir ?? \"ltr\";\n}\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ninterface MarqueeContextValue {\n side: Side;\n orientation: Orientation;\n dir: Direction;\n speed: number;\n loopCount: number;\n contentRef: React.RefObject<ContentElement | null>;\n rootRef: React.RefObject<RootElement | null>;\n autoFill: boolean;\n pauseOnHover: boolean;\n pauseOnKeyboard: boolean;\n reverse: boolean;\n paused: boolean;\n}\n\nconst MarqueeContext = React.createContext<MarqueeContextValue | null>(null);\n\nfunction useMarqueeContext(consumerName: string) {\n const context = React.useContext(MarqueeContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface MarqueeRootProps extends DivProps {\n side?: Side;\n dir?: Direction;\n speed?: number;\n delay?: number;\n loopCount?: number;\n gap?: string | number;\n autoFill?: boolean;\n pauseOnHover?: boolean;\n pauseOnKeyboard?: boolean;\n reverse?: boolean;\n}\n\nfunction MarqueeRoot(props: MarqueeRootProps) {\n const {\n side = \"left\",\n dir: dirProp,\n speed = 50,\n delay = 0,\n loopCount = 0,\n gap = \"1rem\",\n asChild,\n autoFill = false,\n pauseOnHover = false,\n pauseOnKeyboard = false,\n reverse = false,\n className,\n style: styleProp,\n ref,\n ...marqueeProps\n } = props;\n\n const orientation: Orientation =\n side === \"top\" || side === \"bottom\" ? \"vertical\" : \"horizontal\";\n\n const dir = useDirection(dirProp);\n\n const rootRef = React.useRef<RootElement>(null);\n const contentRef = React.useRef<ContentElement>(null);\n const composedRef = useComposedRefs(ref, rootRef);\n\n const [paused, setPaused] = React.useState(false);\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (pauseOnKeyboard && event.key === \" \") {\n event.preventDefault();\n setPaused((prev) => !prev);\n }\n },\n [pauseOnKeyboard]\n );\n\n const dimensions = useResizeObserverStore(rootRef, contentRef, orientation);\n\n const duration = React.useMemo(() => {\n const safeSpeed = Math.max(0.001, speed);\n\n if (!dimensions) {\n const defaultDistance = autoFill ? 1000 : 2000;\n return defaultDistance / safeSpeed;\n }\n\n const { rootSize, contentSize } = dimensions;\n\n if (autoFill) {\n const multiplier =\n contentSize < rootSize ? Math.ceil(rootSize / contentSize) : 1;\n return (contentSize * multiplier) / safeSpeed;\n } else {\n return contentSize < rootSize\n ? rootSize / safeSpeed\n : contentSize / safeSpeed;\n }\n }, [dimensions, speed, autoFill]);\n\n const style = React.useMemo<React.CSSProperties>(\n () => ({\n \"--marquee-duration\": `${duration}s`,\n \"--marquee-gap\": gap,\n \"--marquee-delay\": `${delay}s`,\n \"--marquee-loop-count\":\n loopCount === 0 || loopCount === Infinity\n ? \"infinite\"\n : loopCount.toString(),\n ...styleProp,\n }),\n [duration, gap, delay, loopCount, styleProp]\n );\n\n const contextValue = React.useMemo<MarqueeContextValue>(\n () => ({\n side,\n orientation,\n dir,\n speed,\n loopCount,\n contentRef,\n rootRef,\n autoFill,\n paused,\n pauseOnHover,\n pauseOnKeyboard,\n reverse,\n }),\n [\n side,\n orientation,\n dir,\n speed,\n loopCount,\n autoFill,\n paused,\n pauseOnHover,\n pauseOnKeyboard,\n reverse,\n ]\n );\n\n const MarqueePrimitive = asChild ? Slot : \"div\";\n\n return (\n <MarqueeContext.Provider value={contextValue}>\n <div data-slot=\"marquee-wrapper\" className=\"ds:grid\">\n <MarqueePrimitive\n role=\"marquee\"\n aria-live=\"off\"\n data-orientation={orientation}\n data-slot=\"marquee\"\n dir={dir}\n tabIndex={pauseOnKeyboard ? 0 : undefined}\n {...marqueeProps}\n ref={composedRef}\n className={cn(\n \"ds:relative ds:flex ds:overflow-hidden ds:motion-reduce:animate-none\",\n orientation === \"vertical\" && \"ds:h-full ds:flex-col\",\n orientation === \"horizontal\" && \"ds:w-full\",\n paused && \"ds:[&_*]:[animation-play-state:paused]\",\n pauseOnHover && \"ds:group\",\n pauseOnKeyboard &&\n \"ds:rounded-md ds:focus-visible:border-ring ds:focus-visible:outline-none ds:focus-visible:ring-[3px] ds:focus-visible:ring-ring/50\",\n className\n )}\n style={style}\n onKeyDown={pauseOnKeyboard ? onKeyDown : undefined}\n />\n </div>\n </MarqueeContext.Provider>\n );\n}\n\nconst marqueeContentVariants = cva(\n \"ds:flex ds:min-w-full ds:shrink-0 ds:gap-(--marquee-gap)\",\n {\n variants: {\n side: {\n left: \"ds:animate-marquee-left\",\n right: \"ds:animate-marquee-right\",\n top: \"ds:min-h-full ds:min-w-auto ds:animate-marquee-up ds:flex-col\",\n bottom: \"ds:min-h-full ds:min-w-auto ds:animate-marquee-down ds:flex-col\",\n },\n dir: {\n ltr: \"\",\n rtl: \"\",\n },\n pauseOnHover: {\n true: \"ds:group-hover:[animation-play-state:paused]\",\n false: \"\",\n },\n reverse: {\n true: \"ds:[animation-direction:reverse]\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n side: \"left\",\n dir: \"rtl\",\n className: \"ds:animate-marquee-left-rtl\",\n },\n {\n side: \"right\",\n dir: \"rtl\",\n className: \"ds:animate-marquee-right-rtl\",\n },\n ],\n defaultVariants: {\n side: \"left\",\n dir: \"ltr\",\n pauseOnHover: false,\n reverse: false,\n },\n }\n);\n\nfunction MarqueeContent(props: DivProps) {\n const {\n className,\n asChild,\n ref,\n children,\n style: styleProp,\n ...contentProps\n } = props;\n\n const context = useMarqueeContext(CONTENT_NAME);\n const composedRef = useComposedRefs(ref, context.contentRef);\n\n const isVertical = context.orientation === \"vertical\";\n const isRtl = context.dir === \"rtl\";\n\n const dimensions = useResizeObserverStore(\n context.rootRef,\n context.contentRef,\n context.orientation\n );\n\n React.useEffect(() => {\n if (context.rootRef.current && context.contentRef.current) {\n resizeObserverStore.observe(\n context.rootRef.current,\n context.contentRef.current\n );\n\n return () => {\n resizeObserverStore.unobserve(\n context.rootRef.current,\n context.contentRef.current\n );\n };\n }\n }, [context.rootRef, context.contentRef]);\n\n const multiplier = React.useMemo(() => {\n if (!context.autoFill || !dimensions) return 1;\n\n const { rootSize, contentSize } = dimensions;\n if (contentSize === 0) return 1;\n\n return contentSize < rootSize ? Math.ceil(rootSize / contentSize) : 1;\n }, [context.autoFill, dimensions]);\n\n const onMultipliedChildrenRender = React.useCallback(\n (count: number) => {\n return Array.from({ length: Math.max(0, count) }).map((_, i) => (\n <React.Fragment key={i}>{children}</React.Fragment>\n ));\n },\n [children]\n );\n\n const style = React.useMemo(\n () => ({\n ...styleProp,\n animationDuration: \"var(--marquee-duration)\",\n animationDelay: \"var(--marquee-delay)\",\n animationIterationCount: \"var(--marquee-loop-count)\",\n animationDirection: context.reverse ? \"reverse\" : \"normal\",\n }),\n [styleProp, context.reverse]\n );\n\n const ContentPrimitive = asChild ? Slot : \"div\";\n\n return (\n <>\n <ContentPrimitive\n data-orientation={context.orientation}\n data-slot=\"marquee-content\"\n {...contentProps}\n style={style}\n className={cn(\n marqueeContentVariants({\n side: context.side,\n dir: context.dir,\n pauseOnHover: context.pauseOnHover,\n reverse: context.reverse,\n className,\n }),\n isVertical && \"ds:flex-col\",\n isVertical\n ? \"ds:mb-(--marquee-gap)\"\n : isRtl\n ? \"ds:ml-(--marquee-gap)\"\n : \"ds:mr-(--marquee-gap)\"\n )}\n >\n <div\n ref={composedRef}\n className={cn(\n \"ds:flex ds:shrink-0 ds:gap-(--marquee-gap)\",\n isVertical && \"ds:flex-col\"\n )}\n >\n {children}\n </div>\n {onMultipliedChildrenRender(multiplier - 1)}\n </ContentPrimitive>\n <ContentPrimitive\n role=\"presentation\"\n aria-hidden=\"true\"\n {...contentProps}\n style={style}\n className={cn(\n marqueeContentVariants({\n side: context.side,\n dir: context.dir,\n pauseOnHover: context.pauseOnHover,\n reverse: context.reverse,\n className,\n }),\n isVertical && \"ds:flex-col\"\n )}\n >\n {onMultipliedChildrenRender(multiplier)}\n </ContentPrimitive>\n </>\n );\n}\n\nfunction MarqueeItem(props: DivProps) {\n const { className, asChild, ...itemProps } = props;\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ItemPrimitive\n data-slot=\"marquee-item\"\n {...itemProps}\n className={cn(\"ds:shrink-0\", className)}\n />\n );\n}\n\nconst marqueeEdgeVariants = cva(\"ds:pointer-events-none ds:absolute ds:z-10\", {\n variants: {\n side: {\n left: \"ds:top-0 ds:left-0 ds:h-full ds:bg-gradient-to-r ds:from-background ds:to-transparent\",\n right:\n \"ds:top-0 ds:right-0 ds:h-full ds:bg-gradient-to-l ds:from-background ds:to-transparent\",\n top: \"ds:top-0 ds:left-0 ds:w-full ds:bg-gradient-to-b ds:from-background ds:to-transparent\",\n bottom:\n \"ds:bottom-0 ds:left-0 ds:w-full ds:bg-gradient-to-t ds:from-background ds:to-transparent\",\n },\n size: {\n default: \"\",\n sm: \"\",\n lg: \"\",\n },\n },\n compoundVariants: [\n {\n side: [\"left\", \"right\"],\n size: \"default\",\n className: \"ds:w-1/4\",\n },\n {\n side: [\"left\", \"right\"],\n size: \"sm\",\n className: \"ds:w-1/6\",\n },\n {\n side: [\"left\", \"right\"],\n size: \"lg\",\n className: \"ds:w-1/3\",\n },\n {\n side: [\"top\", \"bottom\"],\n size: \"default\",\n className: \"ds:h-1/4\",\n },\n {\n side: [\"top\", \"bottom\"],\n size: \"sm\",\n className: \"ds:h-1/6\",\n },\n {\n side: [\"top\", \"bottom\"],\n size: \"lg\",\n className: \"ds:h-1/3\",\n },\n ],\n defaultVariants: {\n size: \"default\",\n },\n});\n\ninterface MarqueeEdgeProps\n extends VariantProps<typeof marqueeEdgeVariants>,\n DivProps {}\n\nfunction MarqueeEdge(props: MarqueeEdgeProps) {\n const { side, size, className, asChild, ...edgeProps } = props;\n\n const EdgePrimitive = asChild ? Slot : \"div\";\n\n return (\n <EdgePrimitive\n data-size={size}\n data-slot=\"marquee-edge\"\n {...edgeProps}\n className={cn(marqueeEdgeVariants({ side, size, className }))}\n />\n );\n}\n\nexport {\n MarqueeRoot as Root,\n MarqueeContent as Content,\n MarqueeItem as Item,\n MarqueeEdge as Edge,\n //\n MarqueeRoot as Marquee,\n MarqueeContent,\n MarqueeItem,\n MarqueeEdge,\n // types\n type MarqueeRootProps,\n type MarqueeEdgeProps,\n};\n"],"names":["ROOT_NAME","CONTENT_NAME","createResizeObserverStore","listeners","observer","elements","refCounts","isSupported","notificationScheduled","snapshotCache","notify","callback","cleanup","subscribe","getSnapshot","rootElement","contentElement","orientation","rootDims","contentDims","rootSize","contentSize","rootCache","contentCache","cached","snapshot","observe","entries","hasChanged","entry","element","width","height","currentData","rootRect","contentRect","rootData","contentData","unobserve","rootCount","contentCount","resizeObserverStore","useResizeObserverStore","rootRef","contentRef","onSubscribe","React","DirectionContext","useDirection","dir","contextDir","MarqueeContext","useMarqueeContext","consumerName","context","MarqueeRoot","props","side","dirProp","speed","delay","loopCount","gap","asChild","autoFill","pauseOnHover","pauseOnKeyboard","reverse","className","styleProp","ref","marqueeProps","composedRef","useComposedRefs","paused","setPaused","onKeyDown","event","prev","dimensions","duration","safeSpeed","multiplier","style","contextValue","MarqueePrimitive","Slot","jsx","cn","marqueeContentVariants","cva","MarqueeContent","children","contentProps","isVertical","isRtl","onMultipliedChildrenRender","count","_","i","ContentPrimitive","jsxs","Fragment","MarqueeItem","itemProps","ItemPrimitive","marqueeEdgeVariants","MarqueeEdge","size","edgeProps","EdgePrimitive"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarqueeWrapper.cjs","sources":["../../../../src/components/Marquee/MarqueeWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Root, Content, Item, Edge } from \"./Marquee\";\nimport type { MarqueeRootProps } from \"./Marquee\";\n\ninterface MarqueeWrapperProps extends MarqueeRootProps {\n items?: React.ReactNode[];\n fade?: boolean;\n}\n\nfunction MarqueeWrapper({\n items,\n fade,\n children,\n side = \"left\",\n ...props\n}: MarqueeWrapperProps) {\n const hasItems = items && items.length > 0;\n const hasChildren = React.Children.count(children) > 0;\n\n if (hasItems && hasChildren) {\n console.warn(\n \"Marquee: Both 'items' and 'children' are provided. 'items' will be used.\"\n );\n }\n\n const isVertical = side === \"top\" || side === \"bottom\";\n const fadeSides = isVertical ? [\"top\", \"bottom\"] : [\"left\", \"right\"];\n\n if (hasItems) {\n return (\n <Root {...props} side={side}>\n <Content>\n {items.map((item, index) => (\n <Item key={index}>{item}</Item>\n ))}\n </Content>\n {fade && (\n <Edge side={fadeSides[0] as \"left\" | \"right\" | \"top\" | \"bottom\"} />\n )}\n {fade && (\n <Edge side={fadeSides[1] as \"left\" | \"right\" | \"top\" | \"bottom\"} />\n )}\n </Root>\n );\n }\n\n return (\n <Root {...props} side={side}>\n {children}\n </Root>\n );\n}\n\nexport { MarqueeWrapper };\nexport type { MarqueeWrapperProps };\n"],"names":["MarqueeWrapper","items","fade","children","side","props","hasItems","hasChildren","React","fadeSides","jsxs","Root","jsx","Content","item","index","Item","Edge"],"mappings":"6bAWA,SAASA,EAAe,CACtB,MAAAC,EACA,KAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,OACP,GAAGC,CACL,EAAwB,CACtB,MAAMC,EAAWL,GAASA,EAAM,OAAS,EACnCM,EAAcC,EAAM,SAAS,MAAML,CAAQ,EAAI,EAEjDG,GAAYC,GACd,QAAQ,KACN,0EAAA,EAKJ,MAAME,EADaL,IAAS,OAASA,IAAS,SACf,CAAC,MAAO,QAAQ,EAAI,CAAC,OAAQ,OAAO,EAEnE,OAAIE,EAEAI,EAAAA,KAACC,EAAAA,KAAA,CAAM,GAAGN,EAAO,KAAAD,EACf,SAAA,CAAAQ,EAAAA,IAACC,EAAAA,QAAA,CACE,SAAAZ,EAAM,IAAI,CAACa,EAAMC,IAChBH,EAAAA,IAACI,EAAAA,KAAA,CAAkB,SAAAF,CAAA,EAARC,CAAa,CACzB,EACH,EACCb,GACCU,EAAAA,IAACK,OAAA,CAAK,KAAMR,EAAU,CAAC,EAA0C,EAElEP,GACCU,EAAAA,IAACK,EAAAA,KAAA,CAAK,KAAMR,EAAU,CAAC,CAAA,CAA0C,CAAA,EAErE,EAKFG,EAAAA,IAACD,EAAAA,KAAA,CAAM,GAAGN,EAAO,KAAAD,EACd,SAAAD,EACH,CAEJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Marquee/index.ts"],"sourcesContent":["import {\n Content,\n Item,\n Edge,\n //\n MarqueeContent,\n MarqueeItem,\n MarqueeEdge,\n // types\n type MarqueeRootProps,\n type MarqueeEdgeProps,\n} from \"./Marquee\";\nimport { MarqueeWrapper } from \"./MarqueeWrapper\";\n\nconst Marquee = Object.assign(MarqueeWrapper, {\n Content,\n Item,\n Edge,\n //\n MarqueeContent,\n MarqueeItem,\n MarqueeEdge,\n});\n\nexport { Marquee };\nexport type { MarqueeRootProps, MarqueeEdgeProps };\n"],"names":["Marquee","MarqueeWrapper","Content","Item","Edge","MarqueeContent","MarqueeItem","MarqueeEdge"],"mappings":"mJAcMA,EAAU,OAAO,OAAOC,iBAAgB,CAAA,QAC5CC,EAAAA,QAAA,KACAC,EAAAA,KAAA,KACAC,EAAAA,KAAA,eAEAC,EAAAA,QAAA,YACAC,EAAAA,KAAA,YACAC,EAAAA,IACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Masonry.cjs","sources":["../../../../src/components/Masonry/Masonry.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport * as React from \"react\";\n\nconst NODE_COLOR = {\n RED: 0,\n BLACK: 1,\n SENTINEL: 2,\n} as const;\n\nconst NODE_OPERATION = {\n REMOVE: 0,\n PRESERVE: 1,\n} as const;\n\ntype NodeColor = (typeof NODE_COLOR)[keyof typeof NODE_COLOR];\ntype NodeOperation = (typeof NODE_OPERATION)[keyof typeof NODE_OPERATION];\n\ninterface ListNode {\n index: number;\n high: number;\n next: ListNode | null;\n}\n\ninterface TreeNode {\n max: number;\n low: number;\n high: number;\n color: NodeColor;\n parent: TreeNode;\n right: TreeNode;\n left: TreeNode;\n list: ListNode;\n}\n\ninterface Tree {\n root: TreeNode;\n size: number;\n}\n\nfunction addInterval(treeNode: TreeNode, high: number, index: number): boolean {\n let node: ListNode | null = treeNode.list;\n let prevNode: ListNode | undefined;\n\n while (node) {\n if (node.index === index) return false;\n if (high > node.high) break;\n prevNode = node;\n node = node.next;\n }\n\n if (!prevNode) treeNode.list = { index, high, next: node };\n if (prevNode) prevNode.next = { index, high, next: prevNode.next };\n\n return true;\n}\n\nfunction removeInterval(\n treeNode: TreeNode,\n index: number\n): NodeOperation | undefined {\n let node: ListNode | null = treeNode.list;\n if (node.index === index) {\n if (node.next === null) return NODE_OPERATION.REMOVE;\n treeNode.list = node.next;\n return NODE_OPERATION.PRESERVE;\n }\n\n let prevNode: ListNode | undefined = node;\n node = node.next;\n\n while (node !== null) {\n if (node.index === index) {\n prevNode.next = node.next;\n return NODE_OPERATION.PRESERVE;\n }\n prevNode = node;\n node = node.next;\n }\n}\n\nconst SENTINEL_NODE: TreeNode = {\n low: 0,\n max: 0,\n high: 0,\n color: NODE_COLOR.SENTINEL,\n parent: undefined as unknown as TreeNode,\n right: undefined as unknown as TreeNode,\n left: undefined as unknown as TreeNode,\n list: undefined as unknown as ListNode,\n};\n\nSENTINEL_NODE.parent = SENTINEL_NODE;\nSENTINEL_NODE.left = SENTINEL_NODE;\nSENTINEL_NODE.right = SENTINEL_NODE;\n\nfunction updateMax(node: TreeNode) {\n const max = node.high;\n if (node.left === SENTINEL_NODE && node.right === SENTINEL_NODE)\n node.max = max;\n else if (node.left === SENTINEL_NODE)\n node.max = Math.max(node.right.max, max);\n else if (node.right === SENTINEL_NODE)\n node.max = Math.max(node.left.max, max);\n else node.max = Math.max(Math.max(node.left.max, node.right.max), max);\n}\n\nfunction updateMaxUp(node: TreeNode) {\n let x = node;\n\n while (x.parent !== SENTINEL_NODE) {\n updateMax(x.parent);\n x = x.parent;\n }\n}\n\nfunction rotateLeft(tree: Tree, x: TreeNode) {\n if (x.right === SENTINEL_NODE) return;\n const y = x.right;\n x.right = y.left;\n if (y.left !== SENTINEL_NODE) y.left.parent = x;\n y.parent = x.parent;\n\n if (x.parent === SENTINEL_NODE) tree.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n\n y.left = x;\n x.parent = y;\n\n updateMax(x);\n updateMax(y);\n}\n\nfunction rotateRight(tree: Tree, x: TreeNode) {\n if (x.left === SENTINEL_NODE) return;\n const y = x.left;\n x.left = y.right;\n if (y.right !== SENTINEL_NODE) y.right.parent = x;\n y.parent = x.parent;\n\n if (x.parent === SENTINEL_NODE) tree.root = y;\n else if (x === x.parent.right) x.parent.right = y;\n else x.parent.left = y;\n\n y.right = x;\n x.parent = y;\n\n updateMax(x);\n updateMax(y);\n}\n\nfunction replaceNode(tree: Tree, x: TreeNode, y: TreeNode) {\n if (x.parent === SENTINEL_NODE) tree.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n y.parent = x.parent;\n}\n\nfunction fixRemove(tree: Tree, node: TreeNode) {\n let x = node;\n let w: TreeNode;\n\n while (x !== SENTINEL_NODE && x.color === NODE_COLOR.BLACK) {\n if (x === x.parent.left) {\n w = x.parent.right;\n\n if (w.color === NODE_COLOR.RED) {\n w.color = NODE_COLOR.BLACK;\n x.parent.color = NODE_COLOR.RED;\n rotateLeft(tree, x.parent);\n w = x.parent.right;\n }\n\n if (\n w.left.color === NODE_COLOR.BLACK &&\n w.right.color === NODE_COLOR.BLACK\n ) {\n w.color = NODE_COLOR.RED;\n x = x.parent;\n } else {\n if (w.right.color === NODE_COLOR.BLACK) {\n w.left.color = NODE_COLOR.BLACK;\n w.color = NODE_COLOR.RED;\n rotateRight(tree, w);\n w = x.parent.right;\n }\n\n w.color = x.parent.color;\n x.parent.color = NODE_COLOR.BLACK;\n w.right.color = NODE_COLOR.BLACK;\n rotateLeft(tree, x.parent);\n x = tree.root;\n }\n } else {\n w = x.parent.left;\n\n if (w.color === NODE_COLOR.RED) {\n w.color = NODE_COLOR.BLACK;\n x.parent.color = NODE_COLOR.RED;\n rotateRight(tree, x.parent);\n w = x.parent.left;\n }\n\n if (\n w.right.color === NODE_COLOR.BLACK &&\n w.left.color === NODE_COLOR.BLACK\n ) {\n w.color = NODE_COLOR.RED;\n x = x.parent;\n } else {\n if (w.left.color === NODE_COLOR.BLACK) {\n w.right.color = NODE_COLOR.BLACK;\n w.color = NODE_COLOR.RED;\n rotateLeft(tree, w);\n w = x.parent.left;\n }\n\n w.color = x.parent.color;\n x.parent.color = NODE_COLOR.BLACK;\n w.left.color = NODE_COLOR.BLACK;\n rotateRight(tree, x.parent);\n x = tree.root;\n }\n }\n }\n\n x.color = NODE_COLOR.BLACK;\n}\n\nfunction minimumTree(node: TreeNode) {\n let current = node;\n while (current.left !== SENTINEL_NODE) {\n current = current.left;\n }\n return current;\n}\n\nfunction fixInsert(tree: Tree, node: TreeNode) {\n let current = node;\n let y: TreeNode;\n\n while (current.parent.color === NODE_COLOR.RED) {\n if (current.parent === current.parent.parent.left) {\n y = current.parent.parent.right;\n\n if (y.color === NODE_COLOR.RED) {\n current.parent.color = NODE_COLOR.BLACK;\n y.color = NODE_COLOR.BLACK;\n current.parent.parent.color = NODE_COLOR.RED;\n current = current.parent.parent;\n } else {\n if (current === current.parent.right) {\n current = current.parent;\n rotateLeft(tree, current);\n }\n\n current.parent.color = NODE_COLOR.BLACK;\n current.parent.parent.color = NODE_COLOR.RED;\n rotateRight(tree, current.parent.parent);\n }\n } else {\n y = current.parent.parent.left;\n\n if (y.color === NODE_COLOR.RED) {\n current.parent.color = NODE_COLOR.BLACK;\n y.color = NODE_COLOR.BLACK;\n current.parent.parent.color = NODE_COLOR.RED;\n current = current.parent.parent;\n } else {\n if (current === current.parent.left) {\n current = current.parent;\n rotateRight(tree, current);\n }\n\n current.parent.color = NODE_COLOR.BLACK;\n current.parent.parent.color = NODE_COLOR.RED;\n rotateLeft(tree, current.parent.parent);\n }\n }\n }\n tree.root.color = NODE_COLOR.BLACK;\n}\n\ninterface IntervalTree {\n insert(low: number, high: number, index: number): void;\n remove(index: number): void;\n search(\n low: number,\n high: number,\n onCallback: (index: number, low: number) => void\n ): void;\n size: number;\n}\n\nfunction createIntervalTree(): IntervalTree {\n const tree: Tree = {\n root: SENTINEL_NODE,\n size: 0,\n };\n\n const indexMap: Record<number, TreeNode> = {};\n\n return {\n insert(low, high, index) {\n let x: TreeNode = tree.root;\n let y: TreeNode = SENTINEL_NODE;\n\n while (x !== SENTINEL_NODE) {\n y = x;\n if (low === y.low) break;\n if (low < x.low) x = x.left;\n else x = x.right;\n }\n\n if (low === y.low && y !== SENTINEL_NODE) {\n if (!addInterval(y, high, index)) return;\n y.high = Math.max(y.high, high);\n updateMax(y);\n updateMaxUp(y);\n indexMap[index] = y;\n tree.size++;\n return;\n }\n\n const z: TreeNode = {\n low,\n high,\n max: high,\n color: NODE_COLOR.RED,\n parent: y,\n left: SENTINEL_NODE,\n right: SENTINEL_NODE,\n list: { index, high, next: null },\n };\n\n if (y === SENTINEL_NODE) {\n tree.root = z;\n } else {\n if (z.low < y.low) y.left = z;\n else y.right = z;\n updateMaxUp(z);\n }\n\n fixInsert(tree, z);\n indexMap[index] = z;\n tree.size++;\n },\n\n remove(index) {\n const z = indexMap[index];\n if (z === void 0) return;\n delete indexMap[index];\n\n const intervalResult = removeInterval(z, index);\n if (intervalResult === void 0) return;\n if (intervalResult === NODE_OPERATION.PRESERVE) {\n z.high = z.list.high;\n updateMax(z);\n updateMaxUp(z);\n tree.size--;\n return;\n }\n\n let y = z;\n let originalYColor = y.color;\n let x: TreeNode;\n\n if (z.left === SENTINEL_NODE) {\n x = z.right;\n replaceNode(tree, z, z.right);\n } else if (z.right === SENTINEL_NODE) {\n x = z.left;\n replaceNode(tree, z, z.left);\n } else {\n y = minimumTree(z.right);\n originalYColor = y.color;\n x = y.right;\n\n if (y.parent === z) {\n x.parent = y;\n } else {\n replaceNode(tree, y, y.right);\n y.right = z.right;\n y.right.parent = y;\n }\n\n replaceNode(tree, z, y);\n y.left = z.left;\n y.left.parent = y;\n y.color = z.color;\n }\n\n updateMax(x);\n updateMaxUp(x);\n\n if (originalYColor === NODE_COLOR.BLACK) fixRemove(tree, x);\n tree.size--;\n },\n\n search(low, high, onCallback) {\n const stack = [tree.root];\n while (stack.length !== 0) {\n const node = stack.pop();\n if (!node) continue;\n if (node === SENTINEL_NODE || low > node.max) continue;\n if (node.left !== SENTINEL_NODE) stack.push(node.left);\n if (node.right !== SENTINEL_NODE) stack.push(node.right);\n if (node.low <= high && node.high >= low) {\n let curr: ListNode | null = node.list;\n while (curr !== null) {\n if (curr.high >= low) onCallback(curr.index, node.low);\n curr = curr.next;\n }\n }\n }\n },\n\n get size() {\n return tree.size;\n },\n };\n}\n\ntype CacheKey = string | number | symbol;\ntype CacheConstructor = (new () => Cache) | Record<CacheKey, unknown>;\n\ninterface Cache<K = CacheKey, V = unknown> {\n set: (k: K, v: V) => V;\n get: (k: K) => V | undefined;\n}\n\nfunction onDeepMemo<T extends unknown[], U>(\n constructors: CacheConstructor[],\n fn: (...args: T) => U\n): (...args: T) => U {\n if (!constructors.length || !constructors[0]) {\n throw new Error(\"At least one constructor is required\");\n }\n\n function createCache(obj: CacheConstructor): Cache {\n let cache: Cache;\n if (typeof obj === \"function\") {\n try {\n cache = new (obj as new () => Cache)();\n } catch (_err) {\n cache = new Map<CacheKey, unknown>();\n }\n } else {\n cache = obj as unknown as Cache;\n }\n return {\n set(k: CacheKey, v: unknown): unknown {\n cache.set(k, v);\n return v;\n },\n get(k: CacheKey): unknown | undefined {\n return cache.get(k);\n },\n };\n }\n\n const depth = constructors.length;\n const baseCache = createCache(constructors[0]);\n\n let base: Cache | undefined;\n let map: Cache | undefined;\n let node: Cache;\n let i: number;\n const one = depth === 1;\n\n function get(args: unknown[]): unknown {\n if (depth < 3) {\n const key = args[0] as CacheKey;\n base = baseCache.get(key) as Cache | undefined;\n return one ? base : base?.get(args[1] as CacheKey);\n }\n\n node = baseCache;\n for (i = 0; i < depth; i++) {\n const next = node.get(args[i] as CacheKey);\n if (!next) return undefined;\n node = next as Cache;\n }\n return node;\n }\n\n function set(args: unknown[], value: unknown): unknown {\n if (depth < 3) {\n if (one) {\n baseCache.set(args[0] as CacheKey, value);\n } else {\n base = baseCache.get(args[0] as CacheKey) as Cache | undefined;\n if (!base) {\n if (!constructors[1]) {\n throw new Error(\n \"Second constructor is required for non-single depth cache\"\n );\n }\n map = createCache(constructors[1]);\n map.set(args[1] as CacheKey, value);\n baseCache.set(args[0] as CacheKey, map);\n } else {\n base.set(args[1] as CacheKey, value);\n }\n }\n return value;\n }\n\n node = baseCache;\n for (i = 0; i < depth - 1; i++) {\n map = node.get(args[i] as CacheKey) as Cache | undefined;\n if (!map) {\n const nextConstructor = constructors[i + 1];\n if (!nextConstructor) {\n throw new Error(`Constructor at index ${i + 1} is required`);\n }\n map = createCache(nextConstructor);\n node.set(args[i] as CacheKey, map);\n node = map;\n } else {\n node = map;\n }\n }\n node.set(args[depth - 1] as CacheKey, value);\n return value;\n }\n\n return (...args: T): U => {\n const cached = get(args);\n if (cached === undefined) {\n return set(args, fn(...args)) as U;\n }\n return cached as U;\n };\n}\n\nconst COLUMN_WIDTH = 200;\nconst GAP = 0;\nconst ITEM_HEIGHT = 300;\nconst OVERSCAN = 2;\nconst SCROLL_FPS = 12;\nconst DEBOUNCE_DELAY = 300;\n\ninterface Positioner {\n columnCount: number;\n columnWidth: number;\n set: (index: number, height: number) => void;\n get: (index: number) => PositionerItem | undefined;\n update: (updates: number[]) => void;\n range: (\n low: number,\n high: number,\n onItemRender: (index: number, left: number, top: number) => void\n ) => void;\n size: () => number;\n estimateHeight: (itemCount: number, defaultItemHeight: number) => number;\n shortestColumn: () => number;\n all: () => PositionerItem[];\n}\n\ninterface PositionerItem {\n top: number;\n left: number;\n height: number;\n columnIndex: number;\n}\n\ninterface UsePositionerOptions {\n width: number;\n columnWidth?: number;\n columnGap?: number;\n rowGap?: number;\n columnCount?: number;\n maxColumnCount?: number;\n linear?: boolean;\n}\n\nfunction usePositioner(\n {\n width,\n columnWidth = COLUMN_WIDTH,\n columnGap = GAP,\n rowGap,\n columnCount,\n maxColumnCount,\n linear = false,\n }: UsePositionerOptions,\n deps: React.DependencyList = []\n): Positioner {\n const initPositioner = React.useCallback((): Positioner => {\n function binarySearch(a: number[], y: number): number {\n let l = 0;\n let h = a.length - 1;\n\n while (l <= h) {\n const m = (l + h) >>> 1;\n const x = a[m];\n if (x === y) return m;\n if (x === undefined || x <= y) l = m + 1;\n else h = m - 1;\n }\n\n return -1;\n }\n\n const computedColumnCount =\n columnCount ||\n Math.min(\n Math.floor((width + columnGap) / (columnWidth + columnGap)),\n maxColumnCount || Number.POSITIVE_INFINITY\n ) ||\n 1;\n const computedColumnWidth = Math.floor(\n (width - columnGap * (computedColumnCount - 1)) / computedColumnCount\n );\n\n const intervalTree = createIntervalTree();\n const columnHeights: number[] = new Array(computedColumnCount).fill(0);\n const items: (PositionerItem | undefined)[] = [];\n const columnItems: number[][] = new Array(computedColumnCount)\n .fill(0)\n .map(() => []);\n\n for (let i = 0; i < computedColumnCount; i++) {\n columnHeights[i] = 0;\n columnItems[i] = [];\n }\n\n return {\n columnCount: computedColumnCount,\n columnWidth: computedColumnWidth,\n set: (index: number, height = 0) => {\n let columnIndex = 0;\n\n if (linear) {\n const preferredColumn = index % computedColumnCount;\n\n let shortestHeight = columnHeights[0] ?? 0;\n let tallestHeight = shortestHeight;\n let shortestIndex = 0;\n\n for (let i = 0; i < columnHeights.length; i++) {\n const currentHeight = columnHeights[i] ?? 0;\n if (currentHeight < shortestHeight) {\n shortestHeight = currentHeight;\n shortestIndex = i;\n }\n if (currentHeight > tallestHeight) {\n tallestHeight = currentHeight;\n }\n }\n\n const preferredHeight =\n (columnHeights[preferredColumn] ?? 0) + height;\n\n const maxAllowedHeight = shortestHeight + height * 2.5;\n columnIndex =\n preferredHeight <= maxAllowedHeight\n ? preferredColumn\n : shortestIndex;\n } else {\n for (let i = 1; i < columnHeights.length; i++) {\n const currentHeight = columnHeights[i];\n const shortestHeight = columnHeights[columnIndex];\n if (\n currentHeight !== undefined &&\n shortestHeight !== undefined &&\n currentHeight < shortestHeight\n ) {\n columnIndex = i;\n }\n }\n }\n\n const columnHeight = columnHeights[columnIndex];\n if (columnHeight === undefined) return;\n\n const top = columnHeight;\n columnHeights[columnIndex] = top + height + (rowGap ?? columnGap);\n\n const columnItemsList = columnItems[columnIndex];\n if (!columnItemsList) return;\n columnItemsList.push(index);\n\n items[index] = {\n left: columnIndex * (computedColumnWidth + columnGap),\n top,\n height,\n columnIndex,\n };\n intervalTree.insert(top, top + height, index);\n },\n get: (index: number) => items[index],\n update: (updates: number[]) => {\n const columns: (number | undefined)[] = new Array(computedColumnCount);\n let i = 0;\n let j = 0;\n\n for (; i < updates.length - 1; i++) {\n const currentIndex = updates[i];\n if (typeof currentIndex !== \"number\") continue;\n\n const item = items[currentIndex];\n if (!item) continue;\n\n const nextHeight = updates[++i];\n if (typeof nextHeight !== \"number\") continue;\n\n item.height = nextHeight;\n intervalTree.remove(currentIndex);\n intervalTree.insert(item.top, item.top + item.height, currentIndex);\n columns[item.columnIndex] =\n columns[item.columnIndex] === void 0\n ? currentIndex\n : Math.min(\n currentIndex,\n columns[item.columnIndex] ?? currentIndex\n );\n }\n\n for (i = 0; i < columns.length; i++) {\n const currentColumn = columns[i];\n if (currentColumn === void 0) continue;\n\n const itemsInColumn = columnItems[i];\n if (!itemsInColumn) continue;\n\n const startIndex = binarySearch(itemsInColumn, currentColumn);\n if (startIndex === -1) continue;\n\n const currentItemIndex = itemsInColumn[startIndex];\n if (typeof currentItemIndex !== \"number\") continue;\n\n const startItem = items[currentItemIndex];\n if (!startItem) continue;\n\n const currentHeight = columnHeights[i];\n if (typeof currentHeight !== \"number\") continue;\n\n columnHeights[i] =\n startItem.top + startItem.height + (rowGap ?? columnGap);\n\n for (j = startIndex + 1; j < itemsInColumn.length; j++) {\n const currentIndex = itemsInColumn[j];\n if (typeof currentIndex !== \"number\") continue;\n\n const item = items[currentIndex];\n if (!item) continue;\n\n const columnHeight = columnHeights[i];\n if (typeof columnHeight !== \"number\") continue;\n\n item.top = columnHeight;\n columnHeights[i] = item.top + item.height + (rowGap ?? columnGap);\n intervalTree.remove(currentIndex);\n intervalTree.insert(item.top, item.top + item.height, currentIndex);\n }\n }\n },\n range: (low, high, onItemRender) =>\n intervalTree.search(low, high, (index: number, top: number) => {\n const item = items[index];\n if (!item) return;\n onItemRender(index, item.left, top);\n }),\n estimateHeight: (itemCount, defaultItemHeight): number => {\n const tallestColumn = Math.max(0, Math.max.apply(null, columnHeights));\n\n return itemCount === intervalTree.size\n ? tallestColumn\n : tallestColumn +\n Math.ceil((itemCount - intervalTree.size) / computedColumnCount) *\n defaultItemHeight;\n },\n shortestColumn: () => {\n if (columnHeights.length > 1)\n return Math.min.apply(null, columnHeights);\n return columnHeights[0] ?? 0;\n },\n size(): number {\n return intervalTree.size;\n },\n all(): PositionerItem[] {\n return items.filter(Boolean) as PositionerItem[];\n },\n };\n }, [\n width,\n columnWidth,\n columnGap,\n rowGap,\n columnCount,\n maxColumnCount,\n linear,\n ]);\n\n const positionerRef = React.useRef<Positioner | null>(null);\n if (positionerRef.current === null) positionerRef.current = initPositioner();\n\n const prevDepsRef = React.useRef(deps);\n const opts = [\n width,\n columnWidth,\n columnGap,\n rowGap,\n columnCount,\n maxColumnCount,\n linear,\n ];\n const prevOptsRef = React.useRef(opts);\n const optsChanged = !opts.every((item, i) => prevOptsRef.current[i] === item);\n\n if (\n optsChanged ||\n !deps.every((item, i) => prevDepsRef.current[i] === item)\n ) {\n const prevPositioner = positionerRef.current;\n const positioner = initPositioner();\n prevDepsRef.current = deps;\n prevOptsRef.current = opts;\n\n if (optsChanged) {\n const cacheSize = prevPositioner.size();\n for (let index = 0; index < cacheSize; index++) {\n const pos = prevPositioner.get(index);\n positioner.set(index, pos !== void 0 ? pos.height : 0);\n }\n }\n\n positionerRef.current = positioner;\n }\n\n return positionerRef.current;\n}\n\ninterface DebouncedWindowSizeOptions {\n containerRef: React.RefObject<RootElement | null>;\n defaultWidth?: number;\n defaultHeight?: number;\n delayMs?: number;\n}\n\nfunction useDebouncedWindowSize(options: DebouncedWindowSizeOptions) {\n const {\n containerRef,\n defaultWidth = 0,\n defaultHeight = 0,\n delayMs = DEBOUNCE_DELAY,\n } = options;\n\n const getDocumentSize = React.useCallback(() => {\n if (typeof document === \"undefined\") {\n return { width: defaultWidth, height: defaultHeight };\n }\n return {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n };\n }, [defaultWidth, defaultHeight]);\n\n const [size, setSize] = React.useState(getDocumentSize());\n const timeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n const setDebouncedSize = React.useCallback(\n (value: { width: number; height: number }) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n setSize(value);\n }, delayMs);\n },\n [delayMs]\n );\n\n React.useEffect(() => {\n function onResize() {\n if (containerRef.current) {\n setDebouncedSize({\n width: containerRef.current.offsetWidth,\n height: document.documentElement.clientHeight,\n });\n } else {\n setDebouncedSize(getDocumentSize());\n }\n }\n\n window?.addEventListener(\"resize\", onResize, { passive: true });\n window?.addEventListener(\"orientationchange\", onResize);\n window.visualViewport?.addEventListener(\"resize\", onResize);\n\n return () => {\n window?.removeEventListener(\"resize\", onResize);\n window?.removeEventListener(\"orientationchange\", onResize);\n window.visualViewport?.removeEventListener(\"resize\", onResize);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, [setDebouncedSize, containerRef, getDocumentSize]);\n\n return size;\n}\n\ntype OnRafScheduleReturn<T extends unknown[]> = {\n (...args: T): void;\n cancel: () => void;\n};\n\nfunction onRafSchedule<T extends unknown[]>(\n callback: (...args: T) => void\n): OnRafScheduleReturn<T> {\n let lastArgs: T = [] as unknown as T;\n let frameId: number | null = null;\n\n function onCallback(...args: T) {\n lastArgs = args;\n\n if (frameId)\n frameId = requestAnimationFrame(() => {\n frameId = null;\n callback(...lastArgs);\n });\n }\n\n onCallback.cancel = () => {\n if (!frameId) return;\n cancelAnimationFrame(frameId);\n frameId = null;\n };\n\n return onCallback;\n}\n\nfunction useResizeObserver(positioner: Positioner) {\n const [, setLayoutVersion] = React.useState(0);\n\n const createResizeObserver = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return () => ({\n disconnect: () => {},\n observe: () => {},\n unobserve: () => {},\n });\n }\n\n return onDeepMemo(\n [WeakMap],\n (positioner: Positioner, onUpdate: () => void) => {\n const updates: number[] = [];\n const itemMap = new WeakMap<Element, number>();\n\n const update = onRafSchedule(() => {\n if (updates.length > 0) {\n positioner.update(updates);\n onUpdate();\n }\n updates.length = 0;\n });\n\n function onItemResize(target: ItemElement) {\n const height = target.offsetHeight;\n if (height > 0) {\n const index = itemMap.get(target);\n if (index !== void 0) {\n const position = positioner.get(index);\n if (position !== void 0 && height !== position.height) {\n updates.push(index, height);\n }\n }\n }\n update();\n }\n\n const scheduledItemMap = new Map<\n number,\n OnRafScheduleReturn<[ItemElement]>\n >();\n function onResizeObserver(entries: ResizeObserverEntry[]) {\n for (const entry of entries) {\n if (!entry) continue;\n const index = itemMap.get(entry.target);\n\n if (index === void 0) continue;\n let handler = scheduledItemMap.get(index);\n if (!handler) {\n handler = onRafSchedule(onItemResize);\n scheduledItemMap.set(index, handler);\n }\n handler(entry.target as ItemElement);\n }\n }\n\n const observer = new ResizeObserver(onResizeObserver);\n const disconnect = observer.disconnect.bind(observer);\n observer.disconnect = () => {\n disconnect();\n for (const [, scheduleItem] of scheduledItemMap) {\n scheduleItem.cancel();\n }\n };\n\n return observer;\n }\n );\n }, []);\n\n const resizeObserver = createResizeObserver(positioner, () =>\n setLayoutVersion((prev) => prev + 1)\n );\n\n React.useEffect(() => () => resizeObserver.disconnect(), [resizeObserver]);\n\n return resizeObserver;\n}\n\nfunction useScroller({\n offset = 0,\n fps = SCROLL_FPS,\n}: {\n offset?: number;\n fps?: number;\n} = {}): { scrollTop: number; isScrolling: boolean } {\n const [scrollY, setScrollY] = useThrottle(\n typeof globalThis.window === \"undefined\"\n ? 0\n : (globalThis.window.scrollY ?? document.documentElement.scrollTop ?? 0),\n { fps, leading: true }\n );\n\n const onScroll = React.useCallback(() => {\n setScrollY(\n globalThis.window.scrollY ?? document.documentElement.scrollTop ?? 0\n );\n }, [setScrollY]);\n\n React.useEffect(() => {\n if (typeof globalThis.window === \"undefined\") return;\n globalThis.window.addEventListener(\"scroll\", onScroll, { passive: true });\n\n return () => globalThis.window.removeEventListener(\"scroll\", onScroll);\n }, [onScroll]);\n\n const [isScrolling, setIsScrolling] = React.useState(false);\n const hasMountedRef = React.useRef(0);\n\n React.useEffect(() => {\n if (hasMountedRef.current === 1) setIsScrolling(true);\n let didUnsubscribe = false;\n\n function requestTimeout(fn: () => void, delay: number) {\n const start = performance.now();\n const handle = {\n id: requestAnimationFrame(function tick(timestamp) {\n if (timestamp - start >= delay) {\n fn();\n } else {\n handle.id = requestAnimationFrame(tick);\n }\n }),\n };\n return handle;\n }\n\n const timeout = requestTimeout(\n () => {\n if (didUnsubscribe) return;\n setIsScrolling(false);\n },\n 40 + 1000 / fps\n );\n hasMountedRef.current = 1;\n return () => {\n didUnsubscribe = true;\n cancelAnimationFrame(timeout.id);\n };\n }, [fps]);\n\n return { scrollTop: Math.max(0, scrollY - offset), isScrolling };\n}\n\nfunction useThrottle<State>(\n initialState: State | (() => State),\n options: {\n fps?: number;\n leading?: boolean;\n } = {}\n): [State, React.Dispatch<React.SetStateAction<State>>] {\n const { fps = 30, leading = false } = options;\n const [state, setState] = React.useState(initialState);\n const latestSetState = React.useRef(setState);\n latestSetState.current = setState;\n\n const ms = 1000 / fps;\n const prevCountRef = React.useRef(0);\n const trailingTimeout = React.useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n\n const clearTrailing = React.useCallback(() => {\n if (trailingTimeout.current) {\n clearTimeout(trailingTimeout.current);\n }\n }, []);\n\n React.useEffect(() => {\n return () => {\n prevCountRef.current = 0;\n clearTrailing();\n };\n }, [clearTrailing]);\n\n const throttledSetState = React.useCallback(\n (action: React.SetStateAction<State>) => {\n const perf = typeof performance !== \"undefined\" ? performance : Date;\n const now = () => perf.now();\n const rightNow = now();\n const call = () => {\n prevCountRef.current = rightNow;\n clearTrailing();\n latestSetState.current(action);\n };\n const current = prevCountRef.current;\n\n if (leading && current === 0) {\n return call();\n }\n\n if (rightNow - current > ms) {\n if (current > 0) {\n return call();\n }\n prevCountRef.current = rightNow;\n }\n\n clearTrailing();\n trailingTimeout.current = setTimeout(() => {\n call();\n prevCountRef.current = 0;\n }, ms);\n },\n [leading, ms, clearTrailing]\n );\n\n return [state, throttledSetState];\n}\n\nconst ROOT_NAME = \"MasonryRoot\";\nconst VIEWPORT_NAME = \"MasonryViewport\";\nconst ITEM_NAME = \"MasonryItem\";\n\nconst MASONRY_ERROR = {\n [ROOT_NAME]: `\\`${ROOT_NAME}\\` components must be within \\`${ROOT_NAME}\\``,\n [VIEWPORT_NAME]: `\\`${VIEWPORT_NAME}\\` components must be within \\`${ROOT_NAME}\\``,\n [ITEM_NAME]: `\\`${ITEM_NAME}\\` must be within \\`${VIEWPORT_NAME}\\``,\n} as const;\n\ninterface DivProps extends React.ComponentProps<\"div\"> {}\n\ntype RootElement = React.ComponentRef<typeof MasonryRoot>;\ntype ItemElement = React.ComponentRef<typeof MasonryItem>;\n\ninterface MasonryContextValue {\n positioner: Positioner;\n resizeObserver?: ResizeObserver;\n columnWidth: number;\n onItemRegister: (index: number) => (node: ItemElement | null) => void;\n scrollTop: number;\n windowHeight: number;\n itemHeight: number;\n overscan: number;\n isScrolling?: boolean;\n fallback?: React.ReactNode;\n virtualize: boolean;\n lazyLoad: boolean;\n loadedIndices: Set<number>;\n updateLoadedIndices: (indices: number[]) => void;\n}\n\nconst MasonryContext = React.createContext<MasonryContextValue | null>(null);\n\nfunction useMasonryContext(name: keyof typeof MASONRY_ERROR) {\n const context = React.useContext(MasonryContext);\n if (!context) {\n throw new Error(MASONRY_ERROR[name]);\n }\n return context;\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\ninterface MasonryRootProps extends DivProps {\n columnWidth?: number;\n columnCount?: number;\n maxColumnCount?: number;\n gap?: number | { column: number; row: number };\n itemHeight?: number;\n defaultWidth?: number;\n defaultHeight?: number;\n overscan?: number;\n scrollFps?: number;\n fallback?: React.ReactNode;\n linear?: boolean;\n asChild?: boolean;\n /**\n * Enable/disable virtualization. When true (default), only items in viewport are rendered.\n * Set to false to render all items (useful for SEO, printing, or small lists).\n */\n virtualize?: boolean;\n /**\n * Enable lazy loading when virtualization is disabled.\n * When true, items are loaded progressively as user scrolls and remain in DOM.\n * Ignored when virtualize=true. Default: false\n */\n lazyLoad?: boolean;\n}\n\nfunction MasonryRoot(props: MasonryRootProps) {\n const {\n columnWidth = COLUMN_WIDTH,\n columnCount,\n maxColumnCount,\n gap = GAP,\n itemHeight = ITEM_HEIGHT,\n defaultWidth,\n defaultHeight,\n overscan = OVERSCAN,\n scrollFps = SCROLL_FPS,\n fallback,\n linear = false,\n virtualize = true,\n lazyLoad = false,\n asChild,\n children,\n style,\n ref,\n ...rootProps\n } = props;\n\n const gapValue = typeof gap === \"object\" ? gap : { column: gap, row: gap };\n const columnGap = gapValue.column;\n const rowGap = gapValue.row;\n\n const containerRef = React.useRef<RootElement | null>(null);\n const composedRef = useComposedRefs(ref, containerRef);\n\n const size = useDebouncedWindowSize({\n containerRef,\n defaultWidth,\n defaultHeight,\n delayMs: DEBOUNCE_DELAY,\n });\n\n const [containerPosition, setContainerPosition] = React.useState<{\n offset: number;\n width: number;\n }>({ offset: 0, width: 0 });\n\n useIsomorphicLayoutEffect(() => {\n if (!containerRef.current) return;\n\n let offset = 0;\n let container = containerRef.current;\n\n do {\n offset += container.offsetTop ?? 0;\n container = container.offsetParent as RootElement;\n } while (container);\n\n if (\n offset !== containerPosition.offset ||\n containerRef.current.offsetWidth !== containerPosition.width\n ) {\n setContainerPosition({\n offset,\n width: containerRef.current.offsetWidth,\n });\n }\n }, [containerPosition, size]);\n\n const positioner = usePositioner({\n width: containerPosition.width ?? size.width,\n columnWidth,\n columnGap,\n rowGap,\n columnCount,\n maxColumnCount,\n linear,\n });\n const resizeObserver = useResizeObserver(positioner);\n const { scrollTop, isScrolling } = useScroller({\n offset: containerPosition.offset,\n fps: scrollFps,\n });\n\n const itemMap = React.useRef(new WeakMap<ItemElement, number>()).current;\n\n // Track loaded indices for lazy loading mode\n const loadedIndicesRef = React.useRef<Set<number>>(new Set());\n const [loadedIndices, setLoadedIndices] = React.useState<Set<number>>(\n () => new Set()\n );\n\n // Effective lazyLoad: only applies when virtualize is false\n const effectiveLazyLoad = !virtualize && lazyLoad;\n\n const onItemRegister = React.useCallback(\n (index: number) => (node: ItemElement | null) => {\n if (!node) return;\n\n itemMap.set(node, index);\n if (resizeObserver) {\n resizeObserver.observe(node);\n }\n if (positioner.get(index) === void 0) {\n positioner.set(index, node.offsetHeight);\n }\n },\n [itemMap, positioner, resizeObserver]\n );\n\n // Update loaded indices when in lazy load mode\n const updateLoadedIndices = React.useCallback((indices: number[]) => {\n let hasNew = false;\n indices.forEach((index) => {\n if (!loadedIndicesRef.current.has(index)) {\n loadedIndicesRef.current.add(index);\n hasNew = true;\n }\n });\n if (hasNew) {\n setLoadedIndices(new Set(loadedIndicesRef.current));\n }\n }, []);\n\n const contextValue = React.useMemo<MasonryContextValue>(\n () => ({\n positioner,\n resizeObserver,\n columnWidth: positioner.columnWidth,\n onItemRegister,\n scrollTop,\n windowHeight: size.height,\n itemHeight,\n overscan,\n fallback,\n isScrolling,\n virtualize,\n lazyLoad: effectiveLazyLoad,\n loadedIndices,\n updateLoadedIndices,\n }),\n [\n positioner,\n resizeObserver,\n onItemRegister,\n scrollTop,\n size.height,\n itemHeight,\n overscan,\n fallback,\n isScrolling,\n virtualize,\n effectiveLazyLoad,\n loadedIndices,\n updateLoadedIndices,\n ]\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <MasonryContext.Provider value={contextValue}>\n <RootPrimitive\n {...rootProps}\n data-slot=\"masonry\"\n ref={composedRef}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n ...style,\n }}\n >\n <MasonryViewport>{children}</MasonryViewport>\n </RootPrimitive>\n </MasonryContext.Provider>\n );\n}\n\ninterface MasonryItemPropsWithRef extends MasonryItemProps {\n ref: React.Ref<ItemElement | null>;\n}\n\nfunction MasonryViewport(props: DivProps) {\n const { children, style, ref, ...viewportProps } = props;\n const context = useMasonryContext(VIEWPORT_NAME);\n const [layoutVersion, setLayoutVersion] = React.useState(0);\n const rafId = React.useRef<number | null>(null);\n const [mounted, setMounted] = React.useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n }, []);\n\n let startIndex = 0;\n let stopIndex: number | undefined;\n\n const validChildren = React.Children.toArray(children).filter(\n (child): child is React.ReactElement<MasonryItemPropsWithRef> =>\n React.isValidElement(child) &&\n (child.type === MasonryItem || child.type === Item)\n );\n const itemCount = validChildren.length;\n\n const shortestColumnSize = context.positioner.shortestColumn();\n const measuredCount = context.positioner.size();\n const overscanPixels = context.windowHeight * context.overscan;\n // rangeStart: scrollTop minus half overscan buffer (items above viewport)\n const rangeStart = Math.max(0, context.scrollTop - overscanPixels / 2);\n // rangeEnd: scrollTop + viewport height + half overscan buffer (items below viewport)\n const rangeEnd =\n context.scrollTop + context.windowHeight + overscanPixels / 2;\n const layoutOutdated =\n shortestColumnSize < rangeEnd && measuredCount < itemCount;\n\n const positionedChildren: React.ReactElement[] = [];\n\n // Stable style for non-virtualized mode (doesn't change on scroll)\n const stableItemStyle = React.useMemo(\n (): React.CSSProperties => ({\n position: \"absolute\",\n writingMode: \"horizontal-tb\",\n visibility: \"visible\",\n width: context.columnWidth,\n }),\n [context.columnWidth]\n );\n\n // Style with scroll optimizations for virtualized mode\n const virtualizedItemStyle = React.useMemo(\n (): React.CSSProperties => ({\n position: \"absolute\",\n writingMode: \"horizontal-tb\",\n visibility: \"visible\",\n width: context.columnWidth,\n transform: context.isScrolling ? \"translateZ(0)\" : undefined,\n willChange: context.isScrolling ? \"transform\" : undefined,\n }),\n [context.columnWidth, context.isScrolling]\n );\n\n // Use stable style when not virtualized to prevent re-renders\n const visibleItemStyle = context.virtualize\n ? virtualizedItemStyle\n : stableItemStyle;\n\n const hiddenItemStyle = React.useMemo(\n (): React.CSSProperties => ({\n position: \"absolute\",\n writingMode: \"horizontal-tb\",\n visibility: \"hidden\",\n width: context.columnWidth,\n zIndex: -1000,\n }),\n [context.columnWidth]\n );\n\n // Track indices to load for lazy load mode\n const indicesToLoadRef = React.useRef<number[]>([]);\n\n // Non-virtualized mode\n if (!context.virtualize) {\n if (context.lazyLoad) {\n // Lazy load mode: render items in viewport + previously loaded items\n // First, ensure items in viewport range are measured\n if (measuredCount < itemCount && mounted) {\n // Calculate how many items to measure based on viewport\n const batchSize = Math.min(\n itemCount - measuredCount,\n Math.ceil(\n ((context.scrollTop + overscanPixels - shortestColumnSize) /\n context.itemHeight) *\n context.positioner.columnCount\n ) +\n context.positioner.columnCount * 2 // Extra buffer for initial load\n );\n\n for (\n let index = measuredCount;\n index < Math.max(measuredCount + batchSize, measuredCount + 1);\n index++\n ) {\n if (index >= itemCount) break;\n const child = validChildren[index];\n if (!child) continue;\n\n const itemStyle = {\n ...hiddenItemStyle,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n }\n }\n\n // Collect indices of items in current viewport range\n const newIndicesToLoad: number[] = [];\n\n // Render items that are in viewport OR have been previously loaded\n context.positioner.all().forEach((item, index) => {\n const child = validChildren[index];\n if (!child || !item) return;\n\n const itemBottom = item.top + (item.height ?? context.itemHeight);\n const isInViewport = itemBottom >= rangeStart && item.top <= rangeEnd;\n const wasLoaded = context.loadedIndices.has(index);\n\n if (isInViewport && !wasLoaded) {\n newIndicesToLoad.push(index);\n }\n\n // Render if in viewport or was previously loaded\n if (isInViewport || wasLoaded) {\n const itemStyle = {\n ...visibleItemStyle,\n top: item.top,\n left: item.left,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n }\n });\n\n // Store indices to load for effect\n indicesToLoadRef.current = newIndicesToLoad;\n } else {\n // Original non-virtualized mode: render all items\n // Ensure all items are measured first\n if (measuredCount < itemCount && mounted) {\n for (let index = measuredCount; index < itemCount; index++) {\n const child = validChildren[index];\n if (!child) continue;\n\n const itemStyle = {\n ...hiddenItemStyle,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n }\n }\n\n // Render all measured items\n context.positioner.all().forEach((item, index) => {\n const child = validChildren[index];\n if (!child || !item) return;\n\n const itemStyle = {\n ...visibleItemStyle,\n top: item.top,\n left: item.left,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n });\n }\n } else {\n // Virtualized mode: only render items in viewport\n context.positioner.range(rangeStart, rangeEnd, (index, left, top) => {\n const child = validChildren[index];\n if (!child) return;\n\n const itemStyle = {\n ...visibleItemStyle,\n top,\n left,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n\n if (stopIndex === undefined) {\n startIndex = index;\n stopIndex = index;\n } else {\n startIndex = Math.min(startIndex, index);\n stopIndex = Math.max(stopIndex, index);\n }\n });\n\n if (layoutOutdated && mounted) {\n const batchSize = Math.min(\n itemCount - measuredCount,\n Math.ceil(\n ((context.scrollTop + overscanPixels - shortestColumnSize) /\n context.itemHeight) *\n context.positioner.columnCount\n )\n );\n\n for (\n let index = measuredCount;\n index < measuredCount + batchSize;\n index++\n ) {\n const child = validChildren[index];\n if (!child) continue;\n\n const itemStyle = {\n ...hiddenItemStyle,\n ...child.props.style,\n };\n\n positionedChildren.push(\n React.cloneElement(child, {\n key: child.key ?? index,\n ref: context.onItemRegister(index),\n style: itemStyle,\n })\n );\n }\n }\n }\n\n // Trigger re-layout when items need to be measured\n const needsLayout = context.virtualize\n ? layoutOutdated && mounted\n : measuredCount < itemCount && mounted;\n\n React.useEffect(() => {\n if (needsLayout) {\n if (rafId.current) {\n cancelAnimationFrame(rafId.current);\n }\n rafId.current = requestAnimationFrame(() => {\n setLayoutVersion((v) => v + 1);\n });\n }\n return () => {\n if (rafId.current) {\n cancelAnimationFrame(rafId.current);\n }\n };\n }, [needsLayout]);\n\n // Update loaded indices for lazy load mode\n const {\n lazyLoad,\n updateLoadedIndices,\n scrollTop: contextScrollTop,\n } = context;\n React.useEffect(() => {\n if (lazyLoad && indicesToLoadRef.current.length > 0) {\n updateLoadedIndices(indicesToLoadRef.current);\n indicesToLoadRef.current = [];\n }\n }, [lazyLoad, updateLoadedIndices, contextScrollTop]);\n\n const estimatedHeight = React.useMemo(() => {\n const measuredHeight = context.positioner.estimateHeight(\n measuredCount,\n context.itemHeight\n );\n if (measuredCount === itemCount) {\n return measuredHeight;\n }\n const remainingItems = itemCount - measuredCount;\n const estimatedRemainingHeight = Math.ceil(\n (remainingItems / context.positioner.columnCount) * context.itemHeight\n );\n return measuredHeight + estimatedRemainingHeight;\n }, [context.positioner, context.itemHeight, measuredCount, itemCount]);\n\n // Stable container style for non-virtualized mode\n const stableContainerStyle = React.useMemo(\n () => ({\n position: \"relative\" as const,\n width: \"100%\",\n maxWidth: \"100%\",\n height: Math.ceil(estimatedHeight),\n maxHeight: Math.ceil(estimatedHeight),\n ...style,\n }),\n [estimatedHeight, style]\n );\n\n // Container style with scroll optimizations for virtualized mode\n const virtualizedContainerStyle = React.useMemo(\n () => ({\n position: \"relative\" as const,\n width: \"100%\",\n maxWidth: \"100%\",\n height: Math.ceil(estimatedHeight),\n maxHeight: Math.ceil(estimatedHeight),\n willChange: context.isScrolling ? \"contents\" : undefined,\n pointerEvents: context.isScrolling ? (\"none\" as const) : undefined,\n ...style,\n }),\n [context.isScrolling, estimatedHeight, style]\n );\n\n const containerStyle = context.virtualize\n ? virtualizedContainerStyle\n : stableContainerStyle;\n\n if (!mounted && context.fallback) {\n return context.fallback;\n }\n\n return (\n <div\n {...viewportProps}\n ref={ref}\n style={containerStyle}\n data-version={mounted ? layoutVersion : undefined}\n >\n {positionedChildren}\n </div>\n );\n}\n\ninterface MasonryItemProps extends DivProps {\n asChild?: boolean;\n}\n\nfunction MasonryItem(props: MasonryItemProps) {\n const { asChild, ref, ...itemProps } = props;\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return <ItemPrimitive data-slot=\"masonry-item\" {...itemProps} ref={ref} />;\n}\n\nconst Root = MasonryRoot;\nconst Item = MasonryItem;\n\nexport {\n MasonryRoot,\n MasonryItem,\n //\n Root,\n Item,\n};\nexport type { MasonryRootProps, MasonryItemProps };\n"],"names":["NODE_COLOR","NODE_OPERATION","addInterval","treeNode","high","index","node","prevNode","removeInterval","SENTINEL_NODE","updateMax","max","updateMaxUp","x","rotateLeft","tree","y","rotateRight","replaceNode","fixRemove","w","minimumTree","current","fixInsert","createIntervalTree","indexMap","low","z","intervalResult","originalYColor","onCallback","stack","curr","onDeepMemo","constructors","fn","createCache","obj","cache","k","v","depth","baseCache","base","map","i","one","get","args","key","next","set","value","nextConstructor","cached","COLUMN_WIDTH","GAP","ITEM_HEIGHT","OVERSCAN","SCROLL_FPS","DEBOUNCE_DELAY","usePositioner","width","columnWidth","columnGap","rowGap","columnCount","maxColumnCount","linear","deps","initPositioner","React","binarySearch","a","l","h","m","computedColumnCount","computedColumnWidth","intervalTree","columnHeights","items","columnItems","height","columnIndex","preferredColumn","shortestHeight","shortestIndex","currentHeight","preferredHeight","maxAllowedHeight","columnHeight","top","columnItemsList","updates","columns","j","currentIndex","item","nextHeight","currentColumn","itemsInColumn","startIndex","currentItemIndex","startItem","onItemRender","itemCount","defaultItemHeight","tallestColumn","positionerRef","prevDepsRef","opts","prevOptsRef","optsChanged","prevPositioner","positioner","cacheSize","pos","useDebouncedWindowSize","options","containerRef","defaultWidth","defaultHeight","delayMs","getDocumentSize","size","setSize","timeoutRef","setDebouncedSize","onResize","onRafSchedule","callback","useResizeObserver","setLayoutVersion","resizeObserver","onUpdate","itemMap","scheduledItemMap","onResizeObserver","entries","entry","handler","observer","disconnect","scheduleItem","prev","useScroller","offset","fps","scrollY","setScrollY","useThrottle","onScroll","isScrolling","setIsScrolling","hasMountedRef","didUnsubscribe","requestTimeout","delay","start","handle","tick","timestamp","timeout","initialState","leading","state","setState","latestSetState","ms","prevCountRef","trailingTimeout","clearTrailing","throttledSetState","action","perf","rightNow","call","ROOT_NAME","VIEWPORT_NAME","ITEM_NAME","MASONRY_ERROR","MasonryContext","useMasonryContext","name","context","useIsomorphicLayoutEffect","MasonryRoot","props","gap","itemHeight","overscan","scrollFps","fallback","virtualize","lazyLoad","asChild","children","style","ref","rootProps","gapValue","composedRef","useComposedRefs","containerPosition","setContainerPosition","container","scrollTop","loadedIndicesRef","loadedIndices","setLoadedIndices","effectiveLazyLoad","onItemRegister","updateLoadedIndices","indices","hasNew","contextValue","RootPrimitive","Slot","jsx","MasonryViewport","viewportProps","layoutVersion","rafId","mounted","setMounted","validChildren","child","MasonryItem","Item","shortestColumnSize","measuredCount","overscanPixels","rangeStart","rangeEnd","layoutOutdated","positionedChildren","stableItemStyle","virtualizedItemStyle","visibleItemStyle","hiddenItemStyle","indicesToLoadRef","left","itemStyle","batchSize","newIndicesToLoad","isInViewport","wasLoaded","needsLayout","contextScrollTop","estimatedHeight","measuredHeight","remainingItems","estimatedRemainingHeight","stableContainerStyle","virtualizedContainerStyle","containerStyle","itemProps","ItemPrimitive","Root"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MasonryWrapper.cjs","sources":["../../../../src/components/Masonry/MasonryWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n MasonryRoot,\n MasonryItem,\n type MasonryRootProps,\n type MasonryItemProps,\n} from \"./Masonry\";\n\n/* -------------------------------------------------------------------------------------------------\n * Masonry - Unified wrapper component supporting both declarative and data-driven usage\n * -----------------------------------------------------------------------------------------------*/\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype MasonryItemData = any;\n\ninterface MasonryProps<T = MasonryItemData>\n extends Omit<MasonryRootProps, \"children\"> {\n /**\n * Array of items to render in the masonry grid (data-driven mode)\n * If provided, `renderItem` should also be provided\n */\n items?: T[];\n /**\n * Custom render function for each item (data-driven mode)\n * @param item - The item data\n * @param index - The index of the item\n */\n renderItem?: (_item: T, _index: number) => React.ReactNode;\n /**\n * Children elements (declarative mode)\n * Use `<Masonry.Item>` components as children\n */\n children?: React.ReactNode;\n}\n\nfunction MasonryComponent<T = MasonryItemData>(props: MasonryProps<T>) {\n const { items, renderItem, children, ...rootProps } = props;\n\n // Data-driven mode: render items using renderItem function\n if (items && items.length > 0) {\n return (\n <MasonryRoot {...rootProps}>\n {items.map((item, index) => {\n const key =\n typeof item === \"object\" && item !== null && \"id\" in item\n ? String((item as { id: unknown }).id)\n : index;\n return (\n <MasonryItem key={key}>\n {renderItem ? renderItem(item, index) : null}\n </MasonryItem>\n );\n })}\n </MasonryRoot>\n );\n }\n\n // Declarative mode: render children directly\n return <MasonryRoot {...rootProps}>{children}</MasonryRoot>;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Exports\n * -----------------------------------------------------------------------------------------------*/\n\n// Re-export MasonryItem as Item for Masonry.Item usage\nconst Masonry = Object.assign(MasonryComponent, {\n Item: MasonryItem,\n Root: MasonryRoot,\n});\n\nexport { Masonry, MasonryComponent };\nexport type { MasonryProps, MasonryItemProps };\n"],"names":["MasonryComponent","props","items","renderItem","children","rootProps","jsx","MasonryRoot","item","index","key","MasonryItem","Masonry"],"mappings":"uKAqCA,SAASA,EAAsCC,EAAwB,CACrE,KAAM,CAAE,MAAAC,EAAO,WAAAC,EAAY,SAAAC,EAAU,GAAGC,GAAcJ,EAGtD,OAAIC,GAASA,EAAM,OAAS,EAExBI,EAAAA,IAACC,eAAa,GAAGF,EACd,WAAM,IAAI,CAACG,EAAMC,IAAU,CAC1B,MAAMC,EACJ,OAAOF,GAAS,UAAYA,IAAS,MAAQ,OAAQA,EACjD,OAAQA,EAAyB,EAAE,EACnCC,EACN,OACEH,MAACK,EAAAA,aACE,SAAAR,EAAaA,EAAWK,EAAMC,CAAK,EAAI,MADxBC,CAElB,CAEJ,CAAC,CAAA,CACH,EAKGJ,EAAAA,IAACC,EAAAA,YAAA,CAAa,GAAGF,EAAY,SAAAD,CAAA,CAAS,CAC/C,CAOA,MAAMQ,EAAU,OAAO,OAAOZ,EAAkB,CAC9C,KAAMW,EAAAA,YACN,KAAMJ,EAAAA,WACR,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Pagination.cjs","sources":["../../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Pagination as SPagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"@dsui/ui/components/pagination\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { ButtonAnimation } from \"@/types/variables\";\nimport { animationEffect } from \"@/utils/animations\";\nimport { ChevronsLeft, ChevronsRight, MoreHorizontalIcon } from \"lucide-react\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@dsui/ui/components/popover\";\nimport {\n Command,\n CommandInput,\n CommandList,\n CommandItem,\n} from \"@dsui/ui/components/command\";\nimport type { Button } from \"../Button\";\n\ntype PaginationItemType =\n | number\n | \"...\"\n | { page: number; isActive?: boolean; disabled?: boolean };\n\ntype PaginationWrapperProps = React.ComponentProps<typeof SPagination> & {\n animation?: ButtonAnimation;\n total?: number;\n currentPage?: number;\n onPageChange?: (page: number) => void;\n showPreviousNext?: boolean;\n maxPages?: number; // số pages hiển thị\n previousText?: string | boolean;\n nextText?: string | boolean;\n jumpOnEllipsis?: boolean; // khi hover vào ellipsis thì hiện thành nút next/previous\n jumpType?: \"jump\" | \"select\"; // jump type for ellipsis interaction\n} & Pick<React.ComponentProps<typeof Button>, \"size\" | \"color\">;\n\ntype AnimResult = {\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n};\n\nconst generatePages = (\n total: number,\n currentPage: number,\n maxPages: number\n): PaginationItemType[] => {\n if (total <= maxPages) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: PaginationItemType[] = [];\n const halfSize = Math.floor(maxPages / 2);\n let start = Math.max(1, currentPage - halfSize);\n const end = Math.min(total, start + maxPages - 1);\n\n if (end - start + 1 < maxPages) {\n start = Math.max(1, end - maxPages + 1);\n }\n\n // Add first page and ellipsis if needed\n if (start > 1) {\n pages.push(1);\n if (start > 2) {\n pages.push(\"...\");\n }\n }\n\n // Add middle pages\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n // Add ellipsis and last page if needed\n if (end < total) {\n if (end < total - 1) {\n pages.push(\"...\");\n }\n pages.push(total);\n }\n\n return pages;\n};\n\nconst PaginationEllipsisWithJump = ({\n position,\n onJumpPrevious,\n onJumpNext,\n color,\n size,\n previousText,\n nextText,\n jumpType = \"jump\",\n total,\n onPageChange,\n}: {\n position: \"before\" | \"after\";\n onJumpPrevious?: () => void;\n onJumpNext?: () => void;\n color?: PaginationWrapperProps[\"color\"];\n size?: PaginationWrapperProps[\"size\"];\n previousText?: React.ReactNode;\n nextText?: React.ReactNode;\n jumpType?: \"jump\" | \"select\";\n total?: number;\n onPageChange?: (page: number) => void;\n}) => {\n const [popoverOpen, setPopoverOpen] = React.useState(false);\n\n if (jumpType === \"select\") {\n return (\n <Popover open={popoverOpen} onOpenChange={setPopoverOpen}>\n <PopoverTrigger asChild>\n <PaginationItem>\n <PaginationEllipsis size={size} color={color} />\n </PaginationItem>\n </PopoverTrigger>\n <PopoverContent className=\"ds:w-40 ds:p-0\">\n <Command>\n <CommandInput placeholder=\"Search pages...\" />\n <CommandList>\n {total &&\n Array.from({ length: total }, (_, i) => i + 1).map((page) => (\n <CommandItem\n key={page}\n onSelect={() => {\n onPageChange?.(page);\n setPopoverOpen(false);\n }}\n >\n Page {page}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <PaginationItem className=\"ds:group\">\n {position === \"before\" ? (\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onJumpPrevious?.();\n }}\n color={color}\n size={size}\n hideIcon\n className=\"ds:peer\"\n >\n <span className=\"ds:hidden ds:group-hover:block ds:leading-none\">\n {previousText}\n </span>\n <MoreHorizontalIcon className=\"ds:group-hover:hidden ds:cursor-pointer\" />\n </PaginationPrevious>\n ) : (\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n onJumpNext?.();\n }}\n color={color}\n size={size}\n hideIcon\n >\n <span className=\"ds:hidden ds:group-hover:block ds:leading-none\">\n {nextText}\n </span>\n <MoreHorizontalIcon className=\"ds:group-hover:hidden ds:cursor-pointer\" />\n </PaginationNext>\n )}\n </PaginationItem>\n );\n};\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationWrapperProps>(\n (\n {\n className,\n animation,\n total,\n currentPage = 1,\n onPageChange,\n showPreviousNext = true,\n color = \"muted\",\n size,\n maxPages = 5,\n previousText,\n nextText,\n jumpOnEllipsis = false,\n jumpType = \"jump\",\n children,\n ...props\n },\n ref\n ) => {\n const paginationAnimation = React.useMemo<AnimResult | null>(() => {\n if (!animation) return null;\n return animationEffect<ButtonAnimation, string | undefined>({\n animation,\n children,\n className,\n rootClassName: \"\",\n variantType: undefined,\n ...props,\n });\n }, [animation, props, className, children]);\n\n const getPreviousText = () => {\n if (previousText === false) return false;\n if (previousText === true) return \"Previous\";\n return previousText;\n };\n\n const getNextText = () => {\n if (nextText === false) return false;\n if (nextText === true) return \"Next\";\n return nextText;\n };\n\n const handleJumpPrevious = () => {\n const newPage = Math.max(1, currentPage - maxPages);\n onPageChange?.(newPage);\n };\n\n const handleJumpNext = () => {\n const newPage = Math.min(total!, currentPage + maxPages);\n onPageChange?.(newPage);\n };\n\n const renderItems = () => {\n if (!total) return children;\n\n const pages = generatePages(total, currentPage, maxPages);\n\n return (\n <PaginationContent>\n {showPreviousNext && (\n <PaginationItem className=\"ds:flex ds:justify-center\">\n <PaginationPrevious\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (currentPage > 1) onPageChange?.(currentPage - 1);\n }}\n color={color}\n size={size}\n >\n {getPreviousText()}\n </PaginationPrevious>\n </PaginationItem>\n )}\n {pages.map((item, index) => {\n if (item === \"...\") {\n if (jumpOnEllipsis) {\n // Determine if this ellipsis is before or after the active page\n const ellipsisIndex = index;\n const activePageIndex = pages.findIndex(\n (page) => typeof page === \"number\" && page === currentPage\n );\n const position =\n ellipsisIndex < activePageIndex ? \"before\" : \"after\";\n\n return (\n <PaginationEllipsisWithJump\n key={`ellipsis-${index}`}\n position={position}\n onJumpPrevious={handleJumpPrevious}\n onJumpNext={handleJumpNext}\n color={color}\n size={size}\n previousText={<ChevronsLeft />}\n nextText={<ChevronsRight />}\n jumpType={jumpType}\n total={total}\n onPageChange={onPageChange}\n />\n );\n }\n return (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis size={size} color={color} />\n </PaginationItem>\n );\n }\n\n const page = item as number;\n const isActive = page === currentPage;\n\n return (\n <PaginationItem key={page}>\n <PaginationLink\n href=\"#\"\n isActive={isActive}\n onClick={(e) => {\n e.preventDefault();\n onPageChange?.(page);\n }}\n color={color}\n size={size}\n >\n {page}\n </PaginationLink>\n </PaginationItem>\n );\n })}\n {showPreviousNext && (\n <PaginationItem className=\"ds:flex ds:justify-center\">\n <PaginationNext\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n if (currentPage < total) onPageChange?.(currentPage + 1);\n }}\n color={color}\n size={size}\n >\n {getNextText()}\n </PaginationNext>\n </PaginationItem>\n )}\n </PaginationContent>\n );\n };\n\n return (\n <SPagination\n ref={ref}\n className={cn(className, paginationAnimation?.className)}\n style={{\n ...(props.style || {}),\n ...(paginationAnimation?.style || {}),\n }}\n {...props}\n >\n {paginationAnimation?.children ?? renderItems()}\n </SPagination>\n );\n }\n);\n\nPagination.displayName = \"Pagination\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n type PaginationWrapperProps,\n type PaginationItemType,\n};\n"],"names":["generatePages","total","currentPage","maxPages","_","i","pages","halfSize","start","end","PaginationEllipsisWithJump","position","onJumpPrevious","onJumpNext","color","size","previousText","nextText","jumpType","onPageChange","popoverOpen","setPopoverOpen","React","jsxs","Popover","jsx","PopoverTrigger","PaginationItem","PaginationEllipsis","PopoverContent","Command","CommandInput","CommandList","page","CommandItem","PaginationPrevious","e","MoreHorizontalIcon","PaginationNext","Pagination","className","animation","showPreviousNext","jumpOnEllipsis","children","props","ref","paginationAnimation","animationEffect","getPreviousText","getNextText","handleJumpPrevious","newPage","handleJumpNext","renderItems","PaginationContent","item","index","ellipsisIndex","activePageIndex","ChevronsLeft","ChevronsRight","isActive","PaginationLink","SPagination","cn"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Pagination/index.ts"],"sourcesContent":["import {\n Pagination as PaginationWrapper,\n PaginationContent,\n PaginationItem,\n PaginationLink,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n type PaginationWrapperProps,\n type PaginationItemType,\n} from \"./Pagination\";\n\nconst Pagination = Object.assign(PaginationWrapper, {\n Content: PaginationContent,\n Item: PaginationItem,\n Link: PaginationLink,\n Previous: PaginationPrevious,\n Next: PaginationNext,\n Ellipsis: PaginationEllipsis,\n});\n\nexport { Pagination, type PaginationWrapperProps, type PaginationItemType };\n"],"names":["Pagination","PaginationWrapper","PaginationContent","PaginationItem","PaginationLink","PaginationPrevious","PaginationNext","PaginationEllipsis"],"mappings":"iLAYMA,EAAa,OAAO,OAAOC,aAAmB,CAClD,QAASC,EAAAA,kBACT,KAAMC,EAAAA,eACN,KAAMC,EAAAA,eACN,SAAUC,EAAAA,mBACV,KAAMC,EAAAA,eACN,SAAUC,EAAAA,kBACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Popover.cjs","sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Popover as SPopover,\n PopoverTrigger as SPopoverTrigger,\n PopoverContent as SPopoverContent,\n} from \"@dsui/ui/components/popover\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport type PopoverSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\nexport interface PopoverProps {\n // Core props\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n modal?: boolean;\n\n // Content\n children?: React.ReactNode;\n trigger?: React.ReactNode;\n content?: React.ReactNode;\n\n // Layout\n side?: PopoverSide;\n align?: PopoverAlign;\n sideOffset?: number;\n alignOffset?: number;\n\n // Styling\n className?: string;\n contentClassName?: string;\n triggerClassName?: string;\n}\n\nconst Popover = React.forwardRef<HTMLDivElement, PopoverProps>((props, ref) => {\n const {\n open,\n defaultOpen,\n onOpenChange,\n modal = false,\n children,\n trigger,\n content,\n side = \"bottom\",\n align = \"center\",\n sideOffset = 4,\n alignOffset,\n className,\n contentClassName,\n triggerClassName,\n } = props;\n\n // If children are provided (compound pattern), render them directly\n // if (children) {\n // return (\n // <SPopover\n // open={open}\n // defaultOpen={defaultOpen}\n // onOpenChange={onOpenChange}\n // modal={modal}\n // >\n // {children}\n // </SPopover>\n // );\n // }\n\n // Fallback to props-based pattern\n const triggerElement = trigger || children;\n\n return (\n <SPopover\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {triggerElement && (\n <SPopoverTrigger asChild className={cn(triggerClassName)}>\n {triggerElement}\n </SPopoverTrigger>\n )}\n <SPopoverContent\n ref={ref}\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className={cn(className, contentClassName)}\n >\n {content}\n </SPopoverContent>\n </SPopover>\n );\n});\n\nPopover.displayName = \"Popover\";\n\nexport default Popover;\n"],"names":["Popover","React","props","ref","open","defaultOpen","onOpenChange","modal","children","trigger","content","side","align","sideOffset","alignOffset","className","contentClassName","triggerClassName","triggerElement","jsxs","SPopover","jsx","SPopoverTrigger","cn","SPopoverContent"],"mappings":"+QAmCMA,EAAUC,EAAM,WAAyC,CAACC,EAAOC,IAAQ,CAC7E,KAAM,CACJ,KAAAC,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,GACR,SAAAC,EACA,QAAAC,EACA,QAAAC,EACA,KAAAC,EAAO,SACP,MAAAC,EAAQ,SACR,WAAAC,EAAa,EACb,YAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,iBAAAC,CAAA,EACEf,EAiBEgB,EAAiBT,GAAWD,EAElC,OACEW,EAAAA,KAACC,EAAAA,QAAA,CACC,KAAAhB,EACA,YAAAC,EACA,aAAAC,EACA,MAAAC,EAEC,SAAA,CAAAW,GACCG,EAAAA,IAACC,kBAAgB,QAAO,GAAC,UAAWC,EAAAA,GAAGN,CAAgB,EACpD,SAAAC,CAAA,CACH,EAEFG,EAAAA,IAACG,EAAAA,eAAA,CACC,IAAArB,EACA,KAAAQ,EACA,MAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAWS,EAAAA,GAAGR,EAAWC,CAAgB,EAExC,SAAAN,CAAA,CAAA,CACH,CAAA,CAAA,CAGN,CAAC,EAEDV,EAAQ,YAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Popover/index.ts"],"sourcesContent":["import PopoverWrapper, { type PopoverProps } from \"./Popover\";\n// import { PopoverTrigger, PopoverContent } from \"@dsui/ui/components/popover\";\n\nconst Popover = Object.assign(PopoverWrapper, {\n // Trigger: PopoverTrigger,\n // Content: PopoverContent,\n});\n\nexport { Popover };\nexport type { PopoverProps };\n"],"names":["Popover","PopoverWrapper"],"mappings":"iHAGMA,EAAU,OAAO,OAAOC,UAAgB,CAG9C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"QrCode.cjs","sources":["../../../../src/components/QrCode/QrCode.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"QRCode\";\nconst CANVAS_NAME = \"QRCodeCanvas\";\nconst SVG_NAME = \"QRCodeSvg\";\nconst IMAGE_NAME = \"QRCodeImage\";\nconst SKELETON_NAME = \"QRCodeSkeleton\";\n\ntype QRCodeLevel = \"L\" | \"M\" | \"Q\" | \"H\";\n\ninterface QRCodeCanvasOpts {\n errorCorrectionLevel: QRCodeLevel;\n type?: \"image/png\" | \"image/jpeg\" | \"image/webp\";\n quality?: number;\n margin?: number;\n color?: {\n dark: string;\n light: string;\n };\n width?: number;\n rendererOpts?: {\n quality?: number;\n };\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\ninterface StoreState {\n dataUrl: string | null;\n svgString: string | null;\n isGenerating: boolean;\n error: Error | null;\n generationKey: string;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;\n setStates: (updates: Partial<StoreState>) => void;\n notify: () => void;\n}\n\ninterface QRCodeContextValue {\n value: string;\n size: number;\n margin: number;\n level: QRCodeLevel;\n backgroundColor: string;\n foregroundColor: string;\n canvasRef: React.RefObject<HTMLCanvasElement | null>;\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = React.useContext(StoreContext);\n if (!store) {\n throw new Error(`\\`useQRCode\\` must be used within \\`${ROOT_NAME}\\``);\n }\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\nconst QRCodeContext = React.createContext<QRCodeContextValue | null>(null);\n\nfunction useQRCodeContext(consumerName: string) {\n const context = React.useContext(QRCodeContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface QRCodeRootProps extends Omit<React.ComponentProps<\"div\">, \"onError\"> {\n value: string;\n size?: number;\n level?: QRCodeLevel;\n margin?: number;\n quality?: number;\n backgroundColor?: string;\n foregroundColor?: string;\n onError?: (error: Error) => void;\n onGenerated?: () => void;\n asChild?: boolean;\n}\n\nfunction QRCodeRoot(props: QRCodeRootProps) {\n const {\n value,\n size = 200,\n level = \"M\",\n margin = 1,\n quality = 0.92,\n backgroundColor = \"#ffffff\",\n foregroundColor = \"#000000\",\n onError,\n onGenerated,\n className,\n style,\n asChild,\n ...rootProps\n } = props;\n\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n dataUrl: null,\n svgString: null,\n isGenerating: false,\n error: null,\n generationKey: \"\",\n }));\n\n const store = React.useMemo<Store>(() => {\n return {\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n stateRef.current[key] = value;\n store.notify();\n },\n setStates: (updates) => {\n let hasChanged = false;\n\n for (const key of Object.keys(updates) as Array<keyof StoreState>) {\n const value = updates[key];\n if (value !== undefined && !Object.is(stateRef.current[key], value)) {\n Object.assign(stateRef.current, { [key]: value });\n hasChanged = true;\n }\n }\n\n if (hasChanged) {\n store.notify();\n }\n },\n notify: () => {\n for (const cb of listenersRef.current) {\n cb();\n }\n },\n };\n }, [listenersRef, stateRef]);\n\n const canvasOpts = React.useMemo<QRCodeCanvasOpts>(\n () => ({\n errorCorrectionLevel: level,\n type: \"image/png\",\n quality,\n margin,\n color: {\n dark: foregroundColor,\n light: backgroundColor,\n },\n width: size,\n }),\n [level, margin, foregroundColor, backgroundColor, size, quality]\n );\n\n const generationKey = React.useMemo(() => {\n if (!value) return \"\";\n\n return JSON.stringify({\n value,\n size,\n level,\n margin,\n quality,\n foregroundColor,\n backgroundColor,\n });\n }, [value, level, margin, foregroundColor, backgroundColor, size, quality]);\n\n const onQRCodeGenerate = React.useCallback(\n async (targetGenerationKey: string) => {\n if (!value || !targetGenerationKey) return;\n\n const currentState = store.getState();\n if (\n currentState.isGenerating ||\n currentState.generationKey === targetGenerationKey\n )\n return;\n\n store.setStates({\n isGenerating: true,\n error: null,\n });\n\n try {\n const QRCode = (await import(\"qrcode\")).default;\n\n let dataUrl: string | null = null;\n\n try {\n dataUrl = await QRCode.toDataURL(value, canvasOpts);\n } catch {\n dataUrl = null;\n }\n\n if (canvasRef.current) {\n await QRCode.toCanvas(canvasRef.current, value, canvasOpts);\n }\n\n const svgString = await QRCode.toString(value, {\n errorCorrectionLevel: canvasOpts.errorCorrectionLevel,\n margin: canvasOpts.margin,\n color: canvasOpts.color,\n width: canvasOpts.width,\n type: \"svg\",\n });\n\n store.setStates({\n dataUrl,\n svgString,\n isGenerating: false,\n generationKey: targetGenerationKey,\n });\n\n onGenerated?.();\n } catch (error) {\n const parsedError =\n error instanceof Error\n ? error\n : new Error(\"Failed to generate QR code\");\n store.setStates({\n error: parsedError,\n isGenerating: false,\n });\n onError?.(parsedError);\n }\n },\n [value, canvasOpts, store, onError, onGenerated]\n );\n\n const contextValue = React.useMemo<QRCodeContextValue>(\n () => ({\n value,\n size,\n level,\n margin,\n backgroundColor,\n foregroundColor,\n canvasRef,\n }),\n [value, size, backgroundColor, foregroundColor, level, margin]\n );\n\n React.useLayoutEffect(() => {\n if (generationKey) {\n const rafId = requestAnimationFrame(() => {\n onQRCodeGenerate(generationKey);\n });\n\n return () => cancelAnimationFrame(rafId);\n }\n }, [generationKey, onQRCodeGenerate]);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <QRCodeContext.Provider value={contextValue}>\n <RootPrimitive\n data-slot=\"qr-code\"\n {...rootProps}\n className={cn(className, \"ds:relative ds:flex ds:flex-col ds:items-center ds:gap-2\")}\n style={\n {\n \"--qr-code-size\": `${size}px`,\n ...style,\n } as React.CSSProperties\n }\n >\n {rootProps?.children ? rootProps.children : <QRCodeCanvas />}\n </RootPrimitive>\n </QRCodeContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface QRCodeCanvasProps extends React.ComponentProps<\"canvas\"> {\n asChild?: boolean;\n}\n\nfunction QRCodeCanvas(props: QRCodeCanvasProps) {\n const { asChild, className, ref, ...canvasProps } = props;\n\n const context = useQRCodeContext(CANVAS_NAME);\n const generationKey = useStore((state) => state.generationKey);\n\n const composedRef = useComposedRefs(ref, context.canvasRef);\n\n const CanvasPrimitive = asChild ? Slot : \"canvas\";\n\n return (\n <CanvasPrimitive\n data-slot=\"qr-code-canvas\"\n {...canvasProps}\n ref={composedRef}\n width={context.size}\n height={context.size}\n className={cn(\n \"ds:relative ds:max-h-(--qr-code-size) ds:max-w-(--qr-code-size)\",\n !generationKey && \"ds:invisible\",\n className\n )}\n />\n );\n}\n\ninterface QRCodeSvgProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nfunction QRCodeSvg(props: QRCodeSvgProps) {\n const { asChild, className, style, ...svgProps } = props;\n\n const context = useQRCodeContext(SVG_NAME);\n const svgString = useStore((state) => state.svgString);\n\n if (!svgString) return null;\n\n const SvgPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SvgPrimitive\n data-slot=\"qr-code-svg\"\n {...svgProps}\n className={cn(\n \"ds:relative ds:max-h-(--qr-code-size) ds:max-w-(--qr-code-size)\",\n className\n )}\n style={{ width: context.size, height: context.size, ...style }}\n dangerouslySetInnerHTML={{ __html: svgString }}\n />\n );\n}\n\ninterface QRCodeImageProps extends React.ComponentProps<\"img\"> {\n asChild?: boolean;\n}\n\nfunction QRCodeImage(props: QRCodeImageProps) {\n const { alt = \"QR Code\", asChild, className, ...imageProps } = props;\n\n const context = useQRCodeContext(IMAGE_NAME);\n const dataUrl = useStore((state) => state.dataUrl);\n\n if (!dataUrl) return null;\n\n const ImagePrimitive = asChild ? Slot : \"img\";\n\n return (\n <ImagePrimitive\n data-slot=\"qr-code-image\"\n {...imageProps}\n src={dataUrl}\n alt={alt}\n width={context.size}\n height={context.size}\n className={cn(\n \"ds:relative ds:max-h-(--qr-code-size) ds:max-w-(--qr-code-size)\",\n className\n )}\n />\n );\n}\n\ninterface QRCodeDownloadProps extends React.ComponentProps<\"button\"> {\n filename?: string;\n format?: \"png\" | \"svg\";\n asChild?: boolean;\n}\n\nfunction QRCodeDownload(props: QRCodeDownloadProps) {\n const {\n filename = \"qrcode\",\n format = \"png\",\n asChild,\n className,\n children,\n ...buttonProps\n } = props;\n\n const dataUrl = useStore((state) => state.dataUrl);\n const svgString = useStore((state) => state.svgString);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n buttonProps.onClick?.(event);\n if (event.defaultPrevented) return;\n\n const link = document.createElement(\"a\");\n\n if (format === \"png\" && dataUrl) {\n link.href = dataUrl;\n link.download = `${filename}.png`;\n } else if (format === \"svg\" && svgString) {\n const blob = new Blob([svgString], { type: \"image/svg+xml\" });\n link.href = URL.createObjectURL(blob);\n link.download = `${filename}.svg`;\n } else {\n return;\n }\n\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n\n if (format === \"svg\" && svgString) {\n URL.revokeObjectURL(link.href);\n }\n },\n [dataUrl, svgString, filename, format, buttonProps.onClick]\n );\n\n const ButtonPrimitive = asChild ? Slot : \"button\";\n\n return (\n <ButtonPrimitive\n type=\"button\"\n data-slot=\"qr-code-download\"\n {...buttonProps}\n className={cn(\"ds:max-w-(--qr-code-size)\", className)}\n onClick={onClick}\n >\n {children ?? `Download ${format.toUpperCase()}`}\n </ButtonPrimitive>\n );\n}\n\ninterface QRCodeOverlayProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nfunction QRCodeOverlay(props: QRCodeOverlayProps) {\n const { asChild, className, ...overlayProps } = props;\n\n const OverlayPrimitive = asChild ? Slot : \"div\";\n\n return (\n <OverlayPrimitive\n data-slot=\"qr-code-overlay\"\n {...overlayProps}\n className={cn(\n \"ds:-translate-x-1/2 ds:-translate-y-1/2 ds:absolute ds:top-1/2 ds:left-1/2 ds:flex ds:items-center ds:justify-center ds:rounded-sm ds:bg-background\",\n className\n )}\n />\n );\n}\n\ninterface QRCodeSkeletonProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nfunction QRCodeSkeleton(props: QRCodeSkeletonProps) {\n const { asChild, className, style, ...skeletonProps } = props;\n\n const context = useQRCodeContext(SKELETON_NAME);\n const dataUrl = useStore((state) => state.dataUrl);\n const svgString = useStore((state) => state.svgString);\n const generationKey = useStore((state) => state.generationKey);\n\n const isLoaded = dataUrl || svgString || generationKey;\n\n if (isLoaded) return null;\n\n const SkeletonPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SkeletonPrimitive\n data-slot=\"qr-code-skeleton\"\n {...skeletonProps}\n className={cn(\n \"ds:absolute ds:max-h-(--qr-code-size) ds:max-w-(--qr-code-size) ds:animate-pulse ds:bg-accent\",\n className\n )}\n style={{\n width: context.size,\n height: context.size,\n ...style,\n }}\n />\n );\n}\n\nexport {\n QRCodeRoot as Root,\n QRCodeCanvas as Canvas,\n QRCodeSvg as Svg,\n QRCodeImage as Image,\n QRCodeOverlay as Overlay,\n QRCodeSkeleton as Skeleton,\n QRCodeDownload as Download,\n //\n QRCodeRoot as QRCode,\n QRCodeCanvas,\n QRCodeSvg,\n QRCodeImage,\n QRCodeOverlay,\n QRCodeSkeleton,\n QRCodeDownload,\n //\n useStore as useQRCode,\n //\n type QRCodeRootProps as QRCodeProps,\n};\n"],"names":["ROOT_NAME","CANVAS_NAME","SVG_NAME","IMAGE_NAME","SKELETON_NAME","useLazyRef","fn","ref","React","StoreContext","useStore","selector","store","getSnapshot","QRCodeContext","useQRCodeContext","consumerName","context","QRCodeRoot","props","value","size","level","margin","quality","backgroundColor","foregroundColor","onError","onGenerated","className","style","asChild","rootProps","canvasRef","listenersRef","stateRef","cb","key","updates","hasChanged","canvasOpts","generationKey","onQRCodeGenerate","targetGenerationKey","currentState","QRCode","dataUrl","svgString","error","parsedError","contextValue","rafId","RootPrimitive","Slot","jsx","cn","QRCodeCanvas","canvasProps","state","composedRef","useComposedRefs","CanvasPrimitive","QRCodeSvg","svgProps","SvgPrimitive","QRCodeImage","alt","imageProps","ImagePrimitive","QRCodeDownload","filename","format","children","buttonProps","onClick","event","link","blob","ButtonPrimitive","QRCodeOverlay","overlayProps","OverlayPrimitive","QRCodeSkeleton","skeletonProps","SkeletonPrimitive"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/QrCode/index.ts"],"sourcesContent":["import {\n Root,\n Canvas,\n Svg,\n Image,\n Overlay,\n Skeleton,\n Download,\n useQRCode,\n type QRCodeProps,\n} from \"./QrCode\";\n\nconst QRCode = Object.assign(Root, {\n Canvas,\n Svg,\n Image,\n Overlay,\n Skeleton,\n Download,\n});\n\nexport { QRCode, QRCode as QrCode };\n\n// Export hook và type\nexport { useQRCode };\nexport type { QRCodeProps };\n"],"names":["QRCode","Root","Canvas","Svg","Image","Overlay","Skeleton","Download"],"mappings":"gHAYMA,EAAS,OAAO,OAAOC,OAAM,CAAA,OACjCC,EAAAA,OAAA,IACAC,EAAAA,IAAA,MACAC,EAAAA,MAAA,QACAC,EAAAA,QAAA,SACAC,EAAAA,SAAA,SACAC,EAAAA,QACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Radio.cjs","sources":["../../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n RadioGroupItem as SRadioGroupItem,\n RadioGroup as SRadioGroup,\n type RadioGroupProps,\n type RadioGroupItemProps,\n} from \"@dsui/ui/components/radio-group\";\nimport { cn } from \"@dsui/ui/index\";\n\nexport type RadioItemProps = RadioGroupItemProps & {\n label?: React.ReactNode;\n variant?: \"option\" | \"button-group\";\n size?: \"default\" | \"sm\" | \"lg\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n rootClassName?: string;\n};\n\nconst RadioItem = React.forwardRef<HTMLButtonElement, RadioItemProps>(\n (props, ref) => {\n const { label, variant = \"option\", rootClassName, ...itemProps } = props;\n const id = React.useId();\n\n return (\n <div className={cn(\"ds:flex ds:items-center ds:space-x-2\", rootClassName)}>\n <SRadioGroupItem ref={ref} id={id} {...itemProps} />\n {variant === \"option\" && label && (\n <label\n htmlFor={id}\n className=\"ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n {label}\n </label>\n )}\n {variant === \"button-group\" && label && (\n <span className=\"ds:sr-only\">{label}</span>\n )}\n </div>\n );\n }\n);\n\nRadioItem.displayName = \"RadioItem\";\n\nexport type RadioProps = {\n options?: Array<{\n label: React.ReactNode;\n value: string;\n disabled?: boolean;\n }>;\n label?: React.ReactNode;\n helperText?: React.ReactNode;\n variant?: \"option\" | \"button-group\";\n size?: \"default\" | \"sm\" | \"lg\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n value?: string;\n onValueChange?: (value: string) => void;\n children?: React.ReactNode;\n className?: string;\n rootClassName?: string;\n disabled?: boolean;\n} & RadioGroupProps;\n\nconst Radio = React.forwardRef<HTMLDivElement, RadioProps>((props, ref) => {\n const {\n options,\n label,\n helperText,\n variant = \"option\",\n size = \"default\",\n color,\n value,\n onValueChange,\n children,\n className,\n rootClassName,\n disabled,\n } = props;\n\n return (\n <div className={cn(\"ds:flex ds:flex-col ds:gap-1.5\", rootClassName)}>\n {label && <label className=\"ds:text-sm ds:font-medium\">{label}</label>}\n\n <SRadioGroup\n ref={ref}\n value={value}\n onValueChange={onValueChange}\n variant={variant}\n className={cn(className)}\n >\n {options &&\n options.map((option) => (\n <RadioItem\n key={option.value}\n value={option.value}\n label={option.label}\n disabled={disabled || option.disabled}\n variant={variant}\n size={size}\n color={color}\n />\n ))}\n {children}\n </SRadioGroup>\n\n {helperText && (\n <p className=\"ds:text-xs ds:text-muted-foreground\">{helperText}</p>\n )}\n </div>\n );\n}) as React.ForwardRefExoticComponent<\n RadioProps & React.RefAttributes<HTMLDivElement>\n> & {\n Group: typeof SRadioGroup;\n Item: typeof RadioItem;\n};\n\nRadio.displayName = \"Radio\";\n\nRadio.Group = SRadioGroup;\nRadio.Item = RadioItem;\n\nexport default Radio;\nexport { type RadioGroupProps, type RadioGroupItemProps };\n"],"names":["RadioItem","React","props","ref","label","variant","rootClassName","itemProps","id","cn","jsx","SRadioGroupItem","Radio","options","helperText","size","color","value","onValueChange","children","className","disabled","jsxs","SRadioGroup","option"],"mappings":"okDAyBA,MAAMA,EAAYC,EAAM,WACtB,CAACC,EAAOC,IAAQ,CACd,KAAM,CAAE,MAAAC,EAAO,QAAAC,EAAU,SAAU,cAAAC,EAAe,GAAGC,GAAcL,EAC7DM,EAAKP,EAAM,MAAA,EAEjB,cACG,MAAA,CAAI,UAAWQ,EAAAA,GAAG,uCAAwCH,CAAa,EACtE,SAAA,CAAAI,EAAAA,IAACC,EAAAA,eAAA,CAAgB,IAAAR,EAAU,GAAAK,EAAS,GAAGD,CAAA,CAAW,EACjDF,IAAY,UAAYD,GACvBM,EAAAA,IAAC,QAAA,CACC,QAASF,EACT,UAAU,4GAET,SAAAJ,CAAA,CAAA,EAGJC,IAAY,gBAAkBD,SAC5B,OAAA,CAAK,UAAU,aAAc,SAAAA,CAAA,CAAM,CAAA,EAExC,CAEJ,CACF,EAEAJ,EAAU,YAAc,YA6BxB,MAAMY,EAAQX,EAAM,WAAuC,CAACC,EAAOC,IAAQ,CACzE,KAAM,CACJ,QAAAU,EACA,MAAAT,EACA,WAAAU,EACA,QAAAT,EAAU,SACV,KAAAU,EAAO,UACP,MAAAC,EACA,MAAAC,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,EACA,cAAAd,EACA,SAAAe,CAAA,EACEnB,EAEJ,cACG,MAAA,CAAI,UAAWO,EAAAA,GAAG,iCAAkCH,CAAa,EAC/D,SAAA,CAAAF,GAASM,EAAAA,IAAC,QAAA,CAAM,UAAU,4BAA6B,SAAAN,EAAM,EAE9DkB,EAAAA,KAACC,EAAAA,WAAA,CACC,IAAApB,EACA,MAAAc,EACA,cAAAC,EACA,QAAAb,EACA,UAAWI,EAAAA,GAAGW,CAAS,EAEtB,SAAA,CAAAP,GACCA,EAAQ,IAAKW,GACXd,EAAAA,IAACV,EAAA,CAEC,MAAOwB,EAAO,MACd,MAAOA,EAAO,MACd,SAAUH,GAAYG,EAAO,SAC7B,QAAAnB,EACA,KAAAU,EACA,MAAAC,CAAA,EANKQ,EAAO,KAAA,CAQf,EACFL,CAAA,CAAA,CAAA,EAGFL,GACCJ,EAAAA,IAAC,IAAA,CAAE,UAAU,sCAAuC,SAAAI,CAAA,CAAW,CAAA,EAEnE,CAEJ,CAAC,EAODF,EAAM,YAAc,QAEpBA,EAAM,MAAQW,EAAAA,WACdX,EAAM,KAAOZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rate.cjs","sources":["../../../../src/components/Rate/Rate.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useRef } from \"react\";\nimport type { KeyboardEvent } from \"react\";\nimport { Star, StarHalf } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport interface RateProps {\n // Display\n count?: number;\n value?: number;\n defaultValue?: number;\n allowHalf?: boolean;\n allowClear?: boolean;\n\n // Appearance\n size?: \"small\" | \"middle\" | \"large\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n character?: React.ReactNode | ((rateProps: RateProps) => React.ReactNode);\n className?: string;\n style?: React.CSSProperties;\n\n // Interaction\n disabled?: boolean;\n autoFocus?: boolean;\n keyboard?: boolean;\n\n // Tooltips\n tooltips?: string[];\n\n // Callbacks\n onChange?: (value: number) => void;\n onHoverChange?: (value: number) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>) => void;\n}\n\nconst Rate = React.forwardRef<HTMLDivElement, RateProps>(\n (\n {\n count = 5,\n value: controlledValue,\n defaultValue = 0,\n allowHalf = false,\n allowClear = true,\n size = \"middle\",\n color = \"warning\",\n character,\n className,\n style,\n disabled = false,\n autoFocus = false,\n keyboard = true,\n tooltips,\n onChange,\n onHoverChange,\n onFocus,\n onBlur,\n onKeyDown,\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [hoverValue, setHoverValue] = useState<number | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Use controlled or uncontrolled value\n const value =\n controlledValue !== undefined ? controlledValue : internalValue;\n\n // Size in pixels\n const sizeMap = {\n small: 20,\n middle: 24,\n large: 32,\n };\n\n // Color mapping for filled stars\n const colorMap = {\n primary: \"ds:text-primary ds:[&_svg]:fill-primary\",\n secondary: \"ds:text-secondary ds:[&_svg]:fill-secondary\",\n accent: \"ds:text-accent ds:[&_svg]:fill-accent\",\n destructive: \"ds:text-destructive ds:[&_svg]:fill-destructive\",\n muted: \"ds:text-muted-foreground ds:[&_svg]:fill-muted-foreground\",\n success: \"ds:text-success ds:[&_svg]:fill-success\",\n error: \"ds:text-error ds:[&_svg]:fill-error\",\n warning: \"ds:text-yellow-400 ds:[&_svg]:fill-yellow-400\",\n };\n\n // Handle star click\n const handleStarClick = (starIndex: number, isHalf: boolean) => {\n if (disabled) return;\n\n const newValue = isHalf ? starIndex + 0.5 : starIndex + 1;\n\n // If clicking the same value and allowClear is true, clear the rating\n if (allowClear && newValue === value) {\n setInternalValue(0);\n onChange?.(0);\n } else {\n setInternalValue(newValue);\n onChange?.(newValue);\n }\n };\n\n // Handle star hover\n const handleStarHover = (starIndex: number, isHalf: boolean) => {\n if (disabled) return;\n\n const newHoverValue = isHalf ? starIndex + 0.5 : starIndex + 1;\n setHoverValue(newHoverValue);\n onHoverChange?.(newHoverValue);\n };\n\n // Handle mouse leave\n const handleMouseLeave = () => {\n setHoverValue(null);\n onHoverChange?.(0);\n };\n\n // Handle keyboard navigation\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (!keyboard || disabled) return;\n\n onKeyDown?.(event);\n\n const step = allowHalf ? 0.5 : 1;\n let newValue = value;\n\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n event.preventDefault();\n newValue = Math.min(value + step, count);\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n event.preventDefault();\n newValue = Math.max(value - step, 0);\n break;\n case \"Home\":\n event.preventDefault();\n newValue = allowHalf ? 0.5 : 1;\n break;\n case \"End\":\n event.preventDefault();\n newValue = count;\n break;\n default:\n return;\n }\n\n setInternalValue(newValue);\n onChange?.(newValue);\n };\n\n // Handle focus\n const handleFocus = () => {\n onFocus?.();\n };\n\n // Handle blur\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Get star fill percentage\n const getStarFill = (starIndex: number) => {\n const currentValue = hoverValue !== null ? hoverValue : value;\n\n if (currentValue >= starIndex + 1) {\n return 100; // Full star\n } else if (currentValue > starIndex && currentValue < starIndex + 1) {\n return (currentValue - starIndex) * 100; // Partial star\n }\n return 0; // Empty star\n };\n\n // Check if star should show as half\n const isHalfStar = (starIndex: number) => {\n if (!allowHalf) return false;\n const currentValue = hoverValue !== null ? hoverValue : value;\n const fill = currentValue - starIndex;\n return fill > 0 && fill <= 0.5;\n };\n\n // Render character\n const renderCharacter = (isHalf: boolean = false) => {\n if (typeof character === \"function\") {\n return character({\n count,\n value,\n defaultValue,\n allowHalf,\n allowClear,\n size,\n disabled,\n });\n }\n if (isHalf) {\n return <StarHalf className=\"ds:w-full ds:h-full\" />;\n }\n return character || <Star className=\"ds:w-full ds:h-full\" />;\n };\n\n // Get tooltip for star\n const getTooltip = (starIndex: number) => {\n if (!tooltips || !tooltips[starIndex]) return undefined;\n return tooltips[starIndex];\n };\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(\n \"ds:inline-flex ds:items-center ds:gap-1\",\n disabled && \"ds:opacity-50 ds:cursor-not-allowed\",\n !disabled && \"ds:cursor-pointer\",\n className\n )}\n style={style}\n onMouseLeave={handleMouseLeave}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n tabIndex={disabled ? -1 : 0}\n role=\"slider\"\n aria-label=\"Rate\"\n aria-valuemin={0}\n aria-valuemax={count}\n aria-valuenow={value}\n aria-disabled={disabled}\n autoFocus={autoFocus}\n >\n {Array.from({ length: count }, (_, index) => {\n const fillPercentage = getStarFill(index);\n const tooltip = getTooltip(index);\n const showHalfStar = isHalfStar(index);\n\n return (\n <div key={index} className=\"ds:relative ds:group\" title={tooltip}>\n {/* Container for half stars */}\n <div\n className=\"ds:relative ds:inline-flex\"\n style={{\n width: `${sizeMap[size]}px`,\n height: `${sizeMap[size]}px`,\n }}\n >\n {/* Empty star background */}\n <div className=\"ds:text-muted-foreground/30 ds:pointer-events-none\">\n {renderCharacter(false)}\n </div>\n\n {/* Filled star overlay */}\n {fillPercentage > 0 && (\n <div\n className={cn(\n \"ds:absolute ds:inset-0 ds:pointer-events-none\",\n colorMap[color]\n )}\n >\n {showHalfStar ? (\n renderCharacter(true)\n ) : (\n <div\n className=\"ds:overflow-hidden\"\n style={{ width: `${fillPercentage}%` }}\n >\n {renderCharacter(false)}\n </div>\n )}\n </div>\n )}\n\n {/* Interactive overlay for clicking and hovering */}\n {!disabled && (\n <>\n {allowHalf ? (\n <>\n {/* Left half */}\n <div\n className=\"ds:absolute ds:inset-0 ds:w-1/2 ds:cursor-pointer\"\n onClick={() => handleStarClick(index, true)}\n onMouseEnter={() => handleStarHover(index, true)}\n />\n {/* Right half */}\n <div\n className=\"ds:absolute ds:inset-0 ds:left-1/2 ds:w-1/2 ds:cursor-pointer\"\n onClick={() => handleStarClick(index, false)}\n onMouseEnter={() => handleStarHover(index, false)}\n />\n </>\n ) : (\n <div\n className=\"ds:absolute ds:inset-0 ds:cursor-pointer\"\n onClick={() => handleStarClick(index, false)}\n onMouseEnter={() => handleStarHover(index, false)}\n />\n )}\n </>\n )}\n </div>\n\n {/* Show tooltip text below star on hover */}\n {tooltip &&\n (hoverValue === index + 1 ||\n (allowHalf && hoverValue === index + 0.5)) && (\n <div className=\"ds:absolute ds:top-full ds:left-1/2 ds:-translate-x-1/2 ds:mt-1 ds:px-2 ds:py-1 ds:text-xs ds:bg-foreground ds:text-background ds:rounded ds:whitespace-nowrap ds:z-10\">\n {tooltip}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nRate.displayName = \"Rate\";\n\nexport default Rate;\n"],"names":["Rate","React","count","controlledValue","defaultValue","allowHalf","allowClear","size","color","character","className","style","disabled","autoFocus","keyboard","tooltips","onChange","onHoverChange","onFocus","onBlur","onKeyDown","ref","internalValue","setInternalValue","useState","hoverValue","setHoverValue","containerRef","useRef","value","sizeMap","colorMap","handleStarClick","starIndex","isHalf","newValue","handleStarHover","newHoverValue","handleMouseLeave","handleKeyDown","event","step","handleFocus","handleBlur","getStarFill","currentValue","isHalfStar","fill","renderCharacter","jsx","StarHalf","Star","getTooltip","node","cn","_","index","fillPercentage","tooltip","showHalfStar","jsxs","Fragment"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Resizable.cjs","sources":["../../../../src/components/Resizable/Resizable.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n resizableHandleVariants,\n} from \"@dsui/ui/components/resizable\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport type { VariantProps } from \"class-variance-authority\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\nexport type ResizableHandleVariant = VariantProps<\n typeof resizableHandleVariants\n>[\"variant\"];\n\nexport interface ResizablePanelConfig {\n id?: string;\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n collapsible?: boolean;\n collapsedSize?: number;\n onCollapse?: () => void;\n onExpand?: () => void;\n onResize?: (size: number) => void;\n className?: string;\n children?: React.ReactNode;\n order?: number;\n}\n\ntype PanelGroupOnLayout = (sizes: number[]) => void;\n\nexport interface ResizableProps {\n /** Direction of the resizable panels */\n direction?: ResizableDirection;\n /** Configuration for panels when using wrapper mode */\n panels?: ResizablePanelConfig[];\n /** Show handle with grip icon */\n withHandle?: boolean;\n /** Handle variant: 'default' shows icon, 'line' highlights on hover */\n handleVariant?: ResizableHandleVariant;\n /** Custom icon for the handle (only works with default variant) */\n handleIcon?: React.ReactNode;\n /** Auto save layout to localStorage with this id */\n autoSaveId?: string;\n /** Callback when layout changes */\n onLayout?: PanelGroupOnLayout;\n /** Additional class for the panel group */\n className?: string;\n /** Additional class for each panel */\n panelClassName?: string;\n /** Additional class for handles */\n handleClassName?: string;\n /** Children for primitive usage */\n children?: React.ReactNode;\n /** Keyboard resize by delta percentage (default: 10) */\n keyboardResizeBy?: number;\n /** Storage object for saving layout (default: localStorage) */\n storage?: {\n getItem: (name: string) => string | null;\n setItem: (name: string, value: string) => void;\n };\n}\n\n// ============================================================================\n// Wrapper Component\n// ============================================================================\n\nconst ResizableWrapper = (props: ResizableProps) => {\n const {\n direction = \"horizontal\",\n panels,\n withHandle = true,\n handleVariant,\n handleIcon,\n autoSaveId,\n onLayout,\n className,\n panelClassName,\n handleClassName,\n children,\n keyboardResizeBy,\n storage,\n } = props;\n\n // If children are provided, use primitive mode\n if (children && !panels) {\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"ds:h-full ds:w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {children}\n </ResizablePanelGroup>\n );\n }\n\n // Wrapper mode with panels config\n if (!panels || panels.length === 0) {\n return null;\n }\n\n return (\n <ResizablePanelGroup\n direction={direction}\n autoSaveId={autoSaveId}\n onLayout={onLayout}\n className={cn(\"ds:h-full ds:w-full\", className)}\n keyboardResizeBy={keyboardResizeBy}\n storage={storage}\n >\n {panels.map((panel, index) => (\n <React.Fragment key={panel.id || `panel-${index}`}>\n <ResizablePanel\n id={panel.id}\n defaultSize={panel.defaultSize}\n minSize={panel.minSize}\n maxSize={panel.maxSize}\n collapsible={panel.collapsible}\n collapsedSize={panel.collapsedSize}\n onCollapse={panel.onCollapse}\n onExpand={panel.onExpand}\n onResize={panel.onResize}\n order={panel.order}\n className={cn(panelClassName, panel.className)}\n >\n {panel.children}\n </ResizablePanel>\n {index < panels.length - 1 && (\n <ResizableHandle\n withHandle={withHandle}\n variant={handleVariant}\n icon={handleIcon}\n className={handleClassName}\n />\n )}\n </React.Fragment>\n ))}\n </ResizablePanelGroup>\n );\n};\n\nResizableWrapper.displayName = \"Resizable\";\n\n// ============================================================================\n// Sub-components for primitive usage\n// ============================================================================\n\nexport type ResizablePanelProps = React.ComponentProps<typeof ResizablePanel>;\nexport type ResizableHandleProps = React.ComponentProps<typeof ResizableHandle>;\nexport type ResizablePanelGroupProps = React.ComponentProps<\n typeof ResizablePanelGroup\n>;\n\n// Re-export Panel and Handle from shadcn for primitive usage\nconst Panel = ResizablePanel;\nconst Handle = ResizableHandle;\n\n// ============================================================================\n// Export with Object.assign pattern\n// ============================================================================\n\nconst Resizable = Object.assign(ResizableWrapper, {\n Panel,\n Handle,\n PanelGroup: ResizablePanelGroup,\n});\n\nexport default Resizable;\nexport {\n Resizable,\n ResizableWrapper,\n ResizablePanelGroup,\n ResizablePanel,\n ResizableHandle,\n Panel,\n Handle,\n};\n"],"names":["ResizableWrapper","props","direction","panels","withHandle","handleVariant","handleIcon","autoSaveId","onLayout","className","panelClassName","handleClassName","children","keyboardResizeBy","storage","jsx","ResizablePanelGroup","cn","panel","index","jsxs","React","ResizablePanel","ResizableHandle","Panel","Handle","Resizable"],"mappings":"iRAyEMA,EAAoBC,GAA0B,CAClD,KAAM,CACJ,UAAAC,EAAY,aACZ,OAAAC,EACA,WAAAC,EAAa,GACb,cAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,UAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,QAAAC,CAAA,EACEb,EAGJ,OAAIW,GAAY,CAACT,EAEbY,EAAAA,IAACC,EAAAA,oBAAA,CACC,UAAAd,EACA,WAAAK,EACA,SAAAC,EACA,UAAWS,EAAAA,GAAG,sBAAuBR,CAAS,EAC9C,iBAAAI,EACA,QAAAC,EAEC,SAAAF,CAAA,CAAA,EAMH,CAACT,GAAUA,EAAO,SAAW,EACxB,KAIPY,EAAAA,IAACC,EAAAA,oBAAA,CACC,UAAAd,EACA,WAAAK,EACA,SAAAC,EACA,UAAWS,EAAAA,GAAG,sBAAuBR,CAAS,EAC9C,iBAAAI,EACA,QAAAC,EAEC,SAAAX,EAAO,IAAI,CAACe,EAAOC,IAClBC,EAAAA,KAACC,EAAM,SAAN,CACC,SAAA,CAAAN,EAAAA,IAACO,EAAAA,eAAA,CACC,GAAIJ,EAAM,GACV,YAAaA,EAAM,YACnB,QAASA,EAAM,QACf,QAASA,EAAM,QACf,YAAaA,EAAM,YACnB,cAAeA,EAAM,cACrB,WAAYA,EAAM,WAClB,SAAUA,EAAM,SAChB,SAAUA,EAAM,SAChB,MAAOA,EAAM,MACb,UAAWD,EAAAA,GAAGP,EAAgBQ,EAAM,SAAS,EAE5C,SAAAA,EAAM,QAAA,CAAA,EAERC,EAAQhB,EAAO,OAAS,GACvBY,EAAAA,IAACQ,EAAAA,gBAAA,CACC,WAAAnB,EACA,QAASC,EACT,KAAMC,EACN,UAAWK,CAAA,CAAA,CACb,CAAA,EAtBiBO,EAAM,IAAM,SAASC,CAAK,EAwB/C,CACD,CAAA,CAAA,CAGP,EAEAnB,EAAiB,YAAc,YAa/B,MAAMwB,EAAQF,EAAAA,eACRG,EAASF,EAAAA,gBAMTG,EAAY,OAAO,OAAO1B,EAAkB,CAChD,MAAAwB,EACA,OAAAC,EACA,WAAYT,EAAAA,mBACd,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScrollArea.cjs","sources":["../../../../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport {\n ScrollArea as SScrollArea,\n ScrollBar as SScrollBar,\n} from \"@dsui/ui/components/scroll-area\";\nimport { cn } from \"@dsui/ui/lib/utils\";\n\nexport interface ScrollAreaProps\n extends React.ComponentProps<typeof SScrollArea> {\n /**\n * Type of scroll snap behavior\n * @default undefined\n */\n snapType?:\n | \"none\"\n | \"x\"\n | \"y\"\n | \"both\"\n | \"x mandatory\"\n | \"y mandatory\"\n | \"both mandatory\"\n | \"x proximity\"\n | \"y proximity\"\n | \"both proximity\";\n /**\n * Additional className for the viewport (where scroll happens)\n */\n viewportClassName?: string;\n}\n\nexport type ScrollBarProps = React.ComponentProps<typeof SScrollBar>;\n\nconst ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ className, children, snapType, viewportClassName, ...props }, ref) => {\n const scrollAreaRef = useRef<HTMLDivElement>(null);\n\n const snapClass = React.useMemo(() => {\n if (!snapType || snapType === \"none\") return \"snap-none\";\n\n const [axis, alignment] = snapType.split(\" \");\n return cn(`ds:snap-${axis}`, alignment && `ds:snap-${alignment}`);\n }, [snapType]);\n\n // const snapClass = snapType\n // ? snapType === \"none\"\n // ? \"snap-none\"\n // : snapType === \"x\"\n // ? \"snap-x\"\n // : snapType === \"y\"\n // ? \"snap-y\"\n // : snapType === \"both\"\n // ? \"snap-both\"\n // : snapType === \"x mandatory\"\n // ? \"snap-x snap-mandatory\"\n // : snapType === \"y mandatory\"\n // ? \"snap-y snap-mandatory\"\n // : snapType === \"both mandatory\"\n // ? \"snap-both snap-mandatory\"\n // : snapType === \"x proximity\"\n // ? \"snap-x snap-proximity\"\n // : snapType === \"y proximity\"\n // ? \"snap-y snap-proximity\"\n // : snapType === \"both proximity\"\n // ? \"snap-both snap-proximity\"\n // : \"\"\n // : \"\";\n\n useEffect(() => {\n if (scrollAreaRef.current && (snapClass || viewportClassName)) {\n const viewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n );\n if (viewport) {\n const classes = cn(snapClass, viewportClassName);\n if (classes) {\n viewport.className = cn(viewport.className, classes);\n }\n }\n }\n }, [snapClass, viewportClassName]);\n\n return (\n <SScrollArea\n ref={(node) => {\n scrollAreaRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n className={cn(className)}\n {...props}\n >\n {children}\n </SScrollArea>\n );\n }\n);\nScrollArea.displayName = \"ScrollArea\";\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, ...props }, ref) => {\n return <SScrollBar ref={ref} className={cn(className)} {...props} />;\n }\n);\nScrollBar.displayName = \"ScrollBar\";\n\nexport { ScrollArea, ScrollBar };\nexport default ScrollArea;\n"],"names":["ScrollArea","React","className","children","snapType","viewportClassName","props","ref","scrollAreaRef","useRef","snapClass","axis","alignment","cn","useEffect","viewport","classes","jsx","SScrollArea","node","ScrollBar","SScrollBar"],"mappings":"mRAgCMA,EAAaC,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,kBAAAC,EAAmB,GAAGC,CAAA,EAASC,IAAQ,CACvE,MAAMC,EAAgBC,EAAAA,OAAuB,IAAI,EAE3CC,EAAYT,EAAM,QAAQ,IAAM,CACpC,GAAI,CAACG,GAAYA,IAAa,OAAQ,MAAO,YAE7C,KAAM,CAACO,EAAMC,CAAS,EAAIR,EAAS,MAAM,GAAG,EAC5C,OAAOS,EAAAA,GAAG,WAAWF,CAAI,GAAIC,GAAa,WAAWA,CAAS,EAAE,CAClE,EAAG,CAACR,CAAQ,CAAC,EA0BbU,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIN,EAAc,UAAYE,GAAaL,GAAoB,CAC7D,MAAMU,EAAWP,EAAc,QAAQ,cACrC,mCAAA,EAEF,GAAIO,EAAU,CACZ,MAAMC,EAAUH,EAAAA,GAAGH,EAAWL,CAAiB,EAC3CW,IACFD,EAAS,UAAYF,EAAAA,GAAGE,EAAS,UAAWC,CAAO,EAEvD,CACF,CACF,EAAG,CAACN,EAAWL,CAAiB,CAAC,EAG/BY,EAAAA,IAACC,EAAAA,WAAA,CACC,IAAMC,GAAS,CACbX,EAAc,QAAUW,EACpB,OAAOZ,GAAQ,WACjBA,EAAIY,CAAI,EACCZ,IACTA,EAAI,QAAUY,EAElB,EACA,UAAWN,EAAAA,GAAGX,CAAS,EACtB,GAAGI,EAEH,SAAAH,CAAA,CAAA,CAGP,CACF,EACAH,EAAW,YAAc,aAEzB,MAAMoB,EAAYnB,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGI,CAAA,EAASC,IACjBU,EAAAA,IAACI,aAAW,IAAAd,EAAU,UAAWM,EAAAA,GAAGX,CAAS,EAAI,GAAGI,EAAO,CAEtE,EACAc,EAAU,YAAc"}