{"version":3,"file":"usePovioTestimonials-22Y99UNi.js","names":["RefObject","useEffect","useState","TestimonialMotionOptions","scrollScreens","cinematic","usePovioTestimonials","sectionRef","t0","options","$","_c","iot","undefined","t1","t2","t3","Symbol","for","previousDisabled","nextDisabled","controls","setControls","t4","t5","section","current","pin","parentElement","slides","querySelectorAll","names","list","querySelector","swiper","previous","next","desktop","window","matchMedia","reduced","removers","slideCount","length","blurred","activeSlide","activeSnap","dragStart","dragOffset","listen","target","type","listener","options_0","addEventListener","push","removeEventListener","panelsFor","_temp","clearPanels","slide_0","panel","slide","animation","getAnimations","cancel","style","removeProperty","activateName","index","nameIndex","name","entries","classList","toggle","switchSlide","index_0","immediate","outgoing","incoming","slideIndex","slide_1","selected","panel_0","animation_0","matches","opacity","visibility","filter","direction","panelIndex","panel_1","image","animation_1","animate","translate","scale","duration","delay","easing","fill","onfinish","panelIndex_0","panel_2","image_0","animation_2","panelIndex_1","panel_3","animation_3","panelIndex_2","panel_4","animation_4","snapPositions","firstSlide","visual","width","offsetWidth","peek","getComputedStyle","gap","Number","parseFloat","columnGap","margin","marginRight","positions","offset","index_1","syncControls","goToSnap","index_2","positions_0","Math","min","max","transition","transform","floor","updateScroll","remove","add","distance","innerHeight","progress","getBoundingClientRect","top","hold","selected_0","start","index_3","end","reset","event","pointer","PointerEvent","clientX","setPointerCapture","pointerId","event_0","pointer_0","hasPointerCapture","finishDrag","event_1","pointer_1","releasePointerCapture","positions_1","dragged","selected_1","index_4","position","abs","passive"],"sources":["../../src/components/features/povio/usePovioTestimonials.ts"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\ninterface TestimonialMotionOptions {\n  scrollScreens?: number;\n  cinematic?: boolean;\n}\nexport function usePovioTestimonials(\n  sectionRef: RefObject<HTMLElement | null>,\n  iot = false,\n  options?: TestimonialMotionOptions,\n) {\n  const { scrollScreens, cinematic = false } = options ?? {};\n  const [controls, setControls] = useState({ previousDisabled: true, nextDisabled: false });\n\n  useEffect(() => {\n    const section = sectionRef.current;\n    if (!section) {\n      return;\n    }\n    const pin = section.parentElement;\n    const slides = [...section.querySelectorAll<HTMLElement>(\"[data-testimonial-slide]\")];\n    const names = [...section.querySelectorAll<HTMLElement>(\"[data-name-item]\")];\n    const list = section.querySelector<HTMLElement>(\".testimonial_slider_list\");\n    const swiper = section.querySelector<HTMLElement>(\"[data-testimonial-swiper]\");\n    const previous = section.querySelector<HTMLButtonElement>(\"[data-nav-prev]\");\n    const next = section.querySelector<HTMLButtonElement>(\"[data-nav-next]\");\n    const desktop = window.matchMedia(\"(min-width: 992px)\");\n    const reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    const removers: (() => void)[] = [];\n    const slideCount = slides.length;\n    const transitionGap = 0.1;\n    const blurred = iot ? \"blur(4px)\" : \"blur(8px)\";\n    let activeSlide = 0;\n    let activeSnap = 0;\n    let dragStart = 0;\n    let dragOffset = 0;\n\n    const listen = (\n      target: EventTarget,\n      type: string,\n      listener: (event: Event) => void,\n      options?: AddEventListenerOptions,\n    ) => {\n      target.addEventListener(type, listener, options);\n      removers.push(() => target.removeEventListener(type, listener, options));\n    };\n    const panelsFor = (slide: HTMLElement) => [\n      ...slide.querySelectorAll<HTMLElement>(\".testimonial_slide_visual, .testimonial_slide_content\"),\n    ];\n    const clearPanels = () => {\n      for (const slide of slides) {\n        for (const panel of panelsFor(slide)) {\n          for (const animation of panel.getAnimations()) {\n            animation.cancel();\n          }\n          panel.style.removeProperty(\"opacity\");\n          panel.style.removeProperty(\"visibility\");\n          panel.style.removeProperty(\"filter\");\n        }\n      }\n      list?.style.removeProperty(\"transform\");\n    };\n    const activateName = (index: number) => {\n      for (const [nameIndex, name] of names.entries()) {\n        name.classList.toggle(\"is-active\", nameIndex === index);\n        name.style.removeProperty(\"opacity\");\n      }\n    };\n    const switchSlide = (index: number, immediate: boolean) => {\n      const outgoing = slides[activeSlide];\n      const incoming = slides[index];\n      for (const [slideIndex, slide] of slides.entries()) {\n        const selected = slideIndex === index;\n        for (const panel of panelsFor(slide)) {\n          for (const animation of panel.getAnimations()) {\n            animation.cancel();\n          }\n          if (immediate || reduced.matches || (slide !== outgoing && slide !== incoming)) {\n            panel.style.opacity = selected ? \"1\" : \"0\";\n            panel.style.visibility = selected ? \"visible\" : \"hidden\";\n            panel.style.filter = selected ? \"none\" : \"blur(8px)\";\n          }\n        }\n      }\n      if (immediate || reduced.matches || !outgoing || !incoming || outgoing === incoming) {\n        return;\n      }\n      if (cinematic) {\n        const direction = index > activeSlide ? 1 : -1;\n        for (const [panelIndex, panel] of panelsFor(outgoing).entries()) {\n          const image = panelIndex === 0;\n          panel.style.visibility = \"visible\";\n          panel.style.opacity = \"1\";\n          panel.style.filter = \"none\";\n          const animation = panel.animate(\n            [\n              { opacity: 1, translate: \"0 0\", scale: \"1\" },\n              { opacity: 0, translate: `0 ${-(image ? 25 : 18) * direction}px`, scale: image ? \".97\" : \"1\" },\n            ],\n            {\n              duration: image ? 450 : 400,\n              delay: panelIndex * 40,\n              easing: \"cubic-bezier(.76,0,.24,1)\",\n              fill: \"forwards\",\n            },\n          );\n          animation.onfinish = () => {\n            panel.style.opacity = \"0\";\n            panel.style.visibility = \"hidden\";\n          };\n        }\n        for (const [panelIndex, panel] of panelsFor(incoming).entries()) {\n          const image = panelIndex === 0;\n          panel.style.visibility = \"visible\";\n          panel.style.opacity = \"0\";\n          panel.style.filter = \"none\";\n          const animation = panel.animate(\n            [\n              {\n                opacity: 0,\n                translate: `0 ${(image ? 35 : 28) * direction}px`,\n                scale: image ? \".97\" : \"1\",\n                filter: image ? \"none\" : \"blur(4px)\",\n              },\n              { opacity: 1, translate: \"0 0\", scale: \"1\", filter: \"none\" },\n            ],\n            {\n              duration: image ? 550 : 500,\n              delay: 150 + panelIndex * 40,\n              easing: \"cubic-bezier(.165,.84,.44,1)\",\n              fill: \"forwards\",\n            },\n          );\n          animation.onfinish = () => {\n            panel.style.opacity = \"1\";\n            panel.style.visibility = \"visible\";\n          };\n        }\n        return;\n      }\n      for (const [panelIndex, panel] of panelsFor(outgoing).entries()) {\n        panel.style.visibility = \"visible\";\n        panel.style.opacity = \"1\";\n        panel.style.filter = \"none\";\n        const animation = panel.animate(\n          [\n            { opacity: 1, filter: \"blur(0px)\" },\n            { opacity: 0, filter: blurred },\n          ],\n          {\n            duration: iot ? [450, 400][panelIndex] : 500,\n            delay: panelIndex * (iot ? 40 : 60),\n            easing: \"cubic-bezier(0.455, 0.03, 0.515, 0.955)\",\n            fill: \"forwards\",\n          },\n        );\n        animation.onfinish = () => {\n          panel.style.opacity = \"0\";\n          panel.style.visibility = \"hidden\";\n          panel.style.filter = blurred;\n        };\n      }\n      for (const [panelIndex, panel] of panelsFor(incoming).entries()) {\n        panel.style.visibility = \"visible\";\n        panel.style.opacity = \"0\";\n        panel.style.filter = blurred;\n        const animation = panel.animate(\n          [\n            { opacity: 0, filter: blurred },\n            { opacity: 1, filter: \"blur(0px)\" },\n          ],\n          {\n            duration: iot ? [550, 500][panelIndex] : 650,\n            delay: iot ? 300 + panelIndex * 40 : 200 + panelIndex * 60,\n            easing: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\",\n            fill: \"forwards\",\n          },\n        );\n        animation.onfinish = () => {\n          panel.style.opacity = \"1\";\n          panel.style.visibility = \"visible\";\n          panel.style.filter = \"none\";\n        };\n      }\n    };\n    const snapPositions = () => {\n      const [firstSlide] = slides;\n      const visual = firstSlide?.querySelector<HTMLElement>(\".testimonial_slide_visual\");\n      if (!swiper || !firstSlide || !visual) {\n        return [];\n      }\n      const width = visual.offsetWidth;\n      const peek = iot || cinematic ? swiper.offsetWidth - width : 0;\n      const style = getComputedStyle(firstSlide);\n      const gap = Number.parseFloat(style.columnGap) || Number.parseFloat(style.gap) || 0;\n      const margin = Number.parseFloat(style.marginRight) || 0;\n      const positions: number[] = [];\n      let offset = 0;\n      for (let index = 0; index < slideCount; index++) {\n        positions.push(-offset, -(offset + width + gap - peek));\n        offset += width * 2 + gap + (index === slideCount - 1 ? 0 : margin);\n      }\n      return positions;\n    };\n    const syncControls = () => {\n      const previousDisabled = activeSnap === 0;\n      const nextDisabled = activeSnap === snapPositions().length - 1;\n      setControls((current) =>\n        current.previousDisabled === previousDisabled && current.nextDisabled === nextDisabled\n          ? current\n          : { previousDisabled, nextDisabled },\n      );\n    };\n    const goToSnap = (index: number) => {\n      const positions = snapPositions();\n      if (list && positions.length > 0) {\n        activeSnap = Math.min(positions.length - 1, Math.max(0, index));\n        list.style.transition = reduced.matches ? \"none\" : \"transform 0.5s cubic-bezier(0.455, 0.03, 0.515, 0.955)\";\n        list.style.transform = `translateX(${positions[activeSnap]}px)`;\n        activateName(Math.floor(activeSnap / 2));\n        syncControls();\n      }\n    };\n    const updateScroll = () => {\n      if (!pin) {\n        return;\n      }\n      if (!desktop.matches || reduced.matches) {\n        pin.classList.remove(\"is-scroll\");\n        return;\n      }\n      pin.classList.add(\"is-scroll\");\n      const distance = window.innerHeight * (scrollScreens ?? (iot ? slideCount - 1 : slideCount));\n      const progress = Math.min(1, Math.max(0, -pin.getBoundingClientRect().top / distance));\n      const hold = (1 - (slideCount - 1) * transitionGap) / slideCount;\n      let selected = slideCount - 1;\n      let start = 0;\n      for (let index = 0; index < slideCount - 1; index++) {\n        const end = start + hold;\n        if (progress < end + transitionGap / 2) {\n          selected = index;\n          break;\n        }\n        start = end + transitionGap;\n      }\n      if (selected !== activeSlide) {\n        switchSlide(selected, false);\n        activeSlide = selected;\n        activateName(selected);\n      }\n    };\n    const reset = () => {\n      clearPanels();\n      activeSlide = 0;\n      activeSnap = 0;\n      if (desktop.matches && !reduced.matches) {\n        switchSlide(0, true);\n        activateName(0);\n        updateScroll();\n      } else {\n        pin?.classList.remove(\"is-scroll\");\n        activateName(0);\n        goToSnap(0);\n      }\n    };\n\n    if (swiper) {\n      listen(swiper, \"pointerdown\", (event) => {\n        const pointer = event as PointerEvent;\n        if (!desktop.matches && list) {\n          dragStart = pointer.clientX;\n          dragOffset = snapPositions()[activeSnap] || 0;\n          list.style.transition = \"none\";\n          swiper.setPointerCapture(pointer.pointerId);\n        }\n      });\n      listen(swiper, \"pointermove\", (event) => {\n        const pointer = event as PointerEvent;\n        if (list && swiper.hasPointerCapture(pointer.pointerId)) {\n          list.style.transform = `translateX(${dragOffset + pointer.clientX - dragStart}px)`;\n        }\n      });\n      const finishDrag = (event: Event) => {\n        const pointer = event as PointerEvent;\n        if (!swiper.hasPointerCapture(pointer.pointerId)) {\n          return;\n        }\n        swiper.releasePointerCapture(pointer.pointerId);\n        const positions = snapPositions();\n        const dragged = dragOffset + pointer.clientX - dragStart;\n        let selected = 0;\n        for (const [index, position] of positions.entries()) {\n          if (Math.abs(position - dragged) < Math.abs(positions[selected] - dragged)) {\n            selected = index;\n          }\n        }\n        goToSnap(selected);\n      };\n      listen(swiper, \"pointerup\", finishDrag);\n      listen(swiper, \"pointercancel\", finishDrag);\n    }\n    if (previous) {\n      listen(previous, \"click\", () => goToSnap(activeSnap - 1));\n    }\n    if (next) {\n      listen(next, \"click\", () => goToSnap(activeSnap + 1));\n    }\n    listen(window, \"resize\", () => {\n      if (desktop.matches && !reduced.matches) {\n        updateScroll();\n      } else {\n        goToSnap(activeSnap);\n      }\n    });\n    listen(window, \"scroll\", updateScroll, { passive: true });\n    listen(desktop, \"change\", reset);\n    listen(reduced, \"change\", reset);\n    reset();\n    return () => {\n      for (const remove of removers) {\n        remove();\n      }\n      clearPanels();\n      list?.style.removeProperty(\"transition\");\n      pin?.classList.remove(\"is-scroll\");\n    };\n  }, [sectionRef, iot, scrollScreens, cinematic]);\n\n  return controls;\n}\n"],"mappings":"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"}