@sth87/shadcn-design-system 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. package/AI_README.md +114 -51
  2. package/README.md +83 -27
  3. package/dist/AI_CONTEXT.md +51 -52
  4. package/dist/cjs/_virtual/_commonjsHelpers.cjs +0 -1
  5. package/dist/cjs/_virtual/index.cjs +0 -1
  6. package/dist/cjs/_virtual/index2.cjs +0 -1
  7. package/dist/cjs/components/Accordion/Accordion.cjs +0 -1
  8. package/dist/cjs/components/Accordion/index.cjs +1 -0
  9. package/dist/cjs/components/Avatar/Avatar.cjs +1 -2
  10. package/dist/cjs/components/Avatar/index.cjs +1 -0
  11. package/dist/cjs/components/Badge/Badge.cjs +0 -1
  12. package/dist/cjs/components/Badge/index.cjs +1 -0
  13. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +0 -1
  14. package/dist/cjs/components/Breadcrumb/index.cjs +1 -0
  15. package/dist/cjs/components/Button/Button.cjs +0 -1
  16. package/dist/cjs/components/Button/ButtonGroup.cjs +0 -1
  17. package/dist/cjs/components/Button/index.cjs +1 -0
  18. package/dist/cjs/components/Calendar/Calendar.cjs +1 -2
  19. package/dist/cjs/components/Calendar/index.cjs +1 -0
  20. package/dist/cjs/components/Carousel/Carousel.cjs +0 -1
  21. package/dist/cjs/components/Carousel/index.cjs +1 -0
  22. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -2
  23. package/dist/cjs/components/Checkbox/index.cjs +1 -0
  24. package/dist/cjs/components/Collapsible/Collapsible.cjs +0 -1
  25. package/dist/cjs/components/Collapsible/index.cjs +1 -0
  26. package/dist/cjs/components/Command/Command.cjs +0 -1
  27. package/dist/cjs/components/Command/index.cjs +0 -1
  28. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +0 -1
  29. package/dist/cjs/components/ContextMenu/index.cjs +0 -1
  30. package/dist/cjs/components/Cropper/Cropper.cjs +1 -2
  31. package/dist/cjs/components/Cropper/CropperTool.cjs +0 -1
  32. package/dist/cjs/components/Cropper/index.cjs +1 -0
  33. package/dist/cjs/components/Cropper/utils.cjs +0 -1
  34. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -2
  35. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -2
  36. package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -2
  37. package/dist/cjs/components/DatePicker/index.cjs +1 -0
  38. package/dist/cjs/components/Dialog/Dialog.cjs +0 -1
  39. package/dist/cjs/components/Dialog/index.cjs +1 -0
  40. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +0 -1
  41. package/dist/cjs/components/DropdownMenu/index.cjs +0 -1
  42. package/dist/cjs/components/FloatLabel.cjs +0 -1
  43. package/dist/cjs/components/Glass/Glass.cjs +1 -2
  44. package/dist/cjs/components/Glass/index.cjs +1 -0
  45. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -2
  46. package/dist/cjs/components/ImageViewer/index.cjs +1 -0
  47. package/dist/cjs/components/Input/Input.cjs +1 -2
  48. package/dist/cjs/components/Input/index.cjs +1 -0
  49. package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -2
  50. package/dist/cjs/components/InputOTP/index.cjs +1 -0
  51. package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -2
  52. package/dist/cjs/components/Interactive/index.cjs +1 -0
  53. package/dist/cjs/components/Label/index.cjs +1 -0
  54. package/dist/cjs/components/Marquee/Marquee.cjs +1 -2
  55. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs +0 -1
  56. package/dist/cjs/components/Marquee/index.cjs +0 -1
  57. package/dist/cjs/components/Masonry/Masonry.cjs +1 -2
  58. package/dist/cjs/components/Masonry/MasonryWrapper.cjs +0 -1
  59. package/dist/cjs/components/Masonry/index.cjs +1 -0
  60. package/dist/cjs/components/Pagination/Pagination.cjs +0 -1
  61. package/dist/cjs/components/Pagination/index.cjs +0 -1
  62. package/dist/cjs/components/Popover/Popover.cjs +0 -1
  63. package/dist/cjs/components/Popover/index.cjs +1 -2
  64. package/dist/cjs/components/QrCode/QrCode.cjs +1 -2
  65. package/dist/cjs/components/QrCode/index.cjs +0 -1
  66. package/dist/cjs/components/Radio/Radio.cjs +1 -2
  67. package/dist/cjs/components/Radio/index.cjs +1 -0
  68. package/dist/cjs/components/Rate/Rate.cjs +0 -1
  69. package/dist/cjs/components/Rate/index.cjs +1 -0
  70. package/dist/cjs/components/Resizable/Resizable.cjs +0 -1
  71. package/dist/cjs/components/Resizable/index.cjs +1 -0
  72. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +0 -1
  73. package/dist/cjs/components/ScrollArea/index.cjs +1 -0
  74. package/dist/cjs/components/Select/Select.cjs +1 -2
  75. package/dist/cjs/components/Select/index.cjs +1 -0
  76. package/dist/cjs/components/Separator/Separator.cjs +0 -1
  77. package/dist/cjs/components/Separator/index.cjs +1 -0
  78. package/dist/cjs/components/Sheet/Sheet.cjs +0 -1
  79. package/dist/cjs/components/Sheet/index.cjs +1 -0
  80. package/dist/cjs/components/Sidebar/Sidebar.cjs +0 -1
  81. package/dist/cjs/components/Sidebar/index.cjs +1 -0
  82. package/dist/cjs/components/Skeleton/Skeleton.cjs +0 -1
  83. package/dist/cjs/components/Skeleton/index.cjs +1 -0
  84. package/dist/cjs/components/Slider/Slider.cjs +0 -1
  85. package/dist/cjs/components/Slider/index.cjs +1 -0
  86. package/dist/cjs/components/Stepper/Stepper.cjs +1 -2
  87. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -2
  88. package/dist/cjs/components/Stepper/index.cjs +0 -1
  89. package/dist/cjs/components/Switch/Switch.cjs +0 -1
  90. package/dist/cjs/components/Switch/index.cjs +1 -0
  91. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -2
  92. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -2
  93. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -2
  94. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -2
  95. package/dist/cjs/components/Table/data-table-pagination.cjs +1 -2
  96. package/dist/cjs/components/Table/data-table-toolbar.cjs +1 -2
  97. package/dist/cjs/components/Table/data-table-view-options.cjs +1 -2
  98. package/dist/cjs/components/Table/data-table.cjs +1 -2
  99. package/dist/cjs/components/Table/index.cjs +1 -0
  100. package/dist/cjs/components/Table/select-column.cjs +0 -1
  101. package/dist/cjs/components/Tabs/Tabs.cjs +1 -2
  102. package/dist/cjs/components/Tabs/classes.cjs +1 -2
  103. package/dist/cjs/components/Tabs/index.cjs +1 -0
  104. package/dist/cjs/components/Textarea/Textarea.cjs +1 -2
  105. package/dist/cjs/components/Textarea/index.cjs +1 -0
  106. package/dist/cjs/components/TimeGridView.cjs +1 -2
  107. package/dist/cjs/components/Toast/Toast.cjs +1 -2
  108. package/dist/cjs/components/Toast/index.cjs +1 -0
  109. package/dist/cjs/components/Toggle/Toggle.cjs +0 -1
  110. package/dist/cjs/components/Toggle/index.cjs +1 -0
  111. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -2
  112. package/dist/cjs/components/Tooltip/index.cjs +1 -0
  113. package/dist/cjs/components/Tour/Tour.cjs +1 -2
  114. package/dist/cjs/components/Tour/TourWrapper.cjs +0 -1
  115. package/dist/cjs/components/Tour/index.cjs +0 -1
  116. package/dist/cjs/components/TreeSelect/TreeSelect.cjs +0 -1
  117. package/dist/cjs/components/TreeSelect/index.cjs +1 -0
  118. package/dist/cjs/components/Upload/Upload.cjs +0 -1
  119. package/dist/cjs/components/Upload/index.cjs +1 -0
  120. package/dist/cjs/components/WheelColumn.cjs +1 -2
  121. package/dist/cjs/config/data-table.cjs +0 -1
  122. package/dist/cjs/constants/common.cjs +0 -1
  123. package/dist/cjs/hooks/index.cjs +1 -0
  124. package/dist/cjs/hooks/use-callback-ref.cjs +0 -1
  125. package/dist/cjs/hooks/use-data-table.cjs +1 -2
  126. package/dist/cjs/hooks/use-debounced-callback.cjs +1 -2
  127. package/dist/cjs/hooks/use-debounced-value.cjs +1 -2
  128. package/dist/cjs/hooks/use-event-listener.cjs +1 -2
  129. package/dist/cjs/hooks/use-intersection-observer.cjs +0 -1
  130. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs +0 -1
  131. package/dist/cjs/hooks/use-media-query.cjs +1 -2
  132. package/dist/cjs/hooks/use-mouse-position.cjs +1 -0
  133. package/dist/cjs/hooks/use-on-click-outside.cjs +1 -2
  134. package/dist/cjs/hooks/use-script.cjs +0 -1
  135. package/dist/cjs/hooks/use-scroll-lock.cjs +1 -2
  136. package/dist/cjs/index.cjs +1 -2
  137. package/dist/cjs/lib/TextAnimation/BlurText.cjs +0 -1
  138. package/dist/cjs/lib/TextAnimation/CircularText.cjs +0 -1
  139. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -2
  140. package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -2
  141. package/dist/cjs/lib/TextAnimation/RollingText.cjs +0 -1
  142. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -2
  143. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -2
  144. package/dist/cjs/lib/TextAnimation/SplittingText.cjs +0 -1
  145. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -2
  146. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +0 -1
  147. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +0 -1
  148. package/dist/cjs/lib/TextAnimation/TypingText.cjs +0 -1
  149. package/dist/cjs/lib/TextAnimation/WritingText.cjs +0 -1
  150. package/dist/cjs/lib/TextAnimation/index.cjs +1 -0
  151. package/dist/cjs/lib/utils.cjs +1 -0
  152. package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs +0 -1
  153. package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs +0 -1
  154. package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs +0 -1
  155. package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs +0 -1
  156. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs +0 -1
  157. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs +0 -1
  158. package/dist/cjs/packages/ui/src/components/accordion.cjs +0 -1
  159. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +0 -1
  160. package/dist/cjs/packages/ui/src/components/avatar.cjs +0 -1
  161. package/dist/cjs/packages/ui/src/components/badge.cjs +0 -1
  162. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +0 -1
  163. package/dist/cjs/packages/ui/src/components/button-group.cjs +0 -1
  164. package/dist/cjs/packages/ui/src/components/button.cjs +0 -1
  165. package/dist/cjs/packages/ui/src/components/calendar.cjs +0 -1
  166. package/dist/cjs/packages/ui/src/components/checkbox.cjs +0 -1
  167. package/dist/cjs/packages/ui/src/components/collapsible.cjs +0 -1
  168. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -2
  169. package/dist/cjs/packages/ui/src/components/command.cjs +0 -1
  170. package/dist/cjs/packages/ui/src/components/context-menu.cjs +0 -1
  171. package/dist/cjs/packages/ui/src/components/dialog.cjs +0 -1
  172. package/dist/cjs/packages/ui/src/components/drawer.cjs +0 -1
  173. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +0 -1
  174. package/dist/cjs/packages/ui/src/components/input-otp.cjs +0 -1
  175. package/dist/cjs/packages/ui/src/components/input.cjs +0 -1
  176. package/dist/cjs/packages/ui/src/components/label.cjs +0 -1
  177. package/dist/cjs/packages/ui/src/components/pagination.cjs +0 -1
  178. package/dist/cjs/packages/ui/src/components/popover.cjs +0 -1
  179. package/dist/cjs/packages/ui/src/components/radio-group.cjs +0 -1
  180. package/dist/cjs/packages/ui/src/components/resizable.cjs +0 -1
  181. package/dist/cjs/packages/ui/src/components/scroll-area.cjs +0 -1
  182. package/dist/cjs/packages/ui/src/components/select.cjs +1 -2
  183. package/dist/cjs/packages/ui/src/components/separator.cjs +0 -1
  184. package/dist/cjs/packages/ui/src/components/sheet.cjs +0 -1
  185. package/dist/cjs/packages/ui/src/components/sidebar.cjs +0 -1
  186. package/dist/cjs/packages/ui/src/components/skeleton.cjs +0 -1
  187. package/dist/cjs/packages/ui/src/components/switch.cjs +0 -1
  188. package/dist/cjs/packages/ui/src/components/table.cjs +0 -1
  189. package/dist/cjs/packages/ui/src/components/tabs.cjs +0 -1
  190. package/dist/cjs/packages/ui/src/components/textarea.cjs +0 -1
  191. package/dist/cjs/packages/ui/src/components/toggle.cjs +0 -1
  192. package/dist/cjs/packages/ui/src/components/tooltip.cjs +0 -1
  193. package/dist/cjs/packages/ui/src/components/tree-view.cjs +0 -1
  194. package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs +0 -1
  195. package/dist/cjs/packages/ui/src/lib/compose-refs.cjs +0 -1
  196. package/dist/cjs/packages/ui/src/lib/utils.cjs +0 -1
  197. package/dist/cjs/utils/animations.cjs +1 -2
  198. package/dist/cjs/utils/css.cjs +0 -1
  199. package/dist/cjs/utils/data-table.cjs +0 -1
  200. package/dist/cjs/utils/datetime.cjs +0 -1
  201. package/dist/cjs/utils/parsers.cjs +0 -1
  202. package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
  203. package/dist/esm/_virtual/index.js +0 -1
  204. package/dist/esm/_virtual/index2.js +0 -1
  205. package/dist/esm/components/Accordion/Accordion.js +0 -1
  206. package/dist/esm/components/Accordion/index.js +9 -0
  207. package/dist/esm/components/Avatar/Avatar.js +32 -63
  208. package/dist/esm/components/Avatar/index.js +4 -0
  209. package/dist/esm/components/Badge/Badge.js +0 -1
  210. package/dist/esm/components/Badge/index.js +5 -0
  211. package/dist/esm/components/Breadcrumb/Breadcrumb.js +0 -1
  212. package/dist/esm/components/Breadcrumb/index.js +5 -0
  213. package/dist/esm/components/Button/Button.js +0 -1
  214. package/dist/esm/components/Button/ButtonGroup.js +0 -1
  215. package/dist/esm/components/Button/index.js +10 -0
  216. package/dist/esm/components/Calendar/Calendar.js +25 -57
  217. package/dist/esm/components/Calendar/index.js +5 -0
  218. package/dist/esm/components/Carousel/Carousel.js +0 -1
  219. package/dist/esm/components/Carousel/index.js +6 -0
  220. package/dist/esm/components/Checkbox/Checkbox.js +29 -58
  221. package/dist/esm/components/Checkbox/index.js +5 -0
  222. package/dist/esm/components/Collapsible/Collapsible.js +0 -1
  223. package/dist/esm/components/Collapsible/index.js +5 -0
  224. package/dist/esm/components/Command/Command.js +0 -1
  225. package/dist/esm/components/Command/index.js +0 -1
  226. package/dist/esm/components/ContextMenu/ContextMenu.js +0 -1
  227. package/dist/esm/components/ContextMenu/index.js +0 -1
  228. package/dist/esm/components/Cropper/Cropper.js +261 -292
  229. package/dist/esm/components/Cropper/CropperTool.js +0 -1
  230. package/dist/esm/components/Cropper/index.js +17 -0
  231. package/dist/esm/components/Cropper/utils.js +0 -1
  232. package/dist/esm/components/DatePicker/DatePicker.js +94 -122
  233. package/dist/esm/components/DatePicker/RangePicker.js +202 -230
  234. package/dist/esm/components/DatePicker/TimePicker.js +63 -92
  235. package/dist/esm/components/DatePicker/index.js +8 -0
  236. package/dist/esm/components/Dialog/Dialog.js +0 -1
  237. package/dist/esm/components/Dialog/index.js +5 -0
  238. package/dist/esm/components/DropdownMenu/DropdownMenu.js +0 -1
  239. package/dist/esm/components/DropdownMenu/index.js +0 -1
  240. package/dist/esm/components/FloatLabel.js +0 -1
  241. package/dist/esm/components/Glass/Glass.js +7 -39
  242. package/dist/esm/components/Glass/index.js +5 -0
  243. package/dist/esm/components/ImageViewer/ImageViewer.js +95 -126
  244. package/dist/esm/components/ImageViewer/index.js +7 -0
  245. package/dist/esm/components/Input/Input.js +0 -1
  246. package/dist/esm/components/Input/index.js +5 -0
  247. package/dist/esm/components/InputOTP/InputOTP.js +28 -58
  248. package/dist/esm/components/InputOTP/index.js +5 -0
  249. package/dist/esm/components/Interactive/CursorFollow.js +90 -122
  250. package/dist/esm/components/Interactive/index.js +9 -0
  251. package/dist/esm/components/Label/index.js +4 -0
  252. package/dist/esm/components/Marquee/Marquee.js +78 -109
  253. package/dist/esm/components/Marquee/MarqueeWrapper.js +0 -1
  254. package/dist/esm/components/Marquee/index.js +0 -1
  255. package/dist/esm/components/Masonry/Masonry.js +67 -100
  256. package/dist/esm/components/Masonry/MasonryWrapper.js +0 -1
  257. package/dist/esm/components/Masonry/index.js +10 -0
  258. package/dist/esm/components/Pagination/Pagination.js +0 -1
  259. package/dist/esm/components/Pagination/index.js +0 -1
  260. package/dist/esm/components/Popover/Popover.js +0 -1
  261. package/dist/esm/components/Popover/index.js +3 -3
  262. package/dist/esm/components/QrCode/QrCode.js +126 -157
  263. package/dist/esm/components/QrCode/index.js +0 -1
  264. package/dist/esm/components/Radio/Radio.js +36 -67
  265. package/dist/esm/components/Radio/index.js +5 -0
  266. package/dist/esm/components/Rate/Rate.js +0 -1
  267. package/dist/esm/components/Rate/index.js +5 -0
  268. package/dist/esm/components/Resizable/Resizable.js +0 -1
  269. package/dist/esm/components/Resizable/index.js +13 -0
  270. package/dist/esm/components/ScrollArea/ScrollArea.js +0 -1
  271. package/dist/esm/components/ScrollArea/index.js +5 -0
  272. package/dist/esm/components/Select/Select.js +0 -1
  273. package/dist/esm/components/Select/index.js +5 -0
  274. package/dist/esm/components/Separator/Separator.js +0 -1
  275. package/dist/esm/components/Separator/index.js +5 -0
  276. package/dist/esm/components/Sheet/Sheet.js +0 -1
  277. package/dist/esm/components/Sheet/index.js +5 -0
  278. package/dist/esm/components/Sidebar/Sidebar.js +0 -1
  279. package/dist/esm/components/Sidebar/index.js +29 -0
  280. package/dist/esm/components/Skeleton/Skeleton.js +0 -1
  281. package/dist/esm/components/Skeleton/index.js +5 -0
  282. package/dist/esm/components/Slider/Slider.js +0 -1
  283. package/dist/esm/components/Slider/index.js +5 -0
  284. package/dist/esm/components/Stepper/Stepper.js +72 -102
  285. package/dist/esm/components/Stepper/StepperWrapper.js +42 -74
  286. package/dist/esm/components/Stepper/index.js +0 -1
  287. package/dist/esm/components/Switch/Switch.js +0 -1
  288. package/dist/esm/components/Switch/index.js +5 -0
  289. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +2 -3
  290. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +12 -13
  291. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +66 -97
  292. package/dist/esm/components/Table/data-table-column-header.js +41 -73
  293. package/dist/esm/components/Table/data-table-pagination.js +30 -63
  294. package/dist/esm/components/Table/data-table-toolbar.js +43 -74
  295. package/dist/esm/components/Table/data-table-view-options.js +85 -116
  296. package/dist/esm/components/Table/data-table.js +52 -85
  297. package/dist/esm/components/Table/index.js +20 -0
  298. package/dist/esm/components/Table/select-column.js +0 -1
  299. package/dist/esm/components/Tabs/Tabs.js +0 -1
  300. package/dist/esm/components/Tabs/classes.js +23 -57
  301. package/dist/esm/components/Tabs/index.js +5 -0
  302. package/dist/esm/components/Textarea/Textarea.js +0 -1
  303. package/dist/esm/components/Textarea/index.js +5 -0
  304. package/dist/esm/components/TimeGridView.js +33 -65
  305. package/dist/esm/components/Toast/Toast.js +39 -71
  306. package/dist/esm/components/Toast/index.js +6 -0
  307. package/dist/esm/components/Toggle/Toggle.js +0 -1
  308. package/dist/esm/components/Toggle/index.js +5 -0
  309. package/dist/esm/components/Tooltip/Tooltip.js +34 -65
  310. package/dist/esm/components/Tooltip/index.js +4 -0
  311. package/dist/esm/components/Tour/Tour.js +331 -361
  312. package/dist/esm/components/Tour/TourWrapper.js +0 -1
  313. package/dist/esm/components/Tour/index.js +0 -1
  314. package/dist/esm/components/TreeSelect/TreeSelect.js +0 -1
  315. package/dist/esm/components/TreeSelect/index.js +5 -0
  316. package/dist/esm/components/Upload/Upload.js +0 -1
  317. package/dist/esm/components/Upload/index.js +4 -0
  318. package/dist/esm/components/WheelColumn.js +37 -69
  319. package/dist/esm/config/data-table.js +0 -1
  320. package/dist/esm/constants/common.js +0 -1
  321. package/dist/esm/hooks/index.js +26 -0
  322. package/dist/esm/hooks/use-callback-ref.js +0 -1
  323. package/dist/esm/hooks/use-data-table.js +0 -1
  324. package/dist/esm/hooks/use-debounced-callback.js +0 -1
  325. package/dist/esm/hooks/use-debounced-value.js +0 -1
  326. package/dist/esm/hooks/use-event-listener.js +0 -1
  327. package/dist/esm/hooks/use-intersection-observer.js +0 -1
  328. package/dist/esm/hooks/use-isomorphic-layout-effect.js +0 -1
  329. package/dist/esm/hooks/use-media-query.js +0 -1
  330. package/dist/esm/hooks/use-mouse-position.js +27 -0
  331. package/dist/esm/hooks/use-on-click-outside.js +0 -1
  332. package/dist/esm/hooks/use-script.js +0 -1
  333. package/dist/esm/hooks/use-scroll-lock.js +0 -1
  334. package/dist/esm/index.js +241 -268
  335. package/dist/esm/lib/TextAnimation/BlurText.js +0 -1
  336. package/dist/esm/lib/TextAnimation/CircularText.js +0 -1
  337. package/dist/esm/lib/TextAnimation/FlipWords.js +28 -60
  338. package/dist/esm/lib/TextAnimation/GradientText.js +26 -58
  339. package/dist/esm/lib/TextAnimation/RollingText.js +0 -1
  340. package/dist/esm/lib/TextAnimation/RotatingText.js +27 -59
  341. package/dist/esm/lib/TextAnimation/ShimmeringText.js +26 -58
  342. package/dist/esm/lib/TextAnimation/SplittingText.js +0 -1
  343. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +29 -61
  344. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +0 -1
  345. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +0 -1
  346. package/dist/esm/lib/TextAnimation/TypingText.js +0 -1
  347. package/dist/esm/lib/TextAnimation/WritingText.js +0 -1
  348. package/dist/esm/lib/TextAnimation/index.js +28 -0
  349. package/dist/esm/lib/utils.js +12 -0
  350. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -1
  351. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js +0 -1
  352. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -1
  353. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -1
  354. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js +0 -1
  355. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js +0 -1
  356. package/dist/esm/packages/ui/src/components/accordion.js +0 -1
  357. package/dist/esm/packages/ui/src/components/alert-dialog.js +0 -1
  358. package/dist/esm/packages/ui/src/components/avatar.js +0 -1
  359. package/dist/esm/packages/ui/src/components/badge.js +0 -1
  360. package/dist/esm/packages/ui/src/components/breadcrumb.js +0 -1
  361. package/dist/esm/packages/ui/src/components/button-group.js +0 -1
  362. package/dist/esm/packages/ui/src/components/button.js +0 -1
  363. package/dist/esm/packages/ui/src/components/calendar.js +0 -1
  364. package/dist/esm/packages/ui/src/components/checkbox.js +0 -1
  365. package/dist/esm/packages/ui/src/components/collapsible.js +0 -1
  366. package/dist/esm/packages/ui/src/components/combobox.js +96 -81
  367. package/dist/esm/packages/ui/src/components/command.js +0 -1
  368. package/dist/esm/packages/ui/src/components/context-menu.js +0 -1
  369. package/dist/esm/packages/ui/src/components/dialog.js +0 -1
  370. package/dist/esm/packages/ui/src/components/drawer.js +0 -1
  371. package/dist/esm/packages/ui/src/components/dropdown-menu.js +0 -1
  372. package/dist/esm/packages/ui/src/components/input-otp.js +0 -1
  373. package/dist/esm/packages/ui/src/components/input.js +0 -1
  374. package/dist/esm/packages/ui/src/components/label.js +0 -1
  375. package/dist/esm/packages/ui/src/components/pagination.js +0 -1
  376. package/dist/esm/packages/ui/src/components/popover.js +0 -1
  377. package/dist/esm/packages/ui/src/components/radio-group.js +0 -1
  378. package/dist/esm/packages/ui/src/components/resizable.js +0 -1
  379. package/dist/esm/packages/ui/src/components/scroll-area.js +0 -1
  380. package/dist/esm/packages/ui/src/components/select.js +89 -83
  381. package/dist/esm/packages/ui/src/components/separator.js +0 -1
  382. package/dist/esm/packages/ui/src/components/sheet.js +0 -1
  383. package/dist/esm/packages/ui/src/components/sidebar.js +0 -1
  384. package/dist/esm/packages/ui/src/components/skeleton.js +0 -1
  385. package/dist/esm/packages/ui/src/components/switch.js +0 -1
  386. package/dist/esm/packages/ui/src/components/table.js +0 -1
  387. package/dist/esm/packages/ui/src/components/tabs.js +0 -1
  388. package/dist/esm/packages/ui/src/components/textarea.js +0 -1
  389. package/dist/esm/packages/ui/src/components/toggle.js +0 -1
  390. package/dist/esm/packages/ui/src/components/tooltip.js +0 -1
  391. package/dist/esm/packages/ui/src/components/tree-view.js +1 -2
  392. package/dist/esm/packages/ui/src/hooks/use-mobile.js +0 -1
  393. package/dist/esm/packages/ui/src/lib/compose-refs.js +0 -1
  394. package/dist/esm/packages/ui/src/lib/utils.js +0 -1
  395. package/dist/esm/utils/animations.js +40 -73
  396. package/dist/esm/utils/css.js +0 -1
  397. package/dist/esm/utils/data-table.js +0 -1
  398. package/dist/esm/utils/datetime.js +0 -1
  399. package/dist/esm/utils/parsers.js +0 -1
  400. package/dist/types/components/Accordion/index.d.ts +1 -1
  401. package/dist/types/components/Accordion/index.d.ts.map +1 -1
  402. package/dist/types/components/Badge/index.d.ts +1 -1
  403. package/dist/types/components/Badge/index.d.ts.map +1 -1
  404. package/dist/types/components/Breadcrumb/index.d.ts +1 -1
  405. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  406. package/dist/types/components/Button/index.d.ts +1 -1
  407. package/dist/types/components/Button/index.d.ts.map +1 -1
  408. package/dist/types/components/Checkbox/Checkbox.d.ts +1 -1
  409. package/dist/types/components/Checkbox/index.d.ts +1 -1
  410. package/dist/types/components/Checkbox/index.d.ts.map +1 -1
  411. package/dist/types/components/Collapsible/index.d.ts +1 -1
  412. package/dist/types/components/Collapsible/index.d.ts.map +1 -1
  413. package/dist/types/components/Cropper/Cropper.d.ts.map +1 -1
  414. package/dist/types/components/Dialog/index.d.ts +1 -1
  415. package/dist/types/components/Dialog/index.d.ts.map +1 -1
  416. package/dist/types/components/Glass/index.d.ts +1 -1
  417. package/dist/types/components/Glass/index.d.ts.map +1 -1
  418. package/dist/types/components/Input/index.d.ts +1 -1
  419. package/dist/types/components/Input/index.d.ts.map +1 -1
  420. package/dist/types/components/InputOTP/index.d.ts +1 -1
  421. package/dist/types/components/InputOTP/index.d.ts.map +1 -1
  422. package/dist/types/components/Label/Label.d.ts +1 -1
  423. package/dist/types/components/Label/Label.d.ts.map +1 -1
  424. package/dist/types/components/Marquee/Marquee.d.ts +1 -1
  425. package/dist/types/components/Marquee/Marquee.d.ts.map +1 -1
  426. package/dist/types/components/Masonry/Masonry.d.ts.map +1 -1
  427. package/dist/types/components/Popover/index.d.ts +1 -0
  428. package/dist/types/components/Popover/index.d.ts.map +1 -1
  429. package/dist/types/components/QrCode/QrCode.d.ts.map +1 -1
  430. package/dist/types/components/Radio/index.d.ts +1 -1
  431. package/dist/types/components/Radio/index.d.ts.map +1 -1
  432. package/dist/types/components/ScrollArea/index.d.ts +1 -1
  433. package/dist/types/components/ScrollArea/index.d.ts.map +1 -1
  434. package/dist/types/components/Select/index.d.ts +1 -1
  435. package/dist/types/components/Select/index.d.ts.map +1 -1
  436. package/dist/types/components/Sheet/index.d.ts +1 -1
  437. package/dist/types/components/Sheet/index.d.ts.map +1 -1
  438. package/dist/types/components/Skeleton/index.d.ts +1 -1
  439. package/dist/types/components/Skeleton/index.d.ts.map +1 -1
  440. package/dist/types/components/Slider/Slider.d.ts +1 -1
  441. package/dist/types/components/Slider/index.d.ts +1 -1
  442. package/dist/types/components/Slider/index.d.ts.map +1 -1
  443. package/dist/types/components/Stepper/Stepper.d.ts.map +1 -1
  444. package/dist/types/components/Switch/Switch.d.ts +1 -1
  445. package/dist/types/components/Switch/index.d.ts +1 -1
  446. package/dist/types/components/Switch/index.d.ts.map +1 -1
  447. package/dist/types/components/Tabs/index.d.ts +1 -1
  448. package/dist/types/components/Tabs/index.d.ts.map +1 -1
  449. package/dist/types/components/Textarea/index.d.ts +1 -1
  450. package/dist/types/components/Textarea/index.d.ts.map +1 -1
  451. package/dist/types/components/Toggle/Toggle.d.ts +1 -1
  452. package/dist/types/components/Toggle/index.d.ts +1 -1
  453. package/dist/types/components/Toggle/index.d.ts.map +1 -1
  454. package/dist/types/components/Tour/Tour.d.ts.map +1 -1
  455. package/dist/types/hooks/index.d.ts +3 -0
  456. package/dist/types/hooks/index.d.ts.map +1 -1
  457. package/dist/types/index.d.ts +23 -6
  458. package/dist/types/index.d.ts.map +1 -1
  459. package/dist/types/lib/utils.d.ts +1 -1
  460. package/dist/types/lib/utils.d.ts.map +1 -1
  461. package/dist/types/packages/ui/src/components/badge.d.ts +3 -3
  462. package/dist/types/packages/ui/src/components/button.d.ts +2 -2
  463. package/dist/types/packages/ui/src/components/checkbox.d.ts +1 -1
  464. package/dist/types/packages/ui/src/components/combobox.d.ts +2 -2
  465. package/dist/types/packages/ui/src/components/combobox.d.ts.map +1 -1
  466. package/dist/types/packages/ui/src/components/input-otp.d.ts +1 -1
  467. package/dist/types/packages/ui/src/components/input.d.ts +1 -1
  468. package/dist/types/packages/ui/src/components/radio-group.d.ts +1 -1
  469. package/dist/types/packages/ui/src/components/select.d.ts +2 -2
  470. package/dist/types/packages/ui/src/components/select.d.ts.map +1 -1
  471. package/dist/types/packages/ui/src/components/switch.d.ts +1 -1
  472. package/dist/types/packages/ui/src/components/textarea.d.ts +1 -1
  473. package/dist/types/packages/ui/src/components/toggle.d.ts +1 -1
  474. package/dist/types/utils/parsers.d.ts +1 -1
  475. package/package.json +258 -258
  476. package/dist/cjs/_virtual/_commonjsHelpers.cjs.map +0 -1
  477. package/dist/cjs/_virtual/index.cjs.map +0 -1
  478. package/dist/cjs/_virtual/index2.cjs.map +0 -1
  479. package/dist/cjs/components/Accordion/Accordion.cjs.map +0 -1
  480. package/dist/cjs/components/Avatar/Avatar.cjs.map +0 -1
  481. package/dist/cjs/components/Badge/Badge.cjs.map +0 -1
  482. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +0 -1
  483. package/dist/cjs/components/Button/Button.cjs.map +0 -1
  484. package/dist/cjs/components/Button/ButtonGroup.cjs.map +0 -1
  485. package/dist/cjs/components/Calendar/Calendar.cjs.map +0 -1
  486. package/dist/cjs/components/Carousel/Carousel.cjs.map +0 -1
  487. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +0 -1
  488. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +0 -1
  489. package/dist/cjs/components/Command/Command.cjs.map +0 -1
  490. package/dist/cjs/components/Command/index.cjs.map +0 -1
  491. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +0 -1
  492. package/dist/cjs/components/ContextMenu/index.cjs.map +0 -1
  493. package/dist/cjs/components/Cropper/Cropper.cjs.map +0 -1
  494. package/dist/cjs/components/Cropper/CropperTool.cjs.map +0 -1
  495. package/dist/cjs/components/Cropper/utils.cjs.map +0 -1
  496. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +0 -1
  497. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +0 -1
  498. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +0 -1
  499. package/dist/cjs/components/Dialog/Dialog.cjs.map +0 -1
  500. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +0 -1
  501. package/dist/cjs/components/DropdownMenu/index.cjs.map +0 -1
  502. package/dist/cjs/components/FloatLabel.cjs.map +0 -1
  503. package/dist/cjs/components/Glass/Glass.cjs.map +0 -1
  504. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +0 -1
  505. package/dist/cjs/components/Input/Input.cjs.map +0 -1
  506. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +0 -1
  507. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +0 -1
  508. package/dist/cjs/components/Marquee/Marquee.cjs.map +0 -1
  509. package/dist/cjs/components/Marquee/MarqueeWrapper.cjs.map +0 -1
  510. package/dist/cjs/components/Marquee/index.cjs.map +0 -1
  511. package/dist/cjs/components/Masonry/Masonry.cjs.map +0 -1
  512. package/dist/cjs/components/Masonry/MasonryWrapper.cjs.map +0 -1
  513. package/dist/cjs/components/Pagination/Pagination.cjs.map +0 -1
  514. package/dist/cjs/components/Pagination/index.cjs.map +0 -1
  515. package/dist/cjs/components/Popover/Popover.cjs.map +0 -1
  516. package/dist/cjs/components/Popover/index.cjs.map +0 -1
  517. package/dist/cjs/components/QrCode/QrCode.cjs.map +0 -1
  518. package/dist/cjs/components/QrCode/index.cjs.map +0 -1
  519. package/dist/cjs/components/Radio/Radio.cjs.map +0 -1
  520. package/dist/cjs/components/Rate/Rate.cjs.map +0 -1
  521. package/dist/cjs/components/Resizable/Resizable.cjs.map +0 -1
  522. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +0 -1
  523. package/dist/cjs/components/Select/Select.cjs.map +0 -1
  524. package/dist/cjs/components/Separator/Separator.cjs.map +0 -1
  525. package/dist/cjs/components/Sheet/Sheet.cjs.map +0 -1
  526. package/dist/cjs/components/Sidebar/Sidebar.cjs.map +0 -1
  527. package/dist/cjs/components/Skeleton/Skeleton.cjs.map +0 -1
  528. package/dist/cjs/components/Slider/Slider.cjs.map +0 -1
  529. package/dist/cjs/components/Stepper/Stepper.cjs.map +0 -1
  530. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +0 -1
  531. package/dist/cjs/components/Stepper/index.cjs.map +0 -1
  532. package/dist/cjs/components/Switch/Switch.cjs.map +0 -1
  533. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +0 -1
  534. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +0 -1
  535. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +0 -1
  536. package/dist/cjs/components/Table/data-table-column-header.cjs.map +0 -1
  537. package/dist/cjs/components/Table/data-table-pagination.cjs.map +0 -1
  538. package/dist/cjs/components/Table/data-table-toolbar.cjs.map +0 -1
  539. package/dist/cjs/components/Table/data-table-view-options.cjs.map +0 -1
  540. package/dist/cjs/components/Table/data-table.cjs.map +0 -1
  541. package/dist/cjs/components/Table/select-column.cjs.map +0 -1
  542. package/dist/cjs/components/Tabs/Tabs.cjs.map +0 -1
  543. package/dist/cjs/components/Tabs/classes.cjs.map +0 -1
  544. package/dist/cjs/components/Textarea/Textarea.cjs.map +0 -1
  545. package/dist/cjs/components/TimeGridView.cjs.map +0 -1
  546. package/dist/cjs/components/Toast/Toast.cjs.map +0 -1
  547. package/dist/cjs/components/Toggle/Toggle.cjs.map +0 -1
  548. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +0 -1
  549. package/dist/cjs/components/Tour/Tour.cjs.map +0 -1
  550. package/dist/cjs/components/Tour/TourWrapper.cjs.map +0 -1
  551. package/dist/cjs/components/Tour/index.cjs.map +0 -1
  552. package/dist/cjs/components/TreeSelect/TreeSelect.cjs.map +0 -1
  553. package/dist/cjs/components/Upload/Upload.cjs.map +0 -1
  554. package/dist/cjs/components/WheelColumn.cjs.map +0 -1
  555. package/dist/cjs/config/data-table.cjs.map +0 -1
  556. package/dist/cjs/constants/common.cjs.map +0 -1
  557. package/dist/cjs/hooks/use-callback-ref.cjs.map +0 -1
  558. package/dist/cjs/hooks/use-data-table.cjs.map +0 -1
  559. package/dist/cjs/hooks/use-debounced-callback.cjs.map +0 -1
  560. package/dist/cjs/hooks/use-debounced-value.cjs.map +0 -1
  561. package/dist/cjs/hooks/use-event-listener.cjs.map +0 -1
  562. package/dist/cjs/hooks/use-intersection-observer.cjs.map +0 -1
  563. package/dist/cjs/hooks/use-isomorphic-layout-effect.cjs.map +0 -1
  564. package/dist/cjs/hooks/use-media-query.cjs.map +0 -1
  565. package/dist/cjs/hooks/use-on-click-outside.cjs.map +0 -1
  566. package/dist/cjs/hooks/use-script.cjs.map +0 -1
  567. package/dist/cjs/hooks/use-scroll-lock.cjs.map +0 -1
  568. package/dist/cjs/index.cjs.map +0 -1
  569. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +0 -1
  570. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +0 -1
  571. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +0 -1
  572. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +0 -1
  573. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +0 -1
  574. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +0 -1
  575. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +0 -1
  576. package/dist/cjs/lib/TextAnimation/SplittingText.cjs.map +0 -1
  577. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +0 -1
  578. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +0 -1
  579. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +0 -1
  580. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +0 -1
  581. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +0 -1
  582. package/dist/cjs/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.cjs.map +0 -1
  583. package/dist/cjs/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.cjs.map +0 -1
  584. package/dist/cjs/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.cjs.map +0 -1
  585. package/dist/cjs/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs.map +0 -1
  586. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +0 -1
  587. package/dist/cjs/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.cjs.map +0 -1
  588. package/dist/cjs/packages/ui/src/components/accordion.cjs.map +0 -1
  589. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +0 -1
  590. package/dist/cjs/packages/ui/src/components/avatar.cjs.map +0 -1
  591. package/dist/cjs/packages/ui/src/components/badge.cjs.map +0 -1
  592. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +0 -1
  593. package/dist/cjs/packages/ui/src/components/button-group.cjs.map +0 -1
  594. package/dist/cjs/packages/ui/src/components/button.cjs.map +0 -1
  595. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +0 -1
  596. package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +0 -1
  597. package/dist/cjs/packages/ui/src/components/collapsible.cjs.map +0 -1
  598. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +0 -1
  599. package/dist/cjs/packages/ui/src/components/command.cjs.map +0 -1
  600. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +0 -1
  601. package/dist/cjs/packages/ui/src/components/dialog.cjs.map +0 -1
  602. package/dist/cjs/packages/ui/src/components/drawer.cjs.map +0 -1
  603. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +0 -1
  604. package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +0 -1
  605. package/dist/cjs/packages/ui/src/components/input.cjs.map +0 -1
  606. package/dist/cjs/packages/ui/src/components/label.cjs.map +0 -1
  607. package/dist/cjs/packages/ui/src/components/pagination.cjs.map +0 -1
  608. package/dist/cjs/packages/ui/src/components/popover.cjs.map +0 -1
  609. package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +0 -1
  610. package/dist/cjs/packages/ui/src/components/resizable.cjs.map +0 -1
  611. package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +0 -1
  612. package/dist/cjs/packages/ui/src/components/select.cjs.map +0 -1
  613. package/dist/cjs/packages/ui/src/components/separator.cjs.map +0 -1
  614. package/dist/cjs/packages/ui/src/components/sheet.cjs.map +0 -1
  615. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +0 -1
  616. package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +0 -1
  617. package/dist/cjs/packages/ui/src/components/switch.cjs.map +0 -1
  618. package/dist/cjs/packages/ui/src/components/table.cjs.map +0 -1
  619. package/dist/cjs/packages/ui/src/components/tabs.cjs.map +0 -1
  620. package/dist/cjs/packages/ui/src/components/textarea.cjs.map +0 -1
  621. package/dist/cjs/packages/ui/src/components/toggle.cjs.map +0 -1
  622. package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +0 -1
  623. package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +0 -1
  624. package/dist/cjs/packages/ui/src/hooks/use-mobile.cjs.map +0 -1
  625. package/dist/cjs/packages/ui/src/lib/compose-refs.cjs.map +0 -1
  626. package/dist/cjs/packages/ui/src/lib/utils.cjs.map +0 -1
  627. package/dist/cjs/utils/animations.cjs.map +0 -1
  628. package/dist/cjs/utils/css.cjs.map +0 -1
  629. package/dist/cjs/utils/data-table.cjs.map +0 -1
  630. package/dist/cjs/utils/datetime.cjs.map +0 -1
  631. package/dist/cjs/utils/parsers.cjs.map +0 -1
  632. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  633. package/dist/esm/_virtual/index.js.map +0 -1
  634. package/dist/esm/_virtual/index2.js.map +0 -1
  635. package/dist/esm/components/Accordion/Accordion.js.map +0 -1
  636. package/dist/esm/components/Avatar/Avatar.js.map +0 -1
  637. package/dist/esm/components/Badge/Badge.js.map +0 -1
  638. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +0 -1
  639. package/dist/esm/components/Button/Button.js.map +0 -1
  640. package/dist/esm/components/Button/ButtonGroup.js.map +0 -1
  641. package/dist/esm/components/Calendar/Calendar.js.map +0 -1
  642. package/dist/esm/components/Carousel/Carousel.js.map +0 -1
  643. package/dist/esm/components/Checkbox/Checkbox.js.map +0 -1
  644. package/dist/esm/components/Collapsible/Collapsible.js.map +0 -1
  645. package/dist/esm/components/Command/Command.js.map +0 -1
  646. package/dist/esm/components/Command/index.js.map +0 -1
  647. package/dist/esm/components/ContextMenu/ContextMenu.js.map +0 -1
  648. package/dist/esm/components/ContextMenu/index.js.map +0 -1
  649. package/dist/esm/components/Cropper/Cropper.js.map +0 -1
  650. package/dist/esm/components/Cropper/CropperTool.js.map +0 -1
  651. package/dist/esm/components/Cropper/utils.js.map +0 -1
  652. package/dist/esm/components/DatePicker/DatePicker.js.map +0 -1
  653. package/dist/esm/components/DatePicker/RangePicker.js.map +0 -1
  654. package/dist/esm/components/DatePicker/TimePicker.js.map +0 -1
  655. package/dist/esm/components/Dialog/Dialog.js.map +0 -1
  656. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +0 -1
  657. package/dist/esm/components/DropdownMenu/index.js.map +0 -1
  658. package/dist/esm/components/FloatLabel.js.map +0 -1
  659. package/dist/esm/components/Glass/Glass.js.map +0 -1
  660. package/dist/esm/components/ImageViewer/ImageViewer.js.map +0 -1
  661. package/dist/esm/components/Input/Input.js.map +0 -1
  662. package/dist/esm/components/InputOTP/InputOTP.js.map +0 -1
  663. package/dist/esm/components/Interactive/CursorFollow.js.map +0 -1
  664. package/dist/esm/components/Marquee/Marquee.js.map +0 -1
  665. package/dist/esm/components/Marquee/MarqueeWrapper.js.map +0 -1
  666. package/dist/esm/components/Marquee/index.js.map +0 -1
  667. package/dist/esm/components/Masonry/Masonry.js.map +0 -1
  668. package/dist/esm/components/Masonry/MasonryWrapper.js.map +0 -1
  669. package/dist/esm/components/Pagination/Pagination.js.map +0 -1
  670. package/dist/esm/components/Pagination/index.js.map +0 -1
  671. package/dist/esm/components/Popover/Popover.js.map +0 -1
  672. package/dist/esm/components/Popover/index.js.map +0 -1
  673. package/dist/esm/components/QrCode/QrCode.js.map +0 -1
  674. package/dist/esm/components/QrCode/index.js.map +0 -1
  675. package/dist/esm/components/Radio/Radio.js.map +0 -1
  676. package/dist/esm/components/Rate/Rate.js.map +0 -1
  677. package/dist/esm/components/Resizable/Resizable.js.map +0 -1
  678. package/dist/esm/components/ScrollArea/ScrollArea.js.map +0 -1
  679. package/dist/esm/components/Select/Select.js.map +0 -1
  680. package/dist/esm/components/Separator/Separator.js.map +0 -1
  681. package/dist/esm/components/Sheet/Sheet.js.map +0 -1
  682. package/dist/esm/components/Sidebar/Sidebar.js.map +0 -1
  683. package/dist/esm/components/Skeleton/Skeleton.js.map +0 -1
  684. package/dist/esm/components/Slider/Slider.js.map +0 -1
  685. package/dist/esm/components/Stepper/Stepper.js.map +0 -1
  686. package/dist/esm/components/Stepper/StepperWrapper.js.map +0 -1
  687. package/dist/esm/components/Stepper/index.js.map +0 -1
  688. package/dist/esm/components/Switch/Switch.js.map +0 -1
  689. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +0 -1
  690. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +0 -1
  691. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +0 -1
  692. package/dist/esm/components/Table/data-table-column-header.js.map +0 -1
  693. package/dist/esm/components/Table/data-table-pagination.js.map +0 -1
  694. package/dist/esm/components/Table/data-table-toolbar.js.map +0 -1
  695. package/dist/esm/components/Table/data-table-view-options.js.map +0 -1
  696. package/dist/esm/components/Table/data-table.js.map +0 -1
  697. package/dist/esm/components/Table/select-column.js.map +0 -1
  698. package/dist/esm/components/Tabs/Tabs.js.map +0 -1
  699. package/dist/esm/components/Tabs/classes.js.map +0 -1
  700. package/dist/esm/components/Textarea/Textarea.js.map +0 -1
  701. package/dist/esm/components/TimeGridView.js.map +0 -1
  702. package/dist/esm/components/Toast/Toast.js.map +0 -1
  703. package/dist/esm/components/Toggle/Toggle.js.map +0 -1
  704. package/dist/esm/components/Tooltip/Tooltip.js.map +0 -1
  705. package/dist/esm/components/Tour/Tour.js.map +0 -1
  706. package/dist/esm/components/Tour/TourWrapper.js.map +0 -1
  707. package/dist/esm/components/Tour/index.js.map +0 -1
  708. package/dist/esm/components/TreeSelect/TreeSelect.js.map +0 -1
  709. package/dist/esm/components/Upload/Upload.js.map +0 -1
  710. package/dist/esm/components/WheelColumn.js.map +0 -1
  711. package/dist/esm/config/data-table.js.map +0 -1
  712. package/dist/esm/constants/common.js.map +0 -1
  713. package/dist/esm/hooks/use-callback-ref.js.map +0 -1
  714. package/dist/esm/hooks/use-data-table.js.map +0 -1
  715. package/dist/esm/hooks/use-debounced-callback.js.map +0 -1
  716. package/dist/esm/hooks/use-debounced-value.js.map +0 -1
  717. package/dist/esm/hooks/use-event-listener.js.map +0 -1
  718. package/dist/esm/hooks/use-intersection-observer.js.map +0 -1
  719. package/dist/esm/hooks/use-isomorphic-layout-effect.js.map +0 -1
  720. package/dist/esm/hooks/use-media-query.js.map +0 -1
  721. package/dist/esm/hooks/use-on-click-outside.js.map +0 -1
  722. package/dist/esm/hooks/use-script.js.map +0 -1
  723. package/dist/esm/hooks/use-scroll-lock.js.map +0 -1
  724. package/dist/esm/index.js.map +0 -1
  725. package/dist/esm/lib/TextAnimation/BlurText.js.map +0 -1
  726. package/dist/esm/lib/TextAnimation/CircularText.js.map +0 -1
  727. package/dist/esm/lib/TextAnimation/FlipWords.js.map +0 -1
  728. package/dist/esm/lib/TextAnimation/GradientText.js.map +0 -1
  729. package/dist/esm/lib/TextAnimation/RollingText.js.map +0 -1
  730. package/dist/esm/lib/TextAnimation/RotatingText.js.map +0 -1
  731. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +0 -1
  732. package/dist/esm/lib/TextAnimation/SplittingText.js.map +0 -1
  733. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +0 -1
  734. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +0 -1
  735. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +0 -1
  736. package/dist/esm/lib/TextAnimation/TypingText.js.map +0 -1
  737. package/dist/esm/lib/TextAnimation/WritingText.js.map +0 -1
  738. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.1/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  739. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  740. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  741. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.1/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  742. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +0 -1
  743. package/dist/esm/node_modules/.pnpm/react-viewer@3.2.2/node_modules/react-viewer/dist/index.js.map +0 -1
  744. package/dist/esm/packages/ui/src/components/accordion.js.map +0 -1
  745. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +0 -1
  746. package/dist/esm/packages/ui/src/components/avatar.js.map +0 -1
  747. package/dist/esm/packages/ui/src/components/badge.js.map +0 -1
  748. package/dist/esm/packages/ui/src/components/breadcrumb.js.map +0 -1
  749. package/dist/esm/packages/ui/src/components/button-group.js.map +0 -1
  750. package/dist/esm/packages/ui/src/components/button.js.map +0 -1
  751. package/dist/esm/packages/ui/src/components/calendar.js.map +0 -1
  752. package/dist/esm/packages/ui/src/components/checkbox.js.map +0 -1
  753. package/dist/esm/packages/ui/src/components/collapsible.js.map +0 -1
  754. package/dist/esm/packages/ui/src/components/combobox.js.map +0 -1
  755. package/dist/esm/packages/ui/src/components/command.js.map +0 -1
  756. package/dist/esm/packages/ui/src/components/context-menu.js.map +0 -1
  757. package/dist/esm/packages/ui/src/components/dialog.js.map +0 -1
  758. package/dist/esm/packages/ui/src/components/drawer.js.map +0 -1
  759. package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +0 -1
  760. package/dist/esm/packages/ui/src/components/input-otp.js.map +0 -1
  761. package/dist/esm/packages/ui/src/components/input.js.map +0 -1
  762. package/dist/esm/packages/ui/src/components/label.js.map +0 -1
  763. package/dist/esm/packages/ui/src/components/pagination.js.map +0 -1
  764. package/dist/esm/packages/ui/src/components/popover.js.map +0 -1
  765. package/dist/esm/packages/ui/src/components/radio-group.js.map +0 -1
  766. package/dist/esm/packages/ui/src/components/resizable.js.map +0 -1
  767. package/dist/esm/packages/ui/src/components/scroll-area.js.map +0 -1
  768. package/dist/esm/packages/ui/src/components/select.js.map +0 -1
  769. package/dist/esm/packages/ui/src/components/separator.js.map +0 -1
  770. package/dist/esm/packages/ui/src/components/sheet.js.map +0 -1
  771. package/dist/esm/packages/ui/src/components/sidebar.js.map +0 -1
  772. package/dist/esm/packages/ui/src/components/skeleton.js.map +0 -1
  773. package/dist/esm/packages/ui/src/components/switch.js.map +0 -1
  774. package/dist/esm/packages/ui/src/components/table.js.map +0 -1
  775. package/dist/esm/packages/ui/src/components/tabs.js.map +0 -1
  776. package/dist/esm/packages/ui/src/components/textarea.js.map +0 -1
  777. package/dist/esm/packages/ui/src/components/toggle.js.map +0 -1
  778. package/dist/esm/packages/ui/src/components/tooltip.js.map +0 -1
  779. package/dist/esm/packages/ui/src/components/tree-view.js.map +0 -1
  780. package/dist/esm/packages/ui/src/hooks/use-mobile.js.map +0 -1
  781. package/dist/esm/packages/ui/src/lib/compose-refs.js.map +0 -1
  782. package/dist/esm/packages/ui/src/lib/utils.js.map +0 -1
  783. package/dist/esm/utils/animations.js.map +0 -1
  784. package/dist/esm/utils/css.js.map +0 -1
  785. package/dist/esm/utils/data-table.js.map +0 -1
  786. package/dist/esm/utils/datetime.js.map +0 -1
  787. package/dist/esm/utils/parsers.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Tabs as STabs,\n TabsList as STabsList,\n TabsTrigger as STabsTrigger,\n TabsContent as STabsContent,\n} from \"@dsui/ui/components/tabs\";\nimport { motion } from \"motion/react\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { ScrollArea, ScrollBar } from \"../ScrollArea/ScrollArea\";\nimport { Popover } from \"../Popover\";\nimport { MoreHorizontal } from \"lucide-react\";\nimport type {\n TabAlignment,\n TabColor,\n TabItem,\n TabOverflowMode,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\nimport {\n alignmentClasses,\n getColorClasses,\n getEnclosedFillTriggerClasses,\n getEnclosedTriggerClasses,\n getListBorderClasses,\n getUnderlinedTriggerClasses,\n positionClasses,\n sizeClasses,\n variantClasses,\n} from \"./classes\";\n\nexport interface TabsProps {\n // Core props\n items: TabItem[];\n defaultActiveKey?: string;\n activeKey?: string;\n onChange?: (key: string) => void;\n\n // Layout\n tabPosition?: TabPosition;\n size?: TabSize;\n alignment?: TabAlignment;\n fullWidth?: boolean;\n\n // Overflow handling\n overflowMode?: TabOverflowMode;\n\n // Styling\n variant?: TabVariant;\n color?: TabColor;\n className?: string;\n tabListClassName?: string;\n tabContentClassName?: string;\n tabTriggerClassName?: string;\n}\n\nconst Tabs = React.forwardRef<HTMLDivElement, TabsProps>((props, ref) => {\n const {\n items,\n defaultActiveKey,\n activeKey,\n onChange,\n tabPosition = \"top\",\n size = \"md\",\n alignment = \"start\",\n fullWidth = false,\n overflowMode = \"scroll\",\n variant = \"solid\",\n color = \"muted\",\n className,\n tabListClassName,\n tabContentClassName,\n tabTriggerClassName,\n } = props;\n\n const tabRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n const tabsListRef = React.useRef<HTMLDivElement | null>(null);\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const scrollAreaRef = React.useRef<HTMLDivElement | null>(null);\n\n const [indicatorStyle, setIndicatorStyle] = React.useState<{\n left: number;\n width: number;\n top: number;\n height: number;\n }>({\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n });\n\n const [internalActiveKey, setInternalActiveKey] = React.useState<\n string | undefined\n >(activeKey || defaultActiveKey || items[0]?.key);\n\n // Overflow state management\n const [isOverflowing, setIsOverflowing] = React.useState(false);\n const [visibleTabsCount, setVisibleTabsCount] = React.useState(items.length);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n\n // Fade state management for scroll position\n const [showStartFade, setShowStartFade] = React.useState(false);\n const [showEndFade, setShowEndFade] = React.useState(false);\n\n const currentActiveKey =\n activeKey !== undefined ? activeKey : internalActiveKey;\n\n const isVertical = tabPosition === \"left\" || tabPosition === \"right\";\n\n // Check if tabs are overflowing (for scroll and fade modes)\n React.useLayoutEffect(() => {\n if (!overflowMode || overflowMode === \"dropdown\") return;\n\n const checkOverflow = () => {\n const container = containerRef.current;\n const listElement = tabsListRef.current;\n\n if (!container || !listElement) return;\n\n const containerSize = isVertical\n ? container.clientHeight\n : container.clientWidth;\n const listSize = isVertical\n ? listElement.scrollHeight\n : listElement.scrollWidth;\n\n const hasOverflow = listSize > containerSize;\n setIsOverflowing(hasOverflow);\n };\n\n // Initial check\n checkOverflow();\n\n // Use ResizeObserver for responsive updates\n const resizeObserver = new ResizeObserver(checkOverflow);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n if (tabsListRef.current) {\n resizeObserver.observe(tabsListRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [items, overflowMode, isVertical]);\n\n // Calculate visible tabs for dropdown mode\n React.useLayoutEffect(() => {\n if (overflowMode !== \"dropdown\") return;\n\n const calculateVisibleTabs = () => {\n const container = containerRef.current;\n if (!container) return;\n\n const containerSize = isVertical\n ? container.clientHeight\n : container.clientWidth;\n\n // Calculate how many tabs can fit including the [...] button\n let totalSize = 0;\n const dropdownButtonSize = 48; // Size of [...] button with gap\n const listPadding = 6; // p-[3px] = 6px total padding for some variants\n const gap =\n variant === \"enclosed-fill\" ||\n variant === \"bordered\" ||\n variant === \"pills\" ||\n variant === \"pill-stroke\" ||\n variant === \"text\" ||\n variant === \"outline\"\n ? 4\n : 0; // gap-1 = 4px\n\n let count = 0;\n for (let i = 0; i < tabRefs.current.length; i++) {\n const tab = tabRefs.current[i];\n if (!tab) break;\n\n const tabSize = isVertical ? tab.offsetHeight : tab.offsetWidth;\n const withGap = i > 0 ? gap : 0;\n\n // Check if we can fit this tab + [...] button if there are more tabs\n const hasMoreTabs = i < tabRefs.current.length - 1;\n const requiredSize =\n totalSize +\n tabSize +\n withGap +\n (hasMoreTabs ? dropdownButtonSize : 0) +\n listPadding;\n\n if (requiredSize <= containerSize) {\n totalSize += tabSize + withGap;\n count++;\n } else {\n break;\n }\n }\n\n // Only show overflow if we can't fit all tabs\n const hasHiddenTabs = count < items.length;\n setIsOverflowing(hasHiddenTabs);\n setVisibleTabsCount(Math.max(1, count));\n };\n\n // Initial calculation\n calculateVisibleTabs();\n\n // Use ResizeObserver for responsive updates\n const resizeObserver = new ResizeObserver(calculateVisibleTabs);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n // Also observe each tab for size changes\n tabRefs.current.forEach((tab) => {\n if (tab) resizeObserver.observe(tab);\n });\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [items, overflowMode, isVertical, variant]);\n\n React.useLayoutEffect(() => {\n const activeIndex = items.findIndex((tab) => tab.key === currentActiveKey);\n const activeTabElement = tabRefs.current[activeIndex];\n const listElement = tabsListRef.current;\n\n if (activeTabElement && listElement) {\n const listRect = listElement.getBoundingClientRect();\n const tabRect = activeTabElement.getBoundingClientRect();\n\n // Calculate relative position within the list\n const left = tabRect.left - listRect.left;\n const top = tabRect.top - listRect.top;\n\n setIndicatorStyle({\n left: left,\n width: tabRect.width,\n top: top,\n height: tabRect.height,\n });\n\n // Auto-scroll to active tab in fade mode\n if (overflowMode === \"fade\" && scrollAreaRef.current) {\n const scrollAreaViewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (scrollAreaViewport) {\n const viewportRect = scrollAreaViewport.getBoundingClientRect();\n const tabRectInViewport = activeTabElement.getBoundingClientRect();\n const fadeWidth = 96; // 24 * 4 = 96px (w-24 class)\n\n if (isVertical) {\n // Scroll vertically\n const scrollTop = scrollAreaViewport.scrollTop;\n const scrollHeight = scrollAreaViewport.scrollHeight;\n const viewportHeight = viewportRect.height;\n const tabTop = tabRectInViewport.top - viewportRect.top + scrollTop;\n const tabHeight = tabRectInViewport.height;\n\n // If it's the first tab, scroll to the very top\n if (activeIndex === 0) {\n scrollAreaViewport.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n }\n // If it's the last tab, scroll to the very bottom\n else if (activeIndex === items.length - 1) {\n scrollAreaViewport.scrollTo({\n top: scrollHeight - viewportHeight,\n behavior: \"smooth\",\n });\n }\n // For middle tabs, try to center them with padding to avoid fade\n else {\n const targetScrollTop =\n tabTop - viewportHeight / 2 + tabHeight / 2;\n const maxScroll = scrollHeight - viewportHeight;\n\n // Ensure we don't scroll beyond bounds and leave space for fade\n const clampedScroll = Math.max(\n fadeWidth / 2,\n Math.min(targetScrollTop, maxScroll - fadeWidth / 2)\n );\n\n scrollAreaViewport.scrollTo({\n top: clampedScroll,\n behavior: \"smooth\",\n });\n }\n } else {\n // Scroll horizontally\n const scrollLeft = scrollAreaViewport.scrollLeft;\n const scrollWidth = scrollAreaViewport.scrollWidth;\n const viewportWidth = viewportRect.width;\n const tabLeft =\n tabRectInViewport.left - viewportRect.left + scrollLeft;\n const tabWidth = tabRectInViewport.width;\n\n // If it's the first tab, scroll to the very left\n if (activeIndex === 0) {\n scrollAreaViewport.scrollTo({\n left: 0,\n behavior: \"smooth\",\n });\n }\n // If it's the last tab, scroll to the very right\n else if (activeIndex === items.length - 1) {\n scrollAreaViewport.scrollTo({\n left: scrollWidth - viewportWidth,\n behavior: \"smooth\",\n });\n }\n // For middle tabs, try to center them with padding to avoid fade\n else {\n const targetScrollLeft =\n tabLeft - viewportWidth / 2 + tabWidth / 2;\n const maxScroll = scrollWidth - viewportWidth;\n\n // Ensure we don't scroll beyond bounds and leave space for fade\n const clampedScroll = Math.max(\n fadeWidth / 2,\n Math.min(targetScrollLeft, maxScroll - fadeWidth / 2)\n );\n\n scrollAreaViewport.scrollTo({\n left: clampedScroll,\n behavior: \"smooth\",\n });\n }\n }\n }\n }\n }\n }, [currentActiveKey, items, isVertical, overflowMode]);\n\n // Handle scroll events for fade mode to show/hide fade gradients\n React.useEffect(() => {\n if (overflowMode !== \"fade\" || !scrollAreaRef.current) return;\n\n const scrollAreaViewport = scrollAreaRef.current.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (!scrollAreaViewport) return;\n\n let rafId: number | null = null;\n\n const handleScroll = () => {\n // Cancel previous frame if still pending\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n\n // Use requestAnimationFrame for smooth updates\n rafId = requestAnimationFrame(() => {\n const threshold = 5; // Small threshold to account for floating point precision\n\n if (isVertical) {\n const scrollTop = scrollAreaViewport.scrollTop;\n const scrollHeight = scrollAreaViewport.scrollHeight;\n const clientHeight = scrollAreaViewport.clientHeight;\n\n setShowStartFade(scrollTop > threshold);\n setShowEndFade(scrollTop < scrollHeight - clientHeight - threshold);\n } else {\n const scrollLeft = scrollAreaViewport.scrollLeft;\n const scrollWidth = scrollAreaViewport.scrollWidth;\n const clientWidth = scrollAreaViewport.clientWidth;\n\n setShowStartFade(scrollLeft > threshold);\n setShowEndFade(scrollLeft < scrollWidth - clientWidth - threshold);\n }\n\n // Update indicator position smoothly during scroll\n const activeIndex = items.findIndex(\n (tab) => tab.key === currentActiveKey\n );\n const activeTabElement = tabRefs.current[activeIndex];\n const listElement = tabsListRef.current;\n\n if (activeTabElement && listElement) {\n const listRect = listElement.getBoundingClientRect();\n const tabRect = activeTabElement.getBoundingClientRect();\n\n const left = tabRect.left - listRect.left;\n const top = tabRect.top - listRect.top;\n\n setIndicatorStyle({\n left: left,\n width: tabRect.width,\n top: top,\n height: tabRect.height,\n });\n }\n\n rafId = null;\n });\n };\n\n // Initial check\n handleScroll();\n\n // Add scroll listener\n scrollAreaViewport.addEventListener(\"scroll\", handleScroll, {\n passive: true,\n });\n\n // Recheck on resize\n const resizeObserver = new ResizeObserver(handleScroll);\n resizeObserver.observe(scrollAreaViewport);\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n scrollAreaViewport.removeEventListener(\"scroll\", handleScroll);\n resizeObserver.disconnect();\n };\n }, [overflowMode, isVertical, isOverflowing, items, currentActiveKey]);\n\n // Enable horizontal scrolling with mouse wheel for horizontal tabs in scroll/fade modes\n React.useEffect(() => {\n if (overflowMode !== \"scroll\" && overflowMode !== \"fade\") return;\n if (isVertical) return; // Only for horizontal tabs\n\n const scrollAreaViewport = scrollAreaRef.current?.querySelector(\n \"[data-radix-scroll-area-viewport]\"\n ) as HTMLElement;\n\n if (!scrollAreaViewport) return;\n\n const handleWheel = (e: WheelEvent) => {\n if (e.deltaY !== 0) {\n e.preventDefault();\n scrollAreaViewport.scrollLeft += e.deltaY * 2;\n }\n };\n\n scrollAreaViewport.addEventListener(\"wheel\", handleWheel, { passive: false });\n\n return () => {\n scrollAreaViewport.removeEventListener(\"wheel\", handleWheel);\n };\n }, [overflowMode, isVertical]);\n\n const handleValueChange = (key: string) => {\n if (activeKey === undefined) {\n setInternalActiveKey(key);\n }\n onChange?.(key);\n };\n\n const orientation = isVertical ? \"vertical\" : \"horizontal\";\n\n // Get variant classes\n const variantConfig = variantClasses[variant];\n const listVariantClass =\n variantConfig.list[isVertical ? \"vertical\" : \"horizontal\"];\n\n // Get trigger variant class based on variant type\n let triggerVariantClass =\n variantConfig.trigger[isVertical ? \"vertical\" : \"horizontal\"];\n\n // For underlined and enclosed variants, use dynamic classes based on position\n if (variant === \"underlined\") {\n triggerVariantClass = getUnderlinedTriggerClasses(tabPosition);\n } else if (variant === \"enclosed\") {\n triggerVariantClass = getEnclosedTriggerClasses(tabPosition);\n } else if (variant === \"enclosed-fill\") {\n triggerVariantClass = getEnclosedFillTriggerClasses(tabPosition);\n }\n\n // Get color classes based on variant\n const triggerColorClass = getColorClasses(variant, color);\n const listBorderClass = getListBorderClasses(variant, color, tabPosition);\n\n // Determine which tabs to show based on overflow mode\n const visibleTabs =\n overflowMode === \"dropdown\" && isOverflowing\n ? items.slice(0, visibleTabsCount)\n : items;\n\n const overflowTabs =\n overflowMode === \"dropdown\" && isOverflowing\n ? items.slice(visibleTabsCount)\n : overflowMode === \"fade\" && isOverflowing\n ? items\n : [];\n\n // For dropdown mode: show [...] button only if there are hidden tabs\n const showDropdownButton =\n overflowMode === \"dropdown\" && isOverflowing && overflowTabs.length > 0;\n\n // Check if active tab is in overflow (hidden) tabs\n const isActiveTabInOverflow =\n overflowMode === \"dropdown\" &&\n isOverflowing &&\n overflowTabs.some((tab) => tab.key === currentActiveKey);\n\n const renderTabTriggers = (tabItems: TabItem[], startIndex = 0) => (\n <>\n {tabItems.map((item, index) => {\n const actualIndex = startIndex + index;\n return (\n <STabsTrigger\n key={item.key}\n ref={(el) => {\n tabRefs.current[actualIndex] = el;\n }}\n value={item.key}\n disabled={item.disabled}\n className={cn(\n triggerVariantClass,\n // Apply styles based on variant\n {\n // For sliding indicator variants, remove default background\n \"ds:relative ds:z-10 ds:bg-transparent ds:data-[state=active]:bg-transparent\":\n variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\",\n // Apply text color for active state with sliding indicator\n \"ds:data-[state=active]:text-primary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"ds:data-[state=active]:text-secondary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"ds:data-[state=active]:text-muted-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"ds:data-[state=active]:text-accent-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"ds:data-[state=active]:text-destructive-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"ds:data-[state=active]:text-white\":\n (variant === \"bordered\" || variant === \"pills\") &&\n (color === \"success\" || color === \"warning\"),\n \"ds:flex-1\": fullWidth && !isVertical,\n \"ds:w-full ds:justify-start\": isVertical,\n },\n // For other variants, apply normal color classes\n !(\n variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\"\n ) && triggerColorClass,\n item.className,\n tabTriggerClassName\n )}\n >\n {item.icon && (\n <span className=\"ds:mr-2 ds:inline-flex ds:items-center\">{item.icon}</span>\n )}\n {item.label}\n </STabsTrigger>\n );\n })}\n </>\n );\n\n const renderTabsList = () => {\n const tabsListContent = (\n <STabsList\n ref={tabsListRef}\n className={cn(\n positionClasses[tabPosition].list,\n sizeClasses[size][isVertical ? \"vertical\" : \"horizontal\"],\n listVariantClass,\n listBorderClass,\n tabListClassName,\n \"ds:relative\",\n {\n \"ds:overflow-hidden\": overflowMode === \"fade\" && isOverflowing,\n \"ds:max-w-full\": overflowMode === \"fade\", // Limit width for fade mode\n // For overflow modes, allow natural width expansion\n \"ds:w-auto\": overflowMode === \"dropdown\" || overflowMode === \"fade\",\n }\n )}\n >\n {renderTabTriggers(visibleTabs)}\n\n {/* Sliding indicator for underlined variant */}\n {variant === \"underlined\" &&\n indicatorStyle.width > 0 &&\n !isActiveTabInOverflow && (\n <motion.div\n className={cn(\"ds:absolute ds:rounded-full ds:z-10\", {\n // Horizontal positions (top/bottom)\n \"ds:h-0.5 ds:bottom-0\": tabPosition === \"top\",\n \"ds:h-0.5 ds:top-0\": tabPosition === \"bottom\",\n // Vertical positions (left/right)\n \"ds:w-0.5 ds:right-0\": tabPosition === \"left\",\n \"ds:w-0.5 ds:left-0\": tabPosition === \"right\",\n // Colors\n \"ds:bg-primary\": color === \"primary\",\n \"ds:bg-secondary\": color === \"secondary\",\n \"ds:bg-muted-foreground\": color === \"muted\",\n \"ds:bg-accent\": color === \"accent\",\n \"ds:bg-destructive\": color === \"destructive\",\n \"ds:bg-success\": color === \"success\",\n \"ds:bg-warning\": color === \"warning\",\n })}\n animate={\n isVertical\n ? {\n top: indicatorStyle.top,\n height: indicatorStyle.height,\n }\n : {\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n }\n }\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n }}\n />\n )}\n\n {/* Sliding indicator for solid, bordered, pills variants */}\n {(variant === \"solid\" ||\n variant === \"bordered\" ||\n variant === \"pills\" ||\n variant === \"pill-stroke\") &&\n indicatorStyle.width > 0 &&\n !isActiveTabInOverflow && (\n <motion.div\n className={cn(\"ds:absolute ds:rounded-md ds:pointer-events-none ds:z-0\", {\n \"ds:bg-background ds:shadow-sm\": variant === \"solid\",\n\n \"ds:bg-primary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"ds:bg-secondary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"ds:bg-muted\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"ds:bg-accent\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"ds:bg-destructive\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"ds:bg-success\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"success\",\n \"ds:bg-warning\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"warning\",\n\n \"ds:border ds:rounded-full ds:border-primary\":\n variant === \"pill-stroke\" && color === \"primary\",\n \"ds:border ds:rounded-full ds:border-secondary\":\n variant === \"pill-stroke\" && color === \"secondary\",\n \"ds:rounded-full ds:border-muted\":\n variant === \"pill-stroke\" && color === \"muted\",\n \"ds:border ds:rounded-full ds:border-accent\":\n variant === \"pill-stroke\" && color === \"accent\",\n \"ds:border ds:rounded-full ds:border-destructive\":\n variant === \"pill-stroke\" && color === \"destructive\",\n \"ds:border ds:rounded-full ds:border-success\":\n variant === \"pill-stroke\" && color === \"success\",\n \"ds:border ds:rounded-full ds:border-warning\":\n variant === \"pill-stroke\" && color === \"warning\",\n })}\n animate={{\n left: indicatorStyle.left,\n width: indicatorStyle.width,\n top: indicatorStyle.top,\n height: indicatorStyle.height,\n }}\n transition={{\n type: \"spring\",\n stiffness: 300,\n damping: 30,\n }}\n />\n )}\n </STabsList>\n );\n\n // Mode 1: Scroll - wrap in ScrollArea with ScrollBar\n if (overflowMode === \"scroll\") {\n return (\n <ScrollArea\n ref={scrollAreaRef}\n className={cn({\n \"ds:w-full\": !isVertical,\n \"ds:pb-2\": !isVertical && isOverflowing,\n \"ds:max-h-[300px] ds:*:data-radix-scroll-area-viewport:h-full ds:*:data-radix-scroll-area-viewport:max-h-[inherit]\":\n isVertical,\n })}\n >\n {tabsListContent}\n <ScrollBar orientation={isVertical ? \"vertical\" : \"horizontal\"} />\n </ScrollArea>\n );\n }\n\n // Mode 2: Dropdown - show visible tabs + [...] button for overflow tabs\n if (overflowMode === \"dropdown\" && showDropdownButton) {\n return (\n <div\n className={cn(\"ds:relative ds:flex ds:items-start ds:gap-1\", {\n \"ds:flex-col\": isVertical,\n })}\n >\n {/* Show only visible tabs */}\n {tabsListContent}\n\n {/* Overflow menu button - only show if there are hidden tabs */}\n <Popover\n open={dropdownOpen}\n onOpenChange={setDropdownOpen}\n trigger={\n <button\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:rounded-md ds:text-sm ds:font-medium ds:ring-offset-background ds:transition-colors\",\n \"ds:focus-visible:outline-none ds:focus-visible:ring-2 ds:focus-visible:ring-ring ds:focus-visible:ring-offset-2\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:h-9 ds:px-3 ds:shrink-0\",\n {\n \"ds:bg-accent ds:text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"ds:h-4 ds:w-4\" />\n </button>\n }\n content={\n <div className={cn(\"ds:flex ds:flex-col ds:gap-1 ds:p-1\")}>\n {overflowTabs.map((item) => (\n <button\n key={item.key}\n onClick={() => {\n handleValueChange(item.key);\n setDropdownOpen(false);\n }}\n disabled={item.disabled}\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:text-left\",\n {\n \"ds:bg-accent ds:text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"ds:inline-flex ds:items-center\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ))}\n </div>\n }\n side={isVertical ? \"right\" : \"bottom\"}\n align=\"end\"\n className=\"ds:w-auto ds:min-w-32 ds:max-w-sm ds:max-h-96 ds:overflow-auto ds:p-0\"\n />\n </div>\n );\n }\n\n // Mode 3: Fade with overflow button\n if (overflowMode === \"fade\" && isOverflowing) {\n return (\n <div\n className={cn(\"ds:relative ds:flex ds:items-start ds:gap-1\", {\n \"ds:flex-col\": isVertical,\n \"ds:flex-1 ds:w-full\": true, // Take full width for fade mode\n })}\n >\n {/* Fade effect for mode 3 */}\n <div\n className={cn(\"ds:relative ds:flex-1 ds:overflow-hidden\", {\n \"ds:w-full\": !isVertical,\n \"ds:h-full\": isVertical,\n })}\n >\n <ScrollArea\n ref={scrollAreaRef}\n className={cn({\n \"ds:w-full\": !isVertical,\n \"ds:h-full\": isVertical,\n })}\n >\n {tabsListContent}\n <ScrollBar orientation={isVertical ? \"vertical\" : \"horizontal\"} />\n </ScrollArea>\n\n {/* Start gradient overlay (left/top) - only show when scrolled */}\n {showStartFade && (\n <div\n className={cn(\"ds:absolute ds:pointer-events-none ds:z-20\", {\n \"ds:top-0 ds:left-0 ds:bottom-0 ds:w-24 ds:bg-linear-to-r ds:from-background ds:to-transparent\":\n !isVertical,\n \"ds:left-0 ds:right-0 ds:top-0 ds:h-24 ds:bg-linear-to-b ds:from-background ds:to-transparent\":\n isVertical,\n })}\n />\n )}\n\n {/* End gradient overlay (right/bottom) - only show when not at end */}\n {showEndFade && (\n <div\n className={cn(\"ds:absolute ds:pointer-events-none ds:z-20\", {\n \"ds:top-0 ds:right-0 ds:bottom-0 ds:w-24 ds:bg-linear-to-l ds:from-background ds:to-transparent\":\n !isVertical,\n \"ds:left-0 ds:right-0 ds:bottom-0 ds:h-24 ds:bg-linear-to-t ds:from-background ds:to-transparent\":\n isVertical,\n })}\n />\n )}\n </div>\n\n {/* Overflow menu button - shows all tabs */}\n <Popover\n open={dropdownOpen}\n onOpenChange={setDropdownOpen}\n trigger={\n <button\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:rounded-md ds:text-sm ds:font-medium ds:ring-offset-background ds:transition-colors\",\n \"ds:focus-visible:outline-none ds:focus-visible:ring-2 ds:focus-visible:ring-ring ds:focus-visible:ring-offset-2\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:h-9 ds:px-3 ds:shrink-0\",\n {\n \"ds:bg-accent ds:text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"ds:h-4 ds:w-4\" />\n </button>\n }\n content={\n // <div className={cn(\"flex flex-col gap-1 min-w-[150px]\")}>\n <ScrollArea\n className=\"ds:min-w-[150px] ds:max-h-[256px] ds:[&_[data-radix-scroll-area-viewport]]:max-h-[256px]\"\n snapType=\"y\"\n >\n {items.map((item) => (\n <button\n key={item.key}\n onClick={() => {\n handleValueChange(item.key);\n setDropdownOpen(false);\n }}\n disabled={item.disabled}\n className={cn(\n \"ds:snap-start\",\n \"ds:w-full ds:flex ds:items-center ds:gap-2 ds:rounded-sm ds:px-2 ds:py-1.5 ds:text-sm\",\n \"ds:hover:bg-accent ds:hover:text-accent-foreground\",\n \"ds:disabled:pointer-events-none ds:disabled:opacity-50\",\n \"ds:text-left\",\n {\n \"ds:bg-accent ds:text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"ds:inline-flex ds:items-center\">\n {item.icon}\n </span>\n )}\n {item.label}\n </button>\n ))}\n </ScrollArea>\n // </div>\n }\n side={isVertical ? \"right\" : \"bottom\"}\n align=\"end\"\n className=\"ds:p-2\"\n />\n </div>\n );\n }\n\n return tabsListContent;\n };\n\n return (\n <STabs\n ref={ref}\n defaultValue={defaultActiveKey}\n value={currentActiveKey}\n onValueChange={handleValueChange}\n orientation={orientation}\n className={cn(\"ds:gap-2\", positionClasses[tabPosition].root, className)}\n >\n <div\n ref={containerRef}\n className={cn(\"ds:flex\", {\n [alignmentClasses[alignment].horizontal]: !isVertical,\n [alignmentClasses[alignment].vertical]: isVertical,\n \"ds:w-full\":\n (fullWidth ||\n overflowMode === \"dropdown\" ||\n overflowMode === \"fade\") &&\n !isVertical,\n \"ds:overflow-hidden\":\n overflowMode === \"dropdown\" || overflowMode === \"fade\",\n })}\n >\n {renderTabsList()}\n </div>\n {items.map((item) => (\n <STabsContent\n key={item.key}\n value={item.key}\n className={cn(tabContentClassName)}\n >\n {item.children}\n </STabsContent>\n ))}\n </STabs>\n );\n});\n\nTabs.displayName = \"Tabs\";\n\nexport default Tabs;\n"],"names":["Tabs","React","props","ref","items","defaultActiveKey","activeKey","onChange","tabPosition","size","alignment","fullWidth","overflowMode","variant","color","className","tabListClassName","tabContentClassName","tabTriggerClassName","tabRefs","tabsListRef","containerRef","scrollAreaRef","indicatorStyle","setIndicatorStyle","internalActiveKey","setInternalActiveKey","isOverflowing","setIsOverflowing","visibleTabsCount","setVisibleTabsCount","dropdownOpen","setDropdownOpen","showStartFade","setShowStartFade","showEndFade","setShowEndFade","currentActiveKey","isVertical","checkOverflow","container","listElement","containerSize","hasOverflow","resizeObserver","calculateVisibleTabs","totalSize","dropdownButtonSize","listPadding","gap","count","i","tab","tabSize","withGap","hasMoreTabs","hasHiddenTabs","activeIndex","activeTabElement","listRect","tabRect","left","top","scrollAreaViewport","viewportRect","tabRectInViewport","fadeWidth","scrollTop","scrollHeight","viewportHeight","tabTop","tabHeight","targetScrollTop","maxScroll","clampedScroll","scrollLeft","scrollWidth","viewportWidth","tabLeft","tabWidth","targetScrollLeft","rafId","handleScroll","clientHeight","clientWidth","handleWheel","e","handleValueChange","key","orientation","variantConfig","variantClasses","listVariantClass","triggerVariantClass","getUnderlinedTriggerClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","triggerColorClass","getColorClasses","listBorderClass","getListBorderClasses","visibleTabs","overflowTabs","showDropdownButton","isActiveTabInOverflow","renderTabTriggers","tabItems","startIndex","item","index","actualIndex","jsxs","STabsTrigger","el","cn","jsx","renderTabsList","tabsListContent","STabsList","positionClasses","sizeClasses","motion","ScrollArea","ScrollBar","Popover","MoreHorizontal","STabs","alignmentClasses","STabsContent"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"classes.js","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground\",\n text: \"ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary\",\n border:\n \"ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground\",\n text: \"ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary\",\n border:\n \"ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n text: \"ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n border:\n \"ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n text: \"ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n border:\n \"ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground\",\n text: \"ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive\",\n border:\n \"ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground\",\n text: \"ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success\",\n border:\n \"ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground\",\n text: \"ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning\",\n border:\n \"ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} ds:dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:border-b-2 ds:h-full`,\n bottom: `${baseClasses} ds:border-t-2 ds:h-full`,\n left: `${baseClasses} ds:border-r-2 ds:w-full`,\n right: `${baseClasses} ds:border-l-2 ds:w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Textarea.js","sources":["../../../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n Textarea as STextarea,\n type TextareaProps as STextareaProps,\n} from \"@dsui/ui/components/textarea\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Info, X } from \"lucide-react\";\nimport { Tooltip } from \"../Tooltip/Tooltip\";\nimport { FloatingLabel } from \"@/components/FloatLabel\";\nimport { Label } from \"../Label\";\n\nexport type TextareaProps = Omit<\n STextareaProps,\n \"onChange\" | \"size\" | \"state\"\n> & {\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n size?: \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n state?: \"default\" | \"success\" | \"warning\" | \"error\";\n label?: string;\n helperText?: React.ReactNode;\n isFloatLabel?: boolean;\n maxLength?: number;\n showCharCount?: boolean;\n infoTooltip?: React.ReactNode;\n clearable?: boolean;\n onClear?: () => void;\n required?: boolean;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n label,\n helperText,\n state,\n size = \"normal\",\n isFloatLabel,\n maxLength,\n showCharCount,\n infoTooltip,\n clearable,\n onClear,\n placeholder = \" \",\n onChange,\n required,\n ...props\n },\n ref\n ) => {\n // Character count state\n const [charCount, setCharCount] = React.useState(() => {\n if (typeof props.value === \"string\") return props.value.length;\n if (typeof props.defaultValue === \"string\")\n return props.defaultValue.length;\n return 0;\n });\n\n const handleInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCharCount(e.target.value.length);\n onChange?.(e);\n };\n\n const textareaId = React.useId();\n const innerRef = React.useRef<HTMLTextAreaElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => innerRef.current!);\n\n const handleClear = () => {\n if (innerRef.current) {\n innerRef.current.value = \"\";\n setCharCount(0);\n const event = new Event(\"input\", { bubbles: true });\n innerRef.current.dispatchEvent(event);\n if (onClear) onClear();\n }\n };\n\n // State\n const helperTextStyles = {\n default: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n warning: \"ds:text-warning\",\n error: \"ds:text-error\",\n };\n\n return (\n <div className={className}>\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1.5 ds:relative\", {\n \"ds:floating-label\": isFloatLabel,\n })}\n >\n {!isFloatLabel && label && (\n <Label\n htmlFor={textareaId}\n className=\"ds:flex ds:gap-2 ds:text-sm ds:font-medium ds:leading-none ds:peer-disabled:cursor-not-allowed ds:peer-disabled:opacity-70\"\n >\n <span>\n {label}\n {required && <span className=\"ds:text-error ds:ml-0.5\">*</span>}\n </span>\n {infoTooltip && (\n <Tooltip content={infoTooltip}>\n <Info className=\"ds:size-3.5 ds:min-w-3.5\" />\n </Tooltip>\n )}\n </Label>\n )}\n\n <div className=\"ds:relative\">\n <STextarea\n ref={innerRef}\n id={textareaId}\n className={cn(\n \"ds:peer ds:resize-y\",\n {\n \"ds:pt-6 ds:pb-2\": isFloatLabel && (size === \"lg\" || size === \"xl\"),\n \"ds:pt-6 ds:pb-1\": isFloatLabel && size !== \"lg\" && size !== \"xl\",\n \"ds:text-lg\": (size === \"xl\" || size === \"lg\") && !isFloatLabel,\n },\n clearable && charCount > 0 && \"ds:pr-10\"\n // className\n )}\n placeholder={placeholder}\n maxLength={maxLength}\n onChange={handleInput}\n state={state}\n size={\n isFloatLabel\n ? size === \"xl\" || size === \"lg\"\n ? size\n : \"xl\"\n : size\n }\n required={required}\n {...props}\n />\n {isFloatLabel && (\n <FloatingLabel\n htmlFor={textareaId}\n size={size}\n infoTooltip={infoTooltip}\n required={required}\n className=\"ds:peer-placeholder-shown:items-start\"\n >\n {label}\n </FloatingLabel>\n )}\n\n {/* Clear Button */}\n {clearable && charCount > 0 && (\n <button\n type=\"button\"\n tabIndex={-1}\n className={cn(\n \"ds:absolute ds:top-2 ds:right-2 ds:p-1 ds:rounded ds:hover:bg-accent ds:transition-colors\"\n )}\n onClick={handleClear}\n disabled={props.disabled}\n >\n <X className=\"ds:size-4\" />\n </button>\n )}\n </div>\n\n {(helperText || (showCharCount && typeof maxLength === \"number\")) && (\n <div className=\"ds:flex ds:items-center ds:justify-between ds:text-xs ds:gap-2\">\n {helperText && (\n <p\n className={cn(\n \"ds:text-xs\",\n state ? helperTextStyles?.[state] : \"\"\n )}\n >\n {helperText}\n </p>\n )}\n {showCharCount && typeof maxLength === \"number\" && (\n <span className=\"ds:ml-auto ds:text-muted-foreground\">\n {charCount} / {maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\nexport default Textarea;\n"],"names":["Textarea","React","className","label","helperText","state","size","isFloatLabel","maxLength","showCharCount","infoTooltip","clearable","onClear","placeholder","onChange","required","props","ref","charCount","setCharCount","handleInput","e","textareaId","innerRef","handleClear","event","helperTextStyles","jsx","jsxs","cn","Label","Tooltip","Info","STextarea","FloatingLabel","X"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimeGridView.js","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"ds:bg-primary\",\n text: \"ds:text-primary-foreground\",\n },\n secondary: {\n bg: \"ds:bg-secondary\",\n text: \"ds:text-secondary-foreground\",\n },\n accent: {\n bg: \"ds:bg-accent\",\n text: \"ds:text-accent-foreground\",\n },\n destructive: {\n bg: \"ds:bg-destructive\",\n text: \"ds:text-destructive-foreground\",\n },\n muted: {\n bg: \"ds:bg-muted\",\n text: \"ds:text-muted-foreground\",\n },\n success: {\n bg: \"ds:bg-success\",\n text: \"ds:text-success-foreground\",\n },\n error: {\n bg: \"ds:bg-error\",\n text: \"ds:text-error-foreground\",\n },\n warning: {\n bg: \"ds:bg-warning\",\n text: \"ds:text-warning-foreground\",\n },\n foreground: {\n bg: \"ds:bg-foreground\",\n text: \"ds:text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAM,CAACC,MAAwB,OAAOA,CAAG,EAAE,SAAS,GAAG,GAAG,GAG1DC,IAAkB,CAACC,IAAuB,eAC7B;AAAA,EACf,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AACR,GAEcA,CAAK,GAcVC,IAAeC;AAAA,EAC1BC,EAAM;AAAA,IACJ,CACE;AAAA,MACE,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAAV,IAAQ;AAAA,IAAA,GAEVW,MACG;AAEH,YAAMC,IAAcC,EAAQ,MAAM;AAChC,cAAMC,IAA4D,CAAA;AAElE,mBAAWC,KAAKX;AACd,qBAAWY,KAAKX;AACd,YAAAS,EAAQ,KAAK;AAAA,cACX,GAAAC;AAAA,cACA,GAAAC;AAAA,cACA,SAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC;AAAA,YAAA,CAC7B;AAIL,eAAOF;AAAA,MACT,GAAG,CAACV,GAAOC,CAAO,CAAC,GAEbY,IACJX,MAAU,UAAaC,MAAY,SAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,KAC7B,IAEAW,IAAmB,CAACH,GAAWC,MAAc;AAEjD,QAAKP,EAAeM,GAAGC,GAAG,CAAC,KACzBN,EAAaK,GAAGC,CAAC;AAAA,MAErB;AAEA,aACE,gBAAAG,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAR;AAAA,UACA,WAAU;AAAA,UAET,YAAY,IAAI,CAAC,EAAE,GAAAI,GAAG,GAAAC,GAAG,SAAAI,QAAc;AACtC,kBAAMC,IAAeZ,EAAeM,GAAGC,GAAG,CAAC,GACrCM,IAAaF,MAAYH,GACzBM,IAAexB,EAAgBC,CAAK;AAE1C,mBACE,gBAAAmB;AAAA,cAACK;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAMN,EAAiBH,GAAGC,CAAC;AAAA,gBACpC,iBAAeM,KAAc;AAAA,gBAC7B,UAAUd,KAAYa;AAAA,gBACtB,MAAK;AAAA,gBACL,WAAWI;AAAA,kBACTH,IACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,sBACvC;AAAA,gBAAA;AAAA,gBAGL,UAAAH;AAAA,cAAA;AAAA,cAbIA;AAAA,YAAA;AAAA,UAgBX,CAAC;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEAnB,EAAa,cAAc;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toast.js","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white\",\n description: \"ds:text-muted-foreground\",\n actionButton: \"ds:bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAMA,IAAgB;AAAA,EACpB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WACE;AACJ,GAEMC,IAAe;AAAA,EACnB,SAAS,gBAAAC,EAACC,GAAA,EAAY,WAAU,4BAAA,CAA4B;AAAA,EAC5D,OAAO,gBAAAD,EAACE,GAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,EACtD,SAAS,gBAAAF,EAACG,GAAA,EAAc,WAAU,4BAAA,CAA4B;AAAA,EAC9D,MAAM,gBAAAH,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EAClD,SAAS;AAAA,EACT,SAAS,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EACrD,WAAW,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AACzD,GAIMC,IAAqB,CAACC,GAAkBC,MAC5C,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAX,EAAcQ,CAAO;AAAA,IAAA;AAAA,IAGtB,UAAA;AAAA,MAAAP,EAAaO,CAAO;AAAA,MACrB,gBAAAN,EAAC,UAAM,UAAAO,EAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AACjB,GAGIG,KAAQ,OAAO;AAAA,EACnB,IAAIC,MAAyC;AAC3C,UAAM,CAACJ,CAAO,IAAII,GACZC,IACJ,OAAOL,KAAY,aAAaA,EAAA,IAAaA,KAAW;AAE1D,WAAOM,EAAY,OAAO,MAAMR,EAAmB,WAAWO,CAAO,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,IACE,SAAS,CACPL,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,OAAO,CACLP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,SAASE,CAAO,GAAGO,CAAI;AAAA,IAExE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,MAAM,CACJP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,QAAQE,CAAO,GAAGO,CAAI;AAAA,IAEvE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,WAAW,CACTP,GACAO,MAEAD,EAAY,OAAO,MAAMR,EAAmB,aAAaE,CAAO,GAAGO,CAAI;AAAA,EAAA;AAE7E;AAEA,SAASC,GAAQ;AAAA,EACf,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,EACd,QAAAC,IAAS;AAAA,EACT,eAAAC,IAAgB;AAAA,EAChB,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,GAAuB;AACrB,SACE,gBAAAtB;AAAA,IAACuB;AAAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,UAAAN;AAAA,MACA,YAAAC;AAAA,MACA,aAAAC;AAAA,MACA,QAAAC;AAAA,MACA,eAAAC;AAAA,MACA,cAAc;AAAA,QACZ,UAAAC;AAAA,QACA,YAAY;AAAA,UACV,OACE;AAAA,UACF,aAAa;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAAA,EAAA;AAGN;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Toggle.js","sources":["../../../../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import React from \"react\";\nimport { Toggle as SToggle } from \"@dsui/ui/components/toggle\";\n\nexport type ToggleProps = Omit<\n React.ComponentPropsWithoutRef<typeof SToggle>,\n \"variant\" | \"size\" | \"color\"\n> & {\n variant?: \"default\" | \"outline\";\n size?: \"sm\" | \"default\" | \"lg\";\n color?:\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\n};\n\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (props, ref) => {\n const { variant = \"default\", size = \"default\", color, ...rest } = props;\n\n return (\n <SToggle\n ref={ref}\n {...rest}\n variant={variant}\n size={size}\n color={color}\n />\n );\n }\n);\n\nToggle.displayName = \"Toggle\";\nexport default Toggle;\n"],"names":["Toggle","React","props","ref","variant","size","color","rest","jsx","SToggle"],"mappings":";;;AAoBA,MAAMA,IAASC,EAAM;AAAA,EACnB,CAACC,GAAOC,MAAQ;AACd,UAAM,EAAE,SAAAC,IAAU,WAAW,MAAAC,IAAO,WAAW,OAAAC,GAAO,GAAGC,MAASL;AAElE,WACE,gBAAAM;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,KAAAN;AAAA,QACC,GAAGI;AAAA,QACJ,SAAAH;AAAA,QACA,MAAAC;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAN,EAAO,cAAc;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport {\n Tooltip as DsTooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n type TooltipContentProps,\n} from \"@dsui/ui/components/tooltip\";\nimport { cn } from \"@dsui/ui/index\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport type { BasicAnimation, BasicColor } from \"@/types/variables\";\nimport { useMemo, useCallback } from \"react\";\nimport { animationClass } from \"@/utils/animations\";\n\ntype Color = BasicColor | \"dark\" | \"light\" | \"inverted\";\n\nexport type TooltipProps = TooltipContentProps & {\n content: React.ReactNode;\n children: React.ReactNode;\n sideOffset?: number;\n delayDuration?: number;\n position?: \"top\" | \"right\" | \"bottom\" | \"left\";\n className?: string;\n childClassName?: string;\n noArrow?: boolean;\n animation?: BasicAnimation;\n color?: Color;\n};\n\nexport const Tooltip = React.memo(function Tooltip({\n content,\n children,\n sideOffset = 4,\n delayDuration = 0,\n className,\n childClassName,\n position = \"top\",\n noArrow = false,\n animation,\n ...props\n}: TooltipProps) {\n const springConfig = { stiffness: 100, damping: 5 };\n\n const tooltipAnimation = useMemo<{ className?: string } | null>(() => {\n return animationClass(animation, className);\n }, [animation, className]);\n\n const tooltipColor = useMemo<string>(() => {\n switch (props.color) {\n case \"primary\":\n return \"ds:bg-primary ds:text-primary-foreground ds:[&>span>svg]:bg-primary ds:[&>span>svg]:fill-primary\";\n case \"secondary\":\n return \"ds:bg-secondary ds:text-secondary-foreground ds:[&>span>svg]:bg-secondary ds:[&>span>svg]:fill-secondary\";\n case \"dark\":\n return \"\";\n case \"light\":\n return \"ds:bg-neutral-200 ds:text-neutral-950 ds:[&_svg]:bg-neutral-200 ds:[&_svg]:fill-neutral-200\";\n case \"inverted\":\n return \"ds:dark:bg-white ds:dark:text-black ds:dark:[&_svg]:bg-white ds:dark:[&_svg]:fill-white\";\n case \"success\":\n return \"ds:bg-success ds:text-success-foreground ds:[&>span>svg]:bg-success ds:[&>span>svg]:fill-success\";\n case \"warning\":\n return \"ds:bg-warning ds:text-warning-foreground ds:[&>span>svg]:bg-warning ds:[&>span>svg]:fill-warning\";\n case \"error\":\n return \"ds:bg-error ds:text-error-foreground ds:[&>span>svg]:bg-error ds:[&>span>svg]:fill-error\";\n case \"glass\":\n return \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>span>svg]:bg-white/15 ds:[&>span>svg]:fill-white/15\";\n default:\n return \"ds:bg-foreground ds:text-background ds:animate-in ds:fade-in-0 ds:zoom-in-95 ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0 ds:data-[state=closed]:zoom-out-95 ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2 ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2 ds:z-50 ds:w-fit ds:origin-(--radix-tooltip-content-transform-origin) ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:text-balance\";\n }\n }, [props?.color]);\n\n // on mouse move\n const x = useMotionValue(0);\n // rotate the tooltip\n const rotate = useSpring(\n useTransform(x, [-100, 100], [-45, 45]),\n springConfig\n );\n // translate the tooltip\n const translateX = useSpring(\n useTransform(x, [-100, 100], [-50, 50]),\n springConfig\n );\n\n const handleMouseMove = useCallback(\n (event: React.MouseEvent) => {\n const halfWidth = (event.target as HTMLElement).offsetWidth / 2;\n x.set(event.nativeEvent.offsetX - halfWidth);\n },\n [x]\n );\n\n const ChildComp = React.memo(() => {\n if (!children) return <></>;\n\n return (\n <span\n onMouseMove={handleMouseMove}\n className={cn(\"ds:inline-block\", childClassName)}\n >\n {children}\n </span>\n );\n });\n\n if (animation === \"spec\") {\n return (\n <motion.div\n className={cn(\"ds:relative ds:-me-2.5 ds:inline-block\", className)}\n whileHover=\"hover\"\n initial=\"initial\"\n >\n <motion.div\n variants={{\n initial: { opacity: 0, y: 20, scale: 0 },\n hover: {\n opacity: 1,\n y: -5,\n scale: 1,\n transition: {\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n },\n },\n }}\n style={{\n translateX: translateX,\n rotate: rotate,\n whiteSpace: \"nowrap\",\n }}\n className={cn(\n \"ds:absolute ds:-top-2 ds:left-1/2 ds:z-50 ds:flex ds:-translate-x-1/2 ds:-translate-y-full ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-4 ds:py-2 ds:text-xs ds:shadow-xl\",\n tooltipColor\n )}\n >\n <div className=\"ds:relative ds:z-1\">{content}</div>\n </motion.div>\n\n <ChildComp />\n </motion.div>\n );\n }\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <DsTooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n {...props}\n side={position}\n sideOffset={sideOffset}\n className={cn(tooltipAnimation?.className, tooltipColor, {\n \"ds:[&>span>svg]:invisible\": noArrow,\n })}\n >\n {content}\n </TooltipContent>\n </DsTooltip>\n </TooltipProvider>\n );\n});\n"],"names":["Tooltip","React","content","children","sideOffset","delayDuration","className","childClassName","position","noArrow","animation","props","springConfig","tooltipAnimation","useMemo","animationClass","tooltipColor","x","useMotionValue","rotate","useSpring","useTransform","translateX","handleMouseMove","useCallback","event","halfWidth","ChildComp","jsx","cn","Fragment","jsxs","motion","TooltipProvider","DsTooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tour.js","sources":["../../../../src/components/Tour/Tour.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport {\n autoUpdate,\n flip,\n hide,\n limitShift,\n type Middleware,\n offset,\n arrow as onArrow,\n type Placement,\n shift,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport { ChevronLeft, ChevronRight, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Button } from \"../Button\";\n\nconst ROOT_NAME = \"Tour\";\nconst PORTAL_NAME = \"TourPortal\";\nconst STEP_NAME = \"TourStep\";\nconst ARROW_NAME = \"TourArrow\";\nconst HEADER_NAME = \"TourHeader\";\nconst TITLE_NAME = \"TourTitle\";\nconst DESCRIPTION_NAME = \"TourDescription\";\nconst CLOSE_NAME = \"TourClose\";\nconst PREV_NAME = \"TourPrev\";\nconst NEXT_NAME = \"TourNext\";\nconst SKIP_NAME = \"TourSkip\";\nconst FOOTER_NAME = \"TourFooter\";\n\nconst POINTER_DOWN_OUTSIDE = \"tour.pointerDownOutside\";\nconst INTERACT_OUTSIDE = \"tour.interactOutside\";\nconst OPEN_AUTO_FOCUS = \"tour.openAutoFocus\";\nconst CLOSE_AUTO_FOCUS = \"tour.closeAutoFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\nconst SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"] as const;\nconst ALIGN_OPTIONS = [\"start\", \"center\", \"end\"] as const;\n\nconst DEFAULT_ALIGN_OFFSET = 0;\nconst DEFAULT_SIDE_OFFSET = 16;\nconst DEFAULT_SPOTLIGHT_PADDING = 4;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface ScrollOffset {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\ntype Boundary = Element | null;\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\ntype StepElement = React.ComponentRef<typeof TourStep>;\ntype CloseElement = React.ComponentRef<typeof TourClose>;\ntype PrevElement = React.ComponentRef<typeof TourPrev>;\ntype NextElement = React.ComponentRef<typeof TourNext>;\ntype SkipElement = React.ComponentRef<typeof TourSkip>;\ntype FooterElement = React.ComponentRef<typeof TourFooter>;\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\",\n};\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/focus-guards/src/focus-guards.tsx\n */\nlet focusGuardCount = 0;\n\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-tour-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\n\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n document.body.insertAdjacentElement(\n \"afterbegin\",\n edgeGuards[0] ?? createFocusGuard()\n );\n document.body.insertAdjacentElement(\n \"beforeend\",\n edgeGuards[1] ?? createFocusGuard()\n );\n focusGuardCount++;\n\n return () => {\n if (focusGuardCount === 1) {\n const guards = document.querySelectorAll(\"[data-tour-focus-guard]\");\n for (const node of guards) {\n node.remove();\n }\n }\n focusGuardCount--;\n };\n }, []);\n}\n\nfunction useFocusTrap(\n containerRef: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n tourOpen: boolean,\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void,\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void\n) {\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const onOpenAutoFocusRef = useAsRef(onOpenAutoFocus);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n const tourOpenRef = useAsRef(tourOpen);\n\n React.useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const previouslyFocusedElement =\n document.activeElement as HTMLElement | null;\n\n function getTabbableCandidates() {\n if (!container) return [];\n\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(\n container,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode: (node: Element) => {\n const element = node as HTMLElement;\n const isHiddenInput =\n element.tagName === \"INPUT\" &&\n (element as HTMLInputElement).type === \"hidden\";\n if (element.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return element.tabIndex >= 0\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP;\n },\n }\n );\n while (walker.nextNode()) {\n nodes.push(walker.currentNode as HTMLElement);\n }\n return nodes;\n }\n\n function getTabbableEdges() {\n const candidates = getTabbableCandidates();\n const first = candidates[0];\n const last = candidates[candidates.length - 1];\n return [first, last] as const;\n }\n\n function onFocusIn(event: FocusEvent) {\n if (!container) return;\n\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n const elementToFocus =\n lastFocusedElementRef.current ?? getTabbableCandidates()[0];\n elementToFocus?.focus({ preventScroll: true });\n }\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Tab\" || event.altKey || event.ctrlKey || event.metaKey)\n return;\n\n const [first, last] = getTabbableEdges();\n const hasTabbableElements = first && last;\n\n if (!hasTabbableElements) {\n if (document.activeElement === container) event.preventDefault();\n return;\n }\n\n if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus({ preventScroll: true });\n } else if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus({ preventScroll: true });\n }\n }\n\n const openAutoFocusEvent = new CustomEvent(OPEN_AUTO_FOCUS, EVENT_OPTIONS);\n if (onOpenAutoFocusRef.current) {\n container.addEventListener(\n OPEN_AUTO_FOCUS,\n onOpenAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(openAutoFocusEvent);\n\n if (!openAutoFocusEvent.defaultPrevented) {\n const tabbableCandidates = getTabbableCandidates();\n if (tabbableCandidates.length > 0) {\n tabbableCandidates[0]?.focus({ preventScroll: true });\n } else {\n container.focus({ preventScroll: true });\n }\n }\n\n document.addEventListener(\"focusin\", onFocusIn);\n container.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"focusin\", onFocusIn);\n container.removeEventListener(\"keydown\", onKeyDown);\n\n if (!tourOpenRef.current) {\n setTimeout(() => {\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n if (\n previouslyFocusedElement &&\n document.body.contains(previouslyFocusedElement)\n ) {\n previouslyFocusedElement.focus({ preventScroll: true });\n }\n }\n\n if (onCloseAutoFocusRef.current) {\n container.removeEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener\n );\n }\n }, 0);\n }\n };\n }, [\n containerRef,\n enabled,\n onOpenAutoFocusRef,\n onCloseAutoFocusRef,\n tourOpenRef,\n ]);\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\nfunction getDataState(open: boolean): string {\n return open ? \"open\" : \"closed\";\n}\n\ninterface StepData {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n align?: Align;\n alignOffset?: number;\n side?: Side;\n sideOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n required?: boolean;\n}\n\ninterface StoreState {\n open: boolean;\n value: number;\n steps: StepData[];\n maskPath: string;\n spotlightRect: { x: number; y: number; width: number; height: number } | null;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(\n key: K,\n value: StoreState[K],\n opts?: unknown\n ) => void;\n notify: () => void;\n addStep: (stepData: StepData) => { id: string; index: number };\n removeStep: (id: string) => void;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\nfunction getTargetElement(\n target: string | React.RefObject<HTMLElement> | HTMLElement\n): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n if (target && \"current\" in target) {\n return target.current;\n }\n if (target instanceof HTMLElement) {\n return target;\n }\n return null;\n}\n\nfunction getDefaultScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\") return \"smooth\";\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\";\n}\n\nfunction onScrollToElement(\n element: HTMLElement,\n scrollBehavior: ScrollBehavior = getDefaultScrollBehavior(),\n scrollOffset?: ScrollOffset\n) {\n const offset: Required<ScrollOffset> = {\n top: 100,\n bottom: 100,\n left: 0,\n right: 0,\n ...scrollOffset,\n };\n const rect = element.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n const isInViewport =\n rect.top >= offset.top &&\n rect.bottom <= viewportHeight - offset.bottom &&\n rect.left >= offset.left &&\n rect.right <= viewportWidth - offset.right;\n\n if (!isInViewport) {\n const elementTop = rect.top + window.scrollY;\n const scrollTop = elementTop - offset.top;\n\n window.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: scrollBehavior,\n });\n }\n}\n\nfunction getSideAndAlignFromPlacement(placement: Placement): [Side, Align] {\n const [side, align = \"center\"] = placement.split(\"-\") as [Side, Align?];\n return [side, align];\n}\n\nfunction getPlacement(side: Side, align: Align): Placement {\n if (align === \"center\") {\n return side as Placement;\n }\n return `${side}-${align}` as Placement;\n}\n\nfunction updateMask(\n store: Store,\n targetElement: HTMLElement,\n padding: number = DEFAULT_SPOTLIGHT_PADDING\n) {\n const clientRect = targetElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n const x = Math.max(0, clientRect.left - padding);\n const y = Math.max(0, clientRect.top - padding);\n const width = Math.min(viewportWidth - x, clientRect.width + padding * 2);\n const height = Math.min(viewportHeight - y, clientRect.height + padding * 2);\n\n const path = `polygon(0% 0%, 0% 100%, ${x}px 100%, ${x}px ${y}px, ${x + width}px ${y}px, ${x + width}px ${y + height}px, ${x}px ${y + height}px, ${x}px 100%, 100% 100%, 100% 0%)`;\n store.setState(\"maskPath\", path);\n store.setState(\"spotlightRect\", { x, y, width, height });\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface TourContextValue {\n dir: Direction;\n alignOffset: number;\n sideOffset: number;\n spotlightPadding: number;\n dismissible: boolean;\n modal: boolean;\n stepFooter?: React.ReactElement;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n}\n\nconst TourContext = React.createContext<TourContextValue | null>(null);\n\nfunction useTourContext(consumerName: string) {\n const context = React.useContext(TourContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepContextValue {\n arrowX?: number;\n arrowY?: number;\n placedAlign: Align;\n placedSide: Side;\n shouldHideArrow: boolean;\n onArrowChange: (arrow: HTMLSpanElement | null) => void;\n onFooterChange: (footer: FooterElement | null) => void;\n}\n\nconst StepContext = React.createContext<StepContextValue | null>(null);\n\nfunction useStepContext(consumerName: string) {\n const context = React.useContext(StepContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${STEP_NAME}\\``);\n }\n return context;\n}\n\nconst DefaultFooterContext = React.createContext(false);\n\ninterface PortalContextValue {\n portal: HTMLElement | null;\n onPortalChange: (node: HTMLElement | null) => void;\n}\n\nconst PortalContext = React.createContext<PortalContextValue | null>(null);\n\nfunction usePortalContext(consumerName: string) {\n const context = React.useContext(PortalContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useScrollLock(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(document.body).overflow;\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.overflow = \"hidden\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n return () => {\n document.body.style.overflow = originalStyle;\n document.body.style.paddingRight = \"\";\n };\n }, [enabled]);\n}\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype InteractOutsideEvent = CustomEvent<{\n originalEvent: PointerEvent | FocusEvent;\n}>;\ntype OpenAutoFocusEvent = CustomEvent<Record<string, never>>;\ntype CloseAutoFocusEvent = CustomEvent<Record<string, never>>;\n\ninterface TourRootProps extends DivProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n value?: number;\n defaultValue?: number;\n onValueChange?: (step: number) => void;\n onComplete?: () => void;\n onSkip?: () => void;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n onInteractOutside?: (event: InteractOutsideEvent) => void;\n onOpenAutoFocus?: (event: OpenAutoFocusEvent) => void;\n onCloseAutoFocus?: (event: CloseAutoFocusEvent) => void;\n dir?: Direction;\n alignOffset?: number;\n sideOffset?: number;\n spotlightPadding?: number;\n autoScroll?: boolean;\n scrollBehavior?: ScrollBehavior;\n scrollOffset?: ScrollOffset;\n dismissible?: boolean;\n modal?: boolean;\n stepFooter?: React.ReactElement;\n}\n\nfunction TourRoot(props: TourRootProps) {\n const {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll = true,\n scrollBehavior = getDefaultScrollBehavior(),\n scrollOffset,\n ...rootProps\n } = props;\n\n const stateRef = useLazyRef<StoreState>(() => ({\n open: openProp ?? defaultOpen,\n value: valueProp ?? defaultValue,\n steps: [],\n maskPath: \"\",\n spotlightRect: null,\n }));\n const listenersRef = useLazyRef<Set<() => void>>(() => new Set());\n const stepIdsMapRef = useLazyRef<Map<string, number>>(() => new Map());\n const stepIdCounterRef = useLazyRef(() => ({ current: 0 }));\n const propsRef = useAsRef({\n valueProp,\n onOpenChange,\n onValueChange,\n onComplete,\n onSkip,\n autoScroll,\n scrollBehavior,\n scrollOffset,\n });\n\n const store: Store = React.useMemo(\n () => ({\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => {\n return stateRef.current;\n },\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n stateRef.current[key] = value;\n\n if (key === \"open\" && typeof value === \"boolean\") {\n propsRef.current.onOpenChange?.(value);\n\n if (value) {\n if (stateRef.current.steps.length > 0) {\n if (stateRef.current.value >= stateRef.current.steps.length) {\n store.setState(\"value\", 0);\n }\n }\n } else {\n if (\n stateRef.current.value <\n (stateRef.current.steps.length || 0) - 1\n ) {\n propsRef.current.onSkip?.();\n }\n }\n } else if (key === \"value\" && typeof value === \"number\") {\n const prevStep = stateRef.current.steps[stateRef.current.value];\n const nextStep = stateRef.current.steps[value];\n\n prevStep?.onStepLeave?.();\n nextStep?.onStepEnter?.();\n\n if (value >= stateRef.current.steps.length) {\n propsRef.current.onComplete?.();\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n }\n\n store.setState(\"open\", false);\n return;\n }\n\n if (propsRef.current.valueProp !== undefined) {\n propsRef.current.onValueChange?.(value);\n return;\n }\n\n propsRef.current.onValueChange?.(value);\n\n if (nextStep && propsRef.current.autoScroll) {\n const targetElement = getTargetElement(nextStep.target);\n if (targetElement) {\n onScrollToElement(\n targetElement,\n propsRef.current.scrollBehavior,\n propsRef.current.scrollOffset\n );\n }\n }\n }\n\n store.notify();\n },\n notify: () => {\n listenersRef.current.forEach((l) => {\n l();\n });\n },\n addStep: (stepData) => {\n const id = `step-${stepIdCounterRef.current.current++}`;\n const index = stateRef.current.steps.length;\n stepIdsMapRef.current.set(id, index);\n stateRef.current.steps = [...stateRef.current.steps, stepData];\n store.notify();\n return { id, index };\n },\n removeStep: (id) => {\n const index = stepIdsMapRef.current.get(id);\n if (index === undefined) return;\n\n stateRef.current.steps = stateRef.current.steps.filter(\n (_, i) => i !== index\n );\n\n stepIdsMapRef.current.delete(id);\n\n for (const [stepId, stepIndex] of stepIdsMapRef.current.entries()) {\n if (stepIndex > index) {\n stepIdsMapRef.current.set(stepId, stepIndex - 1);\n }\n }\n\n store.notify();\n },\n }),\n [stateRef, listenersRef, stepIdsMapRef, stepIdCounterRef, propsRef]\n );\n\n useIsomorphicLayoutEffect(() => {\n if (openProp !== undefined) {\n store.setState(\"open\", openProp);\n }\n }, [openProp, store]);\n\n useIsomorphicLayoutEffect(() => {\n if (valueProp !== undefined) {\n store.setState(\"value\", valueProp);\n }\n }, [valueProp, store]);\n\n return (\n <StoreContext.Provider value={store}>\n <TourRootImpl {...rootProps} />\n </StoreContext.Provider>\n );\n}\n\ninterface TourRootImplProps\n extends Omit<\n TourRootProps,\n | \"open\"\n | \"defaultOpen\"\n | \"onOpenChange\"\n | \"value\"\n | \"defaultValue\"\n | \"onValueChange\"\n | \"onComplete\"\n | \"onSkip\"\n | \"autoScroll\"\n | \"scrollBehavior\"\n | \"scrollOffset\"\n > {}\n\nfunction TourRootImpl(props: TourRootImplProps) {\n const {\n onEscapeKeyDown,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n dir: dirProp,\n alignOffset = DEFAULT_ALIGN_OFFSET,\n sideOffset = DEFAULT_SIDE_OFFSET,\n spotlightPadding = DEFAULT_SPOTLIGHT_PADDING,\n dismissible = true,\n modal = true,\n stepFooter,\n asChild,\n ...rootImplProps\n } = props;\n\n const store = useStoreContext(\"TourRootImpl\");\n const dir = useDirection(dirProp);\n\n const [portal, setPortal] = React.useState<HTMLElement | null>(null);\n const previouslyFocusedElementRef = React.useRef<HTMLElement | null>(null);\n\n const onEscapeKeyDownRef = useAsRef(onEscapeKeyDown);\n const onCloseAutoFocusRef = useAsRef(onCloseAutoFocus);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (store.getState().open && event.key === \"Escape\") {\n if (onEscapeKeyDownRef.current) {\n onEscapeKeyDownRef.current(event);\n if (event.defaultPrevented) return;\n }\n store.setState(\"open\", false);\n }\n }\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [store, onEscapeKeyDownRef]);\n\n const open = useStore((state) => state.open);\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n\n useIsomorphicLayoutEffect(() => {\n const wasOpen = prevOpenRef.current;\n\n if (open && !wasOpen) {\n previouslyFocusedElementRef.current =\n document.activeElement as HTMLElement | null;\n } else if (!open && wasOpen) {\n setTimeout(() => {\n const container = portal ?? document.body;\n const closeAutoFocusEvent = new CustomEvent(\n CLOSE_AUTO_FOCUS,\n EVENT_OPTIONS\n );\n\n if (onCloseAutoFocusRef.current) {\n container.addEventListener(\n CLOSE_AUTO_FOCUS,\n onCloseAutoFocusRef.current as EventListener,\n { once: true }\n );\n }\n container.dispatchEvent(closeAutoFocusEvent);\n\n if (!closeAutoFocusEvent.defaultPrevented) {\n const elementToFocus = previouslyFocusedElementRef.current;\n if (elementToFocus && document.body.contains(elementToFocus)) {\n elementToFocus.focus({ preventScroll: true });\n }\n }\n\n previouslyFocusedElementRef.current = null;\n }, 0);\n }\n\n prevOpenRef.current = open;\n }, [open, portal, onCloseAutoFocusRef]);\n\n const contextValue = React.useMemo<TourContextValue>(\n () => ({\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n }),\n [\n dir,\n alignOffset,\n sideOffset,\n spotlightPadding,\n dismissible,\n modal,\n stepFooter,\n onPointerDownOutside,\n onInteractOutside,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ]\n );\n\n const portalContextValue = React.useMemo<PortalContextValue>(\n () => ({\n portal,\n onPortalChange: setPortal,\n }),\n [portal]\n );\n\n useScrollLock(open && modal);\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <TourContext.Provider value={contextValue}>\n <PortalContext.Provider value={portalContextValue}>\n <RootPrimitive data-slot=\"tour\" dir={dir} {...rootImplProps} />\n </PortalContext.Provider>\n </TourContext.Provider>\n );\n}\n\ninterface TourStepProps extends DivProps {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\nfunction TourStep(props: TourStepProps) {\n const {\n target,\n side = \"bottom\",\n sideOffset,\n align = \"center\",\n alignOffset,\n collisionBoundary = [],\n collisionPadding = 0,\n arrowPadding = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n avoidCollisions = true,\n required = false,\n forceMount = false,\n onStepEnter,\n onStepLeave,\n onPointerDownCapture: onPointerDownCaptureProp,\n onFocusCapture: onFocusCaptureProp,\n onBlurCapture: onBlurCaptureProp,\n children,\n className,\n style,\n asChild,\n ...stepProps\n } = props;\n\n const store = useStoreContext(STEP_NAME);\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const [footer, setFooter] = React.useState<FooterElement | null>(null);\n\n const stepRef = React.useRef<StepElement | null>(null);\n const stepIdRef = React.useRef<string>(\"\");\n const stepOrderRef = React.useRef<number>(-1);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n const open = useStore((state) => state.open);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n const context = useTourContext(STEP_NAME);\n\n const resolvedSideOffset = sideOffset ?? context.sideOffset;\n const resolvedAlignOffset = alignOffset ?? context.alignOffset;\n\n useIsomorphicLayoutEffect(() => {\n const { id, index } = store.addStep({\n target,\n align,\n alignOffset: resolvedAlignOffset,\n side,\n sideOffset: resolvedSideOffset,\n collisionBoundary,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n onStepEnter,\n onStepLeave,\n required,\n });\n stepIdRef.current = id;\n stepOrderRef.current = index;\n\n return () => {\n store.removeStep(stepIdRef.current);\n };\n }, [\n target,\n side,\n resolvedSideOffset,\n align,\n resolvedAlignOffset,\n collisionPadding,\n arrowPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n required,\n onStepEnter,\n onStepLeave,\n store,\n ]);\n\n const stepData = steps[value];\n const targetElement = stepData ? getTargetElement(stepData.target) : null;\n\n const isCurrentStep = stepOrderRef.current === value;\n\n const middleware = React.useMemo(() => {\n if (!stepData) return [];\n\n const mainAxisOffset = stepData.sideOffset ?? resolvedSideOffset;\n const crossAxisOffset = stepData.alignOffset ?? resolvedAlignOffset;\n\n const padding =\n typeof stepData.collisionPadding === \"number\"\n ? stepData.collisionPadding\n : {\n top: stepData.collisionPadding?.top ?? 0,\n right: stepData.collisionPadding?.right ?? 0,\n bottom: stepData.collisionPadding?.bottom ?? 0,\n left: stepData.collisionPadding?.left ?? 0,\n };\n\n const boundary = Array.isArray(stepData.collisionBoundary)\n ? stepData.collisionBoundary\n : stepData.collisionBoundary\n ? [stepData.collisionBoundary]\n : [];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding,\n boundary: boundary.filter((b): b is Element => b !== null),\n altBoundary: hasExplicitBoundaries,\n };\n\n return [\n offset({\n mainAxis: mainAxisOffset,\n alignmentAxis: crossAxisOffset,\n }),\n stepData.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: stepData.sticky === \"partial\" ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n stepData.avoidCollisions && flip({ ...detectOverflowOptions }),\n arrow && onArrow({ element: arrow, padding: stepData.arrowPadding }),\n stepData.hideWhenDetached &&\n hide({\n strategy: \"referenceHidden\",\n ...detectOverflowOptions,\n }),\n ].filter(Boolean) as Middleware[];\n }, [stepData, resolvedSideOffset, resolvedAlignOffset, arrow]);\n\n const placement = getPlacement(\n stepData?.side ?? side,\n stepData?.align ?? align\n );\n\n const {\n refs,\n floatingStyles,\n placement: finalPlacement,\n middlewareData,\n } = useFloating({\n placement,\n middleware,\n strategy: \"fixed\",\n whileElementsMounted: autoUpdate,\n elements: {\n reference: targetElement,\n },\n });\n\n const composedRef = useComposedRefs(refs.setFloating, stepRef);\n\n const [placedSide, placedAlign] =\n getSideAndAlignFromPlacement(finalPlacement);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isHidden = hideWhenDetached && middlewareData.hide?.referenceHidden;\n\n const stepContextValue = React.useMemo<StepContextValue>(\n () => ({\n arrowX,\n arrowY,\n placedAlign,\n placedSide,\n shouldHideArrow: cannotCenterArrow,\n onArrowChange: setArrow,\n onFooterChange: setFooter,\n }),\n [arrowX, arrowY, placedSide, placedAlign, cannotCenterArrow]\n );\n\n React.useEffect(() => {\n if (open && targetElement && isCurrentStep) {\n updateMask(store, targetElement, context.spotlightPadding);\n\n let rafId: number | null = null;\n\n function onResize() {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n }\n\n function onScroll() {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n if (targetElement) {\n updateMask(store, targetElement, context.spotlightPadding);\n }\n rafId = null;\n });\n }\n\n window.addEventListener(\"resize\", onResize);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"resize\", onResize);\n window.removeEventListener(\"scroll\", onScroll);\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n };\n }\n }, [open, targetElement, isCurrentStep, store, context.spotlightPadding]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onPointerDown(event: PointerEvent) {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const pointerDownOutsideEvent = new CustomEvent(POINTER_DOWN_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onPointerDownOutside?.(pointerDownOutsideEvent);\n\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (\n !pointerDownOutsideEvent.defaultPrevented &&\n !interactOutsideEvent.defaultPrevented &&\n context.dismissible\n ) {\n store.setState(\"open\", false);\n }\n }\n\n isPointerInsideReactTreeRef.current = false;\n }\n\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", onPointerDown);\n }, 0);\n\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", onPointerDown);\n };\n }, [open, isCurrentStep, store, context]);\n\n React.useEffect(() => {\n if (!open || !isCurrentStep) return;\n\n const stepElement = stepRef.current;\n if (!stepElement) return;\n\n const ownerDocument = stepElement.ownerDocument;\n\n function onFocusIn(event: FocusEvent) {\n const target = event.target as HTMLElement;\n\n const isFocusInStep = stepElement?.contains(target);\n const isFocusInTarget = targetElement?.contains(target);\n\n if (\n event.target &&\n !isFocusInsideReactTreeRef.current &&\n !isFocusInStep &&\n !isFocusInTarget\n ) {\n const interactOutsideEvent = new CustomEvent(INTERACT_OUTSIDE, {\n ...EVENT_OPTIONS,\n detail: { originalEvent: event },\n });\n\n context.onInteractOutside?.(interactOutsideEvent);\n\n if (!interactOutsideEvent.defaultPrevented && context.dismissible) {\n store.setState(\"open\", false);\n }\n }\n }\n\n ownerDocument.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n ownerDocument.removeEventListener(\"focusin\", onFocusIn);\n };\n }, [open, isCurrentStep, store, context, targetElement]);\n\n const onPointerDownCapture = React.useCallback(\n (event: React.PointerEvent<StepElement>) => {\n onPointerDownCaptureProp?.(event);\n isPointerInsideReactTreeRef.current = true;\n },\n [onPointerDownCaptureProp]\n );\n\n const onFocusCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onFocusCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = true;\n },\n [onFocusCaptureProp]\n );\n\n const onBlurCapture = React.useCallback(\n (event: React.FocusEvent<StepElement>) => {\n onBlurCaptureProp?.(event);\n isFocusInsideReactTreeRef.current = false;\n },\n [onBlurCaptureProp]\n );\n\n React.useEffect(() => {\n if (!open || !isCurrentStep || !targetElement) return;\n\n function onTargetPointerDownCapture() {\n isPointerInsideReactTreeRef.current = true;\n }\n\n function onTargetFocusCapture() {\n isFocusInsideReactTreeRef.current = true;\n }\n\n function onTargetBlurCapture() {\n isFocusInsideReactTreeRef.current = false;\n }\n\n targetElement.addEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.addEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.addEventListener(\"blur\", onTargetBlurCapture, true);\n\n return () => {\n targetElement.removeEventListener(\n \"pointerdown\",\n onTargetPointerDownCapture,\n true\n );\n targetElement.removeEventListener(\"focus\", onTargetFocusCapture, true);\n targetElement.removeEventListener(\"blur\", onTargetBlurCapture, true);\n };\n }, [open, isCurrentStep, targetElement]);\n\n useFocusGuards();\n useFocusTrap(\n stepRef,\n open && isCurrentStep,\n open,\n context.onOpenAutoFocus,\n context.onCloseAutoFocus\n );\n\n if (!open || !stepData || (!targetElement && !forceMount) || !isCurrentStep) {\n return null;\n }\n\n const StepPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepContext.Provider value={stepContextValue}>\n <StepPrimitive\n ref={composedRef}\n data-slot=\"tour-step\"\n data-side={placedSide}\n data-align={placedAlign}\n dir={context.dir}\n tabIndex={-1}\n {...stepProps}\n onPointerDownCapture={onPointerDownCapture}\n onFocusCapture={onFocusCapture}\n onBlurCapture={onBlurCapture}\n className={cn(\n \"ds:fixed ds:z-50 ds:flex ds:w-80 ds:flex-col ds:gap-4 ds:rounded-lg ds:border ds:bg-popover ds:p-4 ds:text-popover-foreground ds:shadow-md ds:outline-none\",\n className\n )}\n style={{\n ...style,\n ...floatingStyles,\n visibility: isHidden ? \"hidden\" : undefined,\n pointerEvents: isHidden ? \"none\" : undefined,\n } as React.CSSProperties}\n >\n {children}\n {!footer && (\n <DefaultFooterContext.Provider value={true}>\n {context.stepFooter}\n </DefaultFooterContext.Provider>\n )}\n </StepPrimitive>\n </StepContext.Provider>\n );\n}\n\ninterface TourSpotlightProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlight(props: TourSpotlightProps) {\n const {\n asChild,\n className,\n style,\n forceMount = false,\n ...backdropProps\n } = props;\n\n const open = useStore((state) => state.open);\n const maskPath = useStore((state) => state.maskPath);\n\n if (!open && !forceMount) return null;\n\n const SpotlightPrimitive = asChild ? Slot : \"div\";\n\n return (\n <SpotlightPrimitive\n data-slot=\"tour-spotlight\"\n data-state={getDataState(open)}\n {...backdropProps}\n className={cn(\n \"ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0 ds:fixed ds:inset-0 ds:z-40 ds:bg-black/80 ds:data-[state=closed]:animate-out ds:data-[state=open]:animate-in\",\n className\n )}\n style={{\n clipPath: maskPath,\n ...style,\n }}\n />\n );\n}\n\ninterface TourSpotlightRingProps extends DivProps {\n forceMount?: boolean;\n}\n\nfunction TourSpotlightRing(props: TourSpotlightRingProps) {\n const { asChild, className, style, forceMount = false, ...ringProps } = props;\n\n const open = useStore((state) => state.open);\n const spotlightRect = useStore((state) => state.spotlightRect);\n\n if (!open && !forceMount) return null;\n if (!spotlightRect) return null;\n\n const RingPrimitive = asChild ? Slot : \"div\";\n\n return (\n <RingPrimitive\n data-slot=\"tour-spotlight-ring\"\n data-state={getDataState(open)}\n {...ringProps}\n className={cn(\n \"ds:pointer-events-none ds:fixed ds:z-40 ds:border-ring ds:ring-[3px] ds:ring-ring/50\",\n className\n )}\n style={{\n left: spotlightRect.x,\n top: spotlightRect.y,\n width: spotlightRect.width,\n height: spotlightRect.height,\n ...style,\n }}\n />\n );\n}\n\ninterface TourPortalProps {\n children?: React.ReactNode;\n container?: HTMLElement | null;\n}\n\nfunction TourPortal(props: TourPortalProps) {\n const { children, container } = props;\n\n const portalContext = usePortalContext(PORTAL_NAME);\n\n const [mounted, setMounted] = React.useState(false);\n\n useIsomorphicLayoutEffect(() => {\n setMounted(true);\n\n const node = container ?? document.body;\n\n portalContext?.onPortalChange(node);\n return () => {\n portalContext?.onPortalChange(null);\n };\n }, [container, portalContext]);\n\n if (!mounted) return null;\n\n const portalContainer = container ?? portalContext?.portal ?? document.body;\n\n return ReactDOM.createPortal(children, portalContainer);\n}\n\ninterface TourArrowProps extends React.ComponentProps<\"svg\"> {\n width?: number;\n height?: number;\n asChild?: boolean;\n}\n\nfunction TourArrow(props: TourArrowProps) {\n const {\n width = 10,\n height = 5,\n className,\n children,\n asChild,\n ...arrowProps\n } = props;\n\n const stepContext = useStepContext(ARROW_NAME);\n const baseSide = OPPOSITE_SIDE[stepContext.placedSide];\n\n return (\n <span\n ref={stepContext.onArrowChange}\n data-slot=\"tour-arrow\"\n style={{\n position: \"absolute\",\n left:\n stepContext.arrowX != null ? `${stepContext.arrowX}px` : undefined,\n top: stepContext.arrowY != null ? `${stepContext.arrowY}px` : undefined,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\",\n }[stepContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: \"rotate(180deg)\",\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\",\n }[stepContext.placedSide],\n visibility: stepContext.shouldHideArrow ? \"hidden\" : undefined,\n }}\n >\n <svg\n viewBox=\"0 0 30 10\"\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n {...arrowProps}\n className={cn(\"ds:block ds:fill-popover ds:stroke-border\", className)}\n >\n {asChild ? children : <polygon points=\"0,0 30,0 15,10\" />}\n </svg>\n </span>\n );\n}\n\nfunction TourHeader(props: DivProps) {\n const { asChild, className, ...headerProps } = props;\n\n const context = useTourContext(HEADER_NAME);\n\n const HeaderPrimitive = asChild ? Slot : \"div\";\n\n return (\n <HeaderPrimitive\n data-slot=\"tour-header\"\n dir={context.dir}\n {...headerProps}\n className={cn(\n \"ds:flex ds:flex-col ds:gap-1.5 ds:text-center ds:sm:text-left\",\n className\n )}\n />\n );\n}\n\nfunction TourTitle(props: DivProps) {\n const { asChild, className, ...titleProps } = props;\n\n const context = useTourContext(TITLE_NAME);\n\n const TitlePrimitive = asChild ? Slot : \"div\";\n\n return (\n <TitlePrimitive\n data-slot=\"tour-title\"\n dir={context.dir}\n {...titleProps}\n className={cn(\n \"ds:font-semibold ds:text-lg ds:leading-none ds:tracking-tight\",\n className\n )}\n />\n );\n}\n\nfunction TourDescription(props: DivProps) {\n const { asChild, className, ...descriptionProps } = props;\n\n const context = useTourContext(DESCRIPTION_NAME);\n\n const DescriptionPrimitive = asChild ? Slot : \"div\";\n\n return (\n <DescriptionPrimitive\n data-slot=\"tour-description\"\n dir={context.dir}\n {...descriptionProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n />\n );\n}\n\ninterface TourCloseProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction TourClose(props: TourCloseProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n ...closeButtonProps\n } = props;\n\n const store = useStoreContext(CLOSE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<CloseElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n const ClosePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClosePrimitive\n type=\"button\"\n aria-label=\"Close tour\"\n className={cn(\n \"ds:absolute ds:top-4 ds:right-4 ds:rounded-xs ds:opacity-70 ds:ring-offset-background ds:transition-opacity ds:hover:opacity-100 ds:focus:outline-hidden ds:focus:ring-2 ds:focus:ring-ring ds:focus:ring-offset-2 ds:disabled:pointer-events-none ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n className\n )}\n onClick={onClick}\n {...closeButtonProps}\n >\n <X className=\"ds:size-4\" />\n </ClosePrimitive>\n );\n}\n\nfunction TourPrev(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...prevButtonProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<PrevElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n if (value > 0) {\n store.setState(\"value\", value - 1);\n }\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Previous step\"\n data-slot=\"tour-prev\"\n variant=\"outline\"\n {...prevButtonProps}\n onClick={onClick}\n disabled={value === 0}\n >\n {children ?? (\n <>\n <ChevronLeft />\n Previous\n </>\n )}\n </Button>\n );\n}\n\nfunction TourNext(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...nextButtonProps } = props;\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const isLastStep = value === steps.length - 1;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<NextElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"value\", value + 1);\n },\n [value, store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Next step\"\n data-slot=\"tour-next\"\n {...nextButtonProps}\n onClick={onClick}\n >\n {children ?? (\n <>\n {isLastStep ? \"Finish\" : \"Next\"}\n {!isLastStep && <ChevronRight />}\n </>\n )}\n </Button>\n );\n}\n\nfunction TourSkip(props: React.ComponentProps<typeof Button>) {\n const { children, onClick: onClickProp, ...skipButtonProps } = props;\n\n const store = useStoreContext(SKIP_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<SkipElement>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n\n store.setState(\"open\", false);\n },\n [store, onClickProp]\n );\n\n return (\n <Button\n type=\"button\"\n aria-label=\"Skip tour\"\n data-slot=\"tour-skip\"\n variant=\"outline\"\n {...skipButtonProps}\n onClick={onClick}\n >\n {children ?? \"Skip\"}\n </Button>\n );\n}\n\ninterface TourStepCounterProps extends DivProps {\n format?: (current: number, total: number) => string;\n}\n\nfunction TourStepCounter(props: TourStepCounterProps) {\n const {\n format = (current, total) => `${current} / ${total}`,\n asChild,\n className,\n children,\n ...stepCounterProps\n } = props;\n\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const StepCounterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepCounterPrimitive\n data-slot=\"tour-step-counter\"\n {...stepCounterProps}\n className={cn(\"ds:text-muted-foreground ds:text-sm\", className)}\n >\n {children ?? format(value + 1, steps.length)}\n </StepCounterPrimitive>\n );\n}\n\nfunction TourFooter(props: DivProps) {\n const { asChild, className, ref, ...footerProps } = props;\n\n const stepContext = useStepContext(FOOTER_NAME);\n const hasDefaultFooter = React.useContext(DefaultFooterContext);\n const context = useTourContext(FOOTER_NAME);\n\n const composedRef = useComposedRefs(\n ref,\n hasDefaultFooter ? undefined : stepContext.onFooterChange\n );\n\n const FooterPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FooterPrimitive\n data-slot=\"tour-footer\"\n dir={context.dir}\n {...footerProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:flex-col-reverse ds:gap-2 ds:sm:flex-row ds:sm:justify-end\",\n className\n )}\n />\n );\n}\n\nexport {\n TourRoot as Root,\n TourPortal as Portal,\n TourSpotlight as Spotlight,\n TourSpotlightRing as SpotlightRing,\n TourStep as Step,\n TourArrow as Arrow,\n TourHeader as Header,\n TourTitle as Title,\n TourDescription as Description,\n TourClose as Close,\n TourPrev as Prev,\n TourNext as Next,\n TourSkip as Skip,\n TourStepCounter as StepCounter,\n TourFooter as Footer,\n //\n TourRoot as Tour,\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourRootProps as TourProps,\n};\n"],"names":["ROOT_NAME","PORTAL_NAME","STEP_NAME","ARROW_NAME","HEADER_NAME","TITLE_NAME","DESCRIPTION_NAME","CLOSE_NAME","PREV_NAME","NEXT_NAME","SKIP_NAME","FOOTER_NAME","POINTER_DOWN_OUTSIDE","INTERACT_OUTSIDE","OPEN_AUTO_FOCUS","CLOSE_AUTO_FOCUS","EVENT_OPTIONS","DEFAULT_ALIGN_OFFSET","DEFAULT_SIDE_OFFSET","DEFAULT_SPOTLIGHT_PADDING","OPPOSITE_SIDE","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","focusGuardCount","createFocusGuard","element","useFocusGuards","edgeGuards","guards","node","useFocusTrap","containerRef","enabled","tourOpen","onOpenAutoFocus","onCloseAutoFocus","lastFocusedElementRef","onOpenAutoFocusRef","onCloseAutoFocusRef","tourOpenRef","container","previouslyFocusedElement","getTabbableCandidates","nodes","walker","isHiddenInput","getTabbableEdges","candidates","first","last","onFocusIn","event","target","onKeyDown","openAutoFocusEvent","tabbableCandidates","closeAutoFocusEvent","DirectionContext","useDirection","dirProp","contextDir","getDataState","open","useStore","selector","store","useStoreContext","getSnapshot","getTargetElement","getDefaultScrollBehavior","onScrollToElement","scrollBehavior","scrollOffset","offset","rect","viewportHeight","viewportWidth","scrollTop","getSideAndAlignFromPlacement","placement","side","align","getPlacement","updateMask","targetElement","padding","clientRect","x","y","width","height","path","StoreContext","consumerName","context","TourContext","useTourContext","StepContext","useStepContext","DefaultFooterContext","PortalContext","usePortalContext","useScrollLock","originalStyle","scrollbarWidth","TourRoot","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","onComplete","onSkip","autoScroll","rootProps","stateRef","listenersRef","stepIdsMapRef","stepIdCounterRef","propsRef","cb","key","value","prevStep","nextStep","l","stepData","id","index","_","i","stepId","stepIndex","jsx","TourRootImpl","onEscapeKeyDown","onPointerDownOutside","onInteractOutside","alignOffset","sideOffset","spotlightPadding","dismissible","modal","stepFooter","asChild","rootImplProps","dir","portal","setPortal","previouslyFocusedElementRef","onEscapeKeyDownRef","state","prevOpenRef","wasOpen","elementToFocus","contextValue","portalContextValue","RootPrimitive","Slot","TourStep","collisionBoundary","collisionPadding","arrowPadding","sticky","hideWhenDetached","avoidCollisions","required","forceMount","onStepEnter","onStepLeave","onPointerDownCaptureProp","onFocusCaptureProp","onBlurCaptureProp","children","className","style","stepProps","arrow","setArrow","footer","setFooter","stepRef","stepIdRef","stepOrderRef","isPointerInsideReactTreeRef","isFocusInsideReactTreeRef","steps","resolvedSideOffset","resolvedAlignOffset","isCurrentStep","middleware","mainAxisOffset","crossAxisOffset","boundary","hasExplicitBoundaries","detectOverflowOptions","b","shift","limitShift","flip","onArrow","hide","refs","floatingStyles","finalPlacement","middlewareData","useFloating","autoUpdate","composedRef","useComposedRefs","placedSide","placedAlign","arrowX","arrowY","cannotCenterArrow","isHidden","stepContextValue","onResize","onScroll","rafId","stepElement","ownerDocument","onPointerDown","pointerDownOutsideEvent","interactOutsideEvent","timerId","isFocusInStep","isFocusInTarget","onPointerDownCapture","onFocusCapture","onBlurCapture","onTargetPointerDownCapture","onTargetFocusCapture","onTargetBlurCapture","StepPrimitive","jsxs","cn","TourSpotlight","backdropProps","maskPath","TourSpotlightRing","ringProps","spotlightRect","TourPortal","portalContext","mounted","setMounted","portalContainer","ReactDOM","TourArrow","arrowProps","stepContext","baseSide","TourHeader","headerProps","TourTitle","titleProps","TourDescription","descriptionProps","TourClose","onClickProp","closeButtonProps","onClick","X","TourPrev","prevButtonProps","Button","Fragment","ChevronLeft","TourNext","nextButtonProps","isLastStep","ChevronRight","TourSkip","skipButtonProps","TourStepCounter","format","current","total","stepCounterProps","TourFooter","footerProps","hasDefaultFooter"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TourWrapper.js","sources":["../../../../src/components/Tour/TourWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Root,\n Portal,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Footer,\n Prev,\n Next,\n Skip,\n StepCounter,\n Spotlight,\n SpotlightRing,\n} from \"./Tour\";\nimport type { TourProps } from \"./Tour\";\n\ninterface TourStep {\n target: string | React.RefObject<HTMLElement> | HTMLElement;\n title: string;\n description?: string;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n alignOffset?: number;\n sideOffset?: number;\n collisionBoundary?: Element | null | Array<Element | null>;\n collisionPadding?:\n | number\n | Partial<Record<\"top\" | \"right\" | \"bottom\" | \"left\", number>>;\n arrowPadding?: number;\n sticky?: \"partial\" | \"always\";\n hideWhenDetached?: boolean;\n avoidCollisions?: boolean;\n required?: boolean;\n forceMount?: boolean;\n hideArrow?: boolean;\n hideClose?: boolean;\n hideFooter?: boolean;\n hideSkip?: boolean;\n hideStepCounter?: boolean;\n content?: React.ReactNode;\n onStepEnter?: () => void;\n onStepLeave?: () => void;\n}\n\ninterface ButtonConfig {\n skip?: string;\n prev?: string;\n next?: string;\n finish?: string;\n}\n\ninterface TourWrapperProps extends Omit<TourProps, \"children\"> {\n steps?: TourStep[];\n children?: React.ReactNode;\n showSpotlight?: boolean;\n showSpotlightRing?: boolean;\n spotlightClassName?: string;\n spotlightRingClassName?: string;\n buttonConfig?: ButtonConfig;\n}\n\nfunction TourWrapper({\n steps,\n children,\n showSpotlight = true,\n showSpotlightRing = true,\n spotlightClassName,\n spotlightRingClassName,\n buttonConfig,\n ...props\n}: TourWrapperProps) {\n return (\n <Root {...props}>\n <Portal>\n {showSpotlight && (\n <>\n <Spotlight className={spotlightClassName} />\n {showSpotlightRing && (\n <SpotlightRing className={spotlightRingClassName} />\n )}\n </>\n )}\n\n {steps &&\n steps.length > 0 &&\n steps.map((step, index) => (\n <Step\n key={index}\n target={step.target}\n side={step.side}\n align={step.align}\n alignOffset={step.alignOffset}\n sideOffset={step.sideOffset}\n collisionBoundary={step.collisionBoundary}\n collisionPadding={step.collisionPadding}\n arrowPadding={step.arrowPadding}\n sticky={step.sticky}\n hideWhenDetached={step.hideWhenDetached}\n avoidCollisions={step.avoidCollisions}\n required={step.required}\n forceMount={step.forceMount}\n onStepEnter={step.onStepEnter}\n onStepLeave={step.onStepLeave}\n >\n {!step.hideArrow && <Arrow />}\n <Header>\n <Title>{step.title}</Title>\n {!step.hideClose && <Close />}\n </Header>\n {step.description && (\n <Description>{step.description}</Description>\n )}\n {step.content && <div className=\"ds:py-2\">{step.content}</div>}\n {!step.hideFooter && (\n <Footer>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {!step.hideStepCounter && <StepCounter />}\n {!step.hideSkip &&\n index === 0 &&\n (buttonConfig?.skip ? (\n <Skip>{buttonConfig.skip}</Skip>\n ) : (\n <Skip />\n ))}\n </div>\n <div className=\"ds:flex ds:items-center ds:gap-2\">\n {index > 0 &&\n (buttonConfig?.prev ? (\n <Prev>{buttonConfig.prev}</Prev>\n ) : (\n <Prev />\n ))}\n {buttonConfig?.next ? (\n index === steps.length - 1 && buttonConfig?.finish ? (\n <Next>{buttonConfig.finish}</Next>\n ) : (\n <Next>{buttonConfig.next}</Next>\n )\n ) : (\n <Next />\n )}\n </div>\n </Footer>\n )}\n </Step>\n ))}\n </Portal>\n\n {children}\n </Root>\n );\n}\n\nexport { TourWrapper };\nexport type { TourWrapperProps, TourStep, ButtonConfig };\n"],"names":["TourWrapper","steps","children","showSpotlight","showSpotlightRing","spotlightClassName","spotlightRingClassName","buttonConfig","props","jsxs","Root","Portal","Fragment","jsx","Spotlight","SpotlightRing","step","index","Step","Arrow","Header","Title","Close","Description","Footer","StepCounter","Skip","Prev","Next"],"mappings":";;;AAmEA,SAASA,EAAY;AAAA,EACnB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,mBAAAC,IAAoB;AAAA,EACpB,oBAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,SACE,gBAAAC,EAACC,GAAA,EAAM,GAAGF,GACR,UAAA;AAAA,IAAA,gBAAAC,EAACE,GAAA,EACE,UAAA;AAAA,MAAAR,KACC,gBAAAM,EAAAG,GAAA,EACE,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EAAU,WAAWT,EAAA,CAAoB;AAAA,QACzCD,KACC,gBAAAS,EAACE,GAAA,EAAc,WAAWT,EAAA,CAAwB;AAAA,MAAA,GAEtD;AAAA,MAGDL,KACCA,EAAM,SAAS,KACfA,EAAM,IAAI,CAACe,GAAMC,MACf,gBAAAR;AAAA,QAACS;AAAAA,QAAA;AAAA,UAEC,QAAQF,EAAK;AAAA,UACb,MAAMA,EAAK;AAAA,UACX,OAAOA,EAAK;AAAA,UACZ,aAAaA,EAAK;AAAA,UAClB,YAAYA,EAAK;AAAA,UACjB,mBAAmBA,EAAK;AAAA,UACxB,kBAAkBA,EAAK;AAAA,UACvB,cAAcA,EAAK;AAAA,UACnB,QAAQA,EAAK;AAAA,UACb,kBAAkBA,EAAK;AAAA,UACvB,iBAAiBA,EAAK;AAAA,UACtB,UAAUA,EAAK;AAAA,UACf,YAAYA,EAAK;AAAA,UACjB,aAAaA,EAAK;AAAA,UAClB,aAAaA,EAAK;AAAA,UAEjB,UAAA;AAAA,YAAA,CAACA,EAAK,aAAa,gBAAAH,EAACM,GAAA,CAAA,CAAM;AAAA,8BAC1BC,GAAA,EACC,UAAA;AAAA,cAAA,gBAAAP,EAACQ,GAAA,EAAO,YAAK,MAAA,CAAM;AAAA,cAClB,CAACL,EAAK,aAAa,gBAAAH,EAACS,GAAA,CAAA,CAAM;AAAA,YAAA,GAC7B;AAAA,YACCN,EAAK,eACJ,gBAAAH,EAACU,GAAA,EAAa,YAAK,aAAY;AAAA,YAEhCP,EAAK,WAAW,gBAAAH,EAAC,SAAI,WAAU,WAAW,YAAK,SAAQ;AAAA,YACvD,CAACG,EAAK,cACL,gBAAAP,EAACe,GAAA,EACC,UAAA;AAAA,cAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAA;AAAA,gBAAA,CAACO,EAAK,mBAAmB,gBAAAH,EAACY,GAAA,CAAA,CAAY;AAAA,gBACtC,CAACT,EAAK,YACLC,MAAU,MACTV,GAAc,OACb,gBAAAM,EAACa,GAAA,EAAM,UAAAnB,EAAa,KAAA,CAAK,sBAExBmB,GAAA,EAAK;AAAA,cAAA,GAEZ;AAAA,cACA,gBAAAjB,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAA;AAAA,gBAAAQ,IAAQ,MACNV,GAAc,OACb,gBAAAM,EAACc,KAAM,UAAApB,EAAa,KAAA,CAAK,IAEzB,gBAAAM,EAACc,GAAA,CAAA,CAAK;AAAA,gBAETpB,GAAc,OACbU,MAAUhB,EAAM,SAAS,KAAKM,GAAc,SAC1C,gBAAAM,EAACe,KAAM,UAAArB,EAAa,QAAO,IAE3B,gBAAAM,EAACe,GAAA,EAAM,YAAa,KAAA,CAAK,sBAG1BA,GAAA,CAAA,CAAK;AAAA,cAAA,EAAA,CAEV;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAvDGX;AAAA,MAAA,CA0DR;AAAA,IAAA,GACL;AAAA,IAECf;AAAA,EAAA,GACH;AAEJ;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Tour/index.ts"],"sourcesContent":["import {\n Root,\n Portal,\n Spotlight,\n SpotlightRing,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Prev,\n Next,\n Skip,\n StepCounter,\n Footer,\n //\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n //\n type TourProps,\n} from \"./Tour\";\nimport {\n TourWrapper,\n type TourWrapperProps,\n type TourStep as TourStepType,\n type ButtonConfig,\n} from \"./TourWrapper\";\n\nconst Tour = Object.assign(TourWrapper, {\n Root,\n Portal,\n Spotlight,\n SpotlightRing,\n Step,\n Arrow,\n Header,\n Title,\n Description,\n Close,\n Prev,\n Next,\n Skip,\n StepCounter,\n Footer,\n //\n TourPortal,\n TourSpotlight,\n TourSpotlightRing,\n TourStep,\n TourArrow,\n TourHeader,\n TourTitle,\n TourDescription,\n TourClose,\n TourPrev,\n TourNext,\n TourSkip,\n TourStepCounter,\n TourFooter,\n});\n\nexport { Tour };\nexport type {\n TourProps,\n TourWrapperProps,\n TourStepType as TourStep,\n ButtonConfig,\n};\n"],"names":["Tour","TourWrapper","Root","Portal","Spotlight","SpotlightRing","Step","Arrow","Header","Title","Description","Close","Prev","Next","Skip","StepCounter","Footer","TourPortal","TourSpotlight","TourSpotlightRing","TourStep","TourArrow","TourHeader","TourTitle","TourDescription","TourClose","TourPrev","TourNext","TourSkip","TourStepCounter","TourFooter"],"mappings":";;AAyCA,MAAMA,IAAO,OAAO,OAAOC,GAAa;AAAA,EAAA,MACtCC;AAAAA,EAAA,QACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,MACAC;AAAAA,EAAA,OACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,OACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,OACAC;AAAAA,EAAA,MACAC;AAAAA,EAAA,MACAC;AAAAA,EAAA,MACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,QACAC;AAAAA;AAAAA,EAEA,YAAAC;AAAA,EACA,eAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AACF,CAAC;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeSelect.js","sources":["../../../../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport {\n TreeView as DsTreeView,\n type TreeViewProps,\n type TreeDataItem,\n} from \"@dsui/ui/components/tree-view\";\n\nexport type TreeSelectProps = TreeViewProps;\nexport type { TreeDataItem, TreeViewProps };\n\nexport const TreeSelect = forwardRef<HTMLDivElement, TreeSelectProps>(\n (props, ref) => {\n return <DsTreeView ref={ref} {...props} />;\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport const TreeView = DsTreeView;\n"],"names":["TreeSelect","forwardRef","props","ref","jsx","DsTreeView","TreeView"],"mappings":";;;AAUO,MAAMA,IAAaC;AAAA,EACxB,CAACC,GAAOC,MACC,gBAAAC,EAACC,GAAA,EAAW,KAAAF,GAAW,GAAGD,EAAA,CAAO;AAE5C;AAEAF,EAAW,cAAc;AAElB,MAAMM,IAAWD;"}