component Spinner { props { color: string = "primary" label: string = "Loading" size: string = "md" lines: number = 3 class: string = "" } view {
} style { .wrn-spinner-component { --wrn-spinner-size: 1.5rem; --wrn-spinner-color: var(--wrn-color-primary); display: inline-grid; place-items: center; } .wrn-spinner-component[data-size="xs"] { --wrn-spinner-size: 0.875rem; } .wrn-spinner-component[data-size="sm"] { --wrn-spinner-size: 1.125rem; } .wrn-spinner-component[data-size="lg"] { --wrn-spinner-size: 2rem; } .wrn-spinner-component[data-size="xl"] { --wrn-spinner-size: 2.5rem; } .wrn-spinner-component[data-color="secondary"] { --wrn-spinner-color: var(--wrn-color-secondary); } .wrn-spinner-component[data-color="success"] { --wrn-spinner-color: var(--wrn-color-success); } .wrn-spinner-component[data-color="warning"] { --wrn-spinner-color: var(--wrn-color-warning); } .wrn-spinner-component[data-color="danger"] { --wrn-spinner-color: var(--wrn-color-danger); } .wrn-spinner-component[data-color="info"] { --wrn-spinner-color: var(--wrn-color-info); } .wrn-spinner-component__indicator { display: block; width: var(--wrn-spinner-size); height: var(--wrn-spinner-size); border: 2px solid var(--wrn-color-border); border-top-color: var(--wrn-spinner-color); border-radius: 50%; animation: wrn-spinner-component-spin 700ms linear infinite; } @keyframes wrn-spinner-component-spin { to { transform: rotate(360deg); } } @media (prefers-reduced-motion: reduce) { .wrn-spinner-component__indicator { animation-duration: 1.8s; } } } }