@patreon/studio
Version:
Patreon Studio Design System
119 lines (103 loc) • 3.56 kB
CSS
.container {
/* CSS variable contracts - defaults */
--Toggle-backgroundColor: var(--global-bg-base-default);
--Toggle-backgroundColorHover: var(--global-bg-base-hover);
--Toggle-backgroundColorActive: var(--global-bg-base-pressed);
--Toggle-borderColor: var(--global-border-action-default);
--Toggle-handleColor: var(--global-content-muted-default);
--Toggle-checkmarkScale: calc(18 / 22);
--Toggle-handleScale: calc(18 / 22);
--Toggle-checkmarkOpacity: 0;
--Toggle-handleBoxShadow: var(--global-boxShadow-low);
--Toggle-spinnerMarginLeft: calc(50% + 2px);
--Toggle-spinnerOpacity: 0;
--Toggle-handleTranslate: 0;
/* Apply the variables */
align-items: center;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: none;
background-color: var(--Toggle-backgroundColor);
border: 1px solid var(--Toggle-borderColor);
border-radius: var(--global-radius-circle);
box-sizing: border-box;
display: flex;
height: 28px;
overflow: hidden;
padding: 0 6px;
position: relative;
width: 48px;
}
.container:hover {
background-color: var(--Toggle-backgroundColorHover);
}
.container:active {
background-color: var(--Toggle-backgroundColorActive);
}
/* Variant: isOn */
.container.isOn {
--Toggle-backgroundColor: var(--global-control-surface-default);
--Toggle-backgroundColorHover: var(--global-control-surface-hover);
--Toggle-backgroundColorActive: var(--global-control-surface-pressed);
--Toggle-spinnerMarginLeft: -2px;
--Toggle-checkmarkOpacity: 1;
--Toggle-checkmarkScale: 1;
--Toggle-borderColor: transparent;
--Toggle-handleColor: var(--global-control-action-default);
--Toggle-handleTranslate: calc(100% - 2px);
--Toggle-handleScale: 1;
}
.container.isOn svg {
transition-delay: var(--global-transition-fast-duration);
}
/* Variant: disabled */
.container.disabled {
--Toggle-backgroundColorHover: var(--Toggle-backgroundColor);
--Toggle-backgroundColorActive: var(--Toggle-backgroundColor);
--Toggle-handleBoxShadow: none;
cursor: not-allowed;
opacity: var(--global-opacity-disabled);
}
/* Variant: isLoading */
.container.isLoading {
--Toggle-spinnerOpacity: var(--global-opacity-disabled);
}
.handle {
background-color: var(--Toggle-handleColor);
border-radius: var(--global-radius-circle);
box-shadow: var(--Toggle-handleBoxShadow);
color: var(--Toggle-backgroundColor);
display: grid;
height: 22px;
left: 0;
margin: 2px;
place-items: center;
position: absolute;
top: 0;
transform: translateX(var(--Toggle-handleTranslate, 0)) scale(var(--Toggle-handleScale, 1));
transition: var(--global-transition-fast-duration) var(--global-transition-fast-easing);
transition-property: transform, opacity;
width: 22px;
z-index: 2;
/* stylelint-disable-next-line no-descending-specificity */
}
.handle svg {
height: 14px;
opacity: var(--Toggle-checkmarkOpacity);
transform: scale(var(--Toggle-checkmarkScale));
transition: var(--global-transition-regular-duration) var(--global-transition-regular-easing);
transition-property: transform, opacity;
width: 14px;
}
.loadingSpinnerWrapper {
margin: 2px;
margin-left: var(--Toggle-spinnerMarginLeft);
opacity: var(--Toggle-spinnerOpacity);
position: relative;
transform: scale(0.7);
transform-origin: center;
transition: var(--global-transition-fast-duration) var(--global-transition-fast-easing);
transition-property: transform, opacity;
z-index: 1;
}