summaryrefslogtreecommitdiffstats
path: root/src/_utils.scss
diff options
context:
space:
mode:
Diffstat (limited to 'src/_utils.scss')
-rw-r--r--src/_utils.scss534
1 files changed, 305 insertions, 229 deletions
diff --git a/src/_utils.scss b/src/_utils.scss
index 598eae4..3dae3b6 100644
--- a/src/_utils.scss
+++ b/src/_utils.scss
@@ -1,4 +1,5 @@
1@use 'sass:map'; 1@use 'sass:map';
2@use 'sass:string';
2@use 'iro-sass/src/bem'; 3@use 'iro-sass/src/bem';
3@use 'iro-sass/src/props'; 4@use 'iro-sass/src/props';
4@use 'include-media/dist/include-media' as media; 5@use 'include-media/dist/include-media' as media;
@@ -8,297 +9,372 @@
8 9
9/* stylelint-disable-next-line scss/dollar-variable-pattern */ 10/* stylelint-disable-next-line scss/dollar-variable-pattern */
10$-dirs: ( 11$-dirs: (
11 '': '', 12 '': '',
12 'bs': '-block-start', 13 'b': '-block',
13 'be': '-block-end', 14 'bs': '-block-start',
14 'b': '-block', 15 'be': '-block-end',
15 'is': '-inline-start', 16 'i': '-inline',
16 'ie': '-inline-end', 17 'is': '-inline-start',
17 'i': '-inline', 18 'ie': '-inline-end',
18) !default; 19) !default;
19 20
20/* stylelint-disable-next-line scss/dollar-variable-pattern */ 21/* stylelint-disable-next-line scss/dollar-variable-pattern */
21$-sizes: ( 22$-sizes: (
22 0: vars.$size--0, 23 0: vars.$size--0,
23 10: vars.$size--10, 24 10: vars.$size--10,
24 50: vars.$size--50, 25 50: vars.$size--50,
25 75: vars.$size--75, 26 75: vars.$size--75,
26 100: vars.$size--100, 27 100: vars.$size--100,
27 125: vars.$size--125, 28 125: vars.$size--125,
28 200: vars.$size--200, 29 200: vars.$size--200,
29 400: vars.$size--400, 30 400: vars.$size--400,
30 700: vars.$size--700, 31 700: vars.$size--700,
31 800: vars.$size--800, 32 800: vars.$size--800,
33) !default;
34
35$-font-sizes: (
36 50: vars.$font-size--50,
37 75: vars.$font-size--75,
38 100: vars.$font-size--100,
39 150: vars.$font-size--150,
40 200: vars.$font-size--200,
41 300: vars.$font-size--300,
32) !default; 42) !default;
33 43
34@mixin styles { 44@mixin styles {
35 @include bem.utility('d-block') { 45 @include bem.utility('d-block') {
36 display: block; 46 display: block;
37 } 47 }
48
49 @include bem.utility('d-inline-block') {
50 display: inline-block;
51 }
52
53 @include bem.utility('d-contents') {
54 display: contents;
55 }
56
57 @include bem.utility('d-flex') {
58 display: flex;
59 }
60
61 @include bem.utility('td-none') {
62 text-decoration: none;
63 }
38 64
39 @include bem.utility('d-inline-block') { 65 @include bem.utility('d-none') {
40 display: inline-block; 66 display: none;
41 }
42 67
43 @include bem.utility('d-contents') { 68 @each $breakpoint in map.keys(media.$breakpoints) {
44 display: contents; 69 @include media.media('<=#{$breakpoint}') {
45 } 70 @include bem.suffix('#{$breakpoint}-lo') {
71 display: none;
72 }
73 }
46 74
47 @include bem.utility('d-flex') { 75 @include media.media('>#{$breakpoint}') {
48 display: flex; 76 @include bem.suffix('#{$breakpoint}-hi') {
49 } 77 display: none;
78 }
79 }
80 }
50 81
51 @include bem.utility('td-none') { 82 @include bem.at-theme('js') {
52 text-decoration: none; 83 @include bem.suffix('js') {
53 } 84 display: none;
85 }
86 }
54 87
55 @include bem.utility('d-none') { 88 @include bem.at-theme('no-js') {
56 display: none; 89 @include bem.suffix('no-js') {
90 display: none;
91 }
92 }
57 93
58 @each $breakpoint in map.keys(media.$breakpoints) { 94 @include bem.suffix('empty') {
59 @include media.media('<=#{$breakpoint}') { 95 &:empty {
60 @include bem.suffix('#{$breakpoint}-lo') { 96 display: none;
61 display: none; 97 }
62 } 98 }
63 } 99 }
64 100
65 @include media.media('>#{$breakpoint}') { 101 @include bem.utility('va-top') {
66 @include bem.suffix('#{$breakpoint}-hi') { 102 vertical-align: top;
67 display: none; 103 }
68 }
69 }
70 }
71 104
72 @include bem.at-theme('js') { 105 @include bem.utility('va-baseline') {
73 @include bem.suffix('js') { 106 vertical-align: baseline;
74 display: none; 107 }
75 }
76 }
77 108
78 @include bem.at-theme('no-js') { 109 @include bem.utility('va-middle') {
79 @include bem.suffix('no-js') { 110 vertical-align: middle;
80 display: none; 111 }
81 }
82 }
83 112
84 @include bem.suffix('empty') { 113 @include bem.utility('va-bottom') {
85 &:empty { 114 vertical-align: bottom;
86 display: none; 115 }
87 }
88 }
89 }
90 116
91 @include bem.utility('va-top') { 117 @include bem.utility('ta-start') {
92 vertical-align: top; 118 text-align: start;
93 } 119 }
94 120
95 @include bem.utility('va-baseline') { 121 @include bem.utility('ta-end') {
96 vertical-align: baseline; 122 text-align: end;
97 } 123 }
98 124
99 @include bem.utility('va-center') { 125 @include bem.utility('ta-center') {
100 vertical-align: center; 126 text-align: center;
101 } 127 }
102 128
103 @include bem.utility('va-bottom') { 129 @include bem.utility('fw-normal') {
104 vertical-align: bottom; 130 font-weight: normal;
105 } 131 }
106 132
107 @include bem.utility('ta-start') { 133 @include bem.utility('ai-center') {
108 text-align: start; 134 align-items: center;
109 } 135 }
110 136
111 @include bem.utility('ta-end') { 137 @include bem.utility('ai-start') {
112 text-align: end; 138 align-items: flex-start;
113 } 139 }
114 140
115 @include bem.utility('ta-center') { 141 @include bem.utility('ai-end') {
116 text-align: center; 142 align-items: flex-end;
117 } 143 }
118 144
119 @include bem.utility('fw-normal') { 145 @include bem.utility('ac-center') {
120 font-weight: normal; 146 align-content: center;
121 } 147 }
122 148
123 @include bem.utility('ai-center') { 149 @include bem.utility('jc-center') {
124 align-items: center; 150 justify-content: center;
125 } 151 }
126 152
127 @include bem.utility('ai-start') { 153 @include bem.utility('jc-start') {
128 align-items: flex-start; 154 justify-content: flex-start;
129 } 155 }
130 156
131 @include bem.utility('ai-end') { 157 @include bem.utility('jc-end') {
132 align-items: flex-end; 158 justify-content: flex-end;
133 } 159 }
134 160
135 @include bem.utility('jc-center') { 161 @include bem.utility('tt-upper') {
136 justify-content: center; 162 text-transform: uppercase;
137 } 163 }
138 164
139 @include bem.utility('jc-start') { 165 @include bem.utility('tt-lower') {
140 justify-content: flex-start; 166 text-transform: lowercase;
141 } 167 }
142 168
143 @include bem.utility('jc-end') { 169 @include bem.utility('c-heading') {
144 justify-content: flex-end; 170 color: props.get(vars.$theme, --heading);
145 }
146 171
147 @include bem.utility('tt-upper') { 172 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
148 text-transform: uppercase; 173 $theme-name: static-#{string.slice($theme, 3)};
149 } 174
175 @include bem.at-theme($theme-name) {
176 color: props.get(vars.$transparent-colors, $theme, --900);
177 }
178 }
179 }
150 180
151 @include bem.utility('tt-lower') { 181 @include bem.utility('c-text') {
152 text-transform: lowercase; 182 color: props.get(vars.$theme, --text);
153 }
154 183
155 @include bem.utility('c-heading') { 184 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
156 color: props.get(vars.$theme, --heading); 185 $theme-name: static-#{string.slice($theme, 3)};
157 } 186
187 @include bem.at-theme($theme-name) {
188 color: props.get(vars.$transparent-colors, $theme, --800);
189 }
190 }
191 }
158 192
159 @include bem.utility('c-text') { 193 @include bem.utility('c-mute') {
160 color: props.get(vars.$theme, --text); 194 color: props.get(vars.$theme, --text-mute);
161 }
162 195
163 @include bem.utility('c-mute') { 196 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
164 color: props.get(vars.$theme, --text-mute); 197 $theme-name: static-#{string.slice($theme, 3)};
165 } 198
199 @include bem.at-theme($theme-name) {
200 color: props.get(vars.$transparent-colors, $theme, --700);
201 }
202 }
203 }
166 204
167 @include bem.utility('c-mute-more') { 205 @include bem.utility('c-mute-more') {
168 color: props.get(vars.$theme, --text-mute-more); 206 color: props.get(vars.$theme, --text-mute-more);
169 }
170 207
171 @each $dir, $prop in (is: inline-size, bs: block-size) { 208 @each $theme in map.keys(props.get(vars.$transparent-colors)) {
172 @include bem.utility('#{$dir}-100') { 209 $theme-name: static-#{string.slice($theme, 3)};
173 #{$prop}: 100%; 210
174 } 211 @include bem.at-theme($theme-name) {
212 color: props.get(vars.$transparent-colors, $theme, --600);
213 }
214 }
215 }
216
217 @each $mod, $size in $-font-sizes {
218 @include bem.utility('fs-#{$mod}') {
219 font-size: props.get($size);
220 }
221 }
222
223 @each $dir, $prop in (is: inline-size, bs: block-size) {
224 @include bem.utility('#{$dir}-100') {
225 #{$prop}: 100%;
226 }
175 227
176 @include bem.utility('#{$dir}-75') { 228 @include bem.utility('#{$dir}-75') {
177 #{$prop}: 75%; 229 #{$prop}: 75%;
178 } 230 }
179 231
180 @include bem.utility('#{$dir}-50') { 232 @include bem.utility('#{$dir}-50') {
181 #{$prop}: 50%; 233 #{$prop}: 50%;
182 } 234 }
183 235
184 @include bem.utility('#{$dir}-25') { 236 @include bem.utility('#{$dir}-25') {
185 #{$prop}: 25%; 237 #{$prop}: 25%;
186 } 238 }
187 239
188 @include bem.utility('#{$dir}-1px') { 240 @include bem.utility('#{$dir}-1px') {
189 #{$prop}: 1px; 241 #{$prop}: 1px;
190 } 242 }
191 243
192 @include bem.utility('#{$dir}-0') { 244 @include bem.utility('#{$dir}-0') {
193 #{$prop}: 0; 245 #{$prop}: 0;
194 } 246 }
195 } 247 }
248
249 @include bem.utility('elp') {
250 overflow: hidden;
251 text-overflow: ellipsis;
252 white-space: nowrap;
253 }
254
255 @include bem.utility('o-auto') {
256 overflow: auto;
257 }
258
259 @include bem.utility('o-hidden') {
260 overflow: hidden;
261 }
196 262
197 @include bem.utility('elp') { 263 @include bem.utility('p-static') {
198 overflow: hidden; 264 position: static;
199 text-overflow: ellipsis; 265 }
200 white-space: nowrap;
201 }
202 266
203 @include bem.utility('p-static') { 267 @include bem.utility('p-relative') {
204 position: static; 268 position: relative;
205 } 269 }
206 270
207 @include bem.utility('p-relative') { 271 @include bem.utility('p-fixed') {
208 position: relative; 272 position: fixed;
209 } 273 }
210 274
211 @include bem.utility('p-fixed') { 275 @include bem.utility('p-sticky-bs') {
212 position: fixed; 276 position: sticky;
213 } 277 inset-block-start: props.get(vars.$sticky-top-offset);
278 }
214 279
215 @include bem.utility('p-sticky-bs') { 280 @include bem.utility('p-sticky-be') {
216 position: sticky; 281 position: sticky;
217 inset-block-start: 0; 282 inset-block-end: 0;
218 } 283 }
219 284
220 @include bem.utility('p-sticky-be') { 285 @include bem.utility('br-round') {
221 position: sticky; 286 border-radius: props.get(vars.$rounding);
222 inset-block-end: 0; 287 }
223 }
224 288
225 @include bem.utility('br-round') { 289 @include bem.utility('br-round-sm') {
226 border-radius: props.get(vars.$rounding); 290 border-radius: props.get(vars.$rounding--sm);
227 } 291 }
228 292
229 @each $dir, $suffix in $-dirs { 293 @each $dir, $suffix in $-dirs {
230 @include bem.utility('m#{$dir}-auto') { 294 @include bem.utility('m#{$dir}-auto') {
231 margin#{$suffix}: auto; 295 margin#{$suffix}: auto;
232 } 296 }
233 297
234 @include bem.utility('p#{$dir}-auto') { 298 @include bem.utility('p#{$dir}-auto') {
235 padding#{$suffix}: auto; 299 padding#{$suffix}: auto;
236 } 300 }
237 301
238 @each $mod, $size in $-sizes { 302 @each $mod, $size in $-sizes {
239 @include bem.utility('m#{$dir}-#{$mod}') { 303 @include bem.utility('m#{$dir}-#{$mod}') {
240 margin#{$suffix}: props.get($size); 304 margin#{$suffix}: props.get($size);
241 } 305 }
242 306
243 @include bem.utility('p#{$dir}-#{$mod}') { 307 @include bem.utility('p#{$dir}-#{$mod}') {
244 padding#{$suffix}: props.get($size); 308 padding#{$suffix}: props.get($size);
245 } 309 }
246 } 310 }
247 311
248 @include bem.utility('b#{$dir}-0') { 312 @include bem.utility('b#{$dir}-0') {
249 border#{$suffix}: 0; 313 border#{$suffix}: 0;
250 314
251 @include bem.suffix('light') { 315 @include bem.suffix('light') {
252 @media (prefers-color-scheme: light) { 316 @media (prefers-color-scheme: light) {
253 border#{$suffix}: 0; 317 border#{$suffix}: 0;
254 } 318 }
255 } 319 }
256 320
257 @include bem.suffix('dark') { 321 @include bem.suffix('dark') {
258 @media (prefers-color-scheme: dark) { 322 @media (prefers-color-scheme: dark) {
259 border#{$suffix}: 0; 323 border#{$suffix}: 0;
260 } 324 }
261 } 325 }
262 } 326 }
263 327
264 @include bem.utility('b#{$dir}-1') { 328 @include bem.utility('b#{$dir}-1') {
265 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 329 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border);
266 330
267 @include bem.suffix('light') { 331 @include bem.suffix('light') {
268 @media (prefers-color-scheme: light) { 332 @media (prefers-color-scheme: light) {
269 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 333 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border);
270 } 334 }
271 } 335 }
272 336
273 @include bem.suffix('dark') { 337 @include bem.suffix('dark') {
274 @media (prefers-color-scheme: dark) { 338 @media (prefers-color-scheme: dark) {
275 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border); 339 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border);
276 } 340 }
277 } 341 }
278 } 342 }
279 343
280 @include bem.utility('b#{$dir}-1-mute') { 344 @include bem.utility('b#{$dir}-1-mute') {
281 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 345 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute);
282 346
283 @include bem.suffix('light') { 347 @include bem.suffix('light') {
284 @media (prefers-color-scheme: light) { 348 @media (prefers-color-scheme: light) {
285 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 349 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute);
286 } 350 }
287 } 351 }
288 352
289 @include bem.suffix('dark') { 353 @include bem.suffix('dark') {
290 @media (prefers-color-scheme: dark) { 354 @media (prefers-color-scheme: dark) {
291 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute); 355 border#{$suffix}: props.get(vars.$border-width--thin) solid props.get(vars.$theme, --border-mute);
292 } 356 }
293 } 357 }
294 } 358 }
295 } 359 }
296 360
297 @include bem.utility('mbs-neutralize') { 361 @include bem.utility('mbs-neutralize') {
298 &::before { 362 &::before {
299 display: block; 363 display: block;
300 margin-block: -100em 100em; 364 margin-block: -100em 100em;
301 content: ''; 365 content: '';
302 } 366 }
303 } 367 }
368
369 @include bem.utility('sr-only') {
370 position: absolute;
371 width: 1px;
372 height: 1px;
373 padding: 0;
374 margin: -1px;
375 overflow: hidden;
376 white-space: nowrap;
377 border: 0;
378 clip-path: inset(50%);
379 }
304} 380}