@ecoma-io/loom 0.4.0 → 0.5.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 (251) hide show
  1. package/README.md +11 -9
  2. package/dist/a11y.js +2 -2
  3. package/dist/index.js +36 -1
  4. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/CalendarDate.js +1 -1
  5. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/CalendarDate.js.map +1 -1
  6. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +1 -1
  7. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js.map +1 -1
  8. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/conversion.js +1 -1
  9. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/conversion.js.map +1 -1
  10. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/manipulation.js +1 -1
  11. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/manipulation.js.map +1 -1
  12. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/queries.js +1 -1
  13. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/queries.js.map +1 -1
  14. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/string.js +1 -1
  15. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/string.js.map +1 -1
  16. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/utils.js +1 -1
  17. package/dist/node_modules/.pnpm/{@internationalized_date@3.12.3 → @internationalized_date@3.12.4}/node_modules/@internationalized/date/dist/private/utils.js.map +1 -1
  18. package/dist/packages/blocks/empty-state/src/EmptyState.js.map +1 -1
  19. package/dist/packages/blocks/empty-state/src/EmptyState.vue.d.ts.map +1 -1
  20. package/dist/packages/blocks/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js +5 -6
  21. package/dist/packages/blocks/empty-state/src/EmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  22. package/dist/packages/blocks/error-summary/src/ErrorSummary.js +7 -0
  23. package/dist/packages/blocks/error-summary/src/ErrorSummary.js.map +1 -0
  24. package/dist/packages/blocks/error-summary/src/ErrorSummary.vue.d.ts +31 -0
  25. package/dist/packages/blocks/error-summary/src/ErrorSummary.vue_vue_type_script_setup_true_lang.js +90 -0
  26. package/dist/packages/blocks/error-summary/src/ErrorSummary.vue_vue_type_script_setup_true_lang.js.map +1 -0
  27. package/dist/packages/blocks/error-summary/src/index.d.ts +4 -0
  28. package/dist/packages/blocks/error-summary/src/index.js +3 -0
  29. package/dist/packages/composition/scroll-reel/src/ScrollReel.js.map +1 -1
  30. package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js +1 -0
  31. package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/packages/composition/sidebar/src/Sidebar.js.map +1 -1
  33. package/dist/packages/composition/sidebar/src/Sidebar.vue.d.ts +4 -0
  34. package/dist/packages/composition/sidebar/src/Sidebar.vue.d.ts.map +1 -1
  35. package/dist/packages/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js +13 -4
  36. package/dist/packages/composition/sidebar/src/Sidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/packages/composition/split/src/Split.js.map +1 -1
  38. package/dist/packages/composition/split/src/Split.vue.d.ts +11 -12
  39. package/dist/packages/composition/split/src/Split.vue.d.ts.map +1 -1
  40. package/dist/packages/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js +15 -5
  41. package/dist/packages/composition/split/src/Split.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/packages/core/src/a11y-scope.d.ts +71 -5
  43. package/dist/packages/core/src/a11y-scope.d.ts.map +1 -1
  44. package/dist/packages/core/src/a11y-scope.js +126 -6
  45. package/dist/packages/core/src/a11y-scope.js.map +1 -1
  46. package/dist/packages/core/src/index.d.ts +1 -1
  47. package/dist/packages/core/src/index.d.ts.map +1 -1
  48. package/dist/packages/core/src/index.js +2 -2
  49. package/dist/packages/labels/src/component-shapes.d.ts +163 -1
  50. package/dist/packages/labels/src/component-shapes.d.ts.map +1 -1
  51. package/dist/packages/labels/src/date-labels.d.ts +82 -5
  52. package/dist/packages/labels/src/date-labels.d.ts.map +1 -1
  53. package/dist/packages/labels/src/date-labels.js +54 -7
  54. package/dist/packages/labels/src/date-labels.js.map +1 -1
  55. package/dist/packages/labels/src/field-context.d.ts +2 -2
  56. package/dist/packages/labels/src/field-context.js.map +1 -1
  57. package/dist/packages/labels/src/index.d.ts +3 -3
  58. package/dist/packages/labels/src/index.d.ts.map +1 -1
  59. package/dist/packages/labels/src/index.js +2 -2
  60. package/dist/packages/labels/src/label-registry.d.ts +9 -1
  61. package/dist/packages/labels/src/label-registry.d.ts.map +1 -1
  62. package/dist/packages/layouts/dashboard/src/Dashboard.js.map +1 -1
  63. package/dist/packages/layouts/dashboard/src/Dashboard.vue.d.ts +4 -4
  64. package/dist/packages/layouts/dashboard/src/Dashboard.vue.d.ts.map +1 -1
  65. package/dist/packages/layouts/dashboard/src/Dashboard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  66. package/dist/packages/layouts/settings/src/Settings.js.map +1 -1
  67. package/dist/packages/layouts/settings/src/Settings.vue.d.ts +3 -3
  68. package/dist/packages/layouts/settings/src/Settings.vue.d.ts.map +1 -1
  69. package/dist/packages/layouts/settings/src/Settings.vue_vue_type_script_setup_true_lang.js.map +1 -1
  70. package/dist/packages/layouts/split-layout/src/SplitLayout.js.map +1 -1
  71. package/dist/packages/layouts/split-layout/src/SplitLayout.vue.d.ts +4 -6
  72. package/dist/packages/layouts/split-layout/src/SplitLayout.vue.d.ts.map +1 -1
  73. package/dist/packages/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js +20 -5
  74. package/dist/packages/layouts/split-layout/src/SplitLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/packages/layouts/split-layout/src/index.d.ts +1 -1
  76. package/dist/packages/layouts/split-layout/src/index.d.ts.map +1 -1
  77. package/dist/packages/loom/src/a11y.d.ts +1 -1
  78. package/dist/packages/loom/src/index.d.ts +27 -1
  79. package/dist/packages/primitives/alert/src/Alert.js.map +1 -1
  80. package/dist/packages/primitives/alert/src/Alert.vue.d.ts +18 -0
  81. package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js +10 -7
  82. package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js.map +1 -1
  83. package/dist/packages/primitives/avatar/src/Avatar.js.map +1 -1
  84. package/dist/packages/primitives/avatar/src/Avatar.vue.d.ts +2 -2
  85. package/dist/packages/primitives/avatar/src/Avatar.vue.d.ts.map +1 -1
  86. package/dist/packages/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js +1 -1
  87. package/dist/packages/primitives/avatar/src/Avatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/packages/primitives/calendar/src/Calendar.js +7 -0
  89. package/dist/packages/primitives/calendar/src/Calendar.js.map +1 -0
  90. package/dist/packages/primitives/calendar/src/Calendar.vue.d.ts +95 -0
  91. package/dist/packages/primitives/calendar/src/Calendar.vue_vue_type_script_setup_true_lang.js +204 -0
  92. package/dist/packages/primitives/calendar/src/Calendar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  93. package/dist/packages/primitives/calendar/src/index.d.ts +3 -0
  94. package/dist/packages/primitives/calendar/src/index.js +3 -0
  95. package/dist/packages/primitives/combobox/src/Combobox.vue.d.ts +1 -1
  96. package/dist/packages/primitives/command/src/Command.js +7 -0
  97. package/dist/packages/primitives/command/src/Command.js.map +1 -0
  98. package/dist/packages/primitives/command/src/Command.vue.d.ts +77 -0
  99. package/dist/packages/primitives/command/src/Command.vue_vue_type_script_setup_true_lang.js +333 -0
  100. package/dist/packages/primitives/command/src/Command.vue_vue_type_script_setup_true_lang.js.map +1 -0
  101. package/dist/packages/primitives/command/src/index.d.ts +4 -0
  102. package/dist/packages/primitives/command/src/index.js +3 -0
  103. package/dist/packages/primitives/copy-button/src/CopyButton.js +7 -0
  104. package/dist/packages/primitives/copy-button/src/CopyButton.js.map +1 -0
  105. package/dist/packages/primitives/copy-button/src/CopyButton.vue.d.ts +64 -0
  106. package/dist/packages/primitives/copy-button/src/CopyButton.vue_vue_type_script_setup_true_lang.js +113 -0
  107. package/dist/packages/primitives/copy-button/src/CopyButton.vue_vue_type_script_setup_true_lang.js.map +1 -0
  108. package/dist/packages/primitives/copy-button/src/index.d.ts +4 -0
  109. package/dist/packages/primitives/copy-button/src/index.js +3 -0
  110. package/dist/packages/primitives/data-grid/src/DataGrid.js +7 -0
  111. package/dist/packages/primitives/data-grid/src/DataGrid.js.map +1 -0
  112. package/dist/packages/primitives/data-grid/src/DataGrid.vue.d.ts +128 -0
  113. package/dist/packages/primitives/data-grid/src/DataGrid.vue_vue_type_script_setup_true_lang.js +347 -0
  114. package/dist/packages/primitives/data-grid/src/DataGrid.vue_vue_type_script_setup_true_lang.js.map +1 -0
  115. package/dist/packages/primitives/data-grid/src/index.d.ts +4 -0
  116. package/dist/packages/primitives/data-grid/src/index.js +3 -0
  117. package/dist/packages/primitives/date-picker/src/DatePicker.js.map +1 -1
  118. package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js +13 -13
  119. package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  120. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.js.map +1 -1
  121. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js +21 -18
  122. package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.js.map +1 -1
  124. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js +17 -16
  125. package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  126. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.js.map +1 -1
  127. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +17 -16
  128. package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  129. package/dist/packages/primitives/dialog/src/Dialog.js.map +1 -1
  130. package/dist/packages/primitives/dialog/src/Dialog.vue.d.ts +15 -7
  131. package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js +5 -3
  132. package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  133. package/dist/packages/primitives/drawer/src/Drawer.js.map +1 -1
  134. package/dist/packages/primitives/drawer/src/Drawer.vue.d.ts +10 -2
  135. package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js +11 -3
  136. package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/packages/primitives/hover-card/src/index.d.ts.map +1 -1
  138. package/dist/packages/primitives/live-region/src/LiveRegion.js +7 -0
  139. package/dist/packages/primitives/live-region/src/LiveRegion.js.map +1 -0
  140. package/dist/packages/primitives/live-region/src/LiveRegion.vue.d.ts +36 -0
  141. package/dist/packages/primitives/live-region/src/LiveRegion.vue.d.ts.map +1 -0
  142. package/dist/packages/primitives/live-region/src/LiveRegion.vue_vue_type_script_setup_true_lang.js +59 -0
  143. package/dist/packages/primitives/live-region/src/LiveRegion.vue_vue_type_script_setup_true_lang.js.map +1 -0
  144. package/dist/packages/primitives/live-region/src/context.d.ts +40 -0
  145. package/dist/packages/primitives/live-region/src/context.d.ts.map +1 -0
  146. package/dist/packages/primitives/live-region/src/context.js +85 -0
  147. package/dist/packages/primitives/live-region/src/context.js.map +1 -0
  148. package/dist/packages/primitives/live-region/src/index.d.ts +4 -0
  149. package/dist/packages/primitives/live-region/src/index.d.ts.map +1 -0
  150. package/dist/packages/primitives/live-region/src/index.js +3 -0
  151. package/dist/packages/primitives/live-region/src/useAnnounce.d.ts +17 -0
  152. package/dist/packages/primitives/live-region/src/useAnnounce.d.ts.map +1 -0
  153. package/dist/packages/primitives/live-region/src/useAnnounce.js +25 -0
  154. package/dist/packages/primitives/live-region/src/useAnnounce.js.map +1 -0
  155. package/dist/packages/primitives/menubar/src/Menubar.js.map +1 -1
  156. package/dist/packages/primitives/menubar/src/Menubar.vue.d.ts.map +1 -1
  157. package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js +33 -0
  158. package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/packages/primitives/meter/src/Meter.js +7 -0
  160. package/dist/packages/primitives/meter/src/Meter.js.map +1 -0
  161. package/dist/packages/primitives/meter/src/Meter.vue.d.ts +87 -0
  162. package/dist/packages/primitives/meter/src/Meter.vue_vue_type_script_setup_true_lang.js +236 -0
  163. package/dist/packages/primitives/meter/src/Meter.vue_vue_type_script_setup_true_lang.js.map +1 -0
  164. package/dist/packages/primitives/meter/src/index.d.ts +4 -0
  165. package/dist/packages/primitives/meter/src/index.js +3 -0
  166. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.js +7 -0
  167. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.js.map +1 -0
  168. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue.d.ts +69 -0
  169. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue.d.ts.map +1 -0
  170. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue_vue_type_script_setup_true_lang.js +118 -0
  171. package/dist/packages/primitives/navigation-menu/src/NavigationMenu.vue_vue_type_script_setup_true_lang.js.map +1 -0
  172. package/dist/packages/primitives/navigation-menu/src/index.d.ts +3 -0
  173. package/dist/packages/primitives/navigation-menu/src/index.d.ts.map +1 -0
  174. package/dist/packages/primitives/navigation-menu/src/index.js +2 -0
  175. package/dist/packages/primitives/segmented-control/src/SegmentedControl.js.map +1 -1
  176. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue.d.ts.map +1 -1
  177. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js +1 -1
  178. package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  179. package/dist/packages/primitives/skip-link/src/SkipLink.js +7 -0
  180. package/dist/packages/primitives/skip-link/src/SkipLink.js.map +1 -0
  181. package/dist/packages/primitives/skip-link/src/SkipLink.vue.d.ts +62 -0
  182. package/dist/packages/primitives/skip-link/src/SkipLink.vue_vue_type_script_setup_true_lang.js +64 -0
  183. package/dist/packages/primitives/skip-link/src/SkipLink.vue_vue_type_script_setup_true_lang.js.map +1 -0
  184. package/dist/packages/primitives/skip-link/src/index.d.ts +3 -0
  185. package/dist/packages/primitives/skip-link/src/index.js +3 -0
  186. package/dist/packages/primitives/stepper/src/Stepper.js.map +1 -1
  187. package/dist/packages/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js +7 -5
  188. package/dist/packages/primitives/stepper/src/Stepper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  189. package/dist/packages/primitives/switch/src/Switch.js.map +1 -1
  190. package/dist/packages/primitives/switch/src/Switch.vue.d.ts.map +1 -1
  191. package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js +1 -1
  192. package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  193. package/dist/packages/primitives/table/src/index.d.ts +1 -1
  194. package/dist/packages/primitives/table/src/index.js +2 -2
  195. package/dist/packages/primitives/time-picker/src/TimePicker.js.map +1 -1
  196. package/dist/packages/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js +10 -8
  197. package/dist/packages/primitives/time-picker/src/TimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/packages/primitives/toast/src/ToastItem.js.map +1 -1
  199. package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js +3 -1
  200. package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  201. package/dist/packages/primitives/toggle-group/src/ToggleGroup.js +7 -0
  202. package/dist/packages/primitives/toggle-group/src/ToggleGroup.js.map +1 -0
  203. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue.d.ts +53 -0
  204. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue.d.ts.map +1 -0
  205. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue_vue_type_script_setup_true_lang.js +111 -0
  206. package/dist/packages/primitives/toggle-group/src/ToggleGroup.vue_vue_type_script_setup_true_lang.js.map +1 -0
  207. package/dist/packages/primitives/toggle-group/src/index.d.ts +3 -0
  208. package/dist/packages/primitives/toggle-group/src/index.d.ts.map +1 -0
  209. package/dist/packages/primitives/toggle-group/src/index.js +2 -0
  210. package/dist/packages/primitives/toolbar/src/Toolbar.js +7 -0
  211. package/dist/packages/primitives/toolbar/src/Toolbar.js.map +1 -0
  212. package/dist/packages/primitives/toolbar/src/Toolbar.vue.d.ts +31 -0
  213. package/dist/packages/primitives/toolbar/src/Toolbar.vue.d.ts.map +1 -0
  214. package/dist/packages/primitives/toolbar/src/Toolbar.vue_vue_type_script_setup_true_lang.js +149 -0
  215. package/dist/packages/primitives/toolbar/src/Toolbar.vue_vue_type_script_setup_true_lang.js.map +1 -0
  216. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.js +7 -0
  217. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.js.map +1 -0
  218. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue.d.ts +24 -0
  219. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue.d.ts.map +1 -0
  220. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js +40 -0
  221. package/dist/packages/primitives/toolbar/src/ToolbarSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -0
  222. package/dist/packages/primitives/toolbar/src/index.d.ts +4 -0
  223. package/dist/packages/primitives/toolbar/src/index.d.ts.map +1 -0
  224. package/dist/packages/primitives/toolbar/src/index.js +3 -0
  225. package/dist/packages/primitives/tree-view/src/TreeView.js +7 -0
  226. package/dist/packages/primitives/tree-view/src/TreeView.js.map +1 -0
  227. package/dist/packages/primitives/tree-view/src/TreeView.vue.d.ts +99 -0
  228. package/dist/packages/primitives/tree-view/src/TreeView.vue_vue_type_script_setup_true_lang.js +310 -0
  229. package/dist/packages/primitives/tree-view/src/TreeView.vue_vue_type_script_setup_true_lang.js.map +1 -0
  230. package/dist/packages/primitives/tree-view/src/TreeViewNode.js +7 -0
  231. package/dist/packages/primitives/tree-view/src/TreeViewNode.js.map +1 -0
  232. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue.d.ts +15 -0
  233. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue.d.ts.map +1 -0
  234. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue_vue_type_script_setup_true_lang.js +103 -0
  235. package/dist/packages/primitives/tree-view/src/TreeViewNode.vue_vue_type_script_setup_true_lang.js.map +1 -0
  236. package/dist/packages/primitives/tree-view/src/context.d.ts +39 -0
  237. package/dist/packages/primitives/tree-view/src/context.d.ts.map +1 -0
  238. package/dist/packages/primitives/tree-view/src/context.js +6 -0
  239. package/dist/packages/primitives/tree-view/src/context.js.map +1 -0
  240. package/dist/packages/primitives/tree-view/src/index.d.ts +4 -0
  241. package/dist/packages/primitives/tree-view/src/index.js +3 -0
  242. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.js +7 -0
  243. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.js.map +1 -0
  244. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue.d.ts +21 -0
  245. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue.d.ts.map +1 -0
  246. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue_vue_type_script_setup_true_lang.js +27 -0
  247. package/dist/packages/primitives/visually-hidden/src/VisuallyHidden.vue_vue_type_script_setup_true_lang.js.map +1 -0
  248. package/dist/packages/primitives/visually-hidden/src/index.d.ts +3 -0
  249. package/dist/packages/primitives/visually-hidden/src/index.d.ts.map +1 -0
  250. package/dist/packages/primitives/visually-hidden/src/index.js +2 -0
  251. package/package.json +29 -28
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../../core/src/cn.js";
2
2
  import "../../../core/src/index.js";
