@sth87/shadcn-design-system 0.0.36 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/AI_CONTEXT.md +212 -214
  2. package/dist/cjs/components/Accordion/Accordion.cjs +1 -1
  3. package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
  4. package/dist/cjs/components/Avatar/Avatar.cjs +1 -1
  5. package/dist/cjs/components/Avatar/Avatar.cjs.map +1 -1
  6. package/dist/cjs/components/Badge/Badge.cjs +1 -1
  7. package/dist/cjs/components/Badge/Badge.cjs.map +1 -1
  8. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs +1 -1
  9. package/dist/cjs/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  10. package/dist/cjs/components/Button/Button.cjs +1 -1
  11. package/dist/cjs/components/Button/Button.cjs.map +1 -1
  12. package/dist/cjs/components/Calendar/Calendar.cjs +1 -1
  13. package/dist/cjs/components/Calendar/Calendar.cjs.map +1 -1
  14. package/dist/cjs/components/Carousel/Carousel.cjs +1 -1
  15. package/dist/cjs/components/Carousel/Carousel.cjs.map +1 -1
  16. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  17. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  18. package/dist/cjs/components/Collapsible/Collapsible.cjs +1 -1
  19. package/dist/cjs/components/Collapsible/Collapsible.cjs.map +1 -1
  20. package/dist/cjs/components/Command/Command.cjs +1 -1
  21. package/dist/cjs/components/Command/Command.cjs.map +1 -1
  22. package/dist/cjs/components/ContextMenu/ContextMenu.cjs +1 -1
  23. package/dist/cjs/components/ContextMenu/ContextMenu.cjs.map +1 -1
  24. package/dist/cjs/components/Cropper/Cropper.cjs +1 -1
  25. package/dist/cjs/components/Cropper/Cropper.cjs.map +1 -1
  26. package/dist/cjs/components/DatePicker/DatePicker.cjs +1 -1
  27. package/dist/cjs/components/DatePicker/DatePicker.cjs.map +1 -1
  28. package/dist/cjs/components/DatePicker/RangePicker.cjs +1 -1
  29. package/dist/cjs/components/DatePicker/RangePicker.cjs.map +1 -1
  30. package/dist/cjs/components/DatePicker/TimePicker.cjs +1 -1
  31. package/dist/cjs/components/DatePicker/TimePicker.cjs.map +1 -1
  32. package/dist/cjs/components/Dialog/Dialog.cjs +1 -1
  33. package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
  34. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs +1 -1
  35. package/dist/cjs/components/DropdownMenu/DropdownMenu.cjs.map +1 -1
  36. package/dist/cjs/components/FloatLabel.cjs +1 -1
  37. package/dist/cjs/components/FloatLabel.cjs.map +1 -1
  38. package/dist/cjs/components/Glass/Glass.cjs +1 -1
  39. package/dist/cjs/components/Glass/Glass.cjs.map +1 -1
  40. package/dist/cjs/components/ImageViewer/ImageViewer.cjs +1 -1
  41. package/dist/cjs/components/ImageViewer/ImageViewer.cjs.map +1 -1
  42. package/dist/cjs/components/Input/Input.cjs +1 -1
  43. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  44. package/dist/cjs/components/InputOTP/InputOTP.cjs +1 -1
  45. package/dist/cjs/components/InputOTP/InputOTP.cjs.map +1 -1
  46. package/dist/cjs/components/Interactive/CursorFollow.cjs +1 -1
  47. package/dist/cjs/components/Interactive/CursorFollow.cjs.map +1 -1
  48. package/dist/cjs/components/Marquee/Marquee.cjs +1 -1
  49. package/dist/cjs/components/Marquee/Marquee.cjs.map +1 -1
  50. package/dist/cjs/components/Pagination/Pagination.cjs +1 -1
  51. package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
  52. package/dist/cjs/components/QrCode/QrCode.cjs +1 -1
  53. package/dist/cjs/components/QrCode/QrCode.cjs.map +1 -1
  54. package/dist/cjs/components/Radio/Radio.cjs +1 -1
  55. package/dist/cjs/components/Radio/Radio.cjs.map +1 -1
  56. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  57. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  58. package/dist/cjs/components/Resizable/Resizable.cjs +1 -1
  59. package/dist/cjs/components/Resizable/Resizable.cjs.map +1 -1
  60. package/dist/cjs/components/ScrollArea/ScrollArea.cjs +1 -1
  61. package/dist/cjs/components/ScrollArea/ScrollArea.cjs.map +1 -1
  62. package/dist/cjs/components/Select/Select.cjs +1 -1
  63. package/dist/cjs/components/Select/Select.cjs.map +1 -1
  64. package/dist/cjs/components/Sheet/Sheet.cjs +2 -2
  65. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  66. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  67. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  68. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  69. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  70. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  71. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  72. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  73. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  74. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs +1 -1
  75. package/dist/cjs/components/Table/TableFilter/data-table-date-filter.cjs.map +1 -1
  76. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs +1 -1
  77. package/dist/cjs/components/Table/TableFilter/data-table-filter-popover.cjs.map +1 -1
  78. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs +1 -1
  79. package/dist/cjs/components/Table/TableFilter/data-table-slider-filter.cjs.map +1 -1
  80. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  81. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  82. package/dist/cjs/components/Table/data-table-pagination.cjs +1 -1
  83. package/dist/cjs/components/Table/data-table-pagination.cjs.map +1 -1
  84. package/dist/cjs/components/Table/data-table.cjs +1 -1
  85. package/dist/cjs/components/Table/data-table.cjs.map +1 -1
  86. package/dist/cjs/components/Tabs/Tabs.cjs +1 -1
  87. package/dist/cjs/components/Tabs/Tabs.cjs.map +1 -1
  88. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  89. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  90. package/dist/cjs/components/Textarea/Textarea.cjs +1 -1
  91. package/dist/cjs/components/Textarea/Textarea.cjs.map +1 -1
  92. package/dist/cjs/components/TimeGridView.cjs +1 -1
  93. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  94. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  95. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  96. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  97. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  98. package/dist/cjs/components/Tour/Tour.cjs +1 -1
  99. package/dist/cjs/components/Tour/Tour.cjs.map +1 -1
  100. package/dist/cjs/components/Tour/TourWrapper.cjs +1 -1
  101. package/dist/cjs/components/Tour/TourWrapper.cjs.map +1 -1
  102. package/dist/cjs/components/Upload/Upload.cjs +3 -3
  103. package/dist/cjs/components/Upload/Upload.cjs.map +1 -1
  104. package/dist/cjs/components/WheelColumn.cjs +1 -1
  105. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  106. package/dist/cjs/lib/TextAnimation/BlurText.cjs +1 -1
  107. package/dist/cjs/lib/TextAnimation/BlurText.cjs.map +1 -1
  108. package/dist/cjs/lib/TextAnimation/CircularText.cjs +1 -1
  109. package/dist/cjs/lib/TextAnimation/CircularText.cjs.map +1 -1
  110. package/dist/cjs/lib/TextAnimation/FlipWords.cjs +1 -1
  111. package/dist/cjs/lib/TextAnimation/FlipWords.cjs.map +1 -1
  112. package/dist/cjs/lib/TextAnimation/GradientText.cjs +1 -1
  113. package/dist/cjs/lib/TextAnimation/GradientText.cjs.map +1 -1
  114. package/dist/cjs/lib/TextAnimation/RollingText.cjs +1 -1
  115. package/dist/cjs/lib/TextAnimation/RollingText.cjs.map +1 -1
  116. package/dist/cjs/lib/TextAnimation/RotatingText.cjs +1 -1
  117. package/dist/cjs/lib/TextAnimation/RotatingText.cjs.map +1 -1
  118. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs +1 -1
  119. package/dist/cjs/lib/TextAnimation/ShimmeringText.cjs.map +1 -1
  120. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs +1 -1
  121. package/dist/cjs/lib/TextAnimation/TextGenerateEffect.cjs.map +1 -1
  122. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs +1 -1
  123. package/dist/cjs/lib/TextAnimation/TextHoverEffect.cjs.map +1 -1
  124. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs +2 -2
  125. package/dist/cjs/lib/TextAnimation/TextPressureEffect.cjs.map +1 -1
  126. package/dist/cjs/lib/TextAnimation/TypingText.cjs +1 -1
  127. package/dist/cjs/lib/TextAnimation/TypingText.cjs.map +1 -1
  128. package/dist/cjs/lib/TextAnimation/WritingText.cjs +1 -1
  129. package/dist/cjs/lib/TextAnimation/WritingText.cjs.map +1 -1
  130. package/dist/cjs/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.cjs.map +1 -0
  131. package/dist/cjs/packages/ui/src/components/accordion.cjs +1 -1
  132. package/dist/cjs/packages/ui/src/components/accordion.cjs.map +1 -1
  133. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs +1 -1
  134. package/dist/cjs/packages/ui/src/components/alert-dialog.cjs.map +1 -1
  135. package/dist/cjs/packages/ui/src/components/avatar.cjs +1 -1
  136. package/dist/cjs/packages/ui/src/components/avatar.cjs.map +1 -1
  137. package/dist/cjs/packages/ui/src/components/badge.cjs +1 -1
  138. package/dist/cjs/packages/ui/src/components/badge.cjs.map +1 -1
  139. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs +1 -1
  140. package/dist/cjs/packages/ui/src/components/breadcrumb.cjs.map +1 -1
  141. package/dist/cjs/packages/ui/src/components/button-group.cjs +1 -1
  142. package/dist/cjs/packages/ui/src/components/button-group.cjs.map +1 -1
  143. package/dist/cjs/packages/ui/src/components/button.cjs +1 -1
  144. package/dist/cjs/packages/ui/src/components/button.cjs.map +1 -1
  145. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  146. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  147. package/dist/cjs/packages/ui/src/components/checkbox.cjs +1 -1
  148. package/dist/cjs/packages/ui/src/components/checkbox.cjs.map +1 -1
  149. package/dist/cjs/packages/ui/src/components/combobox.cjs +1 -1
  150. package/dist/cjs/packages/ui/src/components/combobox.cjs.map +1 -1
  151. package/dist/cjs/packages/ui/src/components/command.cjs +1 -1
  152. package/dist/cjs/packages/ui/src/components/command.cjs.map +1 -1
  153. package/dist/cjs/packages/ui/src/components/context-menu.cjs +1 -1
  154. package/dist/cjs/packages/ui/src/components/context-menu.cjs.map +1 -1
  155. package/dist/cjs/packages/ui/src/components/dialog.cjs +1 -1
  156. package/dist/cjs/packages/ui/src/components/dialog.cjs.map +1 -1
  157. package/dist/cjs/packages/ui/src/components/drawer.cjs +1 -1
  158. package/dist/cjs/packages/ui/src/components/drawer.cjs.map +1 -1
  159. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs +1 -1
  160. package/dist/cjs/packages/ui/src/components/dropdown-menu.cjs.map +1 -1
  161. package/dist/cjs/packages/ui/src/components/input-otp.cjs +1 -1
  162. package/dist/cjs/packages/ui/src/components/input-otp.cjs.map +1 -1
  163. package/dist/cjs/packages/ui/src/components/input.cjs +1 -1
  164. package/dist/cjs/packages/ui/src/components/input.cjs.map +1 -1
  165. package/dist/cjs/packages/ui/src/components/label.cjs +1 -1
  166. package/dist/cjs/packages/ui/src/components/label.cjs.map +1 -1
  167. package/dist/cjs/packages/ui/src/components/pagination.cjs +1 -1
  168. package/dist/cjs/packages/ui/src/components/pagination.cjs.map +1 -1
  169. package/dist/cjs/packages/ui/src/components/popover.cjs +1 -1
  170. package/dist/cjs/packages/ui/src/components/popover.cjs.map +1 -1
  171. package/dist/cjs/packages/ui/src/components/radio-group.cjs +1 -1
  172. package/dist/cjs/packages/ui/src/components/radio-group.cjs.map +1 -1
  173. package/dist/cjs/packages/ui/src/components/resizable.cjs +1 -1
  174. package/dist/cjs/packages/ui/src/components/resizable.cjs.map +1 -1
  175. package/dist/cjs/packages/ui/src/components/scroll-area.cjs +1 -1
  176. package/dist/cjs/packages/ui/src/components/scroll-area.cjs.map +1 -1
  177. package/dist/cjs/packages/ui/src/components/select.cjs +1 -1
  178. package/dist/cjs/packages/ui/src/components/select.cjs.map +1 -1
  179. package/dist/cjs/packages/ui/src/components/separator.cjs +1 -1
  180. package/dist/cjs/packages/ui/src/components/separator.cjs.map +1 -1
  181. package/dist/cjs/packages/ui/src/components/sheet.cjs +1 -1
  182. package/dist/cjs/packages/ui/src/components/sheet.cjs.map +1 -1
  183. package/dist/cjs/packages/ui/src/components/sidebar.cjs +1 -1
  184. package/dist/cjs/packages/ui/src/components/sidebar.cjs.map +1 -1
  185. package/dist/cjs/packages/ui/src/components/skeleton.cjs +1 -1
  186. package/dist/cjs/packages/ui/src/components/skeleton.cjs.map +1 -1
  187. package/dist/cjs/packages/ui/src/components/switch.cjs +1 -1
  188. package/dist/cjs/packages/ui/src/components/switch.cjs.map +1 -1
  189. package/dist/cjs/packages/ui/src/components/table.cjs +1 -1
  190. package/dist/cjs/packages/ui/src/components/table.cjs.map +1 -1
  191. package/dist/cjs/packages/ui/src/components/tabs.cjs +1 -1
  192. package/dist/cjs/packages/ui/src/components/tabs.cjs.map +1 -1
  193. package/dist/cjs/packages/ui/src/components/textarea.cjs +1 -1
  194. package/dist/cjs/packages/ui/src/components/textarea.cjs.map +1 -1
  195. package/dist/cjs/packages/ui/src/components/toggle.cjs +1 -1
  196. package/dist/cjs/packages/ui/src/components/toggle.cjs.map +1 -1
  197. package/dist/cjs/packages/ui/src/components/tooltip.cjs +1 -1
  198. package/dist/cjs/packages/ui/src/components/tooltip.cjs.map +1 -1
  199. package/dist/cjs/packages/ui/src/components/tree-view.cjs +1 -1
  200. package/dist/cjs/packages/ui/src/components/tree-view.cjs.map +1 -1
  201. package/dist/cjs/styles/index.css +1 -1
  202. package/dist/cjs/utils/animations.cjs +1 -1
  203. package/dist/cjs/utils/animations.cjs.map +1 -1
  204. package/dist/cjs/utils/css.cjs +1 -1
  205. package/dist/cjs/utils/css.cjs.map +1 -1
  206. package/dist/cjs/utils/parsers.cjs +1 -1
  207. package/dist/cjs/utils/parsers.cjs.map +1 -1
  208. package/dist/esm/components/Accordion/Accordion.js +60 -60
  209. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  210. package/dist/esm/components/Avatar/Avatar.js +40 -40
  211. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  212. package/dist/esm/components/Badge/Badge.js +1 -1
  213. package/dist/esm/components/Badge/Badge.js.map +1 -1
  214. package/dist/esm/components/Breadcrumb/Breadcrumb.js +36 -36
  215. package/dist/esm/components/Breadcrumb/Breadcrumb.js.map +1 -1
  216. package/dist/esm/components/Button/Button.js +9 -9
  217. package/dist/esm/components/Button/Button.js.map +1 -1
  218. package/dist/esm/components/Calendar/Calendar.js +4 -4
  219. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  220. package/dist/esm/components/Carousel/Carousel.js +165 -165
  221. package/dist/esm/components/Carousel/Carousel.js.map +1 -1
  222. package/dist/esm/components/Checkbox/Checkbox.js +33 -33
  223. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  224. package/dist/esm/components/Collapsible/Collapsible.js +43 -43
  225. package/dist/esm/components/Collapsible/Collapsible.js.map +1 -1
  226. package/dist/esm/components/Command/Command.js +28 -28
  227. package/dist/esm/components/Command/Command.js.map +1 -1
  228. package/dist/esm/components/ContextMenu/ContextMenu.js +11 -11
  229. package/dist/esm/components/ContextMenu/ContextMenu.js.map +1 -1
  230. package/dist/esm/components/Cropper/Cropper.js +132 -132
  231. package/dist/esm/components/Cropper/Cropper.js.map +1 -1
  232. package/dist/esm/components/DatePicker/DatePicker.js +75 -75
  233. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  234. package/dist/esm/components/DatePicker/RangePicker.js +136 -136
  235. package/dist/esm/components/DatePicker/RangePicker.js.map +1 -1
  236. package/dist/esm/components/DatePicker/TimePicker.js +150 -150
  237. package/dist/esm/components/DatePicker/TimePicker.js.map +1 -1
  238. package/dist/esm/components/Dialog/Dialog.js +114 -114
  239. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  240. package/dist/esm/components/DropdownMenu/DropdownMenu.js +13 -13
  241. package/dist/esm/components/DropdownMenu/DropdownMenu.js.map +1 -1
  242. package/dist/esm/components/FloatLabel.js +44 -44
  243. package/dist/esm/components/FloatLabel.js.map +1 -1
  244. package/dist/esm/components/Glass/Glass.js +15 -15
  245. package/dist/esm/components/Glass/Glass.js.map +1 -1
  246. package/dist/esm/components/ImageViewer/ImageViewer.js +53 -53
  247. package/dist/esm/components/ImageViewer/ImageViewer.js.map +1 -1
  248. package/dist/esm/components/Input/Input.js +120 -120
  249. package/dist/esm/components/Input/Input.js.map +1 -1
  250. package/dist/esm/components/InputOTP/InputOTP.js +16 -16
  251. package/dist/esm/components/InputOTP/InputOTP.js.map +1 -1
  252. package/dist/esm/components/Interactive/CursorFollow.js +49 -49
  253. package/dist/esm/components/Interactive/CursorFollow.js.map +1 -1
  254. package/dist/esm/components/Marquee/Marquee.js +130 -130
  255. package/dist/esm/components/Marquee/Marquee.js.map +1 -1
  256. package/dist/esm/components/Pagination/Pagination.js +68 -68
  257. package/dist/esm/components/Pagination/Pagination.js.map +1 -1
  258. package/dist/esm/components/QrCode/QrCode.js +37 -37
  259. package/dist/esm/components/QrCode/QrCode.js.map +1 -1
  260. package/dist/esm/components/Radio/Radio.js +16 -16
  261. package/dist/esm/components/Radio/Radio.js.map +1 -1
  262. package/dist/esm/components/Rate/Rate.js +74 -74
  263. package/dist/esm/components/Rate/Rate.js.map +1 -1
  264. package/dist/esm/components/Resizable/Resizable.js +6 -6
  265. package/dist/esm/components/Resizable/Resizable.js.map +1 -1
  266. package/dist/esm/components/ScrollArea/ScrollArea.js +10 -10
  267. package/dist/esm/components/ScrollArea/ScrollArea.js.map +1 -1
  268. package/dist/esm/components/Select/Select.js +64 -64
  269. package/dist/esm/components/Select/Select.js.map +1 -1
  270. package/dist/esm/components/Sheet/Sheet.js +27 -27
  271. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  272. package/dist/esm/components/Slider/Slider.js +158 -158
  273. package/dist/esm/components/Slider/Slider.js.map +1 -1
  274. package/dist/esm/components/Stepper/Stepper.js +218 -218
  275. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  276. package/dist/esm/components/Stepper/StepperWrapper.js +32 -32
  277. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  278. package/dist/esm/components/Switch/Switch.js +43 -43
  279. package/dist/esm/components/Switch/Switch.js.map +1 -1
  280. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js +37 -37
  281. package/dist/esm/components/Table/TableFilter/data-table-date-filter.js.map +1 -1
  282. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js +25 -25
  283. package/dist/esm/components/Table/TableFilter/data-table-filter-popover.js.map +1 -1
  284. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js +64 -64
  285. package/dist/esm/components/Table/TableFilter/data-table-slider-filter.js.map +1 -1
  286. package/dist/esm/components/Table/data-table-column-header.js +33 -33
  287. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  288. package/dist/esm/components/Table/data-table-pagination.js +21 -21
  289. package/dist/esm/components/Table/data-table-pagination.js.map +1 -1
  290. package/dist/esm/components/Table/data-table.js +18 -18
  291. package/dist/esm/components/Table/data-table.js.map +1 -1
  292. package/dist/esm/components/Tabs/Tabs.js +242 -242
  293. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  294. package/dist/esm/components/Tabs/classes.js +176 -176
  295. package/dist/esm/components/Tabs/classes.js.map +1 -1
  296. package/dist/esm/components/Textarea/Textarea.js +49 -49
  297. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  298. package/dist/esm/components/TimeGridView.js +34 -34
  299. package/dist/esm/components/TimeGridView.js.map +1 -1
  300. package/dist/esm/components/Toast/Toast.js +52 -52
  301. package/dist/esm/components/Toast/Toast.js.map +1 -1
  302. package/dist/esm/components/Tooltip/Tooltip.js +19 -19
  303. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  304. package/dist/esm/components/Tour/Tour.js +11 -11
  305. package/dist/esm/components/Tour/Tour.js.map +1 -1
  306. package/dist/esm/components/Tour/TourWrapper.js +15 -15
  307. package/dist/esm/components/Tour/TourWrapper.js.map +1 -1
  308. package/dist/esm/components/Upload/Upload.js +405 -405
  309. package/dist/esm/components/Upload/Upload.js.map +1 -1
  310. package/dist/esm/components/WheelColumn.js +56 -56
  311. package/dist/esm/components/WheelColumn.js.map +1 -1
  312. package/dist/esm/lib/TextAnimation/BlurText.js +18 -18
  313. package/dist/esm/lib/TextAnimation/BlurText.js.map +1 -1
  314. package/dist/esm/lib/TextAnimation/CircularText.js +7 -7
  315. package/dist/esm/lib/TextAnimation/CircularText.js.map +1 -1
  316. package/dist/esm/lib/TextAnimation/FlipWords.js +21 -21
  317. package/dist/esm/lib/TextAnimation/FlipWords.js.map +1 -1
  318. package/dist/esm/lib/TextAnimation/GradientText.js +4 -4
  319. package/dist/esm/lib/TextAnimation/GradientText.js.map +1 -1
  320. package/dist/esm/lib/TextAnimation/RollingText.js +24 -24
  321. package/dist/esm/lib/TextAnimation/RollingText.js.map +1 -1
  322. package/dist/esm/lib/TextAnimation/RotatingText.js +6 -6
  323. package/dist/esm/lib/TextAnimation/RotatingText.js.map +1 -1
  324. package/dist/esm/lib/TextAnimation/ShimmeringText.js +9 -9
  325. package/dist/esm/lib/TextAnimation/ShimmeringText.js.map +1 -1
  326. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js +14 -14
  327. package/dist/esm/lib/TextAnimation/TextGenerateEffect.js.map +1 -1
  328. package/dist/esm/lib/TextAnimation/TextHoverEffect.js +9 -9
  329. package/dist/esm/lib/TextAnimation/TextHoverEffect.js.map +1 -1
  330. package/dist/esm/lib/TextAnimation/TextPressureEffect.js +3 -3
  331. package/dist/esm/lib/TextAnimation/TextPressureEffect.js.map +1 -1
  332. package/dist/esm/lib/TextAnimation/TypingText.js +17 -17
  333. package/dist/esm/lib/TextAnimation/TypingText.js.map +1 -1
  334. package/dist/esm/lib/TextAnimation/WritingText.js +10 -10
  335. package/dist/esm/lib/TextAnimation/WritingText.js.map +1 -1
  336. package/dist/esm/node_modules/.pnpm/nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1/node_modules/nuqs/dist/server.js.map +1 -0
  337. package/dist/esm/packages/ui/src/components/accordion.js +31 -31
  338. package/dist/esm/packages/ui/src/components/accordion.js.map +1 -1
  339. package/dist/esm/packages/ui/src/components/alert-dialog.js +33 -33
  340. package/dist/esm/packages/ui/src/components/alert-dialog.js.map +1 -1
  341. package/dist/esm/packages/ui/src/components/avatar.js +20 -20
  342. package/dist/esm/packages/ui/src/components/avatar.js.map +1 -1
  343. package/dist/esm/packages/ui/src/components/badge.js +53 -53
  344. package/dist/esm/packages/ui/src/components/badge.js.map +1 -1
  345. package/dist/esm/packages/ui/src/components/breadcrumb.js +20 -20
  346. package/dist/esm/packages/ui/src/components/breadcrumb.js.map +1 -1
  347. package/dist/esm/packages/ui/src/components/button-group.js +31 -31
  348. package/dist/esm/packages/ui/src/components/button-group.js.map +1 -1
  349. package/dist/esm/packages/ui/src/components/button.js +90 -90
  350. package/dist/esm/packages/ui/src/components/button.js.map +1 -1
  351. package/dist/esm/packages/ui/src/components/calendar.js +131 -131
  352. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  353. package/dist/esm/packages/ui/src/components/checkbox.js +47 -47
  354. package/dist/esm/packages/ui/src/components/checkbox.js.map +1 -1
  355. package/dist/esm/packages/ui/src/components/combobox.js +64 -64
  356. package/dist/esm/packages/ui/src/components/combobox.js.map +1 -1
  357. package/dist/esm/packages/ui/src/components/command.js +77 -77
  358. package/dist/esm/packages/ui/src/components/command.js.map +1 -1
  359. package/dist/esm/packages/ui/src/components/context-menu.js +76 -76
  360. package/dist/esm/packages/ui/src/components/context-menu.js.map +1 -1
  361. package/dist/esm/packages/ui/src/components/dialog.js +54 -54
  362. package/dist/esm/packages/ui/src/components/dialog.js.map +1 -1
  363. package/dist/esm/packages/ui/src/components/drawer.js +39 -39
  364. package/dist/esm/packages/ui/src/components/drawer.js.map +1 -1
  365. package/dist/esm/packages/ui/src/components/dropdown-menu.js +109 -109
  366. package/dist/esm/packages/ui/src/components/dropdown-menu.js.map +1 -1
  367. package/dist/esm/packages/ui/src/components/input-otp.js +30 -30
  368. package/dist/esm/packages/ui/src/components/input-otp.js.map +1 -1
  369. package/dist/esm/packages/ui/src/components/input.js +19 -19
  370. package/dist/esm/packages/ui/src/components/input.js.map +1 -1
  371. package/dist/esm/packages/ui/src/components/label.js +9 -9
  372. package/dist/esm/packages/ui/src/components/label.js.map +1 -1
  373. package/dist/esm/packages/ui/src/components/pagination.js +26 -26
  374. package/dist/esm/packages/ui/src/components/pagination.js.map +1 -1
  375. package/dist/esm/packages/ui/src/components/popover.js +13 -13
  376. package/dist/esm/packages/ui/src/components/popover.js.map +1 -1
  377. package/dist/esm/packages/ui/src/components/radio-group.js +45 -45
  378. package/dist/esm/packages/ui/src/components/radio-group.js.map +1 -1
  379. package/dist/esm/packages/ui/src/components/resizable.js +18 -18
  380. package/dist/esm/packages/ui/src/components/resizable.js.map +1 -1
  381. package/dist/esm/packages/ui/src/components/scroll-area.js +31 -31
  382. package/dist/esm/packages/ui/src/components/scroll-area.js.map +1 -1
  383. package/dist/esm/packages/ui/src/components/select.js +119 -119
  384. package/dist/esm/packages/ui/src/components/select.js.map +1 -1
  385. package/dist/esm/packages/ui/src/components/separator.js +86 -86
  386. package/dist/esm/packages/ui/src/components/separator.js.map +1 -1
  387. package/dist/esm/packages/ui/src/components/sheet.js +50 -50
  388. package/dist/esm/packages/ui/src/components/sheet.js.map +1 -1
  389. package/dist/esm/packages/ui/src/components/sidebar.js +198 -198
  390. package/dist/esm/packages/ui/src/components/sidebar.js.map +1 -1
  391. package/dist/esm/packages/ui/src/components/skeleton.js +3 -3
  392. package/dist/esm/packages/ui/src/components/skeleton.js.map +1 -1
  393. package/dist/esm/packages/ui/src/components/switch.js +57 -57
  394. package/dist/esm/packages/ui/src/components/switch.js.map +1 -1
  395. package/dist/esm/packages/ui/src/components/table.js +17 -17
  396. package/dist/esm/packages/ui/src/components/table.js.map +1 -1
  397. package/dist/esm/packages/ui/src/components/tabs.js +33 -33
  398. package/dist/esm/packages/ui/src/components/tabs.js.map +1 -1
  399. package/dist/esm/packages/ui/src/components/textarea.js +17 -17
  400. package/dist/esm/packages/ui/src/components/textarea.js.map +1 -1
  401. package/dist/esm/packages/ui/src/components/toggle.js +36 -36
  402. package/dist/esm/packages/ui/src/components/toggle.js.map +1 -1
  403. package/dist/esm/packages/ui/src/components/tooltip.js +20 -20
  404. package/dist/esm/packages/ui/src/components/tooltip.js.map +1 -1
  405. package/dist/esm/packages/ui/src/components/tree-view.js +218 -218
  406. package/dist/esm/packages/ui/src/components/tree-view.js.map +1 -1
  407. package/dist/esm/styles/index.css +1 -1
  408. package/dist/esm/utils/animations.js +55 -55
  409. package/dist/esm/utils/animations.js.map +1 -1
  410. package/dist/esm/utils/css.js +7 -7
  411. package/dist/esm/utils/css.js.map +1 -1
  412. package/dist/esm/utils/parsers.js +1 -1
  413. package/dist/types/components/DatePicker/RangePicker.d.ts.map +1 -1
  414. package/dist/types/lib/TextAnimation/TextPressureEffect.d.ts.map +1 -1
  415. package/dist/types/lib/TextAnimation/TypingText.d.ts.map +1 -1
  416. package/package.json +1 -1
  417. 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
  418. 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
  419. /package/dist/cjs/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.cjs +0 -0
  420. /package/dist/esm/node_modules/.pnpm/{nuqs@2.8.0_next@15.5.9_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1 → nuqs@2.8.0_next@15.5.9_@babel_core@7.28.5_react-dom@19.1.1_react@19.1.1__react@19.1.1__react@19.1.1}/node_modules/nuqs/dist/server.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"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 \"relative z-10 bg-transparent 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 \"data-[state=active]:text-primary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"data-[state=active]:text-secondary-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"data-[state=active]:text-muted-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"data-[state=active]:text-accent-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"data-[state=active]:text-destructive-foreground\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"data-[state=active]:text-white\":\n (variant === \"bordered\" || variant === \"pills\") &&\n (color === \"success\" || color === \"warning\"),\n \"flex-1\": fullWidth && !isVertical,\n \"w-full 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=\"mr-2 inline-flex 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 \"relative\",\n {\n \"overflow-hidden\": overflowMode === \"fade\" && isOverflowing,\n \"max-w-full\": overflowMode === \"fade\", // Limit width for fade mode\n // For overflow modes, allow natural width expansion\n \"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(\"absolute rounded-full z-10\", {\n // Horizontal positions (top/bottom)\n \"h-0.5 bottom-0\": tabPosition === \"top\",\n \"h-0.5 top-0\": tabPosition === \"bottom\",\n // Vertical positions (left/right)\n \"w-0.5 right-0\": tabPosition === \"left\",\n \"w-0.5 left-0\": tabPosition === \"right\",\n // Colors\n \"bg-primary\": color === \"primary\",\n \"bg-secondary\": color === \"secondary\",\n \"bg-muted-foreground\": color === \"muted\",\n \"bg-accent\": color === \"accent\",\n \"bg-destructive\": color === \"destructive\",\n \"bg-success\": color === \"success\",\n \"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(\"absolute rounded-md pointer-events-none z-0\", {\n \"bg-background shadow-sm\": variant === \"solid\",\n\n \"bg-primary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"primary\",\n \"bg-secondary\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"secondary\",\n \"bg-muted\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"muted\",\n \"bg-accent\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"accent\",\n \"bg-destructive\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"destructive\",\n \"bg-success\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"success\",\n \"bg-warning\":\n (variant === \"bordered\" || variant === \"pills\") &&\n color === \"warning\",\n\n \"border rounded-full border-primary\":\n variant === \"pill-stroke\" && color === \"primary\",\n \"border rounded-full border-secondary\":\n variant === \"pill-stroke\" && color === \"secondary\",\n \"rounded-full border-muted\":\n variant === \"pill-stroke\" && color === \"muted\",\n \"border rounded-full border-accent\":\n variant === \"pill-stroke\" && color === \"accent\",\n \"border rounded-full border-destructive\":\n variant === \"pill-stroke\" && color === \"destructive\",\n \"border rounded-full border-success\":\n variant === \"pill-stroke\" && color === \"success\",\n \"border rounded-full 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 \"w-full\": !isVertical,\n \"pb-2\": !isVertical && isOverflowing,\n \"max-h-[300px] *:data-radix-scroll-area-viewport:h-full *: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(\"relative flex items-start gap-1\", {\n \"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 \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"h-9 px-3 shrink-0\",\n {\n \"bg-accent text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n }\n content={\n <div className={cn(\"flex flex-col gap-1 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 \"flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"text-left\",\n {\n \"bg-accent text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"inline-flex 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=\"w-auto min-w-32 max-w-sm max-h-96 overflow-auto 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(\"relative flex items-start gap-1\", {\n \"flex-col\": isVertical,\n \"flex-1 w-full\": true, // Take full width for fade mode\n })}\n >\n {/* Fade effect for mode 3 */}\n <div\n className={cn(\"relative flex-1 overflow-hidden\", {\n \"w-full\": !isVertical,\n \"h-full\": isVertical,\n })}\n >\n <ScrollArea\n ref={scrollAreaRef}\n className={cn({\n \"w-full\": !isVertical,\n \"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(\"absolute pointer-events-none z-20\", {\n \"top-0 left-0 bottom-0 w-24 bg-linear-to-r from-background to-transparent\":\n !isVertical,\n \"left-0 right-0 top-0 h-24 bg-linear-to-b from-background 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(\"absolute pointer-events-none z-20\", {\n \"top-0 right-0 bottom-0 w-24 bg-linear-to-l from-background to-transparent\":\n !isVertical,\n \"left-0 right-0 bottom-0 h-24 bg-linear-to-t from-background 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 \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"h-9 px-3 shrink-0\",\n {\n \"bg-accent text-accent-foreground\": dropdownOpen,\n }\n )}\n aria-label=\"More tabs\"\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n }\n content={\n // <div className={cn(\"flex flex-col gap-1 min-w-[150px]\")}>\n <ScrollArea\n className=\"min-w-[150px] max-h-[256px] [&_[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 \"snap-start\",\n \"w-full flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"text-left\",\n {\n \"bg-accent text-accent-foreground\":\n item.key === currentActiveKey,\n }\n )}\n >\n {item.icon && (\n <span className=\"inline-flex 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=\"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(\"gap-2\", positionClasses[tabPosition].root, className)}\n >\n <div\n ref={containerRef}\n className={cn(\"flex\", {\n [alignmentClasses[alignment].horizontal]: !isVertical,\n [alignmentClasses[alignment].vertical]: isVertical,\n \"w-full\":\n (fullWidth ||\n overflowMode === \"dropdown\" ||\n overflowMode === \"fade\") &&\n !isVertical,\n \"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
+ {"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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"}