UNPKG

@telekom/scale-components

Version:

Scale is the digital design system for Telekom products and experiences.

250 lines (206 loc) 5.86 kB
/** * @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); } }