@fest-lib/veela 0.1.1

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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +533 -0
  3. package/dist/veela.js +878 -0
  4. package/package.json +83 -0
  5. package/src/scss/_layers.scss +16 -0
  6. package/src/scss/advanced/_index.scss +0 -0
  7. package/src/scss/advanced/animation/_motion.scss +317 -0
  8. package/src/scss/advanced/color/_color.scss +328 -0
  9. package/src/scss/advanced/color/_colorize.scss +325 -0
  10. package/src/scss/advanced/design/_design-tokens.scss +118 -0
  11. package/src/scss/advanced/design/_effects.scss +275 -0
  12. package/src/scss/advanced/design/_shadow.scss +359 -0
  13. package/src/scss/advanced/design/_surfaces.scss +76 -0
  14. package/src/scss/advanced/effects/_animations.scss +124 -0
  15. package/src/scss/advanced/effects/_shadows.scss +50 -0
  16. package/src/scss/advanced/font/_typography.scss +600 -0
  17. package/src/scss/advanced/index.scss +11 -0
  18. package/src/scss/advanced/index.ts +35 -0
  19. package/src/scss/advanced/layout/_content.scss +170 -0
  20. package/src/scss/advanced/layout/_index.scss +5 -0
  21. package/src/scss/advanced/layout/_normalize.scss +541 -0
  22. package/src/scss/advanced/layout/_shared-overlays.scss +162 -0
  23. package/src/scss/advanced/md3/_md3.scss +596 -0
  24. package/src/scss/advanced/md3/_utils.scss +114 -0
  25. package/src/scss/advanced/misc/_config.scss +119 -0
  26. package/src/scss/advanced/misc/_initials.scss +298 -0
  27. package/src/scss/advanced/misc/_mixins.scss +179 -0
  28. package/src/scss/advanced/misc/_queries.scss +34 -0
  29. package/src/scss/advanced/misc/_rendering.scss +82 -0
  30. package/src/scss/advanced/misc/_tokens.scss +74 -0
  31. package/src/scss/advanced/theme/_shared.scss +232 -0
  32. package/src/scss/advanced/theme/_states.scss +332 -0
  33. package/src/scss/advanced/theme/_variants.scss +354 -0
  34. package/src/scss/advanced/tokens/_material-color.scss +120 -0
  35. package/src/scss/advanced/tokens/_variables.scss +171 -0
  36. package/src/scss/basic/_layers.scss +0 -0
  37. package/src/scss/basic/design/_index.scss +3 -0
  38. package/src/scss/basic/design/_keyframes.scss +163 -0
  39. package/src/scss/basic/design/_shapes.scss +266 -0
  40. package/src/scss/basic/design/_wavy-runtime.scss +50 -0
  41. package/src/scss/basic/index.scss +19 -0
  42. package/src/scss/basic/index.ts +29 -0
  43. package/src/scss/basic/misc/_core-layout.scss +272 -0
  44. package/src/scss/basic/misc/_index.scss +18 -0
  45. package/src/scss/basic/misc/_layout.scss +1040 -0
  46. package/src/scss/basic/misc/_mixins.scss +179 -0
  47. package/src/scss/basic/misc/_motion.scss +28 -0
  48. package/src/scss/basic/misc/_normalize.scss +765 -0
  49. package/src/scss/basic/misc/_queries.scss +34 -0
  50. package/src/scss/basic/misc/_shared.scss +232 -0
  51. package/src/scss/basic/misc/_states.scss +135 -0
  52. package/src/scss/basic/misc/_tokens.scss +78 -0
  53. package/src/scss/basic/misc/_veela.scss +12 -0
  54. package/src/scss/core/index.scss +1 -0
  55. package/src/scss/core/interact/_draggable.scss +32 -0
  56. package/src/scss/core/interact/_position.scss +45 -0
  57. package/src/scss/core/interact/_ps-anchor.scss +28 -0
  58. package/src/scss/core/interact/_ps-centered.scss +28 -0
  59. package/src/scss/core/interact/_ps-cursor.scss +18 -0
  60. package/src/scss/core/interact/_ps-draggable.scss +25 -0
  61. package/src/scss/core/interact/_ps-mechanic.scss +0 -0
  62. package/src/scss/core/interact/_ps-properties.scss +54 -0
  63. package/src/scss/core/interact/_ps-resizable.scss +61 -0
  64. package/src/scss/core/interact/_resizable.scss +69 -0
  65. package/src/scss/core/interact/_viewport.scss +469 -0
  66. package/src/scss/core/misc/_color-properties.scss +64 -0
  67. package/src/scss/core/misc/_config.scss +110 -0
  68. package/src/scss/core/misc/_functions.scss +530 -0
  69. package/src/scss/core/misc/_icons.scss +109 -0
  70. package/src/scss/core/misc/_index.scss +6 -0
  71. package/src/scss/core/misc/_layout.scss +49 -0
  72. package/src/scss/core/misc/_mixins.scss +744 -0
  73. package/src/scss/core/misc/_properties.scss +245 -0
  74. package/src/scss/core/misc/_tokens.scss +947 -0
  75. package/src/scss/core/misc/_utilities.scss +941 -0
  76. package/src/scss/core/misc/_utils.scss +17 -0
  77. package/src/scss/index.scss +18 -0
  78. package/src/scss/index.ts +105 -0
