import { onMount, onCleanup, createSignal, JSX } from "solid-js"; import { isServer } from "solid-js/web"; const spinnerChars = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]; interface SkeletonProps { class?: string; } function useSpinner() { const [showing, setShowing] = createSignal(0); onMount(() => { if (isServer) return; const interval = setInterval(() => { setShowing((prev) => (prev + 1) % spinnerChars.length); }, 50); onCleanup(() => { clearInterval(interval); }); }); return () => spinnerChars[showing()]; } export function SkeletonBox(props: SkeletonProps) { const spinner = useSpinner(); return (
{spinner()}
); } export function SkeletonText(props: SkeletonProps) { const spinner = useSpinner(); return (
{spinner()}
); } export function SkeletonCircle(props: SkeletonProps) { const spinner = useSpinner(); return (
{spinner()}
); }