@telekom/scale-components
Version:
Scale is the digital design system for Telekom products and experiences.
538 lines (536 loc) • 18.7 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/.
*/
.input {
position: relative;
}
.input .input__helper-text,
.input .input__counter {
font-weight: var(--telekom-typography-font-weight-bold);
}
.input .input__input,
.input .input__select {
width: 100%;
height: var(--telekom-spacing-composition-space-14);
margin: 0;
display: flex;
outline: none;
padding: var(--telekom-spacing-composition-space-05)
var(--telekom-spacing-composition-space-05);
z-index: 1;
box-sizing: border-box;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
font-family: inherit;
font-size: var(--telekom-typography-font-size-body);
border-radius: var(--telekom-radius-standard);
border: var(--telekom-line-weight-standard) solid
var(--telekom-color-ui-border-standard);
}
.input .input__textarea {
width: 100%;
margin: 0;
resize: vertical;
display: flex;
outline: none;
padding: var(--telekom-spacing-composition-space-05)
var(--telekom-spacing-composition-space-05);
z-index: 1;
box-sizing: border-box;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
font-family: inherit;
font-size: var(--telekom-typography-font-size-body);
border-radius: var(--telekom-radius-standard);
border: var(--telekom-spacing-composition-space-01) solid
var(--telekom-color-ui-border-standard);
}
.input .input__select {
appearance: none;
-webkit-appearance: none;
}
.input .input__select-wrapper {
position: relative;
}
.input .input__counter {
display: flex;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
margin-left: auto;
padding-right: var(--telekom-spacing-composition-space-05);
justify-content: flex-end;
font-size: var(--telekom-typography-font-size-small);
line-height: var(--telekom-typography-line-spacing-standard);
color: var(--telekom-color-text-and-icon-standard);
}
.input .input__helper-text {
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
padding-left: var(--telekom-spacing-composition-space-05);
font-size: var(--telekom-typography-font-size-small);
line-height: var(--telekom-typography-line-spacing-standard);
color: var(--telekom-color-text-and-icon-functional-informational);
}
.input .input__meta {
display: flex;
justify-content: space-between;
margin-top: var(--telekom-spacing-composition-space-03);
}
.input:not(.input--disabled):hover .input__select-wrapper {
--icon-color: var(--telekom-color-text-and-icon-primary-hovered, #f90984);
}
.input:not(.input--disabled):active .input__select-wrapper {
--icon-color: var(--telekom-color-text-and-icon-primary-pressed, #cb0068);
}
.input:not(.input--disabled) .input__input:hover,
.input:not(.input--disabled) .input__input:focus,
.input:not(.input--disabled) .input__select:hover,
.input:not(.input--disabled) .input__select:focus,
.input:not(.input--disabled) .input__textarea:hover,
.input:not(.input--disabled) .input__textarea:focus {
border-color: var(--telekom-color-ui-border-hovered);
}
.input:not(.input--disabled) .input__input:focus,
.input:not(.input--disabled) .input__select:focus,
.input:not(.input--disabled) .input__textarea:focus {
box-shadow: 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-focus-standard);
}
.input:not(.input--disabled) .input__input:focus::placeholder,
.input:not(.input--disabled) .input__select:focus::placeholder,
.input:not(.input--disabled) .input__textarea:focus::placeholder {
color: var(--telekom-color-text-and-icon-additional);
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
}
.input .input__select-wrapper scale-icon {
top: 50%;
right: var(--telekom-spacing-composition-space-05);
position: absolute;
transform: translateY(-50%);
pointer-events: none;
}
.input .input__input::placeholder,
.input .input__select::placeholder,
.input .input__textarea::placeholder,
.input ::placeholder {
color: transparent;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
}
.input--variant-static .input__label {
color: var(--telekom-color-text-and-icon-additional);
display: flex;
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--variant-animated .input__input,
.input--variant-animated .input__select {
padding: var(--telekom-spacing-composition-space-05)
var(--telekom-spacing-composition-space-05) 0
calc(var(--telekom-spacing-composition-space-05) - 1px);
}
.input--variant-animated .input__textarea {
padding-top: var(--telekom-spacing-composition-space-08);
}
.input--variant-animated .input__label {
top: 0;
left: 0;
color: var(--telekom-color-text-and-icon-additional);
display: flex;
z-index: var(--scl-z-index-10);
position: absolute;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
pointer-events: none;
font-size: var(--telekom-typography-font-size-body);
/* previously: transform: translate(13px, calc((48px - 1rem) / 2)); */
transform: translate(
var(--telekom-spacing-composition-space-05),
calc(
(
var(--telekom-spacing-composition-space-14) -
var(--telekom-typography-font-size-body)
) / 2
)
);
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--variant-animated.input--has-focus .input__label,
.input--variant-animated.animated .input__label {
color: var(--telekom-color-text-and-icon-additional);
transform: translate(
var(--telekom-spacing-composition-space-05),
var(--telekom-spacing-composition-space-04)
);
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
font-size: var(--telekom-typography-font-size-badge);
font-weight: var(--telekom-typography-font-weight-bold);
}
.input--status-error .input__input,
.input--status-error .input__textarea,
.input--status-error .input__select {
border: var(--telekom-spacing-composition-space-02) solid
var(--telekom-color-functional-danger-standard);
}
.input--status-error .input__helper-text {
color: var(--telekom-color-text-and-icon-functional-danger);
}
.input--status-error .input__counter {
color: var(--telekom-color-text-and-icon-functional-danger);
}
.input--size-small .input__input {
height: var(--telekom-spacing-composition-space-12);
}
.input--size-small .input__select {
height: var(--telekom-spacing-composition-space-12);
}
.input--size-small .input__label {
top: 0;
left: 0;
color: var(--telekom-color-text-and-icon-additional);
display: flex;
z-index: var(--scl-z-index-10);
position: absolute;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
pointer-events: none;
font-size: var(--telekom-typography-font-size-body);
/* previously: transform: translate(
13px,
calc((var(--input-small-height, 40px) - 1rem) / 2)
); */
transform: translate(
var(--telekom-spacing-composition-space-05),
calc(
(
var(--telekom-spacing-composition-space-12) -
var(--telekom-typography-font-size-body)
) / 2
)
);
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--size-small.input--has-focus .input__label,
.input--size-small.animated .input__label {
color: var(--telekom-color-text-and-icon-additional);
transform: translate(
var(--telekom-spacing-composition-space-05),
var(--telekom-spacing-composition-space-03)
);
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
font-size: var(--telekom-typography-font-size-badge);
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--transparent .input__input,
.input--transparent .input__textarea,
.input--transparent.input--type-radio .input__radio,
.input--transparent .input__select {
background-color: transparent;
}
.input--type-checkbox {
display: flex;
flex-wrap: wrap;
align-items: center;
}
.input--type-checkbox input {
width: 0;
height: 0;
opacity: 0;
position: absolute;
}
.input--type-checkbox .input__meta {
width: 100%;
}
.input--type-checkbox .input__helper-text {
padding-left: var(--telekom-spacing-composition-space-10);
}
.input--type-checkbox label {
color: var(--telekom-color-text-and-icon-standard);
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--type-checkbox .input__checkbox-container {
width: var(--telekom-spacing-composition-space-06);
height: var(--telekom-spacing-composition-space-06);
display: flex;
position: relative;
align-items: center;
margin-right: var(--telekom-spacing-composition-space-04);
}
.input--type-checkbox input:disabled ~ label {
color: var(--telekom-color-ui-disabled);
}
.input--type-checkbox input:checked:disabled ~ label {
color: var(--telekom-color-ui-disabled);
}
.input--type-checkbox
input:checked:disabled
~ .input__checkbox-container
.input__checkbox-placeholder {
background: var(--telekom-color-ui-disabled);
}
/* TODO this could removed once scale-icon is removed */
.input--type-checkbox
input:checked:disabled
~ .input__checkbox-container
scale-icon {
--icon-color: var(--telekom-color-text-and-icon-disabled);
}
.input--type-checkbox
input:checked:not([disabled]):hover
~ .input__checkbox-container
.input__checkbox-placeholder,
.input--type-checkbox
input:checked:not([disabled])
~ .input__checkbox-container:hover
.input__checkbox-placeholder {
box-shadow: none;
border-color: var(--telekom-color-primary-hovered, #f90984);
background: var(--telekom-color-primary-hovered, #f90984);
}
.input--type-checkbox
input:checked:not([disabled]):active
~ .input__checkbox-container
.input__checkbox-placeholder,
.input--type-checkbox
input:checked:not([disabled])
~ .input__checkbox-container:active
.input__checkbox-placeholder {
border-color: var(--telekom-color-primary-pressed, #cb0068);
background: var(--telekom-color-primary-pressed, #cb0068);
}
/* TODO this could removed once scale-icon is removed */
.input--type-checkbox
input:checked:not([disabled]):active
~ .input__checkbox-container
scale-icon,
.input--type-checkbox
input:checked:not([disabled])
~ .input__checkbox-container:active
scale-icon {
--icon-color: var(--telekom-color-text-and-icon-standard);
}
.input--type-checkbox
input:checked:not([disabled])
~ .input__checkbox-container
.input__checkbox-placeholder {
border: var(--telekom-spacing-composition-space-01) solid
var(--telekom-color-primary-standard, #e20074);
background: var(--telekom-color-primary-standard, #e20074);
}
.input--type-checkbox
input:disabled
~ .input__checkbox-container
.input__checkbox-placeholder {
border-color: var(--telekom-color-ui-disabled);
}
.input--type-checkbox
input:focus
~ .input__checkbox-container
.input__checkbox-placeholder {
box-shadow: 0 0 0 var(--telekom-spacing-composition-space-02)
var(--telekom-color-functional-focus-standard);
}
.input--type-checkbox
input:not([disabled]):hover
~ .input__checkbox-container
.input__checkbox-placeholder,
.input--type-checkbox
input:not([disabled])
~ .input__checkbox-container:hover
.input__checkbox-placeholder {
box-shadow: none;
border-color: var(--telekom-color-primary-hovered, #f90984);
}
.input--type-checkbox
input:not([disabled]):hover
~ .input__checkbox-container
~ label,
.input--type-checkbox
input:not([disabled])
~ .input__checkbox-container:hover
~ label {
color: var(--telekom-color-text-and-icon-primary-hovered, #f90984);
}
.input--type-checkbox
input:not([disabled]):active
~ .input__checkbox-container
.input__checkbox-placeholder,
.input--type-checkbox
input:not([disabled])
~ .input__checkbox-container:active
.input__checkbox-placeholder {
border-color: var(--telekom-color-primary-pressed, #cb0068);
background: var(--telekom-color-primary-pressed, #cb0068);
}
/* TODO this could removed once scale-icon is removed */
.input--type-checkbox
input:not([disabled]):active
~ .input__checkbox-container
scale-icon,
.input--type-checkbox
input:not([disabled])
~ .input__checkbox-container:active
scale-icon {
--icon-color: var(--telekom-color-text-and-icon-primary-pressed, #cb0068);
}
.input--type-checkbox
input:not([disabled]):active
~ .input__checkbox-container
~ label,
.input--type-checkbox
input:not([disabled])
~ .input__checkbox-container:active
~ label {
color: var(--telekom-color-text-and-icon-primary-pressed, #cb0068);
}
.input--type-checkbox .input__checkbox-container .input__checkbox-placeholder {
width: var(--telekom-spacing-composition-space-06);
height: var(--telekom-spacing-composition-space-06);
margin: 0;
box-sizing: border-box;
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
border-radius: var(--telekom-radius-standard);
border: var(--telekom-spacing-composition-space-01) solid
var(--telekom-color-text-and-icon-standard);
background: var(--telekom-color-background-surface);
}
.input--type-checkbox .input__checkbox-container scale-icon {
top: calc(0.5 * var(--telekom-spacing-composition-space-05));
left: calc(0.5 * var(--telekom-spacing-composition-space-05));
width: var(--telekom-spacing-composition-space-05);
height: var(--telekom-spacing-composition-space-05);
position: absolute;
user-select: none;
/* TODO this could removed once scale-icon is removed */
--icon-color: var(--telekom-color-text-and-icon-inverted-standard);
}
.input--type-checkbox .input__checkbox-container ~ label {
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
}
.input--type-checkbox.input--status-error
.input__checkbox-container
.input__checkbox-placeholder {
border: var(--telekom-spacing-composition-space-02) solid
var(--telekom-color-functional-danger-standard);
}
.input--type-radio {
display: flex;
flex-wrap: wrap;
align-items: center;
}
.input--type-radio .input__meta {
width: 100%;
}
.input--type-radio .input__helper-text {
margin-top: var(--telekom-spacing-composition-space-03);
padding-left: var(--telekom-spacing-composition-space-08);
}
.input--type-radio label {
color: var(--telekom-color-text-and-icon-standard);
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
font-weight: var(--telekom-typography-font-weight-medium);
}
.input--type-radio input {
width: var(--telekom-spacing-composition-space-06);
height: var(--telekom-spacing-composition-space-06);
transition: all var(--telekom-motion-duration-transition)
cubic-bezier(var(--telekom-motion-easing-standard));
border-radius: var(--telekom-radius-circle);
-webkit-appearance: none;
background-color: #fff;
border: var(--telekom-line-weight-standard) solid
var(--telekom-color-ui-border-standard);
margin: 0 var(--telekom-spacing-composition-space-04) 0 0;
}
.input--type-radio input:focus {
outline: none;
box-shadow: 0 0 0 var(--telekom-line-weight-highlight)
var(--telekom-color-functional-focus-standard);
}
.input--type-radio:hover input:not(:checked):not([disabled]) {
box-shadow: none;
border-color: var(--telekom-color-text-and-icon-primary-hovered);
}
.input--type-radio:hover input:not(:checked):not([disabled]) ~ label {
color: var(--telekom-color-text-and-icon-primary-hovered);
}
.input--type-radio input:active {
border: var(--telekom-spacing-composition-space-04) solid
var(--telekom-color-primary-pressed);
}
.input--type-radio input:not(:checked):not([disabled]):active ~ label {
color: var(--telekom-color-text-and-icon-primary-pressed);
}
.input--type-radio input:disabled {
border: var(--telekom-spacing-composition-space-01) solid
var(--telekom-color-ui-border-disabled);
}
.input--type-radio input:disabled ~ label {
color: var(--telekom-color-text-and-icon-disabled);
}
.input--type-radio.input--status-error input {
border: var(--telekom-spacing-composition-space-02) solid
var(--telekom-color-functional-danger-standard);
}
.input--type-radio input:checked {
border: calc(0.5 * var(--telekom-spacing-composition-space-05)) solid
var(--telekom-color-primary-standard);
}
.input--type-radio input:checked:active {
border: calc(0.5 * var(--telekom-spacing-composition-space-05)) solid
var(--telekom-color-primary-pressed, #cb0068);
}
.input--type-radio input:checked:disabled {
background: var(--telekom-color-ui-disabled);
border: calc(0.5 * var(--telekom-spacing-composition-space-05)) solid
var(--telekom-color-ui-border-disabled);
}
.input--type-radio input:checked:disabled ~ label {
color: var(--telekom-color-text-and-icon-disabled);
}
.input__textarea-label-safety-background {
top: var(--telekom-spacing-composition-space-02);
left: var(--telekom-spacing-composition-space-02);
right: var(--telekom-spacing-composition-space-02);
position: absolute;
pointer-events: none;
border-radius: var(--telekom-radius-standard);
height: var(--telekom-spacing-composition-space-08);
background-color: var(--telekom-color-background-surface, #ffffff);
}
.input--disabled .input__textarea-label-safety-background {
background-color: transparent;
}
.input--disabled label,
.input--disabled .input__label,
.input--disabled input,
.input--disabled .input__input,
.input--disabled .input__checkbox-container,
.input--disabled .input__radio,
.input--disabled .input__select,
.input--disabled .input__textarea,
.input--disabled .input__helper-text {
cursor: not-allowed;
border-color: var(--telekom-color-ui-disabled);
color: var(--telekom-color-text-and-icon-disabled);
background: var(--telekom-color-ui-disabled);
}
/* TODO this could removed once scale-icon is removed */
.input--disabled .input__select-wrapper {
--icon-color: var(--telekom-color-text-and-icon-disabled);
}
.input--disabled.animated label.input__label {
color: var(--telekom-color-text-and-icon-disabled);
}