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/_multi.scss | |
parent | More fix (diff) | |
download | iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.tar.gz iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.tar.bz2 iro-sass-f0f84513f8efe533b6ee670a6f1a0c074387b2ec.zip |
Diffstat (limited to 'src/bem/_multi.scss')
-rw-r--r-- | src/bem/_multi.scss | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/src/bem/_multi.scss b/src/bem/_multi.scss index 1de5cdc..c0beeeb 100644 --- a/src/bem/_multi.scss +++ b/src/bem/_multi.scss | |||
@@ -4,6 +4,10 @@ | |||
4 | /// @access public | 4 | /// @access public |
5 | //// | 5 | //// |
6 | 6 | ||
7 | @use 'sass:list'; | ||
8 | @use 'sass:meta'; | ||
9 | @use 'sass:selector'; | ||
10 | @use 'sass:string'; | ||
7 | @use '../functions'; | 11 | @use '../functions'; |
8 | @use '../contexts'; | 12 | @use '../contexts'; |
9 | @use './block'; | 13 | @use './block'; |
@@ -81,67 +85,67 @@ | |||
81 | /// } | 85 | /// } |
82 | /// | 86 | /// |
83 | @mixin multi($first, $others...) { | 87 | @mixin multi($first, $others...) { |
84 | @include contexts.assert-stack-count(vars.$context-id, vars.$max-depth); | 88 | @include contexts.assert-stack-count(vars.$context-id, vars.$max-depth); |
85 | 89 | ||
86 | @each $entity in functions.list-prepend($others, $first) { | 90 | @each $entity in functions.list-prepend($others, $first) { |
87 | $is-manual-selector: false; | 91 | $is-manual-selector: false; |
88 | 92 | ||
89 | @if type-of($entity) == string { | 93 | @if meta.type-of($entity) == string { |
90 | @if find-bem-function($entity) == null { | 94 | @if find-bem-function($entity) == null { |
91 | $is-manual-selector: true; | 95 | $is-manual-selector: true; |
92 | } | 96 | } |
93 | } | 97 | } |
94 | 98 | ||
95 | @if $is-manual-selector { | 99 | @if $is-manual-selector { |
96 | $sel: if(&, selector-nest(&, $entity), selector-parse($entity)); | 100 | $sel: if(&, selector.nest(&, $entity), selector.parse($entity)); |
97 | 101 | ||
98 | @at-root #{$sel} { | 102 | @at-root #{$sel} { |
99 | @content; | 103 | @content; |
100 | } | 104 | } |
101 | } @else { | 105 | } @else { |
102 | $entity-func-id: null; | 106 | $entity-func-id: null; |
103 | 107 | ||
104 | @if type-of($entity) == list { | 108 | @if meta.type-of($entity) == list { |
105 | $entity-func-id: nth($entity, 1); | 109 | $entity-func-id: list.nth($entity, 1); |
106 | $entity: functions.list-slice($entity, 2); | 110 | $entity: functions.list-slice($entity, 2); |
107 | } @else { | 111 | } @else { |
108 | $entity-func-id: $entity; | 112 | $entity-func-id: $entity; |
109 | $entity: (); | 113 | $entity: (); |
110 | } | 114 | } |
111 | 115 | ||
112 | @if str-slice($entity-func-id, str-length($entity-func-id)) == ':' { | 116 | @if string.slice($entity-func-id, string.length($entity-func-id)) == ':' { |
113 | $entity-func-id: unquote(str-slice($entity-func-id, 1, str-length($entity-func-id) - 1)); | 117 | $entity-func-id: string.unquote(string.slice($entity-func-id, 1, string.length($entity-func-id) - 1)); |
114 | } | 118 | } |
115 | 119 | ||
116 | $sel-func: find-bem-function($entity-func-id); | 120 | $sel-func: find-bem-function($entity-func-id); |
117 | 121 | ||
118 | @if $sel-func == null { | 122 | @if $sel-func == null { |
119 | @error 'Function "#{inspect($entity-func-id)}" was not found.'; | 123 | @error 'Function "#{inspect($entity-func-id)}" was not found.'; |
120 | } | 124 | } |
121 | 125 | ||
122 | $entity-result: call($sel-func, $entity...); | 126 | $entity-result: meta.call($sel-func, $entity...); |
123 | $entity-result-selector: nth($entity-result, 1); | 127 | $entity-result-selector: list.nth($entity-result, 1); |
124 | $entity-result-context: nth($entity-result, 2); | 128 | $entity-result-context: list.nth($entity-result, 2); |
125 | 129 | ||
126 | @if $entity-result-context != null { | 130 | @if $entity-result-context != null { |
127 | @include contexts.push(vars.$context-id, $entity-result-context...); | 131 | @include contexts.push(vars.$context-id, $entity-result-context...); |
128 | } | 132 | } |
129 | @at-root #{$entity-result-selector} { | 133 | @at-root #{$entity-result-selector} { |
130 | @content; | 134 | @content; |
131 | } | 135 | } |
132 | @if $entity-result-context != null { | 136 | @if $entity-result-context != null { |
133 | @include contexts.pop(vars.$context-id); | 137 | @include contexts.pop(vars.$context-id); |
134 | } | 138 | } |
135 | } | 139 | } |
136 | } | 140 | } |
137 | } | 141 | } |
138 | 142 | ||
139 | @function find-bem-function($name) { | 143 | @function find-bem-function($name) { |
140 | @each $module in (block element modifier state suffix theme) { | 144 | @each $module in (block element modifier state suffix theme) { |
141 | @if function-exists($name, $module) { | 145 | @if meta.function-exists($name, $module) { |
142 | @return get-function($name, $module: $module); | 146 | @return meta.get-function($name, $module: $module); |
143 | } | 147 | } |
144 | } | 148 | } |
145 | 149 | ||
146 | @return null; | 150 | @return null; |
147 | } | 151 | } |