@harvest-profit/npk
Version:
NPK UI Design System
110 lines (98 loc) • 3.31 kB
CSS
.Switch {
--switch-font-size: var(--control-font-size);
--switch-width: 3rem;
--switch-height: 1.5rem;
--switch-slider-margin: 0.2rem;
--switch-slider-height: calc(var(--switch-height) - (var(--switch-slider-margin) * 2));
--switch-slider-width: calc(var(--switch-height) - (var(--switch-slider-margin) * 2));
--switch-bg-color: var(--control-bg-color--active);
--switch-active-bg-color: var(--control-bg-color--active-element);
--switch-slider-bg-color: var(--control-fg-color--active-element);
--switch-slider-active-bg-color: var(--control-fg-color--active-element);
--switch-border: none;
--switch-active-border: none;
--switch-slider-shadow: var(--control-inset-shadow-color) 0 1px 3px, var(--control-inset-shadow-color) 0 1px 2px;
display: inline-flex;
position: relative;
flex-direction: row;
align-items: center;
min-width: var(--switch-width);
> input[type="checkbox"],
> label > input[type="checkbox"] {
display: none;
pointer-events:none
}
&[data-variant="flat"] {
--switch-bg-color: transparent;
--switch-border: 1px solid var(--color-neutral-70);
--switch-active-bg-color: var(--control-bg-color--active-element);
--switch-slider-bg-color: var(--color-neutral-70);
--switch-slider-active-bg-color: var(--control-fg-color--active-element);
--switch-active-border: 1px solid var(--control-bg-color--active-element);
--switch-slider-shadow: none;
}
&[data-size="sm"] {
--switch-width: 2.25rem;
--switch-height: 1.25rem;
--switch-slider-margin: 0.15rem;
--switch-slider-height: calc(var(--switch-height) - (var(--switch-slider-margin) * 2));
--switch-slider-width: calc(var(--switch-height) - (var(--switch-slider-margin) * 2));
--switch-font-size: var(--control-small-font-size);
}
label {
font-size: var(--switch-font-size);
pointer-events:none;
margin-left: calc(var(--switch-width) + 0.3rem);
}
.Slider {
width: var(--switch-width);
height: var(--switch-height);
background-color: var(--switch-bg-color);
border-radius: 2em;
outline: var(--switch-border);
outline-offset: -1px;
cursor: pointer;
position: absolute;
bottom: 0;
left: 0;
right: 0;
top: 0;
margin: auto 0;
transition: .4s;
&::before {
background-color: var(--switch-slider-bg-color);
border-radius: var(--switch-height);
content: '';
height: var(--switch-slider-height);
width: var(--switch-slider-width);
position: absolute;
transition: .3s;
top: 0;
bottom: 0;
margin: auto;
left: var(--switch-slider-margin);
box-shadow: var(--switch-slider-shadow, none);
}
&[data-active="true"] {
background-color: var(--switch-active-bg-color);
outline: var(--switch-active-border);
&::before {
background-color: var(--switch-slider-active-bg-color);
}
&::before {
transform: translateX(calc(var(--switch-width) - var(--switch-slider-width) - (var(--switch-slider-margin) * 2)));
}
}
}
&[data-position="trailing"] {
flex-direction: row-reverse;
> label {
margin-left: 0;
margin-right: calc(var(--switch-width) + 0.3rem);
}
.Slider {
right: 0;
left: auto;
}
}
}