@filip.mazev/blocks 1.4.3 → 1.4.5

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 (52) hide show
  1. package/README.md +1 -1
  2. package/_index.scss +1 -1
  3. package/core/styles/_field-state.scss +16 -4
  4. package/core/styles/_index.scss +0 -1
  5. package/core/styles/_mixins.scss +2 -2
  6. package/core/styles/_motion.scss +1 -1
  7. package/core/styles/_palettes.scss +127 -132
  8. package/core/styles/_slider.scss +158 -40
  9. package/core/styles/_theme-engine.scss +43 -63
  10. package/core/styles/_utilities.scss +3 -4
  11. package/core/styles/_validation.scss +6 -1
  12. package/core/styles/_variables.scss +24 -14
  13. package/core/styles/themes/_cyberpunk-theme.scss +1 -1
  14. package/core/styles/themes/_green-theme.scss +1 -1
  15. package/core/styles/themes/_high-contrast-theme.scss +152 -133
  16. package/core/styles/themes/_orange-theme.scss +1 -1
  17. package/core/styles/themes/_purple-theme.scss +1 -1
  18. package/core/styles/themes/_red-theme.scss +1 -1
  19. package/core/styles/themes/_white-theme.scss +26 -20
  20. package/effects/README.md +5 -9
  21. package/effects/effects.css +200 -121
  22. package/effects/runtime/README.md +19 -11
  23. package/fesm2022/filip.mazev-blocks-core.mjs +27 -22
  24. package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
  25. package/fesm2022/filip.mazev-blocks-effects-runtime.mjs +887 -67
  26. package/fesm2022/filip.mazev-blocks-effects-runtime.mjs.map +1 -1
  27. package/fesm2022/filip.mazev-blocks-effects.mjs +8 -48
  28. package/fesm2022/filip.mazev-blocks-effects.mjs.map +1 -1
  29. package/fesm2022/filip.mazev-blocks-forms.mjs +65 -61
  30. package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
  31. package/fesm2022/filip.mazev-blocks-modal.mjs +29 -32
  32. package/fesm2022/filip.mazev-blocks-modal.mjs.map +1 -1
  33. package/fesm2022/filip.mazev-blocks-navigation.mjs +35 -1
  34. package/fesm2022/filip.mazev-blocks-navigation.mjs.map +1 -1
  35. package/fesm2022/filip.mazev-blocks-primitives.mjs +106 -32
  36. package/fesm2022/filip.mazev-blocks-primitives.mjs.map +1 -1
  37. package/fesm2022/filip.mazev-blocks-toastr.mjs +5 -7
  38. package/fesm2022/filip.mazev-blocks-toastr.mjs.map +1 -1
  39. package/fesm2022/filip.mazev-blocks.mjs +1 -1
  40. package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
  41. package/navigation/README.md +44 -0
  42. package/package.json +1 -1
  43. package/schematics/ng-add/index.js +4 -1
  44. package/types/filip.mazev-blocks-core.d.ts +3 -4
  45. package/types/filip.mazev-blocks-effects-runtime.d.ts +10 -8
  46. package/types/filip.mazev-blocks-effects.d.ts +5 -17
  47. package/types/filip.mazev-blocks-forms.d.ts +13 -11
  48. package/types/filip.mazev-blocks-modal.d.ts +1 -0
  49. package/types/filip.mazev-blocks-navigation.d.ts +20 -4
  50. package/types/filip.mazev-blocks-primitives.d.ts +12 -2
  51. package/types/filip.mazev-blocks-toastr.d.ts +4 -4
  52. package/types/filip.mazev-blocks.d.ts +1 -1
package/README.md CHANGED
@@ -49,7 +49,7 @@ Then, manually configure your styles.scss:
49
49
 
50
50
  ## Appearance
51
51
 
52
- Version 1.4.0 integrates glass throughout Blocks using its existing semantic theme. Configure it application-wide through `ThemingService.setAppearance({ material: 'glass', blur: 10, tint: 0.4 })`; use `resetAppearance()` for defaults. Existing controls receive their material automatically, including menus, dialogs and notifications.
52
+ Version 1.4.0 integrates glass throughout Blocks using its existing semantic theme. Configure it application-wide through `ThemingService.setAppearance({ glassiness: 0.5 })`; use `resetAppearance()` for defaults. Existing controls receive their material automatically, including menus, dialogs and notifications.
53
53
 
