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/floating.js DELETED
@@ -1,415 +0,0 @@
1
- import { t as useControllableValue } from "./useControllableValue.js";
2
- import { computed, onBeforeUnmount, onMounted, shallowRef, toValue, watch } from "vue";
3
- //#region src/components/floating/useHoverDisclosure.ts
4
- var DEFAULT_OPEN_DELAY = 0;
5
- var DEFAULT_CLOSE_DELAY = 0;
6
- function isElement(value) {
7
- return typeof Element !== "undefined" && value instanceof Element;
8
- }
9
- function resolveSelector(selector) {
10
- if (typeof document === "undefined") return null;
11
- try {
12
- return document.querySelector(selector);
13
- } catch {
14
- return null;
15
- }
16
- }
17
- function resolveInteractionTarget(target) {
18
- if (!target) return null;
19
- if (typeof target === "string") return resolveSelector(target);
20
- if (isElement(target)) return target;
21
- return isElement(target.contextElement) ? target.contextElement : null;
22
- }
23
- function resolveContentTarget(target) {
24
- if (!target) return null;
25
- return typeof target === "string" ? resolveSelector(target) : isElement(target) ? target : null;
26
- }
27
- function readDelay(value, fallback) {
28
- if (value == null) return fallback;
29
- return Number.isFinite(value) ? Math.max(0, value) : fallback;
30
- }
31
- function eventElement(event) {
32
- return isElement(event.currentTarget) ? event.currentTarget : null;
33
- }
34
- function focusLeavesCurrentTarget(event) {
35
- const currentTarget = eventElement(event);
36
- const nextTarget = event.relatedTarget;
37
- return !(currentTarget && typeof Node !== "undefined" && nextTarget instanceof Node && currentTarget.contains(nextTarget));
38
- }
39
- function useHoverDisclosure(options = {}) {
40
- const resolvedInteractionTarget = shallowRef(null);
41
- const resolvedContentTarget = shallowRef(null);
42
- const controlledOpen = computed(() => toValue(options.open));
43
- const isDisabled = computed(() => Boolean(toValue(options.disabled)));
44
- let pendingChangeDetails;
45
- const controllableOpen = useControllableValue({
46
- modelValue: () => controlledOpen.value,
47
- defaultValue: () => options.defaultOpen === true && !isDisabled.value,
48
- onChange: (nextOpen) => {
49
- if (pendingChangeDetails) options.onOpenChange?.(nextOpen, pendingChangeDetails);
50
- }
51
- });
52
- const openState = controllableOpen.value;
53
- const isOpen = computed(() => !isDisabled.value && openState.value);
54
- const state = computed(() => isOpen.value ? "open" : "closed");
55
- let requestedOpen = openState.value;
56
- let triggerHovered = false;
57
- let contentHovered = false;
58
- let triggerFocused = false;
59
- let contentFocused = false;
60
- let touchPinned = false;
61
- let touchPointerActive = false;
62
- let touchClickPending = false;
63
- let triggerElement = null;
64
- let contentElement = null;
65
- let openTimer;
66
- let closeTimer;
67
- let documentListenersActive = false;
68
- let disposed = false;
69
- function getOpenDelay() {
70
- return readDelay(toValue(options.openDelay), DEFAULT_OPEN_DELAY);
71
- }
72
- function getCloseDelay() {
73
- return readDelay(toValue(options.closeDelay), DEFAULT_CLOSE_DELAY);
74
- }
75
- function getTouchBehavior() {
76
- return toValue(options.touchBehavior) ?? "none";
77
- }
78
- function clearOpenTimer() {
79
- if (openTimer === void 0) return;
80
- clearTimeout(openTimer);
81
- openTimer = void 0;
82
- }
83
- function clearCloseTimer() {
84
- if (closeTimer === void 0) return;
85
- clearTimeout(closeTimer);
86
- closeTimer = void 0;
87
- }
88
- function clearTimers() {
89
- clearOpenTimer();
90
- clearCloseTimer();
91
- }
92
- function hasActiveInteraction() {
93
- return triggerHovered || contentHovered || triggerFocused || contentFocused || touchPinned;
94
- }
95
- function setOpen(nextOpen, reason, event) {
96
- if (disposed || nextOpen && isDisabled.value || requestedOpen === nextOpen) return;
97
- requestedOpen = nextOpen;
98
- pendingChangeDetails = {
99
- reason,
100
- event
101
- };
102
- try {
103
- controllableOpen.setValue(nextOpen);
104
- } finally {
105
- pendingChangeDetails = void 0;
106
- }
107
- }
108
- function openImmediately(reason, event) {
109
- clearTimers();
110
- setOpen(true, reason, event);
111
- }
112
- function closeImmediately(reason, event) {
113
- clearTimers();
114
- setOpen(false, reason, event);
115
- }
116
- function scheduleOpen(reason, event) {
117
- if (disposed || isDisabled.value) return;
118
- clearCloseTimer();
119
- clearOpenTimer();
120
- if (requestedOpen) return;
121
- const delay = getOpenDelay();
122
- if (delay === 0) {
123
- setOpen(true, reason, event);
124
- return;
125
- }
126
- openTimer = setTimeout(() => {
127
- openTimer = void 0;
128
- if (!triggerHovered || isDisabled.value) return;
129
- setOpen(true, reason, event);
130
- }, delay);
131
- }
132
- function scheduleClose(reason, event) {
133
- clearOpenTimer();
134
- clearCloseTimer();
135
- if (disposed || hasActiveInteraction()) return;
136
- closeTimer = setTimeout(() => {
137
- closeTimer = void 0;
138
- if (hasActiveInteraction()) return;
139
- setOpen(false, reason, event);
140
- }, getCloseDelay());
141
- }
142
- function rememberTrigger(event) {
143
- triggerElement = eventElement(event) ?? resolvedInteractionTarget.value ?? triggerElement;
144
- }
145
- function rememberContent(event) {
146
- contentElement = eventElement(event) ?? resolvedContentTarget.value ?? contentElement;
147
- }
148
- function onTriggerPointerenter(event) {
149
- rememberTrigger(event);
150
- if (event.pointerType === "touch" || isDisabled.value) return;
151
- triggerHovered = true;
152
- scheduleOpen("hover", event);
153
- }
154
- function onTriggerPointerleave(event) {
155
- rememberTrigger(event);
156
- if (event.pointerType === "touch") return;
157
- triggerHovered = false;
158
- scheduleClose("hover", event);
159
- }
160
- function onContentPointerenter(event) {
161
- rememberContent(event);
162
- if (event.pointerType === "touch" || isDisabled.value) return;
163
- contentHovered = true;
164
- clearCloseTimer();
165
- }
166
- function onContentPointerleave(event) {
167
- rememberContent(event);
168
- if (event.pointerType === "touch") return;
169
- contentHovered = false;
170
- scheduleClose("hover", event);
171
- }
172
- function onTriggerFocusin(event) {
173
- rememberTrigger(event);
174
- if (isDisabled.value || toValue(options.openOnFocus) === false) return;
175
- triggerFocused = true;
176
- openImmediately("focus", event);
177
- }
178
- function onTriggerFocusout(event) {
179
- rememberTrigger(event);
180
- if (!focusLeavesCurrentTarget(event)) return;
181
- triggerFocused = false;
182
- scheduleClose("focus", event);
183
- }
184
- function onContentFocusin(event) {
185
- rememberContent(event);
186
- if (isDisabled.value) return;
187
- contentFocused = true;
188
- clearCloseTimer();
189
- }
190
- function onContentFocusout(event) {
191
- rememberContent(event);
192
- if (!focusLeavesCurrentTarget(event)) return;
193
- contentFocused = false;
194
- scheduleClose("focus", event);
195
- }
196
- function onTriggerPointerdown(event) {
197
- rememberTrigger(event);
198
- touchPointerActive = event.pointerType === "touch";
199
- touchClickPending = false;
200
- }
201
- function onTriggerPointerup(event) {
202
- rememberTrigger(event);
203
- touchClickPending = event.pointerType === "touch" && touchPointerActive;
204
- touchPointerActive = false;
205
- }
206
- function onTriggerPointercancel(event) {
207
- rememberTrigger(event);
208
- touchPointerActive = false;
209
- touchClickPending = false;
210
- }
211
- function onTriggerClick(event) {
212
- rememberTrigger(event);
213
- if (!touchClickPending) return;
214
- touchClickPending = false;
215
- if (getTouchBehavior() !== "toggle" || isDisabled.value) return;
216
- event.preventDefault();
217
- if (touchPinned || requestedOpen) {
218
- touchPinned = false;
219
- closeImmediately("touch", event);
220
- return;
221
- }
222
- touchPinned = true;
223
- openImmediately("touch", event);
224
- }
225
- function onContentPointerdown(event) {
226
- rememberContent(event);
227
- }
228
- function onKeydown(event) {
229
- if (event.key !== "Escape" || toValue(options.closeOnEscape) === false || !isOpen.value) return;
230
- touchPinned = false;
231
- closeImmediately("escape", event);
232
- }
233
- function open() {
234
- openImmediately("programmatic");
235
- }
236
- function close() {
237
- touchPinned = false;
238
- closeImmediately("programmatic");
239
- }
240
- function toggle() {
241
- if (requestedOpen || isOpen.value) close();
242
- else open();
243
- }
244
- function isEventInside(event) {
245
- const elements = [
246
- triggerElement,
247
- contentElement,
248
- resolvedInteractionTarget.value,
249
- resolvedContentTarget.value
250
- ].filter((element) => element !== null);
251
- const path = typeof event.composedPath === "function" ? event.composedPath() : [];
252
- if (elements.some((element) => path.includes(element))) return true;
253
- const target = event.target;
254
- return typeof Node !== "undefined" && target instanceof Node && elements.some((element) => element.contains(target));
255
- }
256
- function onDocumentPointerdown(event) {
257
- if (!touchPinned || isEventInside(event)) return;
258
- touchPinned = false;
259
- closeImmediately("outside", event);
260
- }
261
- function setDocumentListeners(active) {
262
- if (typeof document === "undefined" || active === documentListenersActive) return;
263
- documentListenersActive = active;
264
- const method = active ? "addEventListener" : "removeEventListener";
265
- document[method]("keydown", onKeydown);
266
- document[method]("pointerdown", onDocumentPointerdown, true);
267
- }
268
- function syncInteractionTarget() {
269
- resolvedInteractionTarget.value = resolveInteractionTarget(toValue(options.interactionTarget));
270
- }
271
- function syncContentTarget() {
272
- resolvedContentTarget.value = resolveContentTarget(toValue(options.contentTarget));
273
- }
274
- function bindTriggerTarget(target, cleanup) {
275
- triggerElement = target;
276
- target.addEventListener("pointerenter", onTriggerPointerenter);
277
- target.addEventListener("pointerleave", onTriggerPointerleave);
278
- target.addEventListener("pointerdown", onTriggerPointerdown);
279
- target.addEventListener("pointerup", onTriggerPointerup);
280
- target.addEventListener("pointercancel", onTriggerPointercancel);
281
- target.addEventListener("click", onTriggerClick);
282
- target.addEventListener("focusin", onTriggerFocusin);
283
- target.addEventListener("focusout", onTriggerFocusout);
284
- target.addEventListener("keydown", onKeydown);
285
- cleanup(() => {
286
- target.removeEventListener("pointerenter", onTriggerPointerenter);
287
- target.removeEventListener("pointerleave", onTriggerPointerleave);
288
- target.removeEventListener("pointerdown", onTriggerPointerdown);
289
- target.removeEventListener("pointerup", onTriggerPointerup);
290
- target.removeEventListener("pointercancel", onTriggerPointercancel);
291
- target.removeEventListener("click", onTriggerClick);
292
- target.removeEventListener("focusin", onTriggerFocusin);
293
- target.removeEventListener("focusout", onTriggerFocusout);
294
- target.removeEventListener("keydown", onKeydown);
295
- if (triggerElement === target) triggerElement = null;
296
- triggerHovered = false;
297
- triggerFocused = false;
298
- scheduleClose("hover");
299
- });
300
- }
301
- function bindContentTarget(target, cleanup) {
302
- contentElement = target;
303
- target.addEventListener("pointerenter", onContentPointerenter);
304
- target.addEventListener("pointerleave", onContentPointerleave);
305
- target.addEventListener("pointerdown", onContentPointerdown);
306
- target.addEventListener("focusin", onContentFocusin);
307
- target.addEventListener("focusout", onContentFocusout);
308
- target.addEventListener("keydown", onKeydown);
309
- cleanup(() => {
310
- target.removeEventListener("pointerenter", onContentPointerenter);
311
- target.removeEventListener("pointerleave", onContentPointerleave);
312
- target.removeEventListener("pointerdown", onContentPointerdown);
313
- target.removeEventListener("focusin", onContentFocusin);
314
- target.removeEventListener("focusout", onContentFocusout);
315
- target.removeEventListener("keydown", onKeydown);
316
- if (contentElement === target) contentElement = null;
317
- contentHovered = false;
318
- contentFocused = false;
319
- scheduleClose("hover");
320
- });
321
- }
322
- const triggerProps = computed(() => ({
323
- "data-state": state.value,
324
- onPointerenter: onTriggerPointerenter,
325
- onPointerleave: onTriggerPointerleave,
326
- onPointerdown: onTriggerPointerdown,
327
- onPointerup: onTriggerPointerup,
328
- onPointercancel: onTriggerPointercancel,
329
- onClick: onTriggerClick,
330
- onFocusin: onTriggerFocusin,
331
- onFocusout: onTriggerFocusout,
332
- onKeydown
333
- }));
334
- const contentProps = computed(() => ({
335
- "data-state": state.value,
336
- onPointerenter: onContentPointerenter,
337
- onPointerleave: onContentPointerleave,
338
- onPointerdown: onContentPointerdown,
339
- onFocusin: onContentFocusin,
340
- onFocusout: onContentFocusout,
341
- onKeydown
342
- }));
343
- watch([openState, controllableOpen.isControlled], ([value]) => {
344
- requestedOpen = value;
345
- if (!value) {
346
- contentHovered = false;
347
- contentFocused = false;
348
- contentElement = null;
349
- touchPinned = false;
350
- }
351
- }, { flush: "sync" });
352
- watch(isDisabled, (disabled) => {
353
- if (!disabled) return;
354
- triggerHovered = false;
355
- contentHovered = false;
356
- triggerFocused = false;
357
- contentFocused = false;
358
- touchPinned = false;
359
- touchPointerActive = false;
360
- touchClickPending = false;
361
- closeImmediately("disabled");
362
- });
363
- watch(() => getTouchBehavior(), (behavior) => {
364
- if (behavior === "toggle" || !touchPinned) return;
365
- touchPinned = false;
366
- closeImmediately("touch");
367
- });
368
- watch(() => toValue(options.interactionTarget), syncInteractionTarget, {
369
- flush: "post",
370
- immediate: true
371
- });
372
- watch(() => toValue(options.contentTarget), syncContentTarget, {
373
- flush: "post",
374
- immediate: true
375
- });
376
- watch(resolvedInteractionTarget, (target, _previous, cleanup) => {
377
- if (target) bindTriggerTarget(target, cleanup);
378
- }, {
379
- flush: "sync",
380
- immediate: true
381
- });
382
- watch(resolvedContentTarget, (target, _previous, cleanup) => {
383
- if (target) bindContentTarget(target, cleanup);
384
- }, {
385
- flush: "sync",
386
- immediate: true
387
- });
388
- watch(isOpen, setDocumentListeners, { flush: "sync" });
389
- watch(isOpen, () => {
390
- syncInteractionTarget();
391
- syncContentTarget();
392
- }, { flush: "post" });
393
- onMounted(() => {
394
- syncInteractionTarget();
395
- syncContentTarget();
396
- setDocumentListeners(isOpen.value);
397
- });
398
- onBeforeUnmount(() => {
399
- disposed = true;
400
- clearTimers();
401
- setDocumentListeners(false);
402
- });
403
- return {
404
- isOpen,
405
- isDisabled,
406
- state,
407
- triggerProps,
408
- contentProps,
409
- open,
410
- close,
411
- toggle
412
- };
413
- }
414
- //#endregion
415
- export { useHoverDisclosure as t };