@dodlhuat/basix 1.4.1 → 1.4.3
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 +38 -1
- package/css/calendar.scss +4 -3
- package/css/code-viewer.scss +1 -1
- package/css/datepicker.scss +83 -70
- package/css/editor.scss +2 -1
- package/css/flyout-menu.scss +2 -1
- package/css/form.scss +11 -32
- package/css/mixins.scss +25 -0
- package/css/range-slider.scss +63 -6
- package/css/stepper.scss +2 -1
- package/css/style.css +124 -71
- package/css/style.css.map +1 -1
- package/css/style.min.css +1 -1
- package/css/style.min.css.map +1 -1
- package/css/timepicker.scss +1 -1
- package/css/virtual-dropdown.scss +6 -16
- package/js/bottom-sheet.d.ts +3 -5
- package/js/bottom-sheet.js +39 -58
- package/js/calendar.d.ts +1 -2
- package/js/calendar.js +77 -84
- package/js/carousel.d.ts +1 -1
- package/js/carousel.js +22 -14
- package/js/chart.d.ts +1 -1
- package/js/chart.js +104 -65
- package/js/code-viewer.d.ts +1 -1
- package/js/code-viewer.js +7 -18
- package/js/color-picker.d.ts +2 -2
- package/js/color-picker.js +20 -22
- package/js/context-menu.d.ts +1 -1
- package/js/context-menu.js +10 -12
- package/js/datepicker.d.ts +14 -3
- package/js/datepicker.js +180 -99
- package/js/dropdown.d.ts +1 -1
- package/js/dropdown.js +4 -5
- package/js/editor.d.ts +1 -1
- package/js/editor.js +30 -34
- package/js/file-uploader.d.ts +2 -9
- package/js/file-uploader.js +57 -86
- package/js/flyout-menu.d.ts +3 -3
- package/js/flyout-menu.js +20 -22
- package/js/gallery.d.ts +1 -2
- package/js/gallery.js +14 -20
- package/js/group-picker.d.ts +1 -1
- package/js/group-picker.js +22 -29
- package/js/lightbox.d.ts +2 -2
- package/js/lightbox.js +28 -27
- package/js/listeners.d.ts +7 -0
- package/js/listeners.js +14 -0
- package/js/modal.d.ts +2 -1
- package/js/modal.js +13 -20
- package/js/popover.d.ts +2 -2
- package/js/popover.js +42 -37
- package/js/position.js +3 -5
- package/js/push-menu.d.ts +2 -0
- package/js/push-menu.js +21 -15
- package/js/range-slider.d.ts +15 -1
- package/js/range-slider.js +67 -7
- package/js/scroll.js +4 -7
- package/js/scrollbar.d.ts +3 -3
- package/js/scrollbar.js +39 -42
- package/js/select.d.ts +1 -1
- package/js/select.js +19 -23
- package/js/sidebar-nav.d.ts +1 -1
- package/js/sidebar-nav.js +13 -9
- package/js/stepper.d.ts +1 -1
- package/js/stepper.js +9 -11
- package/js/table.d.ts +1 -1
- package/js/table.js +24 -23
- package/js/tabs.d.ts +1 -1
- package/js/tabs.js +10 -17
- package/js/theme.d.ts +1 -0
- package/js/theme.js +6 -15
- package/js/timepicker.d.ts +8 -6
- package/js/timepicker.js +36 -36
- package/js/toast.d.ts +2 -1
- package/js/toast.js +8 -4
- package/js/tooltip.d.ts +1 -4
- package/js/tooltip.js +14 -23
- package/js/tree.d.ts +0 -1
- package/js/tree.js +6 -11
- package/js/utils.js +7 -8
- package/js/virtual-dropdown.d.ts +1 -1
- package/js/virtual-dropdown.js +26 -28
- package/package.json +1 -1
- package/css/calendar.css +0 -928
- package/css/guitar-chords.css +0 -251
- package/js/form-builder.js +0 -107
- package/js/guitar-chords.js +0 -268
- package/js/lazy-loader.js +0 -121
- package/js/request.js +0 -51
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Basix 1.4.
|
|
1
|
+
# Basix 1.4.3
|
|
2
2
|
|
|
3
3
|
Basix is intended as a starter for the rapid development of a design. Each design element can be added individually to
|
|
4
4
|
include only the data required. It is using plain javascript / typescript and therefore is not dependent on any plugin.
|
|
@@ -9,6 +9,24 @@ A demo can be found here: <a href="http://www.andibauer.at/basix/" target="_blan
|
|
|
9
9
|
|
|
10
10
|
## Migration Guide
|
|
11
11
|
|
|
12
|
+
### 1.4.2 → 1.4.3
|
|
13
|
+
|
|
14
|
+
No breaking changes.
|
|
15
|
+
|
|
16
|
+
- **`DatePicker`** — the `timePicker: true` hour/minute picker is now an Android-style analog clock instead of up/down spinners. Tap or drag to pick the hour, then the minute, on a 24-hour dual-ring face (outer ring = even hours, inner ring = odd hours). `selectedHours`/`selectedMinutes` and all existing options are unchanged.
|
|
17
|
+
- **`DatePicker`** — clock interactions (hour/minute selection, AM/PM-less 24h switching) now only re-render the time picker instead of rebuilding the whole calendar, avoiding unnecessary DOM churn.
|
|
18
|
+
- **Internal** — the remaining per-component `AbortController` boilerplate (introduced in 1.4.1) has been consolidated into a small shared `ListenerGroup` utility (`src/listeners.ts`) used by every component's event lifecycle.
|
|
19
|
+
- **CSS bug fix** — several component hover states (`DatePicker`'s Set button and nav buttons, `CodeViewer`'s copy button, `FlyoutMenu`'s close button) were silently overridden by the global button reset due to a CSS specificity collision, so the intended hover color/background never rendered. Fixed by scoping each rule against the global reset.
|
|
20
|
+
- **CSS cleanup** — consolidated duplicated `box-shadow` glow/focus-ring declarations across `Calendar`, `Editor`, `Stepper`, `RangeSlider`, `TimePicker`, form fields, and `VirtualDropdown` into shared mixins (`field-shadow-rest`, `field-shadow-hover`, `field-shadow-focus`) in `mixins.scss`. No visual change.
|
|
21
|
+
- **Cleanup** — removed unused legacy files (`form-builder.js`, `guitar-chords.js`/`.css`, `lazy-loader.js`, `request.js`) and a stale, pre-integration copy of `calendar.css`, plus dead `.datepicker-select` CSS.
|
|
22
|
+
- **Type fixes** — resolved two pre-existing TypeScript errors in `Tabs` and `VirtualDropdown` (`keydown` listeners typed against `Element` instead of `HTMLElement`).
|
|
23
|
+
|
|
24
|
+
### 1.4.1 → 1.4.2
|
|
25
|
+
|
|
26
|
+
No breaking changes.
|
|
27
|
+
|
|
28
|
+
- **`RangeSlider`** — added a two-thumb start/end variant, `RangeSliderRange`. Wrap two `<input type="range">` elements in `.range-slider.range-slider--range` and initialise with `new RangeSliderRange(container)`. The thumbs cannot cross each other; read the current values with `values()`, which returns `[start, end]`.
|
|
29
|
+
|
|
12
30
|
### 1.4.0 → 1.4.1
|
|
13
31
|
|
|
14
32
|
No breaking changes. Internal code quality pass across all TypeScript source files:
|
|
@@ -189,6 +207,25 @@ new RangeSlider(document.querySelector('.range-slider input'));
|
|
|
189
207
|
RangeSlider.initAll();
|
|
190
208
|
```
|
|
191
209
|
|
|
210
|
+
**Range variant** — a two-thumb slider for selecting a start and end value. Wrap two range inputs in `.range-slider.range-slider--range` and initialise with `RangeSliderRange`. The thumbs cannot cross each other.
|
|
211
|
+
|
|
212
|
+
``` html
|
|
213
|
+
<div class="range-slider range-slider--range">
|
|
214
|
+
<input type="range" min="0" max="100" value="25" aria-label="Minimum value" />
|
|
215
|
+
<input type="range" min="0" max="100" value="75" aria-label="Maximum value" />
|
|
216
|
+
</div>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
``` js
|
|
220
|
+
const slider = new RangeSliderRange(document.querySelector('.range-slider--range'));
|
|
221
|
+
|
|
222
|
+
// Read the current [start, end] values
|
|
223
|
+
const [start, end] = slider.values();
|
|
224
|
+
|
|
225
|
+
// Or initialise all range sliders on the page at once
|
|
226
|
+
RangeSliderRange.initAll();
|
|
227
|
+
```
|
|
228
|
+
|
|
192
229
|
---
|
|
193
230
|
|
|
194
231
|
## Navigation
|
package/css/calendar.scss
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@use "parameters" as *;
|
|
2
|
+
@use "mixins" as *;
|
|
2
3
|
|
|
3
4
|
.cal {
|
|
4
5
|
--cal-spacing-xs: 4px;
|
|
@@ -207,7 +208,7 @@
|
|
|
207
208
|
color: var(--cal-accent-text);
|
|
208
209
|
border-radius: 50%;
|
|
209
210
|
font-weight: 700;
|
|
210
|
-
|
|
211
|
+
@include focus-glow($tint: 20%, $size: 3px, $color: var(--cal-accent));
|
|
211
212
|
}
|
|
212
213
|
|
|
213
214
|
&.has-events::after {
|
|
@@ -402,7 +403,7 @@
|
|
|
402
403
|
&.is-today span {
|
|
403
404
|
background: var(--cal-today-ring);
|
|
404
405
|
color: var(--cal-accent-text);
|
|
405
|
-
|
|
406
|
+
@include focus-glow($tint: 20%, $size: 3px, $color: var(--cal-accent));
|
|
406
407
|
}
|
|
407
408
|
|
|
408
409
|
}
|
|
@@ -660,7 +661,7 @@
|
|
|
660
661
|
&.is-today {
|
|
661
662
|
background: var(--cal-today-ring);
|
|
662
663
|
color: var(--cal-accent-text);
|
|
663
|
-
|
|
664
|
+
@include focus-glow($tint: 20%, $size: 3px, $color: var(--cal-accent));
|
|
664
665
|
}
|
|
665
666
|
}
|
|
666
667
|
|
package/css/code-viewer.scss
CHANGED
package/css/datepicker.scss
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
transition: background-color 0.2s;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
.datepicker-nav:hover {
|
|
45
|
+
.datepicker-nav:hover:not(:disabled) {
|
|
46
46
|
background-color: var(--accent-color-lighten);
|
|
47
47
|
color: var(--accent-color-text);
|
|
48
48
|
}
|
|
@@ -53,21 +53,6 @@
|
|
|
53
53
|
font-weight: 600;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
.datepicker-select {
|
|
57
|
-
border: none;
|
|
58
|
-
background: none;
|
|
59
|
-
font-family: inherit;
|
|
60
|
-
font-weight: 600;
|
|
61
|
-
font-size: 1rem;
|
|
62
|
-
cursor: pointer;
|
|
63
|
-
padding: calc($spacing / 4);
|
|
64
|
-
border-radius: calc($spacing / 4);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.datepicker-select:hover {
|
|
68
|
-
background-color: var(--accent-color-lighten);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
56
|
.datepicker-grid {
|
|
72
57
|
display: grid;
|
|
73
58
|
grid-template-columns: repeat(7, 1fr);
|
|
@@ -187,83 +172,111 @@
|
|
|
187
172
|
transition: background-color 0.2s;
|
|
188
173
|
}
|
|
189
174
|
|
|
190
|
-
.datepicker-title-btn:hover {
|
|
175
|
+
.datepicker-title-btn:hover:not(:disabled) {
|
|
191
176
|
background-color: var(--accent-color-lighten);
|
|
192
177
|
}
|
|
193
178
|
|
|
194
|
-
.datepicker-
|
|
195
|
-
display: flex;
|
|
196
|
-
align-items: center;
|
|
197
|
-
justify-content: space-between;
|
|
179
|
+
.datepicker-clock {
|
|
198
180
|
border-top: 1px solid var(--divider);
|
|
199
181
|
margin-top: $spacing;
|
|
200
182
|
padding-top: $spacing;
|
|
201
183
|
}
|
|
202
184
|
|
|
203
|
-
.datepicker-
|
|
204
|
-
font-size: 0.875rem;
|
|
205
|
-
font-weight: 600;
|
|
206
|
-
color: var(--primary-text);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
.datepicker-time-controls {
|
|
185
|
+
.datepicker-clock-header {
|
|
210
186
|
display: flex;
|
|
211
187
|
align-items: center;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
.datepicker-time-separator {
|
|
216
|
-
font-size: 1.1rem;
|
|
217
|
-
font-weight: 600;
|
|
218
|
-
color: var(--primary-text);
|
|
219
|
-
padding: 0 calc($spacing / 8);
|
|
188
|
+
justify-content: center;
|
|
189
|
+
gap: $spacing;
|
|
190
|
+
margin-bottom: $spacing;
|
|
220
191
|
}
|
|
221
192
|
|
|
222
|
-
.datepicker-
|
|
193
|
+
.datepicker-clock-display {
|
|
223
194
|
display: flex;
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
195
|
+
align-items: baseline;
|
|
196
|
+
font-size: 2rem;
|
|
197
|
+
font-weight: 600;
|
|
198
|
+
line-height: 1;
|
|
227
199
|
}
|
|
228
200
|
|
|
229
|
-
.datepicker-
|
|
230
|
-
background: none;
|
|
231
|
-
border: 1px solid var(--divider);
|
|
232
|
-
border-radius: $border-radius;
|
|
201
|
+
.datepicker-clock-display-segment {
|
|
233
202
|
cursor: pointer;
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
transition: background-color 0.2s;
|
|
203
|
+
color: var(--text-muted);
|
|
204
|
+
border-radius: calc($border-radius / 2);
|
|
205
|
+
padding: 0 calc($spacing / 8);
|
|
206
|
+
transition: color 0.2s, background-color 0.2s;
|
|
239
207
|
|
|
240
208
|
&:hover {
|
|
241
209
|
background-color: var(--accent-color-lighten);
|
|
242
|
-
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
&.active {
|
|
213
|
+
color: var(--accent-color);
|
|
243
214
|
}
|
|
244
215
|
}
|
|
245
216
|
|
|
246
|
-
.datepicker-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
217
|
+
.datepicker-clock-display-separator {
|
|
218
|
+
color: var(--text-muted);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.datepicker-clock-face {
|
|
222
|
+
position: relative;
|
|
223
|
+
width: 240px;
|
|
224
|
+
height: 240px;
|
|
225
|
+
margin: 0 auto;
|
|
226
|
+
border-radius: 50%;
|
|
227
|
+
background-color: var(--accent-color-lighten);
|
|
228
|
+
cursor: pointer;
|
|
229
|
+
touch-action: none;
|
|
230
|
+
user-select: none;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.datepicker-clock-center {
|
|
234
|
+
position: absolute;
|
|
235
|
+
left: 50%;
|
|
236
|
+
top: 50%;
|
|
237
|
+
width: 6px;
|
|
238
|
+
height: 6px;
|
|
239
|
+
border-radius: 50%;
|
|
240
|
+
background-color: var(--accent-color);
|
|
241
|
+
transform: translate(-50%, -50%);
|
|
242
|
+
pointer-events: none;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.datepicker-clock-hand {
|
|
246
|
+
position: absolute;
|
|
247
|
+
left: 50%;
|
|
248
|
+
bottom: 50%;
|
|
249
|
+
width: 2px;
|
|
250
|
+
height: 38%;
|
|
251
|
+
margin-left: -1px;
|
|
252
|
+
background-color: var(--accent-color);
|
|
253
|
+
transform-origin: bottom center;
|
|
254
|
+
pointer-events: none;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.datepicker-clock-number {
|
|
258
|
+
position: absolute;
|
|
259
|
+
display: flex;
|
|
260
|
+
align-items: center;
|
|
261
|
+
justify-content: center;
|
|
262
|
+
width: 32px;
|
|
263
|
+
height: 32px;
|
|
264
|
+
border-radius: 50%;
|
|
265
|
+
transform: translate(-50%, -50%);
|
|
266
|
+
font-size: 0.875rem;
|
|
256
267
|
color: var(--primary-text);
|
|
257
|
-
-
|
|
268
|
+
pointer-events: none;
|
|
258
269
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
270
|
+
&.inner {
|
|
271
|
+
width: 26px;
|
|
272
|
+
height: 26px;
|
|
273
|
+
font-size: 0.75rem;
|
|
274
|
+
color: var(--text-muted);
|
|
263
275
|
}
|
|
264
276
|
|
|
265
|
-
|
|
266
|
-
|
|
277
|
+
&.selected {
|
|
278
|
+
background-color: var(--accent-color);
|
|
279
|
+
color: var(--accent-color-text);
|
|
267
280
|
}
|
|
268
281
|
}
|
|
269
282
|
|
|
@@ -279,10 +292,10 @@
|
|
|
279
292
|
font-size: 0.875rem;
|
|
280
293
|
font-weight: 600;
|
|
281
294
|
cursor: pointer;
|
|
282
|
-
transition:
|
|
295
|
+
transition: background-color 0.2s;
|
|
283
296
|
|
|
284
|
-
&:hover {
|
|
285
|
-
|
|
297
|
+
&:hover:not(:disabled) {
|
|
298
|
+
background-color: color-mix(in srgb, var(--accent-color) 85%, black);
|
|
286
299
|
}
|
|
287
300
|
}
|
|
288
301
|
|
package/css/editor.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
.editor {
|
|
5
6
|
background: var(--secondary-background);
|
|
@@ -551,7 +552,7 @@
|
|
|
551
552
|
|
|
552
553
|
&:focus {
|
|
553
554
|
border-color: color-mix(in srgb, var(--accent-color) 60%, transparent);
|
|
554
|
-
|
|
555
|
+
@include focus-glow($tint: 12%, $size: 2px);
|
|
555
556
|
}
|
|
556
557
|
|
|
557
558
|
&::placeholder {
|
package/css/flyout-menu.scss
CHANGED
package/css/form.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
@keyframes field-error-shake {
|
|
5
6
|
0%, 100% { transform: translateX(0); }
|
|
@@ -41,9 +42,7 @@ textarea, select, .select .dropdown, input {
|
|
|
41
42
|
min-height: calc($form-height * 1.3);
|
|
42
43
|
font-size: $spacing;
|
|
43
44
|
color: var(--primary-text);
|
|
44
|
-
|
|
45
|
-
inset 0 1.5px 4px rgba(0, 0, 0, 0.05),
|
|
46
|
-
0 1px 2px rgba(0, 0, 0, 0.04);
|
|
45
|
+
@include field-shadow-rest();
|
|
47
46
|
transition:
|
|
48
47
|
border-color 0.16s ease,
|
|
49
48
|
box-shadow 0.22s cubic-bezier(0.16, 1, 0.3, 1),
|
|
@@ -58,17 +57,12 @@ textarea, select, .select .dropdown, input {
|
|
|
58
57
|
|
|
59
58
|
&:hover:not(:focus):not(:disabled):not([readonly]) {
|
|
60
59
|
border-color: color-mix(in srgb, var(--accent-color) 45%, var(--divider));
|
|
61
|
-
|
|
62
|
-
inset 0 1.5px 4px rgba(0, 0, 0, 0.045),
|
|
63
|
-
0 2px 8px rgba(0, 0, 0, 0.07);
|
|
60
|
+
@include field-shadow-hover();
|
|
64
61
|
}
|
|
65
62
|
|
|
66
63
|
&:focus {
|
|
67
64
|
border-color: var(--accent-color);
|
|
68
|
-
|
|
69
|
-
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
70
|
-
0 0 0 3.5px color-mix(in srgb, var(--accent-color) 13%, transparent),
|
|
71
|
-
0 2px 12px rgba(0, 0, 0, 0.06);
|
|
65
|
+
@include field-shadow-focus();
|
|
72
66
|
}
|
|
73
67
|
|
|
74
68
|
&:disabled {
|
|
@@ -105,9 +99,7 @@ select {
|
|
|
105
99
|
background: var(--background);
|
|
106
100
|
height: calc($form-height * 1.3);
|
|
107
101
|
line-height: calc($form-height * 1.3);
|
|
108
|
-
|
|
109
|
-
inset 0 1.5px 4px rgba(0, 0, 0, 0.05),
|
|
110
|
-
0 1px 2px rgba(0, 0, 0, 0.04);
|
|
102
|
+
@include field-shadow-rest();
|
|
111
103
|
transition:
|
|
112
104
|
border-color 0.16s ease,
|
|
113
105
|
box-shadow 0.22s cubic-bezier(0.16, 1, 0.3, 1);
|
|
@@ -115,19 +107,14 @@ select {
|
|
|
115
107
|
|
|
116
108
|
&:hover {
|
|
117
109
|
border-color: color-mix(in srgb, var(--accent-color) 45%, var(--divider));
|
|
118
|
-
|
|
119
|
-
inset 0 1.5px 4px rgba(0, 0, 0, 0.045),
|
|
120
|
-
0 2px 8px rgba(0, 0, 0, 0.07);
|
|
110
|
+
@include field-shadow-hover();
|
|
121
111
|
}
|
|
122
112
|
|
|
123
113
|
&:focus,
|
|
124
114
|
&:focus-visible {
|
|
125
115
|
outline: none;
|
|
126
116
|
border-color: var(--accent-color);
|
|
127
|
-
|
|
128
|
-
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
129
|
-
0 0 0 3.5px color-mix(in srgb, var(--accent-color) 13%, transparent),
|
|
130
|
-
0 2px 12px rgba(0, 0, 0, 0.06);
|
|
117
|
+
@include field-shadow-focus();
|
|
131
118
|
}
|
|
132
119
|
|
|
133
120
|
&::after {
|
|
@@ -142,9 +129,7 @@ select {
|
|
|
142
129
|
|
|
143
130
|
.dropdown.open .dropdown-selected {
|
|
144
131
|
border-color: var(--accent-color);
|
|
145
|
-
|
|
146
|
-
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
147
|
-
0 0 0 3.5px color-mix(in srgb, var(--accent-color) 13%, transparent);
|
|
132
|
+
@include field-shadow-focus($ambient: false);
|
|
148
133
|
|
|
149
134
|
&::after {
|
|
150
135
|
transform: rotate(180deg);
|
|
@@ -315,16 +300,12 @@ select {
|
|
|
315
300
|
input, textarea, select {
|
|
316
301
|
border-color: var(--error);
|
|
317
302
|
background-color: color-mix(in srgb, var(--error) 3%, var(--background));
|
|
318
|
-
|
|
319
|
-
inset 0 1.5px 4px rgba(0, 0, 0, 0.05),
|
|
320
|
-
0 1px 2px rgba(0, 0, 0, 0.04);
|
|
303
|
+
@include field-shadow-rest();
|
|
321
304
|
animation: field-error-shake 0.42s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
|
|
322
305
|
|
|
323
306
|
&:focus {
|
|
324
307
|
border-color: var(--error);
|
|
325
|
-
|
|
326
|
-
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
327
|
-
0 0 0 3.5px color-mix(in srgb, var(--error) 13%, transparent);
|
|
308
|
+
@include field-shadow-focus($color: var(--error), $ambient: false);
|
|
328
309
|
}
|
|
329
310
|
}
|
|
330
311
|
|
|
@@ -347,9 +328,7 @@ select {
|
|
|
347
328
|
|
|
348
329
|
&:focus {
|
|
349
330
|
border-color: var(--success);
|
|
350
|
-
|
|
351
|
-
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
352
|
-
0 0 0 3.5px color-mix(in srgb, var(--success) 13%, transparent);
|
|
331
|
+
@include field-shadow-focus($color: var(--success), $ambient: false);
|
|
353
332
|
}
|
|
354
333
|
}
|
|
355
334
|
|
package/css/mixins.scss
CHANGED
|
@@ -6,3 +6,28 @@
|
|
|
6
6
|
@mixin focus-glow($tint: 35%, $size: 3px, $color: var(--accent-color)) {
|
|
7
7
|
box-shadow: 0 0 0 #{$size} color-mix(in srgb, #{$color} #{$tint}, transparent);
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
@mixin field-shadow-rest() {
|
|
11
|
+
box-shadow:
|
|
12
|
+
inset 0 1.5px 4px rgba(0, 0, 0, 0.05),
|
|
13
|
+
0 1px 2px rgba(0, 0, 0, 0.04);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@mixin field-shadow-hover() {
|
|
17
|
+
box-shadow:
|
|
18
|
+
inset 0 1.5px 4px rgba(0, 0, 0, 0.045),
|
|
19
|
+
0 2px 8px rgba(0, 0, 0, 0.07);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@mixin field-shadow-focus($color: var(--accent-color), $ambient: true) {
|
|
23
|
+
@if $ambient {
|
|
24
|
+
box-shadow:
|
|
25
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
26
|
+
0 0 0 3.5px color-mix(in srgb, #{$color} 13%, transparent),
|
|
27
|
+
0 2px 12px rgba(0, 0, 0, 0.06);
|
|
28
|
+
} @else {
|
|
29
|
+
box-shadow:
|
|
30
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.03),
|
|
31
|
+
0 0 0 3.5px color-mix(in srgb, #{$color} 13%, transparent);
|
|
32
|
+
}
|
|
33
|
+
}
|
package/css/range-slider.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
$track-height: 4px;
|
|
5
6
|
$thumb-size: 1.1rem;
|
|
@@ -70,30 +71,30 @@ $thumb-size: 1.1rem;
|
|
|
70
71
|
|
|
71
72
|
&:hover::-webkit-slider-thumb {
|
|
72
73
|
transform: scale(1.15);
|
|
73
|
-
|
|
74
|
+
@include focus-glow($tint: 15%, $size: 6px);
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
&:hover::-moz-range-thumb {
|
|
77
78
|
transform: scale(1.15);
|
|
78
|
-
|
|
79
|
+
@include focus-glow($tint: 15%, $size: 6px);
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
&:active::-webkit-slider-thumb {
|
|
82
83
|
transform: scale(1.22);
|
|
83
|
-
|
|
84
|
+
@include focus-glow($tint: 18%, $size: 9px);
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
&:active::-moz-range-thumb {
|
|
87
88
|
transform: scale(1.22);
|
|
88
|
-
|
|
89
|
+
@include focus-glow($tint: 18%, $size: 9px);
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
&:focus-visible::-webkit-slider-thumb {
|
|
92
|
-
|
|
93
|
+
@include focus-glow($tint: 25%, $size: 4px);
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
&:focus-visible::-moz-range-thumb {
|
|
96
|
-
|
|
97
|
+
@include focus-glow($tint: 25%, $size: 4px);
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
&:disabled {
|
|
@@ -127,4 +128,60 @@ $thumb-size: 1.1rem;
|
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
}
|
|
131
|
+
|
|
132
|
+
&.range-slider--range {
|
|
133
|
+
position: relative;
|
|
134
|
+
height: $thumb-size;
|
|
135
|
+
padding: 0;
|
|
136
|
+
|
|
137
|
+
input[type="range"] {
|
|
138
|
+
position: absolute;
|
|
139
|
+
top: 0;
|
|
140
|
+
left: 0;
|
|
141
|
+
width: 100%;
|
|
142
|
+
height: 100%;
|
|
143
|
+
padding: 0;
|
|
144
|
+
pointer-events: none;
|
|
145
|
+
|
|
146
|
+
&::-webkit-slider-runnable-track {
|
|
147
|
+
background: transparent;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
&::-moz-range-track {
|
|
151
|
+
background: transparent;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
&::-moz-range-progress {
|
|
155
|
+
background: transparent;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
&::-webkit-slider-thumb {
|
|
159
|
+
pointer-events: auto;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
&::-moz-range-thumb {
|
|
163
|
+
pointer-events: auto;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.range-slider-fill {
|
|
168
|
+
position: absolute;
|
|
169
|
+
top: 50%;
|
|
170
|
+
left: 0;
|
|
171
|
+
width: 100%;
|
|
172
|
+
height: $track-height;
|
|
173
|
+
transform: translateY(-50%);
|
|
174
|
+
border-radius: $track-height;
|
|
175
|
+
pointer-events: none;
|
|
176
|
+
background: linear-gradient(
|
|
177
|
+
to right,
|
|
178
|
+
var(--divider) 0%,
|
|
179
|
+
var(--divider) var(--range-start, 0%),
|
|
180
|
+
var(--accent-color) var(--range-start, 0%),
|
|
181
|
+
var(--accent-color) var(--range-end, 100%),
|
|
182
|
+
var(--divider) var(--range-end, 100%),
|
|
183
|
+
var(--divider) 100%
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
130
187
|
}
|
package/css/stepper.scss
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
$indicator-size: 2rem;
|
|
5
6
|
$connector-thickness: 2px;
|
|
6
7
|
|
|
7
8
|
@keyframes stepper-pulse {
|
|
8
|
-
0% {
|
|
9
|
+
0% { @include focus-glow($tint: 35%, $size: 0); }
|
|
9
10
|
65% { box-shadow: 0 0 0 6px transparent; }
|
|
10
11
|
100% { box-shadow: 0 0 0 0 transparent; }
|
|
11
12
|
}
|