@dodlhuat/basix 1.4.3 → 1.5.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 (66) hide show
  1. package/README.md +43 -9
  2. package/css/alert.scss +9 -9
  3. package/css/badge.scss +5 -25
  4. package/css/bottom-sheet.scss +2 -6
  5. package/css/breadcrumb.scss +18 -9
  6. package/css/calendar.scss +15 -26
  7. package/css/carousel.scss +3 -3
  8. package/css/chart.scss +1 -6
  9. package/css/checkbox.scss +1 -1
  10. package/css/chips.scss +13 -23
  11. package/css/code-viewer.scss +1 -1
  12. package/css/color-picker.scss +3 -5
  13. package/css/context-menu.scss +3 -8
  14. package/css/datepicker.scss +4 -4
  15. package/css/defaults.scss +25 -0
  16. package/css/docs.scss +6 -6
  17. package/css/dropdown.scss +3 -8
  18. package/css/editor.scss +13 -17
  19. package/css/file-uploader.scss +6 -17
  20. package/css/flyout-menu.scss +3 -0
  21. package/css/form.scss +32 -25
  22. package/css/gallery.scss +15 -0
  23. package/css/group-picker.scss +28 -17
  24. package/css/icons.scss +7 -327
  25. package/css/lightbox.scss +7 -7
  26. package/css/mixins.scss +52 -0
  27. package/css/modal.scss +4 -8
  28. package/css/parameters.scss +8 -2
  29. package/css/placeholder.scss +2 -17
  30. package/css/popover.scss +2 -7
  31. package/css/properties.scss +0 -5
  32. package/css/push-menu.scss +1 -1
  33. package/css/stepper.scss +2 -2
  34. package/css/style.css +198 -486
  35. package/css/style.css.map +1 -1
  36. package/css/style.min.css +1 -1
  37. package/css/style.min.css.map +1 -1
  38. package/css/tabs.scss +3 -7
  39. package/css/timepicker.scss +2 -2
  40. package/css/tooltip.scss +1 -1
  41. package/css/typography.scss +3 -3
  42. package/css/virtual-dropdown.scss +6 -11
  43. package/js/bottom-sheet.d.ts +2 -0
  44. package/js/bottom-sheet.js +3 -1
  45. package/js/carousel.d.ts +1 -0
  46. package/js/carousel.js +3 -2
  47. package/js/docs-nav.js +1 -1
  48. package/js/gallery.d.ts +5 -0
  49. package/js/gallery.js +35 -0
  50. package/js/group-picker.d.ts +1 -0
  51. package/js/group-picker.js +8 -5
  52. package/js/lightbox.d.ts +3 -1
  53. package/js/lightbox.js +8 -4
  54. package/js/modal.d.ts +2 -0
  55. package/js/modal.js +4 -2
  56. package/js/push-menu.d.ts +6 -2
  57. package/js/push-menu.js +13 -8
  58. package/js/select.js +1 -1
  59. package/js/sidebar-nav.d.ts +1 -0
  60. package/js/sidebar-nav.js +2 -1
  61. package/js/toast.d.ts +2 -0
  62. package/js/toast.js +5 -1
  63. package/package.json +2 -1
  64. package/svg-icons/chevron_right.svg +1 -0
  65. package/svg-icons/keyboard_arrow_down.svg +1 -0
  66. package/fonts/MaterialSymbolsOutlined.woff2 +0 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Basix 1.4.3