54
54
  Load `@filip.mazev/blocks/effects/effects.css` once globally alongside the Blocks Sass theme. `ng add` registers the stylesheet for new installations. `BxSurfaceDirective` from `@filip.mazev/blocks/effects` is available for custom containers and local overrides. The framework-independent engine is `@filip.mazev/blocks/effects/runtime`, included in the same package.
55
55
 
package/_index.scss CHANGED
@@ -1 +1 @@
1
- @forward './core/styles/index';
1
+ @forward './core/styles/index';
@@ -3,25 +3,37 @@
3
3
  // Shared by native projected fields and Blocks input, search and select controls.
4
4
  @mixin glass-field {
5
5
  --bx-glass-surface: var(--bx-bg-neutral);
6
- --bx-glass-min-opacity: .45;
6
+ --bx-glass-min-opacity: 0.45;
7
7
  --bx-glass-edge: var(--bx-border-default);
8
8
  --bx-glass-shadow: none;
9
+
9
10
  border: 1px solid var(--bx-glass-edge);
10
11
  border-radius: radius(lg);
11
- &::after { display: none; }
12
- &:focus-within:not(.is-disabled):not(:disabled), &:focus-visible:not(:disabled), &.is-open:not(:disabled) {
12
+
13
+ &::after {
14
+ display: none;
15
+ }
16
+
17
+ &:focus-within:not(.is-disabled, :disabled),
18
+ &:focus-visible:not(:disabled),
19
+ &.is-open:not(:disabled) {
13
20
  --bx-glass-edge: var(--bx-border-brand);
21
+
14
22
  outline: 2px solid var(--bx-border-brand);
15
23
  outline-offset: -2px;
24
+
16
25
  --bx-glass-shadow: none;
17
26
  }
18
27
  }
19
28
 
20
29
  @mixin invalid-glass-field {
21
30
  --bx-glass-surface: var(--bx-bg-neutral);
22
- --bx-glass-min-opacity: .45;
31
+ --bx-glass-min-opacity: 0.45;
23
32
  --bx-glass-edge: color-mix(in srgb, var(--bx-text-danger) 40%, var(--bx-border-default));
33
+
24
34
  border-block-end-color: var(--bx-glass-edge);
35
+
25
36
  --bx-glass-shadow: 0 8px 18px -10px color-mix(in srgb, var(--bx-text-danger) 65%, transparent);
37
+
26
38
  outline-color: var(--bx-border-danger);
27
39
  }
@@ -4,7 +4,6 @@
4
4
  @forward 'palettes';
5
5
  @forward 'theme-engine';
6
6
  @forward 'a11y';
7
-
8
7
  @forward 'themes/white-theme';
9
8
  @forward 'themes/purple-theme';
10
9
  @forward 'themes/orange-theme';
@@ -1,4 +1,4 @@
1
- @use "sass:map";
1
+ @use 'sass:map';
2
2
  @use 'variables' as *;
3
3
 
4
4
  @mixin respond-up($size) {
@@ -33,4 +33,4 @@
33
33
 
34
34
  @function z($key) {
35
35
  @return map.get($z-index, $key);
36
- }
36
+ }
@@ -3,4 +3,4 @@
3
3
  transition-property: #{$property};
4
4
  transition-duration: calc(#{$duration} * (1 - var(--bx-reduced-motion, 0)));
5
5
  transition-timing-function: #{$easing};
6
- }
6
+ }
@@ -1,155 +1,154 @@
1
1
  @use 'sass:map';
2
2
 
