@feltmaps/js-sdk
Version:
An SDK for Felt maps
2 lines (1 loc) • 4.32 kB
JavaScript
;var c=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var M=(e,r)=>{for(var o in r)c(e,o,{get:r[o],enumerable:!0})},G=(e,r,o,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of f(r))!I.call(e,n)&&n!==o&&c(e,n,{get:()=>r[n],enumerable:!(s=V(r,n))||s.enumerable});return e};var b=e=>G(c({},"__esModule",{value:!0}),e);var x={};M(x,{Felt:()=>F});module.exports=b(x);function i(e,r){return({handler:o,options:s})=>{let n=new MessageChannel,a=crypto.randomUUID();return e.postMessage({type:"felt.addListener",event:s?{eventName:r,id:a,options:s}:{eventName:r,id:a}},"*",[n.port2]),n.port1.onmessage=l=>{o(l.data)},()=>{n.port1.onmessage=null,n.port1.close(),n.port2.close(),e.postMessage({type:"felt.removeListener",id:a},"*")}}}function t(e,r){return o=>{let s=new MessageChannel;return e.postMessage({type:r,params:o},"*",[s.port2]),new Promise((n,a)=>{s.port1.onmessage=l=>{l.data&&"__error__"in l.data?a(new Error(l.data.__error__)):n(l.data),s.port1.close(),s.port2.close()}})}}var u=e=>({getElement:t(e,"getElement"),getElementGeometry:t(e,"getElementGeometry"),getElements:t(e,"getElements"),setElementGroupVisibility:t(e,"setElementGroupVisibility"),getElementGroup:t(e,"getElementGroup"),getElementGroups:t(e,"getElementGroups"),onElementChange:i(e,"onElementChange"),onElementGroupChange:i(e,"onElementGroupChange")});var C=e=>({onPointerClick:i(e,"onPointerClick"),onPointerMove:i(e,"onPointerMove")});var h=e=>({getLayer:t(e,"getLayer"),getLayers:t(e,"getLayers"),setLayerVisibility:t(e,"setLayerVisibility"),setLayerStyle:t(e,"setLayerStyle"),onLayerChange:i(e,"onLayerChange"),getLayerGroup:t(e,"getLayerGroup"),getLayerGroups:t(e,"getLayerGroups"),setLayerGroupVisibility:t(e,"setLayerGroupVisibility"),onLayerGroupChange:i(e,"onLayerGroupChange"),getLegendItem:t(e,"getLegendItem"),getLegendItems:t(e,"getLegendItems"),setLegendItemVisibility:t(e,"setLegendItemVisibility"),onLegendItemChange:i(e,"onLegendItemChange"),getLayerFilters:t(e,"getLayerFilters"),setLayerFilters:t(e,"setLayerFilters"),getRenderedFeatures:t(e,"getRenderedFeatures")});var L=e=>({onSelectionChange:i(e,"onSelectionChange"),getSelection:t(e,"getSelection"),selectFeature:t(e,"selectFeature"),clearSelection:t(e,"clearSelection")});var v=e=>({updateUiControls:t(e,"updateUiControls"),setOnMapInteractionsUi:t(e,"setOnMapInteractionsUi")});var E=e=>({getViewport:t(e,"getViewport"),setViewport:t(e,"setViewport"),fitViewportToBounds:t(e,"fitViewportToBounds"),onViewportMove:i(e,"onViewportMove"),onViewportMoveEnd:i(e,"onViewportMoveEnd"),onMapIdle:i(e,"onMapIdle")});function P(e){return{iframe:null,...E(e),...v(e),...h(e),...u(e),...L(e),...C(e)}}var F={embed(e,r,o){let s={uiControls:{showLegend:!0,cooperativeGestures:!0,fullScreenButton:!0,geolocation:!1,zoomControls:!0,scaleBar:!0},initialViewport:void 0,origin:"https://felt.com"},n=o?.origin??s.origin,a=new URL(`${n}/embed/map/${r}`),l={showLegend:"legend",cooperativeGestures:"cooperativeGestures",fullScreenButton:"link",geolocation:"geolocation",zoomControls:"zoomControls",scaleBar:"scaleBar"},y={...s.uiControls,...o?.uiControls};for(let[m,d]of T(y))d!=null&&a.searchParams.set(l[m],d?"1":"0");if(o?.token&&a.searchParams.set("token",o.token),o?.initialViewport){let m=o.initialViewport;a.searchParams.set("loc",`${m.center.latitude},${m.center.longitude},${m.zoom}z`)}let g=e.tagName==="IFRAME",p=g?e:e.ownerDocument.createElement("iframe");return p.src=a.toString(),g||(p.style.width="100%",p.style.height="100%",p.style.border="none",p.style.margin="0",e.appendChild(p)),p.referrerPolicy="strict-origin-when-cross-origin",new Promise((m,d)=>{p.addEventListener("load",()=>{p.contentWindow==null?d(new Error("Failed to load Felt map")):m(p.contentWindow)},{once:!0})}).then(F.connect).then(m=>(Object.defineProperties(m,{iframe:{value:p,writable:!1,configurable:!1}}),m))},connect(e){let r=P(e);return new Promise((o,s)=>{let n=setTimeout(()=>{s(new Error("Failed to load Felt map")),clearInterval(l)},5e3),a=new MessageChannel,l=setInterval(()=>{e.postMessage({type:"felt.ready"},"*",[a.port2])},100);a.port1.onmessage=y=>{y.data===!0&&(clearInterval(l),clearTimeout(n),a.port1.close(),a.port2.close(),o(r))}})}},T=Object.entries;0&&(module.exports={Felt});