ropav 0.3.1 → 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 (277) hide show
  1. package/dist/components/autocomplete/autocomplete-root.js +3 -1
  2. package/dist/components/autocomplete/index.d.ts +3 -0
  3. package/dist/components/avatar/avatar-image.js +13 -2
  4. package/dist/components/avatar/avatar.types.d.ts +7 -1
  5. package/dist/components/breadcrumbs/breadcrumbs-item.js +1 -0
  6. package/dist/components/breadcrumbs/index.d.ts +1 -0
  7. package/dist/components/calendar/calendar-header.js +1 -1
  8. package/dist/components/calendar/index.d.ts +5 -3
  9. package/dist/components/calendar-year-picker/index.d.ts +4 -2
  10. package/dist/components/checkbox/checkbox-content.js +1 -1
  11. package/dist/components/color-field/index.d.ts +3 -2
  12. package/dist/components/color-input-group/color-input-group-root.js +2 -0
  13. package/dist/components/color-input-group/color-input-group.types.d.ts +2 -0
  14. package/dist/components/color-input-group/index.d.ts +2 -0
  15. package/dist/components/combo-box/combo-box-root.js +9 -2
  16. package/dist/components/combo-box/combo-box.types.d.ts +3 -0
  17. package/dist/components/combo-box/index.d.ts +3 -0
  18. package/dist/components/date-field/index.d.ts +1 -0
  19. package/dist/components/date-input-group/date-input-group-root.js +2 -0
  20. package/dist/components/date-input-group/date-input-group-segment.js +1 -1
  21. package/dist/components/date-input-group/date-input-group.types.d.ts +2 -0
  22. package/dist/{composables → components/date-input-group}/use-date-segment.d.ts +2 -2
  23. package/dist/{composables → components/date-input-group}/use-date-segment.js +9 -9
  24. package/dist/components/date-picker/index.d.ts +3 -2
  25. package/dist/components/date-picker/index.js +2 -2
  26. package/dist/components/date-range-picker/date-range-picker-root.js +1 -1
  27. package/dist/components/date-range-picker/index.d.ts +18 -16
  28. package/dist/components/date-range-picker/index.js +2 -2
  29. package/dist/{composables → components/date-range-picker}/use-date-range-picker.d.ts +7 -7
  30. package/dist/{composables → components/date-range-picker}/use-date-range-picker.js +10 -10
  31. package/dist/components/drawer/drawer-dialog.js +1 -1
  32. package/dist/{composables → components/drawer}/use-drawer-drag.d.ts +1 -1
  33. package/dist/{composables → components/drawer}/use-drawer-drag.js +1 -1
  34. package/dist/components/dropdown/dropdown-menu.js +3 -1
  35. package/dist/components/dropdown/dropdown-submenu-trigger.js +1 -1
  36. package/dist/components/dropdown/dropdown.types.d.ts +3 -3
  37. package/dist/components/dropdown/index.d.ts +4 -2
  38. package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.js +1 -1
  39. package/dist/components/icons/icon-overlay-arrow.js +1 -1
  40. package/dist/components/index.d.ts +5 -0
  41. package/dist/components/input/index.d.ts +12 -4
  42. package/dist/components/input/input-root.d.ts +5 -2
  43. package/dist/components/input/input-root.js +46 -5
  44. package/dist/components/input/input.types.d.ts +11 -0
  45. package/dist/components/input-group/index.d.ts +2 -0
  46. package/dist/components/input-group/input-group-root.js +3 -0
  47. package/dist/components/input-group/input-group.types.d.ts +5 -0
  48. package/dist/components/input-otp/index.d.ts +6 -4
  49. package/dist/components/link/index.d.ts +2 -0
  50. package/dist/components/link/link-root.js +22 -5
  51. package/dist/components/link/link.types.d.ts +14 -3
  52. package/dist/{composables → components/list-box}/drag-collection.d.ts +2 -2
  53. package/dist/{composables → components/list-box}/drag-collection.js +1 -1
  54. package/dist/components/list-box/index.d.ts +4 -0
  55. package/dist/components/list-box/list-box-root.js +60 -35
  56. package/dist/components/list-box/list-box.types.d.ts +2 -0
  57. package/dist/components/menu/index.d.ts +4 -0
  58. package/dist/components/menu/menu-root.js +9 -2
  59. package/dist/components/menu/menu.types.d.ts +5 -0
  60. package/dist/components/number-field/index.d.ts +3 -0
  61. package/dist/components/number-field/number-field-root.js +2 -0
  62. package/dist/components/number-field/number-field.types.d.ts +2 -0
  63. package/dist/components/overlay/overlay-arrow.js +64 -11
  64. package/dist/components/pagination/index.d.ts +2 -0
  65. package/dist/components/pagination/pagination-root.js +8 -3
  66. package/dist/components/pagination/pagination.types.d.ts +8 -0
  67. package/dist/components/popover/popover-trigger.js +14 -7
  68. package/dist/components/radio/radio-content.js +1 -1
  69. package/dist/components/range-calendar/index.d.ts +18 -15
  70. package/dist/components/range-calendar/range-calendar-header.js +1 -1
  71. package/dist/components/router-provider/index.d.ts +5 -0
  72. package/dist/components/router-provider/index.js +3 -0
  73. package/dist/components/router-provider/router-provider.context.d.ts +40 -0
  74. package/dist/components/router-provider/router-provider.context.js +16 -0
  75. package/dist/components/router-provider/router-provider.d.ts +21 -0
  76. package/dist/components/router-provider/router-provider.js +22 -0
  77. package/dist/components/router-provider/router-provider.types.d.ts +23 -0
  78. package/dist/components/scroll-shadow/scroll-shadow-root.js +7 -1
  79. package/dist/components/scroll-shadow/use-scroll-shadow.js +25 -1
  80. package/dist/components/search-field/index.d.ts +2 -0
  81. package/dist/components/search-field/search-field-root.js +3 -1
  82. package/dist/components/search-field/search-field.types.d.ts +2 -0
  83. package/dist/{composables → components/search-field}/use-search-field.d.ts +2 -2
  84. package/dist/{composables → components/search-field}/use-search-field.js +3 -3
  85. package/dist/components/segmented-control/index.d.ts +134 -0
  86. package/dist/components/segmented-control/index.js +15 -0
  87. package/dist/components/segmented-control/segmented-control-indicator.d.ts +19 -0
  88. package/dist/components/segmented-control/segmented-control-indicator.js +36 -0
  89. package/dist/components/segmented-control/segmented-control-item.d.ts +21 -0
  90. package/dist/components/segmented-control/segmented-control-item.js +96 -0
  91. package/dist/components/segmented-control/segmented-control-root.d.ts +25 -0
  92. package/dist/components/segmented-control/segmented-control-root.js +112 -0
  93. package/dist/components/segmented-control/segmented-control-separator.d.ts +19 -0
  94. package/dist/components/segmented-control/segmented-control-separator.js +18 -0
  95. package/dist/components/segmented-control/segmented-control.context.d.ts +17 -0
  96. package/dist/components/segmented-control/segmented-control.context.js +12 -0
  97. package/dist/components/segmented-control/segmented-control.types.d.ts +67 -0
  98. package/dist/components/select/index.d.ts +3 -0
  99. package/dist/components/select/select-hidden-select.js +1 -1
  100. package/dist/components/select/select-root.js +2 -0
  101. package/dist/components/select/select.types.d.ts +2 -0
  102. package/dist/components/separator/separator-root.js +11 -5
  103. package/dist/components/separator/separator.context.d.ts +7 -0
  104. package/dist/components/sidebar/index.d.ts +544 -0
  105. package/dist/components/sidebar/index.js +47 -0
  106. package/dist/components/sidebar/sidebar-collapsible-trigger.d.ts +21 -0
  107. package/dist/components/sidebar/sidebar-collapsible-trigger.js +70 -0
  108. package/dist/components/sidebar/sidebar-collapsible.d.ts +24 -0
  109. package/dist/components/sidebar/sidebar-collapsible.js +78 -0
  110. package/dist/components/sidebar/sidebar-content.d.ts +21 -0
  111. package/dist/components/sidebar/sidebar-content.js +37 -0
  112. package/dist/components/sidebar/sidebar-footer.d.ts +21 -0
  113. package/dist/components/sidebar/sidebar-footer.js +24 -0
  114. package/dist/components/sidebar/sidebar-group-label.d.ts +21 -0
  115. package/dist/components/sidebar/sidebar-group-label.js +32 -0
  116. package/dist/components/sidebar/sidebar-group.d.ts +21 -0
  117. package/dist/components/sidebar/sidebar-group.js +48 -0
  118. package/dist/components/sidebar/sidebar-header.d.ts +21 -0
  119. package/dist/components/sidebar/sidebar-header.js +24 -0
  120. package/dist/components/sidebar/sidebar-inset.d.ts +21 -0
  121. package/dist/components/sidebar/sidebar-inset.js +24 -0
  122. package/dist/components/sidebar/sidebar-item-icon.d.ts +21 -0
  123. package/dist/components/sidebar/sidebar-item-icon.js +20 -0
  124. package/dist/components/sidebar/sidebar-item-indicator.d.ts +21 -0
  125. package/dist/components/sidebar/sidebar-item-indicator.js +48 -0
  126. package/dist/components/sidebar/sidebar-item-label.d.ts +21 -0
  127. package/dist/components/sidebar/sidebar-item-label.js +28 -0
  128. package/dist/components/sidebar/sidebar-item-tooltip.d.ts +21 -0
  129. package/dist/components/sidebar/sidebar-item-tooltip.js +38 -0
  130. package/dist/components/sidebar/sidebar-item-trailing.d.ts +21 -0
  131. package/dist/components/sidebar/sidebar-item-trailing.js +28 -0
  132. package/dist/components/sidebar/sidebar-item.d.ts +23 -0
  133. package/dist/components/sidebar/sidebar-item.js +160 -0
  134. package/dist/components/sidebar/sidebar-panel.d.ts +21 -0
  135. package/dist/components/sidebar/sidebar-panel.js +88 -0
  136. package/dist/components/sidebar/sidebar-rail.d.ts +21 -0
  137. package/dist/components/sidebar/sidebar-rail.js +210 -0
  138. package/dist/components/sidebar/sidebar-root.d.ts +31 -0
  139. package/dist/components/sidebar/sidebar-root.js +138 -0
  140. package/dist/components/sidebar/sidebar-separator.d.ts +19 -0
  141. package/dist/components/sidebar/sidebar-separator.js +16 -0
  142. package/dist/components/sidebar/sidebar-sub-menu.d.ts +23 -0
  143. package/dist/components/sidebar/sidebar-sub-menu.js +40 -0
  144. package/dist/components/sidebar/sidebar-trigger.d.ts +21 -0
  145. package/dist/components/sidebar/sidebar-trigger.js +69 -0
  146. package/dist/components/sidebar/sidebar.context.d.ts +75 -0
  147. package/dist/components/sidebar/sidebar.context.js +30 -0
  148. package/dist/components/sidebar/sidebar.state.d.ts +73 -0
  149. package/dist/components/sidebar/sidebar.state.js +76 -0
  150. package/dist/components/sidebar/sidebar.storage.d.ts +8 -0
  151. package/dist/components/sidebar/sidebar.storage.js +45 -0
  152. package/dist/components/sidebar/sidebar.types.d.ts +259 -0
  153. package/dist/components/splitter/index.d.ts +143 -0
  154. package/dist/components/splitter/index.js +13 -0
  155. package/dist/components/splitter/splitter-handle.d.ts +21 -0
  156. package/dist/components/splitter/splitter-handle.js +209 -0
  157. package/dist/components/splitter/splitter-panel.d.ts +21 -0
  158. package/dist/components/splitter/splitter-panel.js +70 -0
  159. package/dist/components/splitter/splitter-root.d.ts +31 -0
  160. package/dist/components/splitter/splitter-root.js +152 -0
  161. package/dist/components/splitter/splitter.context.d.ts +15 -0
  162. package/dist/components/splitter/splitter.context.js +5 -0
  163. package/dist/components/splitter/splitter.state.d.ts +87 -0
  164. package/dist/components/splitter/splitter.state.js +322 -0
  165. package/dist/components/splitter/splitter.storage.d.ts +15 -0
  166. package/dist/components/splitter/splitter.storage.js +56 -0
  167. package/dist/components/splitter/splitter.types.d.ts +98 -0
  168. package/dist/components/switch/switch-content.js +1 -1
  169. package/dist/components/table/index.d.ts +10 -9
  170. package/dist/components/table/table-body.js +13 -13
  171. package/dist/components/table/table-cell.js +49 -46
  172. package/dist/components/table/table-column-resizer.js +1 -1
  173. package/dist/components/table/table-column.js +1 -1
  174. package/dist/components/table/table-content.js +37 -18
  175. package/dist/{composables → components/table}/table-drag-collection.d.ts +1 -1
  176. package/dist/{composables → components/table}/table-drag-collection.js +1 -1
  177. package/dist/components/table/table-drop-indicator.js +3 -1
  178. package/dist/components/table/table-resizable-container.d.ts +4 -5
  179. package/dist/components/table/table-row.js +45 -14
  180. package/dist/components/table/table-virtualizer-item.d.ts +2 -7
  181. package/dist/components/table/table-virtualizer-item.js +20 -9
  182. package/dist/components/table/table.context.d.ts +11 -3
  183. package/dist/components/table/table.types.d.ts +1 -1
  184. package/dist/{composables → components/table}/use-grid-keyboard.d.ts +3 -3
  185. package/dist/{composables → components/table}/use-grid-keyboard.js +57 -55
  186. package/dist/{composables → components/table}/use-grid-selection-announcement.d.ts +2 -2
  187. package/dist/{composables → components/table}/use-grid-selection-announcement.js +2 -2
  188. package/dist/{composables → components/table}/use-table-collection.d.ts +2 -2
  189. package/dist/{composables → components/table}/use-table-collection.js +4 -4
  190. package/dist/{composables → components/table}/use-table-column-layout.d.ts +13 -20
  191. package/dist/components/table/use-table-column-layout.js +115 -0
  192. package/dist/components/tabs/tabs-panel.js +5 -1
  193. package/dist/components/tabs/tabs-tab.js +1 -1
  194. package/dist/components/textarea/index.d.ts +12 -4
  195. package/dist/components/textarea/textarea-root.d.ts +5 -2
  196. package/dist/components/textarea/textarea-root.js +40 -5
  197. package/dist/components/textarea/textarea.types.d.ts +11 -0
  198. package/dist/components/textfield/index.d.ts +2 -0
  199. package/dist/components/textfield/textfield-root.js +5 -1
  200. package/dist/components/textfield/textfield.context.d.ts +2 -0
  201. package/dist/components/textfield/textfield.types.d.ts +5 -0
  202. package/dist/components/time-field/index.d.ts +1 -0
  203. package/dist/components/toast/index.d.ts +1 -0
  204. package/dist/components/toast/toast-default-content.js +1 -1
  205. package/dist/components/toggle-button-group/toggle-button-group-root.js +3 -3
  206. package/dist/components/toolbar/index.d.ts +3 -2
  207. package/dist/components/toolbar/toolbar-root.js +3 -3
  208. package/dist/components/tooltip/index.js +1 -1
  209. package/dist/components/tooltip/tooltip-root.js +1 -1
  210. package/dist/components/tooltip/tooltip-trigger.js +13 -5
  211. package/dist/components/virtualizer/index.d.ts +3 -1
  212. package/dist/components/virtualizer/index.js +2 -1
  213. package/dist/components/virtualizer/use-virtualizer-item.d.ts +23 -0
  214. package/dist/components/virtualizer/use-virtualizer-item.js +45 -0
  215. package/dist/components/virtualizer/virtualizer-item.js +7 -41
  216. package/dist/components/virtualizer/virtualizer-scrollbar-track.d.ts +20 -0
  217. package/dist/components/virtualizer/virtualizer-scrollbar-track.js +141 -0
  218. package/dist/components/virtualizer/virtualizer-scrollbar.d.ts +18 -0
  219. package/dist/components/virtualizer/virtualizer-scrollbar.js +55 -0
  220. package/dist/components/virtualizer/virtualizer.context.d.ts +17 -1
  221. package/dist/composables/drag-manager.js +1 -13
  222. package/dist/composables/index.d.ts +3 -71
  223. package/dist/composables/use-collection.d.ts +22 -3
  224. package/dist/composables/use-collection.js +67 -14
  225. package/dist/composables/use-color-area.js +2 -2
  226. package/dist/composables/use-color-field.js +1 -1
  227. package/dist/composables/use-combo-box.js +1 -1
  228. package/dist/composables/use-date-field.js +1 -1
  229. package/dist/composables/use-drag-and-drop.js +1 -1
  230. package/dist/composables/use-drag.d.ts +6 -5
  231. package/dist/composables/use-draggable-item.d.ts +2 -2
  232. package/dist/composables/use-droppable-collection.js +2 -2
  233. package/dist/composables/use-droppable-item.js +1 -1
  234. package/dist/composables/use-form-reset.d.ts +6 -2
  235. package/dist/composables/use-form-reset.js +9 -5
  236. package/dist/composables/use-list-keyboard.js +64 -62
  237. package/dist/composables/use-menu.d.ts +10 -0
  238. package/dist/composables/use-menu.js +22 -0
  239. package/dist/composables/use-number-field.js +1 -1
  240. package/dist/composables/use-select.js +2 -3
  241. package/dist/composables/use-selection-manager.js +4 -4
  242. package/dist/composables/use-single-select-list-state.d.ts +37 -0
  243. package/dist/composables/use-single-select-list-state.js +110 -0
  244. package/dist/composables/use-slider-thumb.js +2 -2
  245. package/dist/composables/use-slider.js +1 -1
  246. package/dist/composables/use-tab-list-state.d.ts +20 -29
  247. package/dist/composables/use-tab-list-state.js +20 -99
  248. package/dist/composables/use-text-field.js +1 -1
  249. package/dist/composables/use-virtualizer-scroll.d.ts +52 -2
  250. package/dist/composables/use-virtualizer-scroll.js +79 -13
  251. package/dist/composables/use-virtualizer.d.ts +24 -4
  252. package/dist/composables/use-virtualizer.js +40 -6
  253. package/dist/index.js +58 -80
  254. package/dist/utils/document-order.d.ts +14 -0
  255. package/dist/utils/document-order.js +17 -0
  256. package/dist/utils/flex-sizing.d.ts +41 -0
  257. package/dist/utils/flex-sizing.js +140 -0
  258. package/dist/utils/index.d.ts +2 -0
  259. package/dist/utils/open-link.d.ts +31 -0
  260. package/dist/utils/open-link.js +32 -0
  261. package/dist/utils/story-truncation.d.ts +20 -0
  262. package/dist/utils/story-users.d.ts +11 -0
  263. package/dist/utils/virtualizer-collection.d.ts +14 -4
  264. package/dist/utils/virtualizer-collection.js +9 -14
  265. package/dist/utils/virtualizer-layout-info.js +3 -2
  266. package/dist/utils/virtualizer-list-layout.d.ts +75 -29
  267. package/dist/utils/virtualizer-list-layout.js +182 -99
  268. package/dist/utils/virtualizer-offsets.d.ts +111 -0
  269. package/dist/utils/virtualizer-offsets.js +159 -0
  270. package/dist/utils/virtualizer-overscan.d.ts +9 -15
  271. package/dist/utils/virtualizer-overscan.js +14 -33
  272. package/dist/utils/virtualizer-table-layout.d.ts +50 -21
  273. package/dist/utils/virtualizer-table-layout.js +130 -89
  274. package/dist/version.js +1 -1
  275. package/package.json +19 -3
  276. package/dist/composables/use-table-column-layout.js +0 -214
  277. /package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.d.ts +0 -0
