@auronui/vue 1.0.14 → 1.0.15

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 (243) hide show
  1. package/dist/cjs/index.cjs +532 -420
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/components/accordion/Accordion.js.map +1 -1
  4. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +3 -2
  5. package/dist/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/accordion/AccordionContent.js.map +1 -1
  7. package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js +6 -3
  8. package/dist/components/accordion/AccordionContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  9. package/dist/components/accordion/AccordionHeader.js.map +1 -1
  10. package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js +5 -2
  11. package/dist/components/accordion/AccordionHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/components/accordion/AccordionItem.js.map +1 -1
  13. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +3 -2
  14. package/dist/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  15. package/dist/components/accordion/AccordionTrigger.js.map +1 -1
  16. package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js +6 -3
  17. package/dist/components/accordion/AccordionTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/components/alert-dialog/AlertDialogAction.js.map +1 -1
  19. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js +2 -1
  20. package/dist/components/alert-dialog/AlertDialogAction.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/components/alert-dialog/AlertDialogCancel.js.map +1 -1
  22. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js +2 -1
  23. package/dist/components/alert-dialog/AlertDialogCancel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
  25. package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js +3 -2
  26. package/dist/components/aspect-ratio/AspectRatio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/components/autocomplete/Autocomplete.js.map +1 -1
  28. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js +7 -6
  29. package/dist/components/autocomplete/Autocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/components/avatar/Avatar.js.map +1 -1
  31. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +5 -4
  32. package/dist/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/badge/Badge.js.map +1 -1
  34. package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js +3 -2
  35. package/dist/components/badge/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/components/breadcrumbs/BreadcrumbItem.js.map +1 -1
  37. package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js +7 -5
  38. package/dist/components/breadcrumbs/BreadcrumbItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  39. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
  40. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +4 -3
  41. package/dist/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/components/button/Button.js.map +1 -1
  43. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js +6 -5
  44. package/dist/components/button/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/components/button/ButtonGroup.js.map +1 -1
  46. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +2 -1
  47. package/dist/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/components/button/ToggleButtonGroup.js.map +1 -1
  49. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js +3 -2
  50. package/dist/components/button/ToggleButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/components/calendar/Calendar.js.map +1 -1
  52. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js +32 -31
  53. package/dist/components/calendar/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/calendar-year-picker/CalendarYearPicker.js.map +1 -1
  55. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js +13 -12
  56. package/dist/components/calendar-year-picker/CalendarYearPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/components/card/Card.js.map +1 -1
  58. package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js +3 -2
  59. package/dist/components/card/Card.vue_vue_type_script_setup_true_lang.js.map +1 -1
  60. package/dist/components/card/CardBody.js.map +1 -1
  61. package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js +5 -2
  62. package/dist/components/card/CardBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/card/CardFooter.js.map +1 -1
  64. package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js +3 -2
  65. package/dist/components/card/CardFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  66. package/dist/components/card/CardHeader.js.map +1 -1
  67. package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js +3 -2
  68. package/dist/components/card/CardHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/components/checkbox/Checkbox.js.map +1 -1
  70. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +5 -4
  71. package/dist/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/chip/Chip.js.map +1 -1
  73. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js +8 -7
  74. package/dist/components/chip/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/components/collapsible/Collapsible.js.map +1 -1
  76. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js +3 -2
  77. package/dist/components/collapsible/Collapsible.vue_vue_type_script_setup_true_lang.js.map +1 -1
  78. package/dist/components/collapsible/CollapsibleContent.js.map +1 -1
  79. package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js +7 -3
  80. package/dist/components/collapsible/CollapsibleContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/components/collapsible/CollapsibleGroup.js.map +1 -1
  82. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js +3 -2
  83. package/dist/components/collapsible/CollapsibleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  84. package/dist/components/collapsible/CollapsibleTrigger.js.map +1 -1
  85. package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js +6 -3
  86. package/dist/components/collapsible/CollapsibleTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  87. package/dist/components/combo-box/ComboBox.js.map +1 -1
  88. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js +3 -2
  89. package/dist/components/combo-box/ComboBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/components/date-input/DateInput.js.map +1 -1
  91. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js +13 -12
  92. package/dist/components/date-input/DateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  93. package/dist/components/date-picker/DatePicker.js.map +1 -1
  94. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js +6 -5
  95. package/dist/components/date-picker/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/components/date-range-field/DateRangeField.js.map +1 -1
  97. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js +16 -15
  98. package/dist/components/date-range-field/DateRangeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  99. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  100. package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js +6 -5
  101. package/dist/components/date-range-picker/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
  103. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js +11 -10
  104. package/dist/components/date-time-picker/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/components/input/Input.js.map +1 -1
  106. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js +15 -14
  107. package/dist/components/input/Input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/components/input-otp/InputOTP.js.map +1 -1
  109. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js +5 -4
  110. package/dist/components/input-otp/InputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
  111. package/dist/components/kbd/Kbd.js.map +1 -1
  112. package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js +5 -4
  113. package/dist/components/kbd/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/link/Link.js.map +1 -1
  115. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js +4 -3
  116. package/dist/components/link/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/components/list-box/ListBox.js.map +1 -1
  118. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js +3 -2
  119. package/dist/components/list-box/ListBox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  120. package/dist/components/list-box/ListBoxItem.js.map +1 -1
  121. package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js +4 -3
  122. package/dist/components/list-box/ListBoxItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/components/meter/Meter.js.map +1 -1
  124. package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js +13 -12
  125. package/dist/components/meter/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  126. package/dist/components/number-field/NumberField.js.map +1 -1
  127. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js +7 -6
  128. package/dist/components/number-field/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  129. package/dist/components/progress-bar/ProgressBar.js.map +1 -1
  130. package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js +8 -7
  131. package/dist/components/progress-bar/ProgressBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/components/progress-circle/ProgressCircle.js.map +1 -1
  133. package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js +7 -6
  134. package/dist/components/progress-circle/ProgressCircle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  135. package/dist/components/radio/Radio.js.map +1 -1
  136. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +4 -3
  137. package/dist/components/radio/Radio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/components/range-calendar/RangeCalendar.js.map +1 -1
  139. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js +42 -41
  140. package/dist/components/range-calendar/RangeCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/scroll-shadow/ScrollShadow.js.map +1 -1
  142. package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js +3 -2
  143. package/dist/components/scroll-shadow/ScrollShadow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/components/select/Select.js.map +1 -1
  145. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js +7 -6
  146. package/dist/components/select/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
  147. package/dist/components/skeleton/Skeleton.js.map +1 -1
  148. package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +3 -2
  149. package/dist/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  150. package/dist/components/slider/Slider.js.map +1 -1
  151. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +8 -7
  152. package/dist/components/slider/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/components/splitter/SplitterGroup.js.map +1 -1
  154. package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js +3 -2
  155. package/dist/components/splitter/SplitterGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  156. package/dist/components/splitter/SplitterPanel.js.map +1 -1
  157. package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js +3 -2
  158. package/dist/components/splitter/SplitterPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/components/splitter/SplitterResizeHandle.js.map +1 -1
  160. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js +4 -3
  161. package/dist/components/splitter/SplitterResizeHandle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/stepper/Stepper.js.map +1 -1
  163. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +3 -2
  164. package/dist/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  165. package/dist/components/stepper/StepperContent.js.map +1 -1
  166. package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js +5 -2
  167. package/dist/components/stepper/StepperContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/components/stepper/StepperDescription.js.map +1 -1
  169. package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js +5 -2
  170. package/dist/components/stepper/StepperDescription.vue_vue_type_script_setup_true_lang.js.map +1 -1
  171. package/dist/components/stepper/StepperIndicator.js.map +1 -1
  172. package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js +5 -2
  173. package/dist/components/stepper/StepperIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/components/stepper/StepperItem.js.map +1 -1
  175. package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js +3 -2
  176. package/dist/components/stepper/StepperItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/components/stepper/StepperSeparator.js.map +1 -1
  178. package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js +5 -2
  179. package/dist/components/stepper/StepperSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/components/stepper/StepperTitle.js.map +1 -1
  181. package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js +5 -2
  182. package/dist/components/stepper/StepperTitle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  183. package/dist/components/switch/Switch.js.map +1 -1
  184. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js +5 -4
  185. package/dist/components/switch/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  186. package/dist/components/table/Table.js.map +1 -1
  187. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js +4 -3
  188. package/dist/components/table/Table.vue_vue_type_script_setup_true_lang.js.map +1 -1
  189. package/dist/components/table/TableBody.js.map +1 -1
  190. package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js +6 -3
  191. package/dist/components/table/TableBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  192. package/dist/components/table/TableCell.js.map +1 -1
  193. package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js +6 -3
  194. package/dist/components/table/TableCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/components/table/TableFooter.js.map +1 -1
  196. package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js +5 -2
  197. package/dist/components/table/TableFooter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/components/table/TableHeader.js.map +1 -1
  199. package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js +6 -3
  200. package/dist/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/components/table/TableHeaderCell.js.map +1 -1
  202. package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js +6 -3
  203. package/dist/components/table/TableHeaderCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  204. package/dist/components/table/TableRow.js.map +1 -1
  205. package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js +8 -2
  206. package/dist/components/table/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  207. package/dist/components/table/TableVirtualBody.js.map +1 -1
  208. package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js +6 -4
  209. package/dist/components/table/TableVirtualBody.vue_vue_type_script_setup_true_lang.js.map +1 -1
  210. package/dist/components/tabs/Tab.js.map +1 -1
  211. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js +3 -2
  212. package/dist/components/tabs/Tab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/components/tabs/TabIndicator.js.map +1 -1
  214. package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js +5 -2
  215. package/dist/components/tabs/TabIndicator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/components/tabs/TabList.js.map +1 -1
  217. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js +5 -4
  218. package/dist/components/tabs/TabList.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/components/tabs/TabPanel.js.map +1 -1
  220. package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js +3 -2
  221. package/dist/components/tabs/TabPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  222. package/dist/components/tabs/Tabs.js.map +1 -1
  223. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js +3 -2
  224. package/dist/components/tabs/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/components/textarea/Textarea.js.map +1 -1
  226. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +14 -13
  227. package/dist/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/components/time-field/TimeField.js.map +1 -1
  229. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js +13 -12
  230. package/dist/components/time-field/TimeField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/components/tree/Tree.js.map +1 -1
  232. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js +3 -2
  233. package/dist/components/tree/Tree.vue_vue_type_script_setup_true_lang.js.map +1 -1
  234. package/dist/components/tree/TreeItem.js.map +1 -1
  235. package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js +4 -3
  236. package/dist/components/tree/TreeItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/components/tree/TreeItemToggle.js.map +1 -1
  238. package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js +3 -2
  239. package/dist/components/tree/TreeItemToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  240. package/dist/index.d.ts +797 -173
  241. package/dist/utils/composeClassName.js +3 -3
  242. package/dist/utils/composeClassName.js.map +1 -1
  243. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderCell.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\ndefineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"slotFns.column()\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TableHeaderCell.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\nconst props = defineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n /** Per-slot class overrides */\n classNames?: Partial<{\n column: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