3
- import { createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
3
+ import { Fragment, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
4
4
  //#region packages/composition/sidebar/src/Sidebar.vue?vue&type=script&setup=true&lang.ts
5
5
  var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  __name: "Sidebar",
@@ -16,9 +16,18 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
16
16
  setup(__props) {
17
17
  return (_ctx, _cache) => {
18
18
  return openBlock(), createElementBlock("div", {
19
- class: normalizeClass(unref(cn)("flex", __props.side === "right" ? "flex-row-reverse" : "flex-row", __props.gap ? "gap-3 sm:gap-4" : void 0)),
19
+ class: normalizeClass(unref(cn)("flex flex-row", __props.gap ? "gap-3 sm:gap-4" : void 0)),
20
20
  style: { flexWrap: "wrap" }
21
- }, [createElementVNode("div", { style: normalizeStyle({
21
+ }, [__props.side === "right" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("div", { style: normalizeStyle({
22
+ flexBasis: 0,
23
+ flexGrow: 999,
24
+ flexShrink: 1,
25
+ minWidth: __props.contentMin
26
+ }) }, [renderSlot(_ctx.$slots, "default")], 4), createElementVNode("div", { style: normalizeStyle({
27
+ flexBasis: __props.sideWidth,
28
+ flexGrow: 0,
29
+ flexShrink: 1
30
+ }) }, [renderSlot(_ctx.$slots, "side")], 4)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("div", { style: normalizeStyle({
22
31
  flexBasis: __props.sideWidth,
23
32
  flexGrow: 0,
24
33
  flexShrink: 1
@@ -27,7 +36,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
27
36
  flexGrow: 999,
28
37
  flexShrink: 1,
29
38
  minWidth: __props.contentMin
30
- }) }, [renderSlot(_ctx.$slots, "default")], 4)], 2);
39
+ }) }, [renderSlot(_ctx.$slots, "default")], 4)], 64))], 2);
31
40
  };
