228 lines
5.3 KiB
SCSS
228 lines
5.3 KiB
SCSS
|
|
@use '@angular/cdk';
|
||
|
|
@use '../core/tokens/token-utils';
|
||
|
|
@use '../core/tokens/m2/mdc/circular-progress' as tokens-mdc-circular-progress;
|
||
|
|
|
||
|
|
.mat-mdc-progress-spinner {
|
||
|
|
// Explicitly set to `block` since the browser defaults custom elements to `inline`.
|
||
|
|
display: block;
|
||
|
|
|
||
|
|
// Prevents the spinning of the inner element from affecting layout outside of the spinner.
|
||
|
|
overflow: hidden;
|
||
|
|
|
||
|
|
// Spinners with a diameter less than half the existing line-height will become distorted.
|
||
|
|
// Explicitly set the line-height to 0px to avoid this issue.
|
||
|
|
line-height: 0;
|
||
|
|
position: relative;
|
||
|
|
direction: ltr;
|
||
|
|
transition: opacity 250ms cubic-bezier(0.4, 0, 0.6, 1);
|
||
|
|
|
||
|
|
circle {
|
||
|
|
@include token-utils.use-tokens(
|
||
|
|
tokens-mdc-circular-progress.$prefix,
|
||
|
|
tokens-mdc-circular-progress.get-token-slots()
|
||
|
|
) {
|
||
|
|
@include token-utils.create-token-slot(stroke-width, active-indicator-width);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
&._mat-animation-noopable {
|
||
|
|
&, .mdc-circular-progress__determinate-circle {
|
||
|
|
// The spinner itself has a transition on `opacity`.
|
||
|
|
transition: none !important;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__indeterminate-circle-graphic,
|
||
|
|
.mdc-circular-progress__spinner-layer,
|
||
|
|
.mdc-circular-progress__indeterminate-container {
|
||
|
|
// Disables the rotation animations.
|
||
|
|
animation: none !important;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__indeterminate-container circle {
|
||
|
|
// Render the indeterminate spinner as a complete circle when animations are off
|
||
|
|
stroke-dasharray: 0 !important;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@include cdk.high-contrast {
|
||
|
|
.mdc-circular-progress__indeterminate-circle-graphic,
|
||
|
|
.mdc-circular-progress__determinate-circle {
|
||
|
|
// SVG colors aren't inverted automatically in high contrast mode. Set the
|
||
|
|
// stroke to currentColor in order to respect the user's color settings.
|
||
|
|
stroke: currentColor;
|
||
|
|
// currentColor blends in with the background in Chromium-based browsers
|
||
|
|
// so we have to fall back to `CanvasText` which isn't supported on IE.
|
||
|
|
stroke: CanvasText;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__determinate-container,
|
||
|
|
.mdc-circular-progress__indeterminate-circle-graphic,
|
||
|
|
.mdc-circular-progress__indeterminate-container,
|
||
|
|
.mdc-circular-progress__spinner-layer {
|
||
|
|
position: absolute;
|
||
|
|
width: 100%;
|
||
|
|
height: 100%;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__determinate-container {
|
||
|
|
transform: rotate(-90deg);
|
||
|
|
|
||
|
|
.mdc-circular-progress--indeterminate & {
|
||
|
|
opacity: 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__indeterminate-container {
|
||
|
|
font-size: 0;
|
||
|
|
letter-spacing: 0;
|
||
|
|
white-space: nowrap;
|
||
|
|
opacity: 0;
|
||
|
|
|
||
|
|
.mdc-circular-progress--indeterminate & {
|
||
|
|
opacity: 1;
|
||
|
|
animation: mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__determinate-circle-graphic,
|
||
|
|
.mdc-circular-progress__indeterminate-circle-graphic {
|
||
|
|
fill: transparent;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mat-mdc-progress-spinner .mdc-circular-progress__determinate-circle,
|
||
|
|
.mat-mdc-progress-spinner .mdc-circular-progress__indeterminate-circle-graphic {
|
||
|
|
@include token-utils.use-tokens(
|
||
|
|
tokens-mdc-circular-progress.$prefix,
|
||
|
|
tokens-mdc-circular-progress.get-token-slots()
|
||
|
|
) {
|
||
|
|
@include token-utils.create-token-slot(stroke, active-indicator-color);
|
||
|
|
}
|
||
|
|
|
||
|
|
@include cdk.high-contrast {
|
||
|
|
stroke: CanvasText;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__determinate-circle {
|
||
|
|
transition: stroke-dashoffset 500ms cubic-bezier(0, 0, 0.2, 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__gap-patch {
|
||
|
|
position: absolute;
|
||
|
|
top: 0;
|
||
|
|
left: 47.5%;
|
||
|
|
box-sizing: border-box;
|
||
|
|
width: 5%;
|
||
|
|
height: 100%;
|
||
|
|
overflow: hidden;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__indeterminate-circle-graphic {
|
||
|
|
.mdc-circular-progress__gap-patch & {
|
||
|
|
left: -900%;
|
||
|
|
width: 2000%;
|
||
|
|
transform: rotate(180deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__circle-clipper & {
|
||
|
|
width: 200%;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__circle-right & {
|
||
|
|
left: -100%;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left & {
|
||
|
|
animation: mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right & {
|
||
|
|
animation: mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__circle-clipper {
|
||
|
|
display: inline-flex;
|
||
|
|
position: relative;
|
||
|
|
width: 50%;
|
||
|
|
height: 100%;
|
||
|
|
overflow: hidden;
|
||
|
|
}
|
||
|
|
|
||
|
|
.mdc-circular-progress__spinner-layer {
|
||
|
|
.mdc-circular-progress--indeterminate & {
|
||
|
|
animation: mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1)
|
||
|
|
infinite both;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes mdc-circular-progress-container-rotate {
|
||
|
|
to {
|
||
|
|
transform: rotate(360deg);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes mdc-circular-progress-spinner-layer-rotate {
|
||
|
|
12.5% {
|
||
|
|
transform: rotate(135deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
25% {
|
||
|
|
transform: rotate(270deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
37.5% {
|
||
|
|
transform: rotate(405deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
50% {
|
||
|
|
transform: rotate(540deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
62.5% {
|
||
|
|
transform: rotate(675deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
75% {
|
||
|
|
transform: rotate(810deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
87.5% {
|
||
|
|
transform: rotate(945deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
100% {
|
||
|
|
transform: rotate(1080deg);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes mdc-circular-progress-left-spin {
|
||
|
|
from {
|
||
|
|
transform: rotate(265deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
50% {
|
||
|
|
transform: rotate(130deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
to {
|
||
|
|
transform: rotate(265deg);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@keyframes mdc-circular-progress-right-spin {
|
||
|
|
from {
|
||
|
|
transform: rotate(-265deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
50% {
|
||
|
|
transform: rotate(-130deg);
|
||
|
|
}
|
||
|
|
|
||
|
|
to {
|
||
|
|
transform: rotate(-265deg);
|
||
|
|
}
|
||
|
|
}
|