GHHG10's picture
download
raw
1.43 kB
import { ComponentProps, For } from "solid-js"
const outerIndices = new Set([1, 2, 4, 7, 8, 11, 13, 14])
const cornerIndices = new Set([0, 3, 12, 15])
const squares = Array.from({ length: 16 }, (_, i) => ({
id: i,
x: (i % 4) * 4,
y: Math.floor(i / 4) * 4,
delay: Math.random() * 1.5,
duration: 1 + Math.random() * 1,
outer: outerIndices.has(i),
corner: cornerIndices.has(i),
}))
export function Spinner(props: {
class?: string
classList?: ComponentProps<"div">["classList"]
style?: ComponentProps<"div">["style"]
}) {
return (
<svg
{...props}
viewBox="0 0 15 15"
data-component="spinner"
classList={{
...props.classList,
[props.class ?? ""]: !!props.class,
}}
fill="currentColor"
>
<For each={squares}>
{(square) => (
<rect
x={square.x}
y={square.y}
width="3"
height="3"
rx="1"
style={{
opacity: square.corner ? 0 : undefined,
animation: square.corner
? undefined
: `${square.outer ? "pulse-opacity-dim" : "pulse-opacity"} ${square.duration}s ease-in-out infinite`,
"animation-fill-mode": square.corner ? undefined : "both",
"animation-delay": square.corner ? undefined : `${square.delay}s`,
}}
/>
)}
</For>
</svg>
)
}

Xet Storage Details

Size:
1.43 kB
·
Xet hash:
fca895da4ddf32f2789f4bdf28b06be7ae0b79626a08fe5c4512d034bebff08c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.