import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from "vue"; // Styles import "./VSlider.css"; // Components import { VSliderThumb } from "./VSliderThumb.mjs"; import { VSliderTrack } from "./VSliderTrack.mjs"; import { makeVInputProps, VInput } from "../VInput/VInput.mjs"; import { VLabel } from "../VLabel/index.mjs"; // Composables import { makeSliderProps, useSlider, useSteps } from "./slider.mjs"; import { makeFocusProps, useFocus } from "../../composables/focus.mjs"; import { useRtl } from "../../composables/locale.mjs"; import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities import { computed, ref } from 'vue'; import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types export const makeVSliderProps = propsFactory({ ...makeFocusProps(), ...makeSliderProps(), ...makeVInputProps(), modelValue: { type: [Number, String], default: 0 } }, 'VSlider'); export const VSlider = genericComponent()({ name: 'VSlider', props: makeVSliderProps(), emits: { 'update:focused': value => true, 'update:modelValue': v => true, start: value => true, end: value => true }, setup(props, _ref) { let { slots, emit } = _ref; const thumbContainerRef = ref(); const { rtlClasses } = useRtl(); const steps = useSteps(props); const model = useProxiedModel(props, 'modelValue', undefined, value => { return steps.roundValue(value == null ? steps.min.value : value); }); const { min, max, mousePressed, roundValue, onSliderMousedown, onSliderTouchstart, trackContainerRef, position, hasLabels, readonly } = useSlider({ props, steps, onSliderStart: () => { emit('start', model.value); }, onSliderEnd: _ref2 => { let { value } = _ref2; const roundedValue = roundValue(value); model.value = roundedValue; emit('end', roundedValue); }, onSliderMove: _ref3 => { let { value } = _ref3; return model.value = roundValue(value); }, getActiveThumb: () => thumbContainerRef.value?.$el }); const { isFocused, focus, blur } = useFocus(props); const trackStop = computed(() => position(model.value)); useRender(() => { const inputProps = VInput.filterProps(props); const hasPrepend = !!(props.label || slots.label || slots.prepend); return _createVNode(VInput, _mergeProps({ "class": ['v-slider', { 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value, 'v-slider--focused': isFocused.value, 'v-slider--pressed': mousePressed.value, 'v-slider--disabled': props.disabled }, rtlClasses.value, props.class], "style": props.style }, inputProps, { "focused": isFocused.value }), { ...slots, prepend: hasPrepend ? slotProps => _createVNode(_Fragment, null, [slots.label?.(slotProps) ?? (props.label ? _createVNode(VLabel, { "id": slotProps.id.value, "class": "v-slider__label", "text": props.label }, null) : undefined), slots.prepend?.(slotProps)]) : undefined, default: _ref4 => { let { id, messagesId } = _ref4; return _createVNode("div", { "class": "v-slider__container", "onMousedown": !readonly.value ? onSliderMousedown : undefined, "onTouchstartPassive": !readonly.value ? onSliderTouchstart : undefined }, [_createVNode("input", { "id": id.value, "name": props.name || id.value, "disabled": !!props.disabled, "readonly": !!props.readonly, "tabindex": "-1", "value": model.value }, null), _createVNode(VSliderTrack, { "ref": trackContainerRef, "start": 0, "stop": trackStop.value }, { 'tick-label': slots['tick-label'] }), _createVNode(VSliderThumb, { "ref": thumbContainerRef, "aria-describedby": messagesId.value, "focused": isFocused.value, "min": min.value, "max": max.value, "modelValue": model.value, "onUpdate:modelValue": v => model.value = v, "position": trackStop.value, "elevation": props.elevation, "onFocus": focus, "onBlur": blur, "ripple": props.ripple }, { 'thumb-label': slots['thumb-label'] })]); } }); }); return {}; } }); //# sourceMappingURL=VSlider.mjs.map