diff options
Diffstat (limited to 'src/_utils.scss')
-rw-r--r-- | src/_utils.scss | 546 |
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 | } |