@birdycom/omniacss 0.0.0-stage → 0.11.0

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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -2
  3. package/dist/oc-colors.css +4429 -0
  4. package/dist/oc-theme.css +69 -0
  5. package/dist/omnia.css +465435 -0
  6. package/dist/omnia.min.css +2 -0
  7. package/dist/omnia.starter.css +13459 -0
  8. package/dist/omnia.starter.min.css +1 -0
  9. package/dist/tokens/omnia.dtcg.json +1496 -0
  10. package/dist/tokens/omnia.tokens.json +580 -0
  11. package/dist/tokens/omnia_tokens.py +189 -0
  12. package/package.json +61 -4
  13. package/scss/base/_reset.scss +88 -0
  14. package/scss/config/omniacss.config.scss +114 -0
  15. package/scss/config/omniacss.fonts.scss +34 -0
  16. package/scss/functions/_functions.scss +407 -0
  17. package/scss/json/html-colors.json +1998 -0
  18. package/scss/json/omnia-colors.json +500 -0
  19. package/scss/json/ral-colors.json +3430 -0
  20. package/scss/layout/_media_query.scss +18 -0
  21. package/scss/omnia_colors.scss +7 -0
  22. package/scss/omnia_main.scss +143 -0
  23. package/scss/profiles/omnia_main.hsl.scss +12 -0
  24. package/scss/profiles/omnia_main.oklab.scss +12 -0
  25. package/scss/profiles/omnia_main.oklch.scss +12 -0
  26. package/scss/utilities/_accessibility.scss +42 -0
  27. package/scss/utilities/_alignment.scss +861 -0
  28. package/scss/utilities/_anchor_positioning.scss +65 -0
  29. package/scss/utilities/_animation_properties.scss +143 -0
  30. package/scss/utilities/_aspect.scss +73 -0
  31. package/scss/utilities/_backgrounds.scss +49 -0
  32. package/scss/utilities/_borders_extended.scss +97 -0
  33. package/scss/utilities/_borders_outlines.scss +161 -0
  34. package/scss/utilities/_clamp.scss +111 -0
  35. package/scss/utilities/_colors_html.scss +341 -0
  36. package/scss/utilities/_colors_mix.scss +84 -0
  37. package/scss/utilities/_colors_omnia.scss +315 -0
  38. package/scss/utilities/_colors_ral.scss +151 -0
  39. package/scss/utilities/_colors_tokens.scss +87 -0
  40. package/scss/utilities/_container.scss +58 -0
  41. package/scss/utilities/_containment.scss +82 -0
  42. package/scss/utilities/_corner_shape.scss +30 -0
  43. package/scss/utilities/_css_functions.scss +34 -0
  44. package/scss/utilities/_dark_mode.scss +117 -0
  45. package/scss/utilities/_display.scss +58 -0
  46. package/scss/utilities/_drop_shadow_colors.scss +26 -0
  47. package/scss/utilities/_effects.scss +50 -0
  48. package/scss/utilities/_effects_advanced.scss +102 -0
  49. package/scss/utilities/_experimental_css.scss +149 -0
  50. package/scss/utilities/_filters.scss +89 -0
  51. package/scss/utilities/_flexbox.scss +318 -0
  52. package/scss/utilities/_font_variants.scss +139 -0
  53. package/scss/utilities/_fonts.scss +276 -0
  54. package/scss/utilities/_gap.scss +104 -0
  55. package/scss/utilities/_gradient_stops.scss +48 -0
  56. package/scss/utilities/_gradients.scss +99 -0
  57. package/scss/utilities/_grid.scss +673 -0
  58. package/scss/utilities/_index.scss +22 -0
  59. package/scss/utilities/_interactivity.scss +198 -0
  60. package/scss/utilities/_layering.scss +24 -0
  61. package/scss/utilities/_layout_extras.scss +171 -0
  62. package/scss/utilities/_layout_flow.scss +210 -0
  63. package/scss/utilities/_mask_extras.scss +62 -0
  64. package/scss/utilities/_motion_transforms.scss +167 -0
  65. package/scss/utilities/_overflow.scss +41 -0
  66. package/scss/utilities/_position.scss +49 -0
  67. package/scss/utilities/_responsive.scss +272 -0
  68. package/scss/utilities/_scroll_animations.scss +80 -0
  69. package/scss/utilities/_scroll_spacing.scss +33 -0
  70. package/scss/utilities/_scrollbar.scss +49 -0
  71. package/scss/utilities/_shadow_tokens.scss +21 -0
  72. package/scss/utilities/_shapes.scss +72 -0
  73. package/scss/utilities/_sizing.scss +458 -0
  74. package/scss/utilities/_sizing_logical.scss +99 -0
  75. package/scss/utilities/_space_divide.scss +85 -0
  76. package/scss/utilities/_spacing_margin.scss +199 -0
  77. package/scss/utilities/_spacing_padding.scss +195 -0
  78. package/scss/utilities/_starting_style.scss +53 -0
  79. package/scss/utilities/_state_variants.scss +196 -0
  80. package/scss/utilities/_svg.scss +100 -0
  81. package/scss/utilities/_table.scss +46 -0
  82. package/scss/utilities/_table_advanced.scss +19 -0
  83. package/scss/utilities/_text.scss +1331 -0
  84. package/scss/utilities/_transforms_3d.scss +76 -0
  85. package/scss/utilities/_typography_advanced.scss +124 -0
  86. package/scss/utilities/_typography_modern.scss +83 -0
  87. package/scss/utilities/_view_transitions.scss +64 -0
  88. package/scss/utilities/_writing_modes.scss +72 -0
  89. package/scss/variables/_color_tone.scss +39 -0
  90. package/scss/variables/_hulp.scss +108 -0
  91. package/scss/variables/_mixins.scss +40 -0
  92. package/scss/variables/_modifiers.scss +32 -0
  93. package/scss/variables/_variables.scss +302 -0
  94. package/scss/variables/_variables_colors_html.scss +2019 -0
  95. package/scss/variables/_variables_colors_omnia.scss +465 -0
  96. package/scss/variables/_variables_colors_ral.scss +3472 -0
  97. package/scss/variables/_variables_effects.scss +109 -0
  98. package/scss/variables/_variables_flex_grid.scss +427 -0
  99. package/scss/variables/_variables_layout.scss +591 -0
  100. package/scss/variables/_variables_typography.scss +550 -0
  101. package/src/engine.mjs +258 -0
  102. package/src/postcss.mjs +43 -0
  103. package/src/starter-classes.mjs +124 -0
  104. package/src/tokens.mjs +377 -0
  105. package/src/variants.mjs +278 -0
  106. package/tokens/semantic.json +80 -0