3
3
  $orange-palette: (
4
- 50: #FFF7ED,
5
- 100: #FFEDD4,
6
- 200: #FFD6A7,
7
- 300: #FFB86A,
8
- 400: #FF8904,
9
- 500: #FF6900,
10
- 600: #F54900,
11
- 700: #CA3500,
12
- 800: #9F2D00,
4
+ 50: #fff7ed,
5
+ 100: #ffedd4,
6
+ 200: #ffd6a7,
7
+ 300: #ffb86a,
8
+ 400: #ff8904,
9
+ 500: #ff6900,
10
+ 600: #f54900,
11
+ 700: #ca3500,
12
+ 800: #9f2d00,
13
13
  900: #551111,
14
- 1000: #441306) !default;
15
-
14
+ 1000: #441306,
15
+ ) !default;
16
16
  $purple-palette: (
17
- 50: #F4EBFF,
18
- 100: #E6D4FF,
19
- 200: #CFA3FF,
20
- 300: #B36BFF,
21
- 400: #922FFF,
22
- 500: #6D00FF,
23
- 600: #5700CC,
17
+ 50: #f4ebff,
18
+ 100: #e6d4ff,
19
+ 200: #cfa3ff,
20
+ 300: #b36bff,
21
+ 400: #922fff,
22
+ 500: #6d00ff,
23
+ 600: #5700cc,
24
24
  700: #410099,
25
- 800: #2C0066,
25
+ 800: #2c0066,
26
26
  900: #160033,
27
- 1000: #0B001A) !default;
28
-
27
+ 1000: #0b001a,
28
+ ) !default;
29
29
  $red-palette: (
30
- 50: #FDF1F0,
31
- 100: #FADCDA,
32
- 200: #F5B0AB,
33
- 300: #EF8079,
34
- 400: #EA4C43,
35
- 500: #E3241B,
36
- 600: #BE1810,
30
+ 50: #fdf1f0,
31
+ 100: #fadcda,
32
+ 200: #f5b0ab,
33
+ 300: #ef8079,
34
+ 400: #ea4c43,
35
+ 500: #e3241b,
36
+ 600: #be1810,
37
37
  700: #991009,
38
38
  800: #750904,
39
39
  900: #520401,
40
- 1000: #2E0200) !default;
41
-
40
+ 1000: #2e0200,
41
+ ) !default;
42
42
  $green-palette: (
43
- 50: #F7FCE8,
44
- 100: #EDF8C8,
45
- 200: #DDF19C,
46
- 300: #CAE96A,
47
- 400: #BEE046,
48
- 500: #B0D624,
49
- 600: #92B518,
50
- 700: #718F10,
51
- 800: #556D0C,
52
- 900: #3C4E08,
53
- 1000: #212C03) !default;
54
-
43
+ 50: #f7fce8,
44
+ 100: #edf8c8,
45
+ 200: #ddf19c,
46
+ 300: #cae96a,
47
+ 400: #bee046,
48
+ 500: #b0d624,
49
+ 600: #92b518,
50
+ 700: #718f10,
51
+ 800: #556d0c,
52
+ 900: #3c4e08,
53
+ 1000: #212c03,
54
+ ) !default;
55
55
  $danger-palette: (
56
- 50: #FFFCFC,
57
- 100: #F4E5E5,
58
- 200: #EAD0D0,
59
- 300: #DE9E9E,
60
- 400: #F76D6D,
61
- 500: #D94D4D,
62
- 600: #C93D3D,
63
- 700: #BA2E2E,
56
+ 50: #fffcfc,
57
+ 100: #f4e5e5,
58
+ 200: #ead0d0,
59
+ 300: #de9e9e,
60
+ 400: #f76d6d,
61
+ 500: #d94d4d,
62
+ 600: #c93d3d,
63
+ 700: #ba2e2e,
64
64
  800: #722222,
65
- 900: #2B1717,
66
- 1000: #0E0C0C) !default;
67
-
65
+ 900: #2b1717,
66
+ 1000: #0e0c0c,
67
+ ) !default;
68
68
  $warn-palette: (
69
- 50: #FFFEFB,
70
- 100: #F7F0E3,
71
- 200: #EAE3D0,
72
- 300: #E7C892,
73
- 400: #E4AD55,
74
- 500: #C68D36,
75
- 600: #B77D27,
76
- 700: #A96D18,
77
- 800: #6A4817,
78
- 900: #2B2317,
79
- 1000: #0E0D0C) !default;
80
-
69
+ 50: #fffefb,
70
+ 100: #f7f0e3,
71
+ 200: #eae3d0,
72
+ 300: #e7c892,
73
+ 400: #e4ad55,
74
+ 500: #c68d36,
75
+ 600: #b77d27,
76
+ 700: #a96d18,
77
+ 800: #6a4817,
78
+ 900: #2b2317,
79
+ 1000: #0e0d0c,
80
+ ) !default;
81
81
  $success-palette: (
82
- 50: #FCFFFC,
83
- 100: #E6F4E6,
84
- 200: #D1EAD0,
85
- 300: #98D6A0,
86
- 400: #5FC370,
87
- 500: #3FA94E,
88
- 600: #2E9C3E,
89
- 700: #1E8F2D,
90
- 800: #1A5D22,
91
- 900: #172B18,
92
- 1000: #0C0E0C) !default;
93
-
82
+ 50: #fcfffc,
83
+ 100: #e6f4e6,
84
+ 200: #d1ead0,
85
+ 300: #98d6a0,
86
+ 400: #5fc370,
87
+ 500: #3fa94e,
88
+ 600: #2e9c3e,
89
+ 700: #1e8f2d,
90
+ 800: #1a5d22,
91
+ 900: #172b18,
92
+ 1000: #0c0e0c,
93
+ ) !default;
94
94
  $information-palette: (
95
- 50: #FBFDFF,
96
- 100: #E5EEF7,
97
- 200: #D0DDEA,
98
- 300: #97CACE,
99
- 400: #5FB7C3,
100
- 500: #3E90B5,
101
- 600: #2E7CAE,
102
- 700: #1E69A7,
103
- 800: #1A4469,
104
- 900: #17202B,
105
- 1000: #0C0D0E) !default;
106
-
95
+ 50: #fbfdff,
96
+ 100: #e5eef7,
97
+ 200: #d0ddea,
98
+ 300: #97cace,
99
+ 400: #5fb7c3,
100
+ 500: #3e90b5,
101
+ 600: #2e7cae,
102
+ 700: #1e69a7,
103
+ 800: #1a4469,
104
+ 900: #17202b,
105
+ 1000: #0c0d0e,
106
+ ) !default;
107
107
  $neutral-palette: (
108
- 50: #FAFAFA,
109
- 100: #F5F5F5,
110
- 200: #E5E5E5,
111
- 300: #D4D4D4,
112
- 400: #A1A1A1,
108
+ 50: #fafafa,
109
+ 100: #f5f5f5,
110
+ 200: #e5e5e5,
111
+ 300: #d4d4d4,
112
+ 400: #a1a1a1,
113
113
  500: #737373,
114
114
  600: #525252,
115
115
  700: #404040,
116
116
  800: #262626,
117
117
  900: #171717,
118
- 1000: #0b0b0b) !default;
119
-
118
+ 1000: #0b0b0b,
119
+ ) !default;
120
120
  $cyber-yellow-palette: (
121
- 50: #FFFEF2,
122
- 100: #FFFDD1,
123
- 200: #FFF9A3,
124
- 300: #FFF370,
125
- 400: #FFEB33,
121
+ 50: #fffef2,
122
+ 100: #fffdd1,
123
+ 200: #fff9a3,
124
+ 300: #fff370,
125
+ 400: #ffeb33,
126
126
  500: #e6da00,
127
- 600: #CCBD00,
128
- 700: #998E00,
129
- 800: #665E00,
130
- 900: #332F00,
131
- 1000: #141300) !default;
132
-
127
+ 600: #ccbd00,
128
+ 700: #998e00,
129
+ 800: #665e00,
130
+ 900: #332f00,
131
+ 1000: #141300,
132
+ ) !default;
133
133
  $cyber-slate-palette: (
134
- 50: #EBEFF2,
135
- 100: #CDD6DF,
136
- 200: #A8B8C6,
137
- 300: #7E96A9,
138
- 400: #5D788C,
139
- 500: #3E5669,
140
- 600: #283C4C,
141
- 700: #1B2936,
142
- 800: #121A21,
143
- 900: #0B1015,
144
- 1000: #05080A) !default;
145
-
134
+ 50: #ebeff2,
135
+ 100: #cdd6df,
136
+ 200: #a8b8c6,
137
+ 300: #7e96a9,
138
+ 400: #5d788c,
139
+ 500: #3e5669,
140
+ 600: #283c4c,
141
+ 700: #1b2936,
142
+ 800: #121a21,
143
+ 900: #0b1015,
144
+ 1000: #05080a,
145
+ ) !default;
146
146
  $hc-black: #000000;
