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
@@ -1,10 +1,10 @@
1
- import type { DayOfWeek } from "../utils/calendar.js";
2
- import type { FocusManager } from "../utils/focus.js";
3
- import type { PageBehavior } from "./use-calendar-state.js";
4
- import type { DateRangePickerState } from "./use-date-range-picker-state.js";
5
- import type { FieldIdsContext } from "./use-field-ids.js";
6
- import type { FormValidationState } from "./use-form-validation-state.js";
7
- import type { UsePressHandlers } from "./use-press.js";
1
+ import type { PageBehavior } from "../../composables/use-calendar-state.js";
2
+ import type { DateRangePickerState } from "../../composables/use-date-range-picker-state.js";
3
+ import type { FieldIdsContext } from "../../composables/use-field-ids.js";
4
+ import type { FormValidationState } from "../../composables/use-form-validation-state.js";
5
+ import type { UsePressHandlers } from "../../composables/use-press.js";
6
+ import type { DayOfWeek } from "../../utils/calendar.js";
7
+ import type { FocusManager } from "../../utils/focus.js";
8
8
  import type { DateValue } from "@internationalized/date";
9
9
  import type { ComputedRef, MaybeRefOrGetter } from "vue";
10
10
  export interface UseDateRangePickerOptions {
@@ -1,14 +1,14 @@
1
- import { useId as useId$1 } from "./use-id.js";
2
- import { createFocusManager } from "../utils/focus.js";
3
- import { useFieldIds } from "./use-field-ids.js";
4
- import { DEFAULT_VALIDATION_RESULT, mergeValidation } from "./use-form-validation-state.js";
5
- import { useLocale } from "./use-locale.js";
6
- import { useLocalizedStringFormatter } from "./use-localized-string-formatter.js";
7
- import { useDescription } from "./use-description.js";
8
- import { datepickerStrings } from "../i18n/datepicker.js";
9
- import { useDatePickerGroup } from "./use-date-picker-group.js";
1
+ import { useId as useId$1 } from "../../composables/use-id.js";
2
+ import { createFocusManager } from "../../utils/focus.js";
3
+ import { useFieldIds } from "../../composables/use-field-ids.js";
4
+ import { DEFAULT_VALIDATION_RESULT, mergeValidation } from "../../composables/use-form-validation-state.js";
5
+ import { useLocale } from "../../composables/use-locale.js";
6
+ import { useLocalizedStringFormatter } from "../../composables/use-localized-string-formatter.js";
7
+ import { useDescription } from "../../composables/use-description.js";
8
+ import { datepickerStrings } from "../../i18n/datepicker.js";
9
+ import { useDatePickerGroup } from "../../composables/use-date-picker-group.js";
10
10
  import { computed, toValue } from "vue";
11
- //#region src/composables/use-date-range-picker.ts
11
+ //#region src/components/date-range-picker/use-date-range-picker.ts
12
12
  /**
13
13
  * The behaviour and accessibility wiring for a date range picker.
14
14
  *
@@ -1,7 +1,7 @@
1
1
  import { provideSurfaceContext } from "../surface/surface.context.js";
2
2
  import { provideFieldIdsContext, useFieldIds } from "../../composables/use-field-ids.js";
3
3
  import { useDrawerContext, useDrawerOverlayContext } from "./drawer.context.js";
4
- import { useDrawerDrag } from "../../composables/use-drawer-drag.js";
4
+ import { useDrawerDrag } from "./use-drawer-drag.js";
5
5
  import { computed, createSlot, defineVaporComponent, on, renderEffect, setAttr, setClass, setInsertionState, setProp, setStyle, setTemplateRefBinding, shallowRef, template, unref, watch } from "vue";
6
6
  //#region src/components/drawer/drawer-dialog.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
7
  var t0 = template("<section data-slot=drawer-dialog role=dialog tabindex=-1>", 1);
@@ -1,4 +1,4 @@
1
- import type { DrawerPlacement } from "../components/drawer/drawer.types.js";
1
+ import type { DrawerPlacement } from "./drawer.types.js";
2
2
  import type { MaybeRefOrGetter } from "vue";
3
3
  export interface UseDrawerDragOptions {
4
4
  /** The panel that moves. */
@@ -1,5 +1,5 @@
1
1
  import { toValue, watch } from "vue";
2
- //#region src/composables/use-drawer-drag.ts
2
+ //#region src/components/drawer/use-drawer-drag.ts
3
3
  /** How far the pointer has to travel before the panel starts following it, in pixels. */
4
4
  var DRAG_THRESHOLD = 8;
5
5
  /** How much of the panel has to be dragged away before letting go dismisses it. */
@@ -3,12 +3,13 @@ import { useMenu } from "../../composables/use-menu.js";
3
3
  import { useDropdownContext, useDropdownPopoverTarget } from "./dropdown.context.js";
4
4
  import { computed, createIf, createSlot, defineVaporComponent, on, renderEffect, setDynamicProps, setInsertionState, setTemplateRefBinding, template, unref, useSlots } from "vue";
5
5
  //#region src/components/dropdown/dropdown-menu.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 dropdown_menu_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
9
9
  __name: "dropdown-menu",
10
10
  props: {
11
11
  class: {},
12
+ size: {},
12
13
  selectionMode: {},
13
14
  selectionBehavior: {},
14
15
  selectedKeys: {},
@@ -69,6 +70,7 @@ var dropdown_menu_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
69
70
  setInsertionState(n5);
70
71
  createIf(() => hasEmptySlot.value && unref(menu).isEmpty.value, () => {
71
72
  const n3 = t0();
73
+ renderEffect(() => setDynamicProps(n3, [unref(menu).emptyAttributes.value]));
72
74
  setInsertionState(n3);
73
75
  createSlot("empty");
74
76
  return n3;
@@ -3,7 +3,7 @@ import { useSubmenuTriggerState } from "../../composables/use-overlay-trigger-st
3
3
  import { provideMenuItemPopupContext } from "../menu-item/menu-item.context.js";
4
4
  import { useMenuContext } from "../menu/menu.context.js";
5
5
  import { provideDropdownPopoverTarget, useDropdownContext } from "./dropdown.context.js";
6
- import { useSafelyMouseToSubmenu } from "../../composables/use-safely-mouse-to-submenu.js";
6
+ import { useSafelyMouseToSubmenu } from "./use-safely-mouse-to-submenu.js";
7
7
  import { computed, createSlot, defineVaporComponent, onScopeDispose, shallowRef, watch } from "vue";
8
8
  var dropdown_submenu_trigger_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
9
9
  __name: "dropdown-submenu-trigger",
@@ -36,7 +36,7 @@ export interface DropdownPopoverProps {
36
36
  isKeyboardDismissDisabled?: boolean;
37
37
  }
38
38
  /**
39
- * The menu inside a dropdown. Everything a standalone menu takes, minus the ids and the focus
40
- * strategy, which the trigger decides.
39
+ * The menu inside a dropdown. Everything a standalone menu takes, minus the naming, the ids and the
40
+ * focus strategy, all of which the trigger decides.
41
41
  */
42
- export type DropdownMenuProps = Omit<MenuRootProps, "ariaLabelledby" | "autoFocus" | "id">;
42
+ export type DropdownMenuProps = Omit<MenuRootProps, "ariaLabel" | "ariaLabelledby" | "autoFocus" | "id">;
@@ -16,7 +16,7 @@ export declare const Dropdown: ((__VLS_props: NonNullable<Awaited<typeof __VLS_s
16
16
  emit: ((evt: "openChange", isOpen: boolean) => void) & ((evt: "update:isOpen", isOpen: boolean) => void);
17
17
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
18
18
  props: import('vue').PublicProps & {
19
- trigger?: import("../../composables/use-menu-trigger.js").MenuTriggerType;
19
+ trigger?: import("./index.js").MenuTriggerType;
20
20
  isOpen?: boolean;
21
21
  defaultOpen?: boolean;
22
22
  isDisabled?: boolean;
@@ -91,6 +91,7 @@ export declare const Dropdown: ((__VLS_props: NonNullable<Awaited<typeof __VLS_s
91
91
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
92
92
  props: import('vue').PublicProps & {
93
93
  class?: string;
94
+ size?: import("@ropav/styles").MenuVariants["size"];
94
95
  selectionMode?: import("../../index.js").SelectionMode;
95
96
  selectionBehavior?: import("../../index.js").SelectionBehavior;
96
97
  selectedKeys?: "all" | Iterable<import("../../index.js").CollectionKey>;
@@ -151,7 +152,7 @@ export declare const Dropdown: ((__VLS_props: NonNullable<Awaited<typeof __VLS_s
151
152
  emit: ((evt: "openChange", isOpen: boolean) => void) & ((evt: "update:isOpen", isOpen: boolean) => void);
152
153
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
153
154
  props: import('vue').PublicProps & {
154
- trigger?: import("../../composables/use-menu-trigger.js").MenuTriggerType;
155
+ trigger?: import("./index.js").MenuTriggerType;
155
156
  isOpen?: boolean;
156
157
  defaultOpen?: boolean;
157
158
  isDisabled?: boolean;
@@ -269,5 +270,6 @@ export { DropdownMenu, DropdownPopover, DropdownRoot, DropdownSubmenuTrigger, Dr
269
270
  export type { DropdownMenuProps, DropdownPopoverProps, DropdownRootEmits, DropdownRootProps, DropdownRootProps as DropdownProps, DropdownTriggerProps, } from "./dropdown.types.js";
270
271
  export { useDropdownContext, useDropdownPopoverTarget } from "./dropdown.context.js";
271
272
  export type { DropdownContext, DropdownPopoverTarget } from "./dropdown.context.js";
273
+ export type { MenuTriggerType } from "../../composables/use-menu-trigger.js";
272
274
  export { dropdownVariants } from "@ropav/styles";
273
275
  export type { DropdownVariants } from "@ropav/styles";
@@ -1,5 +1,5 @@
1
1
  import { onScopeDispose, toValue, watch } from "vue";
2
- //#region src/composables/use-safely-mouse-to-submenu.ts
2
+ //#region src/components/dropdown/use-safely-mouse-to-submenu.ts
3
3
  /** How many consecutive moves away from the submenu it takes to give up on the journey. */
4
4
  var ALLOWED_INVALID_MOVEMENTS = 2;
5
5
  /** Pointer moves arrive far faster than the geometry changes. */
@@ -1,6 +1,6 @@
1
1
  import { defineVaporComponent, renderEffect, setClass, template } from "vue";
2
2
  //#region src/components/icons/icon-overlay-arrow.vue?vue&type=script&setup=true&vapor=true&lang.ts
3
- var t0 = template("<svg fill=none height=12 viewBox=\"0 0 12 12\" width=12 xmlns=http://www.w3.org/2000/svg><path d=\"M0 0C5.48483 8 6.5 8 12 0Z\">", 1, 1);
3
+ var t0 = template("<svg fill=none height=12 viewBox=\"0 0 12 12\" width=12 xmlns=http://www.w3.org/2000/svg><path d=\"M1 0V2C3.2 2 4.3 8 6 8C7.7 8 8.8 2 11 2V0Z\">", 1, 1);
4
4
  var icon_overlay_arrow_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
5
5
  __name: "icon-overlay-arrow",
6
6
  props: { class: {} },
@@ -16,6 +16,7 @@ export * from "./chip/index.js";
16
16
  export * from "./close-button/index.js";
17
17
  export * from "./color-area/index.js";
18
18
  export * from "./color-field/index.js";
19
+ export * from "./color-input-group/index.js";
19
20
  export * from "./color-picker/index.js";
20
21
  export * from "./color-slider/index.js";
21
22
  export * from "./color-swatch/index.js";
@@ -60,13 +61,17 @@ export * from "./progress-circle/index.js";
60
61
  export * from "./radio/index.js";
61
62
  export * from "./radio-group/index.js";
62
63
  export * from "./range-calendar/index.js";
64
+ export * from "./router-provider/index.js";
63
65
  export * from "./scroll-shadow/index.js";
64
66
  export * from "./search-field/index.js";
67
+ export * from "./segmented-control/index.js";
65
68
  export * from "./select/index.js";
66
69
  export * from "./separator/index.js";
70
+ export * from "./sidebar/index.js";
67
71
  export * from "./skeleton/index.js";
68
72
  export * from "./slider/index.js";
69
73
  export * from "./spinner/index.js";
74
+ export * from "./splitter/index.js";
70
75
  export * from "./surface/index.js";
71
76
  export * from "./switch/index.js";
72
77
  export * from "./switch-group/index.js";
@@ -2,40 +2,48 @@ import InputRoot from "./input-root.js";
2
2
  export declare const Input: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>['props'], __VLS_ctx?: {
3
3
  attrs: any;
4
4
  slots: {};
5
- emit: {};
5
+ emit: ((evt: "change", value: string) => void) & ((evt: "update:value", value: string) => void);
6
6
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
7
7
  props: import('vue').PublicProps & {
8
8
  class?: string;
9
+ value?: string;
9
10
  variant?: import("@ropav/styles").InputVariants["variant"];
11
+ size?: import("@ropav/styles").InputVariants["size"];
10
12
  fullWidth?: boolean;
11
13
  placeholder?: string;
14
+ onChange?: ((value: string) => any) | undefined;
15
+ "onUpdate:value"?: ((value: string) => any) | undefined;
12
16
  } & (typeof globalThis extends {
13
17
  __VLS_PROPS_FALLBACK: infer P;
14
18
  } ? P : {});
15
19
  expose: (exposed: {}) => void;
16
20
  attrs: any;
17
21
  slots: {};
18
- emit: {};
22
+ emit: ((evt: "change", value: string) => void) & ((evt: "update:value", value: string) => void);
19
23
  }>) => import('vue').VNode & {
20
24
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
21
25
  }) & {
22
26
  Root: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>['props'], __VLS_ctx?: {
23
27
  attrs: any;
24
28
  slots: {};
25
- emit: {};
29
+ emit: ((evt: "change", value: string) => void) & ((evt: "update:value", value: string) => void);
26
30
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
27
31
  props: import('vue').PublicProps & {
28
32
  class?: string;
33
+ value?: string;
29
34
  variant?: import("@ropav/styles").InputVariants["variant"];
35
+ size?: import("@ropav/styles").InputVariants["size"];
30
36
  fullWidth?: boolean;
31
37
  placeholder?: string;
38
+ onChange?: ((value: string) => any) | undefined;
39
+ "onUpdate:value"?: ((value: string) => any) | undefined;
32
40
  } & (typeof globalThis extends {
33
41
  __VLS_PROPS_FALLBACK: infer P;
34
42
  } ? P : {});
35
43
  expose: (exposed: {}) => void;
36
44
  attrs: any;
37
45
  slots: {};
38
- emit: {};
46
+ emit: ((evt: "change", value: string) => void) & ((evt: "update:value", value: string) => void);
39
47
  }>) => import('vue').VNode & {
40
48
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
41
49
  };
@@ -1,12 +1,15 @@
1
1
  import type { InputRootProps } from "./input.types.js";
2
2
  declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>['props'], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, 'attrs' | 'emit' | 'slots'>>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
3
- props: import('vue').PublicProps & __VLS_PrettifyLocal<InputRootProps> & (typeof globalThis extends {
3
+ props: import('vue').PublicProps & __VLS_PrettifyLocal<InputRootProps & {
4
+ onChange?: ((value: string) => any) | undefined;
5
+ "onUpdate:value"?: ((value: string) => any) | undefined;
6
+ }> & (typeof globalThis extends {
4
7
  __VLS_PROPS_FALLBACK: infer P;
5
8
  } ? P : {});
6
9
  expose: (exposed: {}) => void;
7
10
  attrs: any;
8
11
  slots: {};
9
- emit: {};
12
+ emit: ((evt: "change", value: string) => void) & ((evt: "update:value", value: string) => void);
10
13
  }>) => import('vue').VNode & {
11
14
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
12
15
  };
@@ -1,8 +1,9 @@
1
1
  import { dataAttr } from "../../utils/assertion.js";
2
2
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
3
+ import { setFormValue } from "../../utils/form-value.js";
3
4
  import { useTextFieldControlContext } from "../../composables/use-text-field.js";
4
5
  import { useTextFieldContext } from "../textfield/textfield.context.js";
5
- import { computed, createTemplateRefSetter, defineVaporComponent, on, renderEffect, setDynamicProps, template, unref } from "vue";
6
+ import { computed, createTemplateRefSetter, defineVaporComponent, on, renderEffect, setDynamicProps, shallowRef, template, unref, watch } from "vue";
6
7
  import { inputVariants } from "@ropav/styles";
7
8
  //#region src/components/input/input-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
8
9
  var t0 = template("<input>", 1);
@@ -10,32 +11,72 @@ var input_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
10
11
  __name: "input-root",
11
12
  props: {
12
13
  class: {},
14
+ value: {},
13
15
  variant: { default: void 0 },
16
+ size: {},
14
17
  fullWidth: {
15
18
  type: Boolean,
16
19
  default: void 0
17
20
  },
18
21
  placeholder: {}
19
22
  },
20
- setup(__props) {
23
+ emits: ["change", "update:value"],
24
+ setup(__props, { emit: __emit }) {
21
25
  const props = __props;
26
+ const emit = __emit;
22
27
  const control = useTextFieldControlContext();
23
28
  const textField = useTextFieldContext();
24
- const setElement = (element) => {
25
- control?.registerElement(element instanceof HTMLInputElement ? element : null);
29
+ const element = shallowRef(null);
30
+ const setElement = (next) => {
31
+ element.value = next instanceof HTMLInputElement ? next : null;
32
+ control?.registerElement(element.value);
26
33
  };
27
34
  const resolvedVariant = computed(() => props.variant ?? textField?.variant.value);
35
+ const resolvedSize = computed(() => props.size ?? textField?.size.value);
28
36
  const styles = computed(() => inputVariants({
29
37
  class: props.class,
30
38
  fullWidth: props.fullWidth,
39
+ size: resolvedSize.value,
31
40
  variant: resolvedVariant.value
32
41
  }));
33
42
  const attrs = computed(() => {
34
43
  const merged = { ...control?.attrs.value };
35
44
  if (props.placeholder !== void 0) merged["placeholder"] = props.placeholder;
45
+ if (props.value !== void 0) merged["value"] = props.value;
36
46
  return merged;
37
47
  });
38
48
  const interaction = useInteractionStates({ isDisabled: () => control?.isDisabled.value });
49
+ const inputCount = shallowRef(0);
50
+ const onInput = (event) => {
51
+ control?.handlers.onInput(event);
52
+ const next = event.currentTarget.value;
53
+ emit("change", next);
54
+ emit("update:value", next);
55
+ if (props.value !== void 0) inputCount.value++;
56
+ };
57
+ /**
58
+ * Put the text back to what the caller holds, reset source included. A `value` set on the control
59
+ * makes the caller the owner of it, and a caller that keeps it unchanged means the typing is
60
+ * rejected — but the browser has already moved the text, and Vapor skips writing `value` when the
61
+ * bound value has not changed, so nothing would put it back.
62
+ *
63
+ * Post-flush, because the value only settles once the listener that heard the change has updated
64
+ * whatever holds it. `immediate`, and with the element in the dependencies, because the reset
65
+ * source has to be there before a reset rather than after the first keystroke — `inputCount` alone
66
+ * never fires on a control nobody has typed into. See {@link setFormValue}.
67
+ */
68
+ watch([
69
+ element,
70
+ () => props.value,
71
+ inputCount
72
+ ], ([el, pinned]) => {
73
+ if (pinned === void 0) return;
74
+ setFormValue(el, pinned);
75
+ }, {
76
+ flush: "post",
77
+ immediate: true
78
+ });
79
+ watch(() => props.value !== void 0, (owned) => control?.setValueOwned(owned), { immediate: true });
39
80
  const onFocus = (event) => {
40
81
  interaction.onFocus();
41
82
  control?.handlers.onFocus(event);
@@ -48,7 +89,7 @@ var input_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
48
89
  const n0 = t0();
49
90
  on(n0, "blur", onBlur);
50
91
  on(n0, "focus", onFocus);
51
- on(n0, "input", (e) => unref(control)?.handlers.onInput(e));
92
+ on(n0, "input", onInput);
52
93
  on(n0, "keydown", (e) => unref(control)?.handlers.onKeydown(e));
53
94
  on(n0, "keyup", (e) => unref(control)?.handlers.onKeyup(e));
54
95
  on(n0, "pointerdown", (e) => unref(interaction).onPointerdown(e));
@@ -1,8 +1,19 @@
1
1
  import type { InputVariants } from "@ropav/styles";
2
2
  export interface InputRootProps {
3
3
  class?: string;
4
+ /**
5
+ * Text in the control. Set here it takes the control over from the surrounding field, so the
6
+ * caller owns the value even inside a `TextField` — exactly as a `value` prop does in React.
7
+ * Without a listener to go with it the text is pinned.
8
+ */
9
+ value?: string;
4
10
  /** Visual variant. Taken from the surrounding field when unset. @default "primary" */
5
11
  variant?: InputVariants["variant"];
12
+ /**
13
+ * How tall the control stands, matching a button of the same size. Taken from the surrounding
14
+ * field when unset. @default "md"
15
+ */
16
+ size?: InputVariants["size"];
6
17
  /** Whether the control stretches to fill its container. */
7
18
  fullWidth?: boolean;
8
19
  /**
@@ -13,6 +13,7 @@ export declare const InputGroup: ((__VLS_props: NonNullable<Awaited<typeof __VLS
13
13
  props: import('vue').PublicProps & {
14
14
  class?: string;
15
15
  variant?: import("@ropav/styles").InputGroupVariants["variant"];
16
+ size?: import("@ropav/styles").InputGroupVariants["size"];
16
17
  fullWidth?: boolean;
17
18
  isDisabled?: boolean;
18
19
  isInvalid?: boolean;
@@ -81,6 +82,7 @@ export declare const InputGroup: ((__VLS_props: NonNullable<Awaited<typeof __VLS
81
82
  props: import('vue').PublicProps & {
82
83
  class?: string;
83
84
  variant?: import("@ropav/styles").InputGroupVariants["variant"];
85
+ size?: import("@ropav/styles").InputGroupVariants["size"];
84
86
  fullWidth?: boolean;
85
87
  isDisabled?: boolean;
86
88
  isInvalid?: boolean;
@@ -12,6 +12,7 @@ var input_group_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*
12
12
  props: {
13
13
  class: {},
14
14
  variant: { default: void 0 },
15
+ size: { default: void 0 },
15
16
  fullWidth: {
16
17
  type: Boolean,
17
18
  default: void 0
@@ -38,10 +39,12 @@ var input_group_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*
38
39
  element.value = next instanceof HTMLDivElement ? next : null;
39
40
  };
40
41
  const resolvedVariant = computed(() => props.variant ?? textField?.variant.value);
42
+ const resolvedSize = computed(() => props.size ?? textField?.size.value);
41
43
  const resolvedIsDisabled = computed(() => props.isDisabled ?? control?.isDisabled.value ?? false);
42
44
  const resolvedIsInvalid = computed(() => props.isInvalid ?? control?.isInvalid.value ?? false);
43
45
  const slots = computed(() => inputGroupVariants({
44
46
  fullWidth: props.fullWidth,
47
+ size: resolvedSize.value,
45
48
  variant: resolvedVariant.value
46
49
  }));
47
50
  provideInputGroupContext({ slots });
@@ -3,6 +3,11 @@ export interface InputGroupRootProps {
3
3
  class?: string;
4
4
  /** Visual variant. Taken from the surrounding field when unset. @default "primary" */
5
5
  variant?: InputGroupVariants["variant"];
6
+ /**
7
+ * How tall the group stands, matching a button of the same size. Taken from the surrounding
8
+ * field when unset. @default "md"
9
+ */
10
+ size?: InputGroupVariants["size"];
6
11
  /** Whether the group stretches to fill its container. */
7
12
  fullWidth?: boolean;
8
13
  /**
@@ -18,14 +18,14 @@ export declare const InputOTP: ((__VLS_props: NonNullable<Awaited<typeof __VLS_s
18
18
  defaultValue?: string;
19
19
  pattern?: RegExp | string;
20
20
  placeholder?: string;
21
- textAlign?: import("../../index.js").InputOTPTextAlign;
21
+ textAlign?: import("./index.js").InputOTPTextAlign;
22
22
  inputMode?: string;
23
23
  autoComplete?: string;
24
24
  isDisabled?: boolean;
25
25
  isInvalid?: boolean;
26
26
  validationErrors?: string[];
27
27
  validationDetails?: import("../../index.js").ValidationDetails;
28
- pushPasswordManagerStrategy?: import("../../index.js").PushPasswordManagerStrategy;
28
+ pushPasswordManagerStrategy?: import("./index.js").PushPasswordManagerStrategy;
29
29
  pasteTransformer?: (pasted: string) => string;
30
30
  name?: string;
31
31
  form?: string;
@@ -85,14 +85,14 @@ export declare const InputOTP: ((__VLS_props: NonNullable<Awaited<typeof __VLS_s
85
85
  defaultValue?: string;
86
86
  pattern?: RegExp | string;
87
87
  placeholder?: string;
88
- textAlign?: import("../../index.js").InputOTPTextAlign;
88
+ textAlign?: import("./index.js").InputOTPTextAlign;
89
89
  inputMode?: string;
90
90
  autoComplete?: string;
91
91
  isDisabled?: boolean;
92
92
  isInvalid?: boolean;
93
93
  validationErrors?: string[];
94
94
  validationDetails?: import("../../index.js").ValidationDetails;
95
- pushPasswordManagerStrategy?: import("../../index.js").PushPasswordManagerStrategy;
95
+ pushPasswordManagerStrategy?: import("./index.js").PushPasswordManagerStrategy;
96
96
  pasteTransformer?: (pasted: string) => string;
97
97
  name?: string;
98
98
  form?: string;
@@ -156,5 +156,7 @@ export type { InputOTPRootProps, InputOTPRootProps as InputOTPProps, InputOTPGro
156
156
  export { REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, } from "../../composables/use-input-otp.js";
157
157
  export { provideInputOTPContext, useInputOTPContext } from "./input-otp.context.js";
158
158
  export type { InputOTPContext } from "./input-otp.context.js";
159
+ export type { InputOTPTextAlign } from "../../composables/use-input-otp.js";
160
+ export type { PushPasswordManagerStrategy } from "../../composables/use-password-manager-badge.js";
159
161
  export { inputOTPVariants } from "@ropav/styles";
160
162
  export type { InputOTPVariants } from "@ropav/styles";
@@ -18,6 +18,7 @@ export declare const Link: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup
18
18
  hrefLang?: string;
19
19
  isDisabled?: boolean;
20
20
  ariaCurrent?: import("./link.types.js").LinkCurrent;
21
+ routerOptions?: unknown;
21
22
  ariaLabel?: string;
22
23
  ariaLabelledby?: string;
23
24
  ariaDescribedby?: string;
@@ -73,6 +74,7 @@ export declare const Link: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup
73
74
  hrefLang?: string;
74
75
  isDisabled?: boolean;
75
76
  ariaCurrent?: import("./link.types.js").LinkCurrent;
77
+ routerOptions?: unknown;
76
78
  ariaLabel?: string;
77
79
  ariaLabelledby?: string;
78
80
  ariaDescribedby?: string;
@@ -2,7 +2,9 @@ import { dataAttr } from "../../utils/assertion.js";
2
2
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
3
3
  import { usePress } from "../../composables/use-press.js";
4
4
  import { provideLinkContext } from "./link.context.js";
5
+ import { openLink } from "../../utils/open-link.js";
5
6
  import { useFieldsetContext } from "../fieldset/fieldset.context.js";
7
+ import { useRouterContext } from "../router-provider/router-provider.context.js";
6
8
  import { computed, createIf, createSlot, defineVaporComponent, on, renderEffect, setAttr, setClass, setInsertionState, setProp, template, unref } from "vue";
7
9
  import { linkVariants } from "@ropav/styles";
8
10
  //#region src/components/link/link-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
@@ -30,6 +32,7 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
30
32
  type: [Boolean, String],
31
33
  default: void 0
32
34
  },
35
+ routerOptions: { default: void 0 },
33
36
  ariaLabel: {},
34
37
  ariaLabelledby: {},
35
38
  ariaDescribedby: {}
@@ -39,6 +42,7 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
39
42
  const props = __props;
40
43
  const emit = __emit;
41
44
  const fieldset = useFieldsetContext();
45
+ const router = useRouterContext();
42
46
  const resolvedIsDisabled = computed(() => Boolean(props.isDisabled ?? fieldset?.isDisabled.value));
43
47
  const slots = computed(() => linkVariants());
44
48
  provideLinkContext({ slots });
@@ -51,7 +55,12 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
51
55
  const isAnchor = computed(() => Boolean(props.href) && !resolvedIsDisabled.value);
52
56
  const role = computed(() => isAnchor.value ? void 0 : "link");
53
57
  const tabindex = computed(() => resolvedIsDisabled.value ? void 0 : 0);
54
- const isCurrent = computed(() => Boolean(props.ariaCurrent));
58
+ const ariaCurrent = computed(() => {
59
+ if (props.ariaCurrent !== "auto") return props.ariaCurrent;
60
+ return props.href && router?.isCurrent(props.href) ? "page" : void 0;
61
+ });
62
+ const isCurrent = computed(() => Boolean(ariaCurrent.value));
63
+ const resolvedHref = computed(() => props.href === void 0 ? void 0 : router?.resolveHref(props.href) ?? props.href);
55
64
  const onPointerenter = (event) => {
56
65
  interaction.onPointerenter(event);
57
66
  press.handlers.onPointerenter(event);
@@ -60,13 +69,21 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
60
69
  interaction.onPointerleave();
61
70
  press.handlers.onPointerleave(event);
62
71
  };
72
+ const onClick = (event) => {
73
+ press.handlers.onClick(event);
74
+ openLink(event, {
75
+ href: props.href,
76
+ router,
77
+ routerOptions: props.routerOptions
78
+ });
79
+ };
63
80
  return createIf(() => isAnchor.value, () => {
64
81
  const n3 = t0();
65
82
  renderEffect(() => {
66
83
  const _props = props;
67
84
  const _dataAttr = unref(dataAttr);
68
85
  const _interaction = unref(interaction);
69
- setAttr(n3, "aria-current", _props.ariaCurrent);
86
+ setAttr(n3, "aria-current", ariaCurrent.value);
70
87
  setAttr(n3, "aria-describedby", _props.ariaDescribedby);
71
88
  setAttr(n3, "aria-label", _props.ariaLabel);
72
89
  setAttr(n3, "aria-labelledby", _props.ariaLabelledby);
@@ -77,7 +94,7 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
77
94
  setAttr(n3, "data-hovered", _dataAttr(_interaction.isHovered.value));
78
95
  setAttr(n3, "data-pressed", _dataAttr(unref(press).isPressed.value));
79
96
  setProp(n3, "download", _props.download);
80
- setProp(n3, "href", _props.href);
97
+ setProp(n3, "href", resolvedHref.value);
81
98
  setProp(n3, "hreflang", _props.hrefLang);
82
99
  setProp(n3, "ping", _props.ping);
83
100
  setProp(n3, "referrerpolicy", _props.referrerPolicy);
@@ -95,7 +112,7 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
95
112
  isPressed: () => unref(press).isPressed.value
96
113
  });
97
114
  on(n3, "blur", (e) => unref(interaction).onBlur(e));
98
- on(n3, "click", (e) => unref(press).handlers.onClick(e));
115
+ on(n3, "click", onClick);
99
116
  on(n3, "dragstart", (e) => unref(press).handlers.onDragstart(e));
100
117
  on(n3, "focus", (e) => unref(interaction).onFocus(e));
101
118
  on(n3, "keydown", (e) => unref(press).handlers.onKeydown(e));
@@ -112,7 +129,7 @@ var link_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
112
129
  const _resolvedIsDisabled = resolvedIsDisabled.value;
113
130
  const _dataAttr = unref(dataAttr);
114
131
  const _interaction = unref(interaction);
115
- setAttr(n6, "aria-current", _props.ariaCurrent);
132
+ setAttr(n6, "aria-current", ariaCurrent.value);
116
133
  setAttr(n6, "aria-describedby", _props.ariaDescribedby);
117
134
  setAttr(n6, "aria-disabled", _resolvedIsDisabled || void 0);
118
135
  setAttr(n6, "aria-label", _props.ariaLabel);
@@ -1,7 +1,13 @@
1
1
  /** What the browser accepts for `referrerpolicy` on an anchor. */
2
2
  export type LinkReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url";
3
- /** What assistive technology accepts for `aria-current`. */
4
- export type LinkCurrent = boolean | "date" | "false" | "location" | "page" | "step" | "time" | "true";
3
+ /**
4
+ * What assistive technology accepts for `aria-current`, plus `"auto"`.
5
+ *
6
+ * `"auto"` is not an ARIA token and never reaches the DOM. It asks the router supplied by
7
+ * `RouterProvider` whether this link's href addresses the route showing now, resolving to
8
+ * `"page"` when it does and to nothing at all when it does not — or when no router was supplied.
9
+ */
10
+ export type LinkCurrent = boolean | "auto" | "date" | "false" | "location" | "page" | "step" | "time" | "true";
5
11
  export interface LinkRootProps {
6
12
  class?: string;
7
13
  /** Where the link goes. Without one the link renders as a span with a link role. */
@@ -17,8 +23,13 @@ export interface LinkRootProps {
17
23
  * there is no href for the browser to follow, matching React.
18
24
  */
19
25
  isDisabled?: boolean;
20
- /** Marks the link as the one for the current page. */
26
+ /** Marks the link as the one for the current page. `"auto"` asks the router instead. */
21
27
  ariaCurrent?: LinkCurrent;
28
+ /**
29
+ * Passed through to the router's `navigate` alongside the href, for whatever options the
30
+ * application's router accepts. Ignored without a `RouterProvider` above.
31
+ */
32
+ routerOptions?: unknown;
22
33
  ariaLabel?: string;
23
34
  ariaLabelledby?: string;
24
35
  ariaDescribedby?: string;
@@ -1,5 +1,5 @@
1
- import type { DragCollection } from "../utils/dnd-types.js";
2
- import type { UseCollectionReturn } from "./use-collection.js";
1
+ import type { UseCollectionReturn } from "../../composables/use-collection.js";
2
+ import type { DragCollection } from "../../utils/dnd-types.js";
3
3
  /**
4
4
  * A `DragCollection` over an ordinary flat collection.
5
5
  *
@@ -1,4 +1,4 @@
1
- //#region src/composables/drag-collection.ts
1
+ //#region src/components/list-box/drag-collection.ts
2
2
  /**
3
3
  * A `DragCollection` over an ordinary flat collection.
4
4
  *