ropav 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) 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/breadcrumbs/breadcrumbs-item.js +1 -0
  4. package/dist/components/breadcrumbs/index.d.ts +1 -0
  5. package/dist/components/calendar/index.d.ts +5 -3
  6. package/dist/components/calendar-year-picker/index.d.ts +4 -2
  7. package/dist/components/checkbox/checkbox-content.js +1 -1
  8. package/dist/components/color-field/index.d.ts +1 -0
  9. package/dist/components/color-input-group/color-input-group-root.js +2 -0
  10. package/dist/components/color-input-group/color-input-group.types.d.ts +2 -0
  11. package/dist/components/color-input-group/index.d.ts +2 -0
  12. package/dist/components/combo-box/combo-box-root.js +9 -2
  13. package/dist/components/combo-box/combo-box.types.d.ts +3 -0
  14. package/dist/components/combo-box/index.d.ts +3 -0
  15. package/dist/components/date-field/index.d.ts +1 -0
  16. package/dist/components/date-input-group/date-input-group-root.js +2 -0
  17. package/dist/components/date-input-group/date-input-group-segment.js +1 -1
  18. package/dist/components/date-input-group/date-input-group.types.d.ts +2 -0
  19. package/dist/{composables → components/date-input-group}/use-date-segment.d.ts +2 -2
  20. package/dist/{composables → components/date-input-group}/use-date-segment.js +9 -9
  21. package/dist/components/date-range-picker/date-range-picker-root.js +1 -1
  22. package/dist/components/date-range-picker/index.d.ts +15 -14
  23. package/dist/{composables → components/date-range-picker}/use-date-range-picker.d.ts +7 -7
  24. package/dist/{composables → components/date-range-picker}/use-date-range-picker.js +10 -10
  25. package/dist/components/drawer/drawer-dialog.js +1 -1
  26. package/dist/{composables → components/drawer}/use-drawer-drag.d.ts +1 -1
  27. package/dist/{composables → components/drawer}/use-drawer-drag.js +1 -1
  28. package/dist/components/dropdown/dropdown-menu.js +1 -0
  29. package/dist/components/dropdown/dropdown-submenu-trigger.js +1 -1
  30. package/dist/components/dropdown/index.d.ts +4 -2
  31. package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.js +1 -1
  32. package/dist/components/icons/icon-overlay-arrow.js +1 -1
  33. package/dist/components/index.d.ts +4 -0
  34. package/dist/components/input/index.d.ts +2 -0
  35. package/dist/components/input/input-root.js +3 -0
  36. package/dist/components/input/input.types.d.ts +5 -0
  37. package/dist/components/input-group/index.d.ts +2 -0
  38. package/dist/components/input-group/input-group-root.js +3 -0
  39. package/dist/components/input-group/input-group.types.d.ts +5 -0
  40. package/dist/components/input-otp/index.d.ts +6 -4
  41. package/dist/components/link/index.d.ts +2 -0
  42. package/dist/components/link/link-root.js +22 -5
  43. package/dist/components/link/link.types.d.ts +14 -3
  44. package/dist/{composables → components/list-box}/drag-collection.d.ts +2 -2
  45. package/dist/{composables → components/list-box}/drag-collection.js +1 -1
  46. package/dist/components/list-box/index.d.ts +4 -0
  47. package/dist/components/list-box/list-box-root.js +53 -32
  48. package/dist/components/list-box/list-box.types.d.ts +2 -0
  49. package/dist/components/menu/index.d.ts +2 -0
  50. package/dist/components/menu/menu-root.js +5 -1
  51. package/dist/components/menu/menu.types.d.ts +3 -0
  52. package/dist/components/number-field/index.d.ts +3 -0
  53. package/dist/components/number-field/number-field-root.js +2 -0
  54. package/dist/components/number-field/number-field.types.d.ts +2 -0
  55. package/dist/components/overlay/overlay-arrow.js +64 -11
  56. package/dist/components/radio/radio-content.js +1 -1
  57. package/dist/components/range-calendar/index.d.ts +18 -15
  58. package/dist/components/router-provider/index.d.ts +5 -0
  59. package/dist/components/router-provider/index.js +3 -0
  60. package/dist/components/router-provider/router-provider.context.d.ts +40 -0
  61. package/dist/components/router-provider/router-provider.context.js +16 -0
  62. package/dist/components/router-provider/router-provider.d.ts +21 -0
  63. package/dist/components/router-provider/router-provider.js +22 -0
  64. package/dist/components/router-provider/router-provider.types.d.ts +23 -0
  65. package/dist/components/scroll-shadow/use-scroll-shadow.js +25 -1
  66. package/dist/components/search-field/index.d.ts +2 -0
  67. package/dist/components/search-field/search-field-root.js +3 -1
  68. package/dist/components/search-field/search-field.types.d.ts +2 -0
  69. package/dist/{composables → components/search-field}/use-search-field.d.ts +2 -2
  70. package/dist/{composables → components/search-field}/use-search-field.js +3 -3
  71. package/dist/components/segmented-control/index.d.ts +134 -0
  72. package/dist/components/segmented-control/index.js +15 -0
  73. package/dist/components/segmented-control/segmented-control-indicator.d.ts +19 -0
  74. package/dist/components/segmented-control/segmented-control-indicator.js +36 -0
  75. package/dist/components/segmented-control/segmented-control-item.d.ts +21 -0
  76. package/dist/components/segmented-control/segmented-control-item.js +96 -0
  77. package/dist/components/segmented-control/segmented-control-root.d.ts +25 -0
  78. package/dist/components/segmented-control/segmented-control-root.js +112 -0
  79. package/dist/components/segmented-control/segmented-control-separator.d.ts +19 -0
  80. package/dist/components/segmented-control/segmented-control-separator.js +18 -0
  81. package/dist/components/segmented-control/segmented-control.context.d.ts +17 -0
  82. package/dist/components/segmented-control/segmented-control.context.js +12 -0
  83. package/dist/components/segmented-control/segmented-control.types.d.ts +67 -0
  84. package/dist/components/select/index.d.ts +3 -0
  85. package/dist/components/select/select-hidden-select.js +1 -1
  86. package/dist/components/select/select-root.js +2 -0
  87. package/dist/components/select/select.types.d.ts +2 -0
  88. package/dist/components/sidebar/index.d.ts +544 -0
  89. package/dist/components/sidebar/index.js +47 -0
  90. package/dist/components/sidebar/sidebar-collapsible-trigger.d.ts +21 -0
  91. package/dist/components/sidebar/sidebar-collapsible-trigger.js +70 -0
  92. package/dist/components/sidebar/sidebar-collapsible.d.ts +24 -0
  93. package/dist/components/sidebar/sidebar-collapsible.js +78 -0
  94. package/dist/components/sidebar/sidebar-content.d.ts +21 -0
  95. package/dist/components/sidebar/sidebar-content.js +37 -0
  96. package/dist/components/sidebar/sidebar-footer.d.ts +21 -0
  97. package/dist/components/sidebar/sidebar-footer.js +24 -0
  98. package/dist/components/sidebar/sidebar-group-label.d.ts +21 -0
  99. package/dist/components/sidebar/sidebar-group-label.js +32 -0
  100. package/dist/components/sidebar/sidebar-group.d.ts +21 -0
  101. package/dist/components/sidebar/sidebar-group.js +48 -0
  102. package/dist/components/sidebar/sidebar-header.d.ts +21 -0
  103. package/dist/components/sidebar/sidebar-header.js +24 -0
  104. package/dist/components/sidebar/sidebar-inset.d.ts +21 -0
  105. package/dist/components/sidebar/sidebar-inset.js +24 -0
  106. package/dist/components/sidebar/sidebar-item-icon.d.ts +21 -0
  107. package/dist/components/sidebar/sidebar-item-icon.js +20 -0
  108. package/dist/components/sidebar/sidebar-item-indicator.d.ts +21 -0
  109. package/dist/components/sidebar/sidebar-item-indicator.js +48 -0
  110. package/dist/components/sidebar/sidebar-item-label.d.ts +21 -0
  111. package/dist/components/sidebar/sidebar-item-label.js +28 -0
  112. package/dist/components/sidebar/sidebar-item-tooltip.d.ts +21 -0
  113. package/dist/components/sidebar/sidebar-item-tooltip.js +38 -0
  114. package/dist/components/sidebar/sidebar-item-trailing.d.ts +21 -0
  115. package/dist/components/sidebar/sidebar-item-trailing.js +28 -0
  116. package/dist/components/sidebar/sidebar-item.d.ts +23 -0
  117. package/dist/components/sidebar/sidebar-item.js +160 -0
  118. package/dist/components/sidebar/sidebar-panel.d.ts +21 -0
  119. package/dist/components/sidebar/sidebar-panel.js +88 -0
  120. package/dist/components/sidebar/sidebar-rail.d.ts +21 -0
  121. package/dist/components/sidebar/sidebar-rail.js +210 -0
  122. package/dist/components/sidebar/sidebar-root.d.ts +31 -0
  123. package/dist/components/sidebar/sidebar-root.js +138 -0
  124. package/dist/components/sidebar/sidebar-separator.d.ts +19 -0
  125. package/dist/components/sidebar/sidebar-separator.js +16 -0
  126. package/dist/components/sidebar/sidebar-sub-menu.d.ts +23 -0
  127. package/dist/components/sidebar/sidebar-sub-menu.js +40 -0
  128. package/dist/components/sidebar/sidebar-trigger.d.ts +21 -0
  129. package/dist/components/sidebar/sidebar-trigger.js +69 -0
  130. package/dist/components/sidebar/sidebar.context.d.ts +75 -0
  131. package/dist/components/sidebar/sidebar.context.js +30 -0
  132. package/dist/components/sidebar/sidebar.state.d.ts +73 -0
  133. package/dist/components/sidebar/sidebar.state.js +76 -0
  134. package/dist/components/sidebar/sidebar.storage.d.ts +8 -0
  135. package/dist/components/sidebar/sidebar.storage.js +45 -0
  136. package/dist/components/sidebar/sidebar.types.d.ts +259 -0
  137. package/dist/components/splitter/index.d.ts +143 -0
  138. package/dist/components/splitter/index.js +13 -0
  139. package/dist/components/splitter/splitter-handle.d.ts +21 -0
  140. package/dist/components/splitter/splitter-handle.js +209 -0
  141. package/dist/components/splitter/splitter-panel.d.ts +21 -0
  142. package/dist/components/splitter/splitter-panel.js +70 -0
  143. package/dist/components/splitter/splitter-root.d.ts +31 -0
  144. package/dist/components/splitter/splitter-root.js +152 -0
  145. package/dist/components/splitter/splitter.context.d.ts +15 -0
  146. package/dist/components/splitter/splitter.context.js +5 -0
  147. package/dist/components/splitter/splitter.state.d.ts +87 -0
  148. package/dist/components/splitter/splitter.state.js +322 -0
  149. package/dist/components/splitter/splitter.storage.d.ts +15 -0
  150. package/dist/components/splitter/splitter.storage.js +56 -0
  151. package/dist/components/splitter/splitter.types.d.ts +98 -0
  152. package/dist/components/switch/switch-content.js +1 -1
  153. package/dist/components/table/index.d.ts +10 -9
  154. package/dist/components/table/table-body.js +13 -13
  155. package/dist/components/table/table-cell.js +49 -46
  156. package/dist/components/table/table-column-resizer.js +1 -1
  157. package/dist/components/table/table-column.js +1 -1
  158. package/dist/components/table/table-content.js +37 -18
  159. package/dist/{composables → components/table}/table-drag-collection.d.ts +1 -1
  160. package/dist/{composables → components/table}/table-drag-collection.js +1 -1
  161. package/dist/components/table/table-drop-indicator.js +3 -1
  162. package/dist/components/table/table-resizable-container.d.ts +4 -5
  163. package/dist/components/table/table-row.js +45 -14
  164. package/dist/components/table/table-virtualizer-item.d.ts +2 -7
  165. package/dist/components/table/table-virtualizer-item.js +20 -9
  166. package/dist/components/table/table.context.d.ts +11 -3
  167. package/dist/components/table/table.types.d.ts +1 -1
  168. package/dist/{composables → components/table}/use-grid-keyboard.d.ts +3 -3
  169. package/dist/{composables → components/table}/use-grid-keyboard.js +57 -55
  170. package/dist/{composables → components/table}/use-grid-selection-announcement.d.ts +2 -2
  171. package/dist/{composables → components/table}/use-grid-selection-announcement.js +2 -2
  172. package/dist/{composables → components/table}/use-table-collection.d.ts +2 -2
  173. package/dist/{composables → components/table}/use-table-collection.js +4 -4
  174. package/dist/{composables → components/table}/use-table-column-layout.d.ts +13 -20
  175. package/dist/components/table/use-table-column-layout.js +115 -0
  176. package/dist/components/textarea/index.d.ts +2 -0
  177. package/dist/components/textarea/textarea-root.js +3 -0
  178. package/dist/components/textarea/textarea.types.d.ts +5 -0
  179. package/dist/components/textfield/index.d.ts +2 -0
  180. package/dist/components/textfield/textfield-root.js +5 -1
  181. package/dist/components/textfield/textfield.context.d.ts +2 -0
  182. package/dist/components/textfield/textfield.types.d.ts +5 -0
  183. package/dist/components/time-field/index.d.ts +1 -0
  184. package/dist/components/toast/index.d.ts +1 -0
  185. package/dist/components/toast/toast-default-content.js +1 -1
  186. package/dist/components/toolbar/index.d.ts +3 -2
  187. package/dist/components/tooltip/index.js +1 -1
  188. package/dist/components/tooltip/tooltip-root.js +1 -1
  189. package/dist/components/virtualizer/index.d.ts +3 -1
  190. package/dist/components/virtualizer/index.js +2 -1
  191. package/dist/components/virtualizer/use-virtualizer-item.d.ts +23 -0
  192. package/dist/components/virtualizer/use-virtualizer-item.js +45 -0
  193. package/dist/components/virtualizer/virtualizer-item.js +7 -41
  194. package/dist/components/virtualizer/virtualizer-scrollbar-track.d.ts +20 -0
  195. package/dist/components/virtualizer/virtualizer-scrollbar-track.js +141 -0
  196. package/dist/components/virtualizer/virtualizer-scrollbar.d.ts +18 -0
  197. package/dist/components/virtualizer/virtualizer-scrollbar.js +55 -0
  198. package/dist/components/virtualizer/virtualizer.context.d.ts +17 -1
  199. package/dist/composables/drag-manager.js +1 -13
  200. package/dist/composables/index.d.ts +3 -71
  201. package/dist/composables/use-collection.d.ts +22 -3
  202. package/dist/composables/use-collection.js +67 -14
  203. package/dist/composables/use-color-area.js +2 -2
  204. package/dist/composables/use-color-field.js +1 -1
  205. package/dist/composables/use-combo-box.js +1 -1
  206. package/dist/composables/use-date-field.js +1 -1
  207. package/dist/composables/use-drag-and-drop.js +1 -1
  208. package/dist/composables/use-drag.d.ts +6 -5
  209. package/dist/composables/use-draggable-item.d.ts +2 -2
  210. package/dist/composables/use-droppable-collection.js +2 -2
  211. package/dist/composables/use-droppable-item.js +1 -1
  212. package/dist/composables/use-form-reset.d.ts +6 -2
  213. package/dist/composables/use-form-reset.js +9 -5
  214. package/dist/composables/use-list-keyboard.js +64 -62
  215. package/dist/composables/use-number-field.js +1 -1
  216. package/dist/composables/use-select.js +2 -2
  217. package/dist/composables/use-selection-manager.js +4 -4
  218. package/dist/composables/use-single-select-list-state.d.ts +37 -0
  219. package/dist/composables/use-single-select-list-state.js +110 -0
  220. package/dist/composables/use-slider-thumb.js +2 -2
  221. package/dist/composables/use-slider.js +1 -1
  222. package/dist/composables/use-tab-list-state.d.ts +10 -29
  223. package/dist/composables/use-tab-list-state.js +10 -99
  224. package/dist/composables/use-text-field.js +1 -1
  225. package/dist/composables/use-virtualizer-scroll.d.ts +52 -2
  226. package/dist/composables/use-virtualizer-scroll.js +79 -13
  227. package/dist/composables/use-virtualizer.d.ts +24 -4
  228. package/dist/composables/use-virtualizer.js +40 -6
  229. package/dist/index.js +52 -80
  230. package/dist/utils/document-order.d.ts +14 -0
  231. package/dist/utils/document-order.js +17 -0
  232. package/dist/utils/flex-sizing.d.ts +41 -0
  233. package/dist/utils/flex-sizing.js +140 -0
  234. package/dist/utils/index.d.ts +2 -0
  235. package/dist/utils/open-link.d.ts +31 -0
  236. package/dist/utils/open-link.js +32 -0
  237. package/dist/utils/story-truncation.d.ts +20 -0
  238. package/dist/utils/story-users.d.ts +11 -0
  239. package/dist/utils/virtualizer-collection.d.ts +14 -4
  240. package/dist/utils/virtualizer-collection.js +9 -14
  241. package/dist/utils/virtualizer-layout-info.js +3 -2
  242. package/dist/utils/virtualizer-list-layout.d.ts +75 -29
  243. package/dist/utils/virtualizer-list-layout.js +182 -99
  244. package/dist/utils/virtualizer-offsets.d.ts +111 -0
  245. package/dist/utils/virtualizer-offsets.js +159 -0
  246. package/dist/utils/virtualizer-overscan.d.ts +9 -15
  247. package/dist/utils/virtualizer-overscan.js +14 -33
  248. package/dist/utils/virtualizer-table-layout.d.ts +50 -21
  249. package/dist/utils/virtualizer-table-layout.js +130 -89
  250. package/dist/version.js +1 -1
  251. package/package.json +19 -3
  252. package/dist/composables/use-table-column-layout.js +0 -214
  253. /package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.d.ts +0 -0
