ropav 0.1.6 → 0.1.8

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 (310) hide show
  1. package/README.md +7 -1
  2. package/dist/accordion.css +17 -17
  3. package/dist/accordion.js +123 -155
  4. package/dist/alert.css +18 -18
  5. package/dist/alert.js +10 -11
  6. package/dist/ancestry.js +136 -0
  7. package/dist/aria.js +14 -0
  8. package/dist/aspect-ratio.js +1 -1
  9. package/dist/attributes.js +9 -0
  10. package/dist/attributes2.js +29 -0
  11. package/dist/avatar.css +19 -19
  12. package/dist/avatar.js +9 -17
  13. package/dist/badge.css +16 -16
  14. package/dist/badge.js +5 -5
  15. package/dist/button-group.js +1 -1
  16. package/dist/button-link.js +4 -3
  17. package/dist/button.js +4 -3
  18. package/dist/button.scss_vue_type_style_index_0_src_true_lang.js +1 -1
  19. package/dist/calendar.css +173 -0
  20. package/dist/calendar.js +714 -0
  21. package/dist/calendar2.js +37 -0
  22. package/dist/card.js +1 -1
  23. package/dist/checkbox.css +32 -32
  24. package/dist/checkbox.js +22 -28
  25. package/dist/chevron-left.js +12 -0
  26. package/dist/collapse.css +6 -6
  27. package/dist/collapse.js +7 -6
  28. package/dist/collectionNavigation.js +2 -99
  29. package/dist/color-input.css +19 -19
  30. package/dist/color-input.js +14 -13
  31. package/dist/color-picker.css +40 -40
  32. package/dist/color-picker.js +247 -276
  33. package/dist/color-picker2.js +1 -9
  34. package/dist/color-swatch.css +4 -4
  35. package/dist/color-swatch.js +6 -8
  36. package/dist/color.js +5 -10
  37. package/dist/combobox.css +251 -0
  38. package/dist/combobox.js +410 -0
  39. package/dist/componentColors.js +125 -84
  40. package/dist/componentRef.js +26 -0
  41. package/dist/components/accordion/accordionContext.d.ts +3 -0
  42. package/dist/components/accordion/accordionModel.d.ts +14 -0
  43. package/dist/components/accordion/index.d.ts +2 -1
  44. package/dist/components/accordion/index.js +1 -1
  45. package/dist/components/accordion/types.d.ts +1 -2
  46. package/dist/components/accordion/useAccordion.d.ts +2 -2
  47. package/dist/components/accordion/useAccordionItem.d.ts +2 -0
  48. package/dist/components/calendar/calendar.d.ts +30 -0
  49. package/dist/components/calendar/calendarBehavior.d.ts +49 -0
  50. package/dist/components/calendar/index.d.ts +3 -0
  51. package/dist/components/calendar/index.js +3 -0
  52. package/dist/components/calendar/types.d.ts +53 -0
  53. package/dist/components/calendar/useCalendar.d.ts +24 -0
  54. package/dist/components/checkbox/useCheckbox.d.ts +1 -2
  55. package/dist/components/color-picker/index.js +2 -2
  56. package/dist/components/color-picker/types.d.ts +2 -2
  57. package/dist/components/color-picker/useColorPickerDrag.d.ts +1 -1
  58. package/dist/components/color-picker/useColorPickerSaturation.d.ts +22 -0
  59. package/dist/components/color-picker/useColorPickerSlider.d.ts +20 -0
  60. package/dist/components/color-picker/useColorPickerValue.d.ts +1 -1
  61. package/dist/components/combobox/combobox.d.ts +29 -0
  62. package/dist/components/combobox/comboboxModel.d.ts +4 -0
  63. package/dist/components/combobox/index.d.ts +3 -0
  64. package/dist/components/combobox/index.js +2 -0
  65. package/dist/components/combobox/types.d.ts +43 -0
  66. package/dist/components/combobox/useCombobox.d.ts +45 -0
  67. package/dist/components/date-picker/date-picker.d.ts +33 -0
  68. package/dist/components/date-picker/datePickerModel.d.ts +10 -0
  69. package/dist/components/date-picker/index.d.ts +4 -0
  70. package/dist/components/date-picker/index.js +2 -0
  71. package/dist/components/date-picker/types.d.ts +57 -0
  72. package/dist/components/date-picker/useDatePicker.d.ts +29 -0
  73. package/dist/components/date-picker/useDatePickerValueState.d.ts +21 -0
  74. package/dist/components/dialog/{dialog-core.d.ts → dialogContext.d.ts} +1 -5
  75. package/dist/components/dialog/useDialogContentInteractions.d.ts +18 -0
  76. package/dist/components/dialog/useDialogRootState.d.ts +19 -0
  77. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
  78. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +1 -1
  79. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +1 -1
  80. package/dist/components/dropdown-menu/dropdown-menu-model.d.ts +8 -0
  81. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +2 -2
  82. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
  83. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +1 -1
  84. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +1 -1
  85. package/dist/components/dropdown-menu/dropdown-menu.d.ts +2 -2
  86. package/dist/components/dropdown-menu/{dropdown-menu-primitive-core.d.ts → dropdownMenuContext.d.ts} +17 -30
  87. package/dist/components/dropdown-menu/dropdownMenuDataModel.d.ts +20 -0
  88. package/dist/components/dropdown-menu/dropdownMenuInteraction.d.ts +3 -0
  89. package/dist/components/dropdown-menu/dropdownMenuInteractionNavigation.d.ts +24 -0
  90. package/dist/components/dropdown-menu/dropdownMenuInteractionRegistry.d.ts +42 -0
  91. package/dist/components/dropdown-menu/dropdownMenuInteractionTypes.d.ts +114 -0
  92. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +11 -11
  93. package/dist/components/dropdown-menu/useDropdownMenuContextTrigger.d.ts +9 -0
  94. package/dist/components/dropdown-menu/useDropdownMenuDataController.d.ts +35 -0
  95. package/dist/components/dropdown-menu/useDropdownMenuDataRegistration.d.ts +24 -0
  96. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +6 -5
  97. package/dist/components/dropdown-menu/useDropdownMenuInteractionDismissal.d.ts +17 -0
  98. package/dist/components/dropdown-menu/useDropdownMenuInteractionKeyboard.d.ts +19 -0
  99. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +0 -1
  100. package/dist/components/dropdown-menu/useDropdownMenuPresentation.d.ts +28 -0
  101. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +2 -2
  102. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +1 -1
  103. package/dist/components/dropdown-menu/useDropdownMenuTargetBindings.d.ts +19 -0
  104. package/dist/components/dropzone/dropzone.d.ts +31 -0
  105. package/dist/components/dropzone/dropzoneModel.d.ts +16 -0
  106. package/dist/components/dropzone/index.d.ts +3 -0
  107. package/dist/components/dropzone/index.js +2 -0
  108. package/dist/components/dropzone/types.d.ts +56 -0
  109. package/dist/components/dropzone/useDropzone.d.ts +25 -0
  110. package/dist/components/file-input/file-input.d.ts +29 -0
  111. package/dist/components/file-input/index.d.ts +3 -0
  112. package/dist/components/file-input/index.js +2 -0
  113. package/dist/components/file-input/types.d.ts +37 -0
  114. package/dist/components/file-input/useFileInput.d.ts +15 -0
  115. package/dist/components/floating/index.js +2 -2
  116. package/dist/components/floating/useFloatingPosition.d.ts +1 -14
  117. package/dist/components/floating/useFloatingTargetLifecycle.d.ts +32 -0
  118. package/dist/components/floating/useHoverDisclosure.d.ts +10 -0
  119. package/dist/components/hover-card/hover-card.d.ts +25 -0
  120. package/dist/components/hover-card/index.d.ts +3 -0
  121. package/dist/components/hover-card/index.js +2 -0
  122. package/dist/components/hover-card/types.d.ts +45 -0
  123. package/dist/components/hover-card/useHoverCard.d.ts +22 -0
  124. package/dist/components/hover-card/useHoverCardDisclosure.d.ts +19 -0
  125. package/dist/components/multi-select/index.d.ts +3 -0
  126. package/dist/components/multi-select/index.js +2 -0
  127. package/dist/components/multi-select/multi-select.d.ts +30 -0
  128. package/dist/components/multi-select/multiSelectModel.d.ts +3 -0
  129. package/dist/components/multi-select/types.d.ts +49 -0
  130. package/dist/components/multi-select/useMultiSelect.d.ts +46 -0
  131. package/dist/components/number-input/numberInputModel.d.ts +15 -0
  132. package/dist/components/number-input/useNumberInput.d.ts +3 -19
  133. package/dist/components/pagination/index.d.ts +1 -1
  134. package/dist/components/pagination/index.js +1 -1
  135. package/dist/components/pagination/paginationModel.d.ts +4 -0
  136. package/dist/components/pagination/types.d.ts +15 -0
  137. package/dist/components/pagination/usePagination.d.ts +3 -19
  138. package/dist/components/popover/usePopoverBindings.d.ts +13 -0
  139. package/dist/components/progress/progressModel.d.ts +8 -0
  140. package/dist/components/progress/useProgress.d.ts +0 -6
  141. package/dist/components/radio/useRadio.d.ts +1 -2
  142. package/dist/components/scroll-area/scroll-area.d.ts +1 -1
  143. package/dist/components/scroll-area/scrollAreaModel.d.ts +64 -0
  144. package/dist/components/scroll-area/useScrollArea.d.ts +70 -53
  145. package/dist/components/scroll-area/{useScrollAreaPresentation.d.ts → useScrollAreaAttributes.d.ts} +37 -17
  146. package/dist/components/scroll-area/useScrollAreaDerivedState.d.ts +8 -0
  147. package/dist/components/scroll-area/useScrollAreaMeasurement.d.ts +35 -0
  148. package/dist/components/scroll-area/useScrollAreaPointer.d.ts +11 -9
  149. package/dist/components/scroll-area/useScrollAreaVisibility.d.ts +15 -20
  150. package/dist/components/segmented-control/index.d.ts +3 -0
  151. package/dist/components/segmented-control/index.js +2 -0
  152. package/dist/components/segmented-control/segmented-control.d.ts +26 -0
  153. package/dist/components/segmented-control/types.d.ts +47 -0
  154. package/dist/components/segmented-control/useSegmentedControl.d.ts +15 -0
  155. package/dist/components/select/useSelect.d.ts +31 -19
  156. package/dist/components/slider/rangeSliderModel.d.ts +41 -0
  157. package/dist/components/slider/{sliderCore.d.ts → sliderModel.d.ts} +0 -1
  158. package/dist/components/slider/useRangeSlider.d.ts +9 -17
  159. package/dist/components/slider/useRangeSliderPointer.d.ts +1 -1
  160. package/dist/components/slider/useRangeSliderValueState.d.ts +40 -0
  161. package/dist/components/slider/useSlider.d.ts +7 -13
  162. package/dist/components/slider/useSliderPointerPreview.d.ts +22 -0
  163. package/dist/components/slider/useSliderTooltipState.d.ts +40 -0
  164. package/dist/components/slider/useSliderValueState.d.ts +33 -0
  165. package/dist/components/tags-input/index.d.ts +3 -0
  166. package/dist/components/tags-input/index.js +2 -0
  167. package/dist/components/tags-input/tags-input.d.ts +27 -0
  168. package/dist/components/tags-input/tagsInputModel.d.ts +12 -0
  169. package/dist/components/tags-input/types.d.ts +37 -0
  170. package/dist/components/tags-input/useTagsInput.d.ts +23 -0
  171. package/dist/components/teleport-provider/index.js +1 -1
  172. package/dist/components/teleport-provider/useTeleportTarget.d.ts +1 -2
  173. package/dist/components/toast/useToastLifecycle.d.ts +19 -0
  174. package/dist/components/tooltip/useTooltip.d.ts +1 -2
  175. package/dist/components/tooltip/useTooltipTargetBindings.d.ts +12 -0
  176. package/dist/css.js +12 -0
  177. package/dist/date-picker.css +49 -0
  178. package/dist/date-picker.js +809 -0
  179. package/dist/dialog.js +215 -218
  180. package/dist/direction.js +6 -0
  181. package/dist/dropdown-menu.css +21 -3
  182. package/dist/dropdown-menu.js +1626 -1185
  183. package/dist/dropzone.css +135 -0
  184. package/dist/dropzone.js +431 -0
  185. package/dist/events.js +59 -0
  186. package/dist/field.css +8 -8
  187. package/dist/field.js +13 -25
  188. package/dist/file-input.css +135 -0
  189. package/dist/file-input.js +198 -0
  190. package/dist/floatingOffset.js +11 -0
  191. package/dist/focus-trap.js +7 -5
  192. package/dist/focusNavigation.js +37 -0
  193. package/dist/hover-card.css +80 -0
  194. package/dist/hover-card.js +402 -0
  195. package/dist/icon-button.css +8 -8
  196. package/dist/icon-button.js +7 -6
  197. package/dist/index.d.ts +9 -0
  198. package/dist/index.js +20 -9
  199. package/dist/input.css +24 -24
  200. package/dist/input.js +19 -31
  201. package/dist/interactive.js +18 -0
  202. package/dist/internal/composables/useOverlayLayer.d.ts +12 -0
  203. package/dist/modal.js +2 -2
  204. package/dist/multi-select.css +316 -0
  205. package/dist/multi-select.js +481 -0
  206. package/dist/nativeChoice.js +169 -0
  207. package/dist/number-input.css +18 -18
  208. package/dist/number-input.js +44 -44
  209. package/dist/number.js +22 -0
  210. package/dist/overlay.js +3 -2
  211. package/dist/pagination.css +28 -28
  212. package/dist/pagination.js +66 -73
  213. package/dist/pointerSession.js +130 -0
  214. package/dist/popover.css +55 -37
  215. package/dist/popover.js +75 -101
  216. package/dist/progress.js +10 -13
  217. package/dist/query.js +40 -0
  218. package/dist/radio.css +18 -18
  219. package/dist/radio.js +30 -36
  220. package/dist/rafScheduler.js +34 -0
  221. package/dist/scroll-area.css +28 -28
  222. package/dist/scroll-area.js +540 -554
  223. package/dist/segmented-control.css +176 -0
  224. package/dist/segmented-control.js +382 -0
  225. package/dist/select.css +50 -48
  226. package/dist/select.js +131 -289
  227. package/dist/slider.css +191 -191
  228. package/dist/slider.js +720 -706
  229. package/dist/styles-api.d.ts +0 -1
  230. package/dist/styles-api.js +1 -4
  231. package/dist/switch.css +17 -17
  232. package/dist/switch.js +14 -15
  233. package/dist/tabs.css +43 -43
  234. package/dist/tabs.js +29 -56
  235. package/dist/tags-input.css +197 -0
  236. package/dist/tags-input.js +380 -0
  237. package/dist/text.js +17 -0
  238. package/dist/textarea.css +26 -26
  239. package/dist/textarea.js +21 -32
  240. package/dist/toast.css +26 -26
  241. package/dist/toast.js +141 -118
  242. package/dist/tooltip.css +12 -12
  243. package/dist/tooltip.js +64 -63
  244. package/dist/useCollapse.js +8 -11
  245. package/dist/useControlState.js +3 -6
  246. package/dist/useEditableOptionList.js +216 -0
  247. package/dist/useFlatOptionCollection.js +134 -0
  248. package/dist/useFloatingPosition.js +14 -40
  249. package/dist/useFloatingTargetLifecycle.js +127 -0
  250. package/dist/useFormControl.js +1 -0
  251. package/dist/useHoverDisclosure.js +561 -0
  252. package/dist/useNativeChoiceTransaction.js +46 -0
  253. package/dist/useNativeFileSelection.js +86 -0
  254. package/dist/useOverlayZIndex.js +246 -19
  255. package/dist/useTeleportTarget.js +3 -14
  256. package/dist/useTypeahead.js +94 -0
  257. package/dist/utils/aria.d.ts +3 -0
  258. package/dist/utils/attributes.d.ts +2 -0
  259. package/dist/utils/bem.d.ts +3 -0
  260. package/dist/utils/collectionNavigation.d.ts +2 -0
  261. package/dist/utils/color.d.ts +7 -0
  262. package/dist/{components/color-picker/color-picker-utils.d.ts → utils/colorPicker.d.ts} +5 -4
  263. package/dist/utils/componentColors.d.ts +7 -0
  264. package/dist/utils/css.d.ts +3 -0
  265. package/dist/utils/date.d.ts +13 -0
  266. package/dist/utils/dateAvailability.d.ts +7 -0
  267. package/dist/utils/dom/ancestry.d.ts +8 -0
  268. package/dist/utils/dom/attributes.d.ts +16 -0
  269. package/dist/utils/dom/componentRef.d.ts +4 -0
  270. package/dist/utils/dom/direction.d.ts +2 -0
  271. package/dist/utils/dom/events.d.ts +5 -0
  272. package/dist/utils/dom/files.d.ts +3 -0
  273. package/dist/utils/dom/focusNavigation.d.ts +7 -0
  274. package/dist/utils/dom/interactive.d.ts +2 -0
  275. package/dist/utils/dom/nativeChoice.d.ts +17 -0
  276. package/dist/utils/dom/pointerSession.d.ts +20 -0
  277. package/dist/utils/dom/query.d.ts +4 -0
  278. package/dist/utils/dom/scroll.d.ts +24 -0
  279. package/dist/utils/floatingOffset.d.ts +10 -0
  280. package/dist/utils/geometry.d.ts +14 -0
  281. package/dist/utils/indexPath.d.ts +6 -0
  282. package/dist/utils/number.d.ts +4 -0
  283. package/dist/utils/optionFilter.d.ts +5 -0
  284. package/dist/utils/rafScheduler.d.ts +4 -0
  285. package/dist/utils/text.d.ts +2 -0
  286. package/docs/code-architecture.md +118 -0
  287. package/docs/public-floating-api.md +13 -9
  288. package/docs/public-styles-api.md +25 -12
  289. package/package.json +51 -14
  290. package/src/styles/_mixins.scss +26 -0
  291. package/src/styles/styles-manifest.json +1 -2
  292. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +0 -3
  293. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +0 -21
  294. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +0 -36
  295. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +0 -29
  296. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +0 -52
  297. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +0 -17
  298. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +0 -18
  299. package/dist/components/scroll-area/scrollAreaCore.d.ts +0 -30
  300. package/dist/components/scroll-area/useScrollAreaControls.d.ts +0 -25
  301. package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +0 -38
  302. package/dist/components/select/useSelectNativeControl.d.ts +0 -9
  303. package/dist/components/select/useSelectNativeValue.d.ts +0 -9
  304. package/dist/floating.js +0 -415
  305. /package/dist/components/alert/{useAlertColor.d.ts → alertColor.d.ts} +0 -0
  306. /package/dist/components/avatar/{useAvatarColor.d.ts → avatarColor.d.ts} +0 -0
  307. /package/dist/components/badge/{useBadgeColor.d.ts → badgeColor.d.ts} +0 -0
  308. /package/dist/components/button/{useButtonColor.d.ts → buttonColor.d.ts} +0 -0
  309. /package/dist/components/color-swatch/{useColorSwatchColor.d.ts → colorSwatchColor.d.ts} +0 -0
  310. /package/dist/components/toast/{useToastColor.d.ts → toastColor.d.ts} +0 -0
