@muxima-ui/core 1.0.0 → 1.1.0

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 (35) hide show
  1. package/README.md +7 -4
  2. package/fesm2022/muxima-ui-core-chips.mjs +349 -0
  3. package/fesm2022/muxima-ui-core-chips.mjs.map +1 -0
  4. package/fesm2022/muxima-ui-core-clipboard.mjs +110 -0
  5. package/fesm2022/muxima-ui-core-clipboard.mjs.map +1 -0
  6. package/fesm2022/muxima-ui-core-date-picker.mjs +494 -12
  7. package/fesm2022/muxima-ui-core-date-picker.mjs.map +1 -1
  8. package/fesm2022/muxima-ui-core-file-upload.mjs +392 -0
  9. package/fesm2022/muxima-ui-core-file-upload.mjs.map +1 -0
  10. package/fesm2022/muxima-ui-core-rating.mjs +212 -0
  11. package/fesm2022/muxima-ui-core-rating.mjs.map +1 -0
  12. package/fesm2022/muxima-ui-core-slider.mjs +211 -3
  13. package/fesm2022/muxima-ui-core-slider.mjs.map +1 -1
  14. package/fesm2022/muxima-ui-core-time-picker.mjs +389 -0
  15. package/fesm2022/muxima-ui-core-time-picker.mjs.map +1 -0
  16. package/fesm2022/muxima-ui-core.mjs +1 -1
  17. package/fesm2022/muxima-ui-core.mjs.map +1 -1
  18. package/package.json +21 -1
  19. package/styles/base.css +9 -1
  20. package/styles/components/chips.css +170 -0
  21. package/styles/components/clipboard.css +52 -0
  22. package/styles/components/date-picker.css +135 -0
  23. package/styles/components/file-upload.css +164 -0
  24. package/styles/components/rating.css +89 -0
  25. package/styles/components/slider.css +111 -0
  26. package/styles/components/time-picker.css +39 -0
  27. package/styles/muxima.css +5 -0
  28. package/types/muxima-ui-core-chips.d.ts +120 -0
  29. package/types/muxima-ui-core-clipboard.d.ts +42 -0
  30. package/types/muxima-ui-core-date-picker.d.ts +130 -2
  31. package/types/muxima-ui-core-file-upload.d.ts +96 -0
  32. package/types/muxima-ui-core-rating.d.ts +64 -0
  33. package/types/muxima-ui-core-slider.d.ts +68 -6
  34. package/types/muxima-ui-core-time-picker.d.ts +83 -0
  35. package/types/muxima-ui-core.d.ts +1 -1