32
41
  }
33
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/sidebar/src/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Sidebar — content + sidebar with intrinsic CSS collapse.\n *\n * The Every Layout \"Sidebar\" pattern: the sidebar gets a fixed `flex-basis`\n * and the content gets `flex-grow: 999`, so the layout wraps and both panels\n * go full-width the moment the content can't fit its `contentMin` percentage.\n * No media query, no JavaScript — the layout derives its own breakpoint from\n * the container's width.\n *\n * A Sidebar is a component because the `calc()` technique for intrinsic\n * sidebar width is non-obvious and easy to get wrong, and Loom wrapping it\n * prevents footguns. It differs from Split in that the content area is the\n * star — it grows to fill all available space — and the sidebar has a\n * preferred, not a minimum, width.\n */\nexport type SidebarSide = \"left\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** Which side the sidebar sits on. Controls flex direction and stacking order. */\n side?: SidebarSide;\n /** Preferred width for the sidebar (e.g. \"16rem\"). The sidebar does not grow. */\n sideWidth?: string;\n /** Minimum percentage of the container the content demands before the layout wraps. Default: `\"50%\"`. */\n contentMin?: string;\n /** Whether to add a gap between the two panels. Default: `true`. */\n gap?: boolean;\n }>(),\n { side: \"left\", sideWidth: \"16rem\", contentMin: \"50%\", gap: true },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n can't fit its `contentMin`, it wraps to a new line and both panels take\n full width — the sidebar becomes a full-width section above or below the\n content, depending on `side`.\n\n The sidebar's `flex-basis` is its preferred width. The content's\n `flex-grow: 999` ensures it takes all remaining space when there is room,\n but its `flex-basis: 0` and `min-width: contentMin` trigger wrapping\n when there isn't.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap ? 'gap-3 sm:gap-4' : undefined,\n )\n \"\n :style=\"{ flexWrap: 'wrap' }\"\n >\n <div\n :style=\"{\n flexBasis: sideWidth,\n flexGrow: 0,\n flexShrink: 1,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: contentMin,\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;GAiDE,OAAA,UAAA,GAAA,mBA8BM,OAAA;IA7BH,OAAK,eAAS,MAAA,EAAA,CAAE,CAAA,QAA0B,QAAA,SAAI,UAAA,qBAAA,YAAwD,QAAA,MAAG,mBAAsB,KAAA,CAAA,CAAA;IAO/H,OAAO,EAAA,UAAA,OAAA;GAER,GAAA,CAAA,mBAQM,OAAA,EAPH,OAAK,eAAA;IAAuB,WAAA,QAAA;;;GAM7B,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,GAGtB,mBASM,OAAA,EARH,OAAK,eAAA;;;;IAA0F,UAAA,QAAA;GAOhG,CAAA,EAAA,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"Sidebar.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/sidebar/src/Sidebar.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Sidebar — content + sidebar with intrinsic CSS collapse.\n *\n * The Every Layout \"Sidebar\" pattern: the sidebar gets a fixed `flex-basis`\n * and the content gets `flex-grow: 999`, so the layout wraps and both panels\n * go full-width the moment the content can't fit its `contentMin` percentage.\n * No media query, no JavaScript — the layout derives its own breakpoint from\n * the container's width.\n *\n * A Sidebar is a component because the `calc()` technique for intrinsic\n * sidebar width is non-obvious and easy to get wrong, and Loom wrapping it\n * prevents footguns. It differs from Split in that the content area is the\n * star — it grows to fill all available space — and the sidebar has a\n * preferred, not a minimum, width.\n */\nexport type SidebarSide = \"left\" | \"right\";\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** Which side the sidebar sits on. Controls flex direction and stacking order. */\n side?: SidebarSide;\n /** Preferred width for the sidebar (e.g. \"16rem\"). The sidebar does not grow. */\n sideWidth?: string;\n /** Minimum percentage of the container the content demands before the layout wraps. Default: `\"50%\"`. */\n contentMin?: string;\n /** Whether to add a gap between the two panels. Default: `true`. */\n gap?: boolean;\n }>(),\n { side: \"left\", sideWidth: \"16rem\", contentMin: \"50%\", gap: true },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap: wrap` is the intrinsic collapse mechanism. When the content\n can't fit its `contentMin`, it wraps to a new line and both panels take\n full width — the sidebar becomes a full-width section above or below the\n content, depending on `side`.\n\n The sidebar's `flex-basis` is its preferred width. The content's\n `flex-grow: 999` ensures it takes all remaining space when there is room,\n but its `flex-basis: 0` and `min-width: contentMin` trigger wrapping\n when there isn't.\n -->\n <div\n :class=\"cn('flex flex-row', gap ? 'gap-3 sm:gap-4' : undefined)\"\n :style=\"{ flexWrap: 'wrap' }\"\n >\n <!--\n Document order follows `side`, so the wrapped stack never contradicts\n the side-by-side row and screen-reader order matches the visual one:\n content first when `side=\"right\"`, sidebar first when `side=\"left\"`.\n flex-row (never reverse) plus this ordering is what makes the wrap\n produce content-above-sidebar for `side=\"right\"`.\n -->\n <template v-if=\"side === 'right'\">\n <!-- Content: fills all remaining space (flex-grow: 999), but its\n min-width: contentMin triggers wrapping when there isn't room. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: contentMin,\n }\"\n >\n <slot />\n </div>\n <!-- Sidebar: preferred width as flex-basis, does not grow. -->\n <div\n :style=\"{\n flexBasis: sideWidth,\n flexGrow: 0,\n flexShrink: 1,\n }\"\n >\n <slot name=\"side\" />\n </div>\n </template>\n <template v-else>\n <!-- Sidebar: preferred width as flex-basis, does not grow. -->\n <div\n :style=\"{\n flexBasis: sideWidth,\n flexGrow: 0,\n flexShrink: 1,\n }\"\n >\n <slot name=\"side\" />\n </div>\n <!-- Content: fills all remaining space (flex-grow: 999), but its\n min-width: contentMin triggers wrapping when there isn't room. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: contentMin,\n }\"\n >\n <slot />\n </div>\n </template>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;GAiDE,OAAA,UAAA,GAAA,mBA2DM,OAAA;IA1DH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,iBAAkB,QAAA,MAAG,mBAAsB,KAAA,CAAS,CAAA;IAC7D,OAAO,EAAA,UAAA,OAAA;GASQ,GAAA,CAAA,QAAA,SAAI,WAApB,UAAA,GAAA,mBAuBW,UAAA,EAAA,KAAA,EAAA,GAAA,CApBT,mBASM,OAAA,EARH,OAAK,eAAA;;;;IAAkG,UAAA,QAAA;GAOxG,CAAA,EAAA,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,GAGV,mBAQM,OAAA,EAPH,OAAK,eAAA;IAAyB,WAAA,QAAA;;;GAM/B,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,MAGxB,UAAA,GAAA,mBAuBW,UAAA,EAAA,KAAA,EAAA,GAAA,CArBT,mBAQM,OAAA,EAPH,OAAK,eAAA;IAAyB,WAAA,QAAA;;;GAM/B,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,GAItB,mBASM,OAAA,EARH,OAAK,eAAA;;;;IAAkG,UAAA,QAAA;GAOxG,CAAA,EAAA,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Split.js","names":[],"sources":["../../../../../packages/composition/split/src/Split.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Split — two-panel layout with intrinsic collapse.\n *\n * A flex row that places a side panel and a content area side by side above\n * a `collapseAt` width, and stacks them vertically below it. The side panel\n * gets a fixed minimum width; the content area grows to fill the remaining\n * space.\n *\n * This is the Every Layout \"Sidebar\" pattern, simplified for the common\n * two-panel case. The intrinsic collapse — panels stack when the container is\n * too narrow — avoids a breakpoint per viewport, and works identically inside\n * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.\n *\n * A Split is a component, not a hand-rolled flex row with a media query,\n * because the collapse width is a layout decision the call site should name\n * rather than compute, and the stacking order (side above or below) is an\n * intent the `side` prop expresses.\n */\nexport type SplitSide = \"left\" | \"right\";\n\nexport type SplitGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<SplitGap, \"none\">, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** The side the panel sits on. Controls stacking order when collapsed: \"left\" stacks the panel above, \"right\" stacks it below. */\n side?: SplitSide;\n /** Below this CSS width the two panels stack vertically instead of sitting side by side. Default: `\"48rem\"`. */\n collapseAt?: string;\n /** Minimum width for the side panel (e.g. \"16rem\"). The content area takes the rest. */\n minSideWidth?: string;\n /** Gap between the two panels. Tightens one notch below `sm` (except \"none\"). */\n gap?: SplitGap;\n }>(),\n { side: \"left\", collapseAt: \"48rem\", minSideWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap` is the intrinsic collapse mechanism: when the combined\n `min-width` of both panels exceeds the container, the second panel wraps\n to a new line. The `collapseAt` prop sets the breakpoint that controls\n when `flex-wrap` is active.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap !== 'none' ? gapClass[gap] : undefined,\n )\n \"\n :style=\"{\n flexWrap: 'wrap',\n }\"\n >\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Split.js","names":[],"sources":["../../../../../packages/composition/split/src/Split.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Split — two-panel layout with intrinsic collapse.\n *\n * A flex row that places a side panel and a content area side by side, and\n * stacks them vertically once the container is too narrow for both. The side\n * panel gets a fixed minimum width; the content area grows to fill the\n * remaining space.\n *\n * This is the Every Layout \"Sidebar\" pattern, simplified for the common\n * two-panel case. The intrinsic collapse — panels stack when the container is\n * too narrow — avoids a breakpoint per viewport, and works identically inside\n * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.\n *\n * A Split is a component, not a hand-rolled flex row with a media query,\n * because the wrap-and-floor technique is non-obvious and easy to get wrong,\n * and the stacking order (side above or below) is an intent the `side` prop\n * expresses.\n */\nexport type SplitSide = \"left\" | \"right\";\n\nexport type SplitGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<SplitGap, \"none\">, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** The side the panel sits on. Controls stacking order when collapsed: \"left\" stacks the panel above, \"right\" stacks it below. */\n side?: SplitSide;\n /** Minimum width for the side panel (e.g. \"16rem\"). The content area takes the rest. */\n minSideWidth?: string;\n /** Gap between the two panels. Tightens one notch below `sm` (except \"none\"). */\n gap?: SplitGap;\n }>(),\n { side: \"left\", minSideWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap` is the intrinsic collapse mechanism: when the combined\n `min-width` of both panels exceeds the container, the second panel wraps\n to a new line. Where that happens is decided by the panels' own minimum\n widths there is no breakpoint prop to set it with.\n -->\n <div\n :class=\"cn('flex flex-row', gap !== 'none' ? gapClass[gap] : undefined)\"\n :style=\"{\n flexWrap: 'wrap',\n }\"\n >\n <!--\n Document order follows `side`, so the wrapped stack never contradicts\n the side-by-side row and screen-reader order matches the visual one:\n content first when `side=\"right\"`, side first when `side=\"left\"`.\n flex-row (never reverse) plus this ordering is what makes the wrap\n produce content-above-panel for `side=\"right\"`.\n -->\n <template v-if=\"side === 'right'\">\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n </template>\n <template v-else>\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n </template>\n </div>\n</template>\n"],"mappings":""}
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Split — two-panel layout with intrinsic collapse.
3
3
  *
