ropav 0.0.11 → 0.0.13

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 (126) hide show
  1. package/README.md +3 -0
  2. package/dist/checkbox.css +32 -32
  3. package/dist/checkbox.js +33 -14
  4. package/dist/color-input.css +19 -19
  5. package/dist/color-input.js +35 -17
  6. package/dist/components/checkbox/types.d.ts +5 -1
  7. package/dist/components/checkbox/useCheckbox.d.ts +1 -1
  8. package/dist/components/color-input/types.d.ts +4 -1
  9. package/dist/components/color-input/useColorInput.d.ts +1 -1
  10. package/dist/components/color-input/useColorInputValue.d.ts +1 -1
  11. package/dist/components/dialog/dialog-close.d.ts +21 -0
  12. package/dist/components/dialog/dialog-content.d.ts +32 -0
  13. package/dist/components/dialog/dialog-core.d.ts +27 -0
  14. package/dist/components/dialog/dialog-description.d.ts +21 -0
  15. package/dist/components/dialog/dialog-overlay.d.ts +21 -0
  16. package/dist/components/dialog/dialog-portal.d.ts +21 -0
  17. package/dist/components/dialog/dialog-root.d.ts +28 -0
  18. package/dist/components/dialog/dialog-title.d.ts +21 -0
  19. package/dist/components/dialog/dialog-trigger.d.ts +23 -0
  20. package/dist/components/dialog/index.d.ts +9 -0
  21. package/dist/components/dialog/index.js +2 -0
  22. package/dist/components/dialog/types.d.ts +61 -0
  23. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +24 -0
  24. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +34 -0
  25. package/dist/components/dropdown-menu/dropdown-menu-context-trigger.d.ts +23 -0
  26. package/dist/components/dropdown-menu/dropdown-menu-item-indicator.d.ts +24 -0
  27. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +28 -0
  28. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +23 -0
  29. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +24 -22
  30. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +21 -0
  31. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +3 -0
  32. package/dist/components/dropdown-menu/dropdown-menu-portal.d.ts +21 -0
  33. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +110 -0
  34. package/dist/components/dropdown-menu/dropdown-menu-primitives.d.ts +15 -724
  35. package/dist/components/dropdown-menu/dropdown-menu-radio-group.d.ts +25 -0
  36. package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +23 -0
  37. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +30 -0
  38. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +19 -0
  39. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +34 -0
  40. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +28 -0
  41. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +28 -0
  42. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +23 -0
  43. package/dist/components/dropdown-menu/dropdown-menu.d.ts +5 -2
  44. package/dist/components/dropdown-menu/index.d.ts +28 -49
  45. package/dist/components/dropdown-menu/index.js +2 -2
  46. package/dist/components/dropdown-menu/types.d.ts +8 -3
  47. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +8 -4
  48. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +7 -2
  49. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +3 -3
  50. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +27 -0
  51. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +2 -0
  52. package/dist/components/floating/index.d.ts +3 -1
  53. package/dist/components/floating/index.js +3 -0
  54. package/dist/components/floating/types.d.ts +86 -1
  55. package/dist/components/floating/useFloatingPosition.d.ts +3 -26
  56. package/dist/components/floating/useHoverDisclosure.d.ts +2 -0
  57. package/dist/components/input/input.d.ts +4 -1
  58. package/dist/components/input/types.d.ts +3 -1
  59. package/dist/components/modal/index.d.ts +1 -1
  60. package/dist/components/modal/modal.d.ts +3 -1
  61. package/dist/components/modal/types.d.ts +3 -0
  62. package/dist/components/modal/useModal.d.ts +7 -4
  63. package/dist/components/number-input/types.d.ts +3 -1
  64. package/dist/components/number-input/useNumberInput.d.ts +2 -1
  65. package/dist/components/popover/usePopover.d.ts +2 -2
  66. package/dist/components/radio/types.d.ts +17 -1
  67. package/dist/components/radio/useRadio.d.ts +3 -0
  68. package/dist/components/select/select.d.ts +4 -1
  69. package/dist/components/select/types.d.ts +6 -1
  70. package/dist/components/select/useSelect.d.ts +3 -2
  71. package/dist/components/slider/index.d.ts +1 -1
  72. package/dist/components/slider/range-slider.d.ts +3 -3
  73. package/dist/components/slider/types.d.ts +11 -3
  74. package/dist/components/slider/useRangeSlider.d.ts +1 -1
  75. package/dist/components/slider/useSlider.d.ts +1 -1
  76. package/dist/components/switch/types.d.ts +5 -1
  77. package/dist/components/switch/useSwitch.d.ts +1 -1
  78. package/dist/components/teleport-provider/index.d.ts +1 -0
  79. package/dist/components/teleport-provider/index.js +2 -1
  80. package/dist/components/teleport-provider/useTeleportTarget.d.ts +4 -3
  81. package/dist/components/textarea/types.d.ts +4 -1
  82. package/dist/components/textarea/useTextarea.d.ts +1 -1
  83. package/dist/components/toast/index.d.ts +2 -1
  84. package/dist/components/toast/index.js +2 -2
  85. package/dist/components/toast/toast-store.d.ts +2 -0
  86. package/dist/components/toast/types.d.ts +10 -4
  87. package/dist/components/toast/useToast.d.ts +2 -2
  88. package/dist/components/tooltip/useTooltip.d.ts +3 -3
  89. package/dist/composables/useOverlayLayer.d.ts +32 -0
  90. package/dist/dialog.js +510 -0
  91. package/dist/dropdown-menu.css +4 -5
  92. package/dist/dropdown-menu.js +1155 -886
  93. package/dist/floating.js +403 -0
  94. package/dist/index.d.ts +1 -0
  95. package/dist/index.js +7 -4
  96. package/dist/input.css +24 -24
  97. package/dist/input.js +21 -11
  98. package/dist/legacy-unlayered.css +424 -503
  99. package/dist/modal.css +28 -28
  100. package/dist/modal.js +141 -200
  101. package/dist/number-input.css +20 -20
  102. package/dist/number-input.js +44 -16
  103. package/dist/popover.css +4 -4
  104. package/dist/popover.js +29 -40
  105. package/dist/radio.css +18 -18
  106. package/dist/radio.js +96 -18
  107. package/dist/select.css +54 -43
  108. package/dist/select.js +185 -67
  109. package/dist/slider.css +183 -202
  110. package/dist/slider.js +138 -37
  111. package/dist/switch.css +17 -17
  112. package/dist/switch.js +31 -13
  113. package/dist/textarea.css +26 -26
  114. package/dist/textarea.js +19 -9
  115. package/dist/toast.js +110 -99
  116. package/dist/tooltip.css +5 -80
  117. package/dist/tooltip.js +11 -3
  118. package/dist/useControlState.js +4 -0
  119. package/dist/useFloatingPosition.js +86 -39
  120. package/dist/useFormControl.js +107 -0
  121. package/dist/useOverlayLayer.js +262 -0
  122. package/dist/useTeleportTarget.js +21 -10
  123. package/docs/public-floating-api.md +159 -0
  124. package/docs/public-styles-api.md +2 -1
  125. package/package.json +10 -6
  126. package/dist/useClickOutside.js +0 -24
