import { component$, useSignal, $ } from "@builder.io/qwik"; import styles from "./counter.module.css"; import Gauge from "../gauge"; export default component$((props: { initialValue: number }) => { const count = useSignal(props.initialValue || 99); const setCount = $((newValue: number) => { if (newValue >= 0 && newValue <= 100) { count.value = newValue; if (newValue === 100) { celebrate(); } } }); return (
); }); export const celebrate = $(async () => { const defaults = { spread: 360, ticks: 70, gravity: 0, decay: 0.95, startVelocity: 30, colors: ["006ce9", "ac7ff4", "18b6f6", "713fc2", "ffffff"], origin: { x: 0.5, y: 0.35, }, }; function loadConfetti() { return new Promise<(opts: any) => void>((resolve, reject) => { if ((globalThis as any).confetti) { return resolve((globalThis as any).confetti as any); } const script = document.createElement("script"); script.src = "https://cdn.jsdelivr.net/npm/canvas-confetti@1.5.1/dist/confetti.browser.min.js"; script.onload = () => resolve((globalThis as any).confetti as any); script.onerror = reject; document.head.appendChild(script); script.remove(); }); } const confetti = await loadConfetti(); function shoot() { confetti({ ...defaults, particleCount: 80, scalar: 1.2, }); confetti({ ...defaults, particleCount: 60, scalar: 0.75, }); } setTimeout(shoot, 0); setTimeout(shoot, 100); setTimeout(shoot, 200); setTimeout(shoot, 300); setTimeout(shoot, 400); });