import { css, html, LitElement } from "lit"; // https://cssloaders.github.io/ export class XSpinnerElement extends LitElement { static override styles = css` :host { display: block; width: 100%; height: 100%; background-color: white; padding: 1rem; --spinner-lowlight: #ccc; --spinner-highlight: #999; } .loader { animation: rotate 1s infinite; height: 50px; width: 50px; /* CT ADDITIONS */ user-select: none; margin: 0 auto; display: block; } .loader:before, .loader:after { border-radius: 50%; content: ""; display: block; height: 20px; width: 20px; } .loader:before { animation: ball1 1s infinite; background-color: var(--spinner-lowlight); box-shadow: 30px 0 0 var(--spinner-highlight); margin-bottom: 10px; } .loader:after { animation: ball2 1s infinite; background-color: var(--spinner-highlight); box-shadow: 30px 0 0 var(--spinner-lowlight); } @keyframes rotate { 0% { transform: rotate(0deg) scale(0.8); } 50% { transform: rotate(360deg) scale(1.2); } 100% { transform: rotate(720deg) scale(0.8); } } @keyframes ball1 { 0% { box-shadow: 30px 0 0 var(--spinner-highlight); } 50% { box-shadow: 0 0 0 var(--spinner-highlight); margin-bottom: 0; transform: translate(15px, 15px); } 100% { box-shadow: 30px 0 0 var(--spinner-highlight); margin-bottom: 10px; } } @keyframes ball2 { 0% { box-shadow: 30px 0 0 var(--spinner-lowlight); } 50% { box-shadow: 0 0 0 var(--spinner-lowlight); margin-top: -20px; transform: translate(15px, 15px); } 100% { box-shadow: 30px 0 0 var(--spinner-lowlight); margin-top: 0; } } `; override render() { return html` `; } } globalThis.customElements.define("x-spinner", XSpinnerElement);