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.
Connected.Components/Styles/components/_slider.scss

212 lines
5.2 KiB

@import '../abstracts/variables';
.slider {
color: var(--palette-text-primary);
display: inline-block;
width: 100%;
user-select: none;
& > .typography {
margin-top: 10px;
}
&.slider-vertical {
transform: rotate(270deg);
height: 100%;
width: unset;
}
.slider-input {
-webkit-appearance: none;
-moz-appearance: none;
position: relative;
display: block;
width: 100%;
background-color: transparent;
cursor: pointer;
&:focus {
outline: none;
}
&:active {
& + .slider-value-label {
opacity: 1;
}
}
@include slider-track {
border-radius: var(--default-borderradius);
width: 100%;
}
@include slider-thumb {
appearance: none;
-webkit-appearance: none;
border: none;
border-radius: 50%;
cursor: pointer;
transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
}
&:disabled {
cursor: default;
opacity: 0.38;
@include slider-track {
background-color: var(--palette-text-disabled);
}
@include slider-thumb {
background-color: rgb( 0, 0, 0);
color: rgb(255, 255, 255);
box-shadow: 0 0 0 1px rgb( 255, 255, 255) !important;
transform: scale(4, 4);
&:hover {
box-shadow: 0 0 0 1px rgb( 255, 255, 255) !important;
}
}
}
}
@each $color in $palette-colors {
&.slider-#{$color} {
.slider-filled {
background-color: var(--palette-#{$color});
}
.slider-track-tick {
background-color: var(--palette-#{$color});
}
.slider-value-label {
color: var(--palette-#{$color}-text);
background-color: var(--palette-#{$color});
}
.slider-input {
@include slider-track {
background-color: rgba(var(--palette-#{$color}-rgb), 0.30);
}
@include slider-thumb {
background-color: var(--palette-#{$color});
box-shadow: 0px 1px 2px -1px rgba(var(--palette-#{$color}-rgb),0.3);
}
@include slider-thumb {
&:hover {
box-shadow: 0px 1px 2px -1px rgba(var(--palette-#{$color}-rgb),0.3),0 0 0 1px rgba(var(--palette-#{$color}-rgb), 0.24);
}
}
&:active, &:focus-visible {
@include slider-thumb {
box-shadow: 0px 1px 2px -1px rgba(var(--palette-#{$color}-rgb),0.3),0 0 0 2px rgba(var(--palette-#{$color}-rgb), 0.24);
}
}
}
}
}
$slider-sizes: ("small": 2, "medium": 4, "large": 6);
$tickcount: 50;
$margincount: 10;
$thumbscale: 6;
@each $size, $value in $slider-sizes {
&.slider-#{$size} {
.slider-filled {
height: #{$value}px;
}
.slider-track-tick {
width: #{$value}px;
height: #{$value}px;
}
.slider-track-tick-label {
transform: translateX(-50%) translateY(#{$tickcount + "%"});
}
.slider-input {
@include slider-track {
height: #{$value}px;
margin: #{$margincount}px 0;
}
@include slider-thumb {
height: #{$value}px;
width: #{$value}px;
transform: scale(#{$thumbscale}, #{$thumbscale});
}
}
}
$tickcount: $tickcount + 30;
$margincount: $margincount + 2;
$thumbscale: $thumbscale - 1;
}
.slider-container {
position: relative;
width: 100%;
display: flex;
align-content: center;
}
.slider-filled {
border-radius: var(--default-borderradius);
}
.slider-inner-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
}
.slider-value-label {
position: absolute;
top: 0;
transform: translateX(-50%) translateY(-125%);
padding: 4px 8px;
text-align: center;
align-items: center;
justify-content: center;
font-size: 12px;
border-radius: 2px;
line-height: normal;
opacity: 0;
transition: opacity .2s ease-in-out;
pointer-events: none;
user-select: none;
}
.slider-tickmarks {
display: flex;
justify-content: space-between;
flex-grow: 1;
}
.slider-track-tick {
border-radius: 9999%;
background-color: var(--palette-primary);
}
.slider-track-tick-label {
position: absolute;
top: 0;
left: 0;
}
}