@function mergeColorMaps($bulma-colors, $custom-colors) // we return at least bulma hardcoded colors $merged-colors: $bulma-colors // we want a map as input @if type-of($custom-colors) == 'map' @each $name, $components in $custom-colors // color name should be a string and colors pair a list with at least one element @if type-of($name) == 'string' and (type-of($components) == 'list' or type-of($components) == 'color') and length($components) >= 1 $color-base: null // the param can either be a single color // or a list of 2 colors @if type-of($components) == 'color' $color-base: $components @else if type-of($components) == 'list' $color-base: nth($components, 1) $color-invert: null // is an inverted color provided in the list @if length($components) > 1 $color-invert: nth($components, 2) // we only want a color as base color @if type-of($color-base) == 'color' // if inverted color is not provided or is not a color we compute it @if type-of($color-invert) != 'color' $color-invert: findColorInvert($color-base) // we merge this colors elements as map with bulma colors (we can override them this way, no multiple definition for the same name) $merged-colors: map_merge($merged-colors, ($name: ($color-base, $color-invert))) @return $merged-colors @function powerNumber($number, $exp) $value: 1 @if $exp > 0 @for $i from 1 through $exp $value: $value * $number @else if $exp < 0 @for $i from 1 through -$exp $value: $value / $number @return $value @function colorLuminance($color) $color-rgb: ('red': red($color),'green': green($color),'blue': blue($color)) @each $name, $value in $color-rgb $adjusted: 0 $value: $value / 255 @if $value < 0.03928 $value: $value / 12.92 @else $value: ($value + .055) / 1.055 $value: powerNumber($value, 2) $color-rgb: map-merge($color-rgb, ($name: $value)) @return (map-get($color-rgb, 'red') * .2126) + (map-get($color-rgb, 'green') * .7152) + (map-get($color-rgb, 'blue') * .0722) @function findColorInvert($color) @if (colorLuminance($color) > 0.55) @return rgba(#000, 0.7) @else @return #fff