@cbpds/web-components
Version:
Web components for the CBP Design System.
264 lines (257 loc) • 10.3 kB
CSS
/*
* Caution: "global styles" get injected into every component and can cause file size bloat.
* These should only include SASS variables and mixins that are not written out to CSS directly
*/
/**
* @prop --cbp-loader-color: var(--cbp-color-info-dark);
* @prop --cbp-loader-color-dark: var(--cbp-color-info-light);
* @prop --cbp-loader-center-color: var(--cbp-color-branding-cbp-light);
* @prop --cbp-loader-center-color-dark: var(--cbp-color-branding-cbp-dark);
* @prop --cbp-loader-track-color: var(--cbp-color-gray-cool-20);
* @prop --cbp-loader-track-color-dark: var(--cbp-color-gray-cool-50);
* @prop --cbp-loader-status-description-color: var(--cbp-color-text-darkest);
* @prop --cbp-loader-status-description-color-dark: var(--cbp-color-text-lightest);
* @prop --cbp-loader-status-indicator-color: var(--cbp-color-white);
* @prop --cbp-loader-status-indicator-color-dark: var(--cbp-color-black);
* @prop --cbp-loader-linear-height: var(--cbp-space-2x);
* @prop --cbp-loader-linear-width: 100%;
* @prop --cbp-loader-linear-status-width: var(--cbp-loader-linear-width);
* @prop --cbp-loader-linear-flex-direction: column;
* @prop --cbp-loader-linear-gap: var(--cbp-space-2x);
* @prop --cbp-loader-diameter: var(--cbp-space-12x);
* @prop --cbp-loader-gutter-width: var(--cbp-space-2x);
* @prop --cbp-loader-status-indicator-diameter: var(--cbp-space-4x);
* @prop --cbp-loader-circular-determinate: var(--cbp-loader-track-color);
*/
:root {
--cbp-loader-color: var(--cbp-color-info-dark);
--cbp-loader-color-dark: var(--cbp-color-info-light);
--cbp-loader-center-color: var(--cbp-color-branding-cbp-light);
--cbp-loader-center-color-dark: var(--cbp-color-branding-cbp-dark);
--cbp-loader-track-color: var(--cbp-color-gray-cool-20);
--cbp-loader-track-color-dark: var(--cbp-color-gray-cool-50);
--cbp-loader-status-description-color: var(--cbp-color-text-darkest);
--cbp-loader-status-description-color-dark: var(--cbp-color-text-lightest);
--cbp-loader-status-description-line-height: 3.5;
--cbp-loader-status-indicator-color: var(--cbp-color-white);
--cbp-loader-status-indicator-color-dark: var(--cbp-color-black);
--cbp-loader-status-description-padding: 0 0 0 var(--cbp-space-2x);
--cbp-loader-linear-height: var(--cbp-space-2x);
--cbp-loader-linear-width: 100%;
--cbp-loader-linear-status-width: var(--cbp-loader-linear-width);
--cbp-loader-linear-flex-direction: column;
--cbp-loader-linear-gap: var(--cbp-space-2x);
--cbp-loader-diameter: var(--cbp-space-12x);
--cbp-loader-gutter-width: var(--cbp-space-2x);
--cbp-loader-status-indicator-diameter: var(--cbp-space-4x);
--cbp-loader-circular-determinate: var(--cbp-loader-track-color);
--cbp-loader-flex-direction: row;
--cbp-loader-font-weight: var(--cbp-font-weight-medium);
--cbp-loader-font-size: var(--cbp-font-size-subhead);
}
/*
* Dark Mode - display dark design based on mode or context
*/
[data-cbp-theme=light] cbp-loader[context*=dark]:not([context=light-always]),
[data-cbp-theme=dark] cbp-loader:not([context=dark-inverts]):not([context=light-always]) {
--cbp-loader-color: var(--cbp-loader-color-dark);
--cbp-loader-center-color: var(--cbp-loader-center-color-dark);
--cbp-loader-track-color: var(--cbp-loader-track-color-dark);
--cbp-loader-status-description-color: var(--cbp-loader-status-description-color-dark);
--cbp-loader-status-indicator-color: var(--cbp-loader-status-indicator-color-dark);
}
@keyframes spin {
0% {
clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0);
}
25% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0);
}
50% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%);
}
75% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%);
}
100% {
clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0);
}
}
@keyframes slide {
0% {
transform: translateX(0%);
}
100% {
transform: translateX(400%);
}
}
cbp-loader {
max-width: 100%;
overflow: hidden;
position: relative;
/** generic style reset/cross variant styles */
}
cbp-loader label {
font-size: var(--cbp-loader-font-size);
font-weight: var(--cbp-loader-font-weight);
align-self: flex-start;
}
cbp-loader[variant=linear] {
--cbp-icon-size: var(--cbp-space-3x);
width: var(--cbp-loader-linear-width);
display: inline-flex;
flex-direction: var(--cbp-loader-linear-flex-direction);
align-items: center;
gap: var(--cbp-loader-linear-gap);
}
cbp-loader[variant=linear] progress {
appearance: none;
height: var(--cbp-loader-linear-height);
}
cbp-loader[variant=linear] progress::-webkit-progress-bar {
background-color: var(--cbp-loader-track-color);
}
cbp-loader[variant=linear] progress::-webkit-progress-value {
background-color: var(--cbp-loader-color);
}
cbp-loader[variant=linear]:not([determinate]):not([error]):not([success]) progress:before {
content: "";
display: block;
height: var(--cbp-loader-linear-height);
width: 20%;
background-color: var(--cbp-loader-color);
position: absolute;
animation: slide 2s cubic-bezier(0.2, 0, 0.38, 0.9) infinite;
}
cbp-loader[variant=linear][determinate] label {
color: var(--cbp-loader-status-description-color);
display: inline-flex;
width: var(--cbp-loader-linear-status-width);
height: var(--cbp-space-4x);
white-space: nowrap;
}
cbp-loader[variant=linear][determinate] label span:last-of-type {
margin-left: auto;
}
cbp-loader[variant=linear][size=small][success] label, cbp-loader[variant=linear][size=small][error] label {
text-wrap: nowrap;
}
cbp-loader[variant=circular] {
display: inline-flex;
flex-direction: var(--cbp-loader-flex-direction);
}
cbp-loader[variant=circular] label {
color: var(--cbp-loader-status-description-color);
font-size: var(--cbp-font-size-subhead);
font-weight: var(--cbp-font-weight-medium);
align-self: center;
padding: var(--cbp-loader-status-description-padding);
order: 2;
}
cbp-loader[variant=circular] progress {
height: var(--cbp-loader-diameter);
width: var(--cbp-loader-diameter);
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--cbp-border-radius-circle);
overflow: hidden;
padding: 0;
}
cbp-loader[variant=circular] progress::-webkit-progress-bar {
display: none;
}
cbp-loader[variant=circular] progress:before {
content: "";
position: absolute;
z-index: var(--cbp-z-index-level-1);
height: var(--cbp-loader-diameter);
width: var(--cbp-loader-diameter);
border-radius: calc(var(--cbp-border-radius-circle) / 2);
margin: auto auto;
background: var(--cbp-loader-color);
}
cbp-loader[variant=circular] progress:after {
content: "";
position: absolute;
z-index: var(--cbp-z-index-level-2);
height: calc(var(--cbp-loader-diameter) - var(--cbp-loader-gutter-width));
width: calc(var(--cbp-loader-diameter) - var(--cbp-loader-gutter-width));
border-radius: calc(var(--cbp-border-radius-circle) / 2);
margin: auto auto;
background: var(--cbp-loader-center-color);
}
cbp-loader[variant=circular][size=small][success] progress, cbp-loader[variant=circular][size=small][error] progress {
display: none;
}
cbp-loader[variant=circular][size=large][success] span, cbp-loader[variant=circular][size=large][error] span {
position: absolute;
width: var(--cbp-loader-diameter);
line-height: var(--cbp-loader-status-description-line-height);
text-align: center;
z-index: var(--cbp-z-index-level-3);
}
cbp-loader[variant=circular]:not([determinate]):not([error]):not([success]) ::before {
transform: rotate(45deg);
animation: spin 2s linear infinite;
}
cbp-loader[variant=circular][determinate] progress:before {
background: var(--cbp-loader-circular-determinate);
}
cbp-loader[variant=circular][determinate] .cbp-loader-desc {
position: absolute;
width: var(--cbp-loader-diameter);
line-height: var(--cbp-loader-status-description-line-height);
text-align: center;
z-index: var(--cbp-z-index-level-3);
color: var(--cbp-loader-color);
font-weight: var(--cbp-font-weight-bold);
}
cbp-loader[variant=circular][orientation=horizontal] {
--cbp-loader-status-description-padding: 0 0 0 var(--cbp-space-1x);
--cbp-loader-flex-direction: row;
}
cbp-loader[variant=circular][orientation=vertical]:not([size=small]) {
--cbp-loader-status-description-padding: var(--cbp-space-1x) 0 0 0;
--cbp-loader-flex-direction: column;
}
cbp-loader[error] {
--cbp-loader-color: var(--cbp-color-danger-dark);
--cbp-loader-color-dark: var(--cbp-color-danger-light);
--cbp-loader-track-color: var(--cbp-color-danger-dark);
--cbp-loader-track-color-dark: var(--cbp-color-danger-light);
--cbp-loader-status-description-color: var(--cbp-color-danger-dark);
--cbp-loader-status-description-color-dark: var(--cbp-color-danger-light);
--cbp-loader-status-indicator-color: var(--cbp-color-danger-dark);
--cbp-loader-status-indicator-color-dark: var(--cbp-color-danger-light);
}
cbp-loader[success] {
--cbp-loader-color: var(--cbp-color-success-base);
--cbp-loader-color-dark: var(--cbp-color-success-light);
--cbp-loader-track-color: var(--cbp-color-success-base);
--cbp-loader-track-color-dark: var(--cbp-color-success-light);
--cbp-loader-status-description-color: var(--cbp-color-success-base);
--cbp-loader-status-description-color-dark: var(--cbp-color-success-light);
--cbp-loader-status-indicator-color: var(--cbp-color-success-base);
--cbp-loader-status-indicator-color-dark: var(--cbp-color-success-light);
}
cbp-loader[size=large] {
--cbp-loader-diameter: var(--cbp-space-12x);
--cbp-loader-gutter-width: var(--cbp-space-2x);
--cbp-loader-linear-height: var(--cbp-space-2x);
--cbp-loader-linear-flex-direction: column;
--cbp-loader-linear-status-width: var(--cbp-loader-linear-width);
--cbp-loader-linear-gap: var(--cbp-space-2x);
}
cbp-loader[size=small] {
--cbp-loader-diameter: var(--cbp-space-4x);
--cbp-loader-gutter-width: var(--cbp-space-1x);
--cbp-loader-linear-height: var(--cbp-space-1x);
--cbp-loader-linear-flex-direction: row;
--cbp-loader-linear-status-width: min-content;
--cbp-loader-linear-gap: var(--cbp-space-1x);
}
cbp-loader progress {
height: inherit;
width: inherit;
}