4
- * A flex row that places a side panel and a content area side by side above
5
- * a `collapseAt` width, and stacks them vertically below it. The side panel
6
- * gets a fixed minimum width; the content area grows to fill the remaining
7
- * space.
4
+ * A flex row that places a side panel and a content area side by side, and
5
+ * stacks them vertically once the container is too narrow for both. The side
6
+ * panel gets a fixed minimum width; the content area grows to fill the
7
+ * remaining space.
8
8
  *
9
9
  * This is the Every Layout "Sidebar" pattern, simplified for the common
10
10
  * two-panel case. The intrinsic collapse — panels stack when the container is
@@ -12,9 +12,9 @@
12
12
  * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.
13
13
  *
14
14
  * A Split is a component, not a hand-rolled flex row with a media query,
15
- * because the collapse width is a layout decision the call site should name
16
- * rather than compute, and the stacking order (side above or below) is an
17
- * intent the `side` prop expresses.
15
+ * because the wrap-and-floor technique is non-obvious and easy to get wrong,
16
+ * and the stacking order (side above or below) is an intent the `side` prop
17
+ * expresses.
18
18
  */
19
19
  export type SplitSide = "left" | "right";
20
20
  export type SplitGap = "sm" | "md" | "lg" | "none";
@@ -25,8 +25,6 @@ export default _default;
25
25
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
26
26
  /** The side the panel sits on. Controls stacking order when collapsed: "left" stacks the panel above, "right" stacks it below. */
27
27
  side?: SplitSide;
28
- /** Below this CSS width the two panels stack vertically instead of sitting side by side. Default: `"48rem"`. */
29
- collapseAt?: string;
30
28
  /** Minimum width for the side panel (e.g. "16rem"). The content area takes the rest. */
31
29
  minSideWidth?: string;
32
30
  /** Gap between the two panels. Tightens one notch below `sm` (except "none"). */
@@ -34,8 +32,6 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
34
32
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
35
33
  /** The side the panel sits on. Controls stacking order when collapsed: "left" stacks the panel above, "right" stacks it below. */
36
34
  side?: SplitSide;
37
- /** Below this CSS width the two panels stack vertically instead of sitting side by side. Default: `"48rem"`. */
38
- collapseAt?: string;
39
35
  /** Minimum width for the side panel (e.g. "16rem"). The content area takes the rest. */
40
36
  minSideWidth?: string;
41
37
  /** Gap between the two panels. Tightens one notch below `sm` (except "none"). */
@@ -43,9 +39,12 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
43
39
  }> & Readonly<{}>, {
44
40
  gap: SplitGap;
45
41
  side: SplitSide;
46
- collapseAt: string;
47
42
  minSideWidth: string;
48
43
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
44
+ default?: (props: {}) => any;
45
+ } & {
46
+ side?: (props: {}) => any;
47
+ } & {
49
48
  side?: (props: {}) => any;
50
49
  } & {
51
50
  default?: (props: {}) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"Split.vue.d.ts","sourceRoot":"","sources":["../../../../../packages/composition/split/src/Split.vue"],"names":[],"mappings":"AAuGA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEnD,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAI9C,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,kIAAkI;WAC3H,SAAS;IAChB,gHAAgH;iBACnG,MAAM;IACnB,wFAAwF;mBACzE,MAAM;IACrB,iFAAiF;UAC3E,QAAQ;;IAPd,kIAAkI;WAC3H,SAAS;IAChB,gHAAgH;iBACnG,MAAM;IACnB,wFAAwF;mBACzE,MAAM;IACrB,iFAAiF;UAC3E,QAAQ;;SAAR,QAAQ;UANP,SAAS;gBAEH,MAAM;kBAEJ,MAAM;;WA+Dd,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC3B,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"Split.vue.d.ts","sourceRoot":"","sources":["../../../../../packages/composition/split/src/Split.vue"],"names":[],"mappings":"AAkIA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEnD,QAAA,MAAM,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAI9C,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,CAAC;wBACC,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY;IAEd,kIAAkI;WAC3H,SAAS;IAChB,wFAAwF;mBACzE,MAAM;IACrB,iFAAiF;UAC3E,QAAQ;;IALd,kIAAkI;WAC3H,SAAS;IAChB,wFAAwF;mBACzE,MAAM;IACrB,iFAAiF;UAC3E,QAAQ;;SAAR,QAAQ;UAJP,SAAS;kBAED,MAAM;;cAiFX,CAAC,KAAK,IAAgB,KAAK,GAAG;;WACjC,CAAC,KAAK,IAAgB,KAAK,GAAG;;WAC9B,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC3B,CAAC,KAAK,IAAgB,KAAK,GAAG;EAUxC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../../core/src/cn.js";
2
2
  import "../../../core/src/index.js";
3
- import { createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
3
+ import { Fragment, createElementBlock, createElementVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, unref } from "vue";
4
4
  //#region packages/composition/split/src/Split.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = { style: {
6
6
  flexBasis: 0,
@@ -8,6 +8,12 @@ var _hoisted_1 = { style: {
8
8
  flexShrink: 1,
9
9
  minWidth: "50%"
10
10
  } };
11
+ var _hoisted_2 = { style: {
12
+ flexBasis: 0,
13
+ flexGrow: 999,
14
+ flexShrink: 1,
15
+ minWidth: "50%"
16
+ } };
11
17
  var gapClass = {
12
18
  sm: "gap-2 sm:gap-3",
13
19
  md: "gap-3 sm:gap-4",
@@ -17,21 +23,25 @@ var Split_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
17
23
  __name: "Split",
18
24
  props: {
19
25
  side: { default: "left" },
20
- collapseAt: { default: "48rem" },
21
26
  minSideWidth: { default: "16rem" },
22
27
  gap: { default: "md" }
23
28
  },
24
29
  setup(__props) {
25
30
  return (_ctx, _cache) => {
26
31
  return openBlock(), createElementBlock("div", {
27
- class: normalizeClass(unref(cn)("flex", __props.side === "right" ? "flex-row-reverse" : "flex-row", __props.gap !== "none" ? gapClass[__props.gap] : void 0)),
32
+ class: normalizeClass(unref(cn)("flex flex-row", __props.gap !== "none" ? gapClass[__props.gap] : void 0)),
28
33
  style: { flexWrap: "wrap" }
29
- }, [createElementVNode("div", { style: normalizeStyle({
34
+ }, [__props.side === "right" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "default")]), createElementVNode("div", { style: normalizeStyle({
35
+ flexBasis: __props.minSideWidth,
36
+ flexGrow: 0,
37
+ flexShrink: 0,
38
+ minWidth: __props.minSideWidth
39
+ }) }, [renderSlot(_ctx.$slots, "side")], 4)], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createElementVNode("div", { style: normalizeStyle({
30
40
  flexBasis: __props.minSideWidth,
31
41
  flexGrow: 0,
32
42
  flexShrink: 0,
33
43
  minWidth: __props.minSideWidth
34
- }) }, [renderSlot(_ctx.$slots, "side")], 4), createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "default")])], 2);
44
+ }) }, [renderSlot(_ctx.$slots, "side")], 4), createElementVNode("div", _hoisted_2, [renderSlot(_ctx.$slots, "default")])], 64))], 2);
35
45
  };