1
+ # Basix 1.5.0
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,40 @@ 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.3 → 1.5.0
13
+
14
+ #### Breaking changes
15
+
16
+ **Font icons removed — SVG sprite is now the only icon system**
17
+
18
+ The `.icon` base class, all `.icon-*` glyph classes, and the bundled `MaterialSymbolsOutlined.woff2` font have been removed from `icons.scss` and `fonts/`. Every component that rendered a font-icon glyph now renders an inline `<svg><use href="svg-icons/icons.svg#name"/></svg>` instead. If your own markup used the font classes directly, replace them:
19
+
20
+ ```html
21
+ <!-- Before (1.4.3) -->
22
+ <span class="icon icon-close"></span>
23
+
24
+ <!-- After (1.5.0) -->
25
+ <svg class="icon-svg"><use href="svg-icons/icons.svg#close"/></svg>
26
+ ```
27
+
28
+ A handful of glyph names used by the font don't exist under the same name in the sprite; use the sprite's equivalents:
29
+
30
+ | Font glyph | SVG sprite equivalent |
31
+ |---|---|
32
+ | `icon-navigate_before` / `icon-navigate_next` | `chevron_left` / `chevron_right` |
33
+ | `icon-expand_more` | `keyboard_arrow_down` |
34
+ | `icon-light` / `icon-dark` | `light_mode` / `dark_mode` |
35
+
36
+ #### Other changes
37
+
38
+ - **`BottomSheet`, `Lightbox`, `GroupPicker`, `Modal`, `Toast`, `SidebarNav`, `Carousel`, `Select`** — gained an `iconBasePath` option (default `'svg-icons/'`) controlling where each component looks for the SVG sprite, matching the existing `Calendar`/`Stepper` convention.
39
+ - **`PushMenu.init()`** now accepts an optional `{ iconBasePath }` argument (previously took no arguments).
40
+ - **`Lightbox.bind()`** now accepts an optional second `iconBasePath` argument, threaded through to every lightbox it opens.
41
+ - **New design tokens** in `parameters.scss`: a 3-step tint scale (`$tint-subtle`/`$tint-medium`/`$tint-strong`) for state-color backgrounds, and an expanded, properly-ordered radius scale (`$radius-xs/sm/md/lg/panel/xl`). Several components' corner radii and background tints shifted slightly to align to these scales — no component's visual language changed, just consolidated toward consistent steps.
42
+ - **New shared mixins** in `mixins.scss`: `float-panel` (floating dropdown/menu/popover shell), `hide-scrollbar`, `tinted-tag` (badge/chip tint), `muted-icon-color` (close-button hover).
43
+ - **Bug fix** — `DatePicker`'s day-of-week headers and clock labels referenced an undefined `--text-muted` custom property (silently falling back to inherited text color). Fixed to use the existing `--secondary-text` token.
44
+ - **CI** — added a GitHub Actions workflow (lint, typecheck, build, and a check that committed `js/`/`css` build output matches source) and `sass` is now a real `devDependency` instead of relying on a global install.
45
+
12
46
  ### 1.4.2 → 1.4.3
13
47
 
14
48
  No breaking changes.
@@ -124,20 +158,20 @@ The Card component is a CSS-only component that creates visually contained conte
124
158
 
125
159
  ### Icons
126
160
 
127
- Basix ships icons in two formats:
128
-
129
- **Font icons** — a reduced Google Material Icon font (~5.5 KB vs the full 242.5 KB). Use the `.icon` class with a modifier.
161
+ Basix ships the full Google Material Icon set (~6,400+ icons) as a single `svg-icons/icons.svg` sprite. Reference any icon by name with `<use>`, and style size/color with the `.icon-svg` class — it inherits `currentColor`, so the icon follows the surrounding text color automatically.
130
162
 
131
163
  ``` html
132
- <span class="icon icon-home"></span>
164
+ <svg class="icon-svg"><use href="svg-icons/icons.svg#home"/></svg>
133
165
  ```
134
166
 
135
- **SVG sprite** the full Google Material Icon set (~6,400+ icons) in a single `svg-icons/icons.svg` sprite. Preferred for consistent sizing, `currentColor` inheritance, and use inside JS-generated markup.
167
+ Components that render icons from JS (`Modal`, `Toast`, `BottomSheet`, `Lightbox`, `Carousel`, `GroupPicker`, `SidebarNav`, `Calendar`, `Stepper`, `PushMenu`, `Select`, `ContextMenu`) accept an `iconBasePath` option (default `'svg-icons/'`) so you can point them at the sprite's location relative to your page:
136
168
 
