{"version":3,"file":"app.js","mappings":"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","sources":["webpack://silverstripe-base/./themes/app/src/scripts/components/mobile-bar.js","webpack://silverstripe-base/./themes/app/src/scripts/components/page-line.js","webpack://silverstripe-base/./themes/app/src/scripts/components/scroll-reveal.js","webpack://silverstripe-base/./themes/app/src/scripts/components/scroll-to.js","webpack://silverstripe-base/./themes/app/src/scripts/components/site-announcement-bar.js","webpack://silverstripe-base/./themes/app/src/scripts/components/site-header.js","webpack://silverstripe-base/./themes/app/src/scripts/components/site-menu.js","webpack://silverstripe-base/./themes/app/src/scripts/components/site-widget.js","webpack://silverstripe-base/./themes/app/src/scripts/components/subscribe-form.js","webpack://silverstripe-base/./themes/app/src/index.js","webpack://silverstripe-base/./themes/app/src/scripts/components/page-overlay.js","webpack://silverstripe-base/./themes/app/src/scripts/components/request-a-demo-modal.js","webpack://silverstripe-base/./themes/app/src/scripts/components/wysiwyg.js","webpack://silverstripe-base/./themes/app/src/scripts/common/ajax.js","webpack://silverstripe-base/./themes/app/src/scripts/common/scroll-to.js","webpack://silverstripe-base/./themes/app/src/scripts/common/util.js"],"sourcesContent":["export default {\n init: () => {\n const mobileBar = document.querySelector('.mobile-bar')\n\n if (mobileBar) {\n const observer = new IntersectionObserver(([e]) => mobileBar.classList.toggle('is-hidden', !e.isIntersecting))\n\n observer.observe(document.querySelector('.scroll-pixel'))\n }\n },\n}\n","import \"@styles/components/page-line.css\";\n\nconst shouldAnimate = !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst canvas = document.querySelector(\".page-line-canvas\");\nconst points = Array.from(document.querySelectorAll(\".page-line-point\"));\nlet maskRects = [];\nlet visiblePoints = [];\nlet dashOffset = 0;\nlet curve = 40;\nlet lastTimestamp = null;\n\nconst getVisiblePoints = () => {\n return points.filter((point) => {\n if (point.offsetParent === null || window.getComputedStyle(point).display === \"none\") {\n return false;\n }\n\n let parent = point;\n\n while (parent) {\n if (window.getComputedStyle(parent).display === \"none\") {\n return false;\n }\n parent = parent.parentElement;\n }\n\n return true;\n });\n};\n\nconst getMaskRects = () => {\n const rects = [];\n const sections = document.querySelectorAll(\"[data-page-line-mask-target], .has-dark-page-header .page-header\");\n\n sections.forEach((section) => {\n const sectionRect = section.getBoundingClientRect();\n\n rects.push({\n x: sectionRect.x,\n y: sectionRect.y + window.scrollY,\n width: sectionRect.width,\n height: sectionRect.height,\n });\n });\n\n return rects;\n};\n\nconst setupCanvas = () => {\n const width = document.documentElement.offsetWidth;\n const height = document.documentElement.offsetHeight;\n\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width;\n canvas.height = height;\n\n const ctx = canvas.getContext(\"2d\");\n\n ctx.lineWidth = window.matchMedia(\"(min-width: 768px)\").matches ? 2 : 1;\n ctx.strokeStyle = \"black\";\n ctx.setLineDash([10, 12]);\n\n maskRects = getMaskRects();\n visiblePoints = getVisiblePoints();\n\n curve = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--page-line-curve\"), 10);\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n draw(ctx);\n};\n\nconst applyClippingRegion = (ctx) => {\n ctx.beginPath();\n\n maskRects.forEach((rect) => {\n ctx.rect(rect.x, rect.y, rect.width, rect.height);\n });\n\n ctx.clip();\n};\n\nconst drawPath = (ctx) => {\n const xOffset = 0;\n const yOffset = window.scrollY;\n\n ctx.beginPath();\n\n visiblePoints.forEach((point, index) => {\n const asTopLeft = point.classList.contains(\"as-top-left\");\n const asBottomLeft = point.classList.contains(\"as-bottom-left\");\n const asTopRight = point.classList.contains(\"as-top-right\");\n const asBottomRight = point.classList.contains(\"as-bottom-right\");\n\n const rect = point.getBoundingClientRect();\n\n if (index === 0) {\n ctx.moveTo(rect.x, rect.y + yOffset);\n } else {\n const x = rect.x + xOffset;\n const y = rect.y + yOffset;\n const c = curve;\n\n if (asTopLeft) {\n ctx.lineTo(x + c, y);\n ctx.bezierCurveTo(x + c, y, x, y, x, y + c);\n } else if (asBottomLeft) {\n ctx.lineTo(x, y - c);\n ctx.bezierCurveTo(x, y - c, x, y, x + c, y);\n } else if (asTopRight) {\n ctx.lineTo(x - c, y);\n ctx.bezierCurveTo(x - c, y, x, y, x, y + c);\n } else if (asBottomRight) {\n ctx.lineTo(x, y - c);\n ctx.bezierCurveTo(x, y - c, x, y, x - c, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n });\n\n ctx.stroke();\n};\n\nconst draw = (ctx) => {\n const currentTimestamp = performance.now();\n const timeElapsed = currentTimestamp - lastTimestamp;\n\n const dashSpeed = 0.025;\n dashOffset -= timeElapsed * dashSpeed;\n lastTimestamp = currentTimestamp;\n\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\n ctx.lineDashOffset = dashOffset;\n\n ctx.strokeStyle = \"black\";\n drawPath(ctx);\n\n ctx.save();\n applyClippingRegion(ctx);\n\n maskRects.forEach((rect) => {\n ctx.clearRect(rect.x, rect.y, rect.width, rect.height);\n });\n\n ctx.strokeStyle = \"white\";\n drawPath(ctx);\n\n ctx.restore();\n\n if (shouldAnimate) {\n requestAnimationFrame(() => draw(ctx));\n }\n};\n\nexport default {\n init: () => {\n if (!canvas) {\n return;\n }\n\n document.body.classList.add(\"has-page-line\");\n\n const resizeObserver = new ResizeObserver(() => requestAnimationFrame(setupCanvas));\n\n resizeObserver.observe(document.body);\n },\n};\n","import { animate, inView, stagger, timeline } from \"motion\";\n\nconst animateSlideReveal = (el) => {\n animate(el, { x: [0, \"100%\"] }, { duration: 1.2, delay: 0.2, easing: \"ease\" });\n};\n\nconst variants = {\n \"fade-up\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"slide-up\": {\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-up-left\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-down\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-left\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-left-slow\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-right\": {\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\",\n },\n \"slide-right\": {\n transform: \"translate3d(0, 0, 0)\",\n },\n \"fade-in\": {\n opacity: 1,\n },\n \"scale-in\": {\n opacity: 1,\n transform: \"scale(1)\",\n },\n};\n\nconst reveal = (group) => {\n if (group.dataset.srGroup === \"sequence\") {\n const sequence = [];\n\n group.querySelectorAll(`[data-sr]`).forEach((el) => {\n const variant = variants[el.dataset.sr];\n\n if (variant && el.style.display !== \"none\") {\n sequence.push([el, variant, { ease: \"ease\", duration: 0.8, at: \"-0.4\" }]);\n }\n });\n\n inView(\n group,\n () => {\n timeline(sequence).finished.then((animations) => {\n animations?.forEach((animation) => {\n animation.effect?.target?.setAttribute(\"data-sr-done\", true);\n });\n });\n },\n {\n margin: \"0px 0px -25% 0px\",\n },\n );\n } else {\n for (const [key, opts] of Object.entries(variants)) {\n const els = Array.from(group.querySelectorAll(`[data-sr=\"${key}\"]:not([data-sr-done])`)).filter((el) => {\n return window.getComputedStyle(el).display !== \"none\";\n });\n\n let duration = 0.8;\n\n if (key === \"fade-in\" || key === \"fade-left-slow\") {\n duration = 1.5;\n }\n\n if (els.length) {\n els.forEach((el, index) => {\n const checklists = el.querySelectorAll(\"[class*=as-check-list]\");\n\n if (checklists.length) {\n let children = [];\n\n Array.from(el.children).forEach((child) => {\n if ([\"as-check-list-white\"].some((className) => child.classList.contains(className)) || [\"as-check-list-blue\"].some((className) => child.classList.contains(className))) {\n const lis = Array.from(child.querySelectorAll(\"li\"));\n\n children = [...children, ...lis];\n } else {\n children.push(child);\n }\n });\n\n children.map((child) => child.setAttribute(\"data-sr\", \"fade-up\"));\n\n el.removeAttribute(\"data-sr\");\n els.splice(index, 1, ...children);\n }\n });\n\n const doAnimation = () => {\n animate(els, opts, {\n duration,\n delay: stagger(0.2),\n }).finished.then((animations) => {\n animations?.forEach((animation) => {\n animation.effect?.target?.setAttribute(\"data-sr-done\", true);\n });\n\n group.setAttribute(\"data-sr-done\", true);\n });\n };\n\n if (group.dataset.srGroup === \"onload\") {\n doAnimation();\n } else {\n inView(group, doAnimation, {\n margin: \"0px 0px -25% 0px\",\n });\n }\n }\n }\n }\n};\n\nconst handleMutations = (group, mutationList) => {\n for (const mutation of mutationList) {\n if (mutation.type === \"childList\") {\n reveal(group);\n }\n }\n};\n\nexport default {\n init: () => {\n document.querySelectorAll(\"[data-slide-reveal]\").forEach((el) => {\n const observer = new IntersectionObserver(([e]) => {\n if (e.isIntersecting) {\n animateSlideReveal(el);\n\n observer.disconnect();\n }\n });\n\n observer.observe(el);\n });\n\n document.querySelectorAll(\"[data-sr-group]\").forEach((group) => {\n if (group.closest(\"[data-disable-animations]\")) {\n group.removeAttribute(\"data-sr-group\");\n return;\n }\n\n if (group.dataset.srGroup === \"mobile\") {\n if (window.matchMedia(\"(max-width: 767px)\").matches) {\n reveal(group);\n }\n\n return;\n }\n\n if (group.dataset.srGroup !== \"trigger\") {\n reveal(group);\n }\n\n if (group.dataset.srGroup === \"observe\") {\n const observer = new MutationObserver(handleMutations.bind(null, group));\n\n observer.observe(group, {\n childList: true,\n subtree: true,\n });\n }\n\n if (group.dataset.srGroup === \"observe-only-children\") {\n const observer = new MutationObserver(handleMutations.bind(null, group));\n\n observer.observe(group, {\n childList: true,\n });\n }\n });\n },\n reveal,\n};\n","import { on } from \"delegated-events\";\nimport scrollTo from \"@common/scroll-to\";\n\nconst handleScroll = (event, el) => {\n let targetSelector = null;\n\n if (el.dataset.scroll) {\n targetSelector = el.dataset.scroll;\n } else if (el.tagName === \"A\") {\n targetSelector = el.hash;\n } else {\n return;\n }\n\n if (targetSelector) {\n const target = document.querySelector(targetSelector);\n let offset = 0;\n\n if (target) {\n event.preventDefault();\n\n // Deactivate navigation menu if active\n document.documentElement.classList.remove(\"js-menu-active\");\n\n scrollTo(target, offset);\n }\n }\n};\n\nconst handleUrl = () => {\n if (window.location.hash) {\n let targetSelector = window.location.hash;\n\n let target = document.querySelector(targetSelector);\n\n if (target) {\n document.documentElement.classList.add(\"is-scrolling\");\n window.scrollTo(0, 0);\n\n scrollTo(target);\n }\n }\n\n const urlParams = new URLSearchParams(window.location.search);\n const section = urlParams.get(\"section\");\n\n if (section) {\n const target = document.querySelector(`#${section}`);\n\n if (target) {\n document.documentElement.classList.add(\"is-scrolling\");\n\n setTimeout(() => {\n scrollTo(target);\n }, 125);\n }\n }\n};\n\n// Automatically scrolls to the first element with the [data-scrolltome] attribute\nconst handleScrollToMe = () => {\n const target = document.querySelector(\"[data-scrolltome]\");\n\n if (target) {\n setTimeout(() => {\n scrollTo(target);\n }, 250);\n }\n};\n\nexport default {\n init: () => {\n on(\"click\", \"[data-scroll]\", (event) => {\n const el = event.target.closest(\"[data-scroll]\");\n\n handleScroll(event, el);\n });\n\n // Handle any custom anchor tags\n on(\n \"click\",\n '.site-header a[href*=\"#\"]:not(.ignore-scroll), .site-footer a[href*=\"#\"]:not(.ignore-scroll), .wysiwyg a[href*=\"#\"]:not(.ignore-scroll)',\n (event) => {\n const el = event.target.closest(\"a\");\n\n handleScroll(event, el);\n },\n );\n\n handleUrl();\n handleScrollToMe();\n },\n};\n","import { on } from \"delegated-events\";\n\nconst topBar = document.querySelector(\".site-announcement-bar\");\n\nconst handleClose = () => {\n topBar.remove();\n setHeight();\n};\n\nconst setHeight = () => {\n document.documentElement.style.setProperty(\"--site-announcement-height\", `${topBar.offsetHeight}px`);\n};\n\nexport default {\n init: () => {\n if (topBar) {\n on(\"click\", \".site-announcement-bar-close\", handleClose);\n\n setHeight();\n window.addEventListener(\"resize\", setHeight);\n }\n },\n};\n","const siteHeader = document.querySelector(\".site-header\");\n\nexport default {\n init: () => {\n const scrollPixel = document.querySelector(\".scroll-pixel\");\n\n if (scrollPixel) {\n const observer = new IntersectionObserver(\n ([e]) => siteHeader.classList.toggle(\"is-stuck\", e.intersectionRatio < 1),\n {\n threshold: [1],\n },\n );\n\n observer.observe(document.querySelector(\".scroll-pixel\"));\n }\n },\n};\n","import { on } from \"delegated-events\";\nimport { gsap } from \"gsap\";\n\nconst siteMenu = document.querySelector(\".site-mobile-menu\");\n\nconst generateSiteMenuLinePath = () => {\n const svg = document.querySelector(\".site-menu-line svg\");\n const holder = document.querySelector(\".site-menu-line\");\n const svgRect = holder.getBoundingClientRect();\n\n svg.setAttribute(\"viewBox\", `-1 -1 ${svgRect.width} ${svgRect.height}`);\n\n const pathParts = [`M${svgRect.width} 0`];\n\n let a = 40;\n let b = 50;\n\n pathParts.push(`H${b}`);\n pathParts.push(`C${a} 0 0 0 0 ${b}`);\n pathParts.push(`V${svgRect.height}`);\n\n const pathData = pathParts.join(\"\");\n\n svg.innerHTML = ``;\n};\n\nconst openMenu = () => {\n siteMenu.setAttribute(\"aria-hidden\", \"false\");\n document.documentElement.classList.add(\"js-menu-active\");\n\n if (window.matchMedia(\"(prefers-reduced-motion: no-preference)\").matches) {\n gsap.set(\".site-menu-close\", { opacity: 0 });\n gsap.set(\".site-mobile-actions .btn, .site-mobile-nav > ul > li\", { y: \"60%\", opacity: 0 });\n\n const timeline = gsap.timeline();\n\n timeline.to(\".site-mobile-menu\", {\n opacity: 1,\n visibility: \"visible\",\n duration: 0.4,\n ease: \"expoScale(0.5, 7, none)\",\n });\n timeline.to(\n \".site-menu-line path\",\n {\n strokeDashoffset: 0,\n duration: 1,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<80%\",\n );\n timeline.to(\n \".site-mobile-actions .btn, .site-mobile-nav > ul > li\",\n {\n y: 0,\n opacity: 1,\n duration: 0.4,\n stagger: 0.05,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<\",\n );\n timeline.to(\n \".site-menu-close\",\n {\n opacity: 1,\n duration: 0.4,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<50%\",\n );\n }\n};\n\nconst closeMenu = async () => {\n siteMenu.setAttribute(\"aria-hidden\", \"true\");\n\n if (window.matchMedia(\"(prefers-reduced-motion: no-preference)\").matches) {\n const timeline = gsap.timeline({\n paused: true,\n });\n\n timeline.to(\n \".site-mobile-actions .btn, .site-mobile-nav > ul > li\",\n {\n y: \"60%\",\n opacity: 0,\n duration: 0.25,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<\",\n );\n\n timeline.to(\n \".site-menu-close\",\n {\n opacity: 0,\n duration: 0.3,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<\",\n );\n\n timeline.to(\n \".site-menu-line path\",\n {\n strokeDashoffset: 2000,\n duration: 0.5,\n ease: \"expoScale(0.5, 7, none)\",\n },\n \"<\",\n );\n\n timeline.to(\".site-mobile-menu\", {\n opacity: 0,\n visibility: \"invisible\",\n duration: 0.3,\n ease: \"expoScale(0.5, 7, none)\",\n });\n\n await timeline.play();\n }\n\n document.documentElement.classList.remove(\"js-menu-active\");\n};\n\nexport default {\n init: () => {\n on(\"click\", \".site-menu-trigger\", (e) => {\n const trigger = e.currentTarget;\n\n if (trigger.getAttribute(\"aria-expanded\") === \"true\") {\n closeMenu();\n } else {\n openMenu();\n }\n });\n\n on(\"click\", \".site-menu\", (e) => {\n if (!e.target.closest(\".site-menu-wrapper\")) {\n closeMenu();\n }\n });\n\n window.addEventListener(\"resize\", () => {\n setTimeout(() => {\n if (window.matchMedia(\"(max-width: 767px)\").matches) {\n generateSiteMenuLinePath();\n }\n }, 125);\n });\n\n generateSiteMenuLinePath();\n },\n};\n","import Cookies from \"js-cookie\";\nimport { on } from \"delegated-events\";\n\nconst widget = document.querySelector(\".site-widget\");\n\nconst setCookie = (state) => {\n Cookies.set(\"widgetstate\", state, {\n expires: 1,\n });\n};\n\nconst handleToggle = () => {\n const offset = widget.querySelector(\".site-widget-top\").offsetHeight;\n\n if (widget.getAttribute(\"aria-expanded\") === \"false\") {\n widget.style.transform = \"translate3d(0, 0, 0)\";\n widget.setAttribute(\"aria-expanded\", \"true\");\n setCookie(\"active\");\n } else {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`;\n widget.setAttribute(\"aria-expanded\", \"false\");\n setCookie(\"inactive\");\n }\n};\n\nconst handleClose = (e) => {\n e.stopPropagation();\n\n widget.remove();\n};\n\nexport default {\n init: () => {\n if (widget) {\n on(\"click\", \".site-widget-top\", handleToggle);\n on(\"click\", \".site-widget-close\", handleClose);\n\n const offset = widget.querySelector(\".site-widget-top\").offsetHeight;\n\n if (Cookies.get(\"widgetstate\") === \"inactive\") {\n setTimeout(() => {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`;\n widget.setAttribute(\"aria-expanded\", \"false\");\n }, 25);\n setCookie(\"inactive\");\n } else {\n widget.classList.add(\"no-animate\");\n widget.style.transform = \"translate3d(0, 0, 0)\";\n widget.setAttribute(\"aria-expanded\", \"true\");\n setCookie(\"active\");\n\n setTimeout(() => {\n widget.classList.remove(\"no-animate\");\n }, 750);\n }\n\n if (widget.classList.contains(\"has-auto-hide\")) {\n setTimeout(() => {\n if (widget.getAttribute(\"aria-expanded\") === \"true\") {\n widget.style.transform = `translate3d(0, calc(100% - ${offset}px), 0)`;\n widget.setAttribute(\"aria-expanded\", \"false\");\n setCookie(\"inactive\");\n }\n }, 5000);\n }\n }\n },\n};\n","import { on, fire } from \"delegated-events\";\nimport ajax from \"@common/ajax\";\nimport { trackGoogleAnalytics } from \"@common/util\";\nimport \"@styles/components/subscribe-form.css\";\n\nconst showFormMessages = (holder, message, success, autoHide) => {\n holder.style.display = \"block\";\n holder.innerHTML = message;\n\n if (success) {\n holder.classList.remove(\"form-message-error\");\n } else {\n holder.classList.add(\"form-message-error\");\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = \"none\";\n }, 5000);\n }\n};\n\nconst toggleSubmit = (submitButton) => {\n submitButton.disabled = !submitButton.disabled;\n submitButton.classList.toggle(\"btn-loading\");\n};\n\nexport default {\n init: () => {\n on(\"submit\", \".subscribe-form\", (e) => {\n e.preventDefault();\n\n const form = e.target;\n const email = e.target.querySelector('[type=\"email\"]');\n const formMessages = form.querySelector(\".form-messages\");\n const submitButton = form.querySelector(\"[type=submit]\");\n\n toggleSubmit(submitButton);\n\n if (email.validity.valueMissing || email.validity.typeMismatch) {\n showFormMessages(formMessages, \"Please enter a valid email\", false, true);\n\n submitButton.disabled = false;\n\n return;\n }\n\n const formData = new FormData(form);\n\n ajax\n .url(form.action)\n .body(formData)\n .post()\n .json((res) => {\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) => trackGoogleAnalytics(event));\n }\n\n form.reset();\n\n // Allow other scripts to hook into this submit\n fire(document.documentElement, \"ajaxform:submit\", {\n form: form,\n type: \"post\",\n url: new URL(form.action),\n queryParameters: new URLSearchParams(formData).toString(),\n });\n }\n\n if (res.message) {\n showFormMessages(formMessages, res.message, res.success, false);\n }\n })\n .catch((e) => {\n console.log(e);\n showFormMessages(formMessages, \"Sorry, there was a problem with your submission\", false, true);\n })\n .finally(() => {\n toggleSubmit(submitButton);\n });\n });\n },\n};\n","// Thirdparty\nimport \"swiper/css\";\nimport \"swiper/css/a11y\";\nimport \"swiper/css/autoplay\";\nimport \"swiper/css/effect-fade\";\nimport \"swiper/css/scrollbar\";\n\n// Theme\nimport \"@styles/index.css\";\n\nimport mobileBar from \"@scripts/components/mobile-bar\";\nimport pageLine from \"@scripts/components/page-line\";\nimport pageOverlay from \"@scripts/components/page-overlay\";\nimport requestADemoModal from \"@scripts/components/request-a-demo-modal\";\nimport scrollReveal from \"@scripts/components/scroll-reveal\";\nimport scrollTo from \"@scripts/components/scroll-to\";\nimport siteAnnouncementBar from \"@scripts/components/site-announcement-bar\";\nimport siteHeader from \"@scripts/components/site-header\";\nimport siteMenu from \"@scripts/components/site-menu\";\nimport siteWidget from \"@scripts/components/site-widget\";\nimport subscribeForm from \"@scripts/components/subscribe-form\";\nimport wysiwyg from \"@scripts/components/wysiwyg\";\n\nmobileBar.init();\npageLine.init();\npageOverlay.init();\nrequestADemoModal.init();\nif (!window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) {\n scrollReveal.init();\n}\nscrollTo.init();\nsiteAnnouncementBar.init();\nsiteHeader.init();\nsiteMenu.init();\nsiteWidget.init();\nsubscribeForm.init();\nwysiwyg.init();\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(() => {\n document.documentElement.classList.remove(\"_preload\");\n }, 250);\n\n const setHeights = () => {\n const siteHeader = document.querySelector(\".site-header\");\n\n if (siteHeader) {\n document.documentElement.style.setProperty(\"--site-header-height\", `${Math.ceil(siteHeader.offsetHeight)}px`);\n }\n };\n\n window.addEventListener(\"resize\", setHeights);\n\n setHeights();\n});\n\n// Dynamically load any components based on page conditions\n\nconst pageHas = (selector) => {\n return document.querySelectorAll(selector).length;\n};\n\nconst loadComponents = async () => {\n if (pageHas(\"[data-slide-toggle]\")) {\n const { default: component } = await import(\n /* webpackChunkName: \"components-slide-toggle\" */ \"@scripts/components/slide-toggle\"\n );\n\n component.init();\n }\n\n if (pageHas(\"[data-paginated-list]\")) {\n const { default: component } = await import(\n /* webpackChunkName: \"components-paginated-list\" */ \"@scripts/components/paginated-list\"\n );\n\n component.init();\n }\n\n if (pageHas(\"[data-tablist]\")) {\n const { default: component } = await import(\n /* webpackChunkName: \"components-tablist\" */ \"@scripts/components/tablist\"\n );\n\n component.init();\n }\n\n if (pageHas(\"[data-modal]\")) {\n const { default: component } = await import(/* webpackChunkName: \"components-modal\" */ \"@scripts/components/modal\");\n\n component.init();\n }\n\n if (pageHas(\".media-block\")) {\n const { default: component } = await import(\n /* webpackChunkName: \"components-media-slider\" */ \"@scripts/components/media-slider\"\n );\n\n component.init();\n }\n};\n\nloadComponents();\n","import Cookies from \"js-cookie\";\n\nexport default {\n init: async () => {\n const overlayUrl = document.body.dataset.pageOverlayUrl;\n const overlayCookie = document.body.dataset.pageOverlayCookie;\n\n if (overlayUrl) {\n const { default: component } = await import(\n /* webpackChunkName: \"components-modal\" */ \"@scripts/components/modal\"\n );\n\n component.openModal({\n type: \"content\",\n url: overlayUrl,\n });\n\n if (parseInt(overlayCookie) === 1) {\n Cookies.set(\"seenpageoverlay\", true, { expires: 1 });\n }\n }\n },\n};\n","import { on } from \"delegated-events\";\nimport Cookies from \"js-cookie\";\n\nconst showModal = async (data) => {\n const styledForm = await import(/* webpackChunkName: \"components-modal-styled-form\" */ \"@components/styled-form\");\n const { default: modal } = await import(/* webpackChunkName: \"components-modal\" */ \"@scripts/components/modal\");\n\n modal.openModal({\n type: \"content\",\n url: data.formModalEndpoint,\n useCustomClose: true,\n });\n\n on(\"modal:populate\", \"html\", () => {\n const form = document.querySelector(\".request-a-demo-form\");\n\n if (form) {\n styledForm.setupForm(form);\n\n Cookies.set(\"kredosai_form_modal_seen\", true, { expires: 1 });\n }\n });\n};\n\nexport default {\n init: () => {\n const data = JSON.parse(document.getElementById(\"app-data-json\").textContent);\n\n if (data && data.formModalEnabled) {\n if (Cookies.get(\"kredosai_form_modal_seen\")) {\n return;\n }\n\n const waitSeconds = data.formModalWaitTime || 120;\n const waitMilliseconds = waitSeconds * 1000;\n\n let startTime = parseInt(Cookies.get(\"kredosai_form_modal_start\"));\n\n if (!startTime) {\n startTime = parseInt(new Date().getTime());\n Cookies.set(\"kredosai_form_modal_start\", startTime, { expires: 1 });\n }\n\n const interval = setInterval(() => {\n const nowTime = new Date().getTime();\n const timeDiff = nowTime - startTime;\n\n if (timeDiff >= waitMilliseconds) {\n showModal(data);\n clearInterval(interval);\n }\n }, 1000);\n } else {\n Cookies.remove(\"kredosai_form_modal_start\");\n Cookies.remove(\"kredosai_form_modal_seen\");\n }\n },\n};\n","export default {\n init: () => {\n document.querySelectorAll(\".wysiwyg-article\").forEach((el) => {\n el.querySelectorAll(\"img.leftAlone\").forEach((img) => {\n const parent = img.closest(\"p\");\n\n if (!parent || !parent.nextElementSibling) {\n return;\n }\n\n const siblingImg = parent.nextElementSibling.querySelector(\"img.rightAlone\");\n\n if (siblingImg) {\n const siblingParent = siblingImg.closest(\"p\");\n\n parent.classList.add(\"img-two-col\");\n siblingParent.classList.add(\"img-two-col\");\n }\n });\n\n el.querySelectorAll(\"ol li strong:first-child\").forEach((li) => {\n li.closest(\"li\").classList.add(\"marker-bold\");\n });\n });\n },\n};\n","import wretch from 'wretch'\nimport QueryStringAddon from 'wretch/addons/queryString'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch().addon(QueryStringAddon)\n","import jump from \"jump.js\";\n\nconst getPageOffset = () => {\n let offset = 0;\n\n const siteHeader = document.querySelector(\".site-header\");\n\n if (siteHeader) {\n const siteHeaderHeight = getComputedStyle(document.documentElement).getPropertyValue(\"--site-header-height\");\n\n offset += parseInt(siteHeaderHeight);\n }\n\n return offset;\n};\n\nconst scrollTo = (target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1;\n\n if (target.dataset.scrollOffset) {\n additionalOffset = parseInt(target.dataset.scrollOffset);\n }\n\n let offset = pageOffset - additionalOffset;\n\n return new Promise((resolve) => {\n jump(target, {\n duration: 600,\n offset,\n callback: () => {\n resolve();\n },\n });\n });\n};\n\nexport const scrollToIfNeeded = (target, additionalOffset = 0) => {\n const rect = target.getBoundingClientRect();\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const isInViewport = rect.top >= 0 && rect.bottom <= viewportHeight;\n const is50PercentFromTop = rect.top <= viewportHeight / 2;\n\n if (!isInViewport || !is50PercentFromTop) {\n return scrollTo(target, additionalOffset);\n }\n};\n\nexport default scrollTo;\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"],"names":["shouldAnimate","window","matchMedia","matches","canvas","document","querySelector","points","Array","from","querySelectorAll","maskRects","visiblePoints","dashOffset","curve","lastTimestamp","setupCanvas","width","documentElement","offsetWidth","height","offsetHeight","style","ctx","getContext","lineWidth","strokeStyle","setLineDash","getMaskRects","rects","forEach","section","sectionRect","getBoundingClientRect","push","x","y","scrollY","filter","point","offsetParent","getComputedStyle","display","parent","parentElement","parseInt","getPropertyValue","clearRect","draw","drawPath","yOffset","beginPath","index","asTopLeft","classList","contains","asBottomLeft","asTopRight","asBottomRight","rect","moveTo","c","lineTo","bezierCurveTo","stroke","currentTimestamp","performance","now","lineDashOffset","save","clip","applyClippingRegion","restore","requestAnimationFrame","variants","opacity","transform","reveal","group","dataset","srGroup","sequence","el","variant","sr","ease","duration","at","inView","timeline","finished","then","animations","animation","effect","target","setAttribute","margin","key","opts","Object","entries","els","length","children","child","some","className","lis","map","removeAttribute","splice","doAnimation","animate","delay","stagger","handleMutations","mutationList","mutation","type","handleScroll","event","targetSelector","scroll","tagName","hash","offset","preventDefault","remove","scrollTo","topBar","handleClose","setHeight","setProperty","siteHeader","siteMenu","generateSiteMenuLinePath","svg","svgRect","pathParts","pathData","join","innerHTML","closeMenu","async","gsap","paused","to","strokeDashoffset","visibility","play","widget","setCookie","state","Cookies","set","expires","handleToggle","getAttribute","e","stopPropagation","showFormMessages","holder","message","success","autoHide","add","setTimeout","toggleSubmit","submitButton","disabled","toggle","init","mobileBar","IntersectionObserver","isIntersecting","observe","body","ResizeObserver","overlayUrl","pageOverlayUrl","overlayCookie","pageOverlayCookie","default","component","openModal","url","pageOverlay","data","JSON","parse","getElementById","textContent","formModalEnabled","get","waitMilliseconds","formModalWaitTime","startTime","Date","getTime","interval","setInterval","styledForm","modal","formModalEndpoint","useCustomClose","on","form","setupForm","showModal","clearInterval","requestADemoModal","observer","easing","animateSlideReveal","disconnect","closest","MutationObserver","bind","childList","subtree","handleUrl","location","URLSearchParams","search","handleScrollToMe","addEventListener","intersectionRatio","threshold","currentTarget","openMenu","siteWidget","email","formMessages","validity","valueMissing","typeMismatch","formData","FormData","ajax","action","post","json","res","ga","trackGoogleAnalytics","reset","fire","URL","queryParameters","toString","catch","console","log","finally","img","nextElementSibling","siblingImg","siblingParent","li","setHeights","Math","ceil","pageHas","selector","loadComponents","wretch","options","headers","addon","QueryStringAddon","additionalOffset","pageOffset","getPageOffset","siteHeaderHeight","scrollOffset","Promise","resolve","jump","callback","scrollToIfNeeded","viewportHeight","innerHeight","clientHeight","isInViewport","top","bottom","is50PercentFromTop","generateQueryString","params","value","dataLayer"],"sourceRoot":""}