36
46
  }
37
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Split.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/split/src/Split.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Split — two-panel layout with intrinsic collapse.\n *\n * A flex row that places a side panel and a content area side by side above\n * a `collapseAt` width, and stacks them vertically below it. The side panel\n * gets a fixed minimum width; the content area grows to fill the remaining\n * space.\n *\n * This is the Every Layout \"Sidebar\" pattern, simplified for the common\n * two-panel case. The intrinsic collapse — panels stack when the container is\n * too narrow — avoids a breakpoint per viewport, and works identically inside\n * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.\n *\n * A Split is a component, not a hand-rolled flex row with a media query,\n * because the collapse width is a layout decision the call site should name\n * rather than compute, and the stacking order (side above or below) is an\n * intent the `side` prop expresses.\n */\nexport type SplitSide = \"left\" | \"right\";\n\nexport type SplitGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<SplitGap, \"none\">, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** The side the panel sits on. Controls stacking order when collapsed: \"left\" stacks the panel above, \"right\" stacks it below. */\n side?: SplitSide;\n /** Below this CSS width the two panels stack vertically instead of sitting side by side. Default: `\"48rem\"`. */\n collapseAt?: string;\n /** Minimum width for the side panel (e.g. \"16rem\"). The content area takes the rest. */\n minSideWidth?: string;\n /** Gap between the two panels. Tightens one notch below `sm` (except \"none\"). */\n gap?: SplitGap;\n }>(),\n { side: \"left\", collapseAt: \"48rem\", minSideWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap` is the intrinsic collapse mechanism: when the combined\n `min-width` of both panels exceeds the container, the second panel wraps\n to a new line. The `collapseAt` prop sets the breakpoint that controls\n when `flex-wrap` is active.\n -->\n <div\n :class=\"\n cn(\n 'flex',\n side === 'right' ? 'flex-row-reverse' : 'flex-row',\n gap !== 'none' ? gapClass[gap] : undefined,\n )\n \"\n :style=\"{\n flexWrap: 'wrap',\n }\"\n >\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;AAuBA,IAAM,WAAsD;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;;;GA8BE,OAAA,UAAA,GAAA,mBAsCM,OAAA;IArCH,OAAK,eAAS,MAAA,EAAA,CAAE,CAAA,QAA0B,QAAA,SAAI,UAAA,qBAAA,YAAwD,QAAA,QAAG,SAAc,SAAS,QAAA,OAAO,KAAA,CAAA,CAAA;IAOvI,OAAO,EAAA,UAAA,OAEP;GAID,GAAA,CAAA,mBASM,OAAA,EARH,OAAK,eAAA;IAAuB,WAAA,QAAA;;;IAA4E,UAAA,QAAA;GAOzG,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,GAMtB,mBASM,OATN,YASM,CADJ,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"Split.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/split/src/Split.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Split — two-panel layout with intrinsic collapse.\n *\n * A flex row that places a side panel and a content area side by side, and\n * stacks them vertically once the container is too narrow for both. The side\n * panel gets a fixed minimum width; the content area grows to fill the\n * remaining space.\n *\n * This is the Every Layout \"Sidebar\" pattern, simplified for the common\n * two-panel case. The intrinsic collapse — panels stack when the container is\n * too narrow — avoids a breakpoint per viewport, and works identically inside\n * a sidebar-narrowed workspace and full-bleed on an ultra-wide monitor.\n *\n * A Split is a component, not a hand-rolled flex row with a media query,\n * because the wrap-and-floor technique is non-obvious and easy to get wrong,\n * and the stacking order (side above or below) is an intent the `side` prop\n * expresses.\n */\nexport type SplitSide = \"left\" | \"right\";\n\nexport type SplitGap = \"sm\" | \"md\" | \"lg\" | \"none\";\n\nconst gapClass: Record<Exclude<SplitGap, \"none\">, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { cn } from \"@ecoma-io/loom-core\";\n\nwithDefaults(\n defineProps<{\n /** The side the panel sits on. Controls stacking order when collapsed: \"left\" stacks the panel above, \"right\" stacks it below. */\n side?: SplitSide;\n /** Minimum width for the side panel (e.g. \"16rem\"). The content area takes the rest. */\n minSideWidth?: string;\n /** Gap between the two panels. Tightens one notch below `sm` (except \"none\"). */\n gap?: SplitGap;\n }>(),\n { side: \"left\", minSideWidth: \"16rem\", gap: \"md\" },\n);\n</script>\n\n<template>\n <!--\n `flex-wrap` is the intrinsic collapse mechanism: when the combined\n `min-width` of both panels exceeds the container, the second panel wraps\n to a new line. Where that happens is decided by the panels' own minimum\n widths there is no breakpoint prop to set it with.\n -->\n <div\n :class=\"cn('flex flex-row', gap !== 'none' ? gapClass[gap] : undefined)\"\n :style=\"{\n flexWrap: 'wrap',\n }\"\n >\n <!--\n Document order follows `side`, so the wrapped stack never contradicts\n the side-by-side row and screen-reader order matches the visual one:\n content first when `side=\"right\"`, side first when `side=\"left\"`.\n flex-row (never reverse) plus this ordering is what makes the wrap\n produce content-above-panel for `side=\"right\"`.\n -->\n <template v-if=\"side === 'right'\">\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n </template>\n <template v-else>\n <!-- Side panel: fixed minimum width, does not grow. When collapsed the\n panel takes full width (flex-basis: 100%). -->\n <div\n :style=\"{\n flexBasis: minSideWidth,\n flexGrow: 0,\n flexShrink: 0,\n minWidth: minSideWidth,\n }\"\n >\n <slot name=\"side\" />\n </div>\n <!-- Content area: fills remaining space, but demands at least 50% of\n the container before wrapping. When collapsed it also takes full\n width. -->\n <div\n :style=\"{\n flexBasis: 0,\n flexGrow: 999,\n flexShrink: 1,\n minWidth: '50%',\n }\"\n >\n <slot />\n </div>\n </template>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;AAuBA,IAAM,WAAsD;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;;GA4BE,OAAA,UAAA,GAAA,mBAmEM,OAAA;IAlEH,OAAK,eAAE,MAAA,EAAA,CAAE,CAAA,iBAAkB,QAAA,QAAG,SAAc,SAAS,QAAA,OAAO,KAAA,CAAS,CAAA;IACrE,OAAO,EAAA,UAAA,OAEP;GASe,GAAA,CAAA,QAAA,SAAI,WAApB,UAAA,GAAA,mBA0BW,UAAA,EAAA,KAAA,EAAA,GAAA,CAtBT,mBASM,OATN,YASM,CADJ,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA,GAIV,mBASM,OAAA,EARH,OAAK,eAAA;IAAyB,WAAA,QAAA;;;IAAkF,UAAA,QAAA;GAOjH,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,MAGxB,UAAA,GAAA,mBA0BW,UAAA,EAAA,KAAA,EAAA,GAAA,CAvBT,mBASM,OAAA,EARH,OAAK,eAAA;IAAyB,WAAA,QAAA;;;IAAkF,UAAA,QAAA;GAOjH,CAAA,EAAA,GAAA,CAAA,WAAoB,KAAA,QAAA,MAAA,CAAA,GAAA,CAAA,GAKtB,mBASM,OATN,YASM,CADJ,WAAQ,KAAA,QAAA,SAAA,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,CAAA"}
@@ -5,15 +5,81 @@
5
5
  * the document is the consumer's to answer, not ours.
6
6
  *
7
7
  * Single source for every axe run against this package, and there is more
8
- * than one, in different processes: the documentation site's live
9
- * accessibility panel and the end-to-end gate that scans the built site. Both
10
- * import this. The list must never be restated, or the panel a contributor
11
- * reads and the gate that blocks the merge drift into disagreeing about what
12
- * counts as a violation.
8
+ * than one, in different processes: the jsdom demo sweep, the harness gate,
9
+ * the root gate that scans the built site, and the pin tests that hold the
10
+ * partition exact. All import this. The list must never be restated, or the
11
+ * tier a contributor reads and the gate that blocks the merge drift into
12
+ * disagreeing about what counts as a violation.
13
13
  *
