@telekom/scale-components
Version:
Scale is the digital design system for Telekom products and experiences.
250 lines (206 loc) • 5.86 kB
CSS
/**
* @license
* Scale https://github.com/telekom/scale
*
* Copyright (c) 2021 Egor Kirpichev and contributors, Deutsche Telekom AG
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
:host {
--stars-color: var(--telekom-color-text-and-icon-primary-standard);
--stars-hover-color: var(--telekom-color-text-and-icon-primary-hovered);
--stars-active-color: var(--telekom-color-text-and-icon-primary-pressed);
--stars-inactive-color: transparent;
--stars-placeholder-color: var(--telekom-color-ui-border-standard);
--stars-placeholder-hover-color: var(--telekom-color-ui-border-hovered);
--stars-disabled-color: var(--telekom-color-text-and-icon-disabled);
--stars-spacing: var(--telekom-spacing-composition-space-02);
--stars-transition: color var(--telekom-motion-duration-immediate);
--stars-size: 24px;
--label-font: var(--telekom-text-style-ui);
--infotext-font: var(--telekom-text-style-body);
--infotext-font-small: var(--telekom-text-style-body);
--infotext-color: var(--telekom-color-text-and-icon-additional);
--focus-outline: var(--telekom-line-weight-highlight) solid
var(--telekom-color-functional-focus-standard);
}
[star-size='small'],
[size='small'] {
--stars-size: 16px;
}
[part='container'] {
display: inline-flex;
flex-direction: column;
position: relative;
}
[part='range-slider'] {
position: absolute;
border: 0;
margin: 0;
left: calc(-1 * var(--stars-size));
bottom: 0;
z-index: 2;
width: calc(100% + var(--stars-size) * 2);
opacity: 0;
height: var(--stars-size);
}
@media (hover: hover) {
/* hide the range slider from pointing device */
[part='range-slider'] {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
white-space: nowrap;
width: 1px;
}
}
input[type='range']::-webkit-slider-thumb {
-webkit-appearance: none;
border: 0;
height: var(--stars-size);
width: var(--stars-size);
border-radius: 50%;
background: #ffffff;
cursor: pointer;
margin-left: 0px;
margin-top: 0;
}
[part='content'] {
display: flex;
align-items: center;
}
[part='wrapper'] {
display: inline-flex;
border-radius: var(--telekom-spacing-composition-space-03);
margin-left: calc(-1 * var(--stars-spacing));
}
[part='wrapper']:hover [part='star'] [part='selected-star'] {
opacity: 1;
}
[part='star'] > * {
/* prevent event bubbling for icons */
pointer-events: none;
}
[part='label'] {
font: var(--label-font);
margin-bottom: var(--telekom-spacing-composition-space-04);
white-space: nowrap;
}
[part='infotext'] {
margin-left: var(--telekom-spacing-composition-space-04);
display: flex;
align-items: center;
font: var(--infotext-font);
color: var(--infotext-color);
white-space: nowrap;
}
:host([size='small']) [part='infotext'] {
font: var(--infotext-font-small);
}
[part='star'] {
--decimal-width: 100%;
display: inline-flex;
position: relative;
color: var(--stars-color);
cursor: pointer;
padding: 0 var(--stars-spacing);
}
[part='placeholder-star'] {
display: inline-flex;
color: var(--stars-placeholder-color);
transition: var(--stars-transition);
}
[part='selected-star'] {
color: var(--stars-inactive-color);
margin-left: 0px;
position: relative;
transition: var(--stars-transition);
}
.icon-clip {
overflow: hidden;
position: absolute;
width: var(--decimal-width);
height: 100%;
}
[part='star'][data-half] {
--decimal-width: calc(50% - var(--stars-spacing));
}
/* selected state */
[part='star'][data-selected] {
--stars-placeholder-color: transparent;
}
[part='star'][data-half] {
--stars-placeholder-color: currentColor;
}
[part='star'][data-selected] [part='selected-star'] {
color: var(--stars-color);
}
/* hover states */
@media (hover: hover) {
[part='wrapper']:hover {
--stars-color: var(--stars-hover-color);
--stars-placeholder-color: transparent;
}
[part='wrapper']:hover [part='star'] {
--decimal-width: 100%;
}
[part='wrapper']:hover [part='star'][data-half] {
--stars-placeholder-color: transparent;
}
[part='wrapper']:hover [part='selected-star'] {
color: var(--stars-color);
}
[part='star']:hover ~ [part='star'] [part='selected-star'] {
color: var(--stars-inactive-color);
}
[part='star']:hover ~ [part='star'] [part='placeholder-star'] {
color: var(--stars-placeholder-hover-color);
}
}
/* active states */
[part='wrapper']:active {
--stars-color: var(--stars-active-color);
}
/* focus states */
:host(:focus-within) [part='wrapper'],
[part='wrapper']:focus {
outline: var(--focus-outline);
}
/* readonly states */
:host(.readonly) [part='wrapper'] {
--stars-placeholder-color: var(--stars-disabled-color);
pointer-events: none;
}
/* disabled states */
:host(.disabled) [part='label'],
:host(.disabled) [part='infotext'] {
color: var(--stars-disabled-color);
}
:host(.disabled) [part='wrapper'] {
--stars-color: var(--stars-disabled-color);
--stars-placeholder-color: var(--stars-disabled-color);
pointer-events: none;
}
/* hidden label */
:host(.hideLabel) [part='label'] {
visibility: hidden;
height: 0;
margin-bottom: 0;
}
@media screen and (forced-colors: active), (-ms-high-contrast: active) {
[part='star'] [part='placeholder-star'] {
color: var(--telekom-color-text-and-icon-inverted-standard);
}
[part='star'][data-selected] [part='placeholder-star'] {
color: var(--stars-inactive-color);
}
[part='star']:hover ~ [part='star'] [part='placeholder-star'] {
color: var(--telekom-color-text-and-icon-inverted-standard);
}
[part='wrapper']:hover [part='placeholder-star'] {
color: var(--stars-inactive-color);
}
}