"use client" import { useEffect, useRef, useState, forwardRef, useImperativeHandle } from 'react' interface AltchaProps { onStateChange?: (ev: Event | CustomEvent) => void } const Altcha = forwardRef<{ value: string | null }, AltchaProps>(({ onStateChange }, ref) => { const widgetRef = useRef(null) const [value, setValue] = useState(null) useEffect(() => { import('altcha') }, []) useImperativeHandle(ref, () => { return { get value() { return value } } }, [value]) useEffect(() => { const handleStateChange = (ev: Event | CustomEvent) => { if ('detail' in ev) { setValue(ev.detail.payload || null) onStateChange?.(ev) } } const { current } = widgetRef if (current) { current.addEventListener('statechange', handleStateChange) return () => current.removeEventListener('statechange', handleStateChange) } }, [onStateChange]) return ( ) }) Altcha.displayName = 'Altcha' export default Altcha