ropav 0.0.9 → 0.0.10
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/dist/color-input.css +19 -19
- package/dist/color-input.js +8 -3
- package/dist/color-picker.css +20 -20
- package/dist/color-picker.js +107 -27
- package/dist/components/accordion/accordion-item.d.ts +4 -4
- package/dist/components/accordion/accordion.d.ts +1 -1
- package/dist/components/accordion/index.d.ts +4 -4
- package/dist/components/accordion/types.d.ts +1 -1
- package/dist/components/accordion/useAccordion.d.ts +1 -1
- package/dist/components/alert/alert.d.ts +1 -1
- package/dist/components/alert/index.d.ts +3 -3
- package/dist/components/alert/types.d.ts +1 -1
- package/dist/components/alert/useAlertColor.d.ts +1 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +1 -1
- package/dist/components/aspect-ratio/index.d.ts +2 -2
- package/dist/components/avatar/avatar.d.ts +1 -1
- package/dist/components/avatar/index.d.ts +3 -3
- package/dist/components/avatar/types.d.ts +1 -1
- package/dist/components/avatar/useAvatarColor.d.ts +1 -1
- package/dist/components/badge/badge.d.ts +1 -1
- package/dist/components/badge/index.d.ts +3 -3
- package/dist/components/badge/types.d.ts +1 -1
- package/dist/components/badge/useBadgeColor.d.ts +1 -1
- package/dist/components/button/button.d.ts +1 -1
- package/dist/components/button/index.d.ts +2 -2
- package/dist/components/button/types.d.ts +1 -1
- package/dist/components/button/useButtonColor.d.ts +1 -1
- package/dist/components/button-group/button-group.d.ts +1 -1
- package/dist/components/button-group/index.d.ts +2 -2
- package/dist/components/button-link/button-link.d.ts +1 -1
- package/dist/components/button-link/index.d.ts +2 -2
- package/dist/components/button-link/types.d.ts +1 -1
- package/dist/components/card/card.d.ts +1 -1
- package/dist/components/card/index.d.ts +2 -2
- package/dist/components/checkbox/checkbox.d.ts +1 -1
- package/dist/components/checkbox/index.d.ts +2 -2
- package/dist/components/checkbox/types.d.ts +1 -1
- package/dist/components/checkbox/useCheckbox.d.ts +2 -2
- package/dist/components/collapse/collapse.d.ts +2 -2
- package/dist/components/collapse/index.d.ts +3 -3
- package/dist/components/collapse/useCollapse.d.ts +1 -1
- package/dist/components/color-input/color-input.d.ts +1 -1
- package/dist/components/color-input/index.d.ts +2 -2
- package/dist/components/color-input/types.d.ts +4 -3
- package/dist/components/color-input/useColorInput.d.ts +5 -5
- package/dist/components/color-input/useColorInputEyeDropper.d.ts +1 -1
- package/dist/components/color-input/useColorInputPopover.d.ts +2 -2
- package/dist/components/color-input/useColorInputValue.d.ts +1 -1
- package/dist/components/color-picker/color-picker-saturation.d.ts +1 -1
- package/dist/components/color-picker/color-picker-slider.d.ts +1 -1
- package/dist/components/color-picker/color-picker-utils.d.ts +1 -1
- package/dist/components/color-picker/color-picker.d.ts +1 -1
- package/dist/components/color-picker/index.d.ts +3 -3
- package/dist/components/color-picker/useColorPickerDrag.d.ts +7 -2
- package/dist/components/color-picker/useColorPickerSwatches.d.ts +1 -1
- package/dist/components/color-picker/useColorPickerValue.d.ts +2 -2
- package/dist/components/color-swatch/color-swatch.d.ts +1 -1
- package/dist/components/color-swatch/index.d.ts +2 -2
- package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +15 -6
- package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +1 -1
- package/dist/components/dropdown-menu/index.d.ts +3 -3
- package/dist/components/dropdown-menu/useDropdownMenu.d.ts +11 -10
- package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +2 -2
- package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +2 -2
- package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +2 -2
- package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +2 -2
- package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +3 -3
- package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +12 -4
- package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +3 -3
- package/dist/components/field/field.d.ts +2 -2
- package/dist/components/field/index.d.ts +2 -2
- package/dist/components/field/useField.d.ts +1 -1
- package/dist/components/icon-button/icon-button.d.ts +1 -1
- package/dist/components/icon-button/index.d.ts +2 -2
- package/dist/components/icon-button/types.d.ts +1 -1
- package/dist/components/input/index.d.ts +2 -2
- package/dist/components/input/input.d.ts +1 -1
- package/dist/components/input/useInput.d.ts +2 -2
- package/dist/components/modal/index.d.ts +2 -2
- package/dist/components/modal/modal.d.ts +1 -1
- package/dist/components/modal/types.d.ts +1 -1
- package/dist/components/modal/useModal.d.ts +1 -1
- package/dist/components/number-input/index.d.ts +2 -2
- package/dist/components/number-input/number-input.d.ts +1 -1
- package/dist/components/number-input/types.d.ts +1 -1
- package/dist/components/number-input/useNumberInput.d.ts +2 -2
- package/dist/components/overlay/index.d.ts +2 -2
- package/dist/components/overlay/overlay.d.ts +1 -1
- package/dist/components/overlay/useOverlay.d.ts +1 -1
- package/dist/components/popover/index.d.ts +3 -3
- package/dist/components/popover/popover.d.ts +2 -2
- package/dist/components/popover/types.d.ts +1 -0
- package/dist/components/popover/usePopover.d.ts +2 -1
- package/dist/components/progress/index.d.ts +3 -3
- package/dist/components/progress/progress.d.ts +1 -1
- package/dist/components/progress/types.d.ts +1 -1
- package/dist/components/progress/useProgress.d.ts +2 -2
- package/dist/components/radio/index.d.ts +3 -3
- package/dist/components/radio/radio-group.d.ts +1 -1
- package/dist/components/radio/radio.d.ts +1 -1
- package/dist/components/radio/types.d.ts +1 -1
- package/dist/components/radio/useRadio.d.ts +2 -2
- package/dist/components/select/index.d.ts +2 -2
- package/dist/components/select/select.d.ts +1 -1
- package/dist/components/select/useSelect.d.ts +2 -2
- package/dist/components/slider/index.d.ts +4 -4
- package/dist/components/slider/range-slider-tooltip.d.ts +34 -0
- package/dist/components/slider/range-slider.d.ts +4 -12
- package/dist/components/slider/slider.d.ts +1 -1
- package/dist/components/slider/sliderCore.d.ts +35 -0
- package/dist/components/slider/types.d.ts +2 -5
- package/dist/components/slider/useRangeSlider.d.ts +5 -7
- package/dist/components/slider/useRangeSliderPointer.d.ts +19 -0
- package/dist/components/slider/useRangeSliderTooltipCollision.d.ts +31 -2
- package/dist/components/slider/useRangeSliderTooltipState.d.ts +23 -0
- package/dist/components/slider/useSlider.d.ts +11 -15
- package/dist/components/switch/index.d.ts +2 -2
- package/dist/components/switch/switch.d.ts +1 -1
- package/dist/components/switch/types.d.ts +1 -1
- package/dist/components/switch/useSwitch.d.ts +2 -2
- package/dist/components/tabs/index.d.ts +6 -6
- package/dist/components/tabs/tabs-content.d.ts +2 -2
- package/dist/components/tabs/tabs-list.d.ts +4 -4
- package/dist/components/tabs/tabs-trigger.d.ts +5 -5
- package/dist/components/tabs/tabs.d.ts +5 -5
- package/dist/components/tabs/useTabs.d.ts +1 -1
- package/dist/components/textarea/index.d.ts +2 -2
- package/dist/components/textarea/textarea.d.ts +1 -1
- package/dist/components/textarea/useTextarea.d.ts +2 -2
- package/dist/components/toast/defaults.d.ts +7 -0
- package/dist/components/toast/index.d.ts +7 -0
- package/dist/components/toast/index.js +2 -0
- package/dist/components/toast/toast-provider.d.ts +21 -0
- package/dist/components/toast/toast-viewport.d.ts +34 -0
- package/dist/components/toast/toast.d.ts +31 -0
- package/dist/components/toast/types.d.ts +106 -0
- package/dist/components/toast/useToast.d.ts +4 -0
- package/dist/components/toast/useToastColor.d.ts +3 -0
- package/dist/components/toast/useToastState.d.ts +2 -0
- package/dist/components/tooltip/index.d.ts +2 -2
- package/dist/components/tooltip/tooltip.d.ts +2 -2
- package/dist/components/tooltip/types.d.ts +1 -1
- package/dist/components/tooltip/useTooltip.d.ts +3 -1
- package/dist/dropdown-menu.js +160 -39
- package/dist/index.d.ts +31 -30
- package/dist/index.js +2 -1
- package/dist/popover.css +28 -28
- package/dist/popover.js +25 -14
- package/dist/rafScheduler.js +34 -0
- package/dist/slider.css +355 -228
- package/dist/slider.js +890 -862
- package/dist/textarea.js +8 -2
- package/dist/toast.css +232 -0
- package/dist/toast.js +679 -0
- package/dist/tooltip.js +17 -10
- package/dist/utils/componentColors.d.ts +60 -0
- package/package.json +17 -9
- package/dist/components/slider/useRangeSliderTooltipTransition.d.ts +0 -4
package/dist/slider.js
CHANGED
|
@@ -3,25 +3,9 @@ import { t as bem } from "./bem.js";
|
|
|
3
3
|
import { n as getComponentColorValue, t as componentColors } from "./componentColors.js";
|
|
4
4
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
5
5
|
import { t as useControlState } from "./useControlState.js";
|
|
6
|
-
import {
|
|
7
|
-
import { child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, next,
|
|
8
|
-
//#region src/components/slider/
|
|
9
|
-
var sliderMarkColorProperties = [
|
|
10
|
-
"--_rp-slider-mark-color",
|
|
11
|
-
"--_rp-slider-mark-label-color",
|
|
12
|
-
"--_rp-slider-mark-filled-label-color",
|
|
13
|
-
"--_rp-slider-mark-ring-color"
|
|
14
|
-
];
|
|
15
|
-
function normalizeSliderValue(value, min, max, step) {
|
|
16
|
-
const bounds = normalizeSliderBounds(min, max);
|
|
17
|
-
const safeStep = normalizeSliderStep(step);
|
|
18
|
-
const safeValue = Number.isFinite(value) ? value : bounds.min;
|
|
19
|
-
const clamped = Math.min(bounds.max, Math.max(bounds.min, safeValue));
|
|
20
|
-
if (safeStep === "any") return clamped;
|
|
21
|
-
const steps = Math.round((clamped - bounds.min) / safeStep);
|
|
22
|
-
const snapped = bounds.min + steps * safeStep;
|
|
23
|
-
return Math.min(bounds.max, Math.max(bounds.min, Number(snapped.toFixed(10))));
|
|
24
|
-
}
|
|
6
|
+
import { i as useDelayedOpen, n as resolveTooltipColorStyleWithContrast, r as resolveTooltipOffsetStyle, t as tooltip_default } from "./tooltip.js";
|
|
7
|
+
import { applyVShow, child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, next, on, onBeforeUnmount, onMounted, ref, renderEffect, setAttr, setClass, setClassName, setInsertionState, setProp, setStyle, setText, setValue, template, toDisplayString, toRef, txt, unref, useId, useSlots, watch } from "vue";
|
|
8
|
+
//#region src/components/slider/sliderCore.ts
|
|
25
9
|
function normalizeSliderBounds(min, max) {
|
|
26
10
|
const safeMin = Number.isFinite(min) ? min : 0;
|
|
27
11
|
const safeMax = Number.isFinite(max) ? max : safeMin;
|
|
@@ -36,32 +20,48 @@ function normalizeSliderBounds(min, max) {
|
|
|
36
20
|
function normalizeSliderStep(step) {
|
|
37
21
|
return step === "any" || Number.isFinite(step) && step > 0 ? step : "any";
|
|
38
22
|
}
|
|
23
|
+
function normalizeSliderValue(value, min, max, step) {
|
|
24
|
+
const bounds = normalizeSliderBounds(min, max);
|
|
25
|
+
const safeStep = normalizeSliderStep(step);
|
|
26
|
+
const safeValue = Number.isFinite(value) ? value : bounds.min;
|
|
27
|
+
const clamped = Math.min(bounds.max, Math.max(bounds.min, safeValue));
|
|
28
|
+
if (safeStep === "any") return clamped;
|
|
29
|
+
const steps = Math.round((clamped - bounds.min) / safeStep);
|
|
30
|
+
const snapped = bounds.min + steps * safeStep;
|
|
31
|
+
return Math.min(bounds.max, Math.max(bounds.min, Number(snapped.toFixed(10))));
|
|
32
|
+
}
|
|
39
33
|
function getSliderValuePercent(value, min, max) {
|
|
40
34
|
if (max <= min) return 0;
|
|
41
35
|
const percent = (value - min) / (max - min) * 100;
|
|
42
36
|
return Math.min(100, Math.max(0, percent));
|
|
43
37
|
}
|
|
44
|
-
function getSliderMarkColorValue(color) {
|
|
45
|
-
return getComponentColorValue(color);
|
|
46
|
-
}
|
|
47
|
-
function getSliderColorValue(color) {
|
|
48
|
-
return getComponentColorValue(color);
|
|
49
|
-
}
|
|
50
38
|
function setSliderStyleValue(style, property, value) {
|
|
51
39
|
if (value) style[property] = value;
|
|
52
40
|
}
|
|
53
|
-
function
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
function getSliderLengthValue(value) {
|
|
42
|
+
if (value == null || value === "") return void 0;
|
|
43
|
+
if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function getSliderBorderValue(value, borderColorProperty) {
|
|
47
|
+
if (value == null || value === "") return void 0;
|
|
48
|
+
if (typeof value === "number") return Number.isFinite(value) ? `${value}px solid var(${borderColorProperty})` : void 0;
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
function applySliderThumbStyle(style, thumbStyle, properties) {
|
|
52
|
+
setSliderStyleValue(style, properties.size, getSliderLengthValue(thumbStyle?.size));
|
|
53
|
+
setSliderStyleValue(style, properties.border, getSliderBorderValue(thumbStyle?.border, properties.borderColor));
|
|
54
|
+
setSliderStyleValue(style, properties.padding, getSliderLengthValue(thumbStyle?.padding));
|
|
58
55
|
}
|
|
59
|
-
function
|
|
60
|
-
|
|
56
|
+
function getSliderMarkStyle(percent, color, properties) {
|
|
57
|
+
const style = { [properties.position]: `${percent}%` };
|
|
58
|
+
const colorValue = getComponentColorValue(color);
|
|
59
|
+
for (const property of properties.colors) setSliderStyleValue(style, property, colorValue);
|
|
60
|
+
return style;
|
|
61
61
|
}
|
|
62
|
-
function
|
|
62
|
+
function createSliderMarkItems(marks, min, max, isFilled, properties) {
|
|
63
63
|
return (marks ?? []).flatMap((markInput, index) => {
|
|
64
|
-
const mark =
|
|
64
|
+
const mark = typeof markInput === "number" ? { value: markInput } : markInput;
|
|
65
65
|
if (mark.hidden) return [];
|
|
66
66
|
const value = Number(mark.value);
|
|
67
67
|
if (!Number.isFinite(value)) return [];
|
|
@@ -71,47 +71,11 @@ function normalizeSliderMarks(marks, min, max, valuePercent) {
|
|
|
71
71
|
value,
|
|
72
72
|
label: mark.label,
|
|
73
73
|
hasLabel: mark.label != null,
|
|
74
|
-
filled: percent
|
|
75
|
-
style: getSliderMarkStyle(percent, mark.color)
|
|
74
|
+
filled: isFilled(value, percent),
|
|
75
|
+
style: getSliderMarkStyle(percent, mark.color, properties)
|
|
76
76
|
};
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
-
function getSliderLengthValue(value) {
|
|
80
|
-
if (value == null || value === "") return void 0;
|
|
81
|
-
if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
|
|
82
|
-
return value;
|
|
83
|
-
}
|
|
84
|
-
function getSliderBorderValue(value) {
|
|
85
|
-
if (value == null || value === "") return void 0;
|
|
86
|
-
if (typeof value === "number") return Number.isFinite(value) ? `${value}px solid var(--_rp-slider-thumb-border)` : void 0;
|
|
87
|
-
return value;
|
|
88
|
-
}
|
|
89
|
-
var sliderThumbStyleProps = [
|
|
90
|
-
[
|
|
91
|
-
"--_rp-slider-thumb-size",
|
|
92
|
-
"size",
|
|
93
|
-
getSliderLengthValue
|
|
94
|
-
],
|
|
95
|
-
[
|
|
96
|
-
"--_rp-slider-thumb-border-style",
|
|
97
|
-
"border",
|
|
98
|
-
getSliderBorderValue
|
|
99
|
-
],
|
|
100
|
-
[
|
|
101
|
-
"--_rp-slider-thumb-padding",
|
|
102
|
-
"padding",
|
|
103
|
-
getSliderLengthValue
|
|
104
|
-
]
|
|
105
|
-
];
|
|
106
|
-
function getSliderTrackStyle(props, valuePercent) {
|
|
107
|
-
const style = {
|
|
108
|
-
"--_rp-slider-percent": `${valuePercent}%`,
|
|
109
|
-
"--_rp-slider-ratio": `${valuePercent / 100}`
|
|
110
|
-
};
|
|
111
|
-
setSliderStyleValue(style, "--_rp-slider-color", getSliderColorValue(props.color));
|
|
112
|
-
for (const [property, propName, getValue] of sliderThumbStyleProps) setSliderStyleValue(style, property, getValue(props.thumbStyle?.[propName]));
|
|
113
|
-
return style;
|
|
114
|
-
}
|
|
115
79
|
function getFormattedSliderValue(value, formatter) {
|
|
116
80
|
return formatter ? formatter(value) : value;
|
|
117
81
|
}
|
|
@@ -128,6 +92,25 @@ function getSliderTooltipMode(tooltip) {
|
|
|
128
92
|
if (typeof tooltip === "object") return tooltip.mode ?? "hover";
|
|
129
93
|
return tooltip;
|
|
130
94
|
}
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/components/slider/useSlider.ts
|
|
97
|
+
function getSliderColorValue(color) {
|
|
98
|
+
return getComponentColorValue(color);
|
|
99
|
+
}
|
|
100
|
+
function getSliderTrackStyle(props, valuePercent) {
|
|
101
|
+
const style = {
|
|
102
|
+
"--_rp-slider-percent": `${valuePercent}%`,
|
|
103
|
+
"--_rp-slider-ratio": `${valuePercent / 100}`
|
|
104
|
+
};
|
|
105
|
+
setSliderStyleValue(style, "--_rp-slider-color", getSliderColorValue(props.color));
|
|
106
|
+
applySliderThumbStyle(style, props.thumbStyle, {
|
|
107
|
+
size: "--_rp-slider-thumb-size",
|
|
108
|
+
border: "--_rp-slider-thumb-border-style",
|
|
109
|
+
padding: "--_rp-slider-thumb-padding",
|
|
110
|
+
borderColor: "--_rp-slider-thumb-border"
|
|
111
|
+
});
|
|
112
|
+
return style;
|
|
113
|
+
}
|
|
131
114
|
function useSlider(props, emitUpdate) {
|
|
132
115
|
const control = useControlState(props);
|
|
133
116
|
const bounds = computed(() => normalizeSliderBounds(props.min, props.max));
|
|
@@ -136,7 +119,15 @@ function useSlider(props, emitUpdate) {
|
|
|
136
119
|
const valuePercent = computed(() => getSliderValuePercent(normalizedValue.value, bounds.value.min, bounds.value.max));
|
|
137
120
|
const formattedValue = computed(() => getFormattedSliderValue(normalizedValue.value, props.formatValue));
|
|
138
121
|
const ariaValueText = computed(() => getSliderAriaValueText(normalizedValue.value, props.ariaValueText, props.formatValue));
|
|
139
|
-
const markItems = computed(() =>
|
|
122
|
+
const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (_value, percent) => percent <= valuePercent.value, {
|
|
123
|
+
position: "--_rp-slider-mark-position",
|
|
124
|
+
colors: [
|
|
125
|
+
"--_rp-slider-mark-color",
|
|
126
|
+
"--_rp-slider-mark-label-color",
|
|
127
|
+
"--_rp-slider-mark-filled-label-color",
|
|
128
|
+
"--_rp-slider-mark-ring-color"
|
|
129
|
+
]
|
|
130
|
+
}));
|
|
140
131
|
const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));
|
|
141
132
|
const tooltipMode = computed(() => getSliderTooltipMode(props.tooltip));
|
|
142
133
|
const tooltipOpenDelay = computed(() => tooltipOptions.value.openDelay ?? 0);
|
|
@@ -144,6 +135,12 @@ function useSlider(props, emitUpdate) {
|
|
|
144
135
|
openDelay: () => tooltipOpenDelay.value,
|
|
145
136
|
disabled: () => tooltipMode.value !== "hover" || control.disabled
|
|
146
137
|
});
|
|
138
|
+
const trackHovered = ref(false);
|
|
139
|
+
const focusWithin = ref(false);
|
|
140
|
+
const dragging = ref(false);
|
|
141
|
+
let dismissed = false;
|
|
142
|
+
let dragView = null;
|
|
143
|
+
let dragPointerId;
|
|
147
144
|
const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));
|
|
148
145
|
const tooltipVisible = computed(() => tooltipMode.value !== false);
|
|
149
146
|
const tooltipAlwaysVisible = computed(() => tooltipMode.value === "always");
|
|
@@ -160,9 +157,7 @@ function useSlider(props, emitUpdate) {
|
|
|
160
157
|
marked: markItems.value.length > 0,
|
|
161
158
|
"marks-with-labels": hasMarkLabels.value,
|
|
162
159
|
"tooltip-always-visible": tooltipAlwaysVisible.value,
|
|
163
|
-
disabled: control.disabled
|
|
164
|
-
invalid: control.invalid,
|
|
165
|
-
valid: control.valid && !control.invalid
|
|
160
|
+
disabled: control.disabled
|
|
166
161
|
}));
|
|
167
162
|
const trackStyle = computed(() => getSliderTrackStyle(props, valuePercent.value));
|
|
168
163
|
function onInput(e) {
|
|
@@ -170,15 +165,64 @@ function useSlider(props, emitUpdate) {
|
|
|
170
165
|
const input = e.target;
|
|
171
166
|
emitUpdate(normalizeSliderValue(input.valueAsNumber, bounds.value.min, bounds.value.max, nativeStep.value));
|
|
172
167
|
}
|
|
173
|
-
function
|
|
174
|
-
|
|
168
|
+
function hasTooltipInteraction() {
|
|
169
|
+
return trackHovered.value || focusWithin.value || dragging.value;
|
|
175
170
|
}
|
|
176
|
-
function
|
|
171
|
+
function syncTooltip() {
|
|
172
|
+
if (tooltipMode.value === "hover" && !control.disabled && hasTooltipInteraction() && !dismissed) {
|
|
173
|
+
openDelayedTooltip();
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
177
176
|
closeDelayedTooltip();
|
|
178
177
|
}
|
|
178
|
+
function onTooltipMouseEnter() {
|
|
179
|
+
trackHovered.value = true;
|
|
180
|
+
dismissed = false;
|
|
181
|
+
syncTooltip();
|
|
182
|
+
}
|
|
183
|
+
function onTooltipMouseLeave() {
|
|
184
|
+
trackHovered.value = false;
|
|
185
|
+
syncTooltip();
|
|
186
|
+
}
|
|
187
|
+
function onTooltipFocusIn() {
|
|
188
|
+
focusWithin.value = true;
|
|
189
|
+
dismissed = false;
|
|
190
|
+
syncTooltip();
|
|
191
|
+
}
|
|
192
|
+
function onTooltipFocusOut() {
|
|
193
|
+
focusWithin.value = false;
|
|
194
|
+
syncTooltip();
|
|
195
|
+
}
|
|
196
|
+
function removeDragListeners() {
|
|
197
|
+
dragView?.removeEventListener("pointerup", onTooltipPointerEnd);
|
|
198
|
+
dragView?.removeEventListener("pointercancel", onTooltipPointerEnd);
|
|
199
|
+
dragView = null;
|
|
200
|
+
dragPointerId = void 0;
|
|
201
|
+
}
|
|
202
|
+
function onTooltipPointerEnd(event) {
|
|
203
|
+
if (dragPointerId !== void 0 && event.pointerId !== dragPointerId) return;
|
|
204
|
+
dragging.value = false;
|
|
205
|
+
removeDragListeners();
|
|
206
|
+
syncTooltip();
|
|
207
|
+
}
|
|
208
|
+
function onTooltipPointerDown(event) {
|
|
209
|
+
if (control.disabled || event.button !== 0 || event.isPrimary === false) return;
|
|
210
|
+
removeDragListeners();
|
|
211
|
+
dismissed = false;
|
|
212
|
+
dragging.value = true;
|
|
213
|
+
dragPointerId = Number.isFinite(event.pointerId) ? event.pointerId : void 0;
|
|
214
|
+
dragView = event.currentTarget?.ownerDocument.defaultView ?? null;
|
|
215
|
+
dragView?.addEventListener("pointerup", onTooltipPointerEnd);
|
|
216
|
+
dragView?.addEventListener("pointercancel", onTooltipPointerEnd);
|
|
217
|
+
syncTooltip();
|
|
218
|
+
}
|
|
179
219
|
function onTooltipKeydown(event) {
|
|
180
|
-
if (event.key === "Escape")
|
|
220
|
+
if (event.key === "Escape") {
|
|
221
|
+
dismissed = true;
|
|
222
|
+
closeDelayedTooltip();
|
|
223
|
+
}
|
|
181
224
|
}
|
|
225
|
+
onBeforeUnmount(removeDragListeners);
|
|
182
226
|
return {
|
|
183
227
|
control,
|
|
184
228
|
nativeMin: computed(() => bounds.value.min),
|
|
@@ -201,23 +245,26 @@ function useSlider(props, emitUpdate) {
|
|
|
201
245
|
tooltipArrow,
|
|
202
246
|
tooltipContent,
|
|
203
247
|
onInput,
|
|
204
|
-
|
|
205
|
-
|
|
248
|
+
onTooltipPointerDown,
|
|
249
|
+
onTooltipMouseEnter,
|
|
250
|
+
onTooltipMouseLeave,
|
|
251
|
+
onTooltipFocusIn,
|
|
252
|
+
onTooltipFocusOut,
|
|
206
253
|
onTooltipKeydown
|
|
207
254
|
};
|
|
208
255
|
}
|
|
209
256
|
//#endregion
|
|
210
257
|
//#region src/components/slider/slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
211
|
-
var t0$
|
|
212
|
-
var t1$
|
|
213
|
-
var t2$
|
|
214
|
-
var t3$
|
|
215
|
-
var t4$
|
|
216
|
-
var t5$1 = template("<span data-v-
|
|
217
|
-
var t6$1 = template("<span data-v-
|
|
218
|
-
var t7$1 = template("<span data-v-
|
|
219
|
-
var t8 = template("<label data-v-
|
|
220
|
-
delegateEvents("input", "focusin", "focusout", "keydown");
|
|
258
|
+
var t0$2 = template("<span data-v-b852f835 class=rp-slider__label>");
|
|
259
|
+
var t1$2 = template("<span data-v-b852f835 class=rp-slider__value aria-hidden=true>");
|
|
260
|
+
var t2$2 = template("<span data-v-b852f835 class=rp-slider__header>");
|
|
261
|
+
var t3$2 = template("<span data-v-b852f835 class=rp-slider__mark-label> ");
|
|
262
|
+
var t4$2 = template("<span data-v-b852f835><span data-v-b852f835 class=rp-slider__mark-dot></span>");
|
|
263
|
+
var t5$1 = template("<span data-v-b852f835 class=rp-slider__marks aria-hidden=true>");
|
|
264
|
+
var t6$1 = template("<span data-v-b852f835 class=rp-slider__thumb aria-hidden=true><span data-v-b852f835 class=rp-slider__thumb-content>");
|
|
265
|
+
var t7$1 = template("<span data-v-b852f835 class=rp-slider__tooltip-anchor aria-hidden=true>", 2);
|
|
266
|
+
var t8$1 = template("<label data-v-b852f835><span data-v-b852f835 class=rp-slider__track><span data-v-b852f835 class=rp-slider__bar aria-hidden=true></span><input data-v-b852f835 class=rp-slider__native type=range>", 1);
|
|
267
|
+
delegateEvents("input", "pointerdown", "focusin", "focusout", "keydown");
|
|
221
268
|
//#endregion
|
|
222
269
|
//#region src/components/slider/slider.vue
|
|
223
270
|
var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -248,18 +295,6 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
248
295
|
type: Boolean,
|
|
249
296
|
default: void 0
|
|
250
297
|
},
|
|
251
|
-
required: {
|
|
252
|
-
type: Boolean,
|
|
253
|
-
default: void 0
|
|
254
|
-
},
|
|
255
|
-
invalid: {
|
|
256
|
-
type: Boolean,
|
|
257
|
-
default: void 0
|
|
258
|
-
},
|
|
259
|
-
valid: {
|
|
260
|
-
type: Boolean,
|
|
261
|
-
default: void 0
|
|
262
|
-
},
|
|
263
298
|
ariaLabel: {},
|
|
264
299
|
ariaValueText: {},
|
|
265
300
|
describedby: {},
|
|
@@ -269,10 +304,10 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
269
304
|
setup(__props, { emit: __emit, slots: $slots }) {
|
|
270
305
|
const props = __props;
|
|
271
306
|
const emit = __emit;
|
|
272
|
-
const { control, nativeMin, nativeMax, nativeStep, rootClass, normalizedValue, valuePercent, formattedValue, ariaValueText, markItems, trackStyle, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipId, tooltipColor, tooltipOffset, tooltipOpenDelay, tooltipArrow, tooltipContent, onInput,
|
|
307
|
+
const { control, nativeMin, nativeMax, nativeStep, rootClass, normalizedValue, valuePercent, formattedValue, ariaValueText, markItems, trackStyle, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipId, tooltipColor, tooltipOffset, tooltipOpenDelay, tooltipArrow, tooltipContent, onInput, onTooltipPointerDown, onTooltipMouseEnter, onTooltipMouseLeave, onTooltipFocusIn, onTooltipFocusOut, onTooltipKeydown } = useSlider(props, (value) => {
|
|
273
308
|
emit("update:modelValue", value);
|
|
274
309
|
});
|
|
275
|
-
const n31 = t8();
|
|
310
|
+
const n31 = t8$1();
|
|
276
311
|
const n30 = child(n31, 1);
|
|
277
312
|
const n11 = next(child(n30), 1);
|
|
278
313
|
renderEffect(() => {
|
|
@@ -282,17 +317,17 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
282
317
|
});
|
|
283
318
|
setInsertionState(n31, 0, 0);
|
|
284
319
|
createIf(() => $slots.default || $slots.value, () => {
|
|
285
|
-
const n10 = t2$
|
|
320
|
+
const n10 = t2$2();
|
|
286
321
|
setInsertionState(n10, null, 0);
|
|
287
322
|
createIf(() => $slots.default, () => {
|
|
288
|
-
const n5 = t0$
|
|
323
|
+
const n5 = t0$2();
|
|
289
324
|
setInsertionState(n5, null, 0);
|
|
290
325
|
createSlot("default", null, null, 1);
|
|
291
326
|
return n5;
|
|
292
327
|
});
|
|
293
328
|
setInsertionState(n10, null, 1);
|
|
294
329
|
createIf(() => $slots.value, () => {
|
|
295
|
-
const n9 = t1$
|
|
330
|
+
const n9 = t1$2();
|
|
296
331
|
setInsertionState(n9, null, 0);
|
|
297
332
|
createSlot("value", {
|
|
298
333
|
value: () => unref(normalizedValue),
|
|
@@ -306,7 +341,6 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
306
341
|
n11.$evtinput = createInvoker((e) => unref(onInput)(e));
|
|
307
342
|
renderEffect(() => {
|
|
308
343
|
const _control = unref(control);
|
|
309
|
-
const _control_required = _control.required;
|
|
310
344
|
setProp(n11, "id", _control.id);
|
|
311
345
|
setProp(n11, "name", __props.name);
|
|
312
346
|
setValue(n11, unref(normalizedValue));
|
|
@@ -315,13 +349,10 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
315
349
|
setProp(n11, "step", unref(nativeStep));
|
|
316
350
|
setProp(n11, "orient", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
317
351
|
setProp(n11, "disabled", _control.disabled || void 0);
|
|
318
|
-
setProp(n11, "required", _control_required || void 0);
|
|
319
352
|
setAttr(n11, "aria-label", __props.ariaLabel || void 0);
|
|
320
353
|
setAttr(n11, "aria-labelledby", _control.ariaLabelledby);
|
|
321
354
|
setAttr(n11, "aria-describedby", _control.ariaDescribedby);
|
|
322
355
|
setAttr(n11, "aria-orientation", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
323
|
-
setAttr(n11, "aria-invalid", _control.invalid || void 0);
|
|
324
|
-
setAttr(n11, "aria-required", _control_required || void 0);
|
|
325
356
|
setAttr(n11, "aria-valuetext", unref(ariaValueText));
|
|
326
357
|
});
|
|
327
358
|
setInsertionState(n30, null, 2);
|
|
@@ -329,7 +360,7 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
329
360
|
const n20 = t5$1();
|
|
330
361
|
setInsertionState(n20, null, 0);
|
|
331
362
|
createFor(() => unref(markItems), (_for_item0) => {
|
|
332
|
-
const n19 = t4$
|
|
363
|
+
const n19 = t4$2();
|
|
333
364
|
renderEffect(() => {
|
|
334
365
|
const _mark = _for_item0.value;
|
|
335
366
|
setClassName(n19, _mark.filled ? 1 : 0, " rp-slider__mark--filled", "rp-slider__mark");
|
|
@@ -337,7 +368,7 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
337
368
|
});
|
|
338
369
|
setInsertionState(n19, null, 1);
|
|
339
370
|
createIf(() => _for_item0.value.hasLabel, () => {
|
|
340
|
-
const n18 = t3$
|
|
371
|
+
const n18 = t3$2();
|
|
341
372
|
const x18 = txt(n18);
|
|
342
373
|
renderEffect(() => setText(x18, toDisplayString(_for_item0.value.label)));
|
|
343
374
|
return n18;
|
|
@@ -374,22 +405,591 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
374
405
|
return t7$1();
|
|
375
406
|
});
|
|
376
407
|
});
|
|
377
|
-
|
|
378
|
-
on(n30, "
|
|
379
|
-
n30
|
|
380
|
-
n30.$
|
|
408
|
+
n30.$evtpointerdown = createInvoker((e) => unref(onTooltipPointerDown)(e));
|
|
409
|
+
on(n30, "mouseenter", (e) => unref(onTooltipMouseEnter)(e));
|
|
410
|
+
on(n30, "mouseleave", (e) => unref(onTooltipMouseLeave)(e));
|
|
411
|
+
n30.$evtfocusin = createInvoker((e) => unref(onTooltipFocusIn)(e));
|
|
412
|
+
n30.$evtfocusout = createInvoker((e) => unref(onTooltipFocusOut)(e));
|
|
381
413
|
n30.$evtkeydown = createInvoker((e) => unref(onTooltipKeydown)(e));
|
|
382
414
|
return n31;
|
|
383
415
|
}
|
|
384
|
-
}), [["__scopeId", "data-v-
|
|
416
|
+
}), [["__scopeId", "data-v-b852f835"]]);
|
|
417
|
+
//#endregion
|
|
418
|
+
//#region src/components/slider/useRangeSliderTooltipCollision.ts
|
|
419
|
+
var TOOLTIP_COLLISION_GAP = 4;
|
|
420
|
+
function getAxisSize(size, orientation) {
|
|
421
|
+
return orientation === "horizontal" ? size.width : size.height;
|
|
422
|
+
}
|
|
423
|
+
function getTooltipInterval(anchor, size, orientation, placement) {
|
|
424
|
+
const axisSize = getAxisSize(size, orientation);
|
|
425
|
+
if (orientation === "horizontal" ? placement === "top" || placement === "bottom" : placement === "left" || placement === "right") return {
|
|
426
|
+
start: anchor - axisSize / 2,
|
|
427
|
+
end: anchor + axisSize / 2
|
|
428
|
+
};
|
|
429
|
+
return (orientation === "horizontal" ? placement === "left" : placement === "top") ? {
|
|
430
|
+
start: anchor - axisSize,
|
|
431
|
+
end: anchor
|
|
432
|
+
} : {
|
|
433
|
+
start: anchor,
|
|
434
|
+
end: anchor + axisSize
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
function areTooltipIntervalsOverlapping(lower, upper, gap) {
|
|
438
|
+
return lower.start < upper.end + gap && lower.end + gap > upper.start;
|
|
439
|
+
}
|
|
440
|
+
function areRangeSliderTooltipLayoutsOverlapping({ gap = TOOLTIP_COLLISION_GAP, lowerPercent, lowerSize, orientation, placement, trackLength, upperPercent, upperSize }) {
|
|
441
|
+
if (trackLength <= 0 || lowerSize.width <= 0 || lowerSize.height <= 0 || upperSize.width <= 0 || upperSize.height <= 0) return false;
|
|
442
|
+
const getAnchor = (percent) => {
|
|
443
|
+
const ratio = percent / 100;
|
|
444
|
+
return orientation === "vertical" ? trackLength * (1 - ratio) : trackLength * ratio;
|
|
445
|
+
};
|
|
446
|
+
return areTooltipIntervalsOverlapping(getTooltipInterval(getAnchor(lowerPercent), lowerSize, orientation, placement), getTooltipInterval(getAnchor(upperPercent), upperSize, orientation, placement), gap);
|
|
447
|
+
}
|
|
448
|
+
function getObservedSize(entry) {
|
|
449
|
+
const borderBoxSize = Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize;
|
|
450
|
+
if (borderBoxSize) return {
|
|
451
|
+
width: borderBoxSize.inlineSize,
|
|
452
|
+
height: borderBoxSize.blockSize
|
|
453
|
+
};
|
|
454
|
+
return {
|
|
455
|
+
width: entry.contentRect.width,
|
|
456
|
+
height: entry.contentRect.height
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
function getElementSize(element) {
|
|
460
|
+
const rect = element.getBoundingClientRect();
|
|
461
|
+
return {
|
|
462
|
+
width: rect.width,
|
|
463
|
+
height: rect.height
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
function useRangeSliderTooltipCollision({ enabled, lower, orientation, placement, root, sizeDependencies = [], upper, valuePercent }) {
|
|
467
|
+
const tooltipsOverlapping = ref(false);
|
|
468
|
+
const rootSize = ref({
|
|
469
|
+
width: 0,
|
|
470
|
+
height: 0
|
|
471
|
+
});
|
|
472
|
+
const lowerSize = ref({
|
|
473
|
+
width: 0,
|
|
474
|
+
height: 0
|
|
475
|
+
});
|
|
476
|
+
const upperSize = ref({
|
|
477
|
+
width: 0,
|
|
478
|
+
height: 0
|
|
479
|
+
});
|
|
480
|
+
let resizeObserver;
|
|
481
|
+
let frameWindow;
|
|
482
|
+
let frameId;
|
|
483
|
+
let destroyed = false;
|
|
484
|
+
function setOverlapping(value) {
|
|
485
|
+
if (tooltipsOverlapping.value !== value) tooltipsOverlapping.value = value;
|
|
486
|
+
}
|
|
487
|
+
function updateCollision() {
|
|
488
|
+
if (!enabled.value) {
|
|
489
|
+
setOverlapping(false);
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
const trackLength = orientation.value === "horizontal" ? rootSize.value.width : rootSize.value.height;
|
|
493
|
+
setOverlapping(areRangeSliderTooltipLayoutsOverlapping({
|
|
494
|
+
gap: TOOLTIP_COLLISION_GAP,
|
|
495
|
+
lowerPercent: valuePercent.value[0],
|
|
496
|
+
lowerSize: lowerSize.value,
|
|
497
|
+
orientation: orientation.value,
|
|
498
|
+
placement: placement.value,
|
|
499
|
+
trackLength,
|
|
500
|
+
upperPercent: valuePercent.value[1],
|
|
501
|
+
upperSize: upperSize.value
|
|
502
|
+
}));
|
|
503
|
+
}
|
|
504
|
+
function measureSizes() {
|
|
505
|
+
if (destroyed) return;
|
|
506
|
+
rootSize.value = root.value ? getElementSize(root.value) : {
|
|
507
|
+
width: 0,
|
|
508
|
+
height: 0
|
|
509
|
+
};
|
|
510
|
+
lowerSize.value = lower.value ? getElementSize(lower.value) : {
|
|
511
|
+
width: 0,
|
|
512
|
+
height: 0
|
|
513
|
+
};
|
|
514
|
+
upperSize.value = upper.value ? getElementSize(upper.value) : {
|
|
515
|
+
width: 0,
|
|
516
|
+
height: 0
|
|
517
|
+
};
|
|
518
|
+
updateCollision();
|
|
519
|
+
}
|
|
520
|
+
function scheduleMeasure() {
|
|
521
|
+
if (destroyed || frameId != null) return;
|
|
522
|
+
const view = root.value?.ownerDocument.defaultView;
|
|
523
|
+
if (!view?.requestAnimationFrame) {
|
|
524
|
+
measureSizes();
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
frameWindow = view;
|
|
528
|
+
frameId = view.requestAnimationFrame(() => {
|
|
529
|
+
frameId = void 0;
|
|
530
|
+
frameWindow = void 0;
|
|
531
|
+
measureSizes();
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
function refreshObservedElements() {
|
|
535
|
+
if (!resizeObserver) return;
|
|
536
|
+
resizeObserver.disconnect();
|
|
537
|
+
for (const element of [
|
|
538
|
+
root.value,
|
|
539
|
+
lower.value,
|
|
540
|
+
upper.value
|
|
541
|
+
]) if (element) resizeObserver.observe(element);
|
|
542
|
+
}
|
|
543
|
+
function onResize(entries) {
|
|
544
|
+
for (const entry of entries) {
|
|
545
|
+
const size = getObservedSize(entry);
|
|
546
|
+
if (entry.target === root.value) rootSize.value = size;
|
|
547
|
+
else if (entry.target === lower.value) lowerSize.value = size;
|
|
548
|
+
else if (entry.target === upper.value) upperSize.value = size;
|
|
549
|
+
}
|
|
550
|
+
updateCollision();
|
|
551
|
+
}
|
|
552
|
+
function onWindowResize() {
|
|
553
|
+
scheduleMeasure();
|
|
554
|
+
}
|
|
555
|
+
onMounted(() => {
|
|
556
|
+
const view = root.value?.ownerDocument.defaultView;
|
|
557
|
+
if (view?.ResizeObserver) resizeObserver = new view.ResizeObserver(onResize);
|
|
558
|
+
view?.addEventListener("resize", onWindowResize);
|
|
559
|
+
refreshObservedElements();
|
|
560
|
+
if (!resizeObserver) scheduleMeasure();
|
|
561
|
+
});
|
|
562
|
+
watch([
|
|
563
|
+
root,
|
|
564
|
+
lower,
|
|
565
|
+
upper
|
|
566
|
+
], () => {
|
|
567
|
+
refreshObservedElements();
|
|
568
|
+
if (!resizeObserver) scheduleMeasure();
|
|
569
|
+
}, { flush: "post" });
|
|
570
|
+
watch([
|
|
571
|
+
valuePercent,
|
|
572
|
+
orientation,
|
|
573
|
+
placement,
|
|
574
|
+
enabled
|
|
575
|
+
], updateCollision, { flush: "sync" });
|
|
576
|
+
watch(sizeDependencies, () => {
|
|
577
|
+
if (!resizeObserver) scheduleMeasure();
|
|
578
|
+
}, { flush: "post" });
|
|
579
|
+
const arrowAlongTrackAxis = computed(() => orientation.value === "horizontal" ? placement.value === "top" || placement.value === "bottom" : placement.value === "left" || placement.value === "right");
|
|
580
|
+
const trackAxisLength = computed(() => orientation.value === "horizontal" ? rootSize.value.width : rootSize.value.height);
|
|
581
|
+
const thumbDistance = computed(() => {
|
|
582
|
+
const [lowerPercent, upperPercent] = valuePercent.value;
|
|
583
|
+
return Math.abs(upperPercent - lowerPercent) / 100 * trackAxisLength.value;
|
|
584
|
+
});
|
|
585
|
+
const mergedArrowOffset = computed(() => {
|
|
586
|
+
if (trackAxisLength.value <= 0 || !arrowAlongTrackAxis.value) return 0;
|
|
587
|
+
return thumbDistance.value * .5;
|
|
588
|
+
});
|
|
589
|
+
const mergedMinSize = computed(() => {
|
|
590
|
+
if (!tooltipsOverlapping.value || trackAxisLength.value <= 0 || !arrowAlongTrackAxis.value) return 0;
|
|
591
|
+
const maxEndpoint = Math.max(getAxisSize(lowerSize.value, orientation.value), getAxisSize(upperSize.value, orientation.value));
|
|
592
|
+
return thumbDistance.value + maxEndpoint;
|
|
593
|
+
});
|
|
594
|
+
onBeforeUnmount(() => {
|
|
595
|
+
destroyed = true;
|
|
596
|
+
(root.value?.ownerDocument.defaultView)?.removeEventListener("resize", onWindowResize);
|
|
597
|
+
resizeObserver?.disconnect();
|
|
598
|
+
if (frameId != null) frameWindow?.cancelAnimationFrame(frameId);
|
|
599
|
+
});
|
|
600
|
+
return {
|
|
601
|
+
tooltipsOverlapping,
|
|
602
|
+
mergedArrowOffset,
|
|
603
|
+
mergedMinSize
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
//#endregion
|
|
607
|
+
//#region src/components/slider/range-slider-tooltip.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
608
|
+
var t0$1 = template("<span data-v-d17966e5 class=rp-range-slider__tooltip-merged-value> </span>");
|
|
609
|
+
var t1$1 = template("<span data-v-d17966e5 class=rp-range-slider__tooltip-merged-value> ");
|
|
610
|
+
var t2$1 = template("<span data-v-d17966e5 class=rp-range-slider__tooltip-merged-separator>–</span>", 2);
|
|
611
|
+
var t3$1 = template(" ");
|
|
612
|
+
var t4$1 = template("<span data-v-d17966e5 aria-hidden=true><span data-v-d17966e5><span data-v-d17966e5 class=rp-range-slider__tooltip-anchor></span><span data-v-d17966e5 class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-d17966e5><span data-v-d17966e5 class=rp-range-slider__tooltip-anchor></span><span data-v-d17966e5 class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-d17966e5><span data-v-d17966e5 class=rp-range-slider__tooltip-anchor></span><span data-v-d17966e5 class=rp-tooltip__content aria-hidden=true>", 1);
|
|
613
|
+
//#endregion
|
|
614
|
+
//#region src/components/slider/range-slider-tooltip.vue
|
|
615
|
+
var range_slider_tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
616
|
+
name: "RpRangeSliderTooltip",
|
|
617
|
+
__name: "range-slider-tooltip",
|
|
618
|
+
props: {
|
|
619
|
+
arrow: {
|
|
620
|
+
type: Boolean,
|
|
621
|
+
default: false
|
|
622
|
+
},
|
|
623
|
+
color: { default: void 0 },
|
|
624
|
+
content: {},
|
|
625
|
+
ids: {},
|
|
626
|
+
mergedContent: {},
|
|
627
|
+
mergedId: { default: void 0 },
|
|
628
|
+
offset: { default: void 0 },
|
|
629
|
+
open: { type: Boolean },
|
|
630
|
+
orientation: {},
|
|
631
|
+
placement: {},
|
|
632
|
+
valuePercent: {}
|
|
633
|
+
},
|
|
634
|
+
emits: ["update:overlapping"],
|
|
635
|
+
setup(__props, { emit: __emit }) {
|
|
636
|
+
const props = __props;
|
|
637
|
+
const emit = __emit;
|
|
638
|
+
const generatedId = useId();
|
|
639
|
+
const tooltipLayerRef = ref(null);
|
|
640
|
+
const lowerContentRef = ref(null);
|
|
641
|
+
const upperContentRef = ref(null);
|
|
642
|
+
const resolvedIds = computed(() => [props.ids[0] ?? `${generatedId}-lower-tooltip`, props.ids[1] ?? `${generatedId}-upper-tooltip`]);
|
|
643
|
+
const resolvedMergedId = computed(() => props.mergedId ?? `${generatedId}-merged-tooltip`);
|
|
644
|
+
const tooltipRootClass = computed(() => bem("rp-tooltip", {
|
|
645
|
+
[`placement-${props.placement}`]: true,
|
|
646
|
+
arrow: props.arrow,
|
|
647
|
+
open: props.open
|
|
648
|
+
}));
|
|
649
|
+
const contentStyle = computed(() => ({
|
|
650
|
+
...resolveTooltipOffsetStyle(props.offset),
|
|
651
|
+
...resolveTooltipColorStyleWithContrast(props.color, void 0)
|
|
652
|
+
}));
|
|
653
|
+
const { tooltipsOverlapping, mergedArrowOffset, mergedMinSize } = useRangeSliderTooltipCollision({
|
|
654
|
+
enabled: toRef(props, "open"),
|
|
655
|
+
lower: lowerContentRef,
|
|
656
|
+
orientation: toRef(props, "orientation"),
|
|
657
|
+
placement: toRef(props, "placement"),
|
|
658
|
+
root: tooltipLayerRef,
|
|
659
|
+
sizeDependencies: [() => props.content],
|
|
660
|
+
upper: upperContentRef,
|
|
661
|
+
valuePercent: toRef(props, "valuePercent")
|
|
662
|
+
});
|
|
663
|
+
const layerStyle = computed(() => ({
|
|
664
|
+
"--_rp-range-slider-tooltip-merged-arrow-offset": `${mergedArrowOffset.value}px`,
|
|
665
|
+
"--_rp-range-slider-tooltip-merged-min-size": `${mergedMinSize.value}px`
|
|
666
|
+
}));
|
|
667
|
+
watch(tooltipsOverlapping, (overlapping) => {
|
|
668
|
+
emit("update:overlapping", overlapping);
|
|
669
|
+
}, { immediate: true });
|
|
670
|
+
onBeforeUnmount(() => {
|
|
671
|
+
emit("update:overlapping", false);
|
|
672
|
+
});
|
|
673
|
+
const _setTemplateRef = createTemplateRefSetter();
|
|
674
|
+
const n16 = t4$1();
|
|
675
|
+
const n1 = child(n16);
|
|
676
|
+
const n0 = next(child(n1), 1);
|
|
677
|
+
const n3 = next(n1, 1);
|
|
678
|
+
const n2 = next(child(n3), 1);
|
|
679
|
+
const n15 = next(n3, 2);
|
|
680
|
+
const n14 = next(child(n15), 1);
|
|
681
|
+
const x0 = txt(n0);
|
|
682
|
+
applyVShow(n0, () => __props.open);
|
|
683
|
+
_setTemplateRef(n0, lowerContentRef, null, "lowerContentRef");
|
|
684
|
+
const x2 = txt(n2);
|
|
685
|
+
applyVShow(n2, () => __props.open);
|
|
686
|
+
_setTemplateRef(n2, upperContentRef, null, "upperContentRef");
|
|
687
|
+
renderEffect(() => {
|
|
688
|
+
const _tooltipRootClass = tooltipRootClass.value;
|
|
689
|
+
const _resolvedIds = resolvedIds.value;
|
|
690
|
+
const _contentStyle = contentStyle.value;
|
|
691
|
+
const _content = __props.content;
|
|
692
|
+
setClass(n16, [
|
|
693
|
+
"rp-range-slider__tooltips",
|
|
694
|
+
`rp-range-slider__tooltips--placement-${__props.placement}`,
|
|
695
|
+
{
|
|
696
|
+
"rp-range-slider__tooltips--overlapping": unref(tooltipsOverlapping),
|
|
697
|
+
"rp-range-slider__tooltips--vertical": __props.orientation === "vertical"
|
|
698
|
+
}
|
|
699
|
+
]);
|
|
700
|
+
setStyle(n16, layerStyle.value);
|
|
701
|
+
setClass(n1, [
|
|
702
|
+
_tooltipRootClass,
|
|
703
|
+
"rp-range-slider__tooltip",
|
|
704
|
+
"rp-range-slider__tooltip--lower"
|
|
705
|
+
]);
|
|
706
|
+
setProp(n0, "id", _resolvedIds[0]);
|
|
707
|
+
setStyle(n0, _contentStyle);
|
|
708
|
+
setText(x0, toDisplayString(_content[0]));
|
|
709
|
+
setClass(n3, [
|
|
710
|
+
_tooltipRootClass,
|
|
711
|
+
"rp-range-slider__tooltip",
|
|
712
|
+
"rp-range-slider__tooltip--upper"
|
|
713
|
+
]);
|
|
714
|
+
setProp(n2, "id", _resolvedIds[1]);
|
|
715
|
+
setStyle(n2, _contentStyle);
|
|
716
|
+
setText(x2, toDisplayString(_content[1]));
|
|
717
|
+
setClass(n15, [
|
|
718
|
+
_tooltipRootClass,
|
|
719
|
+
"rp-range-slider__tooltip",
|
|
720
|
+
"rp-range-slider__tooltip--merged"
|
|
721
|
+
]);
|
|
722
|
+
setProp(n14, "id", resolvedMergedId.value);
|
|
723
|
+
setStyle(n14, _contentStyle);
|
|
724
|
+
});
|
|
725
|
+
setInsertionState(n14, null, 0);
|
|
726
|
+
createIf(() => __props.orientation === "vertical" && __props.content[0] !== __props.content[1], () => {
|
|
727
|
+
const n6 = t0$1();
|
|
728
|
+
const n7 = t1$1();
|
|
729
|
+
const x6 = txt(n6);
|
|
730
|
+
const x7 = txt(n7);
|
|
731
|
+
renderEffect(() => {
|
|
732
|
+
const _content = __props.content;
|
|
733
|
+
setText(x6, toDisplayString(_content[1]));
|
|
734
|
+
setText(x7, toDisplayString(_content[0]));
|
|
735
|
+
});
|
|
736
|
+
return [n6, n7];
|
|
737
|
+
}, () => createIf(() => __props.content[0] !== __props.content[1], () => {
|
|
738
|
+
const n9 = t0$1();
|
|
739
|
+
const n10 = t2$1();
|
|
740
|
+
const n11 = t1$1();
|
|
741
|
+
const x9 = txt(n9);
|
|
742
|
+
const x11 = txt(n11);
|
|
743
|
+
renderEffect(() => {
|
|
744
|
+
const _content = __props.content;
|
|
745
|
+
setText(x9, toDisplayString(_content[0]));
|
|
746
|
+
setText(x11, toDisplayString(_content[1]));
|
|
747
|
+
});
|
|
748
|
+
return [
|
|
749
|
+
n9,
|
|
750
|
+
n10,
|
|
751
|
+
n11
|
|
752
|
+
];
|
|
753
|
+
}, () => {
|
|
754
|
+
const n13 = t3$1();
|
|
755
|
+
renderEffect(() => setText(n13, toDisplayString(__props.mergedContent)));
|
|
756
|
+
return n13;
|
|
757
|
+
}, 518), 262);
|
|
758
|
+
applyVShow(n14, () => __props.open);
|
|
759
|
+
_setTemplateRef(n16, tooltipLayerRef, null, "tooltipLayerRef");
|
|
760
|
+
return n16;
|
|
761
|
+
}
|
|
762
|
+
}), [["__scopeId", "data-v-d17966e5"]]);
|
|
763
|
+
//#endregion
|
|
764
|
+
//#region src/components/slider/useRangeSliderPointer.ts
|
|
765
|
+
function useRangeSliderPointer(options) {
|
|
766
|
+
let session;
|
|
767
|
+
let frameWindow = null;
|
|
768
|
+
let frameId;
|
|
769
|
+
let pendingPointerEvent;
|
|
770
|
+
let geometryDirty = false;
|
|
771
|
+
function cancelScheduledFrame() {
|
|
772
|
+
if (frameId !== void 0) frameWindow?.cancelAnimationFrame(frameId);
|
|
773
|
+
frameWindow = null;
|
|
774
|
+
frameId = void 0;
|
|
775
|
+
}
|
|
776
|
+
function refreshGeometry() {
|
|
777
|
+
const currentSession = session;
|
|
778
|
+
if (!currentSession) return false;
|
|
779
|
+
if (!geometryDirty) return true;
|
|
780
|
+
const geometry = options.getPointerGeometry(currentSession.track);
|
|
781
|
+
if (geometry === void 0) return false;
|
|
782
|
+
geometryDirty = false;
|
|
783
|
+
currentSession.geometry = geometry;
|
|
784
|
+
return true;
|
|
785
|
+
}
|
|
786
|
+
function applyScheduledUpdate() {
|
|
787
|
+
if (!refreshGeometry()) return;
|
|
788
|
+
const event = pendingPointerEvent;
|
|
789
|
+
pendingPointerEvent = void 0;
|
|
790
|
+
if (event && isCurrentPointer(event)) updateFromPointer(event);
|
|
791
|
+
}
|
|
792
|
+
function flushScheduledUpdate() {
|
|
793
|
+
cancelScheduledFrame();
|
|
794
|
+
applyScheduledUpdate();
|
|
795
|
+
}
|
|
796
|
+
function onAnimationFrame() {
|
|
797
|
+
frameWindow = null;
|
|
798
|
+
frameId = void 0;
|
|
799
|
+
applyScheduledUpdate();
|
|
800
|
+
}
|
|
801
|
+
function scheduleUpdate() {
|
|
802
|
+
const view = session?.view;
|
|
803
|
+
if (!view?.requestAnimationFrame) {
|
|
804
|
+
flushScheduledUpdate();
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
if (frameId !== void 0) return;
|
|
808
|
+
frameWindow = view;
|
|
809
|
+
frameId = view.requestAnimationFrame(onAnimationFrame);
|
|
810
|
+
}
|
|
811
|
+
function onGeometryChange() {
|
|
812
|
+
if (!session) return;
|
|
813
|
+
geometryDirty = true;
|
|
814
|
+
scheduleUpdate();
|
|
815
|
+
}
|
|
816
|
+
function stopDragging() {
|
|
817
|
+
const stoppedSession = session;
|
|
818
|
+
if (!stoppedSession) return;
|
|
819
|
+
stoppedSession.view?.removeEventListener("pointermove", onPointerMove);
|
|
820
|
+
stoppedSession.view?.removeEventListener("pointerup", onPointerEnd);
|
|
821
|
+
stoppedSession.view?.removeEventListener("pointercancel", onPointerEnd);
|
|
822
|
+
stoppedSession.view?.removeEventListener("resize", onGeometryChange);
|
|
823
|
+
stoppedSession.view?.removeEventListener("scroll", onGeometryChange, true);
|
|
824
|
+
cancelScheduledFrame();
|
|
825
|
+
pendingPointerEvent = void 0;
|
|
826
|
+
geometryDirty = false;
|
|
827
|
+
session = void 0;
|
|
828
|
+
options.endDrag(stoppedSession.thumb);
|
|
829
|
+
}
|
|
830
|
+
function switchDraggingThumb(nextThumb) {
|
|
831
|
+
const currentSession = session;
|
|
832
|
+
if (!currentSession || currentSession.thumb === nextThumb) return;
|
|
833
|
+
const previousThumb = currentSession.thumb;
|
|
834
|
+
currentSession.thumb = nextThumb;
|
|
835
|
+
options.transferDrag(previousThumb, nextThumb);
|
|
836
|
+
options.setActiveThumb(nextThumb);
|
|
837
|
+
options.transferFocusedThumb(currentSession.track, previousThumb, nextThumb);
|
|
838
|
+
}
|
|
839
|
+
function updateFromPointer(event) {
|
|
840
|
+
const currentSession = session;
|
|
841
|
+
if (!currentSession) return;
|
|
842
|
+
const value = options.getPointerValue(event, currentSession.geometry);
|
|
843
|
+
if (value == null) return;
|
|
844
|
+
switchDraggingThumb(options.updateThumb(currentSession.thumb, value, currentSession.anchorValue));
|
|
845
|
+
}
|
|
846
|
+
function isCurrentPointer(event) {
|
|
847
|
+
return session?.pointerId === void 0 || event.pointerId === session.pointerId;
|
|
848
|
+
}
|
|
849
|
+
function onPointerMove(event) {
|
|
850
|
+
if (!isCurrentPointer(event)) return;
|
|
851
|
+
if (!session) return;
|
|
852
|
+
pendingPointerEvent = event;
|
|
853
|
+
scheduleUpdate();
|
|
854
|
+
}
|
|
855
|
+
function onPointerEnd(event) {
|
|
856
|
+
if (!isCurrentPointer(event)) return;
|
|
857
|
+
if (event.type === "pointerup") flushScheduledUpdate();
|
|
858
|
+
stopDragging();
|
|
859
|
+
}
|
|
860
|
+
function onTrackPointerDown(event) {
|
|
861
|
+
if (options.disabled() || event.button !== 0 || event.isPrimary === false) return;
|
|
862
|
+
const track = event.currentTarget;
|
|
863
|
+
if (!track) return;
|
|
864
|
+
const geometry = options.getPointerGeometry(track);
|
|
865
|
+
if (geometry === void 0) return;
|
|
866
|
+
const pointerValue = options.getPointerValue(event, geometry);
|
|
867
|
+
if (pointerValue == null) return;
|
|
868
|
+
const thumb = options.getThumb(event, pointerValue);
|
|
869
|
+
event.preventDefault();
|
|
870
|
+
stopDragging();
|
|
871
|
+
options.setActiveThumb(thumb);
|
|
872
|
+
options.focusThumb(track, thumb);
|
|
873
|
+
session = {
|
|
874
|
+
view: track.ownerDocument.defaultView,
|
|
875
|
+
track,
|
|
876
|
+
geometry,
|
|
877
|
+
thumb,
|
|
878
|
+
anchorValue: options.getAnchorValue(thumb),
|
|
879
|
+
pointerId: Number.isFinite(event.pointerId) ? event.pointerId : void 0
|
|
880
|
+
};
|
|
881
|
+
options.startDrag(thumb);
|
|
882
|
+
switchDraggingThumb(options.updateThumb(thumb, pointerValue, session.anchorValue));
|
|
883
|
+
const view = session?.view;
|
|
884
|
+
view?.addEventListener("pointermove", onPointerMove);
|
|
885
|
+
view?.addEventListener("pointerup", onPointerEnd);
|
|
886
|
+
view?.addEventListener("pointercancel", onPointerEnd);
|
|
887
|
+
view?.addEventListener("resize", onGeometryChange);
|
|
888
|
+
view?.addEventListener("scroll", onGeometryChange, true);
|
|
889
|
+
}
|
|
890
|
+
onBeforeUnmount(stopDragging);
|
|
891
|
+
return { onTrackPointerDown };
|
|
892
|
+
}
|
|
893
|
+
//#endregion
|
|
894
|
+
//#region src/components/slider/useRangeSliderTooltipState.ts
|
|
895
|
+
function useRangeSliderTooltipState(options) {
|
|
896
|
+
const delayedTooltip = useDelayedOpen({
|
|
897
|
+
openDelay: () => options.openDelay.value,
|
|
898
|
+
disabled: () => options.mode.value !== "hover" || options.disabled()
|
|
899
|
+
});
|
|
900
|
+
const interactionReasons = ref({
|
|
901
|
+
lower: {
|
|
902
|
+
focus: false,
|
|
903
|
+
drag: false
|
|
904
|
+
},
|
|
905
|
+
upper: {
|
|
906
|
+
focus: false,
|
|
907
|
+
drag: false
|
|
908
|
+
}
|
|
909
|
+
});
|
|
910
|
+
const trackHovered = ref(false);
|
|
911
|
+
const dismissed = ref(false);
|
|
912
|
+
function hasThumbInteraction(thumb) {
|
|
913
|
+
const reasons = interactionReasons.value[thumb];
|
|
914
|
+
return reasons.focus || reasons.drag;
|
|
915
|
+
}
|
|
916
|
+
function hasAnyInteraction() {
|
|
917
|
+
return trackHovered.value || hasThumbInteraction("lower") || hasThumbInteraction("upper");
|
|
918
|
+
}
|
|
919
|
+
function sync() {
|
|
920
|
+
if (options.mode.value === "hover" && !options.disabled() && hasAnyInteraction() && !dismissed.value) {
|
|
921
|
+
delayedTooltip.open();
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
delayedTooltip.closeImmediate();
|
|
925
|
+
}
|
|
926
|
+
function startInteraction(thumb, reason) {
|
|
927
|
+
options.setActiveThumb(thumb);
|
|
928
|
+
const wasActive = hasAnyInteraction();
|
|
929
|
+
const wasDismissed = dismissed.value;
|
|
930
|
+
interactionReasons.value[thumb][reason] = true;
|
|
931
|
+
dismissed.value = false;
|
|
932
|
+
if (!wasActive || wasDismissed) sync();
|
|
933
|
+
}
|
|
934
|
+
function endInteraction(thumb, reason) {
|
|
935
|
+
interactionReasons.value[thumb][reason] = false;
|
|
936
|
+
if (!hasAnyInteraction()) sync();
|
|
937
|
+
}
|
|
938
|
+
function transferInteraction(from, to, reason) {
|
|
939
|
+
if (!interactionReasons.value[from][reason]) return;
|
|
940
|
+
interactionReasons.value[from][reason] = false;
|
|
941
|
+
interactionReasons.value[to][reason] = true;
|
|
942
|
+
}
|
|
943
|
+
function onFocus(thumb) {
|
|
944
|
+
startInteraction(thumb, "focus");
|
|
945
|
+
}
|
|
946
|
+
function onBlur(thumb) {
|
|
947
|
+
endInteraction(thumb, "focus");
|
|
948
|
+
}
|
|
949
|
+
function onTrackMouseEnter() {
|
|
950
|
+
const wasActive = hasAnyInteraction();
|
|
951
|
+
const wasDismissed = dismissed.value;
|
|
952
|
+
trackHovered.value = true;
|
|
953
|
+
dismissed.value = false;
|
|
954
|
+
if (!wasActive || wasDismissed) sync();
|
|
955
|
+
}
|
|
956
|
+
function onTrackMouseLeave() {
|
|
957
|
+
trackHovered.value = false;
|
|
958
|
+
if (!hasAnyInteraction()) sync();
|
|
959
|
+
}
|
|
960
|
+
function onKeydown(thumb, event) {
|
|
961
|
+
options.setActiveThumb(thumb);
|
|
962
|
+
if (event.key === "Escape") {
|
|
963
|
+
dismissed.value = true;
|
|
964
|
+
delayedTooltip.closeImmediate();
|
|
965
|
+
return true;
|
|
966
|
+
}
|
|
967
|
+
if (dismissed.value) {
|
|
968
|
+
dismissed.value = false;
|
|
969
|
+
sync();
|
|
970
|
+
}
|
|
971
|
+
return false;
|
|
972
|
+
}
|
|
973
|
+
const visible = computed(() => options.mode.value !== false);
|
|
974
|
+
const alwaysVisible = computed(() => options.mode.value === "always");
|
|
975
|
+
const open = computed(() => alwaysVisible.value || options.mode.value === "hover" && delayedTooltip.isOpen.value && hasAnyInteraction() && !dismissed.value && !options.disabled());
|
|
976
|
+
watch([options.mode, options.disabled], sync);
|
|
977
|
+
return {
|
|
978
|
+
visible,
|
|
979
|
+
alwaysVisible,
|
|
980
|
+
open,
|
|
981
|
+
startInteraction,
|
|
982
|
+
endInteraction,
|
|
983
|
+
transferInteraction,
|
|
984
|
+
onFocus,
|
|
985
|
+
onBlur,
|
|
986
|
+
onTrackMouseEnter,
|
|
987
|
+
onTrackMouseLeave,
|
|
988
|
+
onKeydown
|
|
989
|
+
};
|
|
990
|
+
}
|
|
385
991
|
//#endregion
|
|
386
992
|
//#region src/components/slider/useRangeSlider.ts
|
|
387
|
-
var rangeSliderMarkColorProperties = [
|
|
388
|
-
"--_rp-range-slider-mark-color",
|
|
389
|
-
"--_rp-range-slider-mark-label-color",
|
|
390
|
-
"--_rp-range-slider-mark-filled-label-color",
|
|
391
|
-
"--_rp-range-slider-mark-ring-color"
|
|
392
|
-
];
|
|
393
993
|
function roundSliderNumber(value) {
|
|
394
994
|
return Number(value.toFixed(10));
|
|
395
995
|
}
|
|
@@ -438,36 +1038,6 @@ function getClosestRangeSliderThumb(value, range, activeThumb) {
|
|
|
438
1038
|
if (upperDistance < lowerDistance) return "upper";
|
|
439
1039
|
return activeThumb ?? "upper";
|
|
440
1040
|
}
|
|
441
|
-
function setRangeSliderStyleValue(style, property, value) {
|
|
442
|
-
if (value) style[property] = value;
|
|
443
|
-
}
|
|
444
|
-
function getRangeSliderLengthValue(value) {
|
|
445
|
-
if (value == null || value === "") return void 0;
|
|
446
|
-
if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
|
|
447
|
-
return value;
|
|
448
|
-
}
|
|
449
|
-
function getRangeSliderBorderValue(value) {
|
|
450
|
-
if (value == null || value === "") return void 0;
|
|
451
|
-
if (typeof value === "number") return Number.isFinite(value) ? `${value}px solid var(--_rp-range-slider-thumb-border)` : void 0;
|
|
452
|
-
return value;
|
|
453
|
-
}
|
|
454
|
-
var rangeSliderThumbStyleProps = [
|
|
455
|
-
[
|
|
456
|
-
"--_rp-range-slider-thumb-size",
|
|
457
|
-
"size",
|
|
458
|
-
getRangeSliderLengthValue
|
|
459
|
-
],
|
|
460
|
-
[
|
|
461
|
-
"--_rp-range-slider-thumb-border-style",
|
|
462
|
-
"border",
|
|
463
|
-
getRangeSliderBorderValue
|
|
464
|
-
],
|
|
465
|
-
[
|
|
466
|
-
"--_rp-range-slider-thumb-padding",
|
|
467
|
-
"padding",
|
|
468
|
-
getRangeSliderLengthValue
|
|
469
|
-
]
|
|
470
|
-
];
|
|
471
1041
|
function getRangeSliderTrackStyle(props, valuePercent) {
|
|
472
1042
|
const [lowerPercent, upperPercent] = valuePercent;
|
|
473
1043
|
const style = {
|
|
@@ -477,55 +1047,21 @@ function getRangeSliderTrackStyle(props, valuePercent) {
|
|
|
477
1047
|
"--_rp-range-slider-upper-ratio": `${upperPercent / 100}`,
|
|
478
1048
|
"--_rp-range-slider-tooltip-merged-percent": `${(lowerPercent + upperPercent) / 2}%`
|
|
479
1049
|
};
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
const colorValue = getComponentColorValue(color);
|
|
487
|
-
for (const property of rangeSliderMarkColorProperties) setRangeSliderStyleValue(style, property, colorValue);
|
|
488
|
-
return style;
|
|
489
|
-
}
|
|
490
|
-
function normalizeRangeSliderMark(mark) {
|
|
491
|
-
return typeof mark === "number" ? { value: mark } : mark;
|
|
492
|
-
}
|
|
493
|
-
function normalizeRangeSliderMarks(marks, min, max, value) {
|
|
494
|
-
return (marks ?? []).flatMap((markInput, index) => {
|
|
495
|
-
const mark = normalizeRangeSliderMark(markInput);
|
|
496
|
-
if (mark.hidden) return [];
|
|
497
|
-
const markValue = Number(mark.value);
|
|
498
|
-
if (!Number.isFinite(markValue)) return [];
|
|
499
|
-
const percent = getSliderValuePercent(markValue, min, max);
|
|
500
|
-
return {
|
|
501
|
-
key: `${markValue}-${index}`,
|
|
502
|
-
value: markValue,
|
|
503
|
-
label: mark.label,
|
|
504
|
-
hasLabel: mark.label != null,
|
|
505
|
-
filled: markValue >= value[0] && markValue <= value[1],
|
|
506
|
-
style: getRangeSliderMarkStyle(percent, mark.color)
|
|
507
|
-
};
|
|
1050
|
+
setSliderStyleValue(style, "--_rp-range-slider-color", getComponentColorValue(props.color));
|
|
1051
|
+
applySliderThumbStyle(style, props.thumbStyle, {
|
|
1052
|
+
size: "--_rp-range-slider-thumb-size",
|
|
1053
|
+
border: "--_rp-range-slider-thumb-border-style",
|
|
1054
|
+
padding: "--_rp-range-slider-thumb-padding",
|
|
1055
|
+
borderColor: "--_rp-range-slider-thumb-border"
|
|
508
1056
|
});
|
|
1057
|
+
return style;
|
|
509
1058
|
}
|
|
510
1059
|
function getFormattedRangeSliderValue(value, formatter) {
|
|
511
|
-
return
|
|
512
|
-
}
|
|
513
|
-
function getRangeSliderEndpointValueText(value, ariaValueText, formatter) {
|
|
514
|
-
if (typeof ariaValueText === "function") return String(ariaValueText(value));
|
|
515
|
-
if (ariaValueText != null && ariaValueText !== "") return String(ariaValueText);
|
|
516
|
-
if (formatter) return String(formatter(value));
|
|
1060
|
+
return [getFormattedSliderValue(value[0], formatter), getFormattedSliderValue(value[1], formatter)];
|
|
517
1061
|
}
|
|
518
1062
|
function getRangeSliderAriaValueText(value, ariaValueText, formatter) {
|
|
519
1063
|
const endpointValues = Array.isArray(ariaValueText) ? ariaValueText : [ariaValueText, ariaValueText];
|
|
520
|
-
return [
|
|
521
|
-
}
|
|
522
|
-
function getRangeSliderTooltipOptions(tooltip) {
|
|
523
|
-
return typeof tooltip === "object" ? tooltip : {};
|
|
524
|
-
}
|
|
525
|
-
function getRangeSliderTooltipMode(tooltip) {
|
|
526
|
-
if (tooltip === false) return false;
|
|
527
|
-
if (typeof tooltip === "object") return tooltip.mode ?? "hover";
|
|
528
|
-
return tooltip;
|
|
1064
|
+
return [getSliderAriaValueText(value[0], endpointValues[0], formatter), getSliderAriaValueText(value[1], endpointValues[1], formatter)];
|
|
529
1065
|
}
|
|
530
1066
|
function getThumbIndex(thumb) {
|
|
531
1067
|
return thumb === "lower" ? 0 : 1;
|
|
@@ -570,31 +1106,31 @@ function useRangeSlider(props, emitUpdate) {
|
|
|
570
1106
|
if (normalizedMinRange.value === 0) return [bounds.value.max, bounds.value.max];
|
|
571
1107
|
return [clamp(getStepValueAtOrBelow(normalizedValue.value[1] - normalizedMinRange.value, bounds.value.min, valueStep.value), bounds.value.min, bounds.value.max), bounds.value.max];
|
|
572
1108
|
});
|
|
573
|
-
const markItems = computed(() =>
|
|
1109
|
+
const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (value) => value >= normalizedValue.value[0] && value <= normalizedValue.value[1], {
|
|
1110
|
+
position: "--_rp-range-slider-mark-position",
|
|
1111
|
+
colors: [
|
|
1112
|
+
"--_rp-range-slider-mark-color",
|
|
1113
|
+
"--_rp-range-slider-mark-label-color",
|
|
1114
|
+
"--_rp-range-slider-mark-filled-label-color",
|
|
1115
|
+
"--_rp-range-slider-mark-ring-color"
|
|
1116
|
+
]
|
|
1117
|
+
}));
|
|
574
1118
|
const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));
|
|
575
1119
|
const trackStyle = computed(() => getRangeSliderTrackStyle(props, valuePercent.value));
|
|
576
|
-
const tooltipOptions = computed(() =>
|
|
577
|
-
const tooltipMode = computed(() =>
|
|
1120
|
+
const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));
|
|
1121
|
+
const tooltipMode = computed(() => getSliderTooltipMode(props.tooltip));
|
|
578
1122
|
const tooltipOpenDelay = computed(() => tooltipOptions.value.openDelay ?? 0);
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
focus: false,
|
|
586
|
-
drag: false
|
|
587
|
-
},
|
|
588
|
-
upper: {
|
|
589
|
-
focus: false,
|
|
590
|
-
drag: false
|
|
1123
|
+
const tooltipState = useRangeSliderTooltipState({
|
|
1124
|
+
mode: tooltipMode,
|
|
1125
|
+
openDelay: tooltipOpenDelay,
|
|
1126
|
+
disabled: () => control.disabled,
|
|
1127
|
+
setActiveThumb: (thumb) => {
|
|
1128
|
+
activeThumb.value = thumb;
|
|
591
1129
|
}
|
|
592
1130
|
});
|
|
593
|
-
const
|
|
594
|
-
const
|
|
595
|
-
const
|
|
596
|
-
const tooltipAlwaysVisible = computed(() => tooltipMode.value === "always");
|
|
597
|
-
const tooltipOpen = computed(() => tooltipAlwaysVisible.value || tooltipMode.value === "hover" && delayedTooltip.isOpen.value && hasAnyTooltipInteractionReason() && !tooltipDismissed.value && !control.disabled);
|
|
1131
|
+
const tooltipVisible = tooltipState.visible;
|
|
1132
|
+
const tooltipAlwaysVisible = tooltipState.alwaysVisible;
|
|
1133
|
+
const tooltipOpen = tooltipState.open;
|
|
598
1134
|
const tooltipPlacement = computed(() => tooltipOptions.value.placement ?? (props.orientation === "vertical" ? "left" : "top"));
|
|
599
1135
|
const tooltipIds = computed(() => {
|
|
600
1136
|
const baseId = tooltipOptions.value.id;
|
|
@@ -608,16 +1144,17 @@ function useRangeSlider(props, emitUpdate) {
|
|
|
608
1144
|
const tooltipOffset = computed(() => tooltipOptions.value.offset);
|
|
609
1145
|
const tooltipArrow = computed(() => tooltipOptions.value.arrow ?? false);
|
|
610
1146
|
const tooltipContent = computed(() => [String(formattedValue.value[0]), String(formattedValue.value[1])]);
|
|
611
|
-
const mergedTooltipContent = computed(() =>
|
|
1147
|
+
const mergedTooltipContent = computed(() => {
|
|
1148
|
+
const [lower, upper] = tooltipContent.value;
|
|
1149
|
+
return lower === upper ? lower : `${lower}–${upper}`;
|
|
1150
|
+
});
|
|
612
1151
|
const rootClass = computed(() => bem("rp-range-slider", {
|
|
613
1152
|
[`size-${props.size}`]: Boolean(props.size),
|
|
614
1153
|
vertical: props.orientation === "vertical",
|
|
615
1154
|
marked: markItems.value.length > 0,
|
|
616
1155
|
"marks-with-labels": hasMarkLabels.value,
|
|
617
1156
|
"tooltip-always-visible": tooltipAlwaysVisible.value,
|
|
618
|
-
disabled: control.disabled
|
|
619
|
-
invalid: control.invalid,
|
|
620
|
-
valid: control.valid && !control.invalid
|
|
1157
|
+
disabled: control.disabled
|
|
621
1158
|
}));
|
|
622
1159
|
function getThumbUpdate(thumb, value, anchorValue = normalizedValue.value[getThumbIndex(getOppositeThumb(thumb))]) {
|
|
623
1160
|
const safeValue = normalizeSliderValue(value, bounds.value.min, bounds.value.max, valueStep.value);
|
|
@@ -653,101 +1190,17 @@ function useRangeSlider(props, emitUpdate) {
|
|
|
653
1190
|
const input = event.target;
|
|
654
1191
|
transferFocusedThumb(input, thumb, updateThumb(thumb, input.valueAsNumber));
|
|
655
1192
|
}
|
|
656
|
-
function hasThumbTooltipInteractionReason(thumb) {
|
|
657
|
-
const reasons = tooltipInteractionReasons.value[thumb];
|
|
658
|
-
return reasons.focus || reasons.drag;
|
|
659
|
-
}
|
|
660
|
-
function hasAnyTooltipInteractionReason() {
|
|
661
|
-
return tooltipTrackHovered.value || hasThumbTooltipInteractionReason("lower") || hasThumbTooltipInteractionReason("upper");
|
|
662
|
-
}
|
|
663
|
-
function syncTooltip() {
|
|
664
|
-
if (tooltipMode.value === "hover" && !control.disabled && hasAnyTooltipInteractionReason() && !tooltipDismissed.value) {
|
|
665
|
-
delayedTooltip.open();
|
|
666
|
-
return;
|
|
667
|
-
}
|
|
668
|
-
delayedTooltip.closeImmediate();
|
|
669
|
-
}
|
|
670
|
-
function startTooltipInteraction(thumb, reason) {
|
|
671
|
-
activeThumb.value = thumb;
|
|
672
|
-
const wasActive = hasAnyTooltipInteractionReason();
|
|
673
|
-
const wasDismissed = tooltipDismissed.value;
|
|
674
|
-
tooltipInteractionReasons.value[thumb][reason] = true;
|
|
675
|
-
tooltipDismissed.value = false;
|
|
676
|
-
if (!wasActive || wasDismissed) syncTooltip();
|
|
677
|
-
}
|
|
678
|
-
function endTooltipInteraction(thumb, reason) {
|
|
679
|
-
tooltipInteractionReasons.value[thumb][reason] = false;
|
|
680
|
-
if (!hasAnyTooltipInteractionReason()) syncTooltip();
|
|
681
|
-
}
|
|
682
1193
|
function transferFocusedThumb(input, thumb, nextThumb) {
|
|
683
1194
|
if (thumb === nextThumb || input.ownerDocument.activeElement !== input) return;
|
|
684
1195
|
const track = input.closest(".rp-range-slider__track");
|
|
685
1196
|
if (!track) return;
|
|
686
1197
|
const nextInput = getThumbInput(track, nextThumb);
|
|
687
1198
|
if (!nextInput) return;
|
|
688
|
-
|
|
689
|
-
if (currentReasons.focus) {
|
|
690
|
-
currentReasons.focus = false;
|
|
691
|
-
tooltipInteractionReasons.value[nextThumb].focus = true;
|
|
692
|
-
}
|
|
1199
|
+
tooltipState.transferInteraction(thumb, nextThumb, "focus");
|
|
693
1200
|
nextInput.focus({ preventScroll: true });
|
|
694
1201
|
}
|
|
695
|
-
function resetTooltipInteractionReasons(thumb) {
|
|
696
|
-
const reasons = tooltipInteractionReasons.value[thumb];
|
|
697
|
-
reasons.focus = false;
|
|
698
|
-
reasons.drag = false;
|
|
699
|
-
}
|
|
700
|
-
function clearTooltipInteractions(thumb) {
|
|
701
|
-
resetTooltipInteractionReasons(thumb);
|
|
702
|
-
syncTooltip();
|
|
703
|
-
}
|
|
704
|
-
function resumeDismissedTooltip(thumb) {
|
|
705
|
-
activeThumb.value = thumb;
|
|
706
|
-
if (!tooltipDismissed.value) return;
|
|
707
|
-
tooltipDismissed.value = false;
|
|
708
|
-
syncTooltip();
|
|
709
|
-
}
|
|
710
|
-
function dismissTooltip() {
|
|
711
|
-
tooltipDismissed.value = true;
|
|
712
|
-
delayedTooltip.closeImmediate();
|
|
713
|
-
}
|
|
714
|
-
function onTooltipFocus(thumb) {
|
|
715
|
-
startTooltipInteraction(thumb, "focus");
|
|
716
|
-
}
|
|
717
|
-
function onTooltipBlur(thumb) {
|
|
718
|
-
endTooltipInteraction(thumb, "focus");
|
|
719
|
-
}
|
|
720
|
-
function onTooltipTrackMouseEnter() {
|
|
721
|
-
const wasActive = hasAnyTooltipInteractionReason();
|
|
722
|
-
const wasDismissed = tooltipDismissed.value;
|
|
723
|
-
tooltipTrackHovered.value = true;
|
|
724
|
-
tooltipDismissed.value = false;
|
|
725
|
-
if (!wasActive || wasDismissed) syncTooltip();
|
|
726
|
-
}
|
|
727
|
-
function onTooltipTrackMouseLeave() {
|
|
728
|
-
tooltipTrackHovered.value = false;
|
|
729
|
-
if (!hasAnyTooltipInteractionReason()) syncTooltip();
|
|
730
|
-
}
|
|
731
|
-
function openTooltip(thumb) {
|
|
732
|
-
startTooltipInteraction(thumb, "focus");
|
|
733
|
-
}
|
|
734
|
-
function closeTooltip(thumb) {
|
|
735
|
-
if (thumb) {
|
|
736
|
-
clearTooltipInteractions(thumb);
|
|
737
|
-
return;
|
|
738
|
-
}
|
|
739
|
-
resetTooltipInteractionReasons("lower");
|
|
740
|
-
resetTooltipInteractionReasons("upper");
|
|
741
|
-
tooltipTrackHovered.value = false;
|
|
742
|
-
syncTooltip();
|
|
743
|
-
}
|
|
744
1202
|
function onTooltipKeydown(thumb, event) {
|
|
745
|
-
|
|
746
|
-
if (event.key === "Escape") {
|
|
747
|
-
dismissTooltip();
|
|
748
|
-
return;
|
|
749
|
-
}
|
|
750
|
-
resumeDismissedTooltip(thumb);
|
|
1203
|
+
if (tooltipState.onKeydown(thumb, event)) return;
|
|
751
1204
|
if (!hasManualNativeKeyboard.value || valueStep.value === "any") return;
|
|
752
1205
|
const index = getThumbIndex(thumb);
|
|
753
1206
|
const currentValue = normalizedValue.value[index];
|
|
@@ -780,88 +1233,42 @@ function useRangeSlider(props, emitUpdate) {
|
|
|
780
1233
|
const nextThumb = updateThumb(thumb, nextValue);
|
|
781
1234
|
transferFocusedThumb(event.target, thumb, nextThumb);
|
|
782
1235
|
}
|
|
783
|
-
function
|
|
1236
|
+
function getPointerGeometry(track) {
|
|
784
1237
|
const vertical = props.orientation === "vertical";
|
|
785
|
-
const trackRect = track.getBoundingClientRect();
|
|
786
1238
|
const thumbsRect = track.querySelector(".rp-range-slider__thumbs")?.getBoundingClientRect();
|
|
787
|
-
const rect = thumbsRect && (vertical ? thumbsRect.height > 0 : thumbsRect.width > 0) ? thumbsRect :
|
|
1239
|
+
const rect = thumbsRect && (vertical ? thumbsRect.height > 0 : thumbsRect.width > 0) ? thumbsRect : track.getBoundingClientRect();
|
|
788
1240
|
const length = vertical ? rect.height : rect.width;
|
|
789
1241
|
if (length <= 0) return void 0;
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
let dragThumb = null;
|
|
796
|
-
let dragAnchorValue = null;
|
|
797
|
-
let dragPointerId;
|
|
798
|
-
function stopDragging() {
|
|
799
|
-
const stoppedThumb = dragThumb;
|
|
800
|
-
if (dragWindow) {
|
|
801
|
-
dragWindow.removeEventListener("pointermove", onPointerMove);
|
|
802
|
-
dragWindow.removeEventListener("pointerup", onPointerEnd);
|
|
803
|
-
dragWindow.removeEventListener("pointercancel", onPointerEnd);
|
|
804
|
-
}
|
|
805
|
-
dragWindow = null;
|
|
806
|
-
dragTrack = null;
|
|
807
|
-
dragThumb = null;
|
|
808
|
-
dragAnchorValue = null;
|
|
809
|
-
dragPointerId = void 0;
|
|
810
|
-
if (stoppedThumb) endTooltipInteraction(stoppedThumb, "drag");
|
|
811
|
-
}
|
|
812
|
-
function switchDraggingThumb(track, nextThumb) {
|
|
813
|
-
const previousThumb = dragThumb;
|
|
814
|
-
if (!previousThumb || previousThumb === nextThumb) return;
|
|
815
|
-
tooltipInteractionReasons.value[previousThumb].drag = false;
|
|
816
|
-
tooltipInteractionReasons.value[nextThumb].drag = true;
|
|
817
|
-
dragThumb = nextThumb;
|
|
818
|
-
activeThumb.value = nextThumb;
|
|
819
|
-
const previousInput = getThumbInput(track, previousThumb);
|
|
820
|
-
if (previousInput) transferFocusedThumb(previousInput, previousThumb, nextThumb);
|
|
821
|
-
}
|
|
822
|
-
function updateFromPointer(event, track) {
|
|
823
|
-
const value = getValueFromPointer(event, track);
|
|
824
|
-
if (value == null || !dragThumb) return;
|
|
825
|
-
switchDraggingThumb(track, updateThumb(dragThumb, value, dragAnchorValue ?? normalizedValue.value[getThumbIndex(getOppositeThumb(dragThumb))]));
|
|
826
|
-
}
|
|
827
|
-
function onPointerMove(event) {
|
|
828
|
-
if (dragPointerId !== void 0 && event.pointerId !== dragPointerId) return;
|
|
829
|
-
if (!dragTrack || !dragThumb) {
|
|
830
|
-
stopDragging();
|
|
831
|
-
return;
|
|
832
|
-
}
|
|
833
|
-
updateFromPointer(event, dragTrack);
|
|
834
|
-
}
|
|
835
|
-
function onPointerEnd(event) {
|
|
836
|
-
if (dragPointerId !== void 0 && event.pointerId !== dragPointerId) return;
|
|
837
|
-
stopDragging();
|
|
1242
|
+
return {
|
|
1243
|
+
length,
|
|
1244
|
+
start: vertical ? rect.bottom : rect.left,
|
|
1245
|
+
vertical
|
|
1246
|
+
};
|
|
838
1247
|
}
|
|
839
|
-
function
|
|
840
|
-
|
|
841
|
-
const
|
|
842
|
-
|
|
843
|
-
const pointerValue = getValueFromPointer(event, track);
|
|
844
|
-
if (pointerValue == null) return;
|
|
845
|
-
const thumb = getThumbFromTarget(event.target) ?? getClosestRangeSliderThumb(pointerValue, normalizedValue.value, activeThumb.value);
|
|
846
|
-
event.preventDefault();
|
|
847
|
-
stopDragging();
|
|
848
|
-
activeThumb.value = thumb;
|
|
849
|
-
focusThumb(track, thumb);
|
|
850
|
-
dragTrack = track;
|
|
851
|
-
dragThumb = thumb;
|
|
852
|
-
dragAnchorValue = normalizedValue.value[getThumbIndex(getOppositeThumb(thumb))];
|
|
853
|
-
dragPointerId = Number.isFinite(event.pointerId) ? event.pointerId : void 0;
|
|
854
|
-
dragWindow = track.ownerDocument.defaultView;
|
|
855
|
-
startTooltipInteraction(thumb, "drag");
|
|
856
|
-
updateFromPointer(event, track);
|
|
857
|
-
dragWindow?.addEventListener("pointermove", onPointerMove);
|
|
858
|
-
dragWindow?.addEventListener("pointerup", onPointerEnd);
|
|
859
|
-
dragWindow?.addEventListener("pointercancel", onPointerEnd);
|
|
1248
|
+
function getValueFromPointer(event, geometry) {
|
|
1249
|
+
const pointerPosition = geometry.vertical ? event.clientY : event.clientX;
|
|
1250
|
+
const ratio = clamp((geometry.vertical ? geometry.start - pointerPosition : pointerPosition - geometry.start) / geometry.length, 0, 1);
|
|
1251
|
+
return bounds.value.min + ratio * (bounds.value.max - bounds.value.min);
|
|
860
1252
|
}
|
|
861
|
-
|
|
862
|
-
|
|
1253
|
+
const { onTrackPointerDown } = useRangeSliderPointer({
|
|
1254
|
+
disabled: () => control.disabled,
|
|
1255
|
+
getPointerGeometry,
|
|
1256
|
+
getPointerValue: getValueFromPointer,
|
|
1257
|
+
getThumb: (event, value) => getThumbFromTarget(event.target) ?? getClosestRangeSliderThumb(value, normalizedValue.value, activeThumb.value),
|
|
1258
|
+
getAnchorValue: (thumb) => normalizedValue.value[getThumbIndex(getOppositeThumb(thumb))],
|
|
1259
|
+
setActiveThumb: (thumb) => {
|
|
1260
|
+
activeThumb.value = thumb;
|
|
1261
|
+
},
|
|
1262
|
+
focusThumb,
|
|
1263
|
+
updateThumb,
|
|
1264
|
+
transferFocusedThumb: (track, from, to) => {
|
|
1265
|
+
const input = getThumbInput(track, from);
|
|
1266
|
+
if (input) transferFocusedThumb(input, from, to);
|
|
1267
|
+
},
|
|
1268
|
+
startDrag: (thumb) => tooltipState.startInteraction(thumb, "drag"),
|
|
1269
|
+
endDrag: (thumb) => tooltipState.endInteraction(thumb, "drag"),
|
|
1270
|
+
transferDrag: (from, to) => tooltipState.transferInteraction(from, to, "drag")
|
|
863
1271
|
});
|
|
864
|
-
onBeforeUnmount(stopDragging);
|
|
865
1272
|
return {
|
|
866
1273
|
control,
|
|
867
1274
|
nativeMin,
|
|
@@ -891,321 +1298,24 @@ function useRangeSlider(props, emitUpdate) {
|
|
|
891
1298
|
mergedTooltipContent,
|
|
892
1299
|
onInput,
|
|
893
1300
|
onTrackPointerDown,
|
|
894
|
-
onTooltipFocus,
|
|
895
|
-
onTooltipBlur,
|
|
896
|
-
onTooltipTrackMouseEnter,
|
|
897
|
-
onTooltipTrackMouseLeave,
|
|
898
|
-
openTooltip,
|
|
899
|
-
closeTooltip,
|
|
1301
|
+
onTooltipFocus: tooltipState.onFocus,
|
|
1302
|
+
onTooltipBlur: tooltipState.onBlur,
|
|
1303
|
+
onTooltipTrackMouseEnter: tooltipState.onTrackMouseEnter,
|
|
1304
|
+
onTooltipTrackMouseLeave: tooltipState.onTrackMouseLeave,
|
|
900
1305
|
onTooltipKeydown
|
|
901
1306
|
};
|
|
902
1307
|
}
|
|
903
1308
|
//#endregion
|
|
904
|
-
//#region src/components/slider/useRangeSliderTooltipCollision.ts
|
|
905
|
-
var TOOLTIP_COLLISION_GAP = 4;
|
|
906
|
-
var TOOLTIP_COLLISION_RELEASE_GAP = 8;
|
|
907
|
-
var TOOLTIP_CONTENT_SELECTOR$1 = ".rp-tooltip__content";
|
|
908
|
-
function areRangeSliderTooltipRectsOverlapping(lower, upper, gap = TOOLTIP_COLLISION_GAP) {
|
|
909
|
-
if (lower.width <= 0 || lower.height <= 0 || upper.width <= 0 || upper.height <= 0) return false;
|
|
910
|
-
return lower.left < upper.right + gap && lower.right + gap > upper.left && lower.top < upper.bottom + gap && lower.bottom + gap > upper.top;
|
|
911
|
-
}
|
|
912
|
-
function useRangeSliderTooltipCollision(root) {
|
|
913
|
-
const tooltipsOverlapping = ref(false);
|
|
914
|
-
const observedElements = /* @__PURE__ */ new Set();
|
|
915
|
-
let resizeObserver;
|
|
916
|
-
let frameWindow;
|
|
917
|
-
let frameId;
|
|
918
|
-
let microtaskQueued = false;
|
|
919
|
-
let destroyed = false;
|
|
920
|
-
function setOverlapping(value) {
|
|
921
|
-
if (tooltipsOverlapping.value !== value) tooltipsOverlapping.value = value;
|
|
922
|
-
}
|
|
923
|
-
function getTooltipContents(el) {
|
|
924
|
-
return [el.querySelector(`.rp-range-slider__tooltip--lower ${TOOLTIP_CONTENT_SELECTOR$1}`), el.querySelector(`.rp-range-slider__tooltip--upper ${TOOLTIP_CONTENT_SELECTOR$1}`)];
|
|
925
|
-
}
|
|
926
|
-
function measure() {
|
|
927
|
-
if (destroyed) return;
|
|
928
|
-
const el = root.value;
|
|
929
|
-
if (!el) {
|
|
930
|
-
setOverlapping(false);
|
|
931
|
-
return;
|
|
932
|
-
}
|
|
933
|
-
const [lower, upper] = getTooltipContents(el);
|
|
934
|
-
if (!lower || !upper) {
|
|
935
|
-
setOverlapping(false);
|
|
936
|
-
return;
|
|
937
|
-
}
|
|
938
|
-
const view = el.ownerDocument.defaultView;
|
|
939
|
-
if (!view || view.getComputedStyle(lower).display === "none" || view.getComputedStyle(upper).display === "none") {
|
|
940
|
-
setOverlapping(false);
|
|
941
|
-
return;
|
|
942
|
-
}
|
|
943
|
-
setOverlapping(areRangeSliderTooltipRectsOverlapping(lower.getBoundingClientRect(), upper.getBoundingClientRect(), tooltipsOverlapping.value ? TOOLTIP_COLLISION_RELEASE_GAP : TOOLTIP_COLLISION_GAP));
|
|
944
|
-
}
|
|
945
|
-
function scheduleMeasure() {
|
|
946
|
-
if (destroyed || frameId != null || microtaskQueued) return;
|
|
947
|
-
const view = root.value?.ownerDocument.defaultView;
|
|
948
|
-
if (view?.requestAnimationFrame) {
|
|
949
|
-
frameWindow = view;
|
|
950
|
-
frameId = view.requestAnimationFrame(() => {
|
|
951
|
-
frameId = void 0;
|
|
952
|
-
frameWindow = void 0;
|
|
953
|
-
measure();
|
|
954
|
-
});
|
|
955
|
-
return;
|
|
956
|
-
}
|
|
957
|
-
microtaskQueued = true;
|
|
958
|
-
queueMicrotask(() => {
|
|
959
|
-
microtaskQueued = false;
|
|
960
|
-
measure();
|
|
961
|
-
});
|
|
962
|
-
}
|
|
963
|
-
function refreshObservedElements() {
|
|
964
|
-
if (!resizeObserver) return;
|
|
965
|
-
const el = root.value;
|
|
966
|
-
const nextElements = /* @__PURE__ */ new Set();
|
|
967
|
-
if (el) {
|
|
968
|
-
nextElements.add(el);
|
|
969
|
-
for (const tooltip of getTooltipContents(el)) if (tooltip) nextElements.add(tooltip);
|
|
970
|
-
}
|
|
971
|
-
for (const observed of observedElements) if (!nextElements.has(observed)) resizeObserver.unobserve(observed);
|
|
972
|
-
for (const next of nextElements) if (!observedElements.has(next)) resizeObserver.observe(next);
|
|
973
|
-
observedElements.clear();
|
|
974
|
-
for (const next of nextElements) observedElements.add(next);
|
|
975
|
-
}
|
|
976
|
-
function onWindowResize() {
|
|
977
|
-
scheduleMeasure();
|
|
978
|
-
}
|
|
979
|
-
onMounted(() => {
|
|
980
|
-
const view = root.value?.ownerDocument.defaultView;
|
|
981
|
-
if (view?.ResizeObserver) resizeObserver = new view.ResizeObserver(scheduleMeasure);
|
|
982
|
-
view?.addEventListener("resize", onWindowResize);
|
|
983
|
-
refreshObservedElements();
|
|
984
|
-
scheduleMeasure();
|
|
985
|
-
});
|
|
986
|
-
onUpdated(() => {
|
|
987
|
-
refreshObservedElements();
|
|
988
|
-
scheduleMeasure();
|
|
989
|
-
});
|
|
990
|
-
onBeforeUnmount(() => {
|
|
991
|
-
destroyed = true;
|
|
992
|
-
(root.value?.ownerDocument.defaultView)?.removeEventListener("resize", onWindowResize);
|
|
993
|
-
resizeObserver?.disconnect();
|
|
994
|
-
observedElements.clear();
|
|
995
|
-
if (frameId != null) frameWindow?.cancelAnimationFrame(frameId);
|
|
996
|
-
});
|
|
997
|
-
return { tooltipsOverlapping };
|
|
998
|
-
}
|
|
999
|
-
//#endregion
|
|
1000
|
-
//#region src/components/slider/useRangeSliderTooltipTransition.ts
|
|
1001
|
-
var DEFAULT_TRANSITION_DURATION = 150;
|
|
1002
|
-
var DEFAULT_TRANSITION_EASING = "ease";
|
|
1003
|
-
var TOOLTIP_CONTENT_SELECTOR = ".rp-tooltip__content";
|
|
1004
|
-
var TRANSITION_EASING_PATTERN = /(?:cubic-bezier|linear|steps)\([^)]*\)|\b(?:ease-in-out|ease-in|ease-out|ease|linear|step-end|step-start)\b/;
|
|
1005
|
-
function getTooltip(root, kind) {
|
|
1006
|
-
return root.querySelector(`.rp-range-slider__tooltip--${kind}`);
|
|
1007
|
-
}
|
|
1008
|
-
function getTooltipCenter(tooltip) {
|
|
1009
|
-
const content = tooltip.querySelector(TOOLTIP_CONTENT_SELECTOR);
|
|
1010
|
-
if (!content) return;
|
|
1011
|
-
const rect = content.getBoundingClientRect();
|
|
1012
|
-
if (rect.width <= 0 || rect.height <= 0) return;
|
|
1013
|
-
return {
|
|
1014
|
-
x: rect.left + rect.width / 2,
|
|
1015
|
-
y: rect.top + rect.height / 2
|
|
1016
|
-
};
|
|
1017
|
-
}
|
|
1018
|
-
function getTooltipSnapshot(tooltip) {
|
|
1019
|
-
const center = getTooltipCenter(tooltip);
|
|
1020
|
-
if (!center) return;
|
|
1021
|
-
const opacity = Number.parseFloat(tooltip.ownerDocument.defaultView.getComputedStyle(tooltip).opacity);
|
|
1022
|
-
return {
|
|
1023
|
-
center,
|
|
1024
|
-
opacity: Number.isFinite(opacity) ? opacity : 0
|
|
1025
|
-
};
|
|
1026
|
-
}
|
|
1027
|
-
function getCarrierKind(root) {
|
|
1028
|
-
return root.dataset.activeThumb === "lower" ? "upper" : "lower";
|
|
1029
|
-
}
|
|
1030
|
-
function getTransitionOptions(root) {
|
|
1031
|
-
const transition = root.ownerDocument.defaultView.getComputedStyle(root).getPropertyValue("--rp-transition-fast").trim();
|
|
1032
|
-
const durationMatch = transition.match(/([\d.]+)(ms|s)/);
|
|
1033
|
-
if (!durationMatch) return {
|
|
1034
|
-
duration: DEFAULT_TRANSITION_DURATION,
|
|
1035
|
-
easing: DEFAULT_TRANSITION_EASING
|
|
1036
|
-
};
|
|
1037
|
-
const durationValue = Number.parseFloat(durationMatch[1]);
|
|
1038
|
-
return {
|
|
1039
|
-
duration: durationMatch[2] === "s" ? durationValue * 1e3 : durationValue,
|
|
1040
|
-
easing: transition.match(TRANSITION_EASING_PATTERN)?.[0] ?? DEFAULT_TRANSITION_EASING
|
|
1041
|
-
};
|
|
1042
|
-
}
|
|
1043
|
-
function prefersReducedMotion(root) {
|
|
1044
|
-
return root.ownerDocument.defaultView?.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
1045
|
-
}
|
|
1046
|
-
function getTranslate(from, base) {
|
|
1047
|
-
return `translate3d(${from.x - base.x}px, ${from.y - base.y}px, 0)`;
|
|
1048
|
-
}
|
|
1049
|
-
function useRangeSliderTooltipTransition(root, tooltipsOverlapping, value, activeThumb) {
|
|
1050
|
-
const animations = /* @__PURE__ */ new Set();
|
|
1051
|
-
let inferredCarrier;
|
|
1052
|
-
let frozenMergedContent;
|
|
1053
|
-
let frozenMergedTooltip;
|
|
1054
|
-
let heldSplitOpacity = [];
|
|
1055
|
-
let transitionId = 0;
|
|
1056
|
-
watch(activeThumb, () => {
|
|
1057
|
-
inferredCarrier = void 0;
|
|
1058
|
-
}, { flush: "sync" });
|
|
1059
|
-
watch(value, (next, previous) => {
|
|
1060
|
-
const lowerMoved = next[0] !== previous[0];
|
|
1061
|
-
if (lowerMoved !== (next[1] !== previous[1])) inferredCarrier = lowerMoved ? "upper" : "lower";
|
|
1062
|
-
else inferredCarrier = void 0;
|
|
1063
|
-
}, { flush: "sync" });
|
|
1064
|
-
function clearFrozenMergedPosition() {
|
|
1065
|
-
if (frozenMergedTooltip) {
|
|
1066
|
-
frozenMergedTooltip.style.removeProperty("left");
|
|
1067
|
-
frozenMergedTooltip.style.removeProperty("top");
|
|
1068
|
-
}
|
|
1069
|
-
if (frozenMergedContent) {
|
|
1070
|
-
const { element, height, width } = frozenMergedContent;
|
|
1071
|
-
if (width) element.style.width = width;
|
|
1072
|
-
else element.style.removeProperty("width");
|
|
1073
|
-
if (height) element.style.height = height;
|
|
1074
|
-
else element.style.removeProperty("height");
|
|
1075
|
-
}
|
|
1076
|
-
frozenMergedTooltip = void 0;
|
|
1077
|
-
frozenMergedContent = void 0;
|
|
1078
|
-
}
|
|
1079
|
-
function freezeMergedPosition(merged) {
|
|
1080
|
-
const style = merged.ownerDocument.defaultView.getComputedStyle(merged);
|
|
1081
|
-
const content = merged.querySelector(TOOLTIP_CONTENT_SELECTOR);
|
|
1082
|
-
merged.style.left = style.left;
|
|
1083
|
-
merged.style.top = style.top;
|
|
1084
|
-
frozenMergedTooltip = merged;
|
|
1085
|
-
if (content) {
|
|
1086
|
-
const rect = content.getBoundingClientRect();
|
|
1087
|
-
frozenMergedContent = {
|
|
1088
|
-
element: content,
|
|
1089
|
-
height: content.style.height,
|
|
1090
|
-
width: content.style.width
|
|
1091
|
-
};
|
|
1092
|
-
content.style.width = `${rect.width}px`;
|
|
1093
|
-
content.style.height = `${rect.height}px`;
|
|
1094
|
-
}
|
|
1095
|
-
}
|
|
1096
|
-
function clearHeldSplitOpacity() {
|
|
1097
|
-
for (const { element, opacity } of heldSplitOpacity) if (opacity) element.style.opacity = opacity;
|
|
1098
|
-
else element.style.removeProperty("opacity");
|
|
1099
|
-
heldSplitOpacity = [];
|
|
1100
|
-
}
|
|
1101
|
-
function holdSplitOpacity(merged, endpoints) {
|
|
1102
|
-
heldSplitOpacity = [merged, ...endpoints].map((element) => ({
|
|
1103
|
-
element,
|
|
1104
|
-
opacity: element.style.opacity
|
|
1105
|
-
}));
|
|
1106
|
-
merged.style.opacity = "1";
|
|
1107
|
-
for (const endpoint of endpoints) endpoint.style.opacity = "0";
|
|
1108
|
-
}
|
|
1109
|
-
function cancelAnimations() {
|
|
1110
|
-
for (const animation of animations) animation.cancel();
|
|
1111
|
-
animations.clear();
|
|
1112
|
-
}
|
|
1113
|
-
function animate(element, keyframes, options, onComplete) {
|
|
1114
|
-
let animation;
|
|
1115
|
-
try {
|
|
1116
|
-
animation = element.animate(keyframes, options);
|
|
1117
|
-
} catch {
|
|
1118
|
-
try {
|
|
1119
|
-
animation = element.animate(keyframes, {
|
|
1120
|
-
duration: DEFAULT_TRANSITION_DURATION,
|
|
1121
|
-
easing: DEFAULT_TRANSITION_EASING
|
|
1122
|
-
});
|
|
1123
|
-
} catch {
|
|
1124
|
-
onComplete?.();
|
|
1125
|
-
return;
|
|
1126
|
-
}
|
|
1127
|
-
}
|
|
1128
|
-
animations.add(animation);
|
|
1129
|
-
let completed = false;
|
|
1130
|
-
const removeAnimation = () => {
|
|
1131
|
-
if (completed) return;
|
|
1132
|
-
completed = true;
|
|
1133
|
-
animations.delete(animation);
|
|
1134
|
-
onComplete?.();
|
|
1135
|
-
};
|
|
1136
|
-
animation.addEventListener("cancel", removeAnimation, { once: true });
|
|
1137
|
-
animation.addEventListener("finish", removeAnimation, { once: true });
|
|
1138
|
-
}
|
|
1139
|
-
watch(tooltipsOverlapping, async (overlapping) => {
|
|
1140
|
-
const el = root.value;
|
|
1141
|
-
if (!el) return;
|
|
1142
|
-
const lower = getTooltip(el, "lower");
|
|
1143
|
-
const upper = getTooltip(el, "upper");
|
|
1144
|
-
const merged = getTooltip(el, "merged");
|
|
1145
|
-
const carrier = getTooltip(el, inferredCarrier ?? getCarrierKind(el));
|
|
1146
|
-
inferredCarrier = void 0;
|
|
1147
|
-
if (!lower || !upper || !merged || !carrier) return;
|
|
1148
|
-
const snapshots = /* @__PURE__ */ new Map();
|
|
1149
|
-
for (const tooltip of [
|
|
1150
|
-
lower,
|
|
1151
|
-
upper,
|
|
1152
|
-
merged
|
|
1153
|
-
]) {
|
|
1154
|
-
const snapshot = getTooltipSnapshot(tooltip);
|
|
1155
|
-
if (snapshot) snapshots.set(tooltip, snapshot);
|
|
1156
|
-
}
|
|
1157
|
-
const carrierSnapshot = snapshots.get(carrier);
|
|
1158
|
-
const mergedSnapshot = snapshots.get(merged);
|
|
1159
|
-
const currentTransitionId = ++transitionId;
|
|
1160
|
-
await nextTick();
|
|
1161
|
-
if (currentTransitionId !== transitionId || root.value !== el) return;
|
|
1162
|
-
cancelAnimations();
|
|
1163
|
-
clearFrozenMergedPosition();
|
|
1164
|
-
clearHeldSplitOpacity();
|
|
1165
|
-
if (typeof merged.animate !== "function" || prefersReducedMotion(el)) return;
|
|
1166
|
-
const { duration, easing } = getTransitionOptions(el);
|
|
1167
|
-
if (duration <= 0) return;
|
|
1168
|
-
if (!overlapping) {
|
|
1169
|
-
freezeMergedPosition(merged);
|
|
1170
|
-
holdSplitOpacity(merged, [lower, upper]);
|
|
1171
|
-
}
|
|
1172
|
-
const mergedBaseCenter = getTooltipCenter(merged);
|
|
1173
|
-
const carrierCenter = getTooltipCenter(carrier);
|
|
1174
|
-
if (!mergedBaseCenter || !carrierCenter) {
|
|
1175
|
-
clearFrozenMergedPosition();
|
|
1176
|
-
clearHeldSplitOpacity();
|
|
1177
|
-
return;
|
|
1178
|
-
}
|
|
1179
|
-
const options = {
|
|
1180
|
-
duration,
|
|
1181
|
-
easing
|
|
1182
|
-
};
|
|
1183
|
-
const releaseFrozenPosition = overlapping ? void 0 : () => {
|
|
1184
|
-
if (currentTransitionId !== transitionId) return;
|
|
1185
|
-
clearFrozenMergedPosition();
|
|
1186
|
-
clearHeldSplitOpacity();
|
|
1187
|
-
};
|
|
1188
|
-
const mergedStartCenter = mergedSnapshot && mergedSnapshot.opacity > 0 ? mergedSnapshot.center : carrierSnapshot?.center ?? carrierCenter;
|
|
1189
|
-
const mergedEndCenter = overlapping ? mergedBaseCenter : carrierCenter;
|
|
1190
|
-
animate(merged, [{ transform: getTranslate(mergedStartCenter, mergedBaseCenter) }, { transform: getTranslate(mergedEndCenter, mergedBaseCenter) }], options, releaseFrozenPosition);
|
|
1191
|
-
}, { flush: "pre" });
|
|
1192
|
-
onBeforeUnmount(() => {
|
|
1193
|
-
transitionId += 1;
|
|
1194
|
-
cancelAnimations();
|
|
1195
|
-
clearFrozenMergedPosition();
|
|
1196
|
-
clearHeldSplitOpacity();
|
|
1197
|
-
});
|
|
1198
|
-
}
|
|
1199
|
-
//#endregion
|
|
1200
1309
|
//#region src/components/slider/range-slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
1201
|
-
var t0 = template("<span data-v-
|
|
1202
|
-
var t1 = template("<span data-v-
|
|
1203
|
-
var t2 = template("<span data-v-
|
|
1204
|
-
var t3 = template("<
|
|
1205
|
-
var t4 = template("<span data-v-
|
|
1206
|
-
var t5 = template("<span data-v-
|
|
1207
|
-
var t6 = template("<span data-v-
|
|
1208
|
-
var t7 = template("<
|
|
1310
|
+
var t0 = template("<span data-v-8dd81f55 class=rp-range-slider__label>");
|
|
1311
|
+
var t1 = template("<span data-v-8dd81f55 class=rp-range-slider__value aria-hidden=true>");
|
|
1312
|
+
var t2 = template("<span data-v-8dd81f55 class=rp-range-slider__header>");
|
|
1313
|
+
var t3 = template("<input data-v-8dd81f55 type=range>");
|
|
1314
|
+
var t4 = template("<span data-v-8dd81f55 class=rp-range-slider__mark-label> ");
|
|
1315
|
+
var t5 = template("<span data-v-8dd81f55><span data-v-8dd81f55 class=rp-range-slider__mark-dot></span>");
|
|
1316
|
+
var t6 = template("<span data-v-8dd81f55 class=rp-range-slider__marks aria-hidden=true>");
|
|
1317
|
+
var t7 = template("<span data-v-8dd81f55><span data-v-8dd81f55 class=rp-range-slider__thumb-content>");
|
|
1318
|
+
var t8 = template("<div data-v-8dd81f55 role=group><span data-v-8dd81f55 class=rp-range-slider__track><span data-v-8dd81f55 class=rp-range-slider__bar aria-hidden=true></span><!><span data-v-8dd81f55 class=rp-range-slider__thumbs aria-hidden=true>", 1);
|
|
1209
1319
|
delegateEvents("input", "keydown", "pointerdown");
|
|
1210
1320
|
//#endregion
|
|
1211
1321
|
//#region src/components/slider/range-slider.vue
|
|
@@ -1240,18 +1350,6 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
|
|
|
1240
1350
|
type: Boolean,
|
|
1241
1351
|
default: void 0
|
|
1242
1352
|
},
|
|
1243
|
-
required: {
|
|
1244
|
-
type: Boolean,
|
|
1245
|
-
default: void 0
|
|
1246
|
-
},
|
|
1247
|
-
invalid: {
|
|
1248
|
-
type: Boolean,
|
|
1249
|
-
default: void 0
|
|
1250
|
-
},
|
|
1251
|
-
valid: {
|
|
1252
|
-
type: Boolean,
|
|
1253
|
-
default: void 0
|
|
1254
|
-
},
|
|
1255
1353
|
describedby: {},
|
|
1256
1354
|
labelledby: {}
|
|
1257
1355
|
},
|
|
@@ -1261,43 +1359,33 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
|
|
|
1261
1359
|
const emit = __emit;
|
|
1262
1360
|
const slots = useSlots();
|
|
1263
1361
|
const generatedId = useId();
|
|
1264
|
-
const
|
|
1362
|
+
const tooltipsOverlapping = ref(false);
|
|
1363
|
+
const rangeSliderThumbs = ["lower", "upper"];
|
|
1265
1364
|
const labelId = computed(() => `${props.id ?? generatedId}-label`);
|
|
1266
|
-
const { control, nativeMin, nativeMax, nativeStep, nativeNames, nativeIds, rootClass, normalizedValue, valuePercent, formattedValue, ariaLabels, ariaValueText, markItems, trackStyle, activeThumb, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipIds, mergedTooltipId, tooltipColor, tooltipOffset,
|
|
1365
|
+
const { control, nativeMin, nativeMax, nativeStep, nativeNames, nativeIds, rootClass, normalizedValue, valuePercent, formattedValue, ariaLabels, ariaValueText, markItems, trackStyle, activeThumb, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipIds, mergedTooltipId, tooltipColor, tooltipOffset, tooltipArrow, tooltipContent, mergedTooltipContent, onInput, onTrackPointerDown, onTooltipFocus, onTooltipBlur, onTooltipTrackMouseEnter, onTooltipTrackMouseLeave, onTooltipKeydown } = useRangeSlider(props, (value) => {
|
|
1267
1366
|
emit("update:modelValue", value);
|
|
1268
1367
|
});
|
|
1269
|
-
const { tooltipsOverlapping } = useRangeSliderTooltipCollision(rangeSliderRef);
|
|
1270
|
-
useRangeSliderTooltipTransition(rangeSliderRef, tooltipsOverlapping, normalizedValue, activeThumb);
|
|
1271
1368
|
const groupLabelledby = computed(() => {
|
|
1272
1369
|
const values = [control.ariaLabelledby, slots.default ? labelId.value : void 0].flatMap((value) => value?.split(/\s+/) ?? []).filter(Boolean);
|
|
1273
1370
|
return values.length ? Array.from(new Set(values)).join(" ") : void 0;
|
|
1274
1371
|
});
|
|
1275
|
-
const
|
|
1276
|
-
const
|
|
1277
|
-
const
|
|
1278
|
-
const
|
|
1279
|
-
const n12 = next(n11, 2);
|
|
1280
|
-
const n41 = next(n12, 3);
|
|
1281
|
-
const n40 = next(n41, 4);
|
|
1282
|
-
const n28 = child(n40);
|
|
1283
|
-
const n23 = child(n28);
|
|
1284
|
-
const n35 = next(n28, 1);
|
|
1285
|
-
const n30 = child(n35);
|
|
1372
|
+
const n34 = t8();
|
|
1373
|
+
const n33 = child(n34, 1);
|
|
1374
|
+
const n32 = next(child(n33), 1);
|
|
1375
|
+
const n31 = next(n32, 3);
|
|
1286
1376
|
renderEffect(() => {
|
|
1287
1377
|
const _control = unref(control);
|
|
1288
|
-
setClass(
|
|
1378
|
+
setClass(n34, [unref(rootClass), {
|
|
1289
1379
|
"rp-range-slider--custom-thumb": $slots.thumb,
|
|
1290
|
-
"rp-range-slider--tooltips-overlapping":
|
|
1380
|
+
"rp-range-slider--tooltips-overlapping": tooltipsOverlapping.value
|
|
1291
1381
|
}]);
|
|
1292
|
-
setAttr(
|
|
1293
|
-
setAttr(
|
|
1294
|
-
setStyle(
|
|
1295
|
-
setAttr(
|
|
1296
|
-
setAttr(
|
|
1297
|
-
setAttr(n43, "aria-invalid", _control.invalid || void 0);
|
|
1298
|
-
setAttr(n43, "aria-required", _control.required || void 0);
|
|
1382
|
+
setAttr(n34, "data-active-thumb", unref(activeThumb));
|
|
1383
|
+
setAttr(n34, "data-disabled", _control.disabled || void 0);
|
|
1384
|
+
setStyle(n34, unref(trackStyle));
|
|
1385
|
+
setAttr(n34, "aria-labelledby", groupLabelledby.value);
|
|
1386
|
+
setAttr(n34, "aria-describedby", _control.ariaDescribedby);
|
|
1299
1387
|
});
|
|
1300
|
-
setInsertionState(
|
|
1388
|
+
setInsertionState(n34, 0, 0);
|
|
1301
1389
|
createIf(() => $slots.default || $slots.value, () => {
|
|
1302
1390
|
const n10 = t2();
|
|
1303
1391
|
setInsertionState(n10, null, 0);
|
|
@@ -1321,155 +1409,95 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
|
|
|
1321
1409
|
});
|
|
1322
1410
|
return n10;
|
|
1323
1411
|
});
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
setProp(n11, "orient", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1353
|
-
setProp(n11, "disabled", _control_disabled || void 0);
|
|
1354
|
-
setProp(n11, "required", _control_required || void 0);
|
|
1355
|
-
setAttr(n11, "aria-label", _ariaLabels[0]);
|
|
1356
|
-
setAttr(n11, "aria-describedby", _control_ariaDescribedby);
|
|
1357
|
-
setAttr(n11, "aria-orientation", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1358
|
-
setAttr(n11, "aria-invalid", _control_invalid || void 0);
|
|
1359
|
-
setAttr(n11, "aria-required", _control_required || void 0);
|
|
1360
|
-
setAttr(n11, "aria-valuetext", _ariaValueText[0]);
|
|
1361
|
-
setProp(n12, "id", _nativeIds[1]);
|
|
1362
|
-
setProp(n12, "name", _nativeNames[1]);
|
|
1363
|
-
setValue(n12, _normalizedValue[1]);
|
|
1364
|
-
setProp(n12, "min", _nativeMin[1]);
|
|
1365
|
-
setProp(n12, "max", _nativeMax[1]);
|
|
1366
|
-
setProp(n12, "step", _nativeStep);
|
|
1367
|
-
setProp(n12, "orient", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1368
|
-
setProp(n12, "disabled", _control_disabled || void 0);
|
|
1369
|
-
setProp(n12, "required", _control_required || void 0);
|
|
1370
|
-
setAttr(n12, "aria-label", _ariaLabels[1]);
|
|
1371
|
-
setAttr(n12, "aria-describedby", _control_ariaDescribedby);
|
|
1372
|
-
setAttr(n12, "aria-orientation", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1373
|
-
setAttr(n12, "aria-invalid", _control_invalid || void 0);
|
|
1374
|
-
setAttr(n12, "aria-required", _control_required || void 0);
|
|
1375
|
-
setAttr(n12, "aria-valuetext", _ariaValueText[1]);
|
|
1376
|
-
});
|
|
1377
|
-
setInsertionState(n42, n41, 3);
|
|
1412
|
+
setInsertionState(n33, n32, 1);
|
|
1413
|
+
createFor(() => rangeSliderThumbs, (_for_item0, _for_key0) => {
|
|
1414
|
+
const n13 = t3();
|
|
1415
|
+
n13.$evtinput = createInvoker(($event) => unref(onInput)(_for_item0.value, $event));
|
|
1416
|
+
on(n13, "focus", () => unref(onTooltipFocus)(_for_item0.value));
|
|
1417
|
+
on(n13, "blur", () => unref(onTooltipBlur)(_for_item0.value));
|
|
1418
|
+
n13.$evtkeydown = createInvoker(($event) => unref(onTooltipKeydown)(_for_item0.value, $event));
|
|
1419
|
+
let _index, _control;
|
|
1420
|
+
renderEffect(() => {
|
|
1421
|
+
_index = _for_key0.value;
|
|
1422
|
+
_control = unref(control);
|
|
1423
|
+
setProp(n13, "id", unref(nativeIds)[_index]);
|
|
1424
|
+
setProp(n13, "name", unref(nativeNames)[_index]);
|
|
1425
|
+
setValue(n13, unref(normalizedValue)[_index]);
|
|
1426
|
+
setProp(n13, "min", unref(nativeMin)[_index]);
|
|
1427
|
+
setProp(n13, "max", unref(nativeMax)[_index]);
|
|
1428
|
+
setProp(n13, "step", unref(nativeStep));
|
|
1429
|
+
setProp(n13, "orient", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1430
|
+
setProp(n13, "disabled", _control.disabled || void 0);
|
|
1431
|
+
setAttr(n13, "aria-label", unref(ariaLabels)[_index]);
|
|
1432
|
+
setAttr(n13, "aria-describedby", _control.ariaDescribedby);
|
|
1433
|
+
setAttr(n13, "aria-orientation", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
1434
|
+
setAttr(n13, "aria-valuetext", unref(ariaValueText)[_index]);
|
|
1435
|
+
});
|
|
1436
|
+
setClass(n13, ["rp-range-slider__native", `rp-range-slider__native--${_for_item0.value}`]);
|
|
1437
|
+
return n13;
|
|
1438
|
+
}, (thumb, index) => thumb, 8);
|
|
1439
|
+
setInsertionState(n33, n32, 2);
|
|
1378
1440
|
createIf(() => unref(markItems).length, () => {
|
|
1379
|
-
const
|
|
1380
|
-
setInsertionState(
|
|
1441
|
+
const n22 = t6();
|
|
1442
|
+
setInsertionState(n22, null, 0);
|
|
1381
1443
|
createFor(() => unref(markItems), (_for_item0) => {
|
|
1382
|
-
const
|
|
1444
|
+
const n21 = t5();
|
|
1383
1445
|
renderEffect(() => {
|
|
1384
1446
|
const _mark = _for_item0.value;
|
|
1385
|
-
setClassName(
|
|
1386
|
-
setStyle(
|
|
1447
|
+
setClassName(n21, _mark.filled ? 1 : 0, " rp-range-slider__mark--filled", "rp-range-slider__mark");
|
|
1448
|
+
setStyle(n21, _mark.style);
|
|
1387
1449
|
});
|
|
1388
|
-
setInsertionState(
|
|
1450
|
+
setInsertionState(n21, null, 1);
|
|
1389
1451
|
createIf(() => _for_item0.value.hasLabel, () => {
|
|
1390
|
-
const
|
|
1391
|
-
const
|
|
1392
|
-
renderEffect(() => setText(
|
|
1393
|
-
return
|
|
1452
|
+
const n20 = t4();
|
|
1453
|
+
const x20 = txt(n20);
|
|
1454
|
+
renderEffect(() => setText(x20, toDisplayString(_for_item0.value.label)));
|
|
1455
|
+
return n20;
|
|
1394
1456
|
});
|
|
1395
|
-
return
|
|
1457
|
+
return n21;
|
|
1396
1458
|
}, (mark) => mark.key, 9);
|
|
1397
|
-
return
|
|
1459
|
+
return n22;
|
|
1398
1460
|
});
|
|
1399
|
-
setInsertionState(
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1461
|
+
setInsertionState(n31, null, 0);
|
|
1462
|
+
createFor(() => rangeSliderThumbs, (_for_item0, _for_key0) => {
|
|
1463
|
+
const n27 = t7();
|
|
1464
|
+
const n26 = child(n27);
|
|
1465
|
+
renderEffect(() => setAttr(n27, "data-range-slider-thumb", _for_item0.value));
|
|
1466
|
+
setInsertionState(n26, null, 0);
|
|
1467
|
+
createSlot("thumb", {
|
|
1468
|
+
thumb: () => _for_item0.value,
|
|
1469
|
+
index: () => _for_key0.value,
|
|
1470
|
+
value: () => unref(normalizedValue)[_for_key0.value],
|
|
1471
|
+
formattedValue: () => unref(formattedValue)[_for_key0.value],
|
|
1472
|
+
percent: () => unref(valuePercent)[_for_key0.value]
|
|
1473
|
+
}, null, 1);
|
|
1474
|
+
setClass(n27, ["rp-range-slider__thumb", `rp-range-slider__thumb--${_for_item0.value}`]);
|
|
1475
|
+
return n27;
|
|
1476
|
+
}, (thumb, index) => thumb, 8);
|
|
1477
|
+
setInsertionState(n31, null, 1);
|
|
1408
1478
|
createIf(() => unref(tooltipVisible), () => {
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
class: "rp-range-slider__tooltip rp-range-slider__tooltip--lower",
|
|
1412
|
-
content: () => unref(tooltipContent)[0],
|
|
1413
|
-
placement: () => unref(tooltipPlacement),
|
|
1414
|
-
color: () => unref(tooltipColor),
|
|
1415
|
-
offset: () => unref(tooltipOffset),
|
|
1416
|
-
open: () => unref(tooltipOpen),
|
|
1417
|
-
"open-delay": () => unref(tooltipOpenDelay),
|
|
1479
|
+
const _on_update_overlapping = ($event) => tooltipsOverlapping.value = $event;
|
|
1480
|
+
return createComponent(range_slider_tooltip_default, {
|
|
1418
1481
|
arrow: () => unref(tooltipArrow),
|
|
1419
|
-
decorative: ""
|
|
1420
|
-
}, () => {
|
|
1421
|
-
return t6();
|
|
1422
|
-
});
|
|
1423
|
-
});
|
|
1424
|
-
setInsertionState(n30, null, 0);
|
|
1425
|
-
createSlot("thumb", {
|
|
1426
|
-
thumb: "upper",
|
|
1427
|
-
index: "1",
|
|
1428
|
-
value: () => unref(normalizedValue)[1],
|
|
1429
|
-
formattedValue: () => unref(formattedValue)[1],
|
|
1430
|
-
percent: () => unref(valuePercent)[1]
|
|
1431
|
-
}, null, 1);
|
|
1432
|
-
setInsertionState(n35, null, 1);
|
|
1433
|
-
createIf(() => unref(tooltipVisible), () => {
|
|
1434
|
-
return createComponent(tooltip_default, {
|
|
1435
|
-
id: () => unref(tooltipIds)[1],
|
|
1436
|
-
class: "rp-range-slider__tooltip rp-range-slider__tooltip--upper",
|
|
1437
|
-
content: () => unref(tooltipContent)[1],
|
|
1438
|
-
placement: () => unref(tooltipPlacement),
|
|
1439
1482
|
color: () => unref(tooltipColor),
|
|
1483
|
+
content: () => unref(tooltipContent),
|
|
1484
|
+
ids: () => unref(tooltipIds),
|
|
1485
|
+
"merged-content": () => unref(mergedTooltipContent),
|
|
1486
|
+
"merged-id": () => unref(mergedTooltipId),
|
|
1440
1487
|
offset: () => unref(tooltipOffset),
|
|
1441
1488
|
open: () => unref(tooltipOpen),
|
|
1442
|
-
|
|
1443
|
-
arrow: () => unref(tooltipArrow),
|
|
1444
|
-
decorative: ""
|
|
1445
|
-
}, () => {
|
|
1446
|
-
return t6();
|
|
1447
|
-
});
|
|
1448
|
-
});
|
|
1449
|
-
setInsertionState(n40, null, 2);
|
|
1450
|
-
createIf(() => unref(tooltipVisible), () => {
|
|
1451
|
-
return createComponent(tooltip_default, {
|
|
1452
|
-
id: () => unref(mergedTooltipId),
|
|
1453
|
-
class: "rp-range-slider__tooltip rp-range-slider__tooltip--merged",
|
|
1454
|
-
content: () => unref(mergedTooltipContent),
|
|
1489
|
+
orientation: () => __props.orientation,
|
|
1455
1490
|
placement: () => unref(tooltipPlacement),
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
open: () => unref(tooltipOpen),
|
|
1459
|
-
"open-delay": () => unref(tooltipOpenDelay),
|
|
1460
|
-
arrow: () => unref(tooltipArrow),
|
|
1461
|
-
decorative: ""
|
|
1462
|
-
}, () => {
|
|
1463
|
-
return t6();
|
|
1491
|
+
"value-percent": () => unref(valuePercent),
|
|
1492
|
+
"onUpdate:overlapping": () => _on_update_overlapping
|
|
1464
1493
|
});
|
|
1465
1494
|
});
|
|
1466
|
-
|
|
1467
|
-
on(
|
|
1468
|
-
on(
|
|
1469
|
-
|
|
1470
|
-
return n43;
|
|
1495
|
+
n33.$evtpointerdown = createInvoker((e) => unref(onTrackPointerDown)(e));
|
|
1496
|
+
on(n33, "mouseenter", (e) => unref(onTooltipTrackMouseEnter)(e));
|
|
1497
|
+
on(n33, "mouseleave", (e) => unref(onTooltipTrackMouseLeave)(e));
|
|
1498
|
+
return n34;
|
|
1471
1499
|
}
|
|
1472
|
-
}), [["__scopeId", "data-v-
|
|
1500
|
+
}), [["__scopeId", "data-v-8dd81f55"]]);
|
|
1473
1501
|
//#endregion
|
|
1474
1502
|
//#region src/components/slider/types.ts
|
|
1475
1503
|
var sliderColors = componentColors;
|