@sth87/shadcn-design-system 0.0.35 → 0.1.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 (421) hide show
  1. package/README.md +20 -2
  2. package/dist/AI_CONTEXT.md +212 -214
  3. package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
  4. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  5. package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
  6. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
  7. package/dist/cjs/components/Badge/Badge.cjs +1 -1
  8. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  9. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
  10. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  11. package/dist/cjs/components/Button/Button.cjs +1 -1
  12. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  13. package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
  14. package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
  15. package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
  16. package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
  17. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  18. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  19. package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
  20. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
  21. package/dist/cjs/components/Command/Command.cjs +1 -1
  22. package/dist/cjs/components/Command/Command.cjs.map +1 -1
  23. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
  24. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
  25. package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
  26. package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
  27. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
  28. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  29. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
  30. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
  31. package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
  32. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
  33. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  34. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  35. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
  36. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  37. package/dist/cjs/components/FloatLabel.cjs +1 -1
  38. package/dist/cjs/components/FloatLabel.cjs.map +1 -1
  39. package/dist/cjs/components/Glass/Glass.cjs +1 -1
  40. package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
  41. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
  42. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
  43. package/dist/cjs/components/Input/Input.cjs +1 -1
  44. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  45. package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
  46. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
  47. package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
  48. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
  49. package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
  50. package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
  51. package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
  52. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  53. package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
  54. package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
  55. package/dist/cjs/components/Radio/Radio.cjs +1 -1
  56. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  57. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  58. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  59. package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
  60. package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
  61. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
  62. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
  63. package/dist/cjs/components/Select/Select.cjs +1 -1
  64. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  65. package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
  66. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  67. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  68. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  69. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  70. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  71. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  72. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  73. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  74. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  75. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
  76. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
  77. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
  78. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
  79. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
  80. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
  81. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  82. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  83. package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
  84. package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
  85. package/dist/cjs/components/Table/data-table.cjs +1 -1
  86. package/dist/cjs/components/Table/data-table.cjs.map +1 -1
  87. package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
  88. package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
  89. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  90. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  91. package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
  92. package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
  93. package/dist/cjs/components/TimeGridView.cjs +1 -1
  94. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  95. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  96. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  97. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  98. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  99. package/dist/cjs/components/Tour/Tour.cjs +1 -1
  100. package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
  101. package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
  102. package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
  103. package/dist/cjs/components/Upload/Upload.cjs +3 -3
  104. package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
  105. package/dist/cjs/components/WheelColumn.cjs +1 -1
  106. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  107. package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
  108. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
  109. package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
  110. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
  111. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
  112. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
  113. package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
  114. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
  115. package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
  116. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
  117. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
  118. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
  119. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
  120. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
  121. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
  122. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
  123. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
  124. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
  125. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
  126. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
  127. package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
  128. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
  129. package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
  130. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
  131. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
  132. package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
  133. package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
  134. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
  135. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
  136. package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
  137. package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
  138. package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
  139. package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
  140. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
  141. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
  142. package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
  143. package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
  144. package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
  145. package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
  146. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  147. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  148. package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
  149. package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
  150. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
  151. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
  152. package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
  153. package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
  154. package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
  155. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
  156. package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
  157. package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
  158. package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
  159. package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
  160. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
  161. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
  162. package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
  163. package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
  164. package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
  165. package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
  166. package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
  167. package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
  168. package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
  169. package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
  170. package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
  171. package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
  172. package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
  173. package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
  174. package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
  175. package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
  176. package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
  177. package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
  178. package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
  179. package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
  180. package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
  181. package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
  182. package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
  183. package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
  184. package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
  185. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
  186. package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
  187. package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
  188. package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
  189. package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
  190. package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
  191. package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
  192. package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
  193. package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
  194. package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
  195. package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
  196. package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
  197. package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
  198. package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
  199. package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
  200. package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
  201. package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
  202. package/dist/cjs/styles/index.css +1 -1
  203. package/dist/cjs/utils/animations.cjs +1 -1
  204. package/dist/cjs/utils/animations.cjs.map +1 -1
  205. package/dist/cjs/utils/css.cjs +1 -1
  206. package/dist/cjs/utils/css.cjs.map +1 -1
  207. package/dist/cjs/utils/parsers.cjs +1 -1
  208. package/dist/cjs/utils/parsers.cjs.map +1 -1
  209. package/dist/esm/components/Accordion/Accordion.js +60 -60
  210. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  211. package/dist/esm/components/Avatar/Avatar.js +40 -40
  212. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  213. package/dist/esm/components/Badge/Badge.js +1 -1
  214. package/dist/esm/components/Badge/Badge.js.map +1 -1
  215. package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
  216. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
  217. package/dist/esm/components/Button/Button.js +9 -9
  218. package/dist/esm/components/Button/Button.js.map +1 -1
  219. package/dist/esm/components/Calendar/Calendar.js +4 -4
  220. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  221. package/dist/esm/components/Carousel/Carousel.js +165 -165
  222. package/dist/esm/components/Carousel/Carousel.js.map +1 -1
  223. package/dist/esm/components/Checkbox/Checkbox.js +26 -26
  224. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  225. package/dist/esm/components/Collapsible/Collapsible.js +43 -43
  226. package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
  227. package/dist/esm/components/Command/Command.js +28 -28
  228. package/dist/esm/components/Command/Command.js.map +1 -1
  229. package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
  230. package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
  231. package/dist/esm/components/Cropper/Cropper.js +132 -132
  232. package/dist/esm/components/Cropper/Cropper.js.map +1 -1
  233. package/dist/esm/components/DatePicker/DatePicker.js +75 -75
  234. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  235. package/dist/esm/components/DatePicker/RangePicker.js +136 -136
  236. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
  237. package/dist/esm/components/DatePicker/TimePicker.js +150 -150
  238. package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
  239. package/dist/esm/components/Dialog/Dialog.js +114 -114
  240. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  241. package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
  242. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
  243. package/dist/esm/components/FloatLabel.js +44 -44
  244. package/dist/esm/components/FloatLabel.js.map +1 -1
  245. package/dist/esm/components/Glass/Glass.js +15 -15
  246. package/dist/esm/components/Glass/Glass.js.map +1 -1
  247. package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
  248. package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
  249. package/dist/esm/components/Input/Input.js +104 -104
  250. package/dist/esm/components/Input/Input.js.map +1 -1
  251. package/dist/esm/components/InputOTP/InputOTP.js +16 -16
  252. package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
  253. package/dist/esm/components/Interactive/CursorFollow.js +49 -49
  254. package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
  255. package/dist/esm/components/Marquee/Marquee.js +130 -130
  256. package/dist/esm/components/Marquee/Marquee.js.map +1 -1
  257. package/dist/esm/components/Pagination/Pagination.js +68 -68
  258. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  259. package/dist/esm/components/QrCode/QrCode.js +37 -37
  260. package/dist/esm/components/QrCode/QrCode.js.map +1 -1
  261. package/dist/esm/components/Radio/Radio.js +16 -16
  262. package/dist/esm/components/Radio/Radio.js.map +1 -1
  263. package/dist/esm/components/Rate/Rate.js +62 -62
  264. package/dist/esm/components/Rate/Rate.js.map +1 -1
  265. package/dist/esm/components/Resizable/Resizable.js +6 -6
  266. package/dist/esm/components/Resizable/Resizable.js.map +1 -1
  267. package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
  268. package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
  269. package/dist/esm/components/Select/Select.js +64 -64
  270. package/dist/esm/components/Select/Select.js.map +1 -1
  271. package/dist/esm/components/Sheet/Sheet.js +21 -21
  272. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  273. package/dist/esm/components/Slider/Slider.js +54 -54
  274. package/dist/esm/components/Slider/Slider.js.map +1 -1
  275. package/dist/esm/components/Stepper/Stepper.js +198 -198
  276. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  277. package/dist/esm/components/Stepper/StepperWrapper.js +15 -15
  278. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  279. package/dist/esm/components/Switch/Switch.js +38 -38
  280. package/dist/esm/components/Switch/Switch.js.map +1 -1
  281. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
  282. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
  283. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
  284. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
  285. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
  286. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
  287. package/dist/esm/components/Table/data-table-column-header.js +18 -18
  288. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  289. package/dist/esm/components/Table/data-table-pagination.js +21 -21
  290. package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
  291. package/dist/esm/components/Table/data-table.js +18 -18
  292. package/dist/esm/components/Table/data-table.js.map +1 -1
  293. package/dist/esm/components/Tabs/Tabs.js +242 -242
  294. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  295. package/dist/esm/components/Tabs/classes.js +51 -51
  296. package/dist/esm/components/Tabs/classes.js.map +1 -1
  297. package/dist/esm/components/Textarea/Textarea.js +49 -49
  298. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  299. package/dist/esm/components/TimeGridView.js +12 -12
  300. package/dist/esm/components/TimeGridView.js.map +1 -1
  301. package/dist/esm/components/Toast/Toast.js +45 -45
  302. package/dist/esm/components/Toast/Toast.js.map +1 -1
  303. package/dist/esm/components/Tooltip/Tooltip.js +19 -19
  304. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  305. package/dist/esm/components/Tour/Tour.js +11 -11
  306. package/dist/esm/components/Tour/Tour.js.map +1 -1
  307. package/dist/esm/components/Tour/TourWrapper.js +15 -15
  308. package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
  309. package/dist/esm/components/Upload/Upload.js +405 -405
  310. package/dist/esm/components/Upload/Upload.js.map +1 -1
  311. package/dist/esm/components/WheelColumn.js +47 -47
  312. package/dist/esm/components/WheelColumn.js.map +1 -1
  313. package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
  314. package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
  315. package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
  316. package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
  317. package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
  318. package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
  319. package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
  320. package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
  321. package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
  322. package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
  323. package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
  324. package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
  325. package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
  326. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
  327. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
  328. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
  329. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
  330. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
  331. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
  332. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
  333. package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
  334. package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
  335. package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
  336. package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
  337. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
  338. package/dist/esm/packages/ui/src/components/accordion.js +31 -31
  339. package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
  340. package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
  341. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
  342. package/dist/esm/packages/ui/src/components/avatar.js +20 -20
  343. package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
  344. package/dist/esm/packages/ui/src/components/badge.js +53 -53
  345. package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
  346. package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
  347. package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
  348. package/dist/esm/packages/ui/src/components/button-group.js +31 -31
  349. package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
  350. package/dist/esm/packages/ui/src/components/button.js +90 -90
  351. package/dist/esm/packages/ui/src/components/button.js.map +1 -1
  352. package/dist/esm/packages/ui/src/components/calendar.js +94 -94
  353. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  354. package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
  355. package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
  356. package/dist/esm/packages/ui/src/components/combobox.js +64 -64
  357. package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
  358. package/dist/esm/packages/ui/src/components/command.js +77 -77
  359. package/dist/esm/packages/ui/src/components/command.js.map +1 -1
  360. package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
  361. package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
  362. package/dist/esm/packages/ui/src/components/dialog.js +54 -54
  363. package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
  364. package/dist/esm/packages/ui/src/components/drawer.js +39 -39
  365. package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
  366. package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
  367. package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
  368. package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
  369. package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
  370. package/dist/esm/packages/ui/src/components/input.js +19 -19
  371. package/dist/esm/packages/ui/src/components/input.js.map +1 -1
  372. package/dist/esm/packages/ui/src/components/label.js +9 -9
  373. package/dist/esm/packages/ui/src/components/label.js.map +1 -1
  374. package/dist/esm/packages/ui/src/components/pagination.js +26 -26
  375. package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
  376. package/dist/esm/packages/ui/src/components/popover.js +13 -13
  377. package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
  378. package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
  379. package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
  380. package/dist/esm/packages/ui/src/components/resizable.js +18 -18
  381. package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
  382. package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
  383. package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
  384. package/dist/esm/packages/ui/src/components/select.js +119 -119
  385. package/dist/esm/packages/ui/src/components/select.js.map +1 -1
  386. package/dist/esm/packages/ui/src/components/separator.js +86 -86
  387. package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
  388. package/dist/esm/packages/ui/src/components/sheet.js +50 -50
  389. package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
  390. package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
  391. package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
  392. package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
  393. package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
  394. package/dist/esm/packages/ui/src/components/switch.js +57 -57
  395. package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
  396. package/dist/esm/packages/ui/src/components/table.js +17 -17
  397. package/dist/esm/packages/ui/src/components/table.js.map +1 -1
  398. package/dist/esm/packages/ui/src/components/tabs.js +33 -33
  399. package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
  400. package/dist/esm/packages/ui/src/components/textarea.js +17 -17
  401. package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
  402. package/dist/esm/packages/ui/src/components/toggle.js +36 -36
  403. package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
  404. package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
  405. package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
  406. package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
  407. package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
  408. package/dist/esm/styles/index.css +1 -1
  409. package/dist/esm/utils/animations.js +55 -55
  410. package/dist/esm/utils/animations.js.map +1 -1
  411. package/dist/esm/utils/css.js +7 -7
  412. package/dist/esm/utils/css.js.map +1 -1
  413. package/dist/esm/utils/parsers.js +1 -1
  414. package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
  415. package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
  416. package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
  417. package/package.json +1 -1
  418. 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
  419. 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
  420. /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 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
  421. /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 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"flex flex-col items-center gap-2 w-full h-full max-h-72\">\n {timeLabel && (\n <div className=\"text-xs font-semibold text-muted-foreground uppercase p-2 border-b w-full text-center h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"relative w-full\",\n timeLabel ? \"h-[calc(100%_-_2rem)]\" : \" h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"absolute top-1/2 left-0 right-0 h-10 -translate-y-1/2 border-t border-b border-border pointer-events-none z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"relative h-full w-full min-w-20 min-h-60 overflow-y-scroll scroll-smooth\",\n \"[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent\",\n \"[&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-thumb]:rounded\",\n \"flex flex-col snap-y snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"h-10 flex-shrink-0 flex items-center justify-center transition-all snap-center\",\n \"cursor-pointer text-lg font-medium select-none\",\n \"disabled:opacity-30 disabled:cursor-not-allowed disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} font-bold`\n : \"text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"h-[calc(50%-1.25rem)] flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