137
- ``` html
138
- <svg class="icon-svg"><use href="svg-icons/icons.svg#home"/></svg>
169
+ ``` js
170
+ new Modal({ content: '…', iconBasePath: '../svg-icons/' });
139
171
  ```
140
172
 
173
+ A couple of purely-decorative icons that need to render with zero markup (the `Breadcrumb` separator, the native `<select>` dropdown arrow) use `mask-image` against small standalone SVGs (`svg-icons/chevron_right.svg`, `svg-icons/keyboard_arrow_down.svg`) instead of the sprite, since sprite symbols are only instantiable via `<use>`.
174
+
141
175
  ---
142
176
 
143
177
  ## Forms
@@ -443,7 +477,7 @@ The Chips component displays small interactive elements like tags or filters. CS
443
477
  <div class="chip clickable">Clickable Chip</div>
444
478
  <div class="chip closeable">
445
479
  Closeable Chip
446
- <button class="close"><span class="icon icon-close"></span></button>
480
+ <button class="close"><svg class="icon-svg"><use href="svg-icons/icons.svg#close"/></svg></button>
447
481
  </div>
448
482
  </div>
449
483
  ```
package/css/alert.scss CHANGED
@@ -17,7 +17,7 @@ $alert-border-width: 4px;
17
17
  }
18
18
 
19
19
  .alert-close:hover {
20
- background: color-mix(in srgb, $accent 12%, transparent);
20
+ background: color-mix(in srgb, $accent $tint-medium, transparent);
21
21
  }
22
22
  }
23
23
 
@@ -48,28 +48,28 @@ $alert-border-width: 4px;
48
48
  &-info {
49
49
  @include alert-variant(
50
50
  var(--accent-color),
51
- color-mix(in srgb, var(--accent-color) 8%, var(--background))
51
+ color-mix(in srgb, var(--accent-color) $tint-subtle, var(--background))
52
52
  );
53
53
  }
54
54
 
55
55
  &-success {
56
56
  @include alert-variant(
57
57
  var(--success),
58
- color-mix(in srgb, var(--success) 8%, var(--background))
58
+ color-mix(in srgb, var(--success) $tint-subtle, var(--background))
59
59
  );
60
60
  }
61
61
 
62
62
  &-warning {
63
63
  @include alert-variant(
64
64
  var(--warning),
65
- color-mix(in srgb, var(--warning) 8%, var(--background))
65
+ color-mix(in srgb, var(--warning) $tint-subtle, var(--background))
66
66
  );
67
67
  }
68
68
 
69
69
  &-error {
70
70
  @include alert-variant(
71
71
  var(--error),
72
- color-mix(in srgb, var(--error) 8%, var(--background))
72
+ color-mix(in srgb, var(--error) $tint-subtle, var(--background))
73
73
  );
74
74
  }
75
75
 
@@ -110,28 +110,28 @@ $alert-border-width: 4px;
110
110
  &-info {
111
111
  @include alert-variant(
112
112
  var(--accent-color),
113
- color-mix(in srgb, var(--accent-color) 10%, var(--background))
113
+ color-mix(in srgb, var(--accent-color) $tint-medium, var(--background))
114
114
  );
115
115
  }
116
116
 
117
117
  &-success {
118
118
  @include alert-variant(
119
119
  var(--success),
120
- color-mix(in srgb, var(--success) 10%, var(--background))
120
+ color-mix(in srgb, var(--success) $tint-medium, var(--background))
121
121
  );
122
122
  }
123
123
 
124
124
  &-warning {
125
125
  @include alert-variant(
126
126
  var(--warning),
127
- color-mix(in srgb, var(--warning) 10%, var(--background))
127
+ color-mix(in srgb, var(--warning) $tint-medium, var(--background))
128
128
  );
129
129
  }
130
130
 
131
131
  &-error {
132
132
  @include alert-variant(
133
133
  var(--error),
134
- color-mix(in srgb, var(--error) 10%, var(--background))
134
+ color-mix(in srgb, var(--error) $tint-medium, var(--background))
135
135
  );
136
136
  }
