@fest-lib/veela 0.1.20 → 1.0.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 (141) hide show
  1. package/dist/veela.js +4 -33
  2. package/package.json +9 -2
  3. package/src/scss/_layers.scss +5 -34
  4. package/src/scss/basic/{misc/_core-layout.scss → _core-layout.scss} +1 -1
  5. package/src/scss/basic/_layers.scss +1 -0
  6. package/src/scss/basic/{misc/_layout.scss → _layout.scss} +15 -15
  7. package/src/scss/basic/{misc/_normalize.scss → _normalize.scss} +5 -103
  8. package/src/scss/basic/{misc/_states.scss → _states.scss} +2 -2
  9. package/src/scss/{core/misc → basic}/_utilities.scss +4 -4
  10. package/src/scss/basic/design/_keyframes.scss +1 -1
  11. package/src/scss/basic/design/_shapes.scss +1 -1
  12. package/src/scss/basic/index.scss +14 -16
  13. package/src/scss/chrome.scss +2 -0
  14. package/src/scss/core/_color-mod.scss +24 -0
  15. package/src/scss/core/{misc/_color-properties.scss → _color-properties.scss} +1 -1
  16. package/src/scss/core/{misc/_tokens.scss → _tokens.scss} +10 -93
  17. package/src/scss/core/index.scss +13 -1
  18. package/src/scss/index.scss +7 -2
  19. package/src/scss/index.ts +1 -1
  20. package/src/scss/{core/interact → interact}/_viewport.scss +1 -1
  21. package/src/scss/interact/index.scss +18 -0
  22. package/src/scss/theme/_effects.scss +60 -0
  23. package/src/scss/theme/index.scss +8 -0
  24. package/src/scss/{advanced/index.ts → theme/loader.ts} +3 -4
  25. package/src/scss/ui/_bar.scss +268 -0
  26. package/src/scss/ui/_buttons.scss +215 -0
  27. package/src/scss/ui/_chrome-mixins.scss +104 -0
  28. package/src/scss/ui/_color.scss +3 -0
  29. package/src/scss/ui/_colorize.scss +5 -0
  30. package/src/scss/{advanced/layout → ui}/_content.scss +0 -1
  31. package/src/scss/ui/_core-layout.scss +4 -0
  32. package/src/scss/ui/_essentials-options.scss +2 -0
  33. package/src/scss/ui/_essentials.scss +707 -0
  34. package/src/scss/ui/_explorer-content.scss +417 -0
  35. package/src/scss/ui/_explorer.scss +274 -0
  36. package/src/scss/ui/_forms-bare-host-elements.scss +25 -0
  37. package/src/scss/ui/_forms-options.scss +2 -0
  38. package/src/scss/ui/_forms.scss +279 -0
  39. package/src/scss/ui/_forms_misc.scss +201 -0
  40. package/src/scss/ui/_gridbox.scss +298 -0
  41. package/src/scss/ui/_home-host.scss +192 -0
  42. package/src/scss/ui/_index.scss +23 -0
  43. package/src/scss/ui/_launcher-typography.scss +31 -0
  44. package/src/scss/ui/_layers.scss +48 -0
  45. package/src/scss/ui/_layout.scss +3 -0
  46. package/src/scss/ui/_markdown.scss +1634 -0
  47. package/src/scss/ui/_modal.scss +309 -0
  48. package/src/scss/ui/_motion.scss +3 -0
  49. package/src/scss/ui/_native-host-button-chrome.scss +31 -0
  50. package/src/scss/ui/_normalize.scss +5 -0
  51. package/src/scss/ui/_orientation-functions.scss +273 -0
  52. package/src/scss/ui/_orientbox.scss +97 -0
  53. package/src/scss/ui/_scrollbar.scss +257 -0
  54. package/src/scss/ui/_shared-overlays.scss +16 -0
  55. package/src/scss/ui/_shared.scss +4 -0
  56. package/src/scss/ui/_sidebar.scss +478 -0
  57. package/src/scss/ui/_speed-dial.scss +47 -0
  58. package/src/scss/ui/_states.scss +4 -0
  59. package/src/scss/ui/_tables.scss +28 -0
  60. package/src/scss/ui/_tabs.scss +405 -0
  61. package/src/scss/ui/_taskbar.scss +215 -0
  62. package/src/scss/ui/_toolbars.scss +167 -0
  63. package/src/scss/ui/_typography.scss +11 -0
  64. package/src/scss/ui/_utils.scss +8 -0
  65. package/src/scss/ui/_viewport.scss +470 -0
  66. package/src/scss/ui/_window-frame.scss +658 -0
  67. package/src/scss/ui/components/app-menu.scss +817 -0
  68. package/src/scss/ui/components/appearance-desktop.scss +14 -0
  69. package/src/scss/ui/components/appearance-mobile.scss +14 -0
  70. package/src/scss/ui/components/calendar/flyout.scss +194 -0
  71. package/src/scss/ui/components/calendar/index.scss +627 -0
  72. package/src/scss/ui/components/explorer-settings.scss +232 -0
  73. package/src/scss/ui/components/file-manager-content.scss +2 -0
  74. package/src/scss/ui/components/file-manager.scss +2 -0
  75. package/src/scss/ui/components/launcher-icon-mask.scss +34 -0
  76. package/src/scss/ui/components/navbar.scss +133 -0
  77. package/src/scss/ui/components/quick-settings.scss +321 -0
  78. package/src/scss/ui/components/scrollframe.scss +58 -0
  79. package/src/scss/ui/components/slider.scss +188 -0
  80. package/src/scss/ui/components/speed-dial.scss +2288 -0
  81. package/src/scss/ui/components/statusbar.scss +255 -0
  82. package/src/scss/ui/components/task.scss +118 -0
  83. package/src/scss/ui/components/taskbar.scss +514 -0
  84. package/src/scss/ui/components/text.scss +241 -0
  85. package/src/scss/ui/components/window.scss +601 -0
  86. package/src/scss/ui/home-host-apply.scss +10 -0
  87. package/src/scss/ui/index.scss +7 -0
  88. package/src/scss/ui/native-controls.scss +17 -0
  89. package/src/scss/advanced/_index.scss +0 -0
  90. package/src/scss/advanced/animation/_motion.scss +0 -323
  91. package/src/scss/advanced/color/_color.scss +0 -328
  92. package/src/scss/advanced/color/_colorize.scss +0 -325
  93. package/src/scss/advanced/design/_design-tokens.scss +0 -118
  94. package/src/scss/advanced/design/_effects.scss +0 -275
  95. package/src/scss/advanced/design/_shadow.scss +0 -359
  96. package/src/scss/advanced/design/_surfaces.scss +0 -76
  97. package/src/scss/advanced/effects/_animations.scss +0 -124
  98. package/src/scss/advanced/effects/_shadows.scss +0 -50
  99. package/src/scss/advanced/font/_typography.scss +0 -601
  100. package/src/scss/advanced/index.scss +0 -11
  101. package/src/scss/advanced/layout/_index.scss +0 -5
  102. package/src/scss/advanced/layout/_normalize.scss +0 -543
  103. package/src/scss/advanced/layout/_shared-overlays.scss +0 -162
  104. package/src/scss/advanced/md3/_md3.scss +0 -506
  105. package/src/scss/advanced/md3/_utils.scss +0 -114
  106. package/src/scss/advanced/misc/_config.scss +0 -119
  107. package/src/scss/advanced/misc/_initials.scss +0 -298
  108. package/src/scss/advanced/misc/_mixins.scss +0 -179
  109. package/src/scss/advanced/misc/_rendering.scss +0 -82
  110. package/src/scss/advanced/misc/_tokens.scss +0 -74
  111. package/src/scss/advanced/theme/_shared.scss +0 -232
  112. package/src/scss/advanced/theme/_states.scss +0 -332
  113. package/src/scss/advanced/theme/_variants.scss +0 -354
  114. package/src/scss/advanced/tokens/_material-color.scss +0 -120
  115. package/src/scss/advanced/tokens/_variables.scss +0 -171
  116. package/src/scss/basic/misc/_index.scss +0 -18
  117. package/src/scss/basic/misc/_mixins.scss +0 -179
  118. package/src/scss/basic/misc/_queries.scss +0 -34
  119. package/src/scss/basic/misc/_tokens.scss +0 -78
  120. package/src/scss/basic/misc/_veela.scss +0 -12
  121. package/src/scss/core/misc/_index.scss +0 -6
  122. /package/src/scss/basic/{misc/_motion.scss → _motion.scss} +0 -0
  123. /package/src/scss/{advanced/misc → basic}/_queries.scss +0 -0
  124. /package/src/scss/basic/{misc/_shared.scss → _shared.scss} +0 -0
  125. /package/src/scss/core/{misc/_config.scss → _config.scss} +0 -0
  126. /package/src/scss/core/{misc/_functions.scss → _functions.scss} +0 -0
  127. /package/src/scss/core/{misc/_icons.scss → _icons.scss} +0 -0
  128. /package/src/scss/core/{misc/_layout.scss → _layout.scss} +0 -0
  129. /package/src/scss/core/{misc/_mixins.scss → _mixins.scss} +0 -0
  130. /package/src/scss/core/{misc/_properties.scss → _properties.scss} +0 -0
  131. /package/src/scss/core/{misc/_utils.scss → _utils.scss} +0 -0
  132. /package/src/scss/{core/interact → interact}/_draggable.scss +0 -0
  133. /package/src/scss/{core/interact → interact}/_position.scss +0 -0
  134. /package/src/scss/{core/interact → interact}/_ps-anchor.scss +0 -0
  135. /package/src/scss/{core/interact → interact}/_ps-centered.scss +0 -0
  136. /package/src/scss/{core/interact → interact}/_ps-cursor.scss +0 -0
  137. /package/src/scss/{core/interact → interact}/_ps-draggable.scss +0 -0
  138. /package/src/scss/{core/interact → interact}/_ps-mechanic.scss +0 -0
  139. /package/src/scss/{core/interact → interact}/_ps-properties.scss +0 -0
  140. /package/src/scss/{core/interact → interact}/_ps-resizable.scss +0 -0
  141. /package/src/scss/{core/interact → interact}/_resizable.scss +0 -0
