{"version":3,"sources":["webpack://@verndale/toolkit/./src/js/animation/eventBus/EventBus.ts","webpack://@verndale/toolkit/./src/js/animation/eventBus/index.ts","webpack://@verndale/toolkit/./src/js/modules/siteSelector.ts"],"names":["EventBus","subscriptions","eventType","callback","id","arg","key","_EventBus","EventBusSingleton","SiteSelector","Component","el","__publicField","breakpoints","_a","_b","staggerItems","sequence","stagger","timeline","item","__async"],"mappings":"uIAiBA,SAASA,GAAW,CAClB,MAAMC,EAA+B,CAAC,EAyBtC,MAAO,CAAE,UAvBS,CAACC,EAAmBC,IAAyB,CAC7D,MAAMC,EAAK,OAAO,IAAI,EACtB,OAAKH,EAAcC,KAAYD,EAAcC,GAAa,CAAC,GAC3DD,EAAcC,GAAWE,GAAMD,EACxB,CACL,YAAa,UAAuB,CAClC,OAAOF,EAAcC,GAAWE,GAE9B,OAAO,sBAAsBH,EAAcC,EAAU,EAAE,SAAW,GAElE,OAAOD,EAAcC,EAEzB,CACF,CACF,EASoB,QAPJ,CAACA,EAAmBG,IAAgB,CAC9C,CAACJ,EAAcC,IACnB,OAAO,sBAAsBD,EAAcC,EAAU,EAAE,QAAQI,GAC7DL,EAAcC,GAAWI,GAAKD,CAAG,CACnC,CACF,CAE4B,CAC9B,CAEA,QAAeL,EC5CF,EAAWO,KACXC,EAAoB,IAAID,C,ydCGrC,MAAME,UAAqBC,WAAU,CAcnC,YAAYC,EAAiB,CAC3B,MAAMA,CAAE,EAdVC,EAAA,4BAAuB,MACvBA,EAAA,kBAAa,OAAO,WAClB,eAAeC,wBACjB,CAAC,EACDD,EAAA,2BAAsB,OAAO,WAC3B,eAAeC,eACjB,CAAC,EAEDD,EAAA,oBAAoC,IAAI,EACxCA,EAAA,qBAAgB,OAAO,WAAW,kCAAkC,CAAC,EACrEA,EAAA,oBAAe,KACfA,EAAA,qBAAgB,OAAO,UAAU,CAMjC,CAEA,eAAgB,CACd,KAAK,IAAM,CACT,GAAI,KAAK,GAET,eAAgB,KAAK,GAAG,cACtB,6BACF,EACA,aACE,KAAK,GAAG,cAA2B,iCAAiC,CACxE,CACF,CAEA,MAAO,CACJ,KAAK,IAAI,aAA6B,aAAa,QAAS,cAAc,CAE7E,CAEA,cAAe,CA3CjB,IAAAE,GA4CKA,EAAA,KAAK,IAAI,iBAAT,MAAAA,EAAyC,iBACxC,QACA,KAAK,wBAAwB,KAAK,IAAI,CAAC,EAEzC,OAAO,iBAAiB,SAAU,KAAK,aAAa,KAAK,IAAI,CAAC,CAChE,CAEA,mBAAmB,EAAU,CAnD/B,IAAAA,EAAAC,EAoDQ,CAAC,KAAK,WAAW,SAEnB,CAAE,KAAK,IAAI,GAAmB,SAAS,EAAE,MAAc,GACvD,GAAEA,GAAAD,EAAA,EAAE,SAAF,YAAAA,EAA0B,YAA1B,MAAAC,EAAqC,SACrC,0BAGFP,YAA0B,qBAAqB,EAC/C,KAAK,UAAU,EAEnB,CAEA,cAAe,CAhEjB,IAAAM,EAiEQ,OAAO,aAAe,KAAK,iBAC7BA,EAAA,KAAK,eAAL,MAAAA,EAAmB,UAAU,EAC5B,KAAK,IAAI,GAAmB,UAAU,OAAO,qBAAqB,EACnE,KAAK,cAAgB,OAAO,WAC5B,KAAK,WAAa,OAAO,WACvB,eAAeD,wBACjB,EACA,KAAK,oBAAsB,OAAO,WAChC,eAAeA,eACjB,EAEJ,CAEA,WAAY,CACV,MAAMG,EAAgB,KAAK,IAAI,GAAmB,iBAChD,qDACF,EAEMC,EAAW,CAAC,EAClBA,EAAS,KAAK,CAAE,KAAM,QAAS,GAAI,CAAE,CAAC,EACtCA,EAAS,KAAK,CAAE,KAAM,gBAAiB,GAAI,GAAK,CAAC,EACjDA,EAAS,KAAK,CACZ,KAAK,IAAI,WACT,CACE,UAAW,CAAC,cAAe,aAAa,CAC1C,EACA,CACE,SAAU,EACV,GAAI,OACN,CACF,CAAC,EACDA,EAAS,KAAK,CACZD,EACA,CACE,QAAS,CAAC,EAAG,CAAC,EACd,UAAW,CAAC,sBAAuB,iBAAiB,CACtD,EACA,CACE,SAAU,IACV,GAAI,gBACJ,O,EAAOE,MAAQ,EAAG,CACpB,CACF,CAAC,G,EACDC,KAASF,EAAU,CAAE,MAAO,KAAK,YAAa,CAAC,CACjD,CAEA,UAAW,CACT,GAAI,MAAK,GAAG,UAAU,SAAS,qBAAqB,EAGpD,GAFC,KAAK,IAAI,GAAmB,MAAM,QAAU,QAC5C,KAAK,IAAI,GAAmB,MAAM,WAAa,UAC5C,KAAK,WAAW,QAAS,CAC3B,MAAMA,EAAW,CAAC,EAClBA,EAAS,KAAK,CAAE,KAAM,QAAS,GAAI,CAAE,CAAC,EACtCA,EAAS,KAAK,CAAE,KAAM,QAAS,GAAI,GAAK,CAAC,EACzCA,EAAS,KAAK,CACZ,KAAK,IAAI,GACT,CAAE,UAAW,CAAC,cAAe,aAAa,CAAE,EAC5C,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,IACJ,OAAQ,SACR,GAAI,OACN,CACF,CAAC,EACDA,EAAS,KAAK,CACZ,KAAK,IAAI,MACT,CACE,QAAS,CAAC,EAAG,CAAC,EACd,UAAW,CAAC,sBAAuB,iBAAiB,CACtD,EACA,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,GACJ,GAAI,KAAK,cAAc,QAAU,QAAU,OAC7C,CACF,CAAC,EACDA,EAAS,KAAK,CACZ,KAAK,IAAI,YACT,CACE,QAAS,CAAC,EAAG,CAAC,CAChB,EACA,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,GACJ,GAAI,KAAK,cAAc,QAAU,QAAU,OAC7C,CACF,CAAC,EACDA,EAAS,KAAK,CACX,KAAK,IAAI,GAAmB,iBAC3B,kCACF,EACA,CAAE,SAAU,CAAC,oBAAqB,gBAAgB,CAAE,EACpD,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,GACJ,MAAO,KAAK,cAAc,QAAU,G,EAAIC,MAAQ,EAAG,EACnD,GAAI,KAAK,cAAc,QAAU,QAAU,OAC7C,CACF,CAAC,G,EACDC,KAASF,CAAQ,EAAE,SAAS,KAAK,IAAM,CACrC,KAAK,GAAG,aAAa,cAAe,OAAO,EAC3C,KAAK,GAAG,UAAU,IAAI,qBAAqB,EAC1C,KAAK,IAAI,YAA4B,gBAAgB,OAAO,EAC5D,KAAK,IAAI,MAAsB,gBAAgB,OAAO,EAEpD,KAAK,IAAI,GAAmB,iBAC3B,kCACF,EACA,QAAQG,GAAQ,CAChBA,EAAK,gBAAgB,OAAO,CAC9B,CAAC,CACH,CAAC,CACH,MACG,KAAK,IAAI,GAAmB,aAAa,cAAe,OAAO,EAC/D,KAAK,IAAI,GAAmB,UAAU,IAAI,qBAAqB,CAEpE,CAEM,WAAY,CAAC,OAADC,EAAA,sBAChB,GAAK,KAAK,GAAG,UAAU,SAAS,qBAAqB,EAErD,GAAI,KAAK,WAAW,QAAS,CAC3B,MAAMJ,EAAW,CAAC,EAClBA,EAAS,KAAK,CAAE,KAAM,QAAS,GAAI,CAAE,CAAC,EACtCA,EAAS,KAAK,CAAE,KAAM,QAAS,GAAI,GAAK,CAAC,EACzCA,EAAS,KAAK,CACX,KAAK,IAAI,GAAmB,iBAC3B,2CACF,EACA,CAAE,SAAU,CAAC,iBAAkB,mBAAmB,CAAE,EACpD,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,IACJ,MAAO,KAAK,cAAc,QAAU,G,EAAIC,MAAQ,EAAG,EACnD,GAAI,OACN,CACF,CAAC,EACDD,EAAS,KAAK,CACZ,CAAC,KAAK,IAAI,MAAsB,KAAK,IAAI,WAA0B,EACnE,CACE,QAAS,CAAC,EAAG,CAAC,CAChB,EACA,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,IACJ,GAAI,OACN,CACF,CAAC,EACDA,EAAS,KAAK,CACZ,KAAK,IAAI,GACT,CACE,UAAW,CAAC,cAAe,aAAa,CAC1C,EACA,CACE,SAAU,KAAK,cAAc,QACzB,KAAK,qBACL,GACJ,GAAI,KAAK,cAAc,QAAU,QAAU,OAC7C,CACF,CAAC,EACD,M,EAAME,KAASF,CAAQ,EAAE,SAAS,KAAK,IAAM,CAC1C,KAAK,IAAI,GAAmB,aAAa,cAAe,MAAM,EAC9D,KAAK,IAAI,GAAmB,gBAAgB,OAAO,EACnD,KAAK,IAAI,GAAmB,UAAU,OACrC,qBACF,CACF,CAAC,CACH,MACG,KAAK,IAAI,GAAmB,aAAa,cAAe,OAAO,EAC/D,KAAK,IAAI,GAAmB,gBAAgB,OAAO,EACnD,KAAK,IAAI,GAAmB,UAAU,OAAO,qBAAqB,CAEvE,CAAC,CAAD,CAiBM,yBAA0B,CAAC,OAADI,EAAA,sBApQlC,IAAAP,EAAAC,EAsQM,KAAK,IAAI,aACT,UAAU,SAAS,qBAAqB,GAUvC,KAAK,IAAI,aAA6B,UAAU,OAC/C,qBACF,EACC,KAAK,IAAI,GAAmB,UAAU,OAAO,wCAAwC,GACtFA,EAAA,KAAK,eAAL,MAAAA,EAAmB,UAAU,KAX7BD,EAAA,KAAK,eAAL,MAAAA,EAAmB,SAAS,EAC3B,KAAK,IAAI,aAA6B,UAAU,IAC/C,qBACF,EAEC,KAAK,IAAI,GAAmB,UAAU,IAAI,wCAAwC,EAQvF,CAAC,CAAD,CACF,CAGA,QAAeL,C","file":"scripts/418.ea5824101d8667d22bdf.js","sourcesContent":["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 { Component } from '@verndale/core';\nimport { breakpoints } from '../helpers/variables';\nimport { EventBusSingleton } from '../animation/eventBus';\nimport { TimelineDefinition } from '@motionone/dom/types/timeline/types';\nimport { ElementOrSelector, stagger, timeline } from 'motion';\n\nclass SiteSelector extends Component {\n  MOTION_ZERO_DURATION = 0.000001;\n  breakpoint = window.matchMedia(\n    `(min-width: ${breakpoints.tabletLandscape}px)`\n  );\n  breakpointAnimation = window.matchMedia(\n    `(min-width: ${breakpoints.tablet}px)`\n  );\n  // headerSearch: HeaderSearch | null = null;\n  siteSelector: SiteSelector | null = null;\n  reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  initialDelay = 0.75;\n  viewportWidth = window.innerWidth;\n\n  constructor(el: HTMLElement) {\n    super(el);\n   // this.init();\n    \n  }\n\n  setupDefaults() {\n    this.dom = {\n      el: this.el,\n      \n      languageButton: this.el.querySelector<HTMLElement>(\n        '.site-selector__icon-button'\n      ),\n      siteSelector:\n        this.el.querySelector<HTMLElement>('.site-selector-links__container'),\n    };\n  }\n\n  init() {\n    (this.dom.siteSelector as HTMLElement).setAttribute('style', 'display:none');\n      \n  }\n\n  addListeners() {\n    (this.dom.languageButton as HTMLElement)?.addEventListener(\n      'click',\n      this.handleSiteSelectorClick.bind(this)\n    );\n    window.addEventListener('resize', this.handleResize.bind(this));\n  }\n\n  handleClickOutside(e: Event) {\n    if (!this.breakpoint.matches) return;\n    if (\n      !(this.dom.el as HTMLElement).contains(e.target as Node) &&\n      !(e.target as HTMLElement)?.classList?.contains(\n        'site-selector--open'\n      )\n    ) {\n      EventBusSingleton.publish('closingSiteSelector');\n      this.closeMenu();\n    }\n  }\n\n  handleResize() {\n    if (window.innerWidth !== this.viewportWidth) {\n      this.siteSelector?.closeMenu();\n      (this.dom.el as HTMLElement).classList.remove('site-selector--open');\n      this.viewportWidth = window.innerWidth;\n      this.breakpoint = window.matchMedia(\n        `(min-width: ${breakpoints.tabletLandscape}px)`\n      );\n      this.breakpointAnimation = window.matchMedia(\n        `(min-width: ${breakpoints.tablet}px)`\n      );\n    }\n  }\n\n  animateIn() {\n    const staggerItems = (this.dom.el as HTMLElement).querySelectorAll(\n      '.site-selector-links_section > :not(.site-selector)'\n    ) as NodeListOf<HTMLElement>;\n\n    const sequence = [] as TimelineDefinition;\n    sequence.push({ name: 'start', at: 0 });\n    sequence.push({ name: 'stagger-items', at: 0.75 });\n    sequence.push([\n      this.dom.background as ElementOrSelector,\n      {\n        transform: ['scale(0, 1)', 'scale(1, 1)']\n      },\n      {\n        duration: 1,\n        at: 'start'\n      }\n    ]);\n    sequence.push([\n      staggerItems,\n      {\n        opacity: [0, 1],\n        transform: ['translate(0, -100%)', 'translate(0, 0)']\n      },\n      {\n        duration: 0.25,\n        at: 'stagger-items',\n        delay: stagger(0.1)\n      }\n    ]);\n    timeline(sequence, { delay: this.initialDelay });\n  }\n\n  openMenu() {\n    if (this.el.classList.contains('site-selector--open')) return;\n    (this.dom.el as HTMLElement).style.display = 'block';\n    (this.dom.el as HTMLElement).style.visibility = 'visible';\n    if (this.breakpoint.matches) {\n      const sequence = [] as TimelineDefinition;\n      sequence.push({ name: 'start', at: 0 });\n      sequence.push({ name: 'enter', at: 0.15 });\n      sequence.push([\n        this.dom.el as HTMLElement,\n        { transform: ['scale(1, 0)', 'scale(1, 1)'] },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.25,\n          easing: 'linear',\n          at: 'start'\n        }\n      ]);\n      sequence.push([\n        this.dom.title as HTMLElement,\n        {\n          opacity: [0, 1],\n          transform: ['translate(-20px, 0)', 'translate(0, 0)']\n        },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.5,\n          at: this.reducedMotion.matches ? 'start' : 'enter'\n        }\n      ]);\n      sequence.push([\n        this.dom.closeButton as HTMLElement,\n        {\n          opacity: [0, 1]\n        },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.5,\n          at: this.reducedMotion.matches ? 'start' : 'enter'\n        }\n      ]);\n      sequence.push([\n        (this.dom.el as HTMLElement).querySelectorAll(\n          '.site-selector-links__ctas > div'\n        ) as NodeListOf<HTMLElement>,\n        { clipPath: ['inset(0 100% 0 0)', 'inset(0 0 0 0)'] },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.5,\n          delay: this.reducedMotion.matches ? 0 : stagger(0.1),\n          at: this.reducedMotion.matches ? 'start' : 'enter'\n        }\n      ]);\n      timeline(sequence).finished.then(() => {\n        this.el.setAttribute('aria-hidden', 'false');\n        this.el.classList.add('site-selector--open');\n        (this.dom.closeButton as HTMLElement).removeAttribute('style');\n        (this.dom.title as HTMLElement).removeAttribute('style');\n        (\n          (this.dom.el as HTMLElement).querySelectorAll(\n            '.site-selector-links__ctas > div'\n          ) as NodeListOf<HTMLElement>\n        ).forEach(item => {\n          item.removeAttribute('style');\n        });\n      });\n    } else {\n      (this.dom.el as HTMLElement).setAttribute('aria-hidden', 'false');\n      (this.dom.el as HTMLElement).classList.add('site-selector--open');\n    }\n  }\n\n  async closeMenu() {\n    if (!this.el.classList.contains('site-selector--open')) return;\n\n    if (this.breakpoint.matches) {\n      const sequence = [] as TimelineDefinition;\n      sequence.push({ name: 'start', at: 0 });\n      sequence.push({ name: 'leave', at: 0.25 });\n      sequence.push([\n        (this.dom.el as HTMLElement).querySelectorAll(\n          '.language-selector__accordion-items > div'\n        ) as NodeListOf<HTMLElement>,\n        { clipPath: ['inset(0 0 0 0)', 'inset(0 100% 0 0)'] },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.25,\n          delay: this.reducedMotion.matches ? 0 : stagger(0.1),\n          at: 'start'\n        }\n      ]);\n      sequence.push([\n        [this.dom.title as HTMLElement, this.dom.closeButton as HTMLElement],\n        {\n          opacity: [1, 0]\n        },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.25,\n          at: 'start'\n        }\n      ]);\n      sequence.push([\n        this.dom.el as HTMLElement,\n        {\n          transform: ['scale(1, 1)', 'scale(1, 0)']\n        },\n        {\n          duration: this.reducedMotion.matches\n            ? this.MOTION_ZERO_DURATION\n            : 0.5,\n          at: this.reducedMotion.matches ? 'start' : 'leave'\n        }\n      ]);\n      await timeline(sequence).finished.then(() => {\n        (this.dom.el as HTMLElement).setAttribute('aria-hidden', 'true');\n        (this.dom.el as HTMLElement).removeAttribute('style');\n        (this.dom.el as HTMLElement).classList.remove(\n          'site-selector--open'\n        );\n      });\n    } else {\n      (this.dom.el as HTMLElement).setAttribute('aria-hidden', 'false');\n      (this.dom.el as HTMLElement).removeAttribute('style');\n      (this.dom.el as HTMLElement).classList.remove('site-selector--open');\n    }\n  }\n\n  // handleResize() {\n  //   if (window.innerWidth !== this.viewportWidth) {\n  //     this.siteSelector?.closeMenu();\n  //     (this.dom.el as HTMLElement).classList.remove('site-selector--open');\n  //     this.viewportWidth = window.innerWidth;\n  //     this.breakpoint = window.matchMedia(\n  //       `(min-width: ${breakpoints.tabletLandscape}px)`\n  //     );\n  //     this.breakpointAnimation = window.matchMedia(\n  //       `(min-width: ${breakpoints.tablet}px)`\n  //     );\n  //   }\n  // }\n\n\n  async handleSiteSelectorClick() {\n    const isOpen = (\n      this.dom.siteSelector as HTMLElement\n    ).classList.contains('site-selector--open');\n    if (!isOpen) {\n      \n      this.siteSelector?.openMenu();\n      (this.dom.siteSelector as HTMLElement).classList.add(\n        'site-selector--open'\n      );\n      \n      (this.dom.el as HTMLElement).classList.add('unified-nav-links__site-selector--open');\n    } else {\n      (this.dom.siteSelector as HTMLElement).classList.remove(\n        'site-selector--open'\n      );\n      (this.dom.el as HTMLElement).classList.remove('unified-nav-links__site-selector--open');\n      this.siteSelector?.closeMenu();\n    }\n  }\n}\n\n\nexport default SiteSelector;\n"],"sourceRoot":""}