@@ -0,0 +1,328 @@
1
+ @use "sass:list";
2
+ @use "sass:map";
3
+ @use "sass:math";
4
+ @use "sass:meta";
5
+ @use "sass:string";
6
+
7
+ //
8
+ @use "utils" as _;
9
+
10
+ //
11
+ // Surface role map
12
+ $md3-surface-role-map: (
13
+ primary: on-primary,
14
+ primary-container: on-primary-container,
15
+ primary-fixed: on-primary-fixed,
16
+ primary-fixed-dim: on-primary-fixed,
17
+ secondary: on-secondary,
18
+ secondary-container: on-secondary-container,
19
+ secondary-fixed: on-secondary-fixed,
20
+ secondary-fixed-dim: on-secondary-fixed,
21
+ tertiary: on-tertiary,
22
+ tertiary-container: on-tertiary-container,
23
+ tertiary-fixed: on-tertiary-fixed,
24
+ tertiary-fixed-dim: on-tertiary-fixed,
25
+ error: on-error,
26
+ error-container: on-error-container,
27
+ surface: on-surface,
28
+ surface-dim: on-surface,
29
+ surface-bright: on-surface,
30
+ surface-variant: on-surface-variant,
31
+ surface-container-lowest: on-surface,
32
+ surface-container-low: on-surface,
33
+ surface-container: on-surface,
34
+ surface-container-high: on-surface,
35
+ surface-container-highest: on-surface,
36
+ background: on-background,
37
+ inverse-surface: inverse-on-surface,
38
+ outline: on-surface,
39
+ outline-variant: on-surface,
40
+ surface-tint: on-surface,
41
+ );
42
+
43
+ //
44
+ // State opacity
45
+ $md3-state-opacity: (
46
+ hover: 0.08,
47
+ focus: 0.12,
48
+ focus-visible: 0.12,
49
+ focus-ring: 0.22,
50
+ press: 0.12,
51
+ drag: 0.16,
52
+ selected: 0.16,
53
+ disabled: 0.38,
54
+ icon: 0.54,
55
+ );
56
+
57
+ //
58
+ // State function
59
+ @function md3-state($state) {
60
+ @return _.md3-fetch($md3-state-opacity, $state, "state");
61
+ }
62
+
63
+ //
64
+ // Variable function
65
+ @function md3-var($role) {
66
+ @return "--md-#{$role}";
67
+ }
68
+
69
+ //
70
+ // Material role map
71
+ $material-role-map: (
72
+ primary: "--md-sys-color-primary",
73
+ on-primary: "--md-sys-color-on-primary",
74
+ primary-container: "--md-sys-color-primary-container",
75
+ on-primary-container: "--md-sys-color-on-primary-container",
76
+ secondary: "--md-sys-color-secondary",
77
+ on-secondary: "--md-sys-color-on-secondary",
78
+ secondary-container: "--md-sys-color-secondary-container",
79
+ on-secondary-container: "--md-sys-color-on-secondary-container",
80
+ tertiary: "--md-sys-color-tertiary",
81
+ on-tertiary: "--md-sys-color-on-tertiary",
82
+ tertiary-container: "--md-sys-color-tertiary-container",
83
+ on-tertiary-container: "--md-sys-color-on-tertiary-container",
84
+ error: "--md-sys-color-error",
85
+ on-error: "--md-sys-color-on-error",
86
+ error-container: "--md-sys-color-error-container",
87
+ on-error-container: "--md-sys-color-on-error-container",
88
+ surface: "--md-sys-color-surface",
89
+ on-surface: "--md-sys-color-on-surface",
90
+ surface-variant: "--md-sys-color-surface-variant",
91
+ on-surface-variant: "--md-sys-color-on-surface-variant",
92
+ outline: "--md-sys-color-outline",
93
+ outline-variant: "--md-sys-color-outline-variant",
94
+ background: "--md-sys-color-background",
95
+ on-background: "--md-sys-color-on-background",
96
+ inverse-surface: "--md-sys-color-inverse-surface",
97
+ inverse-on-surface: "--md-sys-color-inverse-on-surface",
98
+ inverse-primary: "--md-sys-color-inverse-primary",
99
+ surface-tint: "--md-sys-color-surface-tint",
100
+ );
101
+
102
+ //
103
+ // Material mode suffix
104
+ $material-mode-suffix: (
105
+ light: "",
106
+ dark: "-dark",
107
+ );
108
+
109
+ //
110
+ // Helpers
111
+ @function md3-tone-scale($factor, $direction: "--interaction-tone-direction") {
112
+ @return calc(#{$factor} * var(#{$direction}, 1));
113
+ }
114
+
115
+ @function md3-shadow-mix($base-property, $weight, $shadow-property: "--md-shadow") {
116
+ $base-weight: math.percentage($weight);
117
+ $shadow-weight: math.percentage(1 - $weight);
118
+
119
+ @return color-mix(in oklch, var(#{$base-property}) #{$base-weight}, var(#{$shadow-property}) #{$shadow-weight});
120
+ }
121
+
122
+ @function md3-resolve($overrides, $property, $fallback) {
123
+ @if meta.type-of($overrides) == "map" and map.has-key($overrides, $property) {
124
+ @return map.get($overrides, $property);
125
+ }
126
+
127
+ @return $fallback;
128
+ }
129
+
130
+ @mixin md3-emit-properties($properties, $overrides) {
131
+ @each $property, $value in $properties {
132
+ #{$property}: #{md3-resolve($overrides, $property, $value)};
133
+ }
134
+ }
135
+
136
+ //
137
+ // Layer variables
138
+ $md3-backdrop-filters: (
139
+ "--backdrop-blur-subtle": blur(6px) saturate(110%),
140
+ "--backdrop-blur-default": blur(12px) saturate(120%),
141
+ "--backdrop-blur-strong": blur(18px) saturate(140%),
142
+ );
143
+
144
+ $md3-surface-opacity-levels: (
145
+ "--surface-opacity-subtle": 0.02,
146
+ "--surface-opacity-muted": 0.04,
147
+ "--surface-opacity-default": 0.08,
148
+ "--surface-opacity-emphasis": 0.12,
149
+ "--surface-opacity-strong": 0.16,
150
+ );
151
+
152
+ $md3-contrast-opacity-levels: (
153
+ "--contrast-opacity-subtle": 0.04,
154
+ "--contrast-opacity-muted": 0.08,
155
+ "--contrast-opacity-default": 0.12,
156
+ "--contrast-opacity-emphasis": 0.16,
157
+ "--contrast-opacity-strong": 0.24,
158
+ );
159
+
160
+ $md3-text-tint-levels: (
161
+ "--text-tint-primary": 0,
162
+ "--text-tint-secondary": 0.04,
163
+ "--text-tint-muted": 0.06,
164
+ "--text-tint-disabled": 0.12,
165
+ );
166
+
167
+ $md3-border-opacity-levels: (
168
+ "--border-opacity-subtle": 0.14,
169
+ "--border-opacity-default": 0.2,
170
+ "--border-opacity-emphasis": 0.24,
171
+ "--border-opacity-strong": 0.4,
172
+ "--border-opacity-dashed": 0.18,
173
+ );
174
+
175
+ $md3-outline-properties: (
176
+ "--outline-opacity": 0.4,
177
+ "--outline-tint": 0,
178
+ );
179
+
180
+ $md3-scrollbar-properties: (
181
+ "--scrollbar-opacity": 0.4,
182
+ "--scrollbar-tint": 0.1,
183
+ );
184
+
185
+ //
186
+ // Interaction variables
187
+ $md3-interaction-lift-factors: (
188
+ "--hover-lift": 0.03,
189
+ "--active-lift": 0.05,
190
+ "--focus-lift": 0.02,
191
+ );
192
+
193
+ $md3-interaction-properties: (
194
+ "--selection-opacity": 0.1,
195
+ );
196
+
197
+ //
198
+ // State opacity custom properties
199
+ $md3-state-opacity-properties: (
200
+ "--state-opacity-hover": hover,
201
+ "--state-opacity-focus": focus,
202
+ "--state-opacity-focus-visible": focus-visible,
203
+ "--state-opacity-focus-ring": focus-ring,
204
+ "--state-opacity-press": press,
205
+ "--state-opacity-drag": drag,
206
+ "--state-opacity-selected": selected,
207
+ "--state-opacity-disabled": disabled,
208
+ "--state-opacity-icon": icon,
209
+ );
210
+
211
+ //
212
+ // Semantic palettes
213
+ $md3-spectrum-colors: (
214
+ "--color-red": oklch(0.5 0.2 30 / 1),
215
+ "--color-orange": oklch(0.5 0.2 80 / 1),
216
+ "--color-yellow": oklch(0.7 0.2 100 / 1),
217
+ "--color-green": oklch(0.5 0.2 140 / 1),
218
+ "--color-blue": oklch(0.5 0.2 260 / 1),
219
+ "--color-purple": oklch(0.5 0.2 320 / 1),
220
+ );
221
+
222
+ $md3-semantic-base-colors: (
223
+ "--color-primary": #2c3e50,
224
+ "--color-secondary": #34495e,
225
+ "--color-accent": #3498db,
226
+ "--color-success": #2cda9d,
227
+ "--color-warning": #ffb347,
228
+ "--color-danger": #ff6b6b,
229
+ "--color-info": #17a2b8,
230
+ );
231
+
232
+ $md3-semantic-aliases: (
233
+ "--color-error": var(--color-danger),
234
+ );
235
+
236
+ $md3-semantic-tones: (
237
+ "--color-success-dark": (base: "--color-success", weight: 0.4),
238
+ "--color-warning-dark": (base: "--color-warning", weight: 0.38),
239
+ "--color-danger-dark": (base: "--color-danger", weight: 0.42),
240
+ "--color-error-dark": (base: "--color-danger", weight: 0.42),
241
+ );
242
+
243
+ //
244
+ // Layer mixins
245
+ @mixin md3-export-backdrop-filters($overrides) {
246
+ @include md3-emit-properties($md3-backdrop-filters, $overrides);
247
+ }
248
+
249
+ @mixin md3-export-layer-opacities($overrides) {
250
+ @include md3-emit-properties($md3-surface-opacity-levels, $overrides);
251
+ @include md3-emit-properties($md3-contrast-opacity-levels, $overrides);
252
+ @include md3-emit-properties($md3-text-tint-levels, $overrides);
253
+ @include md3-emit-properties($md3-border-opacity-levels, $overrides);
254
+ @include md3-emit-properties($md3-outline-properties, $overrides);
255
+ @include md3-emit-properties($md3-scrollbar-properties, $overrides);
256
+ }
257
+
258
+ @mixin md3-export-state-opacities($overrides) {
259
+ @each $property, $state in $md3-state-opacity-properties {
260
+ #{$property}: #{md3-resolve($overrides, $property, md3-state($state))};
261
+ }
262
+ }
263
+
264
+ @mixin md3-export-interaction-tuning($overrides) {
265
+ --interaction-tone-direction: #{md3-resolve($overrides, "--interaction-tone-direction", 1)};
266
+
267
+ @each $property, $factor in $md3-interaction-lift-factors {
268
+ #{$property}: #{md3-resolve($overrides, $property, md3-tone-scale($factor))};
269
+ }
270
+
271
+ @include md3-emit-properties($md3-interaction-properties, $overrides);
272
+ }
273
+
274
+ @mixin md3-export-semantic-colors($overrides) {
275
+ @include md3-emit-properties($md3-spectrum-colors, $overrides);
276
+ @include md3-emit-properties($md3-semantic-base-colors, $overrides);
277
+ @include md3-emit-properties($md3-semantic-aliases, $overrides);
278
+
279
+ @each $property, $config in $md3-semantic-tones {
280
+ $base: map.get($config, base);
281
+ $weight: map.get($config, weight);
282
+ #{$property}: #{md3-resolve($overrides, $property, md3-shadow-mix($base, $weight))};
283
+ }
284
+ }
285
+
286
+ //
287
+ // Export state vars mixin
288
+ @mixin md3-export-state-vars($overrides: ()) {
289
+ $config: if(sass(meta.type-of($overrides) == "map"): $overrides; else: ());
290
+
291
+ @include md3-export-backdrop-filters($config);
292
+ @include md3-export-layer-opacities($config);
293
+ @include md3-export-state-opacities($config);
294
+ @include md3-export-interaction-tuning($config);
295
+ @include md3-export-semantic-colors($config);
296
+ }
297
+
298
+ //
299
+ // Material color utilities theme mixin
300
+ @mixin material-color-utilities-theme($mode, $selector) {
301
+ $suffix: map.get($material-mode-suffix, $mode);
302
+
303
+ #{$selector} {
304
+ @each $role, $source in $material-role-map {
305
+ #{md3-var($role)}: var(#{$source}#{$suffix}, #{md3-color($role, $mode)});
306
+ }
307
+ }
308
+ }
309
+
310
+ //
311
+ // Material color utilities remap mixin
312
+ @mixin material-color-utilities-remap($system-selector: ":where(:root, :host, :scope, body, div, section, html)") {
313
+ @at-root {
314
+ @layer md3.mcu {
315
+ #{$system-selector}:not([data-scheme]):not([data-theme]),
316
+ #{$system-selector}:where([data-scheme="auto"], [data-theme="auto"]),
317
+ #{$system-selector}:where([data-scheme="system"], [data-theme="system"])
318
+ {
319
+ @media (prefers-color-scheme: light) { @include material-color-utilities-theme(light, "&"); }
320
+ @media (prefers-color-scheme: dark) { @include material-color-utilities-theme(dark, "&"); }
321
+ }
322
+
323
+ //
324
+ #{$system-selector}:where([data-theme="dark"] , [data-scheme="dark"] ) { @include material-color-utilities-theme(dark , "&"); }
325
+ #{$system-selector}:where([data-theme="light"], [data-scheme="light"]) { @include material-color-utilities-theme(light, "&"); }
326
+ }
327
+ }
328
+ }
@@ -0,0 +1,325 @@
1
+ @use "sass:map";
2
+ @use "sass:meta";
3
+ @use "sass:list";
4
+ @use "sass:string";
5
+
6
+ //
7
+ @use "./color" as color;
8
+ @use "./utils" as utils;
9
+
10
+ //
11
+ @mixin _apply-surface-palette($selectors, $color: var(--on-surface-color, currentColor), $set-icon: false) {
12
+ #{$selectors} {
13
+ border-color: var(--border-color, transparent);
14
+ background-color: var(--surface-color, transparent);
15
+ color: #{$color};
16
+ accent-color: #{$color};
17
+ caret-color: #{$color};
18
+ text-decoration-color: #{$color};
19
+ text-emphasis-color: #{$color};
20
+ scrollbar-color: var(--scrollbar-color) transparent;
21
+ -webkit-text-fill-color: currentColor;
22
+
23
+ @if $set-icon {
24
+ --icon-color: #{$color};
25
+ }
26
+ }
27
+ }
28
+
29
+ //
30
+ @mixin reset-vars($vars...) { @each $v in $vars { #{$v}: 0; } }
31
+ @mixin tm-dep($property, $light, $dark) {
32
+ & {
33
+ #{$property}: color-mix(in oklch, #{$light} calc(100% * var(--tm-scheme)), #{$dark});
34
+ @supports(color: light-dark(white, black)) { #{$property}: light-dark(#{$light}, #{$dark}); }
35
+ }
36
+ }
37
+
38
+ //
39
+ @mixin inverse {
40
+ & {
41
+ @include tm-dep("--tm-cr", var(--tm-cr-dark), var(--tm-cr-light));
42
+ --tm-ac: #{tm-lo(var(--tm-origin, currentColor), 80%)};
43
+ }
44
+ }
45
+
46
+ //
47
+ @function tm-hi($base, $percent) { @return color-mix(in oklch, #{$base} calc(100% - #{$percent}), var(--tm-hi, white)); }
48
+ @function tm-lo($base, $percent) { @return color-mix(in oklch, #{$base} calc(100% - #{$percent}), var(--tm-lo, black)); }
49
+
50
+ // Internal helpers
51
+ @function _merge-color-options($defaults, $overrides) {
52
+ @if $overrides == null or meta.type-of($overrides) != "map" or list.length($overrides) == 0 {
53
+ @return $defaults;
54
+ }
55
+
56
+ @return map.merge($defaults, $overrides);
57
+ }
58
+
59
+ // Enhanced colorize mixin with scoped propagation options
60
+ @mixin solid-colorize(
61
+ $selector: "&",
62
+ $options: (
63
+ "shade": 0.0,
64
+ "tint": 0.0,
65
+ "scheme-id": 2,
66
+ "role": null,
67
+ "scope": "component",
68
+ "propagate": null,
69
+ "forms-background": null,
70
+ "global-targets": null
71
+ )
72
+ ) {
73
+ $role: map.get($options, "role");
74
+ $base-shade: utils.option-or($options, "shade", 0.0);
75
+ $base-tint: utils.option-or($options, "tint", 0.0);
76
+ $scheme-id: utils.option-or($options, "scheme-id", 2);
77
+ $scope: utils.option-or($options, "scope", "component");
78
+ $propagate-default: if(sass($scope == "selector"): false; else: true);
79
+ $propagate: utils.option-or($options, "propagate", $propagate-default);
80
+ $forms-background: utils.option-or($options, "forms-background", $propagate);
81
+ $global-targets: utils.option-or($options, "global-targets", $propagate);
82
+
83
+ #{$selector} {
84
+ --color-shade: #{$base-shade};
85
+ --color-tint: #{$base-tint};
86
+ --color-source: var(--current, var(--primary, transparent));
87
+ --surface-color: --c2-surface(
88
+ var(--_color-shade, 0),
89
+ var(--color-source, var(--current, var(--primary, transparent))),
90
+ #{$scheme-id}
91
+ );
92
+ --on-surface-color: --c2-on-surface(
93
+ var(--_color-tint, 0),
94
+ var(--color-source, var(--current, var(--primary, transparent))),
95
+ #{$scheme-id}
96
+ );
97
+ --on-surface: var(--on-surface-color, currentColor); // alias
98
+ --scrollbar-color: oklch(from var(--on-surface-color, currentColor) l c h / 0.4);
99
+ --border-color: oklch(
100
+ from --c2-surface(
101
+ calc(var(--_color-shade, 0) + var(--_color-tint, 0) + 0.05),
102
+ var(--color-source, var(--current, var(--primary, transparent))),
103
+ #{$scheme-id}
104
+ ) l c h / 0.1
105
+ );
106
+
107
+ &:where(a, span, ui-icon) {
108
+ @include _apply-surface-palette("&", var(--on-surface-color, currentColor), true);
109
+ --icon-color: var(--on-surface-color, currentColor);
110
+
111
+ //
112
+ &::selection {
113
+ color: var(--surface-color, currentColor);
114
+ --icon-color: var(--surface-color, currentColor);
115
+ }
116
+ }
117
+
118
+ &:where(button, input, select, textarea) {
119
+ border-style: solid;
120
+ border-width: 0.5px;
121
+ }
122
+
123
+ @include _apply-surface-palette("&", var(--on-surface-color, currentColor), true);
124
+ @include _apply-surface-palette("&::picker(select)", var(--on-surface-color, currentColor));
125
+
126
+ @if $propagate {
127
+ @include _apply-surface-palette("& :where(select)", var(--on-surface-color, currentColor));
128
+ }
129
+
130
+ $interactive-scope: if(
131
+ sass($propagate):
132
+ "&:where(button, input, select, textarea, option), & :where(button, input, select, textarea, option)";
133
+ else:
134
+ "&:where(button, input, select, textarea, option)"
135
+ );
136
+
137
+ #{$interactive-scope} {
138
+ @if $propagate {
139
+ @include _apply-surface-palette("&", var(--on-surface-color, currentColor), true);
140
+ }
141
+
142
+ //
143
+ @if $forms-background {
144
+ background-color: color-mix(
145
+ in oklch,
146
+ var(--surface-color, transparent) 96%,
147
+ var(--on-surface-color, transparent) 10%
148
+ );
149
+ }
150
+
151
+ //
152
+ transition:
153
+ --_color-shade var(--transition-normal),
154
+ --_color-tint var(--transition-normal),
155
+ --surface-color var(--transition-normal),
156
+ --on-surface-color var(--transition-normal),
157
+ --border-color var(--transition-normal),
158
+ --scrollbar-color var(--transition-normal),
159
+ --icon-color var(--transition-normal),
160
+ border-color var(--transition-normal),
161
+ background-color var(--transition-normal),
162
+ box-shadow var(--transition-normal),
163
+ opacity var(--transition-normal);
164
+
165
+ //
166
+ & { --_color-shade: var(--color-shade, 0); };
167
+
168
+ //
169
+ @include utils.when-hover { --_color-shade: calc(var(--color-shade, 0) + var(--hover-lift, 0.03)); }
170
+ @include utils.when-active { --_color-shade: calc(var(--color-shade, 0) + var(--active-lift, 0.05)); }
171
+ @include utils.when-focus { --_color-shade: calc(var(--color-shade, 0) + var(--focus-lift, 0.02)); }
172
+ @include utils.when-focus-visible { --_color-shade: calc(var(--color-shade, 0) + var(--focus-lift, 0.02)); }
173
+ @include utils.when-disabled { --_color-shade: calc(var(--color-shade, 0) + var(--disabled-shade, 0.1)); }
174
+ @include utils.when-selected { --_color-shade: calc(var(--color-shade, 0) + var(--selected-shade, 0.04)); }
175
+ @include utils.when-autofill { --_color-shade: calc(var(--color-shade, 0) + var(--autofill-shade, 0.04)); }
176
+
177
+ //
178
+ &::placeholder {
179
+ --on-surface-color: oklch(
180
+ from --c2-on-surface(
181
+ 0.0,
182
+ var(--color-source, var(--current, var(--primary, transparent))),
183
+ #{$scheme-id}
184
+ ) l c h / 0.3
185
+ );
186
+ }
187
+
188
+ //
189
+ @include utils.when-autofill {
190
+ &, &:hover, &:focus, &:active {
191
+ background-color: var(--surface-color, transparent) !important;
192
+ }
193
+ }
194
+
195
+
196
+ //
197
+ @include utils.when-selected {
198
+ background-color: var(--on-surface-color, transparent);
199
+ color: var(--surface-color, currentColor);
200
+ -webkit-text-fill-color: var(--surface-color, currentColor);
201
+ --icon-color: var(--surface-color, currentColor);
202
+ }
203
+ }
204
+
205
+ &::picker(select) {
206
+ background-color: transparent;
207
+ }
208
+
209
+ @if $global-targets {
210
+ ::picker(select) {
211
+ background-color: transparent;
212
+ }
213
+ }
214
+
215
+ @if $global-targets {
216
+ ui-icon {
217
+ background-color: transparent;
218
+ --icon-color: var(--on-surface-color, currentColor);
219
+ }
220
+ }
221
+
222
+ //
223
+ &:where(a, span, ui-icon) {
224
+ background-color: transparent;
225
+ &::selection { background-color: var(--on-surface-color, transparent); }
226
+ }
227
+
228
+ //
229
+ @if $global-targets {
230
+ :where(a, span, ui-icon) {
231
+ background-color: transparent;
232
+ &::selection { background-color: var(--on-surface-color, transparent); }
233
+ }
234
+ }
235
+ }
236
+ }
237
+
238
+
239
+
240
+ //
241
+ @mixin veela-select-surface() {
242
+ background-color: var(--surface-color);
243
+ border-color: var(--border-color);
244
+ color: var(--on-surface-color);
245
+ accent-color: currentColor;
246
+ caret-color: currentColor;
247
+ text-decoration-color: currentColor;
248
+ text-emphasis-color: currentColor;
249
+ scrollbar-color: var(--scrollbar-color) transparent;
250
+ -webkit-text-fill-color: currentColor;
251
+ }
252
+
253
+ //
254
+ @mixin surface($shade: var(--surface-opacity-subtle)) {
255
+ @include solid-colorize("&", ("shade": $shade, "tint": 0.0));
256
+ }
257
+
258
+ //
259
+ @mixin surface-interactive($shade: var(--surface-opacity-subtle)) {
260
+ @include solid-colorize("&", ("shade": $shade, "tint": 0.0));
261
+ }
262
+
263
+ //
264
+ @mixin text-color($tint: var(--text-tint-primary)) {
265
+ color: --c2-on-surface($tint, var(--current, var(--color-on-surface, var(--md-on-surface, #1c1b1f))));
266
+ }
267
+
268
+ //
269
+ @mixin border-color($tint: var(--scrollbar-tint), $opacity: var(--border-opacity-default)) {
270
+ border-color: oklch(
271
+ from --c2-on-surface(
272
+ $tint,
273
+ var(--current, var(--color-on-surface, var(--md-on-surface, #1c1b1f)))
274
+ ) l c h / $opacity
275
+ );
276
+ }
277
+
278
+ //
279
+ @mixin backdrop-blur($strength: "default") {
280
+ @if $strength =="subtle" {
281
+ backdrop-filter: var(--backdrop-blur-subtle);
282
+ }
283
+
284
+ @else if $strength =="strong" {
285
+ backdrop-filter: var(--backdrop-blur-strong);
286
+ }
287
+
288
+ @else {
289
+ backdrop-filter: var(--backdrop-blur-default);
290
+ }
291
+ }
292
+
293
+ //
294
+ @function veela-state-shade($base, $delta: null) {
295
+ @if $delta == null or $delta == 0 {
296
+ @return $base;
297
+ }
298
+
299
+ @if meta.type-of($delta) == number {
300
+ $direction: var(--interaction-tone-direction, 1);
301
+ @return calc(#{$base} + (#{$delta} * #{$direction}));
302
+ }
303
+
304
+ @return $delta;
305
+ }
306
+
307
+ //
308
+ @function veela-selector-list($selectors) {
309
+ @if meta.type-of($selectors) == string {
310
+ @return $selectors;
311
+ }
312
+
313
+ $result: "";
314
+
315
+ @if meta.type-of($selectors) == list {
316
+ @for $i from 1 through list.length($selectors) {
317
+ $separator: if(sass($i > 1): ", "; else: "");
318
+ $result: #{$result}#{$separator}#{list.nth($selectors, $i)};
319
+ }
320
+
321
+ @return $result;
322
+ }
323
+
324
+ @return $selectors;
325
+ }