mirror of
https://github.com/shoelace-style/webawesome.git
synced 2026-01-12 12:09:26 +00:00
392 lines
11 KiB
SCSS
392 lines
11 KiB
SCSS
@import 'component';
|
|
|
|
:host {
|
|
display: inline-block;
|
|
width: auto;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.button {
|
|
display: inline-flex;
|
|
align-items: stretch;
|
|
justify-content: center;
|
|
width: 100%;
|
|
border-style: solid;
|
|
border-width: var(--sl-input-border-width);
|
|
font-family: var(--sl-input-font-family);
|
|
font-weight: var(--sl-font-weight-semibold);
|
|
text-decoration: none;
|
|
user-select: none;
|
|
white-space: nowrap;
|
|
vertical-align: middle;
|
|
transition: var(--sl-transition-fast) background-color, var(--sl-transition-fast) color,
|
|
var(--sl-transition-fast) border, var(--sl-transition-fast) box-shadow;
|
|
cursor: inherit;
|
|
|
|
&::-moz-focus-inner {
|
|
border: 0;
|
|
}
|
|
|
|
&:focus {
|
|
outline: none;
|
|
}
|
|
|
|
&.button--disabled {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
|
|
// When disabled, prevent mouse events from bubbling up
|
|
* {
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
// Clicks on icons shouldn't prevent the button from gaining focus
|
|
::slotted(sl-icon) {
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
.button__prefix,
|
|
.button__suffix {
|
|
flex: 0 0 auto;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.button__prefix ::slotted(:first-child) {
|
|
margin-left: calc(-1 * var(--sl-spacing-x-small));
|
|
margin-right: var(--sl-spacing-x-small);
|
|
}
|
|
|
|
.button__suffix ::slotted(:last-child) {
|
|
margin-left: var(--sl-spacing-x-small);
|
|
margin-right: calc(-1 * var(--sl-spacing-x-small));
|
|
}
|
|
|
|
.button__label {
|
|
::slotted(sl-icon) {
|
|
vertical-align: -2px;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Standard buttons
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button {
|
|
&.button--default {
|
|
background-color: var(--sl-color-white);
|
|
border-color: var(--sl-color-gray-300);
|
|
color: var(--sl-color-gray-600);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-50);
|
|
border-color: var(--sl-color-primary-300);
|
|
color: var(--sl-color-primary-600);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-50);
|
|
border-color: var(--sl-color-primary-300);
|
|
color: var(--sl-color-primary-600);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-primary);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-100);
|
|
border-color: var(--sl-color-primary-400);
|
|
color: var(--sl-color-primary-700);
|
|
}
|
|
}
|
|
|
|
&.button--primary {
|
|
background-color: var(--sl-color-primary-500);
|
|
border-color: var(--sl-color-primary-500);
|
|
color: var(--sl-color-primary-text);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-400);
|
|
border-color: var(--sl-color-primary-400);
|
|
color: var(--sl-color-primary-text);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-400);
|
|
border-color: var(--sl-color-primary-400);
|
|
color: var(--sl-color-primary-text);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-primary);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-primary-500);
|
|
border-color: var(--sl-color-primary-500);
|
|
color: var(--sl-color-primary-text);
|
|
}
|
|
}
|
|
|
|
&.button--success {
|
|
background-color: var(--sl-color-success-500);
|
|
border-color: var(--sl-color-success-500);
|
|
color: var(--sl-color-success-text);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-success-400);
|
|
border-color: var(--sl-color-success-400);
|
|
color: var(--sl-color-success-text);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-success-400);
|
|
border-color: var(--sl-color-success-400);
|
|
color: var(--sl-color-success-text);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-success);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-success-500);
|
|
border-color: var(--sl-color-success-500);
|
|
color: var(--sl-color-success-text);
|
|
}
|
|
}
|
|
|
|
&.button--info {
|
|
background-color: var(--sl-color-info-500);
|
|
border-color: var(--sl-color-info-500);
|
|
color: var(--sl-color-info-text);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-info-400);
|
|
border-color: var(--sl-color-info-400);
|
|
color: var(--sl-color-info-text);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-info-400);
|
|
border-color: var(--sl-color-info-400);
|
|
color: var(--sl-color-info-text);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-info);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-info-500);
|
|
border-color: var(--sl-color-info-500);
|
|
color: var(--sl-color-info-text);
|
|
}
|
|
}
|
|
|
|
&.button--warning {
|
|
background-color: var(--sl-color-warning-500);
|
|
border-color: var(--sl-color-warning-500);
|
|
color: var(--sl-color-warning-text);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-warning-400);
|
|
border-color: var(--sl-color-warning-400);
|
|
color: var(--sl-color-warning-text);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-warning-400);
|
|
border-color: var(--sl-color-warning-400);
|
|
color: var(--sl-color-warning-text);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-warning);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-warning-500);
|
|
border-color: var(--sl-color-warning-500);
|
|
color: var(--sl-color-warning-text);
|
|
}
|
|
}
|
|
|
|
&.button--danger {
|
|
background-color: var(--sl-color-danger-500);
|
|
border-color: var(--sl-color-danger-500);
|
|
color: var(--sl-color-danger-text);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: var(--sl-color-danger-400);
|
|
border-color: var(--sl-color-danger-400);
|
|
color: var(--sl-color-danger-text);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: var(--sl-color-danger-400);
|
|
border-color: var(--sl-color-danger-400);
|
|
color: var(--sl-color-danger-text);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-danger);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: var(--sl-color-danger-500);
|
|
border-color: var(--sl-color-danger-500);
|
|
color: var(--sl-color-danger-text);
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Text buttons
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--text {
|
|
background-color: transparent;
|
|
border-color: transparent;
|
|
color: var(--sl-color-primary-500);
|
|
|
|
&:hover:not(.button--disabled) {
|
|
background-color: transparent;
|
|
border-color: transparent;
|
|
color: var(--sl-color-primary-400);
|
|
}
|
|
|
|
&:focus:not(.button--disabled) {
|
|
background-color: transparent;
|
|
border-color: transparent;
|
|
color: var(--sl-color-primary-400);
|
|
box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-focus-ring-color-primary);
|
|
}
|
|
|
|
&:active:not(.button--disabled) {
|
|
background-color: transparent;
|
|
border-color: transparent;
|
|
color: var(--sl-color-primary-600);
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Size modifiers
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--small {
|
|
font-size: var(--sl-button-font-size-small);
|
|
height: var(--sl-input-height-small);
|
|
line-height: calc(var(--sl-input-height-small) - var(--sl-input-border-width) * 2);
|
|
border-radius: var(--sl-input-border-radius-small);
|
|
padding: 0 var(--sl-spacing-medium);
|
|
}
|
|
|
|
.button--medium {
|
|
font-size: var(--sl-button-font-size-medium);
|
|
height: var(--sl-input-height-medium);
|
|
line-height: calc(var(--sl-input-height-medium) - var(--sl-input-border-width) * 2);
|
|
border-radius: var(--sl-input-border-radius-medium);
|
|
padding: 0 var(--sl-spacing-large);
|
|
}
|
|
|
|
.button--large {
|
|
font-size: var(--sl-button-font-size-large);
|
|
height: var(--sl-input-height-large);
|
|
line-height: calc(var(--sl-input-height-large) - var(--sl-input-border-width) * 2);
|
|
border-radius: var(--sl-input-border-radius-large);
|
|
padding: 0 var(--sl-spacing-x-large);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Pill modifier
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--pill {
|
|
&.button--small {
|
|
border-radius: var(--sl-input-height-small);
|
|
}
|
|
|
|
&.button--medium {
|
|
border-radius: var(--sl-input-height-medium);
|
|
}
|
|
|
|
&.button--large {
|
|
border-radius: var(--sl-input-height-large);
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Circle modifier
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--circle {
|
|
padding-left: 0;
|
|
padding-right: 0;
|
|
|
|
&.button--small {
|
|
width: var(--sl-input-height-small);
|
|
border-radius: 50%;
|
|
}
|
|
|
|
&.button--medium {
|
|
width: var(--sl-input-height-medium);
|
|
border-radius: 50%;
|
|
}
|
|
|
|
&.button--large {
|
|
width: var(--sl-input-height-large);
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.button__prefix,
|
|
.button__suffix,
|
|
.button__caret {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Caret modifier
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--caret {
|
|
.button__suffix {
|
|
display: none;
|
|
}
|
|
|
|
.button__caret {
|
|
display: flex;
|
|
align-items: center;
|
|
margin-left: var(--sl-spacing-xx-small);
|
|
margin-right: calc(-1 * var(--sl-spacing-xx-small));
|
|
|
|
svg {
|
|
width: 1em;
|
|
height: 1em;
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Loading modifier
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button--loading {
|
|
position: relative;
|
|
cursor: wait;
|
|
|
|
.button__prefix,
|
|
.button__label,
|
|
.button__suffix,
|
|
.button__caret {
|
|
visibility: hidden;
|
|
}
|
|
|
|
sl-spinner {
|
|
--indicator-color: currentColor;
|
|
position: absolute;
|
|
height: 1em;
|
|
width: 1em;
|
|
top: calc(50% - 0.5em);
|
|
left: calc(50% - 0.5em);
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Badges
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
.button ::slotted(sl-badge) {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
transform: translateY(-50%) translateX(50%);
|
|
pointer-events: none;
|
|
}
|