{"version":3,"file":"PovioTestimonials-DCn4UoIB.js","names":["RefObject","useEffect","useState","usePovioTestimonials","sectionRef","t0","$","_c","iot","undefined","t1","Symbol","for","previousDisabled","nextDisabled","controls","setControls","t2","t3","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","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","panelIndex","panel_1","animation_1","animate","duration","delay","easing","fill","onfinish","panelIndex_0","panel_2","animation_2","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","Button","Typography","useRef","usePovioTestimonials","defaultClients","id","name","position","tenure","portrait","mobile","desktop","tablet","quote","logo","src","width","height","portraitSizes","PovioTestimonials","t0","$","_c","t1","undefined","clients","t2","iot","t3","sectionRef","controls","t4","t5","map","_temp","t6","t7","_temp2","t8","t9","previousDisabled","t10","Symbol","for","t11","t12","nextDisabled","t13","t14","t15","t16","t17","client_0","client","index"],"sources":["../../src/components/features/povio/usePovioTestimonials.ts","../../src/components/features/povio/PovioTestimonials.tsx"],"sourcesContent":["import { type RefObject, useEffect, useState } from \"react\";\n\nexport function usePovioTestimonials(sectionRef: RefObject<HTMLElement | null>, iot = false) {\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      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 ? 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 * (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]);\n\n  return controls;\n}\n","import { Button, Typography } from \"@povio/ui\";\nimport { useRef } from \"react\";\n\nimport { usePovioTestimonials } from \"./usePovioTestimonials\";\n\nimport \"./PovioTestimonials.css\";\n\nconst defaultClients = [\n  {\n    id: \"alexis-ohanian\",\n    name: \"Alexis Ohanian\",\n    position: \"Co-founder @ Reddit & Founder @ 776\",\n    tenure: \"Povio client since 2017\",\n    portrait: {\n      mobile: \"/povio/reference/testimonials/alexis-320.webp\",\n      desktop: \"/povio/reference/testimonials/alexis-504.webp\",\n      tablet: \"/povio/reference/testimonials/alexis-640.webp\",\n    },\n    quote: \"“I’ve been blown away by Povio.\",\n    logo: { src: \"/povio/reference/testimonials/reddit.svg\", width: 82, height: 80 },\n  },\n  {\n    id: \"ryan-petersen\",\n    name: \"Ryan Petersen\",\n    position: \"Founder and CEO @ Flexport\",\n    portrait: {\n      mobile: \"/povio/reference/testimonials/ryan-320.webp\",\n      desktop: \"/povio/reference/testimonials/ryan-504.webp\",\n      tablet: \"/povio/reference/testimonials/ryan-640.webp\",\n    },\n    quote: \"“They consistently deliver high quality work within the budget.\",\n    logo: { src: \"/povio/reference/testimonials/flexport.svg\", width: 119, height: 80 },\n  },\n];\n\n// Match the fluid portrait panels below the desktop breakpoint, including the height-capped page inset.\nconst portraitSizes =\n  \"(min-width: 768px) calc(70vw - clamp(2rem, calc(0.5714285714rem + min(7.1428571429vw, 9.2857142857vh)), 8rem)), calc(100vw - clamp(2rem, calc(0.5714285714rem + min(7.1428571429vw, 9.2857142857vh)), 8rem) - clamp(4rem, 25vw, 8rem))\";\n\nexport function PovioTestimonials({ clients = defaultClients, iot = false } = {}) {\n  const sectionRef = useRef<HTMLElement>(null);\n  const controls = usePovioTestimonials(sectionRef, iot);\n\n  return (\n    <div\n      className=\"testimonial_pin\"\n      data-povio-testimonials\n    >\n      <section\n        ref={sectionRef}\n        className={`testimonial_slider_wrap u-section-xl is-centered${iot ? \" is-iot\" : \"\"}`}\n        aria-label=\"Client testimonials\"\n        data-testimonials\n        data-fullscreen=\"true\"\n        data-povio-testimonials\n      >\n        <div\n          className=\"testimonial_slider_contain\"\n          data-povio-testimonials\n        >\n          <div\n            className=\"testimonial_slider_layout\"\n            data-povio-testimonials\n          >\n            <div\n              className=\"testimonial_info_wrap\"\n              data-povio-testimonials\n            >\n              <div\n                className=\"testimonial_info_list\"\n                role=\"list\"\n                data-povio-testimonials\n              >\n                {clients.map((client, index) => (\n                  <div\n                    key={client.id}\n                    className={`testimonial_info_item${index === 0 ? \" is-active\" : \"\"}`}\n                    data-name-item\n                    data-id={client.id}\n                    role=\"listitem\"\n                    data-povio-testimonials\n                  >\n                    <div\n                      className=\"client_info_wrap\"\n                      data-povio-testimonials\n                    >\n                      <Typography\n                        as=\"div\"\n                        size=\"body\"\n                        className=\"client_name\"\n                        data-povio-testimonials\n                      >\n                        {client.name}\n                      </Typography>\n                      <Typography\n                        as=\"div\"\n                        size=\"body\"\n                        className=\"client_position\"\n                        data-povio-testimonials\n                      >\n                        {client.position}\n                      </Typography>\n                      {client.tenure && (\n                        <Typography\n                          as=\"div\"\n                          size=\"body\"\n                          className=\"client_tenure\"\n                          data-povio-testimonials\n                        >\n                          {client.tenure}\n                        </Typography>\n                      )}\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </div>\n            <div\n              className=\"testimonial_slides_wrap\"\n              data-testimonial-swiper\n              data-povio-testimonials\n            >\n              <div\n                className=\"testimonial_slider_list\"\n                data-povio-testimonials\n              >\n                {clients.map((client) => (\n                  <div\n                    key={client.id}\n                    className=\"testimonial_slider_item\"\n                    data-testimonial-slide\n                    data-povio-testimonials\n                  >\n                    <div\n                      className=\"testimonial_slide_visual\"\n                      data-povio-testimonials\n                    >\n                      <picture\n                        className=\"contents\"\n                        data-povio-testimonials\n                      >\n                        <source\n                          media=\"(min-width: 992px)\"\n                          type=\"image/webp\"\n                          srcSet={client.portrait.desktop}\n                        />\n                        <source\n                          type=\"image/webp\"\n                          srcSet={`${client.portrait.mobile} 320w, ${client.portrait.desktop} 504w, ${client.portrait.tablet} 640w`}\n                          sizes={portraitSizes}\n                        />\n                        <img\n                          className=\"client_image\"\n                          src={client.portrait.desktop}\n                          width={504}\n                          height={552}\n                          decoding=\"async\"\n                          alt=\"\"\n                          data-povio-testimonials\n                        />\n                      </picture>\n                    </div>\n                    <div\n                      className=\"testimonial_slide_content\"\n                      data-povio-testimonials\n                    >\n                      <Typography\n                        as=\"div\"\n                        size=\"body\"\n                        className=\"client_testimonial\"\n                        data-povio-testimonials\n                      >\n                        {client.quote}\n                      </Typography>\n                      <img\n                        className=\"client_logo\"\n                        src={client.logo.src}\n                        width={client.logo.width}\n                        height={client.logo.height}\n                        alt=\"\"\n                        data-povio-testimonials\n                      />\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </div>\n            <div\n              className=\"testimonial_slider_controls\"\n              data-povio-testimonials\n            >\n              <Button\n                className={`testimonial_slider_button${controls.previousDisabled ? \" is-disabled\" : \"\"}`}\n                type=\"button\"\n                size=\"none\"\n                variant=\"text\"\n                color=\"secondary\"\n                data-nav-prev\n                aria-label=\"previous slide\"\n                isDisabled={controls.previousDisabled}\n                data-povio-testimonials\n              >\n                <svg\n                  className=\"testimonial_slider_icon\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  width=\"100%\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  aria-hidden=\"true\"\n                  data-povio-testimonials\n                >\n                  <path\n                    d=\"M10.5753 17.7615C10.2572 18.0796 9.74137 18.0794 9.42317 17.7615L4.23775 12.5761C3.91956 12.2579 3.91956 11.7421 4.23775 11.4239L9.42317 6.23852C9.74138 5.92057 10.2572 5.92041 10.5753 6.23852C10.8934 6.55663 10.8932 7.07245 10.5753 7.39066L6.78073 11.1852L19.6462 11.1852C20.0962 11.1852 20.461 11.55 20.461 12C20.461 12.45 20.0962 12.8148 19.6462 12.8148L6.78073 12.8148L10.5753 16.6093C10.8932 16.9275 10.8934 17.4434 10.5753 17.7615Z\"\n                    fill=\"currentColor\"\n                    data-povio-testimonials\n                  />\n                </svg>\n              </Button>\n              <Button\n                className={`testimonial_slider_button${controls.nextDisabled ? \" is-disabled\" : \"\"}`}\n                type=\"button\"\n                size=\"none\"\n                variant=\"text\"\n                color=\"secondary\"\n                data-nav-next\n                aria-label=\"next slide\"\n                isDisabled={controls.nextDisabled}\n                data-povio-testimonials\n              >\n                <svg\n                  className=\"testimonial_slider_icon\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                  width=\"100%\"\n                  viewBox=\"0 0 24 24\"\n                  fill=\"none\"\n                  aria-hidden=\"true\"\n                  data-povio-testimonials\n                >\n                  <path\n                    d=\"M13.8856 6.23852C14.2037 5.92041 14.7196 5.92057 15.0378 6.23852L20.2232 11.4239C20.5414 11.7421 20.5414 12.2579 20.2232 12.5761L15.0378 17.7615C14.7196 18.0794 14.2037 18.0796 13.8856 17.7615C13.5675 17.4434 13.5677 16.9276 13.8856 16.6093L17.6802 12.8148L4.81476 12.8148C4.36477 12.8148 3.99999 12.45 3.99999 12C3.99999 11.55 4.36477 11.1852 4.81476 11.1852L17.6802 11.1852L13.8856 7.39066C13.5677 7.07245 13.5675 6.55663 13.8856 6.23852Z\"\n                    fill=\"currentColor\"\n                    data-povio-testimonials\n                  />\n                </svg>\n              </Button>\n            </div>\n          </div>\n        </div>\n      </section>\n    </div>\n  );\n}\n"],"mappings":"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"}