{"version":3,"file":"ScrollRevealHeading-nawx86k8.js","names":["Typography","Fragment","useEffect","useRef","words","text","matchAll","map","match","index","ScrollRevealHeading","t0","$","_c","title","accent","ref","t1","t2","Symbol","for","group","current","motion","matchMedia","matches","getBoundingClientRect","top","innerHeight","dataset","scrollReveal","stop","window","removeEventListener","check","parts","querySelectorAll","tops","_temp","lineHeight","parseFloat","getComputedStyle","querySelector","forEach","part","line","Math","max","round","style","setProperty","addEventListener","passive","t3","t4","t5","t6","t7","word"],"sources":["../../src/components/features/povio/scroll-reveal-heading.css","../../src/components/features/povio/ScrollRevealHeading.tsx"],"sourcesContent":["@media (prefers-reduced-motion: no-preference) {\n  [data-scroll-reveal=\"waiting\"],\n  [data-scroll-reveal=\"waiting\"] [data-reveal-word] {\n    opacity: 0;\n  }\n  [data-scroll-reveal=\"waiting\"] [data-reveal-word] {\n    filter: blur(8px);\n  }\n  [data-scroll-reveal=\"playing\"] [data-reveal-word] {\n    transition:\n      opacity 900ms cubic-bezier(0.165, 0.84, 0.44, 1) var(--line-delay, 0ms),\n      filter 900ms cubic-bezier(0.165, 0.84, 0.44, 1) var(--line-delay, 0ms);\n  }\n}\n","import { Typography } from \"@povio/ui\";\nimport { Fragment, useEffect, useRef } from \"react\";\nimport \"./scroll-reveal-heading.css\";\n\nfunction words(text: string) {\n  return [...text.matchAll(/[^ ]+/g)].map((match) => (\n    <Fragment key={match.index}>\n      {match.index > 0 && \" \"}\n      <span data-reveal-word=\"\">{match[0]}</span>\n    </Fragment>\n  ));\n}\n\nexport function ScrollRevealHeading({ title, accent }: { title: string; accent: string }) {\n  const ref = useRef<HTMLDivElement>(null);\n  useEffect(() => {\n    const group = ref.current;\n    const motion = matchMedia(\"(prefers-reduced-motion: reduce)\");\n    // Scroll restoration can expose prerendered content before hydration. Only arm unseen headings.\n    if (!group || motion.matches || group.getBoundingClientRect().top < innerHeight) {\n      return;\n    }\n\n    group.dataset.scrollReveal = \"waiting\";\n    const stop = () => {\n      window.removeEventListener(\"scroll\", check);\n      window.removeEventListener(\"resize\", check);\n      motion.removeEventListener(\"change\", check);\n    };\n    function check() {\n      if (!group) {\n        return;\n      }\n      if (motion.matches) {\n        delete group.dataset.scrollReveal;\n        stop();\n        return;\n      }\n      if (group.getBoundingClientRect().top > innerHeight * 0.85) {\n        return;\n      }\n      // Read the actual line positions at entry so wrapping and viewport changes retain the stagger.\n      const parts = [...group.querySelectorAll<HTMLElement>(\"[data-reveal-word]\")];\n      const tops = parts.map((word) => word.getBoundingClientRect().top);\n      const lineHeight = parseFloat(getComputedStyle(group.querySelector(\"h2\")!).lineHeight);\n      parts.forEach((part, index) => {\n        const line = Math.max(0, Math.round((tops[index] - tops[0]) / lineHeight));\n        part.style.setProperty(\"--line-delay\", `${line * 200}ms`);\n      });\n      group.dataset.scrollReveal = \"playing\";\n      stop();\n    }\n    window.addEventListener(\"scroll\", check, { passive: true });\n    window.addEventListener(\"resize\", check);\n    motion.addEventListener(\"change\", check);\n    return () => {\n      stop();\n      delete group.dataset.scrollReveal;\n    };\n  }, []);\n  return (\n    <div\n      ref={ref}\n      className=\"rich_accent_text\"\n    >\n      <Typography\n        as=\"h2\"\n        size=\"h2\"\n      >\n        {words(title)}\n        <br />\n        <strong>{words(accent)}</strong>\n      </Typography>\n    </div>\n  );\n}\n"],"mappings":"uNCIA,SAASI,EAAMC,EAAc,CAC3B,MAAO,CAAC,GAAGA,EAAKC,SAAS,QAAQ,CAAC,CAAC,CAACC,IAAKC,IACvC,EAAA,EAAA,KAAA,CAAC,EAAA,SAAD,CAAA,SAAA,CACGA,EAAMC,MAAQ,GAAK,KACpB,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,mBAAiB,GAAID,SAAAA,EAAM,EAAS,CAAA,CAClC,CAAA,EAHKA,EAAMC,KAGX,CACX,CACH,CAEA,SAAOC,EAAAC,EAAA,CAAA,IAAAC,GAAAA,EAAAC,EAAAA,EAAAA,CAAA,EAAA,EAA6B,CAAAC,QAAAC,UAAAJ,EAClCK,GAAAA,EAAYb,EAAAA,OAAAA,CAAuB,IAAI,EAAEc,EAAAC,EAAAN,EAAA,KAAAO,OAAAC,IAAA,2BAAA,GAC/BH,MAAA,CACR,IAAAI,EAAcL,EAAGM,QACjBC,EAAeC,WAAW,kCAAkC,EAE5D,GAAI,CAACH,GAASE,EAAME,SAAYJ,EAAKK,sBAAuB,CAAC,CAAAC,IAAOC,YAAW,OAI/EP,EAAKQ,QAAQC,aAAgB,UAC7B,IAAAC,MAAa,CACXC,OAAMC,oBAAqB,SAAUC,CAAK,EAC1CF,OAAMC,oBAAqB,SAAUC,CAAK,EAC1CX,EAAMU,oBAAqB,SAAUC,CAAK,CAAC,EAE7C,SAAAA,GAAA,CACE,GAAI,CAACb,EAAK,OAGV,GAAIE,EAAME,QAAQ,CAChB,OAAOJ,EAAKQ,QAAQC,aACpBC,EAAK,EAAC,MAAA,CAGR,GAAIV,EAAKK,sBAAuB,CAAC,CAAAC,IAAOC,YAAc,IAAI,OAI1D,IAAAO,EAAc,CAAA,GAAId,EAAKe,iBAA+B,oBAAoB,CAAC,EAC3EC,EAAaF,EAAK5B,IAAK+B,CAA0C,EACjEC,EAAmBC,WAAWC,iBAAiBpB,EAAKqB,cAAe,IAAI,CAAE,CAAC,CAAAH,UAAW,EACrFJ,EAAKQ,SAASC,EAAAnC,IAAA,CACZ,IAAAoC,EAAaC,KAAIC,IAAK,EAAGD,KAAIE,OAAQX,EAAK5B,GAAS4B,EAAI,IAAOE,CAAU,CAAC,EACzEK,EAAIK,MAAMC,YAAa,eAAgB,GAAGL,EAAO,IAAG,GAAI,CAAC,CAC1D,EACDxB,EAAKQ,QAAQC,aAAgB,UAC7BC,EAAK,CAAC,CAIgC,OAFxCC,OAAMmB,iBAAkB,SAAUjB,EAAO,CAAAkB,QAAW,EAAK,CAAC,EAC1DpB,OAAMmB,iBAAkB,SAAUjB,CAAK,EACvCX,EAAM4B,iBAAkB,SAAUjB,CAAK,MAChC,CACLH,EAAK,EACL,OAAOV,EAAKQ,QAAQC,YAAa,CAClC,EACAZ,EAAA,CAAA,EAAEN,EAAA,GAAAK,EAAAL,EAAA,GAAAM,IAAAD,EAAAL,EAAA,GAAAM,EAAAN,EAAA,KA5CLV,EAAAA,EAAAA,UAAAA,CAAUe,EA4CPC,CAAE,EAAC,IAAAmC,EAAAzC,EAAA,KAAAE,EAUauC,EAAAzC,EAAA,IAAZyC,EAAAjD,EAAMU,CAAK,EAACF,EAAA,GAAAE,EAAAF,EAAA,GAAAyC,GAAA,IAAAC,EAAA1C,EAAA,KAAAO,OAAAC,IAAA,2BAAA,GACbkC,GAAA,EAAA,EAAA,IAAA,CAAA,KAAA,CAAM,CAAA,EAAA1C,EAAA,GAAA0C,GAAAA,EAAA1C,EAAA,GAAA,IAAA2C,EAAA3C,EAAA,KAAAG,EACgBwC,EAAA3C,EAAA,IAAb2C,EAAAnD,EAAMW,CAAM,EAACH,EAAA,GAAAG,EAAAH,EAAA,GAAA2C,GAAA,IAAAC,EAAA5C,EAAA,KAAA2C,EAAUC,EAAA5C,EAAA,IAAhC4C,GAAA,EAAA,EAAA,IAAA,CAAA,SAAA,CAAA,SAASD,CAAuB,CAAA,EAAA3C,EAAA,GAAA2C,EAAA3C,EAAA,GAAA4C,GAAA,IAAAC,EAE9B,OAF8B7C,EAAA,KAAAyC,GAAAzC,EAAA,MAAA4C,GAVpCC,GAAA,EAAA,EAAA,IAAA,CAAA,MAAA,CACOzC,MACK,UAAA,mBAEV,UAAA,EAAA,EAAA,KAAA,CAAC,EAAD,CACK,GAAA,KACE,KAAA,KAFP,SAAA,CAIGqC,EACDC,EACAE,CANS,GAQP,CAAA,EAAA5C,EAAA,GAAAyC,EAAAzC,EAAA,IAAA4C,EAAA5C,EAAA,IAAA6C,GAAAA,EAAA7C,EAAA,IAZN6C,CAYM,CA5DH,SAAAnB,EAAAoB,EAAA,CAAA,OA8BgCA,EAAIhC,sBAAuB,CAAC,CAAAC,GAAI"}