{"version":3,"file":"79.312b976e6e3df266b59b.js","mappings":"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","sources":["webpack://pratt-parent/./static/js/components/share-overlay.js"],"sourcesContent":["import { enableBodyScroll, disableBodyScroll } from 'body-scroll-lock-upgrade';\nimport * as focusTrap from 'focus-trap';\nimport { gsap, Power2 } from 'gsap/all';\n\nclass ShareOverlay {\n constructor() {\n this.rootEl = document.querySelector('.js-share-overlay');\n if (!this.rootEl) {\n throw new Error('Root share tools element not found.');\n }\n\n this.triggerEl = document.querySelector('.js-share-trigger');\n if (!this.triggerEl) {\n throw new Error('Trigger share tools element not found.');\n }\n\n this.closeButtonEl = this.rootEl.querySelector('.js-share-close');\n this.lineEl = this.rootEl.querySelector('.js-share-line');\n this.shareListEl = this.rootEl.querySelector('.share-overlay__list');\n this.shareTextCircle = this.rootEl.querySelector('.share-overlay__text-circle');\n this.shareLinks = this.rootEl.querySelectorAll('.share-overlay__link');\n\n this.isOpen = false;\n this.focusTrap = focusTrap.createFocusTrap(this.rootEl, {\n escapeDeactivates: false,\n setReturnFocus: this.triggerEl,\n });\n\n this.init();\n }\n\n init() {\n // Toggle overlay on trigger button click\n this.triggerEl.addEventListener('click', () => {\n this.isOpen = !this.isOpen;\n this.update();\n });\n\n // Close the overlay on close button click\n this.closeButtonEl.addEventListener('click', () => {\n this.isOpen = false;\n this.update();\n });\n\n // Close the overlay on escape\n document.addEventListener('keydown', evt => {\n if (this.isOpen && evt.key === 'Escape') {\n evt.preventDefault();\n this.isOpen = false;\n this.update();\n }\n });\n\n // Animate the line to the next link on hover or focus\n this.shareLinks.forEach(link => {\n const onLinkHover = () => {\n this.positionLine(link);\n this.animateLineIn();\n };\n link.addEventListener('mouseover', onLinkHover);\n link.addEventListener('focusin', onLinkHover);\n });\n\n // Re-animate to the focused element on hover out, or animate the line out\n // if no link has focus\n const onListHoverExit = () => {\n requestAnimationFrame(() => {\n if (this.shareListEl.contains(document.activeElement)) {\n this.positionLine(document.activeElement);\n this.animateLineIn();\n } else if (window.innerWidth > 768) {\n this.animateLineOut();\n }\n });\n };\n this.shareListEl.addEventListener('mouseleave', onListHoverExit);\n this.shareListEl.addEventListener('focusout', onListHoverExit);\n }\n\n close() {\n if (this.isOpen) {\n this.isOpen = false;\n this.update();\n }\n }\n\n openAnimation(onComplete) {\n gsap.to(this.rootEl, {\n duration: 0.3,\n opacity: 1,\n ease: Power2.easeInOut,\n onComplete: onComplete,\n });\n }\n\n closeAnimation() {\n gsap.to(this.rootEl, {\n duration: 0.3,\n opacity: 0,\n ease: Power2.easeInOut,\n });\n }\n\n animateLineIn() {\n const hasReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const duration = hasReducedMotion ? 0 : 0.3;\n\n const circleRect = this.shareTextCircle.getBoundingClientRect();\n gsap.to('line', {\n strokeDashoffset: this.getCirclePosition(circleRect) === 'left' ? 2000 : 0,\n duration,\n ease: Power2.easeInOut,\n });\n }\n\n animateLineOut() {\n const hasReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const duration = hasReducedMotion ? 0 : 0.3;\n\n gsap.to('line', {\n strokeDashoffset: 1000,\n duration,\n ease: Power2.easeInOut,\n onComplete: () => {\n // Reset line\n this.lineEl.removeAttribute('style');\n },\n });\n }\n\n getCirclePosition(circleRect) {\n if (circleRect.left < window.innerWidth - circleRect.right) {\n return 'left';\n } else {\n return 'right';\n }\n }\n\n positionLine(el) {\n const adminOffset = document.querySelector('.admin-bar') ? 32 : 0;\n const elRect = el.getBoundingClientRect();\n const circleRect = this.shareTextCircle.getBoundingClientRect();\n const line = this.lineEl.querySelector('line');\n\n if (this.getCirclePosition(circleRect) === 'left') {\n line.setAttribute('y2', circleRect.top - adminOffset + circleRect.height / 2);\n line.setAttribute('y1', elRect.top - adminOffset + elRect.height / 2);\n\n this.lineEl.style.cssText = `\n left: ${circleRect.right}px;\n width: ${elRect.left - circleRect.right - 20}px;\n height: calc(100% - ${circleRect.top});\n `;\n } else {\n line.setAttribute('y1', circleRect.top - adminOffset + circleRect.height / 2);\n line.setAttribute('y2', elRect.top - adminOffset + elRect.height / 2);\n\n this.lineEl.style.cssText = `\n right: ${window.innerWidth - circleRect.left}px;\n width: ${circleRect.left - elRect.right - 20}px;\n height: calc(100% - ${circleRect.top});\n `;\n }\n }\n\n positionShareCircle() {\n const shareEl = this.triggerEl.getBoundingClientRect();\n\n requestAnimationFrame(() => {\n this.shareTextCircle.style.cssText = `\n top: calc(${shareEl.top}px - var(--wp-admin--admin-bar--height, 0px));\n left: ${shareEl.left}px;\n `;\n });\n }\n\n update() {\n this.triggerEl.setAttribute('aria-expanded', this.isOpen);\n this.rootEl.setAttribute('aria-hidden', !this.isOpen);\n\n if (this.isOpen) {\n disableBodyScroll(this.rootEl);\n this.positionObserver = new ResizeObserver(() => {\n this.positionShareCircle();\n });\n this.positionObserver.observe(document.body);\n this.openAnimation(() => {\n this.focusTrap.activate();\n });\n } else {\n enableBodyScroll(this.rootEl);\n this.closeAnimation();\n this.focusTrap.deactivate();\n this.positionObserver.disconnect();\n this.positionObserver = null;\n }\n }\n}\n\nexport default ShareOverlay;\n"],"names":["constructor","this","rootEl","document","querySelector","Error","triggerEl","closeButtonEl","lineEl","shareListEl","shareTextCircle","shareLinks","querySelectorAll","isOpen","focusTrap","escapeDeactivates","setReturnFocus","init","addEventListener","update","evt","key","preventDefault","forEach","link","onLinkHover","positionLine","animateLineIn","onListHoverExit","requestAnimationFrame","contains","activeElement","window","innerWidth","animateLineOut","close","openAnimation","onComplete","gsap","to","duration","opacity","ease","Power2","easeInOut","closeAnimation","matchMedia","matches","circleRect","getBoundingClientRect","strokeDashoffset","getCirclePosition","removeAttribute","left","right","el","adminOffset","elRect","line","setAttribute","top","height","style","cssText","positionShareCircle","shareEl","disableBodyScroll","positionObserver","ResizeObserver","observe","body","activate","enableBodyScroll","deactivate","disconnect"],"sourceRoot":""}