From aa06a202b25b6e9fb0662785f91a9930cc3d0752 Mon Sep 17 00:00:00 2001 From: Romaric Pascal Date: Wed, 9 Mar 2022 12:05:48 +0000 Subject: [PATCH] Add functions and mixins to manipulate the utlities map - get options, a specific option or a specific value for a given utility - set options, new values or remove values for a given utility - add or remove utilities --- scss/mixins/_utilities.scss | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/scss/mixins/_utilities.scss b/scss/mixins/_utilities.scss index 4795e89400..8311e1321a 100644 --- a/scss/mixins/_utilities.scss +++ b/scss/mixins/_utilities.scss @@ -95,3 +95,85 @@ } } } + +// Helper functions and mixins for manipulating the utilities map + +// Gets the map of options for a given utility +@function utilities-get-options($utility-name) { + @return map-get($utilities, $utility-name); +} + +// Gets the value of a specific option for a given utility +@function utilities-get-option($utility-name, $option-name) { + @return map-get( + utilities-get-options($utility-name), + $option-name + ); +} + +// Gets a specific value for the given utility +@function utilities-get-value($utility-name, $value-name) { + @return map-get( + utility-get-option($utility-name, values), + $value-name + ); +} + + +// Set options for a given utility, merged with the existing ones by default. +// To completely replace the existing options, set the 3rd `$merge` parameter to false +@mixin utilities-set-options($utility-name, $options, $merge: true) { + + @if($merge) { + $options: map-merge( + utilities-get-options($utility-name), + $options + ) + } + + $utilities: map-merge($utilities, + $utility-name: $options + ) +} + +// Set a specific option to a new value for the given utility +@mixin utilities-set-option($utility-name, $option-name, $value) { + @include utilities-set-options($utility-name, ($option-name: $value)); +} + +// Add new values to a given utility. +// If you want to completely reconfigure the values +// use `utility-set-option` to provide a new map +// for the `values` option +@mixin utilities-add-values($utility-name, $values) { + @include utilities-set-option( + $utility-name, + values, + map-merge( + utility-get-option($utility-name, values), + $values + ) + ) +} + +// Remove specific values from a given utility +@mixin utilities-remove-values($utility-name, $value-names...) { + + $values: utility-get-option($utility-name, values); + + $updated-values: map-remove($values, $value-names); + + @include utility-set-option($utility-name, values, $updated-values); +} + +// Add a new utility to the utilities map +@mixin utilities-add($utility-name, $utility) { + $utilities: map-merge($utilities, + ($utility-name: $utility) + ); +} + +// Remove a utility from the utilities map +@mixin utilities-remove($utility-names...) { + $utilities: map-remove($utility, $utility-names); +} -- 2.47.2