Files
openfoodnetwork/app/webpacker/css/admin_v3/components/spinner.scss
David Cook 508ebab75b Add loading spinner to turbo frame
That was surprisingly easy. Note that it's still shared with SR.

It hides a bit early though: when the web response returns, but before the DOM has been rendered. Something to optimise in the future.
2024-04-17 15:17:59 +10:00

89 lines
1.7 KiB
SCSS

.spinner-overlay {
position: absolute;
left: 0;
right: 0;
height: 100%;
min-height: 200px;
background: rgba(255, 255, 255, 0.8);
z-index: 2;
// Show when inside a loading Turbo Frame
turbo-frame[aria-busy="true"] > & {
display: flex;
}
}
.spinner-container {
position: fixed;
left: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
gap: 40px;
font-size: 24px;
&.hidden {
display: none;
}
> .spinner {
width: 56px;
height: 56px;
border-radius: 50%;
border: 9px solid $teal;
animation:
spinner-bulqg1 0.8s infinite linear alternate,
spinner-oaa3wk 1.6s infinite linear;
}
}
@keyframes spinner-bulqg1 {
0% {
clip-path: polygon(50% 50%, 0 0, 50% 0%, 50% 0%, 50% 0%, 50% 0%, 50% 0%);
}
12.5% {
clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 0%, 100% 0%, 100% 0%);
}
25% {
clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 100%, 100% 100%, 100% 100%);
}
50% {
clip-path: polygon(50% 50%, 0 0, 50% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100%);
}
62.5% {
clip-path: polygon(50% 50%, 100% 0, 100% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100%);
}
75% {
clip-path: polygon(50% 50%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 100%, 0% 100%);
}
100% {
clip-path: polygon(50% 50%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100%);
}
}
@keyframes spinner-oaa3wk {
0% {
transform: scaleY(1) rotate(0deg);
}
49.99% {
transform: scaleY(1) rotate(135deg);
}
50% {
transform: scaleY(-1) rotate(0deg);
}
100% {
transform: scaleY(-1) rotate(-135deg);
}
}