@birdycom/omniacss 0.11.0 → 0.11.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 (47) 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/tokens/omnia.dtcg.json +2 -2
  8. package/dist/tokens/omnia.tokens.json +1 -1
  9. package/dist/tokens/omnia_tokens.py +2 -2
  10. package/package.json +63 -63
  11. package/scss/utilities/_anchor_positioning.scss +65 -65
  12. package/scss/utilities/_animation_properties.scss +143 -143
  13. package/scss/utilities/_borders_extended.scss +97 -97
  14. package/scss/utilities/_borders_outlines.scss +161 -161
  15. package/scss/utilities/_containment.scss +82 -82
  16. package/scss/utilities/_css_functions.scss +34 -34
  17. package/scss/utilities/_dark_mode.scss +117 -117
  18. package/scss/utilities/_drop_shadow_colors.scss +26 -26
  19. package/scss/utilities/_experimental_css.scss +149 -149
  20. package/scss/utilities/_flexbox.scss +317 -317
  21. package/scss/utilities/_font_variants.scss +139 -139
  22. package/scss/utilities/_gap.scss +103 -103
  23. package/scss/utilities/_gradient_stops.scss +48 -48
  24. package/scss/utilities/_grid.scss +672 -672
  25. package/scss/utilities/_layout_extras.scss +171 -171
  26. package/scss/utilities/_layout_flow.scss +210 -210
  27. package/scss/utilities/_mask_extras.scss +62 -62
  28. package/scss/utilities/_motion_transforms.scss +167 -167
  29. package/scss/utilities/_scroll_animations.scss +80 -80
  30. package/scss/utilities/_scrollbar.scss +2 -1
  31. package/scss/utilities/_shadow_tokens.scss +21 -21
  32. package/scss/utilities/_shapes.scss +72 -72
  33. package/scss/utilities/_sizing_logical.scss +99 -99
  34. package/scss/utilities/_starting_style.scss +53 -53
  35. package/scss/utilities/_state_variants.scss +196 -196
  36. package/scss/utilities/_svg.scss +100 -100
  37. package/scss/utilities/_table_advanced.scss +19 -19
  38. package/scss/utilities/_typography_advanced.scss +124 -124
  39. package/scss/utilities/_typography_modern.scss +83 -83
  40. package/scss/utilities/_view_transitions.scss +64 -64
  41. package/scss/utilities/_writing_modes.scss +72 -72
  42. package/scss/variables/_hulp.scss +107 -107
  43. package/scss/variables/_variables_effects.scss +108 -108
  44. package/src/postcss.mjs +43 -43
  45. package/src/tokens.mjs +377 -377
  46. package/src/variants.mjs +278 -278
  47. 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
+ }