+ import { composeClassName } from "../../utils/composeClassName.js";
1
2
  import { useTableInject } from "./table.context.js";
2
- import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
3
+ import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
4
  import { tableVariants } from "@auronui/styles";
4
5
  //#region src/components/table/TableHeaderCell.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-col-index", "aria-sort"];
@@ -7,15 +8,17 @@ var TableHeaderCell_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
7
8
  __name: "TableHeaderCell",
8
9
  props: {
9
10
  columnIndex: {},
10
- sortDirection: {}
11
+ sortDirection: {},
12
+ classNames: {}
11
13
  },
12
14
  setup(__props) {
15
+ const props = __props;
13
16
  const ctx = useTableInject();
14
17
  const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
15
18
  return (_ctx, _cache) => {
16
19
  return openBlock(), createElementBlock("th", {
17
20
  role: "columnheader",
18
- class: normalizeClass(slotFns.value.column()),
21
+ class: normalizeClass(unref(composeClassName)(slotFns.value.column(), props.classNames?.column)),
19
22
  "data-col-index": __props.columnIndex,
20
23
  "aria-sort": __props.sortDirection
21
24
  }, [renderSlot(_ctx.$slots, "default")], 10, _hoisted_1);
@@ -1 +1 @@
1
- {"version":3,"file":"TableHeaderCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\ndefineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"slotFns.column()\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":";;;;;;;;;;;;EAUA,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAOK,MAAA;IANH,MAAK;IACJ,OAAK,eAAE,QAAA,MAAQ,QAAM,CAAA;IACrB,kBAAgB,QAAA;IAChB,aAAW,QAAA;OAEZ,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA"}
1
+ {"version":3,"file":"TableHeaderCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableHeaderCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\nconst props = defineProps<{\n columnIndex?: number\n sortDirection?: 'ascending' | 'descending' | 'none'\n /** Per-slot class overrides */\n classNames?: Partial<{\n column: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <th\n role=\"columnheader\"\n :class=\"composeClassName(slotFns.column(), props.classNames?.column)\"\n :data-col-index=\"columnIndex\"\n :aria-sort=\"sortDirection\"\n >\n <slot />\n </th>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAMA,MAAM,QAAQ;EASd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAOK,MAAA;IANH,MAAK;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,QAAM,EAAI,MAAM,YAAY,OAAM,CAAA;IAClE,kBAAgB,QAAA;IAChB,aAAW,QAAA;OAEZ,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TableRow.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /** Additional classes to apply to the root element */\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n row: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.class, props.classNames?.row)\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":""}
@@ -1,16 +1,22 @@
1
+ import { composeClassName } from "../../utils/composeClassName.js";
1
2
  import { useTableInject } from "./table.context.js";
2
- import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot } from "vue";
3
+ import { computed, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref } from "vue";
3
4
  import { tableVariants } from "@auronui/styles";
4
5
  //#region src/components/table/TableRow.vue?vue&type=script&setup=true&lang.ts
5
6
  var TableRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
7
  __name: "TableRow",
8
+ props: {
9
+ class: {},
10
+ classNames: {}
11
+ },
7
12
  setup(__props) {
13
+ const props = __props;
8
14
  const ctx = useTableInject();
9
15
  const slotFns = computed(() => tableVariants({ variant: ctx.variant.value }));
10
16
  return (_ctx, _cache) => {
11
17
  return openBlock(), createElementBlock("tr", {
12
18
  role: "row",
13
- class: normalizeClass(slotFns.value.row())
19
+ class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.class, props.classNames?.row))
14
20
  }, [renderSlot(_ctx.$slots, "default")], 2);
15
21
  };
16
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"slotFns.row()\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":";;;;;;;EAOA,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAKK,MAAA;IAJH,MAAK;IACJ,OAAK,eAAE,QAAA,MAAQ,KAAG,CAAA;OAEnB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"TableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableRow.vue"],"sourcesContent":["<!-- Thin public re-export for consumers who want to compose their own body.\n Renders a single tr with role=\"row\" and the row slot style. -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\nimport { composeClassName, type ClassValue } from '../../utils/composeClassName'\n\ninterface Props {\n /** Additional classes to apply to the root element */\n class?: ClassValue\n /** Per-slot class overrides */\n classNames?: Partial<{\n row: ClassValue\n }>\n}\n\nconst props = defineProps<Props>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n</script>\n\n<template>\n <tr\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.class, props.classNames?.row)\"\n >\n <slot />\n </tr>\n</template>\n"],"mappings":";;;;;;;;;;;;EAiBA,MAAM,QAAQ;EAEd,MAAM,MAAM,gBAAe;EAC3B,MAAM,UAAU,eAAe,cAAc,EAAE,SAAS,IAAI,QAAQ,OAAO,CAAC,CAAA;;uBAI1E,mBAKK,MAAA;IAJH,MAAK;IACJ,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,KAAG,EAAI,MAAM,OAAO,MAAM,YAAY,IAAG,CAAA;OAE1E,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableVirtualBody.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"slotFns.body()\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"slotFns.cell()\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TableVirtualBody.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n body: ClassValue\n row: ClassValue\n cell: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"composeClassName(slotFns.body(), props.classNames?.body)\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { composeClassName } from "../../utils/composeClassName.js";
1
2
  import { FlexRender } from "../../node_modules/.pnpm/@tanstack_vue-table@8.21.3_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-table/build/lib/index.js";
2
3
  import { useTableInject } from "./table.context.js";
3
4
  import { useVirtualizer } from "../../node_modules/.pnpm/@tanstack_vue-virtual@3.13.23_vue@3.5.32_typescript@6.0.2_/node_modules/@tanstack/vue-virtual/dist/esm/index.js";
@@ -31,7 +32,8 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
31
32
  props: {
32
33
  scrollElement: {},
33
34
  estimatedRowHeight: {},
34
- overscan: {}
35
+ overscan: {},
36
+ classNames: {}
35
37
  },
36
38
  setup(__props, { expose: __expose }) {
37
39
  const props = __props;
@@ -69,7 +71,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
69
71
  }
70
72
  __expose({ scrollToIndex: (index) => virtualizer.value.scrollToIndex(index, { align: "auto" }) });
