@fest-lib/veela 0.1.20 → 1.0.2

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 +6 -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,325 +0,0 @@
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
- }
@@ -1,118 +0,0 @@
1
- /**
2
- * Design Tokens - Centralized Constants
3
- *
4
- * Consolidates design-system-level constants used across buttons, forms,
5
- * and other interactive elements.
6
- *
7
- * Contains:
8
- * - State opacity values (hover, press, focus, disabled, drag)
9
- * - Motion/timing defaults (duration, easing)
10
- * - Shared styling constants
11
- */
12
-
13
- @use "sass:map";
14
-
15
- // ============================================================================
16
- // State Opacity Tokens
17
- // ============================================================================
18
- // Used across buttons, forms, inputs, and interactive elements
19
-
20
- $state-opacity-hover: 0.08 !default;
21
- $state-opacity-press: 0.12 !default;
22
- $state-opacity-focus: 0.12 !default;
23
- $state-opacity-disabled: 0.38 !default;
24
- $state-opacity-drag: 0.16 !default;
25
-
26
- $state-opacity-map: (
27
- hover: $state-opacity-hover,
28
- press: $state-opacity-press,
29
- focus: $state-opacity-focus,
30
- disabled: $state-opacity-disabled,
31
- drag: $state-opacity-drag,
32
- ) !default;
33
-
34
- // ============================================================================
35
- // Motion/Timing Tokens
36
- // ============================================================================
37
- // Used for transitions on interactive elements
38
-
39
- $duration-fast: var(--duration-fast, 140ms) !default;
40
- $duration-normal: var(--duration-normal, 220ms) !default;
41
- $duration-slow: var(--duration-slow, 360ms) !default;
42
-
43
- $motion-timing-map: (
44
- fast: $duration-fast,
45
- normal: $duration-normal,
46
- slow: $duration-slow,
47
- ) !default;
48
-
49
- $ease-out: cubic-bezier(0, 0, 0.2, 1) !default;
50
- $ease-in: cubic-bezier(0.4, 0, 1, 1) !default;
51
- $ease-in-out: cubic-bezier(0.4, 0, 0.2, 1) !default;
52
-
53
- // ============================================================================
54
- // Button & Form Styling Tokens
55
- // ============================================================================
56
-
57
- $button-gap: var(--gap-sm) !default;
58
- $button-padding-y: var(--padding-sm) !default;
59
- $button-padding-x: var(--padding-lg) !default;
60
- $button-radius: var(--radius-full) !default;
61
- $button-min-height: fit-content !default;
62
-
63
- $input-gap: var(--space-sm) !default;
64
- $input-padding: var(--padding-sm) !default;
65
- $input-padding-x: var(--padding-md) !default;
66
-
67
- // ============================================================================
68
- // Mixin: Export state opacity CSS variables
69
- // ============================================================================
70
-
71
- ///
72
- /// Exports state opacity values as CSS custom properties.
73
- /// Centralizes opacity values used across interactive elements.
74
- ///
75
- /// @param {map} $map - Opacity map (default: $state-opacity-map)
76
- ///
77
- @mixin export-state-opacity(
78
- $map: $state-opacity-map
79
- ) {
80
- @each $state, $value in $map {
81
- --state-opacity-#{$state}: #{$value};
82
- }
83
- }
84
-
85
- // ============================================================================
86
- // Mixin: Export motion timing CSS variables
87
- // ============================================================================
88
-
89
- ///
90
- /// Exports motion timing values as CSS custom properties.
91
- /// Centralizes duration and easing used for transitions.
92
- ///
93
- /// @param {map} $timing-map - Timing map (default: $motion-timing-map)
94
- ///
95
- @mixin export-motion-timing(
96
- $timing-map: $motion-timing-map
97
- ) {
98
- @each $type, $duration in $timing-map {
99
- --duration-#{$type}: #{$duration};
100
- }
101
-
102
- --ease-out: #{$ease-out};
103
- --ease-in: #{$ease-in};
104
- --ease-in-out: #{$ease-in-out};
105
- }
106
-
107
- // ============================================================================
108
- // Mixin: Export all design tokens
109
- // ============================================================================
110
-
111
- ///
112
- /// Convenience mixin to export all design tokens at once.
113
- /// Useful for setting up root or component-level defaults.
114
- ///
115
- @mixin export-design-tokens() {
116
- @include export-state-opacity();
117
- @include export-motion-timing();
118
- }