diff --git a/components/primitives/IlustracionInflexion.tsx b/components/primitives/IlustracionInflexion.tsx index 6caa26c..099c1eb 100644 --- a/components/primitives/IlustracionInflexion.tsx +++ b/components/primitives/IlustracionInflexion.tsx @@ -1,8 +1,7 @@ 'use client'; -import { useEffect, useRef, useState } from 'react'; import { motion } from 'framer-motion'; -import { usePrefersReducedMotion } from '@/lib/motion'; +import { useEnVista } from '@/lib/motion'; // A literal small illustration of the section's own idea: a business grows, // hits its inflection point (the dot), and from there either drifts flat @@ -10,25 +9,7 @@ import { usePrefersReducedMotion } from '@/lib/motion'; // (dorado). Draws itself in once scrolled into view; a decorative aside, not // data, so it stays purely presentational. export function IlustracionInflexion({ className = '' }: { className?: string }) { - const reduced = usePrefersReducedMotion(); - const ref = useRef(null); - const [inView, setInView] = useState(false); - - useEffect(() => { - const el = ref.current; - if (!el || reduced) return; - const observer = new IntersectionObserver( - ([entry]) => { - if (entry.isIntersecting) { - setInView(true); - observer.unobserve(el); - } - }, - { threshold: 0.4 }, - ); - observer.observe(el); - return () => observer.disconnect(); - }, [reduced]); + const { ref, enVista, reduced } = useEnVista(); // `motion.path` applies its own dash-based pathLength scaffolding even with // no initial/animate props, which left the lines invisible for @@ -48,7 +29,7 @@ export function IlustracionInflexion({ className = '' }: { className?: string }) const draw = (delay: number) => ({ initial: { pathLength: 0 }, - animate: inView ? { pathLength: 1 } : { pathLength: 0 }, + animate: enVista ? { pathLength: 1 } : { pathLength: 0 }, transition: { duration: 1.1, delay, ease: [0.22, 1, 0.36, 1] as const }, }); diff --git a/components/primitives/SimboloTresLineas.tsx b/components/primitives/SimboloTresLineas.tsx index ffeca9f..395d72c 100644 --- a/components/primitives/SimboloTresLineas.tsx +++ b/components/primitives/SimboloTresLineas.tsx @@ -1,8 +1,7 @@ 'use client'; -import { useRef, useState, useEffect } from 'react'; import { motion } from 'framer-motion'; -import { usePrefersReducedMotion } from '@/lib/motion'; +import { useEnVista } from '@/lib/motion'; import { BARRAS_SIMBOLO } from '@/lib/simbolo'; // The manual's own description of the ≡ symbol, made literal: "las líneas van @@ -20,25 +19,7 @@ const BARS = [ ]; export function SimboloTresLineas({ className = '' }: { className?: string }) { - const reduced = usePrefersReducedMotion(); - const ref = useRef(null); - const [inView, setInView] = useState(false); - - useEffect(() => { - const el = ref.current; - if (!el || reduced) return; - const observer = new IntersectionObserver( - ([entry]) => { - if (entry.isIntersecting) { - setInView(true); - observer.unobserve(el); - } - }, - { threshold: 0.4 }, - ); - observer.observe(el); - return () => observer.disconnect(); - }, [reduced]); + const { ref, enVista, reduced } = useEnVista(); return (