@ecoma-io/loom 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1073) hide show
  1. package/README.md +202 -113
  2. package/dist/a11y.js +4 -3
  3. package/dist/composition/center/src/Center.js.map +1 -0
  4. package/dist/composition/center/src/Center.vue_vue_type_script_setup_true_lang.js.map +1 -0
  5. package/dist/composition/dashboard-grid/src/DashboardGrid.js +7 -0
  6. package/dist/composition/dashboard-grid/src/DashboardGrid.js.map +1 -0
  7. package/dist/composition/dashboard-grid/src/DashboardGrid.vue_vue_type_script_setup_true_lang.js +45 -0
  8. package/dist/composition/dashboard-grid/src/DashboardGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  9. package/dist/composition/frame/src/Frame.js.map +1 -0
  10. package/dist/composition/frame/src/Frame.vue_vue_type_script_setup_true_lang.js.map +1 -0
  11. package/dist/composition/grid/src/Grid.js.map +1 -0
  12. package/dist/composition/grid/src/Grid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  13. package/dist/composition/inline/src/Inline.js.map +1 -0
  14. package/dist/composition/inline/src/Inline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  15. package/dist/composition/scroll-reel/src/ScrollReel.js.map +1 -0
  16. package/dist/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js +101 -0
  17. package/dist/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  18. package/dist/composition/sidebar/src/Sidebar.js.map +1 -0
  19. package/dist/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js +46 -0
  20. package/dist/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  21. package/dist/composition/split/src/Split.js.map +1 -0
  22. package/dist/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js +51 -0
  23. package/dist/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js.map +1 -0
  24. package/dist/composition/stack/src/Stack.js.map +1 -0
  25. package/dist/composition/stack/src/Stack.vue_vue_type_script_setup_true_lang.js.map +1 -0
  26. package/dist/core/src/a11y-contract.js +558 -0
  27. package/dist/core/src/a11y-contract.js.map +1 -0
  28. package/dist/core/src/a11y-scope.js +151 -0
  29. package/dist/core/src/a11y-scope.js.map +1 -0
  30. package/dist/core/src/attrs.js.map +1 -0
  31. package/dist/core/src/cn.js +61 -0
  32. package/dist/core/src/cn.js.map +1 -0
  33. package/dist/core/src/icon-defaults.js.map +1 -0
  34. package/dist/core/src/index.js +9 -0
  35. package/dist/core/src/motion.js +31 -0
  36. package/dist/core/src/motion.js.map +1 -0
  37. package/dist/core/src/props.js.map +1 -0
  38. package/dist/core/src/theme.js.map +1 -0
  39. package/dist/index.js +287 -250
  40. package/dist/labels/src/ancestor-disabled.js.map +1 -0
  41. package/dist/labels/src/count-labels.js.map +1 -0
  42. package/dist/labels/src/date-labels.js +206 -0
  43. package/dist/labels/src/date-labels.js.map +1 -0
  44. package/dist/labels/src/field-context.js.map +1 -0
  45. package/dist/labels/src/index.js +6 -0
  46. package/dist/labels/src/labels.js.map +1 -0
  47. package/dist/layouts/app-shell/src/AppShell.js.map +1 -0
  48. package/dist/layouts/app-shell/src/AppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  49. package/dist/layouts/centered/src/Centered.js.map +1 -0
  50. package/dist/layouts/centered/src/Centered.vue_vue_type_script_setup_true_lang.js.map +1 -0
  51. package/dist/layouts/dashboard/src/Dashboard.js.map +1 -0
  52. package/dist/layouts/dashboard/src/Dashboard.vue_vue_type_script_setup_true_lang.js +65 -0
  53. package/dist/layouts/dashboard/src/Dashboard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  54. package/dist/layouts/desktop-app-shell/src/DesktopAppShell.js +7 -0
  55. package/dist/layouts/desktop-app-shell/src/DesktopAppShell.js.map +1 -0
  56. package/dist/layouts/desktop-app-shell/src/DesktopAppShell.vue_vue_type_script_setup_true_lang.js +76 -0
  57. package/dist/layouts/desktop-app-shell/src/DesktopAppShell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  58. package/dist/layouts/form-layout/src/FormLayout.js.map +1 -0
  59. package/dist/layouts/form-layout/src/FormLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  60. package/dist/layouts/master-detail/src/MasterDetail.js.map +1 -0
  61. package/dist/layouts/master-detail/src/MasterDetail.vue_vue_type_script_setup_true_lang.js.map +1 -0
  62. package/dist/layouts/reading/src/Reading.js.map +1 -0
  63. package/dist/layouts/reading/src/Reading.vue_vue_type_script_setup_true_lang.js.map +1 -0
  64. package/dist/layouts/settings/src/Settings.js.map +1 -0
  65. package/dist/layouts/settings/src/Settings.vue_vue_type_script_setup_true_lang.js.map +1 -0
  66. package/dist/layouts/split-layout/src/SplitLayout.js.map +1 -0
  67. package/dist/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js +62 -0
  68. package/dist/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js.map +1 -0
  69. package/dist/packages/composition/dashboard-grid/src/DashboardGrid.vue.d.ts +26 -0
  70. package/dist/packages/composition/dashboard-grid/src/DashboardGrid.vue.d.ts.map +1 -0
  71. package/dist/packages/composition/dashboard-grid/src/index.d.ts.map +1 -0
  72. package/dist/packages/composition/sidebar/src/Sidebar.vue.d.ts +4 -0
  73. package/dist/packages/composition/sidebar/src/Sidebar.vue.d.ts.map +1 -1
  74. package/dist/packages/composition/split/src/Split.vue.d.ts +11 -12
  75. package/dist/packages/composition/split/src/Split.vue.d.ts.map +1 -1
  76. package/dist/packages/core/src/a11y-contract.d.ts +417 -0
  77. package/dist/packages/core/src/a11y-contract.d.ts.map +1 -0
  78. package/dist/packages/core/src/a11y-scope.d.ts +73 -5
  79. package/dist/packages/core/src/a11y-scope.d.ts.map +1 -1
  80. package/dist/packages/core/src/index.d.ts +8 -2
  81. package/dist/packages/core/src/index.d.ts.map +1 -1
  82. package/dist/packages/core/src/motion.d.ts +15 -6
  83. package/dist/packages/core/src/motion.d.ts.map +1 -1
  84. package/dist/packages/core/src/responsive-contract.d.ts +155 -0
  85. package/dist/packages/core/src/responsive-contract.d.ts.map +1 -0
  86. package/dist/packages/labels/src/component-shapes.d.ts +165 -1
  87. package/dist/packages/labels/src/component-shapes.d.ts.map +1 -1
  88. package/dist/packages/labels/src/date-labels.d.ts +82 -5
  89. package/dist/packages/labels/src/date-labels.d.ts.map +1 -1
  90. package/dist/packages/labels/src/field-context.d.ts +2 -2
  91. package/dist/packages/labels/src/index.d.ts +3 -3
  92. package/dist/packages/labels/src/index.d.ts.map +1 -1
  93. package/dist/packages/labels/src/label-registry.d.ts +9 -1
  94. package/dist/packages/labels/src/label-registry.d.ts.map +1 -1
  95. package/dist/packages/layouts/dashboard/src/Dashboard.vue.d.ts +4 -4
  96. package/dist/packages/layouts/dashboard/src/Dashboard.vue.d.ts.map +1 -1
  97. package/dist/packages/layouts/desktop-app-shell/src/DesktopAppShell.vue.d.ts +103 -0
  98. package/dist/packages/layouts/desktop-app-shell/src/index.d.ts.map +1 -0
  99. package/dist/packages/layouts/settings/src/Settings.vue.d.ts +3 -3
  100. package/dist/packages/layouts/settings/src/Settings.vue.d.ts.map +1 -1
  101. package/dist/packages/layouts/split-layout/src/SplitLayout.vue.d.ts +4 -6
  102. package/dist/packages/layouts/split-layout/src/SplitLayout.vue.d.ts.map +1 -1
  103. package/dist/packages/layouts/split-layout/src/index.d.ts +1 -1
  104. package/dist/packages/layouts/split-layout/src/index.d.ts.map +1 -1
  105. package/dist/packages/loom/src/a11y.d.ts +2 -1
  106. package/dist/packages/loom/src/index.d.ts +47 -21
  107. package/dist/packages/patterns/app-header/src/AppHeader.vue.d.ts +82 -0
  108. package/dist/packages/patterns/app-header/src/AppHeader.vue.d.ts.map +1 -0
  109. package/dist/packages/patterns/app-header/src/index.d.ts.map +1 -0
  110. package/dist/packages/patterns/empty-state/src/EmptyState.vue.d.ts +54 -0
  111. package/dist/packages/patterns/empty-state/src/EmptyState.vue.d.ts.map +1 -0
  112. package/dist/packages/patterns/empty-state/src/index.d.ts.map +1 -0
  113. package/dist/packages/patterns/error-state/src/ErrorState.vue.d.ts +44 -0
  114. package/dist/packages/patterns/error-state/src/ErrorState.vue.d.ts.map +1 -0
  115. package/dist/packages/patterns/error-state/src/index.d.ts.map +1 -0
  116. package/dist/packages/patterns/error-summary/src/ErrorSummary.vue.d.ts +31 -0
  117. package/dist/packages/patterns/error-summary/src/index.d.ts +4 -0
  118. package/dist/packages/patterns/form-actions/src/FormActions.vue.d.ts +56 -0
  119. package/dist/packages/patterns/form-actions/src/FormActions.vue.d.ts.map +1 -0
  120. package/dist/packages/patterns/form-actions/src/index.d.ts.map +1 -0
  121. package/dist/packages/patterns/form-section/src/FormSection.vue.d.ts +85 -0
  122. package/dist/packages/patterns/form-section/src/FormSection.vue.d.ts.map +1 -0
  123. package/dist/packages/patterns/form-section/src/index.d.ts.map +1 -0
  124. package/dist/packages/patterns/loading-state/src/LoadingState.vue.d.ts.map +1 -0
  125. package/dist/packages/patterns/loading-state/src/index.d.ts.map +1 -0
  126. package/dist/packages/patterns/metric-card/src/MetricCard.vue.d.ts +77 -0
  127. package/dist/packages/patterns/metric-card/src/MetricCard.vue.d.ts.map +1 -0
  128. package/dist/packages/patterns/metric-card/src/index.d.ts.map +1 -0
  129. package/dist/packages/patterns/page-header/src/PageHeader.vue.d.ts.map +1 -0
  130. package/dist/packages/patterns/page-header/src/index.d.ts.map +1 -0
  131. package/dist/packages/patterns/row-actions/src/RowActions.vue.d.ts.map +1 -0
  132. package/dist/packages/patterns/row-actions/src/index.d.ts.map +1 -0
  133. package/dist/packages/patterns/sidebar-nav/src/SidebarNav.vue.d.ts.map +1 -0
  134. package/dist/packages/patterns/sidebar-nav/src/index.d.ts.map +1 -0
  135. package/dist/packages/patterns/title-bar/src/TitleBar.vue.d.ts +83 -0
  136. package/dist/packages/patterns/title-bar/src/index.d.ts.map +1 -0
  137. package/dist/packages/patterns/toast-stack/src/index.d.ts.map +1 -0
  138. package/dist/packages/primitives/alert/src/Alert.vue.d.ts +18 -0
  139. package/dist/packages/primitives/avatar/src/Avatar.vue.d.ts +2 -2
  140. package/dist/packages/primitives/avatar/src/Avatar.vue.d.ts.map +1 -1
  141. package/dist/packages/primitives/calendar/src/Calendar.vue.d.ts +95 -0
  142. package/dist/packages/primitives/calendar/src/index.d.ts +3 -0
  143. package/dist/packages/primitives/combobox/src/Combobox.vue.d.ts +1 -1
  144. package/dist/packages/primitives/command/src/Command.vue.d.ts +77 -0
  145. package/dist/packages/primitives/command/src/index.d.ts +4 -0
  146. package/dist/packages/primitives/copy-button/src/CopyButton.vue.d.ts +64 -0
  147. package/dist/packages/primitives/copy-button/src/index.d.ts +4 -0
  148. package/dist/packages/primitives/data-grid/src/DataGrid.vue.d.ts +128 -0
  149. package/dist/packages/primitives/data-grid/src/index.d.ts +4 -0
  150. package/dist/packages/primitives/dialog/src/Dialog.vue.d.ts +15 -7
  151. package/dist/packages/primitives/drawer/src/Drawer.vue.d.ts +10 -2
  152. package/dist/packages/primitives/hover-card/src/index.d.ts.map +1 -1
  153. package/dist/packages/primitives/list/src/ListItem.vue.d.ts +1 -1
  154. package/dist/packages/primitives/list/src/ListItem.vue.d.ts.map +1 -1
  155. package/dist/packages/primitives/live-region/src/LiveRegion.vue.d.ts +36 -0
  156. package/dist/packages/primitives/live-region/src/LiveRegion.vue.d.ts.map +1 -0
  157. package/dist/packages/primitives/live-region/src/context.d.ts +40 -0
  158. package/dist/packages/primitives/live-region/src/context.d.ts.map +1 -0
  159. package/dist/packages/primitives/live-region/src/index.d.ts +4 -0
  160. package/dist/packages/primitives/live-region/src/index.d.ts.map +1 -0
  161. package/dist/packages/primitives/live-region/src/useAnnounce.d.ts +17 -0
  162. package/dist/packages/primitives/live-region/src/useAnnounce.d.ts.map +1 -0
  163. package/dist/packages/primitives/menubar/src/Menubar.vue.d.ts.map +1 -1
  164. package/dist/packages/primitives/meter/src/Meter.vue.d.ts +87 -0
  165. package/dist/packages/primitives/meter/src/index.d.ts +4 -0
  166. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue.d.ts +69 -0
  167. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue.d.ts.map +1 -0
  168. package/dist/packages/primitives/navigation-menu/src/index.d.ts +3 -0
  169. package/dist/packages/primitives/navigation-menu/src/index.d.ts.map +1 -0
  170. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue.d.ts.map +1 -1
  171. package/dist/packages/primitives/skip-link/src/SkipLink.vue.d.ts +62 -0
  172. package/dist/packages/primitives/skip-link/src/index.d.ts +3 -0
  173. package/dist/packages/primitives/surface/src/Surface.vue.d.ts +2 -2
  174. package/dist/packages/primitives/surface/src/Surface.vue.d.ts.map +1 -1
  175. package/dist/packages/primitives/switch/src/Switch.vue.d.ts.map +1 -1
  176. package/dist/packages/primitives/table/src/TableRow.vue.d.ts +2 -2
  177. package/dist/packages/primitives/table/src/TableRow.vue.d.ts.map +1 -1
  178. package/dist/packages/primitives/table/src/index.d.ts +1 -1
  179. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue.d.ts +53 -0
  180. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue.d.ts.map +1 -0
  181. package/dist/packages/primitives/toggle-group/src/index.d.ts +3 -0
  182. package/dist/packages/primitives/toggle-group/src/index.d.ts.map +1 -0
  183. package/dist/packages/primitives/toolbar/src/Toolbar.vue.d.ts +31 -0
  184. package/dist/packages/primitives/toolbar/src/Toolbar.vue.d.ts.map +1 -0
  185. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue.d.ts +24 -0
  186. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue.d.ts.map +1 -0
  187. package/dist/packages/primitives/toolbar/src/index.d.ts +4 -0
  188. package/dist/packages/primitives/toolbar/src/index.d.ts.map +1 -0
  189. package/dist/packages/primitives/tree-view/src/TreeView.vue.d.ts +99 -0
  190. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue.d.ts +15 -0
  191. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue.d.ts.map +1 -0
  192. package/dist/packages/primitives/tree-view/src/context.d.ts +39 -0
  193. package/dist/packages/primitives/tree-view/src/context.d.ts.map +1 -0
  194. package/dist/packages/primitives/tree-view/src/index.d.ts +4 -0
  195. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue.d.ts +21 -0
  196. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue.d.ts.map +1 -0
  197. package/dist/packages/primitives/visually-hidden/src/index.d.ts +3 -0
  198. package/dist/packages/primitives/visually-hidden/src/index.d.ts.map +1 -0
  199. package/dist/patterns/app-header/src/AppHeader.js +7 -0
  200. package/dist/patterns/app-header/src/AppHeader.js.map +1 -0
  201. package/dist/patterns/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js +96 -0
  202. package/dist/patterns/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  203. package/dist/patterns/empty-state/src/EmptyState.js +7 -0
  204. package/dist/patterns/empty-state/src/EmptyState.js.map +1 -0
  205. package/dist/patterns/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js +73 -0
  206. package/dist/patterns/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  207. package/dist/patterns/error-state/src/ErrorState.js +7 -0
  208. package/dist/patterns/error-state/src/ErrorState.js.map +1 -0
  209. package/dist/patterns/error-state/src/ErrorState.vue_vue_type_script_setup_true_lang.js +60 -0
  210. package/dist/patterns/error-state/src/ErrorState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  211. package/dist/patterns/error-summary/src/ErrorSummary.js +7 -0
  212. package/dist/patterns/error-summary/src/ErrorSummary.js.map +1 -0
  213. package/dist/patterns/error-summary/src/ErrorSummary.vue_vue_type_script_setup_true_lang.js +90 -0
  214. package/dist/patterns/error-summary/src/ErrorSummary.vue_vue_type_script_setup_true_lang.js.map +1 -0
  215. package/dist/patterns/error-summary/src/index.js +3 -0
  216. package/dist/patterns/form-actions/src/FormActions.js +7 -0
  217. package/dist/patterns/form-actions/src/FormActions.js.map +1 -0
  218. package/dist/patterns/form-actions/src/FormActions.vue_vue_type_script_setup_true_lang.js +22 -0
  219. package/dist/patterns/form-actions/src/FormActions.vue_vue_type_script_setup_true_lang.js.map +1 -0
  220. package/dist/patterns/form-section/src/FormSection.js +7 -0
  221. package/dist/patterns/form-section/src/FormSection.js.map +1 -0
  222. package/dist/patterns/form-section/src/FormSection.vue_vue_type_script_setup_true_lang.js +64 -0
  223. package/dist/patterns/form-section/src/FormSection.vue_vue_type_script_setup_true_lang.js.map +1 -0
  224. package/dist/patterns/loading-state/src/LoadingState.js +7 -0
  225. package/dist/patterns/loading-state/src/LoadingState.js.map +1 -0
  226. package/dist/patterns/loading-state/src/LoadingState.vue_vue_type_script_setup_true_lang.js +59 -0
  227. package/dist/patterns/loading-state/src/LoadingState.vue_vue_type_script_setup_true_lang.js.map +1 -0
  228. package/dist/patterns/metric-card/src/MetricCard.js +7 -0
  229. package/dist/patterns/metric-card/src/MetricCard.js.map +1 -0
  230. package/dist/patterns/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js +87 -0
  231. package/dist/patterns/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  232. package/dist/patterns/page-header/src/PageHeader.js +7 -0
  233. package/dist/patterns/page-header/src/PageHeader.js.map +1 -0
  234. package/dist/patterns/page-header/src/PageHeader.vue_vue_type_script_setup_true_lang.js +68 -0
  235. package/dist/patterns/page-header/src/PageHeader.vue_vue_type_script_setup_true_lang.js.map +1 -0
  236. package/dist/patterns/row-actions/src/RowActions.js +7 -0
  237. package/dist/patterns/row-actions/src/RowActions.js.map +1 -0
  238. package/dist/patterns/row-actions/src/RowActions.vue_vue_type_script_setup_true_lang.js +47 -0
  239. package/dist/patterns/row-actions/src/RowActions.vue_vue_type_script_setup_true_lang.js.map +1 -0
  240. package/dist/patterns/sidebar-nav/src/SidebarNav.js +7 -0
  241. package/dist/patterns/sidebar-nav/src/SidebarNav.js.map +1 -0
  242. package/dist/patterns/sidebar-nav/src/SidebarNav.vue_vue_type_script_setup_true_lang.js +129 -0
  243. package/dist/patterns/sidebar-nav/src/SidebarNav.vue_vue_type_script_setup_true_lang.js.map +1 -0
  244. package/dist/patterns/title-bar/src/TitleBar.js +7 -0
  245. package/dist/patterns/title-bar/src/TitleBar.js.map +1 -0
  246. package/dist/patterns/title-bar/src/TitleBar.vue_vue_type_script_setup_true_lang.js +69 -0
  247. package/dist/patterns/title-bar/src/TitleBar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  248. package/dist/patterns/toast-stack/src/ToastStack.js +7 -0
  249. package/dist/patterns/toast-stack/src/ToastStack.js.map +1 -0
  250. package/dist/patterns/toast-stack/src/ToastStack.vue_vue_type_script_setup_true_lang.js +52 -0
  251. package/dist/patterns/toast-stack/src/ToastStack.vue_vue_type_script_setup_true_lang.js.map +1 -0
  252. package/dist/primitives/accordion/src/Accordion.js.map +1 -0
  253. package/dist/primitives/accordion/src/Accordion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  254. package/dist/primitives/alert/src/Alert.js.map +1 -0
  255. package/dist/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js +130 -0
  256. package/dist/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js.map +1 -0
  257. package/dist/primitives/alert-dialog/src/AlertDialog.js.map +1 -0
  258. package/dist/primitives/alert-dialog/src/AlertDialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  259. package/dist/primitives/avatar/src/Avatar.js.map +1 -0
  260. package/dist/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js +115 -0
  261. package/dist/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  262. package/dist/primitives/avatar-group/src/AvatarGroup.js.map +1 -0
  263. package/dist/primitives/avatar-group/src/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  264. package/dist/primitives/badge/src/Badge.js.map +1 -0
  265. package/dist/primitives/badge/src/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -0
  266. package/dist/primitives/breadcrumb/src/Breadcrumb.js.map +1 -0
  267. package/dist/primitives/breadcrumb/src/Breadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -0
  268. package/dist/primitives/button/src/Button.js.map +1 -0
  269. package/dist/primitives/button/src/Button.vue_vue_type_script_setup_true_lang.js.map +1 -0
  270. package/dist/primitives/calendar/src/Calendar.js +7 -0
  271. package/dist/primitives/calendar/src/Calendar.js.map +1 -0
  272. package/dist/primitives/calendar/src/Calendar.vue_vue_type_script_setup_true_lang.js +202 -0
  273. package/dist/primitives/calendar/src/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  274. package/dist/primitives/calendar/src/index.js +3 -0
  275. package/dist/primitives/card/src/Card.js.map +1 -0
  276. package/dist/primitives/card/src/Card.vue_vue_type_script_setup_true_lang.js.map +1 -0
  277. package/dist/primitives/carousel/src/Carousel.js.map +1 -0
  278. package/dist/primitives/carousel/src/Carousel.vue_vue_type_script_setup_true_lang.js.map +1 -0
  279. package/dist/primitives/checkbox/src/Checkbox.js.map +1 -0
  280. package/dist/primitives/checkbox/src/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  281. package/dist/primitives/chip/src/Chip.js.map +1 -0
  282. package/dist/primitives/chip/src/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  283. package/dist/primitives/collapse/src/Collapse.js.map +1 -0
  284. package/dist/primitives/collapse/src/Collapse.vue_vue_type_script_setup_true_lang.js.map +1 -0
  285. package/dist/primitives/color-picker/src/ColorPicker.js.map +1 -0
  286. package/dist/primitives/color-picker/src/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  287. package/dist/primitives/combobox/src/Combobox.js.map +1 -0
  288. package/dist/primitives/combobox/src/Combobox.vue_vue_type_script_setup_true_lang.js.map +1 -0
  289. package/dist/primitives/command/src/Command.js +7 -0
  290. package/dist/primitives/command/src/Command.js.map +1 -0
  291. package/dist/primitives/command/src/Command.vue_vue_type_script_setup_true_lang.js +333 -0
  292. package/dist/primitives/command/src/Command.vue_vue_type_script_setup_true_lang.js.map +1 -0
  293. package/dist/primitives/command/src/index.js +3 -0
  294. package/dist/primitives/context-menu/src/ContextMenu.js.map +1 -0
  295. package/dist/primitives/context-menu/src/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  296. package/dist/primitives/copy-button/src/CopyButton.js +7 -0
  297. package/dist/primitives/copy-button/src/CopyButton.js.map +1 -0
  298. package/dist/primitives/copy-button/src/CopyButton.vue_vue_type_script_setup_true_lang.js +113 -0
  299. package/dist/primitives/copy-button/src/CopyButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  300. package/dist/primitives/copy-button/src/index.js +3 -0
  301. package/dist/primitives/data-grid/src/DataGrid.js +7 -0
  302. package/dist/primitives/data-grid/src/DataGrid.js.map +1 -0
  303. package/dist/primitives/data-grid/src/DataGrid.vue_vue_type_script_setup_true_lang.js +347 -0
  304. package/dist/primitives/data-grid/src/DataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  305. package/dist/primitives/data-grid/src/index.js +3 -0
  306. package/dist/primitives/date-picker/src/DatePicker.js.map +1 -0
  307. package/dist/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js +292 -0
  308. package/dist/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  309. package/dist/primitives/date-range-picker/src/DateRangePicker.js.map +1 -0
  310. package/dist/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js +417 -0
  311. package/dist/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  312. package/dist/primitives/date-time-picker/src/DateTimePicker.js.map +1 -0
  313. package/dist/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js +359 -0
  314. package/dist/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  315. package/dist/primitives/date-time-range-picker/src/DateTimeRangePicker.js.map +1 -0
  316. package/dist/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +563 -0
  317. package/dist/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  318. package/dist/primitives/dialog/src/Dialog.js.map +1 -0
  319. package/dist/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js +103 -0
  320. package/dist/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -0
  321. package/dist/primitives/drawer/src/Drawer.js.map +1 -0
  322. package/dist/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js +235 -0
  323. package/dist/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js.map +1 -0
  324. package/dist/primitives/dropdown-menu/src/DropdownMenu.js.map +1 -0
  325. package/dist/primitives/dropdown-menu/src/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  326. package/dist/primitives/editable/src/Editable.js.map +1 -0
  327. package/dist/primitives/editable/src/Editable.vue_vue_type_script_setup_true_lang.js.map +1 -0
  328. package/dist/primitives/field/src/Field.js.map +1 -0
  329. package/dist/primitives/field/src/Field.vue_vue_type_script_setup_true_lang.js.map +1 -0
  330. package/dist/primitives/fieldset/src/Fieldset.js.map +1 -0
  331. package/dist/primitives/fieldset/src/Fieldset.vue_vue_type_script_setup_true_lang.js.map +1 -0
  332. package/dist/primitives/file-upload/src/FileUpload.js.map +1 -0
  333. package/dist/primitives/file-upload/src/FileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -0
  334. package/dist/primitives/hover-card/src/HoverCard.js.map +1 -0
  335. package/dist/primitives/hover-card/src/HoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -0
  336. package/dist/primitives/icon-button/src/IconButton.js.map +1 -0
  337. package/dist/primitives/icon-button/src/IconButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  338. package/dist/primitives/indicator/src/Indicator.js.map +1 -0
  339. package/dist/primitives/indicator/src/Indicator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  340. package/dist/primitives/inline-error/src/InlineError.js.map +1 -0
  341. package/dist/primitives/inline-error/src/InlineError.vue_vue_type_script_setup_true_lang.js.map +1 -0
  342. package/dist/primitives/kbd/src/Kbd.js.map +1 -0
  343. package/dist/primitives/kbd/src/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -0
  344. package/dist/primitives/link/src/Link.js.map +1 -0
  345. package/dist/primitives/link/src/Link.vue_vue_type_script_setup_true_lang.js.map +1 -0
  346. package/dist/primitives/list/src/List.js.map +1 -0
  347. package/dist/primitives/list/src/List.vue_vue_type_script_setup_true_lang.js.map +1 -0
  348. package/dist/primitives/list/src/ListItem.js.map +1 -0
  349. package/dist/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js +101 -0
  350. package/dist/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  351. package/dist/primitives/live-region/src/LiveRegion.js +7 -0
  352. package/dist/primitives/live-region/src/LiveRegion.js.map +1 -0
  353. package/dist/primitives/live-region/src/LiveRegion.vue_vue_type_script_setup_true_lang.js +59 -0
  354. package/dist/primitives/live-region/src/LiveRegion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  355. package/dist/primitives/live-region/src/context.js +85 -0
  356. package/dist/primitives/live-region/src/context.js.map +1 -0
  357. package/dist/primitives/live-region/src/index.js +3 -0
  358. package/dist/primitives/live-region/src/useAnnounce.js +25 -0
  359. package/dist/primitives/live-region/src/useAnnounce.js.map +1 -0
  360. package/dist/primitives/menubar/src/Menubar.js.map +1 -0
  361. package/dist/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js +332 -0
  362. package/dist/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  363. package/dist/primitives/meter/src/Meter.js +7 -0
  364. package/dist/primitives/meter/src/Meter.js.map +1 -0
  365. package/dist/primitives/meter/src/Meter.vue_vue_type_script_setup_true_lang.js +236 -0
  366. package/dist/primitives/meter/src/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -0
  367. package/dist/primitives/meter/src/index.js +3 -0
  368. package/dist/primitives/navigation-menu/src/NavigationMenu.js +7 -0
  369. package/dist/primitives/navigation-menu/src/NavigationMenu.js.map +1 -0
  370. package/dist/primitives/navigation-menu/src/NavigationMenu.vue_vue_type_script_setup_true_lang.js +118 -0
  371. package/dist/primitives/navigation-menu/src/NavigationMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  372. package/dist/primitives/navigation-menu/src/index.js +2 -0
  373. package/dist/primitives/number-field/src/NumberField.js.map +1 -0
  374. package/dist/primitives/number-field/src/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  375. package/dist/primitives/otp-input/src/OtpInput.js.map +1 -0
  376. package/dist/primitives/otp-input/src/OtpInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  377. package/dist/primitives/pagination/src/Pagination.js.map +1 -0
  378. package/dist/primitives/pagination/src/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -0
  379. package/dist/primitives/popover/src/Popover.js.map +1 -0
  380. package/dist/primitives/popover/src/Popover.vue_vue_type_script_setup_true_lang.js.map +1 -0
  381. package/dist/primitives/progress/src/Progress.js.map +1 -0
  382. package/dist/primitives/progress/src/Progress.vue_vue_type_script_setup_true_lang.js.map +1 -0
  383. package/dist/primitives/radial-progress/src/RadialProgress.js.map +1 -0
  384. package/dist/primitives/radial-progress/src/RadialProgress.vue_vue_type_script_setup_true_lang.js.map +1 -0
  385. package/dist/primitives/radio-group/src/RadioGroup.js.map +1 -0
  386. package/dist/primitives/radio-group/src/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  387. package/dist/primitives/rating/src/Rating.js.map +1 -0
  388. package/dist/primitives/rating/src/Rating.vue_vue_type_script_setup_true_lang.js.map +1 -0
  389. package/dist/primitives/scroll-area/src/ScrollArea.js.map +1 -0
  390. package/dist/primitives/scroll-area/src/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  391. package/dist/primitives/segmented-control/src/SegmentedControl.js.map +1 -0
  392. package/dist/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js +133 -0
  393. package/dist/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -0
  394. package/dist/primitives/select/src/Select.js.map +1 -0
  395. package/dist/primitives/select/src/Select.vue_vue_type_script_setup_true_lang.js.map +1 -0
  396. package/dist/primitives/separator/src/Separator.js.map +1 -0
  397. package/dist/primitives/separator/src/Separator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  398. package/dist/primitives/skeleton/src/Skeleton.js.map +1 -0
  399. package/dist/primitives/skeleton/src/Skeleton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  400. package/dist/primitives/skip-link/src/SkipLink.js +7 -0
  401. package/dist/primitives/skip-link/src/SkipLink.js.map +1 -0
  402. package/dist/primitives/skip-link/src/SkipLink.vue_vue_type_script_setup_true_lang.js +64 -0
  403. package/dist/primitives/skip-link/src/SkipLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
  404. package/dist/primitives/skip-link/src/index.js +3 -0
  405. package/dist/primitives/slider/src/Slider.js.map +1 -0
  406. package/dist/primitives/slider/src/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -0
  407. package/dist/primitives/speed-dial/src/SpeedDial.js.map +1 -0
  408. package/dist/primitives/speed-dial/src/SpeedDial.vue_vue_type_script_setup_true_lang.js.map +1 -0
  409. package/dist/primitives/spinner/src/Spinner.js.map +1 -0
  410. package/dist/primitives/spinner/src/Spinner.vue_vue_type_script_setup_true_lang.js.map +1 -0
  411. package/dist/primitives/stepper/src/Stepper.js.map +1 -0
  412. package/dist/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js +208 -0
  413. package/dist/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -0
  414. package/dist/primitives/surface/src/Surface.js.map +1 -0
  415. package/dist/primitives/surface/src/Surface.vue_vue_type_script_setup_true_lang.js.map +1 -0
  416. package/dist/primitives/switch/src/Switch.js.map +1 -0
  417. package/dist/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js +75 -0
  418. package/dist/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -0
  419. package/dist/primitives/table/src/Table.js.map +1 -0
  420. package/dist/primitives/table/src/Table.vue_vue_type_script_setup_true_lang.js.map +1 -0
  421. package/dist/primitives/table/src/TableCell.js.map +1 -0
  422. package/dist/primitives/table/src/TableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
  423. package/dist/primitives/table/src/TableHead.js.map +1 -0
  424. package/dist/primitives/table/src/TableHead.vue_vue_type_script_setup_true_lang.js.map +1 -0
  425. package/dist/primitives/table/src/TableRow.js.map +1 -0
  426. package/dist/primitives/table/src/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
  427. package/dist/primitives/table/src/index.js +8 -0
  428. package/dist/primitives/tabs/src/Tabs.js.map +1 -0
  429. package/dist/primitives/tabs/src/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -0
  430. package/dist/primitives/tags-input/src/TagsInput.js.map +1 -0
  431. package/dist/primitives/tags-input/src/TagsInput.vue_vue_type_script_setup_true_lang.js.map +1 -0
  432. package/dist/primitives/text-field/src/TextField.js.map +1 -0
  433. package/dist/primitives/text-field/src/TextField.vue_vue_type_script_setup_true_lang.js.map +1 -0
  434. package/dist/primitives/textarea/src/Textarea.js.map +1 -0
  435. package/dist/primitives/textarea/src/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -0
  436. package/dist/primitives/time-picker/src/TimePicker.js.map +1 -0
  437. package/dist/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js +189 -0
  438. package/dist/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -0
  439. package/dist/primitives/timeline/src/Timeline.js.map +1 -0
  440. package/dist/primitives/timeline/src/Timeline.vue_vue_type_script_setup_true_lang.js.map +1 -0
  441. package/dist/primitives/timeline/src/TimelineItem.js.map +1 -0
  442. package/dist/primitives/timeline/src/TimelineItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  443. package/dist/primitives/timeline/src/index.js +5 -0
  444. package/dist/primitives/toast/src/Toast.js.map +1 -0
  445. package/dist/primitives/toast/src/Toast.vue_vue_type_script_setup_true_lang.js.map +1 -0
  446. package/dist/primitives/toast/src/ToastItem.js.map +1 -0
  447. package/dist/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js +120 -0
  448. package/dist/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
  449. package/dist/primitives/toggle-group/src/ToggleGroup.js +7 -0
  450. package/dist/primitives/toggle-group/src/ToggleGroup.js.map +1 -0
  451. package/dist/primitives/toggle-group/src/ToggleGroup.vue_vue_type_script_setup_true_lang.js +111 -0
  452. package/dist/primitives/toggle-group/src/ToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  453. package/dist/primitives/toggle-group/src/index.js +2 -0
  454. package/dist/primitives/toolbar/src/Toolbar.js +7 -0
  455. package/dist/primitives/toolbar/src/Toolbar.js.map +1 -0
  456. package/dist/primitives/toolbar/src/Toolbar.vue_vue_type_script_setup_true_lang.js +149 -0
  457. package/dist/primitives/toolbar/src/Toolbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  458. package/dist/primitives/toolbar/src/ToolbarSeparator.js +7 -0
  459. package/dist/primitives/toolbar/src/ToolbarSeparator.js.map +1 -0
  460. package/dist/primitives/toolbar/src/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js +40 -0
  461. package/dist/primitives/toolbar/src/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  462. package/dist/primitives/toolbar/src/index.js +3 -0
  463. package/dist/primitives/tooltip/src/Tooltip.js.map +1 -0
  464. package/dist/primitives/tooltip/src/Tooltip.vue_vue_type_script_setup_true_lang.js.map +1 -0
  465. package/dist/primitives/tree-view/src/TreeView.js +7 -0
  466. package/dist/primitives/tree-view/src/TreeView.js.map +1 -0
  467. package/dist/primitives/tree-view/src/TreeView.vue_vue_type_script_setup_true_lang.js +310 -0
  468. package/dist/primitives/tree-view/src/TreeView.vue_vue_type_script_setup_true_lang.js.map +1 -0
  469. package/dist/primitives/tree-view/src/TreeViewNode.js +7 -0
  470. package/dist/primitives/tree-view/src/TreeViewNode.js.map +1 -0
  471. package/dist/primitives/tree-view/src/TreeViewNode.vue_vue_type_script_setup_true_lang.js +103 -0
  472. package/dist/primitives/tree-view/src/TreeViewNode.vue_vue_type_script_setup_true_lang.js.map +1 -0
  473. package/dist/primitives/tree-view/src/context.js +6 -0
  474. package/dist/primitives/tree-view/src/context.js.map +1 -0
  475. package/dist/primitives/tree-view/src/index.js +3 -0
  476. package/dist/primitives/visually-hidden/src/VisuallyHidden.js +7 -0
  477. package/dist/primitives/visually-hidden/src/VisuallyHidden.js.map +1 -0
  478. package/dist/primitives/visually-hidden/src/VisuallyHidden.vue_vue_type_script_setup_true_lang.js +27 -0
  479. package/dist/primitives/visually-hidden/src/VisuallyHidden.vue_vue_type_script_setup_true_lang.js.map +1 -0
  480. package/dist/primitives/visually-hidden/src/index.js +2 -0
  481. package/dist/primitives/window-controls/src/WindowControls.js.map +1 -0
  482. package/dist/primitives/window-controls/src/WindowControls.vue_vue_type_script_setup_true_lang.js +127 -0
  483. package/dist/primitives/window-controls/src/WindowControls.vue_vue_type_script_setup_true_lang.js.map +1 -0
  484. package/dist/styles/theme.css +30 -6
  485. package/dist/theme.js +2 -2
  486. package/package.json +31 -29
  487. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js +0 -236
  488. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/CalendarDate.js.map +0 -1
  489. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +0 -117
  490. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js.map +0 -1
  491. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js +0 -142
  492. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/conversion.js.map +0 -1
  493. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js +0 -280
  494. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/manipulation.js.map +0 -1
  495. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js +0 -40
  496. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/queries.js.map +0 -1
  497. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js +0 -69
  498. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/string.js.map +0 -1
  499. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js +0 -8
  500. package/dist/node_modules/.pnpm/@internationalized_date@3.12.3/node_modules/@internationalized/date/dist/private/utils.js.map +0 -1
  501. package/dist/packages/blocks/app-header/src/AppHeader.js +0 -7
  502. package/dist/packages/blocks/app-header/src/AppHeader.js.map +0 -1
  503. package/dist/packages/blocks/app-header/src/AppHeader.vue.d.ts +0 -82
  504. package/dist/packages/blocks/app-header/src/AppHeader.vue.d.ts.map +0 -1
  505. package/dist/packages/blocks/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js +0 -96
  506. package/dist/packages/blocks/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js.map +0 -1
  507. package/dist/packages/blocks/app-header/src/index.d.ts.map +0 -1
  508. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.js +0 -7
  509. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.js.map +0 -1
  510. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.vue.d.ts +0 -42
  511. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.vue.d.ts.map +0 -1
  512. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.vue_vue_type_script_setup_true_lang.js +0 -45
  513. package/dist/packages/blocks/dashboard-grid/src/DashboardGrid.vue_vue_type_script_setup_true_lang.js.map +0 -1
  514. package/dist/packages/blocks/dashboard-grid/src/index.d.ts.map +0 -1
  515. package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.js +0 -7
  516. package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.js.map +0 -1
  517. package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.vue.d.ts +0 -102
  518. package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.vue_vue_type_script_setup_true_lang.js +0 -76
  519. package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.vue_vue_type_script_setup_true_lang.js.map +0 -1
  520. package/dist/packages/blocks/desktop-app-shell/src/index.d.ts.map +0 -1
  521. package/dist/packages/blocks/empty-state/src/EmptyState.js +0 -7
  522. package/dist/packages/blocks/empty-state/src/EmptyState.js.map +0 -1
  523. package/dist/packages/blocks/empty-state/src/EmptyState.vue.d.ts +0 -50
  524. package/dist/packages/blocks/empty-state/src/EmptyState.vue.d.ts.map +0 -1
  525. package/dist/packages/blocks/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js +0 -71
  526. package/dist/packages/blocks/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js.map +0 -1
  527. package/dist/packages/blocks/empty-state/src/index.d.ts.map +0 -1
  528. package/dist/packages/blocks/error-state/src/ErrorState.js +0 -7
  529. package/dist/packages/blocks/error-state/src/ErrorState.js.map +0 -1
  530. package/dist/packages/blocks/error-state/src/ErrorState.vue.d.ts +0 -44
  531. package/dist/packages/blocks/error-state/src/ErrorState.vue.d.ts.map +0 -1
  532. package/dist/packages/blocks/error-state/src/ErrorState.vue_vue_type_script_setup_true_lang.js +0 -60
  533. package/dist/packages/blocks/error-state/src/ErrorState.vue_vue_type_script_setup_true_lang.js.map +0 -1
  534. package/dist/packages/blocks/error-state/src/index.d.ts.map +0 -1
  535. package/dist/packages/blocks/form-actions/src/FormActions.js +0 -7
  536. package/dist/packages/blocks/form-actions/src/FormActions.js.map +0 -1
  537. package/dist/packages/blocks/form-actions/src/FormActions.vue.d.ts +0 -51
  538. package/dist/packages/blocks/form-actions/src/FormActions.vue.d.ts.map +0 -1
  539. package/dist/packages/blocks/form-actions/src/FormActions.vue_vue_type_script_setup_true_lang.js +0 -22
  540. package/dist/packages/blocks/form-actions/src/FormActions.vue_vue_type_script_setup_true_lang.js.map +0 -1
  541. package/dist/packages/blocks/form-actions/src/index.d.ts.map +0 -1
  542. package/dist/packages/blocks/form-section/src/FormSection.js +0 -7
  543. package/dist/packages/blocks/form-section/src/FormSection.js.map +0 -1
  544. package/dist/packages/blocks/form-section/src/FormSection.vue.d.ts +0 -85
  545. package/dist/packages/blocks/form-section/src/FormSection.vue.d.ts.map +0 -1
  546. package/dist/packages/blocks/form-section/src/FormSection.vue_vue_type_script_setup_true_lang.js +0 -64
  547. package/dist/packages/blocks/form-section/src/FormSection.vue_vue_type_script_setup_true_lang.js.map +0 -1
  548. package/dist/packages/blocks/form-section/src/index.d.ts.map +0 -1
  549. package/dist/packages/blocks/loading-state/src/LoadingState.js +0 -7
  550. package/dist/packages/blocks/loading-state/src/LoadingState.js.map +0 -1
  551. package/dist/packages/blocks/loading-state/src/LoadingState.vue.d.ts.map +0 -1
  552. package/dist/packages/blocks/loading-state/src/LoadingState.vue_vue_type_script_setup_true_lang.js +0 -59
  553. package/dist/packages/blocks/loading-state/src/LoadingState.vue_vue_type_script_setup_true_lang.js.map +0 -1
  554. package/dist/packages/blocks/loading-state/src/index.d.ts.map +0 -1
  555. package/dist/packages/blocks/metric-card/src/MetricCard.js +0 -7
  556. package/dist/packages/blocks/metric-card/src/MetricCard.js.map +0 -1
  557. package/dist/packages/blocks/metric-card/src/MetricCard.vue.d.ts +0 -77
  558. package/dist/packages/blocks/metric-card/src/MetricCard.vue.d.ts.map +0 -1
  559. package/dist/packages/blocks/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js +0 -87
  560. package/dist/packages/blocks/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  561. package/dist/packages/blocks/metric-card/src/index.d.ts.map +0 -1
  562. package/dist/packages/blocks/page-header/src/PageHeader.js +0 -7
  563. package/dist/packages/blocks/page-header/src/PageHeader.js.map +0 -1
  564. package/dist/packages/blocks/page-header/src/PageHeader.vue.d.ts.map +0 -1
  565. package/dist/packages/blocks/page-header/src/PageHeader.vue_vue_type_script_setup_true_lang.js +0 -68
  566. package/dist/packages/blocks/page-header/src/PageHeader.vue_vue_type_script_setup_true_lang.js.map +0 -1
  567. package/dist/packages/blocks/page-header/src/index.d.ts.map +0 -1
  568. package/dist/packages/blocks/row-actions/src/RowActions.js +0 -7
  569. package/dist/packages/blocks/row-actions/src/RowActions.js.map +0 -1
  570. package/dist/packages/blocks/row-actions/src/RowActions.vue.d.ts.map +0 -1
  571. package/dist/packages/blocks/row-actions/src/RowActions.vue_vue_type_script_setup_true_lang.js +0 -47
  572. package/dist/packages/blocks/row-actions/src/RowActions.vue_vue_type_script_setup_true_lang.js.map +0 -1
  573. package/dist/packages/blocks/row-actions/src/index.d.ts.map +0 -1
  574. package/dist/packages/blocks/sidebar-nav/src/SidebarNav.js +0 -7
  575. package/dist/packages/blocks/sidebar-nav/src/SidebarNav.js.map +0 -1
  576. package/dist/packages/blocks/sidebar-nav/src/SidebarNav.vue.d.ts.map +0 -1
  577. package/dist/packages/blocks/sidebar-nav/src/SidebarNav.vue_vue_type_script_setup_true_lang.js +0 -129
  578. package/dist/packages/blocks/sidebar-nav/src/SidebarNav.vue_vue_type_script_setup_true_lang.js.map +0 -1
  579. package/dist/packages/blocks/sidebar-nav/src/index.d.ts.map +0 -1
  580. package/dist/packages/blocks/title-bar/src/TitleBar.js +0 -7
  581. package/dist/packages/blocks/title-bar/src/TitleBar.js.map +0 -1
  582. package/dist/packages/blocks/title-bar/src/TitleBar.vue.d.ts +0 -83
  583. package/dist/packages/blocks/title-bar/src/TitleBar.vue_vue_type_script_setup_true_lang.js +0 -69
  584. package/dist/packages/blocks/title-bar/src/TitleBar.vue_vue_type_script_setup_true_lang.js.map +0 -1
  585. package/dist/packages/blocks/title-bar/src/index.d.ts.map +0 -1
  586. package/dist/packages/blocks/toast-stack/src/ToastStack.js +0 -7
  587. package/dist/packages/blocks/toast-stack/src/ToastStack.js.map +0 -1
  588. package/dist/packages/blocks/toast-stack/src/ToastStack.vue_vue_type_script_setup_true_lang.js +0 -52
  589. package/dist/packages/blocks/toast-stack/src/ToastStack.vue_vue_type_script_setup_true_lang.js.map +0 -1
  590. package/dist/packages/blocks/toast-stack/src/index.d.ts.map +0 -1
  591. package/dist/packages/composition/center/src/Center.js.map +0 -1
  592. package/dist/packages/composition/center/src/Center.vue_vue_type_script_setup_true_lang.js.map +0 -1
  593. package/dist/packages/composition/frame/src/Frame.js.map +0 -1
  594. package/dist/packages/composition/frame/src/Frame.vue_vue_type_script_setup_true_lang.js.map +0 -1
  595. package/dist/packages/composition/grid/src/Grid.js.map +0 -1
  596. package/dist/packages/composition/grid/src/Grid.vue_vue_type_script_setup_true_lang.js.map +0 -1
  597. package/dist/packages/composition/inline/src/Inline.js.map +0 -1
  598. package/dist/packages/composition/inline/src/Inline.vue_vue_type_script_setup_true_lang.js.map +0 -1
  599. package/dist/packages/composition/scroll-reel/src/ScrollReel.js.map +0 -1
  600. package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js +0 -100
  601. package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +0 -1
  602. package/dist/packages/composition/sidebar/src/Sidebar.js.map +0 -1
  603. package/dist/packages/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js +0 -37
  604. package/dist/packages/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js.map +0 -1
  605. package/dist/packages/composition/split/src/Split.js.map +0 -1
  606. package/dist/packages/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js +0 -41
  607. package/dist/packages/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js.map +0 -1
  608. package/dist/packages/composition/stack/src/Stack.js.map +0 -1
  609. package/dist/packages/composition/stack/src/Stack.vue_vue_type_script_setup_true_lang.js.map +0 -1
  610. package/dist/packages/core/src/a11y-scope.js +0 -29
  611. package/dist/packages/core/src/a11y-scope.js.map +0 -1
  612. package/dist/packages/core/src/attrs.js.map +0 -1
  613. package/dist/packages/core/src/cn.js +0 -61
  614. package/dist/packages/core/src/cn.js.map +0 -1
  615. package/dist/packages/core/src/icon-defaults.js.map +0 -1
  616. package/dist/packages/core/src/index.js +0 -8
  617. package/dist/packages/core/src/motion.js +0 -27
  618. package/dist/packages/core/src/motion.js.map +0 -1
  619. package/dist/packages/core/src/props.js.map +0 -1
  620. package/dist/packages/core/src/theme.js.map +0 -1
  621. package/dist/packages/labels/src/ancestor-disabled.js.map +0 -1
  622. package/dist/packages/labels/src/count-labels.js.map +0 -1
  623. package/dist/packages/labels/src/date-labels.js +0 -159
  624. package/dist/packages/labels/src/date-labels.js.map +0 -1
  625. package/dist/packages/labels/src/field-context.js.map +0 -1
  626. package/dist/packages/labels/src/index.js +0 -6
  627. package/dist/packages/labels/src/labels.js.map +0 -1
  628. package/dist/packages/layouts/app-shell/src/AppShell.js.map +0 -1
  629. package/dist/packages/layouts/app-shell/src/AppShell.vue_vue_type_script_setup_true_lang.js.map +0 -1
  630. package/dist/packages/layouts/centered/src/Centered.js.map +0 -1
  631. package/dist/packages/layouts/centered/src/Centered.vue_vue_type_script_setup_true_lang.js.map +0 -1
  632. package/dist/packages/layouts/dashboard/src/Dashboard.js.map +0 -1
  633. package/dist/packages/layouts/dashboard/src/Dashboard.vue_vue_type_script_setup_true_lang.js +0 -65
  634. package/dist/packages/layouts/dashboard/src/Dashboard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  635. package/dist/packages/layouts/form-layout/src/FormLayout.js.map +0 -1
  636. package/dist/packages/layouts/form-layout/src/FormLayout.vue_vue_type_script_setup_true_lang.js.map +0 -1
  637. package/dist/packages/layouts/master-detail/src/MasterDetail.js.map +0 -1
  638. package/dist/packages/layouts/master-detail/src/MasterDetail.vue_vue_type_script_setup_true_lang.js.map +0 -1
  639. package/dist/packages/layouts/reading/src/Reading.js.map +0 -1
  640. package/dist/packages/layouts/reading/src/Reading.vue_vue_type_script_setup_true_lang.js.map +0 -1
  641. package/dist/packages/layouts/settings/src/Settings.js.map +0 -1
  642. package/dist/packages/layouts/settings/src/Settings.vue_vue_type_script_setup_true_lang.js.map +0 -1
  643. package/dist/packages/layouts/split-layout/src/SplitLayout.js.map +0 -1
  644. package/dist/packages/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js +0 -47
  645. package/dist/packages/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js.map +0 -1
  646. package/dist/packages/primitives/accordion/src/Accordion.js.map +0 -1
  647. package/dist/packages/primitives/accordion/src/Accordion.vue_vue_type_script_setup_true_lang.js.map +0 -1
  648. package/dist/packages/primitives/alert/src/Alert.js.map +0 -1
  649. package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js +0 -127
  650. package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js.map +0 -1
  651. package/dist/packages/primitives/alert-dialog/src/AlertDialog.js.map +0 -1
  652. package/dist/packages/primitives/alert-dialog/src/AlertDialog.vue_vue_type_script_setup_true_lang.js.map +0 -1
  653. package/dist/packages/primitives/avatar/src/Avatar.js.map +0 -1
  654. package/dist/packages/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js +0 -115
  655. package/dist/packages/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js.map +0 -1
  656. package/dist/packages/primitives/avatar-group/src/AvatarGroup.js.map +0 -1
  657. package/dist/packages/primitives/avatar-group/src/AvatarGroup.vue_vue_type_script_setup_true_lang.js.map +0 -1
  658. package/dist/packages/primitives/badge/src/Badge.js.map +0 -1
  659. package/dist/packages/primitives/badge/src/Badge.vue_vue_type_script_setup_true_lang.js.map +0 -1
  660. package/dist/packages/primitives/breadcrumb/src/Breadcrumb.js.map +0 -1
  661. package/dist/packages/primitives/breadcrumb/src/Breadcrumb.vue_vue_type_script_setup_true_lang.js.map +0 -1
  662. package/dist/packages/primitives/button/src/Button.js.map +0 -1
  663. package/dist/packages/primitives/button/src/Button.vue_vue_type_script_setup_true_lang.js.map +0 -1
  664. package/dist/packages/primitives/card/src/Card.js.map +0 -1
  665. package/dist/packages/primitives/card/src/Card.vue_vue_type_script_setup_true_lang.js.map +0 -1
  666. package/dist/packages/primitives/carousel/src/Carousel.js.map +0 -1
  667. package/dist/packages/primitives/carousel/src/Carousel.vue_vue_type_script_setup_true_lang.js.map +0 -1
  668. package/dist/packages/primitives/checkbox/src/Checkbox.js.map +0 -1
  669. package/dist/packages/primitives/checkbox/src/Checkbox.vue_vue_type_script_setup_true_lang.js.map +0 -1
  670. package/dist/packages/primitives/chip/src/Chip.js.map +0 -1
  671. package/dist/packages/primitives/chip/src/Chip.vue_vue_type_script_setup_true_lang.js.map +0 -1
  672. package/dist/packages/primitives/collapse/src/Collapse.js.map +0 -1
  673. package/dist/packages/primitives/collapse/src/Collapse.vue_vue_type_script_setup_true_lang.js.map +0 -1
  674. package/dist/packages/primitives/color-picker/src/ColorPicker.js.map +0 -1
  675. package/dist/packages/primitives/color-picker/src/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  676. package/dist/packages/primitives/combobox/src/Combobox.js.map +0 -1
  677. package/dist/packages/primitives/combobox/src/Combobox.vue_vue_type_script_setup_true_lang.js.map +0 -1
  678. package/dist/packages/primitives/context-menu/src/ContextMenu.js.map +0 -1
  679. package/dist/packages/primitives/context-menu/src/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +0 -1
  680. package/dist/packages/primitives/date-picker/src/DatePicker.js.map +0 -1
  681. package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js +0 -294
  682. package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  683. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.js.map +0 -1
  684. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js +0 -416
  685. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  686. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.js.map +0 -1
  687. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js +0 -360
  688. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  689. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.js.map +0 -1
  690. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +0 -564
  691. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  692. package/dist/packages/primitives/dialog/src/Dialog.js.map +0 -1
  693. package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js +0 -101
  694. package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js.map +0 -1
  695. package/dist/packages/primitives/drawer/src/Drawer.js.map +0 -1
  696. package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js +0 -227
  697. package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js.map +0 -1
  698. package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.js.map +0 -1
  699. package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +0 -1
  700. package/dist/packages/primitives/editable/src/Editable.js.map +0 -1
  701. package/dist/packages/primitives/editable/src/Editable.vue_vue_type_script_setup_true_lang.js.map +0 -1
  702. package/dist/packages/primitives/field/src/Field.js.map +0 -1
  703. package/dist/packages/primitives/field/src/Field.vue_vue_type_script_setup_true_lang.js.map +0 -1
  704. package/dist/packages/primitives/fieldset/src/Fieldset.js.map +0 -1
  705. package/dist/packages/primitives/fieldset/src/Fieldset.vue_vue_type_script_setup_true_lang.js.map +0 -1
  706. package/dist/packages/primitives/file-upload/src/FileUpload.js.map +0 -1
  707. package/dist/packages/primitives/file-upload/src/FileUpload.vue_vue_type_script_setup_true_lang.js.map +0 -1
  708. package/dist/packages/primitives/hover-card/src/HoverCard.js.map +0 -1
  709. package/dist/packages/primitives/hover-card/src/HoverCard.vue_vue_type_script_setup_true_lang.js.map +0 -1
  710. package/dist/packages/primitives/icon-button/src/IconButton.js.map +0 -1
  711. package/dist/packages/primitives/icon-button/src/IconButton.vue_vue_type_script_setup_true_lang.js.map +0 -1
  712. package/dist/packages/primitives/indicator/src/Indicator.js.map +0 -1
  713. package/dist/packages/primitives/indicator/src/Indicator.vue_vue_type_script_setup_true_lang.js.map +0 -1
  714. package/dist/packages/primitives/inline-error/src/InlineError.js.map +0 -1
  715. package/dist/packages/primitives/inline-error/src/InlineError.vue_vue_type_script_setup_true_lang.js.map +0 -1
  716. package/dist/packages/primitives/kbd/src/Kbd.js.map +0 -1
  717. package/dist/packages/primitives/kbd/src/Kbd.vue_vue_type_script_setup_true_lang.js.map +0 -1
  718. package/dist/packages/primitives/link/src/Link.js.map +0 -1
  719. package/dist/packages/primitives/link/src/Link.vue_vue_type_script_setup_true_lang.js.map +0 -1
  720. package/dist/packages/primitives/list/src/List.js.map +0 -1
  721. package/dist/packages/primitives/list/src/List.vue_vue_type_script_setup_true_lang.js.map +0 -1
  722. package/dist/packages/primitives/list/src/ListItem.js.map +0 -1
  723. package/dist/packages/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js +0 -101
  724. package/dist/packages/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js.map +0 -1
  725. package/dist/packages/primitives/menubar/src/Menubar.js.map +0 -1
  726. package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js +0 -299
  727. package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js.map +0 -1
  728. package/dist/packages/primitives/number-field/src/NumberField.js.map +0 -1
  729. package/dist/packages/primitives/number-field/src/NumberField.vue_vue_type_script_setup_true_lang.js.map +0 -1
  730. package/dist/packages/primitives/otp-input/src/OtpInput.js.map +0 -1
  731. package/dist/packages/primitives/otp-input/src/OtpInput.vue_vue_type_script_setup_true_lang.js.map +0 -1
  732. package/dist/packages/primitives/pagination/src/Pagination.js.map +0 -1
  733. package/dist/packages/primitives/pagination/src/Pagination.vue_vue_type_script_setup_true_lang.js.map +0 -1
  734. package/dist/packages/primitives/popover/src/Popover.js.map +0 -1
  735. package/dist/packages/primitives/popover/src/Popover.vue_vue_type_script_setup_true_lang.js.map +0 -1
  736. package/dist/packages/primitives/progress/src/Progress.js.map +0 -1
  737. package/dist/packages/primitives/progress/src/Progress.vue_vue_type_script_setup_true_lang.js.map +0 -1
  738. package/dist/packages/primitives/radial-progress/src/RadialProgress.js.map +0 -1
  739. package/dist/packages/primitives/radial-progress/src/RadialProgress.vue_vue_type_script_setup_true_lang.js.map +0 -1
  740. package/dist/packages/primitives/radio-group/src/RadioGroup.js.map +0 -1
  741. package/dist/packages/primitives/radio-group/src/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +0 -1
  742. package/dist/packages/primitives/rating/src/Rating.js.map +0 -1
  743. package/dist/packages/primitives/rating/src/Rating.vue_vue_type_script_setup_true_lang.js.map +0 -1
  744. package/dist/packages/primitives/scroll-area/src/ScrollArea.js.map +0 -1
  745. package/dist/packages/primitives/scroll-area/src/ScrollArea.vue_vue_type_script_setup_true_lang.js.map +0 -1
  746. package/dist/packages/primitives/segmented-control/src/SegmentedControl.js.map +0 -1
  747. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js +0 -133
  748. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +0 -1
  749. package/dist/packages/primitives/select/src/Select.js.map +0 -1
  750. package/dist/packages/primitives/select/src/Select.vue_vue_type_script_setup_true_lang.js.map +0 -1
  751. package/dist/packages/primitives/separator/src/Separator.js.map +0 -1
  752. package/dist/packages/primitives/separator/src/Separator.vue_vue_type_script_setup_true_lang.js.map +0 -1
  753. package/dist/packages/primitives/skeleton/src/Skeleton.js.map +0 -1
  754. package/dist/packages/primitives/skeleton/src/Skeleton.vue_vue_type_script_setup_true_lang.js.map +0 -1
  755. package/dist/packages/primitives/slider/src/Slider.js.map +0 -1
  756. package/dist/packages/primitives/slider/src/Slider.vue_vue_type_script_setup_true_lang.js.map +0 -1
  757. package/dist/packages/primitives/speed-dial/src/SpeedDial.js.map +0 -1
  758. package/dist/packages/primitives/speed-dial/src/SpeedDial.vue_vue_type_script_setup_true_lang.js.map +0 -1
  759. package/dist/packages/primitives/spinner/src/Spinner.js.map +0 -1
  760. package/dist/packages/primitives/spinner/src/Spinner.vue_vue_type_script_setup_true_lang.js.map +0 -1
  761. package/dist/packages/primitives/stepper/src/Stepper.js.map +0 -1
  762. package/dist/packages/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js +0 -206
  763. package/dist/packages/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js.map +0 -1
  764. package/dist/packages/primitives/surface/src/Surface.js.map +0 -1
  765. package/dist/packages/primitives/surface/src/Surface.vue_vue_type_script_setup_true_lang.js.map +0 -1
  766. package/dist/packages/primitives/switch/src/Switch.js.map +0 -1
  767. package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js +0 -75
  768. package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js.map +0 -1
  769. package/dist/packages/primitives/table/src/Table.js.map +0 -1
  770. package/dist/packages/primitives/table/src/Table.vue_vue_type_script_setup_true_lang.js.map +0 -1
  771. package/dist/packages/primitives/table/src/TableCell.js.map +0 -1
  772. package/dist/packages/primitives/table/src/TableCell.vue_vue_type_script_setup_true_lang.js.map +0 -1
  773. package/dist/packages/primitives/table/src/TableHead.js.map +0 -1
  774. package/dist/packages/primitives/table/src/TableHead.vue_vue_type_script_setup_true_lang.js.map +0 -1
  775. package/dist/packages/primitives/table/src/TableRow.js.map +0 -1
  776. package/dist/packages/primitives/table/src/TableRow.vue_vue_type_script_setup_true_lang.js.map +0 -1
  777. package/dist/packages/primitives/table/src/index.js +0 -8
  778. package/dist/packages/primitives/tabs/src/Tabs.js.map +0 -1
  779. package/dist/packages/primitives/tabs/src/Tabs.vue_vue_type_script_setup_true_lang.js.map +0 -1
  780. package/dist/packages/primitives/tags-input/src/TagsInput.js.map +0 -1
  781. package/dist/packages/primitives/tags-input/src/TagsInput.vue_vue_type_script_setup_true_lang.js.map +0 -1
  782. package/dist/packages/primitives/text-field/src/TextField.js.map +0 -1
  783. package/dist/packages/primitives/text-field/src/TextField.vue_vue_type_script_setup_true_lang.js.map +0 -1
  784. package/dist/packages/primitives/textarea/src/Textarea.js.map +0 -1
  785. package/dist/packages/primitives/textarea/src/Textarea.vue_vue_type_script_setup_true_lang.js.map +0 -1
  786. package/dist/packages/primitives/time-picker/src/TimePicker.js.map +0 -1
  787. package/dist/packages/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js +0 -187
  788. package/dist/packages/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js.map +0 -1
  789. package/dist/packages/primitives/timeline/src/Timeline.js.map +0 -1
  790. package/dist/packages/primitives/timeline/src/Timeline.vue_vue_type_script_setup_true_lang.js.map +0 -1
  791. package/dist/packages/primitives/timeline/src/TimelineItem.js.map +0 -1
  792. package/dist/packages/primitives/timeline/src/TimelineItem.vue_vue_type_script_setup_true_lang.js.map +0 -1
  793. package/dist/packages/primitives/timeline/src/index.js +0 -5
  794. package/dist/packages/primitives/toast/src/Toast.js.map +0 -1
  795. package/dist/packages/primitives/toast/src/Toast.vue_vue_type_script_setup_true_lang.js.map +0 -1
  796. package/dist/packages/primitives/toast/src/ToastItem.js.map +0 -1
  797. package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js +0 -118
  798. package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js.map +0 -1
  799. package/dist/packages/primitives/tooltip/src/Tooltip.js.map +0 -1
  800. package/dist/packages/primitives/tooltip/src/Tooltip.vue_vue_type_script_setup_true_lang.js.map +0 -1
  801. package/dist/packages/primitives/window-controls/src/WindowControls.js.map +0 -1
  802. package/dist/packages/primitives/window-controls/src/WindowControls.vue_vue_type_script_setup_true_lang.js +0 -124
  803. package/dist/packages/primitives/window-controls/src/WindowControls.vue_vue_type_script_setup_true_lang.js.map +0 -1
  804. /package/dist/{packages/composition → composition}/center/src/Center.js +0 -0
  805. /package/dist/{packages/composition → composition}/center/src/Center.vue_vue_type_script_setup_true_lang.js +0 -0
  806. /package/dist/{packages/composition → composition}/center/src/index.js +0 -0
  807. /package/dist/{packages/blocks → composition}/dashboard-grid/src/index.js +0 -0
  808. /package/dist/{packages/composition → composition}/frame/src/Frame.js +0 -0
  809. /package/dist/{packages/composition → composition}/frame/src/Frame.vue_vue_type_script_setup_true_lang.js +0 -0
  810. /package/dist/{packages/composition → composition}/frame/src/index.js +0 -0
  811. /package/dist/{packages/composition → composition}/grid/src/Grid.js +0 -0
  812. /package/dist/{packages/composition → composition}/grid/src/Grid.vue_vue_type_script_setup_true_lang.js +0 -0
  813. /package/dist/{packages/composition → composition}/grid/src/index.js +0 -0
  814. /package/dist/{packages/composition → composition}/inline/src/Inline.js +0 -0
  815. /package/dist/{packages/composition → composition}/inline/src/Inline.vue_vue_type_script_setup_true_lang.js +0 -0
  816. /package/dist/{packages/composition → composition}/inline/src/index.js +0 -0
  817. /package/dist/{packages/composition → composition}/scroll-reel/src/ScrollReel.js +0 -0
  818. /package/dist/{packages/composition → composition}/scroll-reel/src/index.js +0 -0
  819. /package/dist/{packages/composition → composition}/sidebar/src/Sidebar.js +0 -0
  820. /package/dist/{packages/composition → composition}/sidebar/src/index.js +0 -0
  821. /package/dist/{packages/composition → composition}/split/src/Split.js +0 -0
  822. /package/dist/{packages/composition → composition}/split/src/index.js +0 -0
  823. /package/dist/{packages/composition → composition}/stack/src/Stack.js +0 -0
  824. /package/dist/{packages/composition → composition}/stack/src/Stack.vue_vue_type_script_setup_true_lang.js +0 -0
  825. /package/dist/{packages/composition → composition}/stack/src/index.js +0 -0
  826. /package/dist/{packages/core → core}/src/attrs.js +0 -0
  827. /package/dist/{packages/core → core}/src/icon-defaults.js +0 -0
  828. /package/dist/{packages/core → core}/src/props.js +0 -0
  829. /package/dist/{packages/core → core}/src/theme.js +0 -0
  830. /package/dist/{packages/labels → labels}/src/ancestor-disabled.js +0 -0
  831. /package/dist/{packages/labels → labels}/src/count-labels.js +0 -0
  832. /package/dist/{packages/labels → labels}/src/field-context.js +0 -0
  833. /package/dist/{packages/labels → labels}/src/labels.js +0 -0
  834. /package/dist/{packages/layouts → layouts}/app-shell/src/AppShell.js +0 -0
  835. /package/dist/{packages/layouts → layouts}/app-shell/src/AppShell.vue_vue_type_script_setup_true_lang.js +0 -0
  836. /package/dist/{packages/layouts → layouts}/app-shell/src/index.js +0 -0
  837. /package/dist/{packages/layouts → layouts}/centered/src/Centered.js +0 -0
  838. /package/dist/{packages/layouts → layouts}/centered/src/Centered.vue_vue_type_script_setup_true_lang.js +0 -0
  839. /package/dist/{packages/layouts → layouts}/centered/src/index.js +0 -0
  840. /package/dist/{packages/layouts → layouts}/dashboard/src/Dashboard.js +0 -0
  841. /package/dist/{packages/layouts → layouts}/dashboard/src/index.js +0 -0
  842. /package/dist/{packages/blocks → layouts}/desktop-app-shell/src/index.js +0 -0
  843. /package/dist/{packages/layouts → layouts}/form-layout/src/FormLayout.js +0 -0
  844. /package/dist/{packages/layouts → layouts}/form-layout/src/FormLayout.vue_vue_type_script_setup_true_lang.js +0 -0
  845. /package/dist/{packages/layouts → layouts}/form-layout/src/index.js +0 -0
  846. /package/dist/{packages/layouts → layouts}/master-detail/src/MasterDetail.js +0 -0
  847. /package/dist/{packages/layouts → layouts}/master-detail/src/MasterDetail.vue_vue_type_script_setup_true_lang.js +0 -0
  848. /package/dist/{packages/layouts → layouts}/master-detail/src/index.js +0 -0
  849. /package/dist/{packages/layouts → layouts}/reading/src/Reading.js +0 -0
  850. /package/dist/{packages/layouts → layouts}/reading/src/Reading.vue_vue_type_script_setup_true_lang.js +0 -0
  851. /package/dist/{packages/layouts → layouts}/reading/src/index.js +0 -0
  852. /package/dist/{packages/layouts → layouts}/settings/src/Settings.js +0 -0
  853. /package/dist/{packages/layouts → layouts}/settings/src/Settings.vue_vue_type_script_setup_true_lang.js +0 -0
  854. /package/dist/{packages/layouts → layouts}/settings/src/index.js +0 -0
  855. /package/dist/{packages/layouts → layouts}/split-layout/src/SplitLayout.js +0 -0
  856. /package/dist/{packages/layouts → layouts}/split-layout/src/index.js +0 -0
  857. /package/dist/packages/{blocks → composition}/dashboard-grid/src/index.d.ts +0 -0
  858. /package/dist/packages/{blocks → layouts}/desktop-app-shell/src/index.d.ts +0 -0
  859. /package/dist/packages/{blocks → patterns}/app-header/src/index.d.ts +0 -0
  860. /package/dist/packages/{blocks → patterns}/empty-state/src/index.d.ts +0 -0
  861. /package/dist/packages/{blocks → patterns}/error-state/src/index.d.ts +0 -0
  862. /package/dist/packages/{blocks → patterns}/form-actions/src/index.d.ts +0 -0
  863. /package/dist/packages/{blocks → patterns}/form-section/src/index.d.ts +0 -0
  864. /package/dist/packages/{blocks → patterns}/loading-state/src/LoadingState.vue.d.ts +0 -0
  865. /package/dist/packages/{blocks → patterns}/loading-state/src/index.d.ts +0 -0
  866. /package/dist/packages/{blocks → patterns}/metric-card/src/index.d.ts +0 -0
  867. /package/dist/packages/{blocks → patterns}/page-header/src/PageHeader.vue.d.ts +0 -0
  868. /package/dist/packages/{blocks → patterns}/page-header/src/index.d.ts +0 -0
  869. /package/dist/packages/{blocks → patterns}/row-actions/src/RowActions.vue.d.ts +0 -0
  870. /package/dist/packages/{blocks → patterns}/row-actions/src/index.d.ts +0 -0
  871. /package/dist/packages/{blocks → patterns}/sidebar-nav/src/SidebarNav.vue.d.ts +0 -0
  872. /package/dist/packages/{blocks → patterns}/sidebar-nav/src/index.d.ts +0 -0
  873. /package/dist/packages/{blocks → patterns}/title-bar/src/index.d.ts +0 -0
  874. /package/dist/packages/{blocks → patterns}/toast-stack/src/ToastStack.vue.d.ts +0 -0
  875. /package/dist/packages/{blocks → patterns}/toast-stack/src/index.d.ts +0 -0
  876. /package/dist/{packages/blocks → patterns}/app-header/src/index.js +0 -0
  877. /package/dist/{packages/blocks → patterns}/empty-state/src/index.js +0 -0
  878. /package/dist/{packages/blocks → patterns}/error-state/src/index.js +0 -0
  879. /package/dist/{packages/blocks → patterns}/form-actions/src/index.js +0 -0
  880. /package/dist/{packages/blocks → patterns}/form-section/src/index.js +0 -0
  881. /package/dist/{packages/blocks → patterns}/loading-state/src/index.js +0 -0
  882. /package/dist/{packages/blocks → patterns}/metric-card/src/index.js +0 -0
  883. /package/dist/{packages/blocks → patterns}/page-header/src/index.js +0 -0
  884. /package/dist/{packages/blocks → patterns}/row-actions/src/index.js +0 -0
  885. /package/dist/{packages/blocks → patterns}/sidebar-nav/src/index.js +0 -0
  886. /package/dist/{packages/blocks → patterns}/title-bar/src/index.js +0 -0
  887. /package/dist/{packages/blocks → patterns}/toast-stack/src/index.js +0 -0
  888. /package/dist/{packages/primitives → primitives}/accordion/src/Accordion.js +0 -0
  889. /package/dist/{packages/primitives → primitives}/accordion/src/Accordion.vue_vue_type_script_setup_true_lang.js +0 -0
  890. /package/dist/{packages/primitives → primitives}/accordion/src/index.js +0 -0
  891. /package/dist/{packages/primitives → primitives}/alert/src/Alert.js +0 -0
  892. /package/dist/{packages/primitives → primitives}/alert/src/index.js +0 -0
  893. /package/dist/{packages/primitives → primitives}/alert-dialog/src/AlertDialog.js +0 -0
  894. /package/dist/{packages/primitives → primitives}/alert-dialog/src/AlertDialog.vue_vue_type_script_setup_true_lang.js +0 -0
  895. /package/dist/{packages/primitives → primitives}/alert-dialog/src/index.js +0 -0
  896. /package/dist/{packages/primitives → primitives}/avatar/src/Avatar.js +0 -0
  897. /package/dist/{packages/primitives → primitives}/avatar/src/index.js +0 -0
  898. /package/dist/{packages/primitives → primitives}/avatar-group/src/AvatarGroup.js +0 -0
  899. /package/dist/{packages/primitives → primitives}/avatar-group/src/AvatarGroup.vue_vue_type_script_setup_true_lang.js +0 -0
  900. /package/dist/{packages/primitives → primitives}/avatar-group/src/index.js +0 -0
  901. /package/dist/{packages/primitives → primitives}/badge/src/Badge.js +0 -0
  902. /package/dist/{packages/primitives → primitives}/badge/src/Badge.vue_vue_type_script_setup_true_lang.js +0 -0
  903. /package/dist/{packages/primitives → primitives}/badge/src/index.js +0 -0
  904. /package/dist/{packages/primitives → primitives}/breadcrumb/src/Breadcrumb.js +0 -0
  905. /package/dist/{packages/primitives → primitives}/breadcrumb/src/Breadcrumb.vue_vue_type_script_setup_true_lang.js +0 -0
  906. /package/dist/{packages/primitives → primitives}/breadcrumb/src/index.js +0 -0
  907. /package/dist/{packages/primitives → primitives}/button/src/Button.js +0 -0
  908. /package/dist/{packages/primitives → primitives}/button/src/Button.vue_vue_type_script_setup_true_lang.js +0 -0
  909. /package/dist/{packages/primitives → primitives}/button/src/index.js +0 -0
  910. /package/dist/{packages/primitives → primitives}/card/src/Card.js +0 -0
  911. /package/dist/{packages/primitives → primitives}/card/src/Card.vue_vue_type_script_setup_true_lang.js +0 -0
  912. /package/dist/{packages/primitives → primitives}/card/src/index.js +0 -0
  913. /package/dist/{packages/primitives → primitives}/carousel/src/Carousel.js +0 -0
  914. /package/dist/{packages/primitives → primitives}/carousel/src/Carousel.vue_vue_type_script_setup_true_lang.js +0 -0
  915. /package/dist/{packages/primitives → primitives}/carousel/src/index.js +0 -0
  916. /package/dist/{packages/primitives → primitives}/checkbox/src/Checkbox.js +0 -0
  917. /package/dist/{packages/primitives → primitives}/checkbox/src/Checkbox.vue_vue_type_script_setup_true_lang.js +0 -0
  918. /package/dist/{packages/primitives → primitives}/checkbox/src/index.js +0 -0
  919. /package/dist/{packages/primitives → primitives}/chip/src/Chip.js +0 -0
  920. /package/dist/{packages/primitives → primitives}/chip/src/Chip.vue_vue_type_script_setup_true_lang.js +0 -0
  921. /package/dist/{packages/primitives → primitives}/chip/src/index.js +0 -0
  922. /package/dist/{packages/primitives → primitives}/collapse/src/Collapse.js +0 -0
  923. /package/dist/{packages/primitives → primitives}/collapse/src/Collapse.vue_vue_type_script_setup_true_lang.js +0 -0
  924. /package/dist/{packages/primitives → primitives}/collapse/src/index.js +0 -0
  925. /package/dist/{packages/primitives → primitives}/color-picker/src/ColorPicker.js +0 -0
  926. /package/dist/{packages/primitives → primitives}/color-picker/src/ColorPicker.vue_vue_type_script_setup_true_lang.js +0 -0
  927. /package/dist/{packages/primitives → primitives}/color-picker/src/index.js +0 -0
  928. /package/dist/{packages/primitives → primitives}/combobox/src/Combobox.js +0 -0
  929. /package/dist/{packages/primitives → primitives}/combobox/src/Combobox.vue_vue_type_script_setup_true_lang.js +0 -0
  930. /package/dist/{packages/primitives → primitives}/combobox/src/index.js +0 -0
  931. /package/dist/{packages/primitives → primitives}/context-menu/src/ContextMenu.js +0 -0
  932. /package/dist/{packages/primitives → primitives}/context-menu/src/ContextMenu.vue_vue_type_script_setup_true_lang.js +0 -0
  933. /package/dist/{packages/primitives → primitives}/context-menu/src/index.js +0 -0
  934. /package/dist/{packages/primitives → primitives}/date-picker/src/DatePicker.js +0 -0
  935. /package/dist/{packages/primitives → primitives}/date-picker/src/index.js +0 -0
  936. /package/dist/{packages/primitives → primitives}/date-range-picker/src/DateRangePicker.js +0 -0
  937. /package/dist/{packages/primitives → primitives}/date-range-picker/src/index.js +0 -0
  938. /package/dist/{packages/primitives → primitives}/date-time-picker/src/DateTimePicker.js +0 -0
  939. /package/dist/{packages/primitives → primitives}/date-time-picker/src/index.js +0 -0
  940. /package/dist/{packages/primitives → primitives}/date-time-range-picker/src/DateTimeRangePicker.js +0 -0
  941. /package/dist/{packages/primitives → primitives}/date-time-range-picker/src/index.js +0 -0
  942. /package/dist/{packages/primitives → primitives}/dialog/src/Dialog.js +0 -0
  943. /package/dist/{packages/primitives → primitives}/dialog/src/index.js +0 -0
  944. /package/dist/{packages/primitives → primitives}/drawer/src/Drawer.js +0 -0
  945. /package/dist/{packages/primitives → primitives}/drawer/src/index.js +0 -0
  946. /package/dist/{packages/primitives → primitives}/dropdown-menu/src/DropdownMenu.js +0 -0
  947. /package/dist/{packages/primitives → primitives}/dropdown-menu/src/DropdownMenu.vue_vue_type_script_setup_true_lang.js +0 -0
  948. /package/dist/{packages/primitives → primitives}/dropdown-menu/src/index.js +0 -0
  949. /package/dist/{packages/primitives → primitives}/editable/src/Editable.js +0 -0
  950. /package/dist/{packages/primitives → primitives}/editable/src/Editable.vue_vue_type_script_setup_true_lang.js +0 -0
  951. /package/dist/{packages/primitives → primitives}/editable/src/index.js +0 -0
  952. /package/dist/{packages/primitives → primitives}/field/src/Field.js +0 -0
  953. /package/dist/{packages/primitives → primitives}/field/src/Field.vue_vue_type_script_setup_true_lang.js +0 -0
  954. /package/dist/{packages/primitives → primitives}/field/src/index.js +0 -0
  955. /package/dist/{packages/primitives → primitives}/fieldset/src/Fieldset.js +0 -0
  956. /package/dist/{packages/primitives → primitives}/fieldset/src/Fieldset.vue_vue_type_script_setup_true_lang.js +0 -0
  957. /package/dist/{packages/primitives → primitives}/fieldset/src/index.js +0 -0
  958. /package/dist/{packages/primitives → primitives}/file-upload/src/FileUpload.js +0 -0
  959. /package/dist/{packages/primitives → primitives}/file-upload/src/FileUpload.vue_vue_type_script_setup_true_lang.js +0 -0
  960. /package/dist/{packages/primitives → primitives}/file-upload/src/index.js +0 -0
  961. /package/dist/{packages/primitives → primitives}/hover-card/src/HoverCard.js +0 -0
  962. /package/dist/{packages/primitives → primitives}/hover-card/src/HoverCard.vue_vue_type_script_setup_true_lang.js +0 -0
  963. /package/dist/{packages/primitives → primitives}/hover-card/src/index.js +0 -0
  964. /package/dist/{packages/primitives → primitives}/icon-button/src/IconButton.js +0 -0
  965. /package/dist/{packages/primitives → primitives}/icon-button/src/IconButton.vue_vue_type_script_setup_true_lang.js +0 -0
  966. /package/dist/{packages/primitives → primitives}/icon-button/src/index.js +0 -0
  967. /package/dist/{packages/primitives → primitives}/indicator/src/Indicator.js +0 -0
  968. /package/dist/{packages/primitives → primitives}/indicator/src/Indicator.vue_vue_type_script_setup_true_lang.js +0 -0
  969. /package/dist/{packages/primitives → primitives}/indicator/src/index.js +0 -0
  970. /package/dist/{packages/primitives → primitives}/inline-error/src/InlineError.js +0 -0
  971. /package/dist/{packages/primitives → primitives}/inline-error/src/InlineError.vue_vue_type_script_setup_true_lang.js +0 -0
  972. /package/dist/{packages/primitives → primitives}/inline-error/src/index.js +0 -0
  973. /package/dist/{packages/primitives → primitives}/kbd/src/Kbd.js +0 -0
  974. /package/dist/{packages/primitives → primitives}/kbd/src/Kbd.vue_vue_type_script_setup_true_lang.js +0 -0
  975. /package/dist/{packages/primitives → primitives}/kbd/src/index.js +0 -0
  976. /package/dist/{packages/primitives → primitives}/link/src/Link.js +0 -0
  977. /package/dist/{packages/primitives → primitives}/link/src/Link.vue_vue_type_script_setup_true_lang.js +0 -0
  978. /package/dist/{packages/primitives → primitives}/link/src/index.js +0 -0
  979. /package/dist/{packages/primitives → primitives}/list/src/List.js +0 -0
  980. /package/dist/{packages/primitives → primitives}/list/src/List.vue_vue_type_script_setup_true_lang.js +0 -0
  981. /package/dist/{packages/primitives → primitives}/list/src/ListItem.js +0 -0
  982. /package/dist/{packages/primitives → primitives}/list/src/index.js +0 -0
  983. /package/dist/{packages/primitives → primitives}/menubar/src/Menubar.js +0 -0
  984. /package/dist/{packages/primitives → primitives}/menubar/src/index.js +0 -0
  985. /package/dist/{packages/primitives → primitives}/number-field/src/NumberField.js +0 -0
  986. /package/dist/{packages/primitives → primitives}/number-field/src/NumberField.vue_vue_type_script_setup_true_lang.js +0 -0
  987. /package/dist/{packages/primitives → primitives}/number-field/src/index.js +0 -0
  988. /package/dist/{packages/primitives → primitives}/otp-input/src/OtpInput.js +0 -0
  989. /package/dist/{packages/primitives → primitives}/otp-input/src/OtpInput.vue_vue_type_script_setup_true_lang.js +0 -0
  990. /package/dist/{packages/primitives → primitives}/otp-input/src/index.js +0 -0
  991. /package/dist/{packages/primitives → primitives}/pagination/src/Pagination.js +0 -0
  992. /package/dist/{packages/primitives → primitives}/pagination/src/Pagination.vue_vue_type_script_setup_true_lang.js +0 -0
  993. /package/dist/{packages/primitives → primitives}/pagination/src/index.js +0 -0
  994. /package/dist/{packages/primitives → primitives}/popover/src/Popover.js +0 -0
  995. /package/dist/{packages/primitives → primitives}/popover/src/Popover.vue_vue_type_script_setup_true_lang.js +0 -0
  996. /package/dist/{packages/primitives → primitives}/popover/src/index.js +0 -0
  997. /package/dist/{packages/primitives → primitives}/progress/src/Progress.js +0 -0
  998. /package/dist/{packages/primitives → primitives}/progress/src/Progress.vue_vue_type_script_setup_true_lang.js +0 -0
  999. /package/dist/{packages/primitives → primitives}/progress/src/index.js +0 -0
  1000. /package/dist/{packages/primitives → primitives}/radial-progress/src/RadialProgress.js +0 -0
  1001. /package/dist/{packages/primitives → primitives}/radial-progress/src/RadialProgress.vue_vue_type_script_setup_true_lang.js +0 -0
  1002. /package/dist/{packages/primitives → primitives}/radial-progress/src/index.js +0 -0
  1003. /package/dist/{packages/primitives → primitives}/radio-group/src/RadioGroup.js +0 -0
  1004. /package/dist/{packages/primitives → primitives}/radio-group/src/RadioGroup.vue_vue_type_script_setup_true_lang.js +0 -0
  1005. /package/dist/{packages/primitives → primitives}/radio-group/src/index.js +0 -0
  1006. /package/dist/{packages/primitives → primitives}/rating/src/Rating.js +0 -0
  1007. /package/dist/{packages/primitives → primitives}/rating/src/Rating.vue_vue_type_script_setup_true_lang.js +0 -0
  1008. /package/dist/{packages/primitives → primitives}/rating/src/index.js +0 -0
  1009. /package/dist/{packages/primitives → primitives}/scroll-area/src/ScrollArea.js +0 -0
  1010. /package/dist/{packages/primitives → primitives}/scroll-area/src/ScrollArea.vue_vue_type_script_setup_true_lang.js +0 -0
  1011. /package/dist/{packages/primitives → primitives}/scroll-area/src/index.js +0 -0
  1012. /package/dist/{packages/primitives → primitives}/segmented-control/src/SegmentedControl.js +0 -0
  1013. /package/dist/{packages/primitives → primitives}/segmented-control/src/index.js +0 -0
  1014. /package/dist/{packages/primitives → primitives}/select/src/Select.js +0 -0
  1015. /package/dist/{packages/primitives → primitives}/select/src/Select.vue_vue_type_script_setup_true_lang.js +0 -0
  1016. /package/dist/{packages/primitives → primitives}/select/src/index.js +0 -0
  1017. /package/dist/{packages/primitives → primitives}/separator/src/Separator.js +0 -0
  1018. /package/dist/{packages/primitives → primitives}/separator/src/Separator.vue_vue_type_script_setup_true_lang.js +0 -0
  1019. /package/dist/{packages/primitives → primitives}/separator/src/index.js +0 -0
  1020. /package/dist/{packages/primitives → primitives}/skeleton/src/Skeleton.js +0 -0
  1021. /package/dist/{packages/primitives → primitives}/skeleton/src/Skeleton.vue_vue_type_script_setup_true_lang.js +0 -0
  1022. /package/dist/{packages/primitives → primitives}/skeleton/src/index.js +0 -0
  1023. /package/dist/{packages/primitives → primitives}/slider/src/Slider.js +0 -0
  1024. /package/dist/{packages/primitives → primitives}/slider/src/Slider.vue_vue_type_script_setup_true_lang.js +0 -0
  1025. /package/dist/{packages/primitives → primitives}/slider/src/index.js +0 -0
  1026. /package/dist/{packages/primitives → primitives}/speed-dial/src/SpeedDial.js +0 -0
  1027. /package/dist/{packages/primitives → primitives}/speed-dial/src/SpeedDial.vue_vue_type_script_setup_true_lang.js +0 -0
  1028. /package/dist/{packages/primitives → primitives}/speed-dial/src/index.js +0 -0
  1029. /package/dist/{packages/primitives → primitives}/spinner/src/Spinner.js +0 -0
  1030. /package/dist/{packages/primitives → primitives}/spinner/src/Spinner.vue_vue_type_script_setup_true_lang.js +0 -0
  1031. /package/dist/{packages/primitives → primitives}/spinner/src/index.js +0 -0
  1032. /package/dist/{packages/primitives → primitives}/stepper/src/Stepper.js +0 -0
  1033. /package/dist/{packages/primitives → primitives}/stepper/src/index.js +0 -0
  1034. /package/dist/{packages/primitives → primitives}/surface/src/Surface.js +0 -0
  1035. /package/dist/{packages/primitives → primitives}/surface/src/Surface.vue_vue_type_script_setup_true_lang.js +0 -0
  1036. /package/dist/{packages/primitives → primitives}/surface/src/index.js +0 -0
  1037. /package/dist/{packages/primitives → primitives}/switch/src/Switch.js +0 -0
  1038. /package/dist/{packages/primitives → primitives}/switch/src/index.js +0 -0
  1039. /package/dist/{packages/primitives → primitives}/table/src/Table.js +0 -0
  1040. /package/dist/{packages/primitives → primitives}/table/src/Table.vue_vue_type_script_setup_true_lang.js +0 -0
  1041. /package/dist/{packages/primitives → primitives}/table/src/TableCell.js +0 -0
  1042. /package/dist/{packages/primitives → primitives}/table/src/TableCell.vue_vue_type_script_setup_true_lang.js +0 -0
  1043. /package/dist/{packages/primitives → primitives}/table/src/TableHead.js +0 -0
  1044. /package/dist/{packages/primitives → primitives}/table/src/TableHead.vue_vue_type_script_setup_true_lang.js +0 -0
  1045. /package/dist/{packages/primitives → primitives}/table/src/TableRow.js +0 -0
  1046. /package/dist/{packages/primitives → primitives}/table/src/TableRow.vue_vue_type_script_setup_true_lang.js +0 -0
  1047. /package/dist/{packages/primitives → primitives}/tabs/src/Tabs.js +0 -0
  1048. /package/dist/{packages/primitives → primitives}/tabs/src/Tabs.vue_vue_type_script_setup_true_lang.js +0 -0
  1049. /package/dist/{packages/primitives → primitives}/tabs/src/index.js +0 -0
  1050. /package/dist/{packages/primitives → primitives}/tags-input/src/TagsInput.js +0 -0
  1051. /package/dist/{packages/primitives → primitives}/tags-input/src/TagsInput.vue_vue_type_script_setup_true_lang.js +0 -0
  1052. /package/dist/{packages/primitives → primitives}/tags-input/src/index.js +0 -0
  1053. /package/dist/{packages/primitives → primitives}/text-field/src/TextField.js +0 -0
  1054. /package/dist/{packages/primitives → primitives}/text-field/src/TextField.vue_vue_type_script_setup_true_lang.js +0 -0
  1055. /package/dist/{packages/primitives → primitives}/text-field/src/index.js +0 -0
  1056. /package/dist/{packages/primitives → primitives}/textarea/src/Textarea.js +0 -0
  1057. /package/dist/{packages/primitives → primitives}/textarea/src/Textarea.vue_vue_type_script_setup_true_lang.js +0 -0
  1058. /package/dist/{packages/primitives → primitives}/textarea/src/index.js +0 -0
  1059. /package/dist/{packages/primitives → primitives}/time-picker/src/TimePicker.js +0 -0
  1060. /package/dist/{packages/primitives → primitives}/time-picker/src/index.js +0 -0
  1061. /package/dist/{packages/primitives → primitives}/timeline/src/Timeline.js +0 -0
  1062. /package/dist/{packages/primitives → primitives}/timeline/src/Timeline.vue_vue_type_script_setup_true_lang.js +0 -0
  1063. /package/dist/{packages/primitives → primitives}/timeline/src/TimelineItem.js +0 -0
  1064. /package/dist/{packages/primitives → primitives}/timeline/src/TimelineItem.vue_vue_type_script_setup_true_lang.js +0 -0
  1065. /package/dist/{packages/primitives → primitives}/toast/src/Toast.js +0 -0
  1066. /package/dist/{packages/primitives → primitives}/toast/src/Toast.vue_vue_type_script_setup_true_lang.js +0 -0
  1067. /package/dist/{packages/primitives → primitives}/toast/src/ToastItem.js +0 -0
  1068. /package/dist/{packages/primitives → primitives}/toast/src/index.js +0 -0
  1069. /package/dist/{packages/primitives → primitives}/tooltip/src/Tooltip.js +0 -0
  1070. /package/dist/{packages/primitives → primitives}/tooltip/src/Tooltip.vue_vue_type_script_setup_true_lang.js +0 -0
  1071. /package/dist/{packages/primitives → primitives}/tooltip/src/index.js +0 -0
  1072. /package/dist/{packages/primitives → primitives}/window-controls/src/WindowControls.js +0 -0
  1073. /package/dist/{packages/primitives → primitives}/window-controls/src/index.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.js","names":[],"sources":["../../../../packages/primitives/stepper/src/Stepper.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { StepperLabels } from \"@ecoma-io/loom-labels\";\n\n/**\n\n/**\n * Loom's English, co-located with the component so it tree-shakes with it, and\n * exported so a host can build a partial vocabulary against the real thing.\n *\n * `group` is capitalised where Reka's is not, which is what lets\n * `Stepper.test.ts` assert whose string reached the DOM rather than merely\n * what it said.\n */\nexport const STEPPER_LABELS: StepperLabels = {\n group: \"Progress\",\n position: ({ step, stepCount }) => `Step ${String(step)} of ${String(stepCount)}`,\n step: ({ step }) => `Step ${String(step)}:`,\n completed: ({ title }) => `${title} (completed)`,\n};\n\n/** One step in the spine. Its `title` is also the accessible name of that step's trigger. */\nexport interface StepperStep {\n /** The step's label, shown next to its indicator and read out as the trigger's name. */\n title: string;\n /** A line under the title saying what the step asks for. Omit it for a bare spine. */\n description?: string;\n /** Present but unreachable: the indicator greys and the title mutes, and neither pointer nor keyboard can select it. */\n disabled?: boolean;\n}\n\n/** The axis the spine runs along, which also decides which arrow keys move between steps. */\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport {\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n} from \"reka-ui\";\nimport { Check } from \"@lucide/vue\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { optional } from \"@ecoma-io/loom-core\";\nimport { useSplitAttrs } from \"@ecoma-io/loom-core\";\nimport { useLabels, type LabelOverrides } from \"@ecoma-io/loom-labels\";\n\n/**\n * Stepper — the progress spine of a multi-step flow: a checkout, an\n * onboarding sequence, a wizard. It says how many steps there are, which one\n * a reader is on, and which are behind them; the step's own content is the\n * host's, rendered next to or under the spine.\n *\n * It is **not** a number stepper. A numeric value with increment and\n * decrement buttons is NumberField. The word is genuinely ambiguous and both\n * controls answer to it, so the two are worth naming together: this one is\n * about position in a flow, that one is about a quantity.\n *\n * Progress shows one bar for one task whose extent is a percentage — reach\n * for it when the stages have no names worth showing. Tabs switches between\n * panels that have no order at all; a stepper's steps are ordered by\n * definition, which is why it carries a connector and Tabs carries none.\n *\n * Built on Reka UI's Stepper, which supplies the item state machine\n * (completed / active / inactive), the `linear` reachability rule and\n * arrow-key navigation along the orientation's axis.\n *\n * Three things are added on top of it.\n *\n * The first is the roving tab stop. Reka gives *every* focusable trigger\n * `tabindex=\"0\"`, so a five-step spine would be five Tab stops — the defect\n * the accessibility bar names outright. The `tabindex` bound below overrides\n * Reka's, leaving exactly one trigger tabbable at a time (the one last\n * focused, else the current step); Reka's own arrow-key handler still moves\n * real focus between them, which `tabindex=\"-1\"` does not prevent.\n *\n * The second is where `aria-current` sits. Reka puts `aria-current=\"true\"` on\n * the item wrapper, a `div` with no role that a reader never lands on, so the\n * marking is not conveyed at the moment it matters. It is moved here onto the\n * trigger — the element that takes focus — and given the value the WAI-ARIA\n * pattern asks for on a step in a process.\n *\n * The third is the live region. Reka renders one of its own on the root and\n * writes \"Step N of M\" into it as a **text node inside its render function** —\n * not a prop, not a slot, not an attribute — which makes it the one string in\n * this library that no binding on Loom's side can replace. So Loom renders its\n * own alongside it and takes Reka's out of the accessibility tree from\n * `src/styles/global.css`, which carries that reasoning and the coupling it\n * creates. `e2e/stepper.e2e.ts` is what keeps the coupling honest: it asserts\n * that a Loom stepper has exactly one live region and that its words are\n * Loom's.\n */\nconst props = withDefaults(\n defineProps<{\n /** The current step, 1-based. Omit it and Stepper owns its own position. */\n modelValue?: number;\n /** The ordered steps. Their index decides their number; there is no id to keep. */\n steps: StepperStep[];\n /** The axis the spine runs along; vertical moves the titles beside the indicators. */\n orientation?: StepperOrientation;\n /** Locks the flow to its furthest point: a reader may go back, or one step on, never jump ahead. */\n linear?: boolean;\n /**\n * Names for everything the spine says out loud, as any subset of\n * `StepperLabels` — the rest stay as the host's `provideLoomLabels`\n * vocabulary left them, and then as Loom's English.\n *\n * A whole application's language belongs in that vocabulary rather than\n * here. This is the per-instance correction, and the key it exists for is\n * `group`: a page with two flows on it needs each named for what it steps\n * through.\n */\n labels?: LabelOverrides<StepperLabels>;\n }>(),\n { orientation: \"horizontal\", linear: false },\n);\n\nconst emit = defineEmits<{\n /** The step chosen, 1-based. Fires for a trigger click and for Enter/Space on one. */\n \"update:modelValue\": [value: number];\n}>();\n\n// `text`, not `labels`: the prop of that name is one of the three sources this\n// resolves, and a template reading the raw prop would be reading the overrides\n// rather than the answer.\nconst text = useLabels(\"stepper\", STEPPER_LABELS, () => props.labels);\n\n// The root renders a real element and it is the one every fallthrough\n// attribute belongs on: it is the `role=\"group\"` the whole spine lives in, so\n// an `aria-label` naming the flow lands there. It is spread *after*\n// `text.group` in the template for that reason — the vocabulary supplies the\n// name a spine has when nobody names it, and a caller who does name one still\n// wins. `class` is pulled out of the spread and merged through `cn()` instead,\n// so a caller's layout utility resolves against the root's own rather than\n// merely being concatenated after it.\ndefineOptions({ inheritAttrs: false });\nconst { attrs, rest: rootAttrs } = useSplitAttrs();\n\n/**\n * The two layouts, side by side rather than as template branches that drift\n * apart. `satisfies` is what stops an orientation being added to the type and\n * forgotten here.\n *\n * Horizontal hangs the connector off the item box (`relative`) rather than\n * off the rail: `left-1/2 w-full` then spans exactly the distance between two\n * indicator centres, since the items are equal-width flex children. It is\n * drawn behind them — the trigger is `relative`, so it and every later item's\n * trigger paint over a line that runs under the circles.\n */\nconst LAYOUTS = {\n horizontal: {\n root: \"flex w-full items-start\",\n item: \"relative flex flex-1 flex-col items-center gap-2 text-center\",\n rail: \"\",\n separator: \"absolute left-1/2 top-4 h-0.5 w-full -translate-y-1/2\",\n fill: \"origin-left scale-x-0\",\n filled: \"scale-x-100\",\n text: \"flex flex-col gap-0.5\",\n },\n vertical: {\n root: \"flex flex-col\",\n item: \"flex gap-3\",\n rail: \"flex flex-col items-center self-stretch\",\n // `order-1` rather than a second template branch: the connector has to be\n // declared before the trigger so the trigger paints over it, and has to sit\n // below the trigger once the rail is a column.\n separator: \"order-1 my-1 w-0.5 flex-1\",\n fill: \"origin-top scale-y-0\",\n filled: \"scale-y-100\",\n text: \"flex flex-col gap-0.5\",\n },\n} satisfies Record<StepperOrientation, Record<string, string>>;\n\nconst layout = computed(() => LAYOUTS[props.orientation]);\n\n/** The step that last held focus, and so owns the spine's single tab stop. */\nconst focused = ref<number | null>(null);\n\n/**\n * Reka's own focusability rule, mirrored: a linear stepper refuses focus to\n * anything past one step ahead of where the reader is. It has to be repeated\n * rather than read off the DOM, because the tab stop is decided while the\n * `tabindex` attributes are still being rendered — and a tab stop parked on a\n * step Reka will not focus leaves the whole spine unreachable by Tab.\n */\nfunction focusable(step: number, current: number): boolean {\n if (props.steps[step - 1]?.disabled) return false;\n return props.linear ? step <= current + 1 : true;\n}\n\n/**\n * The one step whose trigger is tabbable. Everything else is `tabindex=\"-1\"`.\n *\n * Reka types the value it hands its own slot as possibly absent even though\n * `StepperRoot` defaults it to 1, so the fallback here is that declaration\n * being honoured rather than a state this can reach.\n */\nfunction tabStop(current: number | undefined): number {\n const at = current ?? 1;\n if (focused.value !== null && focusable(focused.value, at)) return focused.value;\n if (focusable(at, at)) return at;\n return props.steps.findIndex((_, index) => focusable(index + 1, at)) + 1;\n}\n\n/**\n * Reka points every trigger's `aria-describedby` at a description id whether\n * or not that description was rendered, and a reference resolving to nothing\n * is worse than no reference: it claims a description exists. Binding the key\n * as `undefined` is what takes it back off, since an attribute set to\n * `undefined` is removed rather than merged.\n */\nfunction describedBy(step: StepperStep): Record<string, undefined> {\n return step.description === undefined ? { \"aria-describedby\": undefined } : {};\n}\n\n/** Reka reports its position as possibly absent; this component's model is a step number or nothing at all. */\nfunction onUpdate(value: number | undefined): void {\n if (value !== undefined) emit(\"update:modelValue\", value);\n}\n</script>\n\n<template>\n <StepperRoot\n v-slot=\"{ modelValue: current }\"\n v-bind=\"{ 'aria-label': text.group, ...rootAttrs, ...optional({ modelValue }) }\"\n data-loom-stepper\n :orientation=\"orientation\"\n :linear=\"linear\"\n :class=\"cn(layout.root, attrs.class as string)\"\n @update:model-value=\"onUpdate\"\n >\n <StepperItem\n v-for=\"(step, index) in steps\"\n :key=\"index\"\n v-slot=\"{ state }\"\n :step=\"index + 1\"\n :disabled=\"step.disabled ?? false\"\n :aria-current=\"undefined\"\n :class=\"layout.item\"\n >\n <div :class=\"layout.rail\">\n <!-- Declared before the trigger so the trigger paints over it: the\n connector runs from this indicator's centre to the next one's. -->\n <StepperSeparator\n v-if=\"index < steps.length - 1\"\n :class=\"cn('overflow-hidden rounded-full bg-border', layout.separator)\"\n >\n <span\n :class=\"\n cn(\n 'block h-full w-full bg-primary transition-transform ease-out',\n layout.fill,\n state === 'completed' && layout.filled,\n )\n \"\n />\n </StepperSeparator>\n\n <StepperTrigger\n v-bind=\"describedBy(step)\"\n :tabindex=\"tabStop(current) === index + 1 ? 0 : -1\"\n :aria-current=\"state === 'active' ? 'step' : undefined\"\n :class=\"\n cn(\n 'relative flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n 'transition-colors ease-out',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo',\n // Unavailable is a *colour*, and the whole distinction lives on\n // the indicator. It used to be `opacity-50` on the item, which\n // took the title and the description down with it:\n // `--color-muted-foreground` is 5.76:1 on white and 2.11:1 once\n // composited at half alpha, so the one thing that had to stay\n // readable was the one thing the fade broke. A grey-filled disc\n // against the inactive step's white one says the same thing and\n // costs nothing, and every string below is a measured pair.\n //\n // Keyed off the prop and NOT off `data-[disabled]:`, because in\n // a linear flow Reka marks every step past the next one disabled\n // — painting all of them unavailable reads as broken rather than\n // as later, and a step that is merely ahead already says so by\n // being inactive. The branch also keeps the two apart in the\n // cascade: the inactive rules carry an attribute selector, so a\n // plain `bg-muted` alongside them would lose.\n step.disabled\n ? 'border-border-strong bg-muted text-muted-foreground'\n : [\n 'data-[state=inactive]:border-input data-[state=inactive]:bg-background data-[state=inactive]:text-muted-foreground',\n 'data-[state=inactive]:enabled:hover:bg-subtle',\n ],\n 'data-[state=active]:border-primary data-[state=active]:bg-primary-muted data-[state=active]:text-primary-text',\n 'data-[state=completed]:border-primary data-[state=completed]:bg-primary data-[state=completed]:text-primary-foreground',\n 'disabled:cursor-not-allowed',\n )\n \"\n @focus=\"focused = index + 1\"\n >\n <StepperIndicator class=\"flex items-center justify-center\">\n <!-- Three states, none of them colour alone: the check is a shape\n change, the number is text, and the current step carries\n `aria-current` above. -->\n <Check v-if=\"state === 'completed'\" class=\"h-4 w-4 animate-scale-in\" />\n <template v-else>{{ index + 1 }}</template>\n </StepperIndicator>\n </StepperTrigger>\n </div>\n\n <div\n :class=\"cn(layout.text, orientation === 'vertical' && index < steps.length - 1 && 'pb-6')\"\n >\n <!-- `as=\"span\"`, not Reka's default `h4`: a step label is not a\n section heading, and a component cannot know what heading level\n the page it lands in has room for. -->\n <!-- The title mutes rather than fades: `--color-muted-foreground` is a\n measured 5.76:1 on the card it sits on, two steps back from\n `--color-foreground` and still comfortably readable. The\n description below is already that colour and stays there — an\n unreachable step's description is the one line a reader most needs\n in order to find out why it is unreachable. -->\n <StepperTitle\n as=\"span\"\n :class=\"\n cn('text-sm font-medium', step.disabled ? 'text-muted-foreground' : 'text-foreground')\n \"\n >\n <!-- ARIA has a value for \"you are here\" and none for \"done\", and the\n check glyph is invisible to a screen reader. This element is what\n `aria-labelledby` names the trigger with, so the word has to join\n the name from inside it.\n Two nodes rather than the title plus a trailing \"(completed)\"\n span, because a suffix is Loom deciding where a qualifier sits\n relative to the thing it qualifies, and that is a property of the\n language. The visible half is `aria-hidden` and excluded from the\n name computation; the hidden half carries the whole finished\n sentence the vocabulary returned. -->\n <!-- The position leads the name for the same reason: the trigger's\n visible text is the step's number, and WCAG 2.5.3 (Label in\n Name) makes a control's visible text part of its accessible\n name. Measured 2026-08-26, `label-content-name-mismatch` fired\n on every non-completed trigger until the number joined the\n name — a voice user saying \"Step 2\" has to land on the same\n trigger one saying \"Shipping\" does. -->\n <span class=\"sr-only\">{{ text.step({ step: index + 1 }) }}</span>\n <template v-if=\"state === 'completed'\">\n <span aria-hidden=\"true\">{{ step.title }}</span>\n <span class=\"sr-only\">{{ text.completed({ title: step.title }) }}</span>\n </template>\n <template v-else>{{ step.title }}</template>\n </StepperTitle>\n <StepperDescription v-if=\"step.description\" class=\"text-xs text-muted-foreground\">\n {{ step.description }}\n </StepperDescription>\n </div>\n </StepperItem>\n\n <!-- Loom's own position announcement, standing in for the one `StepperRoot`\n renders as a text node its render function hard-codes in English.\n `data-loom-live` is what the rule in `global.css` selects *around* when\n it removes Reka's from the accessibility tree, so the two are told\n apart by what Loom marked rather than by DOM order.\n The count comes from `steps` rather than from Reka's registry, which\n fills in over a tick as each trigger mounts — the same number, one\n render sooner, which matters for a region a screen reader reads on\n arrival. -->\n <span data-loom-live role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">{{\n text.position({ step: current ?? 1, stepCount: steps.length })\n }}</span>\n </StepperRoot>\n</template>\n"],"mappings":""}
