shoelace/src/components/range/range.styles.ts

193 wiersze
5.4 KiB
TypeScript

import { css } from 'lit';
import { focusVisibleSelector } from '~/internal/focus-visible';
import componentStyles from '~/styles/component.styles';
import formControlStyles from '~/styles/form-control.styles';
export default css`
${componentStyles}
${formControlStyles}
:host {
--thumb-size: 20px;
--tooltip-offset: 10px;
--track-color-active: var(--sl-color-neutral-200);
--track-color-inactive: var(--sl-color-neutral-200);
--track-height: 6px;
display: block;
}
.range {
position: relative;
}
.range__control {
-webkit-appearance: none;
border-radius: 3px;
width: 100%;
height: var(--track-height);
background: transparent;
line-height: var(--sl-input-height-medium);
vertical-align: middle;
}
/* Webkit */
.range__control::-webkit-slider-runnable-track {
width: 100%;
height: var(--track-height);
border-radius: 3px;
border: none;
}
.range__control::-webkit-slider-thumb {
border: none;
width: var(--thumb-size);
height: var(--thumb-size);
border-radius: 50%;
background-color: var(--sl-color-primary-600);
border: solid var(--sl-input-border-width) var(--sl-color-primary-600);
-webkit-appearance: none;
margin-top: calc(var(--thumb-size) / -2 + var(--track-height) / 2);
transition: var(--sl-transition-fast) border-color, var(--sl-transition-fast) background-color,
var(--sl-transition-fast) color, var(--sl-transition-fast) box-shadow, var(--sl-transition-fast) transform;
cursor: pointer;
}
.range__control:enabled::-webkit-slider-thumb:hover {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
}
.range__control:enabled${focusVisibleSelector}::-webkit-slider-thumb {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
box-shadow: var(--sl-focus-ring);
}
.range__control:enabled::-webkit-slider-thumb:active {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
cursor: grabbing;
}
/* Firefox */
.range__control::-moz-focus-outer {
border: 0;
}
.range__control::-moz-range-progress {
background-color: var(--track-color-active);
border-radius: 3px;
height: var(--track-height);
}
.range__control::-moz-range-track {
width: 100%;
height: var(--track-height);
background-color: var(--track-color-inactive);
border-radius: 3px;
border: none;
}
.range__control::-moz-range-thumb {
border: none;
height: var(--thumb-size);
width: var(--thumb-size);
border-radius: 50%;
background-color: var(--sl-color-primary-600);
border-color: var(--sl-color-primary-600);
transition: var(--sl-transition-fast) border-color, var(--sl-transition-fast) background-color,
var(--sl-transition-fast) color, var(--sl-transition-fast) box-shadow, var(--sl-transition-fast) transform;
cursor: pointer;
}
.range__control:enabled::-moz-range-thumb:hover {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
}
.range__control:enabled${focusVisibleSelector}::-moz-range-thumb {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
box-shadow: var(--sl-focus-ring);
}
.range__control:enabled::-moz-range-thumb:active {
background-color: var(--sl-color-primary-500);
border-color: var(--sl-color-primary-500);
cursor: grabbing;
}
/* States */
.range__control${focusVisibleSelector} {
outline: none;
}
.range__control:disabled {
opacity: 0.5;
}
.range__control:disabled::-webkit-slider-thumb {
cursor: not-allowed;
}
.range__control:disabled::-moz-range-thumb {
cursor: not-allowed;
}
/* Tooltip output */
.range__tooltip {
position: absolute;
z-index: var(--sl-z-index-tooltip);
left: 1px;
border-radius: var(--sl-tooltip-border-radius);
background-color: var(--sl-tooltip-background-color);
font-family: var(--sl-tooltip-font-family);
font-size: var(--sl-tooltip-font-size);
font-weight: var(--sl-tooltip-font-weight);
line-height: var(--sl-tooltip-line-height);
color: var(--sl-tooltip-color);
opacity: 0;
padding: var(--sl-tooltip-padding);
transition: var(--sl-transition-fast) opacity;
pointer-events: none;
}
.range__tooltip:after {
content: '';
position: absolute;
width: 0;
height: 0;
left: 50%;
margin-left: calc(-1 * var(--sl-tooltip-arrow-size));
}
.range--tooltip-visible .range__tooltip {
opacity: 1;
}
/* Tooltip on top */
.range--tooltip-top .range__tooltip {
top: calc(-1 * var(--thumb-size) - var(--tooltip-offset));
}
.range--tooltip-top .range__tooltip:after {
border-top: var(--sl-tooltip-arrow-size) solid var(--sl-tooltip-background-color);
border-left: var(--sl-tooltip-arrow-size) solid transparent;
border-right: var(--sl-tooltip-arrow-size) solid transparent;
top: 100%;
}
/* Tooltip on bottom */
.range--tooltip-bottom .range__tooltip {
bottom: calc(-1 * var(--thumb-size) - var(--tooltip-offset));
}
.range--tooltip-bottom .range__tooltip:after {
border-bottom: var(--sl-tooltip-arrow-size) solid var(--sl-tooltip-background-color);
border-left: var(--sl-tooltip-arrow-size) solid transparent;
border-right: var(--sl-tooltip-arrow-size) solid transparent;
bottom: 100%;
}
`;