1
+ {"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { jsx as T, jsxs as A } from "react/jsx-runtime";
2
2
  import { motion as E } from "motion/react";
3
3
  import { useState as K, useRef as V, useEffect as D, useMemo as y } from "react";
4
- const F = (s, a) => {
4
+ const F = (r, a) => {
5
5
  const p = /* @__PURE__ */ new Set([
6
- ...Object.keys(s),
6
+ ...Object.keys(r),
7
7
  ...a.flatMap((t) => Object.keys(t))
8
8
  ]), n = {};
9
9
  return p.forEach((t) => {
10
- n[t] = [s[t], ...a.map((l) => l[t])];
10
+ n[t] = [r[t], ...a.map((l) => l[t])];
11
11
  }), n;
12
12
  }, _ = ({
13
- text: s = "",
13
+ text: r = "",
14
14
  delay: a = 200,
15
15
  className: p = "",
16
16
  animateBy: n = "words",
@@ -18,21 +18,21 @@ const F = (s, a) => {
18
18
  threshold: l = 0.1,
19
19
  rootMargin: f = "0px",
20
20
  animationFrom: b,
21
- animationTo: w,
22
- easing: h = (o) => o,
23
- onAnimationComplete: x,
24
- stepDuration: d = 0.35
21
+ animationTo: d,
22
+ easing: w = (o) => o,
23
+ onAnimationComplete: h,
24
+ stepDuration: x = 0.35
25
25
  }) => {
26
- const o = n === "words" ? s.split(" ") : s.split(""), [v, g] = K(!1), i = V(null);
26
+ const o = n === "words" ? r.split(" ") : r.split(""), [v, g] = K(!1), i = V(null);
27
27
  D(() => {
28
28
  if (!i.current) return;
29
- const r = new IntersectionObserver(
29
+ const s = new IntersectionObserver(
30
30
  ([e]) => {
31
- e.isIntersecting && (g(!0), r.unobserve(i.current));
31
+ e.isIntersecting && (g(!0), s.unobserve(i.current));
32
32
  },
33
33
  { threshold: l, rootMargin: f }
34
34
  );
35
- return r.observe(i.current), () => r.disconnect();
35
+ return s.observe(i.current), () => s.disconnect();
36
36
  }, [l, f]);
37
37
  const j = y(
38
38
  () => t === "top" ? { filter: "blur(10px)", opacity: 0, y: -50 } : { filter: "blur(10px)", opacity: 0, y: 50 },
@@ -47,16 +47,16 @@ const F = (s, a) => {
47
47
  { filter: "blur(0px)", opacity: 1, y: 0 }
48
48
  ],
49
49
  [t]
50
- ), u = b ?? j, m = w ?? S, c = m.length + 1, k = d * (c - 1), C = Array.from(
50
+ ), u = b ?? j, m = d ?? S, c = m.length + 1, k = x * (c - 1), C = Array.from(
51
51
  { length: c },
52
- (r, e) => c === 1 ? 0 : e / (c - 1)
52
+ (s, e) => c === 1 ? 0 : e / (c - 1)
53
53
  );
54
- return /* @__PURE__ */ T("p", { ref: i, className: `blur-text ${p} flex flex-wrap`, children: o.map((r, e) => {
54
+ return /* @__PURE__ */ T("p", { ref: i, className: `ds:blur-text ${p} ds:flex ds:flex-wrap`, children: o.map((s, e) => {
55
55
  const I = F(u, m), O = {
56
56
  duration: k,
57
57
  times: C,
58
58
  delay: e * a / 1e3,
59
- ease: h
59
+ ease: w
60
60
  };
61
61
  return /* @__PURE__ */ A(
62
62
  E.span,
@@ -64,13 +64,13 @@ const F = (s, a) => {
64
64
  initial: u,
65
65
  animate: v ? I : u,
66
66
  transition: O,
67
- onAnimationComplete: e === o.length - 1 ? x : void 0,
67
+ onAnimationComplete: e === o.length - 1 ? h : void 0,
68
68
  style: {
69
69
  display: "inline-block",
70
70
  willChange: "transform, filter, opacity"
71
71
  },
72
72
  children: [
73
- r === " " ? " " : r,
73
+ s === " " ? " " : s,
74
74
  n === "words" && e < o.length - 1 && " "
75
75
  ]
76
76
  },
@@ -1 +1 @@
1
- {"version":3,"file":"BlurText.js","sources":["../../../../src/lib/TextAnimation/BlurText.tsx"],"sourcesContent":["\"use client\";\nimport { motion, type Transition, type Easing } from \"motion/react\";\nimport { useEffect, useRef, useState, useMemo } from \"react\";\ntype BlurTextProps = {\n text?: string;\n delay?: number;\n className?: string;\n animateBy?: \"words\" | \"letters\";\n direction?: \"top\" | \"bottom\";\n threshold?: number;\n rootMargin?: string;\n animationFrom?: Record<string, string | number>;\n animationTo?: Array<Record<string, string | number>>;\n easing?: Easing | Easing[];\n onAnimationComplete?: () => void;\n stepDuration?: number;\n};\nconst buildKeyframes = (\n from: Record<string, string | number>,\n steps: Array<Record<string, string | number>>\n): Record<string, Array<string | number>> => {\n const keys = new Set<string>([\n ...Object.keys(from),\n ...steps.flatMap((s) => Object.keys(s)),\n ]);\n const keyframes: Record<string, Array<string | number>> = {};\n keys.forEach((k) => {\n keyframes[k] = [from[k], ...steps.map((s) => s[k])];\n });\n return keyframes;\n};\nconst BlurText: React.FC<BlurTextProps> = ({\n text = \"\",\n delay = 200,\n className = \"\",\n animateBy = \"words\",\n direction = \"top\",\n threshold = 0.1,\n rootMargin = \"0px\",\n animationFrom,\n animationTo,\n easing = (t: number) => t,\n onAnimationComplete,\n stepDuration = 0.35,\n}) => {\n const elements = animateBy === \"words\" ? text.split(\" \") : text.split(\"\");\n const [inView, setInView] = useState(false);\n const ref = useRef<HTMLParagraphElement>(null);\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current as Element);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n const defaultFrom = useMemo(\n () =>\n direction === \"top\"\n ? { filter: \"blur(10px)\", opacity: 0, y: -50 }\n : { filter: \"blur(10px)\", opacity: 0, y: 50 },\n [direction]\n );\n const defaultTo = useMemo(\n () => [\n {\n filter: \"blur(5px)\",\n opacity: 0.5,\n y: direction === \"top\" ? 5 : -5,\n },\n { filter: \"blur(0px)\", opacity: 1, y: 0 },\n ],\n [direction]\n );\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) =>\n stepCount === 1 ? 0 : i / (stepCount - 1)\n );\n return (\n <p ref={ref} className={`blur-text ${className} flex flex-wrap`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n const spanTransition: Transition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000,\n ease: easing,\n };\n return (\n <motion.span\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={\n index === elements.length - 1 ? onAnimationComplete : undefined\n }\n style={{\n display: \"inline-block\",\n willChange: \"transform, filter, opacity\",\n }}\n >\n {segment === \" \" ? \"\\u00A0\" : segment}\n {animateBy === \"words\" && index < elements.length - 1 && \"\\u00A0\"}\n </motion.span>\n );\n })}\n </p>\n );\n};\nexport default BlurText;\n"],"names":["buildKeyframes","from","steps","keys","s","keyframes","k","BlurText","text","delay","className","animateBy","direction","threshold","rootMargin","animationFrom","animationTo","easing","t","onAnimationComplete","stepDuration","elements","inView","setInView","useState","ref","useRef","useEffect","observer","entry","defaultFrom","useMemo","defaultTo","fromSnapshot","toSnapshots","stepCount","totalDuration","times","_","i","jsx","segment","index","animateKeyframes","spanTransition","jsxs","motion"],"mappings":"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"}
1
+ {"version":3,"file":"BlurText.js","sources":["../../../../src/lib/TextAnimation/BlurText.tsx"],"sourcesContent":["\"use client\";\nimport { motion, type Transition, type Easing } from \"motion/react\";\nimport { useEffect, useRef, useState, useMemo } from \"react\";\ntype BlurTextProps = {\n text?: string;\n delay?: number;\n className?: string;\n animateBy?: \"words\" | \"letters\";\n direction?: \"top\" | \"bottom\";\n threshold?: number;\n rootMargin?: string;\n animationFrom?: Record<string, string | number>;\n animationTo?: Array<Record<string, string | number>>;\n easing?: Easing | Easing[];\n onAnimationComplete?: () => void;\n stepDuration?: number;\n};\nconst buildKeyframes = (\n from: Record<string, string | number>,\n steps: Array<Record<string, string | number>>\n): Record<string, Array<string | number>> => {\n const keys = new Set<string>([\n ...Object.keys(from),\n ...steps.flatMap((s) => Object.keys(s)),\n ]);\n const keyframes: Record<string, Array<string | number>> = {};\n keys.forEach((k) => {\n keyframes[k] = [from[k], ...steps.map((s) => s[k])];\n });\n return keyframes;\n};\nconst BlurText: React.FC<BlurTextProps> = ({\n text = \"\",\n delay = 200,\n className = \"\",\n animateBy = \"words\",\n direction = \"top\",\n threshold = 0.1,\n rootMargin = \"0px\",\n animationFrom,\n animationTo,\n easing = (t: number) => t,\n onAnimationComplete,\n stepDuration = 0.35,\n}) => {\n const elements = animateBy === \"words\" ? text.split(\" \") : text.split(\"\");\n const [inView, setInView] = useState(false);\n const ref = useRef<HTMLParagraphElement>(null);\n useEffect(() => {\n if (!ref.current) return;\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n observer.unobserve(ref.current as Element);\n }\n },\n { threshold, rootMargin }\n );\n observer.observe(ref.current);\n return () => observer.disconnect();\n }, [threshold, rootMargin]);\n const defaultFrom = useMemo(\n () =>\n direction === \"top\"\n ? { filter: \"blur(10px)\", opacity: 0, y: -50 }\n : { filter: \"blur(10px)\", opacity: 0, y: 50 },\n [direction]\n );\n const defaultTo = useMemo(\n () => [\n {\n filter: \"blur(5px)\",\n opacity: 0.5,\n y: direction === \"top\" ? 5 : -5,\n },\n { filter: \"blur(0px)\", opacity: 1, y: 0 },\n ],\n [direction]\n );\n const fromSnapshot = animationFrom ?? defaultFrom;\n const toSnapshots = animationTo ?? defaultTo;\n const stepCount = toSnapshots.length + 1;\n const totalDuration = stepDuration * (stepCount - 1);\n const times = Array.from({ length: stepCount }, (_, i) =>\n stepCount === 1 ? 0 : i / (stepCount - 1)\n );\n return (\n <p ref={ref} className={`ds:blur-text ${className} ds:flex ds:flex-wrap`}>\n {elements.map((segment, index) => {\n const animateKeyframes = buildKeyframes(fromSnapshot, toSnapshots);\n const spanTransition: Transition = {\n duration: totalDuration,\n times,\n delay: (index * delay) / 1000,\n ease: easing,\n };\n return (\n <motion.span\n key={index}\n initial={fromSnapshot}\n animate={inView ? animateKeyframes : fromSnapshot}\n transition={spanTransition}\n onAnimationComplete={\n index === elements.length - 1 ? onAnimationComplete : undefined\n }\n style={{\n display: \"inline-block\",\n willChange: \"transform, filter, opacity\",\n }}\n >\n {segment === \" \" ? \"\\u00A0\" : segment}\n {animateBy === \"words\" && index < elements.length - 1 && \"\\u00A0\"}\n </motion.span>\n );\n })}\n </p>\n );\n};\nexport default BlurText;\n"],"names":["buildKeyframes","from","steps","keys","s","keyframes","k","BlurText","text","delay","className","animateBy","direction","threshold","rootMargin","animationFrom","animationTo","easing","t","onAnimationComplete","stepDuration","elements","inView","setInView","useState","ref","useRef","useEffect","observer","entry","defaultFrom","useMemo","defaultTo","fromSnapshot","toSnapshots","stepCount","totalDuration","times","_","i","jsx","segment","index","animateKeyframes","spanTransition","jsxs","motion"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsx as d } from "react/jsx-runtime";
1
+ import { jsx as p } from "react/jsx-runtime";
2
2
  import { useEffect as h } from "react";
3
3
  import { useAnimation as y, useMotionValue as k, motion as w } from "motion/react";
4
4
  const M = (a, e, r = !0) => ({
@@ -66,22 +66,22 @@ const M = (a, e, r = !0) => ({
66
66
  transition: n(e, t)
67
67
  });
68
68
  };
69
- return /* @__PURE__ */ d(
69
+ return /* @__PURE__ */ p(
70
70
  w.div,
71
71
  {
72
- className: `m-0 mx-auto rounded-full w-[200px] h-[200px] relative font-black text-foreground text-center cursor-pointer origin-center ${g}`,
72
+ className: `ds:m-0 ds:mx-auto ds:rounded-full ds:w-[200px] ds:h-[200px] ds:relative ds:font-black ds:text-foreground ds:text-center ds:cursor-pointer ds:origin-center ${g}`,
73
73
  style: { rotate: i },
74
74
  initial: { rotate: 0 },
75
75
  animate: o,
76
76
  onMouseEnter: m,
77
77
  onMouseLeave: u,
78
78
  children: l.map((t, s) => {
79
- const c = 360 / l.length * s, f = Math.PI / l.length, x = f * s, b = f * s, p = `rotateZ(${c}deg) translate3d(${x}px, ${b}px, 0)`;
80
- return /* @__PURE__ */ d(
79
+ const c = 360 / l.length * s, d = Math.PI / l.length, x = d * s, b = d * s, f = `rotateZ(${c}deg) translate3d(${x}px, ${b}px, 0)`;
80
+ return /* @__PURE__ */ p(
81
81
  "span",
82
82
  {
83
- className: "absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]",
84
- style: { transform: p, WebkitTransform: p },
83
+ className: "ds:absolute ds:inline-block ds:inset-0 ds:text-2xl ds:transition-all ds:duration-500 ds:ease-[cubic-bezier(0,0,0,1)]",
84
+ style: { transform: f, WebkitTransform: f },
85
85
  children: t
86
86
  },
87
87
  s
@@ -1 +1 @@
1
- {"version":3,"file":"CircularText.js","sources":["../../../../src/lib/TextAnimation/CircularText.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n motion,\n useAnimation,\n useMotionValue,\n MotionValue,\n type Transition,\n} from \"motion/react\";\n\ninterface CircularTextProps {\n text: string;\n spinDuration?: number;\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\n className?: string;\n}\n\nconst getRotationTransition = (\n duration: number,\n from: number,\n loop: boolean = true\n) => ({\n from,\n to: from + 360,\n ease: \"linear\" as const,\n duration,\n type: \"tween\" as const,\n repeat: loop ? Infinity : 0,\n});\n\nconst getTransition = (duration: number, from: number) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: \"spring\" as const,\n damping: 20,\n stiffness: 300,\n },\n});\n\nconst CircularText: React.FC<CircularTextProps> = ({\n text,\n spinDuration = 20,\n onHover = \"speedUp\",\n className = \"\",\n}) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation: MotionValue<number> = useMotionValue(0);\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n let transitionConfig: ReturnType<typeof getTransition> | Transition;\n let scaleVal = 1;\n switch (onHover) {\n case \"slowDown\":\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case \"speedUp\":\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case \"pause\":\n transitionConfig = {\n rotate: { type: \"spring\", damping: 20, stiffness: 300 },\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\n };\n break;\n case \"goBonkers\":\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig,\n });\n };\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n };\n return (\n <motion.div\n className={`m-0 mx-auto rounded-full w-[200px] h-[200px] relative font-black text-foreground text-center cursor-pointer origin-center ${className}`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = `rotateZ(${rotationDeg}deg) translate3d(${x}px, ${y}px, 0)`;\n return (\n <span\n key={i}\n className=\"absolute inline-block inset-0 text-2xl transition-all duration-500 ease-[cubic-bezier(0,0,0,1)]\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\nexport default CircularText;\n"],"names":["getRotationTransition","duration","from","loop","getTransition","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","transitionConfig","scaleVal","handleHoverEnd","jsx","motion","letter","i","rotationDeg","factor","y","transform"],"mappings":"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"}
1
+ {"version":3,"file":"CircularText.js","sources":["../../../../src/lib/TextAnimation/CircularText.tsx"],"sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n motion,\n useAnimation,\n useMotionValue,\n MotionValue,\n type Transition,\n} from \"motion/react\";\n\ninterface CircularTextProps {\n text: string;\n spinDuration?: number;\n onHover?: \"slowDown\" | \"speedUp\" | \"pause\" | \"goBonkers\";\n className?: string;\n}\n\nconst getRotationTransition = (\n duration: number,\n from: number,\n loop: boolean = true\n) => ({\n from,\n to: from + 360,\n ease: \"linear\" as const,\n duration,\n type: \"tween\" as const,\n repeat: loop ? Infinity : 0,\n});\n\nconst getTransition = (duration: number, from: number) => ({\n rotate: getRotationTransition(duration, from),\n scale: {\n type: \"spring\" as const,\n damping: 20,\n stiffness: 300,\n },\n});\n\nconst CircularText: React.FC<CircularTextProps> = ({\n text,\n spinDuration = 20,\n onHover = \"speedUp\",\n className = \"\",\n}) => {\n const letters = Array.from(text);\n const controls = useAnimation();\n const rotation: MotionValue<number> = useMotionValue(0);\n useEffect(() => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n }, [spinDuration, text, onHover, controls, rotation]);\n const handleHoverStart = () => {\n const start = rotation.get();\n if (!onHover) return;\n let transitionConfig: ReturnType<typeof getTransition> | Transition;\n let scaleVal = 1;\n switch (onHover) {\n case \"slowDown\":\n transitionConfig = getTransition(spinDuration * 2, start);\n break;\n case \"speedUp\":\n transitionConfig = getTransition(spinDuration / 4, start);\n break;\n case \"pause\":\n transitionConfig = {\n rotate: { type: \"spring\", damping: 20, stiffness: 300 },\n scale: { type: \"spring\", damping: 20, stiffness: 300 },\n };\n break;\n case \"goBonkers\":\n transitionConfig = getTransition(spinDuration / 20, start);\n scaleVal = 0.8;\n break;\n default:\n transitionConfig = getTransition(spinDuration, start);\n }\n controls.start({\n rotate: start + 360,\n scale: scaleVal,\n transition: transitionConfig,\n });\n };\n const handleHoverEnd = () => {\n const start = rotation.get();\n controls.start({\n rotate: start + 360,\n scale: 1,\n transition: getTransition(spinDuration, start),\n });\n };\n return (\n <motion.div\n className={`ds:m-0 ds:mx-auto ds:rounded-full ds:w-[200px] ds:h-[200px] ds:relative ds:font-black ds:text-foreground ds:text-center ds:cursor-pointer ds:origin-center ${className}`}\n style={{ rotate: rotation }}\n initial={{ rotate: 0 }}\n animate={controls}\n onMouseEnter={handleHoverStart}\n onMouseLeave={handleHoverEnd}\n >\n {letters.map((letter, i) => {\n const rotationDeg = (360 / letters.length) * i;\n const factor = Math.PI / letters.length;\n const x = factor * i;\n const y = factor * i;\n const transform = `rotateZ(${rotationDeg}deg) translate3d(${x}px, ${y}px, 0)`;\n return (\n <span\n key={i}\n className=\"ds:absolute ds:inline-block ds:inset-0 ds:text-2xl ds:transition-all ds:duration-500 ds:ease-[cubic-bezier(0,0,0,1)]\"\n style={{ transform, WebkitTransform: transform }}\n >\n {letter}\n </span>\n );\n })}\n </motion.div>\n );\n};\n\nexport default CircularText;\n"],"names":["getRotationTransition","duration","from","loop","getTransition","CircularText","text","spinDuration","onHover","className","letters","controls","useAnimation","rotation","useMotionValue","useEffect","start","handleHoverStart","transitionConfig","scaleVal","handleHoverEnd","jsx","motion","letter","i","rotationDeg","factor","y","transform"],"mappings":"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"}
@@ -34,31 +34,31 @@ import "@radix-ui/react-slider";
34
34
  import "../../packages/ui/src/components/tabs.js";
35
35
  import "../../packages/ui/src/components/toggle.js";
36
36
  function ei({
37
- ref: y,
37
+ ref: d,
38
38
  words: r,
39
39
  duration: n = 3e3,
40
- letterDelay: h = 0.05,
41
- wordDelay: l = 0.3,
42
- className: b,
43
- ...x
40
+ letterDelay: y = 0.05,
41
+ wordDelay: s = 0.3,
42
+ className: h,
43
+ ...b
44
44
  }) {
45
- const m = t.useRef(null);
45
+ const l = t.useRef(null);
46
46
  t.useImperativeHandle(
47
- y,
48
- () => m.current
47
+ d,
48
+ () => l.current
49
49
  );
50
- const [o, g] = t.useState(r[0]), [s, c] = t.useState(!1), f = t.useCallback(() => {
50
+ const [o, x] = t.useState(r[0]), [m, c] = t.useState(!1), f = t.useCallback(() => {
51
51
  const i = r[r.indexOf(o) + 1] || r[0];
52
- g(i), c(!0);
52
+ x(i), c(!0);
53
53
  }, [o, r]);
54
54
  return t.useEffect(() => {
55
- if (!s) {
55
+ if (!m) {
56
56
  const i = setTimeout(() => {
57
57
  f();
58
58
  }, n);
59
59
  return () => clearTimeout(i);
60
60
  }
61
- }, [s, n, f]), /* @__PURE__ */ e("span", { ref: m, "data-slot": "flip-words", ...x, children: /* @__PURE__ */ e(
61
+ }, [m, n, f]), /* @__PURE__ */ e("span", { ref: l, "data-slot": "flip-words", ...b, children: /* @__PURE__ */ e(
62
62
  A,
63
63
  {
64
64
  onExitComplete: () => {
@@ -89,8 +89,8 @@ function ei({
89
89
  position: "absolute"
90
90
  },
91
91
  className: N(
92
- "inline-block relative text-left px-2 will-change-transform will-change-opacity will-change-filter",
93
- b
92
+ "ds:inline-block ds:relative ds:text-left ds:px-2 ds:will-change-transform ds:will-change-opacity ds:will-change-filter",
93
+ h
94
94
  ),
95
95
  children: o.split(" ").map((i, a) => /* @__PURE__ */ k(
96
96
  p.span,
@@ -98,26 +98,26 @@ function ei({
98
98
  initial: { opacity: 0, y: 10, filter: "blur(8px)" },
99
99
  animate: { opacity: 1, y: 0, filter: "blur(0px)" },
100
100
  transition: {
101
- delay: a * l,
101
+ delay: a * s,
102
102
  duration: 0.3
103
103
  },
104
- className: "inline-block whitespace-nowrap",
104
+ className: "ds:inline-block ds:whitespace-nowrap",
105
105
  children: [
106
- i.split("").map((d, u) => /* @__PURE__ */ e(
106
+ i.split("").map((g, u) => /* @__PURE__ */ e(
107
107
  p.span,
108
108
  {
109
109
  initial: { opacity: 0, y: 10, filter: "blur(8px)" },
110
110
  animate: { opacity: 1, y: 0, filter: "blur(0px)" },
111
111
  transition: {
112
- delay: a * l + u * h,
112
+ delay: a * s + u * y,
113
113
  duration: 0.2
114
114
  },
115
- className: "inline-block will-change-transform will-change-opacity will-change-filter",
116
- children: d
115
+ className: "ds:inline-block ds:will-change-transform ds:will-change-opacity ds:will-change-filter",
116
+ children: g
117
117
  },
118
118
  `${i}-${u}`
119
119
  )),
120
- /* @__PURE__ */ e("span", { className: "inline-block", children: " " })
120
+ /* @__PURE__ */ e("span", { className: "ds:inline-block", children: " " })
121
121
  ]
122
122
  },
123
123
  `${i}-${a}`
@@ -1 +1 @@
1
- {"version":3,"file":"FlipWords.js","sources":["../../../../src/lib/TextAnimation/FlipWords.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype FlipWordsProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n words: string[];\n duration?: number;\n letterDelay?: number;\n wordDelay?: number;\n};\n\nfunction FlipWords({\n ref,\n words,\n duration = 3000,\n letterDelay = 0.05,\n wordDelay = 0.3,\n className,\n ...props\n}: FlipWordsProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(\n ref as any,\n () => localRef.current as HTMLSpanElement\n );\n const [currentWord, setCurrentWord] = React.useState(words[0]);\n const [isAnimating, setIsAnimating] = React.useState<boolean>(false);\n\n const startAnimation = React.useCallback(() => {\n const word = words[words.indexOf(currentWord) + 1] || words[0];\n setCurrentWord(word);\n setIsAnimating(true);\n }, [currentWord, words]);\n\n React.useEffect(() => {\n if (!isAnimating) {\n const timeoutId = setTimeout(() => {\n startAnimation();\n }, duration);\n return () => clearTimeout(timeoutId);\n }\n }, [isAnimating, duration, startAnimation]);\n\n return (\n <span ref={localRef} data-slot=\"flip-words\" {...(props as any)}>\n <AnimatePresence\n onExitComplete={() => {\n setIsAnimating(false);\n }}\n >\n <motion.span\n initial={{\n opacity: 0,\n y: 10,\n }}\n animate={{\n opacity: 1,\n y: 0,\n }}\n transition={{\n type: \"spring\",\n stiffness: 100,\n damping: 10,\n }}\n exit={{\n opacity: 0,\n y: -40,\n x: 40,\n filter: \"blur(8px)\",\n scale: 2,\n position: \"absolute\",\n }}\n className={cn(\n \"inline-block relative text-left px-2 will-change-transform will-change-opacity will-change-filter\",\n className\n )}\n key={currentWord}\n >\n {currentWord.split(\" \").map((word, wordIndex) => (\n <motion.span\n key={`${word}-${wordIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay,\n duration: 0.3,\n }}\n className=\"inline-block whitespace-nowrap\"\n >\n {word.split(\"\").map((letter, letterIndex) => (\n <motion.span\n key={`${word}-${letterIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay + letterIndex * letterDelay,\n duration: 0.2,\n }}\n className=\"inline-block will-change-transform will-change-opacity will-change-filter\"\n >\n {letter}\n </motion.span>\n ))}\n <span className=\"inline-block\">&nbsp;</span>\n </motion.span>\n ))}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\nexport { FlipWords, type FlipWordsProps };\n"],"names":["FlipWords","ref","words","duration","letterDelay","wordDelay","className","props","localRef","React","currentWord","setCurrentWord","isAnimating","setIsAnimating","startAnimation","word","timeoutId","jsx","AnimatePresence","motion","cn","wordIndex","jsxs","letter","letterIndex"],"mappings":"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"}
1
+ {"version":3,"file":"FlipWords.js","sources":["../../../../src/lib/TextAnimation/FlipWords.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport { AnimatePresence, motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype FlipWordsProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n words: string[];\n duration?: number;\n letterDelay?: number;\n wordDelay?: number;\n};\n\nfunction FlipWords({\n ref,\n words,\n duration = 3000,\n letterDelay = 0.05,\n wordDelay = 0.3,\n className,\n ...props\n}: FlipWordsProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(\n ref as any,\n () => localRef.current as HTMLSpanElement\n );\n const [currentWord, setCurrentWord] = React.useState(words[0]);\n const [isAnimating, setIsAnimating] = React.useState<boolean>(false);\n\n const startAnimation = React.useCallback(() => {\n const word = words[words.indexOf(currentWord) + 1] || words[0];\n setCurrentWord(word);\n setIsAnimating(true);\n }, [currentWord, words]);\n\n React.useEffect(() => {\n if (!isAnimating) {\n const timeoutId = setTimeout(() => {\n startAnimation();\n }, duration);\n return () => clearTimeout(timeoutId);\n }\n }, [isAnimating, duration, startAnimation]);\n\n return (\n <span ref={localRef} data-slot=\"flip-words\" {...(props as any)}>\n <AnimatePresence\n onExitComplete={() => {\n setIsAnimating(false);\n }}\n >\n <motion.span\n initial={{\n opacity: 0,\n y: 10,\n }}\n animate={{\n opacity: 1,\n y: 0,\n }}\n transition={{\n type: \"spring\",\n stiffness: 100,\n damping: 10,\n }}\n exit={{\n opacity: 0,\n y: -40,\n x: 40,\n filter: \"blur(8px)\",\n scale: 2,\n position: \"absolute\",\n }}\n className={cn(\n \"ds:inline-block ds:relative ds:text-left ds:px-2 ds:will-change-transform ds:will-change-opacity ds:will-change-filter\",\n className\n )}\n key={currentWord}\n >\n {currentWord.split(\" \").map((word, wordIndex) => (\n <motion.span\n key={`${word}-${wordIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay,\n duration: 0.3,\n }}\n className=\"ds:inline-block ds:whitespace-nowrap\"\n >\n {word.split(\"\").map((letter, letterIndex) => (\n <motion.span\n key={`${word}-${letterIndex}`}\n initial={{ opacity: 0, y: 10, filter: \"blur(8px)\" }}\n animate={{ opacity: 1, y: 0, filter: \"blur(0px)\" }}\n transition={{\n delay: wordIndex * wordDelay + letterIndex * letterDelay,\n duration: 0.2,\n }}\n className=\"ds:inline-block ds:will-change-transform ds:will-change-opacity ds:will-change-filter\"\n >\n {letter}\n </motion.span>\n ))}\n <span className=\"ds:inline-block\">&nbsp;</span>\n </motion.span>\n ))}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\nexport { FlipWords, type FlipWordsProps };\n"],"names":["FlipWords","ref","words","duration","letterDelay","wordDelay","className","props","localRef","React","currentWord","setCurrentWord","isAnimating","setIsAnimating","startAnimation","word","timeoutId","jsx","AnimatePresence","motion","cn","wordIndex","jsxs","letter","letterIndex"],"mappings":"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"}
@@ -7,7 +7,7 @@ import "../../packages/ui/src/components/button-group.js";
7
7
  import "../../packages/ui/src/components/input.js";
8
8
  import "../../packages/ui/src/components/textarea.js";
9
9
  import "@radix-ui/react-label";
10
- import { cn as l } from "../../packages/ui/src/lib/utils.js";
10
+ import { cn as d } from "../../packages/ui/src/lib/utils.js";
11
11
  import "../../packages/ui/src/components/select.js";
12
12
  import "../../packages/ui/src/components/combobox.js";
13
13
  import "@radix-ui/react-tooltip";
@@ -52,13 +52,13 @@ function R({
52
52
  "span",
53
53
  {
54
54
  "data-slot": "gradient-text",
55
- className: l("relative inline-block", p),
55
+ className: d("ds:relative ds:inline-block", p),
56
56
  ...n,
57
57
  children: [
58
58
  /* @__PURE__ */ o(
59
59
  m.span,
60
60
  {
61
- className: "m-0 text-transparent",
61
+ className: "ds:m-0 ds:text-transparent",
62
62
  style: i,
63
63
  animate: { backgroundPosition: ["0% 0%", "200% 0%"] },
64
64
  transition: r,
@@ -68,7 +68,7 @@ function R({
68
68
  a && /* @__PURE__ */ o(
69
69
  m.span,
70
70
  {
71
- className: "m-0 absolute top-0 left-0 text-transparent blur-sm mix-blend-plus-lighter",
71
+ className: "ds:m-0 ds:absolute ds:top-0 ds:left-0 ds:text-transparent ds:blur-sm ds:mix-blend-plus-lighter",
72
72
  style: i,
73
73
  animate: { backgroundPosition: ["0% 0%", "200% 0%"] },
74
74
  transition: r,
@@ -1 +1 @@
1
- {"version":3,"file":"GradientText.js","sources":["../../../../src/lib/TextAnimation/GradientText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { motion, type Transition } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype GradientTextProps = React.ComponentProps<\"span\"> & {\n text: string;\n gradient?: string;\n neon?: boolean;\n transition?: Transition;\n};\n\nfunction GradientText({\n text,\n className,\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\n neon = false,\n transition = { duration: 3, repeat: Infinity, ease: \"linear\" },\n ...props\n}: GradientTextProps) {\n const baseStyle: React.CSSProperties = {\n backgroundImage: gradient,\n backgroundClip: \"text\",\n WebkitBackgroundClip: \"text\",\n backgroundSize: \"200% 100%\",\n color: \"transparent\",\n };\n\n return (\n <span\n data-slot=\"gradient-text\"\n className={cn(\"relative inline-block\", className)}\n {...(props as any)}\n >\n <motion.span\n className=\"m-0 text-transparent\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n\n {neon && (\n <motion.span\n className=\"m-0 absolute top-0 left-0 text-transparent blur-sm mix-blend-plus-lighter\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n )}\n </span>\n );\n}\n\nexport { GradientText, type GradientTextProps };\n"],"names":["GradientText","text","className","gradient","neon","transition","props","baseStyle","jsxs","cn","jsx","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa,EAAE,UAAU,GAAG,QAAQ,OAAU,MAAM,SAAA;AAAA,EACpD,GAAGC;AACL,GAAsB;AACpB,QAAMC,IAAiC;AAAA,IACrC,iBAAiBJ;AAAA,IACjB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA;AAGT,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,yBAAyBP,CAAS;AAAA,MAC/C,GAAII;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGFG,KACC,gBAAAM;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"GradientText.js","sources":["../../../../src/lib/TextAnimation/GradientText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { motion, type Transition } from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype GradientTextProps = React.ComponentProps<\"span\"> & {\n text: string;\n gradient?: string;\n neon?: boolean;\n transition?: Transition;\n};\n\nfunction GradientText({\n text,\n className,\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\n neon = false,\n transition = { duration: 3, repeat: Infinity, ease: \"linear\" },\n ...props\n}: GradientTextProps) {\n const baseStyle: React.CSSProperties = {\n backgroundImage: gradient,\n backgroundClip: \"text\",\n WebkitBackgroundClip: \"text\",\n backgroundSize: \"200% 100%\",\n color: \"transparent\",\n };\n\n return (\n <span\n data-slot=\"gradient-text\"\n className={cn(\"ds:relative ds:inline-block\", className)}\n {...(props as any)}\n >\n <motion.span\n className=\"ds:m-0 ds:text-transparent\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n\n {neon && (\n <motion.span\n className=\"ds:m-0 ds:absolute ds:top-0 ds:left-0 ds:text-transparent ds:blur-sm ds:mix-blend-plus-lighter\"\n style={baseStyle as any}\n animate={{ backgroundPosition: [\"0% 0%\", \"200% 0%\"] }}\n transition={transition}\n >\n {text}\n </motion.span>\n )}\n </span>\n );\n}\n\nexport { GradientText, type GradientTextProps };\n"],"names":["GradientText","text","className","gradient","neon","transition","props","baseStyle","jsxs","cn","jsx","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,YAAAC,IAAa,EAAE,UAAU,GAAG,QAAQ,OAAU,MAAM,SAAA;AAAA,EACpD,GAAGC;AACL,GAAsB;AACpB,QAAMC,IAAiC;AAAA,IACrC,iBAAiBJ;AAAA,IACjB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,OAAO;AAAA,EAAA;AAGT,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,EAAG,+BAA+BP,CAAS;AAAA,MACrD,GAAII;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGFG,KACC,gBAAAM;AAAA,UAACC,EAAO;AAAA,UAAP;AAAA,YACC,WAAU;AAAA,YACV,OAAOJ;AAAA,YACP,SAAS,EAAE,oBAAoB,CAAC,SAAS,SAAS,EAAA;AAAA,YAClD,YAAAF;AAAA,YAEC,UAAAJ;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,6 +1,6 @@
1
- import { jsxs as m, jsx as i } from "react/jsx-runtime";
2
- import * as s from "react";
3
- import { useInView as y, motion as d } from "motion/react";
1
+ import { jsxs as c, jsx as i } from "react/jsx-runtime";
2
+ import * as l from "react";
3
+ import { useInView as y, motion as m } from "motion/react";
4
4
  const p = {
5
5
  initial: { rotateX: 0 },
6
6
  animate: { rotateX: 90 }
@@ -14,54 +14,54 @@ function k({
14
14
  inView: f = !1,
15
15
  inViewMargin: N = "0px",
16
16
  inViewOnce: b = !0,
17
- text: n,
17
+ text: s,
18
18
  ...h
19
19
  }) {
20
- const r = s.useRef(null);
21
- s.useImperativeHandle(e, () => r.current);
22
- const I = y(r, {
20
+ const d = l.useRef(null);
21
+ l.useImperativeHandle(e, () => d.current);
22
+ const I = y(d, {
23
23
  once: b,
24
24
  margin: N
25
- }), c = !f || I, v = s.useMemo(() => n.split(""), [n]);
26
- return /* @__PURE__ */ m("span", { "data-slot": "rolling-text", ...h, ref: e, children: [
27
- v.map((t, l) => /* @__PURE__ */ m(
25
+ }), r = !f || I, v = l.useMemo(() => s.split(""), [s]);
26
+ return /* @__PURE__ */ c("span", { "data-slot": "rolling-text", ...h, ref: e, children: [
27
+ v.map((n, t) => /* @__PURE__ */ c(
28
28
  "span",
29
29
  {
30
- className: "relative inline-block perspective-[9999999px] transform-3d w-auto",
30
+ className: "ds:relative ds:inline-block ds:perspective-[9999999px] ds:transform-3d ds:w-auto",
31
31
  "aria-hidden": "true",
32
32
  children: [
33
33
  /* @__PURE__ */ i(
34
- d.span,
34
+ m.span,
35
35
  {
36
- className: "absolute inline-block backface-hidden origin-[50%_25%]",
36
+ className: "ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_25%]",
37
37
  initial: p.initial,
38
- animate: c ? p.animate : void 0,
38
+ animate: r ? p.animate : void 0,
39
39
  transition: {
40
40
  ...a,
41
- delay: l * (a?.delay ?? 0)
41
+ delay: t * (a?.delay ?? 0)
42
42
  },
43
- children: o(t)
43
+ children: o(n)
44
44
  }
45
45
  ),
46
46
  /* @__PURE__ */ i(
47
- d.span,
47
+ m.span,
48
48
  {
49
- className: "absolute inline-block backface-hidden origin-[50%_100%]",
49
+ className: "ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_100%]",
50
50
  initial: u.initial,
51
- animate: c ? u.animate : void 0,
51
+ animate: r ? u.animate : void 0,
52
52
  transition: {
53
53
  ...a,
54
- delay: l * (a?.delay ?? 0) + 0.3
54
+ delay: t * (a?.delay ?? 0) + 0.3
55
55
  },
56
- children: o(t)
56
+ children: o(n)
57
57
  }
58
58
  ),
59
- /* @__PURE__ */ i("span", { className: "invisible", children: o(t) })
59
+ /* @__PURE__ */ i("span", { className: "ds:invisible", children: o(n) })
60
60
  ]
61
61
  },
62
- l
62
+ t
63
63
  )),
64
- /* @__PURE__ */ i("span", { className: "sr-only", children: n })
64
+ /* @__PURE__ */ i("span", { className: "ds:sr-only", children: s })
65
65
  ] });
66
66
  }
67
67
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"RollingText.js","sources":["../../../../src/lib/TextAnimation/RollingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useInView,\n type UseInViewOptions,\n type Transition,\n} from \"motion/react\";\n\nconst ENTRY_ANIMATION = {\n initial: { rotateX: 0 },\n animate: { rotateX: 90 },\n};\n\nconst EXIT_ANIMATION = {\n initial: { rotateX: 90 },\n animate: { rotateX: 0 },\n};\n\nconst formatCharacter = (char: string) => (char === \" \" ? \"\\u00A0\" : char);\n\ntype RollingTextProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n transition?: Transition;\n inView?: boolean;\n inViewMargin?: UseInViewOptions[\"margin\"];\n inViewOnce?: boolean;\n text: string;\n};\n\nfunction RollingText({\n ref,\n transition = { duration: 0.5, delay: 0.1, ease: \"easeOut\" },\n inView = false,\n inViewMargin = \"0px\",\n inViewOnce = true,\n text,\n ...props\n}: RollingTextProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(ref as any, () => localRef.current!);\n\n const inViewResult = useInView(localRef, {\n once: inViewOnce,\n margin: inViewMargin,\n });\n const isInView = !inView || inViewResult;\n\n const characters = React.useMemo(() => text.split(\"\"), [text]);\n\n return (\n <span data-slot=\"rolling-text\" {...(props as any)} ref={ref}>\n {characters.map((char, idx) => (\n <span\n key={idx}\n className=\"relative inline-block perspective-[9999999px] transform-3d w-auto\"\n aria-hidden=\"true\"\n >\n <motion.span\n className=\"absolute inline-block backface-hidden origin-[50%_25%]\"\n initial={ENTRY_ANIMATION.initial}\n animate={isInView ? ENTRY_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0),\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <motion.span\n className=\"absolute inline-block backface-hidden origin-[50%_100%]\"\n initial={EXIT_ANIMATION.initial}\n animate={isInView ? EXIT_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0) + 0.3,\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <span className=\"invisible\">{formatCharacter(char)}</span>\n </span>\n ))}\n\n <span className=\"sr-only\">{text}</span>\n </span>\n );\n}\n\nexport { RollingText, type RollingTextProps };\n"],"names":["ENTRY_ANIMATION","EXIT_ANIMATION","formatCharacter","char","RollingText","ref","transition","inView","inViewMargin","inViewOnce","text","props","localRef","React","inViewResult","useInView","isInView","characters","idx","jsxs","jsx","motion"],"mappings":";;;AAUA,MAAMA,IAAkB;AAAA,EACtB,SAAS,EAAE,SAAS,EAAA;AAAA,EACpB,SAAS,EAAE,SAAS,GAAA;AACtB,GAEMC,IAAiB;AAAA,EACrB,SAAS,EAAE,SAAS,GAAA;AAAA,EACpB,SAAS,EAAE,SAAS,EAAA;AACtB,GAEMC,IAAkB,CAACC,MAAkBA,MAAS,MAAM,MAAWA;AAUrE,SAASC,EAAY;AAAA,EACnB,KAAAC;AAAA,EACA,YAAAC,IAAa,EAAE,UAAU,KAAK,OAAO,KAAK,MAAM,UAAA;AAAA,EAChD,QAAAC,IAAS;AAAA,EACT,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,MAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAWC,EAAM,OAAwB,IAAI;AACnD,EAAAA,EAAM,oBAAoBR,GAAY,MAAMO,EAAS,OAAQ;AAE7D,QAAME,IAAeC,EAAUH,GAAU;AAAA,IACvC,MAAMH;AAAA,IACN,QAAQD;AAAA,EAAA,CACT,GACKQ,IAAW,CAACT,KAAUO,GAEtBG,IAAaJ,EAAM,QAAQ,MAAMH,EAAK,MAAM,EAAE,GAAG,CAACA,CAAI,CAAC;AAE7D,2BACG,QAAA,EAAK,aAAU,gBAAgB,GAAIC,GAAe,KAAAN,GAChD,UAAA;AAAA,IAAAY,EAAW,IAAI,CAACd,GAAMe,MACrB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASrB,EAAgB;AAAA,cACzB,SAASgB,IAAWhB,EAAgB,UAAU;AAAA,cAC9C,YAAY;AAAA,gBACV,GAAGM;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS;AAAA,cAAA;AAAA,cAGpC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAiB;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASpB,EAAe;AAAA,cACxB,SAASe,IAAWf,EAAe,UAAU;AAAA,cAC7C,YAAY;AAAA,gBACV,GAAGK;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS,KAAK;AAAA,cAAA;AAAA,cAGzC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEtB,QAAA,EAAK,WAAU,aAAa,UAAAD,EAAgBC,CAAI,EAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MA1B9Ce;AAAA,IAAA,CA4BR;AAAA,IAED,gBAAAE,EAAC,QAAA,EAAK,WAAU,WAAW,UAAAV,EAAA,CAAK;AAAA,EAAA,GAClC;AAEJ;"}
1
+ {"version":3,"file":"RollingText.js","sources":["../../../../src/lib/TextAnimation/RollingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n motion,\n useInView,\n type UseInViewOptions,\n type Transition,\n} from \"motion/react\";\n\nconst ENTRY_ANIMATION = {\n initial: { rotateX: 0 },\n animate: { rotateX: 90 },\n};\n\nconst EXIT_ANIMATION = {\n initial: { rotateX: 90 },\n animate: { rotateX: 0 },\n};\n\nconst formatCharacter = (char: string) => (char === \" \" ? \"\\u00A0\" : char);\n\ntype RollingTextProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n transition?: Transition;\n inView?: boolean;\n inViewMargin?: UseInViewOptions[\"margin\"];\n inViewOnce?: boolean;\n text: string;\n};\n\nfunction RollingText({\n ref,\n transition = { duration: 0.5, delay: 0.1, ease: \"easeOut\" },\n inView = false,\n inViewMargin = \"0px\",\n inViewOnce = true,\n text,\n ...props\n}: RollingTextProps) {\n const localRef = React.useRef<HTMLSpanElement>(null);\n React.useImperativeHandle(ref as any, () => localRef.current!);\n\n const inViewResult = useInView(localRef, {\n once: inViewOnce,\n margin: inViewMargin,\n });\n const isInView = !inView || inViewResult;\n\n const characters = React.useMemo(() => text.split(\"\"), [text]);\n\n return (\n <span data-slot=\"rolling-text\" {...(props as any)} ref={ref}>\n {characters.map((char, idx) => (\n <span\n key={idx}\n className=\"ds:relative ds:inline-block ds:perspective-[9999999px] ds:transform-3d ds:w-auto\"\n aria-hidden=\"true\"\n >\n <motion.span\n className=\"ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_25%]\"\n initial={ENTRY_ANIMATION.initial}\n animate={isInView ? ENTRY_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0),\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <motion.span\n className=\"ds:absolute ds:inline-block ds:backface-hidden ds:origin-[50%_100%]\"\n initial={EXIT_ANIMATION.initial}\n animate={isInView ? EXIT_ANIMATION.animate : undefined}\n transition={{\n ...transition,\n delay: idx * (transition?.delay ?? 0) + 0.3,\n }}\n >\n {formatCharacter(char)}\n </motion.span>\n <span className=\"ds:invisible\">{formatCharacter(char)}</span>\n </span>\n ))}\n\n <span className=\"ds:sr-only\">{text}</span>\n </span>\n );\n}\n\nexport { RollingText, type RollingTextProps };\n"],"names":["ENTRY_ANIMATION","EXIT_ANIMATION","formatCharacter","char","RollingText","ref","transition","inView","inViewMargin","inViewOnce","text","props","localRef","React","inViewResult","useInView","isInView","characters","idx","jsxs","jsx","motion"],"mappings":";;;AAUA,MAAMA,IAAkB;AAAA,EACtB,SAAS,EAAE,SAAS,EAAA;AAAA,EACpB,SAAS,EAAE,SAAS,GAAA;AACtB,GAEMC,IAAiB;AAAA,EACrB,SAAS,EAAE,SAAS,GAAA;AAAA,EACpB,SAAS,EAAE,SAAS,EAAA;AACtB,GAEMC,IAAkB,CAACC,MAAkBA,MAAS,MAAM,MAAWA;AAUrE,SAASC,EAAY;AAAA,EACnB,KAAAC;AAAA,EACA,YAAAC,IAAa,EAAE,UAAU,KAAK,OAAO,KAAK,MAAM,UAAA;AAAA,EAChD,QAAAC,IAAS;AAAA,EACT,cAAAC,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,MAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAWC,EAAM,OAAwB,IAAI;AACnD,EAAAA,EAAM,oBAAoBR,GAAY,MAAMO,EAAS,OAAQ;AAE7D,QAAME,IAAeC,EAAUH,GAAU;AAAA,IACvC,MAAMH;AAAA,IACN,QAAQD;AAAA,EAAA,CACT,GACKQ,IAAW,CAACT,KAAUO,GAEtBG,IAAaJ,EAAM,QAAQ,MAAMH,EAAK,MAAM,EAAE,GAAG,CAACA,CAAI,CAAC;AAE7D,2BACG,QAAA,EAAK,aAAU,gBAAgB,GAAIC,GAAe,KAAAN,GAChD,UAAA;AAAA,IAAAY,EAAW,IAAI,CAACd,GAAMe,MACrB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASrB,EAAgB;AAAA,cACzB,SAASgB,IAAWhB,EAAgB,UAAU;AAAA,cAC9C,YAAY;AAAA,gBACV,GAAGM;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS;AAAA,cAAA;AAAA,cAGpC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAiB;AAAA,YAACC,EAAO;AAAA,YAAP;AAAA,cACC,WAAU;AAAA,cACV,SAASpB,EAAe;AAAA,cACxB,SAASe,IAAWf,EAAe,UAAU;AAAA,cAC7C,YAAY;AAAA,gBACV,GAAGK;AAAA,gBACH,OAAOY,KAAOZ,GAAY,SAAS,KAAK;AAAA,cAAA;AAAA,cAGzC,YAAgBH,CAAI;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEtB,QAAA,EAAK,WAAU,gBAAgB,UAAAD,EAAgBC,CAAI,EAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MA1BjDe;AAAA,IAAA,CA4BR;AAAA,IAED,gBAAAE,EAAC,QAAA,EAAK,WAAU,cAAc,UAAAV,EAAA,CAAK;AAAA,EAAA,GACrC;AAEJ;"}
@@ -41,16 +41,16 @@ function Y({
41
41
  containerClassName: n,
42
42
  ...a
43
43
  }) {
44
- const [c, s] = p.useState(0);
44
+ const [s, c] = p.useState(0);
45
45
  p.useEffect(() => {
46
46
  if (!Array.isArray(r)) return;
47
- const l = setInterval(() => {
48
- s((d) => (d + 1) % r.length);
47
+ const d = setInterval(() => {
48
+ c((l) => (l + 1) % r.length);
49
49
  }, o);
50
- return () => clearInterval(l);
50
+ return () => clearInterval(d);
51
51
  }, [r, o]);
52
- const m = Array.isArray(r) ? r[c] : r;
53
- return /* @__PURE__ */ i("div", { className: u("overflow-hidden py-1", n), children: /* @__PURE__ */ i(f, { mode: "wait", children: /* @__PURE__ */ i(
52
+ const m = Array.isArray(r) ? r[s] : r;
53
+ return /* @__PURE__ */ i("div", { className: u("ds:overflow-hidden ds:py-1", n), children: /* @__PURE__ */ i(f, { mode: "wait", children: /* @__PURE__ */ i(
54
54
  y.div,
55
55
  {
56
56
  transition: e,
@@ -1 +1 @@
1
- {"version":3,"file":"RotatingText.js","sources":["../../../../src/lib/TextAnimation/RotatingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AnimatePresence,\n motion,\n type HTMLMotionProps,\n type Transition,\n} from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype RotatingTextProps = {\n text: string | string[];\n duration?: number;\n transition?: Transition;\n y?: number;\n containerClassName?: string;\n} & HTMLMotionProps<\"div\">;\n\nfunction RotatingText({\n text,\n y = -50,\n duration = 2000,\n transition = { duration: 0.3, ease: \"easeOut\" },\n containerClassName,\n ...props\n}: RotatingTextProps) {\n const [index, setIndex] = React.useState(0);\n\n React.useEffect(() => {\n if (!Array.isArray(text)) return;\n const interval = setInterval(() => {\n setIndex((prevIndex) => (prevIndex + 1) % text.length);\n }, duration);\n return () => clearInterval(interval);\n }, [text, duration]);\n\n const currentText = Array.isArray(text) ? text[index] : text;\n\n return (\n <div className={cn(\"overflow-hidden py-1\", containerClassName)}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentText}\n transition={transition}\n initial={{ opacity: 0, y: -y }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y }}\n {...(props as any)}\n >\n {currentText}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n}\n\nexport { RotatingText, type RotatingTextProps };\n"],"names":["RotatingText","text","y","duration","transition","containerClassName","props","index","setIndex","React","interval","prevIndex","currentText","jsx","cn","AnimatePresence","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,GAAAC,IAAI;AAAA,EACJ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa,EAAE,UAAU,KAAK,MAAM,UAAA;AAAA,EACpC,oBAAAC;AAAA,EACA,GAAGC;AACL,GAAsB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAM,SAAS,CAAC;AAE1C,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM,QAAQR,CAAI,EAAG;AAC1B,UAAMS,IAAW,YAAY,MAAM;AACjC,MAAAF,EAAS,CAACG,OAAeA,IAAY,KAAKV,EAAK,MAAM;AAAA,IACvD,GAAGE,CAAQ;AACX,WAAO,MAAM,cAAcO,CAAQ;AAAA,EACrC,GAAG,CAACT,GAAME,CAAQ,CAAC;AAEnB,QAAMS,IAAc,MAAM,QAAQX,CAAI,IAAIA,EAAKM,CAAK,IAAIN;AAExD,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAG,wBAAwBT,CAAkB,GAC3D,UAAA,gBAAAQ,EAACE,GAAA,EAAgB,MAAK,QACpB,UAAA,gBAAAF;AAAA,IAACG,EAAO;AAAA,IAAP;AAAA,MAEC,YAAAZ;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,CAACF,EAAA;AAAA,MAC3B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,MAC1B,MAAM,EAAE,SAAS,GAAG,GAAAA,EAAA;AAAA,MACnB,GAAII;AAAA,MAEJ,UAAAM;AAAA,IAAA;AAAA,IAPIA;AAAA,EAAA,GAST,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"RotatingText.js","sources":["../../../../src/lib/TextAnimation/RotatingText.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AnimatePresence,\n motion,\n type HTMLMotionProps,\n type Transition,\n} from \"motion/react\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype RotatingTextProps = {\n text: string | string[];\n duration?: number;\n transition?: Transition;\n y?: number;\n containerClassName?: string;\n} & HTMLMotionProps<\"div\">;\n\nfunction RotatingText({\n text,\n y = -50,\n duration = 2000,\n transition = { duration: 0.3, ease: \"easeOut\" },\n containerClassName,\n ...props\n}: RotatingTextProps) {\n const [index, setIndex] = React.useState(0);\n\n React.useEffect(() => {\n if (!Array.isArray(text)) return;\n const interval = setInterval(() => {\n setIndex((prevIndex) => (prevIndex + 1) % text.length);\n }, duration);\n return () => clearInterval(interval);\n }, [text, duration]);\n\n const currentText = Array.isArray(text) ? text[index] : text;\n\n return (\n <div className={cn(\"ds:overflow-hidden ds:py-1\", containerClassName)}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={currentText}\n transition={transition}\n initial={{ opacity: 0, y: -y }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y }}\n {...(props as any)}\n >\n {currentText}\n </motion.div>\n </AnimatePresence>\n </div>\n );\n}\n\nexport { RotatingText, type RotatingTextProps };\n"],"names":["RotatingText","text","y","duration","transition","containerClassName","props","index","setIndex","React","interval","prevIndex","currentText","jsx","cn","AnimatePresence","motion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,SAASA,EAAa;AAAA,EACpB,MAAAC;AAAA,EACA,GAAAC,IAAI;AAAA,EACJ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa,EAAE,UAAU,KAAK,MAAM,UAAA;AAAA,EACpC,oBAAAC;AAAA,EACA,GAAGC;AACL,GAAsB;AACpB,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAM,SAAS,CAAC;AAE1C,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAI,CAAC,MAAM,QAAQR,CAAI,EAAG;AAC1B,UAAMS,IAAW,YAAY,MAAM;AACjC,MAAAF,EAAS,CAACG,OAAeA,IAAY,KAAKV,EAAK,MAAM;AAAA,IACvD,GAAGE,CAAQ;AACX,WAAO,MAAM,cAAcO,CAAQ;AAAA,EACrC,GAAG,CAACT,GAAME,CAAQ,CAAC;AAEnB,QAAMS,IAAc,MAAM,QAAQX,CAAI,IAAIA,EAAKM,CAAK,IAAIN;AAExD,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAWC,EAAG,8BAA8BT,CAAkB,GACjE,UAAA,gBAAAQ,EAACE,GAAA,EAAgB,MAAK,QACpB,UAAA,gBAAAF;AAAA,IAACG,EAAO;AAAA,IAAP;AAAA,MAEC,YAAAZ;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,CAACF,EAAA;AAAA,MAC3B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,MAC1B,MAAM,EAAE,SAAS,GAAG,GAAAA,EAAA;AAAA,MACnB,GAAII;AAAA,MAEJ,UAAAM;AAAA,IAAA;AAAA,IAPIA;AAAA,EAAA,GAST,EAAA,CACF;AAEJ;"}