package/dist/modal.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-modal[data-v-3646bb42] {
2
+ .rp-modal[data-v-1a627831] {
3
3
  --_rp-modal-width: 32rem;
4
4
  --_rp-modal-max-height: calc(100vh - var(--rp-spacing-12));
5
5
  --_rp-modal-radius: var(--rp-radius-sm);
@@ -13,25 +13,25 @@
13
13
  overflow: auto;
14
14
  font-family: var(--rp-font-family);
15
15
  }
16
- .rp-modal--size-sm[data-v-3646bb42] {
16
+ .rp-modal--size-sm[data-v-1a627831] {
17
17
  --_rp-modal-width: 22rem;
18
18
  }
19
- .rp-modal--size-lg[data-v-3646bb42] {
19
+ .rp-modal--size-lg[data-v-1a627831] {
20
20
  --_rp-modal-width: 45rem;
21
21
  }
22
- .rp-modal--size-xl[data-v-3646bb42] {
22
+ .rp-modal--size-xl[data-v-1a627831] {
23
23
  --_rp-modal-width: 58rem;
24
24
  }
25
- .rp-modal--size-full[data-v-3646bb42] {
25
+ .rp-modal--size-full[data-v-1a627831] {
26
26
  --_rp-modal-width: 100vw;
27
27
  --_rp-modal-max-height: 100vh;
28
28
  --_rp-modal-radius: var(--rp-radius-none);
29
29
  padding: 0;
30
30
  }
31
- .rp-modal__overlay[data-v-3646bb42] {
31
+ .rp-modal__overlay[data-v-1a627831] {
32
32
  border-radius: 0;
33
33
  }
34
- .rp-modal__panel[data-v-3646bb42] {
34
+ .rp-modal__panel[data-v-1a627831] {
35
35
  position: relative;
36
36
  z-index: 1;
37
37
  box-sizing: border-box;
@@ -47,39 +47,39 @@
47
47
  box-shadow: var(--rp-shadow-lg);
48
48
  outline: none;
49
49
  }
50
- .rp-modal--size-full .rp-modal__panel[data-v-3646bb42] {
50
+ .rp-modal--size-full .rp-modal__panel[data-v-1a627831] {
51
51
  min-height: 100vh;
52
52
  border: 0;
53
53
  }
54
- .rp-modal__header[data-v-3646bb42] {
54
+ .rp-modal__header[data-v-1a627831] {
55
55
  box-sizing: border-box;
56
56
  padding: var(--rp-spacing-5) calc(var(--rp-spacing-6) + var(--rp-size-control-sm)) var(--rp-spacing-4) var(--rp-spacing-5);
57
57
  border-bottom: var(--rp-border-width-thin) solid var(--rp-color-default-border);
58
58
  }
59
- .rp-modal__heading[data-v-3646bb42] {
59
+ .rp-modal__heading[data-v-1a627831] {
60
60
  display: grid;
61
61
  gap: var(--rp-spacing-1);
62
62
  }
63
- .rp-modal__title[data-v-3646bb42] {
63
+ .rp-modal__title[data-v-1a627831] {
64
64
  margin: 0;
65
65
  color: var(--rp-color-text);
66
66
  font-size: var(--rp-font-size-xl);
67
67
  font-weight: var(--rp-font-weight-semibold);
68
68
  line-height: var(--rp-line-height-xs);
69
69
  }
70
- .rp-modal__description[data-v-3646bb42] {
70
+ .rp-modal__description[data-v-1a627831] {
71
71
  margin: 0;
72
72
  color: var(--rp-color-dimmed);
73
73
  font-size: var(--rp-font-size-sm);
74
74
  line-height: var(--rp-line-height-md);
75
75
  }
76
- .rp-modal__close[data-v-3646bb42] {
76
+ .rp-modal__close[data-v-1a627831] {
77
77
  position: absolute;
78
78
  top: var(--rp-spacing-3);
79
79
  right: var(--rp-spacing-3);
80
80
  z-index: 1;
81
81
  }
82
- .rp-modal__body[data-v-3646bb42] {
82
+ .rp-modal__body[data-v-1a627831] {
83
83
  box-sizing: border-box;
84
84
  flex: 1 1 auto;
85
85
  min-height: 0;
@@ -89,10 +89,10 @@
89
89
  font-size: var(--rp-font-size-md);
90
90
  line-height: var(--rp-line-height-md);
91
91
  }
92
- .rp-modal--closable.rp-modal--headerless .rp-modal__body[data-v-3646bb42] {
92
+ .rp-modal--closable.rp-modal--headerless .rp-modal__body[data-v-1a627831] {
93
93
  padding-right: calc(var(--rp-spacing-6) + var(--rp-size-control-sm));
94
94
  }
95
- .rp-modal__footer[data-v-3646bb42] {
95
+ .rp-modal__footer[data-v-1a627831] {
96
96
  box-sizing: border-box;
97
97
  display: flex;
98
98
  flex: 0 0 auto;
@@ -102,34 +102,34 @@
102
102
  padding: var(--rp-spacing-4) var(--rp-spacing-5);
103
103
  border-top: var(--rp-border-width-thin) solid var(--rp-color-default-border);
104
104
  }
105
- .rp-modal-enter-active[data-v-3646bb42],
106
- .rp-modal-leave-active[data-v-3646bb42] {
105
+ .rp-modal-enter-active[data-v-1a627831],
106
+ .rp-modal-leave-active[data-v-1a627831] {
107
107
  transition: opacity var(--rp-transition-fast);
108
108
  }
109
- .rp-modal-enter-active .rp-modal__panel[data-v-3646bb42],
110
- .rp-modal-leave-active .rp-modal__panel[data-v-3646bb42] {
109
+ .rp-modal-enter-active .rp-modal__panel[data-v-1a627831],
110
+ .rp-modal-leave-active .rp-modal__panel[data-v-1a627831] {
111
111
  transition: opacity var(--rp-transition-fast), transform var(--rp-transition-fast);
112
112
  }
113
- .rp-modal-enter-from[data-v-3646bb42],
114
- .rp-modal-leave-to[data-v-3646bb42] {
113
+ .rp-modal-enter-from[data-v-1a627831],
114
+ .rp-modal-leave-to[data-v-1a627831] {
115
115
  opacity: 0;
116
116
  }
117
- .rp-modal-enter-from .rp-modal__panel[data-v-3646bb42],
118
- .rp-modal-leave-to .rp-modal__panel[data-v-3646bb42] {
117
+ .rp-modal-enter-from .rp-modal__panel[data-v-1a627831],
118
+ .rp-modal-leave-to .rp-modal__panel[data-v-1a627831] {
119
119
  opacity: 0;
120
120
  transform: translateY(var(--rp-spacing-2)) scale(0.98);
121
121
  }
122
122
  @media (max-width: 480px) {
123
- .rp-modal[data-v-3646bb42] {
123
+ .rp-modal[data-v-1a627831] {
124
124
  padding: var(--rp-spacing-3);
125
125
  }
126
- .rp-modal__header[data-v-3646bb42] {
126
+ .rp-modal__header[data-v-1a627831] {
127
127
  padding-left: var(--rp-spacing-4);
128
128
  }
129
- .rp-modal__body[data-v-3646bb42] {
129
+ .rp-modal__body[data-v-1a627831] {
130
130
  padding: var(--rp-spacing-4);
131
131
  }
132
- .rp-modal__footer[data-v-3646bb42] {
132
+ .rp-modal__footer[data-v-1a627831] {
133
133
  padding: var(--rp-spacing-4);
134
134
  }
135
135
  }
package/dist/modal.js CHANGED
@@ -3,14 +3,11 @@ import { t as x_default } from "./x.js";
3
3
  import { t as bem } from "./bem.js";
4
4
  import { n as useStylesApi } from "./styles-api.js";
5
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
- import { t as useFocusTrap } from "./useFocusTrap.js";
7
- import { n as useTeleportTarget } from "./useTeleportTarget.js";
6
+ import { a as dialog_overlay_default, c as dialog_close_default, i as dialog_portal_default, l as resolveDialogCloseReason, n as dialog_title_default, o as dialog_description_default, r as dialog_root_default, s as dialog_content_default } from "./dialog.js";
8
7
  import { t as icon_button_default } from "./icon-button.js";
9
8
  import { t as overlay_default } from "./overlay.js";
10
- import { VaporTeleport, VaporTransition, applyVShow, child, computed, createComponent, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, isRef, onBeforeUnmount, onMounted, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, txt, unref, useId, useSlots, watch } from "vue";
9
+ import { VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, mergeProps, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
11
10
  //#region src/components/modal/useModal.ts
12
- var bodyScrollLockCount = 0;
13
- var previousBodyOverflow = "";
14
11
  var DEFAULT_ROLE = "dialog";
15
12
  var DEFAULT_SIZE = "md";
16
13
  var MODAL_PRESET_SIZES = /* @__PURE__ */ new Set([
@@ -20,43 +17,13 @@ var MODAL_PRESET_SIZES = /* @__PURE__ */ new Set([
20
17
  "xl",
21
18
  "full"
22
19
  ]);
23
- function isHTMLElement(value) {
24
- return typeof HTMLElement !== "undefined" && value instanceof HTMLElement;
25
- }
26
20
  function isModalPresetSize(size) {
27
21
  return MODAL_PRESET_SIZES.has(size);
28
22
  }
29
- function lockBodyScroll() {
30
- if (typeof document === "undefined") return void 0;
31
- if (bodyScrollLockCount === 0) {
32
- previousBodyOverflow = document.body.style.overflow;
33
- document.body.style.overflow = "hidden";
34
- }
35
- bodyScrollLockCount += 1;
36
- return () => {
37
- bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);
38
- if (bodyScrollLockCount === 0) document.body.style.overflow = previousBodyOverflow;
39
- };
40
- }
41
- function readInitialFocus(initialFocus) {
42
- return isRef(initialFocus) ? initialFocus.value : initialFocus;
43
- }
44
- function queryPanelElement(panel, selector) {
45
- try {
46
- const element = panel.querySelector(selector);
47
- return isHTMLElement(element) ? element : null;
48
- } catch {
49
- return null;
50
- }
51
- }
52
- function useModal(props, emitOpenChange) {
23
+ function useModal(props, emit = {}) {
53
24
  const slots = useSlots();
54
25
  const generatedId = useId();
55
- const panelRef = ref(null);
56
26
  const uncontrolledOpen = ref(false);
57
- let isMounted = false;
58
- let isActiveModal = false;
59
- let unlockScroll;
60
27
  const modalId = computed(() => props.id ?? `${generatedId}-modal`);
61
28
  const titleId = computed(() => `${modalId.value}-title`);
62
29
  const descriptionId = computed(() => `${modalId.value}-description`);
@@ -98,71 +65,21 @@ function useModal(props, emitOpenChange) {
98
65
  function setOpen(nextOpen) {
99
66
  if (nextOpen === isOpen.value) return;
100
67
  if (props.open === void 0) uncontrolledOpen.value = nextOpen;
101
- emitOpenChange?.(nextOpen);
68
+ emit.openChange?.(nextOpen);
102
69
  }
103
70
  function openModal() {
104
71
  setOpen(true);
105
72
  }
106
- function closeModal() {
73
+ function closeModal(reason = "programmatic") {
74
+ if (!isOpen.value) return;
107
75
  setOpen(false);
76
+ emit.close?.(resolveDialogCloseReason(reason));
108
77
  }
109
78
  function toggleModal() {
110
- setOpen(!isOpen.value);
111
- }
112
- function resolveInitialFocus() {
113
- const initialFocus = readInitialFocus(props.initialFocus);
114
- const panel = panelRef.value;
115
- if (!initialFocus || !panel) return null;
116
- if (typeof initialFocus === "string") return queryPanelElement(panel, initialFocus);
117
- return panel.contains(initialFocus) ? initialFocus : null;
79
+ if (isOpen.value) closeModal("programmatic");
80
+ else openModal();
118
81
  }
119
- const focusTrap = useFocusTrap(panelRef, {
120
- ...props.focusTrapOptions,
121
- initialFocus: () => resolveInitialFocus() ?? void 0,
122
- fallbackFocus: () => panelRef.value,
123
- returnFocusOnDeactivate: props.returnFocus !== false,
124
- escapeDeactivates: (event) => {
125
- if (props.closeOnEscape === false) return false;
126
- event.preventDefault();
127
- closeModal();
128
- return false;
129
- },
130
- allowOutsideClick: true,
131
- preventScroll: true,
132
- delayInitialFocus: props.focusTrapOptions?.delayInitialFocus ?? false,
133
- delayReturnFocus: props.focusTrapOptions?.delayReturnFocus ?? false
134
- });
135
- function activateModal() {
136
- if (isActiveModal) return;
137
- isActiveModal = true;
138
- if (props.preventScroll !== false) unlockScroll = lockBodyScroll();
139
- focusTrap.activate();
140
- }
141
- function deactivateModal() {
142
- if (!isActiveModal) return;
143
- isActiveModal = false;
144
- focusTrap.deactivate({ returnFocus: props.returnFocus !== false });
145
- unlockScroll?.();
146
- unlockScroll = void 0;
147
- }
148
- function onOverlayClick(event) {
149
- if (props.closeOnOverlayClick === false || event.target !== event.currentTarget) return;
150
- closeModal();
151
- }
152
- onMounted(() => {
153
- isMounted = true;
154
- if (isOpen.value) activateModal();
155
- });
156
- onBeforeUnmount(() => {
157
- deactivateModal();
158
- });
159
- watch(isOpen, (nextOpen) => {
160
- if (!isMounted) return;
161
- if (nextOpen) activateModal();
162
- else deactivateModal();
163
- });
164
82
  return {
165
- panelRef,
166
83
  modalId,
167
84
  titleId,
168
85
  descriptionId,
@@ -183,16 +100,14 @@ function useModal(props, emitOpenChange) {
183
100
  openModal,
184
101
  closeModal,
185
102
  toggleModal,
186
- onOverlayClick
103
+ setOpen
187
104
  };
188
105
  }
189
106
  //#endregion
190
107
  //#region src/components/modal/modal.vue?vue&type=script&setup=true&vapor=true&lang.ts
191
- var t0 = template("<h2 data-v-3646bb42> ");
192
- var t1 = template("<p data-v-3646bb42> ");
193
- var t2 = template("<div data-v-3646bb42 class=rp-modal__heading>");
194
- var t3 = template("<div data-v-3646bb42>");
195
- var t4 = template("<div data-v-3646bb42><section data-v-3646bb42>");
108
+ var t0 = template(" ");
109
+ var t1 = template("<div data-v-1a627831 class=rp-modal__heading>");
110
+ var t2 = template("<div data-v-1a627831>");
196
111
  //#endregion
197
112
  //#region src/components/modal/modal.vue
198
113
  var modal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -237,6 +152,10 @@ var modal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
237
152
  type: Boolean,
238
153
  default: false
239
154
  },
155
+ modal: {
156
+ type: Boolean,
157
+ default: true
158
+ },
240
159
  focusTrapOptions: { default: () => ({}) },
241
160
  teleport: {
242
161
  type: Boolean,
@@ -246,14 +165,17 @@ var modal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
246
165
  classNames: {},
247
166
  styles: {}
248
167
  },
249
- emits: ["update:open"],
168
+ emits: ["update:open", "close"],
250
169
  setup(__props, { emit: __emit, slots: $slots }) {
251
170
  const props = __props;
252
- const teleportTo = useTeleportTarget(() => props.teleportTo);
253
171
  const emit = __emit;
254
- const { panelRef, modalId, titleId, descriptionId, role, isOpen, shouldRender, hasHeader, hasFooter, showCloseButton, headerId, ariaLabelledby, ariaDescribedby, ariaLabel, rootClass, rootStyle, stateClass, slotProps, closeModal, onOverlayClick } = useModal(props, (open) => {
255
- emit("update:open", open);
172
+ const { modalId, titleId, descriptionId, role, isOpen, shouldRender, hasHeader, hasFooter, showCloseButton, headerId, ariaLabelledby, ariaDescribedby, ariaLabel, rootClass, rootStyle, stateClass, slotProps, setOpen } = useModal(props, {
173
+ openChange: (open) => emit("update:open", open),
174
+ close: (reason) => emit("close", reason)
256
175
  });
176
+ function onDialogClose(reason) {
177
+ emit("close", reason);
178
+ }
257
179
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
258
180
  const state = computed(() => isOpen.value ? "open" : "closed");
259
181
  const rootAttrs = computed(() => getRootAttrs({
@@ -261,6 +183,9 @@ var modal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
261
183
  style: rootStyle.value,
262
184
  "data-state": state.value
263
185
  }));
186
+ function getLayeredRootAttrs(zIndex) {
187
+ return mergeProps(rootAttrs.value, { style: { zIndex } });
188
+ }
264
189
  const overlayClassNames = computed(() => ({ root: ["rp-modal__overlay", props.classNames?.overlay] }));
265
190
  const overlayStyles = computed(() => ({ root: props.styles?.overlay }));
266
191
  const panelAttrs = computed(() => ({
@@ -269,107 +194,123 @@ var modal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
269
194
  }));
270
195
  const closeClassNames = computed(() => ({ root: ["rp-modal__close", props.classNames?.close] }));
271
196
  const closeStyles = computed(() => ({ root: props.styles?.close }));
272
- const _setTemplateRef = createTemplateRefSetter();
273
- return createComponent(VaporTeleport, {
274
- to: () => unref(teleportTo),
275
- disabled: () => !__props.teleport
276
- }, () => {
277
- return createComponent(VaporTransition, {
278
- name: "rp-modal",
279
- persisted: ""
280
- }, extend(() => {
281
- return createIf(() => unref(shouldRender), () => {
282
- const n28 = t4();
283
- const n27 = child(n28, 1);
284
- renderEffect(() => setDynamicProps(n28, [rootAttrs.value]));
285
- setInsertionState(n28, 0, 0);
286
- createComponent(overlay_default, { $: [() => __props.overlayProps, {
287
- "class-names": () => overlayClassNames.value,
288
- styles: () => overlayStyles.value,
289
- "z-index": 0,
290
- interactive: "",
291
- onClick: () => unref(onOverlayClick)
292
- }] });
293
- renderEffect(() => setDynamicProps(n27, [
294
- { id: unref(modalId) },
295
- panelAttrs.value,
296
- {
297
- role: unref(role),
298
- "aria-modal": "true",
299
- "aria-label": unref(ariaLabel),
300
- "aria-labelledby": unref(ariaLabelledby),
301
- "aria-describedby": unref(ariaDescribedby),
302
- tabindex: "-1"
303
- }
304
- ]));
305
- setInsertionState(n27, null, 0);
306
- createIf(() => unref(hasHeader), () => {
307
- const n14 = t3();
308
- renderEffect(() => setDynamicProps(n14, [{ id: unref(headerId) }, unref(getPartAttrs)("header", { class: "rp-modal__header" })]));
309
- setInsertionState(n14, null, 0);
310
- createSlot("header", { $: [() => unref(slotProps)] }, () => {
311
- const n13 = t2();
312
- setInsertionState(n13, null, 0);
313
- createIf(() => __props.title, () => {
314
- const n9 = t0();
315
- const x9 = txt(n9);
316
- renderEffect(() => {
317
- setDynamicProps(n9, [{ id: unref(titleId) }, unref(getPartAttrs)("title", { class: "rp-modal__title" })]);
318
- setText(x9, toDisplayString(__props.title));
319
- });
320
- return n9;
321
- });
322
- setInsertionState(n13, null, 1);
323
- createIf(() => __props.description, () => {
324
- const n12 = t1();
325
- const x12 = txt(n12);
326
- renderEffect(() => {
327
- setDynamicProps(n12, [{ id: unref(descriptionId) }, unref(getPartAttrs)("description", { class: "rp-modal__description" })]);
328
- setText(x12, toDisplayString(__props.description));
329
- });
330
- return n12;
331
- });
332
- return n13;
333
- }, 1);
334
- return n14;
335
- });
336
- setInsertionState(n27, null, 1);
337
- createIf(() => unref(showCloseButton), () => {
338
- return createComponent(icon_button_default, {
339
- "class-names": () => closeClassNames.value,
340
- styles: () => closeStyles.value,
341
- ariaLabel: () => __props.closeLabel,
342
- variant: "ghost",
343
- size: "sm",
344
- onClick: () => unref(closeModal)
345
- }, () => {
346
- return createComponent(unref(x_default));
197
+ return createComponent(unref(dialog_root_default), {
198
+ open: () => unref(isOpen),
199
+ modal: () => __props.modal,
200
+ "close-on-escape": () => __props.closeOnEscape,
201
+ "close-on-outside-click": () => __props.closeOnOverlayClick,
202
+ "prevent-scroll": () => __props.preventScroll,
203
+ "return-focus": () => __props.returnFocus,
204
+ "onUpdate:open": () => unref(setOpen),
205
+ onClose: () => onDialogClose
206
+ }, (_slotProps0) => {
207
+ return createComponent(unref(dialog_portal_default), {
208
+ teleport: () => __props.teleport,
209
+ "teleport-to": () => __props.teleportTo
210
+ }, () => {
211
+ return createComponent(VaporTransition, {
212
+ name: "rp-modal",
213
+ persisted: ""
214
+ }, extend(() => {
215
+ return createIf(() => unref(shouldRender), () => {
216
+ const n30 = t2();
217
+ renderEffect(() => setDynamicProps(n30, [getLayeredRootAttrs(_slotProps0.zIndex)]));
218
+ setInsertionState(n30, null, 0);
219
+ createComponent(unref(dialog_overlay_default), {
220
+ as: () => overlay_default,
221
+ "force-mount": () => __props.keepMounted,
222
+ $: [() => __props.overlayProps, {
223
+ "class-names": () => overlayClassNames.value,
224
+ styles: () => overlayStyles.value,
225
+ "z-index": 0,
226
+ interactive: ""
227
+ }]
347
228
  });
348
- });
349
- setInsertionState(n27, null, 2);
350
- createIf(() => $slots.default, () => {
351
- const n22 = t3();
352
- renderEffect(() => setDynamicProps(n22, [unref(getPartAttrs)("body", { class: "rp-modal__body" })]));
353
- setInsertionState(n22, null, 0);
354
- createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
355
- return n22;
356
- });
357
- setInsertionState(n27, null, 3);
358
- createIf(() => unref(hasFooter), () => {
359
- const n26 = t3();
360
- renderEffect(() => setDynamicProps(n26, [unref(getPartAttrs)("footer", { class: "rp-modal__footer" })]));
361
- setInsertionState(n26, null, 0);
362
- createSlot("footer", { $: [() => unref(slotProps)] }, null, 1);
363
- return n26;
364
- });
365
- _setTemplateRef(n27, panelRef, null, "panelRef");
366
- applyVShow(n28, () => unref(isOpen));
367
- return n28;
368
- }, null, 129);
369
- }, { _: 8 }));
229
+ setInsertionState(n30, null, 1);
230
+ createComponent(unref(dialog_content_default), {
231
+ id: () => unref(modalId),
232
+ as: "section",
233
+ "force-mount": () => __props.keepMounted,
234
+ $: [() => panelAttrs.value, {
235
+ role: () => unref(role),
236
+ "aria-label": () => unref(ariaLabel),
237
+ "aria-labelledby": () => unref(ariaLabelledby),
238
+ "aria-describedby": () => unref(ariaDescribedby),
239
+ "initial-focus": () => __props.initialFocus,
240
+ "focus-trap-options": () => __props.focusTrapOptions
241
+ }]
242
+ }, extend(() => {
243
+ return [
244
+ createIf(() => unref(hasHeader), () => {
245
+ const n16 = t2();
246
+ renderEffect(() => setDynamicProps(n16, [{ id: unref(headerId) }, unref(getPartAttrs)("header", { class: "rp-modal__header" })]));
247
+ setInsertionState(n16, null, 0);
248
+ createSlot("header", { $: [() => unref(slotProps)] }, () => {
249
+ const n15 = t1();
250
+ setInsertionState(n15, null, 0);
251
+ createIf(() => __props.title, () => {
252
+ return createComponent(unref(dialog_title_default), {
253
+ id: () => unref(titleId),
254
+ as: "h2",
255
+ $: [() => unref(getPartAttrs)("title", { class: "rp-modal__title" })]
256
+ }, () => {
257
+ const n9 = t0();
258
+ renderEffect(() => setText(n9, toDisplayString(__props.title)));
259
+ return n9;
260
+ });
261
+ });
262
+ setInsertionState(n15, null, 1);
263
+ createIf(() => __props.description, () => {
264
+ return createComponent(unref(dialog_description_default), {
265
+ id: () => unref(descriptionId),
266
+ as: "p",
267
+ $: [() => unref(getPartAttrs)("description", { class: "rp-modal__description" })]
268
+ }, () => {
269
+ const n13 = t0();
270
+ renderEffect(() => setText(n13, toDisplayString(__props.description)));
271
+ return n13;
272
+ });
273
+ });
274
+ return n15;
275
+ }, 1);
276
+ return n16;
277
+ }, null, 129),
278
+ createIf(() => unref(showCloseButton), () => {
279
+ return createComponent(unref(dialog_close_default), {
280
+ as: () => icon_button_default,
281
+ "class-names": () => closeClassNames.value,
282
+ styles: () => closeStyles.value,
283
+ ariaLabel: () => __props.closeLabel,
284
+ variant: "ghost",
285
+ size: "sm"
286
+ }, () => {
287
+ return createComponent(unref(x_default));
288
+ });
289
+ }, null, 129),
290
+ createIf(() => $slots.default, () => {
291
+ const n24 = t2();
292
+ renderEffect(() => setDynamicProps(n24, [unref(getPartAttrs)("body", { class: "rp-modal__body" })]));
293
+ setInsertionState(n24, null, 0);
294
+ createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
295
+ return n24;
296
+ }, null, 129),
297
+ createIf(() => unref(hasFooter), () => {
298
+ const n28 = t2();
299
+ renderEffect(() => setDynamicProps(n28, [unref(getPartAttrs)("footer", { class: "rp-modal__footer" })]));
300
+ setInsertionState(n28, null, 0);
301
+ createSlot("footer", { $: [() => unref(slotProps)] }, null, 1);
302
+ return n28;
303
+ }, null, 129)
304
+ ];
305
+ }, { _: 8 }));
306
+ applyVShow(n30, () => unref(isOpen));
307
+ return n30;
308
+ }, null, 129);
309
+ }, { _: 8 }));
310
+ });
370
311
  }, true);
371
312
  }
372
- }), [["__scopeId", "data-v-3646bb42"]]);
313
+ }), [["__scopeId", "data-v-1a627831"]]);
373
314
  //#endregion
374
315
  //#region src/components/modal/types.ts
375
316
  var modalParts = [
@@ -1,48 +1,48 @@
1
1
  @layer ropav.components {
2
- .rp-number-input[data-v-3cef367f] {
2
+ .rp-number-input[data-v-eb2db673] {
3
3
  --_rp-number-input-control-size: var(--_rp-input-height);
4
4
  --_rp-number-input-text-align: left;
5
5
  overflow: hidden;
6
6
  vertical-align: middle;
7
7
  }
8
- .rp-number-input[data-v-3cef367f] .rp-input__native {
8
+ .rp-number-input[data-v-eb2db673] .rp-input__native {
9
9
  appearance: textfield;
10
10
  text-align: var(--_rp-number-input-text-align);
11
11
  }
12
- .rp-number-input--text-align-center[data-v-3cef367f] {
12
+ .rp-number-input--text-align-center[data-v-eb2db673] {
13
13
  --_rp-number-input-text-align: center;
14
14
  }
15
- .rp-number-input--text-align-right[data-v-3cef367f] {
15
+ .rp-number-input--text-align-right[data-v-eb2db673] {
16
16
  --_rp-number-input-text-align: right;
17
17
  }
18
- .rp-number-input[data-v-3cef367f] .rp-input__native::-webkit-inner-spin-button,
19
- .rp-number-input[data-v-3cef367f] .rp-input__native::-webkit-outer-spin-button {
18
+ .rp-number-input[data-v-eb2db673] .rp-input__native::-webkit-inner-spin-button,
19
+ .rp-number-input[data-v-eb2db673] .rp-input__native::-webkit-outer-spin-button {
20
20
  margin: 0;
21
21
  appearance: none;
22
22
  }
23
- .rp-number-input[data-v-3cef367f] .rp-input__left,
24
- .rp-number-input[data-v-3cef367f] .rp-input__right {
23
+ .rp-number-input[data-v-eb2db673] .rp-input__left,
24
+ .rp-number-input[data-v-eb2db673] .rp-input__right {
25
25
  align-self: stretch;
26
26
  margin-block: calc(-1 * var(--rp-border-width-thin));
27
27
  }
28
- .rp-number-input[data-v-3cef367f] .rp-input__left {
28
+ .rp-number-input[data-v-eb2db673] .rp-input__left {
29
29
  margin-inline-start: calc(-1 * var(--_rp-input-padding-x));
30
30
  }
31
- .rp-number-input[data-v-3cef367f] .rp-input__right {
31
+ .rp-number-input[data-v-eb2db673] .rp-input__right {
32
32
  margin-inline-end: calc(-1 * var(--_rp-input-padding-x));
33
33
  }
34
- .rp-number-input__controls[data-v-3cef367f] {
34
+ .rp-number-input__controls[data-v-eb2db673] {
35
35
  display: inline-flex;
36
36
  height: var(--_rp-input-height);
37
37
  flex-shrink: 0;
38
38
  }
39
- .rp-number-input__controls--left[data-v-3cef367f] {
39
+ .rp-number-input__controls--left[data-v-eb2db673] {
40
40
  border-inline-end: var(--rp-border-width-thin) solid var(--rp-color-control-border);
41
41
  }
42
- .rp-number-input__controls--right[data-v-3cef367f] {
42
+ .rp-number-input__controls--right[data-v-eb2db673] {
43
43
  border-inline-start: var(--rp-border-width-thin) solid var(--rp-color-control-border);
44
44
  }
45
- .rp-number-input__control[data-v-3cef367f] {
45
+ .rp-number-input__control[data-v-eb2db673] {
46
46
  padding: 0;
47
47
  font: inherit;
48
48
  background: none;
@@ -58,29 +58,29 @@
58
58
  color: var(--rp-color-control-icon);
59
59
  transition: color var(--rp-transition-fast), background-color var(--rp-transition-fast), opacity var(--rp-transition-fast);
60
60
  }
61
- .rp-number-input__control + .rp-number-input__control[data-v-3cef367f] {
61
+ .rp-number-input__control + .rp-number-input__control[data-v-eb2db673] {
62
62
  border-inline-start: var(--rp-border-width-thin) solid var(--rp-color-control-border);
63
63
  }
64
- .rp-number-input__control[data-v-3cef367f]:hover:not(:disabled) {
64
+ .rp-number-input__control[data-v-eb2db673]:hover:not(:disabled) {
65
65
  color: var(--rp-color-control-fg);
66
66
  background-color: var(--rp-color-default-hover);
67
67
  }
68
- .rp-number-input__control[data-v-3cef367f]:disabled {
68
+ .rp-number-input__control[data-v-eb2db673]:disabled {
69
69
  cursor: not-allowed;
70
70
  opacity: var(--rp-opacity-disabled);
71
71
  }
72
- .rp-number-input__control-icon[data-v-3cef367f] {
72
+ .rp-number-input__control-icon[data-v-eb2db673] {
73
73
  display: inline-flex;
74
74
  align-items: center;
75
75
  width: 0.875em;
76
76
  height: 0.875em;
77
77
  flex-shrink: 0;
78
78
  }
79
- .rp-number-input__control-icon svg[data-v-3cef367f] {
79
+ .rp-number-input__control-icon svg[data-v-eb2db673] {
80
80
  width: 100%;
81
81
  height: 100%;
82
82
  }
83
- .rp-number-input__control-icon[data-v-3cef367f] > svg {
83
+ .rp-number-input__control-icon[data-v-eb2db673] > svg {
84
84
  display: block;
85
85
  width: 100%;
86
86
  height: 100%;