147
147
  $hc-white: #ffffff;
148
148
  $hc-yellow: #e4d500;
149
149
  $hc-cyan: #00f3f3;
150
150
  $hc-red: #ff0000;
151
151
  $hc-green: #00ff00;
152
-
153
152
  $all-palettes: (
154
153
  'orange': $orange-palette,
155
154
  'purple': $purple-palette,
@@ -162,17 +161,15 @@ $all-palettes: (
162
161
  'neutral': $neutral-palette,
163
162
 
164
163
  'cyber-yellow': $cyber-yellow-palette,
165
- 'cyber-slate': $cyber-slate-palette) !default;
164
+ 'cyber-slate': $cyber-slate-palette,
165
+ ) !default;
166
166
 
167
167
  @function get-palette($name) {
168
168
  @if map.has-key($all-palettes, $name) {
169
- @return map.get($all-palettes, $name
170
- );
171
- }
172
-
173
- @else {
174
- @error "The palette '#{$name}' does not exist in @filip.mazev/blocks/core/styles/index.";
175
- }
169
+ @return map.get($all-palettes, $name);
170
+ } @else {
171
+ @error "The palette '#{$name}' does not exist in @filip.mazev/blocks/core/styles/index.";
172
+ }
176
173
  }
177
174
 
178
175
  @function get-color-from-palette($palette-name, $shade) {
@@ -180,9 +177,7 @@ $all-palettes: (
180
177
 
181
178
  @if map.has-key($palette, $shade) {
182
179
  @return map.get($palette, $shade);
183
- }
184
-
185
- @else {
180
+ } @else {
186
181
  @error "Shade '#{$shade}' not found in palette '#{$palette-name}'.";
187
182
  }
188
- }
183
+ }
@@ -7,9 +7,14 @@
7
7
  height: spacing(2);