14
14
  * Exported from the narrow `@ecoma-io/loom/a11y` entry so a tool that only
15
15
  * needs this array — a Playwright run, a CI script — can read it without
16
16
  * pulling in a single Vue component.
17
+ *
18
+ * The array is partitioned into BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, and
19
+ * TAGGED_BUT_DISABLED_RULES. The split line between the first two is whether a rule's
20
+ * checks read layout geometry, hit-testing, pseudo-element or computed-color resolution,
21
+ * cascade-dependent font metrics, canvas, or media state — none of which the jsdom demo
22
+ * tier provides. TAGGED_BUT_DISABLED holds the WCAG-tagged rules that axe-core 4.12.1
23
+ * ships with enabled:false; a tag-type runOnly (the old gate: withTags([...WCAG_TAGS]))
24
+ * excludes them, so they were never part of the tag-selected rule set. A rule-type
25
+ * runOnly (the gates that consume these lists: withRules([...list])) RUNS any named
26
+ * rule regardless of enabled status.
27
+ *
28
+ * Loom's bar is that a rule mapping to a Level A or AA success criterion stays out of
29
+ * the runtime tiers only when it is SUPERSEDED (another rule in the tiers already
30
+ * judges the same criterion) or OUT-OF-REACH (the criterion needs something this
31
+ * repository cannot supply) — "axe ships it disabled" is not a reason. The partition
32
+ * below is the result of that review, 2026-08-26: of the 7 disabled rules, 5 were
33
+ * adopted (aria-roledescription browserless; label-content-name-mismatch, p-as-heading,
34
+ * table-fake-caption and td-has-header browser-required — the findings on loom's own
35
+ * markup were fixed in the same change) and 2 remain out, each with its criterion and
36
+ * its reason written below.
37
+ *
38
+ * The runtime tiers hold 68 of the 70 WCAG-tagged rules: BROWSERLESS_RULES (51) ∪
39
+ * BROWSER_REQUIRED_RULES (17). The union of all three sets equals the full 70, which
40
+ * is pinned by packages/core/tests/a11y-scope.test.ts.
17
41
  */
18
42
  export declare const WCAG_TAGS: readonly ["wcag2a", "wcag2aa", "wcag21a", "wcag21aa", "wcag22aa"];
43
+ /**
44
+ * Rules that can be judged in jsdom — semantic checks that read only the DOM,
45
+ * attributes, and cascade (no layout geometry, hit-testing, pseudo-elements,
46
+ * computed colors, canvas, or media state).
47
+ *
48
+ * These 51 rules are verified to produce identical verdicts in jsdom 30 and
49
+ * Chromium on violation fixtures, and to agree on all 94 demos. Each entry
50
+ * was classified by scanning its check helpers for browser-API dependencies;
51
+ * the partition is pinned by packages/core/tests/a11y-scope.test.ts.
52
+ */
53
+ export declare const BROWSERLESS_RULES: readonly ["area-alt", "aria-allowed-attr", "aria-braille-equivalent", "aria-command-name", "aria-conditional-attr", "aria-deprecated-role", "aria-hidden-body", "aria-input-field-name", "aria-meter-name", "aria-progressbar-name", "aria-prohibited-attr", "aria-required-attr", "aria-required-children", "aria-required-parent", "aria-roledescription", "aria-roles", "aria-tab-name", "aria-toggle-field-name", "aria-tooltip-name", "aria-valid-attr", "aria-valid-attr-value", "autocomplete-valid", "blink", "button-name", "definition-list", "dlitem", "document-title", "duplicate-id-aria", "form-field-multiple-labels", "frame-title", "frame-title-unique", "html-has-lang", "html-lang-valid", "html-xml-lang-mismatch", "image-alt", "input-button-name", "input-image-alt", "label", "link-name", "list", "listitem", "meta-refresh", "meta-viewport", "nested-interactive", "role-img-alt", "select-name", "server-side-image-map", "summary-name", "svg-img-alt", "valid-lang", "video-caption"];
54
+ /**
55
+ * Rules that require a rendering engine — their checks (or, for the table
56
+ * rules, their `matches` predicate) read layout geometry, hit-test results,
57
+ * pseudo-element styles, computed color pipelines, cascade-dependent font
58
+ * metrics, canvas, or media state (src, currentSrc, plays), which jsdom does
59
+ * not provide — or which the jsdom demo tier cannot judge because it mounts
60
+ * demos with no stylesheet loaded.
61
+ *
62
+ * These 17 rules are what the browser gates run. The split is:
63
+ * - 11 rendering-dependent (geometry, hit-testing, computed colors, canvas, media, iframe content)
64
+ * - 2 conservative-partial (table rules whose `matches` predicate uses border
65
+ * geometry; kept in browser until Table semantic markup is pinned)
66
+ * - 4 adopted 2026-08-26 from TAGGED_BUT_DISABLED (see their own comments)
67
+ */
68
+ export declare const BROWSER_REQUIRED_RULES: readonly ["aria-hidden-focus", "avoid-inline-spacing", "bypass", "color-contrast", "frame-focusable-content", "link-in-text-block", "marquee", "no-autoplay-audio", "object-alt", "scrollable-region-focusable", "target-size", "td-headers-attr", "th-has-data-cells", "label-content-name-mismatch", "p-as-heading", "table-fake-caption", "td-has-header"];
69
+ /**
70
+ * WCAG-tagged rules that axe-core 4.12.1 ships with enabled: false and that
71
+ * stay OUT of the runtime tiers — each with its success criterion and the
72
+ * OUT-OF-REACH reason, per the review of 2026-08-26. A disabled rule may only
73
+ * sit here if the criterion needs something this repository cannot supply;
74
+ * "axe ships it disabled" is not a reason, and neither is a finding on loom's
75
+ * own markup (that gets fixed and the rule adopted — the other five disabled
76
+ * rules went exactly that way).
77
+ *
78
+ * Naming one of these in a rule-type runOnly would run it anyway (enabled
79
+ * status does not gate withRules), which is why they live in their own list
80
+ * rather than being deleted: the union pin in packages/core/tests/
81
+ * a11y-scope.test.ts keeps the 70-rule partition exact, and a future
82
+ * component that reaches one of these criteria re-adjudicates here.
83
+ */
84
+ export declare const TAGGED_BUT_DISABLED_RULES: readonly ["audio-caption", "css-orientation-lock"];
19
85
  //# sourceMappingURL=a11y-scope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-scope.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/a11y-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS,mEAAoE,CAAC"}
1
+ {"version":3,"file":"a11y-scope.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/a11y-scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,SAAS,mEAAoE,CAAC;AAE3F;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,u9BA+DpB,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,+VAoCzB,CAAC;AAEX;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,oDAsB5B,CAAC"}
@@ -6,15 +6,39 @@
6
6
  * the document is the consumer's to answer, not ours.
7
7
  *
8
8
  * Single source for every axe run against this package, and there is more
9
- * than one, in different processes: the documentation site's live
10
- * accessibility panel and the end-to-end gate that scans the built site. Both
11
- * import this. The list must never be restated, or the panel a contributor
12
- * reads and the gate that blocks the merge drift into disagreeing about what
13
- * counts as a violation.
9
+ * than one, in different processes: the jsdom demo sweep, the harness gate,
10
+ * the root gate that scans the built site, and the pin tests that hold the
11
+ * partition exact. All import this. The list must never be restated, or the
12
+ * tier a contributor reads and the gate that blocks the merge drift into
13
+ * disagreeing about what counts as a violation.
14
14
  *
15
15
  * Exported from the narrow `@ecoma-io/loom/a11y` entry so a tool that only
16
16
  * needs this array — a Playwright run, a CI script — can read it without
17
17
  * pulling in a single Vue component.
18
+ *
19
+ * The array is partitioned into BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, and
20
+ * TAGGED_BUT_DISABLED_RULES. The split line between the first two is whether a rule's
21
+ * checks read layout geometry, hit-testing, pseudo-element or computed-color resolution,
22
+ * cascade-dependent font metrics, canvas, or media state — none of which the jsdom demo
23
+ * tier provides. TAGGED_BUT_DISABLED holds the WCAG-tagged rules that axe-core 4.12.1
24
+ * ships with enabled:false; a tag-type runOnly (the old gate: withTags([...WCAG_TAGS]))
25
+ * excludes them, so they were never part of the tag-selected rule set. A rule-type
26
+ * runOnly (the gates that consume these lists: withRules([...list])) RUNS any named
27
+ * rule regardless of enabled status.
28
+ *
29
+ * Loom's bar is that a rule mapping to a Level A or AA success criterion stays out of
30
+ * the runtime tiers only when it is SUPERSEDED (another rule in the tiers already
31
+ * judges the same criterion) or OUT-OF-REACH (the criterion needs something this
32
+ * repository cannot supply) — "axe ships it disabled" is not a reason. The partition
33
+ * below is the result of that review, 2026-08-26: of the 7 disabled rules, 5 were
34
+ * adopted (aria-roledescription browserless; label-content-name-mismatch, p-as-heading,
35
+ * table-fake-caption and td-has-header browser-required — the findings on loom's own
36
+ * markup were fixed in the same change) and 2 remain out, each with its criterion and
37
+ * its reason written below.
38
+ *
39
+ * The runtime tiers hold 68 of the 70 WCAG-tagged rules: BROWSERLESS_RULES (51) ∪
40
+ * BROWSER_REQUIRED_RULES (17). The union of all three sets equals the full 70, which
41
+ * is pinned by packages/core/tests/a11y-scope.test.ts.
18
42
  */
