aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/_easing.scss27
-rw-r--r--src/_functions.scss146
-rw-r--r--src/_props.scss101
3 files changed, 188 insertions, 86 deletions
diff --git a/src/_easing.scss b/src/_easing.scss
index 8bcfd39..6d66ea7 100644
--- a/src/_easing.scss
+++ b/src/_easing.scss
@@ -10,6 +10,8 @@
10//// 10////
11 11
12@use 'sass:math'; 12@use 'sass:math';
13@use 'sass:map';
14@use 'sass:list';
13 15
14/// 16///
15/// @access private 17/// @access private
@@ -73,14 +75,14 @@ $cubic-bezier-subdiv-max-iters: 10 !default;
73 75
74 $sample-pool-key: $x1 + '_' + $x2; 76 $sample-pool-key: $x1 + '_' + $x2;
75 77
76 @if not map-has-key($cubic-bezier-sample-pool, $sample-pool-key) { 78 @if not map.has-key($cubic-bezier-sample-pool, $sample-pool-key) {
77 $samples: (); 79 $samples: ();
78 80
79 @for $i from 0 through $cubic-bezier-sample-pool-size { 81 @for $i from 0 through $cubic-bezier-sample-pool-size {
80 $samples: append($samples, cubic-bezier-func($x1, $x2, math.div($i, $cubic-bezier-sample-pool-size))); 82 $samples: list.append($samples, cubic-bezier-func($x1, $x2, math.div($i, $cubic-bezier-sample-pool-size)));
81 } 83 }
82 84
83 $cubic-bezier-sample-pool: map-merge($cubic-bezier-sample-pool, ($sample-pool-key: $samples)) !global; 85 $cubic-bezier-sample-pool: map.merge($cubic-bezier-sample-pool, ($sample-pool-key: $samples)) !global;
84 } 86 }
85 87
86 // 88 //
@@ -169,7 +171,7 @@ $cubic-bezier-subdiv-max-iters: 10 !default;
169 $a: $cur-t; 171 $a: $cur-t;
170 } 172 }
171 173
172 @if abs($cur-x) < $cubic-bezier-subdiv-precision { 174 @if math.abs($cur-x) < $cubic-bezier-subdiv-precision {
173 @return $cur-t; 175 @return $cur-t;
174 } 176 }
175 } 177 }
@@ -184,19 +186,19 @@ $cubic-bezier-subdiv-max-iters: 10 !default;
184/// 186///
185@function cubic-bezier-t-for-x($x1, $x2, $x) { 187@function cubic-bezier-t-for-x($x1, $x2, $x) {
186 $sample-pool-key: $x1 + '_' + $x2; 188 $sample-pool-key: $x1 + '_' + $x2;
187 $samples: map-get($cubic-bezier-sample-pool, $sample-pool-key); 189 $samples: map.get($cubic-bezier-sample-pool, $sample-pool-key);
188 190
189 $intv-start: 0; 191 $intv-start: 0;
190 $cur-sample: 1; 192 $cur-sample: 1;
191 $last-sample: $cubic-bezier-sample-pool-size; 193 $last-sample: $cubic-bezier-sample-pool-size;
192 194
193 @while ($cur-sample != $last-sample) and (nth($samples, $cur-sample) <= $x) { 195 @while ($cur-sample != $last-sample) and (list.nth($samples, $cur-sample) <= $x) {
194 $intv-start: $intv-start + math.div(1, $cubic-bezier-sample-pool-size); 196 $intv-start: $intv-start + math.div(1, $cubic-bezier-sample-pool-size);
195 $cur-sample: $cur-sample + 1; 197 $cur-sample: $cur-sample + 1;
196 } 198 }
197 $cur-sample: $cur-sample - 1; 199 $cur-sample: $cur-sample - 1;
198 200
199 $dist: math.div($x - nth($samples, $cur-sample), nth($samples, $cur-sample + 1) - nth($samples, $cur-sample)); 201 $dist: math.div($x - list.nth($samples, $cur-sample), list.nth($samples, $cur-sample + 1) - list.nth($samples, $cur-sample));
200 $guess-t: $intv-start + math.div($dist, $cubic-bezier-sample-pool-size); 202 $guess-t: $intv-start + math.div($dist, $cubic-bezier-sample-pool-size);
201 203
202 $init-slope: cubic-bezier-func-slope($x1, $x2, $guess-t); 204 $init-slope: cubic-bezier-func-slope($x1, $x2, $guess-t);
@@ -210,6 +212,17 @@ $cubic-bezier-subdiv-max-iters: 10 !default;
210} 212}
211 213
212/// 214///
215/// Linear easing function.
216///
217/// @param {number} $x - Progress between 0 and 1 inclusive
218///
219/// @return {number}
220///
221@function linear($x) {
222 @return $x;
223}
224
225///
213/// Sinusoidal easing function (in direction). 226/// Sinusoidal easing function (in direction).
214/// 227///
215/// @param {number} $x - Progress between 0 and 1 inclusive 228/// @param {number} $x - Progress between 0 and 1 inclusive
diff --git a/src/_functions.scss b/src/_functions.scss
index 9dd14b1..fa6ed39 100644
--- a/src/_functions.scss
+++ b/src/_functions.scss
@@ -10,9 +10,32 @@
10//// 10////
11 11
12@use 'sass:map'; 12@use 'sass:map';
13@use 'sass:list';
13@use 'sass:math'; 14@use 'sass:math';
15@use 'sass:string';
16@use 'sass:meta';
14@use './vars'; 17@use './vars';
15 18
19$numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
20
21$units: (
22 'px': 1px,
23 'cm': 1cm,
24 'mm': 1mm,
25 '%': 1%,
26 'ch': 1ch,
27 'pc': 1pc,
28 'in': 1in,
29 'em': 1em,
30 'rem': 1rem,
31 'pt': 1pt,
32 'ex': 1ex,
33 'vw': 1vw,
34 'vh': 1vh,
35 'vmin': 1vmin,
36 'vmax': 1vmax
37);
38
16/// 39///
17/// Replace a substring with a new string. 40/// Replace a substring with a new string.
18/// 41///
@@ -23,10 +46,10 @@
23/// @return {string} A string with all instances of $search replaced with $replace 46/// @return {string} A string with all instances of $search replaced with $replace
24/// 47///
25@function str-replace($string, $search, $replace) { 48@function str-replace($string, $search, $replace) {
26 $index: str-index($string, $search); 49 $index: string.index($string, $search);
27 50
28 @if $index { 51 @if $index {
29 @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); 52 @return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
30 } 53 }
31 54
32 @return $string; 55 @return $string;
@@ -44,9 +67,9 @@
44 $result: ''; 67 $result: '';
45 68
46 @each $item in $list { 69 @each $item in $list {
47 $result: $result + if(length($item) > 1, str-implode($item, $glue), $item); 70 $result: $result + if(list.length($item) > 1, str-implode($item, $glue), $item);
48 71
49 @if $item != nth($list, length($list)) { 72 @if $item != list.nth($list, list.length($list)) {
50 $result: $result + $glue; 73 $result: $result + $glue;
51 } 74 }
52 } 75 }
@@ -63,13 +86,13 @@
63/// 86///
64/// @return {list} A slice of the list 87/// @return {list} A slice of the list
65/// 88///
66@function list-slice($list, $start: 1, $end: length($list)) { 89@function list-slice($list, $start: 1, $end: list.length($list)) {
67 $result: (); 90 $result: ();
68 91
69 @if $end >= $start { 92 @if $end >= $start {
70 @for $i from $start through $end { 93 @for $i from $start through $end {
71 @if $i != 0 { 94 @if $i != 0 {
72 $result: append($result, nth($list, $i), list-separator($list)); 95 $result: list.append($result, list.nth($list, $i), list.separator($list));
73 } 96 }
74 } 97 }
75 } 98 }
@@ -86,11 +109,11 @@
86/// @return {list} A list with $value at the beginning, followed by the other items 109/// @return {list} A list with $value at the beginning, followed by the other items
87/// 110///
88@function list-prepend($list, $value) { 111@function list-prepend($list, $value) {
89 $result: append((), $value, list-separator($list)); 112 $result: list.append((), $value, list.separator($list));
90 113
91 @if length($list) > 0 { 114 @if list.length($list) > 0 {
92 @for $i from 1 through length($list) { 115 @for $i from 1 through list.length($list) {
93 $result: append($result, nth($list, $i), list-separator($list)); 116 $result: list.append($result, list.nth($list, $i), list.separator($list));
94 } 117 }
95 } 118 }
96 119
@@ -105,13 +128,13 @@
105/// @return {list} Teh reversed list 128/// @return {list} Teh reversed list
106/// 129///
107@function list-reverse($list) { 130@function list-reverse($list) {
108 @if length($list) == 0 { 131 @if list.length($list) == 0 {
109 @return $list; 132 @return $list;
110 } 133 }
111 134
112 $result: (); 135 $result: ();
113 @for $i from length($list) * -1 through -1 { 136 @for $i from list.length($list) * -1 through -1 {
114 $result: append($result, nth($list, abs($i))); 137 $result: list.append($result, list.nth($list, math.abs($i)));
115 } 138 }
116 @return $result; 139 @return $result;
117} 140}
@@ -126,11 +149,11 @@
126/// 149///
127/// @return {list} Sorted list 150/// @return {list} Sorted list
128/// 151///
129@function quicksort($l, $left: 1, $right: length($l)) { 152@function quicksort($l, $left: 1, $right: list.length($l)) {
130 @if $left < $right { 153 @if $left < $right {
131 $pvr: quicksort-partition($l, $left, $right); 154 $pvr: quicksort-partition($l, $left, $right);
132 $pivot: nth($pvr, 1); 155 $pivot: list.nth($pvr, 1);
133 $l: nth($pvr, 2); 156 $l: list.nth($pvr, 2);
134 $l: quicksort($l, $left, $pivot); 157 $l: quicksort($l, $left, $pivot);
135 $l: quicksort($l, $pivot + 1, $right); 158 $l: quicksort($l, $pivot + 1, $right);
136 } 159 }
@@ -145,30 +168,30 @@
145 $start: true; 168 $start: true;
146 $i: $left; 169 $i: $left;
147 $j: $right - 1; 170 $j: $right - 1;
148 $pivot: nth($l, $right); 171 $pivot: list.nth($l, $right);
149 172
150 @while ($i < $j) or $start { 173 @while ($i < $j) or $start {
151 @while (nth($l, $i) < $pivot) and ($i < $right - 1) { 174 @while (list.nth($l, $i) < $pivot) and ($i < $right - 1) {
152 $i: $i + 1; 175 $i: $i + 1;
153 } 176 }
154 177
155 @while (nth($l, $j)>= $pivot) and ($j > $left) { 178 @while (list.nth($l, $j)>= $pivot) and ($j > $left) {
156 $j: $j - 1; 179 $j: $j - 1;
157 } 180 }
158 181
159 @if $i < $j { 182 @if $i < $j {
160 $i-val: nth($l, $i); 183 $i-val: list.nth($l, $i);
161 $l: set-nth($l, $i, nth($l, $j)); 184 $l: list.set-nth($l, $i, list.nth($l, $j));
162 $l: set-nth($l, $j, $i-val); 185 $l: list.set-nth($l, $j, $i-val);
163 } 186 }
164 187
165 $start: false; 188 $start: false;
166 } 189 }
167 190
168 @if nth($l, $i) > $pivot { 191 @if list.nth($l, $i) > $pivot {
169 $i-val: nth($l, $i); 192 $i-val: list.nth($l, $i);
170 $l: set-nth($l, $i, nth($l, $right)); 193 $l: list.set-nth($l, $i, list.nth($l, $right));
171 $l: set-nth($l, $right, $i-val); 194 $l: list.set-nth($l, $right, $i-val);
172 } 195 }
173 196
174 @return $i $l; 197 @return $i $l;
@@ -185,10 +208,10 @@
185/// @return {any} Either the value assigned to $key or $default 208/// @return {any} Either the value assigned to $key or $default
186/// 209///
187@function map-get-default($map, $key, $keys...) { 210@function map-get-default($map, $key, $keys...) {
188 $default: nth($keys, length($keys)); 211 $default: list.nth($keys, list.length($keys));
189 $keys: list-slice($keys, 1, length($keys) - 1); 212 $keys: list-slice($keys, 1, list.length($keys) - 1);
190 213
191 @return if(map-has-key($map, $key, $keys...), map-get($map, $key, $keys...), $default); 214 @return if(map.has-key($map, $key, $keys...), map.get($map, $key, $keys...), $default);
192} 215}
193 216
194/// 217///
@@ -204,11 +227,11 @@
204 @each $key, $value in $map { 227 @each $key, $value in $map {
205 $value-str: ''; 228 $value-str: '';
206 229
207 @if type-of($value) == map { 230 @if meta.type-of($value) == map {
208 $value-str: '[ ' + map-print($value) + ' ]'; 231 $value-str: '[ ' + map-print($value) + ' ]';
209 } @else if type-of($value) == list { 232 } @else if meta.type-of($value) == list {
210 $value-str: '[ ' + str-implode($value, ', ') + ' ]'; 233 $value-str: '[ ' + str-implode($value, ', ') + ' ]';
211 } @else if type-of($value) == string { 234 } @else if meta.type-of($value) == string {
212 $value-str: '\'' + $value + '\''; 235 $value-str: '\'' + $value + '\'';
213 } @else { 236 } @else {
214 $value-str: $value; 237 $value-str: $value;
@@ -243,8 +266,8 @@
243 @if not $sel-match { 266 @if not $sel-match {
244 $suf-match: true; 267 $suf-match: true;
245 268
246 @for $i from 1 through length($suffix) { 269 @for $i from 1 through list.length($suffix) {
247 @if $suf-match and (nth($sel, -$i) != nth($suffix, -$i)) { 270 @if $suf-match and (list.nth($sel, -$i) != list.nth($suffix, -$i)) {
248 $suf-match: false; 271 $suf-match: false;
249 } 272 }
250 } 273 }
@@ -287,6 +310,61 @@
287 @return math.div($size, $base) * 1rem; 310 @return math.div($size, $base) * 1rem;
288} 311}
289 312
313///
314/// Casts a string into a number
315///
316/// @param {string|number} $value
317///
318/// @return {number}
319///
320@function to-number($value) {
321 @if meta.type-of($value) == 'number' {
322 @return $value;
323 }
324 @if meta.type-of($value) != 'string' {
325 @error 'Value for `to-number` should be a number or a string.';
326 }
327
328 $result: 0;
329 $digits: 0;
330 $minus: string.slice($value, 1, 1) == '-';
331
332 @for $i from if($minus, 2, 1) through string.length($value) {
333 $character: string.slice($value, $i, $i);
334
335 @if not list.index(map.keys($numbers), $character) and $character != '.' {
336 @return to-length(if($minus, -$result, $result), string.slice($value, $i))
337 }
338
339 @if $character == '.' {
340 $digits: 1;
341 } @else if $digits == 0 {
342 $result: $result * 10 + map.get($numbers, $character);
343 } @else {
344 $digits: $digits * 10;
345 $result: $result + math.div(map.get($numbers, $character), $digits);
346 }
347 }
348
349 @return if($minus, -$result, $result);
350}
351
352///
353/// Add $unit to $value
354///
355/// @param {number} $value - Value to add unit to
356/// @param {string} $unit - String representation of the unit
357///
358/// @return {number} $value expressed in $unit
359///
360@function to-length($value, $unit) {
361 @if not list.index(map.keys($units), $unit) {
362 @error 'Invalid unit `#{$unit}`.';
363 }
364
365 @return $value * map.get($units, $unit);
366 }
367
290/// 368///
291/// A mixin with the sole purpose of letting you use temporary variables without polluting the global namespace. 369/// A mixin with the sole purpose of letting you use temporary variables without polluting the global namespace.
292/// 370///
diff --git a/src/_props.scss b/src/_props.scss
index 8d84aa1..14295bd 100644
--- a/src/_props.scss
+++ b/src/_props.scss
@@ -11,6 +11,9 @@
11//// 11////
12 12
13@use 'sass:map'; 13@use 'sass:map';
14@use 'sass:list';
15@use 'sass:string';
16@use 'sass:meta';
14@use './functions'; 17@use './functions';
15@use './contexts'; 18@use './contexts';
16 19
@@ -63,7 +66,7 @@ $namespace-context-id: 'namespace' !default;
63 $ns-key: get-ns-key(); 66 $ns-key: get-ns-key();
64 67
65 @if $ns-key != null { 68 @if $ns-key != null {
66 $key: append($ns-key, $key); 69 $key: list.append($ns-key, $key);
67 } @else { 70 } @else {
68 $key: ($key); 71 $key: ($key);
69 } 72 }
@@ -84,8 +87,8 @@ $namespace-context-id: 'namespace' !default;
84@function namespace() { 87@function namespace() {
85 $noop: contexts.assert-stack-must-contain($namespace-context-id, 'namespace'); 88 $noop: contexts.assert-stack-must-contain($namespace-context-id, 'namespace');
86 89
87 $data: nth(contexts.get($namespace-context-id, 'namespace'), 2); 90 $data: list.nth(contexts.get($namespace-context-id, 'namespace'), 2);
88 $name: map-get($data, 'name'); 91 $name: map.get($data, 'name');
89 92
90 @return $name; 93 @return $name;
91} 94}
@@ -126,15 +129,15 @@ $namespace-context-id: 'namespace' !default;
126 } 129 }
127 } 130 }
128 131
129 @if map-has-key($trees, $tree) { 132 @if map.has-key($trees, $tree) {
130 @if $merge { 133 @if $merge {
131 $map: map.deep-merge(map-get($trees, $tree), $map); 134 $map: map.deep-merge(map.get($trees, $tree), $map);
132 } @else { 135 } @else {
133 @error 'Property tree #{inspect($tree)} does already exist.'; 136 @error 'Property tree #{inspect($tree)} does already exist.';
134 } 137 }
135 } 138 }
136 139
137 $trees: map-merge($trees, ($tree: $map)) !global; 140 $trees: map.merge($trees, ($tree: $map)) !global;
138 141
139 @return null; 142 @return null;
140} 143}
@@ -156,11 +159,11 @@ $namespace-context-id: 'namespace' !default;
156/// @throw If the property tree does not exist 159/// @throw If the property tree does not exist
157/// 160///
158@function clear($tree: $default-tree) { 161@function clear($tree: $default-tree) {
159 @if not map-has-key($trees, $tree) { 162 @if not map.has-key($trees, $tree) {
160 @error 'Property tree "#{inspect($tree)}" does not exist.'; 163 @error 'Property tree "#{inspect($tree)}" does not exist.';
161 } 164 }
162 165
163 $trees: map-remove($trees, $tree) !global; 166 $trees: map.remove($trees, $tree) !global;
164 167
165 @return null; 168 @return null;
166} 169}
@@ -177,11 +180,11 @@ $namespace-context-id: 'namespace' !default;
177/// @throw If there was no match for $key and $default is null 180/// @throw If there was no match for $key and $default is null
178/// 181///
179@function get-static($key: (), $tree: $default-tree, $default: null, $global: false) { 182@function get-static($key: (), $tree: $default-tree, $default: null, $global: false) {
180 @if not map-has-key($trees, $tree) { 183 @if not map.has-key($trees, $tree) {
181 @error 'Unknown tree "#{$tree}".'; 184 @error 'Unknown tree "#{$tree}".';
182 } 185 }
183 186
184 $result: map-get($trees, $tree); 187 $result: map.get($trees, $tree);
185 188
186 @if not $global { 189 @if not $global {
187 $ns-key: get-ns-key(); 190 $ns-key: get-ns-key();
@@ -190,28 +193,28 @@ $namespace-context-id: 'namespace' !default;
190 $orig-key: $key; 193 $orig-key: $key;
191 $key: $ns-key; 194 $key: $ns-key;
192 195
193 @if type-of($orig-key) == list { 196 @if meta.type-of($orig-key) == list {
194 @each $subkey in $orig-key { 197 @each $subkey in $orig-key {
195 $key: append($key, $subkey); 198 $key: list.append($key, $subkey);
196 } 199 }
197 } @else { 200 } @else {
198 $key: append($key, $orig-key); 201 $key: list.append($key, $orig-key);
199 } 202 }
200 } 203 }
201 } 204 }
202 205
203 @if type-of($key) == list { 206 @if meta.type-of($key) == list {
204 $stop: false; 207 $stop: false;
205 208
206 @each $k in $key { 209 @each $k in $key {
207 @if not $stop and map-has-key($result, $k) { 210 @if not $stop and map.has-key($result, $k) {
208 $result: map-get($result, $k); 211 $result: map.get($result, $k);
209 212
210 @if type-of($result) == list and nth($result, 1) == 'iro-prop-ref' { 213 @if meta.type-of($result) == list and list.nth($result, 1) == 'iro-prop-ref' {
211 @if length($result) == 2 { 214 @if list.length($result) == 2 {
212 $result: get-static($tree: nth($result, 2), $global: true); 215 $result: get-static($tree: list.nth($result, 2), $global: true);
213 } @else { 216 } @else {
214 $result: get-static(nth($result, 3), nth($result, 2), $global: true); 217 $result: get-static(list.nth($result, 3), nth($result, 2), $global: true);
215 } 218 }
216 } 219 }
217 } @else { 220 } @else {
@@ -223,13 +226,13 @@ $namespace-context-id: 'namespace' !default;
223 $result: null; 226 $result: null;
224 } 227 }
225 } @else { 228 } @else {
226 $result: map-get($result, $key); 229 $result: map.get($result, $key);
227 230
228 @if type-of($result) == list and nth($result, 1) == 'iro-prop-ref' { 231 @if meta.type-of($result) == list and list.nth($result, 1) == 'iro-prop-ref' {
229 @if length($result) == 2 { 232 @if list.length($result) == 2 {
230 $result: get-static($tree: nth($result, 2), $global: true); 233 $result: get-static($tree: list.nth($result, 2), $global: true);
231 } @else { 234 } @else {
232 $result: get-static(nth($result, 3), nth($result, 2), $global: true); 235 $result: get-static(list.nth($result, 3), nth($result, 2), $global: true);
233 } 236 }
234 } 237 }
235 } 238 }
@@ -256,7 +259,15 @@ $namespace-context-id: 'namespace' !default;
256/// 259///
257@function get($key, $tree: $default-tree, $default: null, $global: false) { 260@function get($key, $tree: $default-tree, $default: null, $global: false) {
258 @if $tree != null { 261 @if $tree != null {
259 $noop: get-static($key, $tree, $default, $global); 262 $value: get-static($key, $tree, $default, $global);
263
264 @if meta.type-of($value) == map {
265 $result: ();
266 @each $k in map.keys($value) {
267 $result: map.set($result, $k, get(list.append($key, $k), $tree, $default, $global));
268 }
269 @return $result;
270 }
260 } 271 }
261 272
262 @if not $global { 273 @if not $global {
@@ -266,19 +277,19 @@ $namespace-context-id: 'namespace' !default;
266 $orig-key: $key; 277 $orig-key: $key;
267 $key: $ns-key; 278 $key: $ns-key;
268 279
269 @if type-of($orig-key) == list { 280 @if meta.type-of($orig-key) == list {
270 @each $subkey in $orig-key { 281 @each $subkey in $orig-key {
271 $key: append($key, $subkey); 282 $key: list.append($key, $subkey);
272 } 283 }
273 } @else { 284 } @else {
274 $key: append($key, $orig-key); 285 $key: list.append($key, $orig-key);
275 } 286 }
276 } 287 }
277 } 288 }
278 289
279 $native-var: ''; 290 $native-var: '';
280 291
281 @if type-of($key) == list { 292 @if meta.type-of($key) == list {
282 @each $subkey in $key { 293 @each $subkey in $key {
283 $native-var: $native-var + $subkey; 294 $native-var: $native-var + $subkey;
284 } 295 }
@@ -299,11 +310,11 @@ $namespace-context-id: 'namespace' !default;
299/// @param {string} $tree [$default-tree] - ID of the property tree to use 310/// @param {string} $tree [$default-tree] - ID of the property tree to use
300/// @param {string} $root [()] - Sub-tree to use for assignment 311/// @param {string} $root [()] - Sub-tree to use for assignment
301/// 312///
302@mixin assign($tree: $default-tree, $root: (), $skip: (), $prefix: '', $global: false) { 313@mixin assign($tree: $default-tree, $root: (), $skip: (), $prefix: $root, $global: false) {
303 $map: get-static($root, $tree, $global: $global); 314 $map: get-static($root, $tree, $global: $global);
304 $map: map-remove($map, $skip...); 315 $map: map.remove($map, $skip...);
305 316
306 @if type-of($prefix) == list { 317 @if meta.type-of($prefix) == list {
307 $prefix: functions.str-implode($prefix); 318 $prefix: functions.str-implode($prefix);
308 } 319 }
309 320
@@ -324,19 +335,19 @@ $namespace-context-id: 'namespace' !default;
324@mixin assign-internal($map, $prefix: '', $ref-depth: $native-assign-max-depth) { 335@mixin assign-internal($map, $prefix: '', $ref-depth: $native-assign-max-depth) {
325 @each $key, $value in $map { 336 @each $key, $value in $map {
326 $rd: $ref-depth; 337 $rd: $ref-depth;
327 @if type-of($value) == list and length($value) > 0 and nth($value, 1) == 'iro-prop-ref' { 338 @if meta.type-of($value) == list and list.length($value) > 0 and list.nth($value, 1) == 'iro-prop-ref' {
328 @if $ref-depth != 0 { 339 @if $ref-depth != 0 {
329 $rd: $rd - 1; 340 $rd: $rd - 1;
330 @if length($value) == 2 { 341 @if list.length($value) == 2 {
331 $value: get-static($tree: nth($value, 2)); 342 $value: get-static($tree: list.nth($value, 2));
332 } @else { 343 } @else {
333 $value: get-static(nth($value, 3), nth($value, 2)); 344 $value: get-static(list.nth($value, 3), nth($value, 2));
334 } 345 }
335 } @else { 346 } @else {
336 $value: null; 347 $value: null;
337 } 348 }
338 } 349 }
339 @if type-of($value) != map and $value != () { 350 @if meta.type-of($value) != map and $value != () {
340 #{$prefix + $key}: #{$value}; 351 #{$prefix + $key}: #{$value};
341 } @else { 352 } @else {
342 @include assign-internal($value, $prefix + $key, $rd); 353 @include assign-internal($value, $prefix + $key, $rd);
@@ -351,11 +362,11 @@ $namespace-context-id: 'namespace' !default;
351/// 362///
352@function validate($map) { 363@function validate($map) {
353 @each $key, $value in $map { 364 @each $key, $value in $map {
354 @if str-index($key, '--') != 1 { 365 @if string.index($key, '--') != 1 {
355 @return false; 366 @return false;
356 } 367 }
357 368
358 @if type-of($value) == map { 369 @if meta.type-of($value) == map {
359 @if not validate($value) { 370 @if not validate($value) {
360 @return false; 371 @return false;
361 } 372 }
@@ -384,12 +395,12 @@ $namespace-context-id: 'namespace' !default;
384 $key: $ns-key; 395 $key: $ns-key;
385 396
386 @if $orig-key != null { 397 @if $orig-key != null {
387 @if type-of($orig-key) == list { 398 @if meta.type-of($orig-key) == list {
388 @each $subkey in $orig-key { 399 @each $subkey in $orig-key {
389 $key: append($key, $subkey); 400 $key: list.append($key, $subkey);
390 } 401 }
391 } @else { 402 } @else {
392 $key: append($key, $orig-key); 403 $key: list.append($key, $orig-key);
393 } 404 }
394 } 405 }
395 } 406 }
@@ -414,8 +425,8 @@ $namespace-context-id: 'namespace' !default;
414 @return null; 425 @return null;
415 } 426 }
416 427
417 $data: nth($ctx, 2); 428 $data: list.nth($ctx, 2);
418 $key: map-get($data, 'key'); 429 $key: map.get($data, 'key');
419 430
420 @return $key; 431 @return $key;
421} 432}