// 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 dephs @mixin generic-variations-factory($material-color-name){ // given a color and its deph build css //@mixin generic-variations-factory-deep($material-color-number){ // // &-material-#{$material-color-name}#{$material-color-number}#{$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 // } // //} // //@include generic-variations-factory-deep(unquote("")); $material-color-numbers: ""; @each $material-color-number in $material-color-numbers &-material-#{$material-color-name}#{unquote($material-color-number)}#{$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 } } @include generic-variations-factory(unquote("red")); @include generic-variations-factory(unquote("pink")); @include generic-variations-factory(unquote("purple")); @include generic-variations-factory(unquote("deep-purple")); @include generic-variations-factory(unquote("indigo")); @include generic-variations-factory(unquote("blue")); @include generic-variations-factory(unquote("light-blue")); @include generic-variations-factory(unquote("cyan")); @include generic-variations-factory(unquote("teal")); @include generic-variations-factory(unquote("green")); @include generic-variations-factory(unquote("light-green")); @include generic-variations-factory(unquote("lime")); @include generic-variations-factory(unquote("yellow")); @include generic-variations-factory(unquote("amber")); @include generic-variations-factory(unquote("orange")); @include generic-variations-factory(unquote("deep-orange")); @include generic-variations-factory(unquote("brown")); @include generic-variations-factory(unquote("grey")); @include generic-variations-factory(unquote("blue-grey")); } $all-variations: unquote("-default, -primary, -info, -success, -warning, -danger") !default;