"use client"; import type { Transition, Variants } from "motion/react"; import { AnimatePresence, motion } from "motion/react"; import { useEffect, useState, type HTMLAttributes } from "react"; import { cn } from "@/lib/utils"; type ReportIconMode = "bug" | "bulb"; interface BugReportIconProps extends HTMLAttributes { size?: number; loop?: boolean; } const LOOP_INTERVAL_MS = 2200; const GROUP_VARIANTS: Variants = { hidden: { opacity: 0, }, visible: { opacity: 1, transition: { duration: 0.2, ease: [0, 0, 0.2, 1], }, }, exit: { opacity: 0, transition: { duration: 0.18, ease: [0.4, 0, 1, 1], }, }, }; const DRAW_VARIANTS: Variants = { hidden: { pathLength: 0, opacity: 0, }, visible: { pathLength: 1, opacity: 1, }, exit: { pathLength: 1, opacity: 0, }, }; function createDrawTransition(delay = 0, duration = 0.36): Transition { return { duration, delay, ease: [0.4, 0, 0.2, 1], opacity: { delay }, }; } function BugPaths() { return (<> ); } function BulbPaths() { return (<> ); } function ReportIconGroup({ mode }: { mode: ReportIconMode; }) { return ( {mode === "bug" ? : } ); } function StaticBugIcon() { return ( ); } function BugReportIcon({ className, size = 28, loop = false, ...props }: BugReportIconProps) { const [mode, setMode] = useState("bug"); useEffect(() => { if (!loop) { setMode("bug"); return; } const intervalId = window.setInterval(() => { setMode((currentMode) => currentMode === "bug" ? "bulb" : "bug"); }, LOOP_INTERVAL_MS); return () => window.clearInterval(intervalId); }, [loop]); return (
{loop ? ( ) : ()}
); } export { BugReportIcon };