@proj-airi/ui 0.4.23

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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/build.config.ts +11 -0
  3. package/dist/components/Animations/TransitionVertical.vue +95 -0
  4. package/dist/components/Animations/index.d.ts +1 -0
  5. package/dist/components/Animations/index.mjs +1 -0
  6. package/dist/components/Form/Checkbox/Checkbox.vue +26 -0
  7. package/dist/components/Form/Checkbox/index.d.ts +1 -0
  8. package/dist/components/Form/Checkbox/index.mjs +1 -0
  9. package/dist/components/Form/Field/FieldCheckbox.vue +24 -0
  10. package/dist/components/Form/Field/FieldInput.vue +34 -0
  11. package/dist/components/Form/Field/FieldKeyValues.vue +54 -0
  12. package/dist/components/Form/Field/FieldRange.vue +37 -0
  13. package/dist/components/Form/Field/index.d.ts +4 -0
  14. package/dist/components/Form/Field/index.mjs +4 -0
  15. package/dist/components/Form/Input/Input.vue +20 -0
  16. package/dist/components/Form/Input/InputFile.vue +65 -0
  17. package/dist/components/Form/Input/InputKeyValue.vue +17 -0
  18. package/dist/components/Form/Input/index.d.ts +3 -0
  19. package/dist/components/Form/Input/index.mjs +3 -0
  20. package/dist/components/Form/Radio/Radio.vue +103 -0
  21. package/dist/components/Form/Radio/index.d.ts +1 -0
  22. package/dist/components/Form/Radio/index.mjs +1 -0
  23. package/dist/components/Form/Range/Range.vue +313 -0
  24. package/dist/components/Form/Range/index.d.ts +1 -0
  25. package/dist/components/Form/Range/index.mjs +1 -0
  26. package/dist/components/Form/Textarea/Basic.vue +32 -0
  27. package/dist/components/Form/Textarea/Textarea.vue +14 -0
  28. package/dist/components/Form/Textarea/index.d.ts +2 -0
  29. package/dist/components/Form/Textarea/index.mjs +2 -0
  30. package/dist/components/Form/index.d.ts +6 -0
  31. package/dist/components/Form/index.mjs +6 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.mjs +2 -0
  34. package/package.json +46 -0
  35. package/src/components/Animations/TransitionVertical.vue +134 -0
  36. package/src/components/Animations/index.ts +1 -0
  37. package/src/components/Form/Checkbox/Checkbox.vue +27 -0
  38. package/src/components/Form/Checkbox/index.ts +1 -0
  39. package/src/components/Form/Field/FieldCheckbox.vue +26 -0
  40. package/src/components/Form/Field/FieldInput.vue +36 -0
  41. package/src/components/Form/Field/FieldKeyValues.vue +62 -0
  42. package/src/components/Form/Field/FieldRange.vue +39 -0
  43. package/src/components/Form/Field/index.ts +4 -0
  44. package/src/components/Form/Input/Input.vue +21 -0
  45. package/src/components/Form/Input/InputFile.vue +71 -0
  46. package/src/components/Form/Input/InputKeyValue.vue +19 -0
  47. package/src/components/Form/Input/index.ts +3 -0
  48. package/src/components/Form/Radio/Radio.vue +106 -0
  49. package/src/components/Form/Radio/index.ts +1 -0
  50. package/src/components/Form/Range/Range.vue +328 -0
  51. package/src/components/Form/Range/index.ts +1 -0
  52. package/src/components/Form/Textarea/Basic.vue +42 -0
  53. package/src/components/Form/Textarea/Textarea.vue +15 -0
  54. package/src/components/Form/Textarea/index.ts +2 -0
  55. package/src/components/Form/index.ts +6 -0
  56. package/src/index.ts +2 -0
  57. package/tsconfig.json +42 -0
  58. package/uno.config.ts +8 -0
