{"version":3,"file":"elements-user-groups.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/elements/user-groups.js","webpack://silverstripe-base/./themes/app/src/scripts/common/util.js","webpack://silverstripe-base/./node_modules/@motionone/dom/dist/animate/index.es.js","webpack://silverstripe-base/./node_modules/@motionone/dom/dist/animate/create-animate.es.js","webpack://silverstripe-base/./node_modules/motion/dist/animate.es.js"],"sourcesContent":["import { animate, inView, stagger } from \"motion\";\nimport { gsap } from \"gsap\";\nimport Swiper from \"swiper\";\nimport { A11y, Autoplay, Navigation } from \"swiper/modules\";\nimport { isTouchDevice } from \"@common/util\";\n\ndocument.querySelectorAll(\".element-usergroups\").forEach((el) => {\n const container = el.querySelector(\".swiper\");\n\n new Swiper(container, {\n modules: [A11y, Autoplay, Navigation],\n // autoplay: {\n // delay: 4000,\n // pauseOnMouseEnter: true,\n // },\n loop: true,\n speed: 500,\n navigation: {\n nextEl: el.querySelector(\".slider-button-next\"),\n prevEl: el.querySelector(\".slider-button-prev\"),\n },\n slidesPerView: 1,\n breakpoints: {\n 1024: {\n slidesPerView: 2,\n },\n 1280: {\n slidesPerView: 3,\n },\n },\n });\n\n if (!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n if (window.matchMedia(\"(min-width: 1280px)\").matches) {\n const oddSlides = el.querySelectorAll(\".user-group-slide.is-odd\");\n\n inView(\n el,\n () => {\n animate(\n oddSlides,\n { y: -96 },\n {\n duration: 0.8,\n delay: stagger(0.4),\n },\n );\n },\n {\n margin: \"0px 0px -25% 0px\",\n },\n );\n }\n }\n});\n\nconst handleUserGroupSlideTouch = (e) => {\n const slide = e.currentTarget.closest(\".user-group-slide\");\n\n if (slide.classList.contains(\"is-active\")) {\n handleUserGroupSlideLeave(e);\n } else {\n handleUserGroupSlideEnter(e);\n }\n};\n\nconst handleUserGroupSlideEnter = (e) => {\n const slide = e.currentTarget;\n const details = slide.querySelector(\".user-group-details\");\n\n slide.classList.add(\"is-active\");\n\n gsap.timeline().to(details, { marginBottom: 0 });\n};\n\nconst handleUserGroupSlideLeave = (e) => {\n const slide = e.currentTarget;\n const details = slide.querySelector(\".user-group-details\");\n\n slide.classList.remove(\"is-active\");\n\n gsap.timeline().to(details, { marginBottom: details.offsetHeight * -1 });\n};\n\nconst init = () => {\n document.querySelectorAll(\".element-usergroups .user-group-slide\").forEach((slide) => {\n const details = slide.querySelector(\".user-group-details\");\n\n details.style.marginBottom = `${details.offsetHeight * -1}px`;\n\n if (isTouchDevice) {\n slide.removeEventListener(\"touchend\", handleUserGroupSlideTouch);\n slide.addEventListener(\"touchend\", handleUserGroupSlideTouch);\n } else {\n slide.removeEventListener(\"mouseenter\", handleUserGroupSlideEnter);\n slide.addEventListener(\"mouseenter\", handleUserGroupSlideEnter);\n\n slide.removeEventListener(\"mouseleave\", handleUserGroupSlideLeave);\n slide.addEventListener(\"mouseleave\", handleUserGroupSlideLeave);\n }\n });\n};\n\nwindow.addEventListener(\"resize\", init);\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n init();\n});\n","export const isTouchDevice = \"ontouchstart\" in document.documentElement;\n\nexport const generateQueryString = (data = {}) => {\n let params = data;\n\n if (data instanceof FormData === true) {\n params = {};\n\n data.forEach((value, key) => (params[key] = value));\n }\n\n for (const key in params) {\n if (params[key] === \"\") {\n delete params[key];\n }\n }\n\n return new URLSearchParams(params);\n};\n\nexport const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n window.dataLayer.push(event);\n }\n};\n","import { Animation } from '@motionone/animation';\nimport { createAnimate } from './create-animate.es.js';\n\nconst animate = createAnimate(Animation);\n\nexport { animate };\n","import { invariant } from 'hey-listen';\nimport { animateStyle } from './animate-style.es.js';\nimport { getOptions } from './utils/options.es.js';\nimport { resolveElements } from '../utils/resolve-elements.es.js';\nimport { withControls } from './utils/controls.es.js';\nimport { resolveOption } from '../utils/stagger.es.js';\n\nfunction createAnimate(AnimatePolyfill) {\n return function animate(elements, keyframes, options = {}) {\n elements = resolveElements(elements);\n const numElements = elements.length;\n invariant(Boolean(numElements), \"No valid element provided.\");\n invariant(Boolean(keyframes), \"No keyframes defined.\");\n /**\n * Create and start new animations\n */\n const animationFactories = [];\n for (let i = 0; i < numElements; i++) {\n const element = elements[i];\n for (const key in keyframes) {\n const valueOptions = getOptions(options, key);\n valueOptions.delay = resolveOption(valueOptions.delay, i, numElements);\n const animation = animateStyle(element, key, keyframes[key], valueOptions, AnimatePolyfill);\n animationFactories.push(animation);\n }\n }\n return withControls(animationFactories, options, \n /**\n * TODO:\n * If easing is set to spring or glide, duration will be dynamically\n * generated. Ideally we would dynamically generate this from\n * animation.effect.getComputedTiming().duration but this isn't\n * supported in iOS13 or our number polyfill. Perhaps it's possible\n * to Proxy animations returned from animateStyle that has duration\n * as a getter.\n */\n options.duration);\n };\n}\n\nexport { createAnimate };\n","import { animate as animate$1, withControls } from '@motionone/dom';\nimport { isFunction } from '@motionone/utils';\nimport { Animation } from '@motionone/animation';\n\nfunction animateProgress(target, options = {}) {\n return withControls([\n () => {\n const animation = new Animation(target, [0, 1], options);\n animation.finished.catch(() => { });\n return animation;\n },\n ], options, options.duration);\n}\nfunction animate(target, keyframesOrOptions, options) {\n const factory = isFunction(target) ? animateProgress : animate$1;\n return factory(target, keyframesOrOptions, options);\n}\n\nexport { animate, animateProgress };\n"],"names":["document","querySelectorAll","forEach","el","container","querySelector","Swiper","modules","A11y","Autoplay","Navigation","loop","speed","navigation","nextEl","prevEl","slidesPerView","breakpoints","window","matchMedia","matches","oddSlides","inView","animate","y","duration","delay","stagger","margin","handleUserGroupSlideTouch","e","currentTarget","closest","classList","contains","handleUserGroupSlideLeave","handleUserGroupSlideEnter","slide","details","add","gsap","timeline","to","marginBottom","remove","offsetHeight","init","style","isTouchDevice","removeEventListener","addEventListener","documentElement","generateQueryString","data","params","FormData","value","key","URLSearchParams","trackGoogleAnalytics","event","dataLayer","push","AnimatePolyfill","elements","keyframes","options","numElements","length","Boolean","animationFactories","i","element","valueOptions","animation","animateProgress","target","finished","catch","keyframesOrOptions"],"sourceRoot":""}