'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
)}
)
}