8
8
  border: 1px solid var(--bx-border-strong);
9
9
  border-radius: radius(pill);
10
- background: linear-gradient(to right, var(--bx-primary) 0 var(--bx-slider-progress, 50%), var(--bx-bg-neutral) var(--bx-slider-progress, 50%) 100%);
11
- box-shadow: inset 0 1px 2px rgb(0 0 0 / .16);
10
+ background: linear-gradient(
11
+ to right,
12
+ var(--bx-primary) 0 var(--bx-slider-progress, 50%),
13
+ var(--bx-bg-neutral) var(--bx-slider-progress, 50%) 100%
14
+ );
15
+ box-shadow: inset 0 1px 2px rgb(0 0 0 / 16%);
12
16
  }
17
+
13
18
  @mixin thumb {
14
19
  appearance: none;
15
20
  box-sizing: border-box;
@@ -18,48 +23,86 @@
18
23
  border-radius: radius(pill);
19
24
  border: 1px solid var(--bx-border-strong);
20
25
  background: var(--bx-bg-surface);
21
- background: radial-gradient(circle at 35% 0%, rgb(255 255 255 / .24), transparent 65%), var(--bx-bg-surface);
22
- border-color: color-mix(in srgb, var(--bx-slider-light-color, var(--bx-primary)) calc(var(--bx-slider-light-strength, .18) * 100%), var(--bx-border-strong));
23
- -webkit-backdrop-filter: none;
26
+ background:
27
+ radial-gradient(circle at 35% 0%, rgb(255 255 255 / 24%), transparent 65%),
28
+ var(--bx-bg-surface);
29
+ border-color: color-mix(
30
+ in srgb,
31
+ var(--bx-slider-light-color, var(--bx-primary))
32
+ calc(var(--bx-slider-light-strength, 0.18) * 100%),
33
+ var(--bx-border-strong)
34
+ );
24
35
  backdrop-filter: none;
25
- box-shadow: inset 0 1px 1px rgb(255 255 255 / .45), inset 0 -1px 2px color-mix(in srgb, var(--bx-slider-light-color, var(--bx-primary)) 30%, transparent), 0 2px 5px rgb(0 0 0 / .18);
36
+ box-shadow:
37
+ inset 0 1px 1px rgb(255 255 255 / 45%),
38
+ inset 0 -1px 2px
39
+ color-mix(in srgb, var(--bx-slider-light-color, var(--bx-primary)) 30%, transparent),
40
+ 0 2px 5px rgb(0 0 0 / 18%);
26
41
  }