@@ -0,0 +1,170 @@
1
+ /* ---------- Chips ---------- */
2
+
3
+ .mx-chip {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ gap: 4px;
7
+ box-sizing: border-box;
8
+ height: 28px;
9
+ max-width: 100%;
10
+ padding: 0 10px;
11
+ border: 1px solid var(--mx-stone);
12
+ border-radius: 999px;
13
+ background: var(--mx-subtle);
14
+ color: var(--mx-ink);
15
+ font-family: var(--mx-font-sans);
16
+ font-size: var(--mx-text-sm);
17
+ font-weight: 500;
18
+ line-height: 1;
19
+ white-space: nowrap;
20
+ vertical-align: middle;
21
+ }
22
+ .mx-chip[data-size='sm'] {
23
+ height: 24px;
24
+ padding: 0 8px;
25
+ font-size: var(--mx-text-xs);
26
+ }
27
+ .mx-chip[data-variant='outline'] {
28
+ background: transparent;
29
+ border-color: var(--mx-stone-strong);
30
+ }
31
+ .mx-chip[data-variant='accent'] {
32
+ background: var(--mx-accent-soft);
33
+ border-color: color-mix(in oklab, var(--mx-accent) 30%, var(--mx-surface));
34
+ color: var(--mx-accent);
35
+ }
36
+ .mx-chip[data-disabled] {
37
+ color: var(--mx-muted);
38
+ }
39
+ .mx-chip-label {
40
+ overflow: hidden;
41
+ text-overflow: ellipsis;
42
+ }
43
+ .mx-chip:has(.mx-chip-remove) {
44
+ padding-right: 3px;
45
+ }
46
+ .mx-chip-remove {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ flex-shrink: 0;
51
+ width: 20px;
52
+ height: 20px;
53
+ padding: 0;
54
+ border: 0;
55
+ border-radius: 50%;
56
+ background: transparent;
57
+ color: var(--mx-muted);
58
+ cursor: pointer;
59
+ }
60
+ .mx-chip[data-size='sm'] .mx-chip-remove {
61
+ width: 18px;
62
+ height: 18px;
63
+ }
64
+ .mx-chip-remove svg {
65
+ width: 12px;
66
+ height: 12px;
67
+ }
68
+ .mx-chip-remove:hover:not(:disabled) {
69
+ background: var(--mx-stone);
70
+ color: var(--mx-ink);
71
+ }
72
+ .mx-chip-remove:disabled {
73
+ cursor: not-allowed;
74
+ }
75
+
76
+ /* Chip que liga e desliga */
77
+ .mx-chip-toggle {
78
+ background: var(--mx-surface);
79
+ cursor: pointer;
80
+ transition: background var(--mx-duration) var(--mx-ease), border-color var(--mx-duration) var(--mx-ease);
81
+ }
82
+ .mx-chip-toggle:is(:hover, [data-mx-state='hover']):not(:disabled) {
83
+ background: var(--mx-subtle);
84
+ }
85
+ .mx-chip-toggle[aria-pressed='true'] {
86
+ border-color: var(--mx-accent);
87
+ background: var(--mx-accent-soft);
88
+ color: var(--mx-accent);
89
+ }
90
+ .mx-chip-toggle[aria-pressed='true']::before {
91
+ content: '';
92
+ width: 12px;
93
+ height: 12px;
94
+ margin-left: -2px;
95
+ background: currentColor;
96
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat;
97
+ }
98
+ .mx-chip-toggle:disabled {
99
+ color: var(--mx-muted);
100
+ cursor: not-allowed;
101
+ }
102
+
103
+ /* Campo de etiquetas */
104
+ .mx-tag-input {
105
+ display: flex;
106
+ flex-wrap: wrap;
107
+ align-items: center;
108
+ gap: 4px;
109
+ box-sizing: border-box;
110
+ width: 100%;
111
+ min-height: var(--mx-control-height);
112
+ padding: 4px 6px;
113
+ border: 1px solid var(--mx-control-border);
114
+ border-radius: var(--mx-radius);
115
+ background: var(--mx-surface);
116
+ font-family: var(--mx-font-sans);
117
+ cursor: text;
118
+ transition: border-color var(--mx-duration) var(--mx-ease);
119
+ }
120
+ .mx-tag-input:hover:not([data-disabled]) {
121
+ border-color: var(--mx-muted);
122
+ }
123
+ .mx-tag-input:focus-within {
124
+ border-color: var(--mx-accent);
125
+ }
126
+ .mx-tag-input[data-invalid] {
127
+ border-color: var(--mx-danger);
128
+ }
129
+ .mx-tag-input[data-disabled] {
130
+ background: var(--mx-subtle);
131
+ cursor: not-allowed;
132
+ }
133
+ .mx-tag-input[data-size='lg'] {
134
+ min-height: var(--mx-control-height-lg);
135
+ }
136
+ .mx-tag-input[data-size='sm'] {
137
+ min-height: var(--mx-control-height-sm);
138
+ }
139
+ .mx-tag-input-list {
140
+ display: flex;
141
+ flex-wrap: wrap;
142
+ gap: 4px;
143
+ max-width: 100%;
144
+ margin: 0;
145
+ padding: 0;
146
+ list-style: none;
147
+ }
148
+ .mx-tag-input-list > li {
149
+ display: inline-flex;
150
+ max-width: 100%;
151
+ }
152
+ .mx-tag-input-field {
153
+ flex: 1;
154
+ min-width: 120px;
155
+ height: 26px;
156
+ padding: 0 6px;
157
+ border: 0;
158
+ border-radius: calc(var(--mx-radius) - 2px);
159
+ background: transparent;
160
+ color: var(--mx-ink);
161
+ font: inherit;
162
+ font-size: var(--mx-text-md);
163
+ }
164
+ .mx-tag-input-field::placeholder {
165
+ color: var(--mx-muted);
166
+ opacity: 1;
167
+ }
168
+ .mx-tag-input-field:disabled {
169
+ cursor: not-allowed;
170
+ }
@@ -0,0 +1,52 @@
1
+ /* ---------- Copy to clipboard ---------- */
2
+
3
+ .mx-copy-button {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: 6px;
8
+ box-sizing: border-box;
9
+ min-width: 32px;
10
+ height: 32px;
11
+ padding: 0 8px;
12
+ border: 1px solid var(--mx-stone);
13
+ border-radius: var(--mx-radius);
14
+ background: var(--mx-surface);
15
+ color: var(--mx-muted);
16
+ font-family: var(--mx-font-sans);
17
+ font-size: var(--mx-text-sm);
18
+ cursor: pointer;
19
+ transition: background var(--mx-duration) var(--mx-ease), color var(--mx-duration) var(--mx-ease);
20
+ }
21
+ .mx-copy-button[data-size='sm'] {
22
+ min-width: 26px;
23
+ height: 26px;
24
+ padding: 0 5px;
25
+ }
26
+ .mx-copy-button svg {
27
+ width: 16px;
28
+ height: 16px;
29
+ flex-shrink: 0;
30
+ }
31
+ .mx-copy-button[data-size='sm'] svg {
32
+ width: 14px;
33
+ height: 14px;
34
+ }
35
+ .mx-copy-button:is(:hover, [data-mx-state='hover']) {
36
+ background: var(--mx-subtle);
37
+ color: var(--mx-ink);
38
+ }
39
+ .mx-copy-button[data-copied] {
40
+ border-color: color-mix(in oklab, var(--mx-success) 40%, var(--mx-surface));
41
+ color: var(--mx-success);
42
+ }
43
+ .mx-input-group > .mx-copy-button {
44
+ height: auto;
45
+ border-radius: 0;
46
+ border-color: var(--mx-control-border);
47
+ margin-left: -1px;
48
+ }
49
+ .mx-input-group > .mx-copy-button:last-child {
50
+ border-top-right-radius: var(--mx-radius);
51
+ border-bottom-right-radius: var(--mx-radius);
52
+ }
@@ -142,3 +142,138 @@ td[aria-selected='true'] > .mx-calendar-day {
142
142
  cursor: not-allowed;
143
143
  background: transparent;
144
144
  }
