123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 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,
- "name": props.name
- }, {
- 'thumb-label': slots['thumb-label']
- })]);
- }
- });
- });
- return {};
- }
- });
- //# sourceMappingURL=VSlider.mjs.map
|