v4web-components
Version:
Stencil Component Starter
409 lines (345 loc) • 13.3 kB
CSS
/* @import url('../../css/variables.css'); */
:host {
display: block;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
button.max-width {
width: 100%;
}
button {
position: relative;
background-color: rgba(0, 0, 0, 0);
border-style: solid;
cursor: pointer;
outline: none;
}
button .label {
display: flex;
justify-content: center;
align-items: center;
gap: var(--lab-ds-semantic-selectable-space-gap-s);
}
.icon {
font-family: Material Symbols Outlined;
animation: spin 1s linear infinite;
font-size: var(--lab-ds-semantic-size-icon-s);
}
.large .icon {
font-size: var(--lab-ds-semantic-size-icon-sm);
}
.icon-loading {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
button .icon {
display: none;
}
button.loading .label {
opacity: 0;
}
button.loading .icon {
display: flex;
color: var(--lab-ds-semantic-color-bg-default);
animation: spin 1s linear infinite;
}
.leading-icon {
margin-top: -0.5rem;
margin-bottom: -0.5rem;
}
.step-icon {
margin-top: -0.5rem;
margin-bottom: -0.5rem;
}
.button.small {
padding-top: var(--lab-ds-semantic-selectable-space-padding-s);
padding-bottom: var(--lab-ds-semantic-selectable-space-padding-s);
padding-left: var(--lab-ds-semantic-selectable-space-padding-xl);
padding-right: var(--lab-ds-semantic-selectable-space-padding-xl);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
gap: var(--lab-ds-semantic-selectable-space-gap-s);
font: var(--lab-ds-component-button-typography-none-decoration-small);
font-family: var(--lab-ds-component-button-font-family);
font-size: var(--lab-ds-component-button-font-size-small);
font-weight: var(--lab-ds-component-button-font-weight);
line-height: var(--lab-ds-component-button-font-line-height-small);
text-transform: var(--lab-ds-core-font-letter-case-02);
}
.button.medium {
padding-top: var(--lab-ds-semantic-selectable-space-padding-sm);
padding-bottom: var(--lab-ds-semantic-selectable-space-padding-sm);
padding-left: var(--lab-ds-semantic-selectable-space-padding-xxxl);
padding-right: var(--lab-ds-semantic-selectable-space-padding-xxxl);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
gap: var(--lab-ds-semantic-selectable-space-gap-s);
font: var(--lab-ds-component-button-typography-none-decoration-medium);
font-family: var(--lab-ds-component-button-font-family);
font-size: var(--lab-ds-component-button-font-size-medium);
font-weight: var(--lab-ds-component-button-font-weight);
line-height: var(--lab-ds-component-button-font-line-height-medium);
text-transform: var(--lab-ds-core-font-letter-case-02);
}
.button.large {
padding-top: var(--lab-ds-semantic-selectable-space-padding-sm);
padding-bottom: var(--lab-ds-semantic-selectable-space-padding-sm);
padding-left: var(--lab-ds-semantic-selectable-space-padding-xxxl);
padding-right: var(--lab-ds-semantic-selectable-space-padding-xxxl);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
gap: var(--lab-ds-semantic-selectable-space-gap-s);
font: var(--lab-ds-component-button-typography-none-decoration-large);
font-family: var(--lab-ds-component-button-font-family);
font-size: var(--lab-ds-component-button-font-size-large);
font-weight: var(--lab-ds-component-button-font-weight);
line-height: var(--lab-ds-component-button-font-line-height-large);
text-transform: var(--lab-ds-core-font-letter-case-02);
}
.primary {
background-color: var(--lab-ds-semantic-selectable-color-primary-default);
border-color: var(--lab-ds-semantic-selectable-color-primary-default);
color: var(--lab-ds-semantic-color-fg-contrast-primary);
}
.primary:focus:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-default);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-selectable-color-primary-focus);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
}
.primary:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-hover);
border-color: var(--lab-ds-semantic-selectable-color-primary-hover);
}
.primary:active:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-press);
border-color: var(--lab-ds-semantic-selectable-color-primary-press);
}
.primary:disabled {
background-color: var(--lab-ds-semantic-color-bg-disabled);
border-color: var(--lab-ds-semantic-color-bg-disabled);
color: var(--lab-ds-semantic-color-fg-disabled);
cursor: not-allowed;
}
.primary.loading {
background-color: var(--lab-ds-semantic-selectable-color-primary-loading);
border-color: var(--lab-ds-semantic-selectable-color-primary-loading);
}
/* outlined properties */
.outlined {
color: var(--lab-ds-semantic-selectable-color-primary-default);
border-color: var(--lab-ds-semantic-selectable-color-primary-default);
border-width: var(--lab-ds-semantic-selectable-border-width-m);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
}
.outlined:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-hover);
color: var(--lab-ds-semantic-color-fg-default);
border-color: var(--lab-ds-semantic-selectable-color-primary-hover);
}
.outlined:focus:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-default);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-selectable-color-primary-focus);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
color: var(--lab-ds-semantic-color-fg-default);
}
.outlined:active:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-press);
color: var(--lab-ds-semantic-color-fg-default);
}
.outlined:disabled {
background-color: none;
color: var(--lab-ds-semantic-color-fg-disabled);
border-color: var(--lab-ds-semantic-color-fg-disabled);
border-width: var(--lab-ds-semantic-selectable-border-width-m);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
cursor: not-allowed;
}
.outlined.loading {
background-color: var(--lab-ds-semantic-selectable-color-primary-loading);
border: none;
}
/* link-button properties */
.link-button {
color: var(--lab-ds-semantic-color-fg-default);
border: none;
}
.link-button.small .label-text {
font: var(--lab-ds-component-button-typography-underlined-small);
text-decoration: underline;
}
.link-button.medium .label-text {
font: var(--lab-ds-component-button-typography-underlined-medium);
text-decoration: underline;
}
.link-button.large .label-text {
font: var(--lab-ds-component-button-typography-underlined-large);
text-decoration: underline;
}
.link-button:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-bg-hover);
color: var(--lab-ds-semantic-color-fg-default);
border: none;
}
.link-button:focus:not([disabled]) {
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-color-fg-default);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
color: var(--lab-ds-semantic-color-fg-default);
}
.link-button:active:not([disabled]) {
background-color: var(--lab-ds-semantic-color-bg-cloudy);
color: var(--lab-ds-semantic-color-fg-default);
border: none;
outline: none;
}
.link-button:disabled {
color: var(--lab-ds-semantic-color-fg-disabled);
border-color: var(--lab-ds-semantic-color-fg-disabled);
cursor: not-allowed;
}
.link-button.loading {
background-color: var(--lab-ds-semantic-color-bg-cloudy);
}
.link-button && .small {
font: var(--lab-ds-component-button-typography-underlined-small);
}
.link-button && .medium {
font: var(--lab-ds-component-button-typography-underlined-medium);
}
.link-button && .large {
font: var(--lab-ds-component-button-typography-underlined-large);
}
/* CTA properties */
.cta {
background-color: var(--lab-ds-semantic-selectable-color-primary-default);
color: var(--lab-ds-semantic-color-fg-default);
border: none;
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.cta:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-hover);
color: var(--lab-ds-semantic-color-fg-default);
box-shadow: var(--lab-ds-semantic-selectable-shadow-s);
animation: none;
}
.cta:focus:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-default);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-selectable-color-primary-focus);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
color: var(--lab-ds-semantic-color-fg-default);
}
.cta:active:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-primary-press);
color: var(--lab-ds-semantic-color-fg-default);
}
.cta:disabled {
background-color: var(--lab-ds-semantic-selectable-color-bg-disabled);
color: var(--lab-ds-semantic-color-fg-disabled);
animation: none;
cursor: not-allowed;
}
.cta.loading {
background-color: var(--lab-ds-semantic-selectable-color-primary-loading);
animation: none;
}
/* danger-primary properties */
.danger-primary {
background-color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
border-color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
color: var(--lab-ds-semantic-selectable-color-bg-pure);
}
.danger-primary:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-error-hover);
border-color: var(--lab-ds-semantic-selectable-color-error-hover);
color: var(--lab-ds-semantic-color-bg-default);
}
.danger-primary:focus:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
border-color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-selectable-color-error-focus);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
color: var(--lab-ds-semantic-color-bg-default);
}
.danger-primary:active:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-error-press);
border-color: var(--lab-ds-semantic-selectable-color-error-press);
color: var(--lab-ds-semantic-color-bg-default);
}
.danger-primary:disabled {
background-color: var(--lab-ds-semantic-selectable-color-bg-disabled);
border-color: var(--lab-ds-semantic-selectable-color-bg-disabled);
color: var(--lab-ds-semantic-color-fg-disabled);
cursor: not-allowed;
}
.danger-primary.loading {
background-color: var(--lab-ds-semantic-selectable-color-error-loading);
border-color: var(--lab-ds-semantic-selectable-color-error-loading);
}
/* danger-outlined properties */
.danger-outlined {
color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
border-color: var(--lab-ds-semantic-selectable-color-border-dark-error);
border-width: var(--lab-ds-semantic-selectable-border-width-m);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
}
.danger-outlined:hover:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-error-hover);
color: var(--lab-ds-semantic-selectable-color-bg-pure);
border-color: rgba(0, 0, 0, 0);
}
.danger-outlined:focus:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-bg-dark-error);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
outline-width: var(--lab-ds-semantic-selectable-border-width-m);
outline-style: solid;
outline-color: var(--lab-ds-semantic-selectable-color-error-focus);
outline-offset: var(--lab-ds-semantic-selectable-space-padding-xxs);
color: var(--lab-ds-semantic-color-bg-default);
}
.danger-outlined:active:not([disabled]) {
background-color: var(--lab-ds-semantic-selectable-color-error-press);
color: var(--lab-ds-semantic-color-bg-default);
}
.danger-outlined:disabled {
color: var(--lab-ds-semantic-color-fg-disabled);
border-color: var(--lab-ds-semantic-color-bg-disabled);
border-width: var(--lab-ds-semantic-selectable-border-width-m);
border-radius: var(--lab-ds-semantic-selectable-border-radius-xs);
cursor: not-allowed;
}
.danger-outlined.loading {
background-color: var(--lab-ds-semantic-selectable-color-error-loading);
color: var(--lab-ds-semantic-color-bg-default);
border-color: var(--lab-ds-semantic-selectable-color-error-loading);
}