{"version":3,"sources":["webpack://@verndale/toolkit/./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","webpack://@verndale/toolkit/./src/js/animation/eventBus/EventBus.ts","webpack://@verndale/toolkit/./src/js/animation/eventBus/index.ts","webpack://@verndale/toolkit/./src/js/animation/utils.ts","webpack://@verndale/toolkit/./src/js/helpers/variables.ts","webpack://@verndale/toolkit/./src/js/modules/introAnimation.ts"],"names":["_toConsumableArray","arr","i","arr2","hasPassiveEvents","passiveTestOptions","isIosDevice","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPosition","previousBodyPaddingRight","allowTouchMove","el","lock","preventDefault","rawEvent","e","setOverflowHidden","options","_reserveScrollBarGap","scrollBarGap","computedBodyPaddingRight","restoreOverflowSetting","setPositionFixed","_window","scrollY","scrollX","innerHeight","bottomBarHeight","restorePositionSetting","y","x","isTargetElementTotallyScrolled","targetElement","handleScroll","event","clientY","disableBodyScroll","clearAllBodyScrollLocks","enableBodyScroll","EventBus","subscriptions","eventType","callback","id","arg","key","_EventBus","EventBusSingleton","defaultEasing","defaultCSSEasing","easing","breakpoints","IntroAnimationOverlay","Component","__publicField","__async","barsSequence","textSequence","letter","timeline","colorSequence","textSequenceOut","barsSequenceOut","clipPathSequence","sequence","stagger","reversedLetters","delays","durations","translations","bar","index","_a","color"],"mappings":"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","file":"scripts/2438.b362dc5cabd4f1c9e22e.js","sourcesContent":["function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPosition = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n var computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = computedBodyPaddingRight + scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\nvar setPositionFixed = function setPositionFixed() {\n return window.requestAnimationFrame(function () {\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === undefined) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left\n };\n\n // Update the dom inside an animation frame \n var _window = window,\n scrollY = _window.scrollY,\n scrollX = _window.scrollX,\n innerHeight = _window.innerHeight;\n\n document.body.style.position = 'fixed';\n document.body.style.top = -scrollY;\n document.body.style.left = -scrollX;\n\n setTimeout(function () {\n return window.requestAnimationFrame(function () {\n // Attempt to check if the bottom bar appeared due to the position change\n var bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollY >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = -(scrollY + bottomBarHeight);\n }\n });\n }, 300);\n }\n });\n};\n\nvar restorePositionSetting = function restorePositionSetting() {\n if (previousBodyPosition !== undefined) {\n // Convert the position from \"px\" to Int\n var y = -parseInt(document.body.style.top, 10);\n var x = -parseInt(document.body.style.left, 10);\n\n // Restore styles\n document.body.style.position = previousBodyPosition.position;\n document.body.style.top = previousBodyPosition.top;\n document.body.style.left = previousBodyPosition.left;\n\n // Restore scroll\n window.scrollTo(x, y);\n\n previousBodyPosition = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n setPositionFixed();\n } else {\n setOverflowHidden(options);\n }\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n};\n\n","declare class EventBus {\n constructor();\n subscribe(\n eventType: string,\n callback: () => void\n ): {\n unsubscribe: () => void;\n };\n publish(eventType: string, arg?: symbol): void;\n}\n\nexport type Subscriptions = {\n [key: string]: {\n [key: symbol]: (arg: symbol) => void;\n };\n};\n\nfunction EventBus() {\n const subscriptions: Subscriptions = {};\n\n const subscribe = (eventType: string, callback: () => void) => {\n const id = Symbol('id');\n if (!subscriptions[eventType]) subscriptions[eventType] = {};\n subscriptions[eventType][id] = callback;\n return {\n unsubscribe: function unsubscribe() {\n delete subscriptions[eventType][id];\n if (\n Object.getOwnPropertySymbols(subscriptions[eventType]).length === 0\n ) {\n delete subscriptions[eventType];\n }\n }\n };\n };\n\n const publish = (eventType: string, arg: symbol) => {\n if (!subscriptions[eventType]) return;\n Object.getOwnPropertySymbols(subscriptions[eventType]).forEach(key =>\n subscriptions[eventType][key](arg)\n );\n };\n\n return { subscribe, publish };\n}\n\nexport default EventBus;\n","import _EventBus from './EventBus';\n\nexport const EventBus = _EventBus;\nexport const EventBusSingleton = new _EventBus();\n","import { Easing } from 'motion';\n\nexport const defaultEasing = [0.61, 1, 0.88, 1] as Easing;\n\nexport const defaultCSSEasing = (easing: Easing = defaultEasing) => {\n return `cubic-bezier(${[...easing].join(',')})`;\n};\n","// /**\n// * Key code list object\n// */\nexport const breakpoints = {\n mobile: 360,\n mobileLarge: 480,\n tablet: 768,\n tabletLandscape: 1024,\n desktop: 1280,\n wide: 1440\n};\n","import { Component } from '@verndale/core';\nimport { defaultEasing } from '../animation/utils';\nimport { ElementOrSelector, stagger, timeline } from 'motion';\nimport { TimelineDefinition } from '@motionone/dom/types/timeline/types';\nimport { EventBusSingleton } from '../animation/eventBus';\nimport { disableBodyScroll } from 'body-scroll-lock';\nimport { breakpoints } from '../helpers/variables';\n\nclass IntroAnimationOverlay extends Component {\n MOTION_ZERO_DURATION = 0.000001;\n colorPalette: Array | null = null;\n reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n breakpointTablet = window.matchMedia(`(min-width: ${breakpoints.tablet}px)`);\n hasIntroPlayed: string | null;\n\n constructor(el: HTMLElement) {\n super(el);\n this.colorPalette = [\n '#0f9d58',\n '#008768',\n '#492d8c',\n '#da291c',\n '#f47920',\n '#f4b450',\n '#2e67b2',\n '#009cde',\n '#492d8c',\n '#da291c',\n '#f47920',\n '#f4b450',\n '#2e67b2',\n '#009cde'\n ];\n this.hasIntroPlayed = localStorage.getItem('manhattan_intro-animation');\n\n if (!this.breakpointTablet.matches) {\n this.el.style.display = 'none';\n if (!this.reducedMotion.matches)\n EventBusSingleton.publish('introAnimationOverlay:hide');\n localStorage.setItem('manhattan_intro-animation', 'true');\n return;\n }\n\n if (this.hasIntroPlayed === null) {\n disableBodyScroll(\n document.querySelector('.homepage-masthead') as HTMLElement\n );\n if (!this.reducedMotion.matches && this.breakpointTablet.matches) {\n this.init();\n localStorage.setItem('manhattan_intro-animation', 'true');\n } else if (this.reducedMotion.matches || !this.breakpointTablet.matches) {\n this.el.style.display = 'none';\n if (!this.reducedMotion.matches)\n EventBusSingleton.publish('introAnimationOverlay:hide');\n localStorage.setItem('manhattan_intro-animation', 'true');\n }\n } else {\n this.el.style.display = 'none';\n if (!this.reducedMotion.matches)\n EventBusSingleton.publish('introAnimationOverlay:hide');\n }\n }\n\n setupDefaults() {\n this.dom = {\n content: this.el.querySelector(\n '.intro-animation-overlay__content'\n ),\n svgLogo: this.el.querySelector(\n '.intro-animation-overlay__logo'\n ),\n logoBars: this.el.querySelectorAll('.intro-animation-overlay__logo .bar'),\n logoLetters: this.el.querySelectorAll(\n '.intro-animation-overlay__logo .letter'\n ),\n logoTriangle: this.el.querySelector(\n '.intro-animation-overlay__logo .triangle'\n )\n };\n }\n\n async init() {\n const barsSequence = this.barsSequenceIn();\n const textSequence = this.textSequenceIn();\n [].forEach.call(this.dom.logoLetters, (letter: HTMLElement) => {\n letter.style.transform = 'translateY(100%)';\n });\n\n // uncover logo bars\n timeline(barsSequence, { duration: 1 });\n\n // stagger in logo letters\n await timeline(textSequence, {\n duration: 1,\n delay: 1 - 0.1\n }).finished;\n\n // iterate through color pallete for triangle in logo\n if (this.colorPalette)\n (this.dom.logoTriangle as HTMLElement).style.fill = this.colorPalette[0];\n const colorSequence = this.colorSequence();\n await timeline(colorSequence).finished;\n\n // let other components know that intro animation is starting to hide\n EventBusSingleton.publish('introAnimationOverlay:hide');\n\n const textSequenceOut = this.textSequenceOut();\n const barsSequenceOut = this.barsSequenceOut();\n const clipPathSequence = this.clipPathSequence();\n timeline(textSequenceOut, { duration: 1 });\n timeline(barsSequenceOut, {\n duration: 1,\n delay: 0.5\n });\n await timeline(clipPathSequence, { duration: 0.75, delay: 0.75 }).finished;\n this.el.style.display = 'none';\n }\n\n textSequenceIn() {\n const sequence = [] as TimelineDefinition;\n if (!this.dom.logoLetters) return sequence;\n sequence.push([\n this.dom.logoLetters as ElementOrSelector,\n {\n y: ['110%', 0]\n },\n {\n delay: stagger(0.08),\n easing: 'ease-out'\n }\n ]);\n\n return sequence;\n }\n\n textSequenceOut() {\n const sequence = [] as TimelineDefinition;\n if (!this.dom.logoLetters) return sequence;\n const reversedLetters = Array.from(\n this.dom.logoLetters as NodeListOf\n ).reverse();\n\n sequence.push([\n reversedLetters as ElementOrSelector,\n {\n y: [0, '-110%']\n },\n {\n delay: stagger(0.05),\n easing: 'ease-out'\n }\n ]);\n\n return sequence.reverse();\n }\n\n barsSequenceIn() {\n const sequence = [] as TimelineDefinition;\n const delays = [0.2, 0.15, 0.09, 0.05, 0];\n const durations = [0.1, 0.1, 0.1, 0.1, 0.1];\n const translations = [\n 'translate(9px, -9px)',\n 'translate(20px, -20px)',\n 'translate(30px, -40px)',\n 'translate(20px, -27px)',\n 'translate(36px, -45px)'\n ];\n [].forEach.call(this.dom.logoBars, (bar: HTMLElement, index: number) => {\n sequence.push([\n bar as ElementOrSelector,\n {\n transform: ['translate(0, 0)', translations[index]]\n },\n {\n duration: durations[index],\n easing: defaultEasing,\n at: delays[index]\n }\n ]);\n });\n\n return sequence;\n }\n\n barsSequenceOut() {\n const sequence = [] as TimelineDefinition;\n const delays = [0, 0.05, 0.09, 0.15, 0.2];\n const durations = [0.1, 0.1, 0.1, 0.1, 0.1];\n const translations = [\n 'translate(-22px, 40px)',\n 'translate(-22px, 40px)',\n 'translate(-22px, 40px)',\n 'translate(-22px, 40px)',\n 'translate(-22px, 40px)'\n ];\n\n [].forEach.call(this.dom.logoBars, (bar: HTMLElement, index: number) => {\n sequence.push([\n bar as ElementOrSelector,\n {\n transform: [translations[index], 'translate(0, 0)']\n },\n {\n duration: durations[index],\n easing: defaultEasing,\n at: delays[index]\n }\n ]);\n });\n\n return sequence;\n }\n\n colorSequence() {\n const sequence = [] as TimelineDefinition;\n this.colorPalette?.forEach(color => {\n sequence.push([\n this.dom.logoTriangle as ElementOrSelector,\n {\n fill: color\n },\n {\n duration: this.MOTION_ZERO_DURATION,\n delay: 0.3\n }\n ]);\n });\n return sequence;\n }\n\n clipPathSequence() {\n // clip-path: polygon(0 0, 100% 0%, 100% 100%, 0% 100%);\n const sequence = [] as TimelineDefinition;\n\n sequence.push([\n this.el as ElementOrSelector,\n {\n clipPath: [\n 'polygon(0 0, 150% 0%, 100% 100%, 0% 100%)',\n 'polygon(0 0, 0% 0%, -50% 100%, 0% 100%)'\n ]\n }\n ]);\n\n return sequence;\n }\n}\n\nexport default IntroAnimationOverlay;\n"],"sourceRoot":""}