137
137
  }
package/css/badge.scss CHANGED
@@ -1,10 +1,6 @@
1
1
  @use "properties";
2
2
  @use "parameters" as *;
3
-
4
- @mixin badge-variant($color, $bg) {
5
- background: $bg;
6
- color: $color;
7
- }
3
+ @use "mixins" as *;
8
4
 
9
5
  .badge {
10
6
  display: inline-flex;
@@ -24,35 +20,19 @@
24
20
  color: var(--secondary-text);
25
21
 
26
22
  &-info {
27
- @include badge-variant(
28
- var(--accent-color),
29
- color-mix(in srgb, var(--accent-color) 12%, var(--background))
30
- );
31
- border-color: color-mix(in srgb, var(--accent-color) 20%, transparent);
23
+ @include tinted-tag(var(--accent-color));
32
24
  }
33
25
 
34
26
  &-success {
35
- @include badge-variant(
36
- var(--success),
37
- color-mix(in srgb, var(--success) 12%, var(--background))
38
- );
39
- border-color: color-mix(in srgb, var(--success) 20%, transparent);
27
+ @include tinted-tag(var(--success));
40
28
  }
41
29
 
42
30
  &-warning {
43
- @include badge-variant(
44
- var(--warning),
45
- color-mix(in srgb, var(--warning) 12%, var(--background))
46
- );
47
- border-color: color-mix(in srgb, var(--warning) 20%, transparent);
31
+ @include tinted-tag(var(--warning));
48
32
  }
49
33
 
50
34
  &-error {
51
- @include badge-variant(
52
- var(--error),
53
- color-mix(in srgb, var(--error) 12%, var(--background))
54
- );
55
- border-color: color-mix(in srgb, var(--error) 20%, transparent);
35
+ @include tinted-tag(var(--error));
56
36
  }
57
37
 
58
38
  &-solid {
@@ -1,5 +1,6 @@
1
1
  @use "properties";
2
2
  @use "parameters" as *;
3
+ @use "mixins" as *;
3
4
 
4
5
  .bottom-sheet-wrapper {
5
6
  position: fixed;
@@ -142,12 +143,7 @@
142
143
 
143
144
  .close {
144
145
  cursor: pointer;
145
- color: var(--secondary-text);
146
- transition: color 0.15s ease;
147
-
148
- &:hover {
149
- color: var(--primary-text);
150
- }
146
+ @include muted-icon-color;
151
147
  }
152
148
  }
153
149
 
@@ -19,11 +19,19 @@
19
19
  min-width: 0;
20
20
 
21
21
  + li::before {
22
- content: "\e409";
23
- font-family: "Material Symbols Outlined 24pt";
24
- font-size: 1.125rem;
25
- line-height: 1;
26
- color: var(--divider);
22
+ content: "";
23
+ display: inline-block;
24
+ width: 1.125rem;
25
+ height: 1.125rem;
26
+ background-color: var(--divider);
27
+ mask-image: url("../svg-icons/chevron_right.svg");
28
+ -webkit-mask-image: url("../svg-icons/chevron_right.svg");
29
+ mask-repeat: no-repeat;
30
+ -webkit-mask-repeat: no-repeat;
31
+ mask-position: center;
32
+ -webkit-mask-position: center;
33
+ mask-size: contain;
34
+ -webkit-mask-size: contain;
27
35
  flex-shrink: 0;
28
36
  user-select: none;
29
37
  pointer-events: none;
@@ -38,12 +46,13 @@
38
46
  color: var(--secondary-text);
39
47
  text-decoration: none;
40
48
  padding: 0.25rem 0.375rem;
41
- border-radius: $radius-sm;
49
+ border-radius: $radius-xs;
42
50
  white-space: nowrap;
43
51
  transition: color 0.15s ease, background 0.15s ease;
44
52
 
45
- .icon {
46
- font-size: 1rem;
53
+ .icon-svg {
54
+ width: 1rem;
55
+ height: 1rem;
47
56
  }
48
57
 
49
58
  &:hover {
@@ -53,7 +62,7 @@
53
62
 
54
63
  &:focus-visible {
55
64
  @include focus-ring(-1px);
56
- border-radius: $radius-sm;
65
+ border-radius: $radius-xs;
57
66
  }
58
67
  }
59
68
 
package/css/calendar.scss CHANGED
@@ -2,10 +2,10 @@
2
2
  @use "mixins" as *;
3
3
 
4
4
  .cal {
5
- --cal-spacing-xs: 4px;
6
- --cal-spacing-sm: 8px;
7
- --cal-spacing-md: 12px;
8
- --cal-spacing-lg: 16px;
5
+ --cal-spacing-xs: #{calc($spacing * 0.25)};
6
+ --cal-spacing-sm: #{calc($spacing * 0.5)};
7
+ --cal-spacing-md: #{calc($spacing * 0.75)};
8
+ --cal-spacing-lg: #{$spacing};
9
9
 
10
10
  --cal-bg: var(--background);
11
11
  --cal-bg-alt: var(--secondary-background);
@@ -324,10 +324,10 @@
324
324
  &--cont-after { border-radius: var(--cal-radius-sm) 0 0 var(--cal-radius-sm); }
325
325
  &--cont-before#{&}--cont-after { border-radius: 0; }
326
326
 
327
- &.badge-success { border-left-color: var(--success); background: color-mix(in srgb, var(--success) 14%, var(--cal-bg)); }
328
- &.badge-warning { border-left-color: var(--warning); background: color-mix(in srgb, var(--warning) 14%, var(--cal-bg)); }
329
- &.badge-error { border-left-color: var(--error); background: color-mix(in srgb, var(--error) 14%, var(--cal-bg)); }
330
- &.badge-info { border-left-color: var(--accent-color); background: color-mix(in srgb, var(--accent-color) 14%, var(--cal-bg)); }
327
+ &.badge-success { border-left-color: var(--success); background: color-mix(in srgb, var(--success) $tint-medium, var(--cal-bg)); }
328
+ &.badge-warning { border-left-color: var(--warning); background: color-mix(in srgb, var(--warning) $tint-medium, var(--cal-bg)); }
329
+ &.badge-error { border-left-color: var(--error); background: color-mix(in srgb, var(--error) $tint-medium, var(--cal-bg)); }
330
+ &.badge-info { border-left-color: var(--accent-color); background: color-mix(in srgb, var(--accent-color) $tint-medium, var(--cal-bg)); }
331
331
  }
332
332
 
333
333
  .cal__week-row > .cal__span-bar {
@@ -545,7 +545,7 @@
545
545
  padding: 3px 6px;
546
546
  overflow: hidden;
547
547
  cursor: pointer;
548
- background: color-mix(in srgb, var(--cal-accent) 10%, var(--cal-bg));
548
+ background: color-mix(in srgb, var(--cal-accent) $tint-medium, var(--cal-bg));
549
549
  color: var(--cal-text);
550
550
  border-left: 3px solid var(--cal-accent);
551
551
  z-index: 1;
@@ -569,19 +569,19 @@
569
569
 
570
570
  &.badge-success {
571
571
  border-left-color: var(--success);
572
- background: color-mix(in srgb, var(--success) 10%, var(--cal-bg));
572
+ background: color-mix(in srgb, var(--success) $tint-medium, var(--cal-bg));
573
573
  }
574
574
  &.badge-warning {
575
575
  border-left-color: var(--warning);
576
- background: color-mix(in srgb, var(--warning) 10%, var(--cal-bg));
576
+ background: color-mix(in srgb, var(--warning) $tint-medium, var(--cal-bg));
577
577
  }
578
578
  &.badge-error {
579
579
  border-left-color: var(--error);
580
- background: color-mix(in srgb, var(--error) 10%, var(--cal-bg));
580
+ background: color-mix(in srgb, var(--error) $tint-medium, var(--cal-bg));
581
581
  }
582
582
  &.badge-info {
583
583
  border-left-color: var(--accent-color);
584
- background: color-mix(in srgb, var(--accent-color) 10%, var(--cal-bg));
584
+ background: color-mix(in srgb, var(--accent-color) $tint-medium, var(--cal-bg));
585
585
  }
586
586
  }
587
587
 
@@ -625,7 +625,7 @@
625
625
  }
626
626
 
627
627
  &.is-today {
628
- background: color-mix(in srgb, var(--cal-accent) 4%, var(--cal-bg));
628
+ background: color-mix(in srgb, var(--cal-accent) $tint-subtle, var(--cal-bg));
629
629
  }
630
630
  }
631
631
 
@@ -887,7 +887,7 @@
887
887
 
888
888
  @media (prefers-reduced-motion: no-preference) {
889
889
  .cal__body {
890
- animation: cal-slide-in 0.25s cubic-bezier(0.2, 0, 0, 1);
890
+ animation: bx-fade-slide-up 0.25s cubic-bezier(0.2, 0, 0, 1);
891
891
  }
892
892
 
893
893
  .cal__day,
@@ -908,17 +908,6 @@
908
908
  }
909
909
  }
910
910
 
911
- @keyframes cal-slide-in {
912
- from {
913
- opacity: 0;
914
- transform: translateY(8px);
915
- }
916
- to {
917
- opacity: 1;
918
- transform: translateY(0);
919
- }
920
- }
921
-
922
911
  @keyframes cal-cell-in {
923
912
  from {
924
913
  opacity: 0;
package/css/carousel.scss CHANGED
@@ -71,9 +71,9 @@
71
71
  opacity 0.2s ease;
72
72
  -webkit-tap-highlight-color: transparent;
73
73
 
74
- .icon {
75
- font-size: 1.5rem;
76
- line-height: 1;
74
+ .icon-svg {
75
+ width: 1.5rem;
76
+ height: 1.5rem;
77
77
  }
78
78
 
79
79
  &:hover {
package/css/chart.scss CHANGED
@@ -76,7 +76,7 @@
76
76
  }
77
77
 
78
78
  .chart-area {
79
- animation: chart-fade-in 0.8s ease forwards;
79
+ animation: bx-fade-in 0.8s ease forwards;
80
80
  }
81
81
 
82
82
  .chart-point-dot {
@@ -224,11 +224,6 @@
224
224
  to { stroke-dashoffset: 0; }
225
225
  }
226
226
 
227
- @keyframes chart-fade-in {
228
- from { opacity: 0; }
229
- to { opacity: 1; }
230
- }
231
-
232
227
  @keyframes chart-grow-y {
233
228
  from { transform: scaleY(0); }
234
229
  to { transform: scaleY(1); }
package/css/checkbox.scss CHANGED
@@ -30,7 +30,7 @@
30
30
  width: $spacing;
31
31
  height: $spacing;
32
32
  border: 2px solid var(--divider);
33
- border-radius: $radius-sm;
33
+ border-radius: $radius-xs;
34
34
  background-color: var(--background);
35
35
  margin-top: 2px;
36
36
  transition: border-color 0.15s ease, background-color 0.15s ease, box-shadow 0.15s ease;
package/css/chips.scss CHANGED
@@ -41,12 +41,12 @@
41
41
  }
42
42
 
43
43
  &.selected {
44
- background: color-mix(in srgb, var(--accent-color) 12%, var(--background));
44
+ background: color-mix(in srgb, var(--accent-color) $tint-medium, var(--background));
45
45
  color: var(--accent-color);
46
- border-color: color-mix(in srgb, var(--accent-color) 25%, transparent);
46
+ border-color: color-mix(in srgb, var(--accent-color) $tint-strong, transparent);
47
47
 
48
48
  &:hover {
49
- background: color-mix(in srgb, var(--accent-color) 18%, var(--background));
49
+ background: color-mix(in srgb, var(--accent-color) $tint-strong, var(--background));
50
50
  }
51
51
  }
52
52
  }
@@ -73,17 +73,15 @@
73
73
  transition: background 0.15s ease, color 0.15s ease;
74
74
 
75
75
  &:hover {
76
- background: color-mix(in srgb, var(--primary-text) 12%, transparent);
76
+ background: color-mix(in srgb, var(--primary-text) $tint-medium, transparent);
77
77
  color: var(--primary-text);
78
78
  }
79
79
 
80
80
  &:active {
81
- background: color-mix(in srgb, var(--primary-text) 18%, transparent);
81
+ background: color-mix(in srgb, var(--primary-text) $tint-strong, transparent);
82
82
  }
83
83
 
84
- .icon,
85
84
  .icon-svg {
86
- font-size: 0.8rem;
87
85
  width: 0.8rem;
88
86
  height: 0.8rem;
89
87
  }
@@ -91,45 +89,37 @@
91
89
  }
92
90
 
93
91
  &-accent {
94
- background: color-mix(in srgb, var(--accent-color) 12%, var(--background));
95
- color: var(--accent-color);
96
- border-color: color-mix(in srgb, var(--accent-color) 20%, transparent);
92
+ @include tinted-tag(var(--accent-color));
97
93
 
98
94
  &.closeable button:hover {
99
- background: color-mix(in srgb, var(--accent-color) 15%, transparent);
95
+ background: color-mix(in srgb, var(--accent-color) $tint-strong, transparent);
100
96
  color: var(--accent-color);
101
97
  }
102
98
  }
103
99
 
104
100
  &-success {
105
- background: color-mix(in srgb, var(--success) 12%, var(--background));
106
- color: var(--success);
107
- border-color: color-mix(in srgb, var(--success) 20%, transparent);
101
+ @include tinted-tag(var(--success));
108
102
 
109
103
  &.closeable button:hover {
110
- background: color-mix(in srgb, var(--success) 15%, transparent);
104
+ background: color-mix(in srgb, var(--success) $tint-strong, transparent);
111
105
  color: var(--success);
112
106
  }
113
107
  }
114
108
 
115
109
  &-warning {
116
- background: color-mix(in srgb, var(--warning) 12%, var(--background));
117
- color: var(--warning);
118
- border-color: color-mix(in srgb, var(--warning) 20%, transparent);
110
+ @include tinted-tag(var(--warning));
119
111
 
120
112
  &.closeable button:hover {
121
- background: color-mix(in srgb, var(--warning) 15%, transparent);
113
+ background: color-mix(in srgb, var(--warning) $tint-strong, transparent);
122
114
  color: var(--warning);
123
115
  }
124
116
  }
125
117
 
126
118
  &-error {
127
- background: color-mix(in srgb, var(--error) 12%, var(--background));
128
- color: var(--error);
129
- border-color: color-mix(in srgb, var(--error) 20%, transparent);
119
+ @include tinted-tag(var(--error));
130
120
 
131
121
  &.closeable button:hover {
132
- background: color-mix(in srgb, var(--error) 15%, transparent);
122
+ background: color-mix(in srgb, var(--error) $tint-strong, transparent);
133
123
  color: var(--error);
134
124
  }
135
125
  }
@@ -30,7 +30,7 @@
30
30
  color: #fff;
31
31
  border: none;
32
32
  padding: calc($spacing * 0.375) calc($spacing * 0.75);
33
- border-radius: $radius-sm;
33
+ border-radius: $radius-xs;
34
34
  cursor: pointer;
35
35
  font-size: 0.75rem;
36
36
  transition: background 0.2s;
@@ -1,5 +1,6 @@
1
1
  @use "properties";
2
2
  @use "parameters" as *;
3
+ @use "mixins" as *;
3
4
 
4
5
  $thumb-size: 18px;
5
6
  $thumb-size-touch: 22px;
@@ -9,15 +10,12 @@ $preview-size: 40px;
9
10
 
10
11
  .color-picker {
11
12
  width: 100%;
12
- background: var(--background);
13
- border: 1px solid var(--divider);
14
- border-radius: $radius-lg;
13
+ @include float-panel($radius-lg);
15
14
  padding: $spacing;
16
15
  box-sizing: border-box;
17
16
  display: flex;
18
17
  flex-direction: column;
19
18
  gap: calc($spacing * 0.75);
20
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
21
19
  }
22
20
 
23
21
  // ─── Saturation / brightness field ────────────────────────────────────────────
@@ -232,7 +230,7 @@ $preview-size: 40px;
232
230
 
233
231
  &:focus {
234
232
  border-color: var(--accent-color);
235
- box-shadow: 0 0 0 2px var(--accent-color-tint);
233
+ @include focus-glow($tint: 12%, $size: 2px);
236
234
  }
237
235
  }
238
236
 
@@ -1,18 +1,13 @@
1
1
  @use "properties";
2
2
  @use "parameters" as *;
3
+ @use "mixins" as *;
3
4
 
4
5
  .context-menu {
5
6
  position: fixed;
6
7
  z-index: 9999;
7
8
  min-width: 200px;
8
9
  padding: calc($spacing * 0.375) 0;
9
- background: var(--background);
10
- border: 1px solid var(--divider);
11
- border-radius: $radius-panel;
12
- box-shadow:
13
- 0 8px 32px rgba(0, 0, 0, 0.12),
14
- 0 2px 8px rgba(0, 0, 0, 0.08),
15
- 0 1px 2px rgba(0, 0, 0, 0.04);
10
+ @include float-panel;
16
11
  list-style: none;
17
12
  margin: 0;
18
13
  opacity: 0;
@@ -108,7 +103,7 @@
108
103
 
109
104
  &:hover,
110
105
  &.is-focused {
111
- background: color-mix(in srgb, var(--error) 8%, var(--background));
106
+ background: color-mix(in srgb, var(--error) $tint-subtle, var(--background));
112
107
  color: var(--error);
113
108
 
114
109
  .context-menu-icon {
@@ -62,7 +62,7 @@
62
62
 
63
63
  .datepicker-day-header {
64
64
  font-size: 0.875rem;
65
- color: var(--text-muted);
65
+ color: var(--secondary-text);
66
66
  font-weight: 500;
67
67
  padding: calc($spacing / 2) 0;
68
68
  }
@@ -200,7 +200,7 @@
200
200
 
201
201
  .datepicker-clock-display-segment {
202
202
  cursor: pointer;
203
- color: var(--text-muted);
203
+ color: var(--secondary-text);
204
204
  border-radius: calc($border-radius / 2);
205
205
  padding: 0 calc($spacing / 8);
206
206
  transition: color 0.2s, background-color 0.2s;
@@ -215,7 +215,7 @@
215
215
  }
216
216
 
217
217
  .datepicker-clock-display-separator {
218
- color: var(--text-muted);
218
+ color: var(--secondary-text);
219
219
  }
220
220
 
221
221
  .datepicker-clock-face {
@@ -271,7 +271,7 @@
271
271
  width: 26px;
272
272
  height: 26px;
273
273
  font-size: 0.75rem;
274
- color: var(--text-muted);
274
+ color: var(--secondary-text);
275
275
  }
276
276
 
277
277
  &.selected {
package/css/defaults.scss CHANGED
@@ -88,4 +88,29 @@ code.code {
88
88
 
89
89
  .flex {
90
90
  display: flex;
91
+ }
92
+
93
+ @keyframes bx-fade-in {
94
+ from { opacity: 0; }
95
+ to { opacity: 1; }
96
+ }
97
+
98
+ @keyframes bx-fade-slide-up {
99
+ from {
100
+ opacity: 0;
101
+ transform: translateY(8px);
102
+ }
103
+ to {
104
+ opacity: 1;
105
+ transform: translateY(0);
106
+ }
107
+ }
108
+
109
+ @keyframes placeholder-shimmer {
110
+ 0% {
111
+ background-position: 200% 0;
112
+ }
113
+ 100% {
114
+ background-position: -200% 0;
115
+ }
91
116
  }