ropav 0.1.5 → 0.1.7

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 (235) hide show
  1. package/README.md +10 -0
  2. package/dist/accordion.css +17 -17
  3. package/dist/accordion.js +125 -154
  4. package/dist/alert.css +18 -18
  5. package/dist/alert.js +20 -20
  6. package/dist/aria.js +14 -0
  7. package/dist/aspect-ratio.js +1 -1
  8. package/dist/attributes.js +9 -0
  9. package/dist/attributes2.js +29 -0
  10. package/dist/avatar.css +19 -19
  11. package/dist/avatar.js +10 -18
  12. package/dist/badge.css +16 -16
  13. package/dist/badge.js +6 -6
  14. package/dist/base.css +18 -13
  15. package/dist/button-group.js +1 -1
  16. package/dist/button-link.js +13 -14
  17. package/dist/button.css +32 -27
  18. package/dist/button.js +13 -14
  19. package/dist/{useButtonColor.js → button.scss_vue_type_style_index_0_src_true_lang.js} +3 -2
  20. package/dist/card.js +1 -1
  21. package/dist/checkbox.css +32 -32
  22. package/dist/checkbox.js +23 -29
  23. package/dist/collapse.css +6 -6
  24. package/dist/collapse.js +8 -7
  25. package/dist/collectionNavigation.js +2 -99
  26. package/dist/color-input.css +19 -19
  27. package/dist/color-input.js +15 -14
  28. package/dist/color-picker.css +40 -40
  29. package/dist/color-picker.js +222 -202
  30. package/dist/color-picker2.js +1 -9
  31. package/dist/color-swatch.css +4 -4
  32. package/dist/color-swatch.js +7 -9
  33. package/dist/color.js +5 -10
  34. package/dist/componentColors.js +165 -84
  35. package/dist/componentRef.js +26 -0
  36. package/dist/components/accordion/accordionContext.d.ts +3 -0
  37. package/dist/components/accordion/accordionModel.d.ts +14 -0
  38. package/dist/components/accordion/index.d.ts +2 -1
  39. package/dist/components/accordion/index.js +1 -1
  40. package/dist/components/accordion/types.d.ts +1 -2
  41. package/dist/components/accordion/useAccordion.d.ts +2 -2
  42. package/dist/components/accordion/useAccordionItem.d.ts +2 -0
  43. package/dist/components/checkbox/useCheckbox.d.ts +2 -3
  44. package/dist/components/color-input/color-input.d.ts +2 -2
  45. package/dist/components/color-input/useColorInput.d.ts +1 -1
  46. package/dist/components/color-picker/index.js +2 -2
  47. package/dist/components/color-picker/types.d.ts +2 -2
  48. package/dist/components/color-picker/useColorPickerSaturation.d.ts +22 -0
  49. package/dist/components/color-picker/useColorPickerSlider.d.ts +20 -0
  50. package/dist/components/color-picker/useColorPickerValue.d.ts +1 -1
  51. package/dist/components/dialog/{dialog-core.d.ts → dialogContext.d.ts} +2 -6
  52. package/dist/components/dialog/useDialogContentInteractions.d.ts +18 -0
  53. package/dist/components/dialog/useDialogRootState.d.ts +19 -0
  54. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
  55. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +1 -1
  56. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +1 -1
  57. package/dist/components/dropdown-menu/dropdown-menu-model.d.ts +8 -0
  58. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +2 -2
  59. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
  60. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +1 -1
  61. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +1 -1
  62. package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
  63. package/dist/components/dropdown-menu/{dropdown-menu-primitive-core.d.ts → dropdownMenuContext.d.ts} +17 -19
  64. package/dist/components/dropdown-menu/dropdownMenuDataModel.d.ts +20 -0
  65. package/dist/components/dropdown-menu/dropdownMenuInteraction.d.ts +3 -0
  66. package/dist/components/dropdown-menu/dropdownMenuInteractionNavigation.d.ts +24 -0
  67. package/dist/components/dropdown-menu/dropdownMenuInteractionRegistry.d.ts +42 -0
  68. package/dist/components/dropdown-menu/dropdownMenuInteractionTypes.d.ts +85 -0
  69. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +11 -11
  70. package/dist/components/dropdown-menu/useDropdownMenuContextTrigger.d.ts +9 -0
  71. package/dist/components/dropdown-menu/useDropdownMenuDataController.d.ts +34 -0
  72. package/dist/components/dropdown-menu/useDropdownMenuDataRegistration.d.ts +22 -0
  73. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +6 -5
  74. package/dist/components/dropdown-menu/useDropdownMenuInteractionDismissal.d.ts +17 -0
  75. package/dist/components/dropdown-menu/useDropdownMenuInteractionKeyboard.d.ts +19 -0
  76. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +0 -1
  77. package/dist/components/dropdown-menu/useDropdownMenuPresentation.d.ts +29 -0
  78. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +2 -2
  79. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +1 -1
  80. package/dist/components/dropdown-menu/useDropdownMenuTargetBindings.d.ts +19 -0
  81. package/dist/components/floating/hoverDisclosureInteractionModel.d.ts +42 -0
  82. package/dist/components/floating/index.js +1 -1
  83. package/dist/components/floating/useFloatingPosition.d.ts +0 -1
  84. package/dist/components/floating/useHoverDisclosureInteractions.d.ts +32 -0
  85. package/dist/components/floating/useHoverDisclosureOpenState.d.ts +25 -0
  86. package/dist/components/floating/useHoverDisclosureTargetBinding.d.ts +27 -0
  87. package/dist/components/input/useInput.d.ts +1 -1
  88. package/dist/components/number-input/numberInputModel.d.ts +15 -0
  89. package/dist/components/number-input/useNumberInput.d.ts +4 -18
  90. package/dist/components/pagination/index.d.ts +1 -1
  91. package/dist/components/pagination/index.js +1 -1
  92. package/dist/components/pagination/paginationModel.d.ts +4 -0
  93. package/dist/components/pagination/types.d.ts +15 -0
  94. package/dist/components/pagination/usePagination.d.ts +3 -19
  95. package/dist/components/popover/usePopoverBindings.d.ts +16 -0
  96. package/dist/components/progress/progressModel.d.ts +8 -0
  97. package/dist/components/progress/useProgress.d.ts +1 -7
  98. package/dist/components/radio/useRadio.d.ts +3 -4
  99. package/dist/components/scroll-area/scroll-area.d.ts +1 -1
  100. package/dist/components/scroll-area/scrollAreaModel.d.ts +64 -0
  101. package/dist/components/scroll-area/types.d.ts +4 -0
  102. package/dist/components/scroll-area/useScrollArea.d.ts +70 -52
  103. package/dist/components/scroll-area/{useScrollAreaPresentation.d.ts → useScrollAreaAttributes.d.ts} +37 -14
  104. package/dist/components/scroll-area/useScrollAreaDerivedState.d.ts +8 -0
  105. package/dist/components/scroll-area/useScrollAreaMeasurement.d.ts +35 -0
  106. package/dist/components/scroll-area/useScrollAreaPointer.d.ts +10 -8
  107. package/dist/components/scroll-area/useScrollAreaVisibility.d.ts +15 -20
  108. package/dist/components/select/useSelect.d.ts +2 -1
  109. package/dist/components/select/useSelectNativeValue.d.ts +1 -7
  110. package/dist/components/slider/rangeSliderModel.d.ts +41 -0
  111. package/dist/components/slider/{sliderCore.d.ts → sliderModel.d.ts} +2 -2
  112. package/dist/components/slider/useRangeSlider.d.ts +9 -17
  113. package/dist/components/slider/useRangeSliderValueState.d.ts +40 -0
  114. package/dist/components/slider/useSlider.d.ts +8 -14
  115. package/dist/components/slider/useSliderPointerPreview.d.ts +22 -0
  116. package/dist/components/slider/useSliderTooltipState.d.ts +40 -0
  117. package/dist/components/slider/useSliderValueState.d.ts +33 -0
  118. package/dist/components/switch/useSwitch.d.ts +1 -1
  119. package/dist/components/teleport-provider/index.js +1 -1
  120. package/dist/components/teleport-provider/useTeleportTarget.d.ts +1 -2
  121. package/dist/components/textarea/useTextarea.d.ts +1 -1
  122. package/dist/components/toast/useToastLifecycle.d.ts +19 -0
  123. package/dist/components/tooltip/useTooltip.d.ts +1 -2
  124. package/dist/composables/index.d.ts +2 -0
  125. package/dist/composables/index.js +2 -0
  126. package/dist/composables/useControllableValue.d.ts +14 -0
  127. package/dist/css.js +12 -0
  128. package/dist/dialog.js +227 -216
  129. package/dist/dropdown-menu.js +1493 -1118
  130. package/dist/events.js +59 -0
  131. package/dist/field.css +8 -8
  132. package/dist/field.js +13 -25
  133. package/dist/floating.js +553 -312
  134. package/dist/floatingOffset.js +11 -0
  135. package/dist/focus-trap.js +7 -5
  136. package/dist/focusNavigation.js +37 -0
  137. package/dist/icon-button.css +12 -173
  138. package/dist/icon-button.js +8 -7
  139. package/dist/index.d.ts +5 -4
  140. package/dist/index.js +13 -11
  141. package/dist/input.css +24 -24
  142. package/dist/input.js +20 -32
  143. package/dist/interactive.js +18 -0
  144. package/dist/modal.js +11 -7
  145. package/dist/number-input.css +18 -18
  146. package/dist/number-input.js +15 -13
  147. package/dist/number.js +22 -0
  148. package/dist/overlay.js +3 -2
  149. package/dist/pagination.css +28 -28
  150. package/dist/pagination.js +67 -65
  151. package/dist/pointer.js +9 -0
  152. package/dist/popover.css +34 -34
  153. package/dist/popover.js +93 -91
  154. package/dist/progress.css +29 -21
  155. package/dist/progress.js +25 -21
  156. package/dist/query.js +40 -0
  157. package/dist/radio.css +18 -18
  158. package/dist/radio.js +31 -37
  159. package/dist/rafScheduler.js +34 -0
  160. package/dist/scroll-area.css +35 -26
  161. package/dist/scroll-area.js +553 -500
  162. package/dist/select.css +45 -45
  163. package/dist/select.js +70 -56
  164. package/dist/slider.css +191 -191
  165. package/dist/slider.js +695 -628
  166. package/dist/styles-api.d.ts +0 -1
  167. package/dist/styles-api.js +1 -4
  168. package/dist/switch.css +17 -17
  169. package/dist/switch.js +15 -16
  170. package/dist/tabs.css +46 -46
  171. package/dist/tabs.js +51 -68
  172. package/dist/text.js +17 -0
  173. package/dist/textarea.css +26 -26
  174. package/dist/textarea.js +22 -33
  175. package/dist/toast.css +26 -26
  176. package/dist/toast.js +157 -129
  177. package/dist/tooltip.css +12 -12
  178. package/dist/tooltip.js +46 -47
  179. package/dist/useCollapse.js +19 -17
  180. package/dist/useControlState.js +4 -7
  181. package/dist/useControllableValue.js +8 -2
  182. package/dist/useFloatingPosition.js +122 -1128
  183. package/dist/useFormControl.js +3 -2
  184. package/dist/useOverlayZIndex.js +2 -6
  185. package/dist/useRequiredInject.js +1 -1
  186. package/dist/useTeleportTarget.js +3 -14
  187. package/dist/useTypeahead.js +94 -0
  188. package/dist/utils/aria.d.ts +3 -0
  189. package/dist/utils/attributes.d.ts +2 -0
  190. package/dist/utils/bem.d.ts +3 -0
  191. package/dist/utils/collectionNavigation.d.ts +2 -0
  192. package/dist/utils/color.d.ts +7 -0
  193. package/dist/{components/color-picker/color-picker-utils.d.ts → utils/colorPicker.d.ts} +5 -4
  194. package/dist/utils/componentColors.d.ts +7 -0
  195. package/dist/utils/css.d.ts +3 -0
  196. package/dist/utils/dom/ancestry.d.ts +7 -0
  197. package/dist/utils/dom/attributes.d.ts +16 -0
  198. package/dist/utils/dom/componentRef.d.ts +4 -0
  199. package/dist/utils/dom/events.d.ts +5 -0
  200. package/dist/utils/dom/focusNavigation.d.ts +7 -0
  201. package/dist/utils/dom/interactive.d.ts +2 -0
  202. package/dist/utils/dom/pointer.d.ts +2 -0
  203. package/dist/utils/dom/query.d.ts +4 -0
  204. package/dist/utils/dom/scroll.d.ts +23 -0
  205. package/dist/utils/floatingOffset.d.ts +10 -0
  206. package/dist/utils/geometry.d.ts +14 -0
  207. package/dist/utils/indexPath.d.ts +6 -0
  208. package/dist/utils/number.d.ts +4 -0
  209. package/dist/utils/rafScheduler.d.ts +4 -0
  210. package/dist/utils/text.d.ts +2 -0
  211. package/docs/code-architecture.md +118 -0
  212. package/docs/public-composables-api.md +52 -0
  213. package/docs/public-floating-api.md +6 -5
  214. package/package.json +54 -46
  215. package/src/styles/_mixins.scss +4 -0
  216. package/src/styles/_tokens.scss +12 -12
  217. package/src/styles/_variables.scss +1 -1
  218. package/dist/button-link.css +0 -167
  219. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +0 -3
  220. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +0 -21
  221. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +0 -37
  222. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +0 -29
  223. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +0 -52
  224. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +0 -17
  225. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +0 -18
  226. package/dist/components/scroll-area/scrollAreaCore.d.ts +0 -25
  227. package/dist/components/scroll-area/useScrollAreaControls.d.ts +0 -25
  228. package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +0 -35
  229. /package/dist/components/alert/{useAlertColor.d.ts → alertColor.d.ts} +0 -0
  230. /package/dist/components/avatar/{useAvatarColor.d.ts → avatarColor.d.ts} +0 -0
  231. /package/dist/components/badge/{useBadgeColor.d.ts → badgeColor.d.ts} +0 -0
  232. /package/dist/components/button/{useButtonColor.d.ts → buttonColor.d.ts} +0 -0
  233. /package/dist/components/color-swatch/{useColorSwatchColor.d.ts → colorSwatchColor.d.ts} +0 -0
  234. /package/dist/components/toast/{useToastColor.d.ts → toastColor.d.ts} +0 -0
  235. /package/dist/{composables → internal/composables}/useOverlayLayer.d.ts +0 -0
