@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,600 @@
1
+ @use "sass:list";
2
+ @use "sass:map";
3
+ @use "sass:math";
4
+ @use "sass:meta";
5
+ @use "sass:string";
6
+
7
+ @use "../basic/position" as position;
8
+
9
+ //
10
+ @use "utils" as _;
11
+
12
+ //
13
+ $def-ff: "InterVariable", "Inter", "Open Sans", "Source Sans 3", "Gill Sans Nova", Ubuntu, "DejaVu Sans", Candara, Segoe, "Segoe UI", Optima, "Source Sans Pro", sans-serif;
14
+
15
+ // Type scale
16
+ $md3-type-scale: (
17
+ "display-large": (
18
+ size: clamp(3.5rem, 4cqi + 3rem, 5rem),
19
+ line-height: 1.12,
20
+ weight: 400,
21
+ tracking: -0.025em,
22
+ ),
23
+ "display-medium": (
24
+ size: clamp(2.8rem, 3cqi + 2.4rem, 4rem),
25
+ line-height: 1.16,
26
+ weight: 400,
27
+ tracking: -0.02em,
28
+ ),
29
+ "display-small": (
30
+ size: clamp(2.25rem, 2cqi + 2rem, 3rem),
31
+ line-height: 1.22,
32
+ weight: 400,
33
+ tracking: -0.01em,
34
+ ),
35
+ "headline-large": (
36
+ size: clamp(2rem, 1.5cqi + 1.8rem, 2.5rem),
37
+ line-height: 1.2,
38
+ weight: 400,
39
+ tracking: 0,
40
+ ),
41
+ "headline-medium": (
42
+ size: clamp(1.75rem, 1.2cqi + 1.6rem, 2.25rem),
43
+ line-height: 1.24,
44
+ weight: 400,
45
+ tracking: 0,
46
+ ),
47
+ "headline-small": (
48
+ size: clamp(1.5rem, 1cqi + 1.4rem, 1.75rem),
49
+ line-height: 1.28,
50
+ weight: 400,
51
+ tracking: 0,
52
+ ),
53
+ "title-large": (
54
+ size: clamp(1.375rem, 0.8cqi + 1.25rem, 1.6rem),
55
+ line-height: 1.3,
56
+ weight: 400,
57
+ tracking: 0,
58
+ ),
59
+ "title-medium": (
60
+ size: clamp(1rem, 0.6cqi + 0.95rem, 1.25rem),
61
+ line-height: 1.35,
62
+ weight: 500,
63
+ tracking: 0.015em,
64
+ ),
65
+ "title-small": (
66
+ size: clamp(0.875rem, 0.5cqi + 0.85rem, 1rem),
67
+ line-height: 1.43,
68
+ weight: 500,
69
+ tracking: 0.01em,
70
+ ),
71
+ "label-large": (
72
+ size: clamp(0.875rem, 0.4cqi + 0.85rem, 0.95rem),
73
+ line-height: 1.43,
74
+ weight: 500,
75
+ tracking: 0.01em,
76
+ ),
77
+ "label-medium": (
78
+ size: clamp(0.75rem, 0.4cqi + 0.7rem, 0.85rem),
79
+ line-height: 1.33,
80
+ weight: 500,
81
+ tracking: 0.04em,
82
+ ),
83
+ "label-small": (
84
+ size: clamp(0.6875rem, 0.4cqi + 0.65rem, 0.75rem),
85
+ line-height: 1.45,
86
+ weight: 500,
87
+ tracking: 0.05em,
88
+ ),
89
+ "body-large": (
90
+ size: clamp(1rem, 0.5cqi + 0.95rem, 1.125rem),
91
+ line-height: 1.5,
92
+ weight: 400,
93
+ tracking: 0.015em,
94
+ ),
95
+ "body-medium": (
96
+ size: clamp(0.875rem, 0.4cqi + 0.85rem, 1rem),
97
+ line-height: 1.45,
98
+ weight: 400,
99
+ tracking: 0.01em,
100
+ ),
101
+ "body-small": (
102
+ size: clamp(0.75rem, 0.35cqi + 0.72rem, 0.875rem),
103
+ line-height: 1.4,
104
+ weight: 400,
105
+ tracking: 0.01em,
106
+ ),
107
+ );
108
+
109
+ //
110
+ // Type function
111
+ @function md3-type($token, $prop: null) {
112
+ $definition: _.md3-fetch($md3-type-scale, $token, "type token");
113
+
114
+ @if $prop == null {
115
+ @return $definition;
116
+ }
117
+
118
+ @if not map.has-key($definition, $prop) {
119
+ @error "Unknown typography property `#{$prop}` for token `#{$token}`. Available: #{map.keys($definition)}";
120
+ }
121
+
122
+ @return map.get($definition, $prop);
123
+ }
124
+
125
+ //
126
+ // Typography alias maps
127
+ $md3-font-size-aliases: (
128
+ "xs": (
129
+ token: "label-small",
130
+ value: clamp(calc(0.7rem * var(--font-scale)), 0.3cqi + 0.6rem, calc(0.75rem * var(--font-scale)))
131
+ ),
132
+ "sm": (
133
+ token: "body-small",
134
+ value: clamp(calc(0.75rem * var(--font-scale)), 0.4cqi + 0.65rem, calc(0.85rem * var(--font-scale)))
135
+ ),
136
+ "body-sm": (
137
+ token: "body-small",
138
+ value: md3-type("body-small", size)
139
+ ),
140
+ "base": (
141
+ token: "body-medium",
142
+ value: clamp(calc(0.8rem * var(--font-scale)), 0.5cqi + 0.7rem, calc(0.95rem * var(--font-scale)))
143
+ ),
144
+ "body-md": (
145
+ token: "body-medium",
146
+ value: md3-type("body-medium", size)
147
+ ),
148
+ "md": (
149
+ token: "body-large",
150
+ value: clamp(0.92rem, 0.6cqi + 0.82rem, 1.05rem)
151
+ ),
152
+ "body-lg": (
153
+ token: "body-large",
154
+ value: md3-type("body-large", size)
155
+ ),
156
+ "lg": (
157
+ token: "title-medium",
158
+ value: clamp(calc(0.9rem * var(--font-scale)), 0.6cqi + 0.8rem, calc(1.1rem * var(--font-scale)))
159
+ ),
160
+ "xl": (
161
+ token: "title-large",
162
+ value: clamp(calc(1rem * var(--font-scale)), 0.8cqi + 0.9rem, calc(1.3rem * var(--font-scale)))
163
+ ),
164
+ "2xl": (
165
+ token: "headline-small",
166
+ value: clamp(1.35rem, 1.3cqi + 1.1rem, 1.75rem)
167
+ ),
168
+ "3xl": (
169
+ token: "headline-medium",
170
+ value: md3-type("headline-medium", size)
171
+ ),
172
+ "4xl": (
173
+ token: "display-small",
174
+ value: md3-type("display-small", size)
175
+ ),
176
+ "5xl": (
177
+ token: "display-medium",
178
+ value: md3-type("display-medium", size)
179
+ ),
180
+ "6xl": (
181
+ token: "display-large",
182
+ value: md3-type("display-large", size)
183
+ ),
184
+ );
185
+
186
+ $md3-font-weight-aliases: (
187
+ "normal": (token: "body-large"),
188
+ "medium": (token: "title-medium"),
189
+ "semibold": 600,
190
+ "bold": 700,
191
+ "extrabold": 800,
192
+ );
193
+
194
+ $md3-font-family-stacks: (
195
+ "base": ("InterVariable", "Inter", "Open Sans", "Source Sans 3", "Gill Sans Nova", Ubuntu, "DejaVu Sans", Candara, Segoe, "Segoe UI", Optima, "Source Sans Pro", sans-serif),
196
+ "mono": ("Fragment Mono", "Fira Code", "Source Code Pro", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace),
197
+ );
198
+
199
+ $md3-line-height-scale: (
200
+ "tight": 1.2,
201
+ "normal": 1.5,
202
+ "relaxed": 1.8,
203
+ );
204
+
205
+ //
206
+ // Internal helpers
207
+ @function md3-map-merge($base, $override) {
208
+ @if $override == null {
209
+ @return $base;
210
+ }
211
+
212
+ @if meta.type-of($override) != "map" {
213
+ @error "Expected map override, received #{meta.type-of($override)}.";
214
+ }
215
+
216
+ @return map.merge($base, $override);
217
+ }
218
+
219
+ @function md3-resolve-type-value($definition, $prop) {
220
+ @if $definition == null {
221
+ @return null;
222
+ }
223
+
224
+ @if meta.type-of($definition) == "string" and map.has-key($md3-type-scale, $definition) {
225
+ @return md3-type($definition, $prop);
226
+ }
227
+
228
+ @if meta.type-of($definition) == "map" {
229
+ @if map.has-key($definition, $prop) {
230
+ @return map.get($definition, $prop);
231
+ }
232
+
233
+ @if map.has-key($definition, "token") {
234
+ @return md3-type(map.get($definition, "token"), $prop);
235
+ }
236
+
237
+ @if map.has-key($definition, "value") {
238
+ @return map.get($definition, "value");
239
+ }
240
+ }
241
+
242
+ @return $definition;
243
+ }
244
+
245
+ @function md3-font-size-token($alias, $aliases: $md3-font-size-aliases) {
246
+ @if map.has-key($aliases, $alias) {
247
+ $definition: map.get($aliases, $alias);
248
+
249
+ @if meta.type-of($definition) == "map" and map.has-key($definition, "token") {
250
+ @return map.get($definition, "token");
251
+ }
252
+
253
+ @if meta.type-of($definition) == "string" and map.has-key($md3-type-scale, $definition) {
254
+ @return $definition;
255
+ }
256
+ }
257
+
258
+ @if map.has-key($md3-type-scale, $alias) {
259
+ @return $alias;
260
+ }
261
+
262
+ @return null;
263
+ }
264
+
265
+ @function md3-font-size($alias, $aliases: $md3-font-size-aliases) {
266
+ @if map.has-key($aliases, $alias) {
267
+ @return md3-resolve-type-value(map.get($aliases, $alias), size);
268
+ }
269
+
270
+ @if map.has-key($md3-type-scale, $alias) {
271
+ @return md3-type($alias, size);
272
+ }
273
+
274
+ @error "Unknown font size alias `#{$alias}`. Available: #{map.keys($aliases)}";
275
+ }
276
+
277
+ @function md3-font-size-var($alias, $aliases: $md3-font-size-aliases) {
278
+ $token: md3-font-size-token($alias, $aliases);
279
+ $source: sass(if(sass(map.has-key($aliases, $alias)): map.get($aliases, $alias); else: $token));
280
+ $fallback: md3-resolve-type-value($source, size);
281
+
282
+ @if $token != null {
283
+ @return var(--font-size-#{$alias}, var(--text-#{$alias}, #{$fallback}));
284
+ }
285
+
286
+ @return var(--font-size-#{$alias}, var(--text-#{$alias}, #{$fallback}));
287
+ }
288
+
289
+ @function md3-font-weight-value($input) {
290
+ @if $input == null {
291
+ @return md3-font-weight-value(map.get($md3-font-weight-aliases, "normal"));
292
+ }
293
+
294
+ @if meta.type-of($input) == "number" {
295
+ @return $input;
296
+ }
297
+
298
+ @if meta.type-of($input) == "string" and map.has-key($md3-font-weight-aliases, $input) {
299
+ @return md3-font-weight-value(map.get($md3-font-weight-aliases, $input));
300
+ }
301
+
302
+ @if meta.type-of($input) == "string" and map.has-key($md3-type-scale, $input) {
303
+ @return md3-type($input, weight);
304
+ }
305
+
306
+ @if meta.type-of($input) == "map" {
307
+ @if map.has-key($input, "weight") {
308
+ @return map.get($input, "weight");
309
+ }
310
+
311
+ @if map.has-key($input, "token") {
312
+ @return md3-type(map.get($input, "token"), weight);
313
+ }
314
+
315
+ @if map.has-key($input, "value") {
316
+ @return map.get($input, "value");
317
+ }
318
+ }
319
+
320
+ @return $input;
321
+ }
322
+
323
+ @function md3-font-family-value($input) {
324
+ @if $input == null {
325
+ @return map.get($md3-font-family-stacks, "base");
326
+ }
327
+
328
+ @if $input == inherit or $input == "inherit" {
329
+ @return inherit;
330
+ }
331
+
332
+ @if meta.type-of($input) == "string" and map.has-key($md3-font-family-stacks, $input) {
333
+ @return map.get($md3-font-family-stacks, $input);
334
+ }
335
+
336
+ @if meta.type-of($input) == "map" and map.has-key($input, "value") {
337
+ @return map.get($input, "value");
338
+ }
339
+
340
+ @return $input;
341
+ }
342
+
343
+
344
+
345
+
346
+ //
347
+ $font-family-base: md3-font-family-value("base");
348
+ $font-family-mono: md3-font-family-value("mono");
349
+ $font-size-xs: md3-font-size("xs");
350
+ $font-size-sm: md3-font-size("body-md");
351
+ $font-size-base: md3-font-size("body-lg");
352
+ $font-size-lg: md3-font-size("lg");
353
+ $font-size-xl: md3-font-size("xl");
354
+ $font-size-2xl: md3-font-size("2xl");
355
+ $font-size-3xl: md3-font-size("3xl");
356
+ $font-size-4xl: md3-font-size("4xl");
357
+ $font-size-5xl: md3-font-size("5xl");
358
+ $font-size-6xl: md3-font-size("6xl");
359
+
360
+ //
361
+ $font-weight-normal: md3-font-weight-value("normal");
362
+ $font-weight-medium: md3-font-weight-value("medium");
363
+ $font-weight-semibold: md3-font-weight-value("semibold");
364
+ $font-weight-bold: md3-font-weight-value("bold");
365
+ $font-weight-extrabold: md3-font-weight-value("extrabold");
366
+
367
+
368
+
369
+ //
370
+ // Typography configuration helpers
371
+ @function md3-typography-config($token, $overrides: ()) {
372
+ $configuration: md3-type($token);
373
+ $normalized-overrides: sass(if(sass(meta.type-of($overrides) == "map"): $overrides; else: ()));
374
+
375
+ @if $normalized-overrides != () {
376
+ $configuration: map.merge($configuration, $normalized-overrides);
377
+ }
378
+
379
+ @return $configuration;
380
+ }
381
+
382
+ @mixin md3-apply-typography($configuration, $ensure-family: false, $family-fallback: "base") {
383
+ $size: map.get($configuration, size);
384
+ $line-height: map.get($configuration, line-height);
385
+ $weight: map.get($configuration, weight);
386
+ $tracking: map.get($configuration, tracking);
387
+ $family: map.get($configuration, family);
388
+
389
+ @if $size != null { font-size: $size; }
390
+ @if $line-height != null { line-height: $line-height; }
391
+ @if $weight != null { font-weight: $weight; }
392
+ @if $tracking != null { letter-spacing: $tracking; }
393
+
394
+ @if $weight != null {
395
+ font-optical-sizing: auto;
396
+ font-variation-settings: "wght" $weight;
397
+ }
398
+
399
+ $should-apply-family: $family != null or $ensure-family;
400
+
401
+ @if $should-apply-family {
402
+ $resolved-family: sass(if(sass($family != null): md3-font-family-value($family); else: md3-font-family-value($family-fallback)));
403
+
404
+ @include font-family($resolved-family);
405
+ }
406
+ }
407
+
408
+ //
409
+ // Typography mixin
410
+ @mixin md3-typography($token, $overrides: ()) {
411
+ $configuration: md3-typography-config($token, $overrides);
412
+ @include md3-apply-typography($configuration);
413
+ }
414
+
415
+ //
416
+ // Export typography vars mixin
417
+ @mixin md3-export-typography-vars($overrides: ()) {
418
+ $size-overrides: map.get($overrides, "sizes");
419
+ $weight-overrides: map.get($overrides, "weights");
420
+ $family-overrides: map.get($overrides, "families");
421
+ $leading-overrides: map.get($overrides, "line-heights");
422
+ $extra-overrides: map.get($overrides, "extra");
423
+
424
+ $sizes: md3-map-merge($md3-font-size-aliases, $size-overrides);
425
+ $weights: md3-map-merge($md3-font-weight-aliases, $weight-overrides);
426
+ $families: md3-map-merge($md3-font-family-stacks, $family-overrides);
427
+ $leadings: md3-map-merge($md3-line-height-scale, $leading-overrides);
428
+
429
+ @each $alias, $definition in $sizes {
430
+ $value: md3-resolve-type-value($definition, size);
431
+ --font-size-#{$alias}: #{$value};
432
+ }
433
+
434
+ --font-size: var(--font-size-base);
435
+
436
+ @each $alias in map.keys($sizes) {
437
+ --font-#{$alias}: var(--font-size-#{$alias});
438
+ }
439
+
440
+ @each $alias, $definition in $weights {
441
+ $value: md3-font-weight-value($definition);
442
+ --font-weight-#{$alias}: #{$value};
443
+ }
444
+
445
+ --font-weight: var(--font-weight-normal);
446
+
447
+ @each $alias, $stack in $families {
448
+ --font-family-#{$alias}: #{md3-font-family-value($stack)};
449
+ }
450
+
451
+ --font-family-base: #{md3-font-family-value("base")};
452
+ --font-family-mono: #{md3-font-family-value("mono")};
453
+ --font-family: var(--font-family-base);
454
+
455
+ @each $alias, $value in $leadings {
456
+ --leading-#{$alias}: #{$value};
457
+ }
458
+
459
+ @if meta.type-of($extra-overrides) == "map" {
460
+ @each $name, $value in $extra-overrides {
461
+ --#{$name}: #{$value};
462
+ }
463
+ }
464
+ }
465
+
466
+
467
+
468
+ //
469
+ @mixin typography($size, $family: "inherit", $weight: 400) {
470
+ & {
471
+ font-size: $size;
472
+ font-weight: $weight;
473
+ @include font-family($family);
474
+ }
475
+ }
476
+
477
+ //
478
+ @mixin font-style($selector: "&", $options: ()) {
479
+ $size-key: sass(if(sass(map.has-key($options, "size")): map.get($options, "size"); else: "base"));
480
+ $token-option: map.get($options, "token");
481
+ $family-option: sass(if(sass(map.has-key($options, "family")): map.get($options, "family"); else: "inherit"));
482
+ $line-height-option: map.get($options, "line-height");
483
+ $tracking-option: map.get($options, "tracking");
484
+ $weight-has-key: map.has-key($options, "weight");
485
+ $weight-option: sass(if(sass($weight-has-key): map.get($options, "weight"); else: null));
486
+
487
+ $token: sass(if(sass($token-option != null): $token-option; else: md3-font-size-token($size-key)));
488
+ @if $token == null {
489
+ $token: "body-medium";
490
+ }
491
+
492
+ $overrides: ();
493
+
494
+ @if $weight-has-key {
495
+ @if $weight-option != null and $weight-option != false {
496
+ $resolved-weight: md3-font-weight-value($weight-option);
497
+ $overrides: map.merge($overrides, (weight: $resolved-weight));
498
+ }
499
+ } @else {
500
+ $overrides: map.merge($overrides, (weight: md3-font-weight-value(400)));
501
+ }
502
+
503
+ @if $line-height-option != null {
504
+ $overrides: map.merge($overrides, (line-height: $line-height-option));
505
+ }
506
+
507
+ @if $tracking-option != null {
508
+ $overrides: map.merge($overrides, (tracking: $tracking-option));
509
+ }
510
+
511
+ #{$selector} {
512
+ @include type(
513
+ $token,
514
+ $overrides,
515
+ $family-option
516
+ );
517
+
518
+ //
519
+ font-size: md3-font-size-var($size-key);
520
+ }
521
+ }
522
+
523
+ //
524
+ @mixin font-family($stack: $def-ff) {
525
+ $resolved-stack: md3-font-family-value($stack);
526
+
527
+ font-family: $resolved-stack;
528
+ font-synthesis: none;
529
+ font-kerning: normal;
530
+ font-optical-sizing: auto;
531
+ }
532
+
533
+ //
534
+ @mixin type($token: "body-medium", $overrides: (), $family: null) {
535
+ $normalized-overrides: sass(if(sass(meta.type-of($overrides) == "map"): $overrides; else: ()));
536
+ $configuration: md3-typography-config($token, $normalized-overrides);
537
+ $apply-family: $family != false;
538
+
539
+ @if $family != null and $family != false {
540
+ $configuration: map.merge($configuration, (family: $family));
541
+ }
542
+
543
+ @include md3-apply-typography(
544
+ $configuration,
545
+ $apply-family,
546
+ sass(if(sass($family != null and $family != false): $family; else: "base"))
547
+ );
548
+ }
549
+
550
+ //
551
+ @mixin text-wrap {
552
+ flex-wrap: wrap;
553
+ overflow-wrap: anywhere;
554
+ word-break: break-word;
555
+ word-wrap: break-word;
556
+ white-space: normal;
557
+ hyphens: auto;
558
+ text-wrap: pretty;
559
+
560
+ @supports (text-wrap: balance) {
561
+ text-wrap: balance;
562
+ }
563
+ }
564
+
565
+ //
566
+ @mixin text-truncate {
567
+ white-space: nowrap;
568
+ overflow: hidden;
569
+ text-overflow: ellipsis;
570
+ max-inline-size: 100%;
571
+ }
572
+
573
+ //
574
+ @mixin text-clamp($lines: 2) {
575
+ overflow: hidden;
576
+ display: -webkit-box;
577
+ -webkit-line-clamp: $lines;
578
+ -webkit-box-orient: vertical;
579
+
580
+ @supports (line-clamp: #{$lines}) {
581
+ display: block;
582
+ line-clamp: $lines;
583
+ max-lines: $lines;
584
+ }
585
+ }
586
+
587
+ //
588
+ @mixin visually-hidden {
589
+ @include position.visually-hidden;
590
+ }
591
+
592
+ //
593
+ @mixin no-wrap {
594
+ white-space: nowrap;
595
+ overflow: hidden;
596
+ text-overflow: ellipsis;
597
+ word-break: keep-all;
598
+ word-wrap: normal;
599
+ flex-wrap: nowrap;
600
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Veela CSS - Advanced Runtime (Minimal)
3
+ *
4
+ * Temporarily reduced to fix build issues.
5
+ * Full advanced features require fixing lib/advanced structure.
6
+ *
7
+ * Preconditions: callers should adopt `runtime/basic/index.scss` first (see loadVeelaVariant).
8
+ */
9
+
10
+ // Effects and animations (depends on upstream tokens/normalize from basic runtime)
11
+ @use "./effects/animations" as *;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Veela CSS - Advanced Runtime Loader
3
+ *
4
+ * Provides full-featured styling with advanced components and effects.
5
+ * Inherits core foundation + adds comprehensive component library.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { loadAdvancedStyles } from "@fest-lib/veela/advanced";
10
+ * await loadAdvancedStyles();
11
+ * ```
12
+ */
13
+
14
+ import { loadAsAdopted } from "@fest-lib/dom";
15
+
16
+ import advancedStyles from "./index.scss?inline";
17
+
18
+ /**
19
+ * Load advanced veela styles
20
+ */
21
+ export async function loadAdvancedStyles(): Promise<void> {
22
+ try {
23
+ if (advancedStyles) {
24
+ await loadAsAdopted(advancedStyles);
25
+ console.log("[Veela/Advanced] Advanced styles loaded");
26
+ }
27
+ } catch (e) {
28
+ console.warn("[Veela/Advanced] Failed to load advanced styles:", e);
29
+ }
30
+ }
31
+
32
+ // Re-export core utilities
33
+ export * from "../basic/index";
34
+
35
+ export default loadAdvancedStyles;