{"version":3,"sources":["webpack:///./node_modules/focus-trap/dist/focus-trap.esm.js","webpack:///./node_modules/tabbable/dist/index.esm.js","webpack:///./src/js/modules/primaryNavigation.js","webpack:///./src/js/helpers/snazzymaps.js","webpack:///./src/js/modules/interactiveMap.js","webpack:///./src/js/modules/bookNow.js"],"names":["activeFocusDelay","candidateSelectors","candidateSelector","join","matches","Element","prototype","msMatchesSelector","webkitMatchesSelector","getCandidates","el","includeContainer","filter","candidates","Array","slice","apply","querySelectorAll","call","unshift","getTabindex","node","tabindexAttr","parseInt","getAttribute","isNaN","contentEditable","isContentEditable","nodeName","tabIndex","sortOrderedTabbables","a","b","documentOrder","isInput","tagName","isNonTabbableRadio","type","isRadio","name","radioSet","radioScope","form","ownerDocument","queryRadios","window","CSS","escape","err","console","error","message","checked","nodes","i","length","getCheckedRadio","isTabbableRadio","isNodeMatchingSelectorFocusable","options","disabled","isHiddenInput","displayCheck","getComputedStyle","visibility","nodeUnderDetails","parentElement","_node$getBoundingClie","getBoundingClientRect","width","height","display","isHidden","children","some","child","isDetailsWithSummary","parentNode","item","contains","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","focusableCandidateSelector","concat","isFocusable","Error","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","_defineProperty","obj","key","value","defineProperty","configurable","writable","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","indexOf","splice","deactivateTrap","unpause","delay","fn","setTimeout","findIndex","arr","idx","every","valueOrHandler","_len","arguments","params","_key","elements","userOptions","doc","document","config","target","source","forEach","getOwnPropertyDescriptors","defineProperties","_objectSpread2","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","state","containers","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","getOption","configOverrideOptions","optionName","configOptionName","undefined","containersContain","element","container","getNodeForOption","optionValue","querySelector","getInitialFocusNode","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","map","regularTabbables","orderedTabbables","tabbableNodes","bind","candidate","candidateTabindex","sort","lastTabbableNode","group","tryFocus","focus","preventScroll","toLowerCase","select","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","e","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","preventDefault","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","keyCode","isEscapeEvent","isTabEvent","destinationNode","containerIndex","_ref","shiftKey","startOfGroupIndex","_ref2","destinationGroupIndex","lastOfGroupIndex","_ref3","_destinationGroupIndex","checkTab","checkClick","addListeners","addEventListener","capture","passive","removeListeners","removeEventListener","activate","activateOptions","this","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","then","deactivateOptions","clearTimeout","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","Boolean","PrimaryNavigation","runningAnimation","headerFixedBookNowOffset","dom","html","body","controlsContainer","controlsButtons","searchTrigger","closeTrigger","interactiveMap","interactiveMapNavigationItems","interactiveMapInner","navigationItems","utilityNavigationDivider","utilityNavigationItems","openTrigger","bookNow","header","shortcutsContainer","footer","focusTrap","createFocusTrap","initialFocus","setupWeatherTrigger","setupBookNow","setupMenuHoverSpans","openPrimaryNavigation","closePrimaryNavigation","dispatchEvent","Event","handleKeyEvents","fixHeaderBookNow","footerOffset","offsetTop","bookNowOffsetBottom","offsetHeight","innerWidth","breakpoints","tabletLandscape","shouldBeFixed","scrollY","style","position","shouldStopBeforeFooter","classList","toggle","top","removeAttribute","overflowY","remove","cloneNode","add","bookNowButton","BookNow","prepend","direction","onComplete","timeline","anime","easing","complete","targets","duration","opacity","translateX","stagger","recalculatePopupHeight","leftSideNavsDesktopAnimations","interactiveMapDesktopAnimation","featuredNavigationDesktopAnimation","start","featuredNavItem","index","navigationItem","mainLink","divider","hasChildLinks","scaleX","oddChildLinks","evenChildLinks","oddChildLink","eventChildLink","scrollTo","behavior","setHtmlOverflow","primaryNavigationDesktopAnimation","InteractiveMap","createElement","append","Component","featureType","elementType","stylers","color","weight","Module","navigationList","mapContainer","initMap","loadMapData","navItem","handleNavItemHover","debounce","handleresize","Axios","method","url","dataset","endpoint","data","bounds","google","maps","LatLngBounds","defaultLocation","locations","location","find","locationId","id","marker","Marker","geo","title","icon","zIndex","cursor","infoWindow","InfoWindow","content","pixelOffset","Size","disableAutoPan","addListener","log","open","shouldFocus","close","extend","href","fitBounds","zoom","center","setCenter","setZoom","Map","styles","lat","lng","disableDefaultUI","scrollwheel","draggable","draggableCursor","currentTarget","selectedLocation","panZoomToLocation","setOpacity","panTo","disableScroll","manualHeightInit","manualheightInit","expanded","focusedLink","trigger","popup","links","overlay","setupExternalIcon","popupHeight","event","toggleDropdown","handleTriggerKeyEvents","handlePopupKeyEvents","stopPropagation","isTriggeredByKeyboard","detail","changeScroll","setAttribute","linksLength","linkToFocusIndex","ArrowUp","ArrowDown","link","includes","host"],"mappings":"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","file":"28.c553af2d77025ed23176.js","sourcesContent":["/*!\n* focus-trap 6.5.1\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { tabbable, isFocusable } from 'tabbable';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar activeFocusDelay;\n\nvar activeFocusTraps = function () {\n var trapQueue = [];\n return {\n activateTrap: function activateTrap(trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n var trapIndex = trapQueue.indexOf(trap);\n\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n deactivateTrap: function deactivateTrap(trap) {\n var trapIndex = trapQueue.indexOf(trap);\n\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n }\n };\n}();\n\nvar isSelectableInput = function isSelectableInput(node) {\n return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\n\nvar isEscapeEvent = function isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\nvar isTabEvent = function isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n};\n\nvar delay = function delay(fn) {\n return setTimeout(fn, 0);\n}; // Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\n\n\nvar findIndex = function findIndex(arr, fn) {\n var idx = -1;\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n return idx;\n};\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\n\n\nvar valueOrHandler = function valueOrHandler(value) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n\n return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\n\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n var doc = document;\n\n var config = _objectSpread2({\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true\n }, userOptions);\n\n var state = {\n // @type {Array<HTMLElement>}\n containers: [],\n // list of objects identifying the first and last tabbable nodes in all containers/groups in\n // the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{ container: HTMLElement, firstTabbableNode: HTMLElement|null, lastTabbableNode: HTMLElement|null }>}\n tabbableGroups: [],\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false\n };\n var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n };\n\n var containersContain = function containersContain(element) {\n return state.containers.some(function (container) {\n return container.contains(element);\n });\n };\n\n var getNodeForOption = function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n\n if (!optionValue) {\n return null;\n }\n\n var node = optionValue;\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue);\n\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` refers to no known node\"));\n }\n }\n\n if (typeof optionValue === 'function') {\n node = optionValue();\n\n if (!node) {\n throw new Error(\"`\".concat(optionName, \"` did not return a node\"));\n }\n }\n\n return node;\n };\n\n var getInitialFocusNode = function getInitialFocusNode() {\n var node;\n\n if (getNodeForOption('initialFocus') !== null) {\n node = getNodeForOption('initialFocus');\n } else if (containersContain(doc.activeElement)) {\n node = doc.activeElement;\n } else {\n var firstTabbableGroup = state.tabbableGroups[0];\n var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error('Your focus-trap needs to have at least one focusable element');\n }\n\n return node;\n };\n\n var updateTabbableNodes = function updateTabbableNodes() {\n state.tabbableGroups = state.containers.map(function (container) {\n var tabbableNodes = tabbable(container);\n\n if (tabbableNodes.length > 0) {\n return {\n container: container,\n firstTabbableNode: tabbableNodes[0],\n lastTabbableNode: tabbableNodes[tabbableNodes.length - 1]\n };\n }\n\n return undefined;\n }).filter(function (group) {\n return !!group;\n }); // remove groups with no tabbable nodes\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n\n if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus')) {\n throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n }\n };\n\n var tryFocus = function tryFocus(node) {\n if (node === doc.activeElement) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({\n preventScroll: !!config.preventScroll\n });\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n var node = getNodeForOption('setReturnFocus');\n return node ? node : previousActiveElement;\n }; // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n\n\n var checkPointerDown = function checkPointerDown(e) {\n if (containersContain(e.target)) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus: config.returnFocusOnDeactivate && !isFocusable(e.target)\n });\n return;\n } // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n } // otherwise, prevent the click\n\n\n e.preventDefault();\n }; // In case focus escapes the trap for some strange reason, pull it back in.\n\n\n var checkFocusIn = function checkFocusIn(e) {\n var targetContained = containersContain(e.target); // In Firefox when you Tab out of an iframe the Document is briefly focused.\n\n if (targetContained || e.target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = e.target;\n }\n } else {\n // escaped! pull it back in to where it just left\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n }; // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n\n\n var checkTab = function checkTab(e) {\n updateTabbableNodes();\n var destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's tabbable\n // with tabIndex='-1' and was given initial focus\n var containerIndex = findIndex(state.tabbableGroups, function (_ref) {\n var container = _ref.container;\n return container.contains(e.target);\n });\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back in to...\n if (e.shiftKey) {\n // ...the last node in the last group\n destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n // REVERSE\n // is the target the first tabbable node in a group?\n var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref2) {\n var firstTabbableNode = _ref2.firstTabbableNode;\n return e.target === firstTabbableNode;\n });\n\n if (startOfGroupIndex < 0 && state.tabbableGroups[containerIndex].container === e.target) {\n // an exception case where the target is the container itself, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n // FORWARD\n // is the target the last tabbable node in a group?\n var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) {\n var lastTabbableNode = _ref3.lastTabbableNode;\n return e.target === lastTabbableNode;\n });\n\n if (lastOfGroupIndex < 0 && state.tabbableGroups[containerIndex].container === e.target) {\n // an exception case where the target is the container itself, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n\n var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n destinationNode = _destinationGroup.firstTabbableNode;\n }\n }\n } else {\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n } // else, let the browser take care of [shift+]tab and move the focus\n\n };\n\n var checkKey = function checkKey(e) {\n if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n\n var checkClick = function checkClick(e) {\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (containersContain(e.target)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n }; //\n // EVENT LISTENERS\n //\n\n\n var addListeners = function addListeners() {\n if (!state.active) {\n return;\n } // There can be only one listening focus trap at a time\n\n\n activeFocusTraps.activateTrap(trap); // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n\n activeFocusDelay = config.delayInitialFocus ? delay(function () {\n tryFocus(getInitialFocusNode());\n }) : tryFocus(getInitialFocusNode());\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false\n });\n return trap;\n };\n\n var removeListeners = function removeListeners() {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n return trap;\n }; //\n // TRAP DEFINITION\n //\n\n\n trap = {\n activate: function activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n var onActivate = getOption(activateOptions, 'onActivate');\n var onPostActivate = getOption(activateOptions, 'onPostActivate');\n var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n if (onActivate) {\n onActivate();\n }\n\n var finishActivation = function finishActivation() {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n addListeners();\n\n if (onPostActivate) {\n onPostActivate();\n }\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n return this;\n }\n\n finishActivation();\n return this;\n },\n deactivate: function deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n clearTimeout(activeFocusDelay);\n removeListeners();\n state.active = false;\n state.paused = false;\n activeFocusTraps.deactivateTrap(trap);\n var onDeactivate = getOption(deactivateOptions, 'onDeactivate');\n var onPostDeactivate = getOption(deactivateOptions, 'onPostDeactivate');\n var checkCanReturnFocus = getOption(deactivateOptions, 'checkCanReturnFocus');\n\n if (onDeactivate) {\n onDeactivate();\n }\n\n var returnFocus = getOption(deactivateOptions, 'returnFocus', 'returnFocusOnDeactivate');\n\n var finishDeactivation = function finishDeactivation() {\n delay(function () {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n pause: function pause() {\n if (state.paused || !state.active) {\n return this;\n }\n\n state.paused = true;\n removeListeners();\n return this;\n },\n unpause: function unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n return this;\n },\n updateContainerElements: function updateContainerElements(containerElements) {\n var elementsAsArray = [].concat(containerElements).filter(Boolean);\n state.containers = elementsAsArray.map(function (element) {\n return typeof element === 'string' ? doc.querySelector(element) : element;\n });\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n return this;\n }\n }; // initialize container elements\n\n trap.updateContainerElements(elements);\n return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","/*!\n* tabbable 5.2.1\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\nvar candidateSelectors = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])', 'details>summary:first-of-type', 'details'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar matches = typeof Element === 'undefined' ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n\n candidates = candidates.filter(filter);\n return candidates;\n};\n\nvar isContentEditable = function isContentEditable(node) {\n return node.contentEditable === 'true';\n};\n\nvar getTabindex = function getTabindex(node) {\n var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n\n if (!isNaN(tabindexAttr)) {\n return tabindexAttr;\n } // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n\n\n if (isContentEditable(node)) {\n return 0;\n } // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n\n\n if ((node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {\n return 0;\n }\n\n return node.tabIndex;\n};\n\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\n\nvar isInput = function isInput(node) {\n return node.tagName === 'INPUT';\n};\n\nvar isHiddenInput = function isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n};\n\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n return child.tagName === 'SUMMARY';\n });\n return r;\n};\n\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\n\nvar isTabbableRadio = function isTabbableRadio(node) {\n if (!node.name) {\n return true;\n }\n\n var radioScope = node.form || node.ownerDocument;\n\n var queryRadios = function queryRadios(name) {\n return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n };\n\n var radioSet;\n\n if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n return false;\n }\n }\n\n var checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\n\nvar isRadio = function isRadio(node) {\n return isInput(node) && node.type === 'radio';\n};\n\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\nvar isHidden = function isHidden(node, displayCheck) {\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n\n var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n\n if (!displayCheck || displayCheck === 'full') {\n while (node) {\n if (getComputedStyle(node).display === 'none') {\n return true;\n }\n\n node = node.parentElement;\n }\n } else if (displayCheck === 'non-zero-area') {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n\n return width === 0 && height === 0;\n }\n\n return false;\n}; // form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\n\n\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n if (isInput(node) || node.tagName === 'SELECT' || node.tagName === 'TEXTAREA' || node.tagName === 'BUTTON') {\n var parentNode = node.parentElement;\n\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> as an immediate child of the disabled\n // <fieldset>: if the node is in that legend, it'll be enabled even\n // though the fieldset is disabled; otherwise, the node is in a\n // secondary/subsequent legend, or somewhere else within the fieldset\n // (however deep nested) and it'll be disabled\n for (var i = 0; i < parentNode.children.length; i++) {\n var child = parentNode.children.item(i);\n\n if (child.tagName === 'LEGEND') {\n if (child.contains(node)) {\n return false;\n } // the node isn't in the first legend (in doc order), so no matter\n // where it is now, it'll be disabled\n\n\n return true;\n }\n } // the node isn't in a legend, so no matter where it is now, it'll be disabled\n\n\n return true;\n }\n\n parentNode = parentNode.parentElement;\n }\n } // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n\n\n return false;\n};\n\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n if (node.disabled || isHiddenInput(node) || isHidden(node, options.displayCheck) || // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n return false;\n }\n\n return true;\n};\n\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n if (!isNodeMatchingSelectorFocusable(options, node) || isNonTabbableRadio(node) || getTabindex(node) < 0) {\n return false;\n }\n\n return true;\n};\n\nvar tabbable = function tabbable(el, options) {\n options = options || {};\n var regularTabbables = [];\n var orderedTabbables = [];\n var candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n candidates.forEach(function (candidate, i) {\n var candidateTabindex = getTabindex(candidate);\n\n if (candidateTabindex === 0) {\n regularTabbables.push(candidate);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n node: candidate\n });\n }\n });\n var tabbableNodes = orderedTabbables.sort(sortOrderedTabbables).map(function (a) {\n return a.node;\n }).concat(regularTabbables);\n return tabbableNodes;\n};\n\nvar focusable = function focusable(el, options) {\n options = options || {};\n var candidates = getCandidates(el, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n return candidates;\n};\n\nvar isTabbable = function isTabbable(node, options) {\n options = options || {};\n\n if (!node) {\n throw new Error('No node provided');\n }\n\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n\n return isNodeMatchingSelectorTabbable(options, node);\n};\n\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe').join(',');\n\nvar isFocusable = function isFocusable(node, options) {\n options = options || {};\n\n if (!node) {\n throw new Error('No node provided');\n }\n\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","import { Component } from '@verndale/core';\nimport { createFocusTrap } from 'focus-trap';\nimport BookNow from './bookNow';\nimport anime from 'animejs';\nimport { breakpoints } from '../helpers/constants';\n\nimport InteractiveMap from './interactiveMap';\n\nclass PrimaryNavigation extends Component {\n setupDefaults() {\n this.runningAnimation = false;\n this.headerFixedBookNowOffset = 1000;\n this.dom = {\n html: document.querySelector('html'),\n body: document.querySelector('body'),\n //Primary Navigation elements\n controlsContainer: this.el.querySelector('.primary-navigation__controls'),\n controlsButtons: () =>\n this.el.querySelectorAll('.primary-navigation__controls > *'),\n searchTrigger: this.el.querySelector(\n '.primary-navigation__search__trigger'\n ),\n closeTrigger: this.el.querySelector('.primary-navigation__close-trigger'),\n interactiveMap: this.el.querySelector('.interactive-map'),\n interactiveMapNavigationItems: [\n ...this.el.querySelectorAll('.interactive-map__navigation-link')\n ],\n interactiveMapInner: this.el.querySelector(\n '.interactive-map__container .interactive-map__map-inner'\n ),\n navigationItems: [\n ...this.el.querySelectorAll('.primary-navigation-items__item')\n ],\n utilityNavigationDivider: this.el.querySelector(\n '.primary-navigation-items-container > .primary-navigation-items-divider'\n ),\n utilityNavigationItems: [\n ...this.el.querySelectorAll('.primary-navigation-utility ul > li')\n ],\n // Header elements\n openTrigger: document.querySelector(\n '.header__primary-navigation__trigger'\n ),\n bookNow: document.querySelector('.header__book-now__container'),\n header: document.querySelector('.header'),\n shortcutsContainer: document.querySelector('.header__expanded-shortcuts'),\n footer: document.querySelector('footer')\n };\n this.focusTrap = createFocusTrap(this.el, {\n initialFocus: this.dom.closeTrigger\n });\n this.setupWeatherTrigger();\n this.setupBookNow();\n this.setupMenuHoverSpans();\n }\n\n addListeners() {\n // Open and Close navigation\n this.dom.openTrigger.addEventListener('click', e =>\n this.openPrimaryNavigation(e)\n );\n this.dom.closeTrigger.addEventListener('click', () =>\n this.closePrimaryNavigation()\n );\n this.dom.searchTrigger.addEventListener('click', () => {\n this.closePrimaryNavigation(() => {\n document.dispatchEvent(new Event('openSearch'));\n });\n });\n\n this.el.addEventListener('keydown', e => this.handleKeyEvents(e));\n window.addEventListener('scroll', () => this.fixHeaderBookNow());\n }\n\n fixHeaderBookNow() {\n const footerOffset = this.dom.footer.offsetTop - 20;\n const bookNowOffsetBottom = this.dom.bookNow.offsetHeight + 20;\n\n if (window.innerWidth < breakpoints.tabletLandscape) return;\n const shouldBeFixed =\n scrollY > this.headerFixedBookNowOffset ||\n this.dom.body.style.position === 'fixed';\n const shouldStopBeforeFooter = bookNowOffsetBottom + scrollY >= footerOffset;\n this.dom.bookNow.classList.toggle('fixed', shouldBeFixed);\n this.dom.bookNow.classList.toggle('fixed-before-footer', shouldStopBeforeFooter);\n if (shouldStopBeforeFooter) {\n this.dom.bookNow.style.top = `${footerOffset - this.dom.bookNow.offsetHeight}px`;\n } else {\n this.dom.bookNow.removeAttribute('style');\n }\n }\n\n setHtmlOverflow(value) {\n this.dom.html.style.overflowY = value;\n }\n\n setupWeatherTrigger() {\n if (!this.dom.shortcutsContainer) {\n this.dom.header.classList.remove('header-with-shortcuts');\n }\n }\n\n setupBookNow() {\n // Clone header book now element\n const bookNow = this.dom.bookNow.cloneNode(true);\n bookNow.classList.remove('header__book-now__container');\n bookNow.classList.add(\n 'primary-navigation__book-now__container',\n 'on-black'\n );\n // Switch from primary to secondary class\n const bookNowButton = bookNow.querySelector('.btn--primary');\n bookNowButton.classList.remove('btn--primary');\n bookNowButton.classList.add('btn--secondary');\n // Create new BookNow instance\n this.bookNow = new BookNow(bookNow, false, true);\n // Prepend bookNow to the primary navigation controls\n this.dom.controlsContainer.prepend(bookNow);\n }\n\n primaryNavigationDesktopAnimation({\n direction = 'normal',\n onComplete = null\n }) {\n if (this.runningAnimation) return;\n this.runningAnimation = true;\n const timeline = anime.timeline({\n easing: 'easeInOutQuad',\n direction,\n complete: () => onComplete && onComplete()\n });\n /**\n * Grow element container\n */\n timeline.add(\n {\n targets: this.el,\n width: ['0%', '100%'],\n duration: 400\n },\n 0\n );\n /**\n * Fade in buttons\n */\n timeline.add(\n {\n targets: this.dom.controlsButtons(),\n opacity: [0, 1],\n translateX: ['10%', '0%'],\n duration: 300,\n delay: anime.stagger(100, { direction: 'reverse' }),\n complete: () => {\n this.bookNow.recalculatePopupHeight();\n this.bookNow.el.removeAttribute('style');\n }\n },\n 66\n );\n // Run primary and utility nav animations\n this.leftSideNavsDesktopAnimations(timeline, 200);\n // Run interactive map animations\n this.interactiveMapDesktopAnimation(timeline, 332);\n this.featuredNavigationDesktopAnimation(timeline, 466);\n }\n\n featuredNavigationDesktopAnimation(timeline, start) {\n const duration = 132;\n const offset = 66;\n this.dom.interactiveMapNavigationItems.forEach((featuredNavItem, index) => {\n timeline.add(\n {\n targets: featuredNavItem,\n opacity: [0, 1],\n translateX: ['12%', '0%'],\n duration\n },\n index === 0 ? start : start + (duration - offset) * index\n );\n });\n }\n\n interactiveMapDesktopAnimation(timeline, start) {\n timeline.add(\n {\n targets: this.dom.interactiveMapInner,\n opacity: [0, 1],\n height: ['0%', '100%'],\n duration: 200\n },\n start\n );\n }\n\n leftSideNavsDesktopAnimations(timeline, start) {\n this.dom.navigationItems.forEach((navigationItem, index) => {\n const mainLink = navigationItem.querySelector(\n '.primary-navigation-items-main-link'\n );\n const divider = navigationItem.querySelector(\n '.primary-navigation-items-divider'\n );\n const hasChildLinks = navigationItem.querySelector(\n '.primary-navigation-items-child-list'\n );\n // Divider scalesX\n timeline.add(\n {\n targets: divider,\n opacity: [0, 0.5],\n scaleX: ['0', '100%'],\n duration: 150\n },\n index === 0 ? start : '-=232'\n );\n // Main link fades in\n timeline.add(\n {\n targets: mainLink,\n opacity: [0, 1],\n translateX: ['5%', '0%'],\n duration: 150\n },\n '-=120'\n );\n // Animate child links if exists\n if (hasChildLinks) {\n const oddChildLinks = [\n ...navigationItem.querySelectorAll(\n '.primary-navigation-items-child-link:nth-child(odd)'\n )\n ];\n const evenChildLinks = [\n ...navigationItem.querySelectorAll(\n '.primary-navigation-items-child-link:nth-child(even)'\n )\n ];\n // Fade in odd child links first\n oddChildLinks.forEach((oddChildLink, index) => {\n timeline.add(\n {\n targets: oddChildLink,\n opacity: ['0', '100%'],\n translateX: ['5%', '0%'],\n duration: 150\n },\n index === 0 ? '-=160' : '-=140'\n );\n });\n // Fade in even child links after odd links animation was completed\n evenChildLinks.forEach((eventChildLink, index) => {\n timeline.add(\n {\n targets: eventChildLink,\n opacity: ['0', '100%'],\n translateX: ['5%', '0%'],\n duration: 150\n },\n '-=100'\n );\n });\n }\n });\n // Utility nav divider scaleX\n timeline.add(\n {\n targets: this.dom.utilityNavigationDivider,\n opacity: [0, 0.5],\n scaleX: ['0', '100%'],\n duration: 150\n },\n '-=120'\n );\n // Fade in utility nav items\n timeline.add(\n {\n targets: this.dom.utilityNavigationItems,\n opacity: ['0', '100%'],\n translateX: ['5%', '0%'],\n duration: 150,\n delay: anime.stagger(120)\n },\n '-=120'\n );\n }\n\n openPrimaryNavigation() {\n if (window.innerWidth < breakpoints.tabletLandscape) return;\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n });\n this.setHtmlOverflow('hidden');\n this.el.classList.add('active');\n this.focusTrap.activate();\n this.primaryNavigationDesktopAnimation({\n onComplete: () => {\n this.runningAnimation = false;\n }\n });\n\n if (!this.interactiveMap) {\n this.interactiveMap = new InteractiveMap(this.dom.interactiveMap);\n }\n }\n\n closePrimaryNavigation(onComplete) {\n if (window.innerWidth < breakpoints.tabletLandscape) return;\n this.focusTrap.deactivate();\n this.primaryNavigationDesktopAnimation({\n direction: 'reverse',\n onComplete: () => {\n this.runningAnimation = false;\n this.el.classList.remove('active');\n this.setHtmlOverflow('auto');\n\n if (typeof onComplete === 'function') {\n onComplete();\n }\n }\n });\n }\n\n handleKeyEvents(e) {\n if (e.key === 'Escape') {\n this.closePrimaryNavigation();\n }\n }\n\n setupMenuHoverSpans() {\n //Create and append container element\n const container = document.createElement('div');\n container.classList.add('menu-trigger-animated');\n this.dom.openTrigger.append(container);\n // Create and append animated elements\n [...new Array(3)].forEach(() => {\n const element = document.createElement('div');\n element.classList.add('menu-trigger-animated__item');\n container.append(element);\n });\n }\n}\n\nexport default PrimaryNavigation;\n","export default [\n {\n featureType: 'water',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#d3d3d3'\n }\n ]\n },\n {\n featureType: 'transit',\n stylers: [\n {\n color: '#808080'\n },\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry.stroke',\n stylers: [\n {\n visibility: 'on'\n },\n {\n color: '#b3b3b3'\n }\n ]\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff'\n }\n ]\n },\n {\n featureType: 'road.local',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on'\n },\n {\n color: '#ffffff'\n },\n {\n weight: 1.8\n }\n ]\n },\n {\n featureType: 'road.local',\n elementType: 'geometry.stroke',\n stylers: [\n {\n color: '#d7d7d7'\n }\n ]\n },\n {\n featureType: 'poi',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on'\n },\n {\n color: '#ebebeb'\n }\n ]\n },\n {\n featureType: 'administrative',\n elementType: 'geometry',\n stylers: [\n {\n color: '#a7a7a7'\n }\n ]\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff'\n }\n ]\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff'\n }\n ]\n },\n {\n featureType: 'landscape',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on'\n },\n {\n color: '#efefef'\n }\n ]\n },\n {\n featureType: 'landscape',\n elementType: 'labels',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#696969'\n }\n ]\n },\n {\n featureType: 'administrative',\n elementType: 'labels.text.fill',\n stylers: [\n {\n visibility: 'on'\n },\n {\n color: '#737373'\n }\n ]\n },\n {\n featureType: 'poi',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'poi',\n elementType: 'labels',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.stroke',\n stylers: [\n {\n color: '#d6d6d6'\n }\n ]\n },\n {\n featureType: 'road',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off'\n }\n ]\n },\n {},\n {\n featureType: 'poi',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#dadada'\n }\n ]\n }\n];\n","import { Component } from '@verndale/core';\nimport Axios from 'axios';\n\nimport { debounce } from '../helpers';\nimport styles from '../helpers/snazzymaps';\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n navigationList: this.el.querySelector(\n '.interactive-map__navigation-list'\n ),\n navigationItems: [\n ...this.el.querySelectorAll('.interactive-map__navigation-link')\n ],\n mapContainer: this.el.querySelector('.interactive-map__map-inner')\n };\n\n this.initMap();\n this.loadMapData();\n }\n\n addListeners() {\n // Handle featured navigation items hover/active state\n this.dom.navigationItems.forEach((navItem, index) => {\n navItem.addEventListener('mouseenter', e =>\n this.handleNavItemHover(e, index)\n );\n });\n\n window.addEventListener(\n 'resize',\n debounce(this.handleresize.bind(this), 200)\n );\n }\n\n async loadMapData() {\n const { data } = await Axios({\n method: 'GET',\n url: this.el.dataset.endpoint\n });\n\n this.bounds = new google.maps.LatLngBounds();\n\n this.defaultLocation = data.defaultLocation;\n this.locations = data.locations;\n\n if (this.locations.length) {\n this.locations.forEach(location => {\n const navItem = this.dom.navigationItems.find(\n navItem =>\n navItem.dataset.locationId &&\n navItem.dataset.locationId === location.id\n );\n\n location.marker = new google.maps.Marker({\n position: location.geo,\n map: this.map,\n title: location.name,\n icon: `/public/AspenSnowmassRedesign/images/interactive-map/${location.icon}-tag.svg?i=animate`,\n zIndex: location.icon === 'mountain' ? 2 : 1,\n cursor: navItem ? null : 'default'\n });\n\n location.infoWindow = new google.maps.InfoWindow({\n content: `<div class=\"interactive-map__map-info-window\">${location.name}</div>`,\n position: location.geo,\n pixelOffset: new google.maps.Size(120, 4),\n disableAutoPan: true\n });\n\n location.marker.addListener('mouseover', () => {\n console.log(location.infoWindow);\n\n location.infoWindow.open({\n map: this.map,\n shouldFocus: false\n });\n });\n\n location.marker.addListener('mouseout', () => {\n location.infoWindow.close();\n });\n\n this.bounds.extend(location.geo);\n\n if (navItem) {\n location.marker.addListener('click', () => {\n window.location.href = navItem.querySelector('a').href;\n });\n }\n });\n\n setTimeout(() => {\n this.map.fitBounds(this.bounds);\n this.defaultLocation.zoom = this.map.zoom;\n this.defaultLocation.geo = this.map.center;\n }, 500);\n } else {\n this.map.setCenter(this.defaultLocation.geo);\n this.map.setZoom(this.defaultLocation.zoom);\n }\n }\n\n initMap() {\n this.map = new google.maps.Map(this.dom.mapContainer, {\n styles,\n center: { lat: 39.1750214524246, lng: -106.911852329082 },\n zoom: 11,\n disableDefaultUI: true,\n scrollwheel: false,\n draggable: false,\n draggableCursor: 'default'\n });\n }\n\n handleNavItemHover(e, index) {\n this.dom.navigationItems\n .find(navItem => navItem.classList.contains('active'))\n ?.classList.remove('active');\n\n e.currentTarget.classList.add('active');\n this.dom.navigationList.classList[index > 0 ? 'add' : 'remove']('active');\n\n const selectedLocation = this.locations.find(\n location =>\n location.id && location.id === e.currentTarget.dataset.locationId\n );\n\n this.selectedLocation = selectedLocation;\n this.panZoomToLocation();\n }\n\n handleresize() {\n this.map.fitBounds(this.bounds);\n this.defaultLocation.zoom = this.map.zoom;\n this.panZoomToLocation();\n }\n\n panZoomToLocation() {\n if (this.selectedLocation) {\n this.locations.forEach(location => {\n if (\n location.icon === 'mountain' &&\n location.id !== this.selectedLocation.id\n ) {\n location.marker.setOpacity(0);\n } else {\n location.marker.setOpacity(1);\n }\n });\n this.map.setZoom(this.selectedLocation.zoom);\n this.map.panTo(this.selectedLocation.geo);\n } else {\n this.locations.forEach(location => location.marker.setOpacity(1));\n this.map.setZoom(this.defaultLocation.zoom);\n this.map.panTo(this.defaultLocation.geo);\n }\n }\n}\n\nexport default Module;\n","/* eslint-disable react/prop-types*/\nimport { Component } from '@verndale/core';\nimport anime from 'animejs';\n\nclass BookNow extends Component {\n constructor(el, disableScroll = true, manualHeightInit = false) {\n super(el);\n this.disableScroll = disableScroll;\n this.manualheightInit = manualHeightInit;\n }\n setupDefaults() {\n this.expanded = false;\n this.focusedLink = 0;\n this.dom = {\n body: document.querySelector('body'),\n trigger: this.el.querySelector('.book-now__trigger'),\n popup: this.el.querySelector('.book-now__popup'),\n links: [...this.el.querySelectorAll('.book-now__link')],\n overlay: this.el.querySelector('.book-now__overlay')\n };\n this.setupExternalIcon();\n if (!this.manualheightInit) this.popupHeight = this.dom.popup.offsetHeight;\n }\n\n addListeners() {\n this.dom.trigger.addEventListener('click', event =>\n this.toggleDropdown(event)\n );\n // Handle trigger keyboard events\n this.dom.trigger.addEventListener('keydown', event =>\n this.handleTriggerKeyEvents(event)\n );\n // Handle popup keyboard events\n this.dom.popup.addEventListener('keydown', event =>\n this.handlePopupKeyEvents(event)\n );\n // Handle click outside\n this.dom.overlay.addEventListener('click', event => {\n event.stopPropagation();\n this.toggleDropdown(event);\n });\n window.addEventListener('click', e => {\n if (this.expanded) this.toggleDropdown(e);\n });\n }\n\n changeScroll() {\n if (this.expanded) {\n const scrollY = window.scrollY;\n this.dom.body.style.position = 'fixed';\n this.dom.body.style.top = `-${scrollY}px`;\n this.dom.body.style.overflowY = 'scroll';\n } else {\n const scrollY = document.body.style.top;\n this.dom.body.style.position = null;\n this.dom.body.style.top = null;\n this.dom.body.style.overflowY = null;\n window.scrollTo(0, parseInt(scrollY || '0') * -1);\n }\n }\n\n recalculatePopupHeight() {\n this.popupHeight = this.dom.popup.offsetHeight;\n }\n\n toggleDropdown(e) {\n e?.stopPropagation();\n if (!this.popupHeight) return;\n const isTriggeredByKeyboard = e?.detail === 0;\n // Update expanded state\n this.expanded = !this.expanded;\n //Toggle scroll\n if (this.disableScroll) this.changeScroll();\n // Show/hide white overlay\n this.dom.overlay.classList.toggle('active');\n // Update trigger aria-expanded attribute\n this.dom.trigger.setAttribute('aria-expanded', this.expanded);\n // Show/hide popup\n if (this.expanded) this.dom.popup.classList.add('active');\n anime({\n targets: this.dom.popup,\n easing: 'easeInOutQuad',\n height: [0, this.popupHeight], // -> '250px'\n duration: 400,\n direction: this.expanded ? 'normal' : 'reverse',\n complete: () =>\n !this.expanded && this.dom.popup.classList.remove('active')\n });\n //Focus first link if exists on open and event was trigger by keyboard\n if (\n this.expanded &&\n isTriggeredByKeyboard &&\n this.dom.links[this.focusedLink]\n ) {\n this.dom.links[this.focusedLink].focus();\n }\n // Reset focusedLink on close\n if (!this.expanded) this.focusedLink = 0;\n }\n\n handleTriggerKeyEvents(e) {\n // Open/close popup\n if (e.key === 'ArrowDown' || (this.expanded && e.key === 'Escape')) {\n this.toggleDropdown(e);\n }\n }\n\n handlePopupKeyEvents(e) {\n // Close popup\n if (e.key === 'Escape') {\n this.toggleDropdown();\n // Focus trigger\n return this.dom.trigger.focus();\n }\n // Navigate links using arrows\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const delta = {\n ArrowUp: -1,\n ArrowDown: 1\n };\n const linksLength = this.dom.links.length;\n const linkToFocusIndex = this.focusedLink + delta[e.key];\n // Circle back to last link\n if (linkToFocusIndex < 0) {\n this.dom.links[linksLength - 1].focus();\n return (this.focusedLink = linksLength - 1);\n }\n // Circle back to first link\n if (linkToFocusIndex > linksLength - 1) {\n this.dom.links[0].focus();\n return (this.focusedLink = 0);\n }\n // Natural navigation\n this.dom.links[linkToFocusIndex].focus();\n return (this.focusedLink = linkToFocusIndex);\n }\n }\n\n setupExternalIcon() {\n this.dom.links.forEach(link => {\n const href = link.getAttribute('href');\n if (!href.includes('http') || href.includes(window.location.host)) {\n link.classList.remove('external');\n }\n });\n }\n}\n\nexport default BookNow;\n"],"sourceRoot":""}