diff options
| author | Volpeon <git@volpeon.ink> | 2025-08-13 12:01:46 +0200 |
|---|---|---|
| committer | Volpeon <git@volpeon.ink> | 2025-08-13 12:01:46 +0200 |
| commit | f0f84513f8efe533b6ee670a6f1a0c074387b2ec (patch) | |
| tree | 845bc4bacf1bd99acb0dfcc7e4545a36b544d2f8 /src/bem/_block.scss | |
| parent | More fix (diff) | |
| download | iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.tar.gz iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.tar.bz2 iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.zip | |
Make use of SASS modules
Diffstat (limited to 'src/bem/_block.scss')
| -rw-r--r-- | src/bem/_block.scss | 222 |
1 files changed, 113 insertions, 109 deletions
diff --git a/src/bem/_block.scss b/src/bem/_block.scss index cfa9f33..a4b2a47 100644 --- a/src/bem/_block.scss +++ b/src/bem/_block.scss | |||
| @@ -4,6 +4,10 @@ | |||
| 4 | /// @access public | 4 | /// @access public |
| 5 | //// | 5 | //// |
| 6 | 6 | ||
| 7 | @use 'sass:list'; | ||
| 8 | @use 'sass:map'; | ||
| 9 | @use 'sass:meta'; | ||
| 10 | @use 'sass:selector'; | ||
| 7 | @use './validators'; | 11 | @use './validators'; |
| 8 | @use './vars'; | 12 | @use './vars'; |
| 9 | @use './functions' as bemfunctions; | 13 | @use './functions' as bemfunctions; |
| @@ -37,34 +41,34 @@ | |||
| 37 | /// } | 41 | /// } |
| 38 | /// | 42 | /// |
| 39 | @mixin block($name, $type: null) { | 43 | @mixin block($name, $type: null) { |
| 40 | $result: block($name, $type); | 44 | $result: block($name, $type); |
| 41 | $selector: nth($result, 1); | 45 | $selector: list.nth($result, 1); |
| 42 | $context: nth($result, 2); | 46 | $context: list.nth($result, 2); |
| 43 | 47 | ||
| 44 | @include validators.validate( | 48 | @include validators.validate( |
| 45 | 'block', | 49 | 'block', |
| 46 | (name: $name, type: $type), | 50 | (name: $name, type: $type), |
| 47 | $selector, | 51 | $selector, |
| 48 | $context | 52 | $context |
| 49 | ); | 53 | ); |
| 50 | 54 | ||
| 51 | @if $type != null { | 55 | @if $type != null { |
| 52 | vars.$blocks: append(vars.$blocks, $name + '_' + $type); | 56 | vars.$blocks: list.append(vars.$blocks, $name + '_' + $type); |
| 53 | } @else { | 57 | } @else { |
| 54 | vars.$blocks: append(vars.$blocks, $name); | 58 | vars.$blocks: list.append(vars.$blocks, $name); |
| 55 | } | 59 | } |
| 56 | 60 | ||
| 57 | @include contexts.push(vars.$context-id, $context...); | 61 | @include contexts.push(vars.$context-id, $context...); |
| 58 | @at-root #{$selector} { | 62 | @at-root #{$selector} { |
| 59 | @if $type != null { | 63 | @if $type != null { |
| 60 | @layer #{$type} { | 64 | @layer #{$type} { |
| 61 | @content; | 65 | @content; |
| 62 | } | 66 | } |
| 63 | } @else { | 67 | } @else { |
| 64 | @content; | 68 | @content; |
| 65 | } | 69 | } |
| 66 | } | 70 | } |
| 67 | @include contexts.pop(vars.$context-id); | 71 | @include contexts.pop(vars.$context-id); |
| 68 | } | 72 | } |
| 69 | 73 | ||
| 70 | /// | 74 | /// |
| @@ -75,47 +79,47 @@ | |||
| 75 | /// @see {mixin} block | 79 | /// @see {mixin} block |
| 76 | /// | 80 | /// |
| 77 | @function block($name, $type: null) { | 81 | @function block($name, $type: null) { |
| 78 | // | 82 | // |
| 79 | // Possible outcomes: | 83 | // Possible outcomes: |
| 80 | // - ({b,e,m,s}) block | 84 | // - ({b,e,m,s}) block |
| 81 | // | 85 | // |
| 82 | 86 | ||
| 83 | $noop: contexts.assert-stack-count(vars.$context-id, vars.$max-depth); | 87 | $noop: contexts.assert-stack-count(vars.$context-id, vars.$max-depth); |
| 84 | 88 | ||
| 85 | $selector: null; | 89 | $selector: null; |
| 86 | $base-selector: null; | 90 | $base-selector: null; |
| 87 | 91 | ||
| 88 | @if $type != null { | 92 | @if $type != null { |
| 89 | $namespace: map-get(vars.$namespaces, $type); | 93 | $namespace: map.get(vars.$namespaces, $type); |
| 90 | 94 | ||
| 91 | @if not $namespace { | 95 | @if not $namespace { |
| 92 | @error '"#{$type}" is not a valid type.'; | 96 | @error '"#{$type}" is not a valid type.'; |
| 93 | } | 97 | } |
| 94 | 98 | ||
| 95 | $base-selector: selector-parse('.' + $namespace + '-' + $name); | 99 | $base-selector: selector.parse('.' + $namespace + '-' + $name); |
| 96 | 100 | ||
| 97 | @if $type != 'theme' or & { | 101 | @if $type != 'theme' or & { |
| 98 | $selector: $base-selector; | 102 | $selector: $base-selector; |
| 99 | } @else if not & { | 103 | } @else if not & { |
| 100 | $selector: bemfunctions.theme-selector($name); | 104 | $selector: bemfunctions.theme-selector($name); |
| 101 | } | 105 | } |
| 102 | } @else { | 106 | } @else { |
| 103 | $base-selector: selector-parse('.' + $name); | 107 | $base-selector: selector.parse('.' + $name); |
| 104 | $selector: $base-selector; | 108 | $selector: $base-selector; |
| 105 | } | 109 | } |
| 106 | 110 | ||
| 107 | @if & { | 111 | @if & { |
| 108 | $selector: selector-nest(&, $selector); | 112 | $selector: selector.nest(&, $selector); |
| 109 | } | 113 | } |
| 110 | 114 | ||
| 111 | $context: 'block', ( | 115 | $context: 'block', ( |
| 112 | 'name': $name, | 116 | 'name': $name, |
| 113 | 'type': $type, | 117 | 'type': $type, |
| 114 | 'selector': $selector, | 118 | 'selector': $selector, |
| 115 | 'base-selector': $base-selector | 119 | 'base-selector': $base-selector |
| 116 | ); | 120 | ); |
| 117 | 121 | ||
| 118 | @return $selector $context; | 122 | @return $selector $context; |
| 119 | } | 123 | } |
| 120 | 124 | ||
| 121 | /// | 125 | /// |
| @@ -126,9 +130,9 @@ | |||
| 126 | /// @content | 130 | /// @content |
| 127 | /// | 131 | /// |
| 128 | @mixin object($name) { | 132 | @mixin object($name) { |
| 129 | @include block($name, 'object') { | 133 | @include block($name, 'object') { |
| 130 | @content; | 134 | @content; |
| 131 | } | 135 | } |
| 132 | } | 136 | } |
| 133 | 137 | ||
| 134 | /// | 138 | /// |
| @@ -139,7 +143,7 @@ | |||
| 139 | /// @see {mixin} object | 143 | /// @see {mixin} object |
| 140 | /// | 144 | /// |
| 141 | @function object($name) { | 145 | @function object($name) { |
| 142 | @return block($name, 'object'); | 146 | @return block($name, 'object'); |
| 143 | } | 147 | } |
| 144 | 148 | ||
| 145 | /// | 149 | /// |
| @@ -150,9 +154,9 @@ | |||
| 150 | /// @content | 154 | /// @content |
| 151 | /// | 155 | /// |
| 152 | @mixin component($name) { | 156 | @mixin component($name) { |
| 153 | @include block($name, 'component') { | 157 | @include block($name, 'component') { |
| 154 | @content; | 158 | @content; |
| 155 | } | 159 | } |
| 156 | } | 160 | } |
| 157 | 161 | ||
| 158 | /// | 162 | /// |
| @@ -163,7 +167,7 @@ | |||
| 163 | /// @see {mixin} component | 167 | /// @see {mixin} component |
| 164 | /// | 168 | /// |
| 165 | @function component($name) { | 169 | @function component($name) { |
| 166 | @return block($name, 'component'); | 170 | @return block($name, 'component'); |
| 167 | } | 171 | } |
| 168 | 172 | ||
| 169 | /// | 173 | /// |
| @@ -174,9 +178,9 @@ | |||
| 174 | /// @content | 178 | /// @content |
| 175 | /// | 179 | /// |
| 176 | @mixin layout($name) { | 180 | @mixin layout($name) { |
| 177 | @include block($name, 'layout') { | 181 | @include block($name, 'layout') { |
| 178 | @content; | 182 | @content; |
| 179 | } | 183 | } |
| 180 | } | 184 | } |
| 181 | 185 | ||
| 182 | /// | 186 | /// |
| @@ -187,7 +191,7 @@ | |||
| 187 | /// @see {mixin} layout | 191 | /// @see {mixin} layout |
| 188 | /// | 192 | /// |
| 189 | @function layout($name) { | 193 | @function layout($name) { |
| 190 | @return block($name, 'layout'); | 194 | @return block($name, 'layout'); |
| 191 | } | 195 | } |
| 192 | 196 | ||
| 193 | /// | 197 | /// |
| @@ -198,9 +202,9 @@ | |||
| 198 | /// @content | 202 | /// @content |
| 199 | /// | 203 | /// |
| 200 | @mixin utility($name) { | 204 | @mixin utility($name) { |
| 201 | @include block($name, 'utility') { | 205 | @include block($name, 'utility') { |
| 202 | @content; | 206 | @content; |
| 203 | } | 207 | } |
| 204 | } | 208 | } |
| 205 | 209 | ||
| 206 | /// | 210 | /// |
| @@ -211,7 +215,7 @@ | |||
| 211 | /// @see {mixin} utility | 215 | /// @see {mixin} utility |
| 212 | /// | 216 | /// |
| 213 | @function utility($name) { | 217 | @function utility($name) { |
| 214 | @return block($name, 'utility'); | 218 | @return block($name, 'utility'); |
| 215 | } | 219 | } |
| 216 | 220 | ||
| 217 | /// | 221 | /// |
| @@ -222,9 +226,9 @@ | |||
| 222 | /// @content | 226 | /// @content |
| 223 | /// | 227 | /// |
| 224 | @mixin scope($name) { | 228 | @mixin scope($name) { |
| 225 | @include block($name, 'scope') { | 229 | @include block($name, 'scope') { |
| 226 | @content; | 230 | @content; |
| 227 | } | 231 | } |
| 228 | } | 232 | } |
| 229 | 233 | ||
| 230 | /// | 234 | /// |
| @@ -235,7 +239,7 @@ | |||
| 235 | /// @see {mixin} scope | 239 | /// @see {mixin} scope |
| 236 | /// | 240 | /// |
| 237 | @function scope($name) { | 241 | @function scope($name) { |
| 238 | @return block($name, 'scope'); | 242 | @return block($name, 'scope'); |
| 239 | } | 243 | } |
| 240 | 244 | ||
| 241 | /// | 245 | /// |
| @@ -246,9 +250,9 @@ | |||
| 246 | /// @content | 250 | /// @content |
| 247 | /// | 251 | /// |
| 248 | @mixin theme($name) { | 252 | @mixin theme($name) { |
| 249 | @include block($name, 'theme') { | 253 | @include block($name, 'theme') { |
| 250 | @content; | 254 | @content; |
| 251 | } | 255 | } |
| 252 | } | 256 | } |
| 253 | 257 | ||
| 254 | /// | 258 | /// |
| @@ -259,7 +263,7 @@ | |||
| 259 | /// @see {mixin} theme | 263 | /// @see {mixin} theme |
| 260 | /// | 264 | /// |
| 261 | @function theme($name) { | 265 | @function theme($name) { |
| 262 | @return block($name, 'theme'); | 266 | @return block($name, 'theme'); |
| 263 | } | 267 | } |
| 264 | 268 | ||
| 265 | /// | 269 | /// |
| @@ -270,9 +274,9 @@ | |||
| 270 | /// @content | 274 | /// @content |
| 271 | /// | 275 | /// |
| 272 | @mixin js($name) { | 276 | @mixin js($name) { |
| 273 | @include block($name, 'js') { | 277 | @include block($name, 'js') { |
| 274 | @content; | 278 | @content; |
| 275 | } | 279 | } |
| 276 | } | 280 | } |
| 277 | 281 | ||
| 278 | /// | 282 | /// |
| @@ -283,7 +287,7 @@ | |||
| 283 | /// @see {mixin} js | 287 | /// @see {mixin} js |
| 284 | /// | 288 | /// |
| 285 | @function js($name) { | 289 | @function js($name) { |
| 286 | @return block($name, 'js'); | 290 | @return block($name, 'js'); |
| 287 | } | 291 | } |
| 288 | 292 | ||
| 289 | /// | 293 | /// |
| @@ -294,9 +298,9 @@ | |||
| 294 | /// @content | 298 | /// @content |
| 295 | /// | 299 | /// |
| 296 | @mixin qa($name) { | 300 | @mixin qa($name) { |
| 297 | @include block($name, 'qa') { | 301 | @include block($name, 'qa') { |
| 298 | @content; | 302 | @content; |
| 299 | } | 303 | } |
| 300 | } | 304 | } |
| 301 | 305 | ||
| 302 | /// | 306 | /// |
| @@ -307,7 +311,7 @@ | |||
| 307 | /// @see {mixin} qa | 311 | /// @see {mixin} qa |
| 308 | /// | 312 | /// |
| 309 | @function qa($name) { | 313 | @function qa($name) { |
| 310 | @return block($name, 'qa'); | 314 | @return block($name, 'qa'); |
| 311 | } | 315 | } |
| 312 | 316 | ||
| 313 | /// | 317 | /// |
| @@ -318,9 +322,9 @@ | |||
| 318 | /// @content | 322 | /// @content |
| 319 | /// | 323 | /// |
| 320 | @mixin hack($name) { | 324 | @mixin hack($name) { |
| 321 | @include block($name, 'hack') { | 325 | @include block($name, 'hack') { |
| 322 | @content; | 326 | @content; |
| 323 | } | 327 | } |
| 324 | } | 328 | } |
| 325 | 329 | ||
| 326 | /// | 330 | /// |
| @@ -331,7 +335,7 @@ | |||
| 331 | /// @see {mixin} hack | 335 | /// @see {mixin} hack |
| 332 | /// | 336 | /// |
| 333 | @function hack($name) { | 337 | @function hack($name) { |
| 334 | @return block($name, 'hack'); | 338 | @return block($name, 'hack'); |
| 335 | } | 339 | } |
| 336 | 340 | ||
| 337 | /// | 341 | /// |
| @@ -383,22 +387,22 @@ | |||
| 383 | /// // Compilation will fail because c-someBlock is defined after c-anotherBlock__elem | 387 | /// // Compilation will fail because c-someBlock is defined after c-anotherBlock__elem |
| 384 | /// | 388 | /// |
| 385 | @mixin composed-of($block, $blocks...) { | 389 | @mixin composed-of($block, $blocks...) { |
| 386 | @each $block in functions.list-prepend($blocks, $block) { | 390 | @each $block in functions.list-prepend($blocks, $block) { |
| 387 | @if type-of($block) == string { | 391 | @if meta.type-of($block) == string { |
| 388 | @if not index(vars.$blocks, $block) { | 392 | @if not list.index(vars.$blocks, $block) { |
| 389 | @error 'Block "#{$block}" does not exist.'; | 393 | @error 'Block "#{$block}" does not exist.'; |
| 390 | } | 394 | } |
| 391 | } @else { | 395 | } @else { |
| 392 | $name: nth($block, 1); | 396 | $name: list.nth($block, 1); |
| 393 | $type: nth($block, 2); | 397 | $type: list.nth($block, 2); |
| 394 | 398 | ||
| 395 | @if not map-get(vars.$namespaces, $type) { | 399 | @if not map.get(vars.$namespaces, $type) { |
| 396 | @error '"#{$type}" is not a valid type.'; | 400 | @error '"#{$type}" is not a valid type.'; |
| 397 | } | 401 | } |
| 398 | 402 | ||
| 399 | @if not index(vars.$blocks, $name + '_' + $type) { | 403 | @if not list.index(vars.$blocks, $name + '_' + $type) { |
| 400 | @error 'Block "#{$name}" does not exist.'; | 404 | @error 'Block "#{$name}" does not exist.'; |
| 401 | } | 405 | } |
| 402 | } | 406 | } |
| 403 | } | 407 | } |
| 404 | } | 408 | } |
