@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,354 @@
1
+ @use "veela-lib" as *;
2
+
3
+ //
4
+ @mixin validation-state($color, $border-opacity: var(--border-opacity-strong), $bg-opacity: 0.04) {
5
+ border-color: oklch(from $color l c h / $border-opacity);
6
+ background-color: oklch(from $color l c h / $bg-opacity);
7
+ }
8
+
9
+ //
10
+ @mixin validation-warning { @include validation-state(var(--color-warning)); }
11
+ @mixin validation-success { @include validation-state(var(--color-success)); }
12
+ @mixin validation-error { @include validation-state(var(--color-error)); }
13
+
14
+ // Dedicated colorization utility classes
15
+ // These classes apply semantic color variants and states to elements
16
+ @layer ux-colors {
17
+
18
+ // =============================================================================
19
+ // INPUT STATE VARIANTS
20
+ // =============================================================================
21
+
22
+ :where(input, textarea, select) {
23
+ // Success state
24
+ &.state-success,
25
+ &.is-success,
26
+ &[data-state="success"] {
27
+ --current: var(--color-success);
28
+ @include validation-success;
29
+ }
30
+
31
+ // Warning state
32
+ &.state-warning,
33
+ &.is-warning,
34
+ &[data-state="warning"] {
35
+ --current: var(--color-warning);
36
+ @include validation-warning;
37
+ }
38
+
39
+ // Error state
40
+ &.state-error,
41
+ &.is-error,
42
+ &.state-invalid,
43
+ &.is-invalid,
44
+ &[data-state="error"],
45
+ &[data-state="invalid"] {
46
+ --current: var(--color-error, var(--color-danger));
47
+ @include validation-error;
48
+ }
49
+
50
+ // Valid state
51
+ &.state-valid,
52
+ &.is-valid,
53
+ &[data-state="valid"] {
54
+ --current: var(--color-success);
55
+ @include validation-success;
56
+ }
57
+ }
58
+
59
+
60
+ // =============================================================================
61
+ // COLOR VARIANT CLASSES
62
+ // =============================================================================
63
+
64
+ .color-primary { --current: var(--color-primary); }
65
+ .color-secondary { --current: var(--color-secondary); }
66
+ .color-accent { --current: var(--color-accent); }
67
+ .color-success { --current: var(--color-success); }
68
+ .color-warning { --current: var(--color-warning); }
69
+ .color-danger { --current: var(--color-danger); }
70
+ .color-info { --current: var(--color-info); }
71
+
72
+ // =============================================================================
73
+ // SURFACE COLORIZATION CLASSES
74
+ // =============================================================================
75
+
76
+ .surface {
77
+ @include solid-colorize("&", ("shade": var(--surface-opacity-default), "tint": 0.0, "scope": "selector"));
78
+ }
79
+
80
+ .surface-subtle {
81
+ @include solid-colorize("&", ("shade": var(--surface-opacity-subtle), "tint": 0.0, "scope": "selector"));
82
+ }
83
+
84
+ .surface-muted {
85
+ @include solid-colorize("&", ("shade": var(--surface-opacity-muted), "tint": 0.0, "scope": "selector"));
86
+ }
87
+
88
+ .surface-emphasis {
89
+ @include solid-colorize("&", ("shade": var(--surface-opacity-emphasis), "tint": 0.0, "scope": "selector"));
90
+ }
91
+
92
+ .surface-strong {
93
+ @include solid-colorize("&", ("shade": var(--surface-opacity-strong), "tint": 0.0, "scope": "selector"));
94
+ }
95
+
96
+ // =============================================================================
97
+ // INTERACTIVE SURFACE CLASSES
98
+ // =============================================================================
99
+
100
+ .surface-interactive {
101
+ @include surface-interactive(var(--surface-opacity-default));
102
+ }
103
+
104
+ .surface-interactive-subtle {
105
+ @include surface-interactive(var(--surface-opacity-subtle));
106
+ }
107
+
108
+ .surface-interactive-emphasis {
109
+ @include surface-interactive(var(--surface-opacity-emphasis));
110
+ }
111
+
112
+
113
+ // =============================================================================
114
+ // TEXT COLOR CLASSES
115
+ // =============================================================================
116
+
117
+ .text-primary {
118
+ @include text-color(var(--text-tint-primary));
119
+ }
120
+
121
+ .text-secondary {
122
+ @include text-color(var(--text-tint-secondary));
123
+ }
124
+
125
+ .text-muted {
126
+ @include text-color(var(--text-tint-muted));
127
+ }
128
+
129
+ .text-disabled {
130
+ @include text-color(var(--text-tint-disabled));
131
+ opacity: 0.6;
132
+ cursor: not-allowed;
133
+ }
134
+
135
+ // =============================================================================
136
+ // VALIDATION STATE CLASSES
137
+ // =============================================================================
138
+
139
+ .state-success {
140
+ --current: var(--color-success);
141
+ @include validation-success;
142
+ }
143
+
144
+ .state-warning {
145
+ --current: var(--color-warning);
146
+ @include validation-warning;
147
+ }
148
+
149
+ .state-error {
150
+ --current: var(--color-error, var(--color-danger));
151
+ @include validation-error;
152
+ }
153
+
154
+ .state-invalid {
155
+ --current: var(--color-error, var(--color-danger));
156
+ @include validation-error;
157
+ }
158
+
159
+ .state-valid {
160
+ --current: var(--color-success);
161
+ @include validation-success;
162
+ }
163
+
164
+ // =============================================================================
165
+ // COMBINED COLOR + SURFACE CLASSES
166
+ // =============================================================================
167
+
168
+ @each $color-name, $color-var in (
169
+ "primary": var(--color-primary),
170
+ "secondary": var(--color-secondary),
171
+ "accent": var(--color-accent),
172
+ "success": var(--color-success),
173
+ "warning": var(--color-warning),
174
+ "danger": var(--color-danger),
175
+ "info": var(--color-info)
176
+ ) {
177
+ .#{$color-name}-surface {
178
+ --current: #{$color-var};
179
+ @include solid-colorize("&", ("shade": var(--surface-opacity-default), "tint": 0.0, "scope": "selector"));
180
+ }
181
+
182
+ .#{$color-name}-surface-interactive {
183
+ --current: #{$color-var};
184
+ @include surface-interactive(var(--surface-opacity-default));
185
+ }
186
+ }
187
+
188
+
189
+
190
+ // =============================================================================
191
+ // BUTTON MODIFIERS & VARIANTS
192
+ // =============================================================================
193
+
194
+ :where(button) {
195
+ @include button-filled();
196
+
197
+ // Palette overrides -------------------------------------------------
198
+ &.btn-primary,
199
+ &[data-variant="primary"] {
200
+ --md-button-bg: var(--md-primary);
201
+ --md-button-on: var(--md-on-primary);
202
+ --md-button-state-color: var(--md-primary);
203
+ --md-button-outline-color: var(--md-primary);
204
+ }
205
+
206
+ &.btn-secondary,
207
+ &[data-variant="secondary"] {
208
+ --md-button-bg: var(--md-secondary);
209
+ --md-button-on: var(--md-on-secondary);
210
+ --md-button-state-color: var(--md-secondary);
211
+ --md-button-outline-color: var(--md-secondary);
212
+ }
213
+
214
+ &.btn-tertiary,
215
+ &.btn-accent,
216
+ &[data-variant="tertiary"] {
217
+ --md-button-bg: var(--md-tertiary);
218
+ --md-button-on: var(--md-on-tertiary);
219
+ --md-button-state-color: var(--md-tertiary);
220
+ --md-button-outline-color: var(--md-tertiary);
221
+ }
222
+
223
+ &.btn-surface,
224
+ &[data-variant="surface"] {
225
+ --md-button-bg: var(--md-surface);
226
+ --md-button-on: var(--md-on-surface);
227
+ --md-button-state-color: var(--md-primary);
228
+ --md-button-outline-color: var(--md-outline);
229
+ }
230
+
231
+ &.btn-success,
232
+ &:is(.save, .submit, .confirm) {
233
+ --md-button-bg: var(--color-success);
234
+ --md-button-on: var(--md-on-surface);
235
+ --md-button-state-color: var(--color-success);
236
+ --md-button-outline-color: var(--color-success);
237
+ }
238
+
239
+ &.btn-danger,
240
+ &:is(.cancel, .delete, .remove) {
241
+ --md-button-bg: var(--color-danger);
242
+ --md-button-on: var(--md-on-surface);
243
+ --md-button-state-color: var(--color-danger);
244
+ --md-button-outline-color: var(--color-danger);
245
+ }
246
+
247
+ &.btn-warning,
248
+ &:is(.warning) {
249
+ --md-button-bg: var(--color-warning);
250
+ --md-button-on: var(--md-on-surface);
251
+ --md-button-state-color: var(--color-warning);
252
+ --md-button-outline-color: var(--color-warning);
253
+ }
254
+
255
+ &.btn-info,
256
+ &:is(.info) {
257
+ --md-button-bg: var(--color-info);
258
+ --md-button-on: var(--md-on-surface);
259
+ --md-button-state-color: var(--color-info);
260
+ --md-button-outline-color: var(--color-info);
261
+ }
262
+
263
+ // Variant mixins ----------------------------------------------------
264
+ &.btn-filled,
265
+ &.filled {
266
+ @include button-filled(primary, false);
267
+ }
268
+
269
+ &.btn-elevated,
270
+ &.elevated {
271
+ @include button-elevated(primary, false);
272
+ }
273
+
274
+ &.btn-tonal,
275
+ &.tonal {
276
+ @include button-tonal(secondary-container, secondary, false);
277
+ }
278
+
279
+ &.btn-tonal.btn-primary,
280
+ &.btn-tonal-primary {
281
+ --md-button-bg: var(--md-primary-container);
282
+ --md-button-on: var(--md-on-primary-container);
283
+ --md-button-state-color: var(--md-primary);
284
+ @include button-tonal(primary-container, primary, false);
285
+ }
286
+
287
+ &.btn-tonal.btn-secondary,
288
+ &.btn-tonal-secondary {
289
+ --md-button-bg: var(--md-secondary-container);
290
+ --md-button-on: var(--md-on-secondary-container);
291
+ --md-button-state-color: var(--md-secondary);
292
+ @include button-tonal(secondary-container, secondary, false);
293
+ }
294
+
295
+ &.btn-tonal.btn-tertiary,
296
+ &.btn-tonal-tertiary {
297
+ --md-button-bg: var(--md-tertiary-container);
298
+ --md-button-on: var(--md-on-tertiary-container);
299
+ --md-button-state-color: var(--md-tertiary);
300
+ @include button-tonal(tertiary-container, tertiary, false);
301
+ }
302
+
303
+ &.btn-outlined,
304
+ &.outlined {
305
+ --md-button-on: var(--md-button-on, var(--md-primary));
306
+ --md-button-outline-color: var(--md-button-outline-color, var(--md-primary));
307
+ --md-button-state-color: var(--md-button-state-color, var(--md-primary));
308
+ @include button-outlined(primary, false);
309
+ }
310
+
311
+ &.btn-outlined.btn-secondary {
312
+ --md-button-on: var(--md-secondary);
313
+ --md-button-outline-color: var(--md-secondary);
314
+ --md-button-state-color: var(--md-secondary);
315
+ @include button-outlined(primary, false);
316
+ }
317
+
318
+ &.btn-outlined.btn-tertiary,
319
+ &.btn-outlined.btn-accent {
320
+ --md-button-on: var(--md-tertiary);
321
+ --md-button-outline-color: var(--md-tertiary);
322
+ --md-button-state-color: var(--md-tertiary);
323
+ @include button-outlined(primary, false);
324
+ }
325
+
326
+ &.btn-text,
327
+ &.btn-link,
328
+ &.btn-ghost,
329
+ &.text {
330
+ --md-button-on: var(--md-button-on, var(--md-primary));
331
+ --md-button-state-color: var(--md-button-state-color, var(--md-primary));
332
+ @include button-text(primary, false);
333
+ }
334
+
335
+ &.btn-text.btn-secondary {
336
+ --md-button-on: var(--md-secondary);
337
+ --md-button-state-color: var(--md-secondary);
338
+ @include button-text(primary, false);
339
+ }
340
+
341
+ &.btn-text.btn-tertiary,
342
+ &.btn-text.btn-accent {
343
+ --md-button-on: var(--md-tertiary);
344
+ --md-button-state-color: var(--md-tertiary);
345
+ @include button-text(primary, false);
346
+ }
347
+
348
+ &.btn-icon,
349
+ &.icon-only {
350
+ @include button-icon();
351
+ }
352
+ }
353
+
354
+ }
@@ -0,0 +1,120 @@
1
+ @use "veela-lib" as md3;
2
+ @use "./function-utils" as func;
3
+
4
+ //
5
+ @function if-cond($c, $a, $b) { @return #{"if(\
6
+ #{$c}: #{$a};\
7
+ else: #{$b};\
8
+ )"}; }
9
+
10
+ //
11
+ @include func.make-func("@function --c2h-triple-mix(\
12
+ --c2h-a <color>, \
13
+ --c2h-b <color>, \
14
+ --c2h-c <color>, \
15
+ --c2h-factor <number> \
16
+ )") {
17
+ --c2h-t : clamp(0, var(--c2h-factor, 0), 1);
18
+ --c2h-ct: clamp(0, round(nearest, var(--c2h-t), 1), 1);
19
+ --c2h-dz: clamp(0, calc(var(--c2h-t) * 2 - 1), 1);
20
+ --c2h-lz: clamp(0, calc(var(--c2h-t) * 2 - 0), 1);
21
+
22
+ /* */
23
+ --c2h-lc: color-mix(in oklch, var(--c2h-a) calc((1 - var(--c2h-u)) * 100%), var(--c2h-b) calc(var(--c2h-u) * 100%));
24
+ --c2h-dc: color-mix(in oklch, var(--c2h-b) calc((1 - var(--c2h-u)) * 100%), var(--c2h-c) calc(var(--c2h-u) * 100%));
25
+
26
+ /* */
27
+ --c2h-u: calc(
28
+ var(--c2h-ct) * var(--c2h-dz) +
29
+ (1 - var(--c2h-ct)) * var(--c2h-lz)
30
+ );
31
+ result: color-mix(in oklch,
32
+ var(--c2h-lc) calc((1 - var(--c2h-ct)) * 100%),
33
+ var(--c2h-dc) calc(var(--c2h-ct) * 100%)
34
+ );
35
+ }
36
+
37
+ //
38
+ @include func.make-func("@function --c2h-re-shading(\
39
+ --c2h-color <color>, \
40
+ --c2h-factor <number>: 0, \
41
+ --c2h-theme-type <number>: 2 \
42
+ )") {
43
+ /* chromatic neutralize (unused) ir chromatic, or make very chromatic if too gray */
44
+ --c2h-chromatic-inverse-ls: oklch(from var(--c2h-color) l calc(1 - c) h);
45
+ --c2h-chromatic-inverse-ds: oklch(from var(--c2h-color) l calc(1 - c) h);
46
+
47
+ /* from light source colors (l > 0.5, not very chromatic) */
48
+ --c2h-chromatic-extract-ls: oklch(from var(--c2h-color) l calc(c * 0.5) h); /* most chromatic */
49
+ --c2h-chromatic-extract-ds: oklch(from var(--c2h-color) l calc(c * 0.35) h); /* most chromatic */
50
+
51
+ /* from dark source colors (l < 0.5, not very chromatic) */
52
+ --c2h-lightness-extract-ls: oklch(from var(--c2h-color) 0.99 calc(c * 0.2) h); /* most light */
53
+ --c2h-lightness-extract-ds: oklch(from var(--c2h-color) 0.08 calc(c * 0.1) h); /* most light */
54
+
55
+ /* */
56
+ --c2h-lightness-inverse-ls: oklch(from var(--c2h-color) 0.01 calc(c * 0.2) h); /* most dark */
57
+ --c2h-lightness-inverse-ds: oklch(from var(--c2h-color) 0.99 calc(c * 0.1) h); /* most dark (almost black) */
58
+
59
+ /* */
60
+ --c2h-lightness-extract: sass(if(
61
+ style(--c2h-theme-type: 1): var(--c2h-lightness-extract-ds);
62
+ style(--c2h-theme-type: 0): var(--c2h-lightness-extract-ls);
63
+ else: light-dark(var(--c2h-lightness-extract-ls), var(--c2h-lightness-extract-ds)));
64
+ --c2h-chromatic-extract: sass(if(
65
+ style(--c2h-theme-type: 1): var(--c2h-chromatic-extract-ds);
66
+ style(--c2h-theme-type: 0): var(--c2h-chromatic-extract-ls);
67
+ else: light-dark(var(--c2h-chromatic-extract-ls), var(--c2h-chromatic-extract-ds)));
68
+ --c2h-lightness-inverse: sass(if(
69
+ style(--c2h-theme-type: 1): var(--c2h-lightness-extract-ds);
70
+ style(--c2h-theme-type: 0): var(--c2h-lightness-extract-ls);
71
+ else: light-dark(var(--c2h-lightness-inverse-ls), var(--c2h-lightness-inverse-ds)));
72
+ --c2h-chromatic-inverse: sass(if(
73
+ style(--c2h-theme-type: 1): var(--c2h-chromatic-inverse-ds);
74
+ style(--c2h-theme-type: 0): var(--c2h-chromatic-inverse-ls);
75
+ else: light-dark(var(--c2h-chromatic-inverse-ls), var(--c2h-chromatic-inverse-ds)));
76
+
77
+ /* */
78
+ result: --c2h-triple-mix(
79
+ var(--c2h-lightness-extract),
80
+ var(--c2h-chromatic-extract),
81
+ var(--c2h-lightness-inverse),
82
+ var(--c2h-factor, 0)
83
+ );
84
+ }
85
+
86
+
87
+
88
+ /* */
89
+ @include func.make-func("@function --c2-surface(\
90
+ --c2-shift <number>: var(--_color-shade, 0), \
91
+ --c2-color <color>: var(--current, var(--primary, currentColor)), \
92
+ --c2-theme <number>: 2 \
93
+ )")
94
+ { result: --c2h-re-shading(var(--c2-color, var(--primary, currentColor)), clamp(0, calc(0.02 + var(--c2-shift, 0) * 0.8), 1), var(--c2-theme, 2)); };
95
+
96
+ /* */
97
+ @include func.make-func("@function --c2-on-surface(\
98
+ --c2-shift <number>: var(--_color-tint, 0), \
99
+ --c2-color <color>: var(--current, var(--primary, currentColor)), \
100
+ --c2-theme <number>: 2 \
101
+ )")
102
+ { result: --c2h-re-shading(var(--c2-color, var(--primary, currentColor)), clamp(0, calc(0.96 - var(--c2-shift, 0) * 0.8), 1), var(--c2-theme, 2)); };
103
+
104
+
105
+
106
+ /* */
107
+ @include func.make-func("@function --c2-contrast(\
108
+ --c2-shift <number>: var(--_color-shade, 0), \
109
+ --c2-color <color>: var(--current, var(--primary, currentColor)), \
110
+ --c2-theme <number>: 2 \
111
+ )")
112
+ { result: --c2h-re-shading(var(--c2-color, var(--primary, currentColor)), clamp(0, calc(0.01 + var(--c2-shift, 0) * 0.6), 1), var(--c2-theme, 2)); };
113
+
114
+ /* */
115
+ @include func.make-func("@function --c2-on-contrast(\
116
+ --c2-shift <number>: var(--_color-tint, 0), \
117
+ --c2-color <color>: var(--current, var(--primary, currentColor)), \
118
+ --c2-theme <number>: 2 \
119
+ )")
120
+ { result: --c2h-re-shading(var(--c2-color, var(--primary, currentColor)), clamp(0, calc(1 - var(--c2-shift, 0) * 0.6), 1), var(--c2-theme, 2)); };
@@ -0,0 +1,171 @@
1
+ /*
2
+ * Filename: _variables.scss
3
+ * FullPath: modules/projects/veela.css/src/scss/advanced/tokens/_variables.scss
4
+ * Change date and time: 12.30.00_06.08.2026
5
+ * Reason for changes: Document canonical SoT for color tokens.
6
+ */
7
+ /*
8
+ * NOTE: Canonical color-token source of truth is `core/misc/_tokens.scss`.
9
+ * This file keeps the advanced MD3/C2 mixin DEFINITIONS (`define-palette-tokens`,
10
+ * `define-surface-tokens`, `make-md-theme`, `material-color-c2-adapter-remap`)
11
+ * because they depend on `veela-lib` and the `--c2-*` color functions in
12
+ * `_material-color.scss`. Folding these definitions into `core/misc/_tokens.scss`
13
+ * would create a circular `@use` on `veela-lib`. Emission is invoked from here.
14
+ */
15
+
16
+ @use "veela-lib" as md3;
17
+
18
+ // Register core typed properties
19
+ @include md3.declare-props();
20
+
21
+ // =============================================================================
22
+ // MD3 THEME GENERATION (Simplified)
23
+ // Reduced property chains for better performance
24
+ // =============================================================================
25
+
26
+ // Core palette tokens - single source of truth
27
+ @mixin define-palette-tokens($suffix: "", $theme-type: 2) {
28
+ // Primary palette (simplified chain)
29
+ --md-c2-primary#{$suffix}: var(--current, #469);
30
+ --md-c2-secondary#{$suffix}: var(--secondary, var(--md-c2-primary#{$suffix}));
31
+ --md-c2-tertiary#{$suffix}: var(--tertiary, var(--md-c2-secondary#{$suffix}));
32
+ --md-c2-error#{$suffix}: var(--error, oklch(0.62 0.17 23));
33
+ --md-c2-neutral#{$suffix}: --c2-surface(0.2, var(--md-c2-primary#{$suffix}), #{$theme-type});
34
+
35
+ // Shift values (computed once)
36
+ --md-c2-surface-shift#{$suffix}: clamp(0, calc(var(--background-tone-shift, 0) + 0.16), 1);
37
+ --md-c2-on-surface-shift#{$suffix}: clamp(0, calc(var(--color-tone-shift, 0) + 0.06), 1);
38
+ --md-c2-surface-variant-shift#{$suffix}: clamp(0, calc(var(--background-tone-shift, 0) + 0.34), 1);
39
+ --md-c2-outline-shift#{$suffix}: clamp(0, calc(var(--color-tone-shift, 0) + 0.28), 1);
40
+ --md-c2-contrast-shift#{$suffix}: clamp(0, calc(0.88 - var(--background-tone-shift, 0) * 0.3), 1);
41
+ --md-c2-inverse-primary-shift#{$suffix}: clamp(0, calc(0.7 - var(--background-tone-shift, 0) * 0.2), 1);
42
+ }
43
+
44
+ // Surface tokens derived from palette
45
+ @mixin define-surface-tokens($suffix: "", $theme-type: 2) {
46
+ // Primary surfaces
47
+ --md-sys-color-primary#{$suffix}: var(--md-c2-primary#{$suffix});
48
+ --md-sys-color-on-primary#{$suffix}: --c2-on-contrast(0.02, var(--md-c2-primary#{$suffix}), #{$theme-type});
49
+ --md-sys-color-primary-container#{$suffix}: --c2-surface(0.74, var(--md-c2-primary#{$suffix}), #{$theme-type});
50
+ --md-sys-color-on-primary-container#{$suffix}: --c2-on-surface(0.26, var(--md-c2-primary#{$suffix}), #{$theme-type});
51
+
52
+ // Secondary surfaces
53
+ --md-sys-color-secondary#{$suffix}: var(--md-c2-secondary#{$suffix});
54
+ --md-sys-color-on-secondary#{$suffix}: --c2-on-contrast(0.02, var(--md-c2-secondary#{$suffix}), #{$theme-type});
55
+ --md-sys-color-secondary-container#{$suffix}: --c2-surface(0.68, var(--md-c2-secondary#{$suffix}), #{$theme-type});
56
+ --md-sys-color-on-secondary-container#{$suffix}: --c2-on-surface(0.24, var(--md-c2-secondary#{$suffix}), #{$theme-type});
57
+
58
+ // Tertiary surfaces
59
+ --md-sys-color-tertiary#{$suffix}: var(--md-c2-tertiary#{$suffix});
60
+ --md-sys-color-on-tertiary#{$suffix}: --c2-on-contrast(0.02, var(--md-c2-tertiary#{$suffix}), #{$theme-type});
61
+ --md-sys-color-tertiary-container#{$suffix}: --c2-surface(0.64, var(--md-c2-tertiary#{$suffix}), #{$theme-type});
62
+ --md-sys-color-on-tertiary-container#{$suffix}: --c2-on-surface(0.22, var(--md-c2-tertiary#{$suffix}), #{$theme-type});
63
+
64
+ // Error surfaces
65
+ --md-sys-color-error#{$suffix}: var(--md-c2-error#{$suffix});
66
+ --md-sys-color-on-error#{$suffix}: --c2-on-contrast(0.02, var(--md-c2-error#{$suffix}), #{$theme-type});
67
+ --md-sys-color-error-container#{$suffix}: --c2-surface(0.72, var(--md-c2-error#{$suffix}), #{$theme-type});
68
+ --md-sys-color-on-error-container#{$suffix}: --c2-on-surface(0.24, var(--md-c2-error#{$suffix}), #{$theme-type});
69
+
70
+ // Neutral surfaces
71
+ --md-sys-color-surface#{$suffix}: --c2-surface(var(--md-c2-surface-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type});
72
+ --md-sys-color-on-surface#{$suffix}: --c2-on-surface(var(--md-c2-on-surface-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type});
73
+ --md-sys-color-surface-variant#{$suffix}: --c2-surface(var(--md-c2-surface-variant-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type});
74
+ --md-sys-color-on-surface-variant#{$suffix}: --c2-on-surface(clamp(0, calc(var(--md-c2-on-surface-shift#{$suffix}) + 0.14), 1), var(--md-c2-neutral#{$suffix}), #{$theme-type});
75
+
76
+ // Outline
77
+ --md-sys-color-outline#{$suffix}: color-mix(in oklch, --c2-on-surface(var(--md-c2-outline-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type}) 58%, transparent);
78
+ --md-sys-color-outline-variant#{$suffix}: color-mix(
79
+ in oklch,
80
+ --c2-on-surface(clamp(0, calc(var(--md-c2-outline-shift#{$suffix}) + 0.1), 1), var(--md-c2-neutral#{$suffix}), #{$theme-type}) 34%,
81
+ --c2-surface(var(--md-c2-surface-variant-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type}) 66%
82
+ );
83
+
84
+ // Background
85
+ --md-sys-color-background#{$suffix}: --c2-surface(var(--background-tone-shift, 0), var(--md-c2-neutral#{$suffix}), #{$theme-type});
86
+ --md-sys-color-on-background#{$suffix}: --c2-on-surface(var(--color-tone-shift, 0), var(--md-c2-neutral#{$suffix}), #{$theme-type});
87
+
88
+ // Inverse
89
+ --md-sys-color-inverse-surface#{$suffix}: --c2-contrast(var(--md-c2-contrast-shift#{$suffix}), var(--md-c2-neutral#{$suffix}), #{$theme-type});
90
+ --md-sys-color-inverse-on-surface#{$suffix}: --c2-on-contrast(clamp(0, calc(var(--md-c2-on-surface-shift#{$suffix}) + 0.06), 1), var(--md-c2-neutral#{$suffix}), #{$theme-type});
91
+ --md-sys-color-inverse-primary#{$suffix}: --c2-contrast(var(--md-c2-inverse-primary-shift#{$suffix}), var(--md-c2-primary#{$suffix}), #{$theme-type});
92
+
93
+ // Misc
94
+ --md-sys-color-surface-tint#{$suffix}: var(--md-c2-primary#{$suffix});
95
+ --md-sys-color-shadow#{$suffix}: color-mix(in oklch, var(--md-c2-neutral#{$suffix}) 24%, transparent);
96
+ --md-sys-color-scrim#{$suffix}: color-mix(in oklch, var(--md-c2-neutral#{$suffix}) 70%, transparent);
97
+ }
98
+
99
+ // Combined theme mixin
100
+ @mixin make-md-theme($suffix: "", $theme-type: 2) {
101
+ @include define-palette-tokens($suffix, $theme-type);
102
+ @include define-surface-tokens($suffix, $theme-type);
103
+ }
104
+
105
+ // Adapter for MD3 color functions
106
+ @mixin material-color-c2-adapter-remap($selector: ":where(:root, :host, :scope, body, div, section)") {
107
+ @at-root {
108
+ @layer md3.c2-adapter {
109
+ #{$selector} {
110
+ @include make-md-theme("", 2);
111
+ @include make-md-theme("-dark", 1);
112
+ @include make-md-theme("-light", 0);
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ // =============================================================================
119
+ // RUNTIME LAYER
120
+ // =============================================================================
121
+
122
+ @layer md3.runtime {
123
+ // Root-level palette defaults (simplified)
124
+ :where(:root, :scope) {
125
+ // Core palette (single source - no fallback chains)
126
+ --primary: #469;
127
+ --secondary: oklch(from var(--current, #469) l calc(c * 0.88) calc(h + 120));
128
+ --tertiary: oklch(from var(--current, #469) l calc(c * 0.84) calc(h + 240));
129
+ --accent: var(--tertiary);
130
+ --current: var(--primary);
131
+
132
+ // Color scheme handling
133
+ @media(prefers-color-scheme: dark) { color-scheme: dark; }
134
+ @media(prefers-color-scheme: light) { color-scheme: light; }
135
+
136
+ & { color-scheme: light; & * { color-scheme: light; } }
137
+ &:is([data-scheme="dark"], [data-theme="dark"]) { color-scheme: dark only; & * { color-scheme: dark; } }
138
+ &:is([data-scheme="light"], [data-theme="light"]) { color-scheme: light only; & * { color-scheme: light; } }
139
+ &:is([data-scheme="system"], [data-theme="system"], [data-scheme="auto"], [data-theme="auto"]) {
140
+ color-scheme: light dark;
141
+ }
142
+ }
143
+
144
+ // Color modifiers reset
145
+ :where(:root, :host, :scope) :where(*) {
146
+ --color-shade: 0;
147
+ --color-tint: 0;
148
+ --color-opacity: 0;
149
+ --color-enable-blur: 0;
150
+ --_color-shade: var(--color-shade, 0);
151
+ --_color-tint: var(--color-tint, 0);
152
+ }
153
+
154
+ // Host defaults
155
+ :host {
156
+ --current: var(--primary, transparent);
157
+ color-scheme: inherit;
158
+ }
159
+
160
+ // Export all design tokens
161
+ :where(:root, :host, :scope) {
162
+ @include material-color-c2-adapter-remap();
163
+ @include md3.md3-export-scale-vars();
164
+ @include md3.md3-export-density-vars();
165
+ @include md3.md3-export-layout-vars();
166
+ @include md3.md3-export-motion-vars();
167
+ @include md3.md3-export-typography-vars();
168
+ @include md3.md3-export-elevation-vars();
169
+ @include md3.md3-export-state-vars();
170
+ }
171
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ @use "./keyframes" as *;
2
+ @use "./wavy-runtime" as *;
3
+ @use "./shapes" as *;