UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 8.97 kB
{"version":3,"file":"VSlider.mjs","names":["filterInputProps","makeVInputProps","VInput","VLabel","VSliderThumb","VSliderTrack","makeFocusProps","useFocus","makeSliderProps","useSlider","useProxiedModel","computed","ref","genericComponent","useRender","VSlider","name","props","modelValue","type","Number","String","default","emits","value","v","setup","slots","thumbContainerRef","min","max","mousePressed","roundValue","onSliderMousedown","onSliderTouchstart","trackContainerRef","position","hasLabels","readonly","handleSliderMouseUp","newValue","model","handleMouseMove","getActiveThumb","$el","undefined","parseFloat","isFocused","focus","blur","trackStop","inputProps","_","hasPrepend","label","prepend","disabled","slotProps","id","messagesId","elevation"],"sources":["../../../src/components/VSlider/VSlider.tsx"],"sourcesContent":["// Styles\nimport './VSlider.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { VSliderThumb } from './VSliderThumb'\nimport { VSliderTrack } from './VSliderTrack'\n\n// Composables\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { makeSliderProps, useSlider } from './slider'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { MakeSlots } from '@/util'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VSliderSlots = VInputSlots & MakeSlots<{\n 'tick-label': []\n 'thumb-label': []\n}>\n\nexport const VSlider = genericComponent<VSliderSlots>()({\n name: 'VSlider',\n\n props: {\n ...makeFocusProps(),\n ...makeSliderProps(),\n ...makeVInputProps(),\n\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n },\n\n emits: {\n 'update:focused': (value: boolean) => true,\n 'update:modelValue': (v: number) => true,\n },\n\n setup (props, { slots }) {\n const thumbContainerRef = ref()\n\n const {\n min,\n max,\n mousePressed,\n roundValue,\n onSliderMousedown,\n onSliderTouchstart,\n trackContainerRef,\n position,\n hasLabels,\n readonly,\n } = useSlider({\n props,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleSliderMouseUp: newValue => model.value = roundValue(newValue),\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleMouseMove: newValue => model.value = roundValue(newValue),\n getActiveThumb: () => thumbContainerRef.value?.$el,\n })\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n v => {\n const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v\n\n return roundValue(value)\n },\n )\n\n const { isFocused, focus, blur } = useFocus(props)\n const trackStop = computed(() => position(model.value))\n\n useRender(() => {\n const [inputProps, _] = filterInputProps(props)\n const hasPrepend = !!(props.label || slots.label || slots.prepend)\n\n return (\n <VInput\n class={[\n 'v-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n ]}\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n prepend: hasPrepend ? slotProps => (\n <>\n { slots.label?.(slotProps) ?? props.label\n ? (\n <VLabel\n id={ slotProps.id }\n class=\"v-slider__label\"\n text={ props.label }\n />\n ) : undefined\n }\n\n { slots.prepend?.(slotProps) }\n </>\n ) : undefined,\n default: ({ id, messagesId }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ !readonly.value ? onSliderMousedown : undefined }\n onTouchstartPassive={ !readonly.value ? onSliderTouchstart : undefined }\n >\n <input\n id={ id.value }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ 0 }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ thumbContainerRef }\n aria-describedby={ messagesId.value }\n focused={ isFocused.value }\n min={ min.value }\n max={ max.value }\n modelValue={ model.value }\n onUpdate:modelValue={ v => (model.value = v) }\n position={ trackStop.value }\n elevation={ props.elevation }\n onFocus={ focus }\n onBlur={ blur }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VSlider = InstanceType<typeof VSlider>\n"],"mappings":"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"}