{"version":3,"sources":["webpack:///./src/components/Challenge/ChallengesCompleted.vue?d6bc","webpack:///./src/components/Map/IntroOverlay.vue?71de","webpack:///./src/components/Map/IntroOverlay.vue?4b1e","webpack:///./src/components/Challenge/ChallengesTaskCompleted.vue?d9be","webpack:///./node_modules/lodash/_arrayShuffle.js","webpack:///./node_modules/lodash/_baseValues.js","webpack:///./src/components/Search/SearchSuggestionsMenu.vue?fc2f","webpack:///./node_modules/lodash/partition.js","webpack:///./node_modules/lodash/_baseShuffle.js","webpack:///./src/components/Map/MapLogbookLink.vue?e35b","webpack:///./node_modules/lodash/values.js","webpack:///./node_modules/lodash/_copyArray.js","webpack:///./src/components/Map/ExpeditionsList.vue?c0ab","webpack:///./src/components/Map/MapNavigation.vue?5dfa","webpack:///./src/components/Search/SearchSuggestions.vue?8f6d","webpack:///./src/components/Challenge/Challenges.vue?6717","webpack:///./src/components/common/HeaderInfo.vue?cdf2","webpack:///./src/components/Search/SearchbarPlaceholderAnimation.vue?c68e","webpack:///./src/composables/use-logbook.ts","webpack:///./src/components/Search/SearchMenu.vue?95da","webpack:///./src/views/MapPage.vue?f55a","webpack:///./src/components/common/HeaderInfo.vue?7dd2","webpack:///./src/components/common/HeaderInfo.vue","webpack:///./src/components/common/HeaderInfo.vue?9ed8","webpack:///./src/components/Map/Layers/ClusterLayer.vue?658c","webpack:///./src/components/Map/Layers/ClusterLayer.vue","webpack:///./src/components/Map/Layers/ClusterLayer.vue?7f2a","webpack:///./src/components/Map/ResetButton.vue?59df","webpack:///./src/components/Map/ResetButton.vue","webpack:///./src/components/Map/ResetButton.vue?0805","webpack:///./src/components/Animation/RevealAnimation.vue?c746","webpack:///./src/components/Animation/RevealAnimation.vue","webpack:///./src/components/Animation/RevealAnimation.vue?a64a","webpack:///./src/components/Map/ExpeditionsList.vue","webpack:///./src/components/Map/ExpeditionsList.vue?dcc7","webpack:///./src/components/Map/IntroOverlay.vue","webpack:///./src/components/Map/IntroOverlay.vue?664c","webpack:///./src/components/Search/SearchMenu.vue?e1e7","webpack:///./src/components/Search/Searchbar.vue?85e8","webpack:///./src/components/Search/SearchbarPlaceholderAnimation.vue?e448","webpack:///./src/components/Search/SearchbarPlaceholderAnimation.vue","webpack:///./src/components/Search/SearchbarPlaceholderAnimation.vue?09b2","webpack:///./src/components/Search/SearchSuggestionsMenu.vue?fe20","webpack:///./src/components/Search/SearchSuggestions.vue?55e7","webpack:///./src/components/Search/SearchSuggestions.vue","webpack:///./src/components/Search/SearchSuggestions.vue?f511","webpack:///./src/services/search-service.ts","webpack:///./src/components/Search/SearchSuggestionsMenu.vue","webpack:///./src/components/Search/SearchSuggestionsMenu.vue?bfc0","webpack:///./src/components/Search/Searchbar.vue","webpack:///./src/components/Search/Searchbar.vue?c2b7","webpack:///./src/components/Search/SearchMenu.vue","webpack:///./src/components/Search/SearchMenu.vue?80c3","webpack:///./src/components/Map/MapNavigationPanel.vue?c3ec","webpack:///./src/services/challenge-service.ts","webpack:///./src/components/Challenge/ChallengesTaskCompleted.vue","webpack:///./src/components/Challenge/ChallengesTaskCompleted.vue?0f4a","webpack:///./src/components/Challenge/ChallengesCompleted.vue?c8eb","webpack:///./src/components/Challenge/ChallengesCompleted.vue","webpack:///./src/components/Challenge/ChallengesCompleted.vue?649f","webpack:///./src/components/Challenge/Challenges.vue","webpack:///./src/components/Challenge/Challenges.vue?b203","webpack:///./src/components/Map/MapNavigationPanel.vue","webpack:///./src/components/Map/MapNavigationPanel.vue?e614","webpack:///./src/components/Map/MapNavigation.vue","webpack:///./src/components/Map/MapNavigation.vue?0249","webpack:///./src/components/Map/MapLogbookLink.vue?ac19","webpack:///./src/components/Map/MapLogbookLink.vue","webpack:///./src/components/Map/MapLogbookLink.vue?b697","webpack:///./node_modules/@turf/meta/dist/es/index.js","webpack:///./node_modules/@turf/bbox/dist/es/index.js","webpack:///./node_modules/@turf/bbox-polygon/dist/es/index.js","webpack:///./node_modules/@turf/boolean-point-in-polygon/dist/es/index.js","webpack:///./src/utils/mapbox/bbox.ts","webpack:///./src/components/Map/MapSearchBounds.vue","webpack:///./src/components/Map/MapSearchBounds.vue?2366","webpack:///./src/utils/session-storage.ts","webpack:///./src/views/MapPage.vue","webpack:///./src/views/MapPage.vue?8670","webpack:///./src/components/Search/Searchbar.vue?a6ae","webpack:///./node_modules/lodash/_baseRandom.js","webpack:///./src/components/Map/ResetButton.vue?a2c7","webpack:///./node_modules/lodash/_shuffleSelf.js","webpack:///./src/components/Map/MapNavigationPanel.vue?538f","webpack:///./node_modules/lodash/shuffle.js"],"names":["copyArray","shuffleSelf","arrayShuffle","array","module","exports","arrayMap","baseValues","object","props","key","createAggregator","partition","result","value","push","values","baseShuffle","collection","keys","source","index","length","Array","DEFAULT_STATE","initialStorageData","LogbookState","initialState","state","useLogbook","isEmpty","json","saveState","newState","clearState","deep","_hoisted_1","class","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","title","subtitle","type","String","required","__exports__","clusters","default","minZoom","Number","maxZoom","setup","flying","flyTo","map","isEmbedded","onMapLoad","clusterLayer","minzoom","maxzoom","Clusters","cluster","count","id","onClusterMouseEnter","e","target","getCanvas","style","cursor","onClusterMouseLeave","onClusterClick","geometry","features","event_name","category","interaction_type","embed","coordinates","lng","lat","center","lngLat","logger","warn","on","Cluster","_component_Icon","name","visible","onClick","$event","$emit","t","_","components","Icon","emits","Boolean","ref","reveal","$slots","delay","staggerDelay","emit","animationEl","trigger","container","Promise","resolve","setTimeout","classList","add","remove","immediate","n","show","expeditions","Object","__props","isTouchDevice","click","expeditionTitle","expedition_name","_component_router_link","RevealAnimation","expedition","url","to","Image","image","backgroundImageWithProperties","width","fill","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","src","alt","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","data","campaignExpedition","readOnly","partnersOpened","brandingInfo","containerRef","opened","init","open","close","logInitialPageEvent","onReveal","onClose","ref_key","logoLarge","Link","link","AppButton","label","Panel","light","ExpeditionsList","_component_RoundedBar","_component_Searchbar","isMobile","openedMobile","openSearchMobile","quickLinks","onFocus","onBlur","closeSearchMobile","_component_SearchbarPlaceholderAnimation","_component_Spinner","_component_SearchSuggestionsMenu","_directive_click_outside","onSubmit","onSearchFocus","searchValue","showPlaceholder","placeholders","loading","loadingSearchResults","black","large","disabled","onSearchReset","inputFocussed","showSearchSuggestions","suggestions","onSearchBlur","currentIndex","placeholder","placeholderRef","prototypePlaceholderRef","animationInterval","prefersReducedMotion","ANIMATION_DURATION","shuffledPlaceholders","stopPlaceholderAnimation","clearInterval","startPlaceholderAnimation","nextPlaceholder","window","setInterval","updateSearchSuggestionWidth","typeSuggestion","currentPlaceholder","opacity","i","animationTimePerCharacter","characterIteration","newWidth","clientWidth","_component_SearchSuggestions","searchSuggestions","collections","occurrences","onSelectSuggestion","onSuggestionSelect","hideTitle","emptyText","suggestion","getSearchSuggestions","method","response","SearchSuggestions","loadingSuggestions","hideSuggestionsContainer","submitSearchValue","fetchSuggestions","runGetSearchSuggestions","query","collectionNames","occurrenceNames","input","MenuPanelTabs","SearchbarPlaceholderAnimation","SearchSuggestionsMenu","Spinner","RoundedBar","submittedSearchValue","maxSearchbarWidth","inputRef","isTablet","tabVisible","Searchbar","searchbarRef","menuOpened","focus","_component_ExpeditionsList","_component_Challenges","_component_Panel","showChallengesTab","switchTab","Expeditions","active","allChallengesCompleted","Challenges","showExpeditionTab","challenges","settings","challengesSettings","onFinishedChallenges","finishedChallenges","cachedChallengesInfo","getChallengesInfo","challengesInfo","getCachedChallengesInfo","xmlns","viewBox","shape-rendering","text-rendering","script","rx","ry","transform","stroke","d","x1","y1","x2","y2","_hoisted_13","cardIndex","completedChallenges","openChallenges","animatingCard","loadingCompletedChallenges","finishedAllChallenges","activeCard","activeTasks","checkTasks","taskIndex","savedCompletedTasks","CompletedTasks","completedTasksForStorage","includes","allCompleted","every","completed","nextChallenge","savedCompletedChallenges","CompletedChallenges","completedChallengesForStorage","afterFallingAnimation","initialCompletedChallenges","partitionedChallenges","challenge","initialCompletedTasks","tasks","task","text","mode","tag","emptyStateText","onAfterLeave","intro","j","checked","onChange","ChallengesTaskCompleted","ChallengesCompleted","completedStateText","initialOpened","stopLoading","openedTab","challengeList","checkFinishedChallenges","tab","localStorage","getItem","parsedCompletedChallenges","JSON","parse","showIntro","searchOpenedMobile","panelOpened","tabOpened","tabItems","icon","action","openPanel","nudge","closePanel","SearchMenu","onOpen","NavigationBar","MapNavigationPanel","logbookEditorRoute","LogbookEditor","coordEach","geojson","callback","excludeWrapCoord","k","l","stopG","coords","geometryMaybeCollection","isGeometryCollection","wrapShrink","coordIndex","isFeatureCollection","isFeature","stop","featureIndex","geometries","geomIndex","multiFeatureIndex","geometryIndex","geomType","Error","Infinity","coord","bboxPolygon","bbox","options","west","south","east","north","lowLeft","topLeft","topRight","lowRight","properties","booleanPointInPolygon","point","polygon","pt","geom","polys","inBBox","insidePoly","inRing","ignoreBoundary","inHole","ring","isInside","slice","xi","yi","xj","yj","onBoundary","intersect","mapLngLatBoundsToBbox","bounds","nw","getNorthWest","se","getSouthEast","getBboxFromPoints","points","position","bboxContainsLngLat","turfPoly","some","turfPoint","UPDATE_ZOOM_CHANGE","MIN_ZOOM_LEVEL_OFFSET","hasInitialLocation","fitBounds","updateMapBoundsForPoints","mapBbox","getBounds","pointsInMapBbox","currentZoom","getZoom","zoom","pitch","getPitch","minX","minY","maxX","maxY","SessionStorageKey","getSessionStorageItem","sessionStorage","error","setSessionStorageItem","setItem","stringify","showHighlights","aggregatedPoints","mapPage","introDone","mapRef","resetButtonVisible","route","routeHistory","updateHead","allState","stringifyMapStateToRoute","parseMapStateFromRoute","mapBounds","isClusterZoom","viewHeightPx","loadPage","totalObjectsCount","totalCount","collectionInformation","toLocaleString","showIntroOverlay","highlightedExpeditions","highlightedOccurrences","introShownInSession","IntroSeen","fetchMapData","metaTitle","searchClusters","wrapGetClusters","bottomRight","amount","precision","filterQuery","wrapGetClustersAndPoints","northwest","southeast","fetchClustersAndPoints","clustersAndPoints","startIntro","resetMapLocation","resetLocation","onMapUpdate","animateMap","stopIntro","initial","scale","targets","duration","easing","from","gbifId","aggregated","height","IntroOverlay","introOverlay","Header","left","HeaderInfo","right","MapNavigation","header","MapLogbookLink","Mapbox","initialMapLocation","zoomLevel","onLoad","onUpdate","ClusterLayer","MarkerLayer","AggregatedMarkerLayer","HighlightLayer","animate","MapSearchBounds","ResetButton","ContentPageLinks","nativeFloor","Math","floor","nativeRandom","random","baseRandom","lower","upper","size","lastIndex","undefined","rand","isArray","shuffle","func"],"mappings":"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","file":"map-page.c2daabd928aa8afeb70c.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChallengesCompleted.vue?vue&type=style&index=0&id=033050e0&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./IntroOverlay.vue?vue&type=style&index=0&id=44914001&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./IntroOverlay.vue?vue&type=style&index=1&id=44914001&lang=scss\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ChallengesTaskCompleted.vue?vue&type=style&index=0&id=0130acfe&lang=css\"","var copyArray = require('./_copyArray'),\n    shuffleSelf = require('./_shuffleSelf');\n\n/**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction arrayShuffle(array) {\n  return shuffleSelf(copyArray(array));\n}\n\nmodule.exports = arrayShuffle;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SearchSuggestionsMenu.vue?vue&type=style&index=0&id=33e8dece&lang=scss&scoped=true\"","var createAggregator = require('./_createAggregator');\n\n/**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': false },\n *   { 'user': 'fred',    'age': 40, 'active': true },\n *   { 'user': 'pebbles', 'age': 1,  'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\nvar partition = createAggregator(function(result, value, key) {\n  result[key ? 0 : 1].push(value);\n}, function() { return [[], []]; });\n\nmodule.exports = partition;\n","var shuffleSelf = require('./_shuffleSelf'),\n    values = require('./values');\n\n/**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\nfunction baseShuffle(collection) {\n  return shuffleSelf(values(collection));\n}\n\nmodule.exports = baseShuffle;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MapLogbookLink.vue?vue&type=style&index=0&id=6eab6231&lang=scss&scoped=true\"","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ExpeditionsList.vue?vue&type=style&index=0&id=9343480c&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MapNavigation.vue?vue&type=style&index=0&id=32d1b400&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SearchSuggestions.vue?vue&type=style&index=0&id=28b28250&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Challenges.vue?vue&type=style&index=0&id=8baa2ff8&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./HeaderInfo.vue?vue&type=style&index=0&id=669fdcca&lang=scss&scoped=true\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SearchbarPlaceholderAnimation.vue?vue&type=style&index=0&id=5dfaad6a&lang=scss&scoped=true\"","import { computed, ref } from 'vue';\nimport { getLocalStorageItem, LocalStorageKey, setLocalStorageItem } from '@/utils/local-storage';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\nexport interface LogbookState {\n  json?: any;\n}\n\nconst DEFAULT_STATE: LogbookState = {};\n\nconst initialStorageData = getLocalStorageItem<LogbookState>(LocalStorageKey.LogbookState);\nconst initialState = initialStorageData ?? DEFAULT_STATE;\nconst state = ref<LogbookState>(initialState);\n\nexport function useLogbook() {\n  const isEmpty = computed(() => !state.value.json);\n\n  function saveState(newState: Partial<LogbookState>) {\n    state.value = { ...state.value, ...newState };\n  }\n\n  function clearState() {\n    state.value = {};\n  }\n\n  watchWhileActive(state, () => setLocalStorageItem(LocalStorageKey.LogbookState, state.value), {\n    deep: true,\n  });\n\n  return {\n    state,\n    isEmpty,\n    saveState,\n    clearState,\n  };\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SearchMenu.vue?vue&type=style&index=0&id=16021462&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MapPage.vue?vue&type=style&index=0&id=1f7f37ac&lang=scss&scoped=true\"","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-669fdcca\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"header-info\" }\nconst _hoisted_2 = { class: \"sub-text\" }\nconst _hoisted_3 = { class: \"sub-text header-info-subtitle\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"p\", _hoisted_2, [\n      _createElementVNode(\"strong\", null, _toDisplayString(_ctx.title), 1)\n    ]),\n    _createElementVNode(\"p\", _hoisted_3, _toDisplayString(_ctx.subtitle), 1)\n  ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n  props: {\n    title: {\n      type: String,\n      required: true,\n    },\n    subtitle: {\n      type: String,\n      required: true,\n    },\n  },\n});\n","import { render } from \"./HeaderInfo.vue?vue&type=template&id=669fdcca&scoped=true&ts=true\"\nimport script from \"./HeaderInfo.vue?vue&type=script&lang=ts\"\nexport * from \"./HeaderInfo.vue?vue&type=script&lang=ts\"\n\nimport \"./HeaderInfo.vue?vue&type=style&index=0&id=669fdcca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-669fdcca\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(\"div\"))\n}","\nimport { defineComponent, PropType, toRefs } from 'vue';\nimport { LngLat, MapLayerMouseEvent } from 'mapbox-gl';\n\nimport { addLayerWithSource, createClusterLayer, MapboxLayer, MapboxSource } from '@/utils/mapbox/map-layers';\nimport { useMapMoveState } from '@/composables/use-map-move-state';\nimport { useMap } from '@/composables/use-map';\nimport { Cluster } from '@/model/map';\nimport logger from '@/utils/logger';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\n\ninterface ClusterSourceData {\n  id: string;\n  count: number;\n}\n\nexport default defineComponent({\n  props: {\n    clusters: {\n      type: Array as PropType<Cluster[]>,\n      default: () => [],\n    },\n    minZoom: {\n      type: Number,\n    },\n    maxZoom: {\n      type: Number,\n    },\n  },\n  setup(props) {\n    const { clusters } = toRefs(props);\n    const { flying, flyTo } = useMapMoveState();\n    const map = useMap();\n    const { isEmbedded } = useEmbeddedState();\n\n    map.on('load', onMapLoad);\n    map.on('mouseenter', MapboxLayer.Cluster, onClusterMouseEnter);\n    map.on('mouseleave', MapboxLayer.Cluster, onClusterMouseLeave);\n    map.on('click', MapboxLayer.Cluster, onClusterClick);\n\n    function onMapLoad() {\n      const clusterLayer = createClusterLayer({ minzoom: props.minZoom, maxzoom: props.maxZoom });\n      addLayerWithSource<Cluster, ClusterSourceData>(map, MapboxSource.Clusters, clusterLayer, clusters, cluster => ({\n        count: cluster.count,\n        id: cluster.id,\n      }));\n    }\n\n    function onClusterMouseEnter(e: MapLayerMouseEvent) {\n      e.target.getCanvas().style.cursor = 'pointer';\n    }\n\n    function onClusterMouseLeave(e: MapLayerMouseEvent) {\n      e.target.getCanvas().style.cursor = '';\n    }\n\n    function onClusterClick(e: MapLayerMouseEvent) {\n      if (flying.value) {\n        return;\n      }\n\n      const geometry = e.features?.[0].geometry;\n\n      if (!geometry || geometry.type !== 'Point') {\n        logger.warn('Clicked cluster does not have valid geometry coordinates, flying to click event position instead');\n        return;\n      }\n\n      logInteractionEvent({\n        event_name: 'heatmap',\n        category: 'map_interaction',\n        interaction_type: 'click',\n        embed: isEmbedded.value,\n      });\n\n      const [lng, lat] = geometry.coordinates;\n      flyTo(e.target, { center: new LngLat(lng, lat) || e.lngLat });\n    }\n  },\n});\n","import { render } from \"./ClusterLayer.vue?vue&type=template&id=18414156&ts=true\"\nimport script from \"./ClusterLayer.vue?vue&type=script&lang=ts\"\nexport * from \"./ClusterLayer.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_Icon = _resolveComponent(\"Icon\")!\n\n  return (_openBlock(), _createBlock(_Transition, { name: \"slide-fade\" }, {\n    default: _withCtx(() => [\n      (_ctx.visible)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 0,\n            onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('click')))\n          }, [\n            _createVNode(_component_Icon, { name: \"zoom-minus\" }),\n            _createElementVNode(\"span\", null, _toDisplayString(_ctx.t('map.resetLocation')), 1)\n          ]))\n        : _createCommentVNode(\"\", true)\n    ]),\n    _: 1\n  }))\n}","\nimport Icon from '@/components/common/Icon.vue';\nimport { defineComponent } from '@vue/runtime-core';\nimport { useI18n } from 'vue-i18n';\n\nexport default defineComponent({\n  name: 'reset-button',\n  components: { Icon },\n  emits: ['click'],\n  props: {\n    visible: {\n      type: Boolean,\n    },\n  },\n  setup() {\n    const { t } = useI18n();\n\n    return { t };\n  },\n});\n","import { render } from \"./ResetButton.vue?vue&type=template&id=98cb5fa4&scoped=true&ts=true\"\nimport script from \"./ResetButton.vue?vue&type=script&lang=ts\"\nexport * from \"./ResetButton.vue?vue&type=script&lang=ts\"\n\nimport \"./ResetButton.vue?vue&type=style&index=0&id=98cb5fa4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-98cb5fa4\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"animation-container\" }\nconst _hoisted_2 = {\n  ref: \"animationEl\",\n  \"data-animation\": \"\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createVNode(_Transition, { name: _ctx.name }, {\n        default: _withCtx(() => [\n          (_ctx.reveal)\n            ? _renderSlot(_ctx.$slots, \"default\", { key: 0 })\n            : _createCommentVNode(\"\", true)\n        ]),\n        _: 3\n      }, 8, [\"name\"])\n    ], 512)\n  ]))\n}","\nimport { defineComponent, nextTick, ref } from 'vue';\n\nimport { DEFAULT_STAGGER_DELAY, setAnimationStaggerTargets } from '@/utils/animation';\nimport { AppError } from '@/services/errors';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\nexport default defineComponent({\n  emits: ['reveal'],\n  props: {\n    reveal: {\n      type: Boolean,\n      required: true,\n    },\n    name: {\n      type: String,\n      default: 'short-fade',\n    },\n    delay: {\n      type: Number,\n      default: 0,\n    },\n    staggerDelay: {\n      type: Number,\n      default: DEFAULT_STAGGER_DELAY,\n    },\n  },\n  setup(props, { emit }) {\n    const animationEl = ref<HTMLDivElement>();\n\n    async function trigger() {\n      const container = animationEl.value;\n\n      if (!container) {\n        throw new AppError('Failed to trigger reveal animation. Missing required animation container element');\n      }\n\n      if (props.delay) {\n        await new Promise(resolve => setTimeout(resolve, props.delay * 1000));\n      }\n\n      setAnimationStaggerTargets(container, props.staggerDelay);\n      container.classList.add('triggered');\n      emit('reveal');\n    }\n\n    watchWhileActive(\n      () => props.reveal,\n      async reveal => {\n        if (reveal) {\n          await nextTick();\n          await trigger();\n        } else {\n          animationEl.value?.classList.remove('triggered');\n        }\n      },\n      { immediate: true },\n    );\n\n    return {\n      animationEl,\n      trigger,\n    };\n  },\n});\n","import { render } from \"./RevealAnimation.vue?vue&type=template&id=9c701e28&ts=true\"\nimport script from \"./RevealAnimation.vue?vue&type=script&lang=ts\"\nexport * from \"./RevealAnimation.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, createElementVNode as _createElementVNode, unref as _unref, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-9343480c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"expedition-list\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"btn-overlay\" }, null, -1))\n\nimport { PropType } from 'vue';\n\nimport RevealAnimation from '@/components/Animation/RevealAnimation.vue';\nimport Image from '@/components/Content/Image.vue';\nimport { ExpeditionLink } from '@/model/expedition';\nimport { useDevice } from '@/composables/use-device';\nimport { logInteractionEvent } from '../../utils/gtm';\n\n\nexport default /*#__PURE__*/_defineComponent({\n  props: {\n  show: {\n    type: Boolean,\n    required: true,\n  },\n  expeditions: {\n    type: Object as PropType<ExpeditionLink[]>,\n    required: true,\n  },\n},\n  emits: ['close', 'click'],\n  setup(__props, { emit }) {\n\n\n\n\n\nconst { isTouchDevice } = useDevice();\n\nfunction click(expeditionTitle: string) {\n  logInteractionEvent({\n    event_name: 'open_expedition',\n    expedition_name: expeditionTitle,\n    interaction_type: 'click',\n    category: 'expedition_list',\n  });\n  emit('click');\n}\n\nreturn (_ctx: any,_cache: any) => {\n  const _component_router_link = _resolveComponent(\"router-link\")!\n\n  return (_openBlock(), _createBlock(RevealAnimation, {\n    reveal: __props.show,\n    \"stagger-delay\": 0.15,\n    delay: 0.1,\n    class: \"expedition-list-container\"\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"ul\", _hoisted_1, [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.expeditions, (expedition) => {\n          return (_openBlock(), _createElementBlock(\"li\", {\n            class: \"expedition-list-item\",\n            key: expedition.url,\n            \"data-animate\": \"slide-left\",\n            \"data-stagger\": \"\"\n          }, [\n            _createVNode(_component_router_link, {\n              to: expedition.url,\n              class: \"expedition-list-item-btn\",\n              onClick: ($event: any) => (click(expedition.title))\n            }, {\n              default: _withCtx(() => [\n                _createVNode(Image, {\n                  class: \"btn-image\",\n                  image: expedition.backgroundImageWithProperties,\n                  width: 600,\n                  \"object-fit\": \"cover\",\n                  fill: \"\"\n                }, null, 8, [\"image\"]),\n                _hoisted_2,\n                _createElementVNode(\"h3\", {\n                  class: _normalizeClass([\"btn-title extra-small-title\", { show: _unref(isTouchDevice) }])\n                }, _toDisplayString(expedition.title), 3)\n              ]),\n              _: 2\n            }, 1032, [\"to\", \"onClick\"])\n          ]))\n        }), 128))\n      ])\n    ]),\n    _: 1\n  }, 8, [\"reveal\", \"stagger-delay\", \"delay\"]))\n}\n}\n\n})","import script from \"./ExpeditionsList.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./ExpeditionsList.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./ExpeditionsList.vue?vue&type=style&index=0&id=9343480c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9343480c\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-44914001\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"intro-overlay\" }\nconst _hoisted_2 = { class: \"intro-overlay-container\" }\nconst _hoisted_3 = { class: \"intro-overlay-content\" }\nconst _hoisted_4 = {\n  class: \"title\",\n  \"data-animate\": \"slide-right\",\n  \"data-stagger\": \"\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" Bekijk onze sponsoren \")\nconst _hoisted_6 = {\n  key: 2,\n  class: \"intro-overlay-partners\"\n}\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/partners/mondriaan.svg\",\n  class: \"partner-logo\",\n  alt: \"Mondriaan Logo\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/partners/sf.svg\",\n  class: \"partner-logo\",\n  alt: \"Stimuleringsfonds Logo\"\n}, null, -1))\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/partners/cultuurparticipatie.svg\",\n  class: \"partner-logo\",\n  alt: \"Fonds voor Cultuurparticipatie Logo\"\n}, null, -1))\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/partners/q42.svg\",\n  class: \"partner-logo\",\n  alt: \"Q42 Logo\"\n}, null, -1))\nconst _hoisted_11 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/partners/fabrique.svg\",\n  class: \"partner-logo\",\n  alt: \"Fabrique Logo\"\n}, null, -1))\nconst _hoisted_12 = [\n  _hoisted_7,\n  _hoisted_8,\n  _hoisted_9,\n  _hoisted_10,\n  _hoisted_11\n]\n\nimport { nextTick, PropType, onMounted, ref } from 'vue';\n\nimport Image from '@/components/Content/Image.vue';\nimport Link from '@/components/common/Link.vue';\nimport RevealAnimation from '@/components/Animation/RevealAnimation.vue';\nimport Panel from '@/components/common/Panel.vue';\nimport AppButton from '@/components/common/AppButton.vue';\nimport ExpeditionsList from '@/components/Map/ExpeditionsList.vue';\nimport { CampaignExpedition, IntroOverlay } from '@/model/map';\nimport { useBranding } from '@/composables/use-branding';\nimport { useModal } from '@/composables/use-modal';\nimport { usePageEvent } from '@/composables/use-page-event';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\nimport { getCachedExpeditionLinks } from '@/services/expedition-service';\nimport { ExpeditionLink } from '@/model/expedition';\nimport { useI18n } from 'vue-i18n';\n\n\nexport default /*#__PURE__*/_defineComponent({\n  props: {\n  data: {\n    type: Object as PropType<IntroOverlay>,\n    required: true,\n  },\n  campaignExpedition: {\n    type: Object as PropType<CampaignExpedition>,\n  },\n  show: {\n    type: Boolean,\n    required: true,\n  },\n  readOnly: {\n    type: Boolean,\n  },\n},\n  emits: ['close'],\n  setup(__props, { emit }) {\n\n\n\n\n\nconst { t } = useI18n();\nconst expeditions = ref<ExpeditionLink[]>([]);\nconst partnersOpened = ref(false);\nconst { brandingInfo } = useBranding();\nconst { containerRef, opened, init, open, close } = useModal(false);\nconst { logInitialPageEvent } = usePageEvent('intro');\nconst { isEmbedded } = useEmbeddedState();\n\nonMounted(async () => {\n  expeditions.value = await getCachedExpeditionLinks();\n});\n\nasync function onReveal() {\n  await nextTick();\n  init();\n\n  logInitialPageEvent();\n\n  setTimeout(open, 750);\n}\n\nfunction onClose() {\n  logInteractionEvent({\n    event_name: 'intro_map',\n    category: 'map_intro',\n    interaction_type: 'click',\n    embed: isEmbedded.value,\n  });\n  close();\n  emit('close');\n}\n\nreturn (_ctx: any,_cache: any) => {\n  const _component_Icon = _resolveComponent(\"Icon\")!\n\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"modal-container\",\n    ref_key: \"containerRef\",\n    ref: containerRef,\n    \"aria-hidden\": \"true\"\n  }, [\n    _createVNode(RevealAnimation, {\n      reveal: __props.show,\n      name: \"intro-overlay\",\n      \"stagger-delay\": 0.15,\n      delay: 0.5,\n      onReveal: onReveal\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"div\", _hoisted_1, [\n          _createElementVNode(\"div\", _hoisted_2, [\n            (_unref(brandingInfo))\n              ? (_openBlock(), _createBlock(Image, {\n                  key: 0,\n                  class: \"logo\",\n                  \"data-animate\": \"slide-right\",\n                  \"data-stagger\": \"\",\n                  image: _unref(brandingInfo).logoLarge\n                }, null, 8, [\"image\"]))\n              : _createCommentVNode(\"\", true),\n            _createElementVNode(\"div\", _hoisted_3, [\n              (__props.campaignExpedition)\n                ? (_openBlock(), _createBlock(Link, {\n                    key: 0,\n                    class: \"intro-overlay-campaign\",\n                    link: __props.campaignExpedition.link,\n                    \"data-animate\": \"slide-right\",\n                    \"data-stagger\": \"\"\n                  }, {\n                    default: _withCtx(() => [\n                      _createVNode(Image, {\n                        image: __props.campaignExpedition.image,\n                        width: 400,\n                        \"object-fit\": \"contain\"\n                      }, null, 8, [\"image\"])\n                    ]),\n                    _: 1\n                  }, 8, [\"link\"]))\n                : _createCommentVNode(\"\", true),\n              _createElementVNode(\"h1\", _hoisted_4, _toDisplayString(__props.data.title), 1),\n              (!__props.readOnly)\n                ? (_openBlock(), _createBlock(AppButton, {\n                    key: 1,\n                    onClick: onClose,\n                    label: _unref(t)('intro.openMapButton'),\n                    \"data-animate\": \"slide-right\",\n                    \"data-stagger\": \"\"\n                  }, null, 8, [\"label\"]))\n                : _createCommentVNode(\"\", true)\n            ]),\n            (!partnersOpened.value)\n              ? (_openBlock(), _createElementBlock(\"button\", {\n                  key: 1,\n                  class: \"intro-overlay-partners-toggle\",\n                  \"data-animate\": \"slide-right\",\n                  \"data-stagger\": \"\",\n                  onClick: _cache[0] || (_cache[0] = ($event: any) => (partnersOpened.value = true))\n                }, [\n                  _hoisted_5,\n                  _createVNode(_component_Icon, { name: \"arrow\" })\n                ]))\n              : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, _hoisted_12))\n          ])\n        ])\n      ]),\n      _: 1\n    }, 8, [\"reveal\", \"stagger-delay\", \"delay\"]),\n    _createVNode(Panel, {\n      class: \"map-navigation-panel\",\n      opened: _unref(opened),\n      \"no-close\": \"\",\n      light: \"\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"h2\", null, _toDisplayString(__props.data.expeditionTitle), 1),\n        _createVNode(ExpeditionsList, {\n          expeditions: expeditions.value,\n          show: \"\"\n        }, null, 8, [\"expeditions\"])\n      ]),\n      _: 1\n    }, 8, [\"opened\"])\n  ], 512))\n}\n}\n\n})","import script from \"./IntroOverlay.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./IntroOverlay.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./IntroOverlay.vue?vue&type=style&index=0&id=44914001&lang=scss&scoped=true\"\nimport \"./IntroOverlay.vue?vue&type=style&index=1&id=44914001&lang=scss\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-44914001\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-16021462\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"aria-label\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_Icon = _resolveComponent(\"Icon\")!\n  const _component_RoundedBar = _resolveComponent(\"RoundedBar\")!\n  const _component_Searchbar = _resolveComponent(\"Searchbar\")!\n\n  return (_openBlock(), _createElementBlock(\"div\", null, [\n    (_ctx.isMobile && !_ctx.openedMobile)\n      ? (_openBlock(), _createBlock(_component_RoundedBar, {\n          key: 0,\n          class: \"mobile-search\"\n        }, {\n          default: _withCtx(() => [\n            _createElementVNode(\"button\", {\n              class: \"mobile-search-btn\",\n              onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.openSearchMobile && _ctx.openSearchMobile(...args))),\n              \"aria-label\": _ctx.t('map.menu.search.openSearchLabel')\n            }, [\n              _createVNode(_component_Icon, { name: \"search\" })\n            ], 8, _hoisted_1)\n          ]),\n          _: 1\n        }))\n      : _createCommentVNode(\"\", true),\n    (!_ctx.isMobile || _ctx.openedMobile)\n      ? (_openBlock(), _createBlock(_component_Searchbar, {\n          key: 1,\n          class: _normalizeClass({ 'search-bar-mobile': _ctx.isMobile }),\n          ref: \"searchbarRef\",\n          \"quick-links\": _ctx.quickLinks,\n          onFocus: _ctx.openSearchMobile,\n          onBlur: _ctx.closeSearchMobile\n        }, null, 8, [\"class\", \"quick-links\", \"onFocus\", \"onBlur\"]))\n      : _createCommentVNode(\"\", true)\n  ]))\n}","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, withModifiers as _withModifiers, withCtx as _withCtx, Transition as _Transition, resolveDirective as _resolveDirective, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-fbae1c5e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"search-bar-input-wrapper\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"search-bar-placeholder\"\n}\nconst _hoisted_3 = {\n  class: \"search-bar-btn\",\n  type: \"submit\"\n}\nconst _hoisted_4 = [\"disabled\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_SearchbarPlaceholderAnimation = _resolveComponent(\"SearchbarPlaceholderAnimation\")!\n  const _component_Spinner = _resolveComponent(\"Spinner\")!\n  const _component_Icon = _resolveComponent(\"Icon\")!\n  const _component_RoundedBar = _resolveComponent(\"RoundedBar\")!\n  const _component_SearchSuggestionsMenu = _resolveComponent(\"SearchSuggestionsMenu\")!\n  const _directive_click_outside = _resolveDirective(\"click-outside\")!\n\n  return _withDirectives((_openBlock(), _createElementBlock(\"div\", null, [\n    _createVNode(_component_RoundedBar, null, {\n      default: _withCtx(() => [\n        _createElementVNode(\"form\", {\n          class: \"search-bar\",\n          onSubmit: _cache[2] || (_cache[2] = _withModifiers(\n//@ts-ignore\n(...args) => (_ctx.onSubmit && _ctx.onSubmit(...args)), [\"prevent\"]))\n        }, [\n          _createElementVNode(\"div\", _hoisted_1, [\n            _withDirectives(_createElementVNode(\"input\", {\n              class: \"search-bar-input\",\n              onFocus: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.onSearchFocus && _ctx.onSearchFocus(...args))),\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.searchValue) = $event)),\n              ref: \"inputRef\"\n            }, null, 544), [\n              [_vModelText, _ctx.searchValue]\n            ]),\n            (_ctx.showPlaceholder)\n              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n                  _createVNode(_component_SearchbarPlaceholderAnimation, { placeholders: _ctx.quickLinks }, null, 8, [\"placeholders\"])\n                ]))\n              : _createCommentVNode(\"\", true)\n          ]),\n          _createElementVNode(\"button\", _hoisted_3, [\n            (_ctx.loading || _ctx.loadingSearchResults)\n              ? (_openBlock(), _createBlock(_component_Spinner, {\n                  key: 0,\n                  class: \"search-bar-btn-spinner\",\n                  black: \"\",\n                  large: \"\"\n                }))\n              : (_openBlock(), _createBlock(_component_Icon, {\n                  key: 1,\n                  name: \"search\"\n                }))\n          ]),\n          _createElementVNode(\"button\", {\n            class: \"search-bar-btn\",\n            disabled: _ctx.loading || _ctx.loadingSearchResults || !_ctx.searchValue\n          }, [\n            _createVNode(_component_Icon, {\n              name: \"close-alt\",\n              \"aria-label\": _ctx.t('map.menu.search.clearSearchLabel'),\n              onClick: _ctx.onSearchReset\n            }, null, 8, [\"aria-label\", \"onClick\"])\n          ], 8, _hoisted_4)\n        ], 32)\n      ]),\n      _: 1\n    }),\n    _createVNode(_Transition, { name: \"short-fade\" }, {\n      default: _withCtx(() => [\n        (_ctx.inputFocussed || _ctx.showSearchSuggestions)\n          ? (_openBlock(), _createBlock(_component_SearchSuggestionsMenu, {\n              key: 0,\n              suggestions: _ctx.quickLinks,\n              onClose: _ctx.onSearchBlur\n            }, null, 8, [\"suggestions\", \"onClose\"]))\n          : _createCommentVNode(\"\", true)\n      ]),\n      _: 1\n    })\n  ])), [\n    [_directive_click_outside, _ctx.onSearchBlur]\n  ])\n}","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, Fragment as _Fragment } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    (_ctx.currentIndex !== -1)\n      ? (_openBlock(), _createElementBlock(\"span\", {\n          key: 0,\n          ref: \"placeholderRef\",\n          class: \"placeholder\"\n        }, _toDisplayString(_ctx.placeholder), 513))\n      : _createCommentVNode(\"\", true),\n    _createElementVNode(\"span\", {\n      \"aria-hidden\": \"true\",\n      ref: \"prototypePlaceholderRef\",\n      class: \"placeholder placeholder-prototype\"\n    }, _toDisplayString(_ctx.placeholder), 513)\n  ], 64))\n}","\nimport { defineComponent, nextTick, onActivated, onDeactivated, onMounted, PropType, ref } from 'vue';\nimport _shuffle from 'lodash/shuffle';\n\nimport { useDevice } from '@/composables/use-device';\nimport { useDimensions } from '@/composables/use-dimensions';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\nexport default defineComponent({\n  props: {\n    placeholders: {\n      type: Array as PropType<string[]>,\n      required: true,\n    },\n  },\n  setup(props) {\n    const placeholder = ref('');\n    const currentIndex = ref(-1);\n    const placeholderRef = ref<HTMLSpanElement>(); // the actual search input placeholder element\n    const prototypePlaceholderRef = ref<HTMLSpanElement>(); // invisible copy of the search input placeholder element\n    const animationInterval = ref(0);\n\n    const { prefersReducedMotion } = useDevice();\n    const { isMobile } = useDimensions();\n\n    const ANIMATION_DURATION = 2800;\n\n    let shuffledPlaceholders: string[] = [];\n\n    onMounted(startPlaceholderAnimation);\n    onActivated(startPlaceholderAnimation);\n    onDeactivated(stopPlaceholderAnimation);\n\n    function stopPlaceholderAnimation() {\n      if (animationInterval.value) {\n        clearInterval(animationInterval.value);\n        animationInterval.value = 0;\n        currentIndex.value = -1;\n      }\n    }\n\n    function startPlaceholderAnimation() {\n      if (isMobile.value || animationInterval.value) {\n        return;\n      }\n\n      shuffledPlaceholders = _shuffle(props.placeholders);\n\n      function nextPlaceholder() {\n        currentIndex.value = currentIndex.value >= shuffledPlaceholders.length - 1 ? 0 : currentIndex.value + 1;\n      }\n\n      animationInterval.value = window.setInterval(nextPlaceholder, 8000);\n      nextPlaceholder();\n    }\n\n    watchWhileActive(\n      currentIndex,\n      async index => {\n        await nextTick();\n        const currentPlaceholder = shuffledPlaceholders[index];\n\n        if (!currentPlaceholder || !placeholderRef.value) {\n          return;\n        }\n\n        const animationTimePerCharacter = ANIMATION_DURATION / currentPlaceholder.length;\n        let characterIteration = 1;\n\n        function updateSearchSuggestionWidth(value?: number) {\n          if (!placeholderRef.value) return;\n\n          if (typeof value === 'number') {\n            return (placeholderRef.value.style.width = `${value}px`);\n          }\n\n          // get the width of the prototype element, then use it to set the animated suggestion width\n          const newWidth = prototypePlaceholderRef.value?.clientWidth;\n          placeholderRef.value.style.width = typeof newWidth === 'number' ? `${newWidth}px` : 'auto';\n        }\n\n        async function typeSuggestion() {\n          if (prefersReducedMotion()) {\n            placeholder.value = currentPlaceholder;\n\n            setTimeout(() => {\n              if (placeholderRef.value) {\n                placeholderRef.value.style.opacity = '1';\n              }\n            }, 400);\n\n            return;\n          }\n\n          for (let i = 0; i < currentPlaceholder.length; i++) {\n            setTimeout(async () => {\n              placeholder.value += currentPlaceholder[i];\n\n              await nextTick();\n              updateSearchSuggestionWidth();\n            }, animationTimePerCharacter * characterIteration);\n\n            characterIteration++;\n          }\n        }\n\n        if (!prefersReducedMotion()) {\n          updateSearchSuggestionWidth(0);\n        }\n\n        if (prefersReducedMotion() && placeholderRef.value) {\n          placeholderRef.value.style.opacity = '0';\n        }\n\n        setTimeout(() => {\n          if (!prefersReducedMotion()) {\n            placeholder.value = '';\n          }\n\n          typeSuggestion();\n        }, 200);\n      },\n      { immediate: true },\n    );\n\n    return {\n      placeholder,\n      placeholderRef,\n      prototypePlaceholderRef,\n      currentIndex,\n    };\n  },\n});\n","import { render } from \"./SearchbarPlaceholderAnimation.vue?vue&type=template&id=5dfaad6a&scoped=true&ts=true\"\nimport script from \"./SearchbarPlaceholderAnimation.vue?vue&type=script&lang=ts\"\nexport * from \"./SearchbarPlaceholderAnimation.vue?vue&type=script&lang=ts\"\n\nimport \"./SearchbarPlaceholderAnimation.vue?vue&type=style&index=0&id=5dfaad6a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5dfaad6a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-33e8dece\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"search-suggestions-wrapper\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"empty-container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"title\" }, \"\\\\ (0_0) /\", -1))\nconst _hoisted_4 = { class: \"paragraph-title\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_SearchSuggestions = _resolveComponent(\"SearchSuggestions\")!\n\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    (\n        _ctx.searchValue &&\n        _ctx.searchSuggestions &&\n        !_ctx.searchSuggestions?.collections.length &&\n        !_ctx.searchSuggestions?.occurrences.length\n      )\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n          _hoisted_3,\n          _createElementVNode(\"h2\", _hoisted_4, _toDisplayString(_ctx.t('map.menu.search.noSuggestionsFound')), 1)\n        ]))\n      : _createCommentVNode(\"\", true),\n    (_ctx.searchValue && _ctx.searchSuggestions?.collections.length)\n      ? (_openBlock(), _createBlock(_component_SearchSuggestions, {\n          key: 1,\n          title: _ctx.t('map.menu.search.collectionSuggestions'),\n          suggestions: _ctx.searchSuggestions.collections,\n          onSelectSuggestion: _ctx.onSuggestionSelect\n        }, null, 8, [\"title\", \"suggestions\", \"onSelectSuggestion\"]))\n      : _createCommentVNode(\"\", true),\n    (_ctx.searchValue && _ctx.searchSuggestions?.occurrences.length)\n      ? (_openBlock(), _createBlock(_component_SearchSuggestions, {\n          key: 2,\n          title: _ctx.t('map.menu.search.occurrenceSuggestions'),\n          suggestions: _ctx.searchSuggestions.occurrences,\n          onSelectSuggestion: _ctx.onSuggestionSelect\n        }, null, 8, [\"title\", \"suggestions\", \"onSelectSuggestion\"]))\n      : _createCommentVNode(\"\", true),\n    ((!_ctx.searchSuggestions?.collections.length && !_ctx.searchSuggestions?.occurrences.length) || !_ctx.searchValue.length)\n      ? (_openBlock(), _createBlock(_component_SearchSuggestions, {\n          key: 3,\n          title: _ctx.t('map.menu.search.quickLinks'),\n          \"hide-title\": \n        _ctx.searchSuggestions && !_ctx.searchSuggestions?.collections.length && !_ctx.searchSuggestions?.occurrences.length\n      ,\n          suggestions: _ctx.suggestions,\n          onSelectSuggestion: _cache[0] || (_cache[0] = value => _ctx.onSuggestionSelect(value, 'quicklink'))\n        }, null, 8, [\"title\", \"hide-title\", \"suggestions\"]))\n      : _createCommentVNode(\"\", true)\n  ]))\n}","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-28b28250\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n  class: \"search-suggestions\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_2 = { key: 0 }\nconst _hoisted_3 = {\n  key: 1,\n  class: \"empty-container\"\n}\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"h1\", null, \"\\\\ (0_0) /\", -1))\nconst _hoisted_5 = [\"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    (_ctx.suggestions.length && !_ctx.hideTitle)\n      ? (_openBlock(), _createElementBlock(\"h4\", _hoisted_2, _toDisplayString(_ctx.title), 1))\n      : (!_ctx.hideTitle)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            _hoisted_4,\n            _createElementVNode(\"h4\", null, _toDisplayString(_ctx.emptyText), 1)\n          ]))\n        : _createCommentVNode(\"\", true),\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.suggestions, (suggestion) => {\n      return (_openBlock(), _createElementBlock(\"button\", {\n        onClick: _withModifiers(($event: any) => (_ctx.$emit('select-suggestion', suggestion)), [\"prevent\",\"stop\"]),\n        key: suggestion,\n        \"data-suggestion\": \"\"\n      }, _toDisplayString(suggestion), 9, _hoisted_5))\n    }), 128))\n  ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n  name: 'search-suggestions',\n  emits: ['select-suggestion'],\n  props: {\n    suggestions: {\n      type: Array,\n    },\n    title: {\n      type: String,\n      required: true,\n    },\n    emptyText: {\n      type: String,\n    },\n    hideTitle: {\n      type: Boolean,\n    },\n  },\n});\n","import { render } from \"./SearchSuggestions.vue?vue&type=template&id=28b28250&scoped=true&ts=true\"\nimport script from \"./SearchSuggestions.vue?vue&type=script&lang=ts\"\nexport * from \"./SearchSuggestions.vue?vue&type=script&lang=ts\"\n\nimport \"./SearchSuggestions.vue?vue&type=style&index=0&id=28b28250&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28b28250\"]])\n\nexport default __exports__","import { SearchSuggestionsResponse } from '@/model/content';\nimport { BASE_URL, request } from '@/services/api';\n\n/**\n * Fetches search suggestions\n * @returns {Promise<SearchSuggestionsResponse>} - Branding api response\n * @param {SearchSuggestionsParams} data - data containing the query param\n */\n\ninterface SearchSuggestionsParams {\n  query: string;\n}\n\nexport async function getSearchSuggestions(data: SearchSuggestionsParams): Promise<SearchSuggestionsResponse> {\n  const response = await request<SearchSuggestionsResponse>(`${BASE_URL}/search/suggest`, { method: 'post', data });\n  return response.data;\n}\n","\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport _debounce from 'lodash/debounce';\n\nimport SearchSuggestions from '@/components/Search/SearchSuggestions.vue';\nimport { MenuPanelTabs } from '@/model/content';\nimport { getSearchSuggestions } from '@/services/search-service';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useSearchQuery } from '@/composables/use-search-query';\nimport { useDimensions } from '@/composables/use-dimensions';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\ninterface ISearchSuggestions {\n  collections: string[];\n  occurrences: string[];\n}\n\nexport default defineComponent({\n  components: {\n    SearchSuggestions,\n  },\n  props: {\n    suggestions: {\n      type: Array as PropType<string[]>,\n      default: () => [],\n    },\n  },\n  setup(props, { emit }) {\n    const searchSuggestions = ref<ISearchSuggestions | null>(null);\n    const loadingSuggestions = ref(false);\n    const hideSuggestionsContainer = ref(false);\n    const { t } = useI18n();\n    const { isMobile } = useDimensions();\n    const { searchValue, submitSearchValue, loadingSearchResults } = useSearchQuery();\n    const { isEmbedded } = useEmbeddedState();\n\n    const fetchSuggestions = _debounce(runGetSearchSuggestions, 250);\n\n    onMounted(() => {\n      if (searchValue.value) {\n        fetchSuggestions(searchValue.value);\n        loadingSuggestions.value = true;\n      }\n    });\n\n    async function runGetSearchSuggestions(query: string) {\n      const { collectionNames, occurrenceNames } = await getSearchSuggestions({ query });\n\n      loadingSuggestions.value = false;\n\n      if (!searchValue.value) {\n        return;\n      }\n\n      searchSuggestions.value = {\n        collections: collectionNames,\n        occurrences: occurrenceNames,\n      };\n    }\n\n    function onSuggestionSelect(suggestion: string, type: string) {\n      logInteractionEvent({\n        event_name: `search_${type}`,\n        category: 'search',\n        interaction_type: 'click',\n        title: suggestion,\n        input: searchValue.value,\n        embed: isEmbedded.value,\n      });\n\n      searchValue.value = suggestion;\n      emit('close');\n      submitSearchValue();\n    }\n\n    watchWhileActive(searchValue, value => {\n      if (!value) {\n        searchSuggestions.value = null;\n        return;\n      }\n\n      fetchSuggestions(value);\n      loadingSuggestions.value = true;\n    });\n\n    return {\n      t,\n      loadingSuggestions,\n      searchSuggestions,\n      searchValue,\n      loadingSearchResults,\n      hideSuggestionsContainer,\n      isMobile,\n      onSuggestionSelect,\n      MenuPanelTabs,\n    };\n  },\n});\n","import { render } from \"./SearchSuggestionsMenu.vue?vue&type=template&id=33e8dece&scoped=true&ts=true\"\nimport script from \"./SearchSuggestionsMenu.vue?vue&type=script&lang=ts\"\nexport * from \"./SearchSuggestionsMenu.vue?vue&type=script&lang=ts\"\n\nimport \"./SearchSuggestionsMenu.vue?vue&type=style&index=0&id=33e8dece&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-33e8dece\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport SearchbarPlaceholderAnimation from '@/components/Search/SearchbarPlaceholderAnimation.vue';\nimport SearchSuggestionsMenu from '@/components/Search/SearchSuggestionsMenu.vue';\nimport Spinner from '@/components/common/Spinner.vue';\nimport RoundedBar from '@/components/common/RoundedBar.vue';\nimport { useSearchQuery } from '@/composables/use-search-query';\nimport { useDimensions } from '@/composables/use-dimensions';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useDevice } from '@/composables/use-device';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\n\nexport default defineComponent({\n  emits: ['focus', 'blur'],\n  components: {\n    SearchbarPlaceholderAnimation,\n    SearchSuggestionsMenu,\n    Spinner,\n    RoundedBar,\n  },\n  props: {\n    quickLinks: {\n      type: Array as PropType<string[]>,\n      default: () => [],\n    },\n    loading: {\n      type: Boolean,\n    },\n  },\n  setup(props, { emit }) {\n    const { searchValue, submittedSearchValue, submitSearchValue, loadingSearchResults } = useSearchQuery();\n    const showSearchSuggestions = ref(false);\n    const maxSearchbarWidth = ref(800);\n    const inputRef = ref<HTMLInputElement>();\n    const inputFocussed = ref(false);\n    const { t } = useI18n();\n    const { isTablet } = useDimensions();\n    const { tabVisible } = useDevice();\n    const { isEmbedded } = useEmbeddedState();\n\n    // The placeholder should only be showed if:\n    const showPlaceholder = computed(\n      () =>\n        !inputFocussed.value && // there is no focus\n        !searchValue.value && // no current input value\n        !(!searchValue.value && submittedSearchValue.value) && // no current input value, but a valid submitted value\n        !isTablet.value && // is a desktop device\n        tabVisible.value, // the browser tab is visible\n    );\n\n    function onSearchFocus() {\n      emit('focus');\n      showSearchSuggestions.value = true;\n      inputFocussed.value = true;\n\n      logInteractionEvent({\n        event_name: 'search_input',\n        category: 'search',\n        interaction_type: 'click',\n        embed: isEmbedded.value,\n      });\n    }\n\n    function onSearchBlur() {\n      emit('blur');\n      showSearchSuggestions.value = false;\n      inputFocussed.value = false;\n    }\n\n    async function onSubmit() {\n      submitSearchValue();\n      onSearchBlur();\n    }\n\n    function onSearchReset() {\n      searchValue.value = '';\n      submitSearchValue();\n    }\n\n    return {\n      searchValue,\n      onSearchBlur,\n      onSearchFocus,\n      showSearchSuggestions,\n      inputFocussed,\n      inputRef,\n      onSearchReset,\n      onSubmit,\n      showPlaceholder,\n      loadingSearchResults,\n      maxSearchbarWidth,\n      t,\n    };\n  },\n});\n","import { render } from \"./Searchbar.vue?vue&type=template&id=fbae1c5e&scoped=true&ts=true\"\nimport script from \"./Searchbar.vue?vue&type=script&lang=ts\"\nexport * from \"./Searchbar.vue?vue&type=script&lang=ts\"\n\nimport \"./Searchbar.vue?vue&type=style&index=0&id=fbae1c5e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fbae1c5e\"]])\n\nexport default __exports__","\nimport { defineComponent, nextTick, PropType, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport Searchbar from '@/components/Search/Searchbar.vue';\nimport RoundedBar from '@/components/common/RoundedBar.vue';\nimport { MenuPanelTabs } from '@/model/content';\nimport { useDimensions } from '@/composables/use-dimensions';\n\nexport default defineComponent({\n  components: {\n    Searchbar,\n    RoundedBar,\n  },\n  props: {\n    openedMobile: {\n      type: Boolean,\n      required: true,\n    },\n    quickLinks: {\n      type: Array as PropType<string[]>,\n      default: () => [],\n    },\n  },\n  emits: ['open', 'close'],\n  setup(props, { emit }) {\n    const searchbarRef = ref<InstanceType<typeof Searchbar>>();\n    const menuOpened = ref(false);\n    const inputFocussed = ref(false);\n    const { isMobile } = useDimensions();\n\n    const { t } = useI18n();\n\n    async function openSearchMobile() {\n      emit('open');\n      await nextTick();\n      searchbarRef.value?.inputRef?.focus();\n    }\n\n    function closeSearchMobile() {\n      emit('close');\n    }\n\n    return {\n      t,\n      menuOpened,\n      searchbarRef,\n      inputFocussed,\n      isMobile,\n      openSearchMobile,\n      closeSearchMobile,\n      MenuPanelTabs,\n    };\n  },\n});\n","import { render } from \"./SearchMenu.vue?vue&type=template&id=16021462&scoped=true&ts=true\"\nimport script from \"./SearchMenu.vue?vue&type=script&lang=ts\"\nexport * from \"./SearchMenu.vue?vue&type=script&lang=ts\"\n\nimport \"./SearchMenu.vue?vue&type=style&index=0&id=16021462&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-16021462\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-650eec27\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"panel-title extra-small-title\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_Icon = _resolveComponent(\"Icon\")!\n  const _component_ExpeditionsList = _resolveComponent(\"ExpeditionsList\")!\n  const _component_Challenges = _resolveComponent(\"Challenges\")!\n  const _component_Panel = _resolveComponent(\"Panel\")!\n\n  return (_openBlock(), _createBlock(_component_Panel, {\n    class: \"map-navigation-panel\",\n    opened: _ctx.opened,\n    \"mobile-bottom\": false,\n    light: \"\",\n    onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('close')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"h2\", _hoisted_1, _toDisplayString(_ctx.t('map.menu.panelTitle')), 1),\n      _createElementVNode(\"div\", {\n        class: _normalizeClass([\"map-navigation-panel-menu\", { 'second-active': _ctx.showChallengesTab }])\n      }, [\n        _createElementVNode(\"button\", {\n          class: \"map-navigation-panel-menu-btn label\",\n          onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.switchTab(_ctx.MenuPanelTabs.Expeditions)))\n        }, [\n          _createVNode(_component_Icon, { name: \"expedition\" }),\n          _createTextVNode(\" \" + _toDisplayString(_ctx.t('navigation.expeditions')), 1)\n        ]),\n        _createElementVNode(\"button\", {\n          class: _normalizeClass([\"map-navigation-panel-menu-btn label challenges\", { active: _ctx.showChallengesTab, 'open-challenges': !_ctx.allChallengesCompleted }]),\n          onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.switchTab(_ctx.MenuPanelTabs.Challenges)))\n        }, [\n          _createVNode(_component_Icon, { name: \"challenges\" }),\n          _createTextVNode(\" \" + _toDisplayString(_ctx.t('navigation.challenges')), 1)\n        ], 2)\n      ], 2),\n      (_ctx.showExpeditionTab)\n        ? (_openBlock(), _createBlock(_component_ExpeditionsList, {\n            key: 0,\n            show: _ctx.showExpeditionTab,\n            expeditions: _ctx.expeditions,\n            onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.$emit('close')))\n          }, null, 8, [\"show\", \"expeditions\"]))\n        : _createCommentVNode(\"\", true),\n      (_ctx.showChallengesTab)\n        ? (_openBlock(), _createBlock(_component_Challenges, {\n            key: 1,\n            show: _ctx.showChallengesTab,\n            challenges: _ctx.challenges,\n            settings: _ctx.challengesSettings,\n            onFinishedChallenges: _ctx.finishedChallenges\n          }, null, 8, [\"show\", \"challenges\", \"settings\", \"onFinishedChallenges\"]))\n        : _createCommentVNode(\"\", true)\n    ]),\n    _: 1\n  }, 8, [\"opened\"]))\n}","import { cmsRequest } from '@/services/api';\nimport { ChallengesInfo } from '@/model/menu';\n\nlet cachedChallengesInfo: ChallengesInfo;\n/**\n * Fetches challenges\n * @returns {Promise<ChallengesInfo>} - challenges api response\n */\nexport async function getChallengesInfo(): Promise<ChallengesInfo> {\n  const challengesInfo = await cmsRequest<ChallengesInfo>('/challenges', { method: 'get' });\n  cachedChallengesInfo = challengesInfo.data;\n  return challengesInfo.data;\n}\n\nexport async function getCachedChallengesInfo(): Promise<ChallengesInfo> {\n  return cachedChallengesInfo || getChallengesInfo();\n}\n","<template>\n  <svg\n    class=\"eNjfbmy5lMx1\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    viewBox=\"0 0 29 37\"\n    shape-rendering=\"geometricPrecision\"\n    text-rendering=\"geometricPrecision\">\n    <g class=\"eNjfbmy5lMx2_tr\" transform=\"translate(21.631239,21.445633) rotate(0)\">\n      <g class=\"eNjfbmy5lMx2\" transform=\"translate(-21.631239,-20.445631)\">\n        <path\n          class=\"eNjfbmy5lMx3\"\n          d=\"M23.8414,0C22.6876,0.000001,21.5809,0.458186,20.765,1.27376C19.9491,2.08932,19.4907,3.19547,19.4907,4.34886C19.4907,6.75067,23.8414,14.6376,23.8414,14.6376C23.8414,14.6376,28.1922,6.75067,28.1922,4.34886C28.1922,3.19547,27.7338,2.08932,26.9179,1.27376C26.1019,0.458186,24.9953,0.000001,23.8414,0ZM23.8414,6.47026C23.4427,6.47026,23.0529,6.35207,22.7213,6.13062C22.3897,5.90917,22.1313,5.59442,21.9787,5.22616C21.8261,4.85791,21.7862,4.45269,21.864,4.06175C21.9418,3.67082,22.1338,3.31172,22.4158,3.02987C22.6977,2.74802,23.057,2.55608,23.4481,2.47832C23.8392,2.40055,24.2446,2.44047,24.613,2.59301C24.9814,2.74554,25.2963,3.00385,25.5178,3.33527C25.7394,3.66669,25.8576,4.05633,25.8576,4.45493C25.8576,4.71959,25.8055,4.98165,25.7042,5.22617C25.6028,5.47068,25.4543,5.69285,25.2671,5.87999C25.0799,6.06713,24.8576,6.21558,24.613,6.31686C24.3684,6.41814,24.1062,6.47027,23.8414,6.47026Z\"\n          transform=\"matrix(1 0 0 1 -0.15855 0)\"\n          fill=\"rgb(244,41,45)\"\n          stroke=\"none\"\n          stroke-width=\"1\" />\n        <path\n          class=\"eNjfbmy5lMx4\"\n          d=\"M24.4117,17.87C25.2977,15.5528,25.4261,13.4489,24.6983,13.1709C23.9705,12.8928,22.6623,14.5459,21.7762,16.8631C20.8902,19.1803,20.7618,21.2842,21.4896,21.5622C22.2173,21.8403,23.5256,20.1872,24.4117,17.87Z\"\n          transform=\"matrix(1 0 0 1 0 0.000002)\"\n          fill=\"rgb(47,46,65)\"\n          stroke=\"none\"\n          stroke-width=\"1\" />\n      </g>\n    </g>\n    <path\n      class=\"eNjfbmy5lMx5\"\n      d=\"M14.7875,33.1337C19.7511,33.1337,23.7748,29.1117,23.7748,24.1503C23.7748,19.1889,19.7511,15.1669,14.7875,15.1669C9.82402,15.1669,5.80029,19.1889,5.80029,24.1503C5.80029,29.1117,9.82402,33.1337,14.7875,33.1337Z\"\n      fill=\"rgb(47,46,65)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <path\n      class=\"eNjfbmy5lMx6\"\n      d=\"M13.4222,31.2006L10.6919,31.2006L10.6919,36.0903L13.4222,36.0903L13.4222,31.2006Z\"\n      fill=\"rgb(47,46,65)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <path\n      class=\"eNjfbmy5lMx7\"\n      d=\"M18.8826,31.2006L16.1523,31.2006L16.1523,36.0903L18.8826,36.0903L18.8826,31.2006Z\"\n      fill=\"rgb(47,46,65)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <path\n      class=\"eNjfbmy5lMx8\"\n      d=\"M12.9672,37C14.2237,37,15.2424,36.6182,15.2424,36.1472C15.2424,35.6761,14.2237,35.2943,12.9672,35.2943C11.7106,35.2943,10.6919,35.6761,10.6919,36.1472C10.6919,36.6182,11.7106,37,12.9672,37Z\"\n      fill=\"rgb(47,46,65)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <path\n      class=\"eNjfbmy5lMx9\"\n      d=\"M18.4276,36.8863C19.6842,36.8863,20.7029,36.5044,20.7029,36.0334C20.7029,35.5624,19.6842,35.1806,18.4276,35.1806C17.171,35.1806,16.1523,35.5624,16.1523,36.0334C16.1523,36.5044,17.171,36.8863,18.4276,36.8863Z\"\n      fill=\"rgb(47,46,65)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <path\n      class=\"eNjfbmy5lMx10\"\n      d=\"M15.0146,22.8994C15.5801,22.8994,16.0385,22.4412,16.0385,21.876C16.0385,21.3108,15.5801,20.8526,15.0146,20.8526C14.4491,20.8526,13.9907,21.3108,13.9907,21.876C13.9907,22.4412,14.4491,22.8994,15.0146,22.8994Z\"\n      fill=\"rgb(63,61,86)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n    <g class=\"eNjfbmy5lMx11_tr\" transform=\"translate(7.533645,21.562554) rotate(0)\">\n      <path\n        class=\"eNjfbmy5lMx11\"\n        d=\"M8.72477,21.9068C9.05863,21.2031,7.51151,19.771,5.26916,18.7079C3.02682,17.6449,0.938387,17.3535,0.60452,18.0571C0.270653,18.7608,1.81778,20.193,4.06012,21.256C6.30247,22.3191,8.3909,22.6104,8.72477,21.9068Z\"\n        transform=\"translate(-7.533645,-21.562552)\"\n        fill=\"rgb(47,46,65)\"\n        stroke=\"none\"\n        stroke-width=\"1\" />\n    </g>\n    <path\n      class=\"eNjfbmy5lMx12\"\n      d=\"M10.373,27.3911C10.373,28.2704,12.6379,30.0066,15.1511,30.0066C17.6643,30.0066,20.0206,27.5312,20.0206,26.652C20.0206,25.7728,17.6643,26.8226,15.1511,26.8226C12.6379,26.8226,10.373,26.5119,10.373,27.3911Z\"\n      fill=\"rgb(255,255,255)\"\n      stroke=\"none\"\n      stroke-width=\"1\" />\n  </svg>\n</template>\n<style>\n.eNjfbmy5lMx2_tr {\n  animation: eNjfbmy5lMx2_tr__tr 3000ms linear 1 normal forwards;\n}\n\n@keyframes eNjfbmy5lMx2_tr__tr {\n  0% {\n    transform: translate(21.631239px, 21.445633px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  16.666667% {\n    transform: translate(21.631239px, 21.445633px) rotate(-20deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  33.333333% {\n    transform: translate(21.631239px, 21.445633px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  50% {\n    transform: translate(21.631239px, 21.445633px) rotate(-20deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  66.666667% {\n    transform: translate(21.631239px, 21.445633px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  83.333333% {\n    transform: translate(21.631239px, 21.445633px) rotate(-20deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  100% {\n    transform: translate(21.631239px, 21.445633px) rotate(0deg);\n  }\n}\n\n.eNjfbmy5lMx11_tr {\n  animation: eNjfbmy5lMx11_tr__tr 3000ms linear 1 normal forwards;\n}\n\n@keyframes eNjfbmy5lMx11_tr__tr {\n  0% {\n    transform: translate(7.533645px, 21.562554px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  16.666667% {\n    transform: translate(7.533645px, 21.562554px) rotate(15deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  33.333333% {\n    transform: translate(7.533645px, 21.562554px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  50% {\n    transform: translate(7.533645px, 21.562554px) rotate(15deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  66.666667% {\n    transform: translate(7.533645px, 21.562554px) rotate(0deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  83.333333% {\n    transform: translate(7.533645px, 21.562554px) rotate(15deg);\n    animation-timing-function: cubic-bezier(0.42, 0, 0.58, 1);\n  }\n  100% {\n    transform: translate(7.533645px, 21.562554px) rotate(0deg);\n  }\n}\n</style>\n","import { render } from \"./ChallengesTaskCompleted.vue?vue&type=template&id=0130acfe\"\nconst script = {}\n\nimport \"./ChallengesTaskCompleted.vue?vue&type=style&index=0&id=0130acfe&lang=css\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-033050e0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"challenges-completed\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n  src: \"/statics/images/challenges-completed-bg.png\",\n  alt: \"Challenges complete\"\n}, null, -1))\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"svg\", {\n  id: \"e7vY5FLUNG21\",\n  xmlns: \"http://www.w3.org/2000/svg\",\n  \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\",\n  viewBox: \"0 0 134 169\",\n  \"shape-rendering\": \"geometricPrecision\",\n  \"text-rendering\": \"geometricPrecision\"\n}, [\n  /*#__PURE__*/_createElementVNode(\"ellipse\", {\n    id: \"e7vY5FLUNG22\",\n    rx: \"58.4921\",\n    ry: \"6.38096\",\n    transform: \"matrix(1 0 0 1 58.4921 162.619)\",\n    fill: \"rgb(196,196,196)\",\n    \"fill-opacity\": \"0.5\",\n    stroke: \"none\",\n    \"stroke-width\": \"1\"\n  }),\n  /*#__PURE__*/_createElementVNode(\"g\", {\n    id: \"e7vY5FLUNG23_to\",\n    transform: \"translate(57.453447,102.111882)\"\n  }, [\n    /*#__PURE__*/_createElementVNode(\"g\", {\n      id: \"e7vY5FLUNG23\",\n      transform: \"translate(-57.453447,-80.111882)\"\n    }, [\n      /*#__PURE__*/_createElementVNode(\"g\", {\n        id: \"e7vY5FLUNG24_tr\",\n        transform: \"translate(83.738125,79.5) rotate(0)\"\n      }, [\n        /*#__PURE__*/_createElementVNode(\"g\", {\n          id: \"e7vY5FLUNG24\",\n          transform: \"translate(-83.738125,-79.499977)\"\n        }, [\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG25\",\n            d: \"M86.1739,16.3257C81.953,17.2838,78.2855,19.8786,75.9781,23.5393C73.6707,27.2,72.9124,31.6268,73.87,35.8458C75.8642,44.6314,98.3271,69.8691,98.3271,69.8691C98.3271,69.8691,107.693,37.4069,105.699,28.6212C104.742,24.4022,102.146,20.7366,98.4847,18.4308C94.823,16.1249,90.3947,15.3677,86.1739,16.3257ZM91.5459,39.9935C90.0873,40.3245,88.5632,40.2158,87.1665,39.6811C85.7699,39.1463,84.5633,38.2095,83.6993,36.9892C82.8353,35.7688,82.3529,34.3197,82.3128,32.8251C82.2728,31.3305,82.6771,29.8575,83.4745,28.5924C84.2719,27.3273,85.4267,26.3269,86.7928,25.7178C88.1588,25.1086,89.6749,24.918,91.1491,25.1701C92.6234,25.4222,93.9897,26.1056,95.0752,27.134C96.1608,28.1624,96.9168,29.4895,97.2478,30.9475C97.4675,31.9156,97.4943,32.9175,97.3267,33.8961C97.1591,34.8746,96.8003,35.8106,96.2708,36.6506C95.7414,37.4906,95.0516,38.2181,94.2409,38.7917C93.4302,39.3653,92.5144,39.7736,91.5459,39.9935Z\",\n            fill: \"rgb(244,41,45)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          }),\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG26\",\n            d: \"M95.1672,77.8455C102.259,71.8202,106.473,65.1309,104.58,62.9045C102.688,60.6781,95.4045,63.7577,88.313,69.7829C81.2215,75.8082,77.007,82.4975,78.8998,84.7239C80.7925,86.9503,88.0757,83.8707,95.1672,77.8455Z\",\n            fill: \"rgb(47,46,65)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          })\n        ])\n      ]),\n      /*#__PURE__*/_createElementVNode(\"path\", {\n        id: \"e7vY5FLUNG27\",\n        d: \"M54.8149,128.289C73.4329,128.289,88.5258,113.202,88.5258,94.592C88.5258,75.9819,73.4329,60.8955,54.8149,60.8955C36.1969,60.8955,21.104,75.9819,21.104,94.592C21.104,113.202,36.1969,128.289,54.8149,128.289Z\",\n        fill: \"rgb(47,46,65)\",\n        stroke: \"none\",\n        \"stroke-width\": \"1\"\n      }),\n      /*#__PURE__*/_createElementVNode(\"g\", {\n        id: \"e7vY5FLUNG28_tr\",\n        transform: \"translate(40.793061,118.625) rotate(-23)\"\n      }, [\n        /*#__PURE__*/_createElementVNode(\"g\", {\n          id: \"e7vY5FLUNG28\",\n          transform: \"translate(-40.79306,-118.625)\"\n        }, [\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG29\",\n            d: \"M46.0897,124.676L37.8271,118.625L26.9906,133.423L35.2532,139.474L46.0897,124.676Z\",\n            fill: \"rgb(47,46,65)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          }),\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG210\",\n            d: \"M31.8592,141.218C35.662,144.003,39.591,145.105,40.6348,143.68C41.6787,142.254,39.4422,138.841,35.6394,136.056C31.8367,133.272,27.9077,132.17,26.8638,133.595C25.8199,135.02,28.0565,138.434,31.8592,141.218Z\",\n            fill: \"rgb(47,46,65)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          })\n        ])\n      ]),\n      /*#__PURE__*/_createElementVNode(\"g\", {\n        id: \"e7vY5FLUNG211_tr\",\n        transform: \"translate(67,118.625) rotate(29)\"\n      }, [\n        /*#__PURE__*/_createElementVNode(\"g\", {\n          id: \"e7vY5FLUNG211\",\n          transform: \"translate(-67,-118.625)\"\n        }, [\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG212\",\n            d: \"M72.1024,118.535L64.873,125.789L77.8642,138.736L85.0936,131.482L72.1024,118.535Z\",\n            fill: \"rgb(47,46,65)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          }),\n          /*#__PURE__*/_createElementVNode(\"path\", {\n            id: \"e7vY5FLUNG213\",\n            d: \"M86.004,134.798C89.3313,131.46,91.014,127.742,89.7626,126.495C88.5112,125.248,84.7994,126.943,81.4722,130.282C78.145,133.62,76.4622,137.338,77.7137,138.585C78.9651,139.832,82.6768,138.137,86.004,134.798Z\",\n            fill: \"rgb(47,46,65)\",\n            stroke: \"none\",\n            \"stroke-width\": \"1\"\n          })\n        ])\n      ]),\n      /*#__PURE__*/_createElementVNode(\"path\", {\n        id: \"e7vY5FLUNG214\",\n        d: \"M30.4482,88.5919C32.754,86.7981,29.9882,79.3896,24.2705,72.0444C18.5527,64.6992,12.0483,60.1988,9.74249,61.9925C7.43664,63.7863,10.2025,71.1948,15.9202,78.54C21.638,85.8852,28.1424,90.3856,30.4482,88.5919Z\",\n        fill: \"rgb(47,46,65)\",\n        stroke: \"none\",\n        \"stroke-width\": \"1\"\n      }),\n      /*#__PURE__*/_createElementVNode(\"path\", {\n        id: \"e7vY5FLUNG215\",\n        d: \"M38.2563,106.748C38.2563,110.046,46.7517,116.559,56.1786,116.559C65.6055,116.559,74.4442,107.274,74.4442,103.976C74.4442,100.678,65.6054,104.615,56.1786,104.615C46.7518,104.615,38.2563,103.45,38.2563,106.748Z\",\n        fill: \"rgb(255,255,255)\",\n        stroke: \"none\",\n        \"stroke-width\": \"1\"\n      })\n    ])\n  ]),\n  /*#__PURE__*/_createElementVNode(\"g\", {\n    id: \"e7vY5FLUNG216_to\",\n    transform: \"translate(52.047901,156.237999)\"\n  }, [\n    /*#__PURE__*/_createElementVNode(\"line\", {\n      id: \"e7vY5FLUNG216\",\n      x1: \"52.0479\",\n      y1: \"150.857\",\n      x2: \"52.0479\",\n      y2: \"161.619\",\n      transform: \"translate(-52.047901,-156.237999)\",\n      opacity: \"0\",\n      fill: \"none\",\n      stroke: \"rgb(0,0,0)\",\n      \"stroke-width\": \"2\",\n      \"stroke-linecap\": \"round\"\n    })\n  ]),\n  /*#__PURE__*/_createElementVNode(\"g\", {\n    id: \"e7vY5FLUNG217_to\",\n    transform: \"translate(60.555698,153.048004)\"\n  }, [\n    /*#__PURE__*/_createElementVNode(\"line\", {\n      id: \"e7vY5FLUNG217\",\n      x1: \"60.5557\",\n      y1: \"147.667\",\n      x2: \"60.5557\",\n      y2: \"158.429\",\n      transform: \"translate(-60.555698,-153.048004)\",\n      opacity: \"0\",\n      fill: \"none\",\n      stroke: \"rgb(0,0,0)\",\n      \"stroke-width\": \"2\",\n      \"stroke-linecap\": \"round\"\n    })\n  ])\n], -1))\nconst _hoisted_4 = [\n  _hoisted_2,\n  _hoisted_3\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _hoisted_4))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({});\n","import { render } from \"./ChallengesCompleted.vue?vue&type=template&id=033050e0&scoped=true&ts=true\"\nimport script from \"./ChallengesCompleted.vue?vue&type=script&lang=ts\"\nexport * from \"./ChallengesCompleted.vue?vue&type=script&lang=ts\"\n\nimport \"./ChallengesCompleted.vue?vue&type=style&index=0&id=033050e0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-033050e0\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, unref as _unref, createVNode as _createVNode, normalizeStyle as _normalizeStyle, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, Transition as _Transition, createElementVNode as _createElementVNode, createBlock as _createBlock, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-8baa2ff8\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n  key: 0,\n  class: \"challenges\"\n}\nconst _hoisted_2 = { class: \"challenges-header\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"challenges-completed\"\n}\nconst _hoisted_4 = [\"aria-label\"]\nconst _hoisted_5 = {\n  key: 1,\n  class: \"challenges-intro paragraph-title\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_6 = {\n  key: 0,\n  class: \"challenges-container\"\n}\nconst _hoisted_7 = [\"aria-hidden\"]\nconst _hoisted_8 = { class: \"challenges-image\" }\nconst _hoisted_9 = { class: \"paragraph-title challenges-card-intro\" }\nconst _hoisted_10 = { class: \"challenges-list\" }\nconst _hoisted_11 = [\"onUpdate:modelValue\", \"disabled\", \"onChange\"]\nconst _hoisted_12 = {\n  key: 1,\n  class: \"all-completed\"\n}\nconst _hoisted_13 = {\n  \"aria-live\": \"polite\",\n  class: \"paragraph-title all-completed-text\"\n}\n\nimport { computed, ComputedRef, onMounted, PropType, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport _partition from 'lodash/partition';\n\nimport Image from '@/components/Content/Image.vue';\nimport ChallengesTaskCompleted from '@/components/Challenge/ChallengesTaskCompleted.vue';\nimport ChallengesCompleted from '@/components/Challenge/ChallengesCompleted.vue';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { ActiveTask, Challenge, ChallengesSettings } from '@/model/menu';\nimport { getLocalStorageItem, LocalStorageKey, setLocalStorageItem } from '@/utils/local-storage';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\n\nexport default /*#__PURE__*/_defineComponent({\n  props: {\n  show: {\n    type: Boolean,\n    required: true,\n  },\n  challenges: {\n    type: Object as PropType<Challenge[]>,\n    required: true,\n  },\n  settings: {\n    type: Object as PropType<ChallengesSettings>,\n    required: true,\n  },\n},\n  emits: ['finished-challenges'],\n  setup(__props, { emit }) {\n\nconst props = __props\n\n\n\n\nconst cardIndex = ref(0);\nconst completedChallenges = ref<Challenge[]>([]);\nconst openChallenges = ref<Challenge[]>([]);\nconst animatingCard = ref(false);\nconst loadingCompletedChallenges = ref(true);\nconst { t } = useI18n();\nconst finishedAllChallenges = ref(false);\nconst { isEmbedded } = useEmbeddedState();\n\nconst activeCard: ComputedRef<Challenge> = computed(() => openChallenges.value[cardIndex.value]);\nconst activeTasks = ref<ActiveTask[]>([]);\n\nonMounted(() => {\n  // get already completed challenges\n  const initialCompletedChallenges = getLocalStorageItem<string[]>(LocalStorageKey.CompletedChallenges) || [];\n  if (initialCompletedChallenges) {\n    // create 2 lists of all the existing challenges: completed (for badges) and open (for list/stack)\n    const partitionedChallenges = _partition(props.challenges, (challenge: Challenge) => {\n      return initialCompletedChallenges.includes(challenge.id);\n    });\n\n    completedChallenges.value = partitionedChallenges[0];\n    openChallenges.value = partitionedChallenges[1];\n  } else {\n    openChallenges.value = props.challenges;\n  }\n  finishedAllChallenges.value = openChallenges.value.length === 0;\n  emit('finished-challenges', finishedAllChallenges.value);\n  loadingCompletedChallenges.value = false;\n});\n\nwatchWhileActive(\n  activeCard,\n  () => {\n    if (!activeCard.value) return;\n\n    // check if there are already completed tasks\n    const initialCompletedTasks = getLocalStorageItem<number[]>(LocalStorageKey.CompletedTasks) || [];\n\n    // show new tasks + complete them if they were previously completed\n    activeTasks.value = activeCard.value.tasks.map((task, i) => {\n      return {\n        text: task,\n        completed: initialCompletedTasks.includes(i),\n      };\n    });\n  },\n  { immediate: true },\n);\n\n// TODO: Replace before-enter & add card falling transition, NE-345\nfunction checkTasks(taskIndex: number) {\n  // get already completed tasks and add the last one to the list\n  const savedCompletedTasks = getLocalStorageItem<number[]>(LocalStorageKey.CompletedTasks);\n  const completedTasksForStorage: number[] = savedCompletedTasks || [];\n  if (!completedTasksForStorage.includes(taskIndex)) completedTasksForStorage.push(taskIndex);\n  setLocalStorageItem(LocalStorageKey.CompletedTasks, completedTasksForStorage);\n\n  logInteractionEvent({\n    event_name: 'check_challenge_task',\n    category: 'challenges',\n    interaction_type: 'click',\n    id: activeCard.value.id,\n    value: taskIndex + 1,\n    embed: isEmbedded.value,\n  });\n\n  // check if all tasks are now completed\n  const allCompleted = activeTasks.value.every((t: ActiveTask) => t.completed);\n  if (allCompleted) {\n    logInteractionEvent({\n      event_name: 'complete_challenge',\n      category: 'challenges',\n      interaction_type: 'click',\n      id: activeCard.value.id,\n      embed: isEmbedded.value,\n    });\n    nextChallenge();\n  }\n}\n\nfunction nextChallenge() {\n  // get already completed challenges and add the last one to the list\n  const savedCompletedChallenges = getLocalStorageItem<string[]>(LocalStorageKey.CompletedChallenges);\n  const completedChallengesForStorage = savedCompletedChallenges || [];\n  completedChallengesForStorage.push(activeCard.value.id);\n\n  // save completed challenge & set completed tasks to none\n  setLocalStorageItem(LocalStorageKey.CompletedChallenges, completedChallengesForStorage);\n  setLocalStorageItem(LocalStorageKey.CompletedTasks, '');\n\n  // add completed challenge to list for badges & show next challenge\n  completedChallenges.value.push(activeCard.value);\n  animatingCard.value = true;\n  cardIndex.value++;\n\n  if (cardIndex.value === openChallenges.value.length) {\n    logInteractionEvent({\n      event_name: 'complete_all_challenges',\n      category: 'challenges',\n      interaction_type: 'click',\n      embed: isEmbedded.value,\n    });\n    finishedAllChallenges.value = true;\n    emit('finished-challenges', true);\n  }\n}\n\nfunction afterFallingAnimation() {\n  animatingCard.value = false;\n}\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createBlock(_Transition, { name: \"fade\" }, {\n    default: _withCtx(() => [\n      (!loadingCompletedChallenges.value)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n            _createElementVNode(\"div\", _hoisted_2, [\n              _createVNode(_Transition, {\n                name: \"fade\",\n                mode: \"out-in\"\n              }, {\n                default: _withCtx(() => [\n                  (completedChallenges.value.length > 0)\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n                        _createVNode(_TransitionGroup, {\n                          name: \"appear\",\n                          tag: \"ul\",\n                          class: \"challenges-completed-list\",\n                          \"aria-live\": \"polite\"\n                        }, {\n                          default: _withCtx(() => [\n                            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(completedChallenges.value, (challenge, i) => {\n                              return (_openBlock(), _createElementBlock(\"li\", {\n                                key: challenge.id,\n                                class: \"challenges-completed-list-item\",\n                                style: _normalizeStyle({ transform: `translate(${-30 * i}px, 0)` }),\n                                \"aria-label\": `${_unref(t)('navigation.expeditions')} challenge.intro`\n                              }, [\n                                _createVNode(Image, {\n                                  image: challenge.image,\n                                  alt: \"\",\n                                  width: 100\n                                }, null, 8, [\"image\"])\n                              ], 12, _hoisted_4))\n                            }), 128))\n                          ]),\n                          _: 1\n                        })\n                      ]))\n                    : (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString(__props.settings.emptyStateText), 1))\n                ]),\n                _: 1\n              })\n            ]),\n            _createVNode(_Transition, {\n              name: \"fade\",\n              mode: \"out-in\"\n            }, {\n              default: _withCtx(() => [\n                (!finishedAllChallenges.value || (animatingCard.value && finishedAllChallenges.value))\n                  ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(openChallenges.value, (challenge, i) => {\n                        return (_openBlock(), _createBlock(_Transition, {\n                          key: challenge.id,\n                          name: \"falling\",\n                          onAfterLeave: _cache[0] || (_cache[0] = ($event: any) => (afterFallingAnimation()))\n                        }, {\n                          default: _withCtx(() => [\n                            (cardIndex.value + 2 === i || cardIndex.value + 1 === i || cardIndex.value === i)\n                              ? (_openBlock(), _createElementBlock(\"div\", {\n                                  key: 0,\n                                  class: \"challenges-card\",\n                                  \"data-animate\": \"slide-left\",\n                                  \"data-stagger\": \"\",\n                                  \"aria-hidden\": cardIndex.value === i ? 'false' : 'true'\n                                }, [\n                                  (challenge.id === _unref(activeCard)?.id)\n                                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                        _createElementVNode(\"div\", _hoisted_8, [\n                                          (challenge.image)\n                                            ? (_openBlock(), _createBlock(Image, {\n                                                key: 0,\n                                                image: challenge.image,\n                                                width: 600,\n                                                \"object-fit\": \"cover\",\n                                                fill: \"\"\n                                              }, null, 8, [\"image\"]))\n                                            : _createCommentVNode(\"\", true)\n                                        ]),\n                                        _createElementVNode(\"p\", _hoisted_9, _toDisplayString(challenge.intro), 1),\n                                        _createElementVNode(\"ul\", _hoisted_10, [\n                                          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(activeTasks.value, (task, j) => {\n                                            return (_openBlock(), _createElementBlock(\"li\", {\n                                              key: j,\n                                              class: \"paragraph challenges-list-item\"\n                                            }, [\n                                              _createElementVNode(\"label\", {\n                                                class: _normalizeClass({ checked: task.completed })\n                                              }, [\n                                                _withDirectives(_createElementVNode(\"input\", {\n                                                  type: \"checkbox\",\n                                                  \"onUpdate:modelValue\": ($event: any) => ((task.completed) = $event),\n                                                  disabled: task.completed,\n                                                  onChange: ($event: any) => (checkTasks(j))\n                                                }, null, 40, _hoisted_11), [\n                                                  [_vModelCheckbox, task.completed]\n                                                ]),\n                                                _createVNode(_Transition, { name: \"delayed-fade-slide\" }, {\n                                                  default: _withCtx(() => [\n                                                    (task.completed)\n                                                      ? (_openBlock(), _createBlock(ChallengesTaskCompleted, {\n                                                          key: 0,\n                                                          class: \"completed-icon\"\n                                                        }))\n                                                      : _createCommentVNode(\"\", true)\n                                                  ]),\n                                                  _: 2\n                                                }, 1024),\n                                                _createTextVNode(\" \" + _toDisplayString(task.text), 1)\n                                              ], 2)\n                                            ]))\n                                          }), 128))\n                                        ])\n                                      ], 64))\n                                    : _createCommentVNode(\"\", true)\n                                ], 8, _hoisted_7))\n                              : _createCommentVNode(\"\", true)\n                          ]),\n                          _: 2\n                        }, 1024))\n                      }), 128))\n                    ]))\n                  : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n                      _createVNode(ChallengesCompleted),\n                      _createElementVNode(\"p\", _hoisted_13, _toDisplayString(__props.settings.completedStateText), 1)\n                    ]))\n              ]),\n              _: 1\n            })\n          ]))\n        : _createCommentVNode(\"\", true)\n    ]),\n    _: 1\n  }))\n}\n}\n\n})","import script from \"./Challenges.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Challenges.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Challenges.vue?vue&type=style&index=0&id=8baa2ff8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8baa2ff8\"]])\n\nexport default __exports__","\nimport { computed, defineComponent, onMounted, ref } from 'vue';\n\nimport Panel from '@/components/common/Panel.vue';\nimport { ExpeditionLink } from '@/model/expedition';\nimport { getCachedExpeditionLinks } from '@/services/expedition-service';\nimport { useLoader } from '@/composables/use-loader';\nimport Icon from '@/components/common/Icon.vue';\nimport { MenuPanelTabs } from '@/model/content';\nimport { useI18n } from 'vue-i18n';\nimport { Challenge, ChallengesSettings } from '@/model/menu';\nimport { getCachedChallengesInfo } from '@/services/challenge-service';\nimport ExpeditionsList from '@/components/Map/ExpeditionsList.vue';\nimport Challenges from '@/components/Challenge/Challenges.vue';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\nexport default defineComponent({\n  emits: ['close', 'finished-challenges'],\n  components: {\n    Challenges,\n    ExpeditionsList,\n    Icon,\n    Panel,\n  },\n  props: {\n    opened: {\n      type: Boolean,\n      required: true,\n    },\n    initialOpened: {\n      type: Number,\n      default: MenuPanelTabs.Expeditions,\n    },\n  },\n  setup(props, { emit }) {\n    const expeditions = ref<ExpeditionLink[]>([]);\n    const challenges = ref<Challenge[]>([]);\n    const challengesSettings = ref<ChallengesSettings>();\n    const { loading, stopLoading } = useLoader();\n    const openedTab = ref<MenuPanelTabs>(props.initialOpened);\n    const { t } = useI18n();\n    const allChallengesCompleted = ref(true);\n    const { isEmbedded } = useEmbeddedState();\n\n    onMounted(async () => {\n      expeditions.value = await getCachedExpeditionLinks();\n      const challengesInfo = await getCachedChallengesInfo();\n      challenges.value = challengesInfo.challengeList;\n      challengesSettings.value = challengesInfo.challengesSettings;\n      checkFinishedChallenges();\n      stopLoading();\n    });\n\n    const showExpeditionTab = computed(\n      () => expeditions.value && !loading.value && openedTab.value === MenuPanelTabs.Expeditions,\n    );\n    const showChallengesTab = computed(\n      () => challenges.value && !loading.value && openedTab.value === MenuPanelTabs.Challenges,\n    );\n\n    watchWhileActive(\n      () => props.opened,\n      () => {\n        if (!props.opened) return;\n        openedTab.value = props.initialOpened;\n      },\n    );\n\n    function switchTab(tab: MenuPanelTabs) {\n      logInteractionEvent({\n        event_name: 'switch_tab',\n        category: 'map_navigation',\n        interaction_type: 'click',\n        value: tab === MenuPanelTabs.Challenges ? 'challenges' : 'expeditions',\n        embed: isEmbedded.value,\n      });\n      openedTab.value = tab;\n    }\n\n    function checkFinishedChallenges() {\n      const savedCompletedTasks = localStorage.getItem('completedChallenges');\n      const parsedCompletedChallenges: number[] = (savedCompletedTasks && JSON.parse(savedCompletedTasks)) || [];\n\n      finishedChallenges(parsedCompletedChallenges.length >= challenges.value.length);\n    }\n\n    function finishedChallenges(value: boolean) {\n      allChallengesCompleted.value = value;\n      emit('finished-challenges', value);\n    }\n\n    return {\n      expeditions,\n      challenges,\n      loading,\n      openedTab,\n      switchTab,\n      MenuPanelTabs,\n      t,\n      showExpeditionTab,\n      showChallengesTab,\n      challengesSettings,\n      allChallengesCompleted,\n      finishedChallenges,\n    };\n  },\n});\n","import { render } from \"./MapNavigationPanel.vue?vue&type=template&id=650eec27&scoped=true&ts=true\"\nimport script from \"./MapNavigationPanel.vue?vue&type=script&lang=ts\"\nexport * from \"./MapNavigationPanel.vue?vue&type=script&lang=ts\"\n\nimport \"./MapNavigationPanel.vue?vue&type=style&index=0&id=650eec27&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-650eec27\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, Transition as _Transition, withCtx as _withCtx, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-32d1b400\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n  key: 0,\n  class: \"map-navigation\"\n}\n\nimport { ref } from 'vue';\nimport SearchMenu from '@/components/Search/SearchMenu.vue';\nimport MapNavigationPanel from '@/components/Map/MapNavigationPanel.vue';\nimport NavigationBar from '@/components/Navigation/NavigationBar.vue';\nimport { NavigationItem } from '@/components/Navigation/NavigationItem.vue';\nimport { MenuPanelTabs } from '@/model/content';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { useDimensions } from '@/composables/use-dimensions';\nimport { useI18n } from 'vue-i18n';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\n\n\nexport default /*#__PURE__*/_defineComponent({\n  props: {\n  showIntro: {\n    type: Boolean,\n    required: true,\n  },\n  quickLinks: Array,\n},\n  setup(__props) {\n\n\n\nconst { isMobile } = useDimensions();\nconst { t } = useI18n();\nconst { isEmbedded } = useEmbeddedState();\nconst allChallengesCompleted = ref(true);\nconst searchOpenedMobile = ref(false);\nconst panelOpened = ref(false);\nconst tabOpened = ref<MenuPanelTabs>();\nconst tabItems = ref<NavigationItem[]>([\n  {\n    icon: 'expedition',\n    label: t('navigation.expeditions'),\n    action: () => openPanel(MenuPanelTabs.Expeditions),\n  },\n  {\n    icon: 'challenges',\n    label: t('navigation.challenges'),\n    nudge: allChallengesCompleted.value,\n    action: () => openPanel(MenuPanelTabs.Challenges),\n  },\n]);\n\nfunction openPanel(tab: MenuPanelTabs) {\n  logInteractionEvent({\n    event_name: tab === MenuPanelTabs.Challenges ? 'challenges' : 'expeditions',\n    category: 'map_navigation',\n    interaction_type: 'click',\n    embed: isEmbedded.value,\n  });\n  panelOpened.value = true;\n  tabOpened.value = tab;\n}\n\nfunction closePanel() {\n  panelOpened.value = false;\n}\n\nfunction finishedChallenges(value: boolean) {\n  allChallengesCompleted.value = value;\n}\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createBlock(_Transition, { name: \"short-fade\" }, {\n    default: _withCtx(() => [\n      (!__props.showIntro)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n            _createVNode(SearchMenu, {\n              \"opened-mobile\": searchOpenedMobile.value,\n              \"quick-links\": __props.quickLinks,\n              onOpen: _cache[0] || (_cache[0] = ($event: any) => (searchOpenedMobile.value = true)),\n              onClose: _cache[1] || (_cache[1] = ($event: any) => (searchOpenedMobile.value = false))\n            }, null, 8, [\"opened-mobile\", \"quick-links\"]),\n            (!_unref(isMobile) || !searchOpenedMobile.value)\n              ? (_openBlock(), _createBlock(NavigationBar, {\n                  key: 0,\n                  \"secondary-items\": tabItems.value\n                }, null, 8, [\"secondary-items\"]))\n              : _createCommentVNode(\"\", true),\n            _createVNode(MapNavigationPanel, {\n              opened: panelOpened.value,\n              \"initial-opened\": tabOpened.value,\n              onClose: closePanel,\n              onFinishedChallenges: finishedChallenges\n            }, null, 8, [\"opened\", \"initial-opened\"])\n          ]))\n        : _createCommentVNode(\"\", true)\n    ]),\n    _: 1\n  }))\n}\n}\n\n})","import script from \"./MapNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./MapNavigation.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./MapNavigation.vue?vue&type=style&index=0&id=32d1b400&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-32d1b400\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n  const _component_Icon = _resolveComponent(\"Icon\")!\n  const _component_router_link = _resolveComponent(\"router-link\")!\n\n  return (!_ctx.isEmpty)\n    ? (_openBlock(), _createBlock(_component_router_link, {\n        key: 0,\n        to: _ctx.logbookEditorRoute,\n        class: \"map-logbook-link\"\n      }, {\n        default: _withCtx(() => [\n          _createElementVNode(\"span\", null, _toDisplayString(_ctx.t('navigation.mapLogbookLink')), 1),\n          _createVNode(_component_Icon, { name: \"arrow-full\" })\n        ]),\n        _: 1\n      }, 8, [\"to\"]))\n    : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent } from 'vue';\nimport { getRoute, Route } from '@/router';\nimport { useLogbook } from '@/composables/use-logbook';\nimport { useI18n } from 'vue-i18n';\n\nexport default defineComponent({\n  setup() {\n    const { isEmpty } = useLogbook();\n    const { t } = useI18n();\n    const logbookEditorRoute = getRoute(Route.LogbookEditor);\n\n    return {\n      isEmpty,\n      logbookEditorRoute,\n      t,\n    };\n  },\n});\n","import { render } from \"./MapLogbookLink.vue?vue&type=template&id=6eab6231&scoped=true&ts=true\"\nimport script from \"./MapLogbookLink.vue?vue&type=script&lang=ts\"\nexport * from \"./MapLogbookLink.vue?vue&type=script&lang=ts\"\n\nimport \"./MapLogbookLink.vue?vue&type=style&index=0&id=6eab6231&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6eab6231\"]])\n\nexport default __exports__","import { feature, lineString, isObject, point } from '@turf/helpers';\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n  // Handles null Geometry -- Skips this GeoJSON\n  if (geojson === null) return;\n  var j,\n    k,\n    l,\n    geometry,\n    stopG,\n    coords,\n    geometryMaybeCollection,\n    wrapShrink = 0,\n    coordIndex = 0,\n    isGeometryCollection,\n    type = geojson.type,\n    isFeatureCollection = type === \"FeatureCollection\",\n    isFeature = type === \"Feature\",\n    stop = isFeatureCollection ? geojson.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n  for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n    geometryMaybeCollection = isFeatureCollection\n      ? geojson.features[featureIndex].geometry\n      : isFeature\n      ? geojson.geometry\n      : geojson;\n    isGeometryCollection = geometryMaybeCollection\n      ? geometryMaybeCollection.type === \"GeometryCollection\"\n      : false;\n    stopG = isGeometryCollection\n      ? geometryMaybeCollection.geometries.length\n      : 1;\n\n    for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n      var multiFeatureIndex = 0;\n      var geometryIndex = 0;\n      geometry = isGeometryCollection\n        ? geometryMaybeCollection.geometries[geomIndex]\n        : geometryMaybeCollection;\n\n      // Handles null Geometry -- Skips this geometry\n      if (geometry === null) continue;\n      coords = geometry.coordinates;\n      var geomType = geometry.type;\n\n      wrapShrink =\n        excludeWrapCoord &&\n        (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n          ? 1\n          : 0;\n\n      switch (geomType) {\n        case null:\n          break;\n        case \"Point\":\n          if (\n            callback(\n              coords,\n              coordIndex,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false\n          )\n            return false;\n          coordIndex++;\n          multiFeatureIndex++;\n          break;\n        case \"LineString\":\n        case \"MultiPoint\":\n          for (j = 0; j < coords.length; j++) {\n            if (\n              callback(\n                coords[j],\n                coordIndex,\n                featureIndex,\n                multiFeatureIndex,\n                geometryIndex\n              ) === false\n            )\n              return false;\n            coordIndex++;\n            if (geomType === \"MultiPoint\") multiFeatureIndex++;\n          }\n          if (geomType === \"LineString\") multiFeatureIndex++;\n          break;\n        case \"Polygon\":\n        case \"MultiLineString\":\n          for (j = 0; j < coords.length; j++) {\n            for (k = 0; k < coords[j].length - wrapShrink; k++) {\n              if (\n                callback(\n                  coords[j][k],\n                  coordIndex,\n                  featureIndex,\n                  multiFeatureIndex,\n                  geometryIndex\n                ) === false\n              )\n                return false;\n              coordIndex++;\n            }\n            if (geomType === \"MultiLineString\") multiFeatureIndex++;\n            if (geomType === \"Polygon\") geometryIndex++;\n          }\n          if (geomType === \"Polygon\") multiFeatureIndex++;\n          break;\n        case \"MultiPolygon\":\n          for (j = 0; j < coords.length; j++) {\n            geometryIndex = 0;\n            for (k = 0; k < coords[j].length; k++) {\n              for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                if (\n                  callback(\n                    coords[j][k][l],\n                    coordIndex,\n                    featureIndex,\n                    multiFeatureIndex,\n                    geometryIndex\n                  ) === false\n                )\n                  return false;\n                coordIndex++;\n              }\n              geometryIndex++;\n            }\n            multiFeatureIndex++;\n          }\n          break;\n        case \"GeometryCollection\":\n          for (j = 0; j < geometry.geometries.length; j++)\n            if (\n              coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n              false\n            )\n              return false;\n          break;\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n  }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n  var previousValue = initialValue;\n  coordEach(\n    geojson,\n    function (\n      currentCoord,\n      coordIndex,\n      featureIndex,\n      multiFeatureIndex,\n      geometryIndex\n    ) {\n      if (coordIndex === 0 && initialValue === undefined)\n        previousValue = currentCoord;\n      else\n        previousValue = callback(\n          previousValue,\n          currentCoord,\n          coordIndex,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    },\n    excludeWrapCoord\n  );\n  return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n *   //=currentProperties\n *   //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n  var i;\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      for (i = 0; i < geojson.features.length; i++) {\n        if (callback(geojson.features[i].properties, i) === false) break;\n      }\n      break;\n    case \"Feature\":\n      callback(geojson.properties, 0);\n      break;\n  }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n *   //=previousValue\n *   //=currentProperties\n *   //=featureIndex\n *   return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  propEach(geojson, function (currentProperties, featureIndex) {\n    if (featureIndex === 0 && initialValue === undefined)\n      previousValue = currentProperties;\n    else\n      previousValue = callback(previousValue, currentProperties, featureIndex);\n  });\n  return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n  if (geojson.type === \"Feature\") {\n    callback(geojson, 0);\n  } else if (geojson.type === \"FeatureCollection\") {\n    for (var i = 0; i < geojson.features.length; i++) {\n      if (callback(geojson.features[i], i) === false) break;\n    }\n  }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  featureEach(geojson, function (currentFeature, featureIndex) {\n    if (featureIndex === 0 && initialValue === undefined)\n      previousValue = currentFeature;\n    else previousValue = callback(previousValue, currentFeature, featureIndex);\n  });\n  return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n  var coords = [];\n  coordEach(geojson, function (coord) {\n    coords.push(coord);\n  });\n  return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n  var i,\n    j,\n    g,\n    geometry,\n    stopG,\n    geometryMaybeCollection,\n    isGeometryCollection,\n    featureProperties,\n    featureBBox,\n    featureId,\n    featureIndex = 0,\n    isFeatureCollection = geojson.type === \"FeatureCollection\",\n    isFeature = geojson.type === \"Feature\",\n    stop = isFeatureCollection ? geojson.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n  for (i = 0; i < stop; i++) {\n    geometryMaybeCollection = isFeatureCollection\n      ? geojson.features[i].geometry\n      : isFeature\n      ? geojson.geometry\n      : geojson;\n    featureProperties = isFeatureCollection\n      ? geojson.features[i].properties\n      : isFeature\n      ? geojson.properties\n      : {};\n    featureBBox = isFeatureCollection\n      ? geojson.features[i].bbox\n      : isFeature\n      ? geojson.bbox\n      : undefined;\n    featureId = isFeatureCollection\n      ? geojson.features[i].id\n      : isFeature\n      ? geojson.id\n      : undefined;\n    isGeometryCollection = geometryMaybeCollection\n      ? geometryMaybeCollection.type === \"GeometryCollection\"\n      : false;\n    stopG = isGeometryCollection\n      ? geometryMaybeCollection.geometries.length\n      : 1;\n\n    for (g = 0; g < stopG; g++) {\n      geometry = isGeometryCollection\n        ? geometryMaybeCollection.geometries[g]\n        : geometryMaybeCollection;\n\n      // Handle null Geometry\n      if (geometry === null) {\n        if (\n          callback(\n            null,\n            featureIndex,\n            featureProperties,\n            featureBBox,\n            featureId\n          ) === false\n        )\n          return false;\n        continue;\n      }\n      switch (geometry.type) {\n        case \"Point\":\n        case \"LineString\":\n        case \"MultiPoint\":\n        case \"Polygon\":\n        case \"MultiLineString\":\n        case \"MultiPolygon\": {\n          if (\n            callback(\n              geometry,\n              featureIndex,\n              featureProperties,\n              featureBBox,\n              featureId\n            ) === false\n          )\n            return false;\n          break;\n        }\n        case \"GeometryCollection\": {\n          for (j = 0; j < geometry.geometries.length; j++) {\n            if (\n              callback(\n                geometry.geometries[j],\n                featureIndex,\n                featureProperties,\n                featureBBox,\n                featureId\n              ) === false\n            )\n              return false;\n          }\n          break;\n        }\n        default:\n          throw new Error(\"Unknown Geometry Type\");\n      }\n    }\n    // Only increase `featureIndex` per each feature\n    featureIndex++;\n  }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=previousValue\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n *   return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  geomEach(\n    geojson,\n    function (\n      currentGeometry,\n      featureIndex,\n      featureProperties,\n      featureBBox,\n      featureId\n    ) {\n      if (featureIndex === 0 && initialValue === undefined)\n        previousValue = currentGeometry;\n      else\n        previousValue = callback(\n          previousValue,\n          currentGeometry,\n          featureIndex,\n          featureProperties,\n          featureBBox,\n          featureId\n        );\n    }\n  );\n  return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n  geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n    // Callback for single geometry\n    var type = geometry === null ? null : geometry.type;\n    switch (type) {\n      case null:\n      case \"Point\":\n      case \"LineString\":\n      case \"Polygon\":\n        if (\n          callback(\n            feature(geometry, properties, { bbox: bbox, id: id }),\n            featureIndex,\n            0\n          ) === false\n        )\n          return false;\n        return;\n    }\n\n    var geomType;\n\n    // Callback for multi-geometry\n    switch (type) {\n      case \"MultiPoint\":\n        geomType = \"Point\";\n        break;\n      case \"MultiLineString\":\n        geomType = \"LineString\";\n        break;\n      case \"MultiPolygon\":\n        geomType = \"Polygon\";\n        break;\n    }\n\n    for (\n      var multiFeatureIndex = 0;\n      multiFeatureIndex < geometry.coordinates.length;\n      multiFeatureIndex++\n    ) {\n      var coordinate = geometry.coordinates[multiFeatureIndex];\n      var geom = {\n        type: geomType,\n        coordinates: coordinate,\n      };\n      if (\n        callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n        false\n      )\n        return false;\n    }\n  });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  flattenEach(\n    geojson,\n    function (currentFeature, featureIndex, multiFeatureIndex) {\n      if (\n        featureIndex === 0 &&\n        multiFeatureIndex === 0 &&\n        initialValue === undefined\n      )\n        previousValue = currentFeature;\n      else\n        previousValue = callback(\n          previousValue,\n          currentFeature,\n          featureIndex,\n          multiFeatureIndex\n        );\n    }\n  );\n  return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //=currentSegment\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n *     total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n  flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n    var segmentIndex = 0;\n\n    // Exclude null Geometries\n    if (!feature.geometry) return;\n    // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n    var type = feature.geometry.type;\n    if (type === \"Point\" || type === \"MultiPoint\") return;\n\n    // Generate 2-vertex line segments\n    var previousCoords;\n    var previousFeatureIndex = 0;\n    var previousMultiIndex = 0;\n    var prevGeomIndex = 0;\n    if (\n      coordEach(\n        feature,\n        function (\n          currentCoord,\n          coordIndex,\n          featureIndexCoord,\n          multiPartIndexCoord,\n          geometryIndex\n        ) {\n          // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n          if (\n            previousCoords === undefined ||\n            featureIndex > previousFeatureIndex ||\n            multiPartIndexCoord > previousMultiIndex ||\n            geometryIndex > prevGeomIndex\n          ) {\n            previousCoords = currentCoord;\n            previousFeatureIndex = featureIndex;\n            previousMultiIndex = multiPartIndexCoord;\n            prevGeomIndex = geometryIndex;\n            segmentIndex = 0;\n            return;\n          }\n          var currentSegment = lineString(\n            [previousCoords, currentCoord],\n            feature.properties\n          );\n          if (\n            callback(\n              currentSegment,\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex,\n              segmentIndex\n            ) === false\n          )\n            return false;\n          segmentIndex++;\n          previousCoords = currentCoord;\n        }\n      ) === false\n    )\n      return false;\n  });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //= previousSegment\n *   //= currentSegment\n *   //= featureIndex\n *   //= multiFeatureIndex\n *   //= geometryIndex\n *   //= segmentIndex\n *   return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n *     previousValue++;\n *     return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  var started = false;\n  segmentEach(\n    geojson,\n    function (\n      currentSegment,\n      featureIndex,\n      multiFeatureIndex,\n      geometryIndex,\n      segmentIndex\n    ) {\n      if (started === false && initialValue === undefined)\n        previousValue = currentSegment;\n      else\n        previousValue = callback(\n          previousValue,\n          currentSegment,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex,\n          segmentIndex\n        );\n      started = true;\n    }\n  );\n  return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n *   [[26, 37], [35, 45]],\n *   [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n  // validation\n  if (!geojson) throw new Error(\"geojson is required\");\n\n  flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n    if (feature.geometry === null) return;\n    var type = feature.geometry.type;\n    var coords = feature.geometry.coordinates;\n    switch (type) {\n      case \"LineString\":\n        if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n          return false;\n        break;\n      case \"Polygon\":\n        for (\n          var geometryIndex = 0;\n          geometryIndex < coords.length;\n          geometryIndex++\n        ) {\n          if (\n            callback(\n              lineString(coords[geometryIndex], feature.properties),\n              featureIndex,\n              multiFeatureIndex,\n              geometryIndex\n            ) === false\n          )\n            return false;\n        }\n        break;\n    }\n  });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n *   turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n *   turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n  var previousValue = initialValue;\n  lineEach(\n    geojson,\n    function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n      if (featureIndex === 0 && initialValue === undefined)\n        previousValue = currentLine;\n      else\n        previousValue = callback(\n          previousValue,\n          currentLine,\n          featureIndex,\n          multiFeatureIndex,\n          geometryIndex\n        );\n    }\n  );\n  return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature<LineString<[[10, 10], [50, 30]]>>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature<LineString<[[-10, -10], [-50, -30]]>>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature<LineString<[[-50, -30], [-30, -40]]>>\n */\nfunction findSegment(geojson, options) {\n  // Optional Parameters\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var segmentIndex = options.segmentIndex || 0;\n\n  // Find FeatureIndex\n  var properties = options.properties;\n  var geometry;\n\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n\n  // Find SegmentIndex\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n      if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n      return lineString(\n        [coords[segmentIndex], coords[segmentIndex + 1]],\n        properties,\n        options\n      );\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[geometryIndex][segmentIndex],\n          coords[geometryIndex][segmentIndex + 1],\n        ],\n        properties,\n        options\n      );\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (segmentIndex < 0)\n        segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][segmentIndex],\n          coords[multiFeatureIndex][segmentIndex + 1],\n        ],\n        properties,\n        options\n      );\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (segmentIndex < 0)\n        segmentIndex =\n          coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n      return lineString(\n        [\n          coords[multiFeatureIndex][geometryIndex][segmentIndex],\n          coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n        ],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature<Point<[10, 10]>>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature<Point<[-10, -10]>>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature<Point<[-30, -40]>>\n */\nfunction findPoint(geojson, options) {\n  // Optional Parameters\n  options = options || {};\n  if (!isObject(options)) throw new Error(\"options is invalid\");\n  var featureIndex = options.featureIndex || 0;\n  var multiFeatureIndex = options.multiFeatureIndex || 0;\n  var geometryIndex = options.geometryIndex || 0;\n  var coordIndex = options.coordIndex || 0;\n\n  // Find FeatureIndex\n  var properties = options.properties;\n  var geometry;\n\n  switch (geojson.type) {\n    case \"FeatureCollection\":\n      if (featureIndex < 0)\n        featureIndex = geojson.features.length + featureIndex;\n      properties = properties || geojson.features[featureIndex].properties;\n      geometry = geojson.features[featureIndex].geometry;\n      break;\n    case \"Feature\":\n      properties = properties || geojson.properties;\n      geometry = geojson.geometry;\n      break;\n    case \"Point\":\n    case \"MultiPoint\":\n      return null;\n    case \"LineString\":\n    case \"Polygon\":\n    case \"MultiLineString\":\n    case \"MultiPolygon\":\n      geometry = geojson;\n      break;\n    default:\n      throw new Error(\"geojson is invalid\");\n  }\n\n  // Find Coord Index\n  if (geometry === null) return null;\n  var coords = geometry.coordinates;\n  switch (geometry.type) {\n    case \"Point\":\n      return point(coords, properties, options);\n    case \"MultiPoint\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      return point(coords[multiFeatureIndex], properties, options);\n    case \"LineString\":\n      if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n      return point(coords[coordIndex], properties, options);\n    case \"Polygon\":\n      if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[geometryIndex].length + coordIndex;\n      return point(coords[geometryIndex][coordIndex], properties, options);\n    case \"MultiLineString\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (coordIndex < 0)\n        coordIndex = coords[multiFeatureIndex].length + coordIndex;\n      return point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case \"MultiPolygon\":\n      if (multiFeatureIndex < 0)\n        multiFeatureIndex = coords.length + multiFeatureIndex;\n      if (geometryIndex < 0)\n        geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n      if (coordIndex < 0)\n        coordIndex =\n          coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n      return point(\n        coords[multiFeatureIndex][geometryIndex][coordIndex],\n        properties,\n        options\n      );\n  }\n  throw new Error(\"geojson is invalid\");\n}\n\nexport { coordAll, coordEach, coordReduce, featureEach, featureReduce, findPoint, findSegment, flattenEach, flattenReduce, geomEach, geomReduce, lineEach, lineReduce, propEach, propReduce, segmentEach, segmentReduce };\n","import { coordEach } from \"@turf/meta\";\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n    var result = [Infinity, Infinity, -Infinity, -Infinity];\n    coordEach(geojson, function (coord) {\n        if (result[0] > coord[0]) {\n            result[0] = coord[0];\n        }\n        if (result[1] > coord[1]) {\n            result[1] = coord[1];\n        }\n        if (result[2] < coord[0]) {\n            result[2] = coord[0];\n        }\n        if (result[3] < coord[1]) {\n            result[3] = coord[1];\n        }\n    });\n    return result;\n}\nbbox[\"default\"] = bbox;\nexport default bbox;\n","import { polygon } from \"@turf/helpers\";\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @name bboxPolygon\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {Properties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature<Polygon>} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nexport default function bboxPolygon(bbox, options) {\n    if (options === void 0) { options = {}; }\n    // Convert BBox positions to Numbers\n    // No performance loss for including Number()\n    // https://github.com/Turfjs/turf/issues/1119\n    var west = Number(bbox[0]);\n    var south = Number(bbox[1]);\n    var east = Number(bbox[2]);\n    var north = Number(bbox[3]);\n    if (bbox.length === 6) {\n        throw new Error(\"@turf/bbox-polygon does not support BBox with 6 positions\");\n    }\n    var lowLeft = [west, south];\n    var topLeft = [west, north];\n    var topRight = [east, north];\n    var lowRight = [east, south];\n    return polygon([[lowLeft, lowRight, topRight, topLeft, lowLeft]], options.properties, { bbox: bbox, id: options.id });\n}\n","import { getCoord, getGeom } from \"@turf/invariant\";\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n *   [-81, 41],\n *   [-81, 47],\n *   [-72, 47],\n *   [-72, 41],\n *   [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nexport default function booleanPointInPolygon(point, polygon, options) {\n    if (options === void 0) { options = {}; }\n    // validation\n    if (!point) {\n        throw new Error(\"point is required\");\n    }\n    if (!polygon) {\n        throw new Error(\"polygon is required\");\n    }\n    var pt = getCoord(point);\n    var geom = getGeom(polygon);\n    var type = geom.type;\n    var bbox = polygon.bbox;\n    var polys = geom.coordinates;\n    // Quick elimination if point is not inside bbox\n    if (bbox && inBBox(pt, bbox) === false) {\n        return false;\n    }\n    // normalize to multipolygon\n    if (type === \"Polygon\") {\n        polys = [polys];\n    }\n    var insidePoly = false;\n    for (var i = 0; i < polys.length && !insidePoly; i++) {\n        // check if it is in the outer ring first\n        if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n            var inHole = false;\n            var k = 1;\n            // check for the point in any of the holes\n            while (k < polys[i].length && !inHole) {\n                if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n                    inHole = true;\n                }\n                k++;\n            }\n            if (!inHole) {\n                insidePoly = true;\n            }\n        }\n    }\n    return insidePoly;\n}\n/**\n * inRing\n *\n * @private\n * @param {Array<number>} pt [x,y]\n * @param {Array<Array<number>>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n    var isInside = false;\n    if (ring[0][0] === ring[ring.length - 1][0] &&\n        ring[0][1] === ring[ring.length - 1][1]) {\n        ring = ring.slice(0, ring.length - 1);\n    }\n    for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n        var xi = ring[i][0];\n        var yi = ring[i][1];\n        var xj = ring[j][0];\n        var yj = ring[j][1];\n        var onBoundary = pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0 &&\n            (xi - pt[0]) * (xj - pt[0]) <= 0 &&\n            (yi - pt[1]) * (yj - pt[1]) <= 0;\n        if (onBoundary) {\n            return !ignoreBoundary;\n        }\n        var intersect = yi > pt[1] !== yj > pt[1] &&\n            pt[0] < ((xj - xi) * (pt[1] - yi)) / (yj - yi) + xi;\n        if (intersect) {\n            isInside = !isInside;\n        }\n    }\n    return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n    return (bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]);\n}\n","import { LngLat, LngLatBounds } from 'mapbox-gl';\nimport bbox from '@turf/bbox';\nimport bboxPolygon from '@turf/bbox-polygon';\nimport booleanPointInPolygon from '@turf/boolean-point-in-polygon';\nimport { point } from '@turf/helpers';\nimport { BBox } from 'geojson';\n\n/**\n * Maps Mapbox LngLatBounds to geo json bounding box\n * @param {LngLatBounds} bounds - Mapbox LngLatBounds class instance\n * @returns {BBox} - geo json bounding box object\n */\nexport function mapLngLatBoundsToBbox(bounds: LngLatBounds): BBox {\n  const nw = bounds.getNorthWest();\n  const se = bounds.getSouthEast();\n\n  return [se.lat, nw.lng, nw.lat, se.lng];\n}\n\n/**\n * Creates a geo json bounding box for given points\n * @param {T[]} points - points array containing LngLat position\n * @returns {BBox} - geo json bounding box object\n */\nexport function getBboxFromPoints<T extends { position: LngLat }>(points: T[]): BBox {\n  return bbox({\n    type: 'FeatureCollection',\n    features: points.map(point => ({\n      type: 'Feature',\n      geometry: {\n        type: 'Point',\n        coordinates: [point.position.lat, point.position.lng],\n      },\n    })),\n  });\n}\n\n/**\n * Creates a geo json bounding box for given points\n * @param {BBox} bbox - geo json bounding box\n * @param {T[]} points - points array containing LngLat position\n * @returns {boolean} - boolean value whether the given bounding box contains any of the given points\n */\nexport function bboxContainsLngLat<T extends { position: LngLat }>(bbox: BBox, points: T[]) {\n  const turfPoly = bboxPolygon(bbox);\n\n  return points.some(({ position }) => {\n    const turfPoint = point([position.lat, position.lng]);\n    return booleanPointInPolygon(turfPoint, turfPoly);\n  });\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { PropType } from 'vue';\nimport { LngLat } from 'mapbox-gl';\n\nimport { useMapMoveState } from '@/composables/use-map-move-state';\nimport { useMap } from '@/composables/use-map';\nimport { getBboxFromPoints, bboxContainsLngLat, mapLngLatBoundsToBbox } from '@/utils/mapbox/bbox';\nimport { MIN_ZOOM_LEVEL } from '@/utils/mapbox';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\nimport { useMapState } from '@/composables/use-map-state';\n\ntype PointProp = { [key: string]: any; position: LngLat };\n\n\nexport default /*#__PURE__*/_defineComponent({\n  props: {\n  points: {\n    type: Array as PropType<PointProp[]>,\n    default: () => [],\n  },\n},\n  setup(__props) {\n\nconst props = __props\n\nconst UPDATE_ZOOM_CHANGE = 0.25;\nconst MIN_ZOOM_LEVEL_OFFSET = 0.5;\n\n\n\nconst map = useMap();\nconst { hasInitialLocation } = useMapState();\nconst { flyTo, fitBounds } = useMapMoveState();\n\nfunction updateMapBoundsForPoints() {\n  const mapBbox = mapLngLatBoundsToBbox(map.getBounds());\n  const pointsInMapBbox = bboxContainsLngLat<PointProp>(mapBbox, props.points);\n\n  if (pointsInMapBbox) {\n    // If updated points are within the maps current bounding box, we do not want to\n    // fly to the bounding box of the points, but just slightly zoom out for user search feedback\n    const currentZoom = map.getZoom();\n\n    if (currentZoom - UPDATE_ZOOM_CHANGE >= MIN_ZOOM_LEVEL + MIN_ZOOM_LEVEL_OFFSET) {\n      flyTo(map, { zoom: map.getZoom() - UPDATE_ZOOM_CHANGE, pitch: map.getPitch() });\n    }\n  } else {\n    // If there are no points within the current map bounding box, we calculate\n    // the bounding box of all the updated points and move to it\n    const [minX, minY, maxX, maxY] = getBboxFromPoints<PointProp>(props.points);\n\n    fitBounds(map, [\n      [minY, minX],\n      [maxY, maxX],\n    ]);\n  }\n}\n\nwatchWhileActive(\n  () => props.points,\n  points => {\n    if (hasInitialLocation.value || points.length === 0) {\n      hasInitialLocation.value = false;\n      return;\n    }\n\n    updateMapBoundsForPoints();\n  },\n);\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\"))\n}\n}\n\n})","import script from \"./MapSearchBounds.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./MapSearchBounds.vue?vue&type=script&lang=ts&setup=true\"\n\nconst __exports__ = script;\n\nexport default __exports__","import logger from '@/utils/logger';\n\nexport enum SessionStorageKey {\n  IntroSeen = 'expedition:intro_seen',\n}\n\nexport function getSessionStorageItem<T>(key: SessionStorageKey): T | undefined {\n  try {\n    const value = sessionStorage.getItem(key);\n\n    if (!value) {\n      return;\n    }\n\n    return JSON.parse(value) as T;\n  } catch (e) {\n    logger.error(`Failed to get local storage data with key '${key}'`, e);\n  }\n}\n\nexport function setSessionStorageItem(key: SessionStorageKey, value: unknown) {\n  try {\n    sessionStorage.setItem(key, JSON.stringify(value));\n  } catch (e) {\n    logger.error(`Failed to set local storage data with key '${key}' and value: ${value}`, e);\n  }\n}\n","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createElementBlock as _createElementBlock, Fragment as _Fragment, normalizeStyle as _normalizeStyle, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1f7f37ac\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n  key: 2,\n  class: \"map-content-links\"\n}\n\nimport { computed, nextTick, onMounted, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute } from 'vue-router';\nimport anime from 'animejs';\n\nimport ContentPageLinks from '@/components/Content/ContentPageLinks.vue';\nimport Header from '@/components/common/Header.vue';\nimport HeaderInfo from '@/components/common/HeaderInfo.vue';\nimport Mapbox from '@/components/Map/Mapbox.vue';\nimport MarkerLayer from '@/components/Map/Layers/MarkerLayer.vue';\nimport ClusterLayer from '@/components/Map/Layers/ClusterLayer.vue';\nimport AggregatedMarkerLayer from '@/components/Map/Layers/AggregatedMarkerLayer.vue';\nimport HighlightLayer from '@/components/Map/Layers/HighlightLayer.vue';\nimport ResetButton from '@/components/Map/ResetButton.vue';\nimport IntroOverlay from '@/components/Map/IntroOverlay.vue';\nimport MapNavigation from '@/components/Map/MapNavigation.vue';\nimport MapLogbookLink from '@/components/Map/MapLogbookLink.vue';\nimport MapSearchBounds from '@/components/Map/MapSearchBounds.vue';\nimport logger from '@/utils/logger';\nimport { Cluster, MapboxViewportEvent, MapPage, Point } from '@/model/map';\nimport {\n  GeoLocationRequest,\n  getClusters,\n  getClustersAndPoints,\n  getInitialClusters,\n  getMapPage,\n} from '@/services/map-service';\nimport { CLUSTER_MAX_ZOOM, MAX_LAT, MAX_LNG, MIN_LAT, MIN_LNG } from '@/utils/mapbox';\nimport { useMapState } from '@/composables/use-map-state';\nimport { useRouteHistory } from '@/composables/use-route-history';\nimport { useSearchQuery } from '@/composables/use-search-query';\nimport { AppError } from '@/services/errors';\nimport { usePageEvent } from '@/composables/use-page-event';\nimport { logInteractionEvent } from '@/utils/gtm';\nimport { handlePageError } from '@/utils/error';\nimport { useDimensions } from '@/composables/use-dimensions';\nimport { usePageLoader } from '@/composables/use-page-loader';\nimport { useHead } from '@/composables/use-head';\nimport { useEmbeddedState } from '@/composables/use-embedded-state';\nimport { getSessionStorageItem, SessionStorageKey, setSessionStorageItem } from '@/utils/session-storage';\nimport { watchWhileActive } from '@/utils/vue-lifecycle';\n\n\nexport default /*#__PURE__*/_defineComponent({\n  emits: ['register-transition-delay'],\n  setup(__props, { emit }) {\n\n\n\n// We have four types of data to display on the map\n// Points: individual points containing a single data entry. These are displayed as a marker with various icons to communicate difference in data richness\n// Aggregated points: points with unique location containing multiple data entries defined by a count\n// Clusters: points clustered by a grid tile, therefore not grouped by the same exact location, containing multiple data entries defined by a count\n// Highlighted expeditions: curated locations representing expedition starting points. These are displayed as a separate marker and open expeditions on click\nconst { isEmbedded, showHighlights } = useEmbeddedState();\nconst clusters = ref<Cluster[]>([]);\nconst points = ref<Point[]>([]);\nconst aggregatedPoints = ref<Cluster[]>([]);\nconst mapPage = ref<MapPage>();\nconst introDone = ref(!!isEmbedded.value);\nconst showIntro = ref(false);\nconst mapRef = ref<typeof Mapbox>();\nconst resetButtonVisible = ref(false);\nconst route = useRoute();\nconst { routeHistory } = useRouteHistory();\nconst { t } = useI18n();\nconst { updateHead } = useHead();\nconst { allState, stringifyMapStateToRoute, parseMapStateFromRoute, mapBounds, isClusterZoom } = useMapState();\nconst { submittedSearchValue, loadingSearchResults } = useSearchQuery(true);\nconst { isMobile, viewHeightPx } = useDimensions();\nconst { loadPage } = usePageLoader(emit);\nconst { logInitialPageEvent } = usePageEvent('map');\n\nconst totalObjectsCount = computed(() => {\n  const totalCount = mapPage.value?.collectionInformation.totalCount;\n  return totalCount ? `${totalCount.toLocaleString('nl-NL')} ${t('map.objects', totalCount)}` : '';\n});\nconst showIntroOverlay = computed(() => {\n  if (isEmbedded.value) return false;\n  return showIntro.value;\n});\nconst highlightedExpeditions = computed(() =>\n  mapPage.value && !isEmbedded.value ? mapPage.value.highlightedExpeditions : [],\n);\nconst highlightedOccurrences = computed(() =>\n  mapPage.value && showHighlights.value ? mapPage.value.highlightedOccurrences : [],\n);\n\nconst introShownInSession = getSessionStorageItem<boolean>(SessionStorageKey.IntroSeen);\n// Do not show intro if the user already saw it this session, came from another page or deeplinks to a gbifId\nif (introShownInSession || routeHistory.value?.from.name || route.query.gbifId || route.query.aggregated) {\n  stopIntro(true);\n}\n\nparseMapStateFromRoute();\n\nonMounted(async () => {\n  await fetchMapData();\n\n  if (introDone.value) {\n    logInitialPageEvent();\n  }\n});\n\nasync function fetchMapData() {\n  try {\n    mapPage.value = await getMapPage();\n    updateHead({ title: mapPage.value?.metaTitle });\n    await searchClusters();\n  } catch (e) {\n    handlePageError(e);\n  }\n}\n\nasync function wrapGetClusters() {\n  return await getClusters({\n    topLeft: new GeoLocationRequest(MAX_LAT, MIN_LNG),\n    bottomRight: new GeoLocationRequest(MIN_LAT, MAX_LNG),\n    amount: 10000,\n    precision: 7,\n    filterQuery: submittedSearchValue.value,\n  });\n}\n\nasync function wrapGetClustersAndPoints() {\n  if (!mapBounds.value) {\n    throw new AppError('Map bounds are not set');\n  }\n\n  const northwest = mapBounds.value.getNorthWest();\n  const southeast = mapBounds.value.getSouthEast();\n\n  return await getClustersAndPoints({\n    topLeft: new GeoLocationRequest(northwest.lat, northwest.lng),\n    bottomRight: new GeoLocationRequest(southeast.lat, southeast.lng),\n    amount: 10000,\n    filterQuery: submittedSearchValue.value,\n  });\n}\n\nasync function fetchClustersAndPoints(e: MapboxViewportEvent) {\n  if (e.zoom > CLUSTER_MAX_ZOOM) {\n    try {\n      const clustersAndPoints = await wrapGetClustersAndPoints();\n\n      points.value = clustersAndPoints.points;\n      aggregatedPoints.value = clustersAndPoints.clusters;\n    } catch (e) {\n      logger.error('Map page failed to mount', e);\n      // TODO: Show error popup or something\n    }\n  }\n\n  loadPage();\n\n  if (!introDone.value) {\n    startIntro();\n  }\n}\n\nfunction resetMapLocation() {\n  logInteractionEvent({\n    event_name: 'reset_location',\n    category: 'map_interaction',\n    interaction_type: 'click',\n    embed: isEmbedded.value,\n  });\n\n  mapRef.value?.resetLocation();\n  resetButtonVisible.value = false;\n}\n\nfunction onMapUpdate(e: MapboxViewportEvent) {\n  fetchClustersAndPoints(e);\n  resetButtonVisible.value = true;\n}\n\nfunction onMapLoad(e: MapboxViewportEvent) {\n  fetchClustersAndPoints(e);\n}\n\nfunction startIntro() {\n  showIntro.value = true;\n  animateMap([1.3, 1.15]);\n}\n\nfunction stopIntro(initial = false) {\n  showIntro.value = false;\n  introDone.value = true;\n  animateMap([1.15, 1]);\n  setSessionStorageItem(SessionStorageKey.IntroSeen, true);\n\n  if (!initial) {\n    logInitialPageEvent();\n  }\n}\n\nfunction animateMap(scale: number[]) {\n  anime({\n    targets: '.map #map',\n    duration: 1000,\n    easing: 'easeOutQuint',\n    scale,\n  });\n}\n\nasync function searchClusters() {\n  try {\n    loadingSearchResults.value = true;\n\n    clusters.value = submittedSearchValue.value\n      ? (await wrapGetClusters()) || clusters.value\n      : await getInitialClusters();\n\n    if (!isClusterZoom.value) {\n      const clustersAndPoints = await wrapGetClustersAndPoints();\n      points.value = clustersAndPoints.points;\n      aggregatedPoints.value = clustersAndPoints.clusters;\n    }\n\n    loadingSearchResults.value = false;\n  } catch (e) {\n    logger.error('Failed to update search results', e);\n    // TODO: Show error popup or something\n  }\n}\n\nwatchWhileActive(\n  () => submittedSearchValue.value,\n  async () => {\n    await nextTick();\n    await searchClusters();\n  },\n);\n\nwatchWhileActive(allState, async () => {\n  // Wait a tick to stringify map state to make sure all changes to selected markers have been made\n  await nextTick();\n  stringifyMapStateToRoute();\n});\n\nreturn (_ctx: any,_cache: any) => {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"map\",\n    style: _normalizeStyle({ height: _unref(viewHeightPx) })\n  }, [\n    (mapPage.value)\n      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n          (_unref(showIntroOverlay))\n            ? (_openBlock(), _createBlock(IntroOverlay, {\n                key: 0,\n                data: mapPage.value.introOverlay,\n                \"campaign-expedition\": mapPage.value.campaignExpedition,\n                show: showIntro.value,\n                onClose: stopIntro\n              }, null, 8, [\"data\", \"campaign-expedition\", \"show\"]))\n            : _createCommentVNode(\"\", true),\n          _createVNode(Header, {\n            class: _normalizeClass([\"map-header\", { 'intro-active': _unref(showIntroOverlay) }]),\n            \"hide-logo\": _unref(showIntroOverlay)\n          }, {\n            left: _withCtx(() => [\n              (!_unref(showIntroOverlay) && !_unref(isEmbedded))\n                ? (_openBlock(), _createBlock(HeaderInfo, {\n                    key: 0,\n                    title: _unref(totalObjectsCount),\n                    subtitle: _unref(t)('map.timeline')\n                  }, null, 8, [\"title\", \"subtitle\"]))\n                : _createCommentVNode(\"\", true)\n            ]),\n            right: _withCtx(() => [\n              _createVNode(MapNavigation, {\n                showIntro: _unref(showIntroOverlay),\n                \"quick-links\": mapPage.value.header.quickLinks\n              }, null, 8, [\"showIntro\", \"quick-links\"])\n            ]),\n            _: 1\n          }, 8, [\"class\", \"hide-logo\"]),\n          (!_unref(showIntroOverlay))\n            ? (_openBlock(), _createBlock(MapLogbookLink, { key: 1 }))\n            : _createCommentVNode(\"\", true),\n          _createVNode(Mapbox, {\n            \"init-zoom\": mapPage.value.initialMapLocation.zoomLevel,\n            \"init-center\": mapPage.value.initialMapLocation.center,\n            ref_key: \"mapRef\",\n            ref: mapRef,\n            onLoad: onMapLoad,\n            onUpdate: onMapUpdate\n          }, {\n            default: _withCtx(() => [\n              _createVNode(ClusterLayer, {\n                clusters: clusters.value,\n                \"max-zoom\": _unref(CLUSTER_MAX_ZOOM)\n              }, null, 8, [\"clusters\", \"max-zoom\"]),\n              _createVNode(MarkerLayer, {\n                points: points.value,\n                \"min-zoom\": _unref(CLUSTER_MAX_ZOOM)\n              }, null, 8, [\"points\", \"min-zoom\"]),\n              _createVNode(AggregatedMarkerLayer, {\n                \"aggregated-points\": aggregatedPoints.value,\n                \"min-zoom\": _unref(CLUSTER_MAX_ZOOM)\n              }, null, 8, [\"aggregated-points\", \"min-zoom\"]),\n              (!_unref(submittedSearchValue))\n                ? (_openBlock(), _createBlock(HighlightLayer, {\n                    key: 0,\n                    expeditions: _unref(highlightedExpeditions),\n                    occurrences: _unref(highlightedOccurrences),\n                    animate: introDone.value\n                  }, null, 8, [\"expeditions\", \"occurrences\", \"animate\"]))\n                : _createCommentVNode(\"\", true),\n              _createVNode(MapSearchBounds, { points: clusters.value }, null, 8, [\"points\"])\n            ]),\n            _: 1\n          }, 8, [\"init-zoom\", \"init-center\"]),\n          _createVNode(ResetButton, {\n            visible: resetButtonVisible.value,\n            onClick: resetMapLocation\n          }, null, 8, [\"visible\"]),\n          (!_unref(isMobile))\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n                _createVNode(ContentPageLinks)\n              ]))\n            : _createCommentVNode(\"\", true)\n        ], 64))\n      : _createCommentVNode(\"\", true)\n  ], 4))\n}\n}\n\n})","import script from \"./MapPage.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./MapPage.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./MapPage.vue?vue&type=style&index=0&id=1f7f37ac&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/vsts/work/1/s/src/NaturalisExpeditie.Q.Cms.Website/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1f7f37ac\"]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Searchbar.vue?vue&type=style&index=0&id=fbae1c5e&lang=scss&scoped=true\"","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeFloor = Math.floor,\n    nativeRandom = Math.random;\n\n/**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\nfunction baseRandom(lower, upper) {\n  return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n}\n\nmodule.exports = baseRandom;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ResetButton.vue?vue&type=style&index=0&id=98cb5fa4&lang=scss&scoped=true\"","var baseRandom = require('./_baseRandom');\n\n/**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\nfunction shuffleSelf(array, size) {\n  var index = -1,\n      length = array.length,\n      lastIndex = length - 1;\n\n  size = size === undefined ? length : size;\n  while (++index < size) {\n    var rand = baseRandom(index, lastIndex),\n        value = array[rand];\n\n    array[rand] = array[index];\n    array[index] = value;\n  }\n  array.length = size;\n  return array;\n}\n\nmodule.exports = shuffleSelf;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./MapNavigationPanel.vue?vue&type=style&index=0&id=650eec27&lang=scss&scoped=true\"","var arrayShuffle = require('./_arrayShuffle'),\n    baseShuffle = require('./_baseShuffle'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\nfunction shuffle(collection) {\n  var func = isArray(collection) ? arrayShuffle : baseShuffle;\n  return func(collection);\n}\n\nmodule.exports = shuffle;\n"],"sourceRoot":""}