{"version":3,"file":"pages-home.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/scripts/common/hover-intent.js","webpack://silverstripe-base/./themes/app/src/pages/home.js"],"sourcesContent":["/*\n * https://github.com/svivian/sv-hover-intent-js\n */\n\nconst hoverIntent = function (elements, userConfig) {\n const defaultOptions = {\n exitDelay: 400,\n interval: 100,\n sensitivity: 7,\n };\n let config = {};\n\n let currX, currY, prevX, prevY;\n let allElems, pollTimer, exitTimer;\n\n // private methods\n\n // override default options with user config\n const extend = function (defaults, userArgs) {\n for (let i in userArgs) {\n defaults[i] = userArgs[i];\n }\n\n return defaults;\n };\n\n // update mouse position\n const mouseTrack = function (ev) {\n currX = ev.pageX;\n currY = ev.pageY;\n };\n\n // check if mouse movement has slowed enough to trigger active state\n const mouseCompare = function (targetElem) {\n const distX = prevX - currX,\n distY = prevY - currY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n if (distance < config.sensitivity) {\n // if we re-entered an element, cancel delayed exit and clear any active elements immediately\n clearTimeout(exitTimer);\n for (let elem of allElems) {\n if (elem.isActive) {\n config.onExit(elem);\n elem.isActive = false;\n }\n }\n\n // trigger hover\n config.onEnter(targetElem);\n targetElem.isActive = true;\n } else {\n // update previous coordinates and try again later\n prevX = currX;\n prevY = currY;\n pollTimer = setTimeout(function () {\n mouseCompare(targetElem);\n }, config.interval);\n }\n };\n\n const init = function (elements, userConfig) {\n if (!userConfig || !userConfig.onEnter || !userConfig.onExit) {\n throw \"onEnter and onExit callbacks must be provided\";\n }\n config = extend(defaultOptions, userConfig);\n allElems = elements;\n\n for (let elem of allElems) {\n // holds current element state\n elem.isActive = false;\n // keeps track of mouse position\n elem.addEventListener(\"mousemove\", mouseTrack);\n\n elem.addEventListener(\"mouseenter\", function (ev) {\n // set initial entry position\n prevX = ev.pageX;\n prevY = ev.pageY;\n // if this element is already active, cancel exit\n if (elem.isActive) {\n clearTimeout(exitTimer);\n return;\n }\n\n // while mouse is over this element, check distance every 100ms\n pollTimer = setTimeout(function () {\n mouseCompare(elem);\n }, config.interval);\n });\n elem.addEventListener(\"mouseleave\", function () {\n clearTimeout(pollTimer);\n if (!elem.isActive) return;\n\n exitTimer = setTimeout(function () {\n config.onExit(elem);\n elem.isActive = false;\n }, config.exitDelay);\n });\n }\n };\n\n init(elements, userConfig);\n};\n\nexport default hoverIntent;\n","import Swiper from \"swiper\";\nimport { A11y, Autoplay, EffectFade, Pagination } from \"swiper/modules\";\nimport \"@styles/components/slider.css\";\nimport hoverIntent from \"@common/hover-intent\";\nimport { gsap } from \"gsap\";\n\nconst mediaItems = document.querySelector(\".home-media-items\");\n\nif (mediaItems) {\n new Swiper(mediaItems.querySelector(\".swiper\"), {\n modules: [A11y, Autoplay, EffectFade],\n autoplay: {\n delay: 5000,\n },\n effect: \"fade\",\n fadeEffect: {\n crossFade: true,\n },\n speed: 1000,\n });\n}\n\nconst canHoverHomeLeadIn = (el) => {\n if (!el.closest(\"[data-sr-done]\")) {\n return false;\n }\n\n if (window.matchMedia(\"(max-width: 1023px)\").matches) {\n return false;\n }\n\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n return false;\n }\n\n return true;\n};\n\ndocument.querySelectorAll(\".home-lead-in\").forEach((el) => {\n const container = el.querySelector(\".swiper\");\n\n new Swiper(container, {\n modules: [A11y, Autoplay, EffectFade, Pagination],\n autoplay: {\n delay: 4000,\n pauseOnMouseEnter: true,\n },\n effect: \"fade\",\n fadeEffect: {\n crossFade: true,\n },\n speed: 1000,\n pagination: {\n el: el.querySelector(\".slider-pagination\"),\n },\n });\n\n new hoverIntent([el], {\n onEnter: () => {\n if (canHoverHomeLeadIn(el)) {\n const elRect = el.getBoundingClientRect();\n const container = el.closest(\".home-lead-in-container\");\n const containerRect = container.getBoundingClientRect();\n const parent = el.parentNode;\n\n parent.style.width = `${elRect.width}px`;\n parent.style.height = `${elRect.height}px`;\n\n const growAmount = elRect.top - containerRect.top + parseFloat(window.getComputedStyle(container).marginTop);\n\n el.style.position = \"absolute\";\n\n gsap.to(el, {\n height: elRect.height + growAmount * 2,\n top: -growAmount,\n duration: 0.3,\n ease: \"expoScale(0.5, 7, none)\",\n });\n }\n },\n onExit: async () => {\n if (canHoverHomeLeadIn(el)) {\n const parent = el.parentNode;\n\n await gsap.to(el, { height: parent.offsetHeight, top: \"auto\", duration: 0.2, ease: \"expoScale(0.5, 7, none)\" });\n\n el.style.position = null;\n parent.style = null;\n }\n },\n exitDelay: 100,\n interval: 50,\n sensitivity: 7,\n });\n});\n"],"names":["elements","userConfig","defaultOptions","exitDelay","interval","sensitivity","currX","currY","prevX","prevY","allElems","pollTimer","exitTimer","config","mouseTrack","ev","pageX","pageY","mouseCompare","targetElem","distX","distY","Math","sqrt","clearTimeout","elem","isActive","onExit","onEnter","setTimeout","defaults","userArgs","i","extend","addEventListener","init","mediaItems","document","querySelector","Swiper","modules","A11y","Autoplay","EffectFade","autoplay","delay","effect","fadeEffect","crossFade","speed","canHoverHomeLeadIn","el","closest","window","matchMedia","matches","querySelectorAll","forEach","container","Pagination","pauseOnMouseEnter","pagination","hoverIntent","elRect","getBoundingClientRect","containerRect","parent","parentNode","style","width","height","growAmount","top","parseFloat","getComputedStyle","marginTop","position","gsap","to","duration","ease","async","offsetHeight"],"sourceRoot":""}