71
73
  return (_ctx, _cache) => {
72
- return openBlock(), createElementBlock("tbody", { class: normalizeClass(slotFns.value.body()) }, [
74
+ return openBlock(), createElementBlock("tbody", { class: normalizeClass(unref(composeClassName)(slotFns.value.body(), props.classNames?.body)) }, [
73
75
  paddingTop.value > 0 ? (openBlock(), createElementBlock("tr", _hoisted_1, [createElementVNode("td", {
74
76
  colspan: columnCount.value,
75
77
  style: normalizeStyle({
@@ -82,7 +84,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
82
84
  return openBlock(), createElementBlock("tr", {
83
85
  key: rows.value[vItem.index].id,
84
86
  role: "row",
85
- class: normalizeClass(slotFns.value.row()),
87
+ class: normalizeClass(unref(composeClassName)(slotFns.value.row(), props.classNames?.row)),
86
88
  "aria-rowindex": vItem.index + 1,
87
89
  "aria-selected": unref(ctx).selectionMode.value !== "none" ? rows.value[vItem.index].getIsSelected() : void 0,
88
90
  "data-state": rows.value[vItem.index].getIsSelected() ? "checked" : void 0,
@@ -92,7 +94,7 @@ var TableVirtualBody_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
92
94
  return openBlock(), createElementBlock("td", {
93
95
  key: cell.id,
94
96
  role: "gridcell",
95
- class: normalizeClass(slotFns.value.cell()),
97
+ class: normalizeClass(unref(composeClassName)(slotFns.value.cell(), props.classNames?.cell)),
96
98
  "data-row-index": vItem.index,
97
99
  "data-col-index": colIndex,
98
100
  tabindex: unref(ctx).activeCell.value !== null && unref(ctx).activeCell.value.rowIndex === vItem.index && unref(ctx).activeCell.value.columnIndex === colIndex ? 0 : unref(ctx).activeCell.value === null && vItem.index === 0 && colIndex === 0 ? 0 : -1
@@ -1 +1 @@
1
- {"version":3,"file":"TableVirtualBody.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"slotFns.body()\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"slotFns.row()\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"slotFns.cell()\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableVirtualBody.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/table/TableVirtualBody.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useVirtualizer } from '@tanstack/vue-virtual'\nimport { FlexRender, type Row, type RowData } from '@tanstack/vue-table'\nimport { tableVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTableInject } from './table.context'\n\nconst props = defineProps<{\n scrollElement: HTMLElement | null\n estimatedRowHeight?: number\n overscan?: number\n /**\n * Per-slot class overrides. Each key maps to a named slot in the anatomy;\n * the value is merged with the generated variant classes via `composeClassName`.\n */\n classNames?: Partial<{\n body: ClassValue\n row: ClassValue\n cell: ClassValue\n }>\n}>()\n\nconst ctx = useTableInject()\nconst slotFns = computed(() => tableVariants({ variant: ctx.variant.value }))\n\nconst rows = computed(() => ctx.table.getRowModel().rows)\n\nconst virtualizer = useVirtualizer({\n get count() {\n return rows.value.length\n },\n getScrollElement: () => props.scrollElement,\n estimateSize: () => props.estimatedRowHeight ?? 44,\n overscan: props.overscan ?? 8,\n})\n\nconst virtualItems = computed(() => virtualizer.value.getVirtualItems())\nconst totalSize = computed(() => virtualizer.value.getTotalSize())\n\n// Spacer heights above and below the rendered slice.\n// This is the standard TanStack Virtual table pattern: pad via empty <tr> rows\n// so the <tbody> stays inside <table> (valid HTML) and inherits column widths.\nconst paddingTop = computed(() => {\n const items = virtualItems.value\n return items.length > 0 ? items[0].start : 0\n})\nconst paddingBottom = computed(() => {\n const items = virtualItems.value\n if (items.length === 0) return 0\n return totalSize.value - items[items.length - 1].end\n})\n\nconst columnCount = computed(() => ctx.table.getVisibleLeafColumns().length)\n\nfunction onRowKeydown(row: Row<RowData>, event: KeyboardEvent) {\n if (event.key !== ' ') return\n if (ctx.selectionMode.value === 'none') return\n const target = event.target as HTMLElement\n if (target.tagName === 'INPUT' || target.closest('[role=\"checkbox\"]')) return\n event.preventDefault()\n if (ctx.selectionMode.value === 'single') {\n ctx.table.setRowSelection({ [row.id]: true })\n } else {\n row.toggleSelected()\n }\n}\n\ndefineExpose({\n scrollToIndex: (index: number) =>\n virtualizer.value.scrollToIndex(index, { align: 'auto' }),\n})\n</script>\n\n<template>\n <!--\n Uses <tbody> + spacer <tr> rows so virtualized rows stay inside valid\n <table> structure and inherit column widths from <thead>.\n paddingTop/paddingBottom spacers replace the absolute-positioning approach.\n -->\n <tbody :class=\"composeClassName(slotFns.body(), props.classNames?.body)\">\n <tr\n v-if=\"paddingTop > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingTop}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n <tr\n v-for=\"vItem in virtualItems\"\n :key=\"rows[vItem.index].id\"\n role=\"row\"\n :class=\"composeClassName(slotFns.row(), props.classNames?.row)\"\n :aria-rowindex=\"vItem.index + 1\"\n :aria-selected=\"\n ctx.selectionMode.value !== 'none'\n ? rows[vItem.index].getIsSelected()\n : undefined\n \"\n :data-state=\"rows[vItem.index].getIsSelected() ? 'checked' : undefined\"\n @click=\"(e: MouseEvent) => ctx.handleRowClick(vItem.index, e)\"\n @keydown=\"(e: KeyboardEvent) => onRowKeydown(rows[vItem.index] as Row<RowData>, e)\"\n >\n <td\n v-for=\"(cell, colIndex) in rows[vItem.index].getVisibleCells()\"\n :key=\"cell.id\"\n role=\"gridcell\"\n :class=\"composeClassName(slotFns.cell(), props.classNames?.cell)\"\n :data-row-index=\"vItem.index\"\n :data-col-index=\"colIndex\"\n :tabindex=\"\n ctx.activeCell.value !== null &&\n ctx.activeCell.value.rowIndex === vItem.index &&\n ctx.activeCell.value.columnIndex === colIndex\n ? 0\n : ctx.activeCell.value === null && vItem.index === 0 && colIndex === 0\n ? 0\n : -1\n \"\n >\n <FlexRender\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n </td>\n </tr>\n <tr\n v-if=\"paddingBottom > 0\"\n aria-hidden=\"true\"\n >\n <td\n :colspan=\"columnCount\"\n :style=\"{ height: `${paddingBottom}px`, padding: 0, border: 'none' }\"\n />\n </tr>\n </tbody>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","names":[],"sources":["../../../src/components/tabs/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsTrigger } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsTrigger\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :data-tab-value=\"props.value\"\n :class=\"composeClassName(ctx.slotFns.value.tab(), props.class)\"\n >\n <slot />\n </TabsTrigger>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Tab.js","names":[],"sources":["../../../src/components/tabs/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsTrigger } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: ClassValue\n /** Override classes for individual slots. */\n classNames?: Partial<{\n tab: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsTrigger\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :data-tab-value=\"props.value\"\n :class=\"composeClassName(ctx.slotFns.value.tab(), props.class, props.classNames?.tab)\"\n >\n <slot />\n </TabsTrigger>\n</template>\n"],"mappings":""}
@@ -8,7 +8,8 @@ var Tab_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComp
8
8
  props: {
9
9
  value: {},
10
10
  disabled: { type: Boolean },
11
- class: {}
11
+ class: {},
12
+ classNames: {}
12
13
  },
13
14
  setup(__props) {
14
15
  const props = __props;
@@ -18,7 +19,7 @@ var Tab_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComp
18
19
  value: props.value,
19
20
  disabled: props.disabled,
20
21
  "data-tab-value": props.value,
21
- class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tab(), props.class))
22
+ class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tab(), props.class, props.classNames?.tab))
22
23
  }, {
23
24
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
24
25
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsTrigger } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsTrigger\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :data-tab-value=\"props.value\"\n :class=\"composeClassName(ctx.slotFns.value.tab(), props.class)\"\n >\n <slot />\n </TabsTrigger>\n</template>\n"],"mappings":";;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAMd,MAAM,MAAM,eAAc;;uBAIxB,YAOc,MAAA,YAAA,EAAA;IANX,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,kBAAgB,MAAM;IACtB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,KAAG,EAAI,MAAM,MAAK,CAAA;;2BAErD,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"Tab.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsTrigger } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n disabled?: boolean\n class?: ClassValue\n /** Override classes for individual slots. */\n classNames?: Partial<{\n tab: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsTrigger\n :value=\"props.value\"\n :disabled=\"props.disabled\"\n :data-tab-value=\"props.value\"\n :class=\"composeClassName(ctx.slotFns.value.tab(), props.class, props.classNames?.tab)\"\n >\n <slot />\n </TabsTrigger>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAUd,MAAM,MAAM,eAAc;;uBAIxB,YAOc,MAAA,YAAA,EAAA;IANX,OAAO,MAAM;IACb,UAAU,MAAM;IAChB,kBAAgB,MAAM;IACtB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,KAAG,EAAI,MAAM,OAAO,MAAM,YAAY,IAAG,CAAA;;2BAE5E,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabIndicator.js","names":[],"sources":["../../../src/components/tabs/TabIndicator.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsIndicator } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{ class?: string }>()\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsIndicator :class=\"composeClassName(ctx.slotFns.value.tabIndicator(), props.class)\" />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TabIndicator.js","names":[],"sources":["../../../src/components/tabs/TabIndicator.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsIndicator } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{ tabIndicator: ClassValue }>\n}>()\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsIndicator :class=\"composeClassName(ctx.slotFns.value.tabIndicator(), props.class, props.classNames?.tabIndicator)\" />\n</template>\n"],"mappings":""}
@@ -5,12 +5,15 @@ import { TabsIndicator } from "reka-ui";
5
5
  //#region src/components/tabs/TabIndicator.vue?vue&type=script&setup=true&lang.ts
6
6
  var TabIndicator_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
7
  __name: "TabIndicator",
8
- props: { class: {} },
8
+ props: {
9
+ class: {},
10
+ classNames: {}
11
+ },
9
12
  setup(__props) {
10
13
  const props = __props;
11
14
  const ctx = useTabsInject();
12
15
  return (_ctx, _cache) => {
13
- return openBlock(), createBlock(unref(TabsIndicator), { class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabIndicator(), props.class)) }, null, 8, ["class"]);
16
+ return openBlock(), createBlock(unref(TabsIndicator), { class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabIndicator(), props.class, props.classNames?.tabIndicator)) }, null, 8, ["class"]);
14
17
  };
15
18
  }
16
19
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TabIndicator.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabIndicator.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsIndicator } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{ class?: string }>()\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsIndicator :class=\"composeClassName(ctx.slotFns.value.tabIndicator(), props.class)\" />\n</template>\n"],"mappings":";;;;;;;;;EAKA,MAAM,QAAQ;EACd,MAAM,MAAM,eAAc;;uBAIxB,YAA0F,MAAA,cAAA,EAAA,EAA1E,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,cAAY,EAAI,MAAM,MAAK,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA"}
1
+ {"version":3,"file":"TabIndicator.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabIndicator.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsIndicator } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{ tabIndicator: ClassValue }>\n}>()\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsIndicator :class=\"composeClassName(ctx.slotFns.value.tabIndicator(), props.class, props.classNames?.tabIndicator)\" />\n</template>\n"],"mappings":";;;;;;;;;;;;EAKA,MAAM,QAAQ;EAKd,MAAM,MAAM,eAAc;;uBAIxB,YAA0H,MAAA,cAAA,EAAA,EAA1G,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,cAAY,EAAI,MAAM,OAAO,MAAM,YAAY,aAAY,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.js","names":[],"sources":["../../../src/components/tabs/TabList.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, onMounted, watch } from 'vue'\nimport { useTemplateRef } from 'vue'\nimport { TabsList } from 'reka-ui'\nimport { useResizeObserver, onClickOutside } from '@vueuse/core'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\nimport Button from '../button/Button.vue'\n\nconst props = defineProps<{\n loop?: boolean\n overflow?: 'arrows' | 'dropdown'\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n\n// ── Arrows mode ─────────────────────────────────────────────────────────────\nconst scrollWrapperEl = useTemplateRef<HTMLElement>('scrollWrapperEl')\nconst canScrollLeft = ref(false)\nconst canScrollRight = ref(false)\n\nfunction updateScrollButtons() {\n const el = scrollWrapperEl.value\n if (!el) { canScrollLeft.value = false; canScrollRight.value = false; return }\n canScrollLeft.value = el.scrollLeft > 1\n canScrollRight.value = el.scrollLeft + el.clientWidth < el.scrollWidth - 1\n}\n\nfunction scrollTabs(dir: 'left' | 'right') {\n const el = scrollWrapperEl.value\n if (!el) return\n el.scrollBy({ left: dir === 'left' ? -200 : 200, behavior: 'smooth' })\n // Poll briefly after smooth scroll starts so button states update\n setTimeout(updateScrollButtons, 150)\n setTimeout(updateScrollButtons, 350)\n}\n\nwatch(scrollWrapperEl, (el, oldEl) => {\n if (oldEl) oldEl.removeEventListener('scroll', updateScrollButtons)\n if (el) {\n el.addEventListener('scroll', updateScrollButtons, { passive: true })\n nextTick(updateScrollButtons)\n }\n}, { immediate: true })\n\nuseResizeObserver(scrollWrapperEl, () => nextTick(updateScrollButtons))\n\n// ── Dropdown mode ────────────────────────────────────────────────────────────\ninterface OverflowTab {\n value: string\n label: string\n disabled: boolean\n}\n\nconst containerEl = useTemplateRef<HTMLElement>('containerEl')\nconst dropdownEl = useTemplateRef<HTMLElement>('dropdownEl')\n\nconst hiddenTabs = ref<OverflowTab[]>([])\nconst dropdownOpen = ref(false)\nconst hasOverflow = computed(() => hiddenTabs.value.length > 0)\n\nonClickOutside(dropdownEl, () => { dropdownOpen.value = false })\n\nfunction computeOverflow() {\n if (!containerEl.value) return\n\n const allTabs = Array.from(\n containerEl.value.querySelectorAll('[data-tab-value]'),\n ) as HTMLElement[]\n\n // Reveal all tabs first\n allTabs.forEach(t => t.removeAttribute('data-overflow-hidden'))\n\n // Tabs use w-full and shrink to share the container width, so offsetWidth after\n // a normal render would be containerWidth/n — useless for overflow detection.\n // Force each tab to its natural content width for measurement only (no paint flash:\n // all DOM reads/writes happen synchronously within this JS task before the next frame).\n const listEl = containerEl.value.querySelector('[role=\"tablist\"]') as HTMLElement | null\n if (listEl) {\n listEl.style.overflow = 'visible'\n allTabs.forEach(t => { t.style.flexShrink = '0'; t.style.width = 'auto' })\n void listEl.offsetWidth // force reflow so offsetWidth reads below are accurate\n }\n\n // Measure the more button's real width by temporarily revealing its wrapper.\n // The wrapper is display:none when there's no overflow, so we can't rely on a\n // pre-measured value — measure it here while the (always-visible) container holds it.\n let moreWidth = 0\n const moreEl = dropdownEl.value\n if (moreEl) {\n const prevDisplay = moreEl.style.display\n moreEl.style.display = 'flex'\n void moreEl.offsetWidth\n moreWidth = moreEl.offsetWidth\n moreEl.style.display = prevDisplay\n }\n\n // clientWidth includes the container's horizontal padding; the flex children only\n // get the content box. Subtract padding so measurements compare against real space.\n const cs = getComputedStyle(containerEl.value)\n const padX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const gap = parseFloat(cs.columnGap) || 0\n const contentWidth = containerEl.value.clientWidth - padX\n\n const tabWidths = allTabs.map(t => t.offsetWidth)\n const totalWidth = tabWidths.reduce((sum, w) => sum + w, 0)\n\n // Restore layout before any early-return so tabs always look correct\n if (listEl) {\n listEl.style.overflow = ''\n allTabs.forEach(t => { t.style.flexShrink = ''; t.style.width = '' })\n }\n\n if (totalWidth <= contentWidth) {\n hiddenTabs.value = []\n return\n }\n\n // When the more button is shown it sits beside the clipped list, separated by `gap`.\n // Reserve its width + the gap (+1px sub-pixel safety) so the last visible tab can\n // never extend under the button.\n const available = contentWidth - moreWidth - gap - 1\n\n let accumulated = 0\n const newHidden: OverflowTab[] = []\n const visibleEls: HTMLElement[] = []\n\n for (let i = 0; i < allTabs.length; i++) {\n const tab = allTabs[i]\n const w = tabWidths[i]\n if (accumulated + w <= available) {\n accumulated += w\n visibleEls.push(tab)\n } else {\n newHidden.push({\n value: tab.getAttribute('data-tab-value') ?? '',\n label: tab.textContent?.trim() ?? '',\n disabled: tab.hasAttribute('data-disabled') || tab.getAttribute('aria-disabled') === 'true',\n })\n tab.setAttribute('data-overflow-hidden', '')\n }\n }\n\n // If the active tab ended up hidden, swap it with the last visible tab\n const activeValue = ctx.currentValue.value\n if (activeValue) {\n const hiddenActiveIdx = newHidden.findIndex(t => t.value === activeValue)\n if (hiddenActiveIdx !== -1 && visibleEls.length > 0) {\n const displacedEl = visibleEls[visibleEls.length - 1]\n const activeEl = allTabs.find(t => t.getAttribute('data-tab-value') === activeValue)\n\n if (displacedEl && activeEl) {\n // Swap: make displaced tab hidden, active tab visible\n displacedEl.setAttribute('data-overflow-hidden', '')\n activeEl.removeAttribute('data-overflow-hidden')\n\n const displaced: OverflowTab = {\n value: displacedEl.getAttribute('data-tab-value') ?? '',\n label: displacedEl.textContent?.trim() ?? '',\n disabled: displacedEl.hasAttribute('data-disabled') || displacedEl.getAttribute('aria-disabled') === 'true',\n }\n newHidden.splice(hiddenActiveIdx, 1)\n newHidden.unshift(displaced)\n }\n }\n }\n\n hiddenTabs.value = newHidden\n}\n\nuseResizeObserver(containerEl, () => nextTick(computeOverflow))\nonMounted(() => {\n nextTick(computeOverflow)\n})\n\n// Recompute when the active tab changes so the active tab is always visible\nwatch(() => ctx.currentValue.value, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\n// Safety re-check when overflow toggles. computeOverflow already reserves the more\n// button's width up front, so this is idempotent — it just guards against layout\n// settling (e.g. a scrollbar appearing) on the false→true transition.\nwatch(hasOverflow, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\nfunction selectOverflowTab(value: string) {\n ctx.changeTab(value)\n dropdownOpen.value = false\n}\n</script>\n\n<template>\n <!-- ── Default (no overflow behaviour) ───────────────────────────────────── -->\n <TabsList\n v-if=\"!props.overflow\"\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), props.class)\"\n >\n <slot />\n </TabsList>\n\n <!-- ── Arrows mode ────────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'arrows'\"\n class=\"tabs__list-container tabs__list-container--arrows\"\n :class=\"{ 'has-left': canScrollLeft, 'has-right': canScrollRight }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--left', canScrollLeft && 'is-visible')\"\n aria-label=\"Scroll tabs left\"\n tabindex=\"-1\"\n @click=\"scrollTabs('left')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 11L5 7L9 3\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div ref=\"scrollWrapperEl\" class=\"tabs__scroll-wrapper\">\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--scroll', props.class)\"\n >\n <slot />\n </TabsList>\n </div>\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--right', canScrollRight && 'is-visible')\"\n aria-label=\"Scroll tabs right\"\n tabindex=\"-1\"\n @click=\"scrollTabs('right')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n </div>\n\n <!-- ── Dropdown mode ──────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'dropdown'\"\n ref=\"containerEl\"\n class=\"tabs__list-container tabs__list-container--dropdown\"\n >\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--clipped', props.class)\"\n >\n <slot />\n </TabsList>\n\n <!-- Always rendered so offsetWidth is measurable; visibility toggled via CSS -->\n <div\n ref=\"dropdownEl\"\n class=\"tabs__more\"\n :class=\"{ 'tabs__more--visible': hasOverflow }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n class=\"tabs__more-btn\"\n :aria-expanded=\"dropdownOpen\"\n aria-haspopup=\"menu\"\n @click=\"dropdownOpen = !dropdownOpen\"\n >\n +{{ hiddenTabs.length }}\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 4L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div v-if=\"dropdownOpen\" class=\"tabs__overflow-menu\" role=\"menu\">\n <Button\n v-for=\"tab in hiddenTabs\"\n :key=\"tab.value\"\n variant=\"ghost\"\n radius=\"lg\"\n class=\"tabs__overflow-item\"\n role=\"menuitem\"\n :disabled=\"tab.disabled\"\n @click=\"selectOverflowTab(tab.value)\"\n >\n {{ tab.label }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TabList.js","names":[],"sources":["../../../src/components/tabs/TabList.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, onMounted, watch } from 'vue'\nimport { useTemplateRef } from 'vue'\nimport { TabsList } from 'reka-ui'\nimport { useResizeObserver, onClickOutside } from '@vueuse/core'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\nimport Button from '../button/Button.vue'\n\nconst props = defineProps<{\n loop?: boolean\n overflow?: 'arrows' | 'dropdown'\n class?: ClassValue\n /** Override classes on individual slots */\n classNames?: Partial<{\n tabList: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n\n// ── Arrows mode ─────────────────────────────────────────────────────────────\nconst scrollWrapperEl = useTemplateRef<HTMLElement>('scrollWrapperEl')\nconst canScrollLeft = ref(false)\nconst canScrollRight = ref(false)\n\nfunction updateScrollButtons() {\n const el = scrollWrapperEl.value\n if (!el) { canScrollLeft.value = false; canScrollRight.value = false; return }\n canScrollLeft.value = el.scrollLeft > 1\n canScrollRight.value = el.scrollLeft + el.clientWidth < el.scrollWidth - 1\n}\n\nfunction scrollTabs(dir: 'left' | 'right') {\n const el = scrollWrapperEl.value\n if (!el) return\n el.scrollBy({ left: dir === 'left' ? -200 : 200, behavior: 'smooth' })\n // Poll briefly after smooth scroll starts so button states update\n setTimeout(updateScrollButtons, 150)\n setTimeout(updateScrollButtons, 350)\n}\n\nwatch(scrollWrapperEl, (el, oldEl) => {\n if (oldEl) oldEl.removeEventListener('scroll', updateScrollButtons)\n if (el) {\n el.addEventListener('scroll', updateScrollButtons, { passive: true })\n nextTick(updateScrollButtons)\n }\n}, { immediate: true })\n\nuseResizeObserver(scrollWrapperEl, () => nextTick(updateScrollButtons))\n\n// ── Dropdown mode ────────────────────────────────────────────────────────────\ninterface OverflowTab {\n value: string\n label: string\n disabled: boolean\n}\n\nconst containerEl = useTemplateRef<HTMLElement>('containerEl')\nconst dropdownEl = useTemplateRef<HTMLElement>('dropdownEl')\n\nconst hiddenTabs = ref<OverflowTab[]>([])\nconst dropdownOpen = ref(false)\nconst hasOverflow = computed(() => hiddenTabs.value.length > 0)\n\nonClickOutside(dropdownEl, () => { dropdownOpen.value = false })\n\nfunction computeOverflow() {\n if (!containerEl.value) return\n\n const allTabs = Array.from(\n containerEl.value.querySelectorAll('[data-tab-value]'),\n ) as HTMLElement[]\n\n // Reveal all tabs first\n allTabs.forEach(t => t.removeAttribute('data-overflow-hidden'))\n\n // Tabs use w-full and shrink to share the container width, so offsetWidth after\n // a normal render would be containerWidth/n — useless for overflow detection.\n // Force each tab to its natural content width for measurement only (no paint flash:\n // all DOM reads/writes happen synchronously within this JS task before the next frame).\n const listEl = containerEl.value.querySelector('[role=\"tablist\"]') as HTMLElement | null\n if (listEl) {\n listEl.style.overflow = 'visible'\n allTabs.forEach(t => { t.style.flexShrink = '0'; t.style.width = 'auto' })\n void listEl.offsetWidth // force reflow so offsetWidth reads below are accurate\n }\n\n // Measure the more button's real width by temporarily revealing its wrapper.\n // The wrapper is display:none when there's no overflow, so we can't rely on a\n // pre-measured value — measure it here while the (always-visible) container holds it.\n let moreWidth = 0\n const moreEl = dropdownEl.value\n if (moreEl) {\n const prevDisplay = moreEl.style.display\n moreEl.style.display = 'flex'\n void moreEl.offsetWidth\n moreWidth = moreEl.offsetWidth\n moreEl.style.display = prevDisplay\n }\n\n // clientWidth includes the container's horizontal padding; the flex children only\n // get the content box. Subtract padding so measurements compare against real space.\n const cs = getComputedStyle(containerEl.value)\n const padX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const gap = parseFloat(cs.columnGap) || 0\n const contentWidth = containerEl.value.clientWidth - padX\n\n const tabWidths = allTabs.map(t => t.offsetWidth)\n const totalWidth = tabWidths.reduce((sum, w) => sum + w, 0)\n\n // Restore layout before any early-return so tabs always look correct\n if (listEl) {\n listEl.style.overflow = ''\n allTabs.forEach(t => { t.style.flexShrink = ''; t.style.width = '' })\n }\n\n if (totalWidth <= contentWidth) {\n hiddenTabs.value = []\n return\n }\n\n // When the more button is shown it sits beside the clipped list, separated by `gap`.\n // Reserve its width + the gap (+1px sub-pixel safety) so the last visible tab can\n // never extend under the button.\n const available = contentWidth - moreWidth - gap - 1\n\n let accumulated = 0\n const newHidden: OverflowTab[] = []\n const visibleEls: HTMLElement[] = []\n\n for (let i = 0; i < allTabs.length; i++) {\n const tab = allTabs[i]\n const w = tabWidths[i]\n if (accumulated + w <= available) {\n accumulated += w\n visibleEls.push(tab)\n } else {\n newHidden.push({\n value: tab.getAttribute('data-tab-value') ?? '',\n label: tab.textContent?.trim() ?? '',\n disabled: tab.hasAttribute('data-disabled') || tab.getAttribute('aria-disabled') === 'true',\n })\n tab.setAttribute('data-overflow-hidden', '')\n }\n }\n\n // If the active tab ended up hidden, swap it with the last visible tab\n const activeValue = ctx.currentValue.value\n if (activeValue) {\n const hiddenActiveIdx = newHidden.findIndex(t => t.value === activeValue)\n if (hiddenActiveIdx !== -1 && visibleEls.length > 0) {\n const displacedEl = visibleEls[visibleEls.length - 1]\n const activeEl = allTabs.find(t => t.getAttribute('data-tab-value') === activeValue)\n\n if (displacedEl && activeEl) {\n // Swap: make displaced tab hidden, active tab visible\n displacedEl.setAttribute('data-overflow-hidden', '')\n activeEl.removeAttribute('data-overflow-hidden')\n\n const displaced: OverflowTab = {\n value: displacedEl.getAttribute('data-tab-value') ?? '',\n label: displacedEl.textContent?.trim() ?? '',\n disabled: displacedEl.hasAttribute('data-disabled') || displacedEl.getAttribute('aria-disabled') === 'true',\n }\n newHidden.splice(hiddenActiveIdx, 1)\n newHidden.unshift(displaced)\n }\n }\n }\n\n hiddenTabs.value = newHidden\n}\n\nuseResizeObserver(containerEl, () => nextTick(computeOverflow))\nonMounted(() => {\n nextTick(computeOverflow)\n})\n\n// Recompute when the active tab changes so the active tab is always visible\nwatch(() => ctx.currentValue.value, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\n// Safety re-check when overflow toggles. computeOverflow already reserves the more\n// button's width up front, so this is idempotent — it just guards against layout\n// settling (e.g. a scrollbar appearing) on the false→true transition.\nwatch(hasOverflow, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\nfunction selectOverflowTab(value: string) {\n ctx.changeTab(value)\n dropdownOpen.value = false\n}\n</script>\n\n<template>\n <!-- ── Default (no overflow behaviour) ───────────────────────────────────── -->\n <TabsList\n v-if=\"!props.overflow\"\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n\n <!-- ── Arrows mode ────────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'arrows'\"\n class=\"tabs__list-container tabs__list-container--arrows\"\n :class=\"{ 'has-left': canScrollLeft, 'has-right': canScrollRight }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--left', canScrollLeft && 'is-visible')\"\n aria-label=\"Scroll tabs left\"\n tabindex=\"-1\"\n @click=\"scrollTabs('left')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 11L5 7L9 3\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div ref=\"scrollWrapperEl\" class=\"tabs__scroll-wrapper\">\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--scroll', props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n </div>\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--right', canScrollRight && 'is-visible')\"\n aria-label=\"Scroll tabs right\"\n tabindex=\"-1\"\n @click=\"scrollTabs('right')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n </div>\n\n <!-- ── Dropdown mode ──────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'dropdown'\"\n ref=\"containerEl\"\n class=\"tabs__list-container tabs__list-container--dropdown\"\n >\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--clipped', props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n\n <!-- Always rendered so offsetWidth is measurable; visibility toggled via CSS -->\n <div\n ref=\"dropdownEl\"\n class=\"tabs__more\"\n :class=\"{ 'tabs__more--visible': hasOverflow }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n class=\"tabs__more-btn\"\n :aria-expanded=\"dropdownOpen\"\n aria-haspopup=\"menu\"\n @click=\"dropdownOpen = !dropdownOpen\"\n >\n +{{ hiddenTabs.length }}\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 4L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div v-if=\"dropdownOpen\" class=\"tabs__overflow-menu\" role=\"menu\">\n <Button\n v-for=\"tab in hiddenTabs\"\n :key=\"tab.value\"\n variant=\"ghost\"\n radius=\"lg\"\n class=\"tabs__overflow-item\"\n role=\"menuitem\"\n :disabled=\"tab.disabled\"\n @click=\"selectOverflowTab(tab.value)\"\n >\n {{ tab.label }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -15,7 +15,8 @@ var TabList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
15
15
  props: {
16
16
  loop: { type: Boolean },
17
17
  overflow: {},
18
- class: {}
18
+ class: {},
19
+ classNames: {}
19
20
  },
20
21
  setup(__props) {
21
22
  const props = __props;
@@ -156,7 +157,7 @@ var TabList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
156
157
  return !props.overflow ? (openBlock(), createBlock(unref(TabsList), {
157
158
  key: 0,
158
159
  loop: props.loop ?? true,
159
- class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), props.class))
160
+ class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), props.class, props.classNames?.tabList))
160
161
  }, {
161
162
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
162
163
  _: 3
@@ -198,7 +199,7 @@ var TabList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
198
199
  class: "tabs__scroll-wrapper"
199
200
  }, [createVNode(unref(TabsList), {
200
201
  loop: props.loop ?? true,
201
- class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), "tabs__list--scroll", props.class))
202
+ class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), "tabs__list--scroll", props.class, props.classNames?.tabList))
202
203
  }, {
203
204
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
204
205
  _: 3
@@ -235,7 +236,7 @@ var TabList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
235
236
  class: "tabs__list-container tabs__list-container--dropdown"
236
237
  }, [createVNode(unref(TabsList), {
237
238
  loop: props.loop ?? true,
238
- class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), "tabs__list--clipped", props.class))
239
+ class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabList(), "tabs__list--clipped", props.class, props.classNames?.tabList))
239
240
  }, {
240
241
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
241
242
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"TabList.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabList.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, onMounted, watch } from 'vue'\nimport { useTemplateRef } from 'vue'\nimport { TabsList } from 'reka-ui'\nimport { useResizeObserver, onClickOutside } from '@vueuse/core'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\nimport Button from '../button/Button.vue'\n\nconst props = defineProps<{\n loop?: boolean\n overflow?: 'arrows' | 'dropdown'\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n\n// ── Arrows mode ─────────────────────────────────────────────────────────────\nconst scrollWrapperEl = useTemplateRef<HTMLElement>('scrollWrapperEl')\nconst canScrollLeft = ref(false)\nconst canScrollRight = ref(false)\n\nfunction updateScrollButtons() {\n const el = scrollWrapperEl.value\n if (!el) { canScrollLeft.value = false; canScrollRight.value = false; return }\n canScrollLeft.value = el.scrollLeft > 1\n canScrollRight.value = el.scrollLeft + el.clientWidth < el.scrollWidth - 1\n}\n\nfunction scrollTabs(dir: 'left' | 'right') {\n const el = scrollWrapperEl.value\n if (!el) return\n el.scrollBy({ left: dir === 'left' ? -200 : 200, behavior: 'smooth' })\n // Poll briefly after smooth scroll starts so button states update\n setTimeout(updateScrollButtons, 150)\n setTimeout(updateScrollButtons, 350)\n}\n\nwatch(scrollWrapperEl, (el, oldEl) => {\n if (oldEl) oldEl.removeEventListener('scroll', updateScrollButtons)\n if (el) {\n el.addEventListener('scroll', updateScrollButtons, { passive: true })\n nextTick(updateScrollButtons)\n }\n}, { immediate: true })\n\nuseResizeObserver(scrollWrapperEl, () => nextTick(updateScrollButtons))\n\n// ── Dropdown mode ────────────────────────────────────────────────────────────\ninterface OverflowTab {\n value: string\n label: string\n disabled: boolean\n}\n\nconst containerEl = useTemplateRef<HTMLElement>('containerEl')\nconst dropdownEl = useTemplateRef<HTMLElement>('dropdownEl')\n\nconst hiddenTabs = ref<OverflowTab[]>([])\nconst dropdownOpen = ref(false)\nconst hasOverflow = computed(() => hiddenTabs.value.length > 0)\n\nonClickOutside(dropdownEl, () => { dropdownOpen.value = false })\n\nfunction computeOverflow() {\n if (!containerEl.value) return\n\n const allTabs = Array.from(\n containerEl.value.querySelectorAll('[data-tab-value]'),\n ) as HTMLElement[]\n\n // Reveal all tabs first\n allTabs.forEach(t => t.removeAttribute('data-overflow-hidden'))\n\n // Tabs use w-full and shrink to share the container width, so offsetWidth after\n // a normal render would be containerWidth/n — useless for overflow detection.\n // Force each tab to its natural content width for measurement only (no paint flash:\n // all DOM reads/writes happen synchronously within this JS task before the next frame).\n const listEl = containerEl.value.querySelector('[role=\"tablist\"]') as HTMLElement | null\n if (listEl) {\n listEl.style.overflow = 'visible'\n allTabs.forEach(t => { t.style.flexShrink = '0'; t.style.width = 'auto' })\n void listEl.offsetWidth // force reflow so offsetWidth reads below are accurate\n }\n\n // Measure the more button's real width by temporarily revealing its wrapper.\n // The wrapper is display:none when there's no overflow, so we can't rely on a\n // pre-measured value — measure it here while the (always-visible) container holds it.\n let moreWidth = 0\n const moreEl = dropdownEl.value\n if (moreEl) {\n const prevDisplay = moreEl.style.display\n moreEl.style.display = 'flex'\n void moreEl.offsetWidth\n moreWidth = moreEl.offsetWidth\n moreEl.style.display = prevDisplay\n }\n\n // clientWidth includes the container's horizontal padding; the flex children only\n // get the content box. Subtract padding so measurements compare against real space.\n const cs = getComputedStyle(containerEl.value)\n const padX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const gap = parseFloat(cs.columnGap) || 0\n const contentWidth = containerEl.value.clientWidth - padX\n\n const tabWidths = allTabs.map(t => t.offsetWidth)\n const totalWidth = tabWidths.reduce((sum, w) => sum + w, 0)\n\n // Restore layout before any early-return so tabs always look correct\n if (listEl) {\n listEl.style.overflow = ''\n allTabs.forEach(t => { t.style.flexShrink = ''; t.style.width = '' })\n }\n\n if (totalWidth <= contentWidth) {\n hiddenTabs.value = []\n return\n }\n\n // When the more button is shown it sits beside the clipped list, separated by `gap`.\n // Reserve its width + the gap (+1px sub-pixel safety) so the last visible tab can\n // never extend under the button.\n const available = contentWidth - moreWidth - gap - 1\n\n let accumulated = 0\n const newHidden: OverflowTab[] = []\n const visibleEls: HTMLElement[] = []\n\n for (let i = 0; i < allTabs.length; i++) {\n const tab = allTabs[i]\n const w = tabWidths[i]\n if (accumulated + w <= available) {\n accumulated += w\n visibleEls.push(tab)\n } else {\n newHidden.push({\n value: tab.getAttribute('data-tab-value') ?? '',\n label: tab.textContent?.trim() ?? '',\n disabled: tab.hasAttribute('data-disabled') || tab.getAttribute('aria-disabled') === 'true',\n })\n tab.setAttribute('data-overflow-hidden', '')\n }\n }\n\n // If the active tab ended up hidden, swap it with the last visible tab\n const activeValue = ctx.currentValue.value\n if (activeValue) {\n const hiddenActiveIdx = newHidden.findIndex(t => t.value === activeValue)\n if (hiddenActiveIdx !== -1 && visibleEls.length > 0) {\n const displacedEl = visibleEls[visibleEls.length - 1]\n const activeEl = allTabs.find(t => t.getAttribute('data-tab-value') === activeValue)\n\n if (displacedEl && activeEl) {\n // Swap: make displaced tab hidden, active tab visible\n displacedEl.setAttribute('data-overflow-hidden', '')\n activeEl.removeAttribute('data-overflow-hidden')\n\n const displaced: OverflowTab = {\n value: displacedEl.getAttribute('data-tab-value') ?? '',\n label: displacedEl.textContent?.trim() ?? '',\n disabled: displacedEl.hasAttribute('data-disabled') || displacedEl.getAttribute('aria-disabled') === 'true',\n }\n newHidden.splice(hiddenActiveIdx, 1)\n newHidden.unshift(displaced)\n }\n }\n }\n\n hiddenTabs.value = newHidden\n}\n\nuseResizeObserver(containerEl, () => nextTick(computeOverflow))\nonMounted(() => {\n nextTick(computeOverflow)\n})\n\n// Recompute when the active tab changes so the active tab is always visible\nwatch(() => ctx.currentValue.value, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\n// Safety re-check when overflow toggles. computeOverflow already reserves the more\n// button's width up front, so this is idempotent — it just guards against layout\n// settling (e.g. a scrollbar appearing) on the false→true transition.\nwatch(hasOverflow, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\nfunction selectOverflowTab(value: string) {\n ctx.changeTab(value)\n dropdownOpen.value = false\n}\n</script>\n\n<template>\n <!-- ── Default (no overflow behaviour) ───────────────────────────────────── -->\n <TabsList\n v-if=\"!props.overflow\"\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), props.class)\"\n >\n <slot />\n </TabsList>\n\n <!-- ── Arrows mode ────────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'arrows'\"\n class=\"tabs__list-container tabs__list-container--arrows\"\n :class=\"{ 'has-left': canScrollLeft, 'has-right': canScrollRight }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--left', canScrollLeft && 'is-visible')\"\n aria-label=\"Scroll tabs left\"\n tabindex=\"-1\"\n @click=\"scrollTabs('left')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 11L5 7L9 3\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div ref=\"scrollWrapperEl\" class=\"tabs__scroll-wrapper\">\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--scroll', props.class)\"\n >\n <slot />\n </TabsList>\n </div>\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--right', canScrollRight && 'is-visible')\"\n aria-label=\"Scroll tabs right\"\n tabindex=\"-1\"\n @click=\"scrollTabs('right')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n </div>\n\n <!-- ── Dropdown mode ──────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'dropdown'\"\n ref=\"containerEl\"\n class=\"tabs__list-container tabs__list-container--dropdown\"\n >\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--clipped', props.class)\"\n >\n <slot />\n </TabsList>\n\n <!-- Always rendered so offsetWidth is measurable; visibility toggled via CSS -->\n <div\n ref=\"dropdownEl\"\n class=\"tabs__more\"\n :class=\"{ 'tabs__more--visible': hasOverflow }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n class=\"tabs__more-btn\"\n :aria-expanded=\"dropdownOpen\"\n aria-haspopup=\"menu\"\n @click=\"dropdownOpen = !dropdownOpen\"\n >\n +{{ hiddenTabs.length }}\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 4L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div v-if=\"dropdownOpen\" class=\"tabs__overflow-menu\" role=\"menu\">\n <Button\n v-for=\"tab in hiddenTabs\"\n :key=\"tab.value\"\n variant=\"ghost\"\n radius=\"lg\"\n class=\"tabs__overflow-item\"\n role=\"menuitem\"\n :disabled=\"tab.disabled\"\n @click=\"selectOverflowTab(tab.value)\"\n >\n {{ tab.label }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"TabList.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabList.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, nextTick, onMounted, watch } from 'vue'\nimport { useTemplateRef } from 'vue'\nimport { TabsList } from 'reka-ui'\nimport { useResizeObserver, onClickOutside } from '@vueuse/core'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\nimport Button from '../button/Button.vue'\n\nconst props = defineProps<{\n loop?: boolean\n overflow?: 'arrows' | 'dropdown'\n class?: ClassValue\n /** Override classes on individual slots */\n classNames?: Partial<{\n tabList: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n\n// ── Arrows mode ─────────────────────────────────────────────────────────────\nconst scrollWrapperEl = useTemplateRef<HTMLElement>('scrollWrapperEl')\nconst canScrollLeft = ref(false)\nconst canScrollRight = ref(false)\n\nfunction updateScrollButtons() {\n const el = scrollWrapperEl.value\n if (!el) { canScrollLeft.value = false; canScrollRight.value = false; return }\n canScrollLeft.value = el.scrollLeft > 1\n canScrollRight.value = el.scrollLeft + el.clientWidth < el.scrollWidth - 1\n}\n\nfunction scrollTabs(dir: 'left' | 'right') {\n const el = scrollWrapperEl.value\n if (!el) return\n el.scrollBy({ left: dir === 'left' ? -200 : 200, behavior: 'smooth' })\n // Poll briefly after smooth scroll starts so button states update\n setTimeout(updateScrollButtons, 150)\n setTimeout(updateScrollButtons, 350)\n}\n\nwatch(scrollWrapperEl, (el, oldEl) => {\n if (oldEl) oldEl.removeEventListener('scroll', updateScrollButtons)\n if (el) {\n el.addEventListener('scroll', updateScrollButtons, { passive: true })\n nextTick(updateScrollButtons)\n }\n}, { immediate: true })\n\nuseResizeObserver(scrollWrapperEl, () => nextTick(updateScrollButtons))\n\n// ── Dropdown mode ────────────────────────────────────────────────────────────\ninterface OverflowTab {\n value: string\n label: string\n disabled: boolean\n}\n\nconst containerEl = useTemplateRef<HTMLElement>('containerEl')\nconst dropdownEl = useTemplateRef<HTMLElement>('dropdownEl')\n\nconst hiddenTabs = ref<OverflowTab[]>([])\nconst dropdownOpen = ref(false)\nconst hasOverflow = computed(() => hiddenTabs.value.length > 0)\n\nonClickOutside(dropdownEl, () => { dropdownOpen.value = false })\n\nfunction computeOverflow() {\n if (!containerEl.value) return\n\n const allTabs = Array.from(\n containerEl.value.querySelectorAll('[data-tab-value]'),\n ) as HTMLElement[]\n\n // Reveal all tabs first\n allTabs.forEach(t => t.removeAttribute('data-overflow-hidden'))\n\n // Tabs use w-full and shrink to share the container width, so offsetWidth after\n // a normal render would be containerWidth/n — useless for overflow detection.\n // Force each tab to its natural content width for measurement only (no paint flash:\n // all DOM reads/writes happen synchronously within this JS task before the next frame).\n const listEl = containerEl.value.querySelector('[role=\"tablist\"]') as HTMLElement | null\n if (listEl) {\n listEl.style.overflow = 'visible'\n allTabs.forEach(t => { t.style.flexShrink = '0'; t.style.width = 'auto' })\n void listEl.offsetWidth // force reflow so offsetWidth reads below are accurate\n }\n\n // Measure the more button's real width by temporarily revealing its wrapper.\n // The wrapper is display:none when there's no overflow, so we can't rely on a\n // pre-measured value — measure it here while the (always-visible) container holds it.\n let moreWidth = 0\n const moreEl = dropdownEl.value\n if (moreEl) {\n const prevDisplay = moreEl.style.display\n moreEl.style.display = 'flex'\n void moreEl.offsetWidth\n moreWidth = moreEl.offsetWidth\n moreEl.style.display = prevDisplay\n }\n\n // clientWidth includes the container's horizontal padding; the flex children only\n // get the content box. Subtract padding so measurements compare against real space.\n const cs = getComputedStyle(containerEl.value)\n const padX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const gap = parseFloat(cs.columnGap) || 0\n const contentWidth = containerEl.value.clientWidth - padX\n\n const tabWidths = allTabs.map(t => t.offsetWidth)\n const totalWidth = tabWidths.reduce((sum, w) => sum + w, 0)\n\n // Restore layout before any early-return so tabs always look correct\n if (listEl) {\n listEl.style.overflow = ''\n allTabs.forEach(t => { t.style.flexShrink = ''; t.style.width = '' })\n }\n\n if (totalWidth <= contentWidth) {\n hiddenTabs.value = []\n return\n }\n\n // When the more button is shown it sits beside the clipped list, separated by `gap`.\n // Reserve its width + the gap (+1px sub-pixel safety) so the last visible tab can\n // never extend under the button.\n const available = contentWidth - moreWidth - gap - 1\n\n let accumulated = 0\n const newHidden: OverflowTab[] = []\n const visibleEls: HTMLElement[] = []\n\n for (let i = 0; i < allTabs.length; i++) {\n const tab = allTabs[i]\n const w = tabWidths[i]\n if (accumulated + w <= available) {\n accumulated += w\n visibleEls.push(tab)\n } else {\n newHidden.push({\n value: tab.getAttribute('data-tab-value') ?? '',\n label: tab.textContent?.trim() ?? '',\n disabled: tab.hasAttribute('data-disabled') || tab.getAttribute('aria-disabled') === 'true',\n })\n tab.setAttribute('data-overflow-hidden', '')\n }\n }\n\n // If the active tab ended up hidden, swap it with the last visible tab\n const activeValue = ctx.currentValue.value\n if (activeValue) {\n const hiddenActiveIdx = newHidden.findIndex(t => t.value === activeValue)\n if (hiddenActiveIdx !== -1 && visibleEls.length > 0) {\n const displacedEl = visibleEls[visibleEls.length - 1]\n const activeEl = allTabs.find(t => t.getAttribute('data-tab-value') === activeValue)\n\n if (displacedEl && activeEl) {\n // Swap: make displaced tab hidden, active tab visible\n displacedEl.setAttribute('data-overflow-hidden', '')\n activeEl.removeAttribute('data-overflow-hidden')\n\n const displaced: OverflowTab = {\n value: displacedEl.getAttribute('data-tab-value') ?? '',\n label: displacedEl.textContent?.trim() ?? '',\n disabled: displacedEl.hasAttribute('data-disabled') || displacedEl.getAttribute('aria-disabled') === 'true',\n }\n newHidden.splice(hiddenActiveIdx, 1)\n newHidden.unshift(displaced)\n }\n }\n }\n\n hiddenTabs.value = newHidden\n}\n\nuseResizeObserver(containerEl, () => nextTick(computeOverflow))\nonMounted(() => {\n nextTick(computeOverflow)\n})\n\n// Recompute when the active tab changes so the active tab is always visible\nwatch(() => ctx.currentValue.value, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\n// Safety re-check when overflow toggles. computeOverflow already reserves the more\n// button's width up front, so this is idempotent — it just guards against layout\n// settling (e.g. a scrollbar appearing) on the false→true transition.\nwatch(hasOverflow, () => {\n if (props.overflow === 'dropdown') nextTick(computeOverflow)\n})\n\nfunction selectOverflowTab(value: string) {\n ctx.changeTab(value)\n dropdownOpen.value = false\n}\n</script>\n\n<template>\n <!-- ── Default (no overflow behaviour) ───────────────────────────────────── -->\n <TabsList\n v-if=\"!props.overflow\"\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n\n <!-- ── Arrows mode ────────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'arrows'\"\n class=\"tabs__list-container tabs__list-container--arrows\"\n :class=\"{ 'has-left': canScrollLeft, 'has-right': canScrollRight }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--left', canScrollLeft && 'is-visible')\"\n aria-label=\"Scroll tabs left\"\n tabindex=\"-1\"\n @click=\"scrollTabs('left')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M9 11L5 7L9 3\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div ref=\"scrollWrapperEl\" class=\"tabs__scroll-wrapper\">\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--scroll', props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n </div>\n\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n :is-icon-only=\"true\"\n :class=\"composeClassName('tabs__arrow tabs__arrow--right', canScrollRight && 'is-visible')\"\n aria-label=\"Scroll tabs right\"\n tabindex=\"-1\"\n @click=\"scrollTabs('right')\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n </div>\n\n <!-- ── Dropdown mode ──────────────────────────────────────────────────────── -->\n <div\n v-else-if=\"props.overflow === 'dropdown'\"\n ref=\"containerEl\"\n class=\"tabs__list-container tabs__list-container--dropdown\"\n >\n <TabsList\n :loop=\"props.loop ?? true\"\n :class=\"composeClassName(ctx.slotFns.value.tabList(), 'tabs__list--clipped', props.class, props.classNames?.tabList)\"\n >\n <slot />\n </TabsList>\n\n <!-- Always rendered so offsetWidth is measurable; visibility toggled via CSS -->\n <div\n ref=\"dropdownEl\"\n class=\"tabs__more\"\n :class=\"{ 'tabs__more--visible': hasOverflow }\"\n >\n <Button\n variant=\"secondary\"\n size=\"sm\"\n radius=\"full\"\n class=\"tabs__more-btn\"\n :aria-expanded=\"dropdownOpen\"\n aria-haspopup=\"menu\"\n @click=\"dropdownOpen = !dropdownOpen\"\n >\n +{{ hiddenTabs.length }}\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 4L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </Button>\n\n <div v-if=\"dropdownOpen\" class=\"tabs__overflow-menu\" role=\"menu\">\n <Button\n v-for=\"tab in hiddenTabs\"\n :key=\"tab.value\"\n variant=\"ghost\"\n radius=\"lg\"\n class=\"tabs__overflow-item\"\n role=\"menuitem\"\n :disabled=\"tab.disabled\"\n @click=\"selectOverflowTab(tab.value)\"\n >\n {{ tab.label }}\n </Button>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabPanel.js","names":[],"sources":["../../../src/components/tabs/TabPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsContent } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n forceMount?: boolean\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsContent\n :value=\"props.value\"\n :force-mount=\"props.forceMount\"\n :class=\"composeClassName(ctx.slotFns.value.tabPanel(), props.class)\"\n >\n <slot />\n </TabsContent>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TabPanel.js","names":[],"sources":["../../../src/components/tabs/TabPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsContent } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n forceMount?: boolean\n class?: ClassValue\n /** Custom classes to apply to specific slots */\n classNames?: Partial<{\n tabPanel: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsContent\n :value=\"props.value\"\n :force-mount=\"props.forceMount\"\n :class=\"composeClassName(ctx.slotFns.value.tabPanel(), props.class, props.classNames?.tabPanel)\"\n >\n <slot />\n </TabsContent>\n</template>\n"],"mappings":""}
@@ -8,7 +8,8 @@ var TabPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
8
8
  props: {
9
9
  value: {},
10
10
  forceMount: { type: Boolean },
11
- class: {}
11
+ class: {},
12
+ classNames: {}
12
13
  },
13
14
  setup(__props) {
14
15
  const props = __props;
@@ -17,7 +18,7 @@ var TabPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
17
18
  return openBlock(), createBlock(unref(TabsContent), {
18
19
  value: props.value,
19
20
  "force-mount": props.forceMount,
20
- class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabPanel(), props.class))
21
+ class: normalizeClass(unref(composeClassName)(unref(ctx).slotFns.value.tabPanel(), props.class, props.classNames?.tabPanel))
21
22
  }, {
22
23
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
23
24
  _: 3
@@ -1 +1 @@
1
- {"version":3,"file":"TabPanel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsContent } from 'reka-ui'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n forceMount?: boolean\n class?: string\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsContent\n :value=\"props.value\"\n :force-mount=\"props.forceMount\"\n :class=\"composeClassName(ctx.slotFns.value.tabPanel(), props.class)\"\n >\n <slot />\n </TabsContent>\n</template>\n"],"mappings":";;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAMd,MAAM,MAAM,eAAc;;uBAIxB,YAMc,MAAA,YAAA,EAAA;IALX,OAAO,MAAM;IACb,eAAa,MAAM;IACnB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,UAAQ,EAAI,MAAM,MAAK,CAAA;;2BAE1D,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"TabPanel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/TabPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { TabsContent } from 'reka-ui'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsInject } from './tabs.context'\n\nconst props = defineProps<{\n value: string\n forceMount?: boolean\n class?: ClassValue\n /** Custom classes to apply to specific slots */\n classNames?: Partial<{\n tabPanel: ClassValue\n }>\n}>()\n\nconst ctx = useTabsInject()\n</script>\n\n<template>\n <TabsContent\n :value=\"props.value\"\n :force-mount=\"props.forceMount\"\n :class=\"composeClassName(ctx.slotFns.value.tabPanel(), props.class, props.classNames?.tabPanel)\"\n >\n <slot />\n </TabsContent>\n</template>\n"],"mappings":";;;;;;;;;;;;;;EAKA,MAAM,QAAQ;EAUd,MAAM,MAAM,eAAc;;uBAIxB,YAMc,MAAA,YAAA,EAAA;IALX,OAAO,MAAM;IACb,eAAa,MAAM;IACnB,OAAK,eAAE,MAAA,iBAAgB,CAAC,MAAA,IAAG,CAAC,QAAQ,MAAM,UAAQ,EAAI,MAAM,OAAO,MAAM,YAAY,SAAQ,CAAA;;2BAEtF,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","names":[],"sources":["../../../src/components/tabs/Tabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue'\nimport { TabsRoot } from 'reka-ui'\nimport { tabsVariants, type TabsVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsProvide } from './tabs.context'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n defaultValue?: string\n orientation?: 'horizontal' | 'vertical'\n variant?: TabsVariants['variant']\n activationMode?: 'automatic' | 'manual'\n class?: string\n}>(), {\n orientation: 'horizontal',\n variant: 'primary',\n activationMode: 'automatic',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst internalValue = ref<string | undefined>(props.modelValue ?? props.defaultValue)\n\nwatch(() => props.modelValue, (v) => {\n if (v !== undefined) internalValue.value = v\n})\n\nfunction changeTab(value: string) {\n internalValue.value = value\n emit('update:modelValue', value)\n}\n\nconst slotFns = computed(() => tabsVariants({ variant: props.variant }))\n\nuseTabsProvide({\n slotFns,\n orientation: toRef(props, 'orientation'),\n currentValue: internalValue,\n changeTab,\n})\n</script>\n\n<template>\n <TabsRoot\n :model-value=\"internalValue\"\n :orientation=\"props.orientation\"\n :activation-mode=\"props.activationMode\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n :data-orientation=\"props.orientation\"\n @update:model-value=\"changeTab\"\n >\n <slot />\n </TabsRoot>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Tabs.js","names":[],"sources":["../../../src/components/tabs/Tabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue'\nimport { TabsRoot } from 'reka-ui'\nimport { tabsVariants, type TabsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsProvide } from './tabs.context'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n defaultValue?: string\n orientation?: 'horizontal' | 'vertical'\n variant?: TabsVariants['variant']\n activationMode?: 'automatic' | 'manual'\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n orientation: 'horizontal',\n variant: 'primary',\n activationMode: 'automatic',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst internalValue = ref<string | undefined>(props.modelValue ?? props.defaultValue)\n\nwatch(() => props.modelValue, (v) => {\n if (v !== undefined) internalValue.value = v\n})\n\nfunction changeTab(value: string) {\n internalValue.value = value\n emit('update:modelValue', value)\n}\n\nconst slotFns = computed(() => tabsVariants({ variant: props.variant }))\n\nuseTabsProvide({\n slotFns,\n orientation: toRef(props, 'orientation'),\n currentValue: internalValue,\n changeTab,\n})\n</script>\n\n<template>\n <TabsRoot\n :model-value=\"internalValue\"\n :orientation=\"props.orientation\"\n :activation-mode=\"props.activationMode\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n @update:model-value=\"changeTab\"\n >\n <slot />\n </TabsRoot>\n</template>\n"],"mappings":""}
@@ -12,7 +12,8 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
12
12
  orientation: { default: "horizontal" },
13
13
  variant: { default: "primary" },
14
14
  activationMode: { default: "automatic" },
15
- class: {}
15
+ class: {},
16
+ classNames: {}
16
17
  },