19
43
  var WCAG_TAGS = [
20
44
  "wcag2a",
@@ -23,7 +47,103 @@ var WCAG_TAGS = [
23
47
  "wcag21aa",
24
48
  "wcag22aa"
25
49
  ];
50
+ /**
51
+ * Rules that can be judged in jsdom — semantic checks that read only the DOM,
52
+ * attributes, and cascade (no layout geometry, hit-testing, pseudo-elements,
53
+ * computed colors, canvas, or media state).
54
+ *
55
+ * These 51 rules are verified to produce identical verdicts in jsdom 30 and
56
+ * Chromium on violation fixtures, and to agree on all 94 demos. Each entry
57
+ * was classified by scanning its check helpers for browser-API dependencies;
58
+ * the partition is pinned by packages/core/tests/a11y-scope.test.ts.
59
+ */
60
+ var BROWSERLESS_RULES = [
61
+ "area-alt",
62
+ "aria-allowed-attr",
63
+ "aria-braille-equivalent",
64
+ "aria-command-name",
65
+ "aria-conditional-attr",
66
+ "aria-deprecated-role",
67
+ "aria-hidden-body",
68
+ "aria-input-field-name",
69
+ "aria-meter-name",
70
+ "aria-progressbar-name",
71
+ "aria-prohibited-attr",
72
+ "aria-required-attr",
73
+ "aria-required-children",
74
+ "aria-required-parent",
75
+ "aria-roledescription",
76
+ "aria-roles",
77
+ "aria-tab-name",
78
+ "aria-toggle-field-name",
79
+ "aria-tooltip-name",
80
+ "aria-valid-attr",
81
+ "aria-valid-attr-value",
82
+ "autocomplete-valid",
83
+ "blink",
84
+ "button-name",
85
+ "definition-list",
86
+ "dlitem",
87
+ "document-title",
88
+ "duplicate-id-aria",
89
+ "form-field-multiple-labels",
90
+ "frame-title",
91
+ "frame-title-unique",
92
+ "html-has-lang",
93
+ "html-lang-valid",
94
+ "html-xml-lang-mismatch",
95
+ "image-alt",
96
+ "input-button-name",
97
+ "input-image-alt",
98
+ "label",
99
+ "link-name",
100
+ "list",
101
+ "listitem",
102
+ "meta-refresh",
103
+ "meta-viewport",
104
+ "nested-interactive",
105
+ "role-img-alt",
106
+ "select-name",
107
+ "server-side-image-map",
108
+ "summary-name",
109
+ "svg-img-alt",
110
+ "valid-lang",
111
+ "video-caption"
112
+ ];
113
+ /**
114
+ * Rules that require a rendering engine — their checks (or, for the table
115
+ * rules, their `matches` predicate) read layout geometry, hit-test results,
116
+ * pseudo-element styles, computed color pipelines, cascade-dependent font
117
+ * metrics, canvas, or media state (src, currentSrc, plays), which jsdom does
118
+ * not provide — or which the jsdom demo tier cannot judge because it mounts
119
+ * demos with no stylesheet loaded.
120
+ *
121
+ * These 17 rules are what the browser gates run. The split is:
122
+ * - 11 rendering-dependent (geometry, hit-testing, computed colors, canvas, media, iframe content)
123
+ * - 2 conservative-partial (table rules whose `matches` predicate uses border
124
+ * geometry; kept in browser until Table semantic markup is pinned)
125
+ * - 4 adopted 2026-08-26 from TAGGED_BUT_DISABLED (see their own comments)
126
+ */
127
+ var BROWSER_REQUIRED_RULES = [
128
+ "aria-hidden-focus",
129
+ "avoid-inline-spacing",
130
+ "bypass",
131
+ "color-contrast",
132
+ "frame-focusable-content",
133
+ "link-in-text-block",
134
+ "marquee",
135
+ "no-autoplay-audio",
136
+ "object-alt",
137
+ "scrollable-region-focusable",
138
+ "target-size",
139
+ "td-headers-attr",
140
+ "th-has-data-cells",
141
+ "label-content-name-mismatch",
142
+ "p-as-heading",
143
+ "table-fake-caption",
144
+ "td-has-header"
145
+ ];
26
146
  //#endregion
27
- export { WCAG_TAGS };
147
+ export { BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, WCAG_TAGS };
28
148
 
29
149
  //# sourceMappingURL=a11y-scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-scope.js","names":[],"sources":["../../../../packages/core/src/a11y-scope.ts"],"sourcesContent":["/**\n * The WCAG scope Loom holds itself to: the assistive-technology and keyboard\n * rules, not axe's SEO and document-structure best-practice set. A component\n * library cannot know what document it will be rendered into, so a rule about\n * the document is the consumer's to answer, not ours.\n *\n * Single source for every axe run against this package, and there is more\n * than one, in different processes: the documentation site's live\n * accessibility panel and the end-to-end gate that scans the built site. Both\n * import this. The list must never be restated, or the panel a contributor\n * reads and the gate that blocks the merge drift into disagreeing about what\n * counts as a violation.\n *\n * Exported from the narrow `@ecoma-io/loom/a11y` entry so a tool that only\n * needs this array — a Playwright run, a CI script — can read it without\n * pulling in a single Vue component.\n */\nexport const WCAG_TAGS = [\"wcag2a\", \"wcag2aa\", \"wcag21a\", \"wcag21aa\", \"wcag22aa\"] as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,IAAa,YAAY;CAAC;CAAU;CAAW;CAAW;CAAY;AAAU"}
1
+ {"version":3,"file":"a11y-scope.js","names":[],"sources":["../../../../packages/core/src/a11y-scope.ts"],"sourcesContent":["/**\n * The WCAG scope Loom holds itself to: the assistive-technology and keyboard\n * rules, not axe's SEO and document-structure best-practice set. A component\n * library cannot know what document it will be rendered into, so a rule about\n * the document is the consumer's to answer, not ours.\n *\n * Single source for every axe run against this package, and there is more\n * than one, in different processes: the jsdom demo sweep, the harness gate,\n * the root gate that scans the built site, and the pin tests that hold the\n * partition exact. All import this. The list must never be restated, or the\n * tier a contributor reads and the gate that blocks the merge drift into\n * disagreeing about what counts as a violation.\n *\n * Exported from the narrow `@ecoma-io/loom/a11y` entry so a tool that only\n * needs this array — a Playwright run, a CI script — can read it without\n * pulling in a single Vue component.\n *\n * The array is partitioned into BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, and\n * TAGGED_BUT_DISABLED_RULES. The split line between the first two is whether a rule's\n * checks read layout geometry, hit-testing, pseudo-element or computed-color resolution,\n * cascade-dependent font metrics, canvas, or media state — none of which the jsdom demo\n * tier provides. TAGGED_BUT_DISABLED holds the WCAG-tagged rules that axe-core 4.12.1\n * ships with enabled:false; a tag-type runOnly (the old gate: withTags([...WCAG_TAGS]))\n * excludes them, so they were never part of the tag-selected rule set. A rule-type\n * runOnly (the gates that consume these lists: withRules([...list])) RUNS any named\n * rule regardless of enabled status.\n *\n * Loom's bar is that a rule mapping to a Level A or AA success criterion stays out of\n * the runtime tiers only when it is SUPERSEDED (another rule in the tiers already\n * judges the same criterion) or OUT-OF-REACH (the criterion needs something this\n * repository cannot supply) — \"axe ships it disabled\" is not a reason. The partition\n * below is the result of that review, 2026-08-26: of the 7 disabled rules, 5 were\n * adopted (aria-roledescription browserless; label-content-name-mismatch, p-as-heading,\n * table-fake-caption and td-has-header browser-required — the findings on loom's own\n * markup were fixed in the same change) and 2 remain out, each with its criterion and\n * its reason written below.\n *\n * The runtime tiers hold 68 of the 70 WCAG-tagged rules: BROWSERLESS_RULES (51) ∪\n * BROWSER_REQUIRED_RULES (17). The union of all three sets equals the full 70, which\n * is pinned by packages/core/tests/a11y-scope.test.ts.\n */\nexport const WCAG_TAGS = [\"wcag2a\", \"wcag2aa\", \"wcag21a\", \"wcag21aa\", \"wcag22aa\"] as const;\n\n/**\n * Rules that can be judged in jsdom — semantic checks that read only the DOM,\n * attributes, and cascade (no layout geometry, hit-testing, pseudo-elements,\n * computed colors, canvas, or media state).\n *\n * These 51 rules are verified to produce identical verdicts in jsdom 30 and\n * Chromium on violation fixtures, and to agree on all 94 demos. Each entry\n * was classified by scanning its check helpers for browser-API dependencies;\n * the partition is pinned by packages/core/tests/a11y-scope.test.ts.\n */\nexport const BROWSERLESS_RULES = [\n \"area-alt\",\n \"aria-allowed-attr\",\n \"aria-braille-equivalent\",\n \"aria-command-name\",\n \"aria-conditional-attr\",\n \"aria-deprecated-role\",\n \"aria-hidden-body\",\n \"aria-input-field-name\",\n \"aria-meter-name\",\n \"aria-progressbar-name\",\n \"aria-prohibited-attr\",\n \"aria-required-attr\",\n \"aria-required-children\",\n \"aria-required-parent\",\n // Adopted 2026-08-26 from TAGGED_BUT_DISABLED. Deprecated by axe-core\n // 4.7.0 with NO successor — the axe-core change that deprecated it states\n // there is no other rule testing aria-roledescription usage — so WCAG 4.1.2\n // (Level A) had nothing judging it.\n // The check reads only the element's role (axe commons getRole), no\n // browser API: identical verdicts measured jsdom vs Chromium on five\n // fixtures including two violations (aria-roledescription on a roleless\n // div, and on role=\"presentation\"), and clean on all 94 demos in both\n // engines. Loom ships this attribute through Reka (NumberField's\n // spinbutton, ColorPicker's slider surfaces) — all on roled elements,\n // which the rule passes.\n \"aria-roledescription\",\n \"aria-roles\",\n \"aria-tab-name\",\n \"aria-toggle-field-name\",\n \"aria-tooltip-name\",\n \"aria-valid-attr\",\n \"aria-valid-attr-value\",\n \"autocomplete-valid\",\n \"blink\",\n \"button-name\",\n \"definition-list\",\n \"dlitem\",\n \"document-title\",\n \"duplicate-id-aria\",\n \"form-field-multiple-labels\",\n \"frame-title\",\n \"frame-title-unique\",\n \"html-has-lang\",\n \"html-lang-valid\",\n \"html-xml-lang-mismatch\",\n \"image-alt\",\n \"input-button-name\",\n \"input-image-alt\",\n \"label\",\n \"link-name\",\n \"list\",\n \"listitem\",\n \"meta-refresh\",\n \"meta-viewport\",\n \"nested-interactive\",\n \"role-img-alt\",\n \"select-name\",\n \"server-side-image-map\",\n \"summary-name\",\n \"svg-img-alt\",\n \"valid-lang\",\n \"video-caption\",\n] as const;\n\n/**\n * Rules that require a rendering engine — their checks (or, for the table\n * rules, their `matches` predicate) read layout geometry, hit-test results,\n * pseudo-element styles, computed color pipelines, cascade-dependent font\n * metrics, canvas, or media state (src, currentSrc, plays), which jsdom does\n * not provide — or which the jsdom demo tier cannot judge because it mounts\n * demos with no stylesheet loaded.\n *\n * These 17 rules are what the browser gates run. The split is:\n * - 11 rendering-dependent (geometry, hit-testing, computed colors, canvas, media, iframe content)\n * - 2 conservative-partial (table rules whose `matches` predicate uses border\n * geometry; kept in browser until Table semantic markup is pinned)\n * - 4 adopted 2026-08-26 from TAGGED_BUT_DISABLED (see their own comments)\n */\nexport const BROWSER_REQUIRED_RULES = [\n // Rendering-dependent (11): each checks geometry/hit-test/computed styles/canvas/media/iframe\n \"aria-hidden-focus\", // isModalOpen → elementsFromPoint, cantTell in jsdom\n \"avoid-inline-spacing\", // letter-spacing unresolved + Range.getClientRects gate → false-pass\n \"bypass\", // same modal-open throw; also pageLevel (page-scoped, wrong in component harness)\n \"color-contrast\", // computed color pipeline — jsdom cantTell on every node\n \"frame-focusable-content\", // iframe content inspection — requires browser to load frame\n \"link-in-text-block\", // innerText + color + rects\n \"marquee\", // jsdom default overflow:hidden + zero rect → false-pass\n \"no-autoplay-audio\", // currentSrc empty → never runs\n \"object-alt\", // matches throws on getClientRects\n \"scrollable-region-focusable\", // content-vs-container rects zero → never matches, silent false-pass\n \"target-size\", // zero rects read compliant — silent false-pass on real violations\n // Conservative-partial (2): table rules using border geometry; jsdom skips border-only tables\n \"td-headers-attr\", // border heuristic (offsetWidth !== clientHeight)\n \"th-has-data-cells\", // same border heuristic\n // Adopted 2026-08-26 (4), each with the measured reason jsdom cannot judge it:\n \"label-content-name-mismatch\", // WCAG 2.5.3 (A). Measured: 12 violations on\n // the stepper demo in Chromium, incomplete in jsdom — the visible-text half\n // of the check reads on-screen geometry (axe's hiddenMethods: opacity, clip,\n // coords) and icon-ligature detection needs a 2d canvas context, which jsdom\n // returns null without the `canvas` package. Its stepper/app-header findings\n // were fixed in the same change as this adoption.\n \"p-as-heading\", // WCAG 1.3.1 (A). The check reads computed font-weight/-size/\n // font-style; the jsdom demo tier mounts demos with no stylesheet, so\n // class-styled emphasis reads as default weight there — the card/empty-state\n // findings existed only in Chromium. Theme-invariant (font metrics do not\n // depend on data-theme), so the dark pass gains nothing from re-running it.\n \"table-fake-caption\", // WCAG 1.3.1 (A). The check itself is DOM-only (toGrid),\n // but data-table-matches → isDataTable classifies border-only tables through\n // offsetWidth/clientWidth geometry. Measured: a border-only table whose\n // first row is one colspanning cell violates in Chromium and never matches\n // in jsdom — same conservative-partial profile as td-headers-attr above.\n \"td-has-header\", // WCAG 1.3.1 (A). Same isDataTable dependency. Measured:\n // a 3x3 border-only table violates in Chromium and never matches in jsdom —\n // a silent false-pass if this were browserless.\n] as const;\n\n/**\n * WCAG-tagged rules that axe-core 4.12.1 ships with enabled: false and that\n * stay OUT of the runtime tiers — each with its success criterion and the\n * OUT-OF-REACH reason, per the review of 2026-08-26. A disabled rule may only\n * sit here if the criterion needs something this repository cannot supply;\n * \"axe ships it disabled\" is not a reason, and neither is a finding on loom's\n * own markup (that gets fixed and the rule adopted — the other five disabled\n * rules went exactly that way).\n *\n * Naming one of these in a rule-type runOnly would run it anyway (enabled\n * status does not gate withRules), which is why they live in their own list\n * rather than being deleted: the union pin in packages/core/tests/\n * a11y-scope.test.ts keeps the 70-rule partition exact, and a future\n * component that reaches one of these criteria re-adjudicates here.\n */\nexport const TAGGED_BUT_DISABLED_RULES = [\n // WCAG 1.2.1 (Audio-only and Video-only, Level A). OUT-OF-REACH: the\n // criterion needs real audio media — loom ships no <audio> element in any\n // component, demo or docs page (zero grep hits in packages/ and docs/),\n // and a component library supplies structure, not media. Even if one\n // appeared, this rule could never redden a gate: its caption check\n // (axe-core 4.12.1 source) returns false when a captions track exists and\n // void 0 otherwise — pass or incomplete, never a violation. axe-core\n // deprecated it in 3.1.0 because WebVTT caption tracks on <audio> do not\n // function in any browser (\"Audio captions do not work\", per the\n // deprecation change itself); the text alternative 1.2.1 actually asks for\n // is host content, not markup.\n \"audio-caption\",\n // WCAG 1.3.4 (Orientation, Level AA). OUT-OF-REACH: the criterion needs an\n // orientation-locked app shell — CSS orientation media queries with fixed\n // extents, or the Screen Orientation API — and loom ships neither in any\n // component, demo, docs page or the harness's own stylesheet (zero grep\n // hits; theme.css is orientation-agnostic by design, tokens not layout).\n // Locking orientation is the host application's decision; measured 2026-08-26\n // the rule passes every one of the 94 demos in Chromium, where it reads the\n // preloaded CSSOM jsdom does not provide.\n \"css-orientation-lock\",\n] as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,IAAa,YAAY;CAAC;CAAU;CAAW;CAAW;CAAY;AAAU;;;;;;;;;;;AAYhF,IAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAYA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;;;;;;;;;;;;;AAgBA,IAAa,yBAAyB;CAEpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CAEA;CAMA;CAKA;CAKA;AAGF"}
@@ -2,7 +2,7 @@ export { cn } from "./cn";
2
2
  export { optional } from "./props";
3
3
  export { useSplitAttrs } from "./attrs";
4
4
  export { LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, listStaggerDelay, smoothScrollBehavior, } from "./motion";
5
- export { WCAG_TAGS } from "./a11y-scope";
5
+ export { WCAG_TAGS, BROWSERLESS_RULES, BROWSER_REQUIRED_RULES } from "./a11y-scope";
6
6
  export { useTheme, themeScript } from "./theme";
7
7
  export type { ThemePreference, ResolvedTheme } from "./theme";
8
8
  export { applyLoomIconDefaults } from "./icon-defaults";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -2,7 +2,7 @@ import { cn } from "./cn.js";
2
2
  import { optional } from "./props.js";
3
3
  import { useSplitAttrs } from "./attrs.js";
4
4
  import { listStaggerDelay, smoothScrollBehavior } from "./motion.js";
5
- import { WCAG_TAGS } from "./a11y-scope.js";
5
+ import { BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, WCAG_TAGS } from "./a11y-scope.js";
6
6
  import { themeScript, useTheme } from "./theme.js";
7
7
  import { applyLoomIconDefaults } from "./icon-defaults.js";
8
- export { WCAG_TAGS, applyLoomIconDefaults, cn, listStaggerDelay, optional, smoothScrollBehavior, themeScript, useSplitAttrs, useTheme };
8
+ export { BROWSERLESS_RULES, BROWSER_REQUIRED_RULES, WCAG_TAGS, applyLoomIconDefaults, cn, listStaggerDelay, optional, smoothScrollBehavior, themeScript, useSplitAttrs, useTheme };