@defra/interactive-map 0.0.29-alpha → 0.0.31-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/css/index.css +1 -1
  2. package/dist/esm/im-core.js +1 -1
  3. package/dist/esm/im-shell.js +1 -1
  4. package/dist/umd/im-core.js +1 -1
  5. package/dist/umd/index.js +1 -1
  6. package/docs/api/context.md +4 -4
  7. package/docs/api.md +111 -37
  8. package/docs/assets/css/docusaurus.scss +20 -4
  9. package/docs/assets/images/basic-map.jpg +0 -0
  10. package/docs/assets/images/button-first.jpg +0 -0
  11. package/docs/assets/images/deuteranopia-ozs-map-thumb.jpg +0 -0
  12. package/docs/assets/images/draw.jpg +0 -0
  13. package/docs/assets/images/marker-panel.jpg +0 -0
  14. package/docs/assets/images/night-ozs-map-thumb.jpg +0 -0
  15. package/docs/assets/images/outdoor-ozs-map-thumb.jpg +0 -0
  16. package/docs/assets/images/search.jpg +0 -0
  17. package/docs/assets/images/select-feature.jpg +0 -0
  18. package/docs/assets/images/style-switcher.jpg +0 -0
  19. package/docs/assets/images/toggle-marker-label.jpg +0 -0
  20. package/docs/assets/images/tritanopia-ozs-map-thumb.jpg +0 -0
  21. package/docs/examples/add-marker-with-panel.mdx +2 -2
  22. package/docs/examples/basic-map.mdx +2 -2
  23. package/docs/examples/draw.mdx +271 -0
  24. package/docs/examples/index.mdx +58 -10
  25. package/docs/examples/search-control.mdx +71 -0
  26. package/docs/examples/select-feature.mdx +146 -0
  27. package/docs/examples/style-switcher.mdx +135 -0
  28. package/docs/examples/toggle-marker-label.mdx +3 -3
  29. package/docs/plugins/datasets.md +15 -28
  30. package/docusaurus.config.cjs +5 -1
  31. package/package.json +1 -1
  32. package/plugins/beta/datasets/dist/css/index.css +4 -0
  33. package/plugins/beta/datasets/dist/esm/im-datasets-ml-adapter.js +1 -0
  34. package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +1 -1
  35. package/plugins/beta/datasets/dist/esm/index.js +1 -1
  36. package/plugins/beta/datasets/dist/umd/im-datasets-ml-adapter.js +2 -0
  37. package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +2 -0
  38. package/plugins/beta/datasets/dist/umd/index.js +2 -0
  39. package/plugins/beta/datasets/src/adapters/loadLayerAdapter.js +33 -0
  40. package/plugins/beta/datasets/src/adapters/maplibre/layerBuilders.js +44 -120
  41. package/plugins/beta/datasets/src/adapters/maplibre/maplibreLayerAdapter.js +145 -245
  42. package/plugins/beta/datasets/src/adapters/maplibre/maplibreLayerAdapter.test.js +516 -0
  43. package/plugins/beta/datasets/src/adapters/maplibre/registry/mapLibreDataset.js +191 -0
  44. package/plugins/beta/datasets/src/adapters/maplibre/registry/mapLibreDataset.test.js +441 -0
  45. package/plugins/beta/datasets/src/api/addDataset.js +2 -5
  46. package/plugins/beta/datasets/src/api/addDataset.test.js +16 -0
  47. package/plugins/beta/datasets/src/api/getOpacity.js +14 -14
  48. package/plugins/beta/datasets/src/api/getOpacity.test.js +72 -0
  49. package/plugins/beta/datasets/src/api/getStyle.js +8 -9
  50. package/plugins/beta/datasets/src/api/getStyle.test.js +42 -0
  51. package/plugins/beta/datasets/src/api/removeDataset.js +7 -7
  52. package/plugins/beta/datasets/src/api/removeDataset.test.js +45 -0
  53. package/plugins/beta/datasets/src/api/setData.js +9 -3
  54. package/plugins/beta/datasets/src/api/setData.test.js +62 -0
  55. package/plugins/beta/datasets/src/api/setDatasetVisibility.js +5 -30
  56. package/plugins/beta/datasets/src/api/setDatasetVisibility.test.js +31 -0
  57. package/plugins/beta/datasets/src/api/setFeatureVisibility.js +3 -21
  58. package/plugins/beta/datasets/src/api/setFeatureVisibility.test.js +32 -0
  59. package/plugins/beta/datasets/src/api/setGlobals.js +20 -0
  60. package/plugins/beta/datasets/src/api/setGlobals.test.js +63 -0
  61. package/plugins/beta/datasets/src/api/setOpacity.js +8 -27
  62. package/plugins/beta/datasets/src/api/setOpacity.test.js +31 -0
  63. package/plugins/beta/datasets/src/api/setStyle.js +5 -21
  64. package/plugins/beta/datasets/src/api/setStyle.test.js +53 -0
  65. package/plugins/beta/datasets/src/components/Key/Key.jsx +51 -0
  66. package/plugins/beta/datasets/src/components/Key/KeyGroupItem.jsx +18 -0
  67. package/plugins/beta/datasets/src/components/Key/KeyItem.jsx +20 -0
  68. package/plugins/beta/datasets/src/components/Key/KeySvg.jsx +22 -0
  69. package/plugins/beta/datasets/src/components/Key/KeySvg.test.jsx +87 -0
  70. package/plugins/beta/datasets/src/components/Key/KeySvgLine.jsx +19 -0
  71. package/plugins/beta/datasets/src/components/Key/KeySvgLine.test.jsx +71 -0
  72. package/plugins/beta/datasets/src/components/{KeySvgPattern.jsx → Key/KeySvgPattern.jsx} +3 -4
  73. package/plugins/beta/datasets/src/components/Key/KeySvgPattern.test.jsx +55 -0
  74. package/plugins/beta/datasets/src/components/Key/KeySvgRect.jsx +22 -0
  75. package/plugins/beta/datasets/src/components/Key/KeySvgRect.test.jsx +85 -0
  76. package/plugins/beta/datasets/src/components/{KeySvgSymbol.jsx → Key/KeySvgSymbol.jsx} +5 -5
  77. package/plugins/beta/datasets/src/components/Key/KeySvgSymbol.test.jsx +80 -0
  78. package/plugins/beta/datasets/src/components/Key/svgProperties.test.js +61 -0
  79. package/plugins/beta/datasets/src/{panels → components/LayersMenu}/Layers.module.scss +4 -0
  80. package/plugins/beta/datasets/src/components/LayersMenu/LayersMenu.jsx +33 -0
  81. package/plugins/beta/datasets/src/components/LayersMenu/LayersMenuCheckbox.jsx +31 -0
  82. package/plugins/beta/datasets/src/components/LayersMenu/LayersMenuGroupWrapper.jsx +19 -0
  83. package/plugins/beta/datasets/src/datasets.scss +2 -2
  84. package/plugins/beta/datasets/src/fetch/createDynamicSource.js +8 -8
  85. package/plugins/beta/datasets/src/{DatasetsInit.jsx → initialise/DatasetsInit.jsx} +19 -21
  86. package/plugins/beta/datasets/src/{defaults.js → initialise/defaults.js} +17 -2
  87. package/plugins/beta/datasets/src/initialise/defaults.test.js +127 -0
  88. package/plugins/beta/datasets/src/{datasets.js → initialise/initialiseDatasets.js} +30 -26
  89. package/plugins/beta/datasets/src/initialise/initialiseDatasets.test.js +273 -0
  90. package/plugins/beta/datasets/src/manifest.js +8 -6
  91. package/plugins/beta/datasets/src/reducers/__data__/demoDatasets.js +253 -0
  92. package/plugins/beta/datasets/src/reducers/datasetsToMenu.js +78 -0
  93. package/plugins/beta/datasets/src/reducers/datasetsToMenu.test.js +35 -0
  94. package/plugins/beta/datasets/src/reducers/mappedDatasetsReducer.js +34 -0
  95. package/plugins/beta/datasets/src/reducers/mappedDatasetsReducer.test.js +117 -0
  96. package/plugins/beta/datasets/src/reducers/pluginState.js +206 -0
  97. package/plugins/beta/datasets/src/reducers/pluginState.test.js +386 -0
  98. package/plugins/beta/datasets/src/registry/__mocks__/datasetRegistry.js +29 -0
  99. package/plugins/beta/datasets/src/registry/createDataset.js +5 -0
  100. package/plugins/beta/datasets/src/registry/dataset.js +172 -0
  101. package/plugins/beta/datasets/src/registry/dataset.test.js +483 -0
  102. package/plugins/beta/datasets/src/registry/datasetDefinitionCache.js +35 -0
  103. package/plugins/beta/datasets/src/registry/datasetRegistry.js +116 -0
  104. package/plugins/beta/datasets/src/registry/datasetRegistry.test.js +335 -0
  105. package/plugins/beta/datasets/src/registry/dynamicGeoJson.js +17 -0
  106. package/plugins/beta/datasets/src/registry/globalDataset.js +36 -0
  107. package/plugins/beta/draw-ml/dist/esm/im-draw-ml-plugin.js +1 -1
  108. package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -1
  109. package/plugins/beta/draw-ml/src/events.js +13 -1
  110. package/plugins/beta/draw-ml/src/index.js +1 -1
  111. package/plugins/beta/draw-ml/src/manifest.js +3 -0
  112. package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
  113. package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
  114. package/plugins/interact/src/InteractInit.jsx +2 -2
  115. package/plugins/interact/src/InteractInit.test.js +1 -1
  116. package/plugins/interact/src/events.js +2 -29
  117. package/plugins/interact/src/events.test.js +4 -102
  118. package/plugins/interact/src/hooks/useAttachEvents.js +3 -4
  119. package/plugins/interact/src/hooks/useAttachEvents.test.js +1 -3
  120. package/plugins/interact/src/hooks/useInteractionHandlers.js +10 -1
  121. package/plugins/interact/src/hooks/useInteractionHandlers.test.js +23 -4
  122. package/plugins/interact/src/manifest.js +0 -35
  123. package/plugins/interact/src/manifest.test.js +3 -43
  124. package/providers/beta/esri/dist/esm/im-esri-provider.js +1 -1
  125. package/providers/beta/esri/src/esriProvider.js +4 -0
  126. package/providers/beta/openlayers/dist/esm/im-openlayers-provider.js +1 -1
  127. package/providers/beta/openlayers/dist/umd/im-openlayers-provider.js +1 -1
  128. package/providers/beta/openlayers/src/openlayersProvider.js +4 -0
  129. package/providers/beta/openlayers/src/openlayersProvider.test.js +5 -0
  130. package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
  131. package/providers/maplibre/dist/umd/im-maplibre-provider.js +1 -1
  132. package/providers/maplibre/src/maplibreProvider.js +6 -4
  133. package/providers/maplibre/src/maplibreProvider.test.js +5 -0
  134. package/providers/maplibre/src/utils/highlightFeatures.js +74 -25
  135. package/providers/maplibre/src/utils/highlightFeatures.test.js +132 -0
  136. package/providers/maplibre/src/utils/patternImages.js +2 -4
  137. package/providers/maplibre/src/utils/symbolImages.js +1 -4
  138. package/rollup.esm.mjs +2 -8
  139. package/src/App/components/MapButton/MapButton.jsx +16 -1
  140. package/src/App/components/MapButton/MapButton.module.scss +12 -1
  141. package/src/App/components/MapButton/MapButton.test.jsx +40 -1
  142. package/src/App/components/Tooltip/getTooltipPosition.js +2 -2
  143. package/src/App/hooks/useContinueEnabledEvaluator.js +31 -0
  144. package/src/App/hooks/useContinueEnabledEvaluator.test.js +118 -0
  145. package/src/App/hooks/useEvaluateProp.js +15 -15
  146. package/src/App/hooks/useEvaluateProp.test.js +80 -76
  147. package/src/App/hooks/useLayoutMeasurements.js +1 -3
  148. package/src/App/hooks/useResizeObserver.js +12 -1
  149. package/src/App/hooks/useResizeObserver.test.js +1 -0
  150. package/src/App/renderer/PluginInits.jsx +2 -0
  151. package/src/App/renderer/mapButtons.js +21 -1
  152. package/src/App/renderer/mapButtons.test.js +46 -1
  153. package/src/App/store/appReducer.js +1 -1
  154. package/src/App/store/appReducer.test.js +37 -0
  155. package/src/InteractiveMap/InteractiveMap.js +10 -0
  156. package/src/InteractiveMap/InteractiveMap.test.js +8 -0
  157. package/src/InteractiveMap/polyfills.js +37 -6
  158. package/src/InteractiveMap/polyfills.test.js +132 -101
  159. package/src/config/appConfig.js +25 -0
  160. package/src/config/appConfig.test.js +50 -0
  161. package/src/config/defaults.js +1 -0
  162. package/src/scss/settings/_dimensions.scss +1 -0
  163. package/src/services/patternRegistry.js +8 -4
  164. package/src/types.js +7 -0
  165. package/src/utils/patternUtils.js +1 -2
  166. package/src/utils/patternUtils.test.js +9 -0
  167. package/webpack.dev.mjs +10 -0
  168. package/webpack.umd.mjs +1 -1
  169. package/plugins/beta/datasets/dist/adapters/maplibre/esm/im-datasets-ml-adapter.js +0 -1
  170. package/plugins/beta/datasets/dist/adapters/maplibre/esm/index.js +0 -1
  171. package/plugins/beta/datasets/dist/umd/maplibre/im-datasets-maplibre-adapter.js +0 -2
  172. package/plugins/beta/datasets/dist/umd/maplibre/im-datasets-plugin.js +0 -2
  173. package/plugins/beta/datasets/dist/umd/maplibre/index.js +0 -2
  174. package/plugins/beta/datasets/src/adapters/maplibre/index.js +0 -18
  175. package/plugins/beta/datasets/src/adapters/maplibre/layerIds.js +0 -75
  176. package/plugins/beta/datasets/src/adapters/maplibre/patternImages.js +0 -27
  177. package/plugins/beta/datasets/src/adapters/maplibre/symbolImages.js +0 -31
  178. package/plugins/beta/datasets/src/components/KeySvg.jsx +0 -24
  179. package/plugins/beta/datasets/src/components/KeySvgLine.jsx +0 -19
  180. package/plugins/beta/datasets/src/components/KeySvgRect.jsx +0 -22
  181. package/plugins/beta/datasets/src/index.maplibre.umd.js +0 -23
  182. package/plugins/beta/datasets/src/panels/Key.jsx +0 -62
  183. package/plugins/beta/datasets/src/panels/Layers.jsx +0 -141
  184. package/plugins/beta/datasets/src/reducer.js +0 -219
  185. package/plugins/beta/datasets/src/reducers/keyReducer.js +0 -34
  186. package/plugins/beta/datasets/src/utils/filters.js +0 -34
  187. package/plugins/beta/datasets/src/utils/mergeSublayer.js +0 -86
  188. package/plugins/beta/draw-ml/dist/css/index.css +0 -21
  189. /package/plugins/beta/datasets/dist/umd/{maplibre/im-datasets-maplibre-adapter.js.LICENSE.txt → im-datasets-ml-adapter.js.LICENSE.txt} +0 -0
  190. /package/plugins/beta/datasets/dist/umd/{maplibre/im-datasets-plugin.js.LICENSE.txt → im-datasets-plugin.js.LICENSE.txt} +0 -0
  191. /package/plugins/beta/datasets/dist/umd/{maplibre/index.js.LICENSE.txt → index.js.LICENSE.txt} +0 -0
  192. /package/plugins/beta/datasets/src/components/{EmptyKey.jsx → Key/EmptyKey.jsx} +0 -0
  193. /package/plugins/beta/datasets/src/components/{EmptyKey.test.jsx → Key/EmptyKey.test.jsx} +0 -0
  194. /package/plugins/beta/datasets/src/{panels → components/Key}/Key.module.scss +0 -0
  195. /package/plugins/beta/datasets/src/components/{svgProperties.js → Key/svgProperties.js} +0 -0