@@ -22,6 +22,7 @@ export declare const ListBox: (<T>(__VLS_props: NonNullable<Awaited<typeof __VLS
22
22
  disabledBehavior?: import("../../index.js").DisabledBehavior;
23
23
  disallowEmptySelection?: boolean;
24
24
  variant?: import("@ropav/styles").ListBoxVariants["variant"];
25
+ size?: import("@ropav/styles").ListBoxVariants["size"];
25
26
  dragAndDropHooks?: import("../../index.js").DragAndDropHooks;
26
27
  onAction?: ((key: import("../../index.js").CollectionKey) => any) | undefined;
27
28
  onSelectionChange?: ((keys: import("../../index.js").CollectionSelection) => any) | undefined;
@@ -148,6 +149,7 @@ export declare const ListBox: (<T>(__VLS_props: NonNullable<Awaited<typeof __VLS
148
149
  disabledBehavior?: import("../../index.js").DisabledBehavior;
149
150
  disallowEmptySelection?: boolean;
150
151
  variant?: import("@ropav/styles").ListBoxVariants["variant"];
152
+ size?: import("@ropav/styles").ListBoxVariants["size"];
151
153
  dragAndDropHooks?: import("../../index.js").DragAndDropHooks;
152
154
  onAction?: ((key: import("../../index.js").CollectionKey) => any) | undefined;
153
155
  onSelectionChange?: ((keys: import("../../index.js").CollectionSelection) => any) | undefined;
@@ -192,5 +194,7 @@ export { ListBoxDropIndicator, ListBoxLoadMoreItem, ListBoxRoot };
192
194
  export type { ListBoxDropIndicatorProps, ListBoxLoadMoreItemProps, ListBoxRootProps, ListBoxRootProps as ListBoxProps, } from "./list-box.types.js";
193
195
  export { provideListBoxStateContext, useListBoxContext, useListBoxStateContext, } from "./list-box.context.js";
194
196
  export type { ListBoxContext, ListBoxStateContext } from "./list-box.context.js";
197
+ export type { UseDraggableCollectionStateReturn } from "../../composables/use-draggable-collection-state.js";
198
+ export type { UseDroppableCollectionStateReturn } from "../../composables/use-droppable-collection-state.js";
195
199
  export { listboxVariants } from "@ropav/styles";
196
200
  export type { ListBoxVariants } from "@ropav/styles";
@@ -6,8 +6,8 @@ import { useSelectionManager } from "../../composables/use-selection-manager.js"
6
6
  import { provideListBoxContext, useListBoxStateContext } from "./list-box.context.js";
7
7
  import { provideVirtualizerStateContext, useVirtualizerConfigContext } from "../virtualizer/virtualizer.context.js";
8
8
  import virtualizer_item_default from "../virtualizer/virtualizer-item.js";
9
+ import virtualizer_scrollbar_default from "../virtualizer/virtualizer-scrollbar.js";
9
10
  import list_box_drop_indicator_default from "./list-box-drop-indicator.js";
10
- import { toDragCollection } from "../../composables/drag-collection.js";
11
11
  import { useCollectionAutoFocus } from "../../composables/use-collection-auto-focus.js";
12
12
  import { useDndPersistedKeys } from "../../composables/use-dnd-persisted-keys.js";
13
13
  import { useListKeyboard } from "../../composables/use-list-keyboard.js";
@@ -15,11 +15,13 @@ import { useTypeahead } from "../../composables/use-typeahead.js";
15
15
  import { useVirtualizer } from "../../composables/use-virtualizer.js";
16
16
  import { useVirtualizerScroll } from "../../composables/use-virtualizer-scroll.js";
17
17
  import { provideSeparatorContext } from "../separator/separator.context.js";
18
+ import { toDragCollection } from "./drag-collection.js";
18
19
  import { computed, createComponent, createFor, createIf, createSlot, defineVaporComponent, extend, on, onScopeDispose, renderEffect, setAttr, setClass, setInsertionState, setProp, setStaticTemplateRef, setStyle, shallowRef, template, toValue, unref, useSlots } from "vue";
19
20
  import { listboxVariants } from "@ropav/styles";
20
21
  //#region src/components/list-box/list-box-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
21
- var t0 = template("<div role=presentation>");
22
- var t1 = template("<div aria-orientation=vertical data-layout=stack data-orientation=vertical data-slot=list-box role=listbox>", 1);
22
+ var t0 = template("<div aria-disabled=true role=option>");
23
+ var t1 = template("<div role=presentation>");
24
+ var t2 = template("<div aria-orientation=vertical data-layout=stack data-orientation=vertical data-slot=list-box role=listbox>", 1);
23
25
  /** Stands in while a virtualized listbox has no data yet, so the layout has something to read. */
24
26
  var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
25
27
  __name: "list-box-root",
@@ -36,6 +38,7 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
36
38
  disabledBehavior: {},
37
39
  disallowEmptySelection: { type: Boolean },
38
40
  variant: {},
41
+ size: {},
39
42
  dragAndDropHooks: {}
40
43
  },
41
44
  emits: [
@@ -58,6 +61,7 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
58
61
  const itemOf = (node) => node?.content;
59
62
  const styles = computed(() => listboxVariants({
60
63
  class: props.class,
64
+ size: props.size,
61
65
  variant: props.variant
62
66
  }));
63
67
  /**
@@ -162,7 +166,9 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
162
166
  onScrollEnd: virtualizer.endScrolling,
163
167
  onScrollStart: virtualizer.startScrolling,
164
168
  onSizeChange: virtualizer.setSize,
165
- onVisibleRectChange: virtualizer.setVisibleRect
169
+ onVisibleRectChange: virtualizer.setVisibleRect,
170
+ scrollAdjustment: () => virtualizer.scrollAdjustment.value,
171
+ takeScrollAdjustment: virtualizer.takeScrollAdjustment
166
172
  });
167
173
  /**
168
174
  * Paging asks the layout where the rows are, not the DOM.
@@ -243,7 +249,10 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
243
249
  const rendersDropIndicators = computed(() => isVirtualized.value && dropState != null);
244
250
  /** The gap after the last item, which no item's own "before" indicator covers. */
245
251
  const lastItemKey = computed(() => collection.getLastKey());
246
- provideSeparatorContext({ elementType: "div" });
252
+ provideSeparatorContext({
253
+ elementType: "div",
254
+ role: "presentation"
255
+ });
247
256
  const typeahead = useTypeahead({
248
257
  focusedKey: () => selection.focusedKey.value,
249
258
  getKeyForSearch: keyboard.getKeyForSearch,
@@ -275,11 +284,18 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
275
284
  keyboard,
276
285
  selection
277
286
  });
278
- if (virtualizer && virtualizerConfig) provideVirtualizerStateContext({
287
+ if (virtualizer && virtualizerConfig && scroll) provideVirtualizerStateContext({
279
288
  getIndex: (key) => collection.getIndex(key),
280
289
  getDropTargetLayoutInfo: virtualizerConfig.layout.value.getDropTargetLayoutInfo?.bind(virtualizerConfig.layout.value),
281
290
  getLayoutInfo: virtualizer.getLayoutInfo,
282
291
  itemCount: computed(() => source.value?.itemCount ?? 0),
292
+ scroll: {
293
+ box: scroll.scrollBox,
294
+ offset: scroll.scrollOffset,
295
+ scrollSize: scroll.scrollSize,
296
+ scrollTo: scroll.scrollTo,
297
+ size: virtualizer.size
298
+ },
283
299
  shouldObserveItemSize: virtualizerConfig.shouldObserveItemSize,
284
300
  updateItemSize: virtualizer.updateItemSize
285
301
  });
@@ -289,33 +305,42 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
289
305
  };
290
306
  const isEmpty = computed(() => collection.size.value === 0);
291
307
  const hasEmptySlot = computed(() => Boolean(callerSlots["empty"]));
292
- const n19 = t1();
308
+ /**
309
+ * A windowed listbox hides the native scrollbar and draws its own in the content wrapper below: a
310
+ * native thumb is moved by the compositor, a frame ahead of the options, and across a long
311
+ * collection that frame shows an empty list. Wheel, trackpad and keyboard scrolling stay native.
312
+ */
313
+ const rootStyle = computed(() => isVirtualized.value ? { scrollbarWidth: "none" } : void 0);
314
+ const n20 = t2();
293
315
  renderEffect(() => {
294
316
  const _selection = unref(selection);
295
317
  const _dataAttr = unref(dataAttr);
296
- setProp(n19, "id", listId.value);
297
- setAttr(n19, "aria-label", ownerAriaLabel.value);
298
- setAttr(n19, "aria-labelledby", labelledBy.value);
299
- setAttr(n19, "aria-multiselectable", _selection.selectionMode.value === "multiple" ? true : void 0);
300
- setClass(n19, styles.value);
301
- setAttr(n19, "data-collection", unref(collectionId));
302
- setAttr(n19, "data-drop-target", _dataAttr(isRootDropTarget.value));
303
- setAttr(n19, "data-empty", _dataAttr(isEmpty.value));
304
- setAttr(n19, "data-focus-visible", _dataAttr(_selection.isFocused.value));
305
- setProp(n19, "tabindex", unref(keyboard).collectionTabIndex.value);
318
+ setProp(n20, "id", listId.value);
319
+ setAttr(n20, "aria-label", ownerAriaLabel.value);
320
+ setAttr(n20, "aria-labelledby", labelledBy.value);
321
+ setAttr(n20, "aria-multiselectable", _selection.selectionMode.value === "multiple" ? true : void 0);
322
+ setClass(n20, styles.value);
323
+ setAttr(n20, "data-collection", unref(collectionId));
324
+ setAttr(n20, "data-drop-target", _dataAttr(isRootDropTarget.value));
325
+ setAttr(n20, "data-empty", _dataAttr(isEmpty.value));
326
+ setAttr(n20, "data-focus-visible", _dataAttr(_selection.isFocused.value));
327
+ setStyle(n20, rootStyle.value);
328
+ setProp(n20, "tabindex", unref(keyboard).collectionTabIndex.value);
306
329
  });
307
- setInsertionState(n19);
330
+ setInsertionState(n20);
308
331
  createIf(() => hasEmptySlot.value && isEmpty.value, () => {
309
332
  const n3 = t0();
310
333
  setInsertionState(n3);
311
334
  createSlot("empty");
312
335
  return n3;
313
336
  });
314
- setInsertionState(n19, 1);
337
+ setInsertionState(n20, 1);
315
338
  createIf(() => isVirtualized.value, () => {
316
- const n16 = t0();
317
- renderEffect(() => setStyle(n16, unref(scroll)?.contentStyle.value));
318
- setInsertionState(n16);
339
+ const n17 = t1();
340
+ renderEffect(() => setStyle(n17, unref(scroll)?.contentStyle.value));
341
+ setInsertionState(n17);
342
+ createComponent(unref(virtualizer_scrollbar_default));
343
+ setInsertionState(n17, 1);
319
344
  createFor(() => unref(virtualizer)?.visibleViews.value, (_for_item0) => {
320
345
  return [createIf(() => rendersDropIndicators.value, () => {
321
346
  return createComponent(list_box_drop_indicator_default, { target: () => ({
@@ -330,7 +355,7 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
330
355
  }, null, 36);
331
356
  }, { _: 8 }))];
332
357
  }, (view) => view.key);
333
- setInsertionState(n16, 1);
358
+ setInsertionState(n17, 2);
334
359
  createIf(() => rendersDropIndicators.value && lastItemKey.value != null, () => {
335
360
  return createComponent(list_box_drop_indicator_default, { target: () => ({
336
361
  dropPosition: "after",
@@ -338,21 +363,21 @@ var list_box_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
338
363
  type: "item"
339
364
  }) });
340
365
  });
341
- return n16;
366
+ return n17;
342
367
  }, () => {
343
368
  return createSlot();
344
369
  }, 1029);
345
- on(n19, "dragenter", ($event) => unref(droppable)?.handlers.onDragenter($event));
346
- on(n19, "dragleave", ($event) => unref(droppable)?.handlers.onDragleave($event));
347
- on(n19, "dragover", ($event) => unref(droppable)?.handlers.onDragover($event));
348
- on(n19, "drop", ($event) => unref(droppable)?.handlers.onDrop($event));
349
- on(n19, "focusin", (e) => unref(keyboard).onFocusin(e));
350
- on(n19, "focusout", (e) => unref(keyboard).onFocusout(e));
351
- on(n19, "keydown", onKeydown);
352
- on(n19, "keydown", (e) => unref(typeahead).onKeydownCapture(e), { capture: true });
353
- on(n19, "mousedown", onMousedown);
354
- setStaticTemplateRef(n19, element, null, "element");
355
- return n19;
370
+ on(n20, "dragenter", ($event) => unref(droppable)?.handlers.onDragenter($event));
371
+ on(n20, "dragleave", ($event) => unref(droppable)?.handlers.onDragleave($event));
372
+ on(n20, "dragover", ($event) => unref(droppable)?.handlers.onDragover($event));
373
+ on(n20, "drop", ($event) => unref(droppable)?.handlers.onDrop($event));
374
+ on(n20, "focusin", (e) => unref(keyboard).onFocusin(e));
375
+ on(n20, "focusout", (e) => unref(keyboard).onFocusout(e));
376
+ on(n20, "keydown", onKeydown);
377
+ on(n20, "keydown", (e) => unref(typeahead).onKeydownCapture(e), { capture: true });
378
+ on(n20, "mousedown", onMousedown);
379
+ setStaticTemplateRef(n20, element, null, "element");
380
+ return n20;
356
381
  }
357
382
  });
358
383
  //#endregion
@@ -44,6 +44,8 @@ export interface ListBoxRootProps<T = unknown> {
44
44
  disallowEmptySelection?: boolean;
45
45
  /** Visual variant. */
46
46
  variant?: ListBoxVariants["variant"];
47
+ /** How tall a row stands, matching a field of the same size. @default "md" */
48
+ size?: ListBoxVariants["size"];
47
49
  /** Drag and drop behaviour, from `useDragAndDrop`. */
48
50
  dragAndDropHooks?: DragAndDropHooks;
49
51
  }
@@ -9,8 +9,10 @@ export declare const Menu: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup
9
9
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
10
10
  props: import('vue').PublicProps & {
11
11
  class?: string;
12
+ size?: import("@ropav/styles").MenuVariants["size"];
12
13
  id?: string;
13
14
  ariaLabelledby?: string;
15
+ ariaLabel?: string;
14
16
  selectionMode?: import("../../index.js").SelectionMode;
15
17
  selectionBehavior?: import("../../index.js").SelectionBehavior;
16
18
  selectedKeys?: "all" | Iterable<import("../../index.js").CollectionKey>;
@@ -47,8 +49,10 @@ export declare const Menu: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup
47
49
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
48
50
  props: import('vue').PublicProps & {
49
51
  class?: string;
52
+ size?: import("@ropav/styles").MenuVariants["size"];
50
53
  id?: string;
51
54
  ariaLabelledby?: string;
55
+ ariaLabel?: string;
52
56
  selectionMode?: import("../../index.js").SelectionMode;
53
57
  selectionBehavior?: import("../../index.js").SelectionBehavior;
54
58
  selectedKeys?: "all" | Iterable<import("../../index.js").CollectionKey>;
@@ -3,14 +3,16 @@ import { useMenu } from "../../composables/use-menu.js";
3
3
  import { computed, createIf, createSlot, defineVaporComponent, on, renderEffect, setDynamicProps, setInsertionState, setTemplateRefBinding, template, unref, useSlots } from "vue";
4
4
  import { menuVariants } from "@ropav/styles";
5
5
  //#region src/components/menu/menu-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
6
- var t0 = template("<div role=presentation>");
6
+ var t0 = template("<div>");
7
7
  var t1 = template("<div>", 1);
8
8
  var menu_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
9
9
  __name: "menu-root",
10
10
  props: {
11
11
  class: {},
12
+ size: {},
12
13
  id: {},
13
14
  ariaLabelledby: {},
15
+ ariaLabel: {},
14
16
  selectionMode: {},
15
17
  selectionBehavior: {},
16
18
  selectedKeys: {},
@@ -37,7 +39,10 @@ var menu_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
37
39
  const props = __props;
38
40
  const emit = __emit;
39
41
  const callerSlots = useSlots();
40
- const styles = computed(() => menuVariants({ class: props.class }));
42
+ const styles = computed(() => menuVariants({
43
+ class: props.class,
44
+ size: props.size
45
+ }));
41
46
  provideSeparatorContext({ elementType: "div" });
42
47
  const menu = useMenu({
43
48
  autoFocus: () => props.autoFocus,
@@ -46,6 +51,7 @@ var menu_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
46
51
  disabledKeys: () => props.disabledKeys,
47
52
  disallowEmptySelection: () => props.disallowEmptySelection,
48
53
  id: () => props.id,
54
+ label: () => props.ariaLabel,
49
55
  labelledBy: () => props.ariaLabelledby,
50
56
  onAction: (key) => emit("action", key),
51
57
  onClose: () => emit("close"),
@@ -70,6 +76,7 @@ var menu_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
70
76
  setInsertionState(n5);
71
77
  createIf(() => hasEmptySlot.value && unref(menu).isEmpty.value, () => {
72
78
  const n3 = t0();
79
+ renderEffect(() => setDynamicProps(n3, [unref(menu).emptyAttributes.value]));
73
80
  setInsertionState(n3);
74
81
  createSlot("empty");
75
82
  return n3;
@@ -1,12 +1,17 @@
1
1
  import type { CollectionKey } from "../../composables/use-collection.js";
2
2
  import type { FocusStrategy } from "../../composables/use-overlay-trigger-state.js";
3
3
  import type { CollectionSelection, DisabledBehavior, SelectionBehavior, SelectionMode } from "../../composables/use-selection-manager.js";
4
+ import type { MenuVariants } from "@ropav/styles";
4
5
  export interface MenuRootProps {
5
6
  class?: string;
7
+ /** How tall a row stands, matching a field of the same size. @default "md" */
8
+ size?: MenuVariants["size"];
6
9
  /** Overrides the menu's id, which a trigger's `aria-controls` points at. */
7
10
  id?: string;
8
11
  /** The id of the element naming the menu, normally its trigger. */
9
12
  ariaLabelledby?: string;
13
+ /** Names the menu when it has no trigger to point `ariaLabelledby` at. */
14
+ ariaLabel?: string;
10
15
  /** @default "none" */
11
16
  selectionMode?: SelectionMode;
12
17
  /** @default "toggle" */
@@ -13,6 +13,7 @@ export declare const NumberField: ((__VLS_props: NonNullable<Awaited<typeof __VL
13
13
  props: import('vue').PublicProps & {
14
14
  class?: string;
15
15
  variant?: import("@ropav/styles").NumberFieldVariants["variant"];
16
+ size?: import("@ropav/styles").NumberFieldVariants["size"];
16
17
  fullWidth?: boolean;
17
18
  value?: number | null;
18
19
  defaultValue?: number;
@@ -144,6 +145,7 @@ export declare const NumberField: ((__VLS_props: NonNullable<Awaited<typeof __VL
144
145
  props: import('vue').PublicProps & {
145
146
  class?: string;
146
147
  variant?: import("@ropav/styles").NumberFieldVariants["variant"];
148
+ size?: import("@ropav/styles").NumberFieldVariants["size"];
147
149
  fullWidth?: boolean;
148
150
  value?: number | null;
149
151
  defaultValue?: number;
@@ -189,5 +191,6 @@ export { NumberFieldDecrementButton, NumberFieldGroup, NumberFieldIncrementButto
189
191
  export type { NumberFieldRootProps, NumberFieldRootProps as NumberFieldProps, NumberFieldRootSlotProps, NumberFieldGroupProps, NumberFieldGroupSlotProps, NumberFieldInputProps, NumberFieldStepperButtonProps, } from "./number-field.types.js";
190
192
  export { provideNumberFieldContext, useNumberFieldContext } from "./number-field.context.js";
191
193
  export type { NumberFieldContext } from "./number-field.context.js";
194
+ export type { NumberFieldStepper, UseNumberFieldReturn } from "../../composables/use-number-field.js";
192
195
  export { numberFieldVariants } from "@ropav/styles";
193
196
  export type { NumberFieldVariants } from "@ropav/styles";
@@ -13,6 +13,7 @@ var number_field_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /
13
13
  props: {
14
14
  class: {},
15
15
  variant: { default: void 0 },
16
+ size: {},
16
17
  fullWidth: {
17
18
  type: Boolean,
18
19
  default: void 0
@@ -98,6 +99,7 @@ var number_field_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /
98
99
  });
99
100
  const slots = computed(() => numberFieldVariants({
100
101
  fullWidth: props.fullWidth,
102
+ size: props.size,
101
103
  variant: props.variant
102
104
  }));
103
105
  provideFieldIdsContext(field.fieldIds);
@@ -5,6 +5,8 @@ export interface NumberFieldRootProps {
5
5
  class?: string;
6
6
  /** Visual variant. @default "primary" */
7
7
  variant?: NumberFieldVariants["variant"];
8
+ /** How tall the field stands, matching a button of the same size. @default "md" */
9
+ size?: NumberFieldVariants["size"];
8
10
  /** Whether the field stretches to fill its container. */
9
11
  fullWidth?: boolean;
10
12
  /** The number in the field. Makes it controlled. `null` means no number at all. */
@@ -1,21 +1,73 @@
1
1
  import { useOverlayArrowContext } from "./overlay.context.js";
2
- import { computed, createSlot, defineVaporComponent, renderEffect, setAttr, setClass, setInsertionState, setStyle, setTemplateRefBinding, template } from "vue";
2
+ import { child, computed, createSlot, defineVaporComponent, renderEffect, setAttr, setClass, setInsertionState, setStyle, setTemplateRefBinding, shallowRef, template, watch } from "vue";
3
3
  //#region src/components/overlay/overlay-arrow.vue?vue&type=script&setup=true&vapor=true&lang.ts
4
- var t0 = template("<div>", 1);
4
+ var t0 = template("<div><!><svg aria-hidden=true focusable=false height=0 style=\"position: absolute\" width=0><filter id=ropav-overlay-edge color-interpolation-filters=sRGB height=200% width=200% x=-50% y=-50%><feFlood result=line style=\"flood-color: var(--overlay-edge-line, transparent)\"></feFlood><feComposite in=line in2=SourceAlpha operator=out result=outside></feComposite><feGaussianBlur in=outside result=soft stdDeviation=0.5></feGaussianBlur><feComposite in=soft in2=SourceAlpha operator=in result=glow></feComposite><feMerge><feMergeNode in=SourceGraphic></feMergeNode><feMergeNode in=glow>", 1);
5
+ var SKIRT = 2;
6
+ /** Half the mouth's width: the shape's mouth spans the middle 10 of its 12 unit box. */
7
+ var HALF_MOUTH = 5;
8
+ /**
9
+ * How much deeper than the skirt the arrow sits, where the overlay's edge is curved.
10
+ *
11
+ * The mouth is straight, and it normally lies exactly on the overlay's edge, whose flat run its
12
+ * ends meet tangentially. Near a corner the edge has curved away from that line — entirely, when
13
+ * a large radius has clamped a short overlay toward a pill — and the mouth's ends would hang past
14
+ * the curve as two bare horns. The recession under each end follows from the radius the overlay
15
+ * actually renders, and the whole arrow is pulled in that far, plus a little for antialiasing.
16
+ */
5
17
  var overlay_arrow_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
6
18
  __name: "overlay-arrow",
7
19
  props: { class: {} },
8
20
  setup(__props) {
9
21
  const props = __props;
10
22
  const arrow = useOverlayArrowContext();
23
+ const element = shallowRef(null);
11
24
  const setElement = (next) => {
12
- arrow?.registerElement(next ?? null);
25
+ element.value = next ?? null;
26
+ arrow?.registerElement(element.value);
13
27
  };
14
28
  const placement = computed(() => arrow?.placement.value ?? null);
29
+ /** The straight run the shape carries above its mouth, buried inside the overlay. */
30
+ const burial = shallowRef(0);
31
+ const measureBurial = () => {
32
+ const own = element.value;
33
+ const side = placement.value;
34
+ const isHorizontal = side === "top" || side === "bottom";
35
+ const centre = Number.parseFloat(arrow?.style.value[isHorizontal ? "left" : "top"] ?? "");
36
+ const overlay = own?.offsetParent;
37
+ if (!own || !side || !Number.isFinite(centre) || !(overlay instanceof HTMLElement)) return 0;
38
+ const width = overlay.offsetWidth;
39
+ const height = overlay.offsetHeight;
40
+ const edge = isHorizontal ? width : height;
41
+ const declared = getComputedStyle(overlay).borderTopLeftRadius;
42
+ const radius = Math.min(declared.includes("%") ? Math.min(width, height) : Number.parseFloat(declared) || 0, width / 2, height / 2);
43
+ if (radius <= 0) return 0;
44
+ const recessionAt = (position) => {
45
+ const intoCorner = Math.max(radius - position, position - (edge - radius), 0);
46
+ if (intoCorner <= 0) return 0;
47
+ const reach = Math.min(intoCorner, radius);
48
+ return radius - Math.sqrt(radius * radius - reach * reach);
49
+ };
50
+ const deepest = Math.max(recessionAt(centre - HALF_MOUTH), recessionAt(centre + HALF_MOUTH));
51
+ return deepest > 0 ? Math.min(deepest + .5, 4) : 0;
52
+ };
53
+ watch([
54
+ element,
55
+ placement,
56
+ () => arrow?.style.value
57
+ ], () => {
58
+ burial.value = measureBurial();
59
+ }, {
60
+ flush: "post",
61
+ immediate: true
62
+ });
15
63
  /**
16
64
  * Pinned to the edge the overlay is placed against, and centred on the offset the positioner
17
65
  * worked out.
18
66
  *
67
+ * Pulled back into the overlay by the skirt, so the shape overlaps the body it grows out of
68
+ * rather than touching it: shapes that merely touch each antialias the shared row at fractional
69
+ * device pixel ratios, and the page bleeds through the seam.
70
+ *
19
71
  * The offset names the arrow's centre, so it is pulled back by half its own size on the cross
20
72
  * axis — done with a transform rather than arithmetic because only the stylesheet knows how big
21
73
  * the arrow is.
@@ -25,20 +77,21 @@ var overlay_arrow_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
25
77
  return {
26
78
  position: "absolute",
27
79
  transform: side === "top" || side === "bottom" ? "translateX(-50%)" : "translateY(-50%)",
28
- ...side ? { [side]: "100%" } : {},
80
+ ...side ? { [side]: `calc(100% - ${SKIRT + burial.value}px)` } : {},
29
81
  ...arrow?.style.value ?? {}
30
82
  };
31
83
  });
32
- const n1 = t0();
84
+ const n2 = t0();
85
+ const n1 = child(n2);
33
86
  renderEffect(() => {
34
- setClass(n1, props.class);
35
- setAttr(n1, "data-placement", placement.value ?? void 0);
36
- setStyle(n1, style.value);
87
+ setClass(n2, props.class);
88
+ setAttr(n2, "data-placement", placement.value ?? void 0);
89
+ setStyle(n2, style.value);
37
90
  });
38
- setInsertionState(n1);
91
+ setInsertionState(n2, n1);
39
92
  createSlot();
40
- setTemplateRefBinding(n1, () => setElement);
41
- return n1;
93
+ setTemplateRefBinding(n2, () => setElement);
94
+ return n2;
42
95
  }
43
96
  });
44
97
  //#endregion
@@ -16,6 +16,7 @@ export declare const Pagination: ((__VLS_props: NonNullable<Awaited<typeof __VLS
16
16
  emit: {};
17
17
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
18
18
  props: import('vue').PublicProps & {
19
+ ariaLabel?: string;
19
20
  class?: string;
20
21
  size?: import("@ropav/styles").PaginationVariants["size"];
21
22
  } & (typeof globalThis extends {
@@ -212,6 +213,7 @@ export declare const Pagination: ((__VLS_props: NonNullable<Awaited<typeof __VLS
212
213
  emit: {};
213
214
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
214
215
  props: import('vue').PublicProps & {
216
+ ariaLabel?: string;
215
217
  class?: string;
216
218
  size?: import("@ropav/styles").PaginationVariants["size"];
217
219
  } & (typeof globalThis extends {
@@ -1,11 +1,12 @@
1
1
  import { providePaginationContext } from "./pagination.context.js";
2
- import { computed, createSlot, defineVaporComponent, renderEffect, setClass, setInsertionState, template } from "vue";
2
+ import { computed, createSlot, defineVaporComponent, renderEffect, setAttr, setClass, setInsertionState, template } from "vue";
3
3
  import { paginationVariants } from "@ropav/styles";
4
4
  //#region src/components/pagination/pagination-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
5
- var t0 = template("<nav aria-label=pagination data-slot=pagination role=navigation>", 1);
5
+ var t0 = template("<nav data-slot=pagination role=navigation>", 1);
6
6
  var pagination_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
7
7
  __name: "pagination-root",
8
8
  props: {
9
+ ariaLabel: {},
9
10
  class: {},
10
11
  size: {}
11
12
  },
@@ -14,7 +15,11 @@ var pagination_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@
14
15
  const slots = computed(() => paginationVariants({ size: props.size }));
15
16
  providePaginationContext({ slots });
16
17
  const n1 = t0();
17
- renderEffect(() => setClass(n1, slots.value.base({ class: props.class })));
18
+ renderEffect(() => {
19
+ const _props = props;
20
+ setAttr(n1, "aria-label", _props.ariaLabel ?? "pagination");
21
+ setClass(n1, slots.value.base({ class: _props.class }));
22
+ });
18
23
  setInsertionState(n1);
19
24
  createSlot();
20
25
  return n1;
@@ -1,5 +1,13 @@
1
1
  import type { PaginationVariants } from "@ropav/styles";
2
2
  export interface PaginationRootProps {
3
+ /**
4
+ * Name for the navigation landmark.
5
+ *
6
+ * Overridable because the name is what tells two paginations apart: a list with one set of
7
+ * controls above it and another below reports the same landmark twice otherwise.
8
+ * @default "pagination"
9
+ */
10
+ ariaLabel?: string;
3
11
  class?: string;
4
12
  /** Pagination size. @default "md" */
5
13
  size?: PaginationVariants["size"];
@@ -1,8 +1,9 @@
1
1
  import { dataAttr } from "../../utils/assertion.js";
2
2
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
3
3
  import { composePressResponder, usePressResponder } from "../../composables/press-responder.js";
4
+ import { FOCUSABLE_SELECTOR } from "../../utils/focus.js";
4
5
  import { usePopoverContext } from "./popover.context.js";
5
- import { computed, createSlot, defineVaporComponent, on, renderEffect, setDynamicProps, setInsertionState, setTemplateRefBinding, template, unref } from "vue";
6
+ import { computed, createSlot, defineVaporComponent, on, renderEffect, setDynamicProps, setInsertionState, setTemplateRefBinding, shallowRef, template, unref, watch } from "vue";
6
7
  //#region src/components/popover/popover-trigger.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
8
  var t0 = template("<div>", 1);
8
9
  var popover_trigger_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
@@ -13,23 +14,29 @@ var popover_trigger_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@
13
14
  const { slots } = usePopoverContext();
14
15
  const responder = usePressResponder();
15
16
  const styles = computed(() => slots.value.trigger({ class: props.class }));
17
+ const host = shallowRef(null);
18
+ const hasFocusableContent = shallowRef(false);
16
19
  const setElement = (element) => {
17
- responder?.registerElement(element ?? null);
20
+ host.value = element ?? null;
21
+ responder?.registerElement(host.value);
18
22
  };
23
+ watch(host, (element) => {
24
+ hasFocusableContent.value = Boolean(element?.querySelector(FOCUSABLE_SELECTOR));
25
+ }, { flush: "post" });
19
26
  const { isFocusVisible, onBlur, onFocus } = useInteractionStates();
20
27
  const press = composePressResponder(responder);
28
+ const wrapperAttrs = computed(() => hasFocusableContent.value ? void 0 : responder?.attrs.value);
21
29
  const n1 = t0();
22
30
  renderEffect(() => {
23
31
  const _dataAttr = unref(dataAttr);
24
- const _responder = unref(responder);
25
32
  setDynamicProps(n1, [{
26
33
  class: styles.value,
27
34
  "data-focus-visible": _dataAttr(unref(isFocusVisible)),
28
- "data-pressed": _dataAttr(_responder?.isPressed.value),
35
+ "data-pressed": _dataAttr(unref(responder)?.isPressed.value),
29
36
  "data-slot": "popover-trigger",
30
- role: "button",
31
- tabindex: "0"
32
- }, _responder?.attrs.value]);
37
+ role: hasFocusableContent.value ? void 0 : "button",
38
+ tabindex: hasFocusableContent.value ? void 0 : 0
39
+ }, wrapperAttrs.value]);
33
40
  });
34
41
  setInsertionState(n1);
35
42
  createSlot();
@@ -21,7 +21,7 @@ var radio_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
21
21
  const setInputEl = (element) => {
22
22
  inputEl.value = element instanceof HTMLInputElement ? element : null;
23
23
  };
24
- useFormReset(inputEl, state.defaultSelectedValue, state.setSelectedValue);
24
+ useFormReset(inputEl, state.defaultSelectedValue, state.setSelectedValue, form);
25
25
  watch([inputEl, isSelected], ([input, selected]) => setFormChecked(input, selected), {
26
26
  flush: "post",
27
27
  immediate: true