@@ -0,0 +1,62 @@
1
+ <script setup lang="ts">
2
+ import { ref, watch } from 'vue'
3
+
4
+ import InputKeyValue from '../Input/InputKeyValue.vue'
5
+
6
+ const props = defineProps<{
7
+ label?: string
8
+ description?: string
9
+ name?: string
10
+ keyPlaceholder?: string
11
+ valuePlaceholder?: string
12
+ required?: boolean
13
+ inputClass?: string
14
+ }>()
15
+
16
+ const emit = defineEmits<{
17
+ (e: 'remove', index: number): void
18
+ (e: 'add', key: string, value: string): void
19
+ }>()
20
+
21
+ const keyValues = defineModel<{ key: string, value: string }[]>({ required: true })
22
+ const inputKey = ref('')
23
+ const inputValue = ref('')
24
+
25
+ watch([inputKey, inputValue], () => {
26
+ emit('add', inputKey.value, inputValue.value)
27
+ })
28
+ </script>
29
+
30
+ <template>
31
+ <div max-w-full>
32
+ <label flex="~ col gap-2">
33
+ <div>
34
+ <div class="flex items-center gap-1 text-sm font-medium">
35
+ {{ props.label }}
36
+ <span v-if="props.required !== false" class="text-red-500">*</span>
37
+ </div>
38
+ <div class="text-xs text-neutral-500 dark:text-neutral-400" text-nowrap>
39
+ {{ props.description }}
40
+ </div>
41
+ </div>
42
+ <div v-auto-animate flex="~ col gap-2">
43
+ <div
44
+ v-for="(keyValue, index) in keyValues"
45
+ :key="index"
46
+ w-full flex items-center gap-2
47
+ >
48
+ <InputKeyValue
49
+ v-model:property-key="keyValue.key"
50
+ v-model:property-value="keyValue.value"
51
+ :key-placeholder="props.keyPlaceholder"
52
+ :value-placeholder="props.valuePlaceholder"
53
+ w-full
54
+ />
55
+ <button @click="emit('remove', index)">
56
+ <div i-solar:minus-circle-line-duotone size="6" />
57
+ </button>
58
+ </div>
59
+ </div>
60
+ </label>
61
+ </div>
62
+ </template>
@@ -0,0 +1,39 @@
1
+ <script setup lang="ts">
2
+ import Range from '../Range/Range.vue'
3
+
4
+ const props = defineProps<{
5
+ min?: number
6
+ max?: number
7
+ step?: number
8
+ label?: string
9
+ description?: string
10
+ formatValue?: (value: number) => string
11
+ }>()
12
+
13
+ const modelValue = defineModel<number>({ required: true })
14
+ </script>
15
+
16
+ <template>
17
+ <label flex="~ col gap-4">
18
+ <div flex="~ row" items-center gap-2>
19
+ <div flex="1">
20
+ <div class="flex items-center gap-1 text-sm font-medium">
21
+ {{ label }}
22
+ </div>
23
+ <div class="text-xs text-neutral-500 dark:text-neutral-400">
24
+ {{ description }}
25
+ </div>
26
+ </div>
27
+ <span font-mono>{{ props.formatValue?.(modelValue) || modelValue }}</span>
28
+ </div>
29
+ <div flex="~ row" items-center gap-2>
30
+ <Range
31
+ v-model="modelValue"
32
+ :min="min || 0"
33
+ :max="max || 1"
34
+ :step="step || 0.01"
35
+ w-full
36
+ />
37
+ </div>
38
+ </label>
39
+ </template>
@@ -0,0 +1,4 @@
1
+ export { default as FieldCheckbox } from './FieldCheckbox.vue'
2
+ export { default as FieldInput } from './FieldInput.vue'
3
+ export { default as FieldKeyValues } from './FieldKeyValues.vue'
4
+ export { default as FieldRange } from './FieldRange.vue'
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ type?: string
4
+ }>()
5
+
6
+ const modelValue = defineModel<string>({ required: true })
7
+ </script>
8
+
9
+ <template>
10
+ <input
11
+ v-model="modelValue"
12
+ :type="props.type || 'text'"
13
+ border="focus:primary-300 dark:focus:primary-400/50 2 solid neutral-100 dark:neutral-900"
14
+ transition="all duration-200 ease-in-out"
15
+ text="disabled:neutral-400 dark:disabled:neutral-600"
16
+ cursor="disabled:not-allowed"
17
+ w-full rounded-lg px-2 py-1 text-nowrap text-sm outline-none
18
+ shadow="sm"
19
+ bg="neutral-50 dark:neutral-950 focus:neutral-50 dark:focus:neutral-900"
20
+ >
21
+ </template>
@@ -0,0 +1,71 @@
1
+ <script setup lang="ts">
2
+ import { useDebounce } from '@vueuse/core'
3
+ import { ref } from 'vue'
4
+
5
+ defineProps<{
6
+ accept?: string
7
+ multiple?: boolean
8
+ }>()
9
+
10
+ const files = defineModel<File[]>({ required: false, default: () => [] })
11
+ const firstFile = ref<File>()
12
+
13
+ const isDragging = ref(false)
14
+ const isDraggingDebounced = useDebounce(isDragging, 150)
15
+
16
+ function handleFileChange(e: Event) {
17
+ const input = e.target as HTMLInputElement
18
+
19
+ if (input.files && input.files.length > 0) {
20
+ firstFile.value = input.files[0]
21
+ }
22
+
23
+ files.value = Array.from(input.files || [])
24
+ isDragging.value = false
25
+ }
26
+ </script>
27
+
28
+ <template>
29
+ <label
30
+ relative
31
+ class="min-h-[120px] flex flex-col cursor-pointer items-center justify-center rounded-xl p-6"
32
+ :class="[
33
+ isDraggingDebounced ? 'border-primary-400 dark:border-primary-600 hover:border-primary-300 dark:hover:border-primary-700' : 'border-neutral-200 dark:border-neutral-700 hover:border-primary-300 dark:hover:border-primary-700',
34
+ isDraggingDebounced ? 'bg-primary-50/5 dark:bg-primary-900/5' : 'bg-white/60 dark:bg-black/30 hover:bg-white/80 dark:hover:bg-black/40',
35
+ ]"
36
+ border="dashed 2"
37
+ transition="all duration-300"
38
+ cursor-pointer opacity-95
39
+ hover="scale-100 opacity-100 shadow-md dark:shadow-lg"
40
+ @dragover="isDragging = true"
41
+ @dragleave="isDragging = false"
42
+ >
43
+ <input
44
+ type="file"
45
+ :accept="accept"
46
+ :multiple="multiple"
47
+ cursor-pointer
48
+ class="absolute inset-0 h-full w-full opacity-0"
49
+ @change="handleFileChange"
50
+ >
51
+ <slot :is-dragging="isDraggingDebounced" :first-file="firstFile" :files="files">
52
+ <div
53
+ class="flex flex-col items-center"
54
+ :class="[
55
+ isDraggingDebounced ? 'text-primary-500 dark:text-primary-400' : 'text-neutral-400 dark:text-neutral-500',
56
+ ]"
57
+ >
58
+ <div i-solar:upload-square-line-duotone mb-2 text-5xl />
59
+ <p font-medium text="center lg">
60
+ Upload
61
+ </p>
62
+ <p v-if="isDraggingDebounced" text="center" text-sm>
63
+ Release to upload
64
+ </p>
65
+ <p v-else text="center" text-sm>
66
+ Click or drag and drop a file here
67
+ </p>
68
+ </div>
69
+ </slot>
70
+ </label>
71
+ </template>
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import Input from './Input.vue'
3
+
4
+ const props = defineProps<{
5
+ name?: string
6
+ keyPlaceholder?: string
7
+ valuePlaceholder?: string
8
+ }>()
9
+
10
+ const key = defineModel<string>('propertyKey', { required: true })
11
+ const value = defineModel<string>('propertyValue', { required: true })
12
+ </script>
13
+
14
+ <template>
15
+ <div flex="~ gap-2">
16
+ <Input v-model="key" :placeholder="props.keyPlaceholder" class="w-1/2" />
17
+ <Input v-model="value" :placeholder="props.valuePlaceholder" class="w-1/2" />
18
+ </div>
19
+ </template>
@@ -0,0 +1,3 @@
1
+ export { default as Input } from './Input.vue'
2
+ export { default as InputFile } from './InputFile.vue'
3
+ export { default as InputKeyValue } from './InputKeyValue.vue'
@@ -0,0 +1,106 @@
1
+ <script setup lang="ts">
2
+ withDefaults(defineProps<{
3
+ id: string
4
+ name: string
5
+ value: string
6
+ title: string
7
+ deprecated?: boolean
8
+ }>(), {
9
+ deprecated: false,
10
+ })
11
+
12
+ const modelValue = defineModel<string>({ required: true })
13
+ </script>
14
+
15
+ <template>
16
+ <label
17
+ :key="id"
18
+ class="form_radio relative flex cursor-pointer items-start rounded-xl p-3 pr-[20px]"
19
+ transition="all duration-200 ease-in-out"
20
+ border="2 solid"
21
+ :class="[
22
+ modelValue === value
23
+ ? 'bg-primary-50 dark:bg-primary-900/20 border-primary-100 dark:border-primary-900 hover:border-primary-500/30 dark:hover:border-primary-400/30'
24
+ : 'bg-white dark:bg-neutral-900/20 border-neutral-100 dark:border-neutral-900 hover:border-primary-500/30 dark:hover:border-primary-400/30',
25
+ modelValue === value
26
+ ? 'form_radio-active'
27
+ : '',
28
+ deprecated ? 'opacity-60' : '',
29
+ ]"
30
+ >
31
+ <input
32
+ v-model="modelValue"
33
+ :checked="modelValue === value"
34
+ type="radio"
35
+ :name="name"
36
+ :value="value"
37
+ class="absolute opacity-0"
38
+ >
39
+ <div class="relative mr-3 mt-0.5 flex-shrink-0">
40
+ <div
41
+ class="size-5 border-2 rounded-full transition-colors duration-200"
42
+ :class="[
43
+ modelValue === value
44
+ ? 'border-primary-500 dark:border-primary-400'
45
+ : 'border-neutral-300 dark:border-neutral-600',
46
+ ]"
47
+ >
48
+ <div
49
+ class="absolute left-1/2 top-1/2 size-3 rounded-full transition-opacity duration-200 -translate-x-1/2 -translate-y-1/2"
50
+ :class="[
51
+ modelValue === value
52
+ ? 'opacity-100 bg-primary-500 dark:bg-primary-400'
53
+ : 'opacity-0',
54
+ ]"
55
+ />
56
+ </div>
57
+ </div>
58
+ <div class="w-full flex flex-col gap-2">
59
+ <div class="flex items-center">
60
+ <span
61
+ class="line-clamp-1 font-medium"
62
+ :class="[
63
+ modelValue === value
64
+ ? 'text-neutral-700 dark:text-neutral-300'
65
+ : 'text-neutral-700 dark:text-neutral-400',
66
+ ]"
67
+ >
68
+ {{ title }}
69
+ </span>
70
+ </div>
71
+ </div>
72
+ </label>
73
+ </template>
74
+
75
+ <style scoped>
76
+ .form_radio {
77
+ position: relative;
78
+ overflow: hidden;
79
+ }
80
+
81
+ .form_radio::before {
82
+ --at-apply: 'bg-gradient-to-r from-primary-500/0 to-primary-500/0 dark:from-primary-400/0 dark:to-primary-400/0';
83
+ content: '';
84
+ position: absolute;
85
+ inset: 0;
86
+ z-index: 0;
87
+ width: 25%;
88
+ height: 100%;
89
+ transition: all 0.35s ease-in-out;
90
+ mask-image: linear-gradient(120deg, white 100%);
91
+ opacity: 0;
92
+ }
93
+
94
+ .form_radio:hover::before,
95
+ .form_radio._hover::before {
96
+ --at-apply: 'bg-gradient-to-r from-primary-500/20 via-primary-500/10 to-transparent dark:from-primary-400/20 dark:via-primary-400/10 dark:to-transparent';
97
+ width: 85%;
98
+ opacity: 1;
99
+ }
100
+
101
+ .form_radio-active::before {
102
+ --at-apply: 'bg-gradient-to-r from-primary-500/20 via-primary-500/10 to-transparent dark:from-primary-400/20 dark:via-primary-400/10 dark:to-transparent';
103
+ width: 85%;
104
+ opacity: 0.5;
105
+ }
106
+ </style>
@@ -0,0 +1 @@
1
+ export { default as Radio } from './Radio.vue'
@@ -0,0 +1,328 @@
1
+ <script setup lang="ts">
2
+ import { computed, onMounted, ref } from 'vue'
3
+
4
+ const props = withDefaults(defineProps<{
5
+ min?: number
6
+ max?: number
7
+ step?: number
8
+ disabled?: boolean
9
+ thumbColor?: string
10
+ trackColor?: string
11
+ trackValueColor?: string
12
+ }>(), {
13
+ min: 0,
14
+ max: 100,
15
+ step: 1,
16
+ disabled: false,
17
+ thumbColor: '#9090906e',
18
+ trackColor: 'gray',
19
+ trackValueColor: 'red',
20
+ })
21
+
22
+ const modelValue = defineModel<number>('modelValue', { required: true })
23
+
24
+ const scaledMin = computed(() => props.min * 10000)
25
+ const scaledMax = computed(() => props.max * 10000)
26
+ const scaledStep = computed(() => props.step * 10000)
27
+
28
+ const sliderRef = ref<HTMLInputElement>()
29
+ const sliderValue = computed({
30
+ get: () => modelValue.value * 10000,
31
+ set: (value: number) => {
32
+ modelValue.value = value / 10000
33
+ updateTrackColor()
34
+ },
35
+ })
36
+
37
+ onMounted(() => {
38
+ updateTrackColor()
39
+ })
40
+
41
+ function updateTrackColor() {
42
+ if (!sliderRef.value)
43
+ return
44
+
45
+ sliderRef.value.style.setProperty('--value', sliderRef.value.value)
46
+ sliderRef.value.style.setProperty('--min', !sliderRef.value.min ? props.min.toString() : sliderRef.value.min)
47
+ sliderRef.value.style.setProperty('--max', !sliderRef.value.max ? props.max.toString() : sliderRef.value.max)
48
+ }
49
+ </script>
50
+
51
+ <template>
52
+ <input
53
+ ref="sliderRef"
54
+ v-model.number="sliderValue"
55
+ type="range"
56
+ :min="scaledMin"
57
+ :max="scaledMax"
58
+ :step="scaledStep"
59
+ class="slider-progress form_input-range"
60
+ @input="(e) => {
61
+ (e.target as HTMLInputElement).style.setProperty('--value', (e.target as HTMLInputElement).value)
62
+ }"
63
+ >
64
+ </template>
65
+
66
+ <style scoped>
67
+ /*generated with Input range slider CSS style generator (version 20211225)
68
+ https://toughengineer.github.io/demo/slider-styler*/
69
+ .form_input-range {
70
+ --height: 2em;
71
+
72
+ min-height: var(--height);
73
+ appearance: none;
74
+ background: transparent;
75
+ border-radius: 4px;
76
+ transition: background-color 0.2s ease;
77
+
78
+ --thumb-width: 4px;
79
+ --thumb-height: var(--height);
80
+ --thumb-box-shadow: 0 0 0px #e6e6e6;
81
+ --thumb-border: none;
82
+ --thumb-border-radius: 999px;
83
+ --thumb-background: oklch(80% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
84
+ --thumb-background-hover: oklch(90% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
85
+ --thumb-background-active: oklch(70% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
86
+
87
+ --track-height: calc(var(--height) - var(--track-value-padding) * 2);
88
+ --track-box-shadow: none;
89
+ --track-border: solid 2px rgb(238, 238, 238);
90
+ --track-border-radius: 6px;
91
+ --track-background: rgb(238, 238, 238);
92
+ --track-background-hover: rgb(238, 238, 238);
93
+ --track-background-active: rgb(238, 238, 238);
94
+
95
+ --track-value-background: rgb(255, 255, 255);
96
+ --track-value-background-hover: rgb(255, 255, 255);
97
+ --track-value-background-active: rgb(255, 255, 255);
98
+ --track-value-padding: 2px;
99
+ }
100
+
101
+ .dark .form_input-range {
102
+ --thumb-background: oklch(70% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
103
+ --thumb-background-hover: oklch(90% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
104
+ --thumb-background-active: oklch(80% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + 0));
105
+
106
+ --track-border: solid 2px rgb(44, 44, 44);
107
+ --track-background: rgb(44, 44, 44);
108
+ --track-background-hover: rgb(44, 44, 44);
109
+ --track-background-active: rgb(44, 44, 44);
110
+
111
+ --track-value-background: rgb(164, 164, 164);
112
+ --track-value-background-hover: rgb(164, 164, 164);
113
+ --track-value-background-active: rgb(164, 164, 164);
114
+ }
115
+
116
+ /*progress support*/
117
+ .form_input-range.slider-progress {
118
+ --range: calc(var(--max) - var(--min));
119
+ --ratio: calc((var(--value) - var(--min)) / var(--range));
120
+ --sx: calc(0.5 * 0em + var(--ratio) * (100% - 0em));
121
+ }
122
+
123
+ .form_input-range:focus {
124
+ outline: none;
125
+ }
126
+
127
+ /*webkit*/
128
+ .form_input-range::-webkit-slider-thumb {
129
+ appearance: none;
130
+ width: var(--thumb-width);
131
+ height: var(--thumb-height);
132
+ border-radius: var(--thumb-border-radius);
133
+ background: var(--thumb-background);
134
+ border: var(--thumb-border);
135
+ box-shadow: var(--thumb-box-shadow);
136
+ margin-top: calc(var(--track-height) * 0.5 - var(--thumb-height) * 0.5 - 2px);
137
+ margin-left: calc(0 - var(--track-value-padding));
138
+ cursor: col-resize;
139
+ transition:
140
+ background 0.2s ease-in-out,
141
+ box-shadow 0.2s ease-in-out,
142
+ border-color 0.2s ease-in-out,
143
+ transform 0.2s ease-in-out;
144
+ }
145
+
146
+ .form_input-range::-webkit-slider-runnable-track {
147
+ height: var(--track-height);
148
+ border: var(--track-border);
149
+ border-radius: var(--track-border-radius);
150
+ background: var(--track-background);
151
+ box-shadow: var(--track-box-shadow);
152
+ position: relative;
153
+ cursor: col-resize;
154
+ transition:
155
+ box-shadow 0.2s ease-in-out,
156
+ border-color 0.2s ease-in-out;
157
+ }
158
+
159
+ .form_input-range::-webkit-slider-thumb:hover {
160
+ background: var(--thumb-background-hover);
161
+ }
162
+
163
+ .form_input-range:hover::-webkit-slider-runnable-track {
164
+ background: var(--track-background-hover);
165
+ }
166
+
167
+ .form_input-range::-webkit-slider-thumb:active {
168
+ background: var(--thumb-background-active);
169
+ }
170
+
171
+ .form_input-range:active::-webkit-slider-runnable-track {
172
+ background: var(--track-background-active);
173
+ }
174
+
175
+ .form_input-range.slider-progress::-webkit-slider-runnable-track {
176
+ /* margin-left: var(--track-value-padding); */
177
+ margin-right: calc(0 - var(--track-value-padding));
178
+ background:
179
+ linear-gradient(var(--track-value-background), var(--track-value-background)) 0 / var(--sx) 100% no-repeat,
180
+ var(--track-background);
181
+ }
182
+
183
+ .form_input-range.slider-progress:hover::-webkit-slider-runnable-track {
184
+ background:
185
+ linear-gradient(var(--track-value-background-hover), var(--track-value-background-hover)) 0 / var(--sx) 100%
186
+ no-repeat,
187
+ var(--track-background-hover);
188
+ }
189
+
190
+ .form_input-range.slider-progress:active::-webkit-slider-runnable-track {
191
+ background:
192
+ linear-gradient(var(--track-value-background-active), var(--track-value-background-active)) 0 / var(--sx) 100%
193
+ no-repeat,
194
+ var(--track-background-active);
195
+ }
196
+
197
+ /*mozilla*/
198
+ .form_input-range::-moz-range-thumb {
199
+ width: var(--thumb-width);
200
+ height: var(--thumb-height);
201
+ border-radius: var(--thumb-border-radius);
202
+ background: var(--thumb-background);
203
+ border: none;
204
+ box-shadow: var(--thumb-box-shadow);
205
+ cursor: col-resize;
206
+ margin-left: calc(0 - var(--track-value-padding));
207
+ }
208
+
209
+ .form_input-range::-moz-range-track {
210
+ height: var(--track-height);
211
+ border: var(--track-border);
212
+ border-radius: var(--track-border-radius);
213
+ background: var(--track-background);
214
+ box-shadow: var(--track-box-shadow);
215
+ cursor: col-resize;
216
+ /* Trim left and right paddings of track */
217
+ width: calc(100% - var(--track-value-padding) * 2);
218
+ }
219
+
220
+ .form_input-range::-moz-range-thumb:hover {
221
+ background: var(--thumb-background-hover);
222
+ }
223
+
224
+ .form_input-range:hover::-moz-range-track {
225
+ background: var(--track-background-hover);
226
+ }
227
+
228
+ .form_input-range::-moz-range-thumb:active {
229
+ background: var(--thumb-background-active);
230
+ }
231
+
232
+ .form_input-range:active::-moz-range-track {
233
+ background: var(--track-background-active);
234
+ }
235
+
236
+ .form_input-range.slider-progress::-moz-range-track {
237
+ background:
238
+ linear-gradient(var(--track-value-background), var(--track-value-background)) 0 / var(--sx) 100% no-repeat,
239
+ var(--track-background);
240
+ }
241
+
242
+ .form_input-range.slider-progress:hover::-moz-range-track {
243
+ background:
244
+ linear-gradient(var(--track-value-background-hover), var(--track-value-background-hover)) 0 / var(--sx) 100%
245
+ no-repeat,
246
+ var(--track-background-hover);
247
+ }
248
+
249
+ .form_input-range.slider-progress:active::-moz-range-track {
250
+ background:
251
+ linear-gradient(var(--track-value-background-active), var(--track-value-background-active)) 0 / var(--sx) 100%
252
+ no-repeat,
253
+ var(--track-background-active);
254
+ }
255
+
256
+ /*ms*/
257
+ .form_input-range::-ms-fill-upper {
258
+ background: transparent;
259
+ border-color: transparent;
260
+ }
261
+
262
+ .form_input-range::-ms-fill-lower {
263
+ background: transparent;
264
+ border-color: transparent;
265
+ }
266
+
267
+ .form_input-range::-ms-thumb {
268
+ width: var(--thumb-width);
269
+ height: var(--thumb-height);
270
+ border-radius: var(--thumb-border-radius);
271
+ background: var(--thumb-background);
272
+ border: var(--thumb-border);
273
+ box-shadow: var(--thumb-box-shadow);
274
+ /** Center thumb */
275
+ margin-top: 0;
276
+ /** Shift left thumb */
277
+ margin-left: calc(0 - var(--track-value-padding));
278
+ box-sizing: border-box;
279
+ cursor: col-resize;
280
+ }
281
+
282
+ .form_input-range::-ms-track {
283
+ height: var(--track-height);
284
+ border-radius: var(--track-border-radius);
285
+ background: var(--track-background);
286
+ border: var(--track-border);
287
+ box-shadow: var(--track-box-shadow);
288
+ box-sizing: border-box;
289
+ cursor: col-resize;
290
+ }
291
+
292
+ .form_input-range::-ms-thumb:hover {
293
+ background: var(--thumb-background-hover);
294
+ }
295
+
296
+ .form_input-range:hover::-ms-track {
297
+ background: var(--track-background-hover);
298
+ }
299
+
300
+ .form_input-range::-ms-thumb:active {
301
+ background: var(--thumb-background-active);
302
+ }
303
+
304
+ .form_input-range:active::-ms-track {
305
+ background: var(--track-background-active);
306
+ }
307
+
308
+ .form_input-range.slider-progress::-ms-fill-lower {
309
+ height: var(--track-height);
310
+ border-radius: var(--track-border-radius) 0 0 var(--track-border-radius);
311
+ margin: 0;
312
+ background: var(--track-value-background);
313
+ border: none;
314
+ border-right-width: 0;
315
+ /** Shift left thumb */
316
+ margin-left: calc(var(--track-value-padding));
317
+ /** Shift right thumb */
318
+ margin-right: calc(0 - var(--track-value-padding));
319
+ }
320
+
321
+ .form_input-range.slider-progress:hover::-ms-fill-lower {
322
+ background: var(--track-value-background-hover);
323
+ }
324
+
325
+ .form_input-range.slider-progress:active::-ms-fill-lower {
326
+ background: var(--track-value-background-active);
327
+ }
328
+ </style>
@@ -0,0 +1 @@
1
+ export { default as Range } from './Range.vue'