11@import " buttons-variables" ;
22
33// Outline Button Mixin
4- @mixin btn-outline-variant ($color , $active-color : darken ($color , 7.5% )) {
5- & .btn-outline {
6- color : $color !important ;
7- .active & , & :active , & .active , & :hover , & :focus {
8- border-color : $active-color !important ;
9- color : $active-color !important ;
10- background-color : rgba (0 , 0 , 0 , .05 ) !important ;
11- }
4+ @mixin btn-transparent-variant ($outline : false, $color : $btn-default-color , $color-hover : darken ($color , 7.5% ), $active-background : rgba ($color , .05 ), $active-border : darken ($color , 7.5% )) {
5+ // Set Border Color
6+ $border-color : transparent ;
7+ $border-color-hover : transparent ;
8+ $border-color-active : transparent ;
9+ @if $outline {
10+ $border-color : $color ;
11+ $border-color-hover : $color-hover ;
12+ $border-color-active : $active-border ;
13+ }
14+
15+ color : $color ;
16+ background-color : transparent ;
17+ border-color : $border-color ;
18+
19+ & :hover {
20+ color : $color-hover ;
21+ background-color : $active-background ;
22+ border-color : $border-color-hover ;
23+ }
24+
25+ & .active , .active > & {
26+ color : $active-border ;
27+ background-color : $active-background ;
1228 }
29+
30+ & :focus {
31+ box-shadow : 0 0 0 $btn-focus-width rgba ($color , .5 );
32+ }
33+ }
34+
35+ @mixin btn-outline-variant ($color , $color-hover : darken ($color , 7.5% ), $active-background : rgba ($color , .05 ), $active-border : darken ($color , 7.5% )) {
36+ @include btn-transparent-variant (true, $color , $color-hover , $active-background , $active-border );
1337}
1438
1539// Material Design Flat Button Mixin
16- @mixin btn-flat-variant ($color , $active-color : darken ($color , 7.5% )) {
17- & .btn-flat {
18- color : $color !important ;
19- .active & , & :active , & .active , & :hover , & :focus {
20- @if $btn-border-width > 0 {
21- border-color : transparent !important ;
22- }
23- color : $active-color !important ;
24- background-color : rgba (0 , 0 , 0 , .03 ) !important ;
25- }
26- }
40+ @mixin btn-flat-variant ($color , $color-hover : darken ($color , 7.5% ), $active-background : rgba ($color , .05 )) {
41+ @include btn-transparent-variant (false, $color , $color-hover , $active-background , transparent );
42+ }
43+
44+ @function _btn-color ($background ) {
45+ @return if (isLight ($background ), $btn-dark-color , $btn-light-color );
2746}
2847
2948// Master Button Variant Mixin (Calls Flat & Outline Button Mixins)
30- @mixin btn-variant ($background , $border , $active-background : darken ($background , 7.5% ), $active-border : darken ($border , 10% )) {
49+ @mixin btn-variant ($background , $border , $hover-background : darken ($background , 7.5% ), $hover-border : darken ($border , 10% ), $active-background : darken ($background , 10% ), $active-border : darken ($border , 12.5% )) {
50+ $color : _btn-color ($background );
51+ $active-color : _btn-color ($active-background );
52+ $hover-color : _btn-color ($hover-background );
53+
3154 @if $background != transparent {
3255 background-color : $background ;
56+ color : $color ;
57+ } @else {
58+ color : $btn-dark-color ;
3359 }
3460 @if $btn-border-width > 0 {
3561 border-color : $border ;
3662 }
37- @if isLight ($background ) {
38- color : color (" black" );
39- } @else {
40- // Only using here due to dark bg/light font.
41- // -webkit-font-smoothing: antialiased;
42- color : color (" white" );
63+ & :hover {
64+ @if ($background != $hover-background ) { background-color : $hover-background ; }
65+ @if ($hover-border != $border && $btn-border-width > 0 ) { border-color : $hover-border ; }
66+ color : $hover-color ;
4367 }
44- // Disabled comes first so active can properly restyle
45- .disabled & , & :disabled {
46- opacity : .5 ;
68+ .active > & , & .active {
69+ @if ($background != $active-background ) { background-color : $active-background ; }
70+ @if ($active-border != $border && $btn-border-width > 0 ) { border-color : $active-border ; }
71+ color : $active-color ;
4772 }
48- .active & , & :active , & .active , & :hover , & :focus {
49- background-color : $active-background ;
50- border-color : $active-border ;
51- text-decoration : none ;
52- @if isLight ($background ) {
53- color : $black ;
54- } @else {
55- color : $white ;
56- }
73+ & :focus {
74+ box-shadow : 0 0 0 $btn-focus-width rgba ($active-border , .5 );
5775 }
58- @include btn-outline-variant ($background , $active-background );
59- @include btn-flat-variant ($background , $active-background );
6076}
6177
6278// Button sizes
7389 @include btn-variant ($value , $value );
7490 }
7591 }
92+
93+ @each $color , $value in $theme-colors {
94+ .btn-outline-#{$color } {
95+ @include btn-outline-variant ($value );
96+ }
97+ }
98+
99+
100+ @each $color , $value in $theme-colors {
101+ .btn-flat-#{$color } {
102+ @include btn-flat-variant ($value )
103+ }
104+ }
76105}
0 commit comments