package/dist/dialog.js CHANGED
@@ -1,38 +1,18 @@
1
1
  import { t as useControllableValue } from "./useControllableValue.js";
2
+ import { n as toPresenceAttribute } from "./attributes.js";
3
+ import { i as querySelectorSafe } from "./query.js";
2
4
  import { t as useRequiredInject } from "./useRequiredInject.js";
5
+ import { t as resolveHTMLElementRef } from "./componentRef.js";
6
+ import { t as createCancelableCustomEvent } from "./events.js";
3
7
  import { i as useOverlayLayerBranch, n as useOverlayZIndex, r as useOverlayLayer } from "./useOverlayZIndex.js";
4
8
  import { t as useFocusTrap } from "./useFocusTrap.js";
5
9
  import { t as provideTeleportTarget } from "./useTeleportTarget.js";
6
10
  import { VaporTeleport, applyVShow, computed, createComponent, createDynamicComponent, createIf, createSlot, defineVaporComponent, extend, isRef, mergeProps, nextTick, onBeforeUnmount, provide, ref, setTemplateRefBinding, shallowRef, unref, useAttrs, useId, watch } from "vue";
7
- //#region src/components/dialog/dialog-core.ts
11
+ //#region src/components/dialog/dialogContext.ts
8
12
  var dialogRootKey = Symbol("dialog-root");