package/dist/select.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-select[data-v-d7a0b110] {
2
+ .rp-select[data-v-b42a5b2f] {
3
3
  --_rp-select-height: var(--rp-size-control-md);
4
4
  --_rp-select-padding-x: calc(var(--rp-size-control-md) / 3);
5
5
  --_rp-select-font-size: var(--rp-font-size-md);
@@ -15,7 +15,7 @@
15
15
  font-weight: var(--rp-font-weight-normal);
16
16
  line-height: 1;
17
17
  }
18
- .rp-select__native[data-v-d7a0b110] {
18
+ .rp-select__native[data-v-b42a5b2f] {
19
19
  position: absolute;
20
20
  width: 1px;
21
21
  height: 1px;
@@ -26,42 +26,42 @@
26
26
  white-space: nowrap;
27
27
  border-width: 0;
28
28
  }
29
- .rp-select--size-xs[data-v-d7a0b110] {
29
+ .rp-select--size-xs[data-v-b42a5b2f] {
30
30
  --_rp-select-height: var(--rp-size-control-xs);
31
31
  --_rp-select-padding-x: calc(var(--rp-size-control-xs) / 3);
32
32
  --_rp-select-font-size: var(--rp-font-size-xs);
33
33
  --_rp-select-option-min-height: calc(var(--rp-size-control-xs) - var(--rp-spacing-2));
34
34
  --_rp-select-option-padding-y: calc(var(--rp-spacing-1) / 2);
35
35
  }
36
- .rp-select--size-sm[data-v-d7a0b110] {
36
+ .rp-select--size-sm[data-v-b42a5b2f] {
37
37
  --_rp-select-height: var(--rp-size-control-sm);
38
38
  --_rp-select-padding-x: calc(var(--rp-size-control-sm) / 3);
39
39
  --_rp-select-font-size: var(--rp-font-size-sm);
40
40
  --_rp-select-option-min-height: calc(var(--rp-size-control-sm) - var(--rp-spacing-3));
41
41
  --_rp-select-option-padding-y: var(--rp-spacing-1);
42
42
  }
43
- .rp-select--size-md[data-v-d7a0b110] {
43
+ .rp-select--size-md[data-v-b42a5b2f] {
44
44
  --_rp-select-height: var(--rp-size-control-md);
45
45
  --_rp-select-padding-x: calc(var(--rp-size-control-md) / 3);
46
46
  --_rp-select-font-size: var(--rp-font-size-md);
47
47
  --_rp-select-option-min-height: calc(var(--rp-size-control-md) - var(--rp-spacing-4));
48
48
  --_rp-select-option-padding-y: var(--rp-spacing-1);
49
49
  }
50
- .rp-select--size-lg[data-v-d7a0b110] {
50
+ .rp-select--size-lg[data-v-b42a5b2f] {
51
51
  --_rp-select-height: var(--rp-size-control-lg);
52
52
  --_rp-select-padding-x: calc(var(--rp-size-control-lg) / 3);
53
53
  --_rp-select-font-size: var(--rp-font-size-lg);
54
54
  --_rp-select-option-min-height: calc(var(--rp-size-control-lg) - var(--rp-spacing-5));
55
55
  --_rp-select-option-padding-y: calc(var(--rp-spacing-3) / 2);
56
56
  }
57
- .rp-select--size-xl[data-v-d7a0b110] {
57
+ .rp-select--size-xl[data-v-b42a5b2f] {
58
58
  --_rp-select-height: var(--rp-size-control-xl);
59
59
  --_rp-select-padding-x: calc(var(--rp-size-control-xl) / 3);
60
60
  --_rp-select-font-size: var(--rp-font-size-xl);
61
61
  --_rp-select-option-min-height: calc(var(--rp-size-control-xl) - var(--rp-spacing-6));
62
62
  --_rp-select-option-padding-y: var(--rp-spacing-2);
63
63
  }
64
- html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[data-v-d7a0b110] {
64
+ html.dark .rp-select[data-v-b42a5b2f], [data-rp-color-scheme=dark] .rp-select[data-v-b42a5b2f] {
65
65
  --_rp-select-invalid-border: var(--rp-color-red-light-color);
66
66
  --_rp-select-invalid-ring: color-mix(
67
67
  in srgb,
@@ -70,11 +70,11 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
70
70
  );
71
71
  --_rp-select-option-focused-bg: var(--rp-color-default-hover);
72
72
  }
73
- .rp-select--disabled[data-v-d7a0b110] {
73
+ .rp-select--disabled[data-v-b42a5b2f] {
74
74
  opacity: var(--rp-opacity-disabled);
75
75
  cursor: not-allowed;
76
76
  }
77
- .rp-select__trigger[data-v-d7a0b110] {
77
+ .rp-select__trigger[data-v-b42a5b2f] {
78
78
  display: inline-flex;
79
79
  align-items: center;
80
80
  justify-content: center;
@@ -91,81 +91,81 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
91
91
  transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
92
92
  gap: var(--rp-spacing-2);
93
93
  }
94
- .rp-select__trigger[data-v-d7a0b110]:hover {
94
+ .rp-select__trigger[data-v-b42a5b2f]:hover {
95
95
  border-color: var(--rp-color-control-border-hover);
96
96
  }
97
- .rp-select__trigger[data-v-d7a0b110]:focus-visible {
97
+ .rp-select__trigger[data-v-b42a5b2f]:focus-visible {
98
98
  outline: none;
99
99
  border-color: var(--rp-color-control-border-focus);
100
100
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
101
101
  }
102
- .rp-select--radius-xs[data-v-d7a0b110] {
102
+ .rp-select--radius-xs[data-v-b42a5b2f] {
103
103
  --_rp-select-radius: var(--rp-radius-xs);
104
104
  }
105
- .rp-select--radius-sm[data-v-d7a0b110] {
105
+ .rp-select--radius-sm[data-v-b42a5b2f] {
106
106
  --_rp-select-radius: var(--rp-radius-sm);
107
107
  }
108
- .rp-select--radius-md[data-v-d7a0b110] {
108
+ .rp-select--radius-md[data-v-b42a5b2f] {
109
109
  --_rp-select-radius: var(--rp-radius-md);
110
110
  }
111
- .rp-select--radius-lg[data-v-d7a0b110] {
111
+ .rp-select--radius-lg[data-v-b42a5b2f] {
112
112
  --_rp-select-radius: var(--rp-radius-lg);
113
113
  }
114
- .rp-select--radius-xl[data-v-d7a0b110] {
114
+ .rp-select--radius-xl[data-v-b42a5b2f] {
115
115
  --_rp-select-radius: var(--rp-radius-xl);
116
116
  }
117
- .rp-select--open .rp-select__trigger[data-v-d7a0b110] {
117
+ .rp-select--open .rp-select__trigger[data-v-b42a5b2f] {
118
118
  border-color: var(--rp-color-control-border-focus);
119
119
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
120
120
  }
121
- .rp-select--invalid .rp-select__trigger[data-v-d7a0b110] {
121
+ .rp-select--invalid .rp-select__trigger[data-v-b42a5b2f] {
122
122
  border-color: var(--_rp-select-invalid-border);
123
123
  }
124
- .rp-select--invalid .rp-select__trigger[data-v-d7a0b110]:focus-visible, .rp-select--open.rp-select--invalid .rp-select__trigger[data-v-d7a0b110] {
124
+ .rp-select--invalid .rp-select__trigger[data-v-b42a5b2f]:focus-visible, .rp-select--open.rp-select--invalid .rp-select__trigger[data-v-b42a5b2f] {
125
125
  border-color: var(--_rp-select-invalid-border);
126
126
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-select-invalid-ring);
127
127
  }
128
- .rp-select__value[data-v-d7a0b110] {
128
+ .rp-select__value[data-v-b42a5b2f] {
129
129
  flex: 1;
130
130
  overflow: hidden;
131
131
  text-overflow: ellipsis;
132
132
  white-space: nowrap;
133
133
  color: var(--rp-color-control-fg);
134
134
  }
135
- .rp-select__placeholder[data-v-d7a0b110] {
135
+ .rp-select__placeholder[data-v-b42a5b2f] {
136
136
  color: var(--rp-color-control-placeholder);
137
137
  }
138
- .rp-select__indicator[data-v-d7a0b110] {
138
+ .rp-select__indicator[data-v-b42a5b2f] {
139
139
  display: inline-flex;
140
140
  align-items: center;
141
141
  width: 1em;
142
142
  height: 1em;
143
143
  flex-shrink: 0;
144
144
  }
145
- .rp-select__indicator svg[data-v-d7a0b110] {
145
+ .rp-select__indicator svg[data-v-b42a5b2f] {
146
146
  width: 100%;
147
147
  height: 100%;
148
148
  }
149
- .rp-select__indicator[data-v-d7a0b110] {
149
+ .rp-select__indicator[data-v-b42a5b2f] {
150
150
  position: relative;
151
151
  color: var(--rp-color-control-icon);
152
152
  transform: translateX(var(--rp-spacing-1));
153
153
  }
154
- .rp-select__arrow[data-v-d7a0b110] {
154
+ .rp-select__arrow[data-v-b42a5b2f] {
155
155
  display: inline-flex;
156
156
  align-items: center;
157
157
  width: 1em;
158
158
  height: 1em;
159
159
  flex-shrink: 0;
160
160
  }
161
- .rp-select__arrow svg[data-v-d7a0b110] {
161
+ .rp-select__arrow svg[data-v-b42a5b2f] {
162
162
  width: 100%;
163
163
  height: 100%;
164
164
  }
165
- .rp-select__arrow[data-v-d7a0b110] {
165
+ .rp-select__arrow[data-v-b42a5b2f] {
166
166
  transition: opacity var(--rp-transition-fast);
167
167
  }
168
- .rp-select__clear[data-v-d7a0b110] {
168
+ .rp-select__clear[data-v-b42a5b2f] {
169
169
  padding: 0;
170
170
  font: inherit;
171
171
  background: none;
@@ -177,11 +177,11 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
177
177
  height: 1em;
178
178
  flex-shrink: 0;
179
179
  }
180
- .rp-select__clear svg[data-v-d7a0b110] {
180
+ .rp-select__clear svg[data-v-b42a5b2f] {
181
181
  width: 100%;
182
182
  height: 100%;
183
183
  }
184
- .rp-select__clear[data-v-d7a0b110] {
184
+ .rp-select__clear[data-v-b42a5b2f] {
185
185
  position: absolute;
186
186
  inset: 0;
187
187
  z-index: 1;
@@ -190,17 +190,17 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
190
190
  pointer-events: none;
191
191
  transition: color var(--rp-transition-fast), opacity var(--rp-transition-fast);
192
192
  }
193
- .rp-select__clear[data-v-d7a0b110]:hover {
193
+ .rp-select__clear[data-v-b42a5b2f]:hover {
194
194
  color: var(--rp-color-control-fg);
195
195
  }
196
- .rp-select__trigger:hover .rp-select__clear[data-v-d7a0b110] {
196
+ .rp-select__trigger:hover .rp-select__clear[data-v-b42a5b2f] {
197
197
  opacity: 1;
198
198
  pointer-events: auto;
199
199
  }
200
- .rp-select__trigger:hover .rp-select__clear + .rp-select__arrow[data-v-d7a0b110] {
200
+ .rp-select__trigger:hover .rp-select__clear + .rp-select__arrow[data-v-b42a5b2f] {
201
201
  opacity: 0;
202
202
  }
203
- .rp-select__dropdown[data-v-d7a0b110] {
203
+ .rp-select__dropdown[data-v-b42a5b2f] {
204
204
  position: absolute;
205
205
  top: calc(100% + var(--rp-spacing-2));
206
206
  left: 0;
@@ -214,10 +214,10 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
214
214
  max-height: 240px;
215
215
  padding: var(--rp-spacing-1);
216
216
  }
217
- .rp-select__dropdown[data-v-d7a0b110] .rp-scroll-area__viewport {
217
+ .rp-select__dropdown[data-v-b42a5b2f] .rp-scroll-area__viewport {
218
218
  scroll-padding-block: var(--rp-spacing-1);
219
219
  }
220
- .rp-select__option[data-v-d7a0b110] {
220
+ .rp-select__option[data-v-b42a5b2f] {
221
221
  display: flex;
222
222
  align-items: center;
223
223
  min-height: var(--_rp-select-option-min-height);
@@ -228,17 +228,17 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
228
228
  transition: color var(--rp-transition-fast);
229
229
  color: var(--rp-color-control-fg);
230
230
  }
231
- .rp-select__option--focused[data-v-d7a0b110] {
231
+ .rp-select__option--focused[data-v-b42a5b2f] {
232
232
  background-color: var(--_rp-select-option-focused-bg);
233
233
  }
234
- .rp-select__option--selected[data-v-d7a0b110] {
234
+ .rp-select__option--selected[data-v-b42a5b2f] {
235
235
  color: var(--rp-primary-color-light-color);
236
236
  }
237
- .rp-select__option--disabled[data-v-d7a0b110] {
237
+ .rp-select__option--disabled[data-v-b42a5b2f] {
238
238
  color: var(--rp-color-disabled-color);
239
239
  cursor: not-allowed;
240
240
  }
241
- .rp-select__empty[data-v-d7a0b110] {
241
+ .rp-select__empty[data-v-b42a5b2f] {
242
242
  display: flex;
243
243
  align-items: center;
244
244
  justify-content: center;
@@ -246,12 +246,12 @@ html.dark .rp-select[data-v-d7a0b110], [data-rp-color-scheme=dark] .rp-select[da
246
246
  color: var(--rp-color-dimmed);
247
247
  font-size: var(--_rp-select-font-size);
248
248
  }
249
- .rp-select-dropdown-enter-active[data-v-d7a0b110],
250
- .rp-select-dropdown-leave-active[data-v-d7a0b110] {
249
+ .rp-select-dropdown-enter-active[data-v-b42a5b2f],
250
+ .rp-select-dropdown-leave-active[data-v-b42a5b2f] {
251
251
  transition: opacity var(--rp-transition-fast), transform var(--rp-transition-fast);
252
252
  }
253
- .rp-select-dropdown-enter-from[data-v-d7a0b110],
254
- .rp-select-dropdown-leave-to[data-v-d7a0b110] {
253
+ .rp-select-dropdown-enter-from[data-v-b42a5b2f],
254
+ .rp-select-dropdown-leave-to[data-v-b42a5b2f] {
255
255
  opacity: 0;
256
256
  transform: translateY(calc(-1 * var(--rp-spacing-1)));
257
257
  }
package/dist/select.js CHANGED
@@ -1,14 +1,18 @@
1
1
  import './select.css';
2
- import { t as x_default } from "./x.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
+ import { t as useStylesApi } from "./styles-api.js";
4
+ import { n as toPresenceAttribute } from "./attributes.js";
3
5
  import { t as bem } from "./bem.js";
4
- import { n as useStylesApi, t as presence } from "./styles-api.js";
6
+ import { n as getNextEnabledIndex, t as getEnabledIndexes } from "./collectionNavigation.js";
5
7
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
- import { t as useControllableValue } from "./useControllableValue.js";
8
+ import { t as x_default } from "./x.js";
7
9
  import { i as useFormControl } from "./useFormControl.js";
10
+ import { o as splitCompatibilityAttributes, t as composeEventHandlers } from "./attributes2.js";
8
11
  import { t as useControlState } from "./useControlState.js";
9
- import { n as getNextEnabledIndex, r as useTypeahead, t as getEnabledIndexes } from "./collectionNavigation.js";
12
+ import { i as isNodeWithinElement, n as isEventWithinElement } from "./events.js";
13
+ import { t as useTypeahead } from "./useTypeahead.js";
10
14
  import { t as scroll_area_default } from "./scroll-area.js";
11
- import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, markRaw, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setDynamicProps, setInsertionState, setProp, setText, setValue, shallowRef, template, toDisplayString, txt, unref, useId, watch, watchEffect, withModifiers, withVaporModifiers } from "vue";
15
+ import { VaporTransition, child, computed, createComponent, createFor, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, markRaw, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setDynamicProps, setInsertionState, setProp, setTemplateRefBinding, setText, setValue, shallowRef, template, toDisplayString, txt, unref, useId, watch, watchEffect, withModifiers } from "vue";
12
16
  //#region ~icons/lucide/chevrons-up-down
13
17
  var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m7 15l5 5l5-5M7 9l5-5l5 5\">", 3, 1);
14
18
  function render(_ctx) {
@@ -19,29 +23,41 @@ var chevrons_up_down_default = markRaw(defineVaporComponent({
19
23
  render
20
24
  }));
21
25
  //#endregion
22
- //#region src/composables/useClickOutside.ts
26
+ //#region src/internal/composables/useClickOutside.ts
23
27
  function useClickOutside(target, active, callback) {
24
- let isListening = false;
28
+ const targets = Array.isArray(target) ? target : [target];
29
+ const listeningDocuments = /* @__PURE__ */ new Set();
25
30
  let stopWatch;
26
- function handler(e) {
27
- if (!(Array.isArray(target) ? target : [target]).some((current) => current.value?.contains(e.target))) callback(e);
31
+ function handler(event) {
32
+ if (!targets.some((current) => {
33
+ const element = current.value;
34
+ return element ? isEventWithinElement(event, element) : false;
35
+ })) callback(event);
36
+ }
37
+ function detachListeners() {
38
+ for (const document of listeningDocuments) document.removeEventListener("click", handler, true);
39
+ listeningDocuments.clear();
28
40
  }
29
- function setListening(value) {
30
- if (typeof document === "undefined" || value === isListening) return;
31
- isListening = value;
32
- if (value) document.addEventListener("click", handler, true);
33
- else document.removeEventListener("click", handler, true);
41
+ function syncListeners() {
42
+ detachListeners();
43
+ if (!active.value) return;
44
+ for (const current of targets) {
45
+ const document = current.value?.ownerDocument;
46
+ if (!document || listeningDocuments.has(document)) continue;
47
+ document.addEventListener("click", handler, true);
48
+ listeningDocuments.add(document);
49
+ }
34
50
  }
35
51
  onMounted(() => {
36
- stopWatch = watch(active, setListening, { immediate: true });
52
+ stopWatch = watch([active, ...targets], syncListeners, { immediate: true });
37
53
  });
38
54
  onBeforeUnmount(() => {
39
55
  stopWatch?.();
40
- setListening(false);
56
+ detachListeners();
41
57
  });
42
58
  }
43
59
  //#endregion
44
- //#region src/composables/useCollectionNavigation.ts
60
+ //#region src/internal/composables/useCollectionNavigation.ts
45
61
  function useCollectionNavigation(options) {
46
62
  const activeKey = shallowRef(null);
47
63
  const isDisabled = options.isDisabled ?? (() => false);
@@ -118,7 +134,8 @@ function useSelect(props, emitUpdate, getValue = () => props.modelValue ?? null,
118
134
  const selectRef = ref(null);
119
135
  const isOpen = ref(false);
120
136
  const selectId = useId();
121
- const listboxId = `${selectId}-listbox`;
137
+ const popupId = `${selectId}-popup`;
138
+ const listboxId = `${popupId}-viewport`;
122
139
  const control = useControlState(props);
123
140
  const visibleOptions = computed(() => props.options ?? []);
124
141
  const value = computed(getValue);
@@ -189,8 +206,7 @@ function useSelect(props, emitUpdate, getValue = () => props.modelValue ?? null,
189
206
  if (!option.disabled) navigation.setActiveIndex(index);
190
207
  }
191
208
  function onFocusout(event) {
192
- const nextTarget = event.relatedTarget;
193
- if (nextTarget instanceof Node && selectRef.value?.contains(nextTarget)) return;
209
+ if (isNodeWithinElement(event.relatedTarget, selectRef.value)) return;
194
210
  close();
195
211
  }
196
212
  function selectFocusedOption() {
@@ -262,6 +278,7 @@ function useSelect(props, emitUpdate, getValue = () => props.modelValue ?? null,
262
278
  triggerRef,
263
279
  isOpen,
264
280
  selectId,
281
+ popupId,
265
282
  listboxId,
266
283
  control,
267
284
  visibleOptions,
@@ -348,23 +365,18 @@ function useSelectNativeControl(props, emitUpdate, triggerRef) {
348
365
  }
349
366
  });
350
367
  const nativeInputAttrs = computed(() => {
351
- const { class: compatibilityClass, style: compatibilityStyle, onInput: compatibilityOnInput, onChange: compatibilityOnChange, onInvalid: compatibilityOnInvalid, ...attrs } = props.inputAttrs ?? {};
368
+ const compatibilityAttrs = props.inputAttrs ?? {};
369
+ const { compatibilityClass, compatibilityStyle, forwardedAttributes } = splitCompatibilityAttributes(compatibilityAttrs);
352
370
  return {
353
- ...attrs,
371
+ ...forwardedAttributes,
354
372
  class: ["rp-select__native", compatibilityClass],
355
373
  style: compatibilityStyle,
356
- onInput(event) {
357
- controllable.setValue(getNativeValue(event.currentTarget));
358
- compatibilityOnInput?.(event);
359
- },
360
- onChange(event) {
361
- compatibilityOnChange?.(event);
362
- },
363
- onInvalid(event) {
374
+ onInput: composeEventHandlers((event) => controllable.setValue(getNativeValue(event.currentTarget)), compatibilityAttrs.onInput),
375
+ onChange: compatibilityAttrs.onChange,
376
+ onInvalid: composeEventHandlers((event) => {
364
377
  event.preventDefault();
365
378
  triggerRef.value?.focus();
366
- compatibilityOnInvalid?.(event);
367
- }
379
+ }, compatibilityAttrs.onInvalid)
368
380
  };
369
381
  });
370
382
  return {
@@ -376,13 +388,12 @@ function useSelectNativeControl(props, emitUpdate, triggerRef) {
376
388
  }
377
389
  //#endregion
378
390
  //#region src/components/select/select.vue?vue&type=script&setup=true&vapor=true&lang.ts
379
- var t0 = template("<option data-v-d7a0b110> ");
380
- var t1 = template("<button data-v-d7a0b110></button>");
391
+ var t0 = template("<option data-v-b42a5b2f> ");
392
+ var t1 = template("<button data-v-b42a5b2f></button>");
381
393
  var t2 = template("No options", 2);
382
- var t3 = template("<div data-v-d7a0b110>");
383
- var t4 = template("<div data-v-d7a0b110> ");
384
- var t5 = template("<div data-v-d7a0b110><select data-v-d7a0b110><option data-v-d7a0b110 value></option></select><div data-v-d7a0b110><span data-v-d7a0b110> </span><span data-v-d7a0b110><span data-v-d7a0b110 class=rp-select__arrow aria-hidden=true>", 1);
385
- delegateEvents("mousedown", "click", "keydown");
394
+ var t3 = template("<div data-v-b42a5b2f>");
395
+ var t4 = template("<div data-v-b42a5b2f> ");
396
+ var t5 = template("<div data-v-b42a5b2f><select data-v-b42a5b2f><option data-v-b42a5b2f value></option></select><div data-v-b42a5b2f><span data-v-b42a5b2f> </span><span data-v-b42a5b2f><span data-v-b42a5b2f class=rp-select__arrow aria-hidden=true>", 1);
386
397
  //#endregion
387
398
  //#region src/components/select/select.vue
388
399
  var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -430,14 +441,15 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
430
441
  const emit = __emit;
431
442
  const triggerRef = ref(null);
432
443
  const { nativeSelectRef, selectedValue, nativeInputAttrs, requestValueUpdate } = useSelectNativeControl(props, (value) => emit("update:modelValue", value), triggerRef);
433
- const { selectRef, isOpen, selectId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, canClear, toggle, selectOption, clearSelection, onOptionMouseenter, onFocusout, onTriggerKeydown } = useSelect(props, requestValueUpdate, () => selectedValue.value, triggerRef);
444
+ const { selectRef, isOpen, selectId, popupId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, canClear, toggle, selectOption, clearSelection, onOptionMouseenter, onFocusout, onTriggerKeydown } = useSelect(props, requestValueUpdate, () => selectedValue.value, triggerRef);
445
+ const templateRefs = { select: selectRef };
434
446
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
435
447
  const rootAttrs = computed(() => getRootAttrs({
436
448
  class: rootClass.value,
437
449
  onFocusout,
438
450
  "data-state": isOpen.value ? "open" : "closed",
439
- "data-disabled": presence(control.disabled),
440
- "data-invalid": presence(control.invalid)
451
+ "data-disabled": toPresenceAttribute(control.disabled),
452
+ "data-invalid": toPresenceAttribute(control.invalid)
441
453
  }));
442
454
  __expose({
443
455
  nativeElement: nativeSelectRef,
@@ -498,8 +510,8 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
498
510
  "aria-labelledby": _control.ariaLabelledby,
499
511
  "aria-describedby": _control.ariaDescribedby,
500
512
  "data-state": _isOpen ? "open" : "closed",
501
- "data-disabled": unref(presence)(_control.disabled),
502
- "data-invalid": unref(presence)(_control.invalid),
513
+ "data-disabled": unref(toPresenceAttribute)(_control.disabled),
514
+ "data-invalid": unref(toPresenceAttribute)(_control.invalid),
503
515
  tabindex: _control_disabled ? -1 : 0
504
516
  }
505
517
  ]);
@@ -520,25 +532,27 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
520
532
  ]));
521
533
  setInsertionState(n8, null, 0);
522
534
  createComponent(unref(x_default));
523
- n8.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
535
+ on(n8, "mousedown", withModifiers(() => {}, ["prevent"]));
524
536
  on(n8, "click", withModifiers((e) => unref(clearSelection)(e), ["stop"]));
525
537
  return n8;
526
538
  });
527
539
  setInsertionState(n10, null, 0);
528
540
  createComponent(unref(chevrons_up_down_default));
529
- n12.$evtclick = createInvoker((e) => unref(toggle)(e));
530
- n12.$evtkeydown = createInvoker((e) => unref(onTriggerKeydown)(e));
541
+ on(n12, "click", (e) => unref(toggle)(e));
542
+ on(n12, "keydown", (e) => unref(onTriggerKeydown)(e));
531
543
  _setTemplateRef(n12, triggerRef, null, "triggerRef");
532
544
  setInsertionState(n26, null, 2);
533
545
  createComponent(VaporTransition, { name: "rp-select-dropdown" }, extend(() => {
534
546
  return createIf(() => unref(isOpen), () => {
535
547
  return createComponent(scroll_area_default, { $: [() => unref(getPartAttrs)("content", { class: "rp-select__dropdown" }), {
536
- role: "listbox",
537
- id: () => unref(listboxId),
548
+ id: () => unref(popupId),
538
549
  embedded: "",
539
550
  type: "auto",
540
551
  scrollbars: "y",
541
- "viewport-attrs": () => ({ tabindex: -1 }),
552
+ "viewport-attrs": () => ({
553
+ role: "listbox",
554
+ tabindex: -1
555
+ }),
542
556
  "data-state": () => unref(isOpen) ? "open" : "closed"
543
557
  }] }, extend(() => {
544
558
  return [createIf(() => unref(visibleOptions).length === 0, () => {
@@ -552,13 +566,13 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
552
566
  }, null, 129), createFor(() => unref(visibleOptions), (_for_item0, _for_key0) => {
553
567
  const n23 = t4();
554
568
  const x23 = txt(n23);
555
- n23.$evtclick = createInvoker(() => unref(selectOption)(_for_item0.value));
569
+ on(n23, "click", () => unref(selectOption)(_for_item0.value));
556
570
  on(n23, "mouseenter", () => unref(onOptionMouseenter)(_for_item0.value, _for_key0.value));
557
571
  renderEffect(() => {
558
572
  const _index = _for_key0.value;
559
573
  const _option = _for_item0.value;
560
574
  const _selectedValue = unref(selectedValue);
561
- const _presence = unref(presence);
575
+ const _toPresenceAttribute = unref(toPresenceAttribute);
562
576
  const _focusedIndex = unref(focusedIndex);
563
577
  const _option_value = _option.value;
564
578
  const _option_disabled = _option.disabled;
@@ -567,9 +581,9 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
567
581
  id: `${unref(selectId)}-option-${_index}`,
568
582
  "aria-selected": _option_value === _selectedValue,
569
583
  "aria-disabled": _option_disabled || void 0,
570
- "data-selected": _presence(_option_value === _selectedValue),
571
- "data-highlighted": _presence(_index === _focusedIndex),
572
- "data-disabled": _presence(_option.disabled)
584
+ "data-selected": _toPresenceAttribute(_option_value === _selectedValue),
585
+ "data-highlighted": _toPresenceAttribute(_index === _focusedIndex),
586
+ "data-disabled": _toPresenceAttribute(_option.disabled)
573
587
  }, unref(getPartAttrs)("option", { class: ["rp-select__option", {
574
588
  "rp-select__option--selected": _option_value === _selectedValue,
575
589
  "rp-select__option--focused": _index === _focusedIndex,
@@ -582,10 +596,10 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
582
596
  }, { _: 8 }));
583
597
  }, null, 129);
584
598
  }, { _: 8 }));
585
- _setTemplateRef(n26, selectRef, null, "selectRef");
599
+ setTemplateRefBinding(n26, () => templateRefs.select);
586
600
  return n26;
587
601
  }
588
- }), [["__scopeId", "data-v-d7a0b110"]]);
602
+ }), [["__scopeId", "data-v-b42a5b2f"]]);
589
603
  //#endregion
590
604
  //#region src/components/select/types.ts
591
605
  var selectParts = [