{"version":3,"file":"map-CcaGEkhe.js","sources":["../../../scripts/module/header.js","../../../scripts/module/tabs.js","../../../scripts/module/table.js","../../../scripts/module/externalLinks.js","../../../scripts/module/holidays.js","../../../scripts/module/childGrid.js","../../../scripts/module/faq.js","../../../scripts/module/hotel.js","../../../../node_modules/@elfalem/leaflet-curve/dist/leaflet.curve.js","../../../../node_modules/leaflet-geometryutil/src/leaflet.geometryutil.js","../../../../node_modules/leaflet-arrowheads/src/leaflet-arrowheads.js","../../../../node_modules/leaflet-gesture-handling/dist/leaflet-gesture-handling.min.js","../../../scripts/module/map.js"],"sourcesContent":["/* eslint-disable no-restricted-syntax */\nconst headerEl = document.querySelector('header');\n\nif (headerEl && headerEl.classList.contains('show-booking-search')) {\n\tconst targetNode = headerEl.querySelector('#booking-header-search');\n\tconst mutationConfig = { childList: true, attributes: true, subtree: true };\n\n\tconst observer = new MutationObserver((mutationsList) => {\n\t\tif (headerEl.classList.contains('query-view') || headerEl.classList.contains('search-view')) {\n\t\t\tobserver.disconnect();\n\t\t}\n\t\tfor (const mutation of mutationsList) {\n\t\t\tif (mutation.type === 'attributes') {\n\t\t\t\tconst bookingWidgetEl = targetNode.childNodes[0];\n\t\t\t\tif (bookingWidgetEl) {\n\t\t\t\t\tconst searchView = bookingWidgetEl.getAttribute('data-search-view');\n\t\t\t\t\tif (searchView) {\n\t\t\t\t\t\theaderEl.classList.add(searchView === 'query' ? 'query-view' : 'search-view');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tobserver.observe(targetNode, mutationConfig);\n}\n","import Flickity from 'flickity';\nimport { Accordion } from './accordion';\nimport { createGTCarousel } from './carousel';\n\n/* eslint-disable no-restricted-syntax */\nconst keyCode = Object.freeze({\n\tPAGEUP: 33,\n\tPAGEDOWN: 34,\n\tEND: 35,\n\tHOME: 36,\n\tLEFT: 37,\n\tUP: 38,\n\tRIGHT: 39,\n\tDOWN: 40,\n\tDELETE: 46,\n\tENTER: 13,\n\tSPACE: 32,\n\tRETURN: 13,\n});\n\nconst direction = Object.freeze({\n\t37: -1,\n\t38: -1,\n\t39: 1,\n\t40: 1,\n});\n\nclass TabList {\n\tconstructor(domNode) {\n\t\tthis.domNode = domNode;\n\t\tthis.tabs = [];\n\t\tthis.panels = [];\n\t}\n\n\tinit() {\n\t\tthis.tabs = this.domNode.querySelectorAll('[role=\"tab\"]');\n\t\tthis.panels = this.domNode.querySelectorAll('[role=\"tabpanel\"]');\n\n\t\tfor (let i = 0; i < this.tabs.length; ++i) {\n\t\t\tconst tab = this.tabs[i];\n\t\t\ttab.addEventListener('click', this.handleClick.bind(this));\n\t\t\ttab.addEventListener('keydown', this.handleKeydown.bind(this));\n\t\t\ttab.addEventListener('keyup', this.handleKeyup.bind(this));\n\t\t\ttab.index = i;\n\t\t}\n\t}\n\n\thandleClick(event) {\n\t\tconst tab = event.currentTarget;\n\t\tthis.activateTab(tab, false);\n\t}\n\n\thandleKeydown(event) {\n\t\tlet flag = false;\n\n\t\tswitch (event.keyCode) {\n\t\t\tcase keyCode.HOME:\n\t\t\tcase keyCode.PAGEUP:\n\t\t\t\tthis.focusFirstTab();\n\t\t\t\tflag = true;\n\t\t\t\tbreak;\n\n\t\t\tcase keyCode.END:\n\t\t\tcase keyCode.PAGEDOWN:\n\t\t\t\tthis.focusLastTab();\n\t\t\t\tflag = true;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (flag) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\thandleKeyup(event) {\n\t\tlet flag = false;\n\n\t\tswitch (event.keyCode) {\n\t\t\tcase keyCode.LEFT:\n\t\t\tcase keyCode.RIGHT:\n\t\t\t\tthis.determineOrientation(event);\n\t\t\t\tflag = true;\n\t\t\t\tbreak;\n\n\t\t\tcase keyCode.ENTER:\n\t\t\tcase keyCode.RETURN:\n\t\t\tcase keyCode.SPACE:\n\t\t\t\tthis.activateTab(event.currentTarget);\n\t\t\t\tflag = true;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (flag) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tactivateTab(tab, setFocus = false) {\n\t\tthis.deactivateTabs();\n\n\t\ttab.removeAttribute('tabindex');\n\t\ttab.setAttribute('aria-selected', 'true');\n\t\ttab.classList.add('active');\n\n\t\tconst controls = tab.getAttribute('aria-controls');\n\t\tconst controledEl = document.querySelector(`#${controls}`);\n\t\tcontroledEl.removeAttribute('hidden');\n\t\tcontroledEl.removeAttribute('aria-hidden');\n\n\t\tif (controledEl.querySelector('.gallery-carousel')) {\n\t\t\tconst gCarouselEls = controledEl.querySelector('.gallery-carousel');\n\t\t\tconst gCarouselFlickity = Flickity.data(gCarouselEls);\n\t\t\tgCarouselFlickity.resize();\n\t\t}\n\n\t\tif (controledEl.querySelector('.image-text-carousel')) {\n\t\t\tconst itCarouselEl = controledEl.querySelector('.image-text-carousel');\n\t\t\tconst itCarouselFlickity = Flickity.data(itCarouselEl);\n\t\t\titCarouselFlickity.resize();\n\t\t}\n\n\t\tif (setFocus) {\n\t\t\ttab.focus();\n\t\t}\n\t}\n\n\tactivateTabs() {\n\t\tfor (const tab of this.tabs) {\n\t\t\ttab.removeAttribute('tabindex');\n\t\t\ttab.setAttribute('aria-selected', 'true');\n\t\t}\n\n\t\tfor (const panel of this.panels) {\n\t\t\tpanel.removeAttribute('hidden');\n\t\t\tpanel.removeAttribute('aria-hidden');\n\t\t}\n\t}\n\n\tdeactivateTabs() {\n\t\tfor (const tab of this.tabs) {\n\t\t\ttab.setAttribute('tabindex', '-1');\n\t\t\ttab.setAttribute('aria-selected', 'false');\n\t\t\ttab.classList.remove('active');\n\t\t}\n\n\t\tfor (const panel of this.panels) {\n\t\t\tpanel.setAttribute('hidden', 'hidden');\n\t\t\tpanel.setAttribute('aria-hidden', true);\n\t\t}\n\t}\n\n\tdetermineOrientation(event) {\n\t\tconst keyPressed = event.keyCode;\n\t\tlet proceed = false;\n\n\t\tif (keyPressed === keyCode.LEFT || keyPressed === keyCode.RIGHT) {\n\t\t\tproceed = true;\n\t\t}\n\n\t\tif (proceed) {\n\t\t\tthis.switchTabOnArrowPress(event);\n\t\t}\n\t}\n\n\tswitchTabOnArrowPress(event) {\n\t\tconst keyPressed = event.keyCode;\n\n\t\tif (direction[keyPressed]) {\n\t\t\tconst target = event.currentTarget;\n\n\t\t\tif (target.index !== undefined) {\n\t\t\t\tif (this.tabs[target.index + direction[keyPressed]]) {\n\t\t\t\t\tthis.tabs[target.index + direction[keyPressed]].focus();\n\t\t\t\t} else if (keyPressed === keyCode.LEFT) {\n\t\t\t\t\tthis.focusLastTab();\n\t\t\t\t} else if (keyPressed === keyCode.RIGHT) {\n\t\t\t\t\tthis.focusFirstTab();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfocusFirstTab() {\n\t\tthis.tabs[0].focus();\n\t}\n\n\tfocusLastTab() {\n\t\tthis.tabs[this.tabs.length - 1].focus();\n\t}\n}\n\nconst mediaBreakPoint = '(max-width: 767px)';\nconst mq = window.matchMedia(mediaBreakPoint);\n\nconst tabsBlockEls = document.querySelectorAll('.tabs-block');\n\ntabsBlockEls.forEach((tabsBlockEl) => {\n\tconst isGallery = tabsBlockEl.classList.contains('gallery');\n\n\tconst createTabTriggerEl = (tabs, parentEl) => {\n\t\ttabs.forEach((tab, idx) => {\n\t\t\tconst liEl = document.createElement('li');\n\t\t\tconst buttonEl = document.createElement('button');\n\n\t\t\tliEl.setAttribute('role', 'presentation');\n\t\t\tbuttonEl.classList.add('tab-button');\n\t\t\tbuttonEl.setAttribute('role', 'tab');\n\t\t\tbuttonEl.setAttribute('aria-selected', idx === 0 ? 'true' : 'false');\n\t\t\tbuttonEl.setAttribute('aria-controls', tab.panelid);\n\t\t\tbuttonEl.setAttribute('id', `${tab.panelid}TabTrigger`);\n\t\t\tif (idx === 0) {\n\t\t\t\tbuttonEl.classList.add('active');\n\t\t\t} else {\n\t\t\t\tbuttonEl.setAttribute('tabindex', '-1');\n\t\t\t}\n\t\t\tbuttonEl.appendChild(document.createTextNode(tab.tabName));\n\n\t\t\tliEl.appendChild(buttonEl);\n\t\t\tparentEl.appendChild(liEl);\n\t\t});\n\t};\n\n\tconst createGalleryTabTriggerEl = (tabs, parentEl) => {\n\t\tconst tplGalleryTabItem = document.getElementById('GalleryTabItemTpl') ? document.getElementById('GalleryTabItemTpl').content : null;\n\n\t\ttabs.forEach((tab, idx) => {\n\t\t\tconst galleryTabItemNode = tplGalleryTabItem.cloneNode(true);\n\t\t\tconst galleryTabButtonEl = galleryTabItemNode.querySelector('.gallery-tab-button');\n\n\t\t\tgalleryTabButtonEl.setAttribute('aria-selected', idx === 0 ? 'true' : 'false');\n\t\t\tgalleryTabButtonEl.setAttribute('aria-controls', tab.panelid);\n\t\t\tgalleryTabButtonEl.setAttribute('id', `${tab.panelid}TabTrigger`);\n\n\t\t\tgalleryTabButtonEl.querySelector('.tab-button-image').setAttribute('data-bg', tab.tabImage);\n\t\t\tgalleryTabButtonEl.querySelector('.sr-only').innerText = tab.tabimagealttext;\n\t\t\tgalleryTabButtonEl.querySelector('.tab-button-text').innerText = tab.tabName;\n\n\t\t\tif (idx === 0) {\n\t\t\t\tgalleryTabButtonEl.classList.add('active');\n\t\t\t} else {\n\t\t\t\tgalleryTabButtonEl.setAttribute('tabindex', '-1');\n\t\t\t}\n\n\t\t\tparentEl.appendChild(galleryTabItemNode);\n\t\t});\n\t};\n\n\tconst tabPanelEls = tabsBlockEl.querySelectorAll('.tab-panel');\n\tconst tabsData = Array.from(tabPanelEls).map((el) => ({\n\t\tpanelid: el.getAttribute('id'),\n\t\ttabName: el.getAttribute('data-tabname'),\n\t\ttabimagealttext: el.getAttribute('data-tabimagealttext'),\n\t\ttabImage: isGallery ? el.getAttribute('data-tabimage') : null,\n\t}));\n\n\tif (isGallery) {\n\t\tcreateGalleryTabTriggerEl(tabsData, tabsBlockEl.querySelector('.tabs-carousel'));\n\t\tconst tabsCarousel = tabsBlockEl.querySelector('.tabs-carousel-container');\n\t\tcreateGTCarousel(tabsCarousel);\n\t} else {\n\t\tcreateTabTriggerEl(tabsData, tabsBlockEl.querySelector('.tabs'));\n\t}\n\n\tconst prevWidth = window.innerWidth;\n\tlet initTabs = false;\n\tlet initAccordion = false;\n\tlet setActiveTab = false;\n\tlet setActoveAccordion = false;\n\tlet tabBlockTabList = null;\n\tlet tabAccordion = null;\n\n\tconst resizeHandler = () => {\n\t\tif (!mq.matches && !initTabs) {\n\t\t\tinitTabs = true;\n\t\t\ttabBlockTabList = new TabList(tabsBlockEl);\n\t\t\ttabBlockTabList.init();\n\t\t}\n\n\t\tif (mq.matches && !initAccordion) {\n\t\t\tinitAccordion = true;\n\t\t\tconst tabAccordionEl = tabsBlockEl.querySelector('.mobile-tabs-accordion');\n\t\t\ttabAccordion = new Accordion(tabAccordionEl);\n\t\t\ttabAccordion.init();\n\t\t}\n\n\t\tif (!mq.matches && !setActiveTab) {\n\t\t\tsetActiveTab = true;\n\t\t\tsetActoveAccordion = false;\n\t\t\tconst allPanelEls = tabsBlockEl.querySelectorAll('.accordion-panel');\n\t\t\tlet activeTab = isGallery ? tabsBlockEl.querySelector('.tabs-carousel .gallery-tab-button:first-of-type') : tabsBlockEl.querySelector('.tabs li:first-child .tab-button');\n\t\t\tfor (const el of allPanelEls) {\n\t\t\t\tif (!el.hasAttribute('hidden')) {\n\t\t\t\t\tactiveTab = document.querySelector(`#${el.getAttribute('id')}TabTrigger`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttabBlockTabList.activateTab(activeTab, false);\n\t\t}\n\n\t\tif (mq.matches && !setActoveAccordion) {\n\t\t\tsetActoveAccordion = true;\n\t\t\tsetActiveTab = false;\n\t\t\tconst allPanelEls = tabsBlockEl.querySelectorAll('.accordion-panel');\n\t\t\tlet activeTab = tabsBlockEl.querySelector('.tab-panels-container .accordion-item:first-child .accordion-trigger');\n\t\t\tfor (const el of allPanelEls) {\n\t\t\t\tif (!el.hasAttribute('hidden')) {\n\t\t\t\t\tactiveTab = document.querySelector(`#${el.getAttribute('aria-labelledby')}`);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttabAccordion.activateAccordionItem(activeTab);\n\t\t}\n\t};\n\n\tresizeHandler();\n\twindow.addEventListener('resize', function () {\n\t\tif (window.innerWidth === prevWidth) {\n\t\t\treturn;\n\t\t}\n\t\tresizeHandler();\n\t});\n});\n","/* eslint-disable no-restricted-syntax */\nconst mediaBreakPoint = '(min-width: 768px)';\nconst mq = window.matchMedia(mediaBreakPoint);\nconst servicesTables = document.querySelectorAll('.js-services-table');\nlet showMobileOnlyElems = false;\nlet showDesktopOnlyElems = true;\n\nfunction toggleServicesMobileOnly(show) {\n\tlet mobileOnlyElems = [];\n\tfor (const tt of servicesTables) {\n\t\tmobileOnlyElems = [...mobileOnlyElems, ...tt.querySelectorAll('.mobile-only')];\n\t}\n\tshowMobileOnlyElems = show;\n\n\tfor (const elem of mobileOnlyElems) {\n\t\tif (show) {\n\t\t\telem.setAttribute('aria-hidden', false);\n\t\t\telem.removeAttribute('hidden');\n\t\t} else {\n\t\t\telem.setAttribute('aria-hidden', true);\n\t\t\telem.setAttribute('hidden', '');\n\t\t}\n\t}\n}\n\nfunction toggleServicesDesktopOnly(show) {\n\tlet desktopOnlyElems = [];\n\tfor (const tt of servicesTables) {\n\t\tdesktopOnlyElems = [...desktopOnlyElems, ...tt.querySelectorAll('.desktop-only')];\n\t}\n\tshowDesktopOnlyElems = show;\n\n\tfor (const elem of desktopOnlyElems) {\n\t\tif (show) {\n\t\t\telem.setAttribute('aria-hidden', false);\n\t\t\telem.removeAttribute('hidden');\n\t\t} else {\n\t\t\telem.setAttribute('aria-hidden', true);\n\t\t\telem.setAttribute('hidden', '');\n\t\t}\n\t}\n}\n\nif (servicesTables.length) {\n\ttoggleServicesMobileOnly(!mq.matches);\n\ttoggleServicesDesktopOnly(mq.matches);\n}\n\nwindow.addEventListener('resize', function () {\n\tif (servicesTables.length) {\n\t\tif (mq.matches && showMobileOnlyElems) {\n\t\t\ttoggleServicesMobileOnly(false);\n\t\t} else if (!mq.matches && !showMobileOnlyElems) {\n\t\t\ttoggleServicesMobileOnly(true);\n\t\t}\n\n\t\tif (mq.matches && !showDesktopOnlyElems) {\n\t\t\ttoggleServicesDesktopOnly(true);\n\t\t} else if (!mq.matches && showDesktopOnlyElems) {\n\t\t\ttoggleServicesDesktopOnly(false);\n\t\t}\n\t}\n});\n\nconst tableEls = document.querySelectorAll('.text-rte table');\nif (tableEls.length) {\n\ttableEls.forEach((tableEl) => {\n\t\tconst tableWrapEl = document.createElement('div');\n\t\ttableWrapEl.classList.add('table-wrapper');\n\t\ttableEl.parentNode.insertBefore(tableWrapEl, tableEl);\n\t\ttableWrapEl.appendChild(tableEl);\n\t\t// tableWrapEl.parentNode.removeChild(tableEl);\n\t});\n}\n","const anchors = document.querySelectorAll('a[href^=\"http\"]');\n\nanchors.forEach((anchor) => {\n\tconst currentDomainHostname = window.location.hostname;\n\tconst href = anchor.getAttribute('href');\n\n\tif (href && !href.includes(currentDomainHostname)) {\n\t\tif (anchor.hasAttribute('rel')) {\n\t\t\tconst relValue = anchor.getAttribute('rel');\n\t\t\tif (!relValue.includes('noopener')) {\n\t\t\t\tanchor.setAttribute('rel', `${relValue} noopener`);\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.setAttribute('rel', 'noopener');\n\t\t}\n\t}\n});\n","import { createHCarousel } from './carousel';\n\nconst holidaysContainerEls = document.querySelectorAll('.handpicked-holidays-container');\n\nif (holidaysContainerEls.length) {\n\tholidaysContainerEls.forEach((holidaysContainerEl) => {\n\t\tconst holidayCarouselContainerEl = holidaysContainerEl.querySelector('.holidays-carousel-container');\n\t\tconst holidayCarouselEl = holidayCarouselContainerEl.querySelector('.holidays-carousel');\n\t\tconst holidayCarouselItemEls = holidayCarouselEl.querySelectorAll('.carousel-item.holiday');\n\t\tconst holidayCarouselFlickity = createHCarousel(holidayCarouselContainerEl);\n\n\t\tconst holidayTagContainerEl = holidaysContainerEl.querySelector('.holiday-tags');\n\t\tif (holidayTagContainerEl) {\n\t\t\tconst holidayTagEls = holidayTagContainerEl.querySelectorAll('.holiday-tag');\n\t\t\tholidayTagEls.forEach((tag) => {\n\t\t\t\ttag.addEventListener('click', (event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\tconst target = event.currentTarget;\n\t\t\t\t\tconst sortedEls = holidayCarouselItemEls;\n\n\t\t\t\t\t// add active class to current clicked button\n\t\t\t\t\tholidayTagEls.forEach((el) => {\n\t\t\t\t\t\tel.classList.remove('active');\n\t\t\t\t\t});\n\t\t\t\t\ttarget.classList.add('active');\n\n\t\t\t\t\t// sort out carousels\n\t\t\t\t\tconst cellElements = holidayCarouselFlickity.cells.map((cell) => cell.element);\n\t\t\t\t\tholidayCarouselFlickity.remove(cellElements);\n\t\t\t\t\tsortedEls.forEach((el) => {\n\t\t\t\t\t\tif (target.getAttribute('data-term') || el.getAttribute('data-tags').includes(target.getAttribute('data-tag'))) {\n\t\t\t\t\t\t\tholidayCarouselFlickity.insert(el);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tholidayCarouselFlickity.resize();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst moreTagTriggerEl = holidayTagContainerEl.querySelector('.js-more-tags');\n\t\t\tif (moreTagTriggerEl) {\n\t\t\t\tconst holidayMoreTagEl = holidayTagContainerEl.querySelector('.more-tags');\n\t\t\t\tmoreTagTriggerEl.addEventListener('click', (event) => {\n\t\t\t\t\tconst target = event.currentTarget;\n\t\t\t\t\tholidayMoreTagEl.classList.remove('!hidden');\n\t\t\t\t\tholidayMoreTagEl.replaceWith(...holidayMoreTagEl.childNodes);\n\t\t\t\t\ttarget.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n","const childGridContainerEls = document.querySelectorAll('.child-grid-container');\nif (childGridContainerEls) {\n\tchildGridContainerEls.forEach((container) => {\n\t\tconst extraChildGridItemEls = container.querySelectorAll('.extra-child-grid-item');\n\t\tconst seeAllTriggerEl = container.querySelector('.js-see-all-child-grid');\n\n\t\tif (seeAllTriggerEl) {\n\t\t\tseeAllTriggerEl.addEventListener('click', (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tconst target = event.currentTarget;\n\t\t\t\textraChildGridItemEls.forEach((item) => {\n\t\t\t\t\titem.classList.remove('hidden');\n\t\t\t\t});\n\t\t\t\ttarget.remove();\n\t\t\t});\n\t\t}\n\t});\n}\n","const faqFilterForm = document.querySelector('#faqFilter');\n\nif (faqFilterForm) {\n\tconst filterCountEl = faqFilterForm.querySelector('#filterCount');\n\tconst faqResultsContainerEl = document.querySelector('#faqResultsContainer');\n\tconst resetFaqFilterBtn = faqFilterForm.querySelector('#resetFaqilter');\n\n\tconst filterTagsEls = faqFilterForm.querySelectorAll('.fliter-tags-checkbox');\n\tconst faqCategoryEls = faqResultsContainerEl.querySelectorAll('.faq-category');\n\n\tlet filterCounter = 0;\n\n\tconst doSearch = () => {\n\t\tconst tags = Array.from(faqFilterForm.querySelectorAll('.fliter-tags-checkbox:checked')).map((el) => el.value);\n\n\t\tif (tags.length) {\n\t\t\tfaqCategoryEls.forEach((item) => {\n\t\t\t\tconst id = item.getAttribute('id').split('-')[1];\n\t\t\t\tif (tags.includes(id)) {\n\t\t\t\t\titem.classList.remove('hidden');\n\t\t\t\t} else {\n\t\t\t\t\titem.classList.add('hidden');\n\t\t\t\t}\n\t\t\t});\n\t\t\tresetFaqFilterBtn.classList.remove('md:hidden');\n\t\t} else {\n\t\t\tfaqCategoryEls.forEach((item) => {\n\t\t\t\titem.classList.remove('hidden');\n\t\t\t});\n\t\t\tresetFaqFilterBtn.classList.add('md:hidden');\n\t\t}\n\t};\n\n\tfilterTagsEls.forEach((item) => {\n\t\titem.addEventListener('change', (event) => {\n\t\t\tdoSearch();\n\n\t\t\tif (!event.currentTarget.checked && filterCounter > 0) {\n\t\t\t\tfilterCounter -= 1;\n\t\t\t} else {\n\t\t\t\tfilterCounter += 1;\n\t\t\t}\n\t\t\tfilterCountEl.innerHTML = `${filterCounter} filters`;\n\t\t});\n\t});\n\n\tresetFaqFilterBtn.addEventListener('click', (event) => {\n\t\tevent.preventDefault();\n\n\t\tfilterTagsEls.forEach((item) => {\n\t\t\tif (item.checked) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\titem.checked = false;\n\n\t\t\t\tif ('createEvent' in document) {\n\t\t\t\t\tconst evt = document.createEvent('HTMLEvents');\n\t\t\t\t\tevt.initEvent('change', false, true);\n\t\t\t\t\titem.dispatchEvent(evt);\n\t\t\t\t} else {\n\t\t\t\t\titem.fireEvent('onchange');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tevent.target.classList.add('md:hidden');\n\t});\n}\n","import axios from 'axios';\n\nconst hotelContainerEls = document.querySelectorAll('.js-hotel-prices a');\nconst hotelIndividualPriceEl = document.querySelector('.js-hotel-price');\n\nconst fetchHotelResults = (atcomRef, start, end) => {\n\treturn new Promise((resolve) => {\n\n\t\tconst baseUrl = document.body.dataset?.bookingApiUrl;\n\t\tif (!baseUrl) {\n\t\t\tconsole.error('\"data-booking-api-url\" data attribute must be defined on the body tag.');\n\t\t\tresolve({ data: {} });\n\t\t\treturn;\n\t\t}\n\n\t\tconst url = new URL(`${baseUrl}/api/v1/hotel/prices?startDate=${start}&endDate=${end}&code=${atcomRef}&includeMonths=1`);\n\n\t\taxios\n\t\t\t.get(url)\n\t\t\t.then((response) => {\n\t\t\t\tresolve(response.data);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error(error);\n\t\t\t});\n\t});\n};\n\nconst getNext12Months = () => {\n\tconst currentDate = new Date();\n\tconst startOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() + 0, 1);\n\tconst endOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() + 12 + 1, 0);\n\tconst returnAr = [startOfMonth.toISOString().split('T')[0], endOfMonth.toISOString().split('T')[0]];\n\treturn returnAr;\n};\n\nconst findLowestCost = (data) => {\n\treturn Object.values(data).reduce((minCost, cost) => {\n\t\tif (cost !== '' && (minCost === null || cost < minCost)) {\n\t\t\treturn cost;\n\t\t}\n\t\treturn minCost;\n\t}, null);\n};\n\nif (hotelContainerEls.length) {\n\thotelContainerEls.forEach((hotelContainerEl) => {\n\t\tconst hotelAtcomRef = hotelContainerEl.getAttribute('data-atcom');\n\t\tconst hotelPriceEl = hotelContainerEl.querySelector('#hotel-price');\n\t\tconst hotelPricePartentEl = hotelContainerEl.querySelector('div p.price-from');\n\t\tconst dates = getNext12Months();\n\n\t\tfetchHotelResults(hotelAtcomRef, dates[0], dates[1]).then((response) => {\n\t\t\tconst { data } = response;\n\t\t\tif (data) {\n\t\t\t\tconst lowestPrice = findLowestCost(data) / 2;\n\t\t\t\tif (lowestPrice > 0) {\n\t\t\t\t\thotelPriceEl.innerHTML = `£${parseFloat(parseFloat(lowestPrice).toFixed(0)).toLocaleString()} per person`;\n\t\t\t\t} else {\n\t\t\t\t\thotelPricePartentEl.setAttribute('hidden', 'hidden');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\nif (hotelIndividualPriceEl) {\n\tconst hotelAtcomRef = hotelIndividualPriceEl.getAttribute('data-atcom');\n\tconst dates = getNext12Months();\n\n\tfetchHotelResults(hotelAtcomRef, dates[0], dates[1]).then((response) => {\n\t\tconst { data } = response;\n\t\tif (data) {\n\t\t\tconst lowestPrice = findLowestCost(data) / 2;\n\t\t\tif (lowestPrice > 0) {\n\t\t\t\thotelIndividualPriceEl.innerHTML = `From £${parseFloat(parseFloat(lowestPrice).toFixed(0)).toLocaleString()} pp per night`;\n\t\t\t} else {\n\t\t\t\thotelIndividualPriceEl.setAttribute('hidden', 'hidden');\n\t\t\t}\n\t\t}\n\t});\n}\n","L.Curve=L.Path.extend({options:{},initialize:function(t,n){L.setOptions(this,n),this._setPath(t)},setLatLngs:function(t){return this.setPath(t)},getLatLngs:function(){return this.getPath()},_updateBounds:function(){var t=this._clickTolerance(),n=new L.Point(t,t);this._pxBounds=new L.Bounds([this._rawPxBounds.min.subtract(n),this._rawPxBounds.max.add(n)])},getPath:function(){return this._coords},setPath:function(t){return this._setPath(t),this.redraw()},getBounds:function(){return this._bounds},_setPath:function(t){this._coords=t,this._bounds=this._computeBounds()},_computeBounds:function(){for(var t,n,i,e=new L.LatLngBounds,a=0;a=0&&t<=1}));for(var h=[],c=0;c{var e=this._singleLinearTrace(t,n.x,i.x),a=this._singleLinearTrace(t,n.y,i.y);return this._map.layerPointToLatLng([e,a])}))},_quadraticTrace:function(t,n,i,e){return t.map((t=>{var a=this._singleQuadraticTrace(t,n.x,i.x,e.x),s=this._singleQuadraticTrace(t,n.y,i.y,e.y);return this._map.layerPointToLatLng([a,s])}))},_cubicTrace:function(t,n,i,e,a){return t.map((t=>{var s=this._singleCubicTrace(t,n.x,i.x,e.x,a.x),o=this._singleCubicTrace(t,n.y,i.y,e.y,a.y);return this._map.layerPointToLatLng([s,o])}))},_singleLinearTrace:function(t,n,i){return n+t*(i-n)},_singleQuadraticTrace:function(t,n,i,e){var a=1-t;return Math.pow(a,2)*n+2*a*t*i+Math.pow(t,2)*e},_singleCubicTrace:function(t,n,i,e,a){var s=1-t;return Math.pow(s,3)*n+3*Math.pow(s,2)*t*i+3*s*Math.pow(t,2)*e+Math.pow(t,3)*a},_reflectPoint:function(t,n){return x=n.x+(n.x-t.x),y=n.y+(n.y-t.y),L.point(x,y)}}),L.curve=function(t,n){return new L.Curve(t,n)};","// Packaging/modules magic dance.\n(function (factory) {\n var L;\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['leaflet'], factory);\n } else if (typeof module !== 'undefined') {\n // Node/CommonJS\n L = require('leaflet');\n module.exports = factory(L);\n } else {\n // Browser globals\n if (typeof window.L === 'undefined')\n throw 'Leaflet must be loaded first';\n factory(window.L);\n }\n}(function (L) {\n\"use strict\";\n\nL.Polyline._flat = L.LineUtil.isFlat || L.Polyline._flat || function (latlngs) {\n // true if it's a flat array of latlngs; false if nested\n return !L.Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\n};\n\n/**\n * @fileOverview Leaflet Geometry utilities for distances and linear referencing.\n * @name L.GeometryUtil\n */\n\nL.GeometryUtil = L.extend(L.GeometryUtil || {}, {\n\n /**\n Shortcut function for planar distance between two {L.LatLng} at current zoom.\n\n @tutorial distance-length\n\n @param {L.Map} map Leaflet map to be used for this method\n @param {L.LatLng} latlngA geographical point A\n @param {L.LatLng} latlngB geographical point B\n @returns {Number} planar distance\n */\n distance: function (map, latlngA, latlngB) {\n return map.latLngToLayerPoint(latlngA).distanceTo(map.latLngToLayerPoint(latlngB));\n },\n\n /**\n Shortcut function for planar distance between a {L.LatLng} and a segment (A-B).\n @param {L.Map} map Leaflet map to be used for this method\n @param {L.LatLng} latlng - The position to search\n @param {L.LatLng} latlngA geographical point A of the segment\n @param {L.LatLng} latlngB geographical point B of the segment\n @returns {Number} planar distance\n */\n distanceSegment: function (map, latlng, latlngA, latlngB) {\n var p = map.latLngToLayerPoint(latlng),\n p1 = map.latLngToLayerPoint(latlngA),\n p2 = map.latLngToLayerPoint(latlngB);\n return L.LineUtil.pointToSegmentDistance(p, p1, p2);\n },\n\n /**\n Shortcut function for converting distance to readable distance.\n @param {Number} distance distance to be converted\n @param {String} unit 'metric' or 'imperial'\n @returns {String} in yard or miles\n */\n readableDistance: function (distance, unit) {\n var isMetric = (unit !== 'imperial'),\n distanceStr;\n if (isMetric) {\n // show metres when distance is < 1km, then show km\n if (distance > 1000) {\n distanceStr = (distance / 1000).toFixed(2) + ' km';\n }\n else {\n distanceStr = distance.toFixed(1) + ' m';\n }\n }\n else {\n distance *= 1.09361;\n if (distance > 1760) {\n distanceStr = (distance / 1760).toFixed(2) + ' miles';\n }\n else {\n distanceStr = distance.toFixed(1) + ' yd';\n }\n }\n return distanceStr;\n },\n\n /**\n Returns true if the latlng belongs to segment A-B\n @param {L.LatLng} latlng - The position to search\n @param {L.LatLng} latlngA geographical point A of the segment\n @param {L.LatLng} latlngB geographical point B of the segment\n @param {?Number} [tolerance=0.2] tolerance to accept if latlng belongs really\n @returns {boolean}\n */\n belongsSegment: function(latlng, latlngA, latlngB, tolerance) {\n tolerance = tolerance === undefined ? 0.2 : tolerance;\n var hypotenuse = latlngA.distanceTo(latlngB),\n delta = latlngA.distanceTo(latlng) + latlng.distanceTo(latlngB) - hypotenuse;\n return delta/hypotenuse < tolerance;\n },\n\n /**\n * Returns total length of line\n * @tutorial distance-length\n *\n * @param {L.Polyline|Array|Array} coords Set of coordinates\n * @returns {Number} Total length (pixels for Point, meters for LatLng)\n */\n length: function (coords) {\n var accumulated = L.GeometryUtil.accumulatedLengths(coords);\n return accumulated.length > 0 ? accumulated[accumulated.length-1] : 0;\n },\n\n /**\n * Returns a list of accumulated length along a line.\n * @param {L.Polyline|Array|Array} coords Set of coordinates\n * @returns {Array} Array of accumulated lengths (pixels for Point, meters for LatLng)\n */\n accumulatedLengths: function (coords) {\n if (typeof coords.getLatLngs == 'function') {\n coords = coords.getLatLngs();\n }\n if (coords.length === 0)\n return [];\n var total = 0,\n lengths = [0];\n for (var i = 0, n = coords.length - 1; i< n; i++) {\n total += coords[i].distanceTo(coords[i+1]);\n lengths.push(total);\n }\n return lengths;\n },\n\n /**\n Returns the closest point of a {L.LatLng} on the segment (A-B)\n\n @tutorial closest\n\n @param {L.Map} map Leaflet map to be used for this method\n @param {L.LatLng} latlng - The position to search\n @param {L.LatLng} latlngA geographical point A of the segment\n @param {L.LatLng} latlngB geographical point B of the segment\n @returns {L.LatLng} Closest geographical point\n */\n closestOnSegment: function (map, latlng, latlngA, latlngB) {\n var maxzoom = map.getMaxZoom();\n if (maxzoom === Infinity)\n maxzoom = map.getZoom();\n var p = map.project(latlng, maxzoom),\n p1 = map.project(latlngA, maxzoom),\n p2 = map.project(latlngB, maxzoom),\n closest = L.LineUtil.closestPointOnSegment(p, p1, p2);\n return map.unproject(closest, maxzoom);\n },\n\n /**\n Returns the closest point of a {L.LatLng} on a {L.Circle}\n\n @tutorial closest\n\n @param {L.LatLng} latlng - The position to search\n @param {L.Circle} circle - A Circle defined by a center and a radius\n @returns {L.LatLng} Closest geographical point on the circle circumference\n */\n closestOnCircle: function (circle, latLng) {\n const center = circle.getLatLng();\n const circleRadius = circle.getRadius();\n const radius = typeof circleRadius === 'number' ? circleRadius : circleRadius.radius;\n const x = latLng.lng;\n const y = latLng.lat;\n const cx = center.lng;\n const cy = center.lat;\n // dx and dy is the vector from the circle's center to latLng\n const dx = x - cx;\n const dy = y - cy;\n\n // distance between the point and the circle's center\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n // Calculate the closest point on the circle by adding the normalized vector to the center\n const tx = cx + (dx / distance) * radius;\n const ty = cy + (dy / distance) * radius;\n\n return new L.LatLng(ty, tx);\n },\n \n\n /**\n Returns the closest latlng on layer.\n\n Accept nested arrays\n\n @tutorial closest\n\n @param {L.Map} map Leaflet map to be used for this method\n @param {Array|Array>|L.PolyLine|L.Polygon} layer - Layer that contains the result\n @param {L.LatLng} latlng - The position to search\n @param {?boolean} [vertices=false] - Whether to restrict to path vertices.\n @returns {L.LatLng} Closest geographical point or null if layer param is incorrect\n */\n closest: function (map, layer, latlng, vertices) {\n\n var latlngs,\n mindist = Infinity,\n result = null,\n i, n, distance, subResult;\n\n if (layer instanceof Array) {\n // if layer is Array>\n if (layer[0] instanceof Array && typeof layer[0][0] !== 'number') {\n // if we have nested arrays, we calc the closest for each array\n // recursive\n for (i = 0; i < layer.length; i++) {\n subResult = L.GeometryUtil.closest(map, layer[i], latlng, vertices);\n if (subResult && subResult.distance < mindist) {\n mindist = subResult.distance;\n result = subResult;\n }\n }\n return result;\n } else if (layer[0] instanceof L.LatLng\n || typeof layer[0][0] === 'number'\n || typeof layer[0].lat === 'number') { // we could have a latlng as [x,y] with x & y numbers or {lat, lng}\n layer = L.polyline(layer);\n } else {\n return result;\n }\n }\n\n // if we don't have here a Polyline, that means layer is incorrect\n // see https://github.com/makinacorpus/Leaflet.GeometryUtil/issues/23\n if (! ( layer instanceof L.Polyline ) )\n return result;\n\n // deep copy of latlngs\n latlngs = JSON.parse(JSON.stringify(layer.getLatLngs().slice(0)));\n\n // add the last segment for L.Polygon\n if (layer instanceof L.Polygon) {\n // add the last segment for each child that is a nested array\n var addLastSegment = function(latlngs) {\n if (L.Polyline._flat(latlngs)) {\n latlngs.push(latlngs[0]);\n } else {\n for (var i = 0; i < latlngs.length; i++) {\n addLastSegment(latlngs[i]);\n }\n }\n };\n addLastSegment(latlngs);\n }\n\n // we have a multi polygon / multi polyline / polygon with holes\n // use recursive to explore and return the good result\n if ( ! L.Polyline._flat(latlngs) ) {\n for (i = 0; i < latlngs.length; i++) {\n // if we are at the lower level, and if we have a L.Polygon, we add the last segment\n subResult = L.GeometryUtil.closest(map, latlngs[i], latlng, vertices);\n if (subResult.distance < mindist) {\n mindist = subResult.distance;\n result = subResult;\n }\n }\n return result;\n\n } else {\n\n // Lookup vertices\n if (vertices) {\n for(i = 0, n = latlngs.length; i < n; i++) {\n var ll = latlngs[i];\n distance = L.GeometryUtil.distance(map, latlng, ll);\n if (distance < mindist) {\n mindist = distance;\n result = ll;\n result.distance = distance;\n }\n }\n return result;\n }\n\n // Keep the closest point of all segments\n for (i = 0, n = latlngs.length; i < n-1; i++) {\n var latlngA = latlngs[i],\n latlngB = latlngs[i+1];\n distance = L.GeometryUtil.distanceSegment(map, latlng, latlngA, latlngB);\n if (distance <= mindist) {\n mindist = distance;\n result = L.GeometryUtil.closestOnSegment(map, latlng, latlngA, latlngB);\n result.distance = distance;\n }\n }\n return result;\n }\n\n },\n\n /**\n Returns the closest layer to latlng among a list of layers.\n\n @tutorial closest\n\n @param {L.Map} map Leaflet map to be used for this method\n @param {Array} layers Set of layers\n @param {L.LatLng} latlng - The position to search\n @returns {object} ``{layer, latlng, distance}`` or ``null`` if list is empty;\n */\n closestLayer: function (map, layers, latlng) {\n var mindist = Infinity,\n result = null,\n ll = null,\n distance = Infinity;\n\n for (var i = 0, n = layers.length; i < n; i++) {\n var layer = layers[i];\n if (layer instanceof L.LayerGroup) {\n // recursive\n var subResult = L.GeometryUtil.closestLayer(map, layer.getLayers(), latlng);\n if (subResult.distance < mindist) {\n mindist = subResult.distance;\n result = subResult;\n }\n } else {\n if (layer instanceof L.Circle){\n ll = this.closestOnCircle(layer, latlng);\n distance = L.GeometryUtil.distance(map, latlng, ll);\n } else\n // Single dimension, snap on points, else snap on closest\n if (typeof layer.getLatLng == 'function') {\n ll = layer.getLatLng();\n distance = L.GeometryUtil.distance(map, latlng, ll);\n }\n else {\n ll = L.GeometryUtil.closest(map, layer, latlng);\n if (ll) distance = ll.distance; // Can return null if layer has no points.\n }\n if (distance < mindist) {\n mindist = distance;\n result = {layer: layer, latlng: ll, distance: distance};\n }\n }\n }\n return result;\n },\n\n /**\n Returns the n closest layers to latlng among a list of input layers.\n\n @param {L.Map} map - Leaflet map to be used for this method\n @param {Array} layers - Set of layers\n @param {L.LatLng} latlng - The position to search\n @param {?Number} [n=layers.length] - the expected number of output layers.\n @returns {Array} an array of objects ``{layer, latlng, distance}`` or ``null`` if the input is invalid (empty list or negative n)\n */\n nClosestLayers: function (map, layers, latlng, n) {\n n = typeof n === 'number' ? n : layers.length;\n\n if (n < 1 || layers.length < 1) {\n return null;\n }\n\n var results = [];\n var distance, ll;\n\n for (var i = 0, m = layers.length; i < m; i++) {\n var layer = layers[i];\n if (layer instanceof L.LayerGroup) {\n // recursive\n var subResult = L.GeometryUtil.closestLayer(map, layer.getLayers(), latlng);\n results.push(subResult);\n } else {\n if (layer instanceof L.Circle){\n ll = this.closestOnCircle(layer, latlng);\n distance = L.GeometryUtil.distance(map, latlng, ll);\n } else\n // Single dimension, snap on points, else snap on closest\n if (typeof layer.getLatLng == 'function') {\n ll = layer.getLatLng();\n distance = L.GeometryUtil.distance(map, latlng, ll);\n }\n else {\n ll = L.GeometryUtil.closest(map, layer, latlng);\n if (ll) distance = ll.distance; // Can return null if layer has no points.\n }\n results.push({layer: layer, latlng: ll, distance: distance});\n }\n }\n\n results.sort(function(a, b) {\n return a.distance - b.distance;\n });\n\n if (results.length > n) {\n return results.slice(0, n);\n } else {\n return results;\n }\n },\n\n /**\n * Returns all layers within a radius of the given position, in an ascending order of distance.\n @param {L.Map} map Leaflet map to be used for this method\n @param {Array} layers - A list of layers.\n @param {L.LatLng} latlng - The position to search\n @param {?Number} [radius=Infinity] - Search radius in pixels\n @return {object[]} an array of objects including layer within the radius, closest latlng, and distance\n */\n layersWithin: function(map, layers, latlng, radius) {\n radius = typeof radius == 'number' ? radius : Infinity;\n\n var results = [];\n var ll = null;\n var distance = 0;\n\n for (var i = 0, n = layers.length; i < n; i++) {\n var layer = layers[i];\n\n if (typeof layer.getLatLng == 'function') {\n ll = layer.getLatLng();\n distance = L.GeometryUtil.distance(map, latlng, ll);\n }\n else {\n ll = L.GeometryUtil.closest(map, layer, latlng);\n if (ll) distance = ll.distance; // Can return null if layer has no points.\n }\n\n if (ll && distance < radius) {\n results.push({layer: layer, latlng: ll, distance: distance});\n }\n }\n\n var sortedResults = results.sort(function(a, b) {\n return a.distance - b.distance;\n });\n\n return sortedResults;\n },\n\n /**\n Returns the closest position from specified {LatLng} among specified layers,\n with a maximum tolerance in pixels, providing snapping behaviour.\n\n @tutorial closest\n\n @param {L.Map} map Leaflet map to be used for this method\n @param {Array} layers - A list of layers to snap on.\n @param {L.LatLng} latlng - The position to snap\n @param {?Number} [tolerance=Infinity] - Maximum number of pixels.\n @param {?boolean} [withVertices=true] - Snap to layers vertices or segment points (not only vertex)\n @returns {object} with snapped {LatLng} and snapped {Layer} or null if tolerance exceeded.\n */\n closestLayerSnap: function (map, layers, latlng, tolerance, withVertices) {\n tolerance = typeof tolerance == 'number' ? tolerance : Infinity;\n withVertices = typeof withVertices == 'boolean' ? withVertices : true;\n\n var result = L.GeometryUtil.closestLayer(map, layers, latlng);\n if (!result || result.distance > tolerance)\n return null;\n\n // If snapped layer is linear, try to snap on vertices (extremities and middle points)\n if (withVertices && typeof result.layer.getLatLngs == 'function') {\n var closest = L.GeometryUtil.closest(map, result.layer, result.latlng, true);\n if (closest.distance < tolerance) {\n result.latlng = closest;\n result.distance = L.GeometryUtil.distance(map, closest, latlng);\n }\n }\n return result;\n },\n\n /**\n Returns the Point located on a segment at the specified ratio of the segment length.\n @param {L.Point} pA coordinates of point A\n @param {L.Point} pB coordinates of point B\n @param {Number} the length ratio, expressed as a decimal between 0 and 1, inclusive.\n @returns {L.Point} the interpolated point.\n */\n interpolateOnPointSegment: function (pA, pB, ratio) {\n return L.point(\n (pA.x * (1 - ratio)) + (ratio * pB.x),\n (pA.y * (1 - ratio)) + (ratio * pB.y)\n );\n },\n\n /**\n Returns the coordinate of the point located on a line at the specified ratio of the line length.\n @param {L.Map} map Leaflet map to be used for this method\n @param {Array|L.PolyLine} latlngs Set of geographical points\n @param {Number} ratio the length ratio, expressed as a decimal between 0 and 1, inclusive\n @returns {Object} an object with latLng ({LatLng}) and predecessor ({Number}), the index of the preceding vertex in the Polyline\n (-1 if the interpolated point is the first vertex)\n */\n interpolateOnLine: function (map, latLngs, ratio) {\n latLngs = (latLngs instanceof L.Polyline) ? latLngs.getLatLngs() : latLngs;\n var n = latLngs.length;\n if (n < 2) {\n return null;\n }\n\n // ensure the ratio is between 0 and 1;\n ratio = Math.max(Math.min(ratio, 1), 0);\n\n if (ratio === 0) {\n return {\n latLng: latLngs[0] instanceof L.LatLng ? latLngs[0] : L.latLng(latLngs[0]),\n predecessor: -1\n };\n }\n if (ratio == 1) {\n return {\n latLng: latLngs[latLngs.length -1] instanceof L.LatLng ? latLngs[latLngs.length -1] : L.latLng(latLngs[latLngs.length -1]),\n predecessor: latLngs.length - 2\n };\n }\n\n // project the LatLngs as Points,\n // and compute total planar length of the line at max precision\n var maxzoom = map.getMaxZoom();\n if (maxzoom === Infinity)\n maxzoom = map.getZoom();\n var pts = [];\n var lineLength = 0;\n for(var i = 0; i < n; i++) {\n pts[i] = map.project(latLngs[i], maxzoom);\n if(i > 0)\n lineLength += pts[i-1].distanceTo(pts[i]);\n }\n\n var ratioDist = lineLength * ratio;\n\n\t\t// follow the line segments [ab], adding lengths,\n // until we find the segment where the points should lie on\n\t\tvar cumulativeDistanceToA = 0, cumulativeDistanceToB = 0;\n\t\tfor (var i = 0; cumulativeDistanceToB < ratioDist; i++) {\n\t\t\tvar pointA = pts[i], pointB = pts[i+1];\n\n\t\t\tcumulativeDistanceToA = cumulativeDistanceToB;\n\t\t\tcumulativeDistanceToB += pointA.distanceTo(pointB);\n\t\t}\n\t\t\n\t\tif (pointA == undefined && pointB == undefined) { // Happens when line has no length\n\t\t\tvar pointA = pts[0], pointB = pts[1], i = 1;\n\t\t}\n\n\t\t// compute the ratio relative to the segment [ab]\n\t\tvar segmentRatio = ((cumulativeDistanceToB - cumulativeDistanceToA) !== 0) ? ((ratioDist - cumulativeDistanceToA) / (cumulativeDistanceToB - cumulativeDistanceToA)) : 0;\n\t\tvar interpolatedPoint = L.GeometryUtil.interpolateOnPointSegment(pointA, pointB, segmentRatio);\n\t\treturn {\n\t\t\tlatLng: map.unproject(interpolatedPoint, maxzoom),\n\t\t\tpredecessor: i-1\n\t\t};\n },\n\n /**\n Returns a float between 0 and 1 representing the location of the\n closest point on polyline to the given latlng, as a fraction of total line length.\n (opposite of L.GeometryUtil.interpolateOnLine())\n @param {L.Map} map Leaflet map to be used for this method\n @param {L.PolyLine} polyline Polyline on which the latlng will be search\n @param {L.LatLng} latlng The position to search\n @returns {Number} Float between 0 and 1\n */\n locateOnLine: function (map, polyline, latlng) {\n var latlngs = polyline.getLatLngs();\n if (latlng.equals(latlngs[0]))\n return 0.0;\n if (latlng.equals(latlngs[latlngs.length-1]))\n return 1.0;\n\n var point = L.GeometryUtil.closest(map, polyline, latlng, false),\n lengths = L.GeometryUtil.accumulatedLengths(latlngs),\n total_length = lengths[lengths.length-1],\n portion = 0,\n found = false;\n for (var i=0, n = latlngs.length-1; i < n; i++) {\n var l1 = latlngs[i],\n l2 = latlngs[i+1];\n portion = lengths[i];\n if (L.GeometryUtil.belongsSegment(point, l1, l2, 0.001)) {\n portion += l1.distanceTo(point);\n found = true;\n break;\n }\n }\n if (!found) {\n throw \"Could not interpolate \" + latlng.toString() + \" within \" + polyline.toString();\n }\n return portion / total_length;\n },\n\n /**\n Returns a clone with reversed coordinates.\n @param {L.PolyLine} polyline polyline to reverse\n @returns {L.PolyLine} polyline reversed\n */\n reverse: function (polyline) {\n return L.polyline(polyline.getLatLngs().slice(0).reverse());\n },\n\n /**\n Returns a sub-part of the polyline, from start to end.\n If start is superior to end, returns extraction from inverted line.\n @param {L.Map} map Leaflet map to be used for this method\n @param {L.PolyLine} polyline Polyline on which will be extracted the sub-part\n @param {Number} start ratio, expressed as a decimal between 0 and 1, inclusive\n @param {Number} end ratio, expressed as a decimal between 0 and 1, inclusive\n @returns {Array} new polyline\n */\n extract: function (map, polyline, start, end) {\n if (start > end) {\n return L.GeometryUtil.extract(map, L.GeometryUtil.reverse(polyline), 1.0-start, 1.0-end);\n }\n\n // Bound start and end to [0-1]\n start = Math.max(Math.min(start, 1), 0);\n end = Math.max(Math.min(end, 1), 0);\n\n var latlngs = polyline.getLatLngs(),\n startpoint = L.GeometryUtil.interpolateOnLine(map, polyline, start),\n endpoint = L.GeometryUtil.interpolateOnLine(map, polyline, end);\n // Return single point if start == end\n if (start == end) {\n var point = L.GeometryUtil.interpolateOnLine(map, polyline, end);\n return [point.latLng];\n }\n // Array.slice() works indexes at 0\n if (startpoint.predecessor == -1)\n startpoint.predecessor = 0;\n if (endpoint.predecessor == -1)\n endpoint.predecessor = 0;\n var result = latlngs.slice(startpoint.predecessor+1, endpoint.predecessor+1);\n result.unshift(startpoint.latLng);\n result.push(endpoint.latLng);\n return result;\n },\n\n /**\n Returns true if first polyline ends where other second starts.\n @param {L.PolyLine} polyline First polyline\n @param {L.PolyLine} other Second polyline\n @returns {bool}\n */\n isBefore: function (polyline, other) {\n if (!other) return false;\n var lla = polyline.getLatLngs(),\n llb = other.getLatLngs();\n return (lla[lla.length-1]).equals(llb[0]);\n },\n\n /**\n Returns true if first polyline starts where second ends.\n @param {L.PolyLine} polyline First polyline\n @param {L.PolyLine} other Second polyline\n @returns {bool}\n */\n isAfter: function (polyline, other) {\n if (!other) return false;\n var lla = polyline.getLatLngs(),\n llb = other.getLatLngs();\n return (lla[0]).equals(llb[llb.length-1]);\n },\n\n /**\n Returns true if first polyline starts where second ends or start.\n @param {L.PolyLine} polyline First polyline\n @param {L.PolyLine} other Second polyline\n @returns {bool}\n */\n startsAtExtremity: function (polyline, other) {\n if (!other) return false;\n var lla = polyline.getLatLngs(),\n llb = other.getLatLngs(),\n start = lla[0];\n return start.equals(llb[0]) || start.equals(llb[llb.length-1]);\n },\n\n /**\n Returns horizontal angle in degres between two points.\n @param {L.Point} a Coordinates of point A\n @param {L.Point} b Coordinates of point B\n @returns {Number} horizontal angle\n */\n computeAngle: function(a, b) {\n return (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI);\n },\n\n /**\n Returns slope (Ax+B) between two points.\n @param {L.Point} a Coordinates of point A\n @param {L.Point} b Coordinates of point B\n @returns {Object} with ``a`` and ``b`` properties.\n */\n computeSlope: function(a, b) {\n var s = (b.y - a.y) / (b.x - a.x),\n o = a.y - (s * a.x);\n return {'a': s, 'b': o};\n },\n\n /**\n Returns LatLng of rotated point around specified LatLng center.\n @param {L.LatLng} latlngPoint: point to rotate\n @param {double} angleDeg: angle to rotate in degrees\n @param {L.LatLng} latlngCenter: center of rotation\n @returns {L.LatLng} rotated point\n */\n rotatePoint: function(map, latlngPoint, angleDeg, latlngCenter) {\n var maxzoom = map.getMaxZoom();\n if (maxzoom === Infinity)\n maxzoom = map.getZoom();\n var angleRad = angleDeg*Math.PI/180,\n pPoint = map.project(latlngPoint, maxzoom),\n pCenter = map.project(latlngCenter, maxzoom),\n x2 = Math.cos(angleRad)*(pPoint.x-pCenter.x) - Math.sin(angleRad)*(pPoint.y-pCenter.y) + pCenter.x,\n y2 = Math.sin(angleRad)*(pPoint.x-pCenter.x) + Math.cos(angleRad)*(pPoint.y-pCenter.y) + pCenter.y;\n return map.unproject(new L.Point(x2,y2), maxzoom);\n },\n\n /**\n Returns the bearing in degrees clockwise from north (0 degrees)\n from the first L.LatLng to the second, at the first LatLng\n @param {L.LatLng} latlng1: origin point of the bearing\n @param {L.LatLng} latlng2: destination point of the bearing\n @returns {float} degrees clockwise from north.\n */\n bearing: function(latlng1, latlng2) {\n var rad = Math.PI / 180,\n lat1 = latlng1.lat * rad,\n lat2 = latlng2.lat * rad,\n lon1 = latlng1.lng * rad,\n lon2 = latlng2.lng * rad,\n y = Math.sin(lon2 - lon1) * Math.cos(lat2),\n x = Math.cos(lat1) * Math.sin(lat2) -\n Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);\n\n var bearing = ((Math.atan2(y, x) * 180 / Math.PI) + 360) % 360;\n return bearing >= 180 ? bearing-360 : bearing;\n },\n\n /**\n Returns the point that is a distance and heading away from\n the given origin point.\n @param {L.LatLng} latlng: origin point\n @param {float} heading: heading in degrees, clockwise from 0 degrees north.\n @param {float} distance: distance in meters\n @returns {L.latLng} the destination point.\n Many thanks to Chris Veness at http://www.movable-type.co.uk/scripts/latlong.html\n for a great reference and examples.\n */\n destination: function(latlng, heading, distance) {\n heading = (heading + 360) % 360;\n var rad = Math.PI / 180,\n radInv = 180 / Math.PI,\n R = L.CRS.Earth.R, // approximation of Earth's radius\n lon1 = latlng.lng * rad,\n lat1 = latlng.lat * rad,\n rheading = heading * rad,\n sinLat1 = Math.sin(lat1),\n cosLat1 = Math.cos(lat1),\n cosDistR = Math.cos(distance / R),\n sinDistR = Math.sin(distance / R),\n lat2 = Math.asin(sinLat1 * cosDistR + cosLat1 *\n sinDistR * Math.cos(rheading)),\n lon2 = lon1 + Math.atan2(Math.sin(rheading) * sinDistR *\n cosLat1, cosDistR - sinLat1 * Math.sin(lat2));\n lon2 = lon2 * radInv;\n lon2 = lon2 > 180 ? lon2 - 360 : lon2 < -180 ? lon2 + 360 : lon2;\n return L.latLng([lat2 * radInv, lon2]);\n },\n\n /**\n Returns the the angle of the given segment and the Equator in degrees,\n clockwise from 0 degrees north.\n @param {L.Map} map: Leaflet map to be used for this method\n @param {L.LatLng} latlngA: geographical point A of the segment\n @param {L.LatLng} latlngB: geographical point B of the segment\n @returns {Float} the angle in degrees.\n */\n angle: function(map, latlngA, latlngB) {\n var pointA = map.latLngToContainerPoint(latlngA),\n pointB = map.latLngToContainerPoint(latlngB),\n angleDeg = Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI + 90;\n angleDeg += angleDeg < 0 ? 360 : 0;\n return angleDeg;\n },\n\n /**\n Returns a point snaps on the segment and heading away from the given origin point a distance.\n @param {L.Map} map: Leaflet map to be used for this method\n @param {L.LatLng} latlngA: geographical point A of the segment\n @param {L.LatLng} latlngB: geographical point B of the segment\n @param {float} distance: distance in meters\n @returns {L.latLng} the destination point.\n */\n destinationOnSegment: function(map, latlngA, latlngB, distance) {\n var angleDeg = L.GeometryUtil.angle(map, latlngA, latlngB),\n latlng = L.GeometryUtil.destination(latlngA, angleDeg, distance);\n return L.GeometryUtil.closestOnSegment(map, latlng, latlngA, latlngB);\n },\n});\n\nreturn L.GeometryUtil;\n\n}));\n","function modulus(i, n) {\n\treturn ((i % n) + n) % n;\n}\n\nfunction definedProps(obj) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj).filter(([k, v]) => v !== undefined)\n\t);\n}\n\n/**\n * Whether or not a string is in the format 'm'\n * @param {string} value\n * @returns Boolean\n */\nfunction isInMeters(value) {\n\treturn (\n\t\tvalue\n\t\t\t.toString()\n\t\t\t.trim()\n\t\t\t.slice(value.toString().length - 1, value.toString().length) === 'm'\n\t);\n}\n\n/**\n * Whether or not a string is in the format '%'\n * @param {string} value\n * @returns Boolean\n */\nfunction isInPercent(value) {\n\treturn (\n\t\tvalue\n\t\t\t.toString()\n\t\t\t.trim()\n\t\t\t.slice(value.toString().length - 1, value.toString().length) === '%'\n\t);\n}\n\n/**\n * Whether or not a string is in the format 'px'\n * @param {string} value\n * @returns Boolean\n */\nfunction isInPixels(value) {\n\treturn (\n\t\tvalue\n\t\t\t.toString()\n\t\t\t.trim()\n\t\t\t.slice(value.toString().length - 2, value.toString().length) === 'px'\n\t);\n}\n\nfunction pixelsToMeters(pixels, map) {\n\tlet refPoint1 = map.getCenter();\n\tlet xy1 = map.latLngToLayerPoint(refPoint1);\n\tlet xy2 = {\n\t\tx: xy1.x + Number(pixels),\n\t\ty: xy1.y,\n\t};\n\tlet refPoint2 = map.layerPointToLatLng(xy2);\n\tlet derivedMeters = map.distance(refPoint1, refPoint2);\n\treturn derivedMeters;\n}\n\nL.Polyline.include({\n\t/**\n\t * Adds arrowheads to an L.polyline\n\t * @param {object} options The options for the arrowhead. See documentation for details\n\t * @returns The L.polyline instance that they arrowheads are attached to\n\t */\n\tarrowheads: function (options = {}) {\n\t\t// Merge user input options with default options:\n\t\tconst defaults = {\n\t\t\tyawn: 60,\n\t\t\tsize: '15%',\n\t\t\tfrequency: 'allvertices',\n\t\t\tproportionalToTotal: false,\n\t\t};\n\n\t\tthis.options.noClip = true;\n\n\t\tlet actualOptions = Object.assign({}, defaults, options);\n\t\tthis._arrowheadOptions = actualOptions;\n\n\t\tthis._hatsApplied = true;\n\t\treturn this;\n\t},\n\n\tbuildVectorHats: function (options) {\n\t\t// Reset variables from previous this._update()\n\t\tif (this._arrowheads) {\n\t\t\tthis._arrowheads.remove();\n\t\t}\n\n\t\tif (this._ghosts) {\n\t\t\tthis._ghosts.remove();\n\t\t}\n\n\t\t// -------------------------------------------------------- //\n\t\t// ------------ FILTER THE OPTIONS ----------------------- //\n\t\t/*\n\t\t * The next 3 lines folds the options of the parent polyline into the default options for all polylines\n\t\t * The options for the arrowhead are then folded in as well\n\t\t * All options defined in parent polyline will be inherited by the arrowhead, unless otherwise specified in the arrowhead(options) call\n\t\t */\n\n\t\tlet defaultOptionsOfParent = Object.getPrototypeOf(\n\t\t\tObject.getPrototypeOf(this.options)\n\t\t);\n\n\t\t// merge default options of parent polyline (this.options's prototype's prototype) with options passed to parent polyline (this.options).\n\t\tlet parentOptions = Object.assign({}, defaultOptionsOfParent, this.options);\n\n\t\t// now merge in the options the user has put in the arrowhead call\n\t\tlet hatOptions = Object.assign({}, parentOptions, options);\n\n\t\t// ...with a few exceptions:\n\t\thatOptions.smoothFactor = 1;\n\t\thatOptions.fillOpacity = 1;\n\t\thatOptions.fill = options.fill ? true : false;\n\t\thatOptions.interactive = false;\n\n\t\t// ------------ FILTER THE OPTIONS END -------------------- //\n\t\t// --------------------------------------------------------- //\n\n\t\t// --------------------------------------------------------- //\n\t\t// ------ LOOP THROUGH EACH POLYLINE SEGMENT --------------- //\n\t\t// ------ TO CALCULATE HAT SIZES AND CAPTURE IN ARRAY ------ //\n\n\t\tlet size = options.size.toString(); // stringify if its a number\n\t\tlet allhats = []; // empty array to receive hat polylines\n\t\tconst { frequency, offsets } = options;\n\n\t\tif (offsets?.start || offsets?.end) {\n\t\t\tthis._buildGhosts({ start: offsets.start, end: offsets.end });\n\t\t}\n\n\t\tconst lineToTrace = this._ghosts || this;\n\n\t\tlineToTrace._parts.forEach((peice, index) => {\n\t\t\t// Immutable variables for each peice\n\t\t\tconst latlngs = peice.map((point) => this._map.layerPointToLatLng(point));\n\n\t\t\tconst totalLength = (() => {\n\t\t\t\tlet total = 0;\n\t\t\t\tfor (var i = 0; i < peice.length - 1; i++) {\n\t\t\t\t\ttotal += this._map.distance(latlngs[i], latlngs[i + 1]);\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t})();\n\n\t\t\t// TBD by options if tree below\n\t\t\tlet derivedLatLngs;\n\t\t\tlet derivedBearings;\n\t\t\tlet spacing;\n\t\t\tlet noOfPoints;\n\n\t\t\t// Determining latlng and bearing arrays based on frequency choice:\n\t\t\tif (!isNaN(frequency)) {\n\t\t\t\tspacing = 1 / frequency;\n\t\t\t\tnoOfPoints = frequency;\n\t\t\t} else if (isInPercent(frequency)) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Error: arrowhead frequency option cannot be given in percent. Try another unit.'\n\t\t\t\t);\n\t\t\t} else if (isInMeters(frequency)) {\n\t\t\t\tspacing = frequency.slice(0, frequency.length - 1) / totalLength;\n\t\t\t\tnoOfPoints = 1 / spacing;\n\t\t\t\t// round things out for more even spacing:\n\t\t\t\tnoOfPoints = Math.floor(noOfPoints);\n\t\t\t\tspacing = 1 / noOfPoints;\n\t\t\t} else if (isInPixels(frequency)) {\n\t\t\t\tspacing = (() => {\n\t\t\t\t\tlet chosenFrequency = frequency.slice(0, frequency.length - 2);\n\t\t\t\t\tlet derivedMeters = pixelsToMeters(chosenFrequency, this._map);\n\t\t\t\t\treturn derivedMeters / totalLength;\n\t\t\t\t})();\n\n\t\t\t\tnoOfPoints = 1 / spacing;\n\n\t\t\t\t// round things out for more even spacing:\n\t\t\t\tnoOfPoints = Math.floor(noOfPoints);\n\t\t\t\tspacing = 1 / noOfPoints;\n\t\t\t}\n\n\t\t\tif (options.frequency === 'allvertices') {\n\t\t\t\tderivedBearings = (() => {\n\t\t\t\t\tlet bearings = [];\n\t\t\t\t\tfor (var i = 1; i < latlngs.length; i++) {\n\t\t\t\t\t\tlet bearing =\n\t\t\t\t\t\t\tL.GeometryUtil.angle(\n\t\t\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\t\t\tlatlngs[modulus(i - 1, latlngs.length)],\n\t\t\t\t\t\t\t\tlatlngs[i]\n\t\t\t\t\t\t\t) + 180;\n\t\t\t\t\t\tbearings.push(bearing);\n\t\t\t\t\t}\n\t\t\t\t\treturn bearings;\n\t\t\t\t})();\n\n\t\t\t\tderivedLatLngs = latlngs;\n\t\t\t\tderivedLatLngs.shift();\n\t\t\t} else if (options.frequency === 'endonly' && latlngs.length >= 2) {\n\t\t\t\tderivedLatLngs = [latlngs[latlngs.length - 1]];\n\n\t\t\t\tderivedBearings = [\n\t\t\t\t\tL.GeometryUtil.angle(\n\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\tlatlngs[latlngs.length - 2],\n\t\t\t\t\t\tlatlngs[latlngs.length - 1]\n\t\t\t\t\t) + 180,\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tderivedLatLngs = [];\n\t\t\t\tlet interpolatedPoints = [];\n\t\t\t\tfor (var i = 0; i < noOfPoints; i++) {\n\t\t\t\t\tlet interpolatedPoint = L.GeometryUtil.interpolateOnLine(\n\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\tlatlngs,\n\t\t\t\t\t\tspacing * (i + 1)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (interpolatedPoint) {\n\t\t\t\t\t\tinterpolatedPoints.push(interpolatedPoint);\n\t\t\t\t\t\tderivedLatLngs.push(interpolatedPoint.latLng);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tderivedBearings = (() => {\n\t\t\t\t\tlet bearings = [];\n\n\t\t\t\t\tfor (var i = 0; i < interpolatedPoints.length; i++) {\n\t\t\t\t\t\tlet bearing = L.GeometryUtil.angle(\n\t\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\t\tlatlngs[interpolatedPoints[i].predecessor + 1],\n\t\t\t\t\t\t\tlatlngs[interpolatedPoints[i].predecessor]\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbearings.push(bearing);\n\t\t\t\t\t}\n\t\t\t\t\treturn bearings;\n\t\t\t\t})();\n\t\t\t}\n\n\t\t\tlet hats = [];\n\n\t\t\t// Function to build hats based on index and a given hatsize in meters\n\t\t\tconst pushHats = (size, localHatOptions = {}) => {\n\t\t\t\tlet yawn = localHatOptions.yawn ?? options.yawn;\n\n\t\t\t\tlet leftWingPoint = L.GeometryUtil.destination(\n\t\t\t\t\tderivedLatLngs[i],\n\t\t\t\t\tderivedBearings[i] - yawn / 2,\n\t\t\t\t\tsize\n\t\t\t\t);\n\n\t\t\t\tlet rightWingPoint = L.GeometryUtil.destination(\n\t\t\t\t\tderivedLatLngs[i],\n\t\t\t\t\tderivedBearings[i] + yawn / 2,\n\t\t\t\t\tsize\n\t\t\t\t);\n\n\t\t\t\tlet hatPoints = [\n\t\t\t\t\t[leftWingPoint.lat, leftWingPoint.lng],\n\t\t\t\t\t[derivedLatLngs[i].lat, derivedLatLngs[i].lng],\n\t\t\t\t\t[rightWingPoint.lat, rightWingPoint.lng],\n\t\t\t\t];\n\n\t\t\t\tlet hat = options.fill\n\t\t\t\t\t? L.polygon(hatPoints, { ...hatOptions, ...localHatOptions })\n\t\t\t\t\t: L.polyline(hatPoints, { ...hatOptions, ...localHatOptions });\n\n\t\t\t\thats.push(hat);\n\t\t\t}; // pushHats()\n\n\t\t\t// Function to build hats based on pixel input\n\t\t\tconst pushHatsFromPixels = (size, localHatOptions = {}) => {\n\t\t\t\tlet sizePixels = size.slice(0, size.length - 2);\n\t\t\t\tlet yawn = localHatOptions.yawn ?? options.yawn;\n\n\t\t\t\tlet derivedXY = this._map.latLngToLayerPoint(derivedLatLngs[i]);\n\n\t\t\t\tlet bearing = derivedBearings[i];\n\n\t\t\t\tlet thetaLeft = (180 - bearing - yawn / 2) * (Math.PI / 180),\n\t\t\t\t\tthetaRight = (180 - bearing + yawn / 2) * (Math.PI / 180);\n\n\t\t\t\tlet dxLeft = sizePixels * Math.sin(thetaLeft),\n\t\t\t\t\tdyLeft = sizePixels * Math.cos(thetaLeft),\n\t\t\t\t\tdxRight = sizePixels * Math.sin(thetaRight),\n\t\t\t\t\tdyRight = sizePixels * Math.cos(thetaRight);\n\n\t\t\t\tlet leftWingXY = {\n\t\t\t\t\tx: derivedXY.x + dxLeft,\n\t\t\t\t\ty: derivedXY.y + dyLeft,\n\t\t\t\t};\n\t\t\t\tlet rightWingXY = {\n\t\t\t\t\tx: derivedXY.x + dxRight,\n\t\t\t\t\ty: derivedXY.y + dyRight,\n\t\t\t\t};\n\n\t\t\t\tlet leftWingPoint = this._map.layerPointToLatLng(leftWingXY),\n\t\t\t\t\trightWingPoint = this._map.layerPointToLatLng(rightWingXY);\n\n\t\t\t\tlet hatPoints = [\n\t\t\t\t\t[leftWingPoint.lat, leftWingPoint.lng],\n\t\t\t\t\t[derivedLatLngs[i].lat, derivedLatLngs[i].lng],\n\t\t\t\t\t[rightWingPoint.lat, rightWingPoint.lng],\n\t\t\t\t];\n\n\t\t\t\tlet hat = options.fill\n\t\t\t\t\t? L.polygon(hatPoints, { ...hatOptions, ...localHatOptions })\n\t\t\t\t\t: L.polyline(hatPoints, { ...hatOptions, ...localHatOptions });\n\n\t\t\t\thats.push(hat);\n\t\t\t}; // pushHatsFromPixels()\n\n\t\t\t// ------- LOOP THROUGH POINTS IN EACH SEGMENT ---------- //\n\t\t\tfor (var i = 0; i < derivedLatLngs.length; i++) {\n\t\t\t\tlet { perArrowheadOptions, ...globalOptions } = options;\n\n\t\t\t\tperArrowheadOptions = perArrowheadOptions ? perArrowheadOptions(i) : {};\n\t\t\t\tperArrowheadOptions = Object.assign(\n\t\t\t\t\tglobalOptions,\n\t\t\t\t\tdefinedProps(perArrowheadOptions)\n\t\t\t\t);\n\n\t\t\t\tsize = perArrowheadOptions.size ?? size;\n\n\t\t\t\t// ---- If size is chosen in meters -------------------------\n\t\t\t\tif (isInMeters(size)) {\n\t\t\t\t\tlet hatSize = size.slice(0, size.length - 1);\n\t\t\t\t\tpushHats(hatSize, perArrowheadOptions);\n\n\t\t\t\t\t// ---- If size is chosen in percent ------------------------\n\t\t\t\t} else if (isInPercent(size)) {\n\t\t\t\t\tlet sizePercent = size.slice(0, size.length - 1);\n\t\t\t\t\tlet hatSize = (() => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\toptions.frequency === 'endonly' &&\n\t\t\t\t\t\t\toptions.proportionalToTotal\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn (totalLength * sizePercent) / 100;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet averageDistance = totalLength / (peice.length - 1);\n\t\t\t\t\t\t\treturn (averageDistance * sizePercent) / 100;\n\t\t\t\t\t\t}\n\t\t\t\t\t})(); // hatsize calculation\n\n\t\t\t\t\tpushHats(hatSize, perArrowheadOptions);\n\n\t\t\t\t\t// ---- If size is chosen in pixels --------------------------\n\t\t\t\t} else if (isInPixels(size)) {\n\t\t\t\t\tpushHatsFromPixels(options.size, perArrowheadOptions);\n\n\t\t\t\t\t// ---- If size unit is not given -----------------------------\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Error: Arrowhead size unit not defined. Check your arrowhead options.'\n\t\t\t\t\t);\n\t\t\t\t} // if else block for Size\n\t\t\t} // for loop for each point witin a peice\n\n\t\t\tallhats.push(...hats);\n\t\t}); // forEach peice\n\n\t\t// --------- LOOP THROUGH EACH POLYLINE END ---------------- //\n\t\t// --------------------------------------------------------- //\n\n\t\tlet arrowheads = L.layerGroup(allhats);\n\t\tthis._arrowheads = arrowheads;\n\n\t\treturn this;\n\t},\n\n\tgetArrowheads: function () {\n\t\tif (this._arrowheads) {\n\t\t\treturn this._arrowheads;\n\t\t} else {\n\t\t\treturn console.error(\n\t\t\t\t`Error: You tried to call '.getArrowheads() on a shape that does not have a arrowhead. Use '.arrowheads()' to add a arrowheads before trying to call '.getArrowheads()'`\n\t\t\t);\n\t\t}\n\t},\n\n\t/**\n\t * Builds ghost polylines that are clipped versions of the polylines based on the offsets\n\t * If offsets are used, arrowheads are drawn from 'this._ghosts' rather than 'this'\n\t */\n\t_buildGhosts: function ({ start, end }) {\n\t\tif (start || end) {\n\t\t\tlet latlngs = this.getLatLngs();\n\n\t\t\tlatlngs = Array.isArray(latlngs[0]) ? latlngs : [latlngs];\n\n\t\t\tconst newLatLngs = latlngs.map((segment) => {\n\t\t\t\t// Get total distance of original latlngs\n\t\t\t\tconst totalLength = (() => {\n\t\t\t\t\tlet total = 0;\n\t\t\t\t\tfor (var i = 0; i < segment.length - 1; i++) {\n\t\t\t\t\t\ttotal += this._map.distance(segment[i], segment[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\treturn total;\n\t\t\t\t})();\n\n\t\t\t\t// Modify latlngs to end at interpolated point\n\t\t\t\tif (start) {\n\t\t\t\t\tlet endOffsetInMeters = (() => {\n\t\t\t\t\t\tif (isInMeters(start)) {\n\t\t\t\t\t\t\treturn Number(start.slice(0, start.length - 1));\n\t\t\t\t\t\t} else if (isInPixels(start)) {\n\t\t\t\t\t\t\tlet pixels = Number(start.slice(0, start.length - 2));\n\t\t\t\t\t\t\treturn pixelsToMeters(pixels, this._map);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\n\t\t\t\t\tlet newStart = L.GeometryUtil.interpolateOnLine(\n\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\tsegment,\n\t\t\t\t\t\tendOffsetInMeters / totalLength\n\t\t\t\t\t);\n\n\t\t\t\t\tsegment = segment.slice(\n\t\t\t\t\t\tnewStart.predecessor === -1 ? 1 : newStart.predecessor + 1,\n\t\t\t\t\t\tsegment.length\n\t\t\t\t\t);\n\t\t\t\t\tsegment.unshift(newStart.latLng);\n\t\t\t\t}\n\n\t\t\t\tif (end) {\n\t\t\t\t\tlet endOffsetInMeters = (() => {\n\t\t\t\t\t\tif (isInMeters(end)) {\n\t\t\t\t\t\t\treturn Number(end.slice(0, end.length - 1));\n\t\t\t\t\t\t} else if (isInPixels(end)) {\n\t\t\t\t\t\t\tlet pixels = Number(end.slice(0, end.length - 2));\n\t\t\t\t\t\t\treturn pixelsToMeters(pixels, this._map);\n\t\t\t\t\t\t}\n\t\t\t\t\t})();\n\n\t\t\t\t\tlet newEnd = L.GeometryUtil.interpolateOnLine(\n\t\t\t\t\t\tthis._map,\n\t\t\t\t\t\tsegment,\n\t\t\t\t\t\t(totalLength - endOffsetInMeters) / totalLength\n\t\t\t\t\t);\n\n\t\t\t\t\tsegment = segment.slice(0, newEnd.predecessor + 1);\n\t\t\t\t\tsegment.push(newEnd.latLng);\n\t\t\t\t}\n\n\t\t\t\treturn segment;\n\t\t\t});\n\n\t\t\tthis._ghosts = L.polyline(newLatLngs, {\n\t\t\t\t...this.options,\n\t\t\t\tcolor: 'rgba(0,0,0,0)',\n\t\t\t\tstroke: 0,\n\t\t\t\tsmoothFactor: 0,\n\t\t\t\tinteractive: false,\n\t\t\t});\n\t\t\tthis._ghosts.addTo(this._map);\n\t\t}\n\t},\n\n\tdeleteArrowheads: function () {\n\t\tif (this._arrowheads) {\n\t\t\tthis._arrowheads.remove();\n\t\t\tdelete this._arrowheads;\n\t\t\tdelete this._arrowheadOptions;\n\t\t\tthis._hatsApplied = false;\n\t\t}\n\t\tif (this._ghosts) {\n\t\t\tthis._ghosts.remove();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\n\t\tif (this._hatsApplied) {\n\t\t\tthis.buildVectorHats(this._arrowheadOptions);\n\t\t\tthis._map.addLayer(this._arrowheads);\n\t\t}\n\t},\n\n\tremove: function () {\n\t\tif (this._arrowheads) {\n\t\t\tthis._arrowheads.remove();\n\t\t}\n\t\tif (this._ghosts) {\n\t\t\tthis._ghosts.remove();\n\t\t}\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n});\n\nL.LayerGroup.include({\n\tremoveLayer: function (layer) {\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\n\n\t\tif (this._map && this._layers[id]) {\n\t\t\tif (this._layers[id]._arrowheads) {\n\t\t\t\tthis._layers[id]._arrowheads.remove();\n\t\t\t}\n\t\t\tthis._map.removeLayer(this._layers[id]);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\treturn this;\n\t},\n\n\tonRemove: function (map, layer) {\n\t\tfor (var layer in this._layers) {\n\t\t\tif (this._layers[layer]) {\n\t\t\t\tthis._layers[layer].remove();\n\t\t\t}\n\t\t}\n\n\t\tthis.eachLayer(map.removeLayer, map);\n\t},\n});\n\nL.Map.include({\n\tremoveLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\n\t\tif (layer._arrowheads) {\n\t\t\tlayer._arrowheads.remove();\n\t\t}\n\t\tif (layer._ghosts) {\n\t\t\tlayer._ghosts.remove();\n\t\t}\n\n\t\tif (!this._layers[id]) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tif (layer.getAttribution && this.attributionControl) {\n\t\t\tthis.attributionControl.removeAttribution(layer.getAttribution());\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', { layer: layer });\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n});\n\nL.GeoJSON.include({\n\tgeometryToLayer: function (geojson, options) {\n\t\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\n\t\t\tcoords = geometry ? geometry.coordinates : null,\n\t\t\tlayers = [],\n\t\t\tpointToLayer = options && options.pointToLayer,\n\t\t\t_coordsToLatLng =\n\t\t\t\t(options && options.coordsToLatLng) || L.GeoJSON.coordsToLatLng,\n\t\t\tlatlng,\n\t\t\tlatlngs,\n\t\t\ti,\n\t\t\tlen;\n\n\t\tif (!coords && !geometry) {\n\t\t\treturn null;\n\t\t}\n\n\t\tswitch (geometry.type) {\n\t\t\tcase 'Point':\n\t\t\t\tlatlng = _coordsToLatLng(coords);\n\t\t\t\treturn this._pointToLayer(pointToLayer, geojson, latlng, options);\n\n\t\t\tcase 'MultiPoint':\n\t\t\t\tfor (i = 0, len = coords.length; i < len; i++) {\n\t\t\t\t\tlatlng = _coordsToLatLng(coords[i]);\n\t\t\t\t\tlayers.push(\n\t\t\t\t\t\tthis._pointToLayer(pointToLayer, geojson, latlng, options)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn new L.FeatureGroup(layers);\n\n\t\t\tcase 'LineString':\n\t\t\tcase 'MultiLineString':\n\t\t\t\tlatlngs = L.GeoJSON.coordsToLatLngs(\n\t\t\t\t\tcoords,\n\t\t\t\t\tgeometry.type === 'LineString' ? 0 : 1,\n\t\t\t\t\t_coordsToLatLng\n\t\t\t\t);\n\t\t\t\tvar polyline = new L.Polyline(latlngs, options);\n\t\t\t\tif (options.arrowheads) {\n\t\t\t\t\tpolyline.arrowheads(options.arrowheads);\n\t\t\t\t}\n\t\t\t\treturn polyline;\n\n\t\t\tcase 'Polygon':\n\t\t\tcase 'MultiPolygon':\n\t\t\t\tlatlngs = L.GeoJSON.coordsToLatLngs(\n\t\t\t\t\tcoords,\n\t\t\t\t\tgeometry.type === 'Polygon' ? 1 : 2,\n\t\t\t\t\t_coordsToLatLng\n\t\t\t\t);\n\t\t\t\treturn new L.Polygon(latlngs, options);\n\n\t\t\tcase 'GeometryCollection':\n\t\t\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\n\t\t\t\t\tvar layer = this.geometryToLayer(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgeometry: geometry.geometries[i],\n\t\t\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\t\t\tproperties: geojson.properties,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions\n\t\t\t\t\t);\n\n\t\t\t\t\tif (layer) {\n\t\t\t\t\t\tlayers.push(layer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn new L.FeatureGroup(layers);\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Invalid GeoJSON object.');\n\t\t}\n\t},\n\n\taddData: function (geojson) {\n\t\tvar features = L.Util.isArray(geojson) ? geojson : geojson.features,\n\t\t\ti,\n\t\t\tlen,\n\t\t\tfeature;\n\n\t\tif (features) {\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\n\t\t\t\t// only add this if geometry or geometries are set and not null\n\t\t\t\tfeature = features[i];\n\t\t\t\tif (\n\t\t\t\t\tfeature.geometries ||\n\t\t\t\t\tfeature.geometry ||\n\t\t\t\t\tfeature.features ||\n\t\t\t\t\tfeature.coordinates\n\t\t\t\t) {\n\t\t\t\t\tthis.addData(feature);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\tif (options.filter && !options.filter(geojson)) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar layer = this.geometryToLayer(geojson, options);\n\t\tif (!layer) {\n\t\t\treturn this;\n\t\t}\n\t\tlayer.feature = L.GeoJSON.asFeature(geojson);\n\n\t\tlayer.defaultOptions = layer.options;\n\t\tthis.resetStyle(layer);\n\n\t\tif (options.onEachFeature) {\n\t\t\toptions.onEachFeature(geojson, layer);\n\t\t}\n\n\t\treturn this.addLayer(layer);\n\t},\n\n\t_pointToLayer: function (pointToLayerFn, geojson, latlng, options) {\n\t\treturn pointToLayerFn\n\t\t\t? pointToLayerFn(geojson, latlng)\n\t\t\t: new L.Marker(\n\t\t\t\t\tlatlng,\n\t\t\t\t\toptions && options.markersInheritOptions && options\n\t\t\t );\n\t},\n});\n","!function(a,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define(\"leafletGestureHandling\",[\"exports\"],t):t(a.leafletGestureHandling={})}(this,function(a){\"use strict\";var o={ar:{touch:\"استخدم إصبعين لتحريك الخريطة\",scroll:\"‏استخدم ctrl + scroll لتصغير/تكبير الخريطة\",scrollMac:\"يمكنك استخدام ⌘ + التمرير لتكبير/تصغير الخريطة\"},bg:{touch:\"Използвайте два пръста, за да преместите картата\",scroll:\"Задръжте бутона Ctrl натиснат, докато превъртате, за да промените мащаба на картата\",scrollMac:\"Задръжте бутона ⌘ натиснат, докато превъртате, за да промените мащаба на картата\"},bn:{touch:\"মানচিত্রটিকে সরাতে দুটি আঙ্গুল ব্যবহার করুন\",scroll:\"ম্যাপ জুম করতে ctrl + scroll ব্যবহার করুন\",scrollMac:\"ম্যাপে জুম করতে ⌘ বোতাম টিপে স্ক্রল করুন\"},ca:{touch:\"Fes servir dos dits per moure el mapa\",scroll:\"Prem la tecla Control mentre et desplaces per apropar i allunyar el mapa\",scrollMac:\"Prem la tecla ⌘ mentre et desplaces per apropar i allunyar el mapa\"},cs:{touch:\"K posunutí mapy použijte dva prsty\",scroll:\"Velikost zobrazení mapy změňte podržením klávesy Ctrl a posouváním kolečka myši\",scrollMac:\"Velikost zobrazení mapy změníte podržením klávesy ⌘ a posunutím kolečka myši / touchpadu\"},da:{touch:\"Brug to fingre til at flytte kortet\",scroll:\"Brug ctrl + rullefunktionen til at zoome ind og ud på kortet\",scrollMac:\"Brug ⌘ + rullefunktionen til at zoome ind og ud på kortet\"},de:{touch:\"Verschieben der Karte mit zwei Fingern\",scroll:\"Verwende Strg+Scrollen zum Zoomen der Karte\",scrollMac:\"⌘\"},el:{touch:\"Χρησιμοποιήστε δύο δάχτυλα για μετακίνηση στον χάρτη\",scroll:\"Χρησιμοποιήστε το πλήκτρο Ctrl και κύλιση, για να μεγεθύνετε τον χάρτη\",scrollMac:\"Χρησιμοποιήστε το πλήκτρο ⌘ + κύλιση για εστίαση στον χάρτη\"},en:{touch:\"Use two fingers to move the map\",scroll:\"Use ctrl + scroll to zoom the map\",scrollMac:\"Use ⌘ + scroll to zoom the map\"},\"en-AU\":{touch:\"Use two fingers to move the map\",scroll:\"Use ctrl + scroll to zoom the map\",scrollMac:\"Use ⌘ + scroll to zoom the map\"},\"en-GB\":{touch:\"Use two fingers to move the map\",scroll:\"Use ctrl + scroll to zoom the map\",scrollMac:\"Use ⌘ + scroll to zoom the map\"},es:{touch:\"Para mover el mapa, utiliza dos dedos\",scroll:\"Mantén pulsada la tecla Ctrl mientras te desplazas para acercar o alejar el mapa\",scrollMac:\"Mantén pulsada la tecla ⌘ mientras te desplazas para acercar o alejar el mapa\"},eu:{touch:\"Erabili bi hatz mapa mugitzeko\",scroll:\"Mapan zooma aplikatzeko, sakatu Ktrl eta egin gora edo behera\",scrollMac:\"Eduki sakatuta ⌘ eta egin gora eta behera mapa handitu eta txikitzeko\"},fa:{touch:\"برای حرکت دادن نقشه از دو انگشت استفاده کنید.\",scroll:\"‏برای بزرگ‌نمایی نقشه از ctrl + scroll استفاده کنید\",scrollMac:\"برای بزرگ‌نمایی نقشه، از ⌘ + پیمایش استفاده کنید.\"},fi:{touch:\"Siirrä karttaa kahdella sormella.\",scroll:\"Zoomaa karttaa painamalla Ctrl-painiketta ja vierittämällä.\",scrollMac:\"Zoomaa karttaa pitämällä painike ⌘ painettuna ja vierittämällä.\"},fil:{touch:\"Gumamit ng dalawang daliri upang iusog ang mapa\",scroll:\"Gamitin ang ctrl + scroll upang i-zoom ang mapa\",scrollMac:\"Gamitin ang ⌘ + scroll upang i-zoom ang mapa\"},fr:{touch:\"Utilisez deux doigts pour déplacer la carte\",scroll:\"Vous pouvez zoomer sur la carte à l'aide de CTRL+Molette de défilement\",scrollMac:\"Vous pouvez zoomer sur la carte à l'aide de ⌘+Molette de défilement\"},gl:{touch:\"Utiliza dous dedos para mover o mapa\",scroll:\"Preme Ctrl mentres te desprazas para ampliar o mapa\",scrollMac:\"Preme ⌘ e desprázate para ampliar o mapa\"},gu:{touch:\"નકશો ખસેડવા બે આંગળીઓનો ઉપયોગ કરો\",scroll:\"નકશાને ઝૂમ કરવા માટે ctrl + સ્ક્રોલનો ઉપયોગ કરો\",scrollMac:\"નકશાને ઝૂમ કરવા ⌘ + સ્ક્રોલનો ઉપયોગ કરો\"},hi:{touch:\"मैप एक जगह से दूसरी जगह ले जाने के लिए दो उंगलियों का इस्तेमाल करें\",scroll:\"मैप को ज़ूम करने के लिए ctrl + स्क्रोल का उपयोग करें\",scrollMac:\"मैप को ज़ूम करने के लिए ⌘ + स्क्रोल का उपयोग करें\"},hr:{touch:\"Pomičite kartu pomoću dva prsta\",scroll:\"Upotrijebite Ctrl i klizač miša da biste zumirali kartu\",scrollMac:\"Upotrijebite gumb ⌘ dok se pomičete za zumiranje karte\"},hu:{touch:\"Két ujjal mozgassa a térképet\",scroll:\"A térkép a ctrl + görgetés használatával nagyítható\",scrollMac:\"A térkép a ⌘ + görgetés használatával nagyítható\"},id:{touch:\"Gunakan dua jari untuk menggerakkan peta\",scroll:\"Gunakan ctrl + scroll untuk memperbesar atau memperkecil peta\",scrollMac:\"Gunakan ⌘ + scroll untuk memperbesar atau memperkecil peta\"},it:{touch:\"Utilizza due dita per spostare la mappa\",scroll:\"Utilizza CTRL + scorrimento per eseguire lo zoom della mappa\",scrollMac:\"Utilizza ⌘ + scorrimento per eseguire lo zoom della mappa\"},iw:{touch:\"הזז את המפה באמצעות שתי אצבעות\",scroll:\"‏אפשר לשנות את מרחק התצוגה במפה באמצעות מקש ctrl וגלילה\",scrollMac:\"אפשר לשנות את מרחק התצוגה במפה באמצעות מקש ⌘ וגלילה\"},ja:{touch:\"地図を移動させるには指 2 本で操作します\",scroll:\"地図をズームするには、Ctrl キーを押しながらスクロールしてください\",scrollMac:\"地図をズームするには、⌘ キーを押しながらスクロールしてください\"},kn:{touch:\"Use two fingers to move the map\",scroll:\"Use Ctrl + scroll to zoom the map\",scrollMac:\"Use ⌘ + scroll to zoom the map\"},ko:{touch:\"지도를 움직이려면 두 손가락을 사용하세요.\",scroll:\"지도를 확대/축소하려면 Ctrl을 누른 채 스크롤하세요.\",scrollMac:\"지도를 확대하려면 ⌘ + 스크롤 사용\"},lt:{touch:\"Perkelkite žemėlapį dviem pirštais\",scroll:\"Slinkite nuspaudę klavišą „Ctrl“, kad pakeistumėte žemėlapio mastelį\",scrollMac:\"Paspauskite klavišą ⌘ ir slinkite, kad priartintumėte žemėlapį\"},lv:{touch:\"Lai pārvietotu karti, bīdiet to ar diviem pirkstiem\",scroll:\"Kartes tālummaiņai izmantojiet ctrl + ritināšanu\",scrollMac:\"Lai veiktu kartes tālummaiņu, izmantojiet ⌘ + ritināšanu\"},ml:{touch:\"മാപ്പ് നീക്കാൻ രണ്ട് വിരലുകൾ ഉപയോഗിക്കുക\",scroll:\"കൺട്രോൾ + സ്‌ക്രോൾ ഉപയോഗിച്ച് ‌മാപ്പ് ‌സൂം ചെയ്യുക\",scrollMac:\"⌘ + സ്‌ക്രോൾ ഉപയോഗിച്ച് ‌മാപ്പ് ‌സൂം ചെയ്യുക\"},mr:{touch:\"नकाशा हलविण्यासाठी दोन बोटे वापरा\",scroll:\"नकाशा झूम करण्यासाठी ctrl + scroll वापरा\",scrollMac:\"नकाशावर झूम करण्यासाठी ⌘ + स्क्रोल वापरा\"},nl:{touch:\"Gebruik twee vingers om de kaart te verplaatsen\",scroll:\"Gebruik Ctrl + scrollen om in- en uit te zoomen op de kaart\",scrollMac:\"Gebruik ⌘ + scrollen om in en uit te zoomen op de kaart\"},no:{touch:\"Bruk to fingre for å flytte kartet\",scroll:\"Hold ctrl-tasten inne og rull for å zoome på kartet\",scrollMac:\"Hold inne ⌘-tasten og rull for å zoome på kartet\"},pl:{touch:\"Przesuń mapę dwoma palcami\",scroll:\"Naciśnij CTRL i przewiń, by przybliżyć mapę\",scrollMac:\"Naciśnij ⌘ i przewiń, by przybliżyć mapę\"},pt:{touch:\"Use dois dedos para mover o mapa\",scroll:\"Pressione Ctrl e role a tela simultaneamente para aplicar zoom no mapa\",scrollMac:\"Use ⌘ e role a tela simultaneamente para aplicar zoom no mapa\"},\"pt-BR\":{touch:\"Use dois dedos para mover o mapa\",scroll:\"Pressione Ctrl e role a tela simultaneamente para aplicar zoom no mapa\",scrollMac:\"Use ⌘ e role a tela simultaneamente para aplicar zoom no mapa\"},\"pt-PT\":{touch:\"Utilize dois dedos para mover o mapa\",scroll:\"Utilizar ctrl + deslocar para aumentar/diminuir zoom do mapa\",scrollMac:\"Utilize ⌘ + deslocar para aumentar/diminuir o zoom do mapa\"},ro:{touch:\"Folosiți două degete pentru a deplasa harta\",scroll:\"Apăsați tasta ctrl și derulați simultan pentru a mări harta\",scrollMac:\"Folosiți ⌘ și derulați pentru a mări/micșora harta\"},ru:{touch:\"Чтобы переместить карту, проведите по ней двумя пальцами\",scroll:\"Чтобы изменить масштаб, прокручивайте карту, удерживая клавишу Ctrl.\",scrollMac:\"Чтобы изменить масштаб, нажмите ⌘ + прокрутка\"},sk:{touch:\"Mapu môžete posunúť dvoma prstami\",scroll:\"Ak chcete priblížiť mapu, stlačte kláves ctrl a posúvajte\",scrollMac:\"Ak chcete priblížiť mapu, stlačte kláves ⌘ a posúvajte kolieskom myši\"},sl:{touch:\"Premaknite zemljevid z dvema prstoma\",scroll:\"Zemljevid povečate tako, da držite tipko Ctrl in vrtite kolesce na miški\",scrollMac:\"Uporabite ⌘ + funkcijo pomika, da povečate ali pomanjšate zemljevid\"},sr:{touch:\"Мапу померајте помоћу два прста\",scroll:\"Притисните ctrl тастер док померате да бисте зумирали мапу\",scrollMac:\"Притисните тастер ⌘ док померате да бисте зумирали мапу\"},sv:{touch:\"Använd två fingrar för att flytta kartan\",scroll:\"Använd ctrl + rulla för att zooma kartan\",scrollMac:\"Använd ⌘ + rulla för att zooma på kartan\"},ta:{touch:\"மேப்பை நகர்த்த இரண்டு விரல்களைப் பயன்படுத்தவும்\",scroll:\"மேப்பை பெரிதாக்கி/சிறிதாக்கிப் பார்க்க, ctrl பட்டனைப் பிடித்தபடி, மேலே/கீழே ஸ்க்ரால் செய்யவும்\",scrollMac:\"மேப்பை பெரிதாக்கி/சிறிதாக்கிப் பார்க்க, ⌘ பட்டனைப் பிடித்தபடி, மேலே/கீழே ஸ்க்ரால் செய்யவும்\"},te:{touch:\"మ్యాప్‌ని తరలించడం కోసం రెండు వేళ్లను ఉపయోగించండి\",scroll:\"మ్యాప్‌ని జూమ్ చేయడానికి ctrl బటన్‌ను నొక్కి ఉంచి, స్క్రోల్ చేయండి\",scrollMac:\"మ్యాప్ జూమ్ చేయాలంటే ⌘ + స్క్రోల్ ఉపయోగించండి\"},th:{touch:\"ใช้ 2 นิ้วเพื่อเลื่อนแผนที่\",scroll:\"กด Ctrl ค้างไว้ แล้วเลื่อนหน้าจอเพื่อซูมแผนที่\",scrollMac:\"กด ⌘ แล้วเลื่อนหน้าจอเพื่อซูมแผนที่\"},tl:{touch:\"Gumamit ng dalawang daliri upang iusog ang mapa\",scroll:\"Gamitin ang ctrl + scroll upang i-zoom ang mapa\",scrollMac:\"Gamitin ang ⌘ + scroll upang i-zoom ang mapa\"},tr:{touch:\"Haritada gezinmek için iki parmağınızı kullanın\",scroll:\"Haritayı yakınlaştırmak için ctrl + kaydırma kombinasyonunu kullanın\",scrollMac:\"Haritayı yakınlaştırmak için ⌘ tuşuna basıp ekranı kaydırın\"},uk:{touch:\"Переміщуйте карту двома пальцями\",scroll:\"Щоб змінювати масштаб карти, прокручуйте коліщатко миші, утримуючи клавішу Ctrl\",scrollMac:\"Щоб змінити масштаб карти, використовуйте ⌘ + прокручування\"},vi:{touch:\"Sử dụng hai ngón tay để di chuyển bản đồ\",scroll:\"Sử dụng ctrl + cuộn để thu phóng bản đồ\",scrollMac:\"Sử dụng ⌘ + cuộn để thu phóng bản đồ\"},\"zh-CN\":{touch:\"使用双指移动地图\",scroll:\"按住 Ctrl 并滚动鼠标滚轮才可缩放地图\",scrollMac:\"按住 ⌘ 并滚动鼠标滚轮才可缩放地图\"},\"zh-TW\":{touch:\"同時以兩指移動地圖\",scroll:\"按住 ctrl 鍵加上捲動滑鼠可以縮放地圖\",scrollMac:\"按 ⌘ 加上滾動捲軸可以縮放地圖\"}};L.Map.mergeOptions({gestureHandlingOptions:{text:{},duration:1e3}});var t=!1,e=L.Handler.extend({addHooks:function(){this._handleTouch=this._handleTouch.bind(this),this._setupPluginOptions(),this._setLanguageContent(),this._disableInteractions(),this._map._container.addEventListener(\"touchstart\",this._handleTouch),this._map._container.addEventListener(\"touchmove\",this._handleTouch),this._map._container.addEventListener(\"touchend\",this._handleTouch),this._map._container.addEventListener(\"touchcancel\",this._handleTouch),this._map._container.addEventListener(\"click\",this._handleTouch),L.DomEvent.on(this._map._container,\"wheel\",this._handleScroll,this),L.DomEvent.on(this._map,\"mouseover\",this._handleMouseOver,this),L.DomEvent.on(this._map,\"mouseout\",this._handleMouseOut,this),L.DomEvent.on(this._map,\"movestart\",this._handleDragging,this),L.DomEvent.on(this._map,\"move\",this._handleDragging,this),L.DomEvent.on(this._map,\"moveend\",this._handleDragging,this)},removeHooks:function(){this._enableInteractions(),this._map._container.removeEventListener(\"touchstart\",this._handleTouch),this._map._container.removeEventListener(\"touchmove\",this._handleTouch),this._map._container.removeEventListener(\"touchend\",this._handleTouch),this._map._container.removeEventListener(\"touchcancel\",this._handleTouch),this._map._container.removeEventListener(\"click\",this._handleTouch),L.DomEvent.off(this._map._container,\"wheel\",this._handleScroll,this),L.DomEvent.off(this._map,\"mouseover\",this._handleMouseOver,this),L.DomEvent.off(this._map,\"mouseout\",this._handleMouseOut,this),L.DomEvent.off(this._map,\"movestart\",this._handleDragging,this),L.DomEvent.off(this._map,\"move\",this._handleDragging,this),L.DomEvent.off(this._map,\"moveend\",this._handleDragging,this)},_handleDragging:function(a){\"movestart\"==a.type||\"move\"==a.type?t=!0:\"moveend\"==a.type&&(t=!1)},_disableInteractions:function(){this._map.dragging.disable(),this._map.scrollWheelZoom.disable(),this._map.tap&&this._map.tap.disable()},_enableInteractions:function(){this._map.dragging.enable(),this._map.scrollWheelZoom.enable(),this._map.tap&&this._map.tap.enable()},_setupPluginOptions:function(){this._map.options.gestureHandlingText&&(this._map.options.gestureHandlingOptions.text=this._map.options.gestureHandlingText)},_setLanguageContent:function(){var a;if(this._map.options.gestureHandlingOptions&&this._map.options.gestureHandlingOptions.text&&this._map.options.gestureHandlingOptions.text.touch&&this._map.options.gestureHandlingOptions.text.scroll&&this._map.options.gestureHandlingOptions.text.scrollMac)a=this._map.options.gestureHandlingOptions.text;else{var t=this._getUserLanguage();t||(t=\"en\"),o[t]&&(a=o[t]),a||-1===t.indexOf(\"-\")||(t=t.split(\"-\")[0],a=o[t]),a||(a=o[t=\"en\"])}var e=!1;0<=navigator.platform.toUpperCase().indexOf(\"MAC\")&&(e=!0);var l=a.scroll;e&&(l=a.scrollMac),this._map._container.setAttribute(\"data-gesture-handling-touch-content\",a.touch),this._map._container.setAttribute(\"data-gesture-handling-scroll-content\",l)},_getUserLanguage:function(){return navigator.languages?navigator.languages[0]:navigator.language||navigator.userLanguage},_handleTouch:function(a){for(var t=[\"leaflet-control-minimap\",\"leaflet-interactive\",\"leaflet-popup-content\",\"leaflet-popup-content-wrapper\",\"leaflet-popup-close-button\",\"leaflet-control-zoom-in\",\"leaflet-control-zoom-out\"],e=!1,l=0;lMapbox © OpenStreetMap',\n\t\ttileSize: 512,\n\t\tzoomOffset: -1,\n\t\tminZoom: 3,\n\t\tmaxZoom: 18,\n\t}).addTo(destinationMap);\n\n\tconst YellowMarkerIcon = new L.icon({\n\t\ticonUrl: '/site/assets/images/yellow-marker.png',\n\t\tclassName: 'icon-active',\n\t\ticonSize: [44, 44],\n\t\ticonAnchor: [22, 44],\n\t});\n\n\tconst BlueMarkerIcon = new L.icon({\n\t\ticonUrl: '/site/assets/images/blue-marker.png',\n\t\ticonSize: [58, 58],\n\t\ticonAnchor: [29, 58],\n\t});\n\n\tconst HotelMarkerIcon = new L.icon({\n\t\ticonUrl: '/site/assets/images/hotel-map-marker.png',\n\t\ticonSize: [22, 22],\n\t\ticonAnchor: [11, 22],\n\t});\n\n\tif (!document.querySelector('#mapPopupModal')) {\n\t\tconst tplMapPopupModal = document.getElementById('mapPopupModalTpl') ? document.getElementById('mapPopupModalTpl').content : null;\n\t\tconst mapPopupModalNode = tplMapPopupModal.cloneNode(true);\n\t\tmapPopupModalContainer.appendChild(mapPopupModalNode);\n\t}\n\n\tlet mapPopupModalObj = null;\n\tconst relatedImageEl = mapPopupModalContainer.querySelector('.related-image');\n\tconst dayTextEl = mapPopupModalContainer.querySelector('.day-text');\n\tconst titleTextEl = mapPopupModalContainer.querySelector('.title-text');\n\tconst introTextEl = mapPopupModalContainer.querySelector('.intro');\n\tconst exploreBtnEl = mapPopupModalContainer.querySelector('.explore-button');\n\n\tlet arrowheads;\n\tconst drawArrowheads = (latlngs, map) => {\n\t\tif (arrowheads) {\n\t\t\tarrowheads.remove();\n\t\t}\n\t\tconst ghost = L.polyline(latlngs).arrowheads({ frequency: 1, fill: true, yawn: 40, color: '#333333', size: '10px', lineJoin: 'miter', lineCap: 'square' }).addTo(map);\n\t\tarrowheads = ghost.getArrowheads();\n\t\tghost.remove();\n\t\tarrowheads.addTo(map);\n\t};\n\n\tconst fetchResults = (value, poisValue) => {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst url = `/assets/components/canadianaffair/getDestinations.php?loc=${value}&pois=${poisValue}`;\n\n\t\t\taxios\n\t\t\t\t.get(url)\n\t\t\t\t.then((response) => {\n\t\t\t\t\tresolve(response.data);\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t});\n\t};\n\n\tif (destinationMapContainerEl.classList.contains('itinerary')) {\n\t\tconst dayPlanCarouselBlockEl = destinationMapContainerEl.querySelector('.day-plan-carousel-block');\n\t\tconst dayPlanCarousel = destinationMapContainerEl.querySelector('.day-plan-carousel-container');\n\t\tconst dPCarousel = createDParousel(dayPlanCarousel);\n\n\t\tconst dayPlanEls = destinationMapContainerEl.querySelectorAll('.day-plan');\n\t\tdayPlanEls.forEach((el, idx) => {\n\t\t\tconst stoplat = el.getAttribute('data-latitude');\n\t\t\tconst stoplng = el.getAttribute('data-longitude');\n\t\t\tconst stopText = el.getAttribute('data-plan-day');\n\t\t\tlet iconSrc = '/site/assets/images/stop-blue-marker.png';\n\t\t\tlet zIndexOffset = 0;\n\t\t\tswitch (idx) {\n\t\t\t\tcase 0:\n\t\t\t\t\ticonSrc = '/site/assets/images/stop-green-marker.png';\n\t\t\t\t\tzIndexOffset = 1000;\n\t\t\t\t\tbreak;\n\t\t\t\tcase dayPlanEls.length - 1:\n\t\t\t\t\ticonSrc = '/site/assets/images/stop-red-marker.png';\n\t\t\t\t\tzIndexOffset = 1000;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tzIndexOffset = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (stoplat && stoplng) {\n\t\t\t\tconst markerObj = L.marker([stoplat, stoplng], {\n\t\t\t\t\ticon: L.divIcon({\n\t\t\t\t\t\thtml: `\"Marker\"`,\n\t\t\t\t\t\ticonSize: [58, 58],\n\t\t\t\t\t\ticonAnchor: [29, 58],\n\t\t\t\t\t}),\n\t\t\t\t\tautoPan: false,\n\t\t\t\t\tzIndexOffset,\n\t\t\t\t\t'data-stop': idx,\n\t\t\t\t\t'data-plan-day': stopText,\n\t\t\t\t\t'data-image': el.querySelector('.plan-day-image').getAttribute('data-src'),\n\t\t\t\t\t'data-title': el.querySelector('.plan-day-title').innerHTML,\n\t\t\t\t\t'data-description': el.querySelector('.plan-day-desc').innerHTML,\n\t\t\t\t});\n\t\t\t\tprocessedStopMarkers.push(markerObj);\n\n\t\t\t\tif (idx + 1 <= dayPlanEls.length - 1) {\n\t\t\t\t\tconst nextStoplat = dayPlanEls[idx + 1].getAttribute('data-latitude');\n\t\t\t\t\tconst nextStoplng = dayPlanEls[idx + 1].getAttribute('data-longitude');\n\t\t\t\t\tconst midPointlat = (parseFloat(nextStoplat) + parseFloat(stoplat)) * 0.5;\n\t\t\t\t\tconst midPointlng = (parseFloat(nextStoplng) + parseFloat(stoplng)) * 0.5;\n\n\t\t\t\t\tconst curvedPath = L.curve(['M', [stoplat, stoplng], 'Q', [midPointlat, midPointlng], [nextStoplat, nextStoplng]], { color: '#333333', dashArray: '5, 5', weight: 2 }).addTo(destinationMap);\n\t\t\t\t\tconst latlngs = curvedPath.trace([0, 0.5]);\n\t\t\t\t\tprocessedStopArrows.push(latlngs);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocessedStopMarkers.forEach((obj) => {\n\t\t\tobj.on('click', function (event) {\n\t\t\t\t// event.preventDefault();\n\t\t\t\t// event.stopPropagation();\n\n\t\t\t\tconst layer = event.target;\n\n\t\t\t\tif (mq.matches) {\n\t\t\t\t\tlet windowPageYOffset = 0;\n\t\t\t\t\twindowPageYOffset = window.pageYOffset - (bodyElement.classList.contains('scrolling') ? 160 : 100);\n\t\t\t\t\tconst elemDistanceToTop = windowPageYOffset + dayPlanCarouselBlockEl.getBoundingClientRect().top;\n\t\t\t\t\twindow.scrollTo(0, elemDistanceToTop);\n\t\t\t\t\tconst stopDay = layer.options['data-stop'];\n\t\t\t\t\tdPCarousel.select(stopDay);\n\t\t\t\t} else if (!mq.matches) {\n\t\t\t\t\trelatedImageEl.setAttribute('data-src', layer.options['data-image']);\n\t\t\t\t\tdayTextEl.classList.remove('hidden');\n\t\t\t\t\tdayTextEl.querySelector('span').innerHTML = `Day ${layer.options['data-plan-day']}`;\n\t\t\t\t\ttitleTextEl.innerHTML = layer.options['data-title'];\n\t\t\t\t\tintroTextEl.innerHTML = layer.options['data-description'];\n\t\t\t\t\texploreBtnEl.classList.add('hidden');\n\t\t\t\t\tlazySizes.loader.unveil(relatedImageEl);\n\n\t\t\t\t\tmapPopupModalObj = new Dialog('#mapPopupModal', 'div', 'a', false, () => {\n\t\t\t\t\t\trelatedImageEl.classList.remove('ls-is-cached', 'lazyloaded');\n\t\t\t\t\t\trelatedImageEl.classList.add('lazyload');\n\t\t\t\t\t\trelatedImageEl.setAttribute('data-src', '');\n\t\t\t\t\t\trelatedImageEl.removeAttribute('src');\n\t\t\t\t\t\tdayTextEl.classList.add('hidden');\n\t\t\t\t\t\tdayTextEl.querySelector('span').innerHTML = '';\n\t\t\t\t\t\ttitleTextEl.innerHTML = '';\n\t\t\t\t\t\tintroTextEl.innerHTML = '';\n\t\t\t\t\t\texploreBtnEl.classList.remove('hidden');\n\t\t\t\t\t\texploreBtnEl.setAttribute('href', '#');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tif (processedStopArrows.length) {\n\t\t\tdrawArrowheads(processedStopArrows, destinationMap);\n\t\t\tdestinationMap.on('moveend', () => {\n\t\t\t\tdrawArrowheads(processedStopArrows, destinationMap);\n\t\t\t});\n\t\t}\n\t}\n\n\tif (hotelPos) {\n\t\tconst hotelLng = hotelPos.split(',')[0];\n\t\tconst hotelLat = hotelPos.split(',')[1];\n\n\t\tif (hotelLat && hotelLng) {\n\t\t\tconst markerObj = L.marker([hotelLat, hotelLng], { icon: HotelMarkerIcon, autoPan: false });\n\t\t\thotelMarkers.push(markerObj);\n\t\t}\n\t}\n\n\tfetchResults(locID, showPois).then((data) => {\n\t\tconst { cities, poi, provinces } = data;\n\n\t\tif (!destinationMapContainerEl.classList.contains('itinerary')) {\n\t\t\tif (cities) {\n\t\t\t\tcities.forEach((marker, idx) => {\n\t\t\t\t\tif (marker.lat && marker.lng) {\n\t\t\t\t\t\tconst markerObj = L.marker([marker.lat, marker.lng], { icon: BlueMarkerIcon, marker, type: 'city', idx, autoPan: false });\n\t\t\t\t\t\tprocessedMarkers.push(markerObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (provinces) {\n\t\t\t\tprovinces.forEach((marker, idx) => {\n\t\t\t\t\tif (marker.lat && marker.lng) {\n\t\t\t\t\t\tconst markerObj = L.marker([marker.lat, marker.lng], { icon: BlueMarkerIcon, marker, type: 'province', idx, autoPan: false });\n\t\t\t\t\t\tprocessedMarkers.push(markerObj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (poi) {\n\t\t\tpoi.forEach((marker, idx) => {\n\t\t\t\tif (marker.lat && marker.lng) {\n\t\t\t\t\tconst markerObj = L.marker([marker.lat, marker.lng], { icon: YellowMarkerIcon, marker, type: 'poi', idx, autoPan: false });\n\t\t\t\t\tprocessedMarkers.push(markerObj);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tprocessedMarkers.forEach((obj) => {\n\t\t\tobj.on('click', function (event) {\n\t\t\t\tconst layer = event.target;\n\t\t\t\tconst markerData = layer.options.marker;\n\t\t\t\tconst markerType = layer.options.type;\n\n\t\t\t\trelatedImageEl.setAttribute('data-src', markerData.image);\n\t\t\t\ttitleTextEl.innerHTML = markerData.pagetitle;\n\t\t\t\tintroTextEl.innerHTML = markerData.introtext;\n\t\t\t\tif (markerType === 'poi') {\n\t\t\t\t\texploreBtnEl.classList.add('hidden');\n\t\t\t\t} else {\n\t\t\t\t\texploreBtnEl.setAttribute('href', markerData.url);\n\t\t\t\t}\n\t\t\t\tlazySizes.loader.unveil(relatedImageEl);\n\n\t\t\t\tmapPopupModalObj = new Dialog('#mapPopupModal', 'div', 'a', false, () => {\n\t\t\t\t\trelatedImageEl.classList.remove('ls-is-cached', 'lazyloaded');\n\t\t\t\t\trelatedImageEl.classList.add('lazyload');\n\t\t\t\t\trelatedImageEl.setAttribute('data-src', '');\n\t\t\t\t\trelatedImageEl.removeAttribute('src');\n\t\t\t\t\ttitleTextEl.innerHTML = '';\n\t\t\t\t\tintroTextEl.innerHTML = '';\n\t\t\t\t\texploreBtnEl.classList.remove('hidden');\n\t\t\t\t\texploreBtnEl.setAttribute('href', '#');\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdocument.onkeyup = function (event) {\n\t\t\tconst kCode = event.which || event.keyCode;\n\t\t\tif (kCode === 27) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tmapPopupModalObj.getOpenDialog.close();\n\t\t\t}\n\t\t};\n\n\t\tconst combinedMarkers = [...processedMarkers, ...processedStopMarkers, ...hotelMarkers];\n\t\tif (combinedMarkers.length) {\n\t\t\tgroup = new L.featureGroup(combinedMarkers).addTo(destinationMap);\n\t\t\tif (mapZoomLevel) {\n\t\t\t\tdestinationMap.setView(group.getBounds().getCenter(), mapZoomLevel, { padding: [58, 58], animate: false });\n\t\t\t} else {\n\t\t\t\tdestinationMap.fitBounds(group.getBounds(), { padding: [58, 58] });\n\t\t\t}\n\t\t}\n\t});\n\n\tconst resizeObserver = new window.ResizeObserver(() => {\n\t\tif (group) {\n\t\t\tif (mapZoomLevel) {\n\t\t\t\tdestinationMap.setView(group.getBounds().getCenter(), mapZoomLevel, { padding: [58, 58], animate: false });\n\t\t\t} else {\n\t\t\t\tdestinationMap.fitBounds(group.getBounds(), { padding: [58, 58] });\n\t\t\t}\n\t\t}\n\t});\n\n\tresizeObserver.observe(destinationMapContainerEl);\n}\n\nconst destinationsHubContainerEls = document.querySelectorAll('.destinations-hub-container');\nif (destinationsHubContainerEls.length) {\n\tfor (const destinationsHubContainerEl of destinationsHubContainerEls) {\n\t\tconst dhViewTriggers = destinationsHubContainerEl.querySelectorAll('.dh-view-trigger');\n\n\t\tfor (const trigger of dhViewTriggers) {\n\t\t\ttrigger.addEventListener('click', (event) => {\n\t\t\t\tconst target = event.currentTarget;\n\n\t\t\t\tif (target.classList.contains('dh-view-trigger')) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\n\t\t\t\t\tconst isActive = target.classList.contains('active');\n\t\t\t\t\tconst active = destinationsHubContainerEl.querySelector('.active');\n\t\t\t\t\tconst targetedPanel = destinationsHubContainerEl.querySelector(`#${target.getAttribute('aria-controls')}`);\n\n\t\t\t\t\tif (active && active !== target) {\n\t\t\t\t\t\tactive.classList.remove('active');\n\t\t\t\t\t\tconst activedPanel = destinationsHubContainerEl.querySelector(`#${active.getAttribute('aria-controls')}`);\n\t\t\t\t\t\tactivedPanel.setAttribute('hidden', '');\n\t\t\t\t\t\tactivedPanel.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!isActive) {\n\t\t\t\t\t\ttarget.classList.add('active');\n\t\t\t\t\t\ttargetedPanel.removeAttribute('hidden');\n\t\t\t\t\t\ttargetedPanel.removeAttribute('aria-hidden');\n\n\t\t\t\t\t\tif (targetedPanel.querySelector('.destinations-carousel')) {\n\t\t\t\t\t\t\tconst dCarouselEls = targetedPanel.querySelector('.destinations-carousel');\n\t\t\t\t\t\t\tconst dCarouselFlickity = Flickity.data(dCarouselEls);\n\t\t\t\t\t\t\tdCarouselFlickity.resize();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.classList.remove('active');\n\t\t\t\t\t\ttargetedPanel.setAttribute('hidden', '');\n\t\t\t\t\t\ttargetedPanel.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttrigger.addEventListener('keydown', (event) => {\n\t\t\t\tconst target = event.currentTarget;\n\t\t\t\tconst key = event.which.toString();\n\t\t\t\t// 33 = Page Up, 34 = Page Down\n\t\t\t\tconst ctrlModifier = event.ctrlKey && key.match(/33|34/);\n\n\t\t\t\tif (target.classList.contains('dh-view-trigger')) {\n\t\t\t\t\t// Up/ Down arrow and Control + Page Up/ Page Down keyboard operations\n\t\t\t\t\t// 38 = Up, 40 = Down\n\t\t\t\t\tif (key.match(/38|40/) || ctrlModifier) {\n\t\t\t\t\t\tconst index = dhViewTriggers.indexOf(target);\n\t\t\t\t\t\tconst direction = key.match(/34|40/) ? 1 : -1;\n\t\t\t\t\t\tconst { length } = dhViewTriggers;\n\t\t\t\t\t\tconst newIndex = (index + length + direction) % length;\n\n\t\t\t\t\t\tdhViewTriggers[newIndex].focus();\n\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t} else if (key.match(/35|36/)) {\n\t\t\t\t\t\t// 35 = End, 36 = Home keyboard operations\n\t\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\t\t// Go to first accordion\n\t\t\t\t\t\t\tcase '36':\n\t\t\t\t\t\t\t\tdhViewTriggers[0].focus();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// Go to last accordion\n\t\t\t\t\t\t\tcase '35':\n\t\t\t\t\t\t\t\tdhViewTriggers[dhViewTriggers.length - 1].focus();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttrigger.addEventListener('focus', () => {\n\t\t\t\tdestinationsHubContainerEl.classList.add('focus');\n\t\t\t});\n\n\t\t\ttrigger.addEventListener('blur', () => {\n\t\t\t\tdestinationsHubContainerEl.classList.remove('focus');\n\t\t\t});\n\t\t}\n\t}\n}\n"],"names":["headerEl","targetNode","mutationConfig","observer","mutationsList","mutation","bookingWidgetEl","searchView","keyCode","direction","TabList","domNode","i","tab","event","flag","setFocus","controls","controledEl","gCarouselEls","Flickity","itCarouselEl","panel","keyPressed","proceed","target","mediaBreakPoint","mq","tabsBlockEls","tabsBlockEl","isGallery","createTabTriggerEl","tabs","parentEl","idx","liEl","buttonEl","createGalleryTabTriggerEl","tplGalleryTabItem","galleryTabItemNode","galleryTabButtonEl","tabPanelEls","tabsData","el","tabsCarousel","createGTCarousel","prevWidth","initTabs","initAccordion","setActiveTab","setActoveAccordion","tabBlockTabList","tabAccordion","resizeHandler","tabAccordionEl","Accordion","allPanelEls","activeTab","servicesTables","showMobileOnlyElems","showDesktopOnlyElems","toggleServicesMobileOnly","show","mobileOnlyElems","tt","elem","toggleServicesDesktopOnly","desktopOnlyElems","tableEls","tableEl","tableWrapEl","anchors","anchor","currentDomainHostname","href","relValue","holidaysContainerEls","holidaysContainerEl","holidayCarouselContainerEl","holidayCarouselItemEls","holidayCarouselFlickity","createHCarousel","holidayTagContainerEl","holidayTagEls","tag","sortedEls","cellElements","cell","moreTagTriggerEl","holidayMoreTagEl","childGridContainerEls","container","extraChildGridItemEls","seeAllTriggerEl","item","faqFilterForm","filterCountEl","faqResultsContainerEl","resetFaqFilterBtn","filterTagsEls","faqCategoryEls","filterCounter","doSearch","tags","id","evt","hotelContainerEls","hotelIndividualPriceEl","fetchHotelResults","atcomRef","start","end","resolve","baseUrl","_a","url","axios","response","error","getNext12Months","currentDate","startOfMonth","endOfMonth","findLowestCost","data","minCost","cost","hotelContainerEl","hotelAtcomRef","hotelPriceEl","hotelPricePartentEl","dates","lowestPrice","t","n","e","a","s","o","r","h","l","factory","L","require$$0","module","latlngs","map","latlngA","latlngB","latlng","p","p1","p2","distance","unit","isMetric","distanceStr","tolerance","hypotenuse","delta","coords","accumulated","total","lengths","maxzoom","closest","circle","latLng","center","circleRadius","radius","x","y","cx","cy","dx","dy","tx","ty","layer","vertices","mindist","result","subResult","addLastSegment","ll","layers","results","m","b","sortedResults","withVertices","pA","pB","ratio","latLngs","pts","lineLength","ratioDist","cumulativeDistanceToA","cumulativeDistanceToB","pointA","pointB","segmentRatio","interpolatedPoint","polyline","point","total_length","portion","found","l1","l2","startpoint","endpoint","other","lla","llb","latlngPoint","angleDeg","latlngCenter","angleRad","pPoint","pCenter","x2","y2","latlng1","latlng2","rad","lat1","lat2","lon1","lon2","bearing","heading","radInv","R","rheading","sinLat1","cosLat1","cosDistR","sinDistR","modulus","definedProps","obj","k","v","isInMeters","value","isInPercent","isInPixels","pixelsToMeters","pixels","refPoint1","xy1","xy2","refPoint2","options","defaults","actualOptions","defaultOptionsOfParent","parentOptions","hatOptions","size","allhats","frequency","offsets","peice","index","totalLength","derivedLatLngs","derivedBearings","spacing","noOfPoints","chosenFrequency","bearings","interpolatedPoints","hats","pushHats","localHatOptions","yawn","leftWingPoint","rightWingPoint","hatPoints","hat","pushHatsFromPixels","sizePixels","derivedXY","thetaLeft","thetaRight","dxLeft","dyLeft","dxRight","dyRight","leftWingXY","rightWingXY","perArrowheadOptions","globalOptions","hatSize","sizePercent","arrowheads","newLatLngs","segment","endOffsetInMeters","newStart","newEnd","geojson","geometry","pointToLayer","_coordsToLatLng","len","features","feature","pointToLayerFn","exports","this","destinationMapEl","bodyElement","GestureHandling","destinationMapContainerEl","mapPopupModalContainer","locID","showPois","hotelPos","mapZoomLevel","processedMarkers","processedStopMarkers","processedStopArrows","hotelMarkers","group","accessToken","destinationMap","YellowMarkerIcon","BlueMarkerIcon","HotelMarkerIcon","mapPopupModalNode","mapPopupModalObj","relatedImageEl","dayTextEl","titleTextEl","introTextEl","exploreBtnEl","drawArrowheads","ghost","fetchResults","poisValue","dayPlanCarouselBlockEl","dayPlanCarousel","dPCarousel","createDParousel","dayPlanEls","stoplat","stoplng","stopText","iconSrc","zIndexOffset","markerObj","nextStoplat","nextStoplng","midPointlat","midPointlng","windowPageYOffset","elemDistanceToTop","stopDay","lazySizes","Dialog","hotelLng","hotelLat","cities","poi","provinces","marker","markerData","markerType","combinedMarkers","destinationsHubContainerEls","destinationsHubContainerEl","dhViewTriggers","trigger","isActive","active","targetedPanel","activedPanel","dCarouselEls","key","ctrlModifier","length","newIndex"],"mappings":"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","x_google_ignoreList":[8,9,10,11]}