9
13
  function resolveDialogCloseReason(reason) {
10
14
  return reason === "escape" || reason === "outside" || reason === "programmatic" ? reason : "programmatic";
11
15
  }
12
- function toDialogHTMLElement(value) {
13
- if (typeof HTMLElement !== "undefined" && value instanceof HTMLElement) return value;
14
- if (value == null || typeof Element !== "undefined" && value instanceof Element) return null;
15
- const vdomElement = value.$el;
16
- if (vdomElement instanceof HTMLElement) return vdomElement;
17
- const vaporBlock = value.block;
18
- return vaporBlock instanceof HTMLElement ? vaporBlock : null;
19
- }
20
- function resolveDialogHTMLElementRef(value, fallbackId, resolve) {
21
- const element = toDialogHTMLElement(value) ?? (typeof document !== "undefined" ? document.getElementById(fallbackId) : null);
22
- resolve(element);
23
- if (element || !value) return;
24
- nextTick(() => {
25
- resolve(toDialogHTMLElement(value) ?? (typeof document !== "undefined" ? document.getElementById(fallbackId) : null));
26
- });
27
- }
28
- function createDialogEvent(type, detail, originalEvent) {
29
- const target = originalEvent.target;
30
- return new (((typeof Node !== "undefined" && target instanceof Node ? target.ownerDocument?.defaultView : null)?.CustomEvent) ?? CustomEvent)(type, {
31
- bubbles: false,
32
- cancelable: true,
33
- detail
34
- });
35
- }
36
16
  //#endregion
