@telekom/scale-components
Version:
Scale is the digital design system for Telekom products and experiences.
277 lines (249 loc) • 9.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/.
*/
:host {
--width: auto;
--spacing-x-right: var(--telekom-spacing-composition-space-07);
--spacing-x-left: var(--telekom-spacing-composition-space-07);
--spacing-x-icon-only: var(--telekom-spacing-composition-space-05);
--min-height: var(--telekom-spacing-composition-space-13);
--min-width: var(--telekom-spacing-composition-space-13);
--radius: var(--telekom-radius-standard);
--transition: all var(--telekom-motion-duration-transition)
var(--telekom-motion-easing-standard);
--color-focus: var(--telekom-color-functional-focus-standard);
--font-weight: var(--telekom-typography-font-weight-bold);
--font-size: var(--telekom-typography-font-size-body);
--line-height: var(--telekom-typography-line-spacing-tight);
--spacing-icon-x: var(--telekom-spacing-composition-space-04);
--vertical-align: middle;
/* size: small */
--font-size-small: var(--telekom-typography-font-size-caption);
--line-height-small: 1.125rem;
--min-height-small: var(--telekom-spacing-composition-space-10);
--spacing-x-right-small: var(--telekom-spacing-composition-space-06);
--spacing-x-left-small: var(--telekom-spacing-composition-space-06);
--spacing-x-icon-only-small: var(--telekom-spacing-composition-space-00);
--spacing-icon-x-small: var(--telekom-spacing-composition-space-03);
/* variant: primary */
--radius-primary: var(--radius);
--background-primary: var(--telekom-color-primary-standard);
--background-primary-hover: var(--telekom-color-primary-hovered);
--background-primary-active: var(--telekom-color-primary-pressed);
--background-primary-disabled: var(--telekom-color-ui-disabled);
--color-primary: var(--telekom-color-text-and-icon-white-standard);
--color-primary-disabled: var(--telekom-color-text-and-icon-disabled);
/* variant: secondary */
--radius-secondary: var(--radius);
--border-width-secondary: var(--telekom-spacing-composition-space-01);
--background-secondary: transparent;
--color-secondary: var(--telekom-color-text-and-icon-standard);
--color-secondary-hover: var(--telekom-color-text-and-icon-standard);
--color-secondary-active: var(--telekom-color-text-and-icon-standard);
--color-secondary-disabled: var(--telekom-color-text-and-icon-disabled);
--background-secondary: var(--telekom-color-ui-state-fill-standard);
--background-secondary-hover: var(--telekom-color-ui-state-fill-hovered);
--background-secondary-active: var(--telekom-color-ui-state-fill-pressed);
--background-secondary-disabled: none;
--border-secondary: var(--telekom-color-ui-border-standard);
--border-secondary-hover: var(--telekom-color-ui-border-hovered);
--border-secondary-active: var(--telekom-color-ui-border-pressed);
--border-secondary-focus: var(--telekom-color-functional-focus-standard);
/* variant: secondary white */
--border-secondary-white: var(--telekom-color-ui-white);
--color-secondary-white: var(--telekom-color-ui-white);
--background-secondary-white-hover: var(
--telekom-color-ui-state-fill-hovered-inverted
);
--background-secondary-white-active: var(
--telekom-color-ui-state-fill-pressed-inverted
);
--secondary-white-opacity: 0.5;
/* variant: ghost */
--radius-ghost: var(--radius);
--border-width-ghost: var(--telekom-spacing-composition-space-01);
--spacing-x-ghost: var(--telekom-spacing-composition-space-04);
--color-ghost: var(--telekom-color-text-and-icon-primary-standard);
--color-ghost-hover: var(--telekom-color-text-and-icon-primary-hovered);
--color-ghost-active: var(--telekom-color-text-and-icon-primary-pressed);
--color-ghost-disabled: var(--telekom-color-text-and-icon-disabled);
--background-ghost-hover: var(--telekom-color-ui-state-fill-hovered);
--background-ghost-active: var(--telekom-color-ui-state-fill-pressed);
display: inline-block;
}
.button {
box-sizing: border-box;
display: inline-flex;
align-items: center;
position: relative;
border: 0;
outline: none;
cursor: pointer;
user-select: none;
font-family: inherit;
word-spacing: inherit;
letter-spacing: inherit;
justify-content: center;
text-decoration: none;
font-weight: var(--font-weight);
font-size: var(--font-size);
line-height: var(--line-height);
min-height: var(--min-height);
min-width: var(--min-width);
width: var(--width);
padding-left: var(--spacing-x-left);
padding-right: var(--spacing-x-right);
vertical-align: var(--vertical-align);
transition: var(--transition);
}
.button.button--size-small {
font-size: var(--font-size-small);
line-height: var(--line-height-small);
min-height: var(--min-height-small);
padding-left: var(--spacing-x-left-small);
padding-right: var(--spacing-x-right-small);
}
.button:not(.button--disabled):focus {
outline: var(--telekom-line-weight-highlight) solid var(--color-focus);
outline-offset: var(--telekom-spacing-composition-space-01);
}
.button.button--icon-before:not(.button--icon-only) ::slotted(*) {
margin-right: var(--spacing-icon-x);
margin-left: calc(var(--spacing-icon-x-small) * -1);
margin-top: var(--spacing-icon-x);
margin-bottom: var(--spacing-icon-x);
}
.button.button--icon-before:not(.button--icon-only).button--size-small
::slotted(*) {
margin-right: var(--spacing-icon-x-small);
margin-left: calc(var(--spacing-icon-x) * -0.5);
}
.button.button--icon-after:not(.button--icon-only) ::slotted(*) {
margin-left: var(--spacing-icon-x);
margin-right: calc(var(--spacing-icon-x-small) * -1);
margin-top: var(--spacing-icon-x);
margin-bottom: var(--spacing-icon-x);
}
.button.button--icon-after:not(.button--icon-only).button--size-small
::slotted(*) {
margin-left: var(--spacing-icon-x-small);
margin-right: calc(var(--spacing-icon-x) * -0.5);
}
.button:after {
top: 0;
left: 0;
width: 100%;
border: var(--telekom-spacing-composition-space-01) solid transparent;
height: 100%;
content: '';
display: block;
position: absolute;
box-sizing: border-box;
pointer-events: none;
border-radius: var(--radius);
}
.button--icon-only {
padding-left: var(--spacing-x-icon-only);
padding-right: var(--spacing-x-icon-only);
}
.button--icon-only.button--variant-secondary {
padding-left: calc(var(--spacing-x-icon-only) - 1px);
padding-right: calc(var(--spacing-x-icon-only) - 1px);
}
.button--icon-only.button--size-small {
padding-left: var(--spacing-x-icon-only-small);
padding-right: var(--spacing-x-icon-only-small);
min-width: 32px;
}
.button--icon-only.button--size-small.button--variant-secondary {
padding-left: calc(var(--spacing-x-icon-only-small) - 1px);
padding-right: calc(var(--spacing-x-icon-only-small) - 1px);
}
.button--disabled {
cursor: not-allowed;
}
/* Variants */
.button--variant-primary {
text-align: center;
border-radius: var(--radius);
background: var(--background-primary);
color: var(--color-primary);
}
.button--variant-primary:not(.button--disabled):hover {
background: var(--background-primary-hover);
}
.button--variant-primary:not(.button--disabled):active {
background: var(--background-primary-active);
}
.button--disabled.button--variant-primary {
background: var(--background-primary-disabled);
color: var(--color-primary-disabled);
}
.button--variant-secondary {
background: var(--background-secondary);
text-align: center;
border-radius: var(--radius-secondary);
border: var(--border-width-secondary) solid currentColor;
color: var(--color-secondary);
background-color: var(--background-secondary);
border-color: var(--border-secondary);
}
.button--variant-secondary:not(.button--disabled):hover {
color: var(--color-secondary-hover);
background-color: var(--background-secondary-hover);
border-color: var(--border-secondary-hover);
}
.button--variant-secondary:not(.button--disabled):active {
color: var(--color-secondary-active);
background-color: var(--background-secondary-active);
border-color: var(--border-secondary-active);
}
.button--disabled.button--variant-secondary {
color: var(--color-secondary-disabled);
background-color: var(--background-secondary-disabled);
}
.button--variant-ghost {
background: transparent;
text-align: center;
border-radius: var(--radius-ghost);
border: var(--border-width-ghost) solid transparent;
color: var(--color-ghost);
padding-left: var(--spacing-x-ghost);
padding-right: var(--spacing-x-ghost);
}
.button--variant-ghost:not(.button--disabled):hover {
color: var(--color-ghost-hover);
background-color: var(--background-ghost-hover);
}
.button--variant-ghost:not(.button--disabled):active {
color: var(--color-ghost-active);
background-color: var(--background-ghost-active);
}
.button--disabled.button--variant-ghost {
color: var(--color-ghost-disabled);
}
.button--variant-secondary-white {
background: var(--background-secondary);
text-align: center;
border-radius: var(--radius-secondary);
border: var(--border-width-secondary) solid currentColor;
color: var(--color-secondary-white);
background-color: var(--background-secondary);
border-color: var(--border-secondary-white);
}
.button--variant-secondary-white:not(.button--disabled):hover {
background-color: var(--background-secondary-white-hover);
}
.button--variant-secondary-white:not(.button--disabled):active {
background-color: var(--background-secondary-white-active);
}
.button--disabled.button--variant-secondary-white {
opacity: var(--secondary-white-opacity);
}