You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

138 lines
2.7 KiB

@use 'core/_base' as *;
@use 'sass:selector';
@include setNamespace('button');
#{b()} {
display: inline-flex;
align-items: center;
justify-content: center;
white-space: nowrap;
cursor: pointer;
background: var(--color-canvas);
border: 1px solid var(--color-hairline);
border-radius: var(--radius-field);
padding: 0 20px;
height: 40px;
line-height: 1;
font-size: 14px;
font-weight: 500;
color: var(--color-ink);
transition: all 0.15s ease;
&#{m('primary')} {
background: var(--color-primary);
border-color: var(--color-primary);
color: var(--color-primary-content);
&:hover {
background: var(--color-primary-active);
border-color: var(--color-primary-active);
}
&:active {
opacity: 0.85;
}
&:disabled {
background: var(--color-primary-disabled);
border-color: var(--color-primary-disabled);
color: var(--color-muted);
cursor: not-allowed;
}
}
&#{m('secondary')} {
background: var(--color-canvas);
border-color: var(--color-hairline);
color: var(--color-ink);
&:hover {
background: var(--color-surface-soft);
}
&:active {
background: var(--color-surface-card);
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
}
&#{m('tertiary')} {
background: transparent;
border-color: transparent;
color: var(--color-ink);
&:hover {
background: var(--color-surface-soft);
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
}
&#{m('danger')} {
background: var(--color-error);
border-color: var(--color-error);
color: var(--color-error-content);
&:hover {
opacity: 0.9;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
}
&#{m('warning')} {
background: var(--color-warning);
border-color: var(--color-warning);
color: var(--color-warning-content);
&:hover {
opacity: 0.9;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
}
&:hover {
opacity: 1;
}
&:active {
opacity: 0.85;
}
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
// Size variants
&#{m('small')} {
height: 32px;
padding: 0 12px;
font-size: 13px;
}
&#{m('medium')} {
height: 40px;
padding: 0 20px;
font-size: 14px;
}
&#{m('large')} {
height: 48px;
padding: 0 24px;
font-size: 16px;
}
}
// Loading spinner
#{m('spinner')} {
display: inline-block;
width: 14px;
height: 14px;
border: 2px solid currentColor;
border-right-color: transparent;
border-radius: 50%;
animation: button-spinner 0.75s linear infinite;
margin-right: 8px;
}
@keyframes button-spinner {
to {
transform: rotate(360deg);
}
}