37
17
  //#region src/components/dialog/dialog-close.vue
38
18
  var dialog_close_default = /* @__PURE__ */ defineVaporComponent({
@@ -58,7 +38,7 @@ var dialog_close_default = /* @__PURE__ */ defineVaporComponent({
58
38
  type: props.as === "button" ? "button" : void 0,
59
39
  disabled: props.as === "button" ? props.disabled || void 0 : void 0,
60
40
  "aria-disabled": props.as === "button" ? void 0 : props.disabled || void 0,
61
- "data-disabled": props.disabled ? "" : void 0,
41
+ "data-disabled": toPresenceAttribute(props.disabled),
62
42
  onClick
63
43
  }));
64
44
  return createDynamicComponent(() => __props.as, { $: [() => rootAttrs.value] }, extend(() => {
@@ -67,6 +47,83 @@ var dialog_close_default = /* @__PURE__ */ defineVaporComponent({
67
47
  }
68
48
  });
69
49
  //#endregion
50
+ //#region src/components/dialog/useDialogContentInteractions.ts
51
+ function useDialogContentInteractions(root, props, events) {
52
+ const id = computed(() => props.id ?? root.contentId.value);
53
+ const focusTrapContainers = computed(() => {
54
+ const content = root.contentRef.value;
55
+ if (!content) return null;
56
+ return [content, ...root.layer.focusBranches.value];
57
+ });
58
+ function resolveInitialFocus() {
59
+ const initialFocus = props.initialFocus;
60
+ const resolved = isRef(initialFocus) ? initialFocus.value : initialFocus;
61
+ if (typeof resolved !== "string") return resolved ?? void 0;
62
+ return querySelectorSafe(resolved, root.contentRef.value) ?? void 0;
63
+ }
64
+ const focusTrap = useFocusTrap(focusTrapContainers, {
65
+ ...props.focusTrapOptions,
66
+ initialFocus: resolveInitialFocus,
67
+ fallbackFocus: () => root.contentRef.value,
68
+ returnFocusOnDeactivate: false,
69
+ escapeDeactivates: false,
70
+ allowOutsideClick: true,
71
+ preventScroll: true,
72
+ delayInitialFocus: props.focusTrapOptions.delayInitialFocus ?? false
73
+ });
74
+ function setElement(value) {
75
+ resolveHTMLElementRef(value, id.value, (element) => root.setContent(element, id.value));
76
+ }
77
+ function onDocumentKeydown(event) {
78
+ if (event.defaultPrevented || !root.closeOnEscape.value) return;
79
+ const customEvent = createCancelableCustomEvent("dialog-escape-key-down", { originalEvent: event }, event);
80
+ events.escapeKeyDown(customEvent);
81
+ if (customEvent.defaultPrevented) return;
82
+ event.preventDefault();
83
+ root.close("escape");
84
+ }
85
+ function onDocumentPointerdown(event) {
86
+ if (event.defaultPrevented || !root.closeOnOutsideClick.value) return;
87
+ const customEvent = createCancelableCustomEvent("dialog-pointer-down-outside", { originalEvent: event }, event);
88
+ events.pointerDownOutside(customEvent);
89
+ events.interactOutside(customEvent);
90
+ if (!customEvent.defaultPrevented) root.close("outside");
91
+ }
92
+ const disconnectLayerInteraction = root.layer.connectInteraction({
93
+ inside: () => [root.triggerRef.value],
94
+ escapeKeyDown: onDocumentKeydown,
95
+ pointerDownOutside: onDocumentPointerdown
96
+ });
97
+ watch([
98
+ root.isOpen,
99
+ root.modal,
100
+ root.contentRef
101
+ ], ([open, modal]) => {
102
+ const content = root.contentRef.value;
103
+ if (!open || !content) {
104
+ focusTrap.deactivate({ returnFocus: false });
105
+ return;
106
+ }
107
+ if (modal) focusTrap.activate();
108
+ else focusTrap.deactivate({ returnFocus: false });
109
+ }, {
110
+ flush: "post",
111
+ immediate: true
112
+ });
113
+ watch(id, (nextId) => {
114
+ root.setContent(root.contentRef.value, nextId);
115
+ }, { immediate: true });
116
+ onBeforeUnmount(() => {
117
+ disconnectLayerInteraction();
118
+ focusTrap.deactivate({ returnFocus: false });
119
+ root.setContent(null, id.value);
120
+ });
121
+ return {
122
+ id,
123
+ setElement
124
+ };
125
+ }
126
+ //#endregion
70
127
  //#region src/components/dialog/dialog-content.vue
71
128
  var dialog_content_default = /* @__PURE__ */ defineVaporComponent({
72
129
  name: "RpDialogContent",
@@ -96,88 +153,17 @@ var dialog_content_default = /* @__PURE__ */ defineVaporComponent({
96
153
  const emit = __emit;
97
154
  const attrs = useAttrs();
98
155
  const root = useRequiredInject(dialogRootKey, "RpDialogContent");
99
- const id = computed(() => props.id ?? root.contentId.value);
100
156
  const shouldRender = computed(() => props.forceMount || root.isOpen.value);
101
- const focusTrapContainers = computed(() => {
102
- const content = root.contentRef.value;
103
- if (!content) return null;
104
- return [content, ...root.layer.focusBranches.value];
157
+ const { id, setElement } = useDialogContentInteractions(root, props, {
158
+ escapeKeyDown: (event) => emit("escapeKeyDown", event),
159
+ pointerDownOutside: (event) => emit("pointerDownOutside", event),
160
+ interactOutside: (event) => emit("interactOutside", event)
105
161
  });
106
162
  const ariaLabelledby = computed(() => {
107
163
  if (props.ariaLabel) return void 0;
108
164
  return props.ariaLabelledby ?? (root.titleIds.value.join(" ") || void 0);
109
165
  });
110
166
  const ariaDescribedby = computed(() => props.ariaDescribedby ?? (root.descriptionIds.value.join(" ") || void 0));
111
- function resolveInitialFocus() {
112
- const initialFocus = props.initialFocus;
113
- const resolved = isRef(initialFocus) ? initialFocus.value : initialFocus;
114
- if (typeof resolved !== "string") return resolved ?? void 0;
115
- try {
116
- return root.contentRef.value?.querySelector(resolved) ?? void 0;
117
- } catch {
118
- return;
119
- }
120
- }
121
- const focusTrap = useFocusTrap(focusTrapContainers, {
122
- ...props.focusTrapOptions,
123
- initialFocus: resolveInitialFocus,
124
- fallbackFocus: () => root.contentRef.value,
125
- returnFocusOnDeactivate: false,
126
- escapeDeactivates: false,
127
- allowOutsideClick: true,
128
- preventScroll: true,
129
- delayInitialFocus: props.focusTrapOptions.delayInitialFocus ?? false
130
- });
131
- function setElement(value) {
132
- resolveDialogHTMLElementRef(value, id.value, (element) => root.setContent(element, id.value));
133
- }
134
- function onDocumentKeydown(event) {
135
- if (event.key !== "Escape" || event.defaultPrevented || !root.closeOnEscape.value || !root.layer.isTopLayer()) return;
136
- const customEvent = createDialogEvent("dialog-escape-key-down", { originalEvent: event }, event);
137
- emit("escapeKeyDown", customEvent);
138
- if (customEvent.defaultPrevented) return;
139
- event.preventDefault();
140
- root.close("escape");
141
- }
142
- function onDocumentPointerdown(event) {
143
- if (event.defaultPrevented || !root.closeOnOutsideClick.value || !root.layer.isTopLayer() || root.layer.isInside(event)) return;
144
- const customEvent = createDialogEvent("dialog-pointer-down-outside", { originalEvent: event }, event);
145
- emit("pointerDownOutside", customEvent);
146
- emit("interactOutside", customEvent);
147
- if (!customEvent.defaultPrevented) root.close("outside");
148
- }
149
- function setDocumentListeners(active) {
150
- const document = root.contentRef.value?.ownerDocument;
151
- if (!document) return;
152
- const method = active ? "addEventListener" : "removeEventListener";
153
- document[method]("keydown", onDocumentKeydown);
154
- document[method]("pointerdown", onDocumentPointerdown, true);
155
- }
156
- watch([
157
- root.isOpen,
158
- root.modal,
159
- root.contentRef
160
- ], ([open, modal], _previous, onCleanup) => {
161
- if (!open || !root.contentRef.value) {
162
- focusTrap.deactivate({ returnFocus: false });
163
- return;
164
- }
165
- setDocumentListeners(true);
166
- if (modal) focusTrap.activate();
167
- else focusTrap.deactivate({ returnFocus: false });
168
- onCleanup(() => setDocumentListeners(false));
169
- }, {
170
- flush: "post",
171
- immediate: true
172
- });
173
- watch(id, (nextId) => {
174
- root.setContent(root.contentRef.value, nextId);
175
- }, { immediate: true });
176
- onBeforeUnmount(() => {
177
- setDocumentListeners(false);
178
- focusTrap.deactivate({ returnFocus: false });
179
- root.setContent(null, id.value);
180
- });
181
167
  const rootAttrs = computed(() => mergeProps(attrs, {
182
168
  id: id.value,
183
169
  role: props.role,
@@ -187,7 +173,7 @@ var dialog_content_default = /* @__PURE__ */ defineVaporComponent({
187
173
  "aria-labelledby": ariaLabelledby.value,
188
174
  "aria-describedby": ariaDescribedby.value,
189
175
  "data-state": root.isOpen.value ? "open" : "closed",
190
- "data-modal": root.modal.value ? "" : void 0,
176
+ "data-modal": toPresenceAttribute(root.modal.value),
191
177
  style: { zIndex: root.layer.zIndex.value }
192
178
  }));
193
179
  return createIf(() => shouldRender.value, () => {
@@ -198,7 +184,7 @@ var dialog_content_default = /* @__PURE__ */ defineVaporComponent({
198
184
  });
199
185
  }, { _: 8 }), 1);
200
186
  applyVShow(n3, () => unref(root).isOpen.value);
201
- setTemplateRefBinding(n3, () => setElement);
187
+ setTemplateRefBinding(n3, () => setElement, void 0, void 0, "setElement");
202
188
  return n3;
203
189
  });
204
190
  }
@@ -259,7 +245,7 @@ var dialog_overlay_default = /* @__PURE__ */ defineVaporComponent({
259
245
  style: { zIndex: root.layer.zIndex.value - 1 }
260
246
  }));
261
247
  function setElement(value) {
262
- resolveDialogHTMLElementRef(value, id.value, (resolved) => {
248
+ resolveHTMLElementRef(value, id.value, (resolved) => {
263
249
  element.value = resolved;
264
250
  });
265
251
  }
@@ -290,8 +276,7 @@ var dialog_portal_default = /* @__PURE__ */ defineVaporComponent({
290
276
  teleportTo: { default: void 0 }
291
277
  },
292
278
  setup(__props) {
293
- const props = __props;
294
- const teleportTo = provideTeleportTarget(props, () => Boolean(props.teleport));
279
+ const teleportTo = provideTeleportTarget(__props);
295
280
  return createComponent(VaporTeleport, {
296
281
  to: () => unref(teleportTo),
297
282
  disabled: () => !__props.teleport
@@ -301,6 +286,121 @@ var dialog_portal_default = /* @__PURE__ */ defineVaporComponent({
301
286
  }
302
287
  });
303
288
  //#endregion
289
+ //#region src/components/dialog/useDialogRootState.ts
290
+ function registerId(target, id) {
291
+ target.value = [...target.value.filter((value) => value !== id), id];
292
+ return () => {
293
+ target.value = target.value.filter((value) => value !== id);
294
+ };
295
+ }
296
+ function useDialogRootState(props, events) {
297
+ const generatedId = useId();
298
+ const controllableOpen = useControllableValue({
299
+ modelValue: () => props.open,
300
+ defaultValue: () => props.defaultOpen,
301
+ onChange: events.openChange
302
+ });
303
+ const isOpen = controllableOpen.value;
304
+ const modal = computed(() => props.modal);
305
+ const closeOnEscape = computed(() => props.closeOnEscape);
306
+ const closeOnOutsideClick = computed(() => props.closeOnOutsideClick);
307
+ const preventScroll = computed(() => props.preventScroll);
308
+ const returnFocus = computed(() => props.returnFocus);
309
+ const triggerRef = ref(null);
310
+ const contentRef = ref(null);
311
+ const contentId = ref(`${generatedId}-dialog`);
312
+ const titleIds = shallowRef([]);
313
+ const descriptionIds = shallowRef([]);
314
+ let restoreFocusTo = null;
315
+ const layer = useOverlayLayer({
316
+ active: isOpen,
317
+ element: contentRef,
318
+ modal,
319
+ modalEffects: true,
320
+ preventScroll,
321
+ baseZIndex: useOverlayZIndex({
322
+ baseZIndex: () => props.baseZIndex,
323
+ defaultBaseZIndex: 1e3,
324
+ aboveParent: false
325
+ })
326
+ });
327
+ function setOpen(value) {
328
+ if (isOpen.value !== value) controllableOpen.setValue(value);
329
+ }
330
+ function rememberFocus() {
331
+ if (typeof document === "undefined" || restoreFocusTo) return;
332
+ const activeElement = document.activeElement;
333
+ restoreFocusTo = activeElement instanceof HTMLElement && activeElement !== document.body ? activeElement : triggerRef.value;
334
+ }
335
+ function restoreFocus() {
336
+ const target = restoreFocusTo ?? triggerRef.value;
337
+ restoreFocusTo = null;
338
+ if (!returnFocus.value) return;
339
+ nextTick(() => {
340
+ if (target?.isConnected) target.focus({ preventScroll: true });
341
+ });
342
+ }
343
+ function open() {
344
+ if (isOpen.value) return;
345
+ rememberFocus();
346
+ setOpen(true);
347
+ }
348
+ function close(reason = "programmatic") {
349
+ if (!isOpen.value) return;
350
+ setOpen(false);
351
+ events.close(resolveDialogCloseReason(reason));
352
+ }
353
+ function toggle() {
354
+ if (isOpen.value) close("programmatic");
355
+ else open();
356
+ }
357
+ function setTrigger(element) {
358
+ triggerRef.value = element;
359
+ }
360
+ function setContent(element, id) {
361
+ contentRef.value = element;
362
+ contentId.value = id;
363
+ }
364
+ const context = {
365
+ isOpen,
366
+ modal,
367
+ closeOnEscape,
368
+ closeOnOutsideClick,
369
+ returnFocus,
370
+ triggerRef,
371
+ contentRef,
372
+ contentId,
373
+ titleIds,
374
+ descriptionIds,
375
+ layer,
376
+ open,
377
+ close,
378
+ toggle,
379
+ setTrigger,
380
+ setContent,
381
+ registerTitle: (id) => registerId(titleIds, id),
382
+ registerDescription: (id) => registerId(descriptionIds, id)
383
+ };
384
+ const slotProps = computed(() => ({
385
+ isOpen: isOpen.value,
386
+ zIndex: layer.zIndex.value,
387
+ open,
388
+ close,
389
+ toggle
390
+ }));
391
+ watch(isOpen, (value, previous) => {
392
+ if (value && !previous) rememberFocus();
393
+ else if (!value && previous) restoreFocus();
394
+ }, { immediate: true });
395
+ onBeforeUnmount(() => {
396
+ if (isOpen.value) restoreFocus();
397
+ });
398
+ return {
399
+ context,
400
+ slotProps
401
+ };
402
+ }
403
+ //#endregion
304
404
  //#region src/components/dialog/dialog-root.vue
305
405
  var dialog_root_default = /* @__PURE__ */ defineVaporComponent({
306
406
  name: "RpDialogRoot",
@@ -340,120 +440,17 @@ var dialog_root_default = /* @__PURE__ */ defineVaporComponent({
340
440
  setup(__props, { expose: __expose, emit: __emit }) {
341
441
  const props = __props;
342
442
  const emit = __emit;
343
- const generatedId = useId();
344
- const controllableOpen = useControllableValue({
345
- modelValue: () => props.open,
346
- defaultValue: () => props.defaultOpen,
347
- onChange: (value) => emit("update:open", value)
348
- });
349
- const isOpen = controllableOpen.value;
350
- const modal = computed(() => props.modal);
351
- const closeOnEscape = computed(() => props.closeOnEscape);
352
- const closeOnOutsideClick = computed(() => props.closeOnOutsideClick);
353
- const preventScroll = computed(() => props.preventScroll);
354
- const returnFocus = computed(() => props.returnFocus);
355
- const triggerRef = ref(null);
356
- const contentRef = ref(null);
357
- const contentId = ref(`${generatedId}-dialog`);
358
- const titleIds = shallowRef([]);
359
- const descriptionIds = shallowRef([]);
360
- let restoreFocusTo = null;
361
- const layer = useOverlayLayer({
362
- active: isOpen,
363
- element: contentRef,
364
- modal,
365
- modalEffects: true,
366
- preventScroll,
367
- baseZIndex: useOverlayZIndex({
368
- baseZIndex: () => props.baseZIndex,
369
- defaultBaseZIndex: 1e3,
370
- aboveParent: false
371
- })
372
- });
373
- function setOpen(value) {
374
- if (isOpen.value !== value) controllableOpen.setValue(value);
375
- }
376
- function rememberFocus() {
377
- if (typeof document === "undefined" || restoreFocusTo) return;
378
- const activeElement = document.activeElement;
379
- restoreFocusTo = activeElement instanceof HTMLElement && activeElement !== document.body ? activeElement : triggerRef.value;
380
- }
381
- function restoreFocus() {
382
- const target = restoreFocusTo ?? triggerRef.value;
383
- restoreFocusTo = null;
384
- if (!returnFocus.value) return;
385
- nextTick(() => {
386
- if (target?.isConnected) target.focus({ preventScroll: true });
387
- });
388
- }
389
- function open() {
390
- if (isOpen.value) return;
391
- rememberFocus();
392
- setOpen(true);
393
- }
394
- function close(reason = "programmatic") {
395
- if (!isOpen.value) return;
396
- setOpen(false);
397
- emit("close", resolveDialogCloseReason(reason));
398
- }
399
- function toggle() {
400
- if (isOpen.value) close("programmatic");
401
- else open();
402
- }
403
- function setTrigger(element) {
404
- triggerRef.value = element;
405
- }
406
- function setContent(element, id) {
407
- contentRef.value = element;
408
- contentId.value = id;
409
- }
410
- function registerId(target, id) {
411
- target.value = [...target.value.filter((value) => value !== id), id];
412
- return () => {
413
- target.value = target.value.filter((value) => value !== id);
414
- };
415
- }
416
- const context = {
417
- isOpen,
418
- modal,
419
- closeOnEscape,
420
- closeOnOutsideClick,
421
- returnFocus,
422
- triggerRef,
423
- contentRef,
424
- contentId,
425
- titleIds,
426
- descriptionIds,
427
- layer,
428
- open,
429
- close,
430
- toggle,
431
- setTrigger,
432
- setContent,
433
- registerTitle: (id) => registerId(titleIds, id),
434
- registerDescription: (id) => registerId(descriptionIds, id)
435
- };
436
- const slotProps = computed(() => ({
437
- isOpen: isOpen.value,
438
- zIndex: layer.zIndex.value,
439
- open,
440
- close,
441
- toggle
442
- }));
443
- watch(isOpen, (value, previous) => {
444
- if (value && !previous) rememberFocus();
445
- else if (!value && previous) restoreFocus();
446
- }, { immediate: true });
447
- onBeforeUnmount(() => {
448
- if (isOpen.value) restoreFocus();
443
+ const { context, slotProps } = useDialogRootState(props, {
444
+ openChange: (open) => emit("update:open", open),
445
+ close: (reason) => emit("close", reason)
449
446
  });
450
447
  provide(dialogRootKey, context);
451
448
  __expose({
452
- open,
453
- close,
454
- toggle
449
+ open: context.open,
450
+ close: context.close,
451
+ toggle: context.toggle
455
452
  });
456
- return createSlot("default", { $: [() => slotProps.value] });
453
+ return createSlot("default", { $: [() => unref(slotProps)] });
457
454
  }
458
455
  });
459
456
  //#endregion
@@ -505,7 +502,7 @@ var dialog_trigger_default = /* @__PURE__ */ defineVaporComponent({
505
502
  const generatedId = `${useId()}-trigger`;
506
503
  const id = computed(() => props.id ?? generatedId);
507
504
  function setElement(value) {
508
- resolveDialogHTMLElementRef(value, id.value, root.setTrigger);
505
+ resolveHTMLElementRef(value, id.value, root.setTrigger);
509
506
  }
510
507
  function onClick(event) {
511
508
  if (event.defaultPrevented || props.disabled) return;
@@ -520,7 +517,7 @@ var dialog_trigger_default = /* @__PURE__ */ defineVaporComponent({
520
517
  "aria-haspopup": "dialog",
521
518
  "aria-disabled": props.as === "button" ? void 0 : props.disabled || void 0,
522
519
  "data-state": root.isOpen.value ? "open" : "closed",
523
- "data-disabled": props.disabled ? "" : void 0,
520
+ "data-disabled": toPresenceAttribute(props.disabled),
524
521
  onClick
525
522
  }));
526
523
  onBeforeUnmount(() => root.setTrigger(null));
@@ -0,0 +1,6 @@
1
+ //#region src/utils/dom/direction.ts
2
+ function getElementDirection(element) {
3
+ return element.ownerDocument.defaultView?.getComputedStyle(element).direction === "rtl" ? "rtl" : "ltr";
4
+ }
5
+ //#endregion
6
+ export { getElementDirection as t };
@@ -65,15 +65,33 @@
65
65
  bottom: auto;
66
66
  left: 0;
67
67
  }
68
+ .rp-dropdown-menu__arrow {
69
+ background-color: inherit;
70
+ border: inherit;
71
+ rotate: 45deg;
72
+ }
73
+ .rp-dropdown-menu__arrow[data-side=top] {
74
+ border-top-color: transparent;
75
+ border-left-color: transparent;
76
+ }
77
+ .rp-dropdown-menu__arrow[data-side=right] {
78
+ border-top-color: transparent;
79
+ border-right-color: transparent;
80
+ }
81
+ .rp-dropdown-menu__arrow[data-side=bottom] {
82
+ border-right-color: transparent;
83
+ border-bottom-color: transparent;
84
+ }
85
+ .rp-dropdown-menu__arrow[data-side=left] {
86
+ border-bottom-color: transparent;
87
+ border-left-color: transparent;
88
+ }
68
89
  .rp-dropdown-menu__arrow {
69
90
  position: absolute;
70
91
  box-sizing: border-box;
71
92
  width: var(--_rp-dropdown-menu-arrow-size);
72
93
  height: var(--_rp-dropdown-menu-arrow-size);
73
94
  pointer-events: none;
74
- background-color: inherit;
75
- border: inherit;
76
- rotate: 45deg;
77
95
  }
78
96
  .rp-dropdown-menu__arrow[data-side=top] {
79
97
  bottom: calc(-1 * var(--_rp-dropdown-menu-arrow-size) / 2);