@telekom/scale-components
Version:
Scale is the digital design system for Telekom products and experiences.
333 lines (287 loc) • 10.8 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/.
*/
/* TODO: remove `scale-checkbox duplicate selectors/prefixes when enabling shadow DOM` */
:host,
scale-checkbox {
--spacing-x: var(--telekom-spacing-composition-space-04);
--transition: all var(--telekom-motion-duration-transition)
var(--telekom-motion-easing-standard);
--color-text: var(--telekom-color-text-and-icon-standard);
--color-error: var(--telekom-color-functional-danger-standard);
--color-disabled: var(--telekom-color-text-and-icon-disabled);
/* FIXME unused variable */
--color-standard: var(--telekom-color-background-surface);
--background-disabled: none;
--color-primary: var(--telekom-color-primary-standard);
--color-focus: var(--telekom-color-functional-focus-standard);
--color-primary-hover: var(--telekom-color-text-and-icon-standard);
--color-primary-active: var(--telekom-color-text-and-icon-standard);
/*control*/
--width-control: var(--telekom-spacing-composition-space-07);
--height-control: var(--telekom-spacing-composition-space-07);
--transition-control: var(--transition);
--spacing-control: var(--telekom-spacing-composition-space-02);
--spacing-left-control: var(--telekom-spacing-composition-space-03);
--radius-control: var(--telekom-radius-small);
--border-width-control: var(--telekom-line-weight-standard);
/*helper-text*/
--transition-helper-text: var(--transition);
--spacing-left-helper-text: calc(var(--width-control) + var(--spacing-x));
--font-size-helper-text: var(--telekom-typography-font-size-small);
--font-weight-helper-text: var(--telekom-typography-font-weight-bold);
--line-height-helper-text: var(--telekom-typography-line-spacing-standard);
--color-helper-text: var(
--telekom-color-text-and-icon-functional-informational
);
/*label*/
--font-weight-label: var(--telekom-typography-font-weight-medium);
--transition-label: var(--transition);
/*icon*/
--color-icon-checked-disabled: var(--telekom-color-text-and-icon-disabled);
--color-icon-checked-active: var(
--telekom-color-text-and-icon-white-standard
);
--width-icon: var(--telekom-spacing-composition-space-06);
--height-icon: var(--telekom-spacing-composition-space-06);
--stroke-width: var(--stroke-width-checkbox, 0.5px);
}
scale-checkbox {
position: relative;
display: flex;
width: fit-content;
flex-direction: column;
color: var(--color-text);
}
scale-checkbox [part='icon'],
scale-checkbox [part='checkbox'],
scale-checkbox [part='label'],
scale-checkbox [part='helper-text'] {
transition: var(--transition);
}
scale-checkbox [part='input'],
/* :host(.hideLabel) [part='label'], */
scale-checkbox.hideLabel [part='label'] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
scale-checkbox [part='checkbox'] {
box-sizing: border-box;
display: flex;
flex: 0 0 auto;
justify-content: center;
align-items: center;
width: var(--width-control);
height: var(--height-control);
border-radius: var(--radius-control);
border: var(--border-width-control) solid
var(--telekom-color-ui-border-standard);
}
scale-checkbox [part='label'] {
font-weight: var(--font-weight-label);
margin-left: var(--spacing-x);
}
scale-checkbox [part='icon'] {
width: var(--width-icon);
height: var(--height-icon);
color: var(--color-icon-checked-active);
}
scale-checkbox [part='icon'] svg {
width: 100%;
height: 100%;
}
scale-checkbox [part='icon'] svg rect,
scale-checkbox [part='icon'] svg path {
stroke: currentColor;
stroke-width: var(--stroke-width);
}
scale-checkbox [part='container'] {
align-items: center;
display: flex;
line-height: var(--telekom-typography-line-spacing-standard);
}
scale-checkbox [part='helper-text'] {
font-size: var(--font-size-helper-text);
font-weight: var(--font-weight-helper-text);
line-height: var(--line-height-helper-text);
color: var(--color-helper-text);
padding-left: calc(
var(--width-control) + var(--spacing-control) + var(--spacing-x) +
calc(var(--border-width-control) * 2)
);
display: flex;
align-items: center;
}
/* :host([checked]) [part='checkbox'], */
/* :host([indeterminate]) [part='checkbox'], */
scale-checkbox.indeterminate [part='checkbox'] {
background: var(--telekom-color-primary-standard);
border: none;
color: var(--color-icon-checked-active);
}
scale-checkbox.indeterminate [part='icon'] {
color: var(--color-icon-checked-active);
}
/* :host([checked]) [part='checkbox'], */
scale-checkbox.checked [part='checkbox']
/* :host([indeterminate]) [part='checkbox'], */ {
background: var(--telekom-color-primary-standard);
border-color: var(--telekom-color-primary-standard);
color: var(--color-icon-checked-active);
}
/* :host([checked]) [part='checkbox'], */
scale-checkbox [part='container']:hover
/* :host([indeterminate]) [part='checkbox'], */
[part='checkbox'] {
background: var(--telekom-color-ui-state-fill-hovered);
border-color: var(--telekom-color-ui-border-hovered);
color: var(--color-icon-checked-active);
}
/* :host([checked]) [part='checkbox'], */
scale-checkbox.checked [part='container']:hover
/* :host([indeterminate]) [part='checkbox'], */
[part='checkbox'] {
background: var(--telekom-color-primary-hovered);
border-color: var(--telekom-color-ui-border-hovered);
color: var(--color-icon-checked-active);
}
/* :host([checked]) [part='checkbox'], */
scale-checkbox [part='container']:active
/* :host([indeterminate]) [part='checkbox'], */
[part='checkbox'] {
background: var(--telekom-color-ui-state-fill-pressed);
border-color: var(--telekom-color-ui-border-pressed);
color: var(--color-icon-checked-active);
}
/* focus states */
scale-checkbox [part='input']:focus ~ [part='container'] [part='checkbox'] {
outline: var(--telekom-spacing-composition-space-02) solid var(--color-focus);
outline-offset: var(--telekom-spacing-composition-space-01);
}
/* hover states */
scale-checkbox [part='container']:hover {
color: var(--color-primary-hover);
cursor: pointer;
}
/* :host([checked]) [part='container']:hover [part='checkbox'], */
scale-checkbox.checked [part='container']:hover [part='checkbox'],
/* :host([indeterminate]) [part='container']:hover [part='checkbox'], */
scale-checkbox.indeterminate [part='container']:hover [part='checkbox'] {
background: var(--telekom-color-primary-hovered);
border-color: var(--telekom-color-primary-hovered);
}
/* active states */
scale-checkbox.checked [part='input']:active ~ [part='container'],
scale-checkbox.checked [part='container']:active {
color: var(--color-primary-active);
}
scale-checkbox [part='input']:active ~ [part='container'] [part='checkbox'],
/* :host([checked]) [part='container']:active [part='checkbox'], */
scale-checkbox.checked [part='container']:active [part='checkbox'],
/* :host([indeterminate]) [part='container']:active [part='checkbox'], */
scale-checkbox.indeterminate [part='container']:active [part='checkbox'] {
background: var(--telekom-color-primary-pressed);
border-color: var(--telekom-color-primary-pressed);
}
scale-checkbox:not(.checked) [part='container']:active [part='checkbox'] {
background: var(--telekom-color-ui-state-fill-pressed);
border-color: var(--telekom-color-ui-border-pressed);
}
scale-icon-alert-information,
scale-icon-alert-error {
color: var(--color-helper-text);
display: flex;
justify-content: center;
align-items: center;
margin-right: var(--telekom-spacing-composition-space-03);
}
/* error states */
/* :host(.error) [part='helper-text'], */
scale-checkbox.error [part='helper-text'] {
color: var(--telekom-color-text-and-icon-functional-danger);
}
scale-checkbox.error [part='helper-text'] scale-icon-alert-error {
color: var(--telekom-color-text-and-icon-functional-danger);
}
/* :host(.error) [part='checkbox'], */
scale-checkbox.error [part='checkbox'] {
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--color-error);
border: none;
}
scale-checkbox.error
[part='input']:focus
~ [part='container']
[part='checkbox'] {
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--color-error);
}
scale-checkbox.error [part='checkbox']:hover {
background-color: var(--telekom-color-ui-state-fill-hovered);
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-danger-hovered);
}
scale-checkbox.error [part='checkbox']:active {
background-color: var(--telekom-color-ui-state-fill-pressed);
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-danger-pressed);
}
scale-checkbox.error:not(.checked) [part='container']:active [part='checkbox'] {
background: var(--telekom-color-ui-state-fill-pressed);
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-danger-pressed);
}
scale-checkbox.checked.error [part='container']:hover [part='checkbox'] {
background-color: var(--telekom-color-primary-hovered);
box-shadow: inset 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-danger-hovered);
}
scale-checkbox.error [part='helper-text'] {
padding-left: calc(
var(--width-control) + var(--spacing-control) + var(--spacing-x)
);
}
/* disabled states */
/* :host([disabled]), */
scale-checkbox.disabled {
cursor: not-allowed;
}
/* :host([disabled]) [part='container'], */
scale-checkbox.disabled [part='container'],
/* :host([disabled]) [part='helper-text'], */
scale-checkbox.disabled [part='helper-text'] {
color: var(--color-disabled);
pointer-events: none;
}
/* :host([checked][disabled]) [part='checkbox'], */
scale-checkbox.disabled [part='checkbox'] {
background: var(--telekom-color-ui-solid-fill-disabled);
border-color: var(--telekom-color-ui-border-disabled);
}
scale-checkbox.checked.disabled [part='checkbox'] {
background-color: var(--telekom-color-ui-disabled);
border-color: transparent;
}
/* :host([checked][disabled]) [part='icon'], */
scale-checkbox.checked.disabled [part='icon'] {
color: var(--color-icon-checked-disabled);
background-color: var(--telekom-color-ui-disabled);
}
scale-checkbox.disabled [part='helper-text'] scale-icon-alert-information,
scale-checkbox.disabled.error [part='helper-text'] scale-icon-alert-error {
color: var(--color-disabled);
}