UNPKG

rsuite

Version:

A suite of react components

356 lines (301 loc) 8.53 kB
@import '../../styles/common'; @import '../../internals/Ripple/styles/mixins'; @import 'mixin.less'; // // Buttons // -------------------------------------------------- // Default Button .rs-btn { display: inline-flex; align-items: center; justify-content: center; margin-bottom: 0; // For input.btn font-weight: @btn-font-weight; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; transition: @btn-transition; // Reset border style in all browser border: var(--rs-btn-default-border, none); user-select: none; text-decoration: none; color: var(--rs-btn-default-text); background-color: var(--rs-btn-default-bg); border-radius: @btn-border-radius; .high-contrast-mode({ transition: none; }); .rs-btn-md(); .with-focus-ring(); .button-activated({ color: var(--rs-btn-default-hover-text); background-color: var(--rs-btn-default-hover-bg); text-decoration: none; }); .button-pressed({ color: var(--rs-btn-default-active-text); background-color: var(--rs-btn-default-active-bg); }); .button-disabled({ cursor: @cursor-disabled; color: var(--rs-btn-default-disabled-text); background-color: var(--rs-btn-default-disabled-bg); }); .with-ripple(); } .rs-btn-start-icon { line-height: 0; // Eliminate whitespace margin-right: @btn-icon-gap; } .rs-btn-end-icon { line-height: 0; // Eliminate whitespace margin-left: @btn-icon-gap; } // Appearance variants // -------------------------------------------------- // Primary Button .rs-btn-primary { color: var(--rs-btn-primary-text); background-color: var(--rs-btn-primary-bg); border: none; .button-activated({ color: var(--rs-btn-primary-text); background-color: var(--rs-btn-primary-hover-bg); }); .button-pressed({ color: var(--rs-btn-primary-text); background-color: var(--rs-btn-primary-active-bg); }); .button-disabled({ color: var(--rs-btn-primary-text); background-color: var(--rs-btn-primary-bg); opacity: 0.3; }); } // Subtle Button .rs-btn-subtle { color: var(--rs-btn-subtle-text); background-color: transparent; border: none; .button-activated({ color: var(--rs-btn-subtle-hover-text); background-color: var(--rs-btn-subtle-hover-bg); }); .button-pressed({ color: var(--rs-btn-subtle-active-text); background-color: var(--rs-btn-subtle-active-bg); }); .button-disabled({ color: var(--rs-btn-subtle-disabled-text); background: none; }); } // Link buttons .rs-btn-link { color: var(--rs-btn-link-text); background-color: transparent; border: none; .button-activated({ color: var(--rs-btn-link-hover-text); background-color: transparent; text-decoration: @link-hover-decoration; }); .button-pressed({ color: var(--rs-btn-link-active-text); background-color: transparent; }); .button-disabled({ color: var(--rs-btn-link-hover-text); background-color: transparent; text-decoration: none; opacity: 0.3; }); } // Ghost Button .rs-btn-ghost { color: var(--rs-btn-ghost-text); background-color: transparent; border: @btn-ghost-border-width solid var(--rs-btn-ghost-border); .button-activated({ color: var(--rs-btn-ghost-hover-text); background-color: transparent; border-color: var(--rs-btn-ghost-hover-border); box-shadow: 0 0 0 1px var(--rs-btn-ghost-hover-border); }); .button-pressed({ color: var(--rs-btn-ghost-active-text); background-color: transparent; border-color: var(--rs-btn-ghost-active-border); }); .button-disabled({ color: var(--rs-btn-ghost-text); background-color: transparent; opacity: 0.3; border-color: var(--rs-btn-ghost-border); box-shadow:none; }); } // Spectrum buttons each(@spectrum, .(@color) { @C200: var(~'--rs-@{color}-200'); @C300: var(~'--rs-@{color}-300'); @C400: var(~'--rs-@{color}-400'); @C500: var(~'--rs-@{color}-500'); @C600: var(~'--rs-@{color}-600'); @C700: var(~'--rs-@{color}-700'); @C800: var(~'--rs-@{color}-800'); @C900: var(~'--rs-@{color}-900'); .rs-btn-@{color} { --rs-btn-primary-bg: @C500; --rs-btn-primary-hover-bg: @C700; --rs-btn-primary-active-bg: @C800; --rs-btn-subtle-hover-bg: @C500; --rs-btn-subtle-hover-text: @B200; --rs-btn-subtle-active-bg: @C600; --rs-btn-subtle-active-text: @B800; --rs-btn-ghost-border: @C700; --rs-btn-ghost-text: @C700; --rs-btn-ghost-hover-border: @C900; --rs-btn-ghost-hover-text: @C800; --rs-btn-ghost-active-border: @C900; --rs-btn-ghost-active-text: @C900; --rs-btn-link-text: @C700; --rs-btn-link-hover-text: @C800; --rs-btn-link-active-text: @C900; --rs-iconbtn-primary-addon: @C600; --rs-iconbtn-primary-activated-addon: @C800; --rs-iconbtn-primary-pressed-addon: @C900; .dark-mode({ --rs-btn-primary-bg: @C700; --rs-btn-primary-hover-bg: @C500; --rs-btn-primary-active-bg: @C400; --rs-btn-subtle-hover-bg: @C600; --rs-btn-subtle-hover-text: #fff; --rs-btn-subtle-active-bg: @C400; --rs-btn-subtle-active-text: #fff; --rs-btn-ghost-border: @C500; --rs-btn-ghost-text: @C500; --rs-btn-ghost-hover-border: @C400; --rs-btn-ghost-hover-text: @C400; --rs-btn-ghost-active-border: @C200; --rs-btn-ghost-active-text: @C200; --rs-btn-link-text: @C500; --rs-btn-link-hover-text: @C400; --rs-btn-link-active-text: @C200; --rs-iconbtn-primary-addon: @C600; --rs-iconbtn-primary-activated-addon: @C400; --rs-iconbtn-primary-pressed-addon: @C300; }); .high-contrast-mode({ --rs-btn-primary-bg: @C700; --rs-btn-primary-hover-bg: @C600; --rs-btn-primary-active-bg: @C400; --rs-btn-subtle-hover-bg: @C600; --rs-btn-subtle-hover-text: var(--rs-gray-900); --rs-btn-subtle-active-bg: @C400; --rs-btn-subtle-active-text: var(--rs-gray-900); --rs-btn-ghost-border: @C500; --rs-btn-ghost-text: @C500; --rs-btn-ghost-hover-border: @C400; --rs-btn-ghost-hover-text: @C400; --rs-btn-ghost-active-border: @C200; --rs-btn-ghost-active-text: @C200; --rs-btn-link-text: @C500; --rs-btn-link-hover-text: @C400; --rs-btn-link-active-text: @C200; }); } }); // Button Sizes // -------------------------------------------------- .rs-btn-lg { .button-size-lg(); } .rs-btn-md { .button-size-md(); } .rs-btn-sm { .button-size-sm(); } .rs-btn-xs { .button-size-xs(); } // Block button // -------------------------------------------------- .rs-btn-block { width: 100%; // Vertically space out multiple block buttons & + & { margin-top: 5px; } } // Button Loading state .rs-btn-loading { color: transparent !important; position: relative; cursor: default; pointer-events: none; // Spinner > .rs-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%; z-index: 1; .rs-btn-xs& { width: @btn-loading-spin-xs-diameter; height: @btn-loading-spin-xs-diameter; } } &::before { border: @btn-loading-spin-ring-wide solid var(--rs-loader-ring); .rs-btn-primary& { border-color: rgba(248, 247, 250, 0.3); .high-contrast-mode({ border-color: var(--rs-loader-ring-inverse); }); } } &::after { border-width: @btn-loading-spin-ring-wide; border-color: var(--rs-loader-rotor) transparent transparent; border-style: solid; animation: buttonSpin 0.6s infinite linear; .rs-btn-primary& { border-top-color: #fff; .high-contrast-mode({ border-top-color: var(--rs-loader-rotor-inverse); }); } } } @keyframes buttonSpin { from { transform: rotate(0); } to { transform: rotate(360deg); } } } .btn-error() { .rs-btn-subtle(); --rs-btn-subtle-text: var(--rs-red-500); --rs-btn-subtle-hover-bg: var(--rs-red-500); --rs-btn-subtle-hover-text: #fff; --rs-btn-subtle-active-bg: var(--rs-red-600); --rs-btn-subtle-active-text: #fff; .dark-mode({ --rs-btn-subtle-hover-bg: var(--rs-red-600); --rs-btn-subtle-active-bg: var(--rs-red-400); }); }