twbs / bootstrap

The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.
https://getbootstrap.com
MIT License
170.01k stars 78.76k forks source link

New color maps and functions (v5) #33412

Closed WinterSilence closed 3 years ago

WinterSilence commented 3 years ago

New color maps:

// Color maps

$blues: (
  "100": $blue-100,
  "200": $blue-200,
  "300": $blue-300,
  "400": $blue-400,
  "500": $blue-500,
  "600": $blue-600,
  "700": $blue-700,
  "800": $blue-800,
  "900": $blue-900
) !default;
$indigos: (
  "100": $indigo-100,
  "200": $indigo-200,
  "300": $indigo-300,
  "400": $indigo-400,
  "500": $indigo-500,
  "600": $indigo-600,
  "700": $indigo-700,
  "800": $indigo-800,
  "900": $indigo-900
) !default;
$purples: (
  "100": $purple-100,
  "200": $purple-200,
  "300": $purple-300,
  "400": $purple-400,
  "500": $purple-500,
  "600": $purple-600,
  "700": $purple-700,
  "800": $purple-800,
  "900": $purple-900
) !default;
$pinks: (
  "100": $pink-100,
  "200": $pink-200,
  "300": $pink-300,
  "400": $pink-400,
  "500": $pink-500,
  "600": $pink-600,
  "700": $pink-700,
  "800": $pink-800,
  "900": $pink-900
) !default;
$reds: (
  "100": $red-100,
  "200": $red-200,
  "300": $red-300,
  "400": $red-400,
  "500": $red-500,
  "600": $red-600,
  "700": $red-700,
  "800": $red-800,
  "900": $red-900
) !default;
$oranges: (
  "100": $orange-100,
  "200": $orange-200,
  "300": $orange-300,
  "400": $orange-400,
  "500": $orange-500,
  "600": $orange-600,
  "700": $orange-700,
  "800": $orange-800,
  "900": $orange-900
) !default;
$yellows: (
  "100": $yellow-100,
  "200": $yellow-200,
  "300": $yellow-300,
  "400": $yellow-400,
  "500": $yellow-500,
  "600": $yellow-600,
  "700": $yellow-700,
  "800": $yellow-800,
  "900": $yellow-900
) !default;
$greens: (
  "100": $green-100,
  "200": $green-200,
  "300": $green-300,
  "400": $green-400,
  "500": $green-500,
  "600": $green-600,
  "700": $green-700,
  "800": $green-800,
  "900": $green-900
) !default;
$teals: (
  "100": $teal-100,
  "200": $teal-200,
  "300": $teal-300,
  "400": $teal-400,
  "500": $teal-500,
  "600": $teal-600,
  "700": $teal-700,
  "800": $teal-800,
  "900": $teal-900
) !default;
$cyans: (
  "100": $cyan-100,
  "200": $cyan-200,
  "300": $cyan-300,
  "400": $cyan-400,
  "500": $cyan-500,
  "600": $cyan-600,
  "700": $cyan-700,
  "800": $cyan-800,
  "900": $cyan-900
) !default;

$color-maps: (
  "blue": $blues,
  "indigo": $indigos,
  "purple": $purples,
  "pink": $pinks,
  "red": $reds,
  "orange": $oranges,
  "yellow": $yellows,
  "green": $greens,
  "teal": $teals,
  "cyan": $cyans,
  "gray": $grays
) !default;

New color functions:

// Returns color from map.
//
// Example: `color: get-color("blue", "300"); background-color: get-color("green", 4);`
//
// @param {string} $color Color name ("red", "gray")
// @param {string|number} $index Color index ("900", 900 or 9)
// @param {map} $color-maps Map of color maps
// @return {color|null} Color or null
@function get-color($color, $index: "500", $maps: $color-maps) {
  @if type-of($index) != string {
    $index: quote(if ($index < 10, $index * 100, $index));
  }
  @return if (
      map-has-key($maps, $color, $index),
      map-get($maps, $color, $index),
      null
  );
}

// Replaces/sets color and returns updated map.
//
// Example: `$color-maps: set-color("green", "500", #0d9d1d);`
//
// @param {string} $color Color name ("red", "green")
// @param {string|number} $index Color index ("900", 900 or 9)
// @param {color} $value New value (#eee, #eeeeee or gray)
// @param {map} $maps Map of color maps
// @return {map} New map
@function set-color($color, $index, $value, $maps: $color-maps) {
  @if type-of($index) != string {
    $index: quote(if ($index < 10, $index * 100, $index));
  }
  $map: map-merge(map-get($maps, $color), ($index: $value));
  @return map-merge($maps, ($color: $map));
}

// Return shade/tint color.
//
// @param {color} $color Base color
// @param {number} $percentage Shade/tint %
// @param {color} $color-contrast-light White color
// @return {color}
@function calc-color($color, $percentage: 20%, $color-contrast-light: #fff) {
  @return if(
    color-contrast($color) == $color-contrast-light,
    shade-color($color, $percentage),
    tint-color($color, $percentage)
  )
}

and api utilities as mixins :)

If we replace colors in variables to get-color(), we can set new colors by set-color() without any problems.

mdo commented 3 years ago

Maps are coming in #32319