145
+
146
+ /* ---------- Intervalo de datas ---------- */
147
+
148
+ .mx-date-range-picker {
149
+ display: block;
150
+ width: 100%;
151
+ font-family: var(--mx-font-sans);
152
+ }
153
+ .mx-date-range-field {
154
+ position: relative;
155
+ display: flex;
156
+ align-items: center;
157
+ box-sizing: border-box;
158
+ width: 100%;
159
+ height: var(--mx-control-height);
160
+ padding: 0 40px 0 4px;
161
+ border: 1px solid var(--mx-control-border);
162
+ border-radius: var(--mx-radius);
163
+ background: var(--mx-surface);
164
+ transition: border-color var(--mx-duration) var(--mx-ease);
165
+ }
166
+ .mx-date-range-field:hover:not([data-disabled]) {
167
+ border-color: var(--mx-muted);
168
+ }
169
+ .mx-date-range-field:focus-within {
170
+ border-color: var(--mx-accent);
171
+ }
172
+ .mx-date-range-field[data-invalid] {
173
+ border-color: var(--mx-danger);
174
+ }
175
+ .mx-date-range-field[data-disabled] {
176
+ background: var(--mx-subtle);
177
+ }
178
+ .mx-date-range-field[data-size='sm'] {
179
+ height: var(--mx-control-height-sm);
180
+ }
181
+ .mx-date-range-field[data-size='lg'] {
182
+ height: var(--mx-control-height-lg);
183
+ }
184
+ .mx-date-range-input {
185
+ flex: 1;
186
+ min-width: 0;
187
+ height: calc(100% - 8px);
188
+ padding: 0 8px;
189
+ border: 0;
190
+ border-radius: calc(var(--mx-radius) - 2px);
191
+ background: transparent;
192
+ color: var(--mx-ink);
193
+ font-family: inherit;
194
+ font-size: var(--mx-text-md);
195
+ font-variant-numeric: tabular-nums;
196
+ }
197
+ .mx-date-range-field[data-size='sm'] .mx-date-range-input {
198
+ font-size: var(--mx-text-sm);
199
+ }
200
+ .mx-date-range-input::placeholder {
201
+ color: var(--mx-muted);
202
+ opacity: 1;
203
+ }
204
+ .mx-date-range-input:disabled {
205
+ color: var(--mx-muted);
206
+ cursor: not-allowed;
207
+ }
208
+ .mx-date-range-sep {
209
+ color: var(--mx-muted);
210
+ }
211
+ .mx-date-range-panel {
212
+ display: flex;
213
+ gap: 12px;
214
+ }
215
+ .mx-date-range-presets {
216
+ display: flex;
217
+ flex-direction: column;
218
+ gap: 2px;
219
+ min-width: 132px;
220
+ margin: 0;
221
+ padding: 0 12px 0 0;
222
+ border-right: var(--mx-border);
223
+ list-style: none;
224
+ }
225
+ .mx-date-range-preset {
226
+ width: 100%;
227
+ padding: 6px 8px;
228
+ border: 0;
229
+ border-radius: var(--mx-radius);
230
+ background: transparent;
231
+ color: var(--mx-ink);
232
+ font: inherit;
233
+ font-size: var(--mx-text-sm);
234
+ text-align: start;
235
+ cursor: pointer;
236
+ }
237
+ .mx-date-range-preset:hover {
238
+ background: var(--mx-subtle);
239
+ }
240
+ @media (max-width: 560px) {
241
+ .mx-date-range-panel {
242
+ flex-direction: column;
243
+ }
244
+ .mx-date-range-presets {
245
+ flex-direction: row;
246
+ flex-wrap: wrap;
247
+ padding: 0 0 8px;
248
+ border-right: 0;
249
+ border-bottom: var(--mx-border);
250
+ }
251
+ .mx-date-range-preset {
252
+ width: auto;
253
+ }
254
+ }
255
+
256
+ /* Intervalo no calendário */
257
+ .mx-calendar {
258
+ --_range-bg: color-mix(in oklab, var(--mx-accent) 16%, var(--mx-surface));
259
+ }
260
+ td[data-in-range] > .mx-calendar-day {
261
+ border-radius: 0;
262
+ background: var(--_range-bg);
263
+ color: var(--mx-ink);
264
+ font-weight: 400;
265
+ }
266
+ td[data-in-range] {
267
+ background: var(--_range-bg);
268
+ }
269
+ td[data-range-start]:not([data-range-end]) {
270
+ background: linear-gradient(to right, transparent 50%, var(--_range-bg) 50%);
271
+ }
272
+ td[data-range-end]:not([data-range-start]) {
273
+ background: linear-gradient(to left, transparent 50%, var(--_range-bg) 50%);
274
+ }
275
+ td:is([data-range-start], [data-range-end]) > .mx-calendar-day {
276
+ background: var(--mx-accent);
277
+ color: var(--mx-on-accent);
278
+ font-weight: 600;
279
+ }
@@ -0,0 +1,164 @@
1
+ /* ---------- File upload ---------- */
2
+
3
+ .mx-file-upload {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 10px;
7
+ width: 100%;
8
+ font-family: var(--mx-font-sans);
9
+ }
10
+ .mx-file-upload-zone {
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: center;
14
+ gap: 6px;
15
+ padding: 24px 16px;
16
+ border: 1.5px dashed var(--mx-control-border);
17
+ border-radius: var(--mx-radius-surface);
18
+ background: var(--mx-surface);
19
+ color: var(--mx-ink);
20
+ text-align: center;
21
+ transition: border-color var(--mx-duration) var(--mx-ease), background var(--mx-duration) var(--mx-ease);
22
+ }
23
+ .mx-file-upload-zone:hover {
24
+ border-color: var(--mx-muted);
25
+ }
26
+ .mx-file-upload-zone[data-dragging] {
27
+ border-color: var(--mx-accent);
28
+ background: var(--mx-accent-soft);
29
+ }
30
+ .mx-file-upload[data-invalid] .mx-file-upload-zone {
31
+ border-color: var(--mx-danger);
32
+ }
33
+ .mx-file-upload[data-disabled] .mx-file-upload-zone {
34
+ background: var(--mx-subtle);
35
+ color: var(--mx-muted);
36
+ }
37
+ .mx-file-upload-icon {
38
+ width: 28px;
39
+ height: 28px;
40
+ color: var(--mx-muted);
41
+ }
42
+ .mx-file-upload-text {
43
+ margin: 0;
44
+ font-size: var(--mx-text-md);
45
+ }
46
+ .mx-file-upload-button {
47
+ margin-inline-start: 0.3em;
48
+ padding: 0;
49
+ border: 0;
50
+ background: none;
51
+ color: var(--mx-accent);
52
+ font: inherit;
53
+ font-weight: 600;
54
+ text-decoration: underline;
55
+ text-underline-offset: 3px;
56
+ cursor: pointer;
57
+ }
58
+ .mx-file-upload-button:disabled {
59
+ color: var(--mx-muted);
60
+ cursor: not-allowed;
61
+ }
62
+ .mx-file-upload-desc {
63
+ margin: 0;
64
+ color: var(--mx-muted);
65
+ font-size: var(--mx-text-sm);
66
+ }
67
+ .mx-file-upload-rejections {
68
+ margin: 0;
69
+ padding: 0;
70
+ color: var(--mx-danger);
71
+ font-size: var(--mx-text-sm);
72
+ list-style: none;
73
+ }
74
+ .mx-file-upload-list {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: 6px;
78
+ margin: 0;
79
+ padding: 0;
80
+ list-style: none;
81
+ }
82
+ .mx-file-upload-item {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 10px;
86
+ padding: 8px 8px 8px 12px;
87
+ border: var(--mx-border);
88
+ border-radius: var(--mx-radius);
89
+ background: var(--mx-surface);
90
+ }
91
+ .mx-file-upload-item[data-error] {
92
+ border-color: color-mix(in oklab, var(--mx-danger) 40%, var(--mx-surface));
93
+ }
94
+ .mx-file-upload-file-icon {
95
+ flex-shrink: 0;
96
+ width: 18px;
97
+ height: 18px;
98
+ color: var(--mx-muted);
99
+ }
100
+ .mx-file-upload-info {
101
+ display: flex;
102
+ flex: 1;
103
+ flex-direction: column;
104
+ gap: 2px;
105
+ min-width: 0;
106
+ }
107
+ .mx-file-upload-name {
108
+ overflow: hidden;
109
+ color: var(--mx-ink);
110
+ font-size: var(--mx-text-sm);
111
+ font-weight: 500;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ }
115
+ .mx-file-upload-meta {
116
+ color: var(--mx-muted);
117
+ font-size: var(--mx-text-xs);
118
+ font-variant-numeric: tabular-nums;
119
+ }
120
+ .mx-file-upload-error {
121
+ color: var(--mx-danger);
122
+ }
123
+ .mx-file-upload-progress {
124
+ display: block;
125
+ width: 100%;
126
+ height: 4px;
127
+ margin-top: 4px;
128
+ border: 0;
129
+ border-radius: 999px;
130
+ background: var(--mx-stone);
131
+ appearance: none;
132
+ overflow: hidden;
133
+ }
134
+ .mx-file-upload-progress::-webkit-progress-bar {
135
+ background: var(--mx-stone);
136
+ }
137
+ .mx-file-upload-progress::-webkit-progress-value {
138
+ background: var(--mx-accent);
139
+ }
140
+ .mx-file-upload-progress::-moz-progress-bar {
141
+ background: var(--mx-accent);
142
+ }
143
+ .mx-file-upload-remove {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ flex-shrink: 0;
148
+ width: 28px;
149
+ height: 28px;
150
+ padding: 0;
151
+ border: 0;
152
+ border-radius: var(--mx-radius);
153
+ background: transparent;
154
+ color: var(--mx-muted);
155
+ cursor: pointer;
156
+ }
157
+ .mx-file-upload-remove svg {
158
+ width: 14px;
159
+ height: 14px;
160
+ }
161
+ .mx-file-upload-remove:hover:not(:disabled) {
162
+ background: var(--mx-subtle);
163
+ color: var(--mx-ink);
164
+ }
@@ -0,0 +1,89 @@
1
+ /* ---------- Rating ---------- */
2
+
3
+ .mx-rating {
4
+ --_size: 24px;
5
+ --_on: var(--mx-warning);
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: 8px;
9
+ font-family: var(--mx-font-sans);
10
+ }
11
+ .mx-rating[data-size='sm'] {
12
+ --_size: 18px;
13
+ }
14
+ .mx-rating[data-size='lg'] {
15
+ --_size: 32px;
16
+ }
17
+ .mx-rating-stars {
18
+ display: inline-flex;
19
+ gap: 2px;
20
+ }
21
+ .mx-rating-star {
22
+ position: relative;
23
+ display: inline-flex;
24
+ width: var(--_size);
25
+ height: var(--_size);
26
+ color: var(--mx-stone-strong);
27
+ }
28
+ label.mx-rating-star {
29
+ cursor: pointer;
30
+ }
31
+ .mx-rating-star svg {
32
+ width: 100%;
33
+ height: 100%;
34
+ fill: currentColor;
35
+ }
36
+ .mx-rating-star[data-on] {
37
+ color: var(--_on);
38
+ }
39
+ label.mx-rating-star:hover svg {
40
+ transform: scale(1.08);
41
+ }
42
+ .mx-rating-star svg {
43
+ transition: transform var(--mx-duration) var(--mx-ease), color var(--mx-duration) var(--mx-ease);
44
+ }
45
+ .mx-rating-star-fill {
46
+ position: absolute;
47
+ inset: 0 auto 0 0;
48
+ overflow: hidden;
49
+ color: var(--_on);
50
+ }
51
+ .mx-rating-star-fill svg {
52
+ width: var(--_size);
53
+ max-width: none;
54
+ }
55
+ .mx-rating-input {
56
+ position: absolute;
57
+ inset: 0;
58
+ width: 100%;
59
+ height: 100%;
60
+ margin: 0;
61
+ opacity: 0;
62
+ cursor: inherit;
63
+ }
64
+ .mx-rating-star:has(.mx-rating-input:focus-visible) {
65
+ border-radius: 4px;
66
+ outline: var(--mx-focus-width) solid var(--mx-accent);
67
+ outline-offset: 1px;
68
+ }
69
+ .mx-rating[data-disabled] .mx-rating-star {
70
+ cursor: not-allowed;
71
+ opacity: 0.55;
72
+ }
73
+ .mx-rating[data-invalid] .mx-rating-stars {
74
+ border-radius: 4px;
75
+ outline: 1px solid var(--mx-danger);
76
+ outline-offset: 2px;
77
+ }
78
+ .mx-rating-value {
79
+ color: var(--mx-ink);
80
+ font-size: var(--mx-text-sm);
81
+ font-weight: 600;
82
+ font-variant-numeric: tabular-nums;
83
+ }
84
+ .mx-rating-star svg {
85
+ pointer-events: none;
86
+ }
87
+ .mx-rating-input {
88
+ z-index: 1;
89
+ }
@@ -78,3 +78,114 @@
78
78
  --_fill-color: var(--mx-stone-strong);