42
+
27
43
  .bx-slider-shell {
28
44
  display: block;
29
45
  position: relative;
30
46
  width: 100%;
31
47
  min-width: 0;
32
- input.bx-slider { display: block; }
48
+
49
+ input.bx-slider {
50
+ display: block;
51
+ }
52
+
33
53
  // The native thumb remains the hit target; the opaque decorative thumb reflects nearby colors.
34
- input.bx-slider::-webkit-slider-thumb { background: transparent; border-color: transparent; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
35
- input.bx-slider::-moz-range-thumb { background: transparent; border-color: transparent; box-shadow: none; backdrop-filter: none; }
36
- &.is-disabled .bx-slider-thumb { opacity: .5; }
54
+ input.bx-slider::-webkit-slider-thumb {
55
+ background: transparent;
56
+ border-color: transparent;
57
+ box-shadow: none;
58
+ backdrop-filter: none;
59
+ }
60
+
61
+ input.bx-slider::-moz-range-thumb {
62
+ background: transparent;
63
+ border-color: transparent;
64
+ box-shadow: none;
65
+ backdrop-filter: none;
66
+ }
37
67
  }
68
+
38
69
  .bx-slider-thumb {
39
70
  @include thumb;
40
- @include bx-transition('border-color, box-shadow', .2s, ease-out);
71
+ @include bx-transition('border-color, box-shadow', 0.2s, ease-out);
72
+
41
73
  position: absolute;
42
74
  top: var(--bx-slider-center-y, 50%);
43
- left: calc(var(--bx-slider-track-start, 0px) + var(--bx-slider-position, .5) * (var(--bx-slider-track-width, 100%) - #{spacing(6)}));
75
+ left: calc(
76
+ var(--bx-slider-track-start, 0px) + var(--bx-slider-position, 0.5) *
77
+ (var(--bx-slider-track-width, 100%) - #{spacing(6)})
78
+ );
44
79
  transform: translateY(-50%);
45
80
  pointer-events: none;
81
+
46
82
  &::after {
47
- @include bx-transition(opacity, .2s, ease-out);
83
+ @include bx-transition(opacity, 0.2s, ease-out);
84
+
48
85
  content: '';
49
86
  position: absolute;
50
87
  inset: -1px;
51
88
  box-sizing: border-box;
52
89
  border-radius: inherit;
53
90
  padding: 1px;
54
- background: radial-gradient(circle at var(--bx-slider-light-x, 35%) var(--bx-slider-light-y, 0%), var(--bx-slider-light-color, var(--bx-primary)), transparent 75%);
55
- opacity: var(--bx-slider-light-strength, .25);
56
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
91
+ background: radial-gradient(
92
+ circle at var(--bx-slider-light-x, 35%) var(--bx-slider-light-y, 0%),
93
+ var(--bx-slider-light-color, var(--bx-primary)),
94
+ transparent 75%
95
+ );
96
+ opacity: var(--bx-slider-light-strength, 0.25);
97
+ mask:
98
+ linear-gradient(#ffffff 0 0) content-box,
99
+ linear-gradient(#ffffff 0 0);
57
100
  mask-composite: exclude;
58
101
  }
59
102
  }
103
+
60
104
  input.bx-slider {
61
105
  appearance: none;
62
- -webkit-appearance: none;
63
106
  width: 100%;
64
107
  height: spacing(10);
65
108
  margin: 0;
@@ -67,35 +110,110 @@ input.bx-slider {
67
110
  border: 0;
68
111
  background: transparent;
69
112
  cursor: pointer;
70
- &:dir(rtl) { direction: ltr; transform: scaleX(-1); }
71
- &::-webkit-slider-runnable-track { @include track; }
72
- &::-moz-range-track { @include track; }
73
- &::-webkit-slider-thumb { @include thumb; margin-top: calc((#{spacing(2)} - #{spacing(6)}) / 2 - 1px); }
74
- &::-moz-range-thumb { @include thumb; }
75
- &:focus-visible { outline: 2px solid var(--bx-border-brand); outline-offset: 3px; border-radius: radius(pill); }
76
- &:disabled { opacity: .5; cursor: not-allowed; }
113
+
114
+ &:dir(rtl) {
115
+ direction: ltr;
116
+ transform: scaleX(-1);
117
+ }
118
+
119
+ &::-webkit-slider-runnable-track {
120
+ @include track;
121
+ }
122
+
123
+ &::-moz-range-track {
124
+ @include track;
125
+ }
126
+
127
+ &::-webkit-slider-thumb {
128
+ @include thumb;
129
+
130
+ margin-top: calc((#{spacing(2)} - #{spacing(6)}) / 2 - 1px);
131
+ }
132
+
133
+ &::-moz-range-thumb {
134
+ @include thumb;
135
+ }
136
+
137
+ &:focus-visible {
138
+ outline: 2px solid var(--bx-border-brand);
139
+ outline-offset: 3px;
140
+ border-radius: radius(pill);
141
+ }
142
+
143
+ &:disabled {
144
+ opacity: 0.5;
145
+ cursor: not-allowed;
146
+ }
147
+ }
148
+
149
+ @mixin opaque-thumb {
150
+ background: var(--bx-bg-surface);
151
+ backdrop-filter: none;
152
+ }
153
+
154
+ [data-bx-reduced-transparency='true'] .bx-slider-thumb {
155
+ @include opaque-thumb;
77
156
  }
78
- @mixin opaque-thumb { background: var(--bx-bg-surface); -webkit-backdrop-filter: none; backdrop-filter: none; }
79
- [data-bx-glass-material='solid'] .bx-slider-thumb,
80
- [data-bx-reduced-transparency='true'] .bx-slider-thumb { @include opaque-thumb; }
81
- [data-bx-glass-material='solid'] input.bx-slider,
157
+
82
158
  [data-bx-reduced-transparency='true'] input.bx-slider {
83
- &::-webkit-slider-thumb { @include opaque-thumb; }
84
- &::-moz-range-thumb { @include opaque-thumb; }
159
+ &::-webkit-slider-thumb {
160
+ @include opaque-thumb;
161
+ }
162
+
163
+ &::-moz-range-thumb {
164
+ @include opaque-thumb;
165
+ }
85
166
  }
167
+
86
168
  @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
87
- .bx-slider-thumb { @include opaque-thumb; }
88
- input.bx-slider::-webkit-slider-thumb { @include opaque-thumb; }
89
- input.bx-slider::-moz-range-thumb { @include opaque-thumb; }
169
+ .bx-slider-thumb {
170
+ @include opaque-thumb;
171
+ }
172
+
173
+ input.bx-slider::-webkit-slider-thumb {
174
+ @include opaque-thumb;
175
+ }
176
+
177
+ input.bx-slider::-moz-range-thumb {
178
+ @include opaque-thumb;
179
+ }
90
180
  }
181
+
91
182
  @media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
92
- .bx-slider-thumb { @include opaque-thumb; }
93
- input.bx-slider::-webkit-slider-thumb { @include opaque-thumb; }
94
- input.bx-slider::-moz-range-thumb { @include opaque-thumb; }
183
+ .bx-slider-thumb {
184
+ @include opaque-thumb;
185
+ }
186
+
187
+ input.bx-slider::-webkit-slider-thumb {
188
+ @include opaque-thumb;
189
+ }
190
+
191
+ input.bx-slider::-moz-range-thumb {
192
+ @include opaque-thumb;
193
+ }
95
194
  }
195
+
96
196
  @media (forced-colors: active) {
97
- .bx-slider-thumb { display: none; }
98
- input.bx-slider { appearance: auto; -webkit-appearance: auto; accent-color: Highlight; }
99
- input.bx-slider::-webkit-slider-thumb, .bx-slider-shell input.bx-slider::-webkit-slider-thumb { background: ButtonText; border-color: ButtonText; box-shadow: none; }
100
- input.bx-slider::-moz-range-thumb, .bx-slider-shell input.bx-slider::-moz-range-thumb { background: ButtonText; border-color: ButtonText; box-shadow: none; }
197
+ .bx-slider-thumb {
198
+ display: none;
199
+ }
200
+
201
+ input.bx-slider {
202
+ appearance: auto;
203
+ accent-color: Highlight;
204
+ }
205
+
206
+ input.bx-slider::-webkit-slider-thumb,
207
+ .bx-slider-shell input.bx-slider::-webkit-slider-thumb {
208
+ background: ButtonText;
209
+ border-color: ButtonText;
210
+ box-shadow: none;
211
+ }
212
+
213
+ input.bx-slider::-moz-range-thumb,
214
+ .bx-slider-shell input.bx-slider::-moz-range-thumb {
215
+ background: ButtonText;
216
+ border-color: ButtonText;
217
+ box-shadow: none;
218
+ }
101
219
  }