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