17
18
  emits: ["update:modelValue"],
18
19
  setup(__props, { emit: __emit }) {
@@ -38,7 +39,7 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
38
39
  "model-value": internalValue.value,
39
40
  orientation: props.orientation,
40
41
  "activation-mode": props.activationMode,
41
- class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class)),
42
+ class: normalizeClass(unref(composeClassName)(slotFns.value.base(), props.class, props.classNames?.base)),
42
43
  "data-orientation": props.orientation,
43
44
  "onUpdate:modelValue": changeTab
44
45
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/Tabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue'\nimport { TabsRoot } from 'reka-ui'\nimport { tabsVariants, type TabsVariants } from '@auronui/styles'\nimport { composeClassName } from '../../utils/composeClassName'\nimport { useTabsProvide } from './tabs.context'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n defaultValue?: string\n orientation?: 'horizontal' | 'vertical'\n variant?: TabsVariants['variant']\n activationMode?: 'automatic' | 'manual'\n class?: string\n}>(), {\n orientation: 'horizontal',\n variant: 'primary',\n activationMode: 'automatic',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst internalValue = ref<string | undefined>(props.modelValue ?? props.defaultValue)\n\nwatch(() => props.modelValue, (v) => {\n if (v !== undefined) internalValue.value = v\n})\n\nfunction changeTab(value: string) {\n internalValue.value = value\n emit('update:modelValue', value)\n}\n\nconst slotFns = computed(() => tabsVariants({ variant: props.variant }))\n\nuseTabsProvide({\n slotFns,\n orientation: toRef(props, 'orientation'),\n currentValue: internalValue,\n changeTab,\n})\n</script>\n\n<template>\n <TabsRoot\n :model-value=\"internalValue\"\n :orientation=\"props.orientation\"\n :activation-mode=\"props.activationMode\"\n :class=\"composeClassName(slotFns.base(), props.class)\"\n :data-orientation=\"props.orientation\"\n @update:model-value=\"changeTab\"\n >\n <slot />\n </TabsRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAad,MAAM,OAAO;EAIb,MAAM,gBAAgB,IAAwB,MAAM,cAAc,MAAM,aAAY;AAEpF,cAAY,MAAM,aAAa,MAAM;AACnC,OAAI,MAAM,KAAA,EAAW,eAAc,QAAQ;IAC5C;EAED,SAAS,UAAU,OAAe;AAChC,iBAAc,QAAQ;AACtB,QAAK,qBAAqB,MAAK;;EAGjC,MAAM,UAAU,eAAe,aAAa,EAAE,SAAS,MAAM,SAAS,CAAC,CAAA;AAEvE,iBAAe;GACb;GACA,aAAa,MAAM,OAAO,cAAc;GACxC,cAAc;GACd;GACD,CAAA;;uBAIC,YASW,MAAA,SAAA,EAAA;IARR,eAAa,cAAA;IACb,aAAa,MAAM;IACnB,mBAAiB,MAAM;IACvB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,MAAK,CAAA;IACnD,oBAAkB,MAAM;IACxB,uBAAoB;;2BAEb,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"Tabs.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/tabs/Tabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue'\nimport { TabsRoot } from 'reka-ui'\nimport { tabsVariants, type TabsVariants } from '@auronui/styles'\nimport { composeClassName , type ClassValue} from '../../utils/composeClassName'\nimport { useTabsProvide } from './tabs.context'\n\nconst props = withDefaults(defineProps<{\n modelValue?: string\n defaultValue?: string\n orientation?: 'horizontal' | 'vertical'\n variant?: TabsVariants['variant']\n activationMode?: 'automatic' | 'manual'\n class?: ClassValue\n /** Override classes for individual slots */\n classNames?: Partial<{\n base: ClassValue\n }>\n}>(), {\n orientation: 'horizontal',\n variant: 'primary',\n activationMode: 'automatic',\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst internalValue = ref<string | undefined>(props.modelValue ?? props.defaultValue)\n\nwatch(() => props.modelValue, (v) => {\n if (v !== undefined) internalValue.value = v\n})\n\nfunction changeTab(value: string) {\n internalValue.value = value\n emit('update:modelValue', value)\n}\n\nconst slotFns = computed(() => tabsVariants({ variant: props.variant }))\n\nuseTabsProvide({\n slotFns,\n orientation: toRef(props, 'orientation'),\n currentValue: internalValue,\n changeTab,\n})\n</script>\n\n<template>\n <TabsRoot\n :model-value=\"internalValue\"\n :orientation=\"props.orientation\"\n :activation-mode=\"props.activationMode\"\n :class=\"composeClassName(slotFns.base(), props.class, props.classNames?.base)\"\n :data-orientation=\"props.orientation\"\n @update:model-value=\"changeTab\"\n >\n <slot />\n </TabsRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAOA,MAAM,QAAQ;EAiBd,MAAM,OAAO;EAIb,MAAM,gBAAgB,IAAwB,MAAM,cAAc,MAAM,aAAY;AAEpF,cAAY,MAAM,aAAa,MAAM;AACnC,OAAI,MAAM,KAAA,EAAW,eAAc,QAAQ;IAC5C;EAED,SAAS,UAAU,OAAe;AAChC,iBAAc,QAAQ;AACtB,QAAK,qBAAqB,MAAK;;EAGjC,MAAM,UAAU,eAAe,aAAa,EAAE,SAAS,MAAM,SAAS,CAAC,CAAA;AAEvE,iBAAe;GACb;GACA,aAAa,MAAM,OAAO,cAAc;GACxC,cAAc;GACd;GACD,CAAA;;uBAIC,YASW,MAAA,SAAA,EAAA;IARR,eAAa,cAAA;IACb,aAAa,MAAM;IACnB,mBAAiB,MAAM;IACvB,OAAK,eAAE,MAAA,iBAAgB,CAAC,QAAA,MAAQ,MAAI,EAAI,MAAM,OAAO,MAAM,YAAY,KAAI,CAAA;IAC3E,oBAAkB,MAAM;IACxB,uBAAoB;;2BAEb,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}