"use client";
import React, { useState } from "react";
import "./PivoineDocsIcon.css";
interface PivoineDocsIconProps {
size?: string;
interactive?: boolean;
className?: string;
showLabel?: boolean;
}
export default function PivoineDocsIcon({
size = "256px",
interactive = true,
className = "",
showLabel = false,
}: PivoineDocsIconProps) {
const [isHovered, setIsHovered] = useState(false);
const [isClicked, setIsClicked] = useState(false);
const handleMouseEnter = () => {
if (!interactive) return;
setIsHovered(true);
};
const handleMouseLeave = () => {
if (!interactive) return;
setIsHovered(false);
};
const handleClick = () => {
if (!interactive) return;
setIsClicked(true);
setTimeout(() => {
setIsClicked(false);
}, 1200);
};
const handleTouch = (e: React.TouchEvent) => {
if (!interactive) return;
e.preventDefault();
setIsHovered(true);
setTimeout(() => {
handleClick();
}, 50);
setTimeout(() => {
setIsHovered(false);
}, 1500);
};
const wrapperClasses = [
"pivoine-docs-icon-wrapper",
isHovered && "is-hovered",
isClicked && "is-clicked",
interactive && "is-interactive",
className,
]
.filter(Boolean)
.join(" ");
// Generate bloom particles with varied properties
const bloomParticles = Array.from({ length: 12 }, (_, i) => ({
id: i,
angle: (360 / 12) * i,
distance: 80 + Math.random() * 20,
size: 2 + Math.random() * 2,
delay: i * 0.08,
}));
return (
{/* Optional label */}
{showLabel && (
Pivoine Docs
)}
);
}