@feltmaps/js-sdk 1.5.0-next.0 → 1.5.0-next.1

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/dist/client.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var c=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var I=(e,r)=>{for(var o in r)c(e,o,{get:r[o],enumerable:!0})},M=(e,r,o,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of b(r))!G.call(e,n)&&n!==o&&c(e,n,{get:()=>r[n],enumerable:!(s=F(r,n))||s.enumerable});return e};var f=e=>M(c({},"__esModule",{value:!0}),e);var S={};I(S,{Felt:()=>V});module.exports=f(S);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 L=e=>({getLayer:t(e,"getLayer"),getLayers:t(e,"getLayers"),setLayerVisibility:t(e,"setLayerVisibility"),setLayerStyle:t(e,"setLayerStyle"),setLayerLegendVisibility:t(e,"setLayerLegendVisibility"),onLayerChange:i(e,"onLayerChange"),getLayerGroup:t(e,"getLayerGroup"),getLayerGroups:t(e,"getLayerGroups"),setLayerGroupVisibility:t(e,"setLayerGroupVisibility"),setLayerGroupLegendVisibility:t(e,"setLayerGroupLegendVisibility"),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 h=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),...L(e),...u(e),...h(e),...C(e)}}var V={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(V.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});
1
+ "use strict";var g=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var b=(e,r)=>{for(var n in r)g(e,n,{get:r[n],enumerable:!0})},f=(e,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of S(r))!M.call(e,s)&&s!==n&&g(e,s,{get:()=>r[s],enumerable:!(i=F(r,s))||i.enumerable});return e};var I=e=>f(g({},"__esModule",{value:!0}),e);var x={};b(x,{Felt:()=>V});module.exports=I(x);function o(e,r){return({handler:n,options:i})=>{let s=new MessageChannel,a=crypto.randomUUID();return e.postMessage({type:"felt.addListener",event:i?{eventName:r,id:a,options:i}:{eventName:r,id:a}},"*",[s.port2]),s.port1.onmessage=l=>{n(l.data)},()=>{s.port1.onmessage=null,s.port1.close(),s.port2.close(),e.postMessage({type:"felt.removeListener",id:a},"*")}}}function t(e,r){return n=>{let i=new MessageChannel;return e.postMessage({type:r,params:n},"*",[i.port2]),new Promise((s,a)=>{i.port1.onmessage=l=>{l.data&&typeof l.data=="object"&&"__error__"in l.data?a(new Error(l.data.__error__)):s(l.data),i.port1.close(),i.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:o(e,"onElementChange"),onElementGroupChange:o(e,"onElementGroupChange")});var C=e=>({onPointerClick:o(e,"onPointerClick"),onPointerMove:o(e,"onPointerMove")});var h=e=>({getLayer:t(e,"getLayer"),getLayers:t(e,"getLayers"),setLayerVisibility:t(e,"setLayerVisibility"),setLayerStyle:t(e,"setLayerStyle"),setLayerLegendVisibility:t(e,"setLayerLegendVisibility"),onLayerChange:o(e,"onLayerChange"),getLayerGroup:t(e,"getLayerGroup"),getLayerGroups:t(e,"getLayerGroups"),setLayerGroupVisibility:t(e,"setLayerGroupVisibility"),setLayerGroupLegendVisibility:t(e,"setLayerGroupLegendVisibility"),onLayerGroupChange:o(e,"onLayerGroupChange"),getLegendItem:t(e,"getLegendItem"),getLegendItems:t(e,"getLegendItems"),setLegendItemVisibility:t(e,"setLegendItemVisibility"),onLegendItemChange:o(e,"onLegendItemChange"),getLayerFilters:t(e,"getLayerFilters"),setLayerFilters:t(e,"setLayerFilters"),getRenderedFeatures:t(e,"getRenderedFeatures")});var L=e=>({onSelectionChange:o(e,"onSelectionChange"),getSelection:t(e,"getSelection"),selectFeature:t(e,"selectFeature"),clearSelection:t(e,"clearSelection")});var T=e=>({setTool:t(e,"setTool"),getTool:t(e,"getTool"),onToolChange:o(e,"onToolChange"),setToolSettings:t(e,"setToolSettings"),getToolSettings:t(e,"getToolSettings"),onToolSettingsChange:o(e,"onToolSettingsChange")});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:o(e,"onViewportMove"),onViewportMoveEnd:o(e,"onViewportMoveEnd"),onMapIdle:o(e,"onMapIdle")});function P(e){return{iframe:null,...E(e),...v(e),...h(e),...u(e),...L(e),...C(e),...T(e)}}var V={embed(e,r,n){let i={uiControls:{showLegend:!0,cooperativeGestures:!0,fullScreenButton:!0,geolocation:!1,zoomControls:!0,scaleBar:!0},initialViewport:void 0,origin:"https://felt.com"},s=n?.origin??i.origin,a=new URL(`${s}/embed/map/${r}`),l={showLegend:"legend",cooperativeGestures:"cooperativeGestures",fullScreenButton:"link",geolocation:"geolocation",zoomControls:"zoomControls",scaleBar:"scaleBar"},y={...i.uiControls,...n?.uiControls};for(let[m,d]of G(y))d!=null&&a.searchParams.set(l[m],d?"1":"0");if(n?.token&&a.searchParams.set("token",n.token),n?.initialViewport){let m=n.initialViewport;a.searchParams.set("loc",`${m.center.latitude},${m.center.longitude},${m.zoom}z`)}let c=e.tagName==="IFRAME",p=c?e:e.ownerDocument.createElement("iframe");return p.src=a.toString(),c||(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(V.connect).then(m=>(Object.defineProperties(m,{iframe:{value:p,writable:!1,configurable:!1}}),m))},connect(e){let r=P(e);return new Promise((n,i)=>{let s=setTimeout(()=>{i(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(s),a.port1.close(),a.port2.close(),n(r))}})}},G=Object.entries;0&&(module.exports={Felt});
package/dist/client.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { E as Element, G as Geometry, a as GetElementsConstraint, b as ElementGroup, c as GetElementGroupsConstraint, S as SetVisibilityRequest, d as ElementChangeCallbackParams, e as ElementGroupChangeCallbackParams, L as Layer, f as GetLayersConstraint, g as LayerChangeCallbackParams, h as LayerGroup, i as GetLayerGroupsConstraint, j as LayerGroupChangeCallbackParams, k as LegendItemIdentifier, l as LegendItem, m as LegendItemsConstraint, n as LegendItemChangeCallbackParams, o as LayerFilters, F as Filters, p as GetRenderedFeaturesConstraint, q as Feature, M as MapInteractionEvent, r as EntityNode, s as FeatureSelection, z as zInfer, V as ViewportState, t as SetViewportCenterZoomParams, u as ViewportFitBoundsParams, v as ViewportCenterZoom } from './types-BDviYZ-T.cjs';
2
- export { B as ElementGroupNode, C as ElementNode, D as FeatureNode, J as FeltBoundary, K as FeltZoom, x as FilterExpression, y as FilterLogicGate, A as FilterTernary, N as LatLng, H as LayerGroupNode, I as LayerNode, w as LayerProcessingStatus, O as LineStringGeometry, P as LngLatTuple, Q as MultiLineStringGeometry, T as MultiPolygonGeometry, U as PointGeometry, W as PolygonGeometry, R as RasterValue } from './types-BDviYZ-T.cjs';
1
+ import { E as Element, G as Geometry, a as GetElementsConstraint, b as ElementGroup, c as GetElementGroupsConstraint, S as SetVisibilityRequest, d as ElementChangeCallbackParams, e as ElementGroupChangeCallbackParams, L as Layer, f as GetLayersConstraint, g as LayerChangeCallbackParams, h as LayerGroup, i as GetLayerGroupsConstraint, j as LayerGroupChangeCallbackParams, k as LegendItemIdentifier, l as LegendItem, m as LegendItemsConstraint, n as LegendItemChangeCallbackParams, o as LayerFilters, F as Filters, p as GetRenderedFeaturesConstraint, q as Feature, M as MapInteractionEvent, r as EntityNode, s as FeatureSelection, T as ToolType, I as InputToolSettings, C as ConfigurableToolType, t as ToolSettingsMap, u as ToolSettingsChangeEvent, z as zInfer, V as ViewportState, v as SetViewportCenterZoomParams, w as ViewportFitBoundsParams, x as ViewportCenterZoom } from './types-CVxZMwC_.cjs';
2
+ export { a0 as CircleToolSettings, H as ElementGroupNode, J as ElementNode, K as FeatureNode, P as FeltBoundary, Q as FeltZoom, A as FilterExpression, B as FilterLogicGate, D as FilterTernary, a1 as HighlighterToolSettings, U as LatLng, N as LayerGroupNode, O as LayerNode, y as LayerProcessingStatus, W as LineStringGeometry, a2 as LineToolSettings, X as LngLatTuple, a3 as MarkerToolSettings, Y as MultiLineStringGeometry, Z as MultiPolygonGeometry, a4 as NoteToolSettings, a5 as PinFrame, a6 as PinSymbol, a7 as PinToolSettings, _ as PointGeometry, $ as PolygonGeometry, a8 as PolygonToolSettings, R as RasterValue, a9 as RouteToolSettings, aa as TextToolSettings } from './types-CVxZMwC_.cjs';
3
3
  import { z } from 'zod';
4
4
 
5
5
  /**
@@ -624,6 +624,84 @@ interface SelectionController {
624
624
  }): Promise<void>;
625
625
  }
626
626
 
627
+ /**
628
+ * The Tools controller allows you to let users draw elements on the map.
629
+ *
630
+ * @group Controller
631
+ * @public
632
+ */
633
+ interface ToolsController {
634
+ /**
635
+ * Sets the tool to use for drawing elements on the map.
636
+ *
637
+ * @param tool - The tool to set.
638
+ *
639
+ * @example
640
+ * ```ts
641
+ * // Set the tool to "marker"
642
+ * felt.setTool("marker");
643
+ *
644
+ * // put down the tool
645
+ * felt.setTool(null);
646
+ * ```
647
+ */
648
+ setTool(tool: ToolType | null): void;
649
+ /**
650
+ * Gets the current tool, if any is in use.
651
+ *
652
+ * @returns The current tool, or `null` if no tool is in use.
653
+ *
654
+ * @example
655
+ * ```ts
656
+ * const tool = await felt.getTool(); // "marker", "polygon", etc.
657
+ * ```
658
+ */
659
+ getTool(): Promise<ToolType | null>;
660
+ /**
661
+ * Listens for changes to the current tool.
662
+ *
663
+ * @returns A function to unsubscribe from the listener
664
+ *
665
+ * @example
666
+ * ```ts
667
+ * const unsubscribe = felt.onToolChange({
668
+ * handler: tool => console.log(tool),
669
+ * });
670
+ *
671
+ * // later on...
672
+ * unsubscribe();
673
+ * ```
674
+ */
675
+ onToolChange(args: {
676
+ /**
677
+ * This callback is called with the current tool whenever the tool changes.
678
+ *
679
+ * @param tool - The current tool, or `null` if no tool is in use.
680
+ */
681
+ handler: (tool: ToolType | null) => void;
682
+ }): VoidFunction;
683
+ /**
684
+ * Sets the settings for the current tool.
685
+ *
686
+ * @param settings - The settings to set.
687
+ */
688
+ setToolSettings(settings: InputToolSettings): void;
689
+ /**
690
+ * Gets the settings for the current tool.
691
+ *
692
+ * @returns The settings for the current tool.
693
+ */
694
+ getToolSettings<T extends ConfigurableToolType>(tool: T): Promise<ToolSettingsMap[T]>;
695
+ /**
696
+ * Listens for changes to the settings on all tools.
697
+ *
698
+ * @returns A function to unsubscribe from the listener
699
+ */
700
+ onToolSettingsChange(args: {
701
+ handler: (settings: ToolSettingsChangeEvent) => void;
702
+ }): VoidFunction;
703
+ }
704
+
627
705
  /**
628
706
  * @public
629
707
  */
@@ -910,7 +988,7 @@ interface ViewportController {
910
988
  * @group Controller
911
989
  * @public
912
990
  */
913
- interface FeltController extends ViewportController, UiController, LayersController, ElementsController, SelectionController, InteractionsController {
991
+ interface FeltController extends ViewportController, UiController, LayersController, ElementsController, SelectionController, InteractionsController, ToolsController {
914
992
  /**
915
993
  * The iframe element containing the Felt map, if it is an embedded map.
916
994
  *
@@ -1081,4 +1159,4 @@ declare const Felt: {
1081
1159
  connect(feltWindow: Window): Promise<FeltController>;
1082
1160
  };
1083
1161
 
1084
- export { Element, ElementChangeCallbackParams, ElementGroup, ElementGroupChangeCallbackParams, type ElementsController, EntityNode, Feature, FeatureSelection, Felt, type FeltController, type FeltEmbedOptions, Filters, Geometry, GetElementGroupsConstraint, GetElementsConstraint, GetLayerGroupsConstraint, GetLayersConstraint, GetRenderedFeaturesConstraint, type InteractionsController, Layer, LayerChangeCallbackParams, LayerFilters, LayerGroup, LayerGroupChangeCallbackParams, type LayersController, LegendItem, LegendItemChangeCallbackParams, LegendItemIdentifier, LegendItemsConstraint, MapInteractionEvent, type UiOnMapInteractionsOptions as OnMapInteractionsOptions, type SelectionController, SetViewportCenterZoomParams, SetVisibilityRequest, type UiController, type UiControlsOptions, ViewportCenterZoom, type ViewportController, ViewportFitBoundsParams, ViewportState };
1162
+ export { ConfigurableToolType, Element, ElementChangeCallbackParams, ElementGroup, ElementGroupChangeCallbackParams, type ElementsController, EntityNode, Feature, FeatureSelection, Felt, type FeltController, type FeltEmbedOptions, Filters, Geometry, GetElementGroupsConstraint, GetElementsConstraint, GetLayerGroupsConstraint, GetLayersConstraint, GetRenderedFeaturesConstraint, InputToolSettings, type InteractionsController, Layer, LayerChangeCallbackParams, LayerFilters, LayerGroup, LayerGroupChangeCallbackParams, type LayersController, LegendItem, LegendItemChangeCallbackParams, LegendItemIdentifier, LegendItemsConstraint, MapInteractionEvent, type UiOnMapInteractionsOptions as OnMapInteractionsOptions, type SelectionController, SetViewportCenterZoomParams, SetVisibilityRequest, ToolSettingsChangeEvent, ToolSettingsMap, ToolType, type ToolsController, type UiController, type UiControlsOptions, ViewportCenterZoom, type ViewportController, ViewportFitBoundsParams, ViewportState };
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { E as Element, G as Geometry, a as GetElementsConstraint, b as ElementGroup, c as GetElementGroupsConstraint, S as SetVisibilityRequest, d as ElementChangeCallbackParams, e as ElementGroupChangeCallbackParams, L as Layer, f as GetLayersConstraint, g as LayerChangeCallbackParams, h as LayerGroup, i as GetLayerGroupsConstraint, j as LayerGroupChangeCallbackParams, k as LegendItemIdentifier, l as LegendItem, m as LegendItemsConstraint, n as LegendItemChangeCallbackParams, o as LayerFilters, F as Filters, p as GetRenderedFeaturesConstraint, q as Feature, M as MapInteractionEvent, r as EntityNode, s as FeatureSelection, z as zInfer, V as ViewportState, t as SetViewportCenterZoomParams, u as ViewportFitBoundsParams, v as ViewportCenterZoom } from './types-BDviYZ-T.js';
2
- export { B as ElementGroupNode, C as ElementNode, D as FeatureNode, J as FeltBoundary, K as FeltZoom, x as FilterExpression, y as FilterLogicGate, A as FilterTernary, N as LatLng, H as LayerGroupNode, I as LayerNode, w as LayerProcessingStatus, O as LineStringGeometry, P as LngLatTuple, Q as MultiLineStringGeometry, T as MultiPolygonGeometry, U as PointGeometry, W as PolygonGeometry, R as RasterValue } from './types-BDviYZ-T.js';
1
+ import { E as Element, G as Geometry, a as GetElementsConstraint, b as ElementGroup, c as GetElementGroupsConstraint, S as SetVisibilityRequest, d as ElementChangeCallbackParams, e as ElementGroupChangeCallbackParams, L as Layer, f as GetLayersConstraint, g as LayerChangeCallbackParams, h as LayerGroup, i as GetLayerGroupsConstraint, j as LayerGroupChangeCallbackParams, k as LegendItemIdentifier, l as LegendItem, m as LegendItemsConstraint, n as LegendItemChangeCallbackParams, o as LayerFilters, F as Filters, p as GetRenderedFeaturesConstraint, q as Feature, M as MapInteractionEvent, r as EntityNode, s as FeatureSelection, T as ToolType, I as InputToolSettings, C as ConfigurableToolType, t as ToolSettingsMap, u as ToolSettingsChangeEvent, z as zInfer, V as ViewportState, v as SetViewportCenterZoomParams, w as ViewportFitBoundsParams, x as ViewportCenterZoom } from './types-CVxZMwC_.js';
2
+ export { a0 as CircleToolSettings, H as ElementGroupNode, J as ElementNode, K as FeatureNode, P as FeltBoundary, Q as FeltZoom, A as FilterExpression, B as FilterLogicGate, D as FilterTernary, a1 as HighlighterToolSettings, U as LatLng, N as LayerGroupNode, O as LayerNode, y as LayerProcessingStatus, W as LineStringGeometry, a2 as LineToolSettings, X as LngLatTuple, a3 as MarkerToolSettings, Y as MultiLineStringGeometry, Z as MultiPolygonGeometry, a4 as NoteToolSettings, a5 as PinFrame, a6 as PinSymbol, a7 as PinToolSettings, _ as PointGeometry, $ as PolygonGeometry, a8 as PolygonToolSettings, R as RasterValue, a9 as RouteToolSettings, aa as TextToolSettings } from './types-CVxZMwC_.js';
3
3
  import { z } from 'zod';
4
4
 
5
5
  /**
@@ -624,6 +624,84 @@ interface SelectionController {
624
624
  }): Promise<void>;
625
625
  }
626
626
 
627
+ /**
628
+ * The Tools controller allows you to let users draw elements on the map.
629
+ *
630
+ * @group Controller
631
+ * @public
632
+ */
633
+ interface ToolsController {
634
+ /**
635
+ * Sets the tool to use for drawing elements on the map.
636
+ *
637
+ * @param tool - The tool to set.
638
+ *
639
+ * @example
640
+ * ```ts
641
+ * // Set the tool to "marker"
642
+ * felt.setTool("marker");
643
+ *
644
+ * // put down the tool
645
+ * felt.setTool(null);
646
+ * ```
647
+ */
648
+ setTool(tool: ToolType | null): void;
649
+ /**
650
+ * Gets the current tool, if any is in use.
651
+ *
652
+ * @returns The current tool, or `null` if no tool is in use.
653
+ *
654
+ * @example
655
+ * ```ts
656
+ * const tool = await felt.getTool(); // "marker", "polygon", etc.
657
+ * ```
658
+ */
659
+ getTool(): Promise<ToolType | null>;
660
+ /**
661
+ * Listens for changes to the current tool.
662
+ *
663
+ * @returns A function to unsubscribe from the listener
664
+ *
665
+ * @example
666
+ * ```ts
667
+ * const unsubscribe = felt.onToolChange({
668
+ * handler: tool => console.log(tool),
669
+ * });
670
+ *
671
+ * // later on...
672
+ * unsubscribe();
673
+ * ```
674
+ */
675
+ onToolChange(args: {
676
+ /**
677
+ * This callback is called with the current tool whenever the tool changes.
678
+ *
679
+ * @param tool - The current tool, or `null` if no tool is in use.
680
+ */
681
+ handler: (tool: ToolType | null) => void;
682
+ }): VoidFunction;
683
+ /**
684
+ * Sets the settings for the current tool.
685
+ *
686
+ * @param settings - The settings to set.
687
+ */
688
+ setToolSettings(settings: InputToolSettings): void;
689
+ /**
690
+ * Gets the settings for the current tool.
691
+ *
692
+ * @returns The settings for the current tool.
693
+ */
694
+ getToolSettings<T extends ConfigurableToolType>(tool: T): Promise<ToolSettingsMap[T]>;
695
+ /**
696
+ * Listens for changes to the settings on all tools.
697
+ *
698
+ * @returns A function to unsubscribe from the listener
699
+ */
700
+ onToolSettingsChange(args: {
701
+ handler: (settings: ToolSettingsChangeEvent) => void;
702
+ }): VoidFunction;
703
+ }
704
+
627
705
  /**
628
706
  * @public
629
707
  */
@@ -910,7 +988,7 @@ interface ViewportController {
910
988
  * @group Controller
911
989
  * @public
912
990
  */
913
- interface FeltController extends ViewportController, UiController, LayersController, ElementsController, SelectionController, InteractionsController {
991
+ interface FeltController extends ViewportController, UiController, LayersController, ElementsController, SelectionController, InteractionsController, ToolsController {
914
992
  /**
915
993
  * The iframe element containing the Felt map, if it is an embedded map.
916
994
  *
@@ -1081,4 +1159,4 @@ declare const Felt: {
1081
1159
  connect(feltWindow: Window): Promise<FeltController>;
1082
1160
  };
1083
1161
 
1084
- export { Element, ElementChangeCallbackParams, ElementGroup, ElementGroupChangeCallbackParams, type ElementsController, EntityNode, Feature, FeatureSelection, Felt, type FeltController, type FeltEmbedOptions, Filters, Geometry, GetElementGroupsConstraint, GetElementsConstraint, GetLayerGroupsConstraint, GetLayersConstraint, GetRenderedFeaturesConstraint, type InteractionsController, Layer, LayerChangeCallbackParams, LayerFilters, LayerGroup, LayerGroupChangeCallbackParams, type LayersController, LegendItem, LegendItemChangeCallbackParams, LegendItemIdentifier, LegendItemsConstraint, MapInteractionEvent, type UiOnMapInteractionsOptions as OnMapInteractionsOptions, type SelectionController, SetViewportCenterZoomParams, SetVisibilityRequest, type UiController, type UiControlsOptions, ViewportCenterZoom, type ViewportController, ViewportFitBoundsParams, ViewportState };
1162
+ export { ConfigurableToolType, Element, ElementChangeCallbackParams, ElementGroup, ElementGroupChangeCallbackParams, type ElementsController, EntityNode, Feature, FeatureSelection, Felt, type FeltController, type FeltEmbedOptions, Filters, Geometry, GetElementGroupsConstraint, GetElementsConstraint, GetLayerGroupsConstraint, GetLayersConstraint, GetRenderedFeaturesConstraint, InputToolSettings, type InteractionsController, Layer, LayerChangeCallbackParams, LayerFilters, LayerGroup, LayerGroupChangeCallbackParams, type LayersController, LegendItem, LegendItemChangeCallbackParams, LegendItemIdentifier, LegendItemsConstraint, MapInteractionEvent, type UiOnMapInteractionsOptions as OnMapInteractionsOptions, type SelectionController, SetViewportCenterZoomParams, SetVisibilityRequest, ToolSettingsChangeEvent, ToolSettingsMap, ToolType, type ToolsController, type UiController, type UiControlsOptions, ViewportCenterZoom, type ViewportController, ViewportFitBoundsParams, ViewportState };
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- function r(e,m){return({handler:n,options:i})=>{let s=new MessageChannel,o=crypto.randomUUID();return e.postMessage({type:"felt.addListener",event:i?{eventName:m,id:o,options:i}:{eventName:m,id:o}},"*",[s.port2]),s.port1.onmessage=a=>{n(a.data)},()=>{s.port1.onmessage=null,s.port1.close(),s.port2.close(),e.postMessage({type:"felt.removeListener",id:o},"*")}}}function t(e,m){return n=>{let i=new MessageChannel;return e.postMessage({type:m,params:n},"*",[i.port2]),new Promise((s,o)=>{i.port1.onmessage=a=>{a.data&&"__error__"in a.data?o(new Error(a.data.__error__)):s(a.data),i.port1.close(),i.port2.close()}})}}var g=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:r(e,"onElementChange"),onElementGroupChange:r(e,"onElementGroupChange")});var u=e=>({onPointerClick:r(e,"onPointerClick"),onPointerMove:r(e,"onPointerMove")});var C=e=>({getLayer:t(e,"getLayer"),getLayers:t(e,"getLayers"),setLayerVisibility:t(e,"setLayerVisibility"),setLayerStyle:t(e,"setLayerStyle"),setLayerLegendVisibility:t(e,"setLayerLegendVisibility"),onLayerChange:r(e,"onLayerChange"),getLayerGroup:t(e,"getLayerGroup"),getLayerGroups:t(e,"getLayerGroups"),setLayerGroupVisibility:t(e,"setLayerGroupVisibility"),setLayerGroupLegendVisibility:t(e,"setLayerGroupLegendVisibility"),onLayerGroupChange:r(e,"onLayerGroupChange"),getLegendItem:t(e,"getLegendItem"),getLegendItems:t(e,"getLegendItems"),setLegendItemVisibility:t(e,"setLegendItemVisibility"),onLegendItemChange:r(e,"onLegendItemChange"),getLayerFilters:t(e,"getLayerFilters"),setLayerFilters:t(e,"setLayerFilters"),getRenderedFeatures:t(e,"getRenderedFeatures")});var L=e=>({onSelectionChange:r(e,"onSelectionChange"),getSelection:t(e,"getSelection"),selectFeature:t(e,"selectFeature"),clearSelection:t(e,"clearSelection")});var h=e=>({updateUiControls:t(e,"updateUiControls"),setOnMapInteractionsUi:t(e,"setOnMapInteractionsUi")});var v=e=>({getViewport:t(e,"getViewport"),setViewport:t(e,"setViewport"),fitViewportToBounds:t(e,"fitViewportToBounds"),onViewportMove:r(e,"onViewportMove"),onViewportMoveEnd:r(e,"onViewportMoveEnd"),onMapIdle:r(e,"onMapIdle")});function E(e){return{iframe:null,...v(e),...h(e),...C(e),...g(e),...L(e),...u(e)}}var P={embed(e,m,n){let i={uiControls:{showLegend:!0,cooperativeGestures:!0,fullScreenButton:!0,geolocation:!1,zoomControls:!0,scaleBar:!0},initialViewport:void 0,origin:"https://felt.com"},s=n?.origin??i.origin,o=new URL(`${s}/embed/map/${m}`),a={showLegend:"legend",cooperativeGestures:"cooperativeGestures",fullScreenButton:"link",geolocation:"geolocation",zoomControls:"zoomControls",scaleBar:"scaleBar"},y={...i.uiControls,...n?.uiControls};for(let[p,d]of V(y))d!=null&&o.searchParams.set(a[p],d?"1":"0");if(n?.token&&o.searchParams.set("token",n.token),n?.initialViewport){let p=n.initialViewport;o.searchParams.set("loc",`${p.center.latitude},${p.center.longitude},${p.zoom}z`)}let c=e.tagName==="IFRAME",l=c?e:e.ownerDocument.createElement("iframe");return l.src=o.toString(),c||(l.style.width="100%",l.style.height="100%",l.style.border="none",l.style.margin="0",e.appendChild(l)),l.referrerPolicy="strict-origin-when-cross-origin",new Promise((p,d)=>{l.addEventListener("load",()=>{l.contentWindow==null?d(new Error("Failed to load Felt map")):p(l.contentWindow)},{once:!0})}).then(P.connect).then(p=>(Object.defineProperties(p,{iframe:{value:l,writable:!1,configurable:!1}}),p))},connect(e){let m=E(e);return new Promise((n,i)=>{let s=setTimeout(()=>{i(new Error("Failed to load Felt map")),clearInterval(a)},5e3),o=new MessageChannel,a=setInterval(()=>{e.postMessage({type:"felt.ready"},"*",[o.port2])},100);o.port1.onmessage=y=>{y.data===!0&&(clearInterval(a),clearTimeout(s),o.port1.close(),o.port2.close(),n(m))}})}},V=Object.entries;export{P as Felt};
1
+ function o(e,m){return({handler:n,options:s})=>{let a=new MessageChannel,r=crypto.randomUUID();return e.postMessage({type:"felt.addListener",event:s?{eventName:m,id:r,options:s}:{eventName:m,id:r}},"*",[a.port2]),a.port1.onmessage=i=>{n(i.data)},()=>{a.port1.onmessage=null,a.port1.close(),a.port2.close(),e.postMessage({type:"felt.removeListener",id:r},"*")}}}function t(e,m){return n=>{let s=new MessageChannel;return e.postMessage({type:m,params:n},"*",[s.port2]),new Promise((a,r)=>{s.port1.onmessage=i=>{i.data&&typeof i.data=="object"&&"__error__"in i.data?r(new Error(i.data.__error__)):a(i.data),s.port1.close(),s.port2.close()}})}}var c=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:o(e,"onElementChange"),onElementGroupChange:o(e,"onElementGroupChange")});var u=e=>({onPointerClick:o(e,"onPointerClick"),onPointerMove:o(e,"onPointerMove")});var C=e=>({getLayer:t(e,"getLayer"),getLayers:t(e,"getLayers"),setLayerVisibility:t(e,"setLayerVisibility"),setLayerStyle:t(e,"setLayerStyle"),setLayerLegendVisibility:t(e,"setLayerLegendVisibility"),onLayerChange:o(e,"onLayerChange"),getLayerGroup:t(e,"getLayerGroup"),getLayerGroups:t(e,"getLayerGroups"),setLayerGroupVisibility:t(e,"setLayerGroupVisibility"),setLayerGroupLegendVisibility:t(e,"setLayerGroupLegendVisibility"),onLayerGroupChange:o(e,"onLayerGroupChange"),getLegendItem:t(e,"getLegendItem"),getLegendItems:t(e,"getLegendItems"),setLegendItemVisibility:t(e,"setLegendItemVisibility"),onLegendItemChange:o(e,"onLegendItemChange"),getLayerFilters:t(e,"getLayerFilters"),setLayerFilters:t(e,"setLayerFilters"),getRenderedFeatures:t(e,"getRenderedFeatures")});var h=e=>({onSelectionChange:o(e,"onSelectionChange"),getSelection:t(e,"getSelection"),selectFeature:t(e,"selectFeature"),clearSelection:t(e,"clearSelection")});var L=e=>({setTool:t(e,"setTool"),getTool:t(e,"getTool"),onToolChange:o(e,"onToolChange"),setToolSettings:t(e,"setToolSettings"),getToolSettings:t(e,"getToolSettings"),onToolSettingsChange:o(e,"onToolSettingsChange")});var T=e=>({updateUiControls:t(e,"updateUiControls"),setOnMapInteractionsUi:t(e,"setOnMapInteractionsUi")});var v=e=>({getViewport:t(e,"getViewport"),setViewport:t(e,"setViewport"),fitViewportToBounds:t(e,"fitViewportToBounds"),onViewportMove:o(e,"onViewportMove"),onViewportMoveEnd:o(e,"onViewportMoveEnd"),onMapIdle:o(e,"onMapIdle")});function E(e){return{iframe:null,...v(e),...T(e),...C(e),...c(e),...h(e),...u(e),...L(e)}}var P={embed(e,m,n){let s={uiControls:{showLegend:!0,cooperativeGestures:!0,fullScreenButton:!0,geolocation:!1,zoomControls:!0,scaleBar:!0},initialViewport:void 0,origin:"https://felt.com"},a=n?.origin??s.origin,r=new URL(`${a}/embed/map/${m}`),i={showLegend:"legend",cooperativeGestures:"cooperativeGestures",fullScreenButton:"link",geolocation:"geolocation",zoomControls:"zoomControls",scaleBar:"scaleBar"},y={...s.uiControls,...n?.uiControls};for(let[p,d]of V(y))d!=null&&r.searchParams.set(i[p],d?"1":"0");if(n?.token&&r.searchParams.set("token",n.token),n?.initialViewport){let p=n.initialViewport;r.searchParams.set("loc",`${p.center.latitude},${p.center.longitude},${p.zoom}z`)}let g=e.tagName==="IFRAME",l=g?e:e.ownerDocument.createElement("iframe");return l.src=r.toString(),g||(l.style.width="100%",l.style.height="100%",l.style.border="none",l.style.margin="0",e.appendChild(l)),l.referrerPolicy="strict-origin-when-cross-origin",new Promise((p,d)=>{l.addEventListener("load",()=>{l.contentWindow==null?d(new Error("Failed to load Felt map")):p(l.contentWindow)},{once:!0})}).then(P.connect).then(p=>(Object.defineProperties(p,{iframe:{value:l,writable:!1,configurable:!1}}),p))},connect(e){let m=E(e);return new Promise((n,s)=>{let a=setTimeout(()=>{s(new Error("Failed to load Felt map")),clearInterval(i)},5e3),r=new MessageChannel,i=setInterval(()=>{e.postMessage({type:"felt.ready"},"*",[r.port2])},100);r.port1.onmessage=y=>{y.data===!0&&(clearInterval(i),clearTimeout(a),r.port1.close(),r.port2.close(),n(m))}})}},V=Object.entries;export{P as Felt};
package/dist/handler.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var v=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var me=(t,r)=>{for(var f in r)v(t,f,{get:r[f],enumerable:!0})},ce=(t,r,f,M)=>{if(r&&typeof r=="object"||typeof r=="function")for(let g of le(r))!pe.call(t,g)&&g!==f&&v(t,g,{get:()=>r[g],enumerable:!(M=ie(r,g))||M.enumerable});return t};var ye=t=>ce(v({},"__esModule",{value:!0}),t);var mt={};me(mt,{createMessageHandler:()=>nt});module.exports=ye(mt);var i=require("zod");var u=require("zod");var c=require("zod");function e(t,r){return c.z.strictObject({type:c.z.literal(t),params:r})}function h(t,r){return c.z.strictObject({eventName:c.z.literal(t),id:c.z.string(),options:r})}function y(t){return c.z.strictObject({eventName:c.z.literal(t),id:c.z.string()})}var p=require("zod"),V=p.z.number(),P=p.z.number(),x=p.z.object({latitude:P,longitude:V}),k=p.z.number().min(1).max(23),C=p.z.tuple([V,P,V,P]),L=p.z.object({show:p.z.array(p.z.string()).optional(),hide:p.z.array(p.z.string()).optional()});var S=require("zod"),N=S.z.object({ids:S.z.array(S.z.string()).optional()}),R=S.z.object({ids:S.z.array(S.z.string()).optional()});var de=e("getElement",u.z.string()),ge=e("getElementGeometry",u.z.string()),ue=e("getElements",N.optional()),fe=e("getElementGroup",u.z.string()),he=e("getElementGroups",R.optional()),Le=e("setElementGroupVisibility",L),Se=h("onElementChange",u.z.object({id:u.z.string()})),Me=h("onElementGroupChange",u.z.object({id:u.z.string()})),U={methods:[de,ge,ue,fe,he,Le],listeners:[Se,Me]};var be=y("onPointerClick"),Ge=y("onPointerMove"),B={methods:null,listeners:[be,Ge]};var s=require("zod");var o=require("zod"),Ie=o.z.enum(["in","ni"]),xe=o.z.enum(["lt","gt","le","ge","eq","ne","cn","nc","is","isnt"]),Gt=o.z.enum(["and","or"]),Z=o.z.union([o.z.number(),o.z.string(),o.z.boolean(),o.z.null()]),A=o.z.string().or(o.z.null()),Ce=o.z.tuple([A,Ie,o.z.array(Z).or(o.z.null())]),Fe=o.z.tuple([A,xe,Z]),w=o.z.union([Ce,Fe]),O=o.z.tuple([o.z.lazy(()=>o.z.union([O,w,o.z.null(),o.z.boolean()])),o.z.enum(["and","or"]),o.z.lazy(()=>o.z.union([O,w,o.z.null(),o.z.boolean()]))]),q=o.z.union([O,w,o.z.null(),o.z.boolean()]);var n=require("zod");var Ct=n.z.enum(["processing","completed","failed","incomplete"]),H=n.z.object({ids:n.z.array(n.z.string()).optional()}),_=n.z.object({ids:n.z.array(n.z.string()).optional()}),b=n.z.object({id:n.z.string(),layerId:n.z.string()}),W=n.z.object({ids:b.array().optional(),layerIds:n.z.string().array().optional()}),Q=n.z.object({layerIds:n.z.array(n.z.string()).optional(),areaQuery:n.z.union([n.z.object({coordinates:x}),n.z.object({boundary:C})]).optional()});var Ee=e("getLayer",s.z.string()),ze=e("getLayers",H.optional()),ve=e("setLayerVisibility",L),Ve=h("onLayerChange",s.z.object({id:s.z.string()})),Pe=e("setLayerStyle",s.z.object({id:s.z.string(),style:s.z.object({}).passthrough()})),we=e("setLayerLegendVisibility",L),Oe=e("getLayerGroup",s.z.string()),Te=e("getLayerGroups",_.optional()),je=e("setLayerGroupVisibility",L),ke=e("setLayerGroupLegendVisibility",L),Ne=h("onLayerGroupChange",s.z.object({id:s.z.string()})),Re=e("getLegendItem",b),Ue=e("getLegendItems",W.optional()),Be=h("onLegendItemChange",b),Ze=e("setLegendItemVisibility",s.z.object({show:b.array().optional(),hide:b.array().optional()})),Ae=e("getLayerFilters",s.z.string()),qe=e("setLayerFilters",s.z.object({layerId:s.z.string(),filters:q,note:s.z.string().optional()})),He=e("getRenderedFeatures",Q.optional()),D={methods:[Ee,ze,ve,Pe,we,Oe,Te,je,ke,Re,Ue,Ze,Ae,qe,He],listeners:[Ve,Ne,Be]};var I=require("zod");var d=require("zod"),J=d.z.object({id:d.z.string().or(d.z.number()),layerId:d.z.string(),showPopup:d.z.boolean().optional(),fitViewport:d.z.boolean().or(d.z.object({maxZoom:d.z.number()})).optional()});var _e=e("getSelection",I.z.undefined()),We=y("onSelectionChange"),Qe=e("selectFeature",J),De=e("clearSelection",I.z.object({features:I.z.boolean().optional(),elements:I.z.boolean().optional()}).optional()),K={methods:[_e,Qe,De],listeners:[We]};var a=require("zod"),X=a.z.object({showLegend:a.z.boolean().optional(),cooperativeGestures:a.z.boolean().optional(),fullScreenButton:a.z.boolean().optional(),geolocation:a.z.boolean().optional(),zoomControls:a.z.boolean().optional(),scaleBar:a.z.boolean().optional()}),Y=a.z.object({featureSelectPanel:a.z.boolean().optional(),featureHoverPanel:a.z.boolean().optional(),elementSelectPanel:a.z.boolean().optional(),linkClickOpen:a.z.boolean().optional(),imageLightboxOpen:a.z.boolean().optional()});var Je=e("updateUiControls",X),Ke=e("setOnMapInteractionsUi",Y),$={methods:[Je,Ke],listeners:null};var ne=require("zod");var F=require("zod");var ee=F.z.object({center:x,zoom:k}),te=F.z.object({center:ee.shape.center.optional(),zoom:ee.shape.zoom.optional()}),oe=F.z.object({bounds:C});var Xe=e("getViewport",ne.z.undefined()),Ye=e("setViewport",te),$e=e("fitViewportToBounds",oe),et=y("onViewportMove"),tt=y("onViewportMoveEnd"),ot=y("onMapIdle"),re={methods:[Ye,Xe,$e],listeners:[et,tt,ot]};var T=[$,re,D,U,K,B];function nt(t,r,f){let M=new Map;async function g(m){if(!pt.safeParse(m.data).success){f?.onUnknownMessage?.(m.data);return}let j=ae.safeParse(m.data);if(!j.success){f?.onInvalidMessage?.(m.data);return}let{data:l}=j;if(l.type==="felt.ready")m.ports[0]?.postMessage(!0);else if(l.type==="felt.addListener"){if(l.event.eventName==="")throw new Error("felt.addListener eventName cannot be empty");let G="options"in l.event?{options:"options"in l.event?l.event.options:void 0,handler:z=>{m.ports[0]?.postMessage(z)}}:{handler:z=>{m.ports[0]?.postMessage(z)}},E=r.listeners[l.event.eventName](G);M.set(l.event.id,E)}else if(l.type==="felt.removeListener")M.get(l.id)?.(),M.delete(l.id);else try{let G=r.methods[l.type],E=await G(l.params);m.ports[0]?.postMessage(E)}catch(G){m.ports[0]?.postMessage({__error__:rt(G)})}}return t.addEventListener("message",g),()=>{t.removeEventListener("message",g)}}function rt(t){return t instanceof Error?t.message:typeof t=="object"&&t!==null&&"message"in t?String(t.message):typeof t=="string"?t:"Unknown error"}var se={methods:T.map(t=>t.methods??[]).flat(),listeners:T.map(t=>t.listeners??[]).flat()},st=i.z.discriminatedUnion("eventName",[i.z.strictObject({eventName:i.z.literal("")}),...se.listeners]),at=i.z.strictObject({type:i.z.literal("felt.addListener"),event:st}),it=i.z.strictObject({type:i.z.literal("felt.removeListener"),id:i.z.string()}),lt=i.z.strictObject({type:i.z.literal("felt.ready")}),ae=i.z.discriminatedUnion("type",[lt,at,it,...se.methods]),pt=i.z.object({type:i.z.enum(ae.options.map(t=>t.shape.type.value))});0&&(module.exports={createMessageHandler});
1
+ "use strict";var v=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var fe=Object.prototype.hasOwnProperty;var he=(o,a)=>{for(var h in a)v(o,h,{get:a[h],enumerable:!0})},Se=(o,a,h,L)=>{if(a&&typeof a=="object"||typeof a=="function")for(let u of ue(a))!fe.call(o,u)&&u!==h&&v(o,u,{get:()=>a[u],enumerable:!(L=de(a,u))||L.enumerable});return o};var be=o=>Se(v({},"__esModule",{value:!0}),o);var Pt={};he(Pt,{createMessageHandler:()=>Tt});module.exports=be(Pt);var l=require("zod");var f=require("zod");var g=require("zod");function t(o,a){return g.z.strictObject({type:g.z.literal(o),params:a})}function S(o,a){return g.z.strictObject({eventName:g.z.literal(o),id:g.z.string(),options:a})}function m(o){return g.z.strictObject({eventName:g.z.literal(o),id:g.z.string()})}var c=require("zod"),w=c.z.number(),P=c.z.number(),T=c.z.object({latitude:P,longitude:w}),N=c.z.number().min(1).max(23),C=c.z.tuple([w,P,w,P]),b=c.z.object({show:c.z.array(c.z.string()).optional(),hide:c.z.array(c.z.string()).optional()});var M=require("zod"),R=M.z.object({ids:M.z.array(M.z.string()).optional()}),U=M.z.object({ids:M.z.array(M.z.string()).optional()});var Me=t("getElement",f.z.string()),Le=t("getElementGeometry",f.z.string()),xe=t("getElements",R.optional()),Ge=t("getElementGroup",f.z.string()),Ie=t("getElementGroups",U.optional()),Te=t("setElementGroupVisibility",b),Ce=S("onElementChange",f.z.object({id:f.z.string()})),ze=S("onElementGroupChange",f.z.object({id:f.z.string()})),B={methods:[Me,Le,xe,Ge,Ie,Te],listeners:[Ce,ze]};var Fe=m("onPointerClick"),Ee=m("onPointerMove"),Z={methods:null,listeners:[Fe,Ee]};var i=require("zod");var n=require("zod"),ve=n.z.enum(["in","ni"]),we=n.z.enum(["lt","gt","le","ge","eq","ne","cn","nc","is","isnt"]),Ht=n.z.enum(["and","or"]),A=n.z.union([n.z.number(),n.z.string(),n.z.boolean(),n.z.null()]),q=n.z.string().or(n.z.null()),Pe=n.z.tuple([q,ve,n.z.array(A).or(n.z.null())]),Ve=n.z.tuple([q,we,A]),V=n.z.union([Pe,Ve]),k=n.z.tuple([n.z.lazy(()=>n.z.union([k,V,n.z.null(),n.z.boolean()])),n.z.enum(["and","or"]),n.z.lazy(()=>n.z.union([k,V,n.z.null(),n.z.boolean()]))]),H=n.z.union([k,V,n.z.null(),n.z.boolean()]);var r=require("zod");var _t=r.z.enum(["processing","completed","failed","incomplete"]),W=r.z.object({ids:r.z.array(r.z.string()).optional()}),K=r.z.object({ids:r.z.array(r.z.string()).optional()}),x=r.z.object({id:r.z.string(),layerId:r.z.string()}),_=r.z.object({ids:x.array().optional(),layerIds:r.z.string().array().optional()}),Q=r.z.object({layerIds:r.z.array(r.z.string()).optional(),areaQuery:r.z.union([r.z.object({coordinates:T}),r.z.object({boundary:C})]).optional()});var ke=t("getLayer",i.z.string()),Oe=t("getLayers",W.optional()),je=t("setLayerVisibility",b),Ne=S("onLayerChange",i.z.object({id:i.z.string()})),Re=t("setLayerStyle",i.z.object({id:i.z.string(),style:i.z.object({}).passthrough()})),Ue=t("setLayerLegendVisibility",b),Be=t("getLayerGroup",i.z.string()),Ze=t("getLayerGroups",K.optional()),Ae=t("setLayerGroupVisibility",b),qe=t("setLayerGroupLegendVisibility",b),He=S("onLayerGroupChange",i.z.object({id:i.z.string()})),We=t("getLegendItem",x),Ke=t("getLegendItems",_.optional()),_e=S("onLegendItemChange",x),Qe=t("setLegendItemVisibility",i.z.object({show:x.array().optional(),hide:x.array().optional()})),De=t("getLayerFilters",i.z.string()),$e=t("setLayerFilters",i.z.object({layerId:i.z.string(),filters:H,note:i.z.string().optional()})),Je=t("getRenderedFeatures",Q.optional()),D={methods:[ke,Oe,je,Re,Ue,Be,Ze,Ae,qe,We,Ke,Qe,De,$e,Je],listeners:[Ne,He,_e]};var I=require("zod");var d=require("zod"),$=d.z.object({id:d.z.string().or(d.z.number()),layerId:d.z.string(),showPopup:d.z.boolean().optional(),fitViewport:d.z.boolean().or(d.z.object({maxZoom:d.z.number()})).optional()});var Xe=t("getSelection",I.z.undefined()),Ye=m("onSelectionChange"),et=t("selectFeature",$),tt=t("clearSelection",I.z.object({features:I.z.boolean().optional(),elements:I.z.boolean().optional()}).optional()),J={methods:[Xe,et,tt],listeners:[Ye]};var oe=require("zod");var e=require("zod"),X=["pin","line","route","polygon","circle","marker","highlighter","text","note"],Y=e.z.enum([...X,"link"]),ee=e.z.enum(X),ot=e.z.object({color:e.z.string(),symbol:e.z.string(),frame:e.z.enum(["frame-circle","frame-square"]).nullable()}),nt=e.z.object({color:e.z.string(),strokeOpacity:e.z.number(),strokeWidth:e.z.number(),strokeStyle:e.z.enum(["solid","dashed","dotted"]),distanceMarker:e.z.boolean()}),rt=e.z.object({color:e.z.string(),routingMode:e.z.enum(["driving","cycling","walking","flying"]),strokeOpacity:e.z.number(),strokeWidth:e.z.number(),strokeStyle:e.z.enum(["solid","dashed","dotted"]),distanceMarker:e.z.boolean(),endCaps:e.z.boolean()}),at=e.z.object({color:e.z.string(),fillOpacity:e.z.number().min(0).max(1),strokeOpacity:e.z.number().min(0).max(1),strokeWidth:e.z.number().min(0),strokeStyle:e.z.enum(["solid","dashed","dotted"]),areaMarker:e.z.boolean()}),it=e.z.object({color:e.z.string(),fillOpacity:e.z.number().min(0).max(1),strokeOpacity:e.z.number().min(0).max(1),strokeWidth:e.z.number().min(0),strokeStyle:e.z.enum(["solid","dashed","dotted"]),radiusMarker:e.z.boolean()}),st=e.z.object({color:e.z.string(),opacity:e.z.number().min(0).max(1),size:e.z.number().min(0).max(100)}),lt=e.z.object({color:e.z.string(),opacity:e.z.number().min(0).max(1),size:e.z.number().min(0).max(200)}),pt=e.z.object({color:e.z.string(),align:e.z.enum(["left","center","right"]),style:e.z.enum(["italic","light","regular","caps"])}),mt=e.z.object({color:e.z.string(),align:e.z.enum(["left","center","right"]),style:e.z.enum(["italic","light","regular","caps"])}),te=e.z.discriminatedUnion("tool",[ot.partial().extend({tool:e.z.literal("pin")}),nt.partial().extend({tool:e.z.literal("line")}),rt.partial().extend({tool:e.z.literal("route")}),at.partial().extend({tool:e.z.literal("polygon")}),it.partial().extend({tool:e.z.literal("circle")}),st.partial().extend({tool:e.z.literal("marker")}),lt.partial().extend({tool:e.z.literal("highlighter")}),pt.partial().extend({tool:e.z.literal("text")}),mt.partial().extend({tool:e.z.literal("note")})]);var ct=t("setTool",Y.nullable()),yt=t("getTool",oe.z.undefined()),gt=m("onToolChange"),dt=t("setToolSettings",te),ut=t("getToolSettings",ee),ft=m("onToolSettingsChange"),ne={methods:[ct,yt,dt,ut],listeners:[gt,ft]};var s=require("zod"),re=s.z.object({showLegend:s.z.boolean().optional(),cooperativeGestures:s.z.boolean().optional(),fullScreenButton:s.z.boolean().optional(),geolocation:s.z.boolean().optional(),zoomControls:s.z.boolean().optional(),scaleBar:s.z.boolean().optional()}),ae=s.z.object({featureSelectPanel:s.z.boolean().optional(),featureHoverPanel:s.z.boolean().optional(),elementSelectPanel:s.z.boolean().optional(),linkClickOpen:s.z.boolean().optional(),imageLightboxOpen:s.z.boolean().optional()});var ht=t("updateUiControls",re),St=t("setOnMapInteractionsUi",ae),ie={methods:[ht,St],listeners:null};var me=require("zod");var z=require("zod");var se=z.z.object({center:T,zoom:N}),le=z.z.object({center:se.shape.center.optional(),zoom:se.shape.zoom.optional()}),pe=z.z.object({bounds:C});var bt=t("getViewport",me.z.undefined()),Mt=t("setViewport",le),Lt=t("fitViewportToBounds",pe),xt=m("onViewportMove"),Gt=m("onViewportMoveEnd"),It=m("onMapIdle"),ce={methods:[Mt,bt,Lt],listeners:[xt,Gt,It]};var O=[ie,ce,D,B,J,Z,ne];function Tt(o,a,h){let L=new Map;async function u(y){if(!wt.safeParse(y.data).success){h?.onUnknownMessage?.(y.data);return}let j=ge.safeParse(y.data);if(!j.success){h?.onInvalidMessage?.(y.data);return}let{data:p}=j;if(p.type==="felt.ready")y.ports[0]?.postMessage(!0);else if(p.type==="felt.addListener"){if(p.event.eventName==="")throw new Error("felt.addListener eventName cannot be empty");let G="options"in p.event?{options:"options"in p.event?p.event.options:void 0,handler:E=>{y.ports[0]?.postMessage(E)}}:{handler:E=>{y.ports[0]?.postMessage(E)}},F=a.listeners[p.event.eventName](G);L.set(p.event.id,F)}else if(p.type==="felt.removeListener")L.get(p.id)?.(),L.delete(p.id);else try{let G=a.methods[p.type],F=await G(p.params);y.ports[0]?.postMessage(F)}catch(G){y.ports[0]?.postMessage({__error__:Ct(G)})}}return o.addEventListener("message",u),()=>{o.removeEventListener("message",u)}}function Ct(o){return o instanceof Error?o.message:typeof o=="object"&&o!==null&&"message"in o?String(o.message):typeof o=="string"?o:"Unknown error"}var ye={methods:O.map(o=>o.methods??[]).flat(),listeners:O.map(o=>o.listeners??[]).flat()},zt=l.z.discriminatedUnion("eventName",[l.z.strictObject({eventName:l.z.literal("")}),...ye.listeners]),Ft=l.z.strictObject({type:l.z.literal("felt.addListener"),event:zt}),Et=l.z.strictObject({type:l.z.literal("felt.removeListener"),id:l.z.string()}),vt=l.z.strictObject({type:l.z.literal("felt.ready")}),ge=l.z.discriminatedUnion("type",[vt,Ft,Et,...ye.methods]),wt=l.z.object({type:l.z.enum(ge.options.map(o=>o.shape.type.value))});0&&(module.exports={createMessageHandler});