@@ -1,323 +0,0 @@
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
- // Motion durations
12
- $md3-motion-durations: (
13
- fast: 120ms,
14
- normal: 160ms,
15
- slow: 220ms,
16
- long: 320ms,
17
- extra-long: 420ms,
18
- );
19
-
20
-
21
- //
22
- // Motion easing
23
- $md3-motion-easing: (
24
- standard: cubic-bezier(0.4, 0, 0.2, 1),
25
- emphasized: cubic-bezier(0.2, 0, 0, 1),
26
- decelerate: cubic-bezier(0, 0, 0.2, 1),
27
- accelerate: cubic-bezier(0.4, 0, 1, 1),
28
- bounce: cubic-bezier(0.34, 1.56, 0.64, 1),
29
- );
30
-
31
- $md3-easing-aliases: (
32
- out: standard,
33
- "in-out": decelerate,
34
- "in": accelerate,
35
- );
36
-
37
- $md3-transition-definitions: (
38
- colors: (
39
- properties: (color, background-color, border-color),
40
- duration: normal,
41
- easing: out,
42
- ),
43
- transform: (
44
- properties: transform,
45
- duration: slow,
46
- easing: "in-out",
47
- ),
48
- opacity: (
49
- properties: opacity,
50
- duration: fast,
51
- easing: out,
52
- ),
53
- all: (
54
- properties: all,
55
- duration: normal,
56
- easing: out,
57
- ),
58
- );
59
-
60
- $md3-transition-aliases: (
61
- fast: opacity,
62
- normal: colors,
63
- slow: transform,
64
- );
65
-
66
-
67
- //
68
- // Easing function
69
- @function md3-easing($token: standard) {
70
- @return _.md3-fetch($md3-motion-easing, $token, "easing token");
71
- }
72
-
73
-
74
- //
75
- // Duration function
76
- @function md3-duration($token: normal) {
77
- @return _.md3-fetch($md3-motion-durations, $token, "duration token");
78
- }
79
-
80
- //
81
- // Motion helper functions
82
- @function duration-var($token: normal) {
83
- $value: _.md3-fetch($md3-motion-durations, $token, "duration token");
84
- @return var(--duration-#{$token}, #{$value});
85
- }
86
-
87
- @function easing-var($token: standard) {
88
- @if map.has-key($md3-motion-easing, $token) {
89
- $value: _.md3-fetch($md3-motion-easing, $token, "easing token");
90
- @return var(--ease-#{$token}, #{$value});
91
- }
92
-
93
- @if map.has-key($md3-easing-aliases, $token) {
94
- $resolved: map.get($md3-easing-aliases, $token);
95
- $value: _.md3-fetch($md3-motion-easing, $resolved, "easing token");
96
- @return var(--ease-#{$token}, var(--ease-#{$resolved}, #{$value}));
97
- }
98
-
99
- @error "Unknown easing token `#{$token}`.";
100
- }
101
-
102
- @function _transition-props($properties) {
103
- @return sass(if(sass(meta.type-of($properties) == "list"): list.join($properties, ", "); else: $properties));
104
- }
105
-
106
- @function _transition-definition($config) {
107
- $properties: map.get($config, properties);
108
- $duration-token: map.get($config, duration);
109
- $easing-token: map.get($config, easing);
110
- $delay: map.get($config, delay);
111
-
112
- @if $properties == null {
113
- $properties: all;
114
- }
115
-
116
- @if $duration-token == null {
117
- $duration-token: normal;
118
- }
119
-
120
- @if $easing-token == null {
121
- $easing-token: standard;
122
- }
123
-
124
- $sequence: ();
125
- $sequence: list.append($sequence, _transition-props($properties), "space");
126
- $sequence: list.append($sequence, duration-var($duration-token), "space");
127
- $sequence: list.append($sequence, easing-var($easing-token), "space");
128
-
129
- @if $delay != null {
130
- $sequence: list.append($sequence, $delay, "space");
131
- }
132
-
133
- @return list.join($sequence, " ");
134
- }
135
-
136
- @mixin _export-duration-vars($durations) {
137
- @each $token, $value in $durations {
138
- --md3-duration-#{$token}: #{$value};
139
- @if $token != fast and $token != normal and $token != slow {
140
- --duration-#{$token}: #{$value};
141
- }
142
- }
143
- }
144
-
145
- @mixin _export-easing-vars($easing, $aliases) {
146
- @each $token, $value in $easing {
147
- --ease-#{$token}: #{$value};
148
- }
149
-
150
- @each $alias, $target in $aliases {
151
- @if map.has-key($easing, $target) {
152
- --ease-#{$alias}: var(--ease-#{$target});
153
- }
154
- }
155
- }
156
-
157
- @mixin _export-transition-vars($definitions, $aliases) {
158
- @each $name, $config in $definitions {
159
- --md3-transition-#{$name}: #{_transition-definition($config)};
160
- @if $name != fast and $name != normal and $name != slow {
161
- --transition-#{$name}: #{_transition-definition($config)};
162
- }
163
- }
164
-
165
- @each $alias, $target in $aliases {
166
- @if $alias != fast and $alias != normal and $alias != slow and map.has-key($definitions, $target) {
167
- --transition-#{$alias}: var(--transition-#{$target});
168
- }
169
- }
170
- }
171
-
172
- //
173
- // Transition variables
174
- $transition-fast: md3-duration(fast);
175
- $transition-base: md3-duration(normal);
176
- $transition-slow: md3-duration(slow);
177
- $transition-bounce: md3-easing(bounce);
178
-
179
- //
180
- // UI duration variables
181
- $ui-duration-fast: md3-duration(fast) !default;
182
- $ui-duration-standard: md3-duration(normal) !default;
183
- $ui-ease-standard: md3-easing(standard) !default;
184
-
185
- //
186
- // Export motion vars mixin
187
- @mixin md3-export-motion-vars(
188
- $durations: $md3-motion-durations,
189
- $easing: $md3-motion-easing,
190
- $easing-aliases: $md3-easing-aliases,
191
- $transition-definitions: $md3-transition-definitions,
192
- $transition-aliases: $md3-transition-aliases
193
- ) {
194
- // =============================================================================
195
- // ANIMATIONS & TRANSITIONS
196
- // =============================================================================
197
-
198
- @include _export-duration-vars($durations);
199
- @include _export-easing-vars($easing, $easing-aliases);
200
- @include _export-transition-vars($transition-definitions, $transition-aliases);
201
-
202
- --transition-delay: 0s;
203
- }
204
-
205
- //
206
- // Motion animation mixin
207
- @mixin motion-animation(
208
- $name,
209
- $duration: duration-var(normal),
210
- $timing: easing-var(out),
211
- $delay: null,
212
- $fill: null,
213
- $iteration: null,
214
- $direction: null,
215
- $state: null
216
- ) {
217
- $sequence: ($name, $duration, $timing);
218
-
219
- @if $delay != null {
220
- $sequence: list.append($sequence, $delay, "space");
221
- }
222
-
223
- @if $iteration != null {
224
- $sequence: list.append($sequence, $iteration, "space");
225
- }
226
-
227
- @if $direction != null {
228
- $sequence: list.append($sequence, $direction, "space");
229
- }
230
-
231
- @if $fill != null {
232
- $sequence: list.append($sequence, $fill, "space");
233
- }
234
-
235
- @if $state != null {
236
- $sequence: list.append($sequence, $state, "space");
237
- }
238
-
239
- animation: $sequence;
240
- }
241
-
242
- //
243
- // Fade in mixin
244
- @mixin fade-in($duration: duration-var(normal), $timing: easing-var(out), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
245
- @include motion-animation(fade-in, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
246
- }
247
-
248
- //
249
- // Slide up mixin
250
- @mixin slide-up($duration: duration-var(normal), $timing: easing-var(out), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
251
- @include motion-animation(slide-up, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
252
- }
253
-
254
- //
255
- // Scale in mixin
256
- @mixin scale-in($duration: duration-var(fast), $timing: easing-var(bounce), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
257
- @include motion-animation(scale-in, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
258
- }
259
-
260
- //
261
- // Focus ring mixin
262
- @mixin focus-ring($tint: var(--outline-tint), $thickness: 2px, $offset: 2px) {
263
- &:focus-visible {
264
- outline: $thickness solid oklch(
265
- from --c2-on-surface(
266
- $tint,
267
- var(--current, var(--color-on-surface, var(--md-on-surface, #1c1b1f)))
268
- ) l c h / var(--outline-opacity)
269
- );
270
- outline-offset: $offset;
271
- }
272
- }
273
-
274
- //
275
- // Reduced motion mixin
276
- @mixin reduced-motion($preference: reduce) {
277
- @media (prefers-reduced-motion: #{$preference}) {
278
- @content;
279
- }
280
- }
281
-
282
- //
283
- // High contrast mixin
284
- @mixin high-contrast($preference: more) {
285
- @media (prefers-contrast: #{$preference}) {
286
- @content;
287
- }
288
- }
289
-
290
- //
291
- // Transition mixin
292
- @mixin transition($properties: all, $duration: null, $timing: null, $delay: null) {
293
- & {
294
- $prop-list: _transition-props($properties);
295
- --transition-props: #{$prop-list};
296
-
297
- @if $duration != null {
298
- @if map.has-key($md3-motion-durations, $duration) {
299
- --transition-duration: #{duration-var($duration)};
300
- } @else {
301
- --transition-duration: #{$duration};
302
- }
303
- }
304
-
305
- @if $timing != null {
306
- @if map.has-key($md3-motion-easing, $timing) or map.has-key($md3-easing-aliases, $timing) {
307
- --transition-timing: #{easing-var($timing)};
308
- } @else {
309
- --transition-timing: #{$timing};
310
- }
311
- }
312
-
313
- @if $delay != null {
314
- --transition-delay: #{$delay};
315
- }
316
-
317
- transition:
318
- var(--transition-props)
319
- var(--transition-duration, #{duration-var(normal)})
320
- var(--transition-timing, #{easing-var(out)})
321
- var(--transition-delay, 0s);
322
- }
323
- }
@@ -1,328 +0,0 @@
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
- }