UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 37.3 kB
{"version":3,"file":"slider.vue2.mjs","sources":["../../../components/slider/slider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Renderer } from '@/components/renderer'\nimport { useFieldStore } from '@/components/form'\n\nimport { computed, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport SliderTrigger from './slider-trigger.vue'\nimport {\n createStateProp,\n emitEvent,\n useHoverDelay,\n useNameHelper,\n useProps\n} from '@vexip-ui/config'\nimport { useMoving, useSetTimeout } from '@vexip-ui/hooks'\nimport { decimalLength, throttle, toFixed } from '@vexip-ui/utils'\nimport { sliderProps } from './props'\n\nimport type { SliderMarker, SliderSlots } from './symbol'\n\nconst enum TriggerType {\n START = 0,\n END = 1\n}\n\ndefineOptions({ name: 'Slider' })\n\nconst { idFor, state, labelId, disabled, loading, validateField, getFieldValue, setFieldValue } =\n useFieldStore<number | number[]>(focus)\n\nconst _props = defineProps(sliderProps)\nconst props = useProps('slider', _props, {\n state: createStateProp(state),\n value: {\n default: () => getFieldValue() ?? 0,\n static: true\n },\n min: 0,\n max: 100,\n step: {\n default: 1,\n validator: value => value > 0\n },\n vertical: false,\n hideTip: false,\n tipTransfer: null,\n disabled: () => disabled.value,\n loading: () => loading.value,\n loadingLock: false,\n reverse: false,\n range: false,\n markers: null,\n markerOnly: false,\n tipHover: false,\n flipMarker: false,\n triggerFade: false,\n tipProps: () => ({}),\n sync: false,\n rangeDraggable: false,\n slots: () => ({})\n})\n\nconst emit = defineEmits(['update:value'])\n\nconst slots = defineSlots<SliderSlots>()\n\nconst nh = useNameHelper('slider')\nconst hoverDelay = useHoverDelay()\n\nconst { timer } = useSetTimeout()\n\nconst stepOneValue = ref([0, 0]) // 按每 step 为 1 的 value\nconst sliding = ref([false, false])\nconst triggerType = ref(TriggerType.END)\nconst hovered = ref(false)\nconst triggerShow = ref(false)\n\nconst track = ref<HTMLElement>()\nconst startTrigger = ref<InstanceType<typeof SliderTrigger>>()\nconst endTrigger = ref<InstanceType<typeof SliderTrigger>>()\n\nconst markerList = computed(() => {\n const markers = props.markers\n const list: { value: number, marker: SliderMarker }[] = []\n\n if (!markers) return list\n\n if (Array.isArray(markers)) {\n for (const raw of markers) {\n const { value, ...marker } = typeof raw === 'number' ? { value: raw } : raw\n\n if (!Number.isNaN(value)) {\n list.push({ value, marker })\n }\n }\n } else {\n for (const value of Object.keys(markers)) {\n const number = parseFloat(value)\n const marker = markers[value]\n\n if (!Number.isNaN(number)) {\n list.push({\n value: number,\n marker: typeof marker === 'string' ? { label: marker } : marker\n })\n }\n }\n }\n\n return list.sort((prev, next) => prev.value - next.value)\n})\nconst hasMarkerLabel = computed(() => !!markerList.value.find(({ marker }) => marker.label))\nconst readonly = computed(() => props.loading && props.loadingLock)\nconst canDragRange = computed(() => props.range && props.rangeDraggable)\nconst className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm(props.state)]: props.state !== 'default',\n [nh.bm('vertical')]: props.vertical,\n [nh.bm('sliding')]: sliding.value[1] || sliding.value[0],\n [nh.bm('disabled')]: props.disabled,\n [nh.bm('readonly')]: readonly.value,\n [nh.bm('loading')]: props.loading,\n [nh.bm('reverse')]: props.reverse,\n [nh.bm('with-marker')]: hasMarkerLabel.value,\n [nh.bm('flip-marker')]: props.flipMarker,\n [nh.bm('hide-trigger')]: props.triggerFade && !triggerShow.value,\n [nh.bm('range-draggable')]: canDragRange.value\n }\n})\nconst stepDigit = computed(() => decimalLength(props.step))\n// 按每 step 为 1 算的最小值\nconst stepOneMin = computed(() => Math.ceil(Math.min(props.min, props.max) / props.step))\n// 按每 step 为 1 算的最大值\nconst stepOneMax = computed(() => Math.floor(Math.max(props.min, props.max) / props.step))\nconst truthValue = computed(() => {\n return [\n toFixed(stepOneValue.value[0] * props.step, stepDigit.value),\n toFixed(stepOneValue.value[1] * props.step, stepDigit.value)\n ]\n})\nconst stepOneTotal = computed(() => stepOneMax.value - stepOneMin.value || 1)\nconst triggerPercent = computed(() => {\n return [toPercent(stepOneValue.value[0]), toPercent(stepOneValue.value[1])]\n})\nconst fillerStyle = computed(() => {\n const { vertical, reverse } = props\n\n return {\n [vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']:\n `${Math.min(triggerPercent.value[0], triggerPercent.value[1])}%`,\n [vertical ? 'height' : 'width']:\n `${Math.abs(triggerPercent.value[0] - triggerPercent.value[1])}%`\n }\n})\nconst startTriggerStyle = computed(() => {\n const { vertical, reverse } = props\n\n return {\n [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[0]}%` : '50%',\n [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[0]}%`,\n zIndex: triggerType.value === TriggerType.START ? 1 : undefined,\n transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n }\n})\nconst endTriggerStyle = computed(() => {\n const { vertical, reverse } = props\n\n return {\n [reverse ? 'bottom' : 'top']: vertical ? `${triggerPercent.value[1]}%` : '50%',\n [reverse ? 'right' : 'left']: vertical ? '50%' : `${triggerPercent.value[1]}%`,\n zIndex: triggerType.value === TriggerType.END ? 1 : undefined,\n transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n }\n})\nconst isDisabled = computed(() => props.disabled || readonly.value)\n\nconst commonSlotParams = shallowReadonly(\n reactive({\n values: truthValue,\n sliding: sliding,\n percent: triggerPercent,\n disabled: toRef(props, 'disabled'),\n loading: toRef(props, 'loading')\n })\n)\n\nconst { target: filler } = useMoving({\n disabled: computed(() => !canDragRange.value || isDisabled.value),\n onStart: (state, event) => {\n if (!track.value || event.button > 0) {\n return false\n }\n\n clearTimeout(timer.sliding)\n event.stopPropagation()\n event.preventDefault()\n\n trackRect = track.value.getBoundingClientRect()\n state.startValue = stepOneValue.value[TriggerType.START]\n state.endValue = stepOneValue.value[TriggerType.END]\n state.valueDiff = (state.endValue as number) - (state.startValue as number)\n },\n onMove: (state, event) => {\n if (!trackRect) {\n return\n }\n\n event.preventDefault()\n\n const vertical = props.vertical\n const reverse = props.reverse\n const delta = vertical ? state.deltaY : state.deltaX\n\n for (let i = 0; i < 2; ++i) {\n const type = i ? TriggerType.END : TriggerType.START\n stepOneValue.value[type] =\n (reverse ? -1 : 1) *\n (delta / trackRect[vertical ? 'height' : 'width']) *\n stepOneTotal.value +\n Number(state[i ? 'endValue' : 'startValue'])\n }\n\n verifyValue()\n\n if (stepOneValue.value[TriggerType.START] === stepOneMin.value) {\n stepOneValue.value[TriggerType.END] =\n stepOneValue.value[TriggerType.START] + (state.valueDiff as number)\n } else if (stepOneValue.value[TriggerType.END] === stepOneMax.value) {\n stepOneValue.value[TriggerType.START] =\n stepOneValue.value[TriggerType.END] - (state.valueDiff as number)\n }\n\n emitChange('input')\n },\n onEnd: () => emitChange()\n})\n\nparseValue(props.value)\nverifyValue()\n\nlet lastValue: number | number[] = props.range\n ? truthValue.value[0] > truthValue.value[1]\n ? [truthValue.value[1], truthValue.value[0]]\n : [truthValue.value[0], truthValue.value[1]]\n : truthValue.value[1]\nlet lastInputValue: number | number[] = Array.isArray(lastValue) ? [...lastValue] : lastValue\n\nwatch(\n () => props.value,\n value => {\n if (isEqualValue(lastValue, value)) {\n return\n }\n\n parseValue(value)\n verifyValue()\n }\n)\nwatch(\n () => props.step,\n () => {\n parseValue(props.value)\n verifyValue()\n }\n)\n\ndefineExpose({\n idFor,\n sliding,\n track,\n startTrigger,\n endTrigger,\n isValueInRange,\n focus,\n blur\n})\n\nfunction toPercent(value: string | number) {\n return ((parseFloat(value as string) - stepOneMin.value) / stepOneTotal.value) * 100\n}\n\nfunction parseValue(value: number | number[]) {\n if (props.range) {\n const values = Array.isArray(value) ? value : [value, 100]\n\n stepOneValue.value = [values[0] / props.step, values[1] / props.step]\n } else {\n stepOneValue.value = [stepOneMin.value, (Array.isArray(value) ? value[0] : value) / props.step]\n }\n}\n\nfunction verifyValue() {\n stepOneValue.value = stepOneValue.value.map(value => {\n let computedValue = Math.max(stepOneMin.value, Math.min(stepOneMax.value, Math.round(value)))\n\n if (props.markerOnly && markerList.value.length) {\n let nearest = Infinity\n let nearestMarker = 0\n\n for (const { value } of markerList.value) {\n const delta = Math.abs(computedValue * props.step - value)\n\n if (nearest > delta) {\n nearest = delta\n nearestMarker = value\n }\n }\n\n computedValue = nearestMarker / props.step\n }\n\n return computedValue\n })\n}\n\nfunction setTriggerFade() {\n if (hovered.value || sliding.value[0] || sliding.value[1]) return\n\n triggerShow.value = false\n}\n\nfunction handlePointerEnter() {\n clearTimeout(timer.hover)\n\n timer.hover = setTimeout(() => {\n hovered.value = true\n triggerShow.value = true\n }, hoverDelay.value)\n}\n\nfunction handlePointerLeave() {\n clearTimeout(timer.hover)\n\n timer.hover = setTimeout(() => {\n hovered.value = false\n setTriggerFade()\n }, hoverDelay.value)\n}\n\nfunction emitChange(type: 'change' | 'input' = 'change', sync = props.sync) {\n const [start, end] = truthValue.value\n const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n if (type === 'change') {\n if (isEqualValue(lastValue, value)) return\n\n lastValue = value\n\n if (!sync) {\n lastInputValue = value\n\n emit('update:value', value)\n setFieldValue(value)\n }\n\n emitEvent(props.onChange, value)\n\n if (!sync) {\n validateField()\n }\n } else {\n if (isEqualValue(lastInputValue, value)) return\n\n lastInputValue = value\n\n if (sync) {\n emit('update:value', value)\n setFieldValue(value)\n }\n\n emitEvent(props.onInput, value)\n\n if (sync) {\n validateField()\n }\n }\n}\n\nlet trackRect: DOMRect | null = null\n\nfunction computePointedValue(event: PointerEvent) {\n if (!trackRect) return\n\n const vertical = props.vertical\n const reverse = props.reverse\n const client = vertical ? event.clientY : event.clientX\n\n stepOneValue.value[triggerType.value] =\n (reverse ? -1 : 1) *\n ((client - trackRect[vertical ? (reverse ? 'bottom' : 'top') : reverse ? 'right' : 'left']) /\n trackRect[vertical ? 'height' : 'width']) *\n stepOneTotal.value +\n stepOneMin.value\n}\n\nfunction isEqualValue(prev: number | number[], current: number | number[]) {\n if (Array.isArray(prev) && Array.isArray(current)) {\n return prev[0] === current[0] && prev[1] === current[1]\n }\n\n return prev === current\n}\n\nconst throttleMove = throttle((event: PointerEvent) => {\n if (!trackRect || props.disabled) return\n\n event.preventDefault()\n\n computePointedValue(event)\n verifyValue()\n\n if (startTrigger.value) {\n startTrigger.value.updateTooltip()\n }\n\n if (endTrigger.value) {\n endTrigger.value.updateTooltip()\n }\n\n // const [start, end] = truthValue.value\n // const value = props.range ? (start > end ? [end, start] : [start, end]) : end\n\n // if (!isEqualValue(lastValue, value)) {\n // lastValue = value\n // emitEvent(props.onInput, value)\n // }\n emitChange('input')\n})\n\nfunction handleTrackDown(event: PointerEvent) {\n if (!track.value || isDisabled.value) return\n\n clearTimeout(timer.sliding)\n event.stopPropagation()\n event.preventDefault()\n\n trackRect = track.value.getBoundingClientRect()\n\n if (props.range) {\n const { vertical, reverse } = props\n const client = vertical ? event.clientY : event.clientX\n const downPercent =\n ((reverse\n ? trackRect[vertical ? 'bottom' : 'right'] - client\n : client - trackRect[vertical ? 'top' : 'left']) /\n trackRect[vertical ? 'height' : 'width']) *\n 100\n\n triggerType.value =\n Math.abs(downPercent - triggerPercent.value[0]) <\n Math.abs(downPercent - triggerPercent.value[1])\n ? TriggerType.START\n : TriggerType.END\n } else {\n triggerType.value = TriggerType.END\n }\n\n sliding.value[triggerType.value] = true\n triggerShow.value = true\n\n computePointedValue(event)\n verifyValue()\n emitChange('input')\n\n document.addEventListener('pointermove', handleMove)\n document.addEventListener('pointerup', handleMoveEnd)\n}\n\nfunction handleMove(event: PointerEvent) {\n throttleMove(event)\n}\n\nfunction handleMoveEnd() {\n trackRect = null\n\n document.removeEventListener('pointermove', handleMove)\n document.removeEventListener('pointerup', handleMoveEnd)\n\n emitChange()\n\n timer.sliding = setTimeout(() => {\n sliding.value[triggerType.value] = false\n setTriggerFade()\n }, 250)\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n if (event.cancelable) {\n event.stopPropagation()\n event.preventDefault()\n }\n}\n\nfunction getPointStyle(value: number | string) {\n const { vertical, reverse } = props\n value = toPercent(value)\n\n return {\n [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : '50%',\n [reverse ? 'right' : 'left']: vertical ? '50%' : `${value}%`,\n transform: `translate(${reverse ? '' : '-'}50%, ${reverse ? '' : '-'}50%)`\n }\n}\n\nfunction getMarkerStyle(value: number | string) {\n const { vertical, reverse } = props\n value = toPercent(value)\n\n return {\n [reverse ? 'bottom' : 'top']: vertical ? `${value}%` : undefined,\n [reverse ? 'right' : 'left']: vertical ? undefined : `${value}%`,\n transform: `translate${vertical ? 'Y' : 'X'}(${reverse ? '' : '-'}50%)`\n }\n}\n\nfunction isValueInRange(value: number | string) {\n const number = parseFloat(value as string)\n\n if (Number.isNaN(number)) return false\n\n if (props.range) {\n const min = Math.min(truthValue.value[0], truthValue.value[1])\n const max = Math.max(truthValue.value[0], truthValue.value[1])\n\n return number >= min && number <= max\n } else {\n return number <= truthValue.value[1]\n }\n}\n\nfunction adjustValue(type: TriggerType, delta: number, emitEvent = false) {\n stepOneValue.value[type] += delta\n\n verifyValue()\n emitEvent && emitChange()\n}\n\nfunction handlePlus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n if (isDisabled.value) return\n\n if (props.markerOnly || extra === 'alt') {\n if (!markerList.value.length) return\n\n const value = truthValue.value[type]\n\n for (const { value: markerValue } of markerList.value) {\n if (markerValue > value) {\n stepOneValue.value[type] = markerValue\n break\n }\n }\n\n emitChange()\n } else {\n adjustValue(type, extra === 'shift' ? 5 : extra === 'ctrl' ? 20 : 1, true)\n }\n}\n\nfunction handleMinus(type: TriggerType, extra: 'ctrl' | 'shift' | 'alt') {\n if (isDisabled.value) return\n\n if (props.markerOnly || extra === 'alt') {\n if (!markerList.value.length) return\n\n const value = truthValue.value[type]\n\n for (let i = markerList.value.length - 1; i >= 0; --i) {\n const { value: markerValue } = markerList.value[i]\n\n if (markerValue < value) {\n stepOneValue.value[type] = markerValue\n break\n }\n }\n\n emitChange()\n } else {\n adjustValue(type, extra === 'shift' ? -5 : extra === 'ctrl' ? -20 : -1)\n }\n}\n\nfunction focus(options?: FocusOptions) {\n ;(startTrigger.value || endTrigger.value)?.focus(options)\n}\n\nfunction blur() {\n ;(startTrigger.value || endTrigger.value)?.blur()\n}\n</script>\n\n<template>\n <div\n :id=\"idFor\"\n :class=\"className\"\n tabindex=\"-1\"\n role=\"group\"\n :aria-labelledby=\"labelId\"\n @pointerdown=\"handleTrackDown\"\n @pointerenter=\"handlePointerEnter\"\n @pointerleave=\"handlePointerLeave\"\n @touchstart=\"disableEvent\"\n >\n <div :class=\"nh.be('container')\">\n <div ref=\"track\" :class=\"nh.be('track')\"></div>\n <slot name=\"filler\" v-bind=\"commonSlotParams\">\n <Renderer :renderer=\"props.slots.filler\" :data=\"commonSlotParams\">\n <div ref=\"filler\" :class=\"nh.be('filler')\" :style=\"fillerStyle\">\n <div :class=\"nh.be('filler-inner')\"></div>\n </div>\n </Renderer>\n </slot>\n <template v-if=\"markerList.length\">\n <div :class=\"nh.be('points')\">\n <div\n v-for=\"{ value, marker } in markerList\"\n :key=\"value\"\n :class=\"[nh.be('point'), isValueInRange(value) && nh.bem('point', 'in-range')]\"\n :style=\"getPointStyle(value)\"\n >\n <slot\n name=\"point\"\n v-bind=\"commonSlotParams\"\n :marker=\"marker\"\n :marker-value=\"value\"\n :in-range=\"isValueInRange(value)\"\n >\n <Renderer\n :renderer=\"props.slots.point\"\n :data=\"{\n ...commonSlotParams,\n marker,\n markerValue: value,\n inRange: isValueInRange(value)\n }\"\n >\n <span :class=\"nh.be('dot')\"></span>\n </Renderer>\n </slot>\n </div>\n </div>\n <div :class=\"nh.be('markers')\">\n <template v-for=\"{ value, marker } in markerList\" :key=\"value\">\n <div\n v-bind=\"marker.attrs\"\n :class=\"[nh.be('marker'), marker.class]\"\n :style=\"[getMarkerStyle(value), marker.style as any]\"\n >\n <slot\n name=\"marker\"\n v-bind=\"commonSlotParams\"\n :marker=\"marker\"\n :marker-value=\"value\"\n :in-range=\"isValueInRange(value)\"\n >\n <Renderer\n :renderer=\"props.slots.marker\"\n :data=\"{\n ...commonSlotParams,\n marker,\n markerValue: value,\n inRange: isValueInRange(value)\n }\"\n >\n {{ marker.label }}\n </Renderer>\n </slot>\n </div>\n </template>\n </div>\n </template>\n <SliderTrigger\n v-if=\"props.range\"\n ref=\"startTrigger\"\n :value=\"truthValue[0]\"\n :tip-transfer=\"props.tipTransfer\"\n :hide-tip=\"props.hideTip\"\n :vertical=\"props.vertical\"\n :min=\"props.min\"\n :max=\"props.max\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n :reverse=\"props.reverse\"\n :sliding=\"sliding[0]\"\n :tip-hover=\"props.tipHover\"\n :style=\"startTriggerStyle\"\n :tip-props=\"props.tipProps\"\n @key-plus=\"handlePlus(0, $event)\"\n @key-minus=\"handleMinus(0, $event)\"\n >\n <slot\n v-if=\"slots.trigger || props.slots.trigger\"\n name=\"trigger\"\n type=\"start\"\n :value=\"truthValue[0]\"\n :sliding=\"sliding[0]\"\n :percent=\"triggerPercent[0]\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n >\n <Renderer\n :renderer=\"props.slots.trigger\"\n :data=\"{\n type: 'start',\n value: truthValue[0],\n sliding: sliding[0],\n percent: triggerPercent[0],\n disabled: props.disabled,\n loading: props.loading\n }\"\n ></Renderer>\n </slot>\n <template v-if=\"slots.tip || props.slots.tip\" #tip>\n <slot\n name=\"tip\"\n type=\"start\"\n :value=\"truthValue[0]\"\n :sliding=\"sliding[0]\"\n :percent=\"triggerPercent[0]\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n >\n <Renderer\n :renderer=\"props.slots.tip\"\n :data=\"{\n type: 'start',\n value: truthValue[0],\n sliding: sliding[0],\n percent: triggerPercent[0],\n disabled: props.disabled,\n loading: props.loading\n }\"\n >\n {{ truthValue[0] }}\n </Renderer>\n </slot>\n </template>\n </SliderTrigger>\n <SliderTrigger\n ref=\"endTrigger\"\n :value=\"truthValue[1]\"\n :tip-transfer=\"props.tipTransfer\"\n :hide-tip=\"props.hideTip\"\n :vertical=\"props.vertical\"\n :min=\"props.min\"\n :max=\"props.max\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n :reverse=\"props.reverse\"\n :sliding=\"sliding[1]\"\n :tip-hover=\"props.tipHover\"\n :style=\"endTriggerStyle\"\n :tip-props=\"props.tipProps\"\n @key-plus=\"handlePlus(1, $event)\"\n @key-minus=\"handleMinus(1, $event)\"\n >\n <slot\n v-if=\"slots.trigger || props.slots.trigger\"\n name=\"trigger\"\n type=\"end\"\n :value=\"truthValue[1]\"\n :sliding=\"sliding[1]\"\n :percent=\"triggerPercent[1]\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n >\n <Renderer\n :renderer=\"props.slots.trigger\"\n :data=\"{\n type: 'end',\n value: truthValue[1],\n sliding: sliding[1],\n percent: triggerPercent[1],\n disabled: props.disabled,\n loading: props.loading\n }\"\n ></Renderer>\n </slot>\n <template v-if=\"slots.tip || props.slots.tip\" #tip>\n <slot\n name=\"tip\"\n type=\"end\"\n :value=\"truthValue[1]\"\n :sliding=\"sliding[1]\"\n :percent=\"triggerPercent[1]\"\n :disabled=\"props.disabled\"\n :loading=\"props.loading\"\n >\n <Renderer\n :renderer=\"props.slots.tip\"\n :data=\"{\n type: 'end',\n value: truthValue[1],\n sliding: sliding[1],\n percent: triggerPercent[1],\n disabled: props.disabled,\n loading: props.loading\n }\"\n >\n {{ truthValue[1] }}\n </Renderer>\n </slot>\n </template>\n </SliderTrigger>\n </div>\n </div>\n</template>\n"],"names":["idFor","state","labelId","disabled","loading","validateField","getFieldValue","setFieldValue","useFieldStore","focus","props","useProps","__props","createStateProp","value","emit","__emit","slots","_useSlots","nh","useNameHelper","hoverDelay","useHoverDelay","timer","useSetTimeout","stepOneValue","ref","sliding","triggerType","hovered","triggerShow","track","startTrigger","endTrigger","markerList","computed","markers","list","raw","marker","number","prev","next","hasMarkerLabel","readonly","canDragRange","className","stepDigit","decimalLength","stepOneMin","stepOneMax","truthValue","toFixed","stepOneTotal","triggerPercent","toPercent","fillerStyle","vertical","reverse","startTriggerStyle","endTriggerStyle","isDisabled","commonSlotParams","shallowReadonly","reactive","toRef","filler","useMoving","event","trackRect","delta","i","type","verifyValue","emitChange","parseValue","lastValue","lastInputValue","watch","isEqualValue","__expose","isValueInRange","blur","values","computedValue","nearest","nearestMarker","setTriggerFade","handlePointerEnter","handlePointerLeave","sync","start","end","emitEvent","computePointedValue","client","current","throttleMove","throttle","handleTrackDown","downPercent","handleMove","handleMoveEnd","disableEvent","getPointStyle","getMarkerStyle","min","max","adjustValue","handlePlus","extra","markerValue","handleMinus","options","_a"],"mappings":"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"}