@@ -0,0 +1,15 @@
1
+ import { useSegmentedControlContext, useSegmentedControlItemContext } from "./segmented-control.context.js";
2
+ import segmented_control_indicator_default from "./segmented-control-indicator.js";
3
+ import segmented_control_item_default from "./segmented-control-item.js";
4
+ import segmented_control_root_default from "./segmented-control-root.js";
5
+ import segmented_control_separator_default from "./segmented-control-separator.js";
6
+ import { segmentedControlVariants } from "@ropav/styles";
7
+ //#region src/components/segmented-control/index.ts
8
+ var SegmentedControl = Object.assign(segmented_control_root_default, {
9
+ Indicator: segmented_control_indicator_default,
10
+ Item: segmented_control_item_default,
11
+ Root: segmented_control_root_default,
12
+ Separator: segmented_control_separator_default
13
+ });
14
+ //#endregion
15
+ export { SegmentedControl, segmented_control_indicator_default as SegmentedControlIndicator, segmented_control_item_default as SegmentedControlItem, segmented_control_root_default as SegmentedControlRoot, segmented_control_separator_default as SegmentedControlSeparator, segmentedControlVariants, useSegmentedControlContext, useSegmentedControlItemContext };
@@ -0,0 +1,19 @@
1
+ import type { SegmentedControlIndicatorProps } from "./segmented-control.types.js";
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<SegmentedControlIndicatorProps> & (typeof globalThis extends {
4
+ __VLS_PROPS_FALLBACK: infer P;
5
+ } ? P : {});
6
+ expose: (exposed: {}) => void;
7
+ attrs: any;
8
+ slots: {};
9
+ emit: {};
10
+ }>) => import('vue').VNode & {
11
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
12
+ };
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
16
+ [K in keyof T]: T[K];
17
+ } : {
18
+ [K in keyof T as K]: T[K];
19
+ }) & {};
@@ -0,0 +1,36 @@
1
+ import { composeSlotClassName } from "../../utils/compose.js";
2
+ import { dataAttr } from "../../utils/assertion.js";
3
+ import { useSharedElement, useSharedElementScope } from "../../composables/use-shared-element.js";
4
+ import { useSegmentedControlContext, useSegmentedControlItemContext } from "./segmented-control.context.js";
5
+ import { createIf, defineVaporComponent, renderEffect, setAttr, setClass, setStaticTemplateRef, shallowRef, template, unref } from "vue";
6
+ //#region src/components/segmented-control/segmented-control-indicator.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
+ var t0 = template("<span aria-hidden=true data-slot=segmented-control-indicator>", 1);
8
+ var segmented_control_indicator_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
9
+ __name: "segmented-control-indicator",
10
+ props: { class: {} },
11
+ setup(__props) {
12
+ const props = __props;
13
+ const { slots } = useSegmentedControlContext();
14
+ const { isSelected } = useSegmentedControlItemContext();
15
+ const element = shallowRef(null);
16
+ const { isEntering, isExiting, isPresent } = useSharedElement({
17
+ elementRef: element,
18
+ isVisible: () => isSelected.value,
19
+ name: "SelectionIndicator",
20
+ scope: useSharedElementScope()
21
+ });
22
+ return createIf(() => unref(isPresent), () => {
23
+ const n2 = t0();
24
+ setStaticTemplateRef(n2, element, null, "element");
25
+ renderEffect(() => {
26
+ const _dataAttr = unref(dataAttr);
27
+ setClass(n2, unref(composeSlotClassName)(unref(slots).indicator, props.class));
28
+ setAttr(n2, "data-entering", _dataAttr(unref(isEntering)));
29
+ setAttr(n2, "data-exiting", _dataAttr(unref(isExiting)));
30
+ });
31
+ return n2;
32
+ });
33
+ }
34
+ });
35
+ //#endregion
36
+ export { segmented_control_indicator_vue_vue_type_script_setup_true_vapor_true_lang_default as default };
@@ -0,0 +1,21 @@
1
+ import type { SegmentedControlItemProps, SegmentedControlItemSlotProps } from "./segmented-control.types.js";
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<SegmentedControlItemProps> & (typeof globalThis extends {
4
+ __VLS_PROPS_FALLBACK: infer P;
5
+ } ? P : {});
6
+ expose: (exposed: {}) => void;
7
+ attrs: any;
8
+ slots: {
9
+ default?: (props: SegmentedControlItemSlotProps) => unknown;
10
+ };
11
+ emit: {};
12
+ }>) => import('vue').VNode & {
13
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
14
+ };
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
17
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
18
+ [K in keyof T]: T[K];
19
+ } : {
20
+ [K in keyof T as K]: T[K];
21
+ }) & {};
@@ -0,0 +1,96 @@
1
+ import { dataAttr } from "../../utils/assertion.js";
2
+ import { useInteractionStates } from "../../composables/use-interaction-states.js";
3
+ import { getCollectionTextValue } from "../../utils/text-value.js";
4
+ import { provideSegmentedControlItemContext, useSegmentedControlContext } from "./segmented-control.context.js";
5
+ import { computed, createSlot, defineVaporComponent, on, renderEffect, setAttr, setClass, setInsertionState, setProp, setStaticTemplateRef, shallowRef, template, unref, watch } from "vue";
6
+ //#region src/components/segmented-control/segmented-control-item.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
+ var t0 = template("<button data-slot=segmented-control-item role=radio type=button>", 1);
8
+ var segmented_control_item_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
9
+ __name: "segmented-control-item",
10
+ props: {
11
+ class: {},
12
+ id: {},
13
+ isDisabled: {
14
+ type: Boolean,
15
+ default: void 0
16
+ },
17
+ textValue: {},
18
+ ariaLabel: {}
19
+ },
20
+ setup(__props) {
21
+ const props = __props;
22
+ const { isDisabled: isControlDisabled, keyboard, slots, state } = useSegmentedControlContext();
23
+ const itemKey = computed(() => props.id);
24
+ const element = shallowRef(null);
25
+ watch(element, (current, _previous, onCleanup) => {
26
+ if (!current) return;
27
+ onCleanup(state.collection.register(itemKey.value, {
28
+ element: () => element.value,
29
+ isDisabled: () => Boolean(props.isDisabled),
30
+ textValue: () => props.textValue ?? getCollectionTextValue(element.value)
31
+ }));
32
+ }, {
33
+ flush: "post",
34
+ immediate: true
35
+ });
36
+ const isSelected = computed(() => state.selectedKey.value === itemKey.value);
37
+ const isDisabled = computed(() => isControlDisabled.value || state.selection.isDisabled(itemKey.value));
38
+ const { isFocusVisible, isFocused, isHovered, isPressed, onBlur, onFocus, onPointerdown: onPointerdownState, onPointerenter, onPointerleave } = useInteractionStates({ isDisabled: () => isDisabled.value });
39
+ provideSegmentedControlItemContext({ isSelected });
40
+ const choose = () => {
41
+ if (isDisabled.value) return;
42
+ keyboard.focusKey(itemKey.value);
43
+ state.selection.replaceSelection(itemKey.value);
44
+ };
45
+ const onPointerdown = (event) => {
46
+ onPointerdownState(event);
47
+ if (event.button !== 0) return;
48
+ choose();
49
+ };
50
+ const onKeydown = (event) => {
51
+ if (event.key !== "Enter" && event.key !== " ") return;
52
+ event.preventDefault();
53
+ event.stopPropagation();
54
+ choose();
55
+ };
56
+ const n1 = t0();
57
+ renderEffect(() => {
58
+ const _isSelected = isSelected.value;
59
+ const _props = props;
60
+ const _dataAttr = unref(dataAttr);
61
+ const _isDisabled = isDisabled.value;
62
+ const _itemKey = itemKey.value;
63
+ setAttr(n1, "aria-checked", _isSelected);
64
+ setAttr(n1, "aria-label", _props.ariaLabel);
65
+ setClass(n1, unref(slots).item({ class: _props.class }));
66
+ setAttr(n1, "data-disabled", _dataAttr(_isDisabled));
67
+ setAttr(n1, "data-focus-visible", _dataAttr(unref(isFocusVisible)));
68
+ setAttr(n1, "data-focused", _dataAttr(unref(isFocused)));
69
+ setAttr(n1, "data-hovered", _dataAttr(unref(isHovered)));
70
+ setAttr(n1, "data-key", _itemKey);
71
+ setAttr(n1, "data-pressed", _dataAttr(unref(isPressed)));
72
+ setAttr(n1, "data-selected", _dataAttr(_isSelected));
73
+ setProp(n1, "disabled", _isDisabled || void 0);
74
+ setProp(n1, "tabindex", _isDisabled ? void 0 : unref(keyboard).itemTabIndex(_itemKey));
75
+ });
76
+ setInsertionState(n1);
77
+ createSlot("default", {
78
+ isDisabled: () => isDisabled.value,
79
+ isFocusVisible: () => unref(isFocusVisible),
80
+ isFocused: () => unref(isFocused),
81
+ isHovered: () => unref(isHovered),
82
+ isPressed: () => unref(isPressed),
83
+ isSelected: () => isSelected.value
84
+ });
85
+ on(n1, "blur", (e) => unref(onBlur)(e));
86
+ on(n1, "focus", (e) => unref(onFocus)(e));
87
+ on(n1, "keydown", onKeydown);
88
+ on(n1, "pointerdown", onPointerdown);
89
+ on(n1, "pointerenter", (e) => unref(onPointerenter)(e));
90
+ on(n1, "pointerleave", (e) => unref(onPointerleave)(e));
91
+ setStaticTemplateRef(n1, element, null, "element");
92
+ return n1;
93
+ }
94
+ });
95
+ //#endregion
96
+ export { segmented_control_item_vue_vue_type_script_setup_true_vapor_true_lang_default as default };
@@ -0,0 +1,25 @@
1
+ import type { CollectionKey } from "../../composables/use-collection.js";
2
+ import type { SegmentedControlRootProps, SegmentedControlRootSlotProps } from "./segmented-control.types.js";
3
+ 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<{
4
+ props: import('vue').PublicProps & __VLS_PrettifyLocal<SegmentedControlRootProps & {
5
+ onSelectionChange?: ((key: CollectionKey) => any) | undefined;
6
+ "onUpdate:selectedKey"?: ((key: CollectionKey) => any) | undefined;
7
+ }> & (typeof globalThis extends {
8
+ __VLS_PROPS_FALLBACK: infer P;
9
+ } ? P : {});
10
+ expose: (exposed: {}) => void;
11
+ attrs: any;
12
+ slots: {
13
+ default?: (props: SegmentedControlRootSlotProps) => unknown;
14
+ };
15
+ emit: ((evt: "selectionChange", key: CollectionKey) => void) & ((evt: "update:selectedKey", key: CollectionKey) => void);
16
+ }>) => import('vue').VNode & {
17
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
18
+ };
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
22
+ [K in keyof T]: T[K];
23
+ } : {
24
+ [K in keyof T as K]: T[K];
25
+ }) & {};
@@ -0,0 +1,112 @@
1
+ import { dataAttr } from "../../utils/assertion.js";
2
+ import { useListKeyboard } from "../../composables/use-list-keyboard.js";
3
+ import { createSharedElementScope, provideSharedElementScope } from "../../composables/use-shared-element.js";
4
+ import { provideSegmentedControlContext } from "./segmented-control.context.js";
5
+ import { useSingleSelectListState } from "../../composables/use-single-select-list-state.js";
6
+ import { computed, createSlot, defineVaporComponent, on, renderEffect, setAttr, setClass, setInsertionState, setStaticTemplateRef, shallowRef, template, unref } from "vue";
7
+ import { segmentedControlVariants } from "@ropav/styles";
8
+ //#region src/components/segmented-control/segmented-control-root.vue?vue&type=script&setup=true&vapor=true&lang.ts
9
+ var t0 = template("<div data-slot=segmented-control role=radiogroup>", 1);
10
+ var segmented_control_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
11
+ __name: "segmented-control-root",
12
+ props: {
13
+ class: {},
14
+ size: { default: void 0 },
15
+ fullWidth: {
16
+ type: Boolean,
17
+ default: void 0
18
+ },
19
+ selectedKey: {},
20
+ defaultSelectedKey: {},
21
+ disabledKeys: {},
22
+ isDisabled: {
23
+ type: Boolean,
24
+ default: void 0
25
+ },
26
+ ariaLabel: {},
27
+ ariaLabelledby: {},
28
+ ariaDescribedby: {},
29
+ onSelectionChange: {}
30
+ },
31
+ emits: ["selectionChange", "update:selectedKey"],
32
+ setup(__props, { emit: __emit }) {
33
+ const props = __props;
34
+ const emit = __emit;
35
+ const orientation = computed(() => "horizontal");
36
+ const isDisabled = computed(() => Boolean(props.isDisabled));
37
+ const slots = computed(() => segmentedControlVariants({
38
+ fullWidth: props.fullWidth,
39
+ size: props.size
40
+ }));
41
+ const state = useSingleSelectListState({
42
+ defaultSelectedKey: props.defaultSelectedKey,
43
+ disabledKeys: () => props.disabledKeys,
44
+ isDisabled: () => props.isDisabled,
45
+ onSelectionChange: (key) => {
46
+ props.onSelectionChange?.(key);
47
+ emit("selectionChange", key);
48
+ emit("update:selectedKey", key);
49
+ },
50
+ selectedKey: () => props.selectedKey
51
+ });
52
+ const element = shallowRef(null);
53
+ const keyboard = useListKeyboard({
54
+ collection: state.collection,
55
+ disallowActivation: true,
56
+ element,
57
+ escapeKeyBehavior: "none",
58
+ layout: "stack",
59
+ orientation: () => orientation.value,
60
+ selection: state.selection,
61
+ selectOnFocus: true,
62
+ shouldFocusWrap: true
63
+ });
64
+ /**
65
+ * The keys a segmented control has no answer for.
66
+ *
67
+ * It has no notion of a page, and the delegate would answer PageUp and PageDown by jumping to an
68
+ * end — surprising, and a scroll the page should have had.
69
+ *
70
+ * The block arrows are deliberately not filtered, which is the one place this parts company with
71
+ * `tabs-list.vue`. A radio group answers all four arrows whatever its axis, and a horizontal
72
+ * stack already routes ArrowDown to the next key and ArrowUp to the previous.
73
+ */
74
+ const onKeydown = (event) => {
75
+ if (event.key === "PageUp" || event.key === "PageDown") return;
76
+ keyboard.onKeydown(event);
77
+ };
78
+ provideSharedElementScope(createSharedElementScope());
79
+ provideSegmentedControlContext({
80
+ isDisabled,
81
+ keyboard,
82
+ slots,
83
+ state
84
+ });
85
+ const n1 = t0();
86
+ renderEffect(() => {
87
+ const _props = props;
88
+ const _isDisabled = isDisabled.value;
89
+ const _orientation = orientation.value;
90
+ setAttr(n1, "aria-describedby", _props.ariaDescribedby);
91
+ setAttr(n1, "aria-disabled", _isDisabled || void 0);
92
+ setAttr(n1, "aria-label", _props.ariaLabel);
93
+ setAttr(n1, "aria-labelledby", _props.ariaLabelledby);
94
+ setAttr(n1, "aria-orientation", _orientation);
95
+ setClass(n1, slots.value.base({ class: _props.class }));
96
+ setAttr(n1, "data-disabled", unref(dataAttr)(_isDisabled));
97
+ setAttr(n1, "data-orientation", _orientation);
98
+ });
99
+ setInsertionState(n1);
100
+ createSlot("default", {
101
+ isDisabled: () => isDisabled.value,
102
+ selectedKey: () => unref(state).selectedKey.value
103
+ });
104
+ on(n1, "focusin", (e) => unref(keyboard).onFocusin(e));
105
+ on(n1, "focusout", (e) => unref(keyboard).onFocusout(e));
106
+ on(n1, "keydown", onKeydown);
107
+ setStaticTemplateRef(n1, element, null, "element");
108
+ return n1;
109
+ }
110
+ });
111
+ //#endregion
112
+ export { segmented_control_root_vue_vue_type_script_setup_true_vapor_true_lang_default as default };
@@ -0,0 +1,19 @@
1
+ import type { SegmentedControlSeparatorProps } from "./segmented-control.types.js";
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<SegmentedControlSeparatorProps> & (typeof globalThis extends {
4
+ __VLS_PROPS_FALLBACK: infer P;
5
+ } ? P : {});
6
+ expose: (exposed: {}) => void;
7
+ attrs: any;
8
+ slots: {};
9
+ emit: {};
10
+ }>) => import('vue').VNode & {
11
+ __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
12
+ };
13
+ declare const _default: typeof __VLS_export;
14
+ export default _default;
15
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
16
+ [K in keyof T]: T[K];
17
+ } : {
18
+ [K in keyof T as K]: T[K];
19
+ }) & {};
@@ -0,0 +1,18 @@
1
+ import { composeSlotClassName } from "../../utils/compose.js";
2
+ import { useSegmentedControlContext } from "./segmented-control.context.js";
3
+ import { defineVaporComponent, renderEffect, setClass, template, unref } from "vue";
4
+ //#region src/components/segmented-control/segmented-control-separator.vue?vue&type=script&setup=true&vapor=true&lang.ts
5
+ var t0 = template("<span aria-hidden=true data-slot=segmented-control-separator>", 1);
6
+ var segmented_control_separator_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
7
+ __name: "segmented-control-separator",
8
+ props: { class: {} },
9
+ setup(__props) {
10
+ const props = __props;
11
+ const { slots } = useSegmentedControlContext();
12
+ const n0 = t0();
13
+ renderEffect(() => setClass(n0, unref(composeSlotClassName)(unref(slots).separator, props.class)));
14
+ return n0;
15
+ }
16
+ });
17
+ //#endregion
18
+ export { segmented_control_separator_vue_vue_type_script_setup_true_vapor_true_lang_default as default };
@@ -0,0 +1,17 @@
1
+ import type { UseListKeyboardReturn } from "../../composables/use-list-keyboard.js";
2
+ import type { UseSingleSelectListStateReturn } from "../../composables/use-single-select-list-state.js";
3
+ import type { segmentedControlVariants } from "@ropav/styles";
4
+ import type { ComputedRef } from "vue";
5
+ export interface SegmentedControlContext {
6
+ slots: ComputedRef<ReturnType<typeof segmentedControlVariants>>;
7
+ isDisabled: ComputedRef<boolean>;
8
+ /** Which segment is selected, and the collection it is selected from. */
9
+ state: UseSingleSelectListStateReturn;
10
+ keyboard: UseListKeyboardReturn;
11
+ }
12
+ export declare const useSegmentedControlContext: () => SegmentedControlContext, provideSegmentedControlContext: (value: SegmentedControlContext) => SegmentedControlContext;
13
+ export interface SegmentedControlItemContext {
14
+ /** Read by the indicator, which is rendered inside the segment it belongs to. */
15
+ isSelected: ComputedRef<boolean>;
16
+ }
17
+ export declare const useSegmentedControlItemContext: () => SegmentedControlItemContext, provideSegmentedControlItemContext: (value: SegmentedControlItemContext) => SegmentedControlItemContext;
@@ -0,0 +1,12 @@
1
+ import { createContext } from "../../utils/create-context.js";
2
+ //#region src/components/segmented-control/segmented-control.context.ts
3
+ var [useSegmentedControlContext, provideSegmentedControlContext] = createContext({
4
+ errorMessage: "A segment has to be rendered inside a SegmentedControl: it takes its selection and its place in the keyboard order from the control.",
5
+ name: "SegmentedControlContext"
6
+ });
7
+ var [useSegmentedControlItemContext, provideSegmentedControlItemContext] = createContext({
8
+ errorMessage: "A segmented control's indicator has to be rendered inside a segment.",
9
+ name: "SegmentedControlItemContext"
10
+ });
11
+ //#endregion
12
+ export { provideSegmentedControlContext, provideSegmentedControlItemContext, useSegmentedControlContext, useSegmentedControlItemContext };
@@ -0,0 +1,67 @@
1
+ import type { CollectionKey } from "../../composables/use-collection.js";
2
+ import type { SegmentedControlVariants } from "@ropav/styles";
3
+ export type SegmentedControlOrientation = "horizontal";
4
+ export interface SegmentedControlRootProps {
5
+ class?: string;
6
+ /**
7
+ * The control's scale.
8
+ *
9
+ * The track lands on 32/36/40px, the three heights a button and a field stand at, so a
10
+ * segmented control lines up with either.
11
+ *
12
+ * @default "md"
13
+ */
14
+ size?: SegmentedControlVariants["size"];
15
+ /** Stretches the track across its container and shares the width between the segments. */
16
+ fullWidth?: boolean;
17
+ /** The selected segment, when the caller drives it. */
18
+ selectedKey?: CollectionKey;
19
+ /** The initially selected segment. Falls back to the first segment that is not disabled. */
20
+ defaultSelectedKey?: CollectionKey;
21
+ disabledKeys?: CollectionKey[];
22
+ /** Disables every segment: a selection that stays visible but cannot be moved. */
23
+ isDisabled?: boolean;
24
+ /**
25
+ * Names the control, which has no visible label of its own.
26
+ *
27
+ * Declared under this name because Vue normalises prop names, so a hyphenated one never
28
+ * resolves — it is mapped back to `aria-label` at the binding.
29
+ */
30
+ ariaLabel?: string;
31
+ ariaLabelledby?: string;
32
+ ariaDescribedby?: string;
33
+ onSelectionChange?: (key: CollectionKey) => void;
34
+ }
35
+ export interface SegmentedControlRootSlotProps {
36
+ selectedKey: CollectionKey | null;
37
+ isDisabled: boolean;
38
+ }
39
+ export interface SegmentedControlItemProps {
40
+ class?: string;
41
+ /**
42
+ * Identifies the segment, and is what the selection reports.
43
+ *
44
+ * Deliberately does not reach the DOM as an `id`, so two controls that both hold a `"weekly"`
45
+ * segment cannot collide. It surfaces as `data-key` instead.
46
+ */
47
+ id: CollectionKey;
48
+ isDisabled?: boolean;
49
+ /** What typeahead and assistive technology read, when the rendered text will not do. */
50
+ textValue?: string;
51
+ /** Names the segment, for one drawn as an icon with no text beside it. */
52
+ ariaLabel?: string;
53
+ }
54
+ export interface SegmentedControlItemSlotProps {
55
+ isSelected: boolean;
56
+ isDisabled: boolean;
57
+ isFocused: boolean;
58
+ isFocusVisible: boolean;
59
+ isHovered: boolean;
60
+ isPressed: boolean;
61
+ }
62
+ export interface SegmentedControlIndicatorProps {
63
+ class?: string;
64
+ }
65
+ export interface SegmentedControlSeparatorProps {
66
+ class?: string;
67
+ }
@@ -38,6 +38,7 @@ export declare const Select: (<T>(__VLS_props: NonNullable<Awaited<typeof __VLS_
38
38
  ariaLabelledby?: string;
39
39
  ariaDescribedby?: string;
40
40
  variant?: import("@ropav/styles").SelectVariants["variant"];
41
+ size?: import("@ropav/styles").SelectVariants["size"];
41
42
  fullWidth?: boolean;
42
43
  onChange?: ((value: import("../../index.js").SelectedValue) => any) | undefined;
43
44
  onFocusChange?: ((isFocused: boolean) => any) | undefined;
@@ -140,6 +141,7 @@ export declare const Select: (<T>(__VLS_props: NonNullable<Awaited<typeof __VLS_
140
141
  ariaLabelledby?: string;
141
142
  ariaDescribedby?: string;
142
143
  variant?: import("@ropav/styles").SelectVariants["variant"];
144
+ size?: import("@ropav/styles").SelectVariants["size"];
143
145
  fullWidth?: boolean;
144
146
  onChange?: ((value: import("../../index.js").SelectedValue) => any) | undefined;
145
147
  onFocusChange?: ((isFocused: boolean) => any) | undefined;
@@ -205,5 +207,6 @@ export { SelectIndicator, SelectPopover, SelectRoot, SelectTrigger, SelectValue
205
207
  export type { SelectIndicatorProps, SelectPopoverProps, SelectRootProps, SelectRootProps as SelectProps, SelectRootSlotProps, SelectTriggerProps, SelectValueProps, SelectValueSlotProps, } from "./select.types.js";
206
208
  export { useSelectContext } from "./select.context.js";
207
209
  export type { SelectContext } from "./select.context.js";
210
+ export type { UseSelectReturn } from "../../composables/use-select.js";
208
211
  export { selectVariants } from "@ropav/styles";
209
212
  export type { SelectVariants } from "@ropav/styles";
@@ -51,7 +51,7 @@ var select_hidden_select_vue_vue_type_script_setup_true_vapor_true_lang_default
51
51
  return (Array.isArray(current) ? current : [current]).map(String);
52
52
  });
53
53
  const value = computed(() => isMultiple.value ? values.value : values.value[0] ?? "");
54
- useFormReset(element, state.defaultValue, state.setValue);
54
+ useFormReset(element, state.defaultValue, state.setValue, () => props.form);
55
55
  useFormValidation(element, state, { focus: () => select.triggerElement.value?.focus() });
56
56
  const defaultValues = computed(() => {
57
57
  const initial = state.defaultValue.value;
@@ -63,6 +63,7 @@ var select_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PU
63
63
  ariaLabelledby: {},
64
64
  ariaDescribedby: {},
65
65
  variant: {},
66
+ size: {},
66
67
  fullWidth: {
67
68
  type: Boolean,
68
69
  default: void 0
@@ -129,6 +130,7 @@ var select_root_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PU
129
130
  });
130
131
  const styles = computed(() => selectVariants({
131
132
  fullWidth: props.fullWidth,
133
+ size: props.size,
132
134
  variant: props.variant
133
135
  }));
134
136
  provideFieldIdsContext(select.fieldIds.context);
@@ -60,6 +60,8 @@ export interface SelectRootProps<T = unknown> {
60
60
  ariaLabelledby?: string;
61
61
  ariaDescribedby?: string;
62
62
  variant?: SelectVariants["variant"];
63
+ /** How tall the trigger stands, matching a button of the same size. @default "md" */
64
+ size?: SelectVariants["size"];
63
65
  fullWidth?: boolean;
64
66
  }
65
67
  export interface SelectRootSlotProps {