ropav 0.0.4 → 0.0.6
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/README.md +21 -43
- package/dist/base.css +36 -14
- package/dist/button-group.css +50 -0
- package/dist/button-group.js +49 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.css +73 -43
- package/dist/button.js +41 -40
- package/dist/button.js.map +1 -1
- package/dist/card.css +88 -0
- package/dist/card.js +71 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.css +108 -94
- package/dist/checkbox.js +18 -6
- package/dist/checkbox.js.map +1 -1
- package/dist/componentColors.js +22 -0
- package/dist/componentColors.js.map +1 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/types.d.ts +2 -1
- package/dist/components/button/useButtonColor.d.ts +13 -0
- package/dist/components/button-group/button-group.d.ts +21 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/button-group/index.js +2 -0
- package/dist/components/button-group/types.d.ts +10 -0
- package/dist/components/card/card.d.ts +21 -0
- package/dist/components/card/index.d.ts +2 -0
- package/dist/components/card/index.js +2 -0
- package/dist/components/card/types.d.ts +11 -0
- package/dist/components/checkbox/types.d.ts +2 -1
- package/dist/components/checkbox/useCheckbox.d.ts +4 -0
- package/dist/components/field/field.d.ts +35 -0
- package/dist/components/field/index.d.ts +2 -0
- package/dist/components/field/index.js +2 -0
- package/dist/components/field/types.d.ts +21 -0
- package/dist/components/icon-button/icon-button.d.ts +21 -0
- package/dist/components/icon-button/index.d.ts +2 -0
- package/dist/components/icon-button/index.js +2 -0
- package/dist/components/icon-button/types.d.ts +15 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.js +2 -0
- package/dist/components/progress/progress.d.ts +27 -0
- package/dist/components/progress/types.d.ts +24 -0
- package/dist/components/progress/useProgress.d.ts +28 -0
- package/dist/components/radio/types.d.ts +2 -1
- package/dist/components/radio/useRadio.d.ts +4 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/index.js +2 -0
- package/dist/components/slider/slider.d.ts +35 -0
- package/dist/components/slider/types.d.ts +50 -0
- package/dist/components/slider/useSlider.d.ts +50 -0
- package/dist/components/switch/types.d.ts +2 -1
- package/dist/components/switch/useSwitch.d.ts +3 -0
- package/dist/components/textarea/index.d.ts +1 -1
- package/dist/components/textarea/types.d.ts +5 -0
- package/dist/components/textarea/useTextarea.d.ts +2 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/tooltip.d.ts +27 -0
- package/dist/components/tooltip/types.d.ts +29 -0
- package/dist/components/tooltip/useTooltip.d.ts +17 -0
- package/dist/field.css +40 -0
- package/dist/field.js +128 -0
- package/dist/field.js.map +1 -0
- package/dist/icon-button.css +372 -0
- package/dist/icon-button.js +67 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +9 -1
- package/dist/input.css +2 -2
- package/dist/progress.css +125 -0
- package/dist/progress.js +177 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio.css +83 -83
- package/dist/radio.js +18 -6
- package/dist/radio.js.map +1 -1
- package/dist/select.css +16 -4
- package/dist/select.js +7 -0
- package/dist/select.js.map +1 -1
- package/dist/slider.css +438 -0
- package/dist/slider.js +412 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.css +79 -70
- package/dist/switch.js +15 -6
- package/dist/switch.js.map +1 -1
- package/dist/textarea.css +35 -28
- package/dist/textarea.js +106 -15
- package/dist/textarea.js.map +1 -1
- package/dist/tooltip.css +136 -0
- package/dist/tooltip.js +384 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/useButtonColor.js +33 -0
- package/dist/useButtonColor.js.map +1 -0
- package/package.json +30 -2
- package/src/styles/_mixins.scss +17 -0
- package/src/styles/_tokens.scss +14 -13
- package/src/styles/_utilities.scss +13 -0
- package/src/styles/_variables.scss +2 -1
- package/src/styles/base.scss +1 -0
package/dist/slider.js
ADDED
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import './slider.css';
|
|
2
|
+
import { n as bem, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
3
|
+
import { t as useControlState } from "./useControlState.js";
|
|
4
|
+
import { n as useDelayedOpen, t as tooltip_default } from "./tooltip.js";
|
|
5
|
+
import { child, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, next, on, renderEffect, setAttr, setClass, setClassName, setInsertionState, setProp, setStyle, setText, setValue, template, toDisplayString, txt, unref } from "vue";
|
|
6
|
+
//#region src/components/slider/types.ts
|
|
7
|
+
var sliderColors = [
|
|
8
|
+
"primary",
|
|
9
|
+
"secondary",
|
|
10
|
+
"success",
|
|
11
|
+
"warning",
|
|
12
|
+
"danger",
|
|
13
|
+
"info",
|
|
14
|
+
"neutral"
|
|
15
|
+
];
|
|
16
|
+
var sliderSizes = [
|
|
17
|
+
"xs",
|
|
18
|
+
"sm",
|
|
19
|
+
"md",
|
|
20
|
+
"lg",
|
|
21
|
+
"xl"
|
|
22
|
+
];
|
|
23
|
+
var sliderOrientations = ["horizontal", "vertical"];
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/components/slider/useSlider.ts
|
|
26
|
+
var sliderColorNames = new Set(sliderColors);
|
|
27
|
+
var sliderMarkColorProperties = [
|
|
28
|
+
"--_rp-slider-mark-color",
|
|
29
|
+
"--_rp-slider-mark-label-color",
|
|
30
|
+
"--_rp-slider-mark-filled-label-color",
|
|
31
|
+
"--_rp-slider-mark-ring-color"
|
|
32
|
+
];
|
|
33
|
+
function normalizeSliderValue(value, min, max, step) {
|
|
34
|
+
const bounds = normalizeSliderBounds(min, max);
|
|
35
|
+
const safeStep = normalizeSliderStep(step);
|
|
36
|
+
const safeValue = Number.isFinite(value) ? value : bounds.min;
|
|
37
|
+
const clamped = Math.min(bounds.max, Math.max(bounds.min, safeValue));
|
|
38
|
+
if (safeStep === "any") return clamped;
|
|
39
|
+
const steps = Math.round((clamped - bounds.min) / safeStep);
|
|
40
|
+
const snapped = bounds.min + steps * safeStep;
|
|
41
|
+
return Math.min(bounds.max, Math.max(bounds.min, Number(snapped.toFixed(10))));
|
|
42
|
+
}
|
|
43
|
+
function normalizeSliderBounds(min, max) {
|
|
44
|
+
const safeMin = Number.isFinite(min) ? min : 0;
|
|
45
|
+
const safeMax = Number.isFinite(max) ? max : safeMin;
|
|
46
|
+
return safeMax >= safeMin ? {
|
|
47
|
+
min: safeMin,
|
|
48
|
+
max: safeMax
|
|
49
|
+
} : {
|
|
50
|
+
min: safeMax,
|
|
51
|
+
max: safeMin
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function normalizeSliderStep(step) {
|
|
55
|
+
return step === "any" || Number.isFinite(step) && step > 0 ? step : "any";
|
|
56
|
+
}
|
|
57
|
+
function getSliderValuePercent(value, min, max) {
|
|
58
|
+
if (max <= min) return 0;
|
|
59
|
+
const percent = (value - min) / (max - min) * 100;
|
|
60
|
+
return Math.min(100, Math.max(0, percent));
|
|
61
|
+
}
|
|
62
|
+
function getSliderMarkColorValue(color) {
|
|
63
|
+
if (!color) return void 0;
|
|
64
|
+
return sliderColorNames.has(color) ? `var(--rp-color-${color})` : color;
|
|
65
|
+
}
|
|
66
|
+
function isSliderPresetColor(color) {
|
|
67
|
+
return Boolean(color && sliderColorNames.has(color));
|
|
68
|
+
}
|
|
69
|
+
function getSliderCustomColorValue(color) {
|
|
70
|
+
if (!color || isSliderPresetColor(color)) return void 0;
|
|
71
|
+
return color;
|
|
72
|
+
}
|
|
73
|
+
function setSliderStyleValue(style, property, value) {
|
|
74
|
+
if (value) style[property] = value;
|
|
75
|
+
}
|
|
76
|
+
function getSliderMarkStyle(percent, color) {
|
|
77
|
+
const style = { "--_rp-slider-mark-position": `${percent}%` };
|
|
78
|
+
const colorValue = getSliderMarkColorValue(color);
|
|
79
|
+
for (const property of sliderMarkColorProperties) setSliderStyleValue(style, property, colorValue);
|
|
80
|
+
return style;
|
|
81
|
+
}
|
|
82
|
+
function normalizeSliderMark(mark) {
|
|
83
|
+
return typeof mark === "number" ? { value: mark } : mark;
|
|
84
|
+
}
|
|
85
|
+
function normalizeSliderMarks(marks, min, max, valuePercent) {
|
|
86
|
+
return (marks ?? []).flatMap((markInput, index) => {
|
|
87
|
+
const mark = normalizeSliderMark(markInput);
|
|
88
|
+
if (mark.hidden) return [];
|
|
89
|
+
const value = Number(mark.value);
|
|
90
|
+
if (!Number.isFinite(value)) return [];
|
|
91
|
+
const percent = getSliderValuePercent(value, min, max);
|
|
92
|
+
return {
|
|
93
|
+
key: `${value}-${index}`,
|
|
94
|
+
value,
|
|
95
|
+
label: mark.label,
|
|
96
|
+
hasLabel: mark.label != null,
|
|
97
|
+
filled: percent <= valuePercent,
|
|
98
|
+
style: getSliderMarkStyle(percent, mark.color)
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function getSliderLengthValue(value) {
|
|
103
|
+
if (value == null || value === "") return void 0;
|
|
104
|
+
if (typeof value === "number") return Number.isFinite(value) ? `${value}px` : void 0;
|
|
105
|
+
return value;
|
|
106
|
+
}
|
|
107
|
+
function getSliderBorderValue(value) {
|
|
108
|
+
if (value == null || value === "") return void 0;
|
|
109
|
+
if (typeof value === "number") return Number.isFinite(value) ? `${value}px solid var(--_rp-slider-thumb-border)` : void 0;
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
var sliderThumbStyleProps = [
|
|
113
|
+
[
|
|
114
|
+
"--_rp-slider-thumb-size",
|
|
115
|
+
"size",
|
|
116
|
+
getSliderLengthValue
|
|
117
|
+
],
|
|
118
|
+
[
|
|
119
|
+
"--_rp-slider-thumb-border-style",
|
|
120
|
+
"border",
|
|
121
|
+
getSliderBorderValue
|
|
122
|
+
],
|
|
123
|
+
[
|
|
124
|
+
"--_rp-slider-thumb-padding",
|
|
125
|
+
"padding",
|
|
126
|
+
getSliderLengthValue
|
|
127
|
+
]
|
|
128
|
+
];
|
|
129
|
+
function getSliderTrackStyle(props, valuePercent) {
|
|
130
|
+
const style = {
|
|
131
|
+
"--_rp-slider-percent": `${valuePercent}%`,
|
|
132
|
+
"--_rp-slider-ratio": `${valuePercent / 100}`
|
|
133
|
+
};
|
|
134
|
+
setSliderStyleValue(style, "--_rp-slider-custom-color", getSliderCustomColorValue(props.color));
|
|
135
|
+
for (const [property, propName, getValue] of sliderThumbStyleProps) setSliderStyleValue(style, property, getValue(props.thumbStyle?.[propName]));
|
|
136
|
+
return style;
|
|
137
|
+
}
|
|
138
|
+
function getFormattedSliderValue(value, formatter) {
|
|
139
|
+
return formatter ? formatter(value) : value;
|
|
140
|
+
}
|
|
141
|
+
function getSliderAriaValueText(value, ariaValueText, formatter) {
|
|
142
|
+
if (typeof ariaValueText === "function") return String(ariaValueText(value));
|
|
143
|
+
if (ariaValueText != null && ariaValueText !== "") return String(ariaValueText);
|
|
144
|
+
if (formatter) return String(formatter(value));
|
|
145
|
+
}
|
|
146
|
+
function getSliderTooltipOptions(tooltip) {
|
|
147
|
+
return typeof tooltip === "object" ? tooltip : {};
|
|
148
|
+
}
|
|
149
|
+
function getSliderTooltipMode(tooltip) {
|
|
150
|
+
if (tooltip === false) return false;
|
|
151
|
+
if (typeof tooltip === "object") return tooltip.mode ?? "hover";
|
|
152
|
+
return tooltip;
|
|
153
|
+
}
|
|
154
|
+
function useSlider(props, emitUpdate) {
|
|
155
|
+
const control = useControlState(props);
|
|
156
|
+
const bounds = computed(() => normalizeSliderBounds(props.min, props.max));
|
|
157
|
+
const nativeStep = computed(() => normalizeSliderStep(props.step));
|
|
158
|
+
const normalizedValue = computed(() => normalizeSliderValue(props.modelValue, bounds.value.min, bounds.value.max, nativeStep.value));
|
|
159
|
+
const valuePercent = computed(() => getSliderValuePercent(normalizedValue.value, bounds.value.min, bounds.value.max));
|
|
160
|
+
const formattedValue = computed(() => getFormattedSliderValue(normalizedValue.value, props.formatValue));
|
|
161
|
+
const ariaValueText = computed(() => getSliderAriaValueText(normalizedValue.value, props.ariaValueText, props.formatValue));
|
|
162
|
+
const markItems = computed(() => normalizeSliderMarks(props.marks, bounds.value.min, bounds.value.max, valuePercent.value));
|
|
163
|
+
const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));
|
|
164
|
+
const tooltipMode = computed(() => getSliderTooltipMode(props.tooltip));
|
|
165
|
+
const tooltipOpenDelay = computed(() => tooltipOptions.value.openDelay ?? 0);
|
|
166
|
+
const { isOpen: delayedTooltipOpen, open: openDelayedTooltip, closeImmediate: closeDelayedTooltip } = useDelayedOpen({
|
|
167
|
+
openDelay: () => tooltipOpenDelay.value,
|
|
168
|
+
disabled: () => tooltipMode.value !== "hover" || control.disabled
|
|
169
|
+
});
|
|
170
|
+
const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));
|
|
171
|
+
const tooltipVisible = computed(() => tooltipMode.value !== false);
|
|
172
|
+
const tooltipAlwaysVisible = computed(() => tooltipMode.value === "always");
|
|
173
|
+
const tooltipOpen = computed(() => tooltipAlwaysVisible.value || tooltipMode.value === "hover" && delayedTooltipOpen.value && !control.disabled);
|
|
174
|
+
const tooltipPlacement = computed(() => tooltipOptions.value.placement ?? (props.orientation === "vertical" ? "left" : "top"));
|
|
175
|
+
const tooltipId = computed(() => tooltipOptions.value.id);
|
|
176
|
+
const tooltipColor = computed(() => tooltipOptions.value.color);
|
|
177
|
+
const tooltipOffset = computed(() => tooltipOptions.value.offset);
|
|
178
|
+
const tooltipArrow = computed(() => tooltipOptions.value.arrow ?? false);
|
|
179
|
+
const tooltipContent = computed(() => String(formattedValue.value));
|
|
180
|
+
const rootClass = computed(() => bem("rp-slider", {
|
|
181
|
+
[`color-${props.color}`]: isSliderPresetColor(props.color),
|
|
182
|
+
[`size-${props.size}`]: Boolean(props.size),
|
|
183
|
+
vertical: props.orientation === "vertical",
|
|
184
|
+
marked: markItems.value.length > 0,
|
|
185
|
+
"marks-with-labels": hasMarkLabels.value,
|
|
186
|
+
"tooltip-always-visible": tooltipAlwaysVisible.value,
|
|
187
|
+
disabled: control.disabled,
|
|
188
|
+
invalid: control.invalid,
|
|
189
|
+
valid: control.valid && !control.invalid
|
|
190
|
+
}));
|
|
191
|
+
const trackStyle = computed(() => getSliderTrackStyle(props, valuePercent.value));
|
|
192
|
+
function onInput(e) {
|
|
193
|
+
if (control.disabled) return;
|
|
194
|
+
const input = e.target;
|
|
195
|
+
emitUpdate(normalizeSliderValue(input.valueAsNumber, bounds.value.min, bounds.value.max, nativeStep.value));
|
|
196
|
+
}
|
|
197
|
+
function openTooltip() {
|
|
198
|
+
if (tooltipMode.value === "hover" && !control.disabled) openDelayedTooltip();
|
|
199
|
+
}
|
|
200
|
+
function closeTooltip() {
|
|
201
|
+
closeDelayedTooltip();
|
|
202
|
+
}
|
|
203
|
+
function onTooltipKeydown(event) {
|
|
204
|
+
if (event.key === "Escape") closeTooltip();
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
control,
|
|
208
|
+
nativeMin: computed(() => bounds.value.min),
|
|
209
|
+
nativeMax: computed(() => bounds.value.max),
|
|
210
|
+
nativeStep,
|
|
211
|
+
rootClass,
|
|
212
|
+
normalizedValue,
|
|
213
|
+
valuePercent,
|
|
214
|
+
formattedValue,
|
|
215
|
+
ariaValueText,
|
|
216
|
+
markItems,
|
|
217
|
+
trackStyle,
|
|
218
|
+
tooltipVisible,
|
|
219
|
+
tooltipOpen,
|
|
220
|
+
tooltipPlacement,
|
|
221
|
+
tooltipId,
|
|
222
|
+
tooltipColor,
|
|
223
|
+
tooltipOffset,
|
|
224
|
+
tooltipOpenDelay,
|
|
225
|
+
tooltipArrow,
|
|
226
|
+
tooltipContent,
|
|
227
|
+
onInput,
|
|
228
|
+
openTooltip,
|
|
229
|
+
closeTooltip,
|
|
230
|
+
onTooltipKeydown
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
//#endregion
|
|
234
|
+
//#region src/components/slider/slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
235
|
+
var t0 = template("<span data-v-c9655b1d class=rp-slider__label>");
|
|
236
|
+
var t1 = template("<span data-v-c9655b1d class=rp-slider__value aria-hidden=true>");
|
|
237
|
+
var t2 = template("<span data-v-c9655b1d class=rp-slider__header>");
|
|
238
|
+
var t3 = template("<span data-v-c9655b1d class=rp-slider__mark-label> ");
|
|
239
|
+
var t4 = template("<span data-v-c9655b1d><span data-v-c9655b1d class=rp-slider__mark-dot></span>");
|
|
240
|
+
var t5 = template("<span data-v-c9655b1d class=rp-slider__marks aria-hidden=true>");
|
|
241
|
+
var t6 = template("<span data-v-c9655b1d class=rp-slider__thumb aria-hidden=true><span data-v-c9655b1d class=rp-slider__thumb-content>");
|
|
242
|
+
var t7 = template("<span data-v-c9655b1d class=rp-slider__tooltip-anchor aria-hidden=true>", 2);
|
|
243
|
+
var t8 = template("<label data-v-c9655b1d><span data-v-c9655b1d class=rp-slider__track><span data-v-c9655b1d class=rp-slider__bar aria-hidden=true></span><input data-v-c9655b1d class=rp-slider__native type=range>", 1);
|
|
244
|
+
delegateEvents("input", "focusin", "focusout", "keydown");
|
|
245
|
+
//#endregion
|
|
246
|
+
//#region src/components/slider/slider.vue
|
|
247
|
+
var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
248
|
+
name: "RpSlider",
|
|
249
|
+
__name: "slider",
|
|
250
|
+
props: {
|
|
251
|
+
id: {},
|
|
252
|
+
name: {},
|
|
253
|
+
modelValue: {},
|
|
254
|
+
min: { default: 0 },
|
|
255
|
+
max: { default: 100 },
|
|
256
|
+
step: { default: 1 },
|
|
257
|
+
marks: { default: () => [] },
|
|
258
|
+
thumbStyle: {},
|
|
259
|
+
tooltip: {
|
|
260
|
+
type: [
|
|
261
|
+
Boolean,
|
|
262
|
+
String,
|
|
263
|
+
Object
|
|
264
|
+
],
|
|
265
|
+
default: "hover"
|
|
266
|
+
},
|
|
267
|
+
formatValue: {},
|
|
268
|
+
color: {},
|
|
269
|
+
size: {},
|
|
270
|
+
orientation: { default: "horizontal" },
|
|
271
|
+
disabled: {
|
|
272
|
+
type: Boolean,
|
|
273
|
+
default: void 0
|
|
274
|
+
},
|
|
275
|
+
required: {
|
|
276
|
+
type: Boolean,
|
|
277
|
+
default: void 0
|
|
278
|
+
},
|
|
279
|
+
invalid: {
|
|
280
|
+
type: Boolean,
|
|
281
|
+
default: void 0
|
|
282
|
+
},
|
|
283
|
+
valid: {
|
|
284
|
+
type: Boolean,
|
|
285
|
+
default: void 0
|
|
286
|
+
},
|
|
287
|
+
ariaLabel: {},
|
|
288
|
+
ariaValueText: {},
|
|
289
|
+
describedby: {},
|
|
290
|
+
labelledby: {}
|
|
291
|
+
},
|
|
292
|
+
emits: ["update:modelValue"],
|
|
293
|
+
setup(__props, { emit: __emit, slots: $slots }) {
|
|
294
|
+
const props = __props;
|
|
295
|
+
const emit = __emit;
|
|
296
|
+
const { control, nativeMin, nativeMax, nativeStep, rootClass, normalizedValue, valuePercent, formattedValue, ariaValueText, markItems, trackStyle, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipId, tooltipColor, tooltipOffset, tooltipOpenDelay, tooltipArrow, tooltipContent, onInput, openTooltip, closeTooltip, onTooltipKeydown } = useSlider(props, (value) => {
|
|
297
|
+
emit("update:modelValue", value);
|
|
298
|
+
});
|
|
299
|
+
const n31 = t8();
|
|
300
|
+
const n30 = child(n31, 1);
|
|
301
|
+
const n11 = next(child(n30), 1);
|
|
302
|
+
renderEffect(() => {
|
|
303
|
+
setClass(n31, [unref(rootClass), { "rp-slider--custom-thumb": $slots.thumb }]);
|
|
304
|
+
setAttr(n31, "data-disabled", unref(control).disabled || void 0);
|
|
305
|
+
setStyle(n31, unref(trackStyle));
|
|
306
|
+
});
|
|
307
|
+
setInsertionState(n31, 0, 0);
|
|
308
|
+
createIf(() => $slots.default || $slots.value, () => {
|
|
309
|
+
const n10 = t2();
|
|
310
|
+
setInsertionState(n10, null, 0);
|
|
311
|
+
createIf(() => $slots.default, () => {
|
|
312
|
+
const n5 = t0();
|
|
313
|
+
setInsertionState(n5, null, 0);
|
|
314
|
+
createSlot("default", null, null, 1);
|
|
315
|
+
return n5;
|
|
316
|
+
});
|
|
317
|
+
setInsertionState(n10, null, 1);
|
|
318
|
+
createIf(() => $slots.value, () => {
|
|
319
|
+
const n9 = t1();
|
|
320
|
+
setInsertionState(n9, null, 0);
|
|
321
|
+
createSlot("value", {
|
|
322
|
+
value: () => unref(normalizedValue),
|
|
323
|
+
formattedValue: () => unref(formattedValue),
|
|
324
|
+
percent: () => unref(valuePercent)
|
|
325
|
+
}, null, 1);
|
|
326
|
+
return n9;
|
|
327
|
+
});
|
|
328
|
+
return n10;
|
|
329
|
+
});
|
|
330
|
+
n11.$evtinput = createInvoker((e) => unref(onInput)(e));
|
|
331
|
+
renderEffect(() => {
|
|
332
|
+
const _control = unref(control);
|
|
333
|
+
const _control_required = _control.required;
|
|
334
|
+
setProp(n11, "id", _control.id);
|
|
335
|
+
setProp(n11, "name", __props.name);
|
|
336
|
+
setValue(n11, unref(normalizedValue));
|
|
337
|
+
setProp(n11, "min", unref(nativeMin));
|
|
338
|
+
setProp(n11, "max", unref(nativeMax));
|
|
339
|
+
setProp(n11, "step", unref(nativeStep));
|
|
340
|
+
setProp(n11, "orient", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
341
|
+
setProp(n11, "disabled", _control.disabled || void 0);
|
|
342
|
+
setProp(n11, "required", _control_required || void 0);
|
|
343
|
+
setAttr(n11, "aria-label", __props.ariaLabel || void 0);
|
|
344
|
+
setAttr(n11, "aria-labelledby", _control.ariaLabelledby);
|
|
345
|
+
setAttr(n11, "aria-describedby", _control.ariaDescribedby);
|
|
346
|
+
setAttr(n11, "aria-orientation", __props.orientation === "vertical" ? "vertical" : void 0);
|
|
347
|
+
setAttr(n11, "aria-invalid", _control.invalid || void 0);
|
|
348
|
+
setAttr(n11, "aria-required", _control_required || void 0);
|
|
349
|
+
setAttr(n11, "aria-valuetext", unref(ariaValueText));
|
|
350
|
+
});
|
|
351
|
+
setInsertionState(n30, null, 2);
|
|
352
|
+
createIf(() => unref(markItems).length, () => {
|
|
353
|
+
const n20 = t5();
|
|
354
|
+
setInsertionState(n20, null, 0);
|
|
355
|
+
createFor(() => unref(markItems), (_for_item0) => {
|
|
356
|
+
const n19 = t4();
|
|
357
|
+
renderEffect(() => {
|
|
358
|
+
const _mark = _for_item0.value;
|
|
359
|
+
setClassName(n19, _mark.filled ? 1 : 0, " rp-slider__mark--filled", "rp-slider__mark");
|
|
360
|
+
setStyle(n19, _mark.style);
|
|
361
|
+
});
|
|
362
|
+
setInsertionState(n19, null, 1);
|
|
363
|
+
createIf(() => _for_item0.value.hasLabel, () => {
|
|
364
|
+
const n18 = t3();
|
|
365
|
+
const x18 = txt(n18);
|
|
366
|
+
renderEffect(() => setText(x18, toDisplayString(_for_item0.value.label)));
|
|
367
|
+
return n18;
|
|
368
|
+
});
|
|
369
|
+
return n19;
|
|
370
|
+
}, (mark) => mark.key, 9);
|
|
371
|
+
return n20;
|
|
372
|
+
});
|
|
373
|
+
setInsertionState(n30, null, 3);
|
|
374
|
+
createIf(() => $slots.thumb, () => {
|
|
375
|
+
const n25 = t6();
|
|
376
|
+
setInsertionState(child(n25), null, 0);
|
|
377
|
+
createSlot("thumb", {
|
|
378
|
+
value: () => unref(normalizedValue),
|
|
379
|
+
formattedValue: () => unref(formattedValue),
|
|
380
|
+
percent: () => unref(valuePercent)
|
|
381
|
+
}, null, 1);
|
|
382
|
+
return n25;
|
|
383
|
+
});
|
|
384
|
+
setInsertionState(n30, null, 4);
|
|
385
|
+
createIf(() => unref(tooltipVisible), () => {
|
|
386
|
+
return createComponent(tooltip_default, {
|
|
387
|
+
id: () => unref(tooltipId),
|
|
388
|
+
class: "rp-slider__tooltip",
|
|
389
|
+
content: () => unref(tooltipContent),
|
|
390
|
+
placement: () => unref(tooltipPlacement),
|
|
391
|
+
color: () => unref(tooltipColor),
|
|
392
|
+
offset: () => unref(tooltipOffset),
|
|
393
|
+
open: () => unref(tooltipOpen),
|
|
394
|
+
"open-delay": () => unref(tooltipOpenDelay),
|
|
395
|
+
arrow: () => unref(tooltipArrow),
|
|
396
|
+
decorative: ""
|
|
397
|
+
}, () => {
|
|
398
|
+
return t7();
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
on(n30, "mouseenter", (e) => unref(openTooltip)(e));
|
|
402
|
+
on(n30, "mouseleave", (e) => unref(closeTooltip)(e));
|
|
403
|
+
n30.$evtfocusin = createInvoker((e) => unref(openTooltip)(e));
|
|
404
|
+
n30.$evtfocusout = createInvoker((e) => unref(closeTooltip)(e));
|
|
405
|
+
n30.$evtkeydown = createInvoker((e) => unref(onTooltipKeydown)(e));
|
|
406
|
+
return n31;
|
|
407
|
+
}
|
|
408
|
+
}), [["__scopeId", "data-v-c9655b1d"]]);
|
|
409
|
+
//#endregion
|
|
410
|
+
export { sliderSizes as i, sliderColors as n, sliderOrientations as r, slider_default as t };
|
|
411
|
+
|
|
412
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","names":[],"sources":["../src/components/slider/types.ts","../src/components/slider/useSlider.ts","../src/components/slider/slider.vue","../src/components/slider/slider.vue"],"sourcesContent":["import type { TooltipProps } from '../tooltip/types';\n\nexport const sliderColors = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n 'neutral',\n] as const;\n\nexport const sliderSizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;\n\nexport const sliderOrientations = ['horizontal', 'vertical'] as const;\n\nexport type SliderPresetColor = (typeof sliderColors)[number];\n\nexport type SliderColor = SliderPresetColor | (string & {});\n\nexport type SliderSize = (typeof sliderSizes)[number];\n\nexport type SliderOrientation = (typeof sliderOrientations)[number];\n\nexport type SliderValueFormatter = (value: number) => string | number;\n\nexport type SliderTooltipMode = 'hover' | 'always';\n\nexport type SliderTooltipOptions = Pick<\n TooltipProps,\n 'id' | 'placement' | 'color' | 'offset' | 'openDelay' | 'arrow'\n> & {\n mode?: SliderTooltipMode;\n};\n\nexport type SliderTooltip = false | SliderTooltipMode | SliderTooltipOptions;\n\nexport type SliderMarkColor = SliderColor;\n\nexport interface SliderMark {\n value: number;\n label?: string | number;\n color?: SliderMarkColor;\n hidden?: boolean;\n}\n\nexport type SliderMarkInput = number | SliderMark;\n\nexport interface SliderThumbStyle {\n size?: number | string;\n border?: number | string;\n padding?: number | string;\n}\n\nexport interface SliderProps {\n id?: string;\n name?: string;\n modelValue: number;\n min?: number;\n max?: number;\n step?: number | 'any';\n marks?: SliderMarkInput[];\n thumbStyle?: SliderThumbStyle;\n tooltip?: SliderTooltip;\n formatValue?: SliderValueFormatter;\n color?: SliderColor;\n size?: SliderSize;\n orientation?: SliderOrientation;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n valid?: boolean;\n ariaLabel?: string;\n ariaValueText?: string | SliderValueFormatter;\n describedby?: string;\n labelledby?: string;\n}\n","import { computed, type CSSProperties } from 'vue';\nimport { useDelayedOpen } from '@/composables/useDelayedOpen';\nimport { useControlState } from '@/composables/useControlState';\nimport { bem } from '@/utils/bem';\nimport { sliderColors } from './types';\nimport type {\n SliderMark,\n SliderMarkInput,\n SliderProps,\n SliderTooltipMode,\n SliderTooltipOptions,\n} from './types';\n\ntype SliderStateProps = Readonly<\n SliderProps & {\n min: number;\n max: number;\n step: number | 'any';\n tooltip: NonNullable<SliderProps['tooltip']>;\n orientation: NonNullable<SliderProps['orientation']>;\n }\n>;\n\nconst sliderColorNames = new Set<string>(sliderColors);\n\nconst sliderMarkColorProperties = [\n '--_rp-slider-mark-color',\n '--_rp-slider-mark-label-color',\n '--_rp-slider-mark-filled-label-color',\n '--_rp-slider-mark-ring-color',\n] as const;\n\nexport function normalizeSliderValue(\n value: number,\n min: number,\n max: number,\n step: number | 'any',\n) {\n const bounds = normalizeSliderBounds(min, max);\n const safeStep = normalizeSliderStep(step);\n const safeValue = Number.isFinite(value) ? value : bounds.min;\n const clamped = Math.min(bounds.max, Math.max(bounds.min, safeValue));\n\n if (safeStep === 'any') return clamped;\n\n const steps = Math.round((clamped - bounds.min) / safeStep);\n const snapped = bounds.min + steps * safeStep;\n\n return Math.min(bounds.max, Math.max(bounds.min, Number(snapped.toFixed(10))));\n}\n\nexport function normalizeSliderBounds(min: number, max: number) {\n const safeMin = Number.isFinite(min) ? min : 0;\n const safeMax = Number.isFinite(max) ? max : safeMin;\n\n return safeMax >= safeMin ? { min: safeMin, max: safeMax } : { min: safeMax, max: safeMin };\n}\n\nexport function normalizeSliderStep(step: number | 'any') {\n return step === 'any' || (Number.isFinite(step) && step > 0) ? step : 'any';\n}\n\nexport function getSliderValuePercent(value: number, min: number, max: number) {\n if (max <= min) return 0;\n\n const percent = ((value - min) / (max - min)) * 100;\n return Math.min(100, Math.max(0, percent));\n}\n\nfunction getSliderMarkColorValue(color: SliderMark['color']) {\n if (!color) return undefined;\n\n return sliderColorNames.has(color) ? `var(--rp-color-${color})` : color;\n}\n\nfunction isSliderPresetColor(color: SliderProps['color']) {\n return Boolean(color && sliderColorNames.has(color));\n}\n\nfunction getSliderCustomColorValue(color: SliderProps['color']) {\n if (!color || isSliderPresetColor(color)) return undefined;\n\n return color;\n}\n\nfunction setSliderStyleValue(\n style: CSSProperties,\n property: `--_rp-slider-${string}`,\n value: string | undefined,\n) {\n if (value) {\n style[property] = value;\n }\n}\n\nfunction getSliderMarkStyle(percent: number, color: SliderMark['color']) {\n const style: CSSProperties = {\n '--_rp-slider-mark-position': `${percent}%`,\n };\n const colorValue = getSliderMarkColorValue(color);\n\n for (const property of sliderMarkColorProperties) {\n setSliderStyleValue(style, property, colorValue);\n }\n\n return style;\n}\n\nfunction normalizeSliderMark(mark: SliderMarkInput): SliderMark {\n return typeof mark === 'number' ? { value: mark } : mark;\n}\n\nfunction normalizeSliderMarks(\n marks: SliderMarkInput[] | undefined,\n min: number,\n max: number,\n valuePercent: number,\n) {\n return (marks ?? []).flatMap((markInput, index) => {\n const mark = normalizeSliderMark(markInput);\n if (mark.hidden) return [];\n\n const value = Number(mark.value);\n if (!Number.isFinite(value)) return [];\n\n const percent = getSliderValuePercent(value, min, max);\n\n return {\n key: `${value}-${index}`,\n value,\n label: mark.label,\n hasLabel: mark.label != null,\n filled: percent <= valuePercent,\n style: getSliderMarkStyle(percent, mark.color),\n };\n });\n}\n\nfunction getSliderLengthValue(value: number | string | undefined) {\n if (value == null || value === '') return undefined;\n if (typeof value === 'number') return Number.isFinite(value) ? `${value}px` : undefined;\n\n return value;\n}\n\nfunction getSliderBorderValue(value: number | string | undefined) {\n if (value == null || value === '') return undefined;\n if (typeof value === 'number') {\n return Number.isFinite(value)\n ? `${value}px solid var(--_rp-slider-thumb-border)`\n : undefined;\n }\n\n return value;\n}\n\nconst sliderThumbStyleProps = [\n ['--_rp-slider-thumb-size', 'size', getSliderLengthValue],\n ['--_rp-slider-thumb-border-style', 'border', getSliderBorderValue],\n ['--_rp-slider-thumb-padding', 'padding', getSliderLengthValue],\n] as const;\n\nfunction getSliderTrackStyle(props: SliderStateProps, valuePercent: number) {\n const style: CSSProperties = {\n '--_rp-slider-percent': `${valuePercent}%`,\n '--_rp-slider-ratio': `${valuePercent / 100}`,\n };\n\n setSliderStyleValue(style, '--_rp-slider-custom-color', getSliderCustomColorValue(props.color));\n\n for (const [property, propName, getValue] of sliderThumbStyleProps) {\n setSliderStyleValue(style, property, getValue(props.thumbStyle?.[propName]));\n }\n\n return style;\n}\n\nfunction getFormattedSliderValue(value: number, formatter: SliderProps['formatValue']) {\n return formatter ? formatter(value) : value;\n}\n\nfunction getSliderAriaValueText(\n value: number,\n ariaValueText: SliderProps['ariaValueText'],\n formatter: SliderProps['formatValue'],\n) {\n if (typeof ariaValueText === 'function') return String(ariaValueText(value));\n if (ariaValueText != null && ariaValueText !== '') return String(ariaValueText);\n if (formatter) return String(formatter(value));\n\n return undefined;\n}\n\nfunction getSliderTooltipOptions(\n tooltip: NonNullable<SliderProps['tooltip']>,\n): SliderTooltipOptions {\n return typeof tooltip === 'object' ? tooltip : {};\n}\n\nfunction getSliderTooltipMode(\n tooltip: NonNullable<SliderProps['tooltip']>,\n): SliderTooltipMode | false {\n if (tooltip === false) return false;\n if (typeof tooltip === 'object') return tooltip.mode ?? 'hover';\n\n return tooltip;\n}\n\nexport function useSlider(props: SliderStateProps, emitUpdate: (value: number) => void) {\n const control = useControlState(props);\n\n const bounds = computed(() => normalizeSliderBounds(props.min, props.max));\n const nativeStep = computed(() => normalizeSliderStep(props.step));\n\n const normalizedValue = computed(() =>\n normalizeSliderValue(\n props.modelValue,\n bounds.value.min,\n bounds.value.max,\n nativeStep.value,\n ),\n );\n\n const valuePercent = computed(() =>\n getSliderValuePercent(normalizedValue.value, bounds.value.min, bounds.value.max),\n );\n\n const formattedValue = computed(() =>\n getFormattedSliderValue(normalizedValue.value, props.formatValue),\n );\n\n const ariaValueText = computed(() =>\n getSliderAriaValueText(normalizedValue.value, props.ariaValueText, props.formatValue),\n );\n\n const markItems = computed(() =>\n normalizeSliderMarks(props.marks, bounds.value.min, bounds.value.max, valuePercent.value),\n );\n\n const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));\n const tooltipMode = computed(() => getSliderTooltipMode(props.tooltip));\n const tooltipOpenDelay = computed(() => tooltipOptions.value.openDelay ?? 0);\n const {\n isOpen: delayedTooltipOpen,\n open: openDelayedTooltip,\n closeImmediate: closeDelayedTooltip,\n } = useDelayedOpen({\n openDelay: () => tooltipOpenDelay.value,\n disabled: () => tooltipMode.value !== 'hover' || control.disabled,\n });\n\n const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));\n const tooltipVisible = computed(() => tooltipMode.value !== false);\n const tooltipAlwaysVisible = computed(() => tooltipMode.value === 'always');\n const tooltipOpen = computed(\n () =>\n tooltipAlwaysVisible.value ||\n (tooltipMode.value === 'hover' && delayedTooltipOpen.value && !control.disabled),\n );\n const tooltipPlacement = computed(\n () => tooltipOptions.value.placement ?? (props.orientation === 'vertical' ? 'left' : 'top'),\n );\n const tooltipId = computed(() => tooltipOptions.value.id);\n const tooltipColor = computed(() => tooltipOptions.value.color);\n const tooltipOffset = computed(() => tooltipOptions.value.offset);\n const tooltipArrow = computed(() => tooltipOptions.value.arrow ?? false);\n const tooltipContent = computed(() => String(formattedValue.value));\n\n const rootClass = computed(() =>\n bem('rp-slider', {\n [`color-${props.color}`]: isSliderPresetColor(props.color),\n [`size-${props.size}`]: Boolean(props.size),\n vertical: props.orientation === 'vertical',\n marked: markItems.value.length > 0,\n 'marks-with-labels': hasMarkLabels.value,\n 'tooltip-always-visible': tooltipAlwaysVisible.value,\n disabled: control.disabled,\n invalid: control.invalid,\n valid: control.valid && !control.invalid,\n }),\n );\n\n const trackStyle = computed<CSSProperties>(() =>\n getSliderTrackStyle(props, valuePercent.value),\n );\n\n function onInput(e: Event) {\n if (control.disabled) return;\n\n const input = e.target as HTMLInputElement;\n emitUpdate(\n normalizeSliderValue(\n input.valueAsNumber,\n bounds.value.min,\n bounds.value.max,\n nativeStep.value,\n ),\n );\n }\n\n function openTooltip() {\n if (tooltipMode.value === 'hover' && !control.disabled) openDelayedTooltip();\n }\n\n function closeTooltip() {\n closeDelayedTooltip();\n }\n\n function onTooltipKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') closeTooltip();\n }\n\n return {\n control,\n nativeMin: computed(() => bounds.value.min),\n nativeMax: computed(() => bounds.value.max),\n nativeStep,\n rootClass,\n normalizedValue,\n valuePercent,\n formattedValue,\n ariaValueText,\n markItems,\n trackStyle,\n tooltipVisible,\n tooltipOpen,\n tooltipPlacement,\n tooltipId,\n tooltipColor,\n tooltipOffset,\n tooltipOpenDelay,\n tooltipArrow,\n tooltipContent,\n onInput,\n openTooltip,\n closeTooltip,\n onTooltipKeydown,\n };\n}\n","<template>\n <label\n :class=\"[rootClass, { 'rp-slider--custom-thumb': $slots.thumb }]\"\n :data-disabled=\"control.disabled || undefined\"\n :style=\"trackStyle\"\n >\n <span v-if=\"$slots.default || $slots.value\" class=\"rp-slider__header\">\n <span v-if=\"$slots.default\" class=\"rp-slider__label\">\n <slot />\n </span>\n <span v-if=\"$slots.value\" class=\"rp-slider__value\" aria-hidden=\"true\">\n <slot\n name=\"value\"\n :value=\"normalizedValue\"\n :formatted-value=\"formattedValue\"\n :percent=\"valuePercent\"\n />\n </span>\n </span>\n <span\n class=\"rp-slider__track\"\n @mouseenter=\"openTooltip\"\n @mouseleave=\"closeTooltip\"\n @focusin=\"openTooltip\"\n @focusout=\"closeTooltip\"\n @keydown=\"onTooltipKeydown\"\n >\n <span class=\"rp-slider__bar\" aria-hidden=\"true\" />\n\n <input\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-slider__native\"\n type=\"range\"\n :value=\"normalizedValue\"\n :min=\"nativeMin\"\n :max=\"nativeMax\"\n :step=\"nativeStep\"\n :orient=\"orientation === 'vertical' ? 'vertical' : undefined\"\n :disabled=\"control.disabled || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-orientation=\"orientation === 'vertical' ? 'vertical' : undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-valuetext=\"ariaValueText\"\n @input=\"onInput\"\n />\n\n <span v-if=\"markItems.length\" class=\"rp-slider__marks\" aria-hidden=\"true\">\n <span\n v-for=\"mark in markItems\"\n :key=\"mark.key\"\n class=\"rp-slider__mark\"\n :class=\"{ 'rp-slider__mark--filled': mark.filled }\"\n :style=\"mark.style\"\n >\n <span class=\"rp-slider__mark-dot\" />\n <span v-if=\"mark.hasLabel\" class=\"rp-slider__mark-label\">\n {{ mark.label }}\n </span>\n </span>\n </span>\n\n <span v-if=\"$slots.thumb\" class=\"rp-slider__thumb\" aria-hidden=\"true\">\n <span class=\"rp-slider__thumb-content\">\n <slot\n name=\"thumb\"\n :value=\"normalizedValue\"\n :formatted-value=\"formattedValue\"\n :percent=\"valuePercent\"\n />\n </span>\n </span>\n\n <Tooltip\n v-if=\"tooltipVisible\"\n :id=\"tooltipId\"\n class=\"rp-slider__tooltip\"\n :content=\"tooltipContent\"\n :placement=\"tooltipPlacement\"\n :color=\"tooltipColor\"\n :offset=\"tooltipOffset\"\n :open=\"tooltipOpen\"\n :open-delay=\"tooltipOpenDelay\"\n :arrow=\"tooltipArrow\"\n decorative\n >\n <span class=\"rp-slider__tooltip-anchor\" aria-hidden=\"true\" />\n </Tooltip>\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport Tooltip from '../tooltip/tooltip.vue';\nimport type { SliderProps } from './types';\nimport { useSlider } from './useSlider';\n\ndefineOptions({ name: 'RpSlider' });\n\nconst props = withDefaults(defineProps<SliderProps>(), {\n min: 0,\n max: 100,\n step: 1,\n marks: () => [],\n tooltip: 'hover',\n orientation: 'horizontal',\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number];\n}>();\n\nconst {\n control,\n nativeMin,\n nativeMax,\n nativeStep,\n rootClass,\n normalizedValue,\n valuePercent,\n formattedValue,\n ariaValueText,\n markItems,\n trackStyle,\n tooltipVisible,\n tooltipOpen,\n tooltipPlacement,\n tooltipId,\n tooltipColor,\n tooltipOffset,\n tooltipOpenDelay,\n tooltipArrow,\n tooltipContent,\n onInput,\n openTooltip,\n closeTooltip,\n onTooltipKeydown,\n} = useSlider(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./slider.scss\" lang=\"scss\" scoped></style>\n","<template>\n <label\n :class=\"[rootClass, { 'rp-slider--custom-thumb': $slots.thumb }]\"\n :data-disabled=\"control.disabled || undefined\"\n :style=\"trackStyle\"\n >\n <span v-if=\"$slots.default || $slots.value\" class=\"rp-slider__header\">\n <span v-if=\"$slots.default\" class=\"rp-slider__label\">\n <slot />\n </span>\n <span v-if=\"$slots.value\" class=\"rp-slider__value\" aria-hidden=\"true\">\n <slot\n name=\"value\"\n :value=\"normalizedValue\"\n :formatted-value=\"formattedValue\"\n :percent=\"valuePercent\"\n />\n </span>\n </span>\n <span\n class=\"rp-slider__track\"\n @mouseenter=\"openTooltip\"\n @mouseleave=\"closeTooltip\"\n @focusin=\"openTooltip\"\n @focusout=\"closeTooltip\"\n @keydown=\"onTooltipKeydown\"\n >\n <span class=\"rp-slider__bar\" aria-hidden=\"true\" />\n\n <input\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-slider__native\"\n type=\"range\"\n :value=\"normalizedValue\"\n :min=\"nativeMin\"\n :max=\"nativeMax\"\n :step=\"nativeStep\"\n :orient=\"orientation === 'vertical' ? 'vertical' : undefined\"\n :disabled=\"control.disabled || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-orientation=\"orientation === 'vertical' ? 'vertical' : undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-valuetext=\"ariaValueText\"\n @input=\"onInput\"\n />\n\n <span v-if=\"markItems.length\" class=\"rp-slider__marks\" aria-hidden=\"true\">\n <span\n v-for=\"mark in markItems\"\n :key=\"mark.key\"\n class=\"rp-slider__mark\"\n :class=\"{ 'rp-slider__mark--filled': mark.filled }\"\n :style=\"mark.style\"\n >\n <span class=\"rp-slider__mark-dot\" />\n <span v-if=\"mark.hasLabel\" class=\"rp-slider__mark-label\">\n {{ mark.label }}\n </span>\n </span>\n </span>\n\n <span v-if=\"$slots.thumb\" class=\"rp-slider__thumb\" aria-hidden=\"true\">\n <span class=\"rp-slider__thumb-content\">\n <slot\n name=\"thumb\"\n :value=\"normalizedValue\"\n :formatted-value=\"formattedValue\"\n :percent=\"valuePercent\"\n />\n </span>\n </span>\n\n <Tooltip\n v-if=\"tooltipVisible\"\n :id=\"tooltipId\"\n class=\"rp-slider__tooltip\"\n :content=\"tooltipContent\"\n :placement=\"tooltipPlacement\"\n :color=\"tooltipColor\"\n :offset=\"tooltipOffset\"\n :open=\"tooltipOpen\"\n :open-delay=\"tooltipOpenDelay\"\n :arrow=\"tooltipArrow\"\n decorative\n >\n <span class=\"rp-slider__tooltip-anchor\" aria-hidden=\"true\" />\n </Tooltip>\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport Tooltip from '../tooltip/tooltip.vue';\nimport type { SliderProps } from './types';\nimport { useSlider } from './useSlider';\n\ndefineOptions({ name: 'RpSlider' });\n\nconst props = withDefaults(defineProps<SliderProps>(), {\n min: 0,\n max: 100,\n step: 1,\n marks: () => [],\n tooltip: 'hover',\n orientation: 'horizontal',\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number];\n}>();\n\nconst {\n control,\n nativeMin,\n nativeMax,\n nativeStep,\n rootClass,\n normalizedValue,\n valuePercent,\n formattedValue,\n ariaValueText,\n markItems,\n trackStyle,\n tooltipVisible,\n tooltipOpen,\n tooltipPlacement,\n tooltipId,\n tooltipColor,\n tooltipOffset,\n tooltipOpenDelay,\n tooltipArrow,\n tooltipContent,\n onInput,\n openTooltip,\n closeTooltip,\n onTooltipKeydown,\n} = useSlider(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./slider.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
|