// usage: @include variations(unquote(" .check"), color, transparent); @mixin variations($extra, $property, $default){ @include generic-variations($extra, $default) { #{$property}: $material-color; }; } @mixin background-variations($extra, $default){ @include generic-variations($extra, $default) { background-color: $material-color; & when ($material-color = $btn-default) { color: $lightbg-text; } & when not ($material-color = $btn-default) { color: $material-text-color; } }; } @mixin text-variations($extra, $default){ @include generic-variations($extra, $default) { color: $material-color; }; } // // To use this mixin you should pass a function as final parameter to define // the style. In that definition you can use the following variables to define it. // // $material-color-name ---> "red", "green", "indigo" ... // $material-color-full-name ---> "red", "green-50", "indigo-400" ... // $material-color ---> #f44336, #e8f5e9, #5c6bc0 ... // $material-text-color ---> rgba(255,255,255,0.84), rgba(0,0,0,0.84), rgba(255,255,255,0.84) ... // @mixin generic-variations($extra, $default){ $contrast-factor: 40% !default; // bootstrap styles &#{$extra}, &-default#{$extra} { $material-color-name: "default" !default; $material-color-full-name: $material-color-name !default; $material-color: $default !default; $material-text-color: $darkbg-text !default; @content } &-black#{$extra} { $material-color-name: "black" !default; $material-color-full-name: $material-color-name !default; $material-color: $black !default; $material-text-color: $darkbg-text !default; @content } &-white#{$extra} { $material-color-name: "white" !default; $material-color-full-name: $material-color-name !default; $material-color: $white !default; $material-text-color: $lightbg-text !default; @content } &-inverse#{$extra} { $material-color-name: "inverse" !default; $material-color-full-name: $material-color-name !default; $material-color: $inverse !default; $material-text-color: contrast($inverse, $lightbg-text, $darkbg-text, $contrast-factor) !default; @content } &-primary#{$extra} { $material-color-name: "primary" !default; $material-color-full-name: $material-color-name !default; $material-color: $primary !default; $material-text-color: $darkbg-text !default; @content } &-success#{$extra} { $material-color-name: "success" !default; $material-color-full-name: $material-color-name !default; $material-color: $success !default; $material-text-color: $darkbg-text !default; @content } &-info#{$extra} { $material-color-name: "info" !default; $material-color-full-name: $material-color-name !default; $material-color: $info !default; $material-text-color: $darkbg-text !default; @content } &-warning#{$extra} { $material-color-name: "warning" !default; $material-color-full-name: $material-color-name !default; $material-color: $warning !default; $material-text-color: $darkbg-text !default; @content } &-danger#{$extra} { $material-color-name: "danger" !default; $material-color-full-name: $material-color-name !default; $material-color: $danger !default; $material-text-color: $darkbg-text !default; @content } // given a color build multiples depths $material-color-names: "red" "pink" "purple" "deep-purple" "indigo" "blue" "light-blue" "cyan" "teal" "green" "light-green" "lime" "yellow" "amber" "orange" "deep-orange" "brown" "grey" "blue-grey"; @each $material-color-name in $material-color-names //$material-color-numbers: ""; // single element empty string //@each $material-color-number in $material-color-numbers //&-material-#{$material-color-name}#{unquote($material-color-number)}#{$extra} { &-material-#{$material-color-name}#{$extra} { $material-color-full-name: "#{$material-color-name}#{$material-color-number}" !default; $material-color: $material-color-full-name !default; $material-text-color: contrast($material-color, $lightbg-text, $darkbg-text, $contrast-factor) !default; @content } } $all-variations: unquote("-default, -primary, -info, -success, -warning, -danger") !default;