UNPKG

@empathyco/x-components

Version:
191 lines (153 loc) 5.07 kB
--- title: BaseSlider --- # BaseSlider This component implements a range slider and prints the selected values. It receives a threshold prop to set the limits and uses v-model to get and set the selected values. It makes use of the nouslider library @see https://refreshless.com/nouislider/ for the slider implementation. ## Props | Name | Description | Type | Default | | ------------------------- | ----------------------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------- | | <code>threshold</code> | The threshold prop sets the limits for the slider. | <code>{ min: number; max: number }</code> | <code>() => ({ min: 0, max: Number.MAX_SAFE_INTEGER })</code> | | <code>modelValue</code> | The modelValue prop sets the initial values for the slider. | <code>{ min: number; max: number }</code> | <code></code> | | <code>contentClass</code> | Class to be able to customize slider styles. | <code>string</code> | <code>''</code> | ## Events | Event name | Properties | Description | | ----------------- | ---------- | ----------- | | update:modelValue | | ## Slots | Name | Description | Bindings<br />(name - type - description) | | -------------------- | --------------------------------------------------------------------------------- | ----------------------------------------- | | <code>default</code> | Default selected range rendering. This slot will be used by default for rendering | | ## Examples This component renders a slider and the selected values. The component needs the threshold for the slider, although is not required (If not passed, fallback is min: 0, max: Number.MAX_SAFE_INTEGER ), which are passed using the `threshold` prop and the selected range, which is passed in using the v-model. ### Default usage It is required to send the value prop which holds the selected values. ```vue live <template> <BaseSlider v-model="selectedRange" /> </template> <script> import { BaseSlider } from '@empathyco/x-components' export default { name: 'BaseSliderDemo', components: { BaseSlider, }, setup() { const selectedRange = ref({ min: 0, max: 1000 }) return { selectedRange, } }, } </script> ``` #### With threshold ```vue live <template> <BaseSlider v-model="selectedRange" :threshold="threshold" /> </template> <script> import { BaseSlider } from '@empathyco/x-components' export default { name: 'BaseSliderDemo', components: { BaseSliderDemo, }, setup() { const threshold = ref({ min: 0, max: 1000 }) const selectedRange = ref(threshold.value) return { selectedRange, threshold, } }, } </script> ``` ### Customized usage #### Overriding the slots It is possible to override the default slot to customize the layout for the selected values. ```vue live <template> <BaseSlider v-model="selectedRange" :threshold="threshold" v-slot="{ rangeSelected }"> <p class="x-base-slider__selected-min"> <span>min value</span> <span> {{ rangeSelected[0] }} </span> </p> <p class="x-base-slider__selected-max"> <span>max value</span> <span> {{ rangeSelected[1] }} </span> </p> </BaseSlider> </template> <script> import { BaseSlider } from '@empathyco/x-components' export default { name: 'BaseSliderDemo', components: { BaseSliderDemo, }, setup() { const threshold = ref({ min: 0, max: 1000 }) const selectedRange = ref(threshold.value) return { selectedRange, threshold, } }, } </script> ``` It is also possible to add inputs to complement the slider and allow to change the selected values manually. ```vue live <template> <BaseSlider v-model="selectedRange" :threshold="threshold"> <input @change="selectedRange.min = $event.target?.valueAsNumber || 0" class="x-input" name="min" type="number" :value="selectedRange.min" :aria-label="'min'" /> <input @change="selectedRange.max = $event.target?.valueAsNumber || 1000000" style="display: block" class="x-input" name="max" type="number" :value="selectedRange.max" :aria-label="'max'" /> </BaseSlider> </template> <script> import { BaseSlider } from '@empathyco/x-components' export default { name: 'BaseSliderDemo', components: { BaseSliderDemo, }, setup() { const threshold = ref({ min: 0, max: 1000 }) const selectedRange = ref(threshold.value) return { selectedRange, threshold, } }, } </script> ```