@@ -1 +1 @@
1
- import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";import i from"@babel/runtime/helpers/objectWithoutProperties";var r=function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null===(t=window.location)||void 0===t?void 0:t.search;return new URLSearchParams(i).get(e)},n=e=>{var{behaviour:t,hybridWidth:i,maxMobileWidth:r}=e;if("hybrid"!==t)return!1;var n=null!=i?i:r;return window.matchMedia("(max-width: ".concat(n,"px)")).matches},o=e=>{var{behaviour:t}=e;return["mapOnly","buttonFirst"].includes(t)||n(e)};function a(){s.forEach(e=>{!function(e,t){var i;if(!1!==e.config.manageHistoryState){e._isClosingViaBack=!1;var r=e.id===t,o="hybrid"===e.config.behaviour&&!n(e.config),a=null===(i=e.rootEl)||void 0===i?void 0:i.children.length;!r||a&&!e._isHidden?r||!a||o||function(e){var t,i;e.config.preserveStateOnClose?null===(t=e.hideApp)||void 0===t||t.call(e):null===(i=e.removeApp)||void 0===i||i.call(e)}(e):function(e){var t,i;e._isHidden?null===(t=e.showApp)||void 0===t||t.call(e):null===(i=e.loadApp)||void 0===i||i.call(e)}(e)}}(e,r(e.config.mapViewQueryParam))})}var s=new Map,l=!1;var c={register:function(e){l||(globalThis.addEventListener("popstate",a),l=!0),s.set(e.id,e)},unregister:function(e){s.delete(e.id),0===s.size&&(globalThis.removeEventListener("popstate",a),l=!1)}};function d(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,r)}return i}function u(e){try{return JSON.parse(e)}catch(e){return console.log(e),null}}function p(e){var i=function(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?d(Object(r),!0).forEach(function(i){t(e,i,r[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):d(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},null==e?void 0:e.dataset),r={};for(var n of Object.keys(i))r[n]=u(i[n]);return r}function h(e,t){e.innerHTML='<div class="im-c-error">'.concat(t,"</div>")}var v=(e,t,i,r)=>e!==t&&!(null!=i&&i.contains(e))&&e.matches(":not([aria-hidden]):not([data-fm-inert])")&&r.contains(e);function m(e){var t,{containerEl:i,isFullscreen:r,boundaryEl:n=document.body}=e,o=Array.from(n.querySelectorAll("[data-fm-inert]"));if(i&&(o=o.filter(e=>!i.contains(e))),o.forEach(e=>{e.removeAttribute("aria-hidden"),delete e.dataset.fmInert}),r){null===(t=document.activeElement)||void 0===t||t.blur();for(var a=i;null!==(s=a)&&void 0!==s&&s.parentNode&&a!==n&&a!==document.body;){var s,l=a.parentNode;for(var c of l.children)v(c,a,i,n)&&(c.setAttribute("aria-hidden","true"),c.dataset.fmInert="");a=l}}}function f(e){var{isFullscreen:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{config:i,rootEl:o}=e,{pageTitle:a,behaviour:s,containerHeight:l}=i,c=null!=t?t:function(e){var{id:t,behaviour:i,manageHistoryState:o}=e;return"mapOnly"===i||("buttonFirst"===i?!1===o||r(e.mapViewQueryParam)===t:n(e)&&r(e.mapViewQueryParam)===t)}(i);["mapOnly","buttonFirst","hybrid"].includes(s)&&(m({containerEl:o,isFullscreen:c}),document.documentElement.classList.toggle("im-is-fullscreen",c),o.classList.toggle("im-is-fullscreen",c)),["buttonFirst","hybrid"].includes(s)&&function(e){var{pageTitle:t,isFullscreen:i}=e,r=document.title.split(": "),n=r[r.length-1];document.title=i?"".concat(t,": ").concat(n):n}({pageTitle:a,isFullscreen:c});var d=c||"buttonFirst"!==s&&!n(i)?l:"auto";o.style.height=c?"100%":d}function b(){document.body.classList.remove("im-is-loading")}var _="[interactive-map]",P={warn:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return console.warn(_,...t)},error:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return console.error(_,...t)}};function E(e){var{id:t,behaviour:i}=e,o=r(e.mapViewQueryParam)===t;return["mapOnly","inline"].includes(i)||"hybrid"===i&&!n(e)||o}var y={appColorScheme:"light",autoColorScheme:!1,backgroundColor:"var(--background-color)",behaviour:"buttonFirst",buttonClass:"im-c-open-map-button",buttonText:"Map view",containerHeight:"600px",deviceNotSupportedText:"Your device is not supported. A map is available with a more up-to-date browser or device.",enableFullscreen:!1,enableZoomControls:!0,genericErrorText:"There was a problem loading the map. Please try again later.",hasExitButton:!1,hybridWidth:null,keyboardHintText:'<span class="im-u-visually-hidden">Press </span><kbd>Shift</kbd> + <kbd>?</kbd> <span class="im-u-visually-hidden">to view </span>keyboard shortcuts',mapLabel:"Interactive map application",mapProvider:null,mapSize:"small",manageHistoryState:!0,mapViewQueryParam:"mv",urlPosition:"sync",maxMobileWidth:640,minDesktopWidth:835,nudgePanDelta:5,nudgeZoomDelta:.1,panDelta:100,pageTitle:"Map view",preserveStateOnClose:!1,readMapText:!1,reverseGeocodeProvider:null,zoomDelta:1},g=["mapViewParamKey"];function A(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,r)}return i}function w(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?A(Object(r),!0).forEach(function(i){t(e,i,r[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):A(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function O(e){var t,{maxMobileWidth:i,minDesktopWidth:r,containerEl:n}=e,o="unknown",a=new Set,s=e=>{e!==o&&(o=e,requestAnimationFrame(()=>{o===e&&a.forEach(t=>t(e))}))};if(n){var l=function(e,t,i){e.style.containerType="inline-size";var r=e.getBoundingClientRect().width,n=t(r);e.dataset.breakpoint=n;var o=new window.ResizeObserver(r=>{var n,o,a=(null===(n=r[0])||void 0===n||null===(n=n.borderBoxSize)||void 0===n||null===(n=n[0])||void 0===n?void 0:n.inlineSize)||(null===(o=r[0])||void 0===o?void 0:o.contentRect.width),s=t(a);e.dataset.breakpoint=s,i(s)});return o.observe(e),{initialType:n,cleanup:()=>{o.disconnect(),e.style.containerType="",delete e.dataset.breakpoint}}}(n,e=>function(e,t,i){return e<=t?"mobile":e>=i?"desktop":"tablet"}(e,i,r),s);o=l.initialType,s(l.initialType),t=l.cleanup}else{var c=function(e,t,i){var r={mobile:window.matchMedia("(max-width: ".concat(e,"px)")),desktop:window.matchMedia("(min-width: ".concat(t,"px)"))},n=()=>{var e="tablet";r.mobile.matches?e="mobile":r.desktop.matches&&(e="desktop"),i(e)};return r.mobile.addEventListener("change",n),r.desktop.addEventListener("change",n),n(),{cleanup:()=>{r.mobile.removeEventListener("change",n),r.desktop.removeEventListener("change",n)}}}(i,r,s);t=c.cleanup}return{subscribe:e=>(a.add(e),()=>a.delete(e)),getBreakpoint:()=>o,destroy:()=>{var e;null===(e=t)||void 0===e||e(),a.clear()}}}var T=window.matchMedia("(pointer: coarse)").matches?"touch":"unknown",D=new Set,M=new Set;function S(e){T!==e&&(T=e,M.forEach(t=>t(e)),D.forEach(t=>t(e)))}function k(){return"unknown"===T?(T="mouse","mouse"):T}function B(e){return D.add(e),()=>{D.delete(e)}}var x=null;function L(){return null!==x}function C(e,t){if(!x)throw new Error("ReverseGeocode not initialised");return x(e,t)}var R={APP_ADD_MARKER:"app:addmarker",APP_UPDATE_MARKER:"app:updatemarker",APP_REMOVE_MARKER:"app:removemarker",APP_SET_MODE:"app:setmode",APP_REVERT_MODE:"app:revertmode",APP_ADD_BUTTON:"app:addbutton",APP_TOGGLE_BUTTON_STATE:"app:togglebuttonstate",APP_ADD_PANEL:"app:addpanel",APP_REMOVE_PANEL:"app:removepanel",APP_SHOW_PANEL:"app:showpanel",APP_HIDE_PANEL:"app:hidepanel",APP_ADD_CONTROL:"app:addcontrol",APP_READY:"app:ready",APP_OPENED:"app:opened",APP_CLOSED:"app:closed",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",MAP_SET_FEATURES:"map:setfeatures",MAP_SET_ACTIVE_FEATURE:"map:setactivefeature",MAP_SELECT_FEATURE:"map:selectfeature",MAP_SET_PIXEL_RATIO:"map:setpixelratio",MAP_FIT_TO_BOUNDS:"map:fittobounds",MAP_SET_VIEW:"map:setview",MAP_INIT_MAP_STYLES:"map:initmapstyles",MAP_STYLE_CHANGE:"map:stylechange",MAP_LOADED:"map:loaded",MAP_READY:"map:ready",MAP_SIZE_CHANGE:"map:sizechange",MAP_FIRST_IDLE:"map:firstidle",MAP_MOVE_START:"map:movestart",MAP_MOVE:"map:move",MAP_MOVE_END:"map:moveend",MAP_STATE_UPDATED:"map:stateupdated",MAP_DATA_CHANGE:"map:datachange",MAP_RENDER:"map:render",MAP_CLICK:"map:click",MAP_DESTROY:"map:destroy"};class j{constructor(){this.events={},this._queued={}}on(e,t){if(this.events[e]||(this.events[e]=[]),this.events[e].push(t),void 0!==this._queued[e]){try{t(...this._queued[e])}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}delete this._queued[e]}return this}once(e,t){var i=this,r=function(){i.off(e,r),t(...arguments)};return this.on(e,r)}off(e,t){return this.events[e]?(this.events[e]=t?this.events[e].filter(e=>e!==t):[],this):this}emit(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];return this.events[e]?(this.events[e].forEach(t=>{try{t(...i)}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}}),this):this}emitWhenReady(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),r=1;r<t;r++)i[r-1]=arguments[r];return this.events[e]&&0!==this.events[e].length?this.emit(e,...i):(this._queued[e]=i,this)}destroy(){this.events={},this._queued={}}}if("undefined"!=typeof crypto&&!crypto.randomUUID){var N=0;crypto.randomUUID=()=>(N=Math.max(Date.now(),N+1),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e,t)=>{var i=t<12?Number.parseInt(N.toString(16).padStart(12,"0")[t],16):16*Math.random()|0;return("x"===e?i:3&i|8).toString(16)}))}var I="undefined"!=typeof AbortController&&!Object.getPrototypeOf((new AbortController).signal).throwIfAborted;I&&(Object.getPrototypeOf((new AbortController).signal).throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");throw e.name="AbortError",e}});if(I&&"undefined"!=typeof URL&&URL.createObjectURL){var V=URL.createObjectURL.bind(URL);URL.createObjectURL=e=>{if(e instanceof Blob&&"text/javascript"===e.type){e=new Blob(['if(typeof AbortController!=="undefined"){var _p=Object.getPrototypeOf(new AbortController().signal);if(!_p.throwIfAborted){_p.throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");e.name="AbortError";throw e}}}}\n',e],{type:"text/javascript"})}return V(e)}}function F(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,r)}return i}function U(e){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?F(Object(r),!0).forEach(function(i){t(e,i,r[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):F(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}class H{constructor(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t(this,"_openButton",null),t(this,"_root",null),t(this,"_breakpointDetector",null),t(this,"_interfaceDetectorCleanup",null),t(this,"_hybridBehaviourCleanup",null),t(this,"_isHidden",!1),t(this,"_isClosingViaBack",!1),t(this,"_isLoading",!1),this.id=e,this.rootEl=document.getElementById(e),!this.rootEl)throw new Error('Element with id "'.concat(e,'" not found'));this.eventBus=new j,this.config=this._buildConfig(i),function(e,t){var{mapProvider:i,deviceNotSupportedText:r}=t,n=null==i?void 0:i.checkDeviceCapabilities();return i?!(null==n||!n.isSupported)||(h(e,r),b(),P.warn(null==n?void 0:n.error),!1):(P.warn("No map provider"),!1)}(this.rootEl,this.config)&&(["buttonFirst","hybrid"].includes(this.config.behaviour)&&c.register(this),this._breakpointDetector=O({maxMobileWidth:this.config.maxMobileWidth,minDesktopWidth:this.config.minDesktopWidth,containerEl:this.rootEl}),this._interfaceDetectorCleanup=function(){var e=window.matchMedia("(pointer: coarse)"),t=e=>{S(e.matches?"touch":"mouse")};e.addEventListener("change",t);var i=e=>{var t,i="pen"===(t=e.pointerType)||"touch"===t?"touch":"mouse"===t?"mouse":"unknown";i!==T&&(T=i,M.forEach(e=>e(i)),setTimeout(()=>{D.forEach(e=>e(i))},150))},r=e=>{"Tab"===e.key&&S("keyboard")};return window.addEventListener("pointerdown",i,{passive:!0}),window.addEventListener("keydown",r,{passive:!0}),()=>{e.removeEventListener("change",t),window.removeEventListener("pointerdown",i),window.removeEventListener("keydown",r)}}(),this._initialize())}_buildConfig(e){var t=p(this.rootEl);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{mapViewParamKey:t}=e,r=i(e,g),n=w(w({},y),r);return void 0!==t&&(console.warn("[InteractiveMap] mapViewParamKey is deprecated — use mapViewQueryParam instead."),n.mapViewQueryParam=t),n}(U(U({id:this.id,title:document.title},t),e))}_initialize(){["buttonFirst","hybrid"].includes(this.config.behaviour)&&(this._openButton=function(e,t,i){var{id:r,buttonText:n,buttonClass:o}=e,a='\n <a class="'.concat(o,"\" role=\"button\">\n <svg focusable='false' aria-hidden='true' width='16' height='20' viewBox='0 0 16 20' fillRule='evenodd'>\n <path d='M15 7.5c.009 3.778-4.229 9.665-7.5 12.5C4.229 17.165-.009 11.278 0 7.5a7.5 7.5 0 1 1 15 0z'/>\n <path d='M7.5 12.961a5.46 5.46 0 1 0 0-10.922 5.46 5.46 0 1 0 0 10.922z' fill='#fff'/>\n </svg>\n <span>").concat(n,"</span>\n <span class='im-u-visually-hidden'> (Visual only)</span>\n </a>\n ");t.insertAdjacentHTML("beforebegin",a);var s=t.previousElementSibling,l=new URL(window.location.href);return l.searchParams.set(e.mapViewQueryParam,r),s.setAttribute("href",l.toString()),s.addEventListener("click",e=>{e.preventDefault(),i(e)}),s}(this.config,this.rootEl,e=>{this._handleButtonClick(e)})),this._hybridBehaviourCleanup=function(e){var{behaviour:t,hybridWidth:i,maxMobileWidth:r}=e.config;if("buttonFirst"===t&&e._breakpointDetector.subscribe(()=>{E(e.config)?e.loadApp():e.removeApp()}),"hybrid"===t){var n=null!=i?i:r,o=window.matchMedia("(max-width: ".concat(n,"px)")),a=()=>{E(e.config)?e._isHidden?e.showApp():null==e._root?e.loadApp():f(e):e._root&&e.hideApp()};return o.addEventListener("change",a),()=>o.removeEventListener("change",a)}return null}(this),E(this.config)?this.loadApp():b()}_handleButtonClick(e){this._isHidden?(this.config.manageHistoryState&&history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this.showApp()):this._root||(this.config.manageHistoryState&&history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this.loadApp())}_removeMapParamFromUrl(e,t){var i=new RegExp("[?&]".concat(t,"=[^&]*(&|$)"));return i.test(e)?e.replace(i,(e,t)=>"&"===t?"?":"").replace(/\?$/,""):e}_handleExitClick(){var e;if(this.config.manageHistoryState)if(null!==(e=history.state)&&void 0!==e&&e.isBack){if(this._isClosingViaBack)return;this._isClosingViaBack=!0,history.back(),setTimeout(()=>{this._isClosingViaBack=!1},1e3)}else{this.config.preserveStateOnClose?this.hideApp():this.removeApp();var t=this.config.mapViewQueryParam,i=this._removeMapParamFromUrl(location.href,t);history.replaceState(history.state,"",i)}else this.config.preserveStateOnClose?this.hideApp():this.removeApp()}loadApp(){var t=this;return e(function*(){if(!t._root&&!t._isLoading){t._isLoading=!0,t._openButton&&(t._openButton.style.display="none");try{var{initialiseApp:i}=yield import(/* webpackChunkName: "im-core" */ "./im-core.js"),{MapProvider:r,mapFramework:n,mapProviderConfig:o}=yield t.config.mapProvider.load();t.config.reverseGeocodeProvider&&function(t,i){var{url:r,transformRequest:n,load:o}=t;x=function(){var t=e(function*(e,t){return(yield o())(r,n,i,e,t)});return function(e,i){return t.apply(this,arguments)}}()}(t.config.reverseGeocodeProvider,o.crs);var a=yield i(t.rootEl,U(U({id:t.id,initialBreakpoint:t._breakpointDetector.getBreakpoint(),initialInterfaceType:k()},t.config),{},{MapProvider:r,mapProviderConfig:o,mapFramework:n,eventBus:t.eventBus,breakpointDetector:t._breakpointDetector,handleExitClick:t._handleExitClick.bind(t)}));t._root=a._root,delete a._root;var s=new Set(["on","off","emit"]);Object.keys(a).forEach(e=>{s.has(e)||(t[e]=a[e])}),f(t),t.eventBus.emit(R.APP_OPENED,{statePreserved:!1})}catch(e){var l;throw null===(l=t._openButton)||void 0===l||l.removeAttribute("style"),h(t.rootEl,t.config.genericErrorText),console.error(e),e}finally{t._isLoading=!1}}})()}removeApp(){this._root&&"function"==typeof this.unmount&&(this.unmount(),this._root=null),this._openButton&&(this._openButton.removeAttribute("style"),this._openButton.focus()),f(this,{isFullscreen:!1}),this.eventBus.emit(R.APP_CLOSED,{statePreserved:!1}),this.eventBus.emit(R.MAP_DESTROY,{mapId:this.id})}hideApp(){this._isHidden=!0,this.rootEl.style.display="none",m({containerEl:this.rootEl,isFullscreen:!1}),this._openButton&&(this._openButton.removeAttribute("style"),this._openButton.focus()),document.documentElement.classList.remove("im-is-fullscreen"),this.rootEl.classList.remove("im-is-fullscreen");var e=document.title.split(": ");e.length>1&&(document.title=e.at(-1)),this.eventBus.emit(R.APP_CLOSED,{statePreserved:!0})}showApp(){this._isHidden=!1,this.rootEl.style.display="",this._openButton&&(this._openButton.style.display="none"),f(this),this.eventBus.emit(R.APP_OPENED,{statePreserved:!0})}destroy(){var e,t,i;this.removeApp(),null===(e=this._breakpointDetector)||void 0===e||e.destroy(),null===(t=this._interfaceDetectorCleanup)||void 0===t||t.call(this),null===(i=this._hybridBehaviourCleanup)||void 0===i||i.call(this),c.unregister(this),this.eventBus.destroy()}on(){this.eventBus.on(...arguments)}off(){this.eventBus.off(...arguments)}emit(){this.eventBus.emit(...arguments)}addMarker(e,t,i){this.eventBus.emit(R.APP_ADD_MARKER,{id:e,coords:t,options:i})}updateMarker(e,t){this.eventBus.emit(R.APP_UPDATE_MARKER,{id:e,options:t})}removeMarker(e){this.eventBus.emit(R.APP_REMOVE_MARKER,e)}setMode(e){this.eventBus.emit(R.APP_SET_MODE,e)}addButton(e,t){this.eventBus.emit(R.APP_ADD_BUTTON,{id:e,config:t})}toggleButtonState(e,t,i){this.eventBus.emit(R.APP_TOGGLE_BUTTON_STATE,{id:e,prop:t,value:i})}addPanel(e,t){this.eventBus.emit(R.APP_ADD_PANEL,{id:e,config:t})}removePanel(e){this.eventBus.emit(R.APP_REMOVE_PANEL,e)}showPanel(e){var{focus:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.eventBus.emit(R.APP_SHOW_PANEL,{id:e,focus:t})}hidePanel(e){this.eventBus.emit(R.APP_HIDE_PANEL,e)}addControl(e,t){this.eventBus.emit(R.APP_ADD_CONTROL,{id:e,config:t})}fitToBounds(e){this.eventBus.emitWhenReady(R.MAP_FIT_TO_BOUNDS,e)}setView(e){this.eventBus.emitWhenReady(R.MAP_SET_VIEW,e)}open(){this._isHidden?this.showApp():this._root||this.loadApp()}close(){this._handleExitClick()}}export{R as E,H as I,k as a,b,o as g,L as h,P as l,C as r,B as s,m as t};
1
+ import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";import r from"@babel/runtime/helpers/objectWithoutProperties";var i=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null===(t=window.location)||void 0===t?void 0:t.search;return new URLSearchParams(r).get(e)},n=e=>{var{behaviour:t,hybridWidth:r,maxMobileWidth:i}=e;if("hybrid"!==t)return!1;var n=null!=r?r:i;return window.matchMedia("(max-width: ".concat(n,"px)")).matches},o=e=>{var{behaviour:t}=e;return["mapOnly","buttonFirst"].includes(t)||n(e)};function a(){s.forEach(e=>{!function(e,t){var r;if(!1!==e.config.manageHistoryState){e._isClosingViaBack=!1;var i=e.id===t,o="hybrid"===e.config.behaviour&&!n(e.config),a=null===(r=e.rootEl)||void 0===r?void 0:r.children.length;!i||a&&!e._isHidden?i||!a||o||function(e){var t,r;e.config.preserveStateOnClose?null===(t=e.hideApp)||void 0===t||t.call(e):null===(r=e.removeApp)||void 0===r||r.call(e)}(e):function(e){var t,r;e._isHidden?null===(t=e.showApp)||void 0===t||t.call(e):null===(r=e.loadApp)||void 0===r||r.call(e)}(e)}}(e,i(e.config.mapViewQueryParam))})}var s=new Map,l=!1;var c={register:function(e){l||(globalThis.addEventListener("popstate",a),l=!0),s.set(e.id,e)},unregister:function(e){s.delete(e.id),0===s.size&&(globalThis.removeEventListener("popstate",a),l=!1)}};function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,i)}return r}function d(e){try{return JSON.parse(e)}catch(e){return console.log(e),null}}function p(e){var r=function(e){for(var r=1;r<arguments.length;r++){var i=null!=arguments[r]?arguments[r]:{};r%2?u(Object(i),!0).forEach(function(r){t(e,r,i[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):u(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}({},null==e?void 0:e.dataset),i={};for(var n of Object.keys(r))i[n]=d(r[n]);return i}function h(e,t){e.innerHTML='<div class="im-c-error">'.concat(t,"</div>")}var v=(e,t,r,i)=>e!==t&&!(null!=r&&r.contains(e))&&e.matches(":not([aria-hidden]):not([data-fm-inert])")&&i.contains(e);function m(e){var t,{containerEl:r,isFullscreen:i,boundaryEl:n=document.body}=e,o=Array.from(n.querySelectorAll("[data-fm-inert]"));if(r&&(o=o.filter(e=>!r.contains(e))),o.forEach(e=>{e.removeAttribute("aria-hidden"),delete e.dataset.fmInert}),i){null===(t=document.activeElement)||void 0===t||t.blur();for(var a=r;null!==(s=a)&&void 0!==s&&s.parentNode&&a!==n&&a!==document.body;){var s,l=a.parentNode;for(var c of l.children)v(c,a,r,n)&&(c.setAttribute("aria-hidden","true"),c.dataset.fmInert="");a=l}}}function f(e){var{isFullscreen:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{config:r,rootEl:o}=e,{pageTitle:a,behaviour:s,containerHeight:l}=r,c=null!=t?t:function(e){var{id:t,behaviour:r,manageHistoryState:o}=e;return"mapOnly"===r||("buttonFirst"===r?!1===o||i(e.mapViewQueryParam)===t:n(e)&&i(e.mapViewQueryParam)===t)}(r);["mapOnly","buttonFirst","hybrid"].includes(s)&&(m({containerEl:o,isFullscreen:c}),document.documentElement.classList.toggle("im-is-fullscreen",c),o.classList.toggle("im-is-fullscreen",c)),["buttonFirst","hybrid"].includes(s)&&function(e){var{pageTitle:t,isFullscreen:r}=e,i=document.title.split(": "),n=i[i.length-1];document.title=r?"".concat(t,": ").concat(n):n}({pageTitle:a,isFullscreen:c});var u=c||"buttonFirst"!==s&&!n(r)?l:"auto";o.style.height=c?"100%":u}function b(){document.body.classList.remove("im-is-loading")}var _="[interactive-map]",P={warn:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return console.warn(_,...t)},error:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return console.error(_,...t)}};function y(e){var{id:t,behaviour:r}=e,o=i(e.mapViewQueryParam)===t;return["mapOnly","inline"].includes(r)||"hybrid"===r&&!n(e)||o}var E={appColorScheme:"light",autoColorScheme:!1,backgroundColor:"var(--background-color)",behaviour:"buttonFirst",buttonClass:"im-c-open-map-button",buttonText:"Map view",containerHeight:"600px",deviceNotSupportedText:"Your device is not supported. A map is available with a more up-to-date browser or device.",enableFullscreen:!1,enableZoomControls:!0,genericErrorText:"There was a problem loading the map. Please try again later.",hasExitButton:!1,backAndContinue:null,hybridWidth:null,keyboardHintText:'<span class="im-u-visually-hidden">Press </span><kbd>Shift</kbd> + <kbd>?</kbd> <span class="im-u-visually-hidden">to view </span>keyboard shortcuts',mapLabel:"Interactive map application",mapProvider:null,mapSize:"small",manageHistoryState:!0,mapViewQueryParam:"mv",urlPosition:"sync",maxMobileWidth:640,minDesktopWidth:835,nudgePanDelta:5,nudgeZoomDelta:.1,panDelta:100,pageTitle:"Map view",preserveStateOnClose:!1,readMapText:!1,reverseGeocodeProvider:null,zoomDelta:1},g=["mapViewParamKey"];function A(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,i)}return r}function w(e){for(var r=1;r<arguments.length;r++){var i=null!=arguments[r]?arguments[r]:{};r%2?A(Object(i),!0).forEach(function(r){t(e,r,i[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):A(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}function O(e){var t,{maxMobileWidth:r,minDesktopWidth:i,containerEl:n}=e,o="unknown",a=new Set,s=e=>{e!==o&&(o=e,requestAnimationFrame(()=>{o===e&&a.forEach(t=>t(e))}))};if(n){var l=function(e,t,r){e.style.containerType="inline-size";var i=e.getBoundingClientRect().width,n=t(i);e.dataset.breakpoint=n;var o=new window.ResizeObserver(i=>{var n,o,a=(null===(n=i[0])||void 0===n||null===(n=n.borderBoxSize)||void 0===n||null===(n=n[0])||void 0===n?void 0:n.inlineSize)||(null===(o=i[0])||void 0===o?void 0:o.contentRect.width),s=t(a);e.dataset.breakpoint=s,r(s)});return o.observe(e),{initialType:n,cleanup:()=>{o.disconnect(),e.style.containerType="",delete e.dataset.breakpoint}}}(n,e=>function(e,t,r){return e<=t?"mobile":e>=r?"desktop":"tablet"}(e,r,i),s);o=l.initialType,s(l.initialType),t=l.cleanup}else{var c=function(e,t,r){var i={mobile:window.matchMedia("(max-width: ".concat(e,"px)")),desktop:window.matchMedia("(min-width: ".concat(t,"px)"))},n=()=>{var e="tablet";i.mobile.matches?e="mobile":i.desktop.matches&&(e="desktop"),r(e)};return i.mobile.addEventListener("change",n),i.desktop.addEventListener("change",n),n(),{cleanup:()=>{i.mobile.removeEventListener("change",n),i.desktop.removeEventListener("change",n)}}}(r,i,s);t=c.cleanup}return{subscribe:e=>(a.add(e),()=>a.delete(e)),getBreakpoint:()=>o,destroy:()=>{var e;null===(e=t)||void 0===e||e(),a.clear()}}}var T=window.matchMedia("(pointer: coarse)").matches?"touch":"unknown",D=new Set,k=new Set;function S(e){T!==e&&(T=e,k.forEach(t=>t(e)),D.forEach(t=>t(e)))}function M(){return"unknown"===T?(T="mouse","mouse"):T}function B(e){return D.add(e),()=>{D.delete(e)}}var x=null;function L(){return null!==x}function C(e,t){if(!x)throw new Error("ReverseGeocode not initialised");return x(e,t)}var j={APP_ADD_MARKER:"app:addmarker",APP_UPDATE_MARKER:"app:updatemarker",APP_REMOVE_MARKER:"app:removemarker",APP_SET_MODE:"app:setmode",APP_REVERT_MODE:"app:revertmode",APP_ADD_BUTTON:"app:addbutton",APP_TOGGLE_BUTTON_STATE:"app:togglebuttonstate",APP_ADD_PANEL:"app:addpanel",APP_REMOVE_PANEL:"app:removepanel",APP_SHOW_PANEL:"app:showpanel",APP_HIDE_PANEL:"app:hidepanel",APP_ADD_CONTROL:"app:addcontrol",APP_READY:"app:ready",APP_OPENED:"app:opened",APP_CLOSED:"app:closed",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",MAP_SET_FEATURES:"map:setfeatures",MAP_SET_ACTIVE_FEATURE:"map:setactivefeature",MAP_SELECT_FEATURE:"map:selectfeature",MAP_SET_PIXEL_RATIO:"map:setpixelratio",MAP_FIT_TO_BOUNDS:"map:fittobounds",MAP_SET_VIEW:"map:setview",MAP_INIT_MAP_STYLES:"map:initmapstyles",MAP_STYLE_CHANGE:"map:stylechange",MAP_LOADED:"map:loaded",MAP_READY:"map:ready",MAP_SIZE_CHANGE:"map:sizechange",MAP_FIRST_IDLE:"map:firstidle",MAP_MOVE_START:"map:movestart",MAP_MOVE:"map:move",MAP_MOVE_END:"map:moveend",MAP_STATE_UPDATED:"map:stateupdated",MAP_DATA_CHANGE:"map:datachange",MAP_RENDER:"map:render",MAP_CLICK:"map:click",MAP_DESTROY:"map:destroy"};class R{constructor(){this.events={},this._queued={}}on(e,t){if(this.events[e]||(this.events[e]=[]),this.events[e].push(t),void 0!==this._queued[e]){try{t(...this._queued[e])}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}delete this._queued[e]}return this}once(e,t){var r=this,i=function(){r.off(e,i),t(...arguments)};return this.on(e,i)}off(e,t){return this.events[e]?(this.events[e]=t?this.events[e].filter(e=>e!==t):[],this):this}emit(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return this.events[e]?(this.events[e].forEach(t=>{try{t(...r)}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}}),this):this}emitWhenReady(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),i=1;i<t;i++)r[i-1]=arguments[i];return this.events[e]&&0!==this.events[e].length?this.emit(e,...r):(this._queued[e]=r,this)}destroy(){this.events={},this._queued={}}}if("undefined"!=typeof crypto&&!crypto.randomUUID){var N=0;crypto.randomUUID=()=>(N=Math.max(Date.now(),N+1),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e,t)=>{var r=t<12?Number.parseInt(N.toString(16).padStart(12,"0")[t],16):16*Math.random()|0;return("x"===e?r:3&r|8).toString(16)}))}var I=!Object.hasOwn;I&&(Object.hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t));var V="undefined"!=typeof AbortController&&!Object.getPrototypeOf((new AbortController).signal).throwIfAborted;V&&(Object.getPrototypeOf((new AbortController).signal).throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");throw e.name="AbortError",e}});if((V||I)&&"undefined"!=typeof URL&&URL.createObjectURL){var F="text/javascript",U=["if(!Object.hasOwn){Object.hasOwn=function(o,k){return Object.prototype.hasOwnProperty.call(o,k)}}\n",V?'if(typeof AbortController!=="undefined"){var _p=Object.getPrototypeOf(new AbortController().signal);if(!_p.throwIfAborted){_p.throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");e.name="AbortError";throw e}}}}\n':""].join(""),H=URL.createObjectURL.bind(URL);if(URL.createObjectURL=e=>(e instanceof Blob&&e.type===F&&(e=new Blob([U,e],{type:F})),H(e)),"undefined"!=typeof Worker){var W=Worker;Worker=function(e,t){if("string"==typeof e&&!e.startsWith("blob:")){var r=new Blob(["".concat(U,"importScripts(").concat(JSON.stringify(e),")")],{type:F});e=H(r)}return new W(e,t)},Worker.prototype=W.prototype}}function z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,i)}return r}function G(e){for(var r=1;r<arguments.length;r++){var i=null!=arguments[r]?arguments[r]:{};r%2?z(Object(i),!0).forEach(function(r){t(e,r,i[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):z(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}class K{constructor(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t(this,"_openButton",null),t(this,"_root",null),t(this,"_breakpointDetector",null),t(this,"_interfaceDetectorCleanup",null),t(this,"_hybridBehaviourCleanup",null),t(this,"_isHidden",!1),t(this,"_isClosingViaBack",!1),t(this,"_isLoading",!1),this.id=e,this.rootEl=document.getElementById(e),!this.rootEl)throw new Error('Element with id "'.concat(e,'" not found'));this.eventBus=new R,this.config=this._buildConfig(r),function(e,t){var{mapProvider:r,deviceNotSupportedText:i}=t,n=null==r?void 0:r.checkDeviceCapabilities();return r?!(null==n||!n.isSupported)||(h(e,i),b(),P.warn(null==n?void 0:n.error),!1):(P.warn("No map provider"),!1)}(this.rootEl,this.config)&&(["buttonFirst","hybrid"].includes(this.config.behaviour)&&c.register(this),this._breakpointDetector=O({maxMobileWidth:this.config.maxMobileWidth,minDesktopWidth:this.config.minDesktopWidth,containerEl:this.rootEl}),this._interfaceDetectorCleanup=function(){var e=window.matchMedia("(pointer: coarse)"),t=e=>{S(e.matches?"touch":"mouse")};e.addEventListener("change",t);var r=e=>{var t,r="pen"===(t=e.pointerType)||"touch"===t?"touch":"mouse"===t?"mouse":"unknown";r!==T&&(T=r,k.forEach(e=>e(r)),setTimeout(()=>{D.forEach(e=>e(r))},150))},i=e=>{"Tab"===e.key&&S("keyboard")};return window.addEventListener("pointerdown",r,{passive:!0}),window.addEventListener("keydown",i,{passive:!0}),()=>{e.removeEventListener("change",t),window.removeEventListener("pointerdown",r),window.removeEventListener("keydown",i)}}(),this._initialize())}_buildConfig(e){var t=p(this.rootEl);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{mapViewParamKey:t}=e,i=r(e,g),n=w(w({},E),i);return void 0!==t&&(console.warn("[InteractiveMap] mapViewParamKey is deprecated — use mapViewQueryParam instead."),n.mapViewQueryParam=t),n}(G(G({id:this.id,title:document.title},t),e))}_initialize(){["buttonFirst","hybrid"].includes(this.config.behaviour)&&(this._openButton=function(e,t,r){var{id:i,buttonText:n,buttonClass:o}=e,a='\n <a class="'.concat(o,"\" role=\"button\">\n <svg focusable='false' aria-hidden='true' width='16' height='20' viewBox='0 0 16 20' fillRule='evenodd'>\n <path d='M15 7.5c.009 3.778-4.229 9.665-7.5 12.5C4.229 17.165-.009 11.278 0 7.5a7.5 7.5 0 1 1 15 0z'/>\n <path d='M7.5 12.961a5.46 5.46 0 1 0 0-10.922 5.46 5.46 0 1 0 0 10.922z' fill='#fff'/>\n </svg>\n <span>").concat(n,"</span>\n <span class='im-u-visually-hidden'> (Visual only)</span>\n </a>\n ");t.insertAdjacentHTML("beforebegin",a);var s=t.previousElementSibling,l=new URL(window.location.href);return l.searchParams.set(e.mapViewQueryParam,i),s.setAttribute("href",l.toString()),s.addEventListener("click",e=>{e.preventDefault(),r(e)}),s}(this.config,this.rootEl,e=>{this._handleButtonClick(e)})),this._hybridBehaviourCleanup=function(e){var{behaviour:t,hybridWidth:r,maxMobileWidth:i}=e.config;if("buttonFirst"===t&&e._breakpointDetector.subscribe(()=>{y(e.config)?e.loadApp():e.removeApp()}),"hybrid"===t){var n=null!=r?r:i,o=window.matchMedia("(max-width: ".concat(n,"px)")),a=()=>{y(e.config)?e._isHidden?e.showApp():null==e._root?e.loadApp():f(e):e._root&&e.hideApp()};return o.addEventListener("change",a),()=>o.removeEventListener("change",a)}return null}(this),y(this.config)?this.loadApp():b()}_handleButtonClick(e){this._isHidden?(this.config.manageHistoryState&&history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this.showApp()):this._root||(this.config.manageHistoryState&&history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this.loadApp())}_removeMapParamFromUrl(e,t){var r=new RegExp("[?&]".concat(t,"=[^&]*(&|$)"));return r.test(e)?e.replace(r,(e,t)=>"&"===t?"?":"").replace(/\?$/,""):e}_handleExitClick(){var e;if(this.config.manageHistoryState)if(null!==(e=history.state)&&void 0!==e&&e.isBack){if(this._isClosingViaBack)return;this._isClosingViaBack=!0,history.back(),setTimeout(()=>{this._isClosingViaBack=!1},1e3)}else{this.config.preserveStateOnClose?this.hideApp():this.removeApp();var t=this.config.mapViewQueryParam,r=this._removeMapParamFromUrl(location.href,t);history.replaceState(history.state,"",r)}else this.config.preserveStateOnClose?this.hideApp():this.removeApp()}loadApp(){var t=this;return e(function*(){if(!t._root&&!t._isLoading){t._isLoading=!0,t._openButton&&(t._openButton.style.display="none");try{var{initialiseApp:r}=yield import(/* webpackChunkName: "im-core" */ "./im-core.js"),{MapProvider:i,mapFramework:n,mapProviderConfig:o}=yield t.config.mapProvider.load();t.config.reverseGeocodeProvider&&function(t,r){var{url:i,transformRequest:n,load:o}=t;x=function(){var t=e(function*(e,t){return(yield o())(i,n,r,e,t)});return function(e,r){return t.apply(this,arguments)}}()}(t.config.reverseGeocodeProvider,o.crs);var a=yield r(t.rootEl,G(G({id:t.id,initialBreakpoint:t._breakpointDetector.getBreakpoint(),initialInterfaceType:M()},t.config),{},{MapProvider:i,mapProviderConfig:o,mapFramework:n,eventBus:t.eventBus,breakpointDetector:t._breakpointDetector,handleExitClick:t._handleExitClick.bind(t)}));t._root=a._root,delete a._root;var s=new Set(["on","off","emit"]);Object.keys(a).forEach(e=>{s.has(e)||(t[e]=a[e])}),f(t),t.eventBus.emit(j.APP_OPENED,{statePreserved:!1})}catch(e){var l;throw null===(l=t._openButton)||void 0===l||l.removeAttribute("style"),h(t.rootEl,t.config.genericErrorText),console.error(e),e}finally{t._isLoading=!1}}})()}removeApp(){this._root&&"function"==typeof this.unmount&&(this.unmount(),this._root=null),this._openButton&&(this._openButton.removeAttribute("style"),this._openButton.focus()),f(this,{isFullscreen:!1}),this.eventBus.emit(j.APP_CLOSED,{statePreserved:!1}),this.eventBus.emit(j.MAP_DESTROY,{mapId:this.id})}hideApp(){this._isHidden=!0,this.rootEl.style.display="none",m({containerEl:this.rootEl,isFullscreen:!1}),this._openButton&&(this._openButton.removeAttribute("style"),this._openButton.focus()),document.documentElement.classList.remove("im-is-fullscreen"),this.rootEl.classList.remove("im-is-fullscreen");var e=document.title.split(": ");e.length>1&&(document.title=e.at(-1)),this.eventBus.emit(j.APP_CLOSED,{statePreserved:!0})}showApp(){this._isHidden=!1,this.rootEl.style.display="",this._openButton&&(this._openButton.style.display="none"),f(this),this.eventBus.emit(j.APP_OPENED,{statePreserved:!0})}destroy(){var e,t,r;this.removeApp(),null===(e=this._breakpointDetector)||void 0===e||e.destroy(),null===(t=this._interfaceDetectorCleanup)||void 0===t||t.call(this),null===(r=this._hybridBehaviourCleanup)||void 0===r||r.call(this),c.unregister(this),this.eventBus.destroy()}on(){this.eventBus.on(...arguments)}off(){this.eventBus.off(...arguments)}emit(){this.eventBus.emit(...arguments)}addMarker(e,t,r){this.eventBus.emit(j.APP_ADD_MARKER,{id:e,coords:t,options:r})}updateMarker(e,t){this.eventBus.emit(j.APP_UPDATE_MARKER,{id:e,options:t})}removeMarker(e){this.eventBus.emit(j.APP_REMOVE_MARKER,e)}setMode(e){this.eventBus.emit(j.APP_SET_MODE,e)}addButton(e,t){this.eventBus.emit(j.APP_ADD_BUTTON,{id:e,config:t})}toggleButtonState(e,t,r){this.eventBus.emit(j.APP_TOGGLE_BUTTON_STATE,{id:e,prop:t,value:r})}setContinueEnabled(e){this.toggleButtonState("journeyContinue","disabled",!e)}addPanel(e,t){this.eventBus.emit(j.APP_ADD_PANEL,{id:e,config:t})}removePanel(e){this.eventBus.emit(j.APP_REMOVE_PANEL,e)}showPanel(e){var{focus:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.eventBus.emit(j.APP_SHOW_PANEL,{id:e,focus:t})}hidePanel(e){this.eventBus.emit(j.APP_HIDE_PANEL,e)}addControl(e,t){this.eventBus.emit(j.APP_ADD_CONTROL,{id:e,config:t})}fitToBounds(e){this.eventBus.emitWhenReady(j.MAP_FIT_TO_BOUNDS,e)}setView(e){this.eventBus.emitWhenReady(j.MAP_SET_VIEW,e)}open(){this._isHidden?this.showApp():this._root||this.loadApp()}close(){this._handleExitClick()}}export{j as E,K as I,M as a,b,o as g,L as h,P as l,C as r,B as s,m as t};