ropav 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -51
- package/dist/_plugin-vue_export-helper.js +1 -11
- package/dist/accordion.css +112 -0
- package/dist/accordion.js +360 -0
- package/dist/accordion.js.map +1 -0
- package/dist/badge.css +169 -0
- package/dist/badge.js +103 -0
- package/dist/badge.js.map +1 -0
- package/dist/base.css +21 -0
- package/dist/bem.js +11 -0
- package/dist/bem.js.map +1 -0
- package/dist/button-group.css +50 -0
- package/dist/button-group.js +50 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.css +72 -42
- package/dist/button.js +43 -32
- package/dist/button.js.map +1 -1
- package/dist/card.js +2 -1
- package/dist/card.js.map +1 -1
- package/dist/checkbox.css +105 -102
- package/dist/checkbox.js +20 -7
- package/dist/checkbox.js.map +1 -1
- package/dist/collapse.css +32 -0
- package/dist/collapse.js +68 -0
- package/dist/collapse.js.map +1 -0
- package/dist/componentColors.js +22 -0
- package/dist/componentColors.js.map +1 -0
- package/dist/components/accordion/accordion-item.d.ts +40 -0
- package/dist/components/accordion/accordion.d.ts +23 -0
- package/dist/components/accordion/index.d.ts +4 -0
- package/dist/components/accordion/index.js +2 -0
- package/dist/components/accordion/types.d.ts +100 -0
- package/dist/components/accordion/useAccordion.d.ts +3 -0
- package/dist/components/badge/badge.d.ts +25 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/types.d.ts +16 -0
- package/dist/components/badge/useBadgeColor.d.ts +8 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/types.d.ts +2 -1
- package/dist/components/button/useButtonColor.d.ts +13 -0
- package/dist/components/button-group/button-group.d.ts +21 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/button-group/index.js +2 -0
- package/dist/components/button-group/types.d.ts +10 -0
- package/dist/components/checkbox/types.d.ts +2 -1
- package/dist/components/checkbox/useCheckbox.d.ts +4 -0
- package/dist/components/collapse/collapse.d.ts +36 -0
- package/dist/components/collapse/index.d.ts +3 -0
- package/dist/components/collapse/index.js +3 -0
- package/dist/components/collapse/types.d.ts +76 -0
- package/dist/components/collapse/useCollapse.d.ts +2 -0
- package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +16 -0
- package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +23 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +26 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/dropdown-menu/index.js +2 -0
- package/dist/components/dropdown-menu/types.d.ts +104 -0
- package/dist/components/dropdown-menu/useDropdownMenu.d.ts +32 -0
- package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +30 -0
- package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +28 -0
- package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +24 -0
- package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +51 -0
- package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +16 -0
- package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -0
- package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +18 -0
- package/dist/components/field/field.d.ts +2 -2
- package/dist/components/field/useField.d.ts +16 -0
- package/dist/components/input/useInput.d.ts +8 -0
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/modal.d.ts +42 -0
- package/dist/components/modal/types.d.ts +32 -0
- package/dist/components/modal/useModal.d.ts +29 -0
- package/dist/components/overlay/index.d.ts +2 -0
- package/dist/components/overlay/index.js +2 -0
- package/dist/components/overlay/overlay.d.ts +19 -0
- package/dist/components/overlay/types.d.ts +12 -0
- package/dist/components/overlay/useOverlay.d.ts +7 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/index.js +2 -0
- package/dist/components/popover/popover.d.ts +43 -0
- package/dist/components/popover/types.d.ts +40 -0
- package/dist/components/popover/usePopover.d.ts +20 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.js +2 -0
- package/dist/components/progress/progress.d.ts +27 -0
- package/dist/components/progress/types.d.ts +24 -0
- package/dist/components/progress/useProgress.d.ts +28 -0
- package/dist/components/radio/types.d.ts +2 -1
- package/dist/components/radio/useRadio.d.ts +4 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/index.js +2 -0
- package/dist/components/slider/slider.d.ts +35 -0
- package/dist/components/slider/types.d.ts +50 -0
- package/dist/components/slider/useSlider.d.ts +50 -0
- package/dist/components/switch/types.d.ts +2 -1
- package/dist/components/switch/useSwitch.d.ts +3 -0
- package/dist/components/tabs/index.d.ts +6 -0
- package/dist/components/tabs/index.js +2 -0
- package/dist/components/tabs/tabs-content.d.ts +24 -0
- package/dist/components/tabs/tabs-list.d.ts +26 -0
- package/dist/components/tabs/tabs-trigger.d.ts +29 -0
- package/dist/components/tabs/tabs.d.ts +31 -0
- package/dist/components/tabs/types.d.ts +160 -0
- package/dist/components/tabs/useTabs.d.ts +5 -0
- package/dist/components/textarea/index.d.ts +1 -1
- package/dist/components/textarea/types.d.ts +5 -0
- package/dist/components/textarea/useTextarea.d.ts +2 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/tooltip.d.ts +27 -0
- package/dist/components/tooltip/types.d.ts +29 -0
- package/dist/components/tooltip/useTooltip.d.ts +17 -0
- package/dist/dropdown-menu.css +159 -0
- package/dist/dropdown-menu.js +903 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/field.css +8 -8
- package/dist/field.js +68 -50
- package/dist/field.js.map +1 -1
- package/dist/icon-button.css +82 -49
- package/dist/icon-button.js +15 -10
- package/dist/icon-button.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +17 -1
- package/dist/input.css +25 -25
- package/dist/input.js +57 -38
- package/dist/input.js.map +1 -1
- package/dist/modal.css +134 -0
- package/dist/modal.js +433 -0
- package/dist/modal.js.map +1 -0
- package/dist/overlay.css +28 -0
- package/dist/overlay.js +84 -0
- package/dist/overlay.js.map +1 -0
- package/dist/popover.css +75 -0
- package/dist/popover.js +367 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.css +125 -0
- package/dist/progress.js +178 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio.css +83 -83
- package/dist/radio.js +21 -14
- package/dist/radio.js.map +1 -1
- package/dist/select.css +3 -1
- package/dist/select.js +15 -37
- package/dist/select.js.map +1 -1
- package/dist/slider.css +438 -0
- package/dist/slider.js +413 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.css +77 -77
- package/dist/switch.js +17 -7
- package/dist/switch.js.map +1 -1
- package/dist/tabs.css +279 -0
- package/dist/tabs.js +515 -0
- package/dist/tabs.js.map +1 -0
- package/dist/textarea.css +33 -26
- package/dist/textarea.js +108 -16
- package/dist/textarea.js.map +1 -1
- package/dist/tooltip.css +136 -0
- package/dist/tooltip.js +385 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/useButtonColor.js +33 -0
- package/dist/useButtonColor.js.map +1 -0
- package/dist/useClickOutside.js +26 -0
- package/dist/useClickOutside.js.map +1 -0
- package/dist/useCollapse.js +94 -0
- package/dist/useCollapse.js.map +1 -0
- package/dist/useRequiredInject.js +11 -0
- package/dist/useRequiredInject.js.map +1 -0
- package/dist/x.js +14 -0
- package/dist/x.js.map +1 -0
- package/package.json +52 -4
- package/src/styles/_mixins.scss +17 -0
- package/src/styles/_utilities.scss +13 -0
- package/src/styles/base.scss +1 -0
- package/dist/_plugin-vue_export-helper.js.map +0 -1
- package/dist/loader-circle.js +0 -14
- package/dist/loader-circle.js.map +0 -1
package/dist/select.js
CHANGED
|
@@ -1,49 +1,20 @@
|
|
|
1
1
|
import './select.css';
|
|
2
|
-
import {
|
|
2
|
+
import { t as bem } from "./bem.js";
|
|
3
|
+
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
3
4
|
import { t as useControlState } from "./useControlState.js";
|
|
4
|
-
import {
|
|
5
|
+
import { t as useClickOutside } from "./useClickOutside.js";
|
|
6
|
+
import { t as x_default } from "./x.js";
|
|
7
|
+
import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSelector, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, markRaw, next, nextTick, on, ref, renderEffect, setAttr, setClass, setClassName, setInsertionState, setProp, setText, setValue, template, toDisplayString, txt, unref, useId, withModifiers, withVaporModifiers } from "vue";
|
|
5
8
|
//#region ~icons/lucide/chevrons-up-down
|
|
6
|
-
var t0$
|
|
7
|
-
function render$1(_ctx) {
|
|
8
|
-
return t0$2();
|
|
9
|
-
}
|
|
10
|
-
var chevrons_up_down_default = markRaw(defineVaporComponent({
|
|
11
|
-
name: "lucide-chevrons-up-down",
|
|
12
|
-
render: render$1
|
|
13
|
-
}));
|
|
14
|
-
//#endregion
|
|
15
|
-
//#region ~icons/lucide/x
|
|
16
|
-
var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"M18 6L6 18M6 6l12 12\">", 3, 1);
|
|
9
|
+
var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m7 15l5 5l5-5M7 9l5-5l5 5\">", 3, 1);
|
|
17
10
|
function render(_ctx) {
|
|
18
11
|
return t0$1();
|
|
19
12
|
}
|
|
20
|
-
var
|
|
21
|
-
name: "lucide-
|
|
13
|
+
var chevrons_up_down_default = markRaw(defineVaporComponent({
|
|
14
|
+
name: "lucide-chevrons-up-down",
|
|
22
15
|
render
|
|
23
16
|
}));
|
|
24
17
|
//#endregion
|
|
25
|
-
//#region src/composables/useClickOutside.ts
|
|
26
|
-
function useClickOutside(target, active, callback) {
|
|
27
|
-
let isListening = false;
|
|
28
|
-
let stopWatch;
|
|
29
|
-
function handler(e) {
|
|
30
|
-
if (target.value && !target.value.contains(e.target)) callback();
|
|
31
|
-
}
|
|
32
|
-
function setListening(value) {
|
|
33
|
-
if (typeof document === "undefined" || value === isListening) return;
|
|
34
|
-
isListening = value;
|
|
35
|
-
if (value) document.addEventListener("click", handler, true);
|
|
36
|
-
else document.removeEventListener("click", handler, true);
|
|
37
|
-
}
|
|
38
|
-
onMounted(() => {
|
|
39
|
-
stopWatch = watch(active, setListening, { immediate: true });
|
|
40
|
-
});
|
|
41
|
-
onBeforeUnmount(() => {
|
|
42
|
-
stopWatch?.();
|
|
43
|
-
setListening(false);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
//#endregion
|
|
47
18
|
//#region src/composables/useListNavigation.ts
|
|
48
19
|
function useListNavigation(options) {
|
|
49
20
|
const localFocusedIndex = ref(-1);
|
|
@@ -215,6 +186,13 @@ function useSelect(props, emitUpdate) {
|
|
|
215
186
|
navigation.focusLast();
|
|
216
187
|
}
|
|
217
188
|
break;
|
|
189
|
+
case "Delete":
|
|
190
|
+
case "Backspace":
|
|
191
|
+
if (canClear.value) {
|
|
192
|
+
e.preventDefault();
|
|
193
|
+
clearSelection();
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
218
196
|
case "Escape":
|
|
219
197
|
e.preventDefault();
|
|
220
198
|
close();
|
package/dist/select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","names":[],"sources":["../src/composables/useClickOutside.ts","../src/composables/useListNavigation.ts","../src/components/select/useSelect.ts","../src/components/select/select.vue","../src/components/select/select.vue"],"sourcesContent":["import { watch, onMounted, onBeforeUnmount, type Ref } from 'vue';\n\nexport function useClickOutside(\n target: Ref<HTMLElement | null>,\n active: Ref<boolean>,\n callback: () => void,\n) {\n let isListening = false;\n let stopWatch: (() => void) | undefined;\n\n function handler(e: MouseEvent) {\n if (target.value && !target.value.contains(e.target as Node)) {\n callback();\n }\n }\n\n function setListening(value: boolean) {\n if (typeof document === 'undefined' || value === isListening) return;\n isListening = value;\n\n if (value) {\n document.addEventListener('click', handler, true);\n } else {\n document.removeEventListener('click', handler, true);\n }\n }\n\n onMounted(() => {\n stopWatch = watch(active, setListening, { immediate: true });\n });\n\n onBeforeUnmount(() => {\n stopWatch?.();\n setListening(false);\n });\n}\n","import { computed, ref } from 'vue';\n\nexport interface ListNavigationItem {\n disabled?: boolean;\n}\n\nexport interface UseListNavigationOptions<T extends ListNavigationItem> {\n items: () => T[];\n isSelected?: (item: T) => boolean;\n loop?: boolean;\n}\n\nexport function useListNavigation<T extends ListNavigationItem>(\n options: UseListNavigationOptions<T>,\n) {\n const localFocusedIndex = ref(-1);\n const loop = options.loop ?? true;\n\n const enabledIndexes = computed(() =>\n options\n .items()\n .map((item, index) => (item.disabled ? -1 : index))\n .filter((index) => index >= 0),\n );\n\n function resetFocus() {\n localFocusedIndex.value = -1;\n }\n\n function setNearest(index: number, direction: 1 | -1) {\n const indexes = enabledIndexes.value;\n if (indexes.length === 0) {\n resetFocus();\n return;\n }\n\n if (options.items()[index] && !options.items()[index]?.disabled) {\n localFocusedIndex.value = index;\n return;\n }\n\n let next: number | undefined;\n if (direction === 1) {\n next = indexes.find((i) => i > index);\n } else {\n for (let i = indexes.length - 1; i >= 0; i -= 1) {\n const candidate = indexes[i]!;\n if (candidate < index) {\n next = candidate;\n break;\n }\n }\n }\n\n if (next !== undefined) {\n localFocusedIndex.value = next;\n } else if (loop) {\n localFocusedIndex.value = direction === 1 ? indexes[0]! : indexes[indexes.length - 1]!;\n }\n }\n\n function focusSelected() {\n const items = options.items();\n const selectedIndex = options.isSelected\n ? items.findIndex((item) => options.isSelected!(item) && !item.disabled)\n : -1;\n if (selectedIndex >= 0) {\n localFocusedIndex.value = selectedIndex;\n } else {\n focusFirst();\n }\n }\n\n function focusFirst() {\n const first = enabledIndexes.value[0];\n localFocusedIndex.value = first ?? -1;\n }\n\n function focusLast() {\n const indexes = enabledIndexes.value;\n localFocusedIndex.value = indexes[indexes.length - 1] ?? -1;\n }\n\n function moveFocus(delta: 1 | -1) {\n if (localFocusedIndex.value < 0) {\n if (delta === 1) {\n focusFirst();\n } else {\n focusLast();\n }\n return;\n }\n setNearest(localFocusedIndex.value + delta, delta);\n }\n\n return {\n focusedIndex: localFocusedIndex,\n resetFocus,\n focusSelected,\n focusFirst,\n focusLast,\n moveFocus,\n };\n}\n","import { computed, nextTick, ref, useId } from 'vue';\nimport { useClickOutside } from '@/composables/useClickOutside';\nimport { useControlState } from '@/composables/useControlState';\nimport { useListNavigation } from '@/composables/useListNavigation';\nimport { bem } from '@/utils/bem';\nimport type { SelectOption, SelectProps } from './types';\n\ntype SelectValue = string | number | null;\n\nfunction hasSelectValue(value: SelectValue) {\n return value != null && value !== '';\n}\n\nfunction getSelectDisplayLabel(options: SelectOption[] | undefined, value: SelectValue) {\n if (!hasSelectValue(value)) return '';\n return options?.find((option) => option.value === value)?.label ?? '';\n}\n\nfunction getSelectActiveDescendantId(baseId: string, focusedIndex: number) {\n return focusedIndex < 0 ? undefined : `${baseId}-option-${focusedIndex}`;\n}\n\nexport function useSelect(props: Readonly<SelectProps>, emitUpdate: (value: SelectValue) => void) {\n const selectRef = ref<HTMLElement | null>(null);\n const triggerRef = ref<HTMLElement | null>(null);\n const isOpen = ref(false);\n\n const selectId = useId();\n const listboxId = `${selectId}-listbox`;\n\n const control = useControlState(props);\n const visibleOptions = computed(() => props.options ?? []);\n\n const navigation = useListNavigation<SelectOption>({\n items: () => visibleOptions.value,\n isSelected: (item) => item.value === props.modelValue,\n });\n\n const focusedIndex = navigation.focusedIndex;\n const activeDescendantId = computed(() =>\n getSelectActiveDescendantId(selectId, focusedIndex.value),\n );\n\n const rootClass = computed(() =>\n bem('rp-select', {\n open: isOpen.value,\n [`radius-${props.radius}`]: Boolean(props.radius),\n disabled: control.disabled,\n invalid: control.invalid,\n }),\n );\n\n const hasValue = computed(() => hasSelectValue(props.modelValue));\n const displayLabel = computed(() => getSelectDisplayLabel(props.options, props.modelValue));\n const canClear = computed(() =>\n Boolean(props.clearable && hasValue.value && !control.disabled),\n );\n\n function focusTrigger() {\n nextTick(() => triggerRef.value?.focus());\n }\n\n function open() {\n if (control.disabled || isOpen.value) return;\n isOpen.value = true;\n navigation.focusSelected();\n }\n\n function close() {\n isOpen.value = false;\n navigation.resetFocus();\n }\n\n function toggle() {\n if (control.disabled) return;\n if (isOpen.value) {\n close();\n focusTrigger();\n } else {\n open();\n }\n }\n\n function selectOption(option: SelectOption) {\n if (option.disabled) return;\n emitUpdate(option.value);\n close();\n focusTrigger();\n }\n\n function clearSelection() {\n if (!canClear.value) return;\n emitUpdate(null);\n close();\n focusTrigger();\n }\n\n function onOptionMouseenter(option: SelectOption, index: number) {\n if (!option.disabled) focusedIndex.value = index;\n }\n\n function selectFocusedOption() {\n if (focusedIndex.value < 0 || focusedIndex.value >= visibleOptions.value.length) return;\n selectOption(visibleOptions.value[focusedIndex.value]!);\n }\n\n function onTriggerKeydown(e: KeyboardEvent) {\n if (control.disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (!isOpen.value) open();\n else selectFocusedOption();\n break;\n case ' ':\n e.preventDefault();\n if (!isOpen.value) open();\n else selectFocusedOption();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen.value) open();\n else navigation.moveFocus(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen.value) {\n open();\n navigation.focusLast();\n } else {\n navigation.moveFocus(-1);\n }\n break;\n case 'Home':\n if (isOpen.value) {\n e.preventDefault();\n navigation.focusFirst();\n }\n break;\n case 'End':\n if (isOpen.value) {\n e.preventDefault();\n navigation.focusLast();\n }\n break;\n case 'Escape':\n e.preventDefault();\n close();\n focusTrigger();\n break;\n }\n }\n\n useClickOutside(selectRef, isOpen, close);\n\n return {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n };\n}\n","<template>\n <div :class=\"rootClass\" ref=\"selectRef\">\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"modelValue ?? ''\"\n :disabled=\"control.disabled || undefined\"\n />\n <div\n :id=\"control.id\"\n ref=\"triggerRef\"\n class=\"rp-select__trigger\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-controls=\"listboxId\"\n :aria-disabled=\"control.disabled || undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n :data-disabled=\"control.disabled || undefined\"\n :tabindex=\"control.disabled ? -1 : 0\"\n @click=\"toggle\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"rp-select__value\" :class=\"{ 'rp-select__placeholder': !hasValue }\">\n {{ displayLabel || placeholder }}\n </span>\n\n <span class=\"rp-select__indicator\">\n <button\n v-if=\"canClear\"\n type=\"button\"\n class=\"rp-select__clear\"\n aria-label=\"Clear selection\"\n tabindex=\"-1\"\n @mousedown.prevent\n @click.stop=\"clearSelection\"\n >\n <XIcon />\n </button>\n <span class=\"rp-select__arrow\" aria-hidden=\"true\">\n <ChevronsUpDownIcon />\n </span>\n </span>\n </div>\n\n <Transition name=\"rp-select-dropdown\">\n <div v-if=\"isOpen\" class=\"rp-select__dropdown\" role=\"listbox\" :id=\"listboxId\">\n <div v-if=\"visibleOptions.length === 0\" class=\"rp-select__empty\">\n <slot name=\"empty\">No options</slot>\n </div>\n <div\n v-for=\"(option, index) in visibleOptions\"\n :key=\"option.value\"\n role=\"option\"\n :id=\"`${selectId}-option-${index}`\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n :data-selected=\"option.value === modelValue || undefined\"\n :data-disabled=\"option.disabled || undefined\"\n :class=\"[\n 'rp-select__option',\n {\n 'rp-select__option--selected': option.value === modelValue,\n 'rp-select__option--focused': index === focusedIndex,\n 'rp-select__option--disabled': option.disabled,\n },\n ]\"\n @click=\"selectOption(option)\"\n @mouseenter=\"onOptionMouseenter(option, index)\"\n >\n {{ option.label }}\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport ChevronsUpDownIcon from '~icons/lucide/chevrons-up-down';\nimport XIcon from '~icons/lucide/x';\nimport { useSelect } from './useSelect';\nimport type { SelectProps } from './types';\n\ndefineOptions({ name: 'RpSelect' });\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n options: () => [],\n placeholder: 'Select...',\n clearable: false,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n} = useSelect(props, (value) => {\n emit('update:modelValue', value);\n});\n\nvoid selectRef;\nvoid triggerRef;\n</script>\n\n<style src=\"./select.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div :class=\"rootClass\" ref=\"selectRef\">\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"modelValue ?? ''\"\n :disabled=\"control.disabled || undefined\"\n />\n <div\n :id=\"control.id\"\n ref=\"triggerRef\"\n class=\"rp-select__trigger\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-controls=\"listboxId\"\n :aria-disabled=\"control.disabled || undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n :data-disabled=\"control.disabled || undefined\"\n :tabindex=\"control.disabled ? -1 : 0\"\n @click=\"toggle\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"rp-select__value\" :class=\"{ 'rp-select__placeholder': !hasValue }\">\n {{ displayLabel || placeholder }}\n </span>\n\n <span class=\"rp-select__indicator\">\n <button\n v-if=\"canClear\"\n type=\"button\"\n class=\"rp-select__clear\"\n aria-label=\"Clear selection\"\n tabindex=\"-1\"\n @mousedown.prevent\n @click.stop=\"clearSelection\"\n >\n <XIcon />\n </button>\n <span class=\"rp-select__arrow\" aria-hidden=\"true\">\n <ChevronsUpDownIcon />\n </span>\n </span>\n </div>\n\n <Transition name=\"rp-select-dropdown\">\n <div v-if=\"isOpen\" class=\"rp-select__dropdown\" role=\"listbox\" :id=\"listboxId\">\n <div v-if=\"visibleOptions.length === 0\" class=\"rp-select__empty\">\n <slot name=\"empty\">No options</slot>\n </div>\n <div\n v-for=\"(option, index) in visibleOptions\"\n :key=\"option.value\"\n role=\"option\"\n :id=\"`${selectId}-option-${index}`\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n :data-selected=\"option.value === modelValue || undefined\"\n :data-disabled=\"option.disabled || undefined\"\n :class=\"[\n 'rp-select__option',\n {\n 'rp-select__option--selected': option.value === modelValue,\n 'rp-select__option--focused': index === focusedIndex,\n 'rp-select__option--disabled': option.disabled,\n },\n ]\"\n @click=\"selectOption(option)\"\n @mouseenter=\"onOptionMouseenter(option, index)\"\n >\n {{ option.label }}\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport ChevronsUpDownIcon from '~icons/lucide/chevrons-up-down';\nimport XIcon from '~icons/lucide/x';\nimport { useSelect } from './useSelect';\nimport type { SelectProps } from './types';\n\ndefineOptions({ name: 'RpSelect' });\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n options: () => [],\n placeholder: 'Select...',\n clearable: false,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n} = useSelect(props, (value) => {\n emit('update:modelValue', value);\n});\n\nvoid selectRef;\nvoid triggerRef;\n</script>\n\n<style src=\"./select.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select.js","names":[],"sources":["../src/composables/useListNavigation.ts","../src/components/select/useSelect.ts","../src/components/select/select.vue","../src/components/select/select.vue"],"sourcesContent":["import { computed, ref } from 'vue';\n\nexport interface ListNavigationItem {\n disabled?: boolean;\n}\n\nexport interface UseListNavigationOptions<T extends ListNavigationItem> {\n items: () => T[];\n isSelected?: (item: T) => boolean;\n loop?: boolean;\n}\n\nexport function useListNavigation<T extends ListNavigationItem>(\n options: UseListNavigationOptions<T>,\n) {\n const localFocusedIndex = ref(-1);\n const loop = options.loop ?? true;\n\n const enabledIndexes = computed(() =>\n options\n .items()\n .map((item, index) => (item.disabled ? -1 : index))\n .filter((index) => index >= 0),\n );\n\n function resetFocus() {\n localFocusedIndex.value = -1;\n }\n\n function setNearest(index: number, direction: 1 | -1) {\n const indexes = enabledIndexes.value;\n if (indexes.length === 0) {\n resetFocus();\n return;\n }\n\n if (options.items()[index] && !options.items()[index]?.disabled) {\n localFocusedIndex.value = index;\n return;\n }\n\n let next: number | undefined;\n if (direction === 1) {\n next = indexes.find((i) => i > index);\n } else {\n for (let i = indexes.length - 1; i >= 0; i -= 1) {\n const candidate = indexes[i]!;\n if (candidate < index) {\n next = candidate;\n break;\n }\n }\n }\n\n if (next !== undefined) {\n localFocusedIndex.value = next;\n } else if (loop) {\n localFocusedIndex.value = direction === 1 ? indexes[0]! : indexes[indexes.length - 1]!;\n }\n }\n\n function focusSelected() {\n const items = options.items();\n const selectedIndex = options.isSelected\n ? items.findIndex((item) => options.isSelected!(item) && !item.disabled)\n : -1;\n if (selectedIndex >= 0) {\n localFocusedIndex.value = selectedIndex;\n } else {\n focusFirst();\n }\n }\n\n function focusFirst() {\n const first = enabledIndexes.value[0];\n localFocusedIndex.value = first ?? -1;\n }\n\n function focusLast() {\n const indexes = enabledIndexes.value;\n localFocusedIndex.value = indexes[indexes.length - 1] ?? -1;\n }\n\n function moveFocus(delta: 1 | -1) {\n if (localFocusedIndex.value < 0) {\n if (delta === 1) {\n focusFirst();\n } else {\n focusLast();\n }\n return;\n }\n setNearest(localFocusedIndex.value + delta, delta);\n }\n\n return {\n focusedIndex: localFocusedIndex,\n resetFocus,\n focusSelected,\n focusFirst,\n focusLast,\n moveFocus,\n };\n}\n","import { computed, nextTick, ref, useId } from 'vue';\nimport { useClickOutside } from '@/composables/useClickOutside';\nimport { useControlState } from '@/composables/useControlState';\nimport { useListNavigation } from '@/composables/useListNavigation';\nimport { bem } from '@/utils/bem';\nimport type { SelectOption, SelectProps } from './types';\n\ntype SelectValue = string | number | null;\n\nfunction hasSelectValue(value: SelectValue) {\n return value != null && value !== '';\n}\n\nfunction getSelectDisplayLabel(options: SelectOption[] | undefined, value: SelectValue) {\n if (!hasSelectValue(value)) return '';\n return options?.find((option) => option.value === value)?.label ?? '';\n}\n\nfunction getSelectActiveDescendantId(baseId: string, focusedIndex: number) {\n return focusedIndex < 0 ? undefined : `${baseId}-option-${focusedIndex}`;\n}\n\nexport function useSelect(props: Readonly<SelectProps>, emitUpdate: (value: SelectValue) => void) {\n const selectRef = ref<HTMLElement | null>(null);\n const triggerRef = ref<HTMLElement | null>(null);\n const isOpen = ref(false);\n\n const selectId = useId();\n const listboxId = `${selectId}-listbox`;\n\n const control = useControlState(props);\n const visibleOptions = computed(() => props.options ?? []);\n\n const navigation = useListNavigation<SelectOption>({\n items: () => visibleOptions.value,\n isSelected: (item) => item.value === props.modelValue,\n });\n\n const focusedIndex = navigation.focusedIndex;\n const activeDescendantId = computed(() =>\n getSelectActiveDescendantId(selectId, focusedIndex.value),\n );\n\n const rootClass = computed(() =>\n bem('rp-select', {\n open: isOpen.value,\n [`radius-${props.radius}`]: Boolean(props.radius),\n disabled: control.disabled,\n invalid: control.invalid,\n }),\n );\n\n const hasValue = computed(() => hasSelectValue(props.modelValue));\n const displayLabel = computed(() => getSelectDisplayLabel(props.options, props.modelValue));\n const canClear = computed(() =>\n Boolean(props.clearable && hasValue.value && !control.disabled),\n );\n\n function focusTrigger() {\n nextTick(() => triggerRef.value?.focus());\n }\n\n function open() {\n if (control.disabled || isOpen.value) return;\n isOpen.value = true;\n navigation.focusSelected();\n }\n\n function close() {\n isOpen.value = false;\n navigation.resetFocus();\n }\n\n function toggle() {\n if (control.disabled) return;\n if (isOpen.value) {\n close();\n focusTrigger();\n } else {\n open();\n }\n }\n\n function selectOption(option: SelectOption) {\n if (option.disabled) return;\n emitUpdate(option.value);\n close();\n focusTrigger();\n }\n\n function clearSelection() {\n if (!canClear.value) return;\n emitUpdate(null);\n close();\n focusTrigger();\n }\n\n function onOptionMouseenter(option: SelectOption, index: number) {\n if (!option.disabled) focusedIndex.value = index;\n }\n\n function selectFocusedOption() {\n if (focusedIndex.value < 0 || focusedIndex.value >= visibleOptions.value.length) return;\n selectOption(visibleOptions.value[focusedIndex.value]!);\n }\n\n function onTriggerKeydown(e: KeyboardEvent) {\n if (control.disabled) return;\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n if (!isOpen.value) open();\n else selectFocusedOption();\n break;\n case ' ':\n e.preventDefault();\n if (!isOpen.value) open();\n else selectFocusedOption();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen.value) open();\n else navigation.moveFocus(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen.value) {\n open();\n navigation.focusLast();\n } else {\n navigation.moveFocus(-1);\n }\n break;\n case 'Home':\n if (isOpen.value) {\n e.preventDefault();\n navigation.focusFirst();\n }\n break;\n case 'End':\n if (isOpen.value) {\n e.preventDefault();\n navigation.focusLast();\n }\n break;\n case 'Delete':\n case 'Backspace':\n if (canClear.value) {\n e.preventDefault();\n clearSelection();\n }\n break;\n case 'Escape':\n e.preventDefault();\n close();\n focusTrigger();\n break;\n }\n }\n\n useClickOutside(selectRef, isOpen, close);\n\n return {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n };\n}\n","<template>\n <div :class=\"rootClass\" ref=\"selectRef\">\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"modelValue ?? ''\"\n :disabled=\"control.disabled || undefined\"\n />\n <div\n :id=\"control.id\"\n ref=\"triggerRef\"\n class=\"rp-select__trigger\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-controls=\"listboxId\"\n :aria-disabled=\"control.disabled || undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n :data-disabled=\"control.disabled || undefined\"\n :tabindex=\"control.disabled ? -1 : 0\"\n @click=\"toggle\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"rp-select__value\" :class=\"{ 'rp-select__placeholder': !hasValue }\">\n {{ displayLabel || placeholder }}\n </span>\n\n <span class=\"rp-select__indicator\">\n <button\n v-if=\"canClear\"\n type=\"button\"\n class=\"rp-select__clear\"\n aria-label=\"Clear selection\"\n tabindex=\"-1\"\n @mousedown.prevent\n @click.stop=\"clearSelection\"\n >\n <XIcon />\n </button>\n <span class=\"rp-select__arrow\" aria-hidden=\"true\">\n <ChevronsUpDownIcon />\n </span>\n </span>\n </div>\n\n <Transition name=\"rp-select-dropdown\">\n <div v-if=\"isOpen\" class=\"rp-select__dropdown\" role=\"listbox\" :id=\"listboxId\">\n <div v-if=\"visibleOptions.length === 0\" class=\"rp-select__empty\">\n <slot name=\"empty\">No options</slot>\n </div>\n <div\n v-for=\"(option, index) in visibleOptions\"\n :key=\"option.value\"\n role=\"option\"\n :id=\"`${selectId}-option-${index}`\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n :data-selected=\"option.value === modelValue || undefined\"\n :data-disabled=\"option.disabled || undefined\"\n :class=\"[\n 'rp-select__option',\n {\n 'rp-select__option--selected': option.value === modelValue,\n 'rp-select__option--focused': index === focusedIndex,\n 'rp-select__option--disabled': option.disabled,\n },\n ]\"\n @click=\"selectOption(option)\"\n @mouseenter=\"onOptionMouseenter(option, index)\"\n >\n {{ option.label }}\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport ChevronsUpDownIcon from '~icons/lucide/chevrons-up-down';\nimport XIcon from '~icons/lucide/x';\nimport { useSelect } from './useSelect';\nimport type { SelectProps } from './types';\n\ndefineOptions({ name: 'RpSelect' });\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n options: () => [],\n placeholder: 'Select...',\n clearable: false,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n} = useSelect(props, (value) => {\n emit('update:modelValue', value);\n});\n\nvoid selectRef;\nvoid triggerRef;\n</script>\n\n<style src=\"./select.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div :class=\"rootClass\" ref=\"selectRef\">\n <input\n v-if=\"name\"\n type=\"hidden\"\n :name=\"name\"\n :value=\"modelValue ?? ''\"\n :disabled=\"control.disabled || undefined\"\n />\n <div\n :id=\"control.id\"\n ref=\"triggerRef\"\n class=\"rp-select__trigger\"\n role=\"combobox\"\n :aria-expanded=\"isOpen\"\n aria-haspopup=\"listbox\"\n :aria-activedescendant=\"activeDescendantId\"\n :aria-controls=\"listboxId\"\n :aria-disabled=\"control.disabled || undefined\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :data-state=\"isOpen ? 'open' : 'closed'\"\n :data-disabled=\"control.disabled || undefined\"\n :tabindex=\"control.disabled ? -1 : 0\"\n @click=\"toggle\"\n @keydown=\"onTriggerKeydown\"\n >\n <span class=\"rp-select__value\" :class=\"{ 'rp-select__placeholder': !hasValue }\">\n {{ displayLabel || placeholder }}\n </span>\n\n <span class=\"rp-select__indicator\">\n <button\n v-if=\"canClear\"\n type=\"button\"\n class=\"rp-select__clear\"\n aria-label=\"Clear selection\"\n tabindex=\"-1\"\n @mousedown.prevent\n @click.stop=\"clearSelection\"\n >\n <XIcon />\n </button>\n <span class=\"rp-select__arrow\" aria-hidden=\"true\">\n <ChevronsUpDownIcon />\n </span>\n </span>\n </div>\n\n <Transition name=\"rp-select-dropdown\">\n <div v-if=\"isOpen\" class=\"rp-select__dropdown\" role=\"listbox\" :id=\"listboxId\">\n <div v-if=\"visibleOptions.length === 0\" class=\"rp-select__empty\">\n <slot name=\"empty\">No options</slot>\n </div>\n <div\n v-for=\"(option, index) in visibleOptions\"\n :key=\"option.value\"\n role=\"option\"\n :id=\"`${selectId}-option-${index}`\"\n :aria-selected=\"option.value === modelValue\"\n :aria-disabled=\"option.disabled || undefined\"\n :data-selected=\"option.value === modelValue || undefined\"\n :data-disabled=\"option.disabled || undefined\"\n :class=\"[\n 'rp-select__option',\n {\n 'rp-select__option--selected': option.value === modelValue,\n 'rp-select__option--focused': index === focusedIndex,\n 'rp-select__option--disabled': option.disabled,\n },\n ]\"\n @click=\"selectOption(option)\"\n @mouseenter=\"onOptionMouseenter(option, index)\"\n >\n {{ option.label }}\n </div>\n </div>\n </Transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport ChevronsUpDownIcon from '~icons/lucide/chevrons-up-down';\nimport XIcon from '~icons/lucide/x';\nimport { useSelect } from './useSelect';\nimport type { SelectProps } from './types';\n\ndefineOptions({ name: 'RpSelect' });\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n options: () => [],\n placeholder: 'Select...',\n clearable: false,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst {\n selectRef,\n triggerRef,\n isOpen,\n selectId,\n listboxId,\n control,\n visibleOptions,\n focusedIndex,\n activeDescendantId,\n rootClass,\n hasValue,\n displayLabel,\n canClear,\n toggle,\n selectOption,\n clearSelection,\n onOptionMouseenter,\n onTriggerKeydown,\n} = useSelect(props, (value) => {\n emit('update:modelValue', value);\n});\n\nvoid selectRef;\nvoid triggerRef;\n</script>\n\n<style src=\"./select.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
|
package/dist/slider.css
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
.rp-slider[data-v-c9655b1d] {
|
|
2
|
+
--_rp-slider-color: var(--_rp-slider-custom-color, var(--rp-color-control-selected-bg));
|
|
3
|
+
--_rp-slider-track-bg: var(--rp-color-control-track-bg);
|
|
4
|
+
--_rp-slider-thumb-bg: var(--rp-color-control-thumb-bg);
|
|
5
|
+
--_rp-slider-thumb-border: var(--_rp-slider-color);
|
|
6
|
+
--_rp-slider-thumb-border-style: var(--_rp-slider-thumb-border-width) solid
|
|
7
|
+
var(--_rp-slider-thumb-border);
|
|
8
|
+
--_rp-slider-thumb-padding: 0;
|
|
9
|
+
--_rp-slider-track-length: 160px;
|
|
10
|
+
--_rp-slider-track-height: 8px;
|
|
11
|
+
--_rp-slider-thumb-size: 16px;
|
|
12
|
+
--_rp-slider-thumb-border-width: 4px;
|
|
13
|
+
--_rp-slider-ratio: 0;
|
|
14
|
+
--_rp-slider-fill-position: calc(
|
|
15
|
+
var(--_rp-slider-thumb-size) / 2 + (100% - var(--_rp-slider-thumb-size)) *
|
|
16
|
+
var(--_rp-slider-ratio)
|
|
17
|
+
);
|
|
18
|
+
--_rp-slider-font-size: var(--rp-font-size-base);
|
|
19
|
+
--_rp-slider-mark-size: 4px;
|
|
20
|
+
--_rp-slider-mark-color: var(--rp-color-control-thumb-bg);
|
|
21
|
+
--_rp-slider-mark-label-color: var(--rp-color-text-secondary);
|
|
22
|
+
--_rp-slider-mark-filled-label-color: var(--rp-color-text);
|
|
23
|
+
--_rp-slider-mark-ring-color: var(--_rp-slider-color);
|
|
24
|
+
--_rp-slider-valid-color: var(--rp-color-success);
|
|
25
|
+
--_rp-slider-valid-ring: color-mix(in srgb, var(--rp-color-success) 32%, transparent);
|
|
26
|
+
--_rp-slider-invalid-color: var(--rp-color-danger);
|
|
27
|
+
--_rp-slider-invalid-ring: color-mix(in srgb, var(--rp-color-danger) 32%, transparent);
|
|
28
|
+
display: inline-grid;
|
|
29
|
+
width: 100%;
|
|
30
|
+
min-width: var(--_rp-slider-track-length);
|
|
31
|
+
max-width: 100%;
|
|
32
|
+
gap: var(--rp-spacing-2);
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
font-family: var(--rp-font-family);
|
|
35
|
+
font-size: var(--_rp-slider-font-size);
|
|
36
|
+
line-height: var(--rp-line-height-normal);
|
|
37
|
+
}
|
|
38
|
+
html.dark .rp-slider[data-v-c9655b1d] {
|
|
39
|
+
--_rp-slider-thumb-bg: var(--_rp-slider-color);
|
|
40
|
+
--_rp-slider-thumb-border: var(--rp-color-control-thumb-bg);
|
|
41
|
+
--_rp-slider-valid-color: var(--rp-color-success-fg);
|
|
42
|
+
--_rp-slider-valid-ring: color-mix(in srgb, var(--rp-color-success-fg) 32%, transparent);
|
|
43
|
+
--_rp-slider-invalid-color: var(--rp-color-danger-fg);
|
|
44
|
+
--_rp-slider-invalid-ring: color-mix(in srgb, var(--rp-color-danger-fg) 32%, transparent);
|
|
45
|
+
}
|
|
46
|
+
.rp-slider--custom-thumb[data-v-c9655b1d] {
|
|
47
|
+
--_rp-slider-thumb-bg: var(--_rp-slider-color);
|
|
48
|
+
--_rp-slider-thumb-border: var(--rp-color-control-thumb-bg);
|
|
49
|
+
}
|
|
50
|
+
.rp-slider--disabled[data-v-c9655b1d] {
|
|
51
|
+
opacity: var(--rp-opacity-disabled);
|
|
52
|
+
cursor: not-allowed;
|
|
53
|
+
}
|
|
54
|
+
.rp-slider__header[data-v-c9655b1d] {
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
min-width: 0;
|
|
59
|
+
gap: var(--rp-spacing-3);
|
|
60
|
+
}
|
|
61
|
+
.rp-slider__label[data-v-c9655b1d] {
|
|
62
|
+
min-width: 0;
|
|
63
|
+
color: var(--rp-color-text);
|
|
64
|
+
}
|
|
65
|
+
.rp-slider__value[data-v-c9655b1d] {
|
|
66
|
+
flex-shrink: 0;
|
|
67
|
+
color: var(--rp-color-text-secondary);
|
|
68
|
+
font-variant-numeric: tabular-nums;
|
|
69
|
+
}
|
|
70
|
+
.rp-slider__track[data-v-c9655b1d] {
|
|
71
|
+
position: relative;
|
|
72
|
+
display: block;
|
|
73
|
+
min-width: 0;
|
|
74
|
+
}
|
|
75
|
+
.rp-slider__bar[data-v-c9655b1d] {
|
|
76
|
+
position: absolute;
|
|
77
|
+
z-index: 1;
|
|
78
|
+
top: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-track-height)) / 2);
|
|
79
|
+
left: 0;
|
|
80
|
+
display: block;
|
|
81
|
+
width: 100%;
|
|
82
|
+
height: var(--_rp-slider-track-height);
|
|
83
|
+
pointer-events: none;
|
|
84
|
+
background: linear-gradient(to right, var(--_rp-slider-color) 0 var(--_rp-slider-fill-position), var(--_rp-slider-track-bg) var(--_rp-slider-fill-position) 100%);
|
|
85
|
+
border-radius: var(--rp-radius-full);
|
|
86
|
+
}
|
|
87
|
+
.rp-slider--marks-with-labels .rp-slider__track[data-v-c9655b1d] {
|
|
88
|
+
padding-bottom: calc(var(--_rp-slider-font-size) * var(--rp-line-height-normal) + var(--rp-spacing-2));
|
|
89
|
+
}
|
|
90
|
+
.rp-slider__native[data-v-c9655b1d] {
|
|
91
|
+
position: relative;
|
|
92
|
+
z-index: 3;
|
|
93
|
+
display: block;
|
|
94
|
+
width: 100%;
|
|
95
|
+
min-width: 0;
|
|
96
|
+
height: var(--_rp-slider-thumb-size);
|
|
97
|
+
padding: 0;
|
|
98
|
+
margin: 0;
|
|
99
|
+
appearance: none;
|
|
100
|
+
background: transparent;
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
outline: none;
|
|
103
|
+
}
|
|
104
|
+
.rp-slider__marks[data-v-c9655b1d] {
|
|
105
|
+
position: absolute;
|
|
106
|
+
z-index: 2;
|
|
107
|
+
top: 0;
|
|
108
|
+
right: calc(var(--_rp-slider-thumb-size) / 2);
|
|
109
|
+
left: calc(var(--_rp-slider-thumb-size) / 2);
|
|
110
|
+
height: var(--_rp-slider-thumb-size);
|
|
111
|
+
pointer-events: none;
|
|
112
|
+
}
|
|
113
|
+
.rp-slider__mark[data-v-c9655b1d] {
|
|
114
|
+
position: absolute;
|
|
115
|
+
top: 0;
|
|
116
|
+
left: var(--_rp-slider-mark-position);
|
|
117
|
+
display: inline-flex;
|
|
118
|
+
flex-direction: column;
|
|
119
|
+
align-items: center;
|
|
120
|
+
width: max-content;
|
|
121
|
+
max-width: 8rem;
|
|
122
|
+
color: var(--_rp-slider-mark-label-color);
|
|
123
|
+
line-height: var(--rp-line-height-normal);
|
|
124
|
+
transform: translateX(-50%);
|
|
125
|
+
}
|
|
126
|
+
.rp-slider__mark-dot[data-v-c9655b1d] {
|
|
127
|
+
width: var(--_rp-slider-mark-size);
|
|
128
|
+
height: var(--_rp-slider-mark-size);
|
|
129
|
+
margin-top: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-mark-size)) / 2);
|
|
130
|
+
background: var(--_rp-slider-mark-color);
|
|
131
|
+
border-radius: var(--rp-radius-full);
|
|
132
|
+
box-shadow: 0 0 0 var(--rp-border-width-thin) transparent;
|
|
133
|
+
transition: box-shadow var(--rp-transition-fast);
|
|
134
|
+
}
|
|
135
|
+
.rp-slider__mark-label[data-v-c9655b1d] {
|
|
136
|
+
max-width: 100%;
|
|
137
|
+
margin-top: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-mark-size)) / 2 + var(--rp-spacing-1));
|
|
138
|
+
overflow-wrap: anywhere;
|
|
139
|
+
color: inherit;
|
|
140
|
+
font-size: var(--_rp-slider-font-size);
|
|
141
|
+
text-align: center;
|
|
142
|
+
font-variant-numeric: tabular-nums;
|
|
143
|
+
}
|
|
144
|
+
.rp-slider__mark--filled .rp-slider__mark-dot[data-v-c9655b1d] {
|
|
145
|
+
box-shadow: 0 0 0 var(--rp-border-width-thin) var(--_rp-slider-mark-ring-color);
|
|
146
|
+
}
|
|
147
|
+
.rp-slider__mark--filled .rp-slider__mark-label[data-v-c9655b1d] {
|
|
148
|
+
color: var(--_rp-slider-mark-filled-label-color);
|
|
149
|
+
}
|
|
150
|
+
.rp-slider__thumb[data-v-c9655b1d] {
|
|
151
|
+
position: absolute;
|
|
152
|
+
z-index: 4;
|
|
153
|
+
top: 0;
|
|
154
|
+
right: calc(var(--_rp-slider-thumb-size) / 2);
|
|
155
|
+
left: calc(var(--_rp-slider-thumb-size) / 2);
|
|
156
|
+
height: var(--_rp-slider-thumb-size);
|
|
157
|
+
pointer-events: none;
|
|
158
|
+
}
|
|
159
|
+
.rp-slider__thumb-content[data-v-c9655b1d] {
|
|
160
|
+
position: absolute;
|
|
161
|
+
top: 50%;
|
|
162
|
+
left: var(--_rp-slider-percent);
|
|
163
|
+
display: inline-flex;
|
|
164
|
+
align-items: center;
|
|
165
|
+
justify-content: center;
|
|
166
|
+
width: var(--_rp-slider-thumb-size);
|
|
167
|
+
height: var(--_rp-slider-thumb-size);
|
|
168
|
+
box-sizing: border-box;
|
|
169
|
+
overflow: hidden;
|
|
170
|
+
padding: var(--_rp-slider-thumb-padding);
|
|
171
|
+
color: var(--_rp-slider-thumb-border);
|
|
172
|
+
background: var(--_rp-slider-thumb-bg);
|
|
173
|
+
border: var(--_rp-slider-thumb-border-style);
|
|
174
|
+
border-radius: var(--rp-radius-full);
|
|
175
|
+
box-shadow: var(--rp-shadow-sm);
|
|
176
|
+
transform: translate(-50%, -50%);
|
|
177
|
+
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
178
|
+
}
|
|
179
|
+
.rp-slider__thumb-content[data-v-c9655b1d] svg {
|
|
180
|
+
width: 60%;
|
|
181
|
+
height: 60%;
|
|
182
|
+
}
|
|
183
|
+
.rp-slider__tooltip[data-v-c9655b1d] {
|
|
184
|
+
position: absolute;
|
|
185
|
+
z-index: 5;
|
|
186
|
+
top: 0;
|
|
187
|
+
left: var(--_rp-slider-fill-position);
|
|
188
|
+
pointer-events: none;
|
|
189
|
+
translate: -50% 0;
|
|
190
|
+
}
|
|
191
|
+
.rp-slider__tooltip-anchor[data-v-c9655b1d] {
|
|
192
|
+
display: block;
|
|
193
|
+
width: 0;
|
|
194
|
+
height: 0;
|
|
195
|
+
}
|
|
196
|
+
.rp-slider__tooltip[data-v-c9655b1d] .rp-tooltip__content {
|
|
197
|
+
min-width: 2rem;
|
|
198
|
+
max-width: min(12rem, 100vw - var(--rp-spacing-6));
|
|
199
|
+
padding: var(--rp-spacing-1) var(--rp-spacing-2);
|
|
200
|
+
white-space: nowrap;
|
|
201
|
+
font-variant-numeric: tabular-nums;
|
|
202
|
+
}
|
|
203
|
+
.rp-slider__native[data-v-c9655b1d]:disabled {
|
|
204
|
+
cursor: not-allowed;
|
|
205
|
+
}
|
|
206
|
+
.rp-slider__native[data-v-c9655b1d]::-webkit-slider-runnable-track {
|
|
207
|
+
height: var(--_rp-slider-track-height);
|
|
208
|
+
border-radius: var(--rp-radius-full);
|
|
209
|
+
background: transparent;
|
|
210
|
+
}
|
|
211
|
+
.rp-slider__native[data-v-c9655b1d]::-moz-range-track {
|
|
212
|
+
height: var(--_rp-slider-track-height);
|
|
213
|
+
border-radius: var(--rp-radius-full);
|
|
214
|
+
background: transparent;
|
|
215
|
+
}
|
|
216
|
+
.rp-slider__native[data-v-c9655b1d]::-moz-range-progress {
|
|
217
|
+
height: var(--_rp-slider-track-height);
|
|
218
|
+
border-radius: var(--rp-radius-full);
|
|
219
|
+
background: transparent;
|
|
220
|
+
}
|
|
221
|
+
.rp-slider__native[data-v-c9655b1d]::-webkit-slider-thumb {
|
|
222
|
+
width: var(--_rp-slider-thumb-size);
|
|
223
|
+
height: var(--_rp-slider-thumb-size);
|
|
224
|
+
margin-top: calc((var(--_rp-slider-track-height) - var(--_rp-slider-thumb-size)) / 2);
|
|
225
|
+
box-sizing: border-box;
|
|
226
|
+
appearance: none;
|
|
227
|
+
background: var(--_rp-slider-thumb-bg);
|
|
228
|
+
border: var(--_rp-slider-thumb-border-style);
|
|
229
|
+
border-radius: var(--rp-radius-full);
|
|
230
|
+
box-shadow: var(--rp-shadow-sm);
|
|
231
|
+
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
232
|
+
}
|
|
233
|
+
.rp-slider__native[data-v-c9655b1d]::-moz-range-thumb {
|
|
234
|
+
width: var(--_rp-slider-thumb-size);
|
|
235
|
+
height: var(--_rp-slider-thumb-size);
|
|
236
|
+
box-sizing: border-box;
|
|
237
|
+
background: var(--_rp-slider-thumb-bg);
|
|
238
|
+
border: var(--_rp-slider-thumb-border-style);
|
|
239
|
+
border-radius: var(--rp-radius-full);
|
|
240
|
+
box-shadow: var(--rp-shadow-sm);
|
|
241
|
+
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
242
|
+
}
|
|
243
|
+
.rp-slider--vertical[data-v-c9655b1d] {
|
|
244
|
+
width: max-content;
|
|
245
|
+
min-width: 0;
|
|
246
|
+
max-width: none;
|
|
247
|
+
justify-items: center;
|
|
248
|
+
}
|
|
249
|
+
.rp-slider--vertical .rp-slider__header[data-v-c9655b1d] {
|
|
250
|
+
width: max-content;
|
|
251
|
+
max-width: 12rem;
|
|
252
|
+
justify-content: space-between;
|
|
253
|
+
gap: var(--rp-spacing-3);
|
|
254
|
+
text-align: center;
|
|
255
|
+
}
|
|
256
|
+
.rp-slider--vertical .rp-slider__value[data-v-c9655b1d] {
|
|
257
|
+
min-width: 3ch;
|
|
258
|
+
text-align: right;
|
|
259
|
+
}
|
|
260
|
+
.rp-slider--vertical .rp-slider__track[data-v-c9655b1d] {
|
|
261
|
+
width: var(--_rp-slider-thumb-size);
|
|
262
|
+
height: var(--_rp-slider-track-length);
|
|
263
|
+
min-width: 0;
|
|
264
|
+
min-height: var(--_rp-slider-track-length);
|
|
265
|
+
justify-self: center;
|
|
266
|
+
}
|
|
267
|
+
.rp-slider--vertical .rp-slider__bar[data-v-c9655b1d] {
|
|
268
|
+
top: 0;
|
|
269
|
+
left: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-track-height)) / 2);
|
|
270
|
+
width: var(--_rp-slider-track-height);
|
|
271
|
+
height: 100%;
|
|
272
|
+
background: linear-gradient(to top, var(--_rp-slider-color) 0 var(--_rp-slider-fill-position), var(--_rp-slider-track-bg) var(--_rp-slider-fill-position) 100%);
|
|
273
|
+
}
|
|
274
|
+
.rp-slider--vertical.rp-slider--marks-with-labels .rp-slider__track[data-v-c9655b1d] {
|
|
275
|
+
padding-right: calc(var(--_rp-slider-font-size) * var(--rp-line-height-normal) + var(--rp-spacing-2));
|
|
276
|
+
padding-bottom: 0;
|
|
277
|
+
}
|
|
278
|
+
.rp-slider--vertical .rp-slider__native[data-v-c9655b1d] {
|
|
279
|
+
width: var(--_rp-slider-thumb-size);
|
|
280
|
+
min-width: 0;
|
|
281
|
+
height: 100%;
|
|
282
|
+
min-height: var(--_rp-slider-track-length);
|
|
283
|
+
direction: rtl;
|
|
284
|
+
writing-mode: vertical-lr;
|
|
285
|
+
}
|
|
286
|
+
.rp-slider--vertical .rp-slider__marks[data-v-c9655b1d] {
|
|
287
|
+
top: calc(var(--_rp-slider-thumb-size) / 2);
|
|
288
|
+
right: auto;
|
|
289
|
+
bottom: calc(var(--_rp-slider-thumb-size) / 2);
|
|
290
|
+
left: 0;
|
|
291
|
+
width: var(--_rp-slider-thumb-size);
|
|
292
|
+
height: auto;
|
|
293
|
+
}
|
|
294
|
+
.rp-slider--vertical .rp-slider__mark[data-v-c9655b1d] {
|
|
295
|
+
top: calc(100% - var(--_rp-slider-mark-position));
|
|
296
|
+
left: 0;
|
|
297
|
+
flex-direction: row;
|
|
298
|
+
align-items: center;
|
|
299
|
+
transform: translateY(-50%);
|
|
300
|
+
}
|
|
301
|
+
.rp-slider--vertical .rp-slider__mark-dot[data-v-c9655b1d] {
|
|
302
|
+
flex: 0 0 auto;
|
|
303
|
+
margin-top: 0;
|
|
304
|
+
margin-left: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-mark-size)) / 2);
|
|
305
|
+
}
|
|
306
|
+
.rp-slider--vertical .rp-slider__mark-label[data-v-c9655b1d] {
|
|
307
|
+
margin-top: 0;
|
|
308
|
+
margin-left: calc((var(--_rp-slider-thumb-size) - var(--_rp-slider-mark-size)) / 2 + var(--rp-spacing-1));
|
|
309
|
+
text-align: left;
|
|
310
|
+
}
|
|
311
|
+
.rp-slider--vertical .rp-slider__thumb[data-v-c9655b1d] {
|
|
312
|
+
top: calc(var(--_rp-slider-thumb-size) / 2);
|
|
313
|
+
right: auto;
|
|
314
|
+
bottom: calc(var(--_rp-slider-thumb-size) / 2);
|
|
315
|
+
left: 0;
|
|
316
|
+
width: var(--_rp-slider-thumb-size);
|
|
317
|
+
height: auto;
|
|
318
|
+
}
|
|
319
|
+
.rp-slider--vertical .rp-slider__thumb-content[data-v-c9655b1d] {
|
|
320
|
+
top: calc(100% - var(--_rp-slider-percent));
|
|
321
|
+
left: 50%;
|
|
322
|
+
}
|
|
323
|
+
.rp-slider--vertical .rp-slider__tooltip[data-v-c9655b1d] {
|
|
324
|
+
top: calc(100% - var(--_rp-slider-fill-position));
|
|
325
|
+
left: 0;
|
|
326
|
+
translate: 0 -50%;
|
|
327
|
+
}
|
|
328
|
+
.rp-slider--vertical .rp-slider__native[data-v-c9655b1d]::-webkit-slider-runnable-track {
|
|
329
|
+
width: var(--_rp-slider-track-height);
|
|
330
|
+
height: 100%;
|
|
331
|
+
background: transparent;
|
|
332
|
+
}
|
|
333
|
+
.rp-slider--vertical .rp-slider__native[data-v-c9655b1d]::-moz-range-track {
|
|
334
|
+
width: var(--_rp-slider-track-height);
|
|
335
|
+
height: 100%;
|
|
336
|
+
}
|
|
337
|
+
.rp-slider--vertical .rp-slider__native[data-v-c9655b1d]::-moz-range-progress {
|
|
338
|
+
width: var(--_rp-slider-track-height);
|
|
339
|
+
}
|
|
340
|
+
.rp-slider--vertical .rp-slider__native[data-v-c9655b1d]::-webkit-slider-thumb {
|
|
341
|
+
margin-top: 0;
|
|
342
|
+
margin-left: calc((var(--_rp-slider-track-height) - var(--_rp-slider-thumb-size)) / 2);
|
|
343
|
+
}
|
|
344
|
+
.rp-slider--custom-thumb .rp-slider__native[data-v-c9655b1d]::-webkit-slider-thumb {
|
|
345
|
+
opacity: 0;
|
|
346
|
+
}
|
|
347
|
+
.rp-slider--custom-thumb .rp-slider__native[data-v-c9655b1d]::-moz-range-thumb {
|
|
348
|
+
opacity: 0;
|
|
349
|
+
}
|
|
350
|
+
.rp-slider__native[data-v-c9655b1d]:focus-visible::-webkit-slider-thumb {
|
|
351
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
352
|
+
}
|
|
353
|
+
.rp-slider__native[data-v-c9655b1d]:focus-visible::-moz-range-thumb {
|
|
354
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
355
|
+
}
|
|
356
|
+
.rp-slider--custom-thumb .rp-slider__native:focus-visible ~ .rp-slider__thumb .rp-slider__thumb-content[data-v-c9655b1d] {
|
|
357
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
358
|
+
}
|
|
359
|
+
.rp-slider--color-primary[data-v-c9655b1d] {
|
|
360
|
+
--_rp-slider-color: var(--rp-color-primary);
|
|
361
|
+
}
|
|
362
|
+
.rp-slider--color-secondary[data-v-c9655b1d] {
|
|
363
|
+
--_rp-slider-color: var(--rp-color-secondary);
|
|
364
|
+
}
|
|
365
|
+
.rp-slider--color-success[data-v-c9655b1d] {
|
|
366
|
+
--_rp-slider-color: var(--rp-color-success);
|
|
367
|
+
}
|
|
368
|
+
.rp-slider--color-warning[data-v-c9655b1d] {
|
|
369
|
+
--_rp-slider-color: var(--rp-color-warning);
|
|
370
|
+
}
|
|
371
|
+
.rp-slider--color-danger[data-v-c9655b1d] {
|
|
372
|
+
--_rp-slider-color: var(--rp-color-danger);
|
|
373
|
+
}
|
|
374
|
+
.rp-slider--color-info[data-v-c9655b1d] {
|
|
375
|
+
--_rp-slider-color: var(--rp-color-info);
|
|
376
|
+
}
|
|
377
|
+
.rp-slider--color-neutral[data-v-c9655b1d] {
|
|
378
|
+
--_rp-slider-color: var(--rp-color-neutral);
|
|
379
|
+
}
|
|
380
|
+
.rp-slider--valid[data-v-c9655b1d] {
|
|
381
|
+
--_rp-slider-color: var(--_rp-slider-valid-color);
|
|
382
|
+
}
|
|
383
|
+
.rp-slider--invalid[data-v-c9655b1d] {
|
|
384
|
+
--_rp-slider-color: var(--_rp-slider-invalid-color);
|
|
385
|
+
}
|
|
386
|
+
.rp-slider--valid .rp-slider__native[data-v-c9655b1d]:focus-visible::-webkit-slider-thumb {
|
|
387
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-valid-ring);
|
|
388
|
+
}
|
|
389
|
+
.rp-slider--valid .rp-slider__native[data-v-c9655b1d]:focus-visible::-moz-range-thumb {
|
|
390
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-valid-ring);
|
|
391
|
+
}
|
|
392
|
+
.rp-slider--valid.rp-slider--custom-thumb .rp-slider__native:focus-visible ~ .rp-slider__thumb .rp-slider__thumb-content[data-v-c9655b1d] {
|
|
393
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-valid-ring);
|
|
394
|
+
}
|
|
395
|
+
.rp-slider--invalid .rp-slider__native[data-v-c9655b1d]:focus-visible::-webkit-slider-thumb {
|
|
396
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-invalid-ring);
|
|
397
|
+
}
|
|
398
|
+
.rp-slider--invalid .rp-slider__native[data-v-c9655b1d]:focus-visible::-moz-range-thumb {
|
|
399
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-invalid-ring);
|
|
400
|
+
}
|
|
401
|
+
.rp-slider--invalid.rp-slider--custom-thumb .rp-slider__native:focus-visible ~ .rp-slider__thumb .rp-slider__thumb-content[data-v-c9655b1d] {
|
|
402
|
+
box-shadow: var(--rp-shadow-sm), 0 0 0 var(--rp-border-width-medium) var(--_rp-slider-invalid-ring);
|
|
403
|
+
}
|
|
404
|
+
.rp-slider--size-xs[data-v-c9655b1d] {
|
|
405
|
+
--_rp-slider-track-height: 4px;
|
|
406
|
+
--_rp-slider-thumb-size: 8px;
|
|
407
|
+
--_rp-slider-thumb-border-width: 4px;
|
|
408
|
+
--_rp-slider-font-size: var(--rp-font-size-xs);
|
|
409
|
+
--_rp-slider-mark-size: 4px;
|
|
410
|
+
}
|
|
411
|
+
.rp-slider--size-sm[data-v-c9655b1d] {
|
|
412
|
+
--_rp-slider-track-height: 6px;
|
|
413
|
+
--_rp-slider-thumb-size: 12px;
|
|
414
|
+
--_rp-slider-thumb-border-width: 3px;
|
|
415
|
+
--_rp-slider-font-size: var(--rp-font-size-sm);
|
|
416
|
+
--_rp-slider-mark-size: 4px;
|
|
417
|
+
}
|
|
418
|
+
.rp-slider--size-md[data-v-c9655b1d] {
|
|
419
|
+
--_rp-slider-track-height: 8px;
|
|
420
|
+
--_rp-slider-thumb-size: 16px;
|
|
421
|
+
--_rp-slider-thumb-border-width: 4px;
|
|
422
|
+
--_rp-slider-font-size: var(--rp-font-size-base);
|
|
423
|
+
--_rp-slider-mark-size: 4px;
|
|
424
|
+
}
|
|
425
|
+
.rp-slider--size-lg[data-v-c9655b1d] {
|
|
426
|
+
--_rp-slider-track-height: 10px;
|
|
427
|
+
--_rp-slider-thumb-size: 20px;
|
|
428
|
+
--_rp-slider-thumb-border-width: 5px;
|
|
429
|
+
--_rp-slider-font-size: var(--rp-font-size-lg);
|
|
430
|
+
--_rp-slider-mark-size: 5px;
|
|
431
|
+
}
|
|
432
|
+
.rp-slider--size-xl[data-v-c9655b1d] {
|
|
433
|
+
--_rp-slider-track-height: 12px;
|
|
434
|
+
--_rp-slider-thumb-size: 24px;
|
|
435
|
+
--_rp-slider-thumb-border-width: 6px;
|
|
436
|
+
--_rp-slider-font-size: var(--rp-font-size-xl);
|
|
437
|
+
--_rp-slider-mark-size: 6px;
|
|
438
|
+
}
|