@birdycom/omniacss 0.11.0 → 0.11.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 (48) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +44 -44
  3. package/dist/oc-theme.css +1 -1
  4. package/dist/omnia.css +2 -1
  5. package/dist/omnia.min.css +1 -1
  6. package/dist/omnia.starter.css +2 -0
  7. package/dist/omnia.starter.min.css +1 -1
  8. package/dist/tokens/omnia.dtcg.json +2 -2
  9. package/dist/tokens/omnia.tokens.json +1 -1
  10. package/dist/tokens/omnia_tokens.py +2 -2
  11. package/package.json +63 -63
  12. package/scss/utilities/_anchor_positioning.scss +65 -65
  13. package/scss/utilities/_animation_properties.scss +143 -143
  14. package/scss/utilities/_borders_extended.scss +97 -97
  15. package/scss/utilities/_borders_outlines.scss +161 -161
  16. package/scss/utilities/_containment.scss +82 -82
  17. package/scss/utilities/_css_functions.scss +34 -34
  18. package/scss/utilities/_dark_mode.scss +117 -117
  19. package/scss/utilities/_drop_shadow_colors.scss +26 -26
  20. package/scss/utilities/_experimental_css.scss +149 -149
  21. package/scss/utilities/_flexbox.scss +317 -317
  22. package/scss/utilities/_font_variants.scss +139 -139
  23. package/scss/utilities/_gap.scss +103 -103
  24. package/scss/utilities/_gradient_stops.scss +48 -48
  25. package/scss/utilities/_grid.scss +672 -672
  26. package/scss/utilities/_layout_extras.scss +171 -171
  27. package/scss/utilities/_layout_flow.scss +210 -210
  28. package/scss/utilities/_mask_extras.scss +62 -62
  29. package/scss/utilities/_motion_transforms.scss +167 -167
  30. package/scss/utilities/_scroll_animations.scss +80 -80
  31. package/scss/utilities/_scrollbar.scss +2 -1
  32. package/scss/utilities/_shadow_tokens.scss +21 -21
  33. package/scss/utilities/_shapes.scss +72 -72
  34. package/scss/utilities/_sizing_logical.scss +99 -99
  35. package/scss/utilities/_starting_style.scss +53 -53
  36. package/scss/utilities/_state_variants.scss +196 -196
  37. package/scss/utilities/_svg.scss +100 -100
  38. package/scss/utilities/_table_advanced.scss +19 -19
  39. package/scss/utilities/_typography_advanced.scss +124 -124
  40. package/scss/utilities/_typography_modern.scss +83 -83
  41. package/scss/utilities/_view_transitions.scss +64 -64
  42. package/scss/utilities/_writing_modes.scss +72 -72
  43. package/scss/variables/_hulp.scss +107 -107
  44. package/scss/variables/_variables_effects.scss +108 -108
  45. package/src/postcss.mjs +43 -43
  46. package/src/tokens.mjs +377 -377
  47. package/src/variants.mjs +278 -278
  48. package/tokens/semantic.json +80 -80
