ropav 0.0.13 → 0.1.2
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.
- package/LICENSE +21 -0
- package/README.md +80 -1
- package/dist/accordion.js +1 -4
- package/dist/button-link.js +2 -2
- package/dist/button.js +2 -2
- package/dist/card.css +26 -26
- package/dist/card.js +6 -16
- package/dist/collapse.js +1 -4
- package/dist/components/card/types.d.ts +0 -3
- package/dist/components/dialog/types.d.ts +1 -0
- package/dist/components/dropdown-menu/types.d.ts +2 -6
- package/dist/components/modal/types.d.ts +1 -0
- package/dist/components/overlay/index.d.ts +3 -0
- package/dist/components/overlay/index.js +3 -2
- package/dist/components/overlay/overlay-layer-provider.d.ts +21 -0
- package/dist/components/overlay/types.d.ts +10 -1
- package/dist/components/overlay/useOverlayZIndex.d.ts +4 -0
- package/dist/components/popover/types.d.ts +1 -0
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/slider/range-slider.d.ts +7 -11
- package/dist/components/slider/slider.d.ts +7 -14
- package/dist/components/slider/sliderCore.d.ts +7 -4
- package/dist/components/slider/types.d.ts +46 -4
- package/dist/components/slider/useRangeSlider.d.ts +2 -1
- package/dist/components/slider/useSlider.d.ts +13 -3
- package/dist/components/toast/types.d.ts +1 -0
- package/dist/components/tooltip/types.d.ts +1 -0
- package/dist/composables/useOverlayLayer.d.ts +1 -1
- package/dist/dialog.js +7 -2
- package/dist/dropdown-menu.js +18 -21
- package/dist/field.js +1 -1
- package/dist/index.js +3 -2
- package/dist/input.js +1 -1
- package/dist/modal.css +28 -28
- package/dist/modal.js +6 -7
- package/dist/overlay2.js +16 -1
- package/dist/popover.js +8 -6
- package/dist/progress.js +1 -1
- package/dist/select.js +1 -1
- package/dist/slider.css +256 -166
- package/dist/slider.js +334 -140
- package/dist/switch.css +17 -17
- package/dist/switch.js +10 -5
- package/dist/toast.css +21 -21
- package/dist/toast.js +10 -2
- package/dist/tooltip.js +9 -5
- package/dist/unplugin-icons.d.ts +5 -0
- package/dist/unplugin-icons.js +40 -0
- package/dist/{useOverlayLayer.js → useOverlayZIndex.js} +29 -4
- package/docs/public-overlay-layer-api.md +65 -0
- package/docs/public-styles-api.md +5 -6
- package/package.json +25 -12
- package/dist/legacy-unlayered.css +0 -5382
package/dist/switch.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer ropav.components {
|
|
2
|
-
.rp-switch[data-v-
|
|
2
|
+
.rp-switch[data-v-81b33803] {
|
|
3
3
|
--_rp-switch-color: var(--rp-color-control-selected-bg);
|
|
4
4
|
--_rp-switch-font-size: var(--rp-font-size-md);
|
|
5
5
|
--_rp-switch-default-track-width: 46px;
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
font-family: var(--rp-font-family);
|
|
27
27
|
user-select: none;
|
|
28
28
|
}
|
|
29
|
-
.rp-switch--disabled[data-v-
|
|
29
|
+
.rp-switch--disabled[data-v-81b33803] {
|
|
30
30
|
opacity: var(--rp-opacity-disabled);
|
|
31
31
|
cursor: not-allowed;
|
|
32
32
|
}
|
|
33
|
-
.rp-switch[data-v-
|
|
33
|
+
.rp-switch[data-v-81b33803] {
|
|
34
34
|
gap: var(--rp-spacing-2);
|
|
35
35
|
font-size: var(--_rp-switch-font-size);
|
|
36
36
|
}
|
|
37
|
-
.rp-switch__native[data-v-
|
|
37
|
+
.rp-switch__native[data-v-81b33803] {
|
|
38
38
|
position: absolute;
|
|
39
39
|
width: 1px;
|
|
40
40
|
height: 1px;
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
border-width: 0;
|
|
47
47
|
pointer-events: none;
|
|
48
48
|
}
|
|
49
|
-
.rp-switch__native:focus-visible + .rp-switch__track[data-v-
|
|
49
|
+
.rp-switch__native:focus-visible + .rp-switch__track[data-v-81b33803] {
|
|
50
50
|
border-color: var(--rp-color-control-border-focus);
|
|
51
51
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
52
52
|
}
|
|
53
|
-
.rp-switch__track[data-v-
|
|
53
|
+
.rp-switch__track[data-v-81b33803] {
|
|
54
54
|
position: relative;
|
|
55
55
|
display: inline-flex;
|
|
56
56
|
align-items: center;
|
|
@@ -61,17 +61,17 @@
|
|
|
61
61
|
border-radius: var(--rp-radius-full);
|
|
62
62
|
transition: background-color var(--rp-transition-fast);
|
|
63
63
|
}
|
|
64
|
-
.rp-switch--checked .rp-switch__track[data-v-
|
|
64
|
+
.rp-switch--checked .rp-switch__track[data-v-81b33803] {
|
|
65
65
|
background-color: var(--_rp-switch-color);
|
|
66
66
|
}
|
|
67
|
-
.rp-switch--invalid .rp-switch__track[data-v-
|
|
67
|
+
.rp-switch--invalid .rp-switch__track[data-v-81b33803] {
|
|
68
68
|
outline: var(--rp-border-width-thin) solid var(--_rp-switch-invalid-border);
|
|
69
69
|
outline-offset: var(--_rp-switch-thumb-offset);
|
|
70
70
|
}
|
|
71
|
-
.rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-
|
|
71
|
+
.rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-81b33803] {
|
|
72
72
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-switch-invalid-ring);
|
|
73
73
|
}
|
|
74
|
-
.rp-switch__thumb[data-v-
|
|
74
|
+
.rp-switch__thumb[data-v-81b33803] {
|
|
75
75
|
position: absolute;
|
|
76
76
|
left: var(--_rp-switch-thumb-offset);
|
|
77
77
|
width: var(--_rp-switch-thumb-size);
|
|
@@ -81,38 +81,38 @@
|
|
|
81
81
|
box-shadow: var(--rp-shadow-sm);
|
|
82
82
|
transition: transform var(--rp-transition-fast);
|
|
83
83
|
}
|
|
84
|
-
.rp-switch--checked .rp-switch__thumb[data-v-
|
|
84
|
+
.rp-switch--checked .rp-switch__thumb[data-v-81b33803] {
|
|
85
85
|
transform: translateX(calc(var(--_rp-switch-track-width) - var(--_rp-switch-thumb-size) - var(--_rp-switch-thumb-offset) * 2));
|
|
86
86
|
}
|
|
87
|
-
.rp-switch__label[data-v-
|
|
87
|
+
.rp-switch__label[data-v-81b33803] {
|
|
88
88
|
line-height: var(--rp-line-height-md);
|
|
89
89
|
color: var(--rp-color-text);
|
|
90
90
|
}
|
|
91
|
-
.rp-switch--size-xs[data-v-
|
|
91
|
+
.rp-switch--size-xs[data-v-81b33803] {
|
|
92
92
|
--_rp-switch-default-track-width: 32px;
|
|
93
93
|
--_rp-switch-default-track-height: 16px;
|
|
94
94
|
--_rp-switch-default-thumb-size: 12px;
|
|
95
95
|
--_rp-switch-font-size: var(--rp-font-size-xs);
|
|
96
96
|
}
|
|
97
|
-
.rp-switch--size-sm[data-v-
|
|
97
|
+
.rp-switch--size-sm[data-v-81b33803] {
|
|
98
98
|
--_rp-switch-default-track-width: 38px;
|
|
99
99
|
--_rp-switch-default-track-height: 20px;
|
|
100
100
|
--_rp-switch-default-thumb-size: 14px;
|
|
101
101
|
--_rp-switch-font-size: var(--rp-font-size-sm);
|
|
102
102
|
}
|
|
103
|
-
.rp-switch--size-md[data-v-
|
|
103
|
+
.rp-switch--size-md[data-v-81b33803] {
|
|
104
104
|
--_rp-switch-default-track-width: 46px;
|
|
105
105
|
--_rp-switch-default-track-height: 24px;
|
|
106
106
|
--_rp-switch-default-thumb-size: 18px;
|
|
107
107
|
--_rp-switch-font-size: var(--rp-font-size-md);
|
|
108
108
|
}
|
|
109
|
-
.rp-switch--size-lg[data-v-
|
|
109
|
+
.rp-switch--size-lg[data-v-81b33803] {
|
|
110
110
|
--_rp-switch-default-track-width: 56px;
|
|
111
111
|
--_rp-switch-default-track-height: 30px;
|
|
112
112
|
--_rp-switch-default-thumb-size: 22px;
|
|
113
113
|
--_rp-switch-font-size: var(--rp-font-size-lg);
|
|
114
114
|
}
|
|
115
|
-
.rp-switch--size-xl[data-v-
|
|
115
|
+
.rp-switch--size-xl[data-v-81b33803] {
|
|
116
116
|
--_rp-switch-default-track-width: 72px;
|
|
117
117
|
--_rp-switch-default-track-height: 36px;
|
|
118
118
|
--_rp-switch-default-thumb-size: 28px;
|
package/dist/switch.js
CHANGED
|
@@ -5,7 +5,7 @@ import { n as getComponentColorValue } from "./componentColors.js";
|
|
|
5
5
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
6
6
|
import { o as useControllableValue, r as useCheckedFormControl } from "./useFormControl.js";
|
|
7
7
|
import { t as useControlState } from "./useControlState.js";
|
|
8
|
-
import { child, computed, createIf, createSlot, defineVaporComponent, next, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
|
|
8
|
+
import { child, computed, createIf, createSlot, defineVaporComponent, next, nextTick, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
|
|
9
9
|
//#region src/components/switch/useSwitch.ts
|
|
10
10
|
function getSwitchColorStyle(color) {
|
|
11
11
|
const colorValue = getComponentColorValue(color);
|
|
@@ -23,7 +23,11 @@ function useSwitch(props, emitUpdate, getValue = () => props.modelValue ?? false
|
|
|
23
23
|
}));
|
|
24
24
|
const rootStyle = computed(() => getSwitchColorStyle(props.color));
|
|
25
25
|
function onChange(e) {
|
|
26
|
-
|
|
26
|
+
const input = e.target;
|
|
27
|
+
emitUpdate(input.checked);
|
|
28
|
+
nextTick(() => {
|
|
29
|
+
input.checked = getValue();
|
|
30
|
+
});
|
|
27
31
|
}
|
|
28
32
|
function focus(options) {
|
|
29
33
|
inputRef.value?.focus(options);
|
|
@@ -39,8 +43,8 @@ function useSwitch(props, emitUpdate, getValue = () => props.modelValue ?? false
|
|
|
39
43
|
}
|
|
40
44
|
//#endregion
|
|
41
45
|
//#region src/components/switch/switch.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
42
|
-
var t0 = template("<span data-v-
|
|
43
|
-
var t1 = template("<label data-v-
|
|
46
|
+
var t0 = template("<span data-v-81b33803>");
|
|
47
|
+
var t1 = template("<label data-v-81b33803><input data-v-81b33803><span data-v-81b33803><span data-v-81b33803></span></span>", 1);
|
|
44
48
|
//#endregion
|
|
45
49
|
//#region src/components/switch/switch.vue
|
|
46
50
|
var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -113,6 +117,7 @@ var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
113
117
|
}),
|
|
114
118
|
"data-disabled": presence(control.disabled),
|
|
115
119
|
"data-invalid": presence(control.invalid),
|
|
120
|
+
"data-state": controllable.value.value ? "checked" : "unchecked",
|
|
116
121
|
onChange(event) {
|
|
117
122
|
onChange(event);
|
|
118
123
|
attrs.onChange?.(event);
|
|
@@ -165,7 +170,7 @@ var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
165
170
|
});
|
|
166
171
|
return n7;
|
|
167
172
|
}
|
|
168
|
-
}), [["__scopeId", "data-v-
|
|
173
|
+
}), [["__scopeId", "data-v-81b33803"]]);
|
|
169
174
|
//#endregion
|
|
170
175
|
//#region src/components/switch/types.ts
|
|
171
176
|
var switchParts = [
|
package/dist/toast.css
CHANGED
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
}@layer ropav.components {
|
|
135
|
-
.rp-toast-viewport[data-v-
|
|
135
|
+
.rp-toast-viewport[data-v-480d3e51] {
|
|
136
136
|
--_rp-toast-viewport-shift-x: 0;
|
|
137
137
|
--_rp-toast-viewport-shift-y: calc(var(--rp-spacing-3) * -1);
|
|
138
138
|
position: fixed;
|
|
@@ -150,58 +150,58 @@
|
|
|
150
150
|
list-style: none;
|
|
151
151
|
pointer-events: none;
|
|
152
152
|
}
|
|
153
|
-
.rp-toast-viewport--top-left[data-v-
|
|
153
|
+
.rp-toast-viewport--top-left[data-v-480d3e51] {
|
|
154
154
|
--_rp-toast-viewport-shift-x: calc(var(--rp-spacing-3) * -1);
|
|
155
155
|
--_rp-toast-viewport-shift-y: 0;
|
|
156
156
|
top: 0;
|
|
157
157
|
left: 0;
|
|
158
158
|
}
|
|
159
|
-
.rp-toast-viewport--top-center[data-v-
|
|
159
|
+
.rp-toast-viewport--top-center[data-v-480d3e51] {
|
|
160
160
|
top: 0;
|
|
161
161
|
left: 50%;
|
|
162
162
|
transform: translateX(-50%);
|
|
163
163
|
}
|
|
164
|
-
.rp-toast-viewport--top-right[data-v-
|
|
164
|
+
.rp-toast-viewport--top-right[data-v-480d3e51] {
|
|
165
165
|
--_rp-toast-viewport-shift-x: var(--rp-spacing-3);
|
|
166
166
|
--_rp-toast-viewport-shift-y: 0;
|
|
167
167
|
top: 0;
|
|
168
168
|
right: 0;
|
|
169
169
|
}
|
|
170
|
-
.rp-toast-viewport--bottom-left[data-v-
|
|
170
|
+
.rp-toast-viewport--bottom-left[data-v-480d3e51] {
|
|
171
171
|
--_rp-toast-viewport-shift-x: calc(var(--rp-spacing-3) * -1);
|
|
172
172
|
--_rp-toast-viewport-shift-y: 0;
|
|
173
173
|
bottom: 0;
|
|
174
174
|
left: 0;
|
|
175
175
|
}
|
|
176
|
-
.rp-toast-viewport--bottom-center[data-v-
|
|
176
|
+
.rp-toast-viewport--bottom-center[data-v-480d3e51] {
|
|
177
177
|
--_rp-toast-viewport-shift-y: var(--rp-spacing-3);
|
|
178
178
|
bottom: 0;
|
|
179
179
|
left: 50%;
|
|
180
180
|
transform: translateX(-50%);
|
|
181
181
|
}
|
|
182
|
-
.rp-toast-viewport--bottom-right[data-v-
|
|
182
|
+
.rp-toast-viewport--bottom-right[data-v-480d3e51] {
|
|
183
183
|
--_rp-toast-viewport-shift-x: var(--rp-spacing-3);
|
|
184
184
|
--_rp-toast-viewport-shift-y: 0;
|
|
185
185
|
right: 0;
|
|
186
186
|
bottom: 0;
|
|
187
187
|
}
|
|
188
|
-
.rp-toast-viewport__item[data-v-
|
|
188
|
+
.rp-toast-viewport__item[data-v-480d3e51] {
|
|
189
189
|
display: flex;
|
|
190
190
|
width: 100%;
|
|
191
191
|
flex: 0 0 auto;
|
|
192
192
|
pointer-events: auto;
|
|
193
193
|
}
|
|
194
|
-
.rp-toast-viewport__item[data-v-
|
|
194
|
+
.rp-toast-viewport__item[data-v-480d3e51] .rp-toast {
|
|
195
195
|
width: 100%;
|
|
196
196
|
}
|
|
197
|
-
.rp-toast-viewport-item-enter-active[data-v-
|
|
198
|
-
.rp-toast-viewport-item-leave-active[data-v-
|
|
197
|
+
.rp-toast-viewport-item-enter-active[data-v-480d3e51],
|
|
198
|
+
.rp-toast-viewport-item-leave-active[data-v-480d3e51] {
|
|
199
199
|
will-change: opacity, transform;
|
|
200
200
|
}
|
|
201
|
-
.rp-toast-viewport-item-enter-active[data-v-
|
|
201
|
+
.rp-toast-viewport-item-enter-active[data-v-480d3e51] {
|
|
202
202
|
transition: opacity 180ms ease-out, transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
203
203
|
}
|
|
204
|
-
.rp-toast-viewport-item-leave-active[data-v-
|
|
204
|
+
.rp-toast-viewport-item-leave-active[data-v-480d3e51] {
|
|
205
205
|
position: absolute;
|
|
206
206
|
right: var(--rp-spacing-4);
|
|
207
207
|
left: var(--rp-spacing-4);
|
|
@@ -209,27 +209,27 @@
|
|
|
209
209
|
pointer-events: none;
|
|
210
210
|
transition: opacity 120ms ease-in, transform 180ms cubic-bezier(0.4, 0, 1, 1);
|
|
211
211
|
}
|
|
212
|
-
.rp-toast-viewport--empty .rp-toast-viewport-item-leave-active[data-v-
|
|
212
|
+
.rp-toast-viewport--empty .rp-toast-viewport-item-leave-active[data-v-480d3e51] {
|
|
213
213
|
position: relative;
|
|
214
214
|
right: auto;
|
|
215
215
|
left: auto;
|
|
216
216
|
width: 100%;
|
|
217
217
|
}
|
|
218
|
-
.rp-toast-viewport-item-move[data-v-
|
|
218
|
+
.rp-toast-viewport-item-move[data-v-480d3e51] {
|
|
219
219
|
transition: transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
220
220
|
}
|
|
221
|
-
.rp-toast-viewport-item-enter-from[data-v-
|
|
222
|
-
.rp-toast-viewport-item-leave-to[data-v-
|
|
221
|
+
.rp-toast-viewport-item-enter-from[data-v-480d3e51],
|
|
222
|
+
.rp-toast-viewport-item-leave-to[data-v-480d3e51] {
|
|
223
223
|
opacity: 0;
|
|
224
224
|
transform: translate3d(var(--_rp-toast-viewport-shift-x), var(--_rp-toast-viewport-shift-y), 0) scale(0.98);
|
|
225
225
|
}
|
|
226
226
|
@media (prefers-reduced-motion: reduce) {
|
|
227
|
-
.rp-toast-viewport[data-v-
|
|
227
|
+
.rp-toast-viewport[data-v-480d3e51] {
|
|
228
228
|
scroll-behavior: auto;
|
|
229
229
|
}
|
|
230
|
-
.rp-toast-viewport-item-enter-active[data-v-
|
|
231
|
-
.rp-toast-viewport-item-leave-active[data-v-
|
|
232
|
-
.rp-toast-viewport-item-move[data-v-
|
|
230
|
+
.rp-toast-viewport-item-enter-active[data-v-480d3e51],
|
|
231
|
+
.rp-toast-viewport-item-leave-active[data-v-480d3e51],
|
|
232
|
+
.rp-toast-viewport-item-move[data-v-480d3e51] {
|
|
233
233
|
transition: none;
|
|
234
234
|
}
|
|
235
235
|
}
|
package/dist/toast.js
CHANGED
|
@@ -4,6 +4,7 @@ import { t as bem } from "./bem.js";
|
|
|
4
4
|
import { n as useStylesApi } from "./styles-api.js";
|
|
5
5
|
import { i as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
|
|
6
6
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
7
|
+
import { n as useOverlayZIndex } from "./useOverlayZIndex.js";
|
|
7
8
|
import { r as useTeleportTarget } from "./useTeleportTarget.js";
|
|
8
9
|
import { VaporTeleport, VaporTransition, VaporTransitionGroup, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, inject, nextTick, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, toValue, txt, unref, useSlots, watch } from "vue";
|
|
9
10
|
//#region src/components/toast/defaults.ts
|
|
@@ -583,7 +584,7 @@ var toast_provider_default = /* @__PURE__ */ defineVaporComponent({
|
|
|
583
584
|
});
|
|
584
585
|
//#endregion
|
|
585
586
|
//#region src/components/toast/toast-viewport.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
586
|
-
var t0 = template("<li data-v-
|
|
587
|
+
var t0 = template("<li data-v-480d3e51>");
|
|
587
588
|
//#endregion
|
|
588
589
|
//#region src/components/toast/toast-viewport.vue
|
|
589
590
|
var toast_viewport_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -593,6 +594,7 @@ var toast_viewport_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
|
|
|
593
594
|
props: {
|
|
594
595
|
position: { default: "top-right" },
|
|
595
596
|
label: { default: "Notifications" },
|
|
597
|
+
baseZIndex: {},
|
|
596
598
|
teleport: {
|
|
597
599
|
type: Boolean,
|
|
598
600
|
default: true
|
|
@@ -604,6 +606,11 @@ var toast_viewport_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
|
|
|
604
606
|
setup(__props, { slots: $slots }) {
|
|
605
607
|
const props = __props;
|
|
606
608
|
const resolvedTeleportTo = useTeleportTarget(() => props.teleportTo);
|
|
609
|
+
const zIndex = useOverlayZIndex({
|
|
610
|
+
baseZIndex: () => props.baseZIndex,
|
|
611
|
+
defaultBaseZIndex: 1e3,
|
|
612
|
+
offset: 1
|
|
613
|
+
});
|
|
607
614
|
const context = useToastContext("<ToastViewport>");
|
|
608
615
|
function reverseToasts(toasts) {
|
|
609
616
|
return toasts.map((_, index) => toasts[toasts.length - index - 1]);
|
|
@@ -616,6 +623,7 @@ var toast_viewport_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
|
|
|
616
623
|
`rp-toast-viewport--${props.position}`,
|
|
617
624
|
{ "rp-toast-viewport--empty": orderedToasts.value.length === 0 }
|
|
618
625
|
],
|
|
626
|
+
style: { zIndex: zIndex.value },
|
|
619
627
|
"data-position": props.position,
|
|
620
628
|
"aria-label": props.label
|
|
621
629
|
}));
|
|
@@ -689,7 +697,7 @@ var toast_viewport_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
|
|
|
689
697
|
}, { _: 8 }));
|
|
690
698
|
}, true);
|
|
691
699
|
}
|
|
692
|
-
}), [["__scopeId", "data-v-
|
|
700
|
+
}), [["__scopeId", "data-v-480d3e51"]]);
|
|
693
701
|
//#endregion
|
|
694
702
|
//#region src/components/toast/useToastState.ts
|
|
695
703
|
function optionValue(value) {
|
package/dist/tooltip.js
CHANGED
|
@@ -3,6 +3,7 @@ import { t as bem } from "./bem.js";
|
|
|
3
3
|
import { n as useStylesApi, t as presence } from "./styles-api.js";
|
|
4
4
|
import { i as getComponentVariantColorRoles } from "./componentColors.js";
|
|
5
5
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
6
|
+
import { n as useOverlayZIndex } from "./useOverlayZIndex.js";
|
|
6
7
|
import { n as useFloatingPosition, r as useFloatingTarget, t as isElementReference } from "./useFloatingPosition.js";
|
|
7
8
|
import { n as useTeleportPositioningKey, r as useTeleportTarget } from "./useTeleportTarget.js";
|
|
8
9
|
import { VaporTeleport, VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, onBeforeUnmount, ref, renderEffect, setAttr, setDynamicProps, setInsertionState, setStaticTemplateRef, setStyle, setText, template, toDisplayString, unref, useId, useSlots, watch } from "vue";
|
|
@@ -95,6 +96,10 @@ function useTooltip(props, emitOpenChange) {
|
|
|
95
96
|
const teleportPositioningKey = useTeleportPositioningKey();
|
|
96
97
|
const { isExplicitTarget, reference, resolvedTarget } = useFloatingTarget(() => props.target, rootRef);
|
|
97
98
|
const targetElement = computed(() => isElementReference(resolvedTarget.value) ? resolvedTarget.value : null);
|
|
99
|
+
const zIndex = useOverlayZIndex({
|
|
100
|
+
baseZIndex: () => props.baseZIndex,
|
|
101
|
+
defaultBaseZIndex: 1e3
|
|
102
|
+
});
|
|
98
103
|
const { isOpen, open, closeImmediate } = useDelayedOpen({
|
|
99
104
|
open: () => props.open,
|
|
100
105
|
openDelay: () => props.openDelay ?? 300,
|
|
@@ -135,7 +140,8 @@ function useTooltip(props, emitOpenChange) {
|
|
|
135
140
|
const contentStyle = computed(() => ({
|
|
136
141
|
...floating.floatingStyle.value,
|
|
137
142
|
...resolveTooltipOffsetStyle(props.offset),
|
|
138
|
-
...resolveTooltipColorStyleWithContrast(props.color, props.autoContrast)
|
|
143
|
+
...resolveTooltipColorStyleWithContrast(props.color, props.autoContrast),
|
|
144
|
+
zIndex: zIndex.value
|
|
139
145
|
}));
|
|
140
146
|
function openTooltip() {
|
|
141
147
|
open();
|
|
@@ -218,6 +224,7 @@ var tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
|
|
|
218
224
|
__name: "tooltip",
|
|
219
225
|
props: {
|
|
220
226
|
id: {},
|
|
227
|
+
baseZIndex: {},
|
|
221
228
|
content: { default: "" },
|
|
222
229
|
color: {},
|
|
223
230
|
autoContrast: { type: Boolean },
|
|
@@ -310,10 +317,7 @@ var tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
|
|
|
310
317
|
to: () => unref(teleportTo),
|
|
311
318
|
disabled: () => !__props.teleport
|
|
312
319
|
}, () => {
|
|
313
|
-
return createComponent(VaporTransition, {
|
|
314
|
-
name: "rp-tooltip-content",
|
|
315
|
-
persisted: ""
|
|
316
|
-
}, extend(() => {
|
|
320
|
+
return createComponent(VaporTransition, { name: "rp-tooltip-content" }, extend(() => {
|
|
317
321
|
return createIf(() => unref(shouldRenderContent), () => {
|
|
318
322
|
const n11 = t2();
|
|
319
323
|
renderEffect(() => setDynamicProps(n11, [
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { compile } from "@vue/compiler-vapor";
|
|
2
|
+
//#region src/unplugin-icons.ts
|
|
3
|
+
var randomIdHelper = "const __randId = () => Math.random().toString(36).substr(2, 10);";
|
|
4
|
+
function handleSVGId(svg) {
|
|
5
|
+
if (!/="url\(#/.test(svg)) return {
|
|
6
|
+
svg,
|
|
7
|
+
injectScripts: ""
|
|
8
|
+
};
|
|
9
|
+
const idMap = {};
|
|
10
|
+
return {
|
|
11
|
+
svg: svg.replace(/\b([\w-]+)="url\(#(.+?)\)"/g, (_, attr, id) => {
|
|
12
|
+
idMap[id] = `'${id}':'uicons-'+__randId()`;
|
|
13
|
+
return `:${attr}="'url(#'+idMap['${id}']+')'"`;
|
|
14
|
+
}).replace(/\bid="(.+?)"/g, (full, id) => {
|
|
15
|
+
if (idMap[id]) return `:id="idMap['${id}']"`;
|
|
16
|
+
return full;
|
|
17
|
+
}),
|
|
18
|
+
injectScripts: `${randomIdHelper}const idMap = {${Object.values(idMap).join(",")}};`
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** An unplugin-icons compiler that emits zero-VDOM Vue Vapor components. */
|
|
22
|
+
function vaporIconCompiler() {
|
|
23
|
+
return { compiler(svg, collection, icon) {
|
|
24
|
+
const name = `${collection}-${icon}`;
|
|
25
|
+
const { injectScripts, svg: handled } = handleSVGId(svg);
|
|
26
|
+
let { code } = compile(handled, {
|
|
27
|
+
filename: `${name}.vue`,
|
|
28
|
+
prefixIdentifiers: true
|
|
29
|
+
});
|
|
30
|
+
code = code.replace(/^export /gm, "");
|
|
31
|
+
const setup = injectScripts ? `,\n setup() {${injectScripts};return { idMap }}` : "";
|
|
32
|
+
return `${code}
|
|
33
|
+
import { defineVaporComponent, markRaw } from 'vue';
|
|
34
|
+
|
|
35
|
+
export default markRaw(defineVaporComponent({ name: ${JSON.stringify(name)}, render${setup} }))
|
|
36
|
+
/* vite-plugin-components disabled */`;
|
|
37
|
+
} };
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { vaporIconCompiler };
|
|
@@ -33,7 +33,7 @@ function syncLayerZIndices(state) {
|
|
|
33
33
|
for (const layer of state.layers) {
|
|
34
34
|
const metadata = layerMetadata.get(layer);
|
|
35
35
|
if (!metadata) continue;
|
|
36
|
-
const zIndex = Math.max(metadata.baseZIndex, highestZIndex + 2);
|
|
36
|
+
const zIndex = Math.max(metadata.baseZIndex.value, highestZIndex + 2);
|
|
37
37
|
metadata.setZIndex(zIndex);
|
|
38
38
|
highestZIndex = zIndex;
|
|
39
39
|
}
|
|
@@ -142,7 +142,8 @@ function useOverlayLayer(options) {
|
|
|
142
142
|
const branchSet = /* @__PURE__ */ new Set();
|
|
143
143
|
const focusBranchSet = /* @__PURE__ */ new Set();
|
|
144
144
|
const insideBranchSet = /* @__PURE__ */ new Set();
|
|
145
|
-
const
|
|
145
|
+
const baseZIndex = computed(() => toValue(options.baseZIndex ?? 100));
|
|
146
|
+
const zIndex = ref(baseZIndex.value);
|
|
146
147
|
let registeredDocument = null;
|
|
147
148
|
let registeredElement = null;
|
|
148
149
|
let parentBranchCleanup;
|
|
@@ -194,7 +195,7 @@ function useOverlayLayer(options) {
|
|
|
194
195
|
registerBranch
|
|
195
196
|
};
|
|
196
197
|
layerMetadata.set(context, {
|
|
197
|
-
baseZIndex
|
|
198
|
+
baseZIndex,
|
|
198
199
|
parent,
|
|
199
200
|
setZIndex(value) {
|
|
200
201
|
zIndex.value = value;
|
|
@@ -241,6 +242,10 @@ function useOverlayLayer(options) {
|
|
|
241
242
|
watch([modal, preventScroll], () => {
|
|
242
243
|
if (registeredDocument) syncModalEffects(registeredDocument, getState(registeredDocument));
|
|
243
244
|
});
|
|
245
|
+
watch(baseZIndex, (value) => {
|
|
246
|
+
if (registeredDocument) syncLayerZIndices(getState(registeredDocument));
|
|
247
|
+
else zIndex.value = value;
|
|
248
|
+
});
|
|
244
249
|
onBeforeUnmount(unregister);
|
|
245
250
|
provide(overlayLayerKey, context);
|
|
246
251
|
return context;
|
|
@@ -258,5 +263,25 @@ function useOverlayLayerBranch(element, options = {}) {
|
|
|
258
263
|
onBeforeUnmount(() => cleanup?.());
|
|
259
264
|
return layer;
|
|
260
265
|
}
|
|
266
|
+
function useParentOverlayLayer() {
|
|
267
|
+
return inject(overlayLayerKey, null);
|
|
268
|
+
}
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region src/components/overlay/useOverlayZIndex.ts
|
|
271
|
+
var overlayZIndexKey = Symbol("overlay-z-index");
|
|
272
|
+
function provideOverlayZIndex(baseZIndex) {
|
|
273
|
+
const resolvedBaseZIndex = computed(() => toValue(baseZIndex));
|
|
274
|
+
provide(overlayZIndexKey, { baseZIndex: resolvedBaseZIndex });
|
|
275
|
+
return resolvedBaseZIndex;
|
|
276
|
+
}
|
|
277
|
+
function useOverlayZIndex(options = {}) {
|
|
278
|
+
const provided = inject(overlayZIndexKey, null);
|
|
279
|
+
const parentLayer = useParentOverlayLayer();
|
|
280
|
+
return computed(() => {
|
|
281
|
+
const resolvedZIndex = (toValue(options.baseZIndex) ?? provided?.baseZIndex.value ?? options.defaultBaseZIndex ?? 1e3) + (toValue(options.offset) ?? 0);
|
|
282
|
+
if (toValue(options.aboveParent) === false || !parentLayer) return resolvedZIndex;
|
|
283
|
+
return Math.max(resolvedZIndex, parentLayer.zIndex.value + 1);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
261
286
|
//#endregion
|
|
262
|
-
export { useOverlayLayerBranch as n, useOverlayLayer as t };
|
|
287
|
+
export { useOverlayLayerBranch as i, useOverlayZIndex as n, useOverlayLayer as r, provideOverlayZIndex as t };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Overlay layer z-index API
|
|
2
|
+
|
|
3
|
+
`OverlayLayerProvider` sets a shared z-index floor for Ropav portal surfaces in a Vue subtree.
|
|
4
|
+
Component props take precedence over the nearest provider, and components outside a provider keep
|
|
5
|
+
their existing defaults.
|
|
6
|
+
|
|
7
|
+
```vue
|
|
8
|
+
<template>
|
|
9
|
+
<OverlayLayerProvider :base-z-index="5000">
|
|
10
|
+
<AppShell />
|
|
11
|
+
</OverlayLayerProvider>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script setup lang="ts">
|
|
15
|
+
import { OverlayLayerProvider } from 'ropav/overlay';
|
|
16
|
+
</script>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The provider follows the logical Vue component tree, including content rendered through
|
|
20
|
+
`Teleport`. Providers can be nested to create a higher or lower floor for one subtree.
|
|
21
|
+
|
|
22
|
+
## Component overrides
|
|
23
|
+
|
|
24
|
+
`DialogRoot`, `Modal`, `Popover`, `DropdownMenu`, `DropdownMenuRoot`, `Tooltip` and `ToastViewport`
|
|
25
|
+
accept `baseZIndex`. The resolution order is:
|
|
26
|
+
|
|
27
|
+
1. The component's `baseZIndex` prop.
|
|
28
|
+
2. The nearest `OverlayLayerProvider`.
|
|
29
|
+
3. The component's legacy default.
|
|
30
|
+
|
|
31
|
+
Dialog, Popover and Dropdown layers may end up above the resolved floor because active managed
|
|
32
|
+
layers are ordered in two-unit steps. The unused plane immediately below a Dialog content layer is
|
|
33
|
+
reserved for its overlay. A top-level Tooltip uses the resolved floor, while a Tooltip nested in a
|
|
34
|
+
managed layer uses at least `parentZIndex + 1`. `ToastViewport` applies an offset of `1`.
|
|
35
|
+
|
|
36
|
+
Without a provider or local override, Dropdown and Popover start at `100`, Dialog and Tooltip start
|
|
37
|
+
at `1000`, and ToastViewport uses `1001`.
|
|
38
|
+
|
|
39
|
+
## Custom portal surfaces
|
|
40
|
+
|
|
41
|
+
`useOverlayZIndex()` lets custom portal content resolve the same policy without joining Ropav's
|
|
42
|
+
focus, inert, dismissal or active-layer management.
|
|
43
|
+
|
|
44
|
+
```vue
|
|
45
|
+
<script setup lang="ts">
|
|
46
|
+
import { useOverlayZIndex } from 'ropav/overlay';
|
|
47
|
+
|
|
48
|
+
const props = defineProps<{ baseZIndex?: number }>();
|
|
49
|
+
const zIndex = useOverlayZIndex({
|
|
50
|
+
baseZIndex: () => props.baseZIndex,
|
|
51
|
+
defaultBaseZIndex: 1000,
|
|
52
|
+
offset: 1,
|
|
53
|
+
});
|
|
54
|
+
</script>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
| Option | Default | Description |
|
|
58
|
+
| ------------------- | ------- | ------------------------------------------------------------------- |
|
|
59
|
+
| `baseZIndex` | — | Local value, ref or getter that overrides the provider. |
|
|
60
|
+
| `defaultBaseZIndex` | `1000` | Fallback used when neither a local value nor provider is available. |
|
|
61
|
+
| `offset` | `0` | Value, ref or getter added to the resolved base. |
|
|
62
|
+
| `aboveParent` | `true` | Ensures the result is at least one plane above a parent layer. |
|
|
63
|
+
|
|
64
|
+
Set `aboveParent: false` when the custom surface only needs the resolved floor. The returned
|
|
65
|
+
`ComputedRef<number>` updates when the local value, provider or parent layer changes.
|
|
@@ -26,7 +26,7 @@ Ropav does not expose a `vars` prop. Public CSS variables are set through CSS, t
|
|
|
26
26
|
|
|
27
27
|
- Classes merge as internal classes, compatibility classes, `classNames`, then root `class` attributes.
|
|
28
28
|
- Styles merge as internal styles, compatibility styles, `styles`, then root `style` attributes. Later stages win a duplicate property.
|
|
29
|
-
- `
|
|
29
|
+
- `inputAttrs` styling is a compatibility stage because this escape hatch also carries non-styling behavior.
|
|
30
30
|
- Attributes and native listeners are forwarded exactly once to the public root host. Internal native handlers run before consumer handlers.
|
|
31
31
|
- Declared component events remain component events. Component-owned roles, ARIA and behavioral attributes remain authoritative.
|
|
32
32
|
- Composite components do not copy root attributes into their child components. Teleported roots receive attributes on the rendered host, not on the virtual teleport node.
|
|
@@ -64,7 +64,8 @@ Only independently useful semantic elements are public parts. Conditional parts
|
|
|
64
64
|
| Radio | `root`, `input`, `indicator`, `label` |
|
|
65
65
|
| RadioGroup | `root` |
|
|
66
66
|
| Select | `root`, `trigger`, `value`, `indicator`, `clear`, `content`, `option`, `empty` |
|
|
67
|
-
| Slider
|
|
67
|
+
| Slider | `root`, `label`, `value`, `track`, `range`, `input`, `thumb`, `mark`, `markLabel`, `tooltip` |
|
|
68
|
+
| RangeSlider | `root`, `label`, `value`, `track`, `range`, `input`, `thumb`, `mark`, `markLabel`, `tooltip` |
|
|
68
69
|
| Switch | `root`, `input`, `track`, `thumb`, `label` |
|
|
69
70
|
| Tabs, TabsList, TabsTrigger, TabsContent | `root` on each component |
|
|
70
71
|
| Textarea | `root`, `input` |
|
|
@@ -90,6 +91,8 @@ Boolean states use presence semantics: the attribute value is empty when true an
|
|
|
90
91
|
- `data-selected`: Select options and ColorPicker swatches.
|
|
91
92
|
- `data-highlighted`: Select options and DropdownMenu items.
|
|
92
93
|
- `data-filled`: Slider and RangeSlider marks.
|
|
94
|
+
- `data-track-hovered` and `data-dragging`: Slider track pointer interaction.
|
|
95
|
+
- `data-thumb-visibility="always|interaction|hidden"`: Slider thumb visibility behavior.
|
|
93
96
|
- `data-submenu`: DropdownMenu items that own children.
|
|
94
97
|
- `data-orientation="horizontal|vertical"`: Accordion, ButtonGroup, RadioGroup, Slider, RangeSlider, Tabs and TabsList.
|
|
95
98
|
- `data-placement`: the final placement after collision handling; twelve placements for Popover and DropdownMenu, and a side (`top`, `right`, `bottom`, `left`) for Tooltip.
|
|
@@ -120,8 +123,6 @@ The layered stylesheet declares `ropav.tokens` before `ropav.components`. A laye
|
|
|
120
123
|
|
|
121
124
|
Place global resets in `reset` and application overrides in `app`. Import order does not change precedence once the order is declared. Unlayered application rules still outrank named Ropav layers.
|
|
122
125
|
|
|
123
|
-
Layer adoption changes cascade precedence. Consumers whose reset cannot yet be layered can temporarily import `ropav/legacy-unlayered.css` after that reset. The aggregate fallback is deprecated from its introduction and is intended only as a migration aid.
|
|
124
|
-
|
|
125
126
|
## Compatibility
|
|
126
127
|
|
|
127
128
|
- Typed parts, state attributes, manifest entries, geometry variables and cascade layers form the current Public Styles API.
|
|
@@ -130,5 +131,3 @@ Layer adoption changes cascade precedence. Consumers whose reset cannot yet be l
|
|
|
130
131
|
- `tokens:check` compares the current manifest with the latest reachable `v*` release tag that contains one. Until the first such release, it uses the immutable manifest from the initial Public Styles API commit (`f16e826`). Released variables cannot be removed, renamed or changed semantically; adding a variable requires incrementing the manifest's `contractVersion`.
|
|
131
132
|
- Release tags must be available in the Git checkout that runs the check. `PUBLIC_STYLES_BASELINE_REF` can explicitly pin a commit or tag that contains a manifest.
|
|
132
133
|
- Internal DOM, selectors and undocumented variables are outside the public contract.
|
|
133
|
-
- `Card.bodyClass` is a deprecated compatibility escape hatch; prefer `classNames.body`.
|
|
134
|
-
- The legacy unlayered stylesheet is a temporary migration fallback for consumers that cannot yet adopt cascade layers.
|