123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { createVNode as _createVNode } from "vue";
- // Styles
- import "./VSliderTrack.css";
- // Components
- import { VSliderSymbol } from "./slider.mjs"; // Composables
- import { useBackgroundColor } from "../../composables/color.mjs";
- import { makeComponentProps } from "../../composables/component.mjs";
- import { useRounded } from "../../composables/rounded.mjs"; // Utilities
- import { computed, inject } from 'vue';
- import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
- export const makeVSliderTrackProps = propsFactory({
- start: {
- type: Number,
- required: true
- },
- stop: {
- type: Number,
- required: true
- },
- ...makeComponentProps()
- }, 'VSliderTrack');
- export const VSliderTrack = genericComponent()({
- name: 'VSliderTrack',
- props: makeVSliderTrackProps(),
- emits: {},
- setup(props, _ref) {
- let {
- slots
- } = _ref;
- const slider = inject(VSliderSymbol);
- if (!slider) throw new Error('[Vuetify] v-slider-track must be inside v-slider or v-range-slider');
- const {
- color,
- parsedTicks,
- rounded,
- showTicks,
- tickSize,
- trackColor,
- trackFillColor,
- trackSize,
- vertical,
- min,
- max,
- indexFromEnd
- } = slider;
- const {
- roundedClasses
- } = useRounded(rounded);
- const {
- backgroundColorClasses: trackFillColorClasses,
- backgroundColorStyles: trackFillColorStyles
- } = useBackgroundColor(trackFillColor);
- const {
- backgroundColorClasses: trackColorClasses,
- backgroundColorStyles: trackColorStyles
- } = useBackgroundColor(trackColor);
- const startDir = computed(() => `inset-${vertical.value ? 'block' : 'inline'}-${indexFromEnd.value ? 'end' : 'start'}`);
- const endDir = computed(() => vertical.value ? 'height' : 'width');
- const backgroundStyles = computed(() => {
- return {
- [startDir.value]: '0%',
- [endDir.value]: '100%'
- };
- });
- const trackFillWidth = computed(() => props.stop - props.start);
- const trackFillStyles = computed(() => {
- return {
- [startDir.value]: convertToUnit(props.start, '%'),
- [endDir.value]: convertToUnit(trackFillWidth.value, '%')
- };
- });
- const computedTicks = computed(() => {
- if (!showTicks.value) return [];
- const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
- return ticks.map((tick, index) => {
- const directionValue = tick.value !== min.value && tick.value !== max.value ? convertToUnit(tick.position, '%') : undefined;
- return _createVNode("div", {
- "key": tick.value,
- "class": ['v-slider-track__tick', {
- 'v-slider-track__tick--filled': tick.position >= props.start && tick.position <= props.stop,
- 'v-slider-track__tick--first': tick.value === min.value,
- 'v-slider-track__tick--last': tick.value === max.value
- }],
- "style": {
- [startDir.value]: directionValue
- }
- }, [(tick.label || slots['tick-label']) && _createVNode("div", {
- "class": "v-slider-track__tick-label"
- }, [slots['tick-label']?.({
- tick,
- index
- }) ?? tick.label])]);
- });
- });
- useRender(() => {
- return _createVNode("div", {
- "class": ['v-slider-track', roundedClasses.value, props.class],
- "style": [{
- '--v-slider-track-size': convertToUnit(trackSize.value),
- '--v-slider-tick-size': convertToUnit(tickSize.value)
- }, props.style]
- }, [_createVNode("div", {
- "class": ['v-slider-track__background', trackColorClasses.value, {
- 'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
- }],
- "style": {
- ...backgroundStyles.value,
- ...trackColorStyles.value
- }
- }, null), _createVNode("div", {
- "class": ['v-slider-track__fill', trackFillColorClasses.value],
- "style": {
- ...trackFillStyles.value,
- ...trackFillColorStyles.value
- }
- }, null), showTicks.value && _createVNode("div", {
- "class": ['v-slider-track__ticks', {
- 'v-slider-track__ticks--always-show': showTicks.value === 'always'
- }]
- }, [computedTicks.value])]);
- });
- return {};
- }
- });
- //# sourceMappingURL=VSliderTrack.mjs.map
|