@@ -1,72 +1,72 @@
1
- // SCSS Document
2
- // File: src/scss/utilities/_shapes.scss
3
- // Description: clip-path, shape-outside and shape-margin utilities (CSS Shapes / CSS Masking).
4
- // Copyright: 2021-2026 Birdycom
5
- // Author: Serge Cools
6
- // Version: 0.3.0
7
- // Framework: OmniaCSS
8
- // Purpose: Generate .clip-* classes (geometric clip paths) and .shape-* classes (text wrap around floats).
9
- // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path
10
- // Note: shape-outside only has effect on floated elements (e.g. use with .float-left).
11
- // Map: clip-path basic shapes -> polygons -> shape() -> clip border -> shape-outside -> shape-margin
12
-
13
- /* Clip path — basic shapes */
14
- .clip-none { clip-path: none; }
15
- .clip-circle { clip-path: circle(50%); }
16
- .clip-ellipse { clip-path: ellipse(50% 40%); }
17
- .clip-inset-4 { clip-path: inset(4px); }
18
- .clip-inset-8 { clip-path: inset(8px round 8px); }
19
-
20
- /* Clip path — polygons */
21
- .clip-polygon-triangle { clip-path: polygon(50% 0%, 0% 100%, 100% 100%); }
22
- .clip-polygon-diamond { clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); }
23
- .clip-polygon-pentagon { clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%); }
24
- .clip-polygon-hexagon { clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); }
25
- .clip-polygon-arrow-right { clip-path: polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%); }
26
- .clip-polygon-chevron { clip-path: polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%); }
27
-
28
- /* Clip path — shape() function (CSS Shapes Level 2, responsive curves) */
29
- .clip-shape-wave {
30
- clip-path: shape(from 0% 0%, line to 100% 0%, line to 100% 85%, curve to 0% 85% with 50% 115%, close);
31
- }
32
-
33
- /* Clip path — reference box */
34
- .clip-border-box { clip-path: border-box; }
35
- .clip-padding-box { clip-path: padding-box; }
36
- .clip-content-box { clip-path: content-box; }
37
-
38
- /* Clip border — a border that follows the clip-path of the child element.
39
- A normal border/outline is clipped away by clip-path, so put .clip-border-* on a wrapper.
40
- Color = currentcolor of the wrapper (e.g. .text-dodgerblue-20); the clipped child needs an opaque background. */
41
- .clip-border,
42
- .clip-border-2,
43
- .clip-border-4 {
44
- --oc-clip-border-color: currentcolor;
45
- }
46
- .clip-border {
47
- filter: drop-shadow(1px 0 0 var(--oc-clip-border-color)) drop-shadow(-1px 0 0 var(--oc-clip-border-color))
48
- drop-shadow(0 1px 0 var(--oc-clip-border-color)) drop-shadow(0 -1px 0 var(--oc-clip-border-color));
49
- }
50
- .clip-border-2 {
51
- filter: drop-shadow(2px 0 0 var(--oc-clip-border-color)) drop-shadow(-2px 0 0 var(--oc-clip-border-color))
52
- drop-shadow(0 2px 0 var(--oc-clip-border-color)) drop-shadow(0 -2px 0 var(--oc-clip-border-color));
53
- }
54
- .clip-border-4 {
55
- filter: drop-shadow(4px 0 0 var(--oc-clip-border-color)) drop-shadow(-4px 0 0 var(--oc-clip-border-color))
56
- drop-shadow(0 4px 0 var(--oc-clip-border-color)) drop-shadow(0 -4px 0 var(--oc-clip-border-color));
57
- }
58
-
59
- /* Shape outside — wrap inline content around a float */
60
- .shape-none { shape-outside: none; }
61
- .shape-circle { shape-outside: circle(50%); }
62
- .shape-ellipse { shape-outside: ellipse(50% 40%); }
63
- .shape-margin-box { shape-outside: margin-box; }
64
- .shape-border-box { shape-outside: border-box; }
65
- .shape-padding-box { shape-outside: padding-box; }
66
- .shape-content-box { shape-outside: content-box; }
67
-
68
- /* Shape margin */
69
- .shape-m-0 { shape-margin: 0; }
70
- .shape-m-1 { shape-margin: 0.25rem; }
71
- .shape-m-2 { shape-margin: 0.5rem; }
72
- .shape-m-4 { shape-margin: 1rem; }
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_shapes.scss
3
+ // Description: clip-path, shape-outside and shape-margin utilities (CSS Shapes / CSS Masking).
4
+ // Copyright: 2021-2026 Birdycom
5
+ // Author: Serge Cools
6
+ // Version: 0.3.0
7
+ // Framework: OmniaCSS
8
+ // Purpose: Generate .clip-* classes (geometric clip paths) and .shape-* classes (text wrap around floats).
9
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path
10
+ // Note: shape-outside only has effect on floated elements (e.g. use with .float-left).
11
+ // Map: clip-path basic shapes -> polygons -> shape() -> clip border -> shape-outside -> shape-margin
12
+
13
+ /* Clip path — basic shapes */
14
+ .clip-none { clip-path: none; }
15
+ .clip-circle { clip-path: circle(50%); }
16
+ .clip-ellipse { clip-path: ellipse(50% 40%); }
17
+ .clip-inset-4 { clip-path: inset(4px); }
18
+ .clip-inset-8 { clip-path: inset(8px round 8px); }
19
+
20
+ /* Clip path — polygons */
21
+ .clip-polygon-triangle { clip-path: polygon(50% 0%, 0% 100%, 100% 100%); }
22
+ .clip-polygon-diamond { clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); }
23
+ .clip-polygon-pentagon { clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%); }
24
+ .clip-polygon-hexagon { clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); }
25
+ .clip-polygon-arrow-right { clip-path: polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%); }
26
+ .clip-polygon-chevron { clip-path: polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%); }
27
+
28
+ /* Clip path — shape() function (CSS Shapes Level 2, responsive curves) */
29
+ .clip-shape-wave {
30
+ clip-path: shape(from 0% 0%, line to 100% 0%, line to 100% 85%, curve to 0% 85% with 50% 115%, close);
31
+ }
32
+
33
+ /* Clip path — reference box */
34
+ .clip-border-box { clip-path: border-box; }
35
+ .clip-padding-box { clip-path: padding-box; }
36
+ .clip-content-box { clip-path: content-box; }
37
+
38
+ /* Clip border — a border that follows the clip-path of the child element.
39
+ A normal border/outline is clipped away by clip-path, so put .clip-border-* on a wrapper.
40
+ Color = currentcolor of the wrapper (e.g. .text-dodgerblue-20); the clipped child needs an opaque background. */
41
+ .clip-border,
42
+ .clip-border-2,
43
+ .clip-border-4 {
44
+ --oc-clip-border-color: currentcolor;
45
+ }
46
+ .clip-border {
47
+ filter: drop-shadow(1px 0 0 var(--oc-clip-border-color)) drop-shadow(-1px 0 0 var(--oc-clip-border-color))
48
+ drop-shadow(0 1px 0 var(--oc-clip-border-color)) drop-shadow(0 -1px 0 var(--oc-clip-border-color));
49
+ }
50
+ .clip-border-2 {
51
+ filter: drop-shadow(2px 0 0 var(--oc-clip-border-color)) drop-shadow(-2px 0 0 var(--oc-clip-border-color))
52
+ drop-shadow(0 2px 0 var(--oc-clip-border-color)) drop-shadow(0 -2px 0 var(--oc-clip-border-color));
53
+ }
54
+ .clip-border-4 {
55
+ filter: drop-shadow(4px 0 0 var(--oc-clip-border-color)) drop-shadow(-4px 0 0 var(--oc-clip-border-color))
56
+ drop-shadow(0 4px 0 var(--oc-clip-border-color)) drop-shadow(0 -4px 0 var(--oc-clip-border-color));
57
+ }
58
+
59
+ /* Shape outside — wrap inline content around a float */
60
+ .shape-none { shape-outside: none; }
61
+ .shape-circle { shape-outside: circle(50%); }
62
+ .shape-ellipse { shape-outside: ellipse(50% 40%); }
63
+ .shape-margin-box { shape-outside: margin-box; }
64
+ .shape-border-box { shape-outside: border-box; }
65
+ .shape-padding-box { shape-outside: padding-box; }
66
+ .shape-content-box { shape-outside: content-box; }
67
+
68
+ /* Shape margin */
69
+ .shape-m-0 { shape-margin: 0; }
70
+ .shape-m-1 { shape-margin: 0.25rem; }
71
+ .shape-m-2 { shape-margin: 0.5rem; }
72
+ .shape-m-4 { shape-margin: 1rem; }
@@ -1,99 +1,99 @@
1
- // SCSS Document
2
- // File: src/scss/utilities/_sizing_logical.scss
3
- // Description: Size keywords (3xs … 7xl, line-height units) and the logical size scale (inline-size, block-size,
4
- // min/max in both axes) that complete the width/height families of _sizing.scss and _layout_extras.scss.
5
- // Copyright: 2021-2026 Birdycom
6
- // Author: Serge Cools
7
- // Version: 0.4.0
8
- // Framework: OmniaCSS
9
- // Purpose: Generate .w-3xs … .w-7xl, .min-w-3xs …, .max-w-3xs/2xs, .{w,h,size,min-w,min-h,max-w,max-h}-lh/rlh,
10
- // .inline-size-{n}, .block-size-{n}, .min-inline-size-*, .max-inline-size-*, .min-block-size-*, .max-block-size-*.
11
- // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/inline-size
12
- // Note: Same quarter-rem scale as .size-{n} (size-4 = 1rem), so logical and physical icon/box sizes line up.
13
- @use "sass:string";
14
-
15
- // Map: size keywords -> line-height units -> logical scale -> logical min/max
16
-
17
- $_container-sizes: (
18
- '3xs': 16rem, '2xs': 18rem, 'xs': 20rem, 'sm': 24rem, 'md': 28rem, 'lg': 32rem, 'xl': 36rem,
19
- '2xl': 42rem, '3xl': 48rem, '4xl': 56rem, '5xl': 64rem, '6xl': 72rem, '7xl': 80rem
20
- );
21
-
22
- /* Size keywords — container-like widths (same values as .max-w-xs … .max-w-7xl) */
23
- @each $key, $value in $_container-sizes {
24
- .w-#{$key} { width: $value; }
25
- .min-w-#{$key} { min-width: $value; }
26
- .inline-size-#{$key} { inline-size: $value; }
27
- .min-inline-size-#{$key} { min-inline-size: $value; }
28
- .max-inline-size-#{$key} { max-inline-size: $value; }
29
- }
30
- .max-w-3xs { max-width: 16rem; }
31
- .max-w-2xs { max-width: 18rem; }
32
-
33
- /* Line-height units — size a box in lines of text (lh) or root lines (rlh) */
34
- @each $unit in (lh, rlh) {
35
- $one: string.unquote("1#{$unit}"); // "1#{$unit}" without quotes would compile to "1 lh"
36
- .w-#{$unit} { width: $one; }
37
- .h-#{$unit} { height: $one; }
38
- .size-#{$unit} { width: $one; height: $one; }
39
- .min-w-#{$unit} { min-width: $one; }
40
- .min-h-#{$unit} { min-height: $one; }
41
- .max-w-#{$unit} { max-width: $one; }
42
- .max-h-#{$unit} { max-height: $one; }
43
- .inline-size-#{$unit} { inline-size: $one; }
44
- .block-size-#{$unit} { block-size: $one; }
45
- }
46
- /* Several lines: .h-3lh (exactly three lines), .max-h-5lh (clip after five lines), .min-h-2lh (reserve two lines) */
47
- @each $n in (2, 3, 4, 5, 6, 8, 10) {
48
- .h-#{$n}lh { height: #{$n}lh; }
49
- .min-h-#{$n}lh { min-height: #{$n}lh; }
50
- .max-h-#{$n}lh { max-height: #{$n}lh; }
51
- .block-size-#{$n}lh { block-size: #{$n}lh; }
52
- }
53
-
54
- /* Small / large / dynamic viewport units (svh = toolbars shown, lvh = toolbars hidden, dvh = follows them) */
55
- .h-svh { height: 100svh; }
56
- .h-lvh { height: 100lvh; }
57
- .min-h-svh { min-height: 100svh; }
58
- .min-h-lvh { min-height: 100lvh; }
59
- .max-h-svh { max-height: 100svh; }
60
- .max-h-lvh { max-height: 100lvh; }
61
- .w-svw { width: 100svw; }
62
- .w-lvw { width: 100lvw; }
63
- .min-w-dvw { min-width: 100dvw; }
64
- .max-w-dvw { max-width: 100dvw; }
65
-
66
- /* Logical size scale: inline-size-{n} / block-size-{n} (n * 0.25rem) */
67
- $_logical-scale: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 96);
68
- @each $n in $_logical-scale {
69
- $v: #{$n * 0.25}rem;
70
- @if $n == 0 { $v: 0; }
71
- .inline-size-#{$n} { inline-size: $v; }
72
- .block-size-#{$n} { block-size: $v; }
73
- .min-inline-size-#{$n} { min-inline-size: $v; }
74
- .min-block-size-#{$n} { min-block-size: $v; }
75
- .max-inline-size-#{$n} { max-inline-size: $v; }
76
- .max-block-size-#{$n} { max-block-size: $v; }
77
- }
78
- @each $axis in (inline, block) {
79
- .#{$axis}-size-px { #{$axis}-size: 1px; }
80
- .min-#{$axis}-size-px { min-#{$axis}-size: 1px; }
81
- .max-#{$axis}-size-px { max-#{$axis}-size: 1px; }
82
- .#{$axis}-size-screen { #{$axis}-size: 100v#{string.slice($axis, 1, 1)}; }
83
- .#{$axis}-size-stretch { #{$axis}-size: stretch; }
84
- }
85
-
86
- /* Logical min/max keywords with the -size spelling (the shorter .min-inline-* names stay available) */
87
- @each $k, $v in ('full': 100%, 'fit': fit-content, 'min': min-content, 'max': max-content) {
88
- .min-inline-size-#{$k} { min-inline-size: $v; }
89
- .min-block-size-#{$k} { min-block-size: $v; }
90
- @if $k != 'full' {
91
- .max-block-size-#{$k} { max-block-size: $v; }
92
- }
93
- }
94
- .max-block-size-full { max-block-size: 100%; }
95
- .max-inline-size-none { max-inline-size: none; }
96
- .max-block-size-none { max-block-size: none; }
97
- .max-inline-size-fit { max-inline-size: fit-content; }
98
- .max-inline-size-min { max-inline-size: min-content; }
99
- .max-inline-size-max { max-inline-size: max-content; }
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_sizing_logical.scss
3
+ // Description: Size keywords (3xs … 7xl, line-height units) and the logical size scale (inline-size, block-size,
4
+ // min/max in both axes) that complete the width/height families of _sizing.scss and _layout_extras.scss.
5
+ // Copyright: 2021-2026 Birdycom
6
+ // Author: Serge Cools
7
+ // Version: 0.4.0
8
+ // Framework: OmniaCSS
9
+ // Purpose: Generate .w-3xs … .w-7xl, .min-w-3xs …, .max-w-3xs/2xs, .{w,h,size,min-w,min-h,max-w,max-h}-lh/rlh,
10
+ // .inline-size-{n}, .block-size-{n}, .min-inline-size-*, .max-inline-size-*, .min-block-size-*, .max-block-size-*.
11
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/inline-size
12
+ // Note: Same quarter-rem scale as .size-{n} (size-4 = 1rem), so logical and physical icon/box sizes line up.
13
+ @use "sass:string";
14
+
15
+ // Map: size keywords -> line-height units -> logical scale -> logical min/max
16
+
17
+ $_container-sizes: (
18
+ '3xs': 16rem, '2xs': 18rem, 'xs': 20rem, 'sm': 24rem, 'md': 28rem, 'lg': 32rem, 'xl': 36rem,
19
+ '2xl': 42rem, '3xl': 48rem, '4xl': 56rem, '5xl': 64rem, '6xl': 72rem, '7xl': 80rem
20
+ );
21
+
22
+ /* Size keywords — container-like widths (same values as .max-w-xs … .max-w-7xl) */
23
+ @each $key, $value in $_container-sizes {
24
+ .w-#{$key} { width: $value; }
25
+ .min-w-#{$key} { min-width: $value; }
26
+ .inline-size-#{$key} { inline-size: $value; }
27
+ .min-inline-size-#{$key} { min-inline-size: $value; }
28
+ .max-inline-size-#{$key} { max-inline-size: $value; }
29
+ }
30
+ .max-w-3xs { max-width: 16rem; }
31
+ .max-w-2xs { max-width: 18rem; }
32
+
33
+ /* Line-height units — size a box in lines of text (lh) or root lines (rlh) */
34
+ @each $unit in (lh, rlh) {
35
+ $one: string.unquote("1#{$unit}"); // "1#{$unit}" without quotes would compile to "1 lh"
36
+ .w-#{$unit} { width: $one; }
37
+ .h-#{$unit} { height: $one; }
38
+ .size-#{$unit} { width: $one; height: $one; }
39
+ .min-w-#{$unit} { min-width: $one; }
40
+ .min-h-#{$unit} { min-height: $one; }
41
+ .max-w-#{$unit} { max-width: $one; }
42
+ .max-h-#{$unit} { max-height: $one; }
43
+ .inline-size-#{$unit} { inline-size: $one; }
44
+ .block-size-#{$unit} { block-size: $one; }
45
+ }
46
+ /* Several lines: .h-3lh (exactly three lines), .max-h-5lh (clip after five lines), .min-h-2lh (reserve two lines) */
47
+ @each $n in (2, 3, 4, 5, 6, 8, 10) {
48
+ .h-#{$n}lh { height: #{$n}lh; }
49
+ .min-h-#{$n}lh { min-height: #{$n}lh; }
50
+ .max-h-#{$n}lh { max-height: #{$n}lh; }
51
+ .block-size-#{$n}lh { block-size: #{$n}lh; }
52
+ }
53
+
54
+ /* Small / large / dynamic viewport units (svh = toolbars shown, lvh = toolbars hidden, dvh = follows them) */
55
+ .h-svh { height: 100svh; }
56
+ .h-lvh { height: 100lvh; }
57
+ .min-h-svh { min-height: 100svh; }
58
+ .min-h-lvh { min-height: 100lvh; }
59
+ .max-h-svh { max-height: 100svh; }
60
+ .max-h-lvh { max-height: 100lvh; }
61
+ .w-svw { width: 100svw; }
62
+ .w-lvw { width: 100lvw; }
63
+ .min-w-dvw { min-width: 100dvw; }
64
+ .max-w-dvw { max-width: 100dvw; }
65
+
66
+ /* Logical size scale: inline-size-{n} / block-size-{n} (n * 0.25rem) */
67
+ $_logical-scale: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 96);
68
+ @each $n in $_logical-scale {
69
+ $v: #{$n * 0.25}rem;
70
+ @if $n == 0 { $v: 0; }
71
+ .inline-size-#{$n} { inline-size: $v; }
72
+ .block-size-#{$n} { block-size: $v; }
73
+ .min-inline-size-#{$n} { min-inline-size: $v; }
74
+ .min-block-size-#{$n} { min-block-size: $v; }
75
+ .max-inline-size-#{$n} { max-inline-size: $v; }
76
+ .max-block-size-#{$n} { max-block-size: $v; }
77
+ }
78
+ @each $axis in (inline, block) {
79
+ .#{$axis}-size-px { #{$axis}-size: 1px; }
80
+ .min-#{$axis}-size-px { min-#{$axis}-size: 1px; }
81
+ .max-#{$axis}-size-px { max-#{$axis}-size: 1px; }
82
+ .#{$axis}-size-screen { #{$axis}-size: 100v#{string.slice($axis, 1, 1)}; }
83
+ .#{$axis}-size-stretch { #{$axis}-size: stretch; }
84
+ }
85
+
86
+ /* Logical min/max keywords with the -size spelling (the shorter .min-inline-* names stay available) */
87
+ @each $k, $v in ('full': 100%, 'fit': fit-content, 'min': min-content, 'max': max-content) {
88
+ .min-inline-size-#{$k} { min-inline-size: $v; }
89
+ .min-block-size-#{$k} { min-block-size: $v; }
90
+ @if $k != 'full' {
91
+ .max-block-size-#{$k} { max-block-size: $v; }
92
+ }
93
+ }
94
+ .max-block-size-full { max-block-size: 100%; }
95
+ .max-inline-size-none { max-inline-size: none; }
96
+ .max-block-size-none { max-block-size: none; }
97
+ .max-inline-size-fit { max-inline-size: fit-content; }
98
+ .max-inline-size-min { max-inline-size: min-content; }
99
+ .max-inline-size-max { max-inline-size: max-content; }
@@ -1,53 +1,53 @@
1
- // SCSS Document
2
- // File: src/scss/utilities/_starting_style.scss
3
- // Description: Entry/exit transition utilities — @starting-style, transition-behavior and interpolate-size.
4
- // Copyright: 2021-2026 Birdycom
5
- // Author: Serge Cools
6
- // Version: 0.3.0
7
- // Framework: OmniaCSS
8
- // Purpose: Generate .starting-* classes (initial state before first render), .transition-discrete
9
- // and .interpolate-size-* so popovers, dialogs and <details> can animate in/out with CSS only.
10
- // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style
11
- // Note: combine with a transition utility (e.g. .transition .duration-300) on the same element.
12
- // Map: @starting-style -> transition-behavior -> interpolate-size -> details-content
13
-
14
- /* Starting style — values used before the element's first style update */
15
- .starting-opacity-0 {
16
- @starting-style { opacity: 0; }
17
- }
18
- .starting-scale-95 {
19
- @starting-style { scale: 0.95; }
20
- }
21
- .starting-translate-y-2 {
22
- @starting-style { translate: 0 0.5rem; }
23
- }
24
- .starting-translate-y-n2 {
25
- @starting-style { translate: 0 -0.5rem; }
26
- }
27
- .starting-translate-x-full {
28
- @starting-style { translate: 100% 0; }
29
- }
30
-
31
- /* Transition behavior — allow transitions on discrete properties (display, overlay, content-visibility) */
32
- .transition-normal { transition-behavior: normal; }
33
- .transition-discrete { transition-behavior: allow-discrete; }
34
-
35
- /* Interpolate size — animate to/from intrinsic sizes like height: auto */
36
- .interpolate-size-numeric { interpolate-size: numeric-only; }
37
- .interpolate-size-keywords { interpolate-size: allow-keywords; }
38
-
39
- /* Details content — animate the open/close of <details> */
40
- .details-animate::details-content {
41
- block-size: 0;
42
- overflow: clip;
43
- transition: block-size 300ms ease, content-visibility 300ms allow-discrete;
44
- }
45
- .details-animate[open]::details-content {
46
- block-size: auto;
47
- }
48
-
49
- @media (prefers-reduced-motion: reduce) {
50
- .details-animate::details-content {
51
- transition: none;
52
- }
53
- }
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_starting_style.scss
3
+ // Description: Entry/exit transition utilities — @starting-style, transition-behavior and interpolate-size.
4
+ // Copyright: 2021-2026 Birdycom
5
+ // Author: Serge Cools
6
+ // Version: 0.3.0
7
+ // Framework: OmniaCSS
8
+ // Purpose: Generate .starting-* classes (initial state before first render), .transition-discrete
9
+ // and .interpolate-size-* so popovers, dialogs and <details> can animate in/out with CSS only.
10
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style
11
+ // Note: combine with a transition utility (e.g. .transition .duration-300) on the same element.
12
+ // Map: @starting-style -> transition-behavior -> interpolate-size -> details-content
13
+
14
+ /* Starting style — values used before the element's first style update */
15
+ .starting-opacity-0 {
16
+ @starting-style { opacity: 0; }
17
+ }
18
+ .starting-scale-95 {
19
+ @starting-style { scale: 0.95; }
20
+ }
21
+ .starting-translate-y-2 {
22
+ @starting-style { translate: 0 0.5rem; }
23
+ }
24
+ .starting-translate-y-n2 {
25
+ @starting-style { translate: 0 -0.5rem; }
26
+ }
27
+ .starting-translate-x-full {
28
+ @starting-style { translate: 100% 0; }
29
+ }
30
+
31
+ /* Transition behavior — allow transitions on discrete properties (display, overlay, content-visibility) */
32
+ .transition-normal { transition-behavior: normal; }
33
+ .transition-discrete { transition-behavior: allow-discrete; }
34
+
35
+ /* Interpolate size — animate to/from intrinsic sizes like height: auto */
36
+ .interpolate-size-numeric { interpolate-size: numeric-only; }
37
+ .interpolate-size-keywords { interpolate-size: allow-keywords; }
38
+
39
+ /* Details content — animate the open/close of <details> */
40
+ .details-animate::details-content {
41
+ block-size: 0;
42
+ overflow: clip;
43
+ transition: block-size 300ms ease, content-visibility 300ms allow-discrete;
44
+ }
45
+ .details-animate[open]::details-content {
46
+ block-size: auto;
47
+ }
48
+
49
+ @media (prefers-reduced-motion: reduce) {
50
+ .details-animate::details-content {
51
+ transition: none;
52
+ }
53
+ }