65 lines
2.5 KiB
Sass
65 lines
2.5 KiB
Sass
@use 'sass:list'
|
|
@use 'sass:map'
|
|
@use 'sass:meta'
|
|
|
|
=generate-utility($utility, $infix, $forceDir)
|
|
$values: map.get($utility, values)
|
|
|
|
// If the values are a list or string, convert it into a map
|
|
@if meta.type-of($values) == "string" or meta.type-of(list.nth($values, 1)) != "list"
|
|
$values: list.zip($values, $values)
|
|
|
|
@each $value in $values
|
|
$properties: map.get($utility, property)
|
|
|
|
// Multiple properties are possible, for example with vertical or horizontal margins or paddings
|
|
@if meta.type-of($properties) == 'string'
|
|
$properties: list.append((), $properties)
|
|
|
|
// Property can be a map, where the key is a mixin to include
|
|
@if meta.type-of($properties) == 'map'
|
|
@each $dir in $properties
|
|
$mixin: list.nth($dir, 1)
|
|
// SASS doesn't support dynamic mixin invocation
|
|
// https://github.com/sass/sass/issues/626
|
|
@if $mixin == 'ltr'
|
|
.v-locale--is-ltr
|
|
+generate-utility-body($utility, list.nth($dir, 2), $value, $infix)
|
|
@else if $mixin == 'rtl'
|
|
.v-locale--is-rtl
|
|
+generate-utility-body($utility, list.nth($dir, 2), $value, $infix)
|
|
@else
|
|
@error 'Only RTL and LTR are supported'
|
|
@else
|
|
@if $forceDir == 'ltr'
|
|
.v-locale--is-ltr
|
|
+generate-utility-body($utility, $properties, $value, $infix)
|
|
@else if $forceDir == 'rtl'
|
|
.v-locale--is-rtl
|
|
+generate-utility-body($utility, $properties, $value, $infix)
|
|
@else
|
|
+generate-utility-body($utility, $properties, $value, $infix)
|
|
|
|
=generate-utility-body($utility, $properties, $value, $infix)
|
|
// Use custom class if present
|
|
$property-class: map.get($utility, class)
|
|
$property-class: if($property-class, $property-class, list.nth($properties, 1))
|
|
|
|
// Don't prefix if value key is null (eg. with shadow class)
|
|
$property-class-modifier: if(list.nth($value, 1), "-" + list.nth($value, 1), "")
|
|
|
|
$value: list.nth($value, 2)
|
|
|
|
.#{$property-class + $infix + $property-class-modifier}
|
|
@for $i from 1 through list.length($properties)
|
|
$property: list.nth($properties, $i)
|
|
$val: $value
|
|
@if meta.type-of($value) == 'list' and list.length($properties) == list.length($value)
|
|
$val: list.nth($value, $i)
|
|
@if $val != false
|
|
// Check if unimportant property exists.
|
|
// This allows you to conditional skip
|
|
// defining a property as important.
|
|
$unimportant: map.get($utility, unimportant)
|
|
#{$property}: #{meta.inspect($val) if(list.index($unimportant, $property), null, !important)}
|