{"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/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","IntroAnimationOverlay","Component","__publicField","breakpoints","__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.17dd14e9e3a9d31d65ed.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","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<string> | 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<HTMLElement>(\n        '.intro-animation-overlay__content'\n      ),\n      svgLogo: this.el.querySelector<HTMLElement>(\n        '.intro-animation-overlay__logo'\n      ),\n      logoBars: this.el.querySelectorAll('.intro-animation-overlay__logo .bar'),\n      logoLetters: this.el.querySelectorAll<HTMLElement>(\n        '.intro-animation-overlay__logo .letter'\n      ),\n      logoTriangle: this.el.querySelector<HTMLElement>(\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<HTMLElement>\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":""}