@@ -0,0 +1,208 @@
1
+ import { cn } from "../../../core/src/cn.js";
2
+ import { optional } from "../../../core/src/props.js";
3
+ import { useSplitAttrs } from "../../../core/src/attrs.js";
4
+ import "../../../core/src/index.js";
5
+ import { useLabels } from "../../../labels/src/labels.js";
6
+ import "../../../labels/src/index.js";
7
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, ref, renderList, toDisplayString, unref, withCtx } from "vue";
8
+ import { Check } from "@lucide/vue";
9
+ import { StepperDescription, StepperIndicator, StepperItem, StepperRoot, StepperSeparator, StepperTitle, StepperTrigger } from "reka-ui";
10
+ //#region packages/primitives/stepper/src/Stepper.vue?vue&type=script&setup=true&lang.ts
11
+ var _hoisted_1 = { class: "sr-only" };
12
+ var _hoisted_2 = { "aria-hidden": "true" };
13
+ var _hoisted_3 = { class: "sr-only" };
14
+ var _hoisted_4 = {
15
+ "data-loom-live": "",
16
+ role: "status",
17
+ "aria-live": "polite",
18
+ "aria-atomic": "true",
19
+ class: "sr-only"
20
+ };
21
+ /**
22
+
23
+ /**
24
+ * Loom's English, co-located with the component so it tree-shakes with it, and
25
+ * exported so a host can build a partial vocabulary against the real thing.
26
+ *
27
+ * `group` is capitalised where Reka's is not, which is what lets
28
+ * `Stepper.test.ts` assert whose string reached the DOM rather than merely
29
+ * what it said.
30
+ */
31
+ var STEPPER_LABELS = {
32
+ group: "Progress",
33
+ position: ({ step, stepCount }) => `Step ${String(step)} of ${String(stepCount)}`,
34
+ step: ({ step }) => `Step ${String(step)}:`,
35
+ completed: ({ title }) => `${title} (completed)`
36
+ };
37
+ var Stepper_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
38
+ inheritAttrs: false,
39
+ __name: "Stepper",
40
+ props: {
41
+ modelValue: {},
42
+ steps: {},
43
+ orientation: { default: "horizontal" },
44
+ linear: {
45
+ type: Boolean,
46
+ default: false
47
+ },
48
+ labels: {}
49
+ },
50
+ emits: ["update:modelValue"],
51
+ setup(__props, { emit: __emit }) {
52
+ const props = __props;
53
+ const emit = __emit;
54
+ const text = useLabels("stepper", STEPPER_LABELS, () => props.labels);
55
+ const { attrs, rest: rootAttrs } = useSplitAttrs();
56
+ /**
57
+ * The two layouts, side by side rather than as template branches that drift
58
+ * apart. `satisfies` is what stops an orientation being added to the type and
59
+ * forgotten here.
60
+ *
61
+ * Horizontal hangs the connector off the item box (`relative`) rather than
62
+ * off the rail: `left-1/2 w-full` then spans exactly the distance between two
63
+ * indicator centres, since the items are equal-width flex children. It is
64
+ * drawn behind them — the trigger is `relative`, so it and every later item's
65
+ * trigger paint over a line that runs under the circles.
66
+ */
67
+ const LAYOUTS = {
68
+ horizontal: {
69
+ root: "flex w-full items-start",
70
+ item: "relative flex flex-1 flex-col items-center gap-2 text-center",
71
+ rail: "",
72
+ separator: "absolute left-1/2 top-4 h-0.5 w-full -translate-y-1/2",
73
+ fill: "origin-left scale-x-0",
74
+ filled: "scale-x-100",
75
+ text: "flex flex-col gap-0.5"
76
+ },
77
+ vertical: {
78
+ root: "flex flex-col",
79
+ item: "flex gap-3",
80
+ rail: "flex flex-col items-center self-stretch",
81
+ separator: "order-1 my-1 w-0.5 flex-1",
82
+ fill: "origin-top scale-y-0",
83
+ filled: "scale-y-100",
84
+ text: "flex flex-col gap-0.5"
85
+ }
86
+ };
87
+ const layout = computed(() => LAYOUTS[props.orientation]);
88
+ /** The step that last held focus, and so owns the spine's single tab stop. */
89
+ const focused = ref(null);
90
+ /**
91
+ * Reka's own focusability rule, mirrored: a linear stepper refuses focus to
92
+ * anything past one step ahead of where the reader is. It has to be repeated
93
+ * rather than read off the DOM, because the tab stop is decided while the
94
+ * `tabindex` attributes are still being rendered — and a tab stop parked on a
95
+ * step Reka will not focus leaves the whole spine unreachable by Tab.
96
+ */
97
+ function focusable(step, current) {
98
+ if (props.steps[step - 1]?.disabled) return false;
99
+ return props.linear ? step <= current + 1 : true;
100
+ }
101
+ /**
102
+ * The one step whose trigger is tabbable. Everything else is `tabindex="-1"`.
103
+ *
104
+ * Reka types the value it hands its own slot as possibly absent even though
105
+ * `StepperRoot` defaults it to 1, so the fallback here is that declaration
106
+ * being honoured rather than a state this can reach.
107
+ */
108
+ function tabStop(current) {
109
+ const at = current ?? 1;
110
+ if (focused.value !== null && focusable(focused.value, at)) return focused.value;
111
+ if (focusable(at, at)) return at;
112
+ return props.steps.findIndex((_, index) => focusable(index + 1, at)) + 1;
113
+ }
114
+ /**
115
+ * Reka points every trigger's `aria-describedby` at a description id whether
116
+ * or not that description was rendered, and a reference resolving to nothing
117
+ * is worse than no reference: it claims a description exists. Binding the key
118
+ * as `undefined` is what takes it back off, since an attribute set to
119
+ * `undefined` is removed rather than merged.
120
+ */
121
+ function describedBy(step) {
122
+ return step.description === void 0 ? { "aria-describedby": void 0 } : {};
123
+ }
124
+ /** Reka reports its position as possibly absent; this component's model is a step number or nothing at all. */
125
+ function onUpdate(value) {
126
+ if (value !== void 0) emit("update:modelValue", value);
127
+ }
128
+ return (_ctx, _cache) => {
129
+ return openBlock(), createBlock(unref(StepperRoot), mergeProps({
130
+ "aria-label": unref(text).group,
131
+ ...unref(rootAttrs),
132
+ ...unref(optional)({ modelValue: __props.modelValue })
133
+ }, {
134
+ "data-loom-stepper": "",
135
+ orientation: __props.orientation,
136
+ linear: __props.linear,
137
+ class: unref(cn)(layout.value.root, unref(attrs).class),
138
+ "onUpdate:modelValue": onUpdate
139
+ }), {
140
+ default: withCtx(({ modelValue: current }) => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.steps, (step, index) => {
141
+ return openBlock(), createBlock(unref(StepperItem), {
142
+ key: index,
143
+ step: index + 1,
144
+ disabled: step.disabled ?? false,
145
+ "aria-current": void 0,
146
+ class: normalizeClass(layout.value.item)
147
+ }, {
148
+ default: withCtx(({ state }) => [createElementVNode("div", { class: normalizeClass(layout.value.rail) }, [index < __props.steps.length - 1 ? (openBlock(), createBlock(unref(StepperSeparator), {
149
+ key: 0,
150
+ class: normalizeClass(unref(cn)("overflow-hidden rounded-full bg-border", layout.value.separator))
151
+ }, {
152
+ default: withCtx(() => [createElementVNode("span", { class: normalizeClass(unref(cn)("block h-full w-full bg-primary transition-transform ease-out", layout.value.fill, state === "completed" && layout.value.filled)) }, null, 2)]),
153
+ _: 2
154
+ }, 1032, ["class"])) : createCommentVNode("", true), createVNode(unref(StepperTrigger), mergeProps({ ref_for: true }, describedBy(step), {
155
+ tabindex: tabStop(current) === index + 1 ? 0 : -1,
156
+ "aria-current": state === "active" ? "step" : void 0,
157
+ class: unref(cn)("relative flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-xs font-medium", "transition-colors ease-out", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo", step.disabled ? "border-border-strong bg-muted text-muted-foreground" : ["data-[state=inactive]:border-input data-[state=inactive]:bg-background data-[state=inactive]:text-muted-foreground", "data-[state=inactive]:enabled:hover:bg-subtle"], "data-[state=active]:border-primary data-[state=active]:bg-primary-muted data-[state=active]:text-primary-text", "data-[state=completed]:border-primary data-[state=completed]:bg-primary data-[state=completed]:text-primary-foreground", "disabled:cursor-not-allowed"),
158
+ onFocus: ($event) => focused.value = index + 1
159
+ }), {
160
+ default: withCtx(() => [createVNode(unref(StepperIndicator), { class: "flex items-center justify-center" }, {
161
+ default: withCtx(() => [state === "completed" ? (openBlock(), createBlock(unref(Check), {
162
+ key: 0,
163
+ class: "h-4 w-4 animate-scale-in"
164
+ })) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(index + 1), 1)], 64))]),
165
+ _: 2
166
+ }, 1024)]),
167
+ _: 2
168
+ }, 1040, [
169
+ "tabindex",
170
+ "aria-current",
171
+ "class",
172
+ "onFocus"
173
+ ])], 2), createElementVNode("div", { class: normalizeClass(unref(cn)(layout.value.text, __props.orientation === "vertical" && index < __props.steps.length - 1 && "pb-6")) }, [createVNode(unref(StepperTitle), {
174
+ as: "span",
175
+ class: normalizeClass(unref(cn)("text-sm font-medium", step.disabled ? "text-muted-foreground" : "text-foreground"))
176
+ }, {
177
+ default: withCtx(() => [createElementVNode("span", _hoisted_1, toDisplayString(unref(text).step({ step: index + 1 })), 1), state === "completed" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("span", _hoisted_2, toDisplayString(step.title), 1), createElementVNode("span", _hoisted_3, toDisplayString(unref(text).completed({ title: step.title })), 1)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(step.title), 1)], 64))]),
178
+ _: 2
179
+ }, 1032, ["class"]), step.description ? (openBlock(), createBlock(unref(StepperDescription), {
180
+ key: 0,
181
+ class: "text-xs text-muted-foreground"
182
+ }, {
183
+ default: withCtx(() => [createTextVNode(toDisplayString(step.description), 1)]),
184
+ _: 2
185
+ }, 1024)) : createCommentVNode("", true)], 2)]),
186
+ _: 2
187
+ }, 1032, [
188
+ "step",
189
+ "disabled",
190
+ "class"
191
+ ]);
192
+ }), 128)), createElementVNode("span", _hoisted_4, toDisplayString(unref(text).position({
193
+ step: current ?? 1,
194
+ stepCount: __props.steps.length
195
+ })), 1)]),
196
+ _: 1
197
+ }, 16, [
198
+ "orientation",
199
+ "linear",
200
+ "class"
201
+ ]);
202
+ };
203
+ }
204
+ });
205
+ //#endregion
206
+ export { STEPPER_LABELS, Stepper_vue_vue_type_script_setup_true_lang_default as default };
207
+
208
+ //# sourceMappingURL=Stepper.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/stepper/src/Stepper.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { StepperLabels } from \"@ecoma-io/loom-labels\";\n\n/**\n\n/**\n * Loom's English, co-located with the component so it tree-shakes with it, and\n * exported so a host can build a partial vocabulary against the real thing.\n *\n * `group` is capitalised where Reka's is not, which is what lets\n * `Stepper.test.ts` assert whose string reached the DOM rather than merely\n * what it said.\n */\nexport const STEPPER_LABELS: StepperLabels = {\n group: \"Progress\",\n position: ({ step, stepCount }) => `Step ${String(step)} of ${String(stepCount)}`,\n step: ({ step }) => `Step ${String(step)}:`,\n completed: ({ title }) => `${title} (completed)`,\n};\n\n/** One step in the spine. Its `title` is also the accessible name of that step's trigger. */\nexport interface StepperStep {\n /** The step's label, shown next to its indicator and read out as the trigger's name. */\n title: string;\n /** A line under the title saying what the step asks for. Omit it for a bare spine. */\n description?: string;\n /** Present but unreachable: the indicator greys and the title mutes, and neither pointer nor keyboard can select it. */\n disabled?: boolean;\n}\n\n/** The axis the spine runs along, which also decides which arrow keys move between steps. */\nexport type StepperOrientation = \"horizontal\" | \"vertical\";\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport {\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n} from \"reka-ui\";\nimport { Check } from \"@lucide/vue\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { optional } from \"@ecoma-io/loom-core\";\nimport { useSplitAttrs } from \"@ecoma-io/loom-core\";\nimport { useLabels, type LabelOverrides } from \"@ecoma-io/loom-labels\";\n\n/**\n * Stepper — the progress spine of a multi-step flow: a checkout, an\n * onboarding sequence, a wizard. It says how many steps there are, which one\n * a reader is on, and which are behind them; the step's own content is the\n * host's, rendered next to or under the spine.\n *\n * It is **not** a number stepper. A numeric value with increment and\n * decrement buttons is NumberField. The word is genuinely ambiguous and both\n * controls answer to it, so the two are worth naming together: this one is\n * about position in a flow, that one is about a quantity.\n *\n * Progress shows one bar for one task whose extent is a percentage — reach\n * for it when the stages have no names worth showing. Tabs switches between\n * panels that have no order at all; a stepper's steps are ordered by\n * definition, which is why it carries a connector and Tabs carries none.\n *\n * Built on Reka UI's Stepper, which supplies the item state machine\n * (completed / active / inactive), the `linear` reachability rule and\n * arrow-key navigation along the orientation's axis.\n *\n * Three things are added on top of it.\n *\n * The first is the roving tab stop. Reka gives *every* focusable trigger\n * `tabindex=\"0\"`, so a five-step spine would be five Tab stops — the defect\n * the accessibility bar names outright. The `tabindex` bound below overrides\n * Reka's, leaving exactly one trigger tabbable at a time (the one last\n * focused, else the current step); Reka's own arrow-key handler still moves\n * real focus between them, which `tabindex=\"-1\"` does not prevent.\n *\n * The second is where `aria-current` sits. Reka puts `aria-current=\"true\"` on\n * the item wrapper, a `div` with no role that a reader never lands on, so the\n * marking is not conveyed at the moment it matters. It is moved here onto the\n * trigger — the element that takes focus — and given the value the WAI-ARIA\n * pattern asks for on a step in a process.\n *\n * The third is the live region. Reka renders one of its own on the root and\n * writes \"Step N of M\" into it as a **text node inside its render function** —\n * not a prop, not a slot, not an attribute — which makes it the one string in\n * this library that no binding on Loom's side can replace. So Loom renders its\n * own alongside it and takes Reka's out of the accessibility tree from\n * `src/styles/global.css`, which carries that reasoning and the coupling it\n * creates. `e2e/stepper.e2e.ts` is what keeps the coupling honest: it asserts\n * that a Loom stepper has exactly one live region and that its words are\n * Loom's.\n */\nconst props = withDefaults(\n defineProps<{\n /** The current step, 1-based. Omit it and Stepper owns its own position. */\n modelValue?: number;\n /** The ordered steps. Their index decides their number; there is no id to keep. */\n steps: StepperStep[];\n /** The axis the spine runs along; vertical moves the titles beside the indicators. */\n orientation?: StepperOrientation;\n /** Locks the flow to its furthest point: a reader may go back, or one step on, never jump ahead. */\n linear?: boolean;\n /**\n * Names for everything the spine says out loud, as any subset of\n * `StepperLabels` — the rest stay as the host's `provideLoomLabels`\n * vocabulary left them, and then as Loom's English.\n *\n * A whole application's language belongs in that vocabulary rather than\n * here. This is the per-instance correction, and the key it exists for is\n * `group`: a page with two flows on it needs each named for what it steps\n * through.\n */\n labels?: LabelOverrides<StepperLabels>;\n }>(),\n { orientation: \"horizontal\", linear: false },\n);\n\nconst emit = defineEmits<{\n /** The step chosen, 1-based. Fires for a trigger click and for Enter/Space on one. */\n \"update:modelValue\": [value: number];\n}>();\n\n// `text`, not `labels`: the prop of that name is one of the three sources this\n// resolves, and a template reading the raw prop would be reading the overrides\n// rather than the answer.\nconst text = useLabels(\"stepper\", STEPPER_LABELS, () => props.labels);\n\n// The root renders a real element and it is the one every fallthrough\n// attribute belongs on: it is the `role=\"group\"` the whole spine lives in, so\n// an `aria-label` naming the flow lands there. It is spread *after*\n// `text.group` in the template for that reason — the vocabulary supplies the\n// name a spine has when nobody names it, and a caller who does name one still\n// wins. `class` is pulled out of the spread and merged through `cn()` instead,\n// so a caller's layout utility resolves against the root's own rather than\n// merely being concatenated after it.\ndefineOptions({ inheritAttrs: false });\nconst { attrs, rest: rootAttrs } = useSplitAttrs();\n\n/**\n * The two layouts, side by side rather than as template branches that drift\n * apart. `satisfies` is what stops an orientation being added to the type and\n * forgotten here.\n *\n * Horizontal hangs the connector off the item box (`relative`) rather than\n * off the rail: `left-1/2 w-full` then spans exactly the distance between two\n * indicator centres, since the items are equal-width flex children. It is\n * drawn behind them — the trigger is `relative`, so it and every later item's\n * trigger paint over a line that runs under the circles.\n */\nconst LAYOUTS = {\n horizontal: {\n root: \"flex w-full items-start\",\n item: \"relative flex flex-1 flex-col items-center gap-2 text-center\",\n rail: \"\",\n separator: \"absolute left-1/2 top-4 h-0.5 w-full -translate-y-1/2\",\n fill: \"origin-left scale-x-0\",\n filled: \"scale-x-100\",\n text: \"flex flex-col gap-0.5\",\n },\n vertical: {\n root: \"flex flex-col\",\n item: \"flex gap-3\",\n rail: \"flex flex-col items-center self-stretch\",\n // `order-1` rather than a second template branch: the connector has to be\n // declared before the trigger so the trigger paints over it, and has to sit\n // below the trigger once the rail is a column.\n separator: \"order-1 my-1 w-0.5 flex-1\",\n fill: \"origin-top scale-y-0\",\n filled: \"scale-y-100\",\n text: \"flex flex-col gap-0.5\",\n },\n} satisfies Record<StepperOrientation, Record<string, string>>;\n\nconst layout = computed(() => LAYOUTS[props.orientation]);\n\n/** The step that last held focus, and so owns the spine's single tab stop. */\nconst focused = ref<number | null>(null);\n\n/**\n * Reka's own focusability rule, mirrored: a linear stepper refuses focus to\n * anything past one step ahead of where the reader is. It has to be repeated\n * rather than read off the DOM, because the tab stop is decided while the\n * `tabindex` attributes are still being rendered — and a tab stop parked on a\n * step Reka will not focus leaves the whole spine unreachable by Tab.\n */\nfunction focusable(step: number, current: number): boolean {\n if (props.steps[step - 1]?.disabled) return false;\n return props.linear ? step <= current + 1 : true;\n}\n\n/**\n * The one step whose trigger is tabbable. Everything else is `tabindex=\"-1\"`.\n *\n * Reka types the value it hands its own slot as possibly absent even though\n * `StepperRoot` defaults it to 1, so the fallback here is that declaration\n * being honoured rather than a state this can reach.\n */\nfunction tabStop(current: number | undefined): number {\n const at = current ?? 1;\n if (focused.value !== null && focusable(focused.value, at)) return focused.value;\n if (focusable(at, at)) return at;\n return props.steps.findIndex((_, index) => focusable(index + 1, at)) + 1;\n}\n\n/**\n * Reka points every trigger's `aria-describedby` at a description id whether\n * or not that description was rendered, and a reference resolving to nothing\n * is worse than no reference: it claims a description exists. Binding the key\n * as `undefined` is what takes it back off, since an attribute set to\n * `undefined` is removed rather than merged.\n */\nfunction describedBy(step: StepperStep): Record<string, undefined> {\n return step.description === undefined ? { \"aria-describedby\": undefined } : {};\n}\n\n/** Reka reports its position as possibly absent; this component's model is a step number or nothing at all. */\nfunction onUpdate(value: number | undefined): void {\n if (value !== undefined) emit(\"update:modelValue\", value);\n}\n</script>\n\n<template>\n <StepperRoot\n v-slot=\"{ modelValue: current }\"\n v-bind=\"{ 'aria-label': text.group, ...rootAttrs, ...optional({ modelValue }) }\"\n data-loom-stepper\n :orientation=\"orientation\"\n :linear=\"linear\"\n :class=\"cn(layout.root, attrs.class as string)\"\n @update:model-value=\"onUpdate\"\n >\n <StepperItem\n v-for=\"(step, index) in steps\"\n :key=\"index\"\n v-slot=\"{ state }\"\n :step=\"index + 1\"\n :disabled=\"step.disabled ?? false\"\n :aria-current=\"undefined\"\n :class=\"layout.item\"\n >\n <div :class=\"layout.rail\">\n <!-- Declared before the trigger so the trigger paints over it: the\n connector runs from this indicator's centre to the next one's. -->\n <StepperSeparator\n v-if=\"index < steps.length - 1\"\n :class=\"cn('overflow-hidden rounded-full bg-border', layout.separator)\"\n >\n <span\n :class=\"\n cn(\n 'block h-full w-full bg-primary transition-transform ease-out',\n layout.fill,\n state === 'completed' && layout.filled,\n )\n \"\n />\n </StepperSeparator>\n\n <StepperTrigger\n v-bind=\"describedBy(step)\"\n :tabindex=\"tabStop(current) === index + 1 ? 0 : -1\"\n :aria-current=\"state === 'active' ? 'step' : undefined\"\n :class=\"\n cn(\n 'relative flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-xs font-medium',\n 'transition-colors ease-out',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo',\n // Unavailable is a *colour*, and the whole distinction lives on\n // the indicator. It used to be `opacity-50` on the item, which\n // took the title and the description down with it:\n // `--color-muted-foreground` is 5.76:1 on white and 2.11:1 once\n // composited at half alpha, so the one thing that had to stay\n // readable was the one thing the fade broke. A grey-filled disc\n // against the inactive step's white one says the same thing and\n // costs nothing, and every string below is a measured pair.\n //\n // Keyed off the prop and NOT off `data-[disabled]:`, because in\n // a linear flow Reka marks every step past the next one disabled\n // — painting all of them unavailable reads as broken rather than\n // as later, and a step that is merely ahead already says so by\n // being inactive. The branch also keeps the two apart in the\n // cascade: the inactive rules carry an attribute selector, so a\n // plain `bg-muted` alongside them would lose.\n step.disabled\n ? 'border-border-strong bg-muted text-muted-foreground'\n : [\n 'data-[state=inactive]:border-input data-[state=inactive]:bg-background data-[state=inactive]:text-muted-foreground',\n 'data-[state=inactive]:enabled:hover:bg-subtle',\n ],\n 'data-[state=active]:border-primary data-[state=active]:bg-primary-muted data-[state=active]:text-primary-text',\n 'data-[state=completed]:border-primary data-[state=completed]:bg-primary data-[state=completed]:text-primary-foreground',\n 'disabled:cursor-not-allowed',\n )\n \"\n @focus=\"focused = index + 1\"\n >\n <StepperIndicator class=\"flex items-center justify-center\">\n <!-- Three states, none of them colour alone: the check is a shape\n change, the number is text, and the current step carries\n `aria-current` above. -->\n <Check v-if=\"state === 'completed'\" class=\"h-4 w-4 animate-scale-in\" />\n <template v-else>{{ index + 1 }}</template>\n </StepperIndicator>\n </StepperTrigger>\n </div>\n\n <div\n :class=\"cn(layout.text, orientation === 'vertical' && index < steps.length - 1 && 'pb-6')\"\n >\n <!-- `as=\"span\"`, not Reka's default `h4`: a step label is not a\n section heading, and a component cannot know what heading level\n the page it lands in has room for. -->\n <!-- The title mutes rather than fades: `--color-muted-foreground` is a\n measured 5.76:1 on the card it sits on, two steps back from\n `--color-foreground` and still comfortably readable. The\n description below is already that colour and stays there — an\n unreachable step's description is the one line a reader most needs\n in order to find out why it is unreachable. -->\n <StepperTitle\n as=\"span\"\n :class=\"\n cn('text-sm font-medium', step.disabled ? 'text-muted-foreground' : 'text-foreground')\n \"\n >\n <!-- ARIA has a value for \"you are here\" and none for \"done\", and the\n check glyph is invisible to a screen reader. This element is what\n `aria-labelledby` names the trigger with, so the word has to join\n the name from inside it.\n Two nodes rather than the title plus a trailing \"(completed)\"\n span, because a suffix is Loom deciding where a qualifier sits\n relative to the thing it qualifies, and that is a property of the\n language. The visible half is `aria-hidden` and excluded from the\n name computation; the hidden half carries the whole finished\n sentence the vocabulary returned. -->\n <!-- The position leads the name for the same reason: the trigger's\n visible text is the step's number, and WCAG 2.5.3 (Label in\n Name) makes a control's visible text part of its accessible\n name. Measured 2026-08-26, `label-content-name-mismatch` fired\n on every non-completed trigger until the number joined the\n name — a voice user saying \"Step 2\" has to land on the same\n trigger one saying \"Shipping\" does. -->\n <span class=\"sr-only\">{{ text.step({ step: index + 1 }) }}</span>\n <template v-if=\"state === 'completed'\">\n <span aria-hidden=\"true\">{{ step.title }}</span>\n <span class=\"sr-only\">{{ text.completed({ title: step.title }) }}</span>\n </template>\n <template v-else>{{ step.title }}</template>\n </StepperTitle>\n <StepperDescription v-if=\"step.description\" class=\"text-xs text-muted-foreground\">\n {{ step.description }}\n </StepperDescription>\n </div>\n </StepperItem>\n\n <!-- Loom's own position announcement, standing in for the one `StepperRoot`\n renders as a text node its render function hard-codes in English.\n `data-loom-live` is what the rule in `global.css` selects *around* when\n it removes Reka's from the accessibility tree, so the two are told\n apart by what Loom marked rather than by DOM order.\n The count comes from `steps` rather than from Reka's registry, which\n fills in over a tick as each trigger mounts — the same number, one\n render sooner, which matters for a region a screen reader reads on\n arrival. -->\n <span data-loom-live role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">{{\n text.position({ step: current ?? 1, stepCount: steps.length })\n }}</span>\n </StepperRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAa,iBAAgC;CAC3C,OAAO;CACP,WAAW,EAAE,MAAM,gBAAgB,QAAQ,OAAO,IAAI,EAAE,MAAM,OAAO,SAAS;CAC9E,OAAO,EAAE,WAAW,QAAQ,OAAO,IAAI,EAAE;CACzC,YAAY,EAAE,YAAY,GAAG,MAAM;AACrC;;;;;;;;;;;;;;;;EA8EA,MAAM,QAAQ;EAyBd,MAAM,OAAO;EAQb,MAAM,OAAO,UAAU,WAAW,sBAAsB,MAAM,MAAM;EAWpE,MAAM,EAAE,OAAO,MAAM,cAAc,cAAc;;;;;;;;;;;;EAajD,MAAM,UAAU;GACd,YAAY;IACV,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,MAAM;GACR;GACA,UAAU;IACR,MAAM;IACN,MAAM;IACN,MAAM;IAIN,WAAW;IACX,MAAM;IACN,QAAQ;IACR,MAAM;GACR;EACF;EAEA,MAAM,SAAS,eAAe,QAAQ,MAAM,YAAY;;EAGxD,MAAM,UAAU,IAAmB,IAAI;;;;;;;;EASvC,SAAS,UAAU,MAAc,SAA0B;GACzD,IAAI,MAAM,MAAM,OAAO,EAAE,EAAE,UAAU,OAAO;GAC5C,OAAO,MAAM,SAAS,QAAQ,UAAU,IAAI;EAC9C;;;;;;;;EASA,SAAS,QAAQ,SAAqC;GACpD,MAAM,KAAK,WAAW;GACtB,IAAI,QAAQ,UAAU,QAAQ,UAAU,QAAQ,OAAO,EAAE,GAAG,OAAO,QAAQ;GAC3E,IAAI,UAAU,IAAI,EAAE,GAAG,OAAO;GAC9B,OAAO,MAAM,MAAM,WAAW,GAAG,UAAU,UAAU,QAAQ,GAAG,EAAE,CAAC,IAAI;EACzE;;;;;;;;EASA,SAAS,YAAY,MAA8C;GACjE,OAAO,KAAK,gBAAgB,KAAA,IAAY,EAAE,oBAAoB,KAAA,EAAU,IAAI,CAAC;EAC/E;;EAGA,SAAS,SAAS,OAAiC;GACjD,IAAI,UAAU,KAAA,GAAW,KAAK,qBAAqB,KAAK;EAC1D;;GAIE,OAAA,UAAA,GAAA,YAgJc,MAAA,WAAA,GAhJd,WAgJc;IAAA,cA9IY,MAAA,IAAA,CAAI,CAAC;IAAK,GAAK,MAAA,SAAA;IAAS,GAAK,MAAA,QAAA,CAAQ,CAAA,EAAA,YAAG,QAAA,WAAU,CAAA;GAAA,GAAA;IAC1E,qBAAA;IACC,aAAa,QAAA;IACb,QAAQ,QAAA;IACR,OAAO,MAAA,EAAA,CAAE,CAAC,OAAA,MAAO,MAAM,MAAA,KAAA,CAAK,CAAC,KAAK;IAClC,uBAAoB;;IAGnB,SAAA,SAA8B,EAAA,YATV,cAAO,EAQ7B,UAAA,IAAA,GAAA,mBAyHc,UAAA,MAAA,WAxHY,QAAA,QAAhB,MAAM,UAAK;KADrB,OAAA,UAAA,GAAA,YAyHc,MAAA,WAAA,GAAA;MAvHX,KAAK;MAEL,MAAM,QAAK;MACX,UAAU,KAAK,YAAQ;MACvB,gBAAc,KAAA;MACd,OAAK,eAAE,OAAA,MAAO,IAAI;;MAEnB,SAAA,SAgEM,EAtEI,YAAK,CAMf,mBAgEM,OAAA,EAhEA,OAAK,eAAE,OAAA,MAAO,IAAI,EAAA,GAAA,CAId,QAAQ,QAAA,MAAM,SAAM,KAD5B,UAAA,GAAA,YAamB,MAAA,gBAAA,GAAA;;OAXhB,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,0CAA2C,OAAA,MAAO,SAAS,CAAA;;OAErE,SAAA,cAQE,CARF,mBAQE,QAAA,EAPC,OAAK,eAAiB,MAAA,EAAA,CAAE,CAAA,gEAAkG,OAAA,MAAO,MAAsB,UAAK,eAAoB,OAAA,MAAO,MAAA,CAAA,EAAA,GAAA,MAAA,CAAA,CAAA,CAAA;;MAU5L,GAAA,MAAA,CAAA,OAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAAA,YA6CiB,MAAA,cAAA,GA7CjB,WA6CiB,EAAA,SAAA,KAAA,GA5CP,YAAY,IAAI,GAAA;OACvB,UAAU,QAAQ,OAAO,MAAM,QAAK,IAAA,IAAA;OACpC,gBAAc,UAAK,WAAA,SAAyB,KAAA;OAC5C,OAAoB,MAAA,EAAA,CAAE,CAAA,sGAAA,8BAAA,+GAAu7C,KAAK,WAAA,wDAAA,CAAA,sHAAA,+CAAA,GAAA,iHAAA,0HAAA,6BAAA;OAgCl9C,UAAK,WAAE,QAAA,QAAU,QAAK;;OAEvB,SAAA,cAMmB,CANnB,YAMmB,MAAA,gBAAA,GAAA,EAND,OAAM,mCAAkC,GAAA;QAIxD,SAAA,cAAuE,CAA1D,UAAK,eAAlB,UAAA,GAAA,YAAuE,MAAA,KAAA,GAAA;;SAAnC,OAAM;QAC1C,CAAA,MAAA,UAAA,GAAA,mBAA2C,UAAA,EAAA,KAAA,EAAA,GAAA,CAAvB,gBAAA,gBAAA,QAAK,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,EAAA,CAAA;;;;;;;;;MAK/B,CAAA,CAAA,GAAA,CAAA,GAAA,mBA6CM,OAAA,EA5CH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,OAAA,MAAO,MAAM,QAAA,gBAAW,cAAmB,QAAQ,QAAA,MAAM,SAAM,KAAA,MAAA,CAAA,EAAA,GAAA,CAW1E,YA6Be,MAAA,YAAA,GAAA;OA5Bb,IAAG;OACF,OAAK,eAAe,MAAA,EAAA,CAAE,CAAA,uBAAwB,KAAK,WAAQ,0BAAA,iBAAA,CAAA;;OAqB5D,SAAA,cAAiE,CAAjE,mBAAiE,QAAjE,YAAiE,gBAAxC,MAAA,IAAA,CAAI,CAAC,KAAI,EAAA,MAAS,QAAK,EAAA,CAAA,CAAA,GAAA,CAAA,GAChC,UAAK,eAArB,UAAA,GAAA,mBAGW,UAAA,EAAA,KAAA,EAAA,GAAA,CAFT,mBAAgD,QAAhD,YAAgD,gBAApB,KAAK,KAAK,GAAA,CAAA,GACtC,mBAAwE,QAAxE,YAAwE,gBAA/C,MAAA,IAAA,CAAI,CAAC,UAAS,EAAA,OAAU,KAAK,MAAK,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,MAE7D,UAAA,GAAA,mBAA4C,UAAA,EAAA,KAAA,EAAA,GAAA,CAAxB,gBAAA,gBAAA,KAAK,KAAK,GAAA,CAAA,CAAA,GAAA,EAAA,EAAA,CAAA;;MAEN,GAAA,MAAA,CAAA,OAAA,CAAA,GAAA,KAAK,eAA/B,UAAA,GAAA,YAEqB,MAAA,kBAAA,GAAA;;OAFuB,OAAM;;OAChD,SAAA,cAAsB,CAAnB,gBAAA,gBAAA,KAAK,WAAW,GAAA,CAAA,CAAA,CAAA;;;;;;;;;IAczB,CAAA,GAAA,GAAA,IAAA,mBAES,QAFT,YAES,gBADP,MAAA,IAAA,CAAI,CAAC,SAAQ;KAAA,MAAS,WAAO;KAAA,WAAkB,QAAA,MAAM;IAAM,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Surface.js","names":[],"sources":["../../../../packages/primitives/surface/src/Surface.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { cva } from \"class-variance-authority\";\n\n/**\n * Surface — the panel/card primitive. Elevation is expressed by hairline\n * borders and background lightness, not heavy shadows (Loom principle:\n * \"hairline over shadow\"): on the paper-light ground a white `card` already\n * reads as raised, so only `overlay` carries a real shadow.\n */\nexport type SurfaceElevation = \"card\" | \"muted\" | \"overlay\";\n\nexport type SurfacePad = \"none\" | \"sm\" | \"md\" | \"lg\";\n\nexport const surfaceVariants = cva(\"rounded-lg transition-colors duration-fast\", {\n variants: {\n variant: {\n card: \"bg-card text-card-foreground border border-border\",\n muted: \"bg-muted text-foreground border border-transparent\",\n overlay: \"bg-popover text-popover-foreground border border-border shadow-md\",\n } satisfies Record<SurfaceElevation, string>,\n pad: {\n none: \"p-0\",\n sm: \"p-3\",\n md: \"p-4\",\n lg: \"p-6\",\n } satisfies Record<SurfacePad, string>,\n // The ONE hover/press language for clickable rows and cards (a list row,\n // a picker card): lift by fill, hairline asserts, cursor signals — so\n // views stop hand-rolling their own `hover:bg-subtle` treatments. The\n // Surface stays a div; the host owns the actual click/role/tabindex.\n interactive: {\n true: \"cursor-pointer hover:bg-subtle/60 hover:border-border-strong active:bg-subtle\",\n },\n },\n defaultVariants: { variant: \"card\", pad: \"md\" },\n});\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** How the panel reads on the paper-light ground: a raised card, a recessed panel, or a floating overlay. */\n variant?: SurfaceElevation;\n /** Built-in inner padding, so a caller need not remember the spacing token. */\n pad?: SurfacePad;\n /** Clickable-surface language: hover fill lift, strong hairline, cursor. The host owns the click handler. */\n interactive?: boolean;\n }>(),\n { variant: \"card\", pad: \"md\", interactive: false },\n);\n</script>\n\n<template>\n <div :class=\"cn(surfaceVariants({ variant, pad, interactive }))\"><slot /></div>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Surface.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/surface/src/Surface.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { cva } from \"class-variance-authority\";\n\n/**\n * Surface — the panel/card primitive. Elevation is expressed by hairline\n * borders and background lightness, not heavy shadows (Loom principle:\n * \"hairline over shadow\"): on the paper-light ground a white `card` already\n * reads as raised, so only `overlay` carries a real shadow.\n */\nexport type SurfaceElevation = \"card\" | \"muted\" | \"overlay\";\n\nexport type SurfacePad = \"none\" | \"sm\" | \"md\" | \"lg\";\n\nexport const surfaceVariants = cva(\"rounded-lg transition-colors duration-fast\", {\n variants: {\n variant: {\n card: \"bg-card text-card-foreground border border-border\",\n muted: \"bg-muted text-foreground border border-transparent\",\n overlay: \"bg-popover text-popover-foreground border border-border shadow-md\",\n } satisfies Record<SurfaceElevation, string>,\n pad: {\n none: \"p-0\",\n sm: \"p-3\",\n md: \"p-4\",\n lg: \"p-6\",\n } satisfies Record<SurfacePad, string>,\n // The ONE hover/press language for clickable rows and cards (a list row,\n // a picker card): lift by fill, hairline asserts, cursor signals — so\n // views stop hand-rolling their own `hover:bg-subtle` treatments. The\n // Surface stays a div; the host owns the actual click/role/tabindex.\n interactive: {\n true: \"cursor-pointer hover:bg-subtle/60 hover:border-border-strong active:bg-subtle\",\n },\n },\n defaultVariants: { variant: \"card\", pad: \"md\" },\n});\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** How the panel reads on the paper-light ground: a raised card, a recessed panel, or a floating overlay. */\n variant?: SurfaceElevation;\n /** Built-in inner padding, so a caller need not remember the spacing token. */\n pad?: SurfacePad;\n /** Clickable-surface language: hover fill lift, strong hairline, cursor. The host owns the click handler. */\n interactive?: boolean;\n }>(),\n { variant: \"card\", pad: \"md\", interactive: false },\n);\n</script>\n\n<template>\n <div :class=\"cn(surfaceVariants({ variant, pad, interactive }))\"><slot /></div>\n</template>\n"],"mappings":";;;;;AAaA,IAAa,kBAAkB,IAAI,8CAA8C;CAC/E,UAAU;EACR,SAAS;GACP,MAAM;GACN,OAAO;GACP,SAAS;EACX;EACA,KAAK;GACH,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EAKA,aAAa,EACX,MAAM,gFACR;CACF;CACA,iBAAiB;EAAE,SAAS;EAAQ,KAAK;CAAK;AAChD,CAAC;;;;;;;;;;;;;GAoBC,OAAA,UAAA,GAAA,mBAA+E,OAAA,EAAzE,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,MAAA,eAAA,CAAe,CAAA;IAAA,SAAG,QAAA;IAAO,KAAE,QAAA;IAAG,aAAE,QAAA;GAAW,CAAA,CAAA,CAAA,EAAA,GAAA,CAAM,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","names":[],"sources":["../../../../packages/primitives/switch/src/Switch.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { SwitchRoot, SwitchThumb } from \"reka-ui\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { useSplitAttrs } from \"@ecoma-io/loom-core\";\nimport { useFieldControl } from \"@ecoma-io/loom-labels\";\n\n/**\n * Switch — toggles a boolean setting that takes effect immediately, with no\n * \"Save\" step. Built on Reka UI's Switch for role=\"switch\" + aria-checked +\n * Space/Enter. Label and description live on the surrounding setting row —\n * wire them in with `aria-labelledby`, since Switch renders a button, not a\n * labelable input.\n *\n * Inside a [Field](../Field/Field.vue) that row is the wrapper itself, and the\n * wiring stops being the caller's job: `useFieldControl()` puts the row's id on\n * the button — labelable, so the row's `<label for>` names the control that has\n * no name of its own — and brings the row's description, `name`, `required` and\n * `invalid` with it.\n *\n * There is no `readonly` here, and a row's is ignored rather than approximated.\n * A switch that cannot be flipped is disabled; one that looks live and refuses\n * the flip is the only state worse than either.\n */\nconst props = withDefaults(\n defineProps<{\n /** Whether the setting is currently on. Omit to let the switch own its own state. */\n modelValue?: boolean | undefined;\n /** Blocks both click and keyboard input, and drains the control to the neutral well. Unset defers to a wrapping Field. */\n disabled?: boolean | undefined;\n }>(),\n {\n // Not `false` — see Checkbox: a concrete default claims host ownership and\n // leaves an unbound switch emitting updates while never moving.\n modelValue: undefined,\n // Not `false` either: absent has to stay tellable from `false` for a Field\n // above to disable the row and for `:disabled=\"false\"` to overrule one that\n // does. Vue casts an absent Boolean prop with no declared default to\n // `false`, which would leave the context wired and inert.\n disabled: undefined,\n },\n);\n\ndefineEmits<{ \"update:modelValue\": [value: boolean] }>();\n\ndefineOptions({ inheritAttrs: false });\nconst { attrs, rest: switchAttrs } = useSplitAttrs();\n\n// One rendered node, so the split is only about `class` — a caller's class\n// needs a Tailwind-aware merge rather than Vue's concatenating fallthrough.\n//\n// `id` and `aria-describedby` arrive as fallthrough attrs rather than props, so\n// they are handed in as this caller's own values; `field.attrs` then spreads\n// **after** `switchAttrs`, and that position is the contract (see\n// TextField.vue). `name` in that bag reaches SwitchRoot's own `name` prop,\n// which is what mints the hidden input a `<form>` submits.\n//\n// `name`, `required` and `invalid` are omitted below because Switch has no prop\n// for any of them: the row's answer stands unopposed. `readonly` is omitted for\n// the reason the docblock gives.\n//\n// The resolved `required` then reaches the element through Reka's own prop\n// rather than the `aria-required` in `field.attrs` — see Checkbox.vue, which\n// carries the reasoning. SwitchRoot happens to spread the fallthrough last, so\n// the attribute would win here; going through the prop keeps the four\n// Reka-rooted controls one shape instead of four merge orders to re-derive.\nconst field = useFieldControl(() => ({\n id: attrs.id as string | undefined,\n describedBy: attrs[\"aria-describedby\"] as string | undefined,\n disabled: props.disabled,\n}));\n</script>\n\n<template>\n <SwitchRoot\n v-bind=\"{ modelValue, ...switchAttrs, ...field.attrs }\"\n :disabled=\"field.disabled\"\n :required=\"field.required\"\n :class=\"\n cn(\n 'relative inline-flex h-6 w-10 shrink-0 cursor-pointer items-center rounded-full border border-transparent',\n 'transition-[background-color,filter,box-shadow] duration-instant ease-out',\n 'hover:brightness-95',\n // Checked = a decision (Loom law): the track fills with primary.\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted-foreground/30',\n // Focus draws the weave tight: the brand ring blooms.\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo',\n // Drained, not dimmed. `opacity-50` faded track and thumb together,\n // compositing both below their measured contrast — the same failure\n // Button records for its own dim. The unchecked track falls to\n // `bg-muted`, the well every unavailable control drains to, with the\n // rim Chip slackens to; a *checked* one keeps its primary fill,\n // because switched-on is information (Chip and Pagination keep the\n // wash a selected control already wears) and the native `disabled`\n // attribute carries unavailability to assistive tech regardless.\n // The compound `disabled:data-[state=unchecked]:` form is deliberate:\n // Tailwind sorts data variants after plain `disabled:`, so a bare\n // `disabled:bg-muted` would lose to `data-[state=unchecked]:bg-*` and\n // never fire.\n 'disabled:cursor-not-allowed disabled:data-[state=unchecked]:bg-muted disabled:data-[state=unchecked]:border-border',\n attrs.class as string,\n )\n \"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <SwitchThumb\n style=\"transition: transform var(--duration-fast) var(--ease-spring)\"\n :class=\"\n cn(\n 'absolute top-1/2 start-0.5 block h-5 w-5 -translate-y-1/2 rounded-full bg-background shadow-sm',\n 'active:scale-x-[1.15] active:scale-y-[0.85]',\n // The anchor is the *inline* start edge, so the off state rests on\n // the reading-order side in every direction — physically left under\n // LTR (pixel-identical to the old `left-0.5`) and right under RTL,\n // where a physical `left` would pin both states to one edge and\n // make the motion read backwards.\n //\n // The travel is still a translate, not an inset change: animating an\n // inset relayouts the track on every frame, while a transform stays\n // on the compositor. Its sign is the one thing direction has left to\n // say — checked moves toward the inline-end edge, +x under LTR, -x\n // under RTL — and it is written through this custom property rather\n // than a second competing utility because Tailwind's `rtl:` wraps in\n // a zero-specificity `:where()`, which would leave the flip's winner\n // to stylesheet order. One rule writes the variable; everything else\n // reads the fallback, so LTR needs no rule at all (and survives even\n // a browser without `:dir()`).\n 'data-[state=checked]:translate-x-[var(--switch-travel-x,1rem)]',\n 'rtl:[--switch-travel-x:-1rem]',\n )\n \"\n />\n </SwitchRoot>\n</template>\n"],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { cn } from "../../../core/src/cn.js";
2
+ import { useSplitAttrs } from "../../../core/src/attrs.js";
3
+ import "../../../core/src/index.js";
4
+ import { useFieldControl } from "../../../labels/src/field-context.js";
5
+ import "../../../labels/src/index.js";
6
+ import { createBlock, createVNode, defineComponent, mergeProps, normalizeClass, openBlock, unref, withCtx } from "vue";
7
+ import { SwitchRoot, SwitchThumb } from "reka-ui";
8
+ //#region packages/primitives/switch/src/Switch.vue?vue&type=script&setup=true&lang.ts
9
+ /**
10
+ * Switch — toggles a boolean setting that takes effect immediately, with no
11
+ * "Save" step. Built on Reka UI's Switch for role="switch" + aria-checked +
12
+ * Space/Enter. Label and description live on the surrounding setting row —
13
+ * wire them in with `aria-labelledby`, since Switch renders a button, not a
14
+ * labelable input.
15
+ *
16
+ * Inside a [Field](../Field/Field.vue) that row is the wrapper itself, and the
17
+ * wiring stops being the caller's job: `useFieldControl()` puts the row's id on
18
+ * the button — labelable, so the row's `<label for>` names the control that has
19
+ * no name of its own — and brings the row's description, `name`, `required` and
20
+ * `invalid` with it.
21
+ *
22
+ * There is no `readonly` here, and a row's is ignored rather than approximated.
23
+ * A switch that cannot be flipped is disabled; one that looks live and refuses
24
+ * the flip is the only state worse than either.
25
+ */
26
+ var Switch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
27
+ inheritAttrs: false,
28
+ __name: "Switch",
29
+ props: {
30
+ modelValue: {
31
+ type: Boolean,
32
+ default: void 0
33
+ },
34
+ disabled: {
35
+ type: Boolean,
36
+ default: void 0
37
+ }
38
+ },
39
+ emits: ["update:modelValue"],
40
+ setup(__props) {
41
+ const props = __props;
42
+ const { attrs, rest: switchAttrs } = useSplitAttrs();
43
+ const field = useFieldControl(() => ({
44
+ id: attrs.id,
45
+ describedBy: attrs["aria-describedby"],
46
+ disabled: props.disabled
47
+ }));
48
+ return (_ctx, _cache) => {
49
+ return openBlock(), createBlock(unref(SwitchRoot), mergeProps({
50
+ modelValue: __props.modelValue,
51
+ ...unref(switchAttrs),
52
+ ...unref(field).attrs
53
+ }, {
54
+ disabled: unref(field).disabled,
55
+ required: unref(field).required,
56
+ class: unref(cn)("relative inline-flex h-6 w-10 shrink-0 cursor-pointer items-center rounded-full border border-transparent", "transition-[background-color,filter,box-shadow] duration-instant ease-out", "hover:brightness-95", "data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted-foreground/30", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo", "disabled:cursor-not-allowed disabled:data-[state=unchecked]:bg-muted disabled:data-[state=unchecked]:border-border", unref(attrs).class),
57
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event))
58
+ }), {
59
+ default: withCtx(() => [createVNode(unref(SwitchThumb), {
60
+ style: { "transition": "transform var(--duration-fast) var(--ease-spring)" },
61
+ class: normalizeClass(unref(cn)("absolute top-1/2 start-0.5 block h-5 w-5 -translate-y-1/2 rounded-full bg-background shadow-sm", "active:scale-x-[1.15] active:scale-y-[0.85]", "data-[state=checked]:translate-x-[var(--switch-travel-x,1rem)]", "rtl:[--switch-travel-x:-1rem]"))
62
+ }, null, 8, ["class"])]),
63
+ _: 1
64
+ }, 16, [
65
+ "disabled",
66
+ "required",
67
+ "class"
68
+ ]);
69
+ };
70
+ }
71
+ });
72
+ //#endregion
73
+ export { Switch_vue_vue_type_script_setup_true_lang_default as default };
74
+
75
+ //# sourceMappingURL=Switch.vue_vue_type_script_setup_true_lang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.vue_vue_type_script_setup_true_lang.js","names":["$emit"],"sources":["../../../../packages/primitives/switch/src/Switch.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { SwitchRoot, SwitchThumb } from \"reka-ui\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { useSplitAttrs } from \"@ecoma-io/loom-core\";\nimport { useFieldControl } from \"@ecoma-io/loom-labels\";\n\n/**\n * Switch — toggles a boolean setting that takes effect immediately, with no\n * \"Save\" step. Built on Reka UI's Switch for role=\"switch\" + aria-checked +\n * Space/Enter. Label and description live on the surrounding setting row —\n * wire them in with `aria-labelledby`, since Switch renders a button, not a\n * labelable input.\n *\n * Inside a [Field](../Field/Field.vue) that row is the wrapper itself, and the\n * wiring stops being the caller's job: `useFieldControl()` puts the row's id on\n * the button — labelable, so the row's `<label for>` names the control that has\n * no name of its own — and brings the row's description, `name`, `required` and\n * `invalid` with it.\n *\n * There is no `readonly` here, and a row's is ignored rather than approximated.\n * A switch that cannot be flipped is disabled; one that looks live and refuses\n * the flip is the only state worse than either.\n */\nconst props = withDefaults(\n defineProps<{\n /** Whether the setting is currently on. Omit to let the switch own its own state. */\n modelValue?: boolean | undefined;\n /** Blocks both click and keyboard input, and drains the control to the neutral well. Unset defers to a wrapping Field. */\n disabled?: boolean | undefined;\n }>(),\n {\n // Not `false` — see Checkbox: a concrete default claims host ownership and\n // leaves an unbound switch emitting updates while never moving.\n modelValue: undefined,\n // Not `false` either: absent has to stay tellable from `false` for a Field\n // above to disable the row and for `:disabled=\"false\"` to overrule one that\n // does. Vue casts an absent Boolean prop with no declared default to\n // `false`, which would leave the context wired and inert.\n disabled: undefined,\n },\n);\n\ndefineEmits<{ \"update:modelValue\": [value: boolean] }>();\n\ndefineOptions({ inheritAttrs: false });\nconst { attrs, rest: switchAttrs } = useSplitAttrs();\n\n// One rendered node, so the split is only about `class` — a caller's class\n// needs a Tailwind-aware merge rather than Vue's concatenating fallthrough.\n//\n// `id` and `aria-describedby` arrive as fallthrough attrs rather than props, so\n// they are handed in as this caller's own values; `field.attrs` then spreads\n// **after** `switchAttrs`, and that position is the contract (see\n// TextField.vue). `name` in that bag reaches SwitchRoot's own `name` prop,\n// which is what mints the hidden input a `<form>` submits.\n//\n// `name`, `required` and `invalid` are omitted below because Switch has no prop\n// for any of them: the row's answer stands unopposed. `readonly` is omitted for\n// the reason the docblock gives.\n//\n// The resolved `required` then reaches the element through Reka's own prop\n// rather than the `aria-required` in `field.attrs` — see Checkbox.vue, which\n// carries the reasoning. SwitchRoot happens to spread the fallthrough last, so\n// the attribute would win here; going through the prop keeps the four\n// Reka-rooted controls one shape instead of four merge orders to re-derive.\nconst field = useFieldControl(() => ({\n id: attrs.id as string | undefined,\n describedBy: attrs[\"aria-describedby\"] as string | undefined,\n disabled: props.disabled,\n}));\n</script>\n\n<template>\n <SwitchRoot\n v-bind=\"{ modelValue, ...switchAttrs, ...field.attrs }\"\n :disabled=\"field.disabled\"\n :required=\"field.required\"\n :class=\"\n cn(\n 'relative inline-flex h-6 w-10 shrink-0 cursor-pointer items-center rounded-full border border-transparent',\n 'transition-[background-color,filter,box-shadow] duration-instant ease-out',\n 'hover:brightness-95',\n // Checked = a decision (Loom law): the track fills with primary.\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted-foreground/30',\n // Focus draws the weave tight: the brand ring blooms.\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo',\n // Drained, not dimmed. `opacity-50` faded track and thumb together,\n // compositing both below their measured contrast — the same failure\n // Button records for its own dim. The unchecked track falls to\n // `bg-muted`, the well every unavailable control drains to, with the\n // rim Chip slackens to; a *checked* one keeps its primary fill,\n // because switched-on is information (Chip and Pagination keep the\n // wash a selected control already wears) and the native `disabled`\n // attribute carries unavailability to assistive tech regardless.\n // The compound `disabled:data-[state=unchecked]:` form is deliberate:\n // Tailwind sorts data variants after plain `disabled:`, so a bare\n // `disabled:bg-muted` would lose to `data-[state=unchecked]:bg-*` and\n // never fire.\n 'disabled:cursor-not-allowed disabled:data-[state=unchecked]:bg-muted disabled:data-[state=unchecked]:border-border',\n attrs.class as string,\n )\n \"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <SwitchThumb\n style=\"transition: transform var(--duration-fast) var(--ease-spring)\"\n :class=\"\n cn(\n 'absolute top-1/2 start-0.5 block h-5 w-5 -translate-y-1/2 rounded-full bg-background shadow-sm',\n 'active:scale-x-[1.15] active:scale-y-[0.85]',\n // The anchor is the *inline* start edge, so the off state rests on\n // the reading-order side in every direction — physically left under\n // LTR (pixel-identical to the old `left-0.5`) and right under RTL,\n // where a physical `left` would pin both states to one edge and\n // make the motion read backwards.\n //\n // The travel is still a translate, not an inset change: animating an\n // inset relayouts the track on every frame, while a transform stays\n // on the compositor. Its sign is the one thing direction has left to\n // say — checked moves toward the inline-end edge, +x under LTR, -x\n // under RTL — and it is written through this custom property rather\n // than a second competing utility because Tailwind's `rtl:` wraps in\n // a zero-specificity `:where()`, which would leave the flip's winner\n // to stylesheet order. One rule writes the variable; everything else\n // reads the fallback, so LTR needs no rule at all (and survives even\n // a browser without `:dir()`).\n 'data-[state=checked]:translate-x-[var(--switch-travel-x,1rem)]',\n 'rtl:[--switch-travel-x:-1rem]',\n )\n \"\n />\n </SwitchRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,QAAQ;EAsBd,MAAM,EAAE,OAAO,MAAM,gBAAgB,cAAc;EAoBnD,MAAM,QAAQ,uBAAuB;GACnC,IAAI,MAAM;GACV,aAAa,MAAM;GACnB,UAAU,MAAM;EAClB,EAAE;;GAIA,OAAA,UAAA,GAAA,YA0Da,MAAA,UAAA,GA1Db,WA0Da;IAAA,YAzDD,QAAA;IAAU,GAAK,MAAA,WAAA;IAAW,GAAK,MAAA,KAAA,CAAK,CAAC;GAAK,GAAA;IACnD,UAAU,MAAA,KAAA,CAAK,CAAC;IAChB,UAAU,MAAA,KAAA,CAAK,CAAC;IAChB,OAAc,MAAA,EAAA,CAAE,CAAA,6GAAA,6EAAA,uBAAA,iFAAA,+GAAA,sHAAqiD,MAAA,KAAA,CAAK,CAAC,KAAA;IAyB3jD,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,qBAAsB,MAAM;;IAEtD,SAAA,cA0BE,CA1BF,YA0BE,MAAA,WAAA,GAAA;KAzBA,OAAA,EAAA,cAAA,oDAAA;KACC,OAAK,eAAW,MAAA,EAAA,CAAE,CAAA,kGAAA,+CAAA,kEAAA,+BAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","names":[],"sources":["../../../../packages/primitives/table/src/Table.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { TableLabels } from \"@ecoma-io/loom-labels\";\n\n/**\n * Loom's English, co-located with the component so it tree-shakes with it,\n * and exported so a host can build a partial vocabulary against the real\n * thing rather than a transcription of it.\n */\nexport const TABLE_LABELS: TableLabels = {\n region: \"Data table\",\n sortedAscending: \"Sorted ascending\",\n sortedDescending: \"Sorted descending\",\n sort: \"Sort\",\n};\n\n/** The wrapper owns row padding so every cell under it tightens together. */\nexport type TableDensity = \"comfortable\" | \"compact\";\n\n/** Alignment vocabulary shared by headers and cells. */\nexport type TableAlign = \"left\" | \"center\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport { useLabels, type LabelOverrides } from \"@ecoma-io/loom-labels\";\nimport { cn } from \"@ecoma-io/loom-core\";\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The table's caption, rendered as a real `<caption>` — the accessible\n * name for the whole table and the first thing a screen reader says.\n */\n caption?: string;\n /** Row padding. Compact suits dense application chrome. */\n density?: TableDensity;\n /** Names what the table is when no caption fits visually; falls to the labels seam otherwise. */\n labels?: LabelOverrides<TableLabels>;\n }>(),\n { density: \"comfortable\" },\n);\n\n// `text`, not `labels`: the prop of that name is one of the three sources\n// this resolves, and a template reading the raw prop would be reading the\n// overrides rather than the answer.\nconst text = useLabels(\"table\", TABLE_LABELS, () => props.labels);\n\n// The region is focusable only while it can actually scroll: a Tab stop that\n// never moves is a dead one. Overflow is measured, not assumed — tables fit\n// their container most of the time — and re-measured whenever either side of\n// the ratio changes.\nconst region = ref<HTMLElement | null>(null);\nconst table = ref<HTMLElement | null>(null);\nconst scrollable = ref(false);\n\nfunction measure(): void {\n const el = region.value;\n if (el) scrollable.value = el.scrollWidth > el.clientWidth;\n}\n\nlet observer: ResizeObserver | undefined;\nonMounted(() => {\n measure();\n observer = new ResizeObserver(measure);\n if (table.value) observer.observe(table.value);\n window.addEventListener(\"resize\", measure, { passive: true });\n});\nonBeforeUnmount(() => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", measure);\n});\n</script>\n\n<template>\n <!-- A scroll container, not the table itself: wide tables overflow their\n region instead of stretching the page (Loom's content-never-stretches\n law), and the region carries the caption as its accessible name so a\n screen reader announces what this scrollable thing IS before entering.\n Focusable only while it can actually scroll — measured below, since a\n focusable region that never scrolls is a dead Tab stop. -->\n <div\n ref=\"region\"\n role=\"region\"\n :aria-label=\"caption ?? text.region\"\n :tabindex=\"scrollable ? 0 : undefined\"\n class=\"w-full overflow-x-auto rounded-lg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n >\n <table\n ref=\"table\"\n :data-density=\"density\"\n :class=\"\n cn(\n 'w-full border-collapse text-left text-sm',\n // Descendant styling is the wrapper's job: writing these per-cell\n // would re-litigate the hairline at every call site.\n '[&_th]:border-b [&_th]:border-border-strong [&_th]:px-3 [&_th]:py-2.5 [&_th]:text-xs [&_th]:font-semibold [&_th]:text-muted-foreground [&_th]:whitespace-nowrap',\n '[&_td]:border-b [&_td]:border-border [&_td]:px-3 [&_td]:align-top [&_td]:text-foreground',\n `[&[data-density='comfortable']_td]:py-3`,\n `[&[data-density='compact']_td]:py-1.5`,\n `[&[data-density='compact']_th]:py-1.5`,\n '[&_tbody_tr:last-child_td]:border-b-0',\n '[&_tfoot_td]:border-t [&_tfoot_td]:border-border-strong [&_tfoot_td]:font-medium',\n )\n \"\n >\n <caption v-if=\"caption\" class=\"sr-only\">\n {{\n caption\n }}\n </caption>\n <!-- @slot Real table markup: `<thead>`/`<tbody>`/`<tfoot>` rows built\n from `TableRow`, `TableHead` and `TableCell`. -->\n <slot />\n </table>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/table/src/Table.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { TableLabels } from \"@ecoma-io/loom-labels\";\n\n/**\n * Loom's English, co-located with the component so it tree-shakes with it,\n * and exported so a host can build a partial vocabulary against the real\n * thing rather than a transcription of it.\n */\nexport const TABLE_LABELS: TableLabels = {\n region: \"Data table\",\n sortedAscending: \"Sorted ascending\",\n sortedDescending: \"Sorted descending\",\n sort: \"Sort\",\n};\n\n/** The wrapper owns row padding so every cell under it tightens together. */\nexport type TableDensity = \"comfortable\" | \"compact\";\n\n/** Alignment vocabulary shared by headers and cells. */\nexport type TableAlign = \"left\" | \"center\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport { useLabels, type LabelOverrides } from \"@ecoma-io/loom-labels\";\nimport { cn } from \"@ecoma-io/loom-core\";\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The table's caption, rendered as a real `<caption>` — the accessible\n * name for the whole table and the first thing a screen reader says.\n */\n caption?: string;\n /** Row padding. Compact suits dense application chrome. */\n density?: TableDensity;\n /** Names what the table is when no caption fits visually; falls to the labels seam otherwise. */\n labels?: LabelOverrides<TableLabels>;\n }>(),\n { density: \"comfortable\" },\n);\n\n// `text`, not `labels`: the prop of that name is one of the three sources\n// this resolves, and a template reading the raw prop would be reading the\n// overrides rather than the answer.\nconst text = useLabels(\"table\", TABLE_LABELS, () => props.labels);\n\n// The region is focusable only while it can actually scroll: a Tab stop that\n// never moves is a dead one. Overflow is measured, not assumed — tables fit\n// their container most of the time — and re-measured whenever either side of\n// the ratio changes.\nconst region = ref<HTMLElement | null>(null);\nconst table = ref<HTMLElement | null>(null);\nconst scrollable = ref(false);\n\nfunction measure(): void {\n const el = region.value;\n if (el) scrollable.value = el.scrollWidth > el.clientWidth;\n}\n\nlet observer: ResizeObserver | undefined;\nonMounted(() => {\n measure();\n observer = new ResizeObserver(measure);\n if (table.value) observer.observe(table.value);\n window.addEventListener(\"resize\", measure, { passive: true });\n});\nonBeforeUnmount(() => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", measure);\n});\n</script>\n\n<template>\n <!-- A scroll container, not the table itself: wide tables overflow their\n region instead of stretching the page (Loom's content-never-stretches\n law), and the region carries the caption as its accessible name so a\n screen reader announces what this scrollable thing IS before entering.\n Focusable only while it can actually scroll — measured below, since a\n focusable region that never scrolls is a dead Tab stop. -->\n <div\n ref=\"region\"\n role=\"region\"\n :aria-label=\"caption ?? text.region\"\n :tabindex=\"scrollable ? 0 : undefined\"\n class=\"w-full overflow-x-auto rounded-lg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n >\n <table\n ref=\"table\"\n :data-density=\"density\"\n :class=\"\n cn(\n 'w-full border-collapse text-left text-sm',\n // Descendant styling is the wrapper's job: writing these per-cell\n // would re-litigate the hairline at every call site.\n '[&_th]:border-b [&_th]:border-border-strong [&_th]:px-3 [&_th]:py-2.5 [&_th]:text-xs [&_th]:font-semibold [&_th]:text-muted-foreground [&_th]:whitespace-nowrap',\n '[&_td]:border-b [&_td]:border-border [&_td]:px-3 [&_td]:align-top [&_td]:text-foreground',\n `[&[data-density='comfortable']_td]:py-3`,\n `[&[data-density='compact']_td]:py-1.5`,\n `[&[data-density='compact']_th]:py-1.5`,\n '[&_tbody_tr:last-child_td]:border-b-0',\n '[&_tfoot_td]:border-t [&_tfoot_td]:border-border-strong [&_tfoot_td]:font-medium',\n )\n \"\n >\n <caption v-if=\"caption\" class=\"sr-only\">\n {{\n caption\n }}\n </caption>\n <!-- @slot Real table markup: `<thead>`/`<tbody>`/`<tfoot>` rows built\n from `TableRow`, `TableHead` and `TableCell`. -->\n <slot />\n </table>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;AAQA,IAAa,eAA4B;CACvC,QAAQ;CACR,iBAAiB;CACjB,kBAAkB;CAClB,MAAM;AACR;;;;;;;;;EAcA,MAAM,QAAQ;EAkBd,MAAM,OAAO,UAAU,SAAS,oBAAoB,MAAM,MAAM;EAMhE,MAAM,SAAS,IAAwB,IAAI;EAC3C,MAAM,QAAQ,IAAwB,IAAI;EAC1C,MAAM,aAAa,IAAI,KAAK;EAE5B,SAAS,UAAgB;GACvB,MAAM,KAAK,OAAO;GAClB,IAAI,IAAI,WAAW,QAAQ,GAAG,cAAc,GAAG;EACjD;EAEA,IAAI;EACJ,gBAAgB;GACd,QAAQ;GACR,WAAW,IAAI,eAAe,OAAO;GACrC,IAAI,MAAM,OAAO,SAAS,QAAQ,MAAM,KAAK;GAC7C,OAAO,iBAAiB,UAAU,SAAS,EAAE,SAAS,KAAK,CAAC;EAC9D,CAAC;EACD,sBAAsB;GACpB,UAAU,WAAW;GACrB,OAAO,oBAAoB,UAAU,OAAO;EAC9C,CAAC;;GAUC,OAAA,UAAA,GAAA,mBAkCM,OAAA;IAjCA,SAAA;IAAJ,KAAI;IACJ,MAAK;IACJ,cAAY,QAAA,WAAW,MAAA,IAAA,CAAI,CAAC;IAC5B,UAAU,WAAA,QAAU,IAAO,KAAA;IAC5B,OAAM;GAEN,GAAA,CAAA,mBA0BQ,SAAA;IAzBF,SAAA;IAAJ,KAAI;IACH,gBAAc,QAAA;IACd,OAAK,eAAW,MAAA,EAAA,CAAE,CAAA,4CAAA,mKAAA,4FAAA,2CAAA,yCAAA,yCAAA,yCAAA,kFAAA,CAAA;GAeJ,GAAA,CAAA,QAAA,WAAf,UAAA,GAAA,mBAIU,WAJV,YAIU,gBAFN,QAAA,OAAO,GAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,GAKX,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA,CAAA,GAAA,GAAA,UAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.js","names":[],"sources":["../../../../packages/primitives/table/src/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { headAlignClass } from \"./TableHead.vue\";\nimport type { TableAlign } from \"./Table.vue\";\n\nwithDefaults(\n defineProps<{\n /** Text alignment; numeric figures want `\"right\"` for the tabular digits. */\n align?: TableAlign;\n }>(),\n {},\n);\n</script>\n\n<template>\n <td :class=\"headAlignClass(align)\">\n <!-- @slot The cell's content — text, a Badge, a RowActions cluster. -->\n <slot />\n </td>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCell.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/table/src/TableCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { headAlignClass } from \"./TableHead.vue\";\nimport type { TableAlign } from \"./Table.vue\";\n\nwithDefaults(\n defineProps<{\n /** Text alignment; numeric figures want `\"right\"` for the tabular digits. */\n align?: TableAlign;\n }>(),\n {},\n);\n</script>\n\n<template>\n <td :class=\"headAlignClass(align)\">\n <!-- @slot The cell's content — text, a Badge, a RowActions cluster. -->\n <slot />\n </td>\n</template>\n"],"mappings":";;;;;;;;;GAcE,OAAA,UAAA,GAAA,mBAGK,MAAA,EAHA,OAAK,eAAE,MAAA,cAAA,CAAc,CAAC,QAAA,KAAK,CAAA,EAAA,GAAA,CAE9B,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHead.js","names":[],"sources":["../../../../packages/primitives/table/src/TableHead.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { TableAlign } from \"./Table.vue\";\n\n/**\n * Sort state for a sortable header. Tri-state by omission: a sortable column\n * that is not the active sort simply has no direction, which is what\n * `aria-sort`'s absent-attribute form expresses.\n */\nexport type TableSort = \"asc\" | \"desc\";\n\n/** Alignment vocabulary shared with `TableCell`. */\nconst ALIGN_CLASS: Record<TableAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n // Numeric columns are read down, not across; tabular digits keep the\n // places lined up while the eye travels.\n right: \"text-right [font-variant-numeric:tabular-nums]\",\n};\n\nexport const headAlignClass = (align: TableAlign | undefined): string =>\n align ? ALIGN_CLASS[align] : \"\";\n\n/** Cycle order: nothing → ascending → descending → nothing. */\nexport const nextSort = (current: TableSort | undefined): TableSort | undefined =>\n current === undefined ? \"asc\" : current === \"asc\" ? \"desc\" : undefined;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { ChevronDown, ChevronsUpDown, ChevronUp } from \"@lucide/vue\";\nimport { useLabels, type LabelOverrides, type TableLabels } from \"@ecoma-io/loom-labels\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { TABLE_LABELS } from \"./Table.vue\";\n\nconst props = withDefaults(\n defineProps<{\n /** Text alignment; numeric columns want `\"right\"`. */\n align?: TableAlign;\n /**\n * Renders the header as a sort control cycling asc → desc → none.\n * State is the host's through `v-model:sort`; omit the binding and the\n * header cycles on its own while still reporting each change.\n */\n sortable?: boolean;\n /** The current direction when sortable. Omit it for an uncontrolled cycle. */\n sort?: TableSort | undefined;\n /** Names what the control says on its own account, as any subset of `TableLabels`. */\n labels?: LabelOverrides<TableLabels>;\n }>(),\n { sortable: false },\n);\n\nconst emit = defineEmits<{ \"update:sort\": [value: TableSort | undefined] }>();\n\n// `text`, not `labels`: one of three sources, resolved key by key.\nconst text = useLabels(\"table\", TABLE_LABELS, () => props.labels);\n\n// Uncontrolled fallback lives here so a host can write plain `sortable`.\nconst inner = ref<TableSort | undefined>(undefined);\nconst current = computed(() => props.sort ?? inner.value);\n\nfunction toggle(): void {\n const next = nextSort(current.value);\n inner.value = next;\n emit(\"update:sort\", next);\n}\n\nconst SORT_ICON = { asc: ChevronUp, desc: ChevronDown } as const;\nconst sortIcon = computed(() => (current.value ? SORT_ICON[current.value] : ChevronsUpDown));\n\n// aria-sort takes full ARIA tokens, not our compact union.\nconst ARIA_SORT = { asc: \"ascending\", desc: \"descending\" } as const;\nconst ariaSort = computed(() => (current.value ? ARIA_SORT[current.value] : undefined));\n</script>\n\n<template>\n <th scope=\"col\" :aria-sort=\"ariaSort\" :class=\"cn(headAlignClass(align))\">\n <!-- The sort control carries its state in words as well as glyphs — a\n chevron alone is colour/shape-only semantics. `min-h-6` is the WCAG\n 2.5.8 floor made explicit: a text-xs label alone sits under the 24px\n target every interactive control owes. -->\n <button\n v-if=\"sortable\"\n type=\"button\"\n class=\"inline-flex min-h-6 items-center gap-1 rounded-sm px-1 transition-colors duration-fast ease-out hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n @click=\"toggle()\"\n >\n <span class=\"group inline-flex items-center gap-1 font-semibold\">\n <slot />\n </span>\n <component\n :is=\"sortIcon\"\n class=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <span class=\"sr-only\">{{\n current === \"asc\"\n ? text.sortedAscending\n : current === \"desc\"\n ? text.sortedDescending\n : text.sort\n }}</span>\n </button>\n <template v-else><slot /></template>\n </th>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHead.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/table/src/TableHead.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { TableAlign } from \"./Table.vue\";\n\n/**\n * Sort state for a sortable header. Tri-state by omission: a sortable column\n * that is not the active sort simply has no direction, which is what\n * `aria-sort`'s absent-attribute form expresses.\n */\nexport type TableSort = \"asc\" | \"desc\";\n\n/** Alignment vocabulary shared with `TableCell`. */\nconst ALIGN_CLASS: Record<TableAlign, string> = {\n left: \"text-left\",\n center: \"text-center\",\n // Numeric columns are read down, not across; tabular digits keep the\n // places lined up while the eye travels.\n right: \"text-right [font-variant-numeric:tabular-nums]\",\n};\n\nexport const headAlignClass = (align: TableAlign | undefined): string =>\n align ? ALIGN_CLASS[align] : \"\";\n\n/** Cycle order: nothing → ascending → descending → nothing. */\nexport const nextSort = (current: TableSort | undefined): TableSort | undefined =>\n current === undefined ? \"asc\" : current === \"asc\" ? \"desc\" : undefined;\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { ChevronDown, ChevronsUpDown, ChevronUp } from \"@lucide/vue\";\nimport { useLabels, type LabelOverrides, type TableLabels } from \"@ecoma-io/loom-labels\";\nimport { cn } from \"@ecoma-io/loom-core\";\nimport { TABLE_LABELS } from \"./Table.vue\";\n\nconst props = withDefaults(\n defineProps<{\n /** Text alignment; numeric columns want `\"right\"`. */\n align?: TableAlign;\n /**\n * Renders the header as a sort control cycling asc → desc → none.\n * State is the host's through `v-model:sort`; omit the binding and the\n * header cycles on its own while still reporting each change.\n */\n sortable?: boolean;\n /** The current direction when sortable. Omit it for an uncontrolled cycle. */\n sort?: TableSort | undefined;\n /** Names what the control says on its own account, as any subset of `TableLabels`. */\n labels?: LabelOverrides<TableLabels>;\n }>(),\n { sortable: false },\n);\n\nconst emit = defineEmits<{ \"update:sort\": [value: TableSort | undefined] }>();\n\n// `text`, not `labels`: one of three sources, resolved key by key.\nconst text = useLabels(\"table\", TABLE_LABELS, () => props.labels);\n\n// Uncontrolled fallback lives here so a host can write plain `sortable`.\nconst inner = ref<TableSort | undefined>(undefined);\nconst current = computed(() => props.sort ?? inner.value);\n\nfunction toggle(): void {\n const next = nextSort(current.value);\n inner.value = next;\n emit(\"update:sort\", next);\n}\n\nconst SORT_ICON = { asc: ChevronUp, desc: ChevronDown } as const;\nconst sortIcon = computed(() => (current.value ? SORT_ICON[current.value] : ChevronsUpDown));\n\n// aria-sort takes full ARIA tokens, not our compact union.\nconst ARIA_SORT = { asc: \"ascending\", desc: \"descending\" } as const;\nconst ariaSort = computed(() => (current.value ? ARIA_SORT[current.value] : undefined));\n</script>\n\n<template>\n <th scope=\"col\" :aria-sort=\"ariaSort\" :class=\"cn(headAlignClass(align))\">\n <!-- The sort control carries its state in words as well as glyphs — a\n chevron alone is colour/shape-only semantics. `min-h-6` is the WCAG\n 2.5.8 floor made explicit: a text-xs label alone sits under the 24px\n target every interactive control owes. -->\n <button\n v-if=\"sortable\"\n type=\"button\"\n class=\"inline-flex min-h-6 items-center gap-1 rounded-sm px-1 transition-colors duration-fast ease-out hover:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n @click=\"toggle()\"\n >\n <span class=\"group inline-flex items-center gap-1 font-semibold\">\n <slot />\n </span>\n <component\n :is=\"sortIcon\"\n class=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <span class=\"sr-only\">{{\n current === \"asc\"\n ? text.sortedAscending\n : current === \"desc\"\n ? text.sortedDescending\n : text.sort\n }}</span>\n </button>\n <template v-else><slot /></template>\n </th>\n</template>\n"],"mappings":";;;;;;;;;;;;;AAWA,IAAM,cAA0C;CAC9C,MAAM;CACN,QAAQ;CAGR,OAAO;AACT;AAEA,IAAa,kBAAkB,UAC7B,QAAQ,YAAY,SAAS;;AAG/B,IAAa,YAAY,YACvB,YAAY,KAAA,IAAY,QAAQ,YAAY,QAAQ,SAAS,KAAA;;;;;;;;;;;;;;EAU/D,MAAM,QAAQ;EAkBd,MAAM,OAAO;EAGb,MAAM,OAAO,UAAU,SAAS,oBAAoB,MAAM,MAAM;EAGhE,MAAM,QAAQ,IAA2B,KAAA,CAAS;EAClD,MAAM,UAAU,eAAe,MAAM,QAAQ,MAAM,KAAK;EAExD,SAAS,SAAe;GACtB,MAAM,OAAO,SAAS,QAAQ,KAAK;GACnC,MAAM,QAAQ;GACd,KAAK,eAAe,IAAI;EAC1B;EAEA,MAAM,YAAY;GAAE,KAAK;GAAW,MAAM;EAAY;EACtD,MAAM,WAAW,eAAgB,QAAQ,QAAQ,UAAU,QAAQ,SAAS,cAAe;EAG3F,MAAM,YAAY;GAAE,KAAK;GAAa,MAAM;EAAa;EACzD,MAAM,WAAW,eAAgB,QAAQ,QAAQ,UAAU,QAAQ,SAAS,KAAA,CAAU;;GAIpF,OAAA,UAAA,GAAA,mBA4BK,MAAA;IA5BD,OAAM;IAAO,aAAW,SAAA;IAAW,OAAK,eAAE,MAAA,EAAA,CAAE,CAAC,eAAe,QAAA,KAAK,CAAA,CAAA;GAM3D,GAAA,CAAA,QAAA,YADR,UAAA,GAAA,mBAqBS,UAAA;;IAnBP,MAAK;IACL,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAM;;IAEd,mBAEO,QAFP,YAEO,CADL,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA;KAEV,UAAA,GAAA,YAIE,wBAHK,SAAA,KAAQ,GAAA;KACb,OAAM;KACN,eAAY;;IAEd,mBAMS,QANT,YAMS,gBALP,QAAA,UAAO,QAAuB,MAAA,IAAA,CAAI,CAAC,kBAA4B,QAAA,UAAO,SAA0B,MAAA,IAAA,CAAI,CAAC,mBAA+B,MAAA,IAAA,CAAI,CAAC,IAAI,GAAA,CAAA;GAOhI,CAAA,KAAA,WAAQ,KAAA,QAAA,WAAA,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,CAAA,GAAA,IAAA,UAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRow.js","names":[],"sources":["../../../../packages/primitives/table/src/TableRow.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { cva } from \"class-variance-authority\";\n\n/** Row emphasis. `selected` and `interactive` compose — a picked row that is\n * also clickable reads as both. */\nexport type TableRowState = \"selected\" | \"interactive\" | \"disabled\";\n\nexport const tableRowVariants = cva(\"transition-colors duration-fast ease-out\", {\n variants: {\n state: {\n // Hover is a promise: only an interactive row may answer the pointer.\n interactive:\n \"cursor-pointer hover:bg-subtle/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring focus-visible:bg-subtle/60\",\n selected: \"bg-primary-muted/60\",\n disabled: \"text-muted-foreground\",\n none: \"\",\n },\n },\n});\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { cn } from \"@ecoma-io/loom-core\";\n\nconst props = withDefaults(\n defineProps<{\n /** Hover/press language plus keyboard activation; the host owns what activation MEANS via `@activate`. */\n interactive?: boolean;\n /** Marks the row as the current choice among its peers (`aria-selected`). */\n selected?: boolean;\n /** Unavailable rather than hidden: muted, inert, still announced. */\n disabled?: boolean;\n }>(),\n { interactive: false, selected: false, disabled: false },\n);\n\nconst emit = defineEmits<{ activate: [] }>();\n\n// A row is not a button, so it cannot lean on native activation. Clicks\n// coming from real controls inside a cell (RowActions, links) belong to\n// those controls — bubbling them up here would fire the row's activation\n// behind the control's back.\nfunction onActivateClick(event: MouseEvent): void {\n if (!props.interactive || props.disabled) return;\n const target = event.target;\n if (\n target instanceof Element &&\n target.closest(\"a, button, input, select, textarea, label, [role='button']\")\n )\n return;\n emit(\"activate\");\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (!props.interactive || props.disabled) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n emit(\"activate\");\n }\n}\n\nconst state = computed(() =>\n props.disabled\n ? \"disabled\"\n : props.interactive\n ? \"interactive\"\n : props.selected\n ? \"selected\"\n : \"none\",\n);\n</script>\n\n<template>\n <tr\n :class=\"\n cn(\n tableRowVariants({ state }),\n // Selected rides above interactive's hover wash, not under it.\n selected && !disabled && 'bg-primary-muted/60',\n )\n \"\n :aria-selected=\"interactive || selected ? selected : undefined\"\n :tabindex=\"interactive && !disabled ? 0 : undefined\"\n @click=\"onActivateClick\"\n @keydown=\"onKeydown\"\n >\n <!-- @slot The row's cells (`TableCell`, or `TableHead` inside `<thead>`). -->\n <slot />\n </tr>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRow.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../packages/primitives/table/src/TableRow.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { cva } from \"class-variance-authority\";\n\n/** Row emphasis. `selected` and `interactive` compose — a picked row that is\n * also clickable reads as both. */\nexport type TableRowState = \"selected\" | \"interactive\" | \"disabled\";\n\nexport const tableRowVariants = cva(\"transition-colors duration-fast ease-out\", {\n variants: {\n state: {\n // Hover is a promise: only an interactive row may answer the pointer.\n interactive:\n \"cursor-pointer hover:bg-subtle/60 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring focus-visible:bg-subtle/60\",\n selected: \"bg-primary-muted/60\",\n disabled: \"text-muted-foreground\",\n none: \"\",\n },\n },\n});\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { cn } from \"@ecoma-io/loom-core\";\n\nconst props = withDefaults(\n defineProps<{\n /** Hover/press language plus keyboard activation; the host owns what activation MEANS via `@activate`. */\n interactive?: boolean;\n /** Marks the row as the current choice among its peers (`aria-selected`). */\n selected?: boolean;\n /** Unavailable rather than hidden: muted, inert, still announced. */\n disabled?: boolean;\n }>(),\n { interactive: false, selected: false, disabled: false },\n);\n\nconst emit = defineEmits<{ activate: [] }>();\n\n// A row is not a button, so it cannot lean on native activation. Clicks\n// coming from real controls inside a cell (RowActions, links) belong to\n// those controls — bubbling them up here would fire the row's activation\n// behind the control's back.\nfunction onActivateClick(event: MouseEvent): void {\n if (!props.interactive || props.disabled) return;\n const target = event.target;\n if (\n target instanceof Element &&\n target.closest(\"a, button, input, select, textarea, label, [role='button']\")\n )\n return;\n emit(\"activate\");\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n if (!props.interactive || props.disabled) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n emit(\"activate\");\n }\n}\n\nconst state = computed(() =>\n props.disabled\n ? \"disabled\"\n : props.interactive\n ? \"interactive\"\n : props.selected\n ? \"selected\"\n : \"none\",\n);\n</script>\n\n<template>\n <tr\n :class=\"\n cn(\n tableRowVariants({ state }),\n // Selected rides above interactive's hover wash, not under it.\n selected && !disabled && 'bg-primary-muted/60',\n )\n \"\n :aria-selected=\"interactive || selected ? selected : undefined\"\n :tabindex=\"interactive && !disabled ? 0 : undefined\"\n @click=\"onActivateClick\"\n @keydown=\"onKeydown\"\n >\n <!-- @slot The row's cells (`TableCell`, or `TableHead` inside `<thead>`). -->\n <slot />\n </tr>\n</template>\n"],"mappings":";;;;;;AAOA,IAAa,mBAAmB,IAAI,4CAA4C,EAC9E,UAAU,EACR,OAAO;CAEL,aACE;CACF,UAAU;CACV,UAAU;CACV,MAAM;AACR,EACF,EACF,CAAC;;;;;;;;;;;;;;;;;;;EAOD,MAAM,QAAQ;EAYd,MAAM,OAAO;EAMb,SAAS,gBAAgB,OAAyB;GAChD,IAAI,CAAC,MAAM,eAAe,MAAM,UAAU;GAC1C,MAAM,SAAS,MAAM;GACrB,IACE,kBAAkB,WAClB,OAAO,QAAQ,4DAA4D,GAE3E;GACF,KAAK,UAAU;EACjB;EAEA,SAAS,UAAU,OAA4B;GAC7C,IAAI,CAAC,MAAM,eAAe,MAAM,UAAU;GAC1C,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC9C,MAAM,eAAe;IACrB,KAAK,UAAU;GACjB;EACF;EAEA,MAAM,QAAQ,eACZ,MAAM,WACF,aACA,MAAM,cACJ,gBACA,MAAM,WACJ,aACA,MACV;;GAIE,OAAA,UAAA,GAAA,mBAeK,MAAA;IAdF,OAAK,eAAS,MAAA,EAAA,CAAE,CAAU,MAAA,gBAAA,CAAgB,CAAA,EAAA,OAAG,MAAA,MAAK,CAAA,GAAqF,QAAA,YAAQ,CAAK,QAAA,YAAQ,qBAAA,CAAA;IAO5J,iBAAe,QAAA,eAAe,QAAA,WAAW,QAAA,WAAW,KAAA;IACpD,UAAU,QAAA,eAAW,CAAK,QAAA,WAAQ,IAAO,KAAA;IACzC,SAAO;IACE;GAGV,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA"}
@@ -0,0 +1,8 @@
1
+ import { TABLE_LABELS } from "./Table.vue_vue_type_script_setup_true_lang.js";
2
+ import Table_default from "./Table.js";
3
+ import { tableRowVariants } from "./TableRow.vue_vue_type_script_setup_true_lang.js";
4
+ import TableRow_default from "./TableRow.js";
5
+ import { headAlignClass, nextSort } from "./TableHead.vue_vue_type_script_setup_true_lang.js";
6
+ import TableHead_default from "./TableHead.js";
7
+ import TableCell_default from "./TableCell.js";
8
+ export { TABLE_LABELS, TableCell_default as TableCell, TableHead_default as TableHead, TableRow_default as TableRow, Table_default as default, headAlignClass, nextSort, tableRowVariants };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","names":[],"sources":["../../../../packages/primitives/tabs/src/Tabs.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TabItem {\n /** Selects this tab, and names the slot that carries its panel. */\n value: string;\n /** The trigger's visible text. */\n label: string;\n /** Skips this tab in pointer, click and roving-tabindex arrow navigation. */\n disabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { TabsContent, TabsIndicator, TabsList, TabsRoot, TabsTrigger } from \"reka-ui\";\nimport { optional } from \"@ecoma-io/loom-core\";\n\n/**\n * Tabs — switch between panels/views, with the active panel's content shown\n * below. For picking one value of a setting with no panel underneath, reach\n * for SegmentedControl instead. Built on Reka UI's Tabs (roving tabindex,\n * arrow-key navigation, a11y sourced from the `tab`/`tabpanel` pattern).\n * Panels are supplied by the host via named slots keyed by each tab's\n * `value` — `<Tabs :tabs=\"tabs\"><template #overview>…</template></Tabs>`.\n *\n * The panels are real focus stops: Reka gives each `TabsContent`\n * `tabindex=\"0\"`, which is the ARIA tabs pattern's answer to \"how does a\n * keyboard reader get from the tab list to the content\" — Tab lands on the\n * active panel. An earlier `focus-visible:outline-none` here therefore\n * silenced a legitimate focus indicator (WCAG 2.4.7) rather than a cosmetic\n * one, so the panel wears the canonical ring like every other focusable\n * surface in the library.\n */\ndefineProps<{\n /** The selected tab's value. Omit it and Tabs owns its own selection. */\n modelValue?: string;\n /** The ordered set of tabs; each entry needs a like-named slot for its panel. */\n tabs: TabItem[];\n}>();\n\ndefineEmits<{ \"update:modelValue\": [value: string] }>();\n</script>\n\n<template>\n <TabsRoot\n v-bind=\"optional({ modelValue })\"\n orientation=\"horizontal\"\n @update:model-value=\"$emit('update:modelValue', String($event))\"\n >\n <TabsList class=\"relative inline-flex items-center gap-1 border-b border-border\">\n <!-- A drained plate rather than a dim, and the trigger is the awkward\n case that makes the reason clear. Its whole content is the tab's\n label, so `disabled:opacity-50` took that label from 5.25:1 to\n 2.05:1 — but the label is *already* `text-muted-foreground` when the\n tab is merely unselected, so simply dropping the alpha would leave an\n unavailable tab painted exactly like an available one. The fill is\n what carries \"unavailable\" instead: `bg-muted` under the same\n measured text holds 4.67:1, and the plate is visible where a second\n grey would not have been. `rounded-t-sm` is the control radius less\n the list's own padding, and it shapes the focus outline too — the\n plate stops at the list's bottom rule rather than crossing it. -->\n <TabsTrigger\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n :value=\"tab.value\"\n v-bind=\"optional({ disabled: tab.disabled })\"\n class=\"relative rounded-t-sm px-3 py-2 text-sm text-muted-foreground transition-colors duration-fast ease-out data-[state=active]:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring disabled:pointer-events-none disabled:bg-muted disabled:text-muted-foreground\"\n >\n {{ tab.label }}\n </TabsTrigger>\n <TabsIndicator\n class=\"absolute bottom-0 left-0 h-0.5 bg-primary\"\n style=\"\n width: var(--reka-tabs-indicator-size);\n transform: translateX(var(--reka-tabs-indicator-position));\n transition:\n width var(--duration-fast) var(--ease-spring),\n transform var(--duration-fast) var(--ease-spring);\n \"\n />\n </TabsList>\n <TabsContent\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n :value=\"tab.value\"\n class=\"animate-fade-rise pt-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n >\n <slot :name=\"tab.value\" />\n </TabsContent>\n </TabsRoot>\n</template>\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.vue_vue_type_script_setup_true_lang.js","names":["$emit"],"sources":["../../../../packages/primitives/tabs/src/Tabs.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface TabItem {\n /** Selects this tab, and names the slot that carries its panel. */\n value: string;\n /** The trigger's visible text. */\n label: string;\n /** Skips this tab in pointer, click and roving-tabindex arrow navigation. */\n disabled?: boolean;\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { TabsContent, TabsIndicator, TabsList, TabsRoot, TabsTrigger } from \"reka-ui\";\nimport { optional } from \"@ecoma-io/loom-core\";\n\n/**\n * Tabs — switch between panels/views, with the active panel's content shown\n * below. For picking one value of a setting with no panel underneath, reach\n * for SegmentedControl instead. Built on Reka UI's Tabs (roving tabindex,\n * arrow-key navigation, a11y sourced from the `tab`/`tabpanel` pattern).\n * Panels are supplied by the host via named slots keyed by each tab's\n * `value` — `<Tabs :tabs=\"tabs\"><template #overview>…</template></Tabs>`.\n *\n * The panels are real focus stops: Reka gives each `TabsContent`\n * `tabindex=\"0\"`, which is the ARIA tabs pattern's answer to \"how does a\n * keyboard reader get from the tab list to the content\" — Tab lands on the\n * active panel. An earlier `focus-visible:outline-none` here therefore\n * silenced a legitimate focus indicator (WCAG 2.4.7) rather than a cosmetic\n * one, so the panel wears the canonical ring like every other focusable\n * surface in the library.\n */\ndefineProps<{\n /** The selected tab's value. Omit it and Tabs owns its own selection. */\n modelValue?: string;\n /** The ordered set of tabs; each entry needs a like-named slot for its panel. */\n tabs: TabItem[];\n}>();\n\ndefineEmits<{ \"update:modelValue\": [value: string] }>();\n</script>\n\n<template>\n <TabsRoot\n v-bind=\"optional({ modelValue })\"\n orientation=\"horizontal\"\n @update:model-value=\"$emit('update:modelValue', String($event))\"\n >\n <TabsList class=\"relative inline-flex items-center gap-1 border-b border-border\">\n <!-- A drained plate rather than a dim, and the trigger is the awkward\n case that makes the reason clear. Its whole content is the tab's\n label, so `disabled:opacity-50` took that label from 5.25:1 to\n 2.05:1 — but the label is *already* `text-muted-foreground` when the\n tab is merely unselected, so simply dropping the alpha would leave an\n unavailable tab painted exactly like an available one. The fill is\n what carries \"unavailable\" instead: `bg-muted` under the same\n measured text holds 4.67:1, and the plate is visible where a second\n grey would not have been. `rounded-t-sm` is the control radius less\n the list's own padding, and it shapes the focus outline too — the\n plate stops at the list's bottom rule rather than crossing it. -->\n <TabsTrigger\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n :value=\"tab.value\"\n v-bind=\"optional({ disabled: tab.disabled })\"\n class=\"relative rounded-t-sm px-3 py-2 text-sm text-muted-foreground transition-colors duration-fast ease-out data-[state=active]:text-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring disabled:pointer-events-none disabled:bg-muted disabled:text-muted-foreground\"\n >\n {{ tab.label }}\n </TabsTrigger>\n <TabsIndicator\n class=\"absolute bottom-0 left-0 h-0.5 bg-primary\"\n style=\"\n width: var(--reka-tabs-indicator-size);\n transform: translateX(var(--reka-tabs-indicator-position));\n transition:\n width var(--duration-fast) var(--ease-spring),\n transform var(--duration-fast) var(--ease-spring);\n \"\n />\n </TabsList>\n <TabsContent\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n :value=\"tab.value\"\n class=\"animate-fade-rise pt-4 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring focus-visible:shadow-halo\"\n >\n <slot :name=\"tab.value\" />\n </TabsContent>\n </TabsRoot>\n</template>\n"],"mappings":";;;;;;;;;;;;;;GA0CE,OAAA,UAAA,GAAA,YA6CW,MAAA,QAAA,GA7CX,WACU,MA4CC,QAAA,CA5CO,CAAA,EAAA,YAAG,QAAA,WAAU,CAAA,GAAA;IAC7B,aAAY;IACX,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,qBAAsB,OAAO,MAAM,CAAA;;IAE7D,SAAA,cA+BW,CA/BX,YA+BW,MAAA,QAAA,GAAA,EA/BD,OAAM,iEAAgE,GAAA;KAa5E,SAAA,cAAmB,EADrB,UAAA,IAAA,GAAA,mBAQc,UAAA,MAAA,WAPE,QAAA,OAAP,QAAG;MADZ,OAAA,UAAA,GAAA,YAQc,MAAA,WAAA,GARd,WAQc;OANX,KAAK,IAAI;OACT,OAAO,IAAI;MACJ,GAAA,EAAA,SAAA,KAAA,GAAA,MAAA,QAAA,CAAQ,CAAA,EAAA,UAAa,IAAI,SAAQ,CAAA,GAAA,EACzC,OAAM,6SAA4S,CAAA,GAAA;OAElT,SAAA,cAAe,CAAZ,gBAAA,gBAAA,IAAI,KAAK,GAAA,CAAA,CAAA,CAAA;;;KAEd,CAAA,GAAA,GAAA,IAAA,YASE,MAAA,aAAA,GAAA;MARA,OAAM;MACN,OAAA;OAAA,SAAA;OAAA,aAAA;OAAA,cAAA;MAAA;;;IASJ,CAAA,IAAA,UAAA,IAAA,GAAA,mBAOc,UAAA,MAAA,WANE,QAAA,OAAP,QAAG;KADZ,OAAA,UAAA,GAAA,YAOc,MAAA,WAAA,GAAA;MALX,KAAK,IAAI;MACT,OAAO,IAAI;MACZ,OAAM;;MAEN,SAAA,cAA0B,CAA1B,WAA0B,KAAA,QAAb,IAAI,KAAK,CAAA,CAAA"}