(null)
const [hasBeenVisible, setHasBeenVisible] = useState(false)
useEffect(() => {
const el = ref.current
if (!el) return
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
setHasBeenVisible(true)
}
},
{ rootMargin: '100px' }
)
observer.observe(el)
return () => observer.disconnect()
}, [])
// Quick check: if no special words, just render markdown
const hasSpecialWord = hasAnySpecialWord(text, RAINBOW_WORDS)
const rainbowComponents = useMemo(() => ({
p: ({ children }: { children?: React.ReactNode }) => (
{processChildrenForRainbow(children)}
),
}), [])
return (
)
}