79
79
  cursor: not-allowed;
80
80
  }
81
+
82
+ /* ---------- Range slider (dois cursores) ---------- */
83
+
84
+ .mx-range-slider {
85
+ --_track: 6px;
86
+ --_thumb: 16px;
87
+ --_fill-color: var(--mx-accent);
88
+ position: relative;
89
+ display: block;
90
+ width: 100%;
91
+ min-height: 20px;
92
+ font-family: var(--mx-font-sans);
93
+ }
94
+ .mx-range-slider[data-size='sm'] {
95
+ --_track: 4px;
96
+ --_thumb: 14px;
97
+ }
98
+ .mx-range-slider[data-size='lg'] {
99
+ --_track: 8px;
100
+ --_thumb: 20px;
101
+ }
102
+ .mx-range-slider[data-invalid] {
103
+ --_fill-color: var(--mx-danger);
104
+ }
105
+ .mx-range-slider[data-disabled] {
106
+ --_fill-color: var(--mx-stone-strong);
107
+ }
108
+ .mx-range-slider-track {
109
+ position: absolute;
110
+ top: calc(10px - var(--_track) / 2);
111
+ left: calc(var(--_thumb) / 2);
112
+ right: calc(var(--_thumb) / 2);
113
+ height: var(--_track);
114
+ border-radius: 999px;
115
+ background: var(--mx-stone);
116
+ }
117
+ .mx-range-slider-fill {
118
+ position: absolute;
119
+ top: 0;
120
+ bottom: 0;
121
+ left: var(--mx-range-from, 0%);
122
+ right: calc(100% - var(--mx-range-to, 100%));
123
+ border-radius: inherit;
124
+ background: var(--_fill-color);
125
+ }
126
+ .mx-range-slider-input {
127
+ appearance: none;
128
+ -webkit-appearance: none;
129
+ position: absolute;
130
+ top: 0;
131
+ left: 0;
132
+ width: 100%;
133
+ height: 20px;
134
+ margin: 0;
135
+ background: transparent;
136
+ pointer-events: none;
137
+ }
138
+ .mx-range-slider-input::-webkit-slider-runnable-track {
139
+ height: var(--_track);
140
+ background: transparent;
141
+ }
142
+ .mx-range-slider-input::-moz-range-track {
143
+ background: transparent;
144
+ }
145
+ .mx-range-slider-input::-webkit-slider-thumb {
146
+ -webkit-appearance: none;
147
+ width: var(--_thumb);
148
+ height: var(--_thumb);
149
+ margin-top: calc((var(--_track) - var(--_thumb)) / 2);
150
+ border: 2px solid var(--_fill-color);
151
+ border-radius: 50%;
152
+ background: var(--mx-surface);
153
+ cursor: pointer;
154
+ pointer-events: auto;
155
+ transition: transform var(--mx-duration) var(--mx-ease);
156
+ }
157
+ .mx-range-slider-input::-moz-range-thumb {
158
+ box-sizing: border-box;
159
+ width: var(--_thumb);
160
+ height: var(--_thumb);
161
+ border: 2px solid var(--_fill-color);
162
+ border-radius: 50%;
163
+ background: var(--mx-surface);
164
+ cursor: pointer;
165
+ pointer-events: auto;
166
+ }
167
+ .mx-range-slider-input:hover:not(:disabled)::-webkit-slider-thumb {
168
+ transform: scale(1.1);
169
+ }
170
+ .mx-range-slider-input:focus-visible {
171
+ outline: none;
172
+ }
173
+ .mx-range-slider-input:focus-visible::-webkit-slider-thumb {
174
+ outline: var(--mx-focus-width) solid var(--mx-accent);
175
+ outline-offset: var(--mx-focus-offset);
176
+ }
177
+ .mx-range-slider-input:focus-visible::-moz-range-thumb {
178
+ outline: var(--mx-focus-width) solid var(--mx-accent);
179
+ outline-offset: var(--mx-focus-offset);
180
+ }
181
+ .mx-range-slider-input:disabled::-webkit-slider-thumb {
182
+ cursor: not-allowed;
183
+ }
184
+ .mx-range-slider-values {
185
+ display: flex;
186
+ justify-content: space-between;
187
+ padding-top: 26px;
188
+ color: var(--mx-muted);
189
+ font-size: var(--mx-text-sm);
190
+ font-variant-numeric: tabular-nums;
191
+ }