@defra/interactive-map 0.0.18-alpha → 0.0.19-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.
- package/assets/css/docusaurus.css +58 -34
- package/dist/css/index.css +1 -1
- package/dist/esm/im-core.js +1 -1
- package/dist/esm/im-shell.js +1 -1
- package/dist/umd/im-core.js +1 -1
- package/dist/umd/index.js +1 -1
- package/docs/api/panel-definition.md +16 -0
- package/docs/api.md +28 -4
- package/docs/assets/basic-map.jpg +0 -0
- package/docs/assets/button-first.jpg +0 -0
- package/docs/assets/maker-panel.jpg +0 -0
- package/docs/examples/add-marker-with-panel.mdx +59 -0
- package/docs/examples/basic-map.mdx +24 -0
- package/docs/examples/button-map.mdx +24 -0
- package/docs/examples/index.mdx +49 -0
- package/docs/index.mdx +1 -1
- package/docs/plugins/interact.md +32 -1
- package/docs/plugins.md +1 -1
- package/docusaurus.config.cjs +9 -1
- package/package.json +1 -1
- package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +1 -1
- package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +1 -1
- package/plugins/beta/draw-es/dist/esm/im-draw-es-plugin.js +1 -1
- package/plugins/beta/draw-ml/dist/css/index.css +2 -19
- package/plugins/beta/draw-ml/dist/esm/im-draw-ml-plugin.js +1 -1
- package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -1
- package/plugins/beta/scale-bar/dist/css/index.css +1 -1
- package/plugins/beta/scale-bar/src/scaleBar.scss +1 -0
- package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
- package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
- package/plugins/interact/dist/umd/index.js +1 -1
- package/plugins/interact/src/InteractInit.jsx +5 -3
- package/plugins/interact/src/api/clear.js +1 -1
- package/plugins/interact/src/api/selectMarker.js +14 -0
- package/plugins/interact/src/api/selectMarker.test.js +25 -0
- package/plugins/interact/src/api/unselectMarker.js +14 -0
- package/plugins/interact/src/api/unselectMarker.test.js +14 -0
- package/plugins/interact/src/events.js +18 -30
- package/plugins/interact/src/events.test.js +113 -108
- package/plugins/interact/src/manifest.js +10 -2
- package/plugins/interact/src/reducer.js +36 -1
- package/plugins/interact/src/reducer.test.js +40 -1
- package/plugins/interact/src/utils/interactionModes.js +12 -0
- package/src/App/components/Panel/Panel.jsx +6 -6
- package/src/App/components/Panel/Panel.test.jsx +37 -0
- package/src/App/components/Viewport/Viewport.jsx +5 -15
- package/src/App/components/Viewport/Viewport.module.scss +2 -0
- package/src/App/components/Viewport/Viewport.test.jsx +16 -33
- package/src/App/hooks/useInterfaceAPI.js +7 -7
- package/src/App/hooks/useInterfaceAPI.test.js +15 -9
- package/src/App/hooks/useLayoutMeasurements.js +64 -72
- package/src/App/layout/Layout.jsx +1 -1
- package/src/App/layout/layout.module.scss +1 -8
- package/src/App/renderer/HtmlElementHost.jsx +10 -5
- package/src/App/renderer/mapPanels.js +2 -1
- package/src/App/store/appActionsMap.js +4 -4
- package/src/App/store/appActionsMap.test.js +10 -0
- package/src/InteractiveMap/InteractiveMap.js +59 -11
- package/src/InteractiveMap/InteractiveMap.test.js +126 -4
- package/src/InteractiveMap/domStateManager.js +18 -6
- package/src/InteractiveMap/domStateManager.test.js +21 -0
- package/src/InteractiveMap/historyManager.js +28 -16
- package/src/InteractiveMap/historyManager.test.js +17 -0
- package/src/config/appConfig.js +2 -1
- package/src/config/appConfig.test.js +3 -13
- package/src/config/defaults.js +2 -1
- package/src/config/events.js +20 -21
- package/src/services/closeApp.js +1 -10
- package/src/services/closeApp.test.js +3 -43
- package/src/types.js +6 -1
- package/src/utils/mapStateSync.js +48 -10
- package/src/utils/mapStateSync.test.js +29 -9
- package/docs/examples.mdx +0 -70
package/dist/esm/im-shell.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";var n=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null===(t=window.location)||void 0===t?void 0:t.search;return new URLSearchParams(n).get(e)},r=e=>{var{behaviour:t,hybridWidth:n,maxMobileWidth:r}=e;if("hybrid"!==t)return!1;var i=null!=n?n:r;return window.matchMedia("(max-width: ".concat(i,"px)")).matches},i=e=>{var{behaviour:t}=e;return["mapOnly","buttonFirst"].includes(t)||r(e)},o={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:!1,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>Alt</kbd> + <kbd>K</kbd> <span class="im-u-visually-hidden">to view </span>keyboard shortcuts',mapLabel:"Interactive map",mapProvider:null,mapSize:"small",mapViewParamKey:"mv",maxMobileWidth:640,minDesktopWidth:835,nudgePanDelta:5,nudgeZoomDelta:.1,panDelta:100,pageTitle:"Map view",preserveStateOnClose:!1,readMapText:!1,reverseGeocodeProvider:null,zoomDelta:1};function a(e){var t,n;e._isHidden?null===(t=e.showApp)||void 0===t||t.call(e):null===(n=e.loadApp)||void 0===n||n.call(e)}function s(e){var t,n;e.config.preserveStateOnClose?null===(t=e.hideApp)||void 0===t||t.call(e):null===(n=e.removeApp)||void 0===n||n.call(e)}function l(){var e=n(o.mapViewParamKey);for(var t of c.values()){var i,l=t.id===e,d="hybrid"===t.config.behaviour&&!r(t.config),p=null===(i=t.rootEl)||void 0===i?void 0:i.children.length;!l||p&&!t._isHidden?l||!p||d||s(t):a(t)}}var c=new Map,d=!1;var p={register:function(e){d||(window.addEventListener("popstate",l),d=!0),c.set(e.id,e)},unregister:function(e){c.delete(e.id)}};function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function h(e){try{return JSON.parse(e)}catch(e){return console.log(e),null}}function v(e){var n=function(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?u(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({},null==e?void 0:e.dataset),r={};for(var i of Object.keys(n))r[i]=h(n[i]);return r}function m(e,t){e.innerHTML='<div class="im-c-error">'.concat(t,"</div>")}var f=(e,t,n,r)=>e!==t&&!(null!=n&&n.contains(e))&&e.matches(":not([aria-hidden]):not([data-fm-inert])")&&r.contains(e);function b(e){var t,{containerEl:n,isFullscreen:r,boundaryEl:i=document.body}=e,o=Array.from(i.querySelectorAll("[data-fm-inert]"));if(n&&(o=o.filter(e=>!n.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=n;null!==(s=a)&&void 0!==s&&s.parentNode&&a!==i&&a!==document.body;){var s,l=a.parentNode;for(var c of l.children)f(c,a,n,i)&&(c.setAttribute("aria-hidden","true"),c.dataset.fmInert="");a=l}}}function P(e){var{config:t,rootEl:i}=e,{pageTitle:a,behaviour:s,containerHeight:l}=t,c=function(e){var{id:t,behaviour:i}=e,a=n(o.mapViewParamKey)===t;return"mapOnly"===i||a&&("buttonFirst"===i||r(e))}(t);["mapOnly","buttonFirst","hybrid"].includes(s)&&(b({containerEl:i,isFullscreen:c}),document.documentElement.classList.toggle("im-is-fullscreen",c),i.classList.toggle("im-is-fullscreen",c)),["buttonFirst","hybrid"].includes(s)&&function(e){var{pageTitle:t,isFullscreen:n}=e,r=document.title.split(": "),i=r[r.length-1];document.title=n?"".concat(t,": ").concat(i):i}({pageTitle:a,isFullscreen:c});var d=c||"buttonFirst"!==s&&!r(t)?l:"auto";i.style.height=c?"100%":d}function _(){document.body.classList.remove("im-is-loading")}function E(e){var{id:t,behaviour:i}=e,a=n(o.mapViewParamKey)===t;return["mapOnly","inline"].includes(i)||"hybrid"===i&&!r(e)||a}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function A(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?y(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):y(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function g(e){var t,{maxMobileWidth:n,minDesktopWidth:r,containerEl:i}=e,o="unknown",a=new Set,s=e=>{e!==o&&(o=e,requestAnimationFrame(()=>{o===e&&a.forEach(t=>t(e))}))};if(i){var l=function(e,t,n){e.style.containerType="inline-size";var r=e.getBoundingClientRect().width,i=t(r);e.dataset.breakpoint=i;var o=new window.ResizeObserver(r=>{var i,o,a=(null===(i=r[0])||void 0===i||null===(i=i.borderBoxSize)||void 0===i||null===(i=i[0])||void 0===i?void 0:i.inlineSize)||(null===(o=r[0])||void 0===o?void 0:o.contentRect.width),s=t(a);e.dataset.breakpoint=s,n(s)});return o.observe(e),{initialType:i,cleanup:()=>{o.disconnect(),e.style.containerType="",delete e.dataset.breakpoint}}}(i,e=>function(e,t,n){return e<=t?"mobile":e>=n?"desktop":"tablet"}(e,n,r),s);o=l.initialType,s(l.initialType),t=l.cleanup}else{var c=function(e,t,n){var r={mobile:window.matchMedia("(max-width: ".concat(e,"px)")),desktop:window.matchMedia("(min-width: ".concat(t,"px)"))},i=()=>{var e="tablet";r.mobile.matches?e="mobile":r.desktop.matches&&(e="desktop"),n(e)};return r.mobile.addEventListener("change",i),r.desktop.addEventListener("change",i),i(),{cleanup:()=>{r.mobile.removeEventListener("change",i),r.desktop.removeEventListener("change",i)}}}(n,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 w=window.matchMedia("(pointer: coarse)").matches?"touch":"unknown",O=new Set;function D(e){w!==e&&(w=e,O.forEach(t=>{t(e)}))}function T(e){return O.add(e),()=>{O.delete(e)}}var x=null;function M(e,t){if(!x)throw new Error("ReverseGeocode not initialised");return x(e,t)}var B={APP_ADD_MARKER:"app:addmarker",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_VISIBLE:"app:visible",APP_HIDDEN:"app:hidden",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",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_EXIT:"map:exit",MAP_DESTROY:"map:destroy"};class k{constructor(){this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),this}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,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return this.events[e]?(this.events[e].forEach(t=>{try{t(...n)}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}}),this):this}destroy(){this.events={}}}if("undefined"!=typeof crypto&&!crypto.randomUUID){var S=0;crypto.randomUUID=()=>(S=Math.max(Date.now(),S+1),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e,t)=>{var n=t<12?Number.parseInt(S.toString(16).padStart(12,"0")[t],16):16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}))}var L="undefined"!=typeof AbortController&&!Object.getPrototypeOf((new AbortController).signal).throwIfAborted;L&&(Object.getPrototypeOf((new AbortController).signal).throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");throw e.name="AbortError",e}});if(L&&"undefined"!=typeof URL&&URL.createObjectURL){var j=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 j(e)}}function R(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function C(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?R(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):R(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}class I{constructor(e){var n=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),this.id=e,this.rootEl=document.getElementById(e),!this.rootEl)throw new Error('Element with id "'.concat(e,'" not found'));this.eventBus=new k,this.config=this._buildConfig(n),function(e,t){var{mapProvider:n,deviceNotSupportedText:r}=t,i=null==n?void 0:n.checkDeviceCapabilities();return n?!(null==i||!i.isSupported)||(m(e,r),_(),console.log(null==i?void 0:i.error),!1):(console.log("No map provider"),!1)}(this.rootEl,this.config)&&(["buttonFirst","hybrid"].includes(this.config.behaviour)&&p.register(this),this._breakpointDetector=g({maxMobileWidth:this.config.maxMobileWidth,minDesktopWidth:this.config.minDesktopWidth,containerEl:this.rootEl}),this._interfaceDetectorCleanup=function(){var e=window.matchMedia("(pointer: coarse)"),t=e=>{D(e.matches?"touch":"mouse")};e.addEventListener("change",t);var n=e=>{var t,n="pen"===(t=e.pointerType)||"touch"===t?"touch":"mouse"===t?"mouse":"unknown";setTimeout(()=>D(n),150)},r=e=>{"Tab"===e.key&&D("keyboard")};return window.addEventListener("pointerdown",n,{passive:!0}),window.addEventListener("keydown",r,{passive:!0}),()=>{e.removeEventListener("change",t),window.removeEventListener("pointerdown",n),window.removeEventListener("keydown",r)}}(),this._initialize())}_buildConfig(e){var t=v(this.rootEl);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return A(A({},o),e)}(C(C({id:this.id,title:document.title},t),e))}_initialize(){["buttonFirst","hybrid"].includes(this.config.behaviour)&&(this._openButton=function(e,t,n){var{id:r,buttonText:i,buttonClass:a}=e,s='\n <a class="'.concat(a,"\" 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(i,"</span>\n <span class='im-u-visually-hidden'> (Visual only)</span>\n </a>\n ");t.insertAdjacentHTML("beforebegin",s);var l=t.previousElementSibling,c=new URL(window.location.href);return c.searchParams.set(o.mapViewParamKey,r),l.setAttribute("href",c.toString()),l.addEventListener("click",e=>{e.preventDefault(),n(e)}),l}(this.config,this.rootEl,e=>{this._handleButtonClick(e)})),this._hybridBehaviourCleanup=function(e){var{behaviour:t,hybridWidth:n,maxMobileWidth:r}=e.config;if("buttonFirst"===t&&e._breakpointDetector.subscribe(()=>{E(e.config)?e.loadApp():e.removeApp()}),"hybrid"===t){var i=null!=n?n:r,o=window.matchMedia("(max-width: ".concat(i,"px)")),a=()=>{E(e.config)?e._isHidden?e.showApp():null==e._root?e.loadApp():P(e):e._root&&e.hideApp()};return o.addEventListener("change",a),()=>o.removeEventListener("change",a)}return null}(this),E(this.config)?this.loadApp():_()}_handleButtonClick(e){history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this._isHidden?this.showApp():this.loadApp()}_removeMapParamFromUrl(e,t){var n=new RegExp("[?&]".concat(t,"=[^&]*(&|$)"));return n.test(e)?e.replace(n,(e,t)=>"&"===t?"?":"").replace(/\?$/,""):e}_handleExitClick(){this.config.preserveStateOnClose?this.hideApp():this.removeApp();var e=this.config.mapViewParamKey,t=location.href,n=this._removeMapParamFromUrl(t,e);history.replaceState(history.state,"",n)}loadApp(){var t=this;return e(function*(){t._openButton&&(t._openButton.style.display="none");try{var{initialiseApp:n}=yield import(/* webpackChunkName: "im-core" */ "./im-core.js"),{MapProvider:r,mapFramework:i,mapProviderConfig:o}=yield t.config.mapProvider.load();t.config.reverseGeocodeProvider&&function(t,n){var{url:r,transformRequest:i,load:o}=t;x=function(){var t=e(function*(e,t){return(yield o())(r,i,n,e,t)});return function(e,n){return t.apply(this,arguments)}}()}(t.config.reverseGeocodeProvider,o.crs);var a=yield n(t.rootEl,C(C({id:t.id,initialBreakpoint:t._breakpointDetector.getBreakpoint(),initialInterfaceType:"unknown"===w?(w="mouse","mouse"):w},t.config),{},{MapProvider:r,mapProviderConfig:o,mapFramework:i,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])}),P(t)}catch(e){throw m(t.rootEl,t.config.genericErrorText),console.error(e),e}})()}removeApp(){this._root&&"function"==typeof this.unmount&&(this.unmount(),this._root=null),this._openButton&&(this._openButton.removeAttribute("style"),this._openButton.focus()),P(this),this.eventBus.emit(B.MAP_DESTROY,{mapId:this.id})}hideApp(){this._isHidden=!0,this.rootEl.style.display="none",b({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[e.length-1]),this.eventBus.emit(B.APP_HIDDEN)}showApp(){this._isHidden=!1,this.rootEl.style.display="",this._openButton&&(this._openButton.style.display="none"),P(this),this.eventBus.emit(B.APP_VISIBLE)}destroy(){var e,t,n;this.removeApp(),null===(e=this._breakpointDetector)||void 0===e||e.destroy(),null===(t=this._interfaceDetectorCleanup)||void 0===t||t.call(this),null===(n=this._hybridBehaviourCleanup)||void 0===n||n.call(this),p.unregister(this),this.eventBus.destroy()}on(){this.eventBus.on(...arguments)}off(){this.eventBus.off(...arguments)}emit(){this.eventBus.emit(...arguments)}addMarker(e,t,n){this.eventBus.emit(B.APP_ADD_MARKER,{id:e,coords:t,options:n})}removeMarker(e){this.eventBus.emit(B.APP_REMOVE_MARKER,e)}setMode(e){this.eventBus.emit(B.APP_SET_MODE,e)}addButton(e,t){this.eventBus.emit(B.APP_ADD_BUTTON,{id:e,config:t})}toggleButtonState(e,t,n){this.eventBus.emit(B.APP_TOGGLE_BUTTON_STATE,{id:e,prop:t,value:n})}addPanel(e,t){this.eventBus.emit(B.APP_ADD_PANEL,{id:e,config:t})}removePanel(e){this.eventBus.emit(B.APP_REMOVE_PANEL,e)}showPanel(e){this.eventBus.emit(B.APP_SHOW_PANEL,e)}hidePanel(e){this.eventBus.emit(B.APP_HIDE_PANEL,e)}addControl(e,t){this.eventBus.emit(B.APP_ADD_CONTROL,{id:e,config:t})}fitToBounds(e){this.eventBus.emit(B.MAP_FIT_TO_BOUNDS,e)}setView(e){this.eventBus.emit(B.MAP_SET_VIEW,e)}}export{B as E,I,_ as a,i as g,M as r,T as s,b as t};
|
|
1
|
+
import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";var n=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null===(t=window.location)||void 0===t?void 0:t.search;return new URLSearchParams(n).get(e)},i=e=>{var{behaviour:t,hybridWidth:n,maxMobileWidth:i}=e;if("hybrid"!==t)return!1;var r=null!=n?n:i;return window.matchMedia("(max-width: ".concat(r,"px)")).matches},r=e=>{var{behaviour:t}=e;return["mapOnly","buttonFirst"].includes(t)||i(e)},o={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>Alt</kbd> + <kbd>K</kbd> <span class="im-u-visually-hidden">to view </span>keyboard shortcuts',mapLabel:"Interactive map",mapProvider:null,mapSize:"small",manageHistoryState:!0,mapViewParamKey:"mv",maxMobileWidth:640,minDesktopWidth:835,nudgePanDelta:5,nudgeZoomDelta:.1,panDelta:100,pageTitle:"Map view",preserveStateOnClose:!1,readMapText:!1,reverseGeocodeProvider:null,zoomDelta:1};function a(){var e=n(o.mapViewParamKey);s.forEach(t=>function(e,t){var n;if(!1!==e.config.manageHistoryState){var r=e.id===t,o="hybrid"===e.config.behaviour&&!i(e.config),a=null===(n=e.rootEl)||void 0===n?void 0:n.children.length;!r||a&&!e._isHidden?r||!a||o||function(e){var t,n;e.config.preserveStateOnClose?null===(t=e.hideApp)||void 0===t||t.call(e):null===(n=e.removeApp)||void 0===n||n.call(e)}(e):function(e){var t,n;e._isHidden?null===(t=e.showApp)||void 0===t||t.call(e):null===(n=e.loadApp)||void 0===n||n.call(e)}(e)}}(t,e))}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)}};function d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function p(e){try{return JSON.parse(e)}catch(e){return console.log(e),null}}function u(e){var n=function(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?d(Object(i),!0).forEach(function(n){t(e,n,i[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):d(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}({},null==e?void 0:e.dataset),i={};for(var r of Object.keys(n))i[r]=p(n[r]);return i}function h(e,t){e.innerHTML='<div class="im-c-error">'.concat(t,"</div>")}var v=(e,t,n,i)=>e!==t&&!(null!=n&&n.contains(e))&&e.matches(":not([aria-hidden]):not([data-fm-inert])")&&i.contains(e);function m(e){var t,{containerEl:n,isFullscreen:i,boundaryEl:r=document.body}=e,o=Array.from(r.querySelectorAll("[data-fm-inert]"));if(n&&(o=o.filter(e=>!n.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=n;null!==(s=a)&&void 0!==s&&s.parentNode&&a!==r&&a!==document.body;){var s,l=a.parentNode;for(var c of l.children)v(c,a,n,r)&&(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:a}=e,{pageTitle:s,behaviour:l,containerHeight:c}=r,d=null!=t?t:function(e){var{id:t,behaviour:r,manageHistoryState:a}=e;return"mapOnly"===r||("buttonFirst"===r?!1===a||n(o.mapViewParamKey)===t:i(e)&&n(o.mapViewParamKey)===t)}(r);["mapOnly","buttonFirst","hybrid"].includes(l)&&(m({containerEl:a,isFullscreen:d}),document.documentElement.classList.toggle("im-is-fullscreen",d),a.classList.toggle("im-is-fullscreen",d)),["buttonFirst","hybrid"].includes(l)&&function(e){var{pageTitle:t,isFullscreen:n}=e,i=document.title.split(": "),r=i[i.length-1];document.title=n?"".concat(t,": ").concat(r):r}({pageTitle:s,isFullscreen:d});var p=d||"buttonFirst"!==l&&!i(r)?c:"auto";a.style.height=d?"100%":p}function b(){document.body.classList.remove("im-is-loading")}function P(e){var{id:t,behaviour:r}=e,a=n(o.mapViewParamKey)===t;return["mapOnly","inline"].includes(r)||"hybrid"===r&&!i(e)||a}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function y(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?_(Object(i),!0).forEach(function(n){t(e,n,i[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):_(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}function E(e){var t,{maxMobileWidth:n,minDesktopWidth:i,containerEl:r}=e,o="unknown",a=new Set,s=e=>{e!==o&&(o=e,requestAnimationFrame(()=>{o===e&&a.forEach(t=>t(e))}))};if(r){var l=function(e,t,n){e.style.containerType="inline-size";var i=e.getBoundingClientRect().width,r=t(i);e.dataset.breakpoint=r;var o=new window.ResizeObserver(i=>{var r,o,a=(null===(r=i[0])||void 0===r||null===(r=r.borderBoxSize)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.inlineSize)||(null===(o=i[0])||void 0===o?void 0:o.contentRect.width),s=t(a);e.dataset.breakpoint=s,n(s)});return o.observe(e),{initialType:r,cleanup:()=>{o.disconnect(),e.style.containerType="",delete e.dataset.breakpoint}}}(r,e=>function(e,t,n){return e<=t?"mobile":e>=n?"desktop":"tablet"}(e,n,i),s);o=l.initialType,s(l.initialType),t=l.cleanup}else{var c=function(e,t,n){var i={mobile:window.matchMedia("(max-width: ".concat(e,"px)")),desktop:window.matchMedia("(min-width: ".concat(t,"px)"))},r=()=>{var e="tablet";i.mobile.matches?e="mobile":i.desktop.matches&&(e="desktop"),n(e)};return i.mobile.addEventListener("change",r),i.desktop.addEventListener("change",r),r(),{cleanup:()=>{i.mobile.removeEventListener("change",r),i.desktop.removeEventListener("change",r)}}}(n,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 g=window.matchMedia("(pointer: coarse)").matches?"touch":"unknown",A=new Set;function w(e){g!==e&&(g=e,A.forEach(t=>{t(e)}))}function O(e){return A.add(e),()=>{A.delete(e)}}var D=null;function T(e,t){if(!D)throw new Error("ReverseGeocode not initialised");return D(e,t)}var x={APP_ADD_MARKER:"app:addmarker",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_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 M{constructor(){this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),this}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,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return this.events[e]?(this.events[e].forEach(t=>{try{t(...n)}catch(t){console.error("Error in event handler for '".concat(e,"':"),t)}}),this):this}destroy(){this.events={}}}if("undefined"!=typeof crypto&&!crypto.randomUUID){var S=0;crypto.randomUUID=()=>(S=Math.max(Date.now(),S+1),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e,t)=>{var n=t<12?Number.parseInt(S.toString(16).padStart(12,"0")[t],16):16*Math.random()|0;return("x"===e?n:3&n|8).toString(16)}))}var k="undefined"!=typeof AbortController&&!Object.getPrototypeOf((new AbortController).signal).throwIfAborted;k&&(Object.getPrototypeOf((new AbortController).signal).throwIfAborted=function(){if(this.aborted){var e=new Error("The operation was aborted.");throw e.name="AbortError",e}});if(k&&"undefined"!=typeof URL&&URL.createObjectURL){var B=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 B(e)}}function L(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,i)}return n}function j(e){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?L(Object(i),!0).forEach(function(n){t(e,n,i[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):L(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}class C{constructor(e){var n=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),this.id=e,this.rootEl=document.getElementById(e),!this.rootEl)throw new Error('Element with id "'.concat(e,'" not found'));this.eventBus=new M,this.config=this._buildConfig(n),function(e,t){var{mapProvider:n,deviceNotSupportedText:i}=t,r=null==n?void 0:n.checkDeviceCapabilities();return n?!(null==r||!r.isSupported)||(h(e,i),b(),console.log(null==r?void 0:r.error),!1):(console.log("No map provider"),!1)}(this.rootEl,this.config)&&(["buttonFirst","hybrid"].includes(this.config.behaviour)&&c.register(this),this._breakpointDetector=E({maxMobileWidth:this.config.maxMobileWidth,minDesktopWidth:this.config.minDesktopWidth,containerEl:this.rootEl}),this._interfaceDetectorCleanup=function(){var e=window.matchMedia("(pointer: coarse)"),t=e=>{w(e.matches?"touch":"mouse")};e.addEventListener("change",t);var n=e=>{var t,n="pen"===(t=e.pointerType)||"touch"===t?"touch":"mouse"===t?"mouse":"unknown";setTimeout(()=>w(n),150)},i=e=>{"Tab"===e.key&&w("keyboard")};return window.addEventListener("pointerdown",n,{passive:!0}),window.addEventListener("keydown",i,{passive:!0}),()=>{e.removeEventListener("change",t),window.removeEventListener("pointerdown",n),window.removeEventListener("keydown",i)}}(),this._initialize())}_buildConfig(e){var t=u(this.rootEl);return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return y(y({},o),e)}(j(j({id:this.id,title:document.title},t),e))}_initialize(){["buttonFirst","hybrid"].includes(this.config.behaviour)&&(this._openButton=function(e,t,n){var{id:i,buttonText:r,buttonClass:a}=e,s='\n <a class="'.concat(a,"\" 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(r,"</span>\n <span class='im-u-visually-hidden'> (Visual only)</span>\n </a>\n ");t.insertAdjacentHTML("beforebegin",s);var l=t.previousElementSibling,c=new URL(window.location.href);return c.searchParams.set(o.mapViewParamKey,i),l.setAttribute("href",c.toString()),l.addEventListener("click",e=>{e.preventDefault(),n(e)}),l}(this.config,this.rootEl,e=>{this._handleButtonClick(e)})),this._hybridBehaviourCleanup=function(e){var{behaviour:t,hybridWidth:n,maxMobileWidth:i}=e.config;if("buttonFirst"===t&&e._breakpointDetector.subscribe(()=>{P(e.config)?e.loadApp():e.removeApp()}),"hybrid"===t){var r=null!=n?n:i,o=window.matchMedia("(max-width: ".concat(r,"px)")),a=()=>{P(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),P(this.config)?this.loadApp():b()}_handleButtonClick(e){this.config.manageHistoryState&&history.pushState({isBack:!0},"",e.currentTarget.getAttribute("href")),this._isHidden?this.showApp():this.loadApp()}_removeMapParamFromUrl(e,t){var n=new RegExp("[?&]".concat(t,"=[^&]*(&|$)"));return n.test(e)?e.replace(n,(e,t)=>"&"===t?"?":"").replace(/\?$/,""):e}_handleExitClick(){var e;if(this.config.preserveStateOnClose?this.hideApp():this.removeApp(),this.config.manageHistoryState)if(null!==(e=history.state)&&void 0!==e&&e.isBack)history.back();else{var t=this.config.mapViewParamKey,n=this._removeMapParamFromUrl(location.href,t);history.replaceState(history.state,"",n)}}loadApp(){var t=this;return e(function*(){t._openButton&&(t._openButton.style.display="none");try{var{initialiseApp:n}=yield import(/* webpackChunkName: "im-core" */ "./im-core.js"),{MapProvider:i,mapFramework:r,mapProviderConfig:o}=yield t.config.mapProvider.load();t.config.reverseGeocodeProvider&&function(t,n){var{url:i,transformRequest:r,load:o}=t;D=function(){var t=e(function*(e,t){return(yield o())(i,r,n,e,t)});return function(e,n){return t.apply(this,arguments)}}()}(t.config.reverseGeocodeProvider,o.crs);var a=yield n(t.rootEl,j(j({id:t.id,initialBreakpoint:t._breakpointDetector.getBreakpoint(),initialInterfaceType:"unknown"===g?(g="mouse","mouse"):g},t.config),{},{MapProvider:i,mapProviderConfig:o,mapFramework:r,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(x.APP_OPENED,{statePreserved:!1})}catch(e){throw h(t.rootEl,t.config.genericErrorText),console.error(e),e}})()}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(x.APP_CLOSED,{statePreserved:!1}),this.eventBus.emit(x.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(x.APP_CLOSED,{statePreserved:!0})}showApp(){this._isHidden=!1,this.rootEl.style.display="",this._openButton&&(this._openButton.style.display="none"),f(this),this.eventBus.emit(x.APP_OPENED,{statePreserved:!0})}destroy(){var e,t,n;this.removeApp(),null===(e=this._breakpointDetector)||void 0===e||e.destroy(),null===(t=this._interfaceDetectorCleanup)||void 0===t||t.call(this),null===(n=this._hybridBehaviourCleanup)||void 0===n||n.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,n){this.eventBus.emit(x.APP_ADD_MARKER,{id:e,coords:t,options:n})}removeMarker(e){this.eventBus.emit(x.APP_REMOVE_MARKER,e)}setMode(e){this.eventBus.emit(x.APP_SET_MODE,e)}addButton(e,t){this.eventBus.emit(x.APP_ADD_BUTTON,{id:e,config:t})}toggleButtonState(e,t,n){this.eventBus.emit(x.APP_TOGGLE_BUTTON_STATE,{id:e,prop:t,value:n})}addPanel(e,t){this.eventBus.emit(x.APP_ADD_PANEL,{id:e,config:t})}removePanel(e){this.eventBus.emit(x.APP_REMOVE_PANEL,e)}showPanel(e){var{focus:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.eventBus.emit(x.APP_SHOW_PANEL,{id:e,focus:t})}hidePanel(e){this.eventBus.emit(x.APP_HIDE_PANEL,e)}addControl(e,t){this.eventBus.emit(x.APP_ADD_CONTROL,{id:e,config:t})}fitToBounds(e){this.eventBus.emit(x.MAP_FIT_TO_BOUNDS,e)}setView(e){this.eventBus.emit(x.MAP_SET_VIEW,e)}open(){this._isHidden?this.showApp():this._root||this.loadApp()}close(){this._handleExitClick()}}export{x as E,C as I,b as a,r as g,T as r,O as s,m as t};
|