rsuite
Version:
A suite of react components
189 lines (152 loc) • 3.52 kB
text/less
@import '../../styles/common';
@import 'mixin';
//
// Buttons
// --------------------------------------------------
// Base styles
// --------------------------------------------------
.@{ns}btn {
.btn;
}
.@{ns}btn-default,
.@{ns}btn-primary,
.@{ns}btn-subtle {
.button-ripple;
}
// Button Loading state
.@{ns}btn-loading {
color: transparent ;
position: relative;
cursor: default;
pointer-events: none;
> .@{ns}btn-spin {
&::before,
&::after {
content: '';
position: absolute;
width: @btn-loading-spin-default-diameter;
height: @btn-loading-spin-default-diameter;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
border-radius: 50%;
.@{ns}btn-xs& {
width: @btn-loading-spin-xs-diameter;
height: @btn-loading-spin-xs-diameter;
}
}
&::before {
border: @btn-loading-spin-ring-wide solid @btn-loading-spin-ring-color;
.@{ns}btn-primary& {
opacity: @btn-disabled-opacity;
}
}
&::after {
border-width: @btn-loading-spin-ring-wide;
border-color: @btn-spin-light-invert-color transparent transparent;
border-style: solid;
animation: buttonSpin 0.6s infinite linear;
.@{ns}btn-primary& {
border-top-color: @btn-spin-light-color;
}
}
}
}
// Alternate buttons
// --------------------------------------------------
// Default Button
// Rewrite common button style
.@{ns}btn-default {
color: @btn-default-color;
background: @btn-default-bg;
.btn-loading-reset(@btn-default-color, @btn-default-bg);
&,
& > .@{ns}icon {
.btn-transition();
}
&:focus {
color: @btn-default-color;
background-color: @btn-default-focus-bg;
}
&:hover {
color: @btn-default-hover-color;
background-color: @btn-default-hover-bg;
}
&:active,
&.@{ns}btn-active,
.@{ns}open > .@{ns}dropdown-toggle& {
color: @btn-default-color;
background-color: @btn-default-active-bg;
background-image: none;
&:hover,
&:focus,
&.focus {
color: @btn-default-color;
background-color: @btn-default-active-bg;
}
}
&.@{ns}btn-disabled,
.@{ns}dropdown-disabled & {
&,
&:hover,
&:focus,
&:active,
&:active:focus {
// Reset Opacity;
opacity: 1;
color: @btn-default-disabled-color;
background-color: @btn-default-disabled-bg;
}
}
.generate-spectrum-primary-btns();
}
// Primary Button
.@{ns}btn-primary {
.button-primary-variant(@btn-primary-color; @btn-primary-bg; @calc-readable-color: true);
.btn-loading-reset(@btn-primary-color; @btn-primary-bg);
&,
& > .@{ns}icon {
.btn-transition();
}
.generate-spectrum-primary-btns();
}
// Link buttons
.@{ns}btn-link {
.btn-transition(color);
.btn-link-variant(@btn-link-color);
.btn-loading-reset(@btn-link-color);
.generate-spectrum-link-btns();
}
// Subtle Button
.@{ns}btn-subtle {
.btn-subtle;
}
// Ghost Button
.@{ns}btn-ghost {
.btn-transition();
.btn-ghost-variant(@btn-ghost-color, @btn-ghost-border-color);
.generate-spectrum-ghost-btns();
}
// Button Sizes
// --------------------------------------------------
.@{ns}btn-lg {
.btn-lg;
}
.@{ns}btn-sm {
.btn-sm;
}
.@{ns}btn-xs {
.btn-xs;
}
// Block button
// --------------------------------------------------
.@{ns}btn-block {
display: block;
width: 100%;
// Vertically space out multiple block buttons
& + & {
margin-top: 5px;
}
}