@@ -0,0 +1,49 @@
1
+ // SCSS Document
2
+ // File: src/scss/utilities/_scrollbar.scss
3
+ // Description: Scrollbar utilities — width, gutter and color (CSS Scrollbars Styling Level 1).
4
+ // Copyright: 2021-2026 Birdycom
5
+ // Author: Serge Cools
6
+ // Version: 0.3.0
7
+ // Framework: OmniaCSS
8
+ // Purpose: Generate .scrollbar-* classes for scrollbar-width, scrollbar-gutter and scrollbar-color.
9
+ // Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-color
10
+ // Note: .scrollbar-thumb-* and .scrollbar-track-* set custom properties; .scrollbar-color applies them.
11
+ // Map: scrollbar-width -> scrollbar-gutter -> scrollbar-color -> .scrollbar-omnia (themed OmniaCSS scrollbar)
12
+
13
+ /* Scrollbar width */
14
+ .scrollbar-auto { scrollbar-width: auto; }
15
+ .scrollbar-thin { scrollbar-width: thin; }
16
+ .scrollbar-none { scrollbar-width: none; }
17
+
18
+ /* Scrollbar gutter — reserve space so content does not jump when a scrollbar appears */
19
+ .scrollbar-gutter-auto { scrollbar-gutter: auto; }
20
+ .scrollbar-gutter-stable { scrollbar-gutter: stable; }
21
+ .scrollbar-gutter-both { scrollbar-gutter: stable both-edges; }
22
+
23
+ /* Scrollbar color */
24
+ .scrollbar-color-auto { scrollbar-color: auto; }
25
+ .scrollbar-color {
26
+ scrollbar-color: var(--oc-scrollbar-thumb, currentcolor) var(--oc-scrollbar-track, transparent);
27
+ }
28
+ .scrollbar-thumb-current { --oc-scrollbar-thumb: currentcolor; }
29
+ .scrollbar-thumb-gray { --oc-scrollbar-thumb: var(--color-gray-50); }
30
+ .scrollbar-thumb-blue { --oc-scrollbar-thumb: var(--color-vividblue-80); }
31
+ .scrollbar-thumb-cyan { --oc-scrollbar-thumb: var(--color-skycyan-80); }
32
+ .scrollbar-thumb-purple { --oc-scrollbar-thumb: var(--color-purple-20); }
33
+ .scrollbar-track-transparent { --oc-scrollbar-track: transparent; }
34
+ .scrollbar-track-gray { --oc-scrollbar-track: var(--color-silver-2); }
35
+
36
+ /* OmniaCSS scrollbar: thin, Omnia-blue thumb on a transparent track, follows light/dark.
37
+ scrollbar-color is inherited, so one class on <html> themes every scroll area of the page. */
38
+ .scrollbar-omnia,
39
+ .scrollbar-omnia * {
40
+ scrollbar-width: thin;
41
+ }
42
+ .scrollbar-omnia {
43
+ --oc-scrollbar-thumb: light-dark(oklch(from var(--color-vividblue-95) l c h / 0.45), oklch(from var(--color-vividblue-60) l c h / 0.45));
44
+ --oc-scrollbar-track: transparent;
45
+ scrollbar-color: var(--oc-scrollbar-thumb) var(--oc-scrollbar-track);
46
+ }
47
+ .scrollbar-omnia:hover {
48
+ --oc-scrollbar-thumb: light-dark(var(--color-vividblue-95), var(--color-vividblue-60));
49
+ }
@@ -0,0 +1,21 @@
1
+ // File: src/scss/utilities/_shadow_tokens.scss
2
+ // Shared light-dark() aware shadow values (Omnia tokens only). Emits no CSS itself.
3
+ // Used by .shadow-* (_effects_advanced.scss), state variants (_state_variants.scss) and dark: utilities.
4
+ @use "sass:string";
5
+ $oc-shadow-c: string.unquote("var(--oc-shadow-color, var(--color-black-50))");
6
+ @function oc-sh($l, $d) {
7
+ @return string.unquote("light-dark(oklch(from #{$oc-shadow-c} l c h / #{$l}), oklch(from #{$oc-shadow-c} l c h / #{$d}))");
8
+ }
9
+ $oc-shadow-edge: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.2))");
10
+ $oc-shadow-edge-hi: string.unquote(", 0 0 0 1px light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.22)), inset 0 1px 0 0 light-dark(transparent, oklch(from var(--color-white-50) l c h / 0.14))");
11
+ $oc-shadow-sm: 0 1px 2px 0 oc-sh(0.08, 0.6) + $oc-shadow-edge;
12
+ $oc-shadow-md: 0 4px 6px -1px oc-sh(0.15, 0.7), 0 2px 4px -2px oc-sh(0.12, 0.6) + $oc-shadow-edge;
13
+ $oc-shadow-lg: 0 10px 15px -3px oc-sh(0.18, 0.75), 0 4px 6px -4px oc-sh(0.14, 0.65) + $oc-shadow-edge-hi;
14
+ $oc-shadow-xl: 0 20px 25px -5px oc-sh(0.22, 0.8), 0 8px 10px -6px oc-sh(0.16, 0.7) + $oc-shadow-edge-hi;
15
+ // Dark-only variants (for .dark: utilities, where color-scheme is not guaranteed to be dark)
16
+ @function oc-shd($d) { @return string.unquote("oklch(from #{$oc-shadow-c} l c h / #{$d})"); }
17
+ $oc-dark-edge: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.2)");
18
+ $oc-dark-edge-hi: string.unquote(", 0 0 0 1px oklch(from var(--color-white-50) l c h / 0.22), inset 0 1px 0 0 oklch(from var(--color-white-50) l c h / 0.14)");
19
+ $oc-dark-shadow-sm: 0 1px 2px 0 oc-shd(0.6) + $oc-dark-edge;
20
+ $oc-dark-shadow-md: 0 4px 6px -1px oc-shd(0.7), 0 2px 4px -2px oc-shd(0.6) + $oc-dark-edge;
21
+ $oc-dark-shadow-lg: 0 10px 15px -3px oc-shd(0.75), 0 4px 6px -4px oc-shd(0.65) + $oc-dark-edge-hi;
@@ -0,0 +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; }
@@ -0,0 +1,458 @@
1
+ // SCSS Document
2
+ // File: src/utilities/_sizing.scss
3
+ // Description: Spacing properties
4
+ // Copyright: 2021-2022 Birdycom
5
+ // Autor: Serge Cools
6
+ // Version: 0.2.0
7
+ // Framework: OmniaCSS
8
+ // Properties: width, min-width, max-width
9
+ // Properties: height, min-height, max-height
10
+ // Values: value in rem, auto, percent, full, screen, min, max, fit, none, revert
11
+
12
+ @use "sass:string";
13
+ @use "sass:map";
14
+ @use '../utilities/' as *;
15
+
16
+ // helpers
17
+
18
+ // loop true the $sizes list and make the new css-elements
19
+ // $size-number is the first set from the list-item ( "size-1" ), the text before the :-sign
20
+ // $size-value is the second set from the list item ( $base-size * 0.125 ), the text after the :-sign
21
+
22
+ /* The Width property */
23
+
24
+ ///
25
+ /// The width property specifies the width of a element.
26
+ /// @group Width
27
+ /// @name width
28
+ /// @link src/scss/utilities/_sizing.scss
29
+ /// @since 1.0.0
30
+ /// @author Serge Cools
31
+ ///
32
+ /// Applies to: all elements but non-replaced inline elements, table rows, and row groups
33
+ ///
34
+ ///
35
+ /// @example scss - width class
36
+ /// $min-group: $DEFAULT-BASE-FIRST-MIN-GROUP;
37
+ /// $run: 0;
38
+ /// @while $min-group <= $DEFAULT-BASE-SECOND-MAX-GROUP {
39
+ /// $result: omnia-generate-sizing($min-group, 'width', false, false);
40
+ /// $min-group: map.get($result,1);
41
+ /// $run: map.get($result,6);
42
+ /// .#{string.slice(map.get($result,5),1,1)}-#{map.get($result,2)} {
43
+ /// #{map.get($result,5)} : map.get($result,3) + #{map.get($result,4)}
44
+ /// }
45
+ /// };
46
+ /// @example html - use the width class
47
+ /// <div class="container absolute w-23 bg-red-10">
48
+ /// <h2>Voorbeeld set width with a lenght of 23rem</h2>
49
+ /// </div>
50
+ //
51
+ $min-group: $DEFAULT-BASE-FIRST-MIN-GROUP;
52
+ $run: 0;
53
+ @while $min-group <= $DEFAULT-BASE-SECOND-MAX-GROUP {
54
+
55
+ $result: omnia-generate-sizing($min-group, 'width', true, $run);
56
+
57
+ $min-group: map.get($result,1);
58
+ $run: map.get($result,6);
59
+
60
+ .#{string.slice(map.get($result,5),1,1)}-#{map.get($result,2)} {
61
+
62
+ #{map.get($result,5)} : map.get($result,3) + #{map.get($result,4)}
63
+
64
+ }
65
+ };
66
+
67
+ ///
68
+ /// The width percent property specifies the width of a element.
69
+ /// @group Width
70
+ /// @name width percent
71
+ /// @link src/scss/utilities/_sizing.scss
72
+ /// @since 1.0.0
73
+ /// @author Serge Cools
74
+ ///
75
+ /// Applies to: all elements but non-replaced inline elements, table rows, and row groups
76
+ ///
77
+ ///
78
+ /// @example scss - width percent class
79
+ /// @for $t from 2 through 6 {
80
+ /// @for $i from 1 through $t {
81
+ /// @if $i != $t { // this step is necessary because we only need one 100% the w-full
82
+ /// .w-perc {
83
+ /// &-#{$i}\/#{$t} {
84
+ /// width: calc($DEFAULT-BASE-SIZE-PERCENT / $t * $i);
85
+ /// }
86
+ /// }
87
+ /// }
88
+ /// }
89
+ /// }
90
+ /// @example html - use the width class
91
+ /// <div class="container absolute w-perc-1/3 bg-red-10">
92
+ /// <h2>Voorbeeld set width with a lenght of 33.333333%</h2>
93
+ /// </div>
94
+ //
95
+ // width with percent
96
+ @for $t from 2 through 6 {
97
+ // divide the width in half (100% / $t)
98
+ @for $i from 1 through $t {
99
+
100
+ @if $i != $t { // this step is necessary because we only need one 100% the w-full
101
+
102
+ .w-perc {
103
+
104
+ &-#{$i}\/#{$t} {
105
+ width: calc($DEFAULT-BASE-SIZE-PERCENT / $t * $i);
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ // extra width properties
113
+
114
+ // width full
115
+ .w-full {
116
+
117
+ width: $DEFAULT-BASE-SIZE-PERCENT;
118
+
119
+ }
120
+
121
+ // width screen
122
+ .w-screen {
123
+
124
+ width: 100vw;
125
+
126
+ }
127
+
128
+ // width dynamic viewport (modern mobile-safe viewport units)
129
+ .w-dvw {
130
+
131
+ width: 100dvw;
132
+
133
+ }
134
+
135
+ // width min-content
136
+ .w-min {
137
+
138
+ width: min-content;
139
+
140
+ }
141
+
142
+ // width max-content
143
+ .w-max {
144
+
145
+ width: max-content;
146
+
147
+ }
148
+
149
+ // width fit-content
150
+ .w-fit {
151
+
152
+ width: fit-content;
153
+
154
+ }
155
+
156
+ // width stretch (fill the containing block, margins included)
157
+ .w-stretch {
158
+
159
+ width: -webkit-fill-available;
160
+ width: -moz-available;
161
+ width: stretch;
162
+
163
+ }
164
+
165
+ // width none
166
+ .w-none {
167
+
168
+ width: unset;
169
+
170
+ }
171
+
172
+ // width revert
173
+ .w-rev {
174
+
175
+ width: revert;
176
+
177
+ }
178
+
179
+ /* The Min-width property */
180
+ /* Constrains the minimum width of an element. */
181
+
182
+ .min-w-0 { min-width: 0; }
183
+ .min-w-full { min-width: 100%; }
184
+ .min-w-min { min-width: min-content; }
185
+ .min-w-max { min-width: max-content; }
186
+ .min-w-fit { min-width: fit-content; }
187
+ .min-w-screen { min-width: 100vw; }
188
+ .min-w-dvw { min-width: 100dvw; }
189
+ .min-w-px { min-width: 1px; }
190
+ .min-w-4 { min-width: 1rem; }
191
+ .min-w-8 { min-width: 2rem; }
192
+ .min-w-12 { min-width: 3rem; }
193
+ .min-w-16 { min-width: 4rem; }
194
+ .min-w-20 { min-width: 5rem; }
195
+ .min-w-24 { min-width: 6rem; }
196
+ .min-w-32 { min-width: 8rem; }
197
+ .min-w-40 { min-width: 10rem; }
198
+ .min-w-48 { min-width: 12rem; }
199
+ .min-w-56 { min-width: 14rem; }
200
+ .min-w-64 { min-width: 16rem; }
201
+ .min-w-72 { min-width: 18rem; }
202
+ .min-w-80 { min-width: 20rem; }
203
+ .min-w-96 { min-width: 24rem; }
204
+
205
+ /* The Max-width property */
206
+ /* Constrains the maximum width of an element. */
207
+
208
+ .max-w-0 { max-width: 0; }
209
+ .max-w-none { max-width: none; }
210
+ .max-w-full { max-width: 100%; }
211
+ .max-w-min { max-width: min-content; }
212
+ .max-w-max { max-width: max-content; }
213
+ .max-w-fit { max-width: fit-content; }
214
+ .max-w-screen { max-width: 100vw; }
215
+ .max-w-dvw { max-width: 100dvw; }
216
+ .max-w-px { max-width: 1px; }
217
+ .max-w-xs { max-width: 20rem; } /* 320px */
218
+ .max-w-sm { max-width: 24rem; } /* 384px */
219
+ .max-w-md { max-width: 28rem; } /* 448px */
220
+ .max-w-lg { max-width: 32rem; } /* 512px */
221
+ .max-w-xl { max-width: 36rem; } /* 576px */
222
+ .max-w-2xl { max-width: 42rem; } /* 672px */
223
+ .max-w-3xl { max-width: 48rem; } /* 768px */
224
+ .max-w-4xl { max-width: 56rem; } /* 896px */
225
+ .max-w-5xl { max-width: 64rem; } /* 1024px */
226
+ .max-w-6xl { max-width: 72rem; } /* 1152px */
227
+ .max-w-7xl { max-width: 80rem; } /* 1280px */
228
+ .max-w-prose { max-width: 65ch; } /* Optimal reading width */
229
+
230
+ /* End Width property */
231
+
232
+ /* The Height property */
233
+
234
+ ///
235
+ /// The height property specifies the height of a element.
236
+ /// @group Height
237
+ /// @name height
238
+ /// @link src/scss/utilities/_sizing.scss
239
+ /// @since 1.0.0
240
+ /// @author Serge Cools
241
+ ///
242
+ /// Applies to: all elements but non-replaced inline elements, table columns, and column groups
243
+ ///
244
+ ///
245
+ /// @example scss - height class
246
+ /// $min-group: $DEFAULT-BASE-FIRST-MIN-GROUP;
247
+ /// $run: 0;
248
+ /// @while $min-group <= $DEFAULT-BASE-SECOND-MAX-GROUP {
249
+ /// $result: omnia-generate-sizing($min-group, 'height', false, false);
250
+ /// $min-group: map.get($result,1);
251
+ /// $run: map.get($result,6);
252
+ /// .#{string.slice(map.get($result,5),1,1)}-#{map.get($result,2)} {
253
+ /// #{map.get($result,5)} : map.get($result,3) + #{map.get($result,4)}
254
+ /// }
255
+ /// };
256
+ /// @example html - use the height class
257
+ /// <div class="container absolute h-5.7 bg-red-10">
258
+ /// <h2>Voorbeeld set height with a lenght of 5.75rem</h2>
259
+ /// </div>
260
+ //
261
+ $min-group: $DEFAULT-BASE-FIRST-MIN-GROUP;
262
+ $run: 0;
263
+ @while $min-group <= $DEFAULT-BASE-SECOND-MAX-GROUP {
264
+
265
+ $result: omnia-generate-sizing($min-group, 'height', true, $run);
266
+
267
+ $min-group: map.get($result,1);
268
+ $run: map.get($result,6);
269
+
270
+ .#{string.slice(map.get($result,5),1,1)}-#{map.get($result,2)} {
271
+
272
+ #{map.get($result,5)} : map.get($result,3) + #{map.get($result,4)}
273
+
274
+ }
275
+ };
276
+
277
+ ///
278
+ /// The height percent property specifies the height of a element.
279
+ /// @group Height
280
+ /// @name height percent
281
+ /// @link src/scss/utilities/_sizing.scss
282
+ /// @since 1.0.0
283
+ /// @author Serge Cools
284
+ ///
285
+ /// Applies to: all elements but non-replaced inline elements, table rows, and row groups
286
+ ///
287
+ ///
288
+ /// @example scss - width percent class
289
+ /// @for $t from 2 through 6 {
290
+ /// @for $i from 1 through $t {
291
+ /// @if $i != $t { // this step is necessary because we only need one 100% the h-full
292
+ /// .h-perc {
293
+ /// &-#{$i}\/#{$t} {
294
+ /// height: calc($DEFAULT-BASE-SIZE-PERCENT / $t * $i);
295
+ /// }
296
+ /// }
297
+ /// }
298
+ /// }
299
+ /// }
300
+ /// @example html - use the height class
301
+ /// <div class="container absolute h-perc-1/3 bg-red-10">
302
+ /// <h2>Voorbeeld set height with a lenght of 33.333333%</h2>
303
+ /// </div>
304
+ //
305
+ // height with percent
306
+ @for $t from 2 through 6 {
307
+ // divide the height in half (100% / 2)
308
+ @for $i from 1 through $t {
309
+
310
+ @if $i != $t { // this step is necessary because we only need one 100% the h-full
311
+
312
+ .h-perc {
313
+
314
+ &-#{$i}\/#{$t} {
315
+ height: calc($DEFAULT-BASE-SIZE-PERCENT / $t * $i);
316
+ }
317
+ }
318
+ }
319
+ }
320
+ }
321
+
322
+ // extra height properties
323
+
324
+ // height full
325
+ .h-full {
326
+
327
+ height: $DEFAULT-BASE-SIZE-PERCENT;
328
+
329
+ }
330
+
331
+ // height screen
332
+ .h-screen {
333
+
334
+ height: 100vh;
335
+
336
+ }
337
+
338
+ // height dynamic viewport (modern mobile-safe viewport units)
339
+ .h-dvh {
340
+
341
+ height: 100dvh;
342
+
343
+ }
344
+
345
+ // height min-content
346
+ .h-min {
347
+
348
+ height: min-content;
349
+
350
+ }
351
+
352
+ // height max-content
353
+ .h-max {
354
+
355
+ height: max-content;
356
+
357
+ }
358
+
359
+ // height fit-content
360
+ .h-fit {
361
+
362
+ height: fit-content;
363
+
364
+ }
365
+
366
+ // height stretch (fill the containing block, margins included)
367
+ .h-stretch {
368
+
369
+ height: -webkit-fill-available;
370
+ height: -moz-available;
371
+ height: stretch;
372
+
373
+ }
374
+
375
+ // height none
376
+ .h-none {
377
+
378
+ height: unset;
379
+
380
+ }
381
+
382
+ // height revert
383
+ .h-rev {
384
+
385
+ height: revert;
386
+
387
+ }
388
+
389
+
390
+ /* The Min-height property */
391
+ /* Constrains the minimum height of an element. */
392
+
393
+ .min-h-0 { min-height: 0; }
394
+ .min-h-full { min-height: 100%; }
395
+ .min-h-screen { min-height: 100vh; }
396
+ .min-h-dvh { min-height: 100dvh; }
397
+ .min-h-min { min-height: min-content; }
398
+ .min-h-max { min-height: max-content; }
399
+ .min-h-fit { min-height: fit-content; }
400
+ .min-h-px { min-height: 1px; }
401
+ .min-h-4 { min-height: 1rem; }
402
+ .min-h-8 { min-height: 2rem; }
403
+ .min-h-12 { min-height: 3rem; }
404
+ .min-h-16 { min-height: 4rem; }
405
+ .min-h-20 { min-height: 5rem; }
406
+ .min-h-24 { min-height: 6rem; }
407
+ .min-h-32 { min-height: 8rem; }
408
+ .min-h-40 { min-height: 10rem; }
409
+ .min-h-48 { min-height: 12rem; }
410
+ .min-h-56 { min-height: 14rem; }
411
+ .min-h-64 { min-height: 16rem; }
412
+ .min-h-80 { min-height: 20rem; }
413
+ .min-h-96 { min-height: 24rem; }
414
+
415
+ /* The Max-height property */
416
+ /* Constrains the maximum height of an element. */
417
+
418
+ .max-h-0 { max-height: 0; }
419
+ .max-h-none { max-height: none; }
420
+ .max-h-full { max-height: 100%; }
421
+ .max-h-screen { max-height: 100vh; }
422
+ .max-h-dvh { max-height: 100dvh; }
423
+ .max-h-min { max-height: min-content; }
424
+ .max-h-max { max-height: max-content; }
425
+ .max-h-fit { max-height: fit-content; }
426
+ .max-h-px { max-height: 1px; }
427
+ .max-h-4 { max-height: 1rem; }
428
+ .max-h-8 { max-height: 2rem; }
429
+ .max-h-12 { max-height: 3rem; }
430
+ .max-h-16 { max-height: 4rem; }
431
+ .max-h-20 { max-height: 5rem; }
432
+ .max-h-24 { max-height: 6rem; }
433
+ .max-h-32 { max-height: 8rem; }
434
+ .max-h-40 { max-height: 10rem; }
435
+ .max-h-48 { max-height: 12rem; }
436
+ .max-h-56 { max-height: 14rem; }
437
+ .max-h-64 { max-height: 16rem; }
438
+ .max-h-80 { max-height: 20rem; }
439
+ .max-h-96 { max-height: 24rem; }
440
+
441
+ /* End Height property */
442
+
443
+ /* ===================================================================
444
+ ICON SIZE (width + height same value)
445
+ Use with Iconify: class="iconify size-5" instead of data-width/data-height.
446
+ Scale: size-N = N * 0.25rem (e.g. size-4 = 1rem, size-5 = 1.25rem, size-8 = 2rem).
447
+ =================================================================== */
448
+ @for $i from 1 through 24 {
449
+ .size-#{$i} {
450
+ width: #{$i * 0.25}rem;
451
+ height: #{$i * 0.25}rem;
452
+ }
453
+ }
454
+ /* So that width/height apply on inline icon elements (e.g. Iconify span) */
455
+ .iconify[class*="size-"] {
456
+ display: inline-flex;
457
+ vertical-align: middle;
458
+ }
@@ -0,0 +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; }