@carto/ps-react-maps 4.6.1 → 4.6.2

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/const.ts","../src/helpers.ts","../src/maps/map-libre.tsx","../src/maps/deck-overlay.tsx","../src/maps/google-maps.tsx","../src/maps/deckgl.tsx","../src/providers/map/const.ts","../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../src/providers/map/store.ts","../src/providers/map/provider.tsx","../src/basemap-controls.tsx","../src/editable/const.ts","../src/editable/lasso-tools/modes/custom-edit-mode.class.tsx","../src/editable/lasso-tools/const.ts","../src/providers/layers/store.ts","../src/use-event-manager.ts","../src/editable/custom-editable-geojson-layer.tsx","../src/editable/lasso-tools/layer.tsx","../src/editable/lasso-tools/provider/store.ts","../src/editable/lasso-tools/provider/provider.tsx","../src/editable/lasso-tools/lasso-tools-control.tsx","../src/editable/lasso-tools/util.ts","../src/editable/measurement-tools/utils.ts","../src/editable/measurement-tools/modes/custom-measurement-area.class.tsx","../src/editable/measurement-tools/modes/custom-measurement-buffer.class.tsx","../src/editable/measurement-tools/modes/custom-measurement-distance.class.tsx","../src/editable/measurement-tools/const.ts","../src/editable/lasso-tools/lasso-tools.tsx","../src/editable/measurement-tools/layer.tsx","../src/editable/measurement-tools/provider/store.ts","../src/editable/measurement-tools/provider/provider.tsx","../src/editable/measurement-tools/use-measurement-tools.tsx","../src/editable/measurement-tools/measurement-tools-control.tsx","../src/editable/measurement-tools/measurement-tools.tsx","../src/use-layers.ts","../src/utils/sort-layers.ts","../src/maps/map.tsx","../../services/dist/index.js","../src/providers/sources/widgets/const.ts","../src/providers/sources/widgets/geojson-features.ts","../src/providers/sources/widgets/widget-geojson-source-impl.ts","../src/providers/sources/widgets/widget-geojson-source.ts","../src/providers/sources/store.ts","../src/models/utils/use-filters-merged.tsx","../src/models/utils/use-widget-model.ts","../src/models/utils/get-relevant-headers.tsx","../src/models/utils/use-query-key.ts","../src/models/utils/resolve-property-for-source.ts","../src/models/utils/use-common-model.ts","../src/models/utils/create-model.tsx","../src/models/aggregations.tsx","../src/models/categories.tsx","../src/models/features.tsx","../src/models/formula.tsx","../src/models/histogram.tsx","../src/models/range.tsx","../src/models/scatter.tsx","../src/models/table.tsx","../src/models/time-series.tsx","../src/providers/sources/const.ts","../src/provider.tsx","../src/use-legend.ts","../src/use-map-screenshot.ts","../src/use-spatial-filter.ts","../src/utils/object-to-html/const.ts","../src/utils/object-to-html/object-to-html.contants.ts","../src/utils/object-to-html/object-to-html.ts","../src/utils/mapping-meridian.ts","../src/utils/geometry/get-centroid.ts","../src/zoom-controls.tsx","../src/stats/get-query-stats.ts","../src/stats/get-table-stats.ts","../src/stats/use-stats.tsx"],"sourcesContent":["import type { BasemapKey, BasemapType } from './types'\n\n/**\n * Google Maps basemap types.\n */\nexport const GmapsBasemap = {\n roadmap: 'roadmap',\n satellite: 'satellite',\n hybrid: 'hybrid',\n} as const\n\n/**\n * CARTO basemap names.\n */\nexport const CartoBasemaps = {\n darkMatter: 'darkMatter',\n positron: 'positron',\n voyager: 'voyager',\n} as const\n\nexport const CartoBasemapURL = {\n [CartoBasemaps.positron]:\n 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',\n [CartoBasemaps.voyager]:\n 'https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json',\n [CartoBasemaps.darkMatter]:\n 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',\n}\n\nexport const MapsTypes = {\n maplibre: 'maplibre',\n googleMaps: 'google-maps',\n}\n\nexport const MAPS_BASEMAP: Record<\n BasemapKey,\n {\n url?: string\n dark?: boolean\n type: BasemapType\n }\n> = {\n [CartoBasemaps.positron]: {\n url: CartoBasemapURL[CartoBasemaps.positron],\n type: MapsTypes.maplibre,\n },\n [CartoBasemaps.voyager]: {\n url: CartoBasemapURL[CartoBasemaps.voyager],\n type: MapsTypes.maplibre,\n },\n [CartoBasemaps.darkMatter]: {\n url: CartoBasemapURL[CartoBasemaps.darkMatter],\n type: MapsTypes.maplibre,\n dark: true,\n },\n [GmapsBasemap.roadmap]: {\n type: MapsTypes.googleMaps,\n },\n [GmapsBasemap.satellite]: {\n type: MapsTypes.googleMaps,\n },\n [GmapsBasemap.hybrid]: {\n type: MapsTypes.googleMaps,\n },\n}\n","import type { Tooltip } from './types'\n\nexport function getCursorDefault({\n isDragging,\n isHovering,\n}: {\n isHovering: boolean\n isDragging: boolean\n}) {\n return isDragging ? 'grabbing' : isHovering ? 'pointer' : 'grab'\n}\n\nexport function getTooltipDefault(info: Tooltip) {\n if (!info.html) return null\n\n return {\n html: `<div class='map-tooltip__content'>${info.html}</div>`,\n style: {\n padding: '0',\n background: 'none',\n },\n }\n}\n","import { Map, MapProvider, useMap as useMapLibre } from 'react-map-gl/maplibre'\nimport type { DeckGLComponentProps, InstanceRef } from '../types'\nimport DeckGL from '@deck.gl/react'\nimport { useImperativeHandle, useMemo, type RefObject } from 'react'\n\nexport function MapLibre({\n instanceRef,\n overlayRef,\n controller,\n id,\n layers,\n mapStyle,\n parameters,\n getCursor,\n getTooltip,\n onLoad,\n onViewStateChange,\n ...rest\n}: Omit<DeckGLComponentProps, 'onLoad'> & {\n onLoad: (event: { type: 'deckgl' | 'load'; value: boolean }) => void\n mapStyle: string | undefined\n}) {\n const _layers = useMemo(\n () =>\n layers\n .filter((l) => !!l?.type)\n .map(({ type: Layer, props }) => new Layer!(props)),\n [layers],\n )\n\n return (\n <MapProvider>\n <div className='deckgl-map'>\n <DeckGL\n controller={controller}\n id={id}\n ref={instanceRef as RefObject<InstanceRef>}\n layers={_layers}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={() =>\n onLoad({\n type: 'deckgl',\n value: true,\n })\n }\n onViewStateChange={onViewStateChange}\n parameters={{\n // @ts-expect-error - `depthTest` is not in the types\n depthTest: false,\n ...parameters,\n }}\n {...rest}\n >\n <MapReferences overlayRef={overlayRef} />\n <Map\n reuseMaps={false}\n mapStyle={mapStyle}\n onLoad={() =>\n onLoad({\n type: 'load',\n value: true,\n })\n }\n onRender={() => {\n const $el = document.querySelector('.maplibregl-compact-show')\n $el?.classList.remove('maplibregl-compact-show')\n }}\n />\n </DeckGL>\n </div>\n </MapProvider>\n )\n}\n\nfunction MapReferences({\n overlayRef,\n}: {\n overlayRef: DeckGLComponentProps['overlayRef']\n}) {\n const { default: mapLibre } = useMapLibre()\n\n useImperativeHandle(overlayRef, () => {\n return mapLibre\n }, [mapLibre])\n\n return null\n}\n","import { useMap } from '@vis.gl/react-google-maps'\nimport { useEffect, useImperativeHandle, useMemo } from 'react'\n\nimport {\n GoogleMapsOverlay,\n type GoogleMapsOverlayProps,\n} from '@deck.gl/google-maps'\nimport type { DeckGLComponentProps } from '../types'\n\n/**\n * A very simple implementation of a component that renders a list of deck.gl layers\n * via the GoogleMapsOverlay into the <Map> component containing it.\n */\nexport const DeckGlOverlay = (\n props: GoogleMapsOverlayProps & {\n instanceRef?: DeckGLComponentProps['instanceRef']\n },\n) => {\n // the GoogleMapsOverlay can persist throughout the lifetime of the DeckGlOverlay\n const deck = useMemo(\n () =>\n new GoogleMapsOverlay({\n interleaved: true,\n }),\n [],\n )\n\n // add the overlay to the map once the map is available\n const map = useMap()\n\n useImperativeHandle(\n props.instanceRef,\n () => {\n return deck\n },\n [deck],\n )\n\n useEffect(() => {\n deck.setMap(map)\n\n return () => {\n deck.finalize()\n }\n }, [deck, map])\n\n // whenever the rendered data changes, the layers will be updated\n useEffect(() => {\n deck.setProps(props)\n }, [deck, props])\n\n // no dom rendered by this component\n return null\n}\n","import {\n APIProvider,\n Map,\n useMap,\n type MapCameraChangedEvent,\n} from '@vis.gl/react-google-maps'\nimport type { DeckGLComponentProps, InstanceRef } from '../types'\nimport { useCallback, useImperativeHandle, useMemo } from 'react'\nimport { DeckGlOverlay } from './deck-overlay'\nimport type { MapViewState, ViewStateChangeParameters } from '@deck.gl/core'\nimport type { GoogleMapsOverlay } from '@deck.gl/google-maps'\nimport type { ControllerOptions } from 'node_modules/@deck.gl/core/dist/controllers/controller'\n\nexport function GoogleMaps({\n id,\n instanceRef,\n basemap,\n layers,\n gmapsProps: { apiKey, APIProviderProps, ..._gmapsProps } = { apiKey: '' },\n overlayRef,\n parameters,\n controller,\n onLoad,\n onViewStateChange,\n ...rest\n}: Omit<DeckGLComponentProps, 'onLoad'> & {\n onLoad: (event: { type: 'deckgl' | 'load'; value: boolean }) => void\n}) {\n const _controller: ControllerOptions = useMemo(() => {\n if (typeof controller === 'boolean') {\n return {\n dragPan: controller,\n doubleClickZoom: controller,\n scrollZoom: controller,\n }\n }\n\n const _controller = controller as ControllerOptions\n\n return {\n dragPan: _controller?.dragPan ?? true,\n doubleClickZoom: _controller?.doubleClickZoom ?? true,\n scrollZoom: _controller?.scrollZoom ?? true,\n }\n }, [controller])\n\n const _layers = useMemo(() => {\n return layers\n .filter((l) => !!l?.type)\n .map(({ type: Layer, props }) => new Layer!(props))\n }, [layers])\n\n const mappingGmapsToDeck = useCallback(\n ({ detail: { center, zoom, heading, tilt } }: MapCameraChangedEvent) => {\n return {\n maxZoom: rest.initialViewState?.maxZoom,\n minZoom: rest.initialViewState?.minZoom,\n latitude: center.lat,\n longitude: center.lng,\n zoom: zoom - 1,\n bearing: heading,\n pitch: tilt,\n }\n },\n [rest.initialViewState?.maxZoom, rest.initialViewState?.minZoom],\n )\n\n const handleViewStateChange = useCallback(\n (newViewState: MapViewState) => {\n const _instanceRef = instanceRef?.current as GoogleMapsOverlay\n // @ts-expect-error accessing private property\n const deckInstance = _instanceRef?._deck as InstanceRef['deck']\n\n const viewState = {\n // @ts-expect-error accessing protected props\n ...deckInstance?.viewState,\n ...newViewState,\n }\n\n const _viewState: MapViewState = {\n ...viewState,\n latitude: viewState.latitude,\n longitude: viewState.longitude,\n zoom: viewState.zoom,\n pitch: viewState.pitch,\n bearing: viewState.bearing,\n // @ts-expect-error - `width` and `height` is not in the types\n width: deckInstance?.width,\n height: deckInstance?.height,\n }\n\n onViewStateChange?.({\n viewState: _viewState,\n interactionState: {\n isZooming: true,\n },\n } as ViewStateChangeParameters<MapViewState>)\n },\n [instanceRef, onViewStateChange],\n )\n\n const handleGmapsChange = useCallback(\n (props: MapCameraChangedEvent) => {\n const newViewState = mappingGmapsToDeck(props)\n handleViewStateChange(newViewState)\n },\n [mappingGmapsToDeck, handleViewStateChange],\n )\n\n return (\n <APIProvider apiKey={apiKey} {...APIProviderProps}>\n <div className='deckgl-map'>\n <Map\n id={id}\n mapTypeId={basemap}\n disableDefaultUI={true}\n {..._gmapsProps}\n center={{\n lat: rest.initialViewState?.latitude ?? 0,\n lng: rest.initialViewState?.longitude ?? 0,\n }}\n zoom={(rest.initialViewState?.zoom ?? 0) + 1}\n maxZoom={(rest.initialViewState?.maxZoom ?? 23) + 1}\n minZoom={(rest.initialViewState?.minZoom ?? 0) + 1}\n tilt={rest.initialViewState?.pitch}\n heading={rest.initialViewState?.bearing}\n onTilesLoaded={() => {\n onLoad({\n type: 'load',\n value: true,\n })\n handleViewStateChange(rest.initialViewState!)\n }}\n onBoundsChanged={handleGmapsChange}\n onZoomChanged={handleGmapsChange}\n scrollwheel={\n typeof _controller.scrollZoom === 'boolean'\n ? _controller.scrollZoom\n : !!_controller.scrollZoom\n }\n gestureHandling={!_controller.dragPan ? 'none' : 'greedy'}\n disableDoubleClickZoom={!_controller.doubleClickZoom}\n >\n <MapReferences id={id} overlayRef={overlayRef} />\n <DeckGlOverlay\n id={id}\n instanceRef={instanceRef}\n layers={_layers}\n onLoad={() => {\n onLoad({\n type: 'deckgl',\n value: true,\n })\n }}\n parameters={{\n // @ts-expect-error - `depthTest` is not in the types\n depthTest: false,\n ...parameters,\n }}\n {...rest}\n />\n </Map>\n </div>\n </APIProvider>\n )\n}\n\nfunction MapReferences({\n id,\n overlayRef,\n}: {\n id: DeckGLComponentProps['id']\n overlayRef: DeckGLComponentProps['overlayRef']\n}) {\n const gmaps = useMap(id)!\n\n useImperativeHandle(overlayRef, () => {\n return gmaps\n }, [gmaps])\n\n return null\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { CartoBasemaps, MAPS_BASEMAP, MapsTypes } from '../const'\nimport type { DeckGLComponentProps } from '../types'\nimport { getCursorDefault, getTooltipDefault } from '../helpers'\nimport { MapLibre } from '../maps/map-libre'\nimport { GoogleMaps } from '../maps/google-maps'\n\nexport function DeckGLComponent({\n instanceRef,\n overlayRef,\n basemap = CartoBasemaps.positron,\n controller = true,\n id = 'deck-gl-map',\n layers = [],\n gmapsProps,\n getCursor = getCursorDefault,\n getTooltip = getTooltipDefault,\n onLoad,\n onViewStateChange = () => null,\n ...rest\n}: DeckGLComponentProps) {\n const [isLoaded, setLoaded] = useState([false, false])\n\n const { url: mapStyle, type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n const handleLoad = useCallback(\n (e: { type: 'deckgl' | 'load'; value: boolean }) => {\n const index = e.type === 'deckgl' ? 0 : 1\n setLoaded((state) =>\n state.map((loaded, i) => (i === index ? e.value : loaded)),\n )\n },\n [],\n )\n\n useEffect(() => {\n return () => {\n handleLoad({\n type: 'load',\n value: false,\n })\n handleLoad({\n type: 'deckgl',\n value: false,\n })\n }\n }, [handleLoad])\n\n useEffect(() => {\n const isAllLoaded = isLoaded.every((loaded) => loaded)\n onLoad?.(isAllLoaded)\n }, [isLoaded, onLoad])\n\n if (isGmaps) {\n return (\n <GoogleMaps\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n controller={controller}\n id={id}\n basemap={basemap}\n layers={layers}\n gmapsProps={gmapsProps}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={handleLoad}\n onViewStateChange={onViewStateChange}\n {...rest}\n />\n )\n }\n\n return (\n <MapLibre\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n controller={controller}\n id={id}\n layers={layers}\n mapStyle={mapStyle}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={handleLoad}\n onViewStateChange={onViewStateChange}\n {...rest}\n />\n )\n}\n","import { FlyToInterpolator, type MapViewState } from '@deck.gl/core'\n\nexport const transitionFlyConfig: Pick<\n MapViewState,\n 'transitionDuration' | 'transitionInterpolator'\n> = {\n transitionDuration: 'auto',\n transitionInterpolator: new FlyToInterpolator({\n curve: 2,\n }),\n}\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","import { createStore, type StateCreator } from 'zustand'\nimport {\n WebMercatorViewport,\n type MapViewState,\n type PickingInfo,\n} from '@deck.gl/core'\nimport type {\n CommonSlice,\n MapProviderProps,\n MapStore,\n MapSlice,\n ViewStateSlice,\n AreLayerLoadedSlice,\n SpatialFilterSlice,\n LayerActionsSlice,\n} from './types'\nimport { transitionFlyConfig } from './const'\nimport type { DeckGLComponentProps, InstanceRef } from '../../types'\nimport { MAPS_BASEMAP } from '../../const'\nimport type { GoogleMapsOverlay } from '@deck.gl/google-maps'\nimport deepmerge from 'deepmerge'\nimport type { MjolnirPointerEvent } from 'mjolnir.js'\n\nconst createMapSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const { id, basemap } = curr\n acc[id] = {\n isLoaded: false,\n basemap,\n instanceRef: {\n current: {} as InstanceRef,\n },\n overlayRef: {\n current: null,\n },\n layers: curr.layers ?? [],\n controller: curr.controller ?? true,\n }\n return acc\n },\n {} as MapSlice['maps'],\n )\n\n return ((set, get) => ({\n maps: defaultProps,\n setBasemap: (id, basemap) =>\n set((state) => {\n const { type: currentType } = MAPS_BASEMAP[state.maps[id]!.basemap]\n const { type: newType } = MAPS_BASEMAP[basemap]\n\n const isLoaded = currentType === newType && !!state.maps[id]?.isLoaded\n\n return {\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n isLoaded,\n basemap,\n },\n },\n }\n }),\n setLoad: (id, isLoaded) =>\n set((state) => ({\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n isLoaded,\n },\n },\n })),\n getOverlayInstance: (id) => {\n const store = get()\n return store.maps[id]?.overlayRef?.current\n },\n getDeckInstance: (id) => {\n const store = get()\n const current = store.maps[id]?.instanceRef?.current\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (\n // @ts-expect-error accessing protected props\n (current as InstanceRef)?.deck ?? (current as GoogleMapsOverlay)?._deck\n )\n },\n getViewState: (id) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n\n // @ts-expect-error - viewState is not in the types\n if (!deck?.viewState) return\n\n const { width = 0, height = 0 } = deck\n return {\n // @ts-expect-error - viewState is not in the types\n ...deck.viewState,\n // @ts-expect-error - viewState is not in the types\n width: (deck.viewState.width ?? width) as number,\n // @ts-expect-error - viewState is not in the types\n height: (deck.viewState.height ?? height) as number,\n }\n },\n getViewports: (id, rect) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n return deck?.getViewports(rect)\n },\n getViewport: (id, index = 0, rect) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n return deck?.getViewports(rect)?.[index]\n },\n getBounds: (id, bounds, options) => {\n const store = get()\n if (!store.maps?.[id]?.isLoaded) return\n\n const viewState = store.getViewState(id)\n\n if (!viewState) return\n\n const viewport = new WebMercatorViewport(viewState)\n\n const newBounds = viewport.fitBounds(bounds, options?.boundsOptions)\n\n return {\n latitude: newBounds.latitude,\n longitude: newBounds.longitude,\n zoom: newBounds.zoom,\n ...options?.viewStateOptions,\n }\n },\n addLayers: (id, layers) =>\n set((state) => {\n const maps = { ...state.maps }\n const _layers = maps[id]?.layers ?? []\n\n const set = new Set([..._layers, ...layers])\n\n maps[id] = {\n ...maps[id]!,\n layers: [...set],\n }\n return { maps }\n }),\n removeLayers: (id, layers) =>\n set((state) => {\n const maps = { ...state.maps }\n const _layers = maps[id]?.layers ?? []\n maps[id] = {\n ...maps[id]!,\n layers: _layers.filter((layer) => !layers.includes(layer)),\n }\n return { maps }\n }),\n getController: (id) => {\n const store = get()\n return store.maps[id]?.controller ?? {}\n },\n setController: (id, controller) =>\n set((state) => {\n const currentController = state.maps[id]?.controller ?? {}\n\n const _currentController =\n typeof currentController === 'boolean' ? {} : currentController\n\n const newController =\n !controller || typeof controller === 'boolean'\n ? controller\n : deepmerge<DeckGLComponentProps['controller']>(\n _currentController,\n controller,\n )\n\n return {\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n controller: newController,\n },\n },\n }\n }),\n })) as StateCreator<MapSlice, [], [], MapSlice>\n}\n\nconst createAreLayersLoaded = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const { id } = curr\n acc[id] = false\n return acc\n },\n {} as AreLayerLoadedSlice['areLayersLoaded'],\n )\n\n return ((set) => ({\n areLayersLoaded: defaultProps,\n setLayersLoad: (id, isLoaded) =>\n set((state) => ({\n areLayersLoaded: {\n ...state.areLayersLoaded,\n [id]: isLoaded,\n },\n })),\n })) as StateCreator<AreLayerLoadedSlice, [], [], AreLayerLoadedSlice>\n}\n\nconst createViewStateSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const initialViewState = curr.initialViewState ?? curr.viewState\n acc.initialViewStates[curr.id] = initialViewState\n acc.viewStates[curr.id] = initialViewState\n acc.viewports[curr.id] = null\n return acc\n },\n {\n viewStates: {} as ViewStateSlice['viewStates'],\n viewports: {} as ViewStateSlice['viewports'],\n initialViewStates: {} as ViewStateSlice['initialViewStates'],\n },\n )\n\n return ((set, get) => ({\n viewports: defaultProps.viewports,\n initialViewStates: defaultProps.initialViewStates,\n updateViewPort: (id) => {\n const store = get() as MapStore\n if (!store.maps[id]?.isLoaded) return\n\n const viewState = store.getViewState(id)\n\n if (!viewState) return\n\n const viewport = new WebMercatorViewport(viewState)\n set((state) => ({\n viewports: {\n ...state.viewports,\n [id]: viewport,\n },\n }))\n },\n viewStates: defaultProps.viewStates,\n setViewState: (id, viewState) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id],\n ...viewState,\n },\n },\n })),\n setInitialViewState: (id, viewState) =>\n set((state) => ({\n initialViewStates: {\n ...state.initialViewStates,\n [id]: viewState,\n },\n })),\n setZoom: (id, zoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n zoom,\n },\n },\n })),\n setMinZoom: (id, minZoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n minZoom,\n },\n },\n })),\n setMaxZoom: (id, maxZoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n maxZoom,\n },\n },\n })),\n })) as StateCreator<ViewStateSlice, [], [], ViewStateSlice>\n}\n\nconst createCommonSlice = ((_, get) => ({\n fitBounds: (id, bounds, options) => {\n const store = get()\n const newViewState = store.getBounds(id, bounds, options)\n\n if (!newViewState) return\n\n store.setViewState(id, newViewState)\n store.updateViewPort(id)\n },\n flyTo: (id, target, options = {}) => {\n const store = get()\n\n const viewStateOptions = {\n ...transitionFlyConfig,\n ...options?.viewStateOptions,\n }\n\n // Merge with current view state and options\n const finalViewState = {\n ...target,\n ...viewStateOptions,\n } as MapViewState\n store.setViewState(id, finalViewState)\n store.updateViewPort(id)\n },\n loadInitialViewState: (id, initialViewState) => {\n const store = get()\n store.setInitialViewState(id, initialViewState)\n store.flyTo(id, initialViewState, {\n viewStateOptions: { transitionDuration: 0 },\n })\n },\n resetViewState: (id: string) => {\n const store = get()\n const initialViewStates = store.initialViewStates\n if (!initialViewStates[id]) return\n store.flyTo(id, initialViewStates[id])\n },\n})) as StateCreator<MapStore, [], [], CommonSlice>\n\nconst createSpatialFilterSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n acc[curr.id] = curr.spatialFilter ?? {} // Initialize every mapId to an empty record\n return acc\n },\n {} as SpatialFilterSlice['spatialFilter'],\n )\n return ((set) => ({\n spatialFilter: defaultProps,\n setSpatialFilter: (mapId, id, value) => {\n set((state) => {\n const spatialFilter = structuredClone(state.spatialFilter)\n\n spatialFilter[mapId] = {\n ...spatialFilter[mapId],\n [id]: value,\n }\n\n return {\n spatialFilter,\n }\n })\n },\n removeSpatialFilter: (mapId, id) => {\n set((state) => {\n const spatialFilter = structuredClone(state.spatialFilter)\n if (spatialFilter[mapId]) {\n delete spatialFilter[mapId][id]\n }\n return {\n spatialFilter,\n }\n })\n },\n })) as StateCreator<SpatialFilterSlice, [], [], SpatialFilterSlice>\n}\n\nconst createLayerActionsSlice = ((_, get) => ({\n setLayerHover: (mapId, layerId, geometry) => {\n const store = get() as MapStore\n const deckInstance = store.getDeckInstance(mapId)\n const viewport = store.getViewport(mapId)\n\n // @ts-expect-error - widgetManager is protected\n const widgetManager = deckInstance?.widgetManager\n\n if (!widgetManager || !viewport) return\n\n const [x, y] = viewport.project(geometry)\n\n if (x == null || y == null || isNaN(x) || isNaN(y)) return\n\n const picked = deckInstance.pickObject({\n x,\n y,\n radius: 5,\n layerIds: [layerId],\n })\n\n if (!picked) return\n\n const object: PickingInfo = {\n ...picked,\n x,\n y,\n }\n\n const event = new MouseEvent('mouseenter') as unknown as MjolnirPointerEvent\n\n picked.layer?.onHover?.(object, event)\n widgetManager.onHover?.(object, event)\n },\n clearLayersHover: (mapId) => {\n const store = get() as MapStore\n const deckInstance = store.getDeckInstance(mapId)\n // @ts-expect-error - widgetManager is protected\n const widgetManager = deckInstance?.widgetManager\n\n if (!widgetManager) return\n\n const event = new MouseEvent('mouseleave') as unknown as MjolnirPointerEvent\n\n widgetManager.onHover?.({} as PickingInfo, event)\n },\n})) as StateCreator<LayerActionsSlice, [], [], LayerActionsSlice>\n\nexport const createMapStore = (initProps: MapProviderProps['values']) => {\n return createStore<MapStore>()((...args) => {\n return {\n ...createMapSlice(initProps)(...args),\n ...createAreLayersLoaded(initProps)(...args),\n ...createViewStateSlice(initProps)(...args),\n ...createSpatialFilterSlice(initProps)(...args),\n ...createCommonSlice(...args),\n ...createLayerActionsSlice(...args),\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createMapStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type { MapProviderProps, MapStore } from './types'\n\nconst MapContext = createContext<StoreApi<MapStore>>({} as StoreApi<MapStore>)\n\nexport function MapProvider({\n children,\n values,\n}: PropsWithChildren<MapProviderProps>) {\n const [storeRef] = useState(createMapStore(values))\n\n return <MapContext.Provider value={storeRef}>{children}</MapContext.Provider>\n}\n\nexport function useMapStore<T>(selector: (state: MapStore) => T): T {\n const store = useContext(MapContext)\n if (!Object.keys(store).length)\n throw new Error('Missing MapProvider in the tree')\n return useStore(store, selector)\n}\n","import type { BasemapsControlsProps, MapComponentProps } from './types'\nimport { useMapStore } from './providers/map/provider'\nimport { useCallback } from 'react'\n\nexport function BasemapsControls({ children, mapId }: BasemapsControlsProps) {\n const { basemap } = useMapStore((state) => state.maps[mapId]!)\n const setBasemap = useMapStore((state) => state.setBasemap)\n\n return children({\n basemap,\n setBasemap: useCallback(\n (basemap: NonNullable<MapComponentProps['basemap']>) =>\n setBasemap(mapId, basemap),\n [setBasemap, mapId],\n ),\n })\n}\n","export const EditType = {\n addFeature: 'addFeature',\n addTentativePosition: 'addTentativePosition',\n updateTentativeFeature: 'updateTentativeFeature',\n cancel: 'cancelFeature',\n finish: 'finish',\n addPosition: 'addPosition',\n} as const\n","import {\n CompositeMode,\n ModifyMode,\n TranslateMode,\n type FeatureCollection,\n type ModeProps,\n} from '@deck.gl-community/editable-layers'\nimport { EditType } from '../../../editable/const'\n\nexport class CustomCompositeEditMode extends CompositeMode {\n constructor() {\n super([new TranslateMode(), new ModifyMode()])\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n super.handleKeyUp(event, props)\n if (event.key === 'Enter') {\n this.resetClickSequence()\n props.onEdit({\n updatedData: props.data,\n editType: EditType.addFeature,\n editContext: {},\n })\n }\n }\n}\n","import {\n DrawPolygonMode,\n DrawRectangleMode,\n DrawCircleFromCenterMode,\n DrawPolygonByDraggingMode,\n GeoJsonEditMode,\n} from '@deck.gl-community/editable-layers'\nimport type { LassoToolsMode, LassoToolsModes } from '../../types'\nimport { CustomCompositeEditMode } from './modes/custom-edit-mode.class'\nimport type { DefaultLassoToolsProps } from './types'\nimport { DataFilterExtension } from '@deck.gl/extensions'\n\nexport const MAP_LASSO_TOOLS_LAYER_ID = 'lassoLayer'\nexport const MAP_MASK_LAYER_ID = 'maskLayer'\n\nexport const DEFAULT_LASSO_TOOLS_LAYER_PROPS = {\n id: MAP_LASSO_TOOLS_LAYER_ID,\n billboard: false,\n editHandlePointRadiusUnits: 'pixels',\n editHandlePointRadiusMinPixels: 1,\n editHandlePointRadiusMaxPixels: 12,\n editHandlePointStrokeWidth: 3,\n getEditHandlePointRadius: 3,\n stroked: true,\n filled: true,\n lineWidthUnits: 'pixels',\n getLineWidth: 2,\n lineWidthMinPixels: 2,\n} as const\n\nexport const DEFAULT_LASSO_TOOLS_COLORS: DefaultLassoToolsProps['styles']['colors'] =\n {\n editing: {\n border: [3, 111, 226, 255],\n fill: [3, 111, 226, 20.4],\n point: [255, 255, 255, 255],\n },\n finished: {\n border: [71, 219, 153, 255],\n fill: [71, 219, 153, 0],\n },\n } as const\n\nexport const DEFAULT_LASSO_TOOLS_PROPS: DefaultLassoToolsProps = {\n styles: {\n colors: {\n editing: DEFAULT_LASSO_TOOLS_COLORS.editing,\n finished: DEFAULT_LASSO_TOOLS_COLORS.finished,\n },\n },\n labels: {\n mask: 'Mask',\n },\n} as const\n\nconst EXTENSION_FILTER = [new DataFilterExtension({ filterSize: 1 })]\n\nexport const DEFAULT_MASK_LAYER_PROPS = {\n id: MAP_MASK_LAYER_ID,\n operation: 'mask',\n pickable: false,\n visible: true,\n extensions: EXTENSION_FILTER,\n filterRange: [1, 1],\n}\n\nexport const DEFAULT_LASSO_TOOLS_MODES: LassoToolsModes<\n LassoToolsMode,\n GeoJsonEditMode\n> = {\n polygon: {\n value: 'polygon',\n mode: DrawPolygonMode,\n },\n rectangle: {\n value: 'rectangle',\n mode: DrawRectangleMode,\n },\n circle: {\n value: 'circle',\n mode: DrawCircleFromCenterMode,\n },\n lasso: {\n value: 'lasso',\n mode: DrawPolygonByDraggingMode,\n },\n edit: {\n value: 'edit',\n mode: CustomCompositeEditMode,\n },\n} as const\n","import { create } from 'zustand'\nimport type { LayerStore } from './types'\nimport type { LayerExtension } from '@deck.gl/core'\n\nexport const useLayerStore = create<LayerStore>((set, get) => ({\n layers: {},\n setLayer: (id, layer) =>\n set((state) => {\n const layers = { ...state.layers }\n\n const _layer = layers[id] ?? { type: null, props: {} }\n\n const extensions = [\n ...(_layer.props.extensions ?? []),\n ...(layer.props?.extensions ?? []),\n ].reduce((acc, extension) => {\n if (!acc.some((e) => e.equals(extension))) {\n acc.push(extension)\n }\n return acc\n }, [] as LayerExtension[])\n\n const legend =\n !!_layer.legend || !!layer.legend\n ? {\n ..._layer.legend,\n ...layer.legend,\n }\n : undefined\n\n layers[id] = {\n ..._layer,\n ...layer,\n props: {\n id,\n ..._layer.props,\n ...layer.props,\n updateTriggers: {\n ...(_layer.props.updateTriggers ?? {}),\n ...(layer.props?.updateTriggers ?? {}),\n },\n extensions,\n },\n legend,\n }\n\n return { layers }\n }),\n removeLayer: (id) =>\n set((state) => {\n const layers = { ...state.layers }\n delete layers[id]\n return { layers }\n }),\n getLayers: () => get().layers,\n getLayer: (id) => get().layers[id],\n}))\n","import { useEffect } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport { MAPS_BASEMAP, MapsTypes } from './const'\nimport {\n type RecognizerTuple,\n EventManager,\n Pan,\n InputDirection,\n Pinch,\n Tap,\n} from 'mjolnir.js'\nimport type { Layer } from './providers/layers/types'\nimport { useLayerStore } from './providers/layers/store'\nimport type { LayerProps } from '@deck.gl/core'\n\nexport const EVENT_TYPES = [\n 'click',\n 'keyup',\n 'panstart',\n 'panmove',\n 'panend',\n 'pointermove',\n] as const\n\nconst RECOGNIZERS = {\n multipan: [\n Pan,\n { threshold: 10, direction: InputDirection.Vertical, pointers: 2 },\n ],\n pinch: [Pinch, {}, null, ['multipan']],\n click: [Tap, { event: 'click' }, null, ['dblclick']],\n dblclick: [Tap, { event: 'dblclick', taps: 2 }],\n pan: [Pan, { threshold: 1 }, ['pinch'], ['multipan']],\n} as const\n\nexport function useEventManager({\n mapId,\n layerId,\n}: {\n mapId: MapComponentProps['id']\n layerId: NonNullable<Layer['props']['id']>\n}) {\n const basemap = useMapStore((store) => store.maps[mapId]?.basemap)!\n const isLoaded = useMapStore((store) => store.maps[mapId]?.isLoaded)\n const getOverlayInstance = useMapStore((store) => store.getOverlayInstance)\n const setLayer = useLayerStore((state) => state.setLayer)\n\n const { type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n useEffect(() => {\n let eventManager: EventManager | null = null\n\n if (isGmaps && isLoaded) {\n const overlayInstance = getOverlayInstance(mapId) as google.maps.Map\n eventManager = new EventManager(overlayInstance.getDiv(), {\n recognizers: Object.keys(RECOGNIZERS).map((eventName: string) => {\n const [\n RecognizerConstructor,\n defaultOptions,\n recognizeWith,\n requestFailure,\n ] = RECOGNIZERS[eventName as keyof typeof RECOGNIZERS]\n\n const options = { ...defaultOptions, event: eventName }\n\n return {\n recognizer: new RecognizerConstructor(options),\n recognizeWith,\n requestFailure,\n } as RecognizerTuple\n }),\n })\n }\n\n setLayer(layerId, {\n props: {\n eventManager,\n } as LayerProps & {\n eventManager: EventManager | null\n },\n })\n\n return () => {\n eventManager?.destroy()\n eventManager = null\n }\n }, [getOverlayInstance, isGmaps, isLoaded, layerId, mapId, setLayer])\n}\n","import { EditableGeoJsonLayer } from '@deck.gl-community/editable-layers'\nimport type { UpdateParameters } from '@deck.gl/core'\nimport { EventManager } from 'mjolnir.js'\nimport { EVENT_TYPES } from '../use-event-manager'\n\nexport class CustomEditableGeojsonLayer extends EditableGeoJsonLayer {\n declare props: EditableGeoJsonLayer['props'] & {\n eventManager?: EventManager | null\n }\n\n override updateState({\n props,\n oldProps,\n context,\n changeFlags,\n }: UpdateParameters<this>) {\n if (props.eventManager !== oldProps.eventManager) {\n this._removeEventHandlers(props.eventManager)\n this._removeEventHandlers(oldProps.eventManager)\n this._addEventHandlers()\n }\n super.updateState({ props, oldProps, context, changeFlags })\n }\n\n override _addEventHandlers() {\n const eventManager = this._getEventManager()!\n // _editableLayerState is not in the types, but it's a private property that can be accessed\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { eventHandler } = this.state._editableLayerState\n\n for (const eventType of EVENT_TYPES) {\n // error derived from the _editableLayerState. The type is not exists\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n eventManager.on(eventType, eventHandler, {\n priority: 100,\n })\n }\n }\n\n override _removeEventHandlers(_eventManager?: EventManager | null) {\n const eventManager = _eventManager ?? this._getEventManager()!\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { eventHandler } = this.state._editableLayerState\n\n for (const eventType of EVENT_TYPES) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n eventManager.off(eventType as 'anyclick', eventHandler)\n }\n }\n\n _getEventManager() {\n return (\n this.props.eventManager ??\n // @ts-expect-error accessing protected props\n this.context.deck.eventManager\n )\n }\n}\n\nCustomEditableGeojsonLayer.layerName = 'CustomEditableGeojsonLayer'\n","import type { LayerType } from '../../types'\nimport { DEFAULT_LASSO_TOOLS_LAYER_PROPS } from './const'\nimport type { LassoToolsLayerProps } from './types'\nimport deepmerge from 'deepmerge'\nimport type { FeatureCollection } from 'geojson'\nimport type { LayerProps } from '@deck.gl/core'\nimport { CustomEditableGeojsonLayer } from '../custom-editable-geojson-layer'\n\nexport function getLassoToolsLayer({\n mode,\n ...defaultProps\n}: LassoToolsLayerProps & {}): LayerType {\n const props = getLayerProps(defaultProps)\n\n return {\n type: CustomEditableGeojsonLayer,\n props: {\n ...props,\n mode,\n } as LayerProps,\n }\n}\n\n/**\n * Gets the layer props for the MapLassoToolsLayer component.\n * @param layerProps - The layer props.\n * @param onEdit - The onEdit event handler.\n * @param guideColor - The guide color.\n * @returns The layer props for the component.\n */\nfunction getLayerProps({\n layerProps,\n onEdit,\n getLineColor,\n getFillColor,\n pointColor,\n}: Omit<LassoToolsLayerProps, 'mode'>) {\n const _layerProps = deepmerge(layerProps, {\n modeConfig: {\n // // We force distance due to conversion is addressed at feature getText level\n // formatTooltip: (_distance: number) => {\n // return _distance\n // },\n preventOverlappingLines: true,\n },\n onEdit,\n })\n\n const defaultLayerProps = deepmerge(DEFAULT_LASSO_TOOLS_LAYER_PROPS, {\n getTentativeLineColor: getLineColor,\n getTentativeFillColor: getFillColor,\n getLineColor: getLineColor,\n getFillColor: getFillColor,\n getEditHandlePointColor: pointColor.fill,\n getEditHandlePointOutlineColor: pointColor.outline,\n dataComparator: (data: FeatureCollection, oldData: FeatureCollection) =>\n data.features[0] === oldData.features[0],\n })\n\n const props = deepmerge(defaultLayerProps, _layerProps)\n return props\n}\n","import { createStore } from 'zustand'\nimport type { LassoToolsProviderProps, LassoToolsStore } from './types'\nimport type { LassoToolsState } from '../types'\nimport { DEFAULT_LASSO_TOOLS_MODES } from '../const'\n\nexport const createLassoToolsStore = (\n initProps: LassoToolsProviderProps['values'],\n) => {\n return createStore<LassoToolsStore>()((set) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const {\n enabled = false,\n mapId,\n modeInstance = new DEFAULT_LASSO_TOOLS_MODES.polygon.mode(),\n modes = DEFAULT_LASSO_TOOLS_MODES,\n modeSelected = DEFAULT_LASSO_TOOLS_MODES.polygon.value,\n values = {},\n } = curr\n acc[mapId] = {\n enabled,\n modeInstance,\n modes,\n modeSelected,\n values,\n }\n return acc\n },\n {} as LassoToolsStore['data'],\n )\n\n return {\n data: defaultProps,\n setEnabled: (mapId, enabled) => {\n set((state) => ({\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n enabled,\n visible: enabled,\n },\n },\n }))\n },\n setValue: (mapId, id, value) => {\n set((state) => {\n const values = { ...state.data[mapId]!.values }\n\n const _value =\n values[id] ??\n ({\n type: 'mask',\n } as LassoToolsState['values'][number])\n\n values[id] = {\n ..._value,\n ...value,\n id,\n }\n\n if (!value) {\n delete values[id]\n }\n\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n values,\n },\n },\n }\n })\n },\n setVisibility: (mapId, valueId, visible) => {\n set((state) => {\n const values = { ...state.data[mapId]!.values }\n const _value =\n values[valueId] ?? ({} as LassoToolsState['values'][number])\n _value.properties.visible = visible\n\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n values: {\n ...values,\n [valueId]: _value,\n },\n },\n },\n }\n })\n },\n setModeSelected: (mapId, mode) => {\n set((state) => {\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n modeSelected: mode,\n },\n },\n }\n })\n },\n setModeInstance: (mapId, modeInstance) => {\n set((state) => {\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n modeInstance,\n },\n },\n }\n })\n },\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createLassoToolsStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type { LassoToolsProviderProps, LassoToolsStore } from './types'\n\nconst LassoToolsContext = createContext<StoreApi<LassoToolsStore>>(\n {} as StoreApi<LassoToolsStore>,\n)\n\nexport function LassoToolsProvider({\n children,\n values,\n}: PropsWithChildren<LassoToolsProviderProps>) {\n const [storeRef] = useState(() => createLassoToolsStore(values))\n\n return (\n <LassoToolsContext.Provider value={storeRef}>\n {children}\n </LassoToolsContext.Provider>\n )\n}\n\nexport function useLassoToolsState<T>(\n selector: (state: LassoToolsStore) => T,\n): T {\n const store = useContext(LassoToolsContext)\n if (!Object.keys(store).length) {\n throw new Error('Missing LassoToolsProvider in the tree')\n }\n return useStore(store, selector)\n}\n","import { useCallback, useEffect, useMemo } from 'react'\nimport type {\n LassoToolsData,\n LassoToolsControlProps,\n LassoToolsState,\n} from './types'\nimport { useLassoToolsState } from './provider/provider'\n\nexport function LassoToolsControls({\n mapId,\n children,\n}: LassoToolsControlProps) {\n const enabled = useLassoToolsState((state) => state.data[mapId]?.enabled)!\n const setEnabled = useLassoToolsState((state) => state.setEnabled)\n const values = useLassoToolsState((state) => state.data[mapId]?.values)!\n const setValue = useLassoToolsState((state) => state.setValue)\n const setVisibility = useLassoToolsState((state) => state.setVisibility)\n const modeSelected = useLassoToolsState(\n (state) => state.data[mapId]?.modeSelected,\n )!\n const setModeSelected = useLassoToolsState((state) => state.setModeSelected)\n const modes = useLassoToolsState((state) => state.data[mapId]?.modes)!\n const setModeInstance = useLassoToolsState((state) => state.setModeInstance)\n\n useEffect(() => {\n const data = modes[modeSelected]\n\n if (data && enabled) {\n const Mode = data.mode\n setModeInstance(mapId, new Mode() as LassoToolsState['modeInstance'])\n }\n }, [enabled, mapId, modeSelected, modes, setModeInstance])\n\n const [\n mask,\n // , draw\n ] = useMemo(() => {\n const serialize = (value: LassoToolsData) => ({\n id: value.id,\n ...value.properties,\n visible: value.properties.visible,\n label: value.properties.label,\n })\n const _values = Object.values(values)\n const mask = _values.filter((value) => value.type === 'mask').map(serialize)\n // const draw = _values.filter((value) => value.type === 'draw').map(serialize)\n return [\n mask,\n // , draw\n ]\n }, [values])\n\n const handleModeSelected = useCallback(\n (mode: LassoToolsState['modeSelected']) => {\n setEnabled(mapId, !!mode)\n setModeSelected(mapId, mode)\n },\n [mapId, setEnabled, setModeSelected],\n )\n\n return children({\n mapId,\n enabled,\n modes,\n modeSelected,\n values: {\n mask,\n // draw,\n },\n setValue: useCallback(\n (id, data) => setValue(mapId, id, data),\n [mapId, setValue],\n ),\n setEnabled: useCallback(\n (enabled) => setEnabled(mapId, enabled),\n [mapId, setEnabled],\n ),\n setVisibility: useCallback(\n (valueId, visible) => setVisibility(mapId, valueId, visible),\n [mapId, setVisibility],\n ),\n setModeSelected: handleModeSelected,\n })\n}\n","import type { LassoToolsStore } from './provider/types'\n\nexport function getMaskValues({\n values,\n}: {\n values?: LassoToolsStore['data'][number]['values']\n}) {\n return Object.values(values ?? {}).filter((value) => value.type === 'mask')\n}\n","import { formatNumber } from '@carto/ps-utils'\nimport type { Tooltip, Position } from '@deck.gl-community/editable-layers'\nimport configureMeasurements from 'convert-units'\nimport length, { type LengthUnits } from 'convert-units/definitions/length'\nimport type { ControllerOptions } from 'node_modules/@deck.gl/core/dist/controllers/controller'\nimport type { ValueOf } from 'type-fest'\nimport type { DeckGLComponentProps } from '../../types'\nimport {\n CONVERSIONS_UNITS,\n CONVERSIONS_UNITS_AREA,\n CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA,\n INTL_UNITS,\n MapMeasurementUnit,\n MapMeasurementUnitAuto,\n} from './const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from './types'\nimport type { AreaUnits } from 'convert-units/definitions/area'\nimport area from 'convert-units/definitions/area'\n\nconst convert = configureMeasurements({\n length,\n})\n\nconst convertArea = configureMeasurements({\n area,\n})\n\nfunction validateUnitForAreaConversion(\n unit: string,\n): asserts unit is keyof typeof CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA {\n if (!(unit in CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA)) {\n const validUnits = Object.keys(CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA)\n throw new Error(\n `Unit \"${unit}\" cannot be converted to area. Valid units are: ${validUnits.join(', ')}`,\n )\n }\n}\n\nexport function convertMetersTo(\n distance: number,\n unit: ValueOf<typeof MapMeasurementUnit>,\n dimension: 'length' | 'area',\n) {\n switch (dimension) {\n case 'length': {\n const unitFrom: LengthUnits = CONVERSIONS_UNITS[MapMeasurementUnit.meter]\n const unitTo: LengthUnits = CONVERSIONS_UNITS[unit]\n\n return convert(distance).from(unitFrom).to(unitTo)\n }\n case 'area': {\n validateUnitForAreaConversion(unit)\n const unitFrom: AreaUnits =\n CONVERSIONS_UNITS_AREA[\n CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA[MapMeasurementUnit.meter]\n ]\n const unitTo: AreaUnits =\n CONVERSIONS_UNITS_AREA[CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA[unit]]\n\n return convertArea(distance).from(unitFrom).to(unitTo)\n }\n default: {\n throw new Error(\n `Invalid dimension: ${dimension as string}, valid dimensions are: length, area`,\n )\n }\n }\n}\n\nconst DEFAULT_AUTO_SPLIT_NUMBER = 10000\n\nexport function getTextLayerFormattedDistance({\n meters,\n unit,\n locale,\n options: { autoSplitNumber, customFormatter, ...intlOptions } = {\n autoSplitNumber: DEFAULT_AUTO_SPLIT_NUMBER,\n },\n dimension = 'length',\n}: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n dimension?: 'length' | 'area'\n}) {\n const isMetricSystem = unit === MapMeasurementUnitAuto['m-km']\n const isImperialSystem = unit === MapMeasurementUnitAuto['ft-mi']\n const isAuto = isMetricSystem || isImperialSystem\n\n let _unit\n let _number\n\n if (isAuto) {\n const isSmallDistance =\n meters < (autoSplitNumber ?? DEFAULT_AUTO_SPLIT_NUMBER)\n let convertUnit: ValueOf<typeof MapMeasurementUnit> = isSmallDistance\n ? MapMeasurementUnit.meter\n : MapMeasurementUnit.kilometer\n\n _unit = isSmallDistance ? INTL_UNITS.meter : INTL_UNITS.kilometer\n\n if (isImperialSystem) {\n _unit = isSmallDistance ? INTL_UNITS.feet : INTL_UNITS.mile\n convertUnit = isSmallDistance\n ? MapMeasurementUnit.feet\n : MapMeasurementUnit.mile\n }\n\n _number = convertMetersTo(meters, convertUnit, dimension)\n } else {\n _unit = INTL_UNITS[unit]\n _number = convertMetersTo(meters, unit, dimension)\n }\n\n let result = `${formatNumber(_number, locale, {\n style: 'unit',\n unit: _unit,\n unitDisplay: 'short',\n notation: 'standard',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n ...intlOptions,\n })}`\n\n if (dimension === 'area') {\n result += '2'\n }\n\n if (customFormatter) {\n return customFormatter(result)\n }\n\n return result\n}\n\nexport function getDeckController(\n controller: DeckGLComponentProps['controller'],\n {\n hasDoubleClickZoom,\n }: {\n hasDoubleClickZoom: boolean\n },\n): ControllerOptions {\n return typeof controller === 'boolean'\n ? { doubleClickZoom: hasDoubleClickZoom }\n : { ...controller, doubleClickZoom: hasDoubleClickZoom }\n}\n\nexport function buildTooltip(\n value: number,\n position: Position,\n modeConfig: EditModeConfig,\n): Tooltip[] {\n if (value > 0) {\n const { formatTooltip, turfOptions } = modeConfig ?? {\n turfOptions: {\n units: 'kilometers',\n },\n }\n\n const units = turfOptions?.units\n\n let text\n if (formatTooltip) {\n text = formatTooltip(value)\n } else {\n text = `${parseFloat(value.toString()).toFixed(2)} ${units}`\n }\n\n const { measurementCallback } = modeConfig as {\n measurementCallback?: (value: number) => void\n }\n\n if (measurementCallback) {\n measurementCallback(value)\n }\n\n return [\n {\n position,\n text,\n },\n ]\n }\n return []\n}\n","import {\n getPickedEditHandle,\n MeasureAreaMode,\n type ClickEvent,\n type FeatureCollection,\n type FeatureOf,\n type GuideFeatureCollection,\n type LineString,\n type ModeProps,\n type Point,\n type PointerMoveEvent,\n type Polygon,\n type Position,\n type Tooltip,\n} from '@deck.gl-community/editable-layers'\nimport { area, centroid, lineIntersect } from '@turf/turf'\nimport { EditType } from '../../../editable/const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from '../types'\nimport { buildTooltip, getTextLayerFormattedDistance } from '../utils'\nimport type { ValueOf } from 'type-fest'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { TentativeFeature } from 'node_modules/@deck.gl-community/editable-layers/dist/edit-modes/types'\n\nexport class CustomMeasureAreaMode extends MeasureAreaMode {\n _isMeasuringSessionFinished = false\n area = 0\n tooltips: Tooltip[] = []\n resultPolygon: FeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n }\n\n override handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {\n // restart measuring session\n if (this._isMeasuringSessionFinished) {\n this._isMeasuringSessionFinished = false\n this.resetClickSequence()\n this.area = 0\n }\n\n const { picks } = event\n const clickedEditHandle = getPickedEditHandle(picks)\n const clickSequence = this.getClickSequence()\n\n let positionAdded = false\n if (!clickedEditHandle && !this.allowOverlapping(props)) {\n // Don't add another point right next to an existing one\n this.addClickSequence(event)\n positionAdded = true\n }\n\n const latestClickSequence = this.getClickSequence()\n const polygonCoordinates = [...latestClickSequence, latestClickSequence[0]!]\n this.area = area({\n type: 'Polygon',\n coordinates: [polygonCoordinates],\n })\n\n if (\n this.isFinalizedEdition(\n clickSequence,\n clickedEditHandle as unknown as {\n properties: { positionIndexes: number[] }\n },\n )\n ) {\n this.finalizeEdition(props)\n } else if (positionAdded) {\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: 'addTentativePosition',\n editContext: {\n position: event.mapCoords,\n },\n })\n }\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (event.key === 'Enter') {\n const clickSequence = this.getClickSequence()\n if (clickSequence.length > 2) {\n this.finalizeEdition(props)\n } else {\n this.resetEdition(props)\n }\n } else if (event.key === 'Escape') {\n this.resetEdition(props)\n }\n }\n\n updateTooltip(\n polygon: Polygon | TentativeFeature,\n props: ModeProps<FeatureCollection>,\n ): void {\n const position = centroid(polygon) as FeatureOf<Point>\n this.area = area(polygon)\n this.tooltips = buildTooltip(\n this.area,\n position.geometry.coordinates as unknown as Position,\n props.modeConfig as EditModeConfig,\n )\n }\n\n override handlePointerMove(\n event: PointerMoveEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n if (this._isMeasuringSessionFinished) {\n return\n }\n super.handlePointerMove(event, props)\n const tentativeGuide = this.getTentativeGuide(props)\n if (tentativeGuide?.geometry.type === 'Polygon') {\n this.updateTooltip(tentativeGuide, props)\n }\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this.tooltips = []\n this._isMeasuringSessionFinished = false\n this.area = 0\n }\n\n override getGuides(\n props: ModeProps<FeatureCollection>,\n ): GuideFeatureCollection {\n if (this._isMeasuringSessionFinished) {\n return this.resultPolygon as GuideFeatureCollection\n } else {\n return super.getGuides(props)\n }\n }\n\n override getTooltips() {\n return this.tooltips\n }\n\n isFinalizedEdition(\n clickSequence: Position[],\n clickedEditHandle:\n | { properties: { positionIndexes: number[] } }\n | null\n | undefined,\n ): boolean {\n const { positionIndexes } = clickedEditHandle?.properties ?? {\n positionIndexes: [],\n }\n return (\n clickSequence.length > 2 &&\n clickedEditHandle !== undefined &&\n (positionIndexes[0] === 0 ||\n positionIndexes[0] === clickSequence.length - 1)\n )\n }\n\n allowOverlapping(props: ModeProps<FeatureCollection>) {\n let overlappingLines = false\n const clickSequence = this.getClickSequence()\n if (\n clickSequence.length > 2 &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n props.modeConfig?.preventOverlappingLines\n ) {\n const currentLine = {\n type: 'LineString',\n coordinates: [...clickSequence, clickSequence[0]],\n } as LineString\n const otherLines = {\n type: 'LineString',\n coordinates: [...clickSequence.slice(0, clickSequence.length - 1)],\n } as LineString\n const intersectingPoints = lineIntersect(currentLine, otherLines)\n if ((intersectingPoints as FeatureCollection).features.length > 0) {\n overlappingLines = true\n }\n }\n return overlappingLines\n }\n\n finalizeEdition(props: ModeProps<FeatureCollection>) {\n const clickSequence = this.getClickSequence()\n // They clicked the first or last point (or double-clicked), so complete the polygon\n // Remove the hovered position\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: [[...clickSequence, clickSequence[0]!]],\n }\n props.selectedIndexes = []\n props.data = {\n type: 'FeatureCollection',\n features: [],\n }\n const editAction = this.getAddFeatureOrBooleanPolygonAction(\n polygonToAdd,\n props,\n )\n this._isMeasuringSessionFinished = true\n if (editAction) {\n this.resultPolygon = editAction.updatedData\n props.onEdit({\n ...editAction,\n editType: EditType.addPosition,\n editContext: {\n ...(editAction.editContext as Record<string, unknown>),\n distance: this.area,\n positions: this.getClickSequence(),\n finished: this._isMeasuringSessionFinished,\n },\n })\n }\n // Update the tooltip with the final area\n this.updateTooltip(polygonToAdd, props)\n }\n\n resetEdition(props: ModeProps<FeatureCollection>) {\n this.resetClickSequence()\n props.onEdit({\n // Because the new drawing feature is dropped, so the data will keep as the same.\n updatedData: props.data,\n editType: 'cancelFeature',\n editContext: {},\n })\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n dimension: 'area',\n })\n }\n}\n","import {\n DrawCircleFromCenterMode,\n type ClickEvent,\n type FeatureCollection,\n type FeatureOf,\n type Geometry,\n type GuideFeatureCollection,\n type ModeProps,\n type PointerMoveEvent,\n type Polygon,\n type Position,\n type Tooltip,\n} from '@deck.gl-community/editable-layers'\nimport type { ValueOf } from 'type-fest'\nimport { EditType } from '../../../editable/const'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from '../types'\nimport { buildTooltip, getTextLayerFormattedDistance } from '../utils'\n\nexport class CustomMeasureBufferMode extends DrawCircleFromCenterMode {\n _isMeasuringSessionFinished = false\n _currentArea = 0\n resultPolygon: FeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n }\n tooltips: Tooltip[] = []\n\n override handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {\n // restart measuring session\n if (this._isMeasuringSessionFinished) {\n this._isMeasuringSessionFinished = false\n this.resetClickSequence()\n this._currentArea = 0\n }\n\n super.handleClick(event, props)\n }\n\n override handlePointerMove(\n event: PointerMoveEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n if (this._isMeasuringSessionFinished) {\n return\n }\n super.handlePointerMove(event, props)\n this.tooltips = buildTooltip(\n this.areaCircle!,\n this.position,\n props.modeConfig as EditModeConfig,\n )\n }\n\n override checkAndFinishPolygon(props: ModeProps<FeatureCollection>) {\n const clickSequence = this.getClickSequence()\n const tentativeFeature = this.getTentativeGuide(props)\n if (\n this.isFinalizedEdition(\n clickSequence,\n tentativeFeature as { geometry: Geometry },\n )\n ) {\n this.finalizeEdition(props)\n }\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (event.key === 'Enter') {\n this.finalizeEdition(props)\n } else if (event.key === 'Escape') {\n this.resetEdition(props)\n }\n }\n\n override getGuides(\n props: ModeProps<FeatureCollection>,\n ): GuideFeatureCollection {\n if (this._isMeasuringSessionFinished) {\n return this.resultPolygon as GuideFeatureCollection\n } else {\n return super.getGuides(props)\n }\n }\n\n isFinalizedEdition(\n clickSequence: Position[],\n tentativeFeature: { geometry: Geometry },\n ): boolean {\n return (\n clickSequence.length > 1 && tentativeFeature?.geometry.type === 'Polygon'\n )\n }\n\n finalizeEdition(props: ModeProps<FeatureCollection>) {\n const tentativeFeature = this.getTentativeGuide(props)\n props.selectedIndexes = []\n props.data = {\n type: 'FeatureCollection',\n features: [],\n }\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(\n tentativeFeature as FeatureOf<Polygon>,\n props,\n )\n this._isMeasuringSessionFinished = true\n props.onUpdateCursor('cell')\n if (editAction) {\n this.resultPolygon = editAction.updatedData\n props.onEdit({\n ...editAction,\n editType: EditType.addPosition,\n editContext: {\n ...(editAction.editContext as Record<string, unknown>),\n distance: this._currentArea,\n positions: this.getClickSequence(),\n finished: this._isMeasuringSessionFinished,\n },\n })\n }\n }\n\n resetEdition(props: ModeProps<FeatureCollection>) {\n this.resetClickSequence()\n props.onEdit({\n // Because the new drawing feature is dropped, so the data will keep as the same.\n updatedData: props.data,\n editType: 'cancelFeature',\n editContext: {},\n })\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this.tooltips = []\n this._isMeasuringSessionFinished = false\n this._currentArea = 0\n this.radius = 0\n this.areaCircle = 0\n }\n\n override getTooltips(): Tooltip[] {\n return this.tooltips\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n dimension: 'area',\n })\n }\n}\n","import {\n MeasureDistanceMode,\n type FeatureCollection,\n type ModeProps,\n} from '@deck.gl-community/editable-layers'\nimport type { BasePointerEvent } from 'node_modules/@deck.gl-community/editable-layers/dist/edit-modes/types'\nimport { EditType } from '../../../editable/const'\nimport type { ValueOf } from 'type-fest'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { MeasurementToolsTextProps } from '../types'\nimport { getTextLayerFormattedDistance } from '../utils'\n\nexport class CustomMeasureDistanceMode extends MeasureDistanceMode {\n override handleClick(\n event: BasePointerEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n super.handleClick(event, props)\n\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: EditType.addPosition,\n editContext: {\n distance: this._currentDistance,\n finished: this._isMeasuringSessionFinished,\n positions: this.getClickSequence(),\n },\n })\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (this._isMeasuringSessionFinished) return\n\n event.stopPropagation()\n const { key } = event\n\n const clickSequenceLength = this.getClickSequence().length\n\n let editType: ValueOf<typeof EditType> = EditType.finish\n\n switch (key) {\n case 'Escape':\n props.onEdit({\n updatedData: {\n type: 'FeatureCollection',\n features: [],\n },\n editType: EditType.cancel,\n editContext: {},\n })\n break\n case 'Enter':\n this._isMeasuringSessionFinished = true\n if (clickSequenceLength === 1) {\n this.resetClickSequence()\n editType = EditType.cancel\n }\n // force update drawings\n props.onUpdateCursor('cell')\n props.onEdit({\n updatedData: props.data,\n editType,\n editContext: {\n finished: this._isMeasuringSessionFinished,\n },\n })\n break\n default:\n break\n }\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this._isMeasuringSessionFinished = false\n this._currentTooltips = []\n this._currentDistance = 0\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n })\n }\n}\n","import type { GeoJsonEditMode } from '@deck.gl-community/editable-layers'\nimport type { Color } from '@deck.gl/core'\nimport type { LengthUnits } from 'convert-units/definitions/length'\nimport type {\n MeasurementMode,\n MeasurementModes,\n MeasurementUnit,\n MeasurementUnitOption,\n MeasurementUnits,\n} from '../../types'\nimport type { ValueOf } from 'type-fest'\nimport { CustomMeasureAreaMode } from './modes/custom-measurement-area.class'\nimport { CustomMeasureBufferMode } from './modes/custom-measurement-buffer.class'\nimport { CustomMeasureDistanceMode } from './modes/custom-measurement-distance.class'\nimport type { DefaultMeasureToolProps } from './types'\nimport type { AreaUnits } from 'convert-units/definitions/area'\n\nexport const MAP_MEASURE_LAYER_ID = 'mapMeasureLayer'\n\nexport const DEFAULT_LAYER_PROPS = {\n id: MAP_MEASURE_LAYER_ID,\n pickable: false,\n billboard: false,\n editHandlePointRadiusUnits: 'pixels',\n editHandlePointRadiusMinPixels: 1,\n editHandlePointRadiusMaxPixels: 12,\n lineWidthMinPixels: 2,\n editHandlePointStrokeWidth: 3,\n getEditHandlePointRadius: 3,\n _subLayerProps: {\n tooltips: {\n fontFamily: 'Open Sans, Inter, sans-serif',\n fontWeight: 'lighter',\n getSize: 11,\n lineHeight: 1.4545,\n getPixelOffset: [0, 20],\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'center',\n updateTriggers: {},\n },\n guides: {\n getLineWidth: 2,\n },\n },\n} as const\n\nexport const DEFAULT_COLORS: Record<string, Color> = {\n editing: [23, 102, 214, 255],\n finished: [71, 219, 153, 255],\n point: [255, 255, 255, 255],\n} as const\n\nexport const DEFAULT_PROPS: DefaultMeasureToolProps = {\n styles: {\n colors: {\n editing: DEFAULT_COLORS.editing!,\n finished: DEFAULT_COLORS.finished!,\n point: DEFAULT_COLORS.point!,\n },\n },\n} as const\n\nexport const MapMeasurementUnit = {\n kilometer: 'kilometer',\n meter: 'meter',\n centimeter: 'centimeter',\n milimeter: 'milimeter',\n mile: 'mile',\n yard: 'yard',\n feet: 'feet',\n} as const\n\nexport const MapMeasurementUnitArea = {\n squareMeter: 'squareMeter',\n squareKilometer: 'squareKilometer',\n squareMile: 'squareMile',\n squareFeet: 'squareFeet',\n} as const\n\nexport const MapMeasurementUnitAuto = {\n 'm-km': 'm-km',\n 'ft-mi': 'ft-mi',\n ...MapMeasurementUnit,\n} as const\n\nexport const MapMeasurementUnitTurf = {\n meters: 'meters',\n kilometer: 'kilometers',\n mile: 'miles',\n} as const\n\nexport type MapMeasurementUnitAreaValue = Pick<\n typeof MapMeasurementUnit,\n 'kilometer' | 'meter' | 'mile' | 'feet'\n>\n\nexport const CONVERSIONS_UNITS: Record<\n ValueOf<typeof MapMeasurementUnit>,\n LengthUnits\n> = {\n [MapMeasurementUnit.kilometer]: 'km',\n [MapMeasurementUnit.meter]: 'm',\n [MapMeasurementUnit.centimeter]: 'cm',\n [MapMeasurementUnit.milimeter]: 'mm',\n [MapMeasurementUnit.mile]: 'mi',\n [MapMeasurementUnit.yard]: 'yd',\n [MapMeasurementUnit.feet]: 'ft',\n} as const\n\nexport const CONVERSIONS_UNITS_AREA: Record<\n ValueOf<typeof MapMeasurementUnitArea>,\n AreaUnits\n> = {\n [MapMeasurementUnitArea.squareMeter]: 'm2',\n [MapMeasurementUnitArea.squareKilometer]: 'km2',\n [MapMeasurementUnitArea.squareMile]: 'mi2',\n [MapMeasurementUnitArea.squareFeet]: 'ft2',\n} as const\n\nexport const CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA: Record<\n keyof MapMeasurementUnitAreaValue,\n ValueOf<typeof MapMeasurementUnitArea>\n> = {\n [MapMeasurementUnit.meter]: MapMeasurementUnitArea.squareMeter,\n [MapMeasurementUnit.kilometer]: MapMeasurementUnitArea.squareKilometer,\n [MapMeasurementUnit.mile]: MapMeasurementUnitArea.squareMile,\n [MapMeasurementUnit.feet]: MapMeasurementUnitArea.squareFeet,\n} as const\n\nexport const INTL_UNITS: Record<ValueOf<typeof MapMeasurementUnit>, string> = {\n [MapMeasurementUnit.kilometer]: 'kilometer',\n [MapMeasurementUnit.meter]: 'meter',\n [MapMeasurementUnit.centimeter]: 'centimeter',\n [MapMeasurementUnit.milimeter]: 'millimeter',\n [MapMeasurementUnit.mile]: 'mile',\n [MapMeasurementUnit.yard]: 'yard',\n [MapMeasurementUnit.feet]: 'foot',\n} as const\n\nexport const MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES: Record<\n MeasurementUnit,\n MeasurementUnitOption\n> = {\n 'm-km': {\n value: 'm-km',\n system: 'metric',\n },\n kilometer: {\n value: 'kilometer',\n system: 'metric',\n },\n meter: {\n value: 'meter',\n system: 'metric',\n },\n centimeter: {\n value: 'centimeter',\n system: 'metric',\n },\n milimeter: {\n value: 'milimeter',\n system: 'metric',\n },\n 'ft-mi': {\n value: 'ft-mi',\n system: 'imperial',\n },\n mile: {\n value: 'mile',\n system: 'imperial',\n },\n yard: {\n value: 'yard',\n system: 'imperial',\n },\n feet: {\n value: 'feet',\n system: 'imperial',\n },\n} as const\n\nexport const MEASUREMENT_TOOLS_UNITS_DISTANCE: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n>[keyof MeasurementModes] = [\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['m-km'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.kilometer,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.meter,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['ft-mi'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.mile,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.feet,\n] as const\n\nexport const MEASUREMENT_TOOLS_UNITS_AREA: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n>[keyof MeasurementModes] = [\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['m-km'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.kilometer,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.meter,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['ft-mi'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.mile,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.feet,\n] as const\n\nexport const DEFAULT_MEASUREMENT_TOOLS_MODES: MeasurementModes<\n MeasurementMode,\n GeoJsonEditMode\n> = {\n distance: {\n value: 'distance',\n mode: CustomMeasureDistanceMode,\n },\n buffer: {\n value: 'buffer',\n mode: CustomMeasureBufferMode,\n },\n area: {\n value: 'area',\n mode: CustomMeasureAreaMode,\n },\n} as const\n\nexport const DEFAULT_MEASUREMENT_TOOLS_UNITS: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n> = {\n distance: MEASUREMENT_TOOLS_UNITS_DISTANCE,\n buffer: MEASUREMENT_TOOLS_UNITS_DISTANCE,\n area: MEASUREMENT_TOOLS_UNITS_AREA,\n} as const\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport { useLayerStore } from '../../providers/layers/store'\nimport { useMapStore } from '../../providers/map/provider'\nimport type {\n LassoToolsLayerEditProps,\n LassoToolsProps,\n LassoToolsData,\n} from './types'\nimport { getLassoToolsLayer } from './layer'\nimport {\n DEFAULT_MASK_LAYER_PROPS,\n DEFAULT_LASSO_TOOLS_PROPS,\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n} from './const'\nimport { useLassoToolsState } from './provider/provider'\nimport { GeoJsonLayer, type GeoJsonLayerProps } from '@deck.gl/layers'\nimport { MaskExtension } from '@deck.gl/extensions'\nimport { LassoToolsControls } from './lasso-tools-control'\nimport { EditType } from '../const'\nimport { useShallow } from 'zustand/shallow'\nimport { getMaskValues } from './util'\nimport { MAP_MEASURE_LAYER_ID } from '../measurement-tools/const'\nimport type { Layer, LayerProps, PickingInfo } from '@deck.gl/core'\nimport { ViewMode } from '@deck.gl-community/editable-layers'\nimport { useEventManager } from '../../use-event-manager'\n\nconst EXCEPTED_LAYER_IDS = [\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n MAP_MEASURE_LAYER_ID,\n]\n\n/**\n * LassoTools component provides tools for lasso selection on a map.\n *\n * @param {Object} props - The properties object.\n * @param {ReactNode} props.children - The child components to be rendered.\n * @param {string} props.mapId - The unique identifier for the map.\n * @param {Object} [props.defaultProps] - The default properties for the component.\n * @param {Object} [props.defaultProps.styles] - The default styles for the lasso tools.\n * @param {Object} [props.defaultProps.labels] - The default labels for the lasso tools.\n * @param {Object} [props.layerProps] - The properties for the layer.\n * @param {string} [props.defaultType='mask'] - The default type for the lasso tools.\n *\n * @returns {ReactNode} The rendered children components.\n *\n * @example\n * <LassoTools mapId=\"map1\">\n * <ChildComponent />\n * </LassoTools>\n */\nexport function LassoTools({\n children,\n mapId,\n defaultProps: { styles = DEFAULT_LASSO_TOOLS_PROPS.styles, labels } = {\n styles: DEFAULT_LASSO_TOOLS_PROPS.styles,\n labels: DEFAULT_LASSO_TOOLS_PROPS.labels,\n },\n layerProps = {},\n defaultType = 'mask',\n}: LassoToolsProps & {\n children?: ReactNode\n}) {\n const getController = useMapStore((state) => state.getController)\n const setController = useMapStore((state) => state.setController)\n const enabled = useLassoToolsState((state) => state.data[mapId]?.enabled)\n const setEnabled = useLassoToolsState((state) => state.setEnabled)\n const values = useLassoToolsState((state) => state.data[mapId]?.values)\n const setValue = useLassoToolsState((state) => state.setValue)\n const modeInstance = useLassoToolsState(\n (state) => state.data[mapId]?.modeInstance,\n )!\n const modeSelected = useLassoToolsState(\n (state) => state.data[mapId]?.modeSelected,\n )\n\n const setLayer = useLayerStore((state) => state.setLayer)\n const addLayers = useMapStore((state) => state.addLayers)\n const removeLayers = useMapStore((state) => state.removeLayers)\n const mapLayers = useMapStore(\n useShallow((state) =>\n state.maps[mapId]?.layers.filter((l) => !EXCEPTED_LAYER_IDS.includes(l)),\n ),\n )\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const mapLayersVisibilityRef = useRef<Record<string, boolean>>({})\n\n useEventManager({ mapId, layerId: MAP_LASSO_TOOLS_LAYER_ID })\n\n useEffect(() => {\n const controller = getController(mapId)\n\n if (enabled) {\n setController(mapId, {\n doubleClickZoom: false,\n dragPan: modeSelected !== 'lasso',\n })\n }\n\n return () => {\n setController(mapId, controller)\n }\n }, [enabled, getController, mapId, modeSelected, setController])\n\n const maskValues = useMemo(() => {\n return getMaskValues({ values })\n }, [values])\n\n const maskFeatureCollection: LassoToolsLayerEditProps['updatedData'] =\n useMemo(() => {\n return {\n type: 'FeatureCollection',\n features: maskValues.map((value) => ({\n type: 'Feature',\n geometry: value.geometry,\n properties: value.properties,\n id: value.id,\n })),\n }\n }, [maskValues])\n\n const maskVisible = useMemo(() => {\n return maskValues\n .filter((value) => value.properties.visible)\n .map((value) => value.id)\n }, [maskValues])\n\n const [data, setData] = useState<LassoToolsLayerEditProps['updatedData']>(\n maskFeatureCollection,\n )\n const [selectedFeatureIndexes, setSelectedFeatureIndexes] = useState<\n number[]\n >([])\n\n const setDataByValues = useCallback(() => {\n const _data = {\n ...maskFeatureCollection,\n features: maskFeatureCollection.features.filter(\n (feature) => feature.properties?.visible,\n ),\n }\n setData(_data)\n }, [maskFeatureCollection])\n\n useEffect(() => {\n setDataByValues()\n }, [setDataByValues])\n\n const autoIncrement = useRef(maskValues.length)\n\n useEffect(() => {\n addLayers(mapId, [MAP_LASSO_TOOLS_LAYER_ID])\n\n return () => {\n removeLayers(mapId, [MAP_LASSO_TOOLS_LAYER_ID])\n }\n }, [addLayers, mapId, removeLayers])\n\n const handleCancelEdit = useCallback(() => {\n setDataByValues()\n setSelectedFeatureIndexes([])\n setEnabled(mapId, false)\n }, [mapId, setDataByValues, setEnabled])\n\n const handleApplyEdit = useCallback(\n (features: LassoToolsLayerEditProps['updatedData']['features']) => {\n features.forEach((feature, index) => {\n feature.properties.label ??= `${labels?.mask} ${autoIncrement.current}`\n feature.properties.index = index\n feature.properties.visible = feature.properties.visible ?? true\n\n const id = (feature.id as string) ?? crypto.randomUUID()\n\n setValue(mapId, id, {\n geometry: feature.geometry,\n properties: feature.properties,\n type: defaultType,\n })\n })\n },\n [defaultType, labels?.mask, mapId, setValue],\n )\n\n const onEdit = useCallback(\n ({ editType, updatedData }: LassoToolsLayerEditProps) => {\n if (editType === EditType.cancel) {\n handleCancelEdit()\n return\n }\n\n setData(updatedData)\n\n if (editType === EditType.updateTentativeFeature) {\n return\n }\n\n if (editType === EditType.addFeature) {\n if (modeSelected !== 'edit') {\n autoIncrement.current = autoIncrement.current + 1\n }\n handleApplyEdit(updatedData.features)\n handleCancelEdit()\n }\n },\n [handleApplyEdit, handleCancelEdit, modeSelected],\n )\n\n useEffect(() => {\n const pickable = enabled\n\n const {\n border: guideColorEditing,\n point: pointColorEditing,\n fill: fillColorEditing,\n } = styles.colors.editing\n\n const { border: borderFinished, fill: fillFinished } =\n styles.colors.finished\n\n const layer = getLassoToolsLayer({\n layerProps: {\n ...layerProps.mask,\n pickable,\n data,\n selectedFeatureIndexes,\n updateTriggers: {\n getFilterValue: maskVisible,\n },\n onClick: (e: PickingInfo) => {\n const _e = e as PickingInfo<never, { isGuide: boolean }>\n if (_e.isGuide) {\n return\n }\n setSelectedFeatureIndexes([_e.index])\n },\n },\n getLineColor: (d: LassoToolsData) =>\n selectedFeatureIndexes[0] === d.properties.index\n ? guideColorEditing\n : borderFinished,\n getFillColor: (d: LassoToolsData) =>\n selectedFeatureIndexes[0] === d.properties.index\n ? fillColorEditing\n : fillFinished,\n pointColor: {\n fill: pointColorEditing,\n outline: guideColorEditing,\n },\n onEdit,\n mode: !pickable ? new ViewMode() : modeInstance,\n })\n\n setLayer(MAP_LASSO_TOOLS_LAYER_ID, layer)\n }, [\n data,\n enabled,\n layerProps.mask,\n maskVisible,\n modeInstance,\n onEdit,\n selectedFeatureIndexes,\n setLayer,\n styles.colors.editing,\n styles.colors.finished,\n ])\n\n useEffect(() => {\n const props = {\n ...DEFAULT_MASK_LAYER_PROPS,\n data: maskFeatureCollection,\n getFilterValue: (f: LassoToolsData) => Number(maskVisible.includes(f.id)),\n updateTriggers: {\n getFilterValue: maskVisible,\n },\n } as GeoJsonLayerProps\n\n setLayer(DEFAULT_MASK_LAYER_PROPS.id, {\n type: GeoJsonLayer,\n props,\n })\n\n addLayers(mapId, [DEFAULT_MASK_LAYER_PROPS.id])\n return () => {\n removeLayers(mapId, [DEFAULT_MASK_LAYER_PROPS.id])\n }\n }, [\n addLayers,\n mapId,\n maskFeatureCollection,\n maskVisible,\n removeLayers,\n setLayer,\n ])\n\n useEffect(() => {\n if (!enabled && selectedFeatureIndexes.length && data.features.length) {\n handleApplyEdit(data.features)\n handleCancelEdit()\n }\n }, [\n data.features,\n enabled,\n handleApplyEdit,\n handleCancelEdit,\n selectedFeatureIndexes.length,\n ])\n\n useEffect(() => {\n mapLayers?.forEach((layerId) => {\n const currentLayer = getDeckInstance(mapId)?.props.layers.find(\n (l) => (l as Layer<LayerProps>).props.id === layerId,\n ) as Layer<LayerProps>\n\n if (!currentLayer) return\n\n if (enabled) {\n mapLayersVisibilityRef.current[layerId] = currentLayer?.props.pickable\n }\n\n const pickable =\n !enabled &&\n (mapLayersVisibilityRef.current[layerId] ??\n currentLayer?.props.pickable)\n\n setLayer(layerId, {\n props: {\n pickable: pickable,\n extensions: [new MaskExtension()],\n maskId:\n !enabled && maskVisible.length ? MAP_MASK_LAYER_ID : undefined,\n } as Partial<GeoJsonLayerProps>,\n })\n })\n }, [enabled, getDeckInstance, mapId, mapLayers, maskVisible.length, setLayer])\n\n return children\n}\n\nLassoTools.Controls = LassoToolsControls\n","import deepmerge from 'deepmerge'\nimport type { LayerType } from '../../types'\nimport { DEFAULT_LAYER_PROPS, MapMeasurementUnitTurf } from './const'\nimport type { MeasurementToolsLayerProps, MeasurementToolsState } from './types'\nimport type { LayerProps } from '@deck.gl/core'\nimport { CustomEditableGeojsonLayer } from '../custom-editable-geojson-layer'\n\nexport function getMeasurementToolsLayer({\n mode,\n ...defaultProps\n}: MeasurementToolsLayerProps & {}): LayerType {\n const props = getLayerProps({\n mode,\n ...defaultProps,\n })\n return {\n type: CustomEditableGeojsonLayer,\n props: {\n ...props,\n mode,\n data: [],\n } as unknown as LayerProps,\n }\n}\n\n/**\n * Gets the layer props for the MapMeasurementToolsLayer component.\n * @param layerProps - The layer props.\n * @param locale - The locale.\n * @param unit - The unit.\n * @param onHover - The onHover event handler.\n * @param onEdit - The onEdit event handler.\n * @param guideColor - The guide color.\n * @returns The layer props for the component.\n */\nfunction getLayerProps({\n mode,\n layerProps,\n locale,\n enabled,\n unit,\n onEdit,\n guideColor,\n pointColor,\n textOptions,\n}: MeasurementToolsLayerProps) {\n const _layerProps = deepmerge(layerProps, {\n visible: enabled,\n pickable: enabled,\n modeConfig: {\n // We force distance due to conversion is addressed at feature getText level\n formatTooltip: (_distance: number) => {\n return _distance\n },\n turfOptions: {\n units: MapMeasurementUnitTurf.meters,\n },\n },\n ...(enabled && { onEdit }),\n _subLayerProps: {\n tooltips: {\n outlineColor: [255, 255, 255, 255],\n outlineWidth: 6,\n fontSettings: {\n sdf: true, // needed for the outlineWidth and outlineColor attributes to be effective\n smoothing: 0.2,\n },\n getText: (properties: { text: MeasurementToolsState['distance'] }) => {\n // @ts-expect-error - fix EditGeoJSON methods\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return mode?.getTooltipText?.({\n meters: properties.text,\n locale,\n unit,\n options: textOptions,\n }) as string\n },\n updateTriggers: {\n getText: [unit, locale, textOptions],\n },\n },\n },\n })\n const defaultLayerProps = deepmerge(DEFAULT_LAYER_PROPS, {\n _subLayerProps: {\n guides: {\n getLineColor: guideColor,\n getFillColor: guideColor.with(3, 20),\n },\n },\n getEditHandlePointColor: pointColor,\n getEditHandlePointOutlineColor: guideColor,\n })\n\n const props = deepmerge(defaultLayerProps, _layerProps)\n return props\n}\n","import { createStore } from 'zustand'\nimport type {\n MeasurementToolsProviderProps,\n MeasurementToolsStore,\n} from './types'\nimport {\n DEFAULT_MEASUREMENT_TOOLS_MODES,\n DEFAULT_MEASUREMENT_TOOLS_UNITS,\n MapMeasurementUnitAuto,\n} from '../const'\nimport { CustomMeasureDistanceMode } from '../modes/custom-measurement-distance.class'\n\nexport const createMeasurementToolsStore = (\n initProps: MeasurementToolsProviderProps['values'],\n) => {\n return createStore<MeasurementToolsStore>()((set) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const {\n mapId,\n modeSelected,\n modes = DEFAULT_MEASUREMENT_TOOLS_MODES,\n units = DEFAULT_MEASUREMENT_TOOLS_UNITS,\n distance = 0,\n finished = false,\n locale = 'en',\n positions = [],\n clearLayerOnStart = false,\n unit = MapMeasurementUnitAuto['m-km'],\n enabled = false,\n } = curr\n acc[mapId] = {\n modes,\n units,\n modeSelected,\n distance,\n finished,\n locale,\n positions,\n unit,\n clearLayerOnStart,\n enabled,\n }\n return acc\n },\n {} as MeasurementToolsStore['measurements'],\n )\n\n return {\n measurements: defaultProps,\n mode: CustomMeasureDistanceMode,\n setModeInstance: (mapId, modeInstance) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n modeInstance,\n },\n },\n }))\n },\n setModeSelected: (mapId, modeSelected) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n modeSelected,\n },\n },\n }))\n },\n setFinished: (mapId, finished) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n finished,\n },\n },\n }))\n },\n setDistance: (mapId, distance) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n distance,\n },\n },\n }))\n },\n setUnit: (mapId, unit) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n unit,\n },\n },\n }))\n },\n setLocale: (mapId, locale) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n locale,\n },\n },\n }))\n },\n setPositions: (mapId, positions) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n positions: [...positions],\n },\n },\n }))\n },\n setEnabled: (mapId, enabled) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n enabled,\n },\n },\n }))\n },\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createMeasurementToolsStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type {\n MeasurementToolsProviderProps,\n MeasurementToolsStore,\n} from './types'\n\nconst MeasurementToolsContext = createContext<StoreApi<MeasurementToolsStore>>(\n {} as StoreApi<MeasurementToolsStore>,\n)\n\nexport function MeasurementToolsProvider({\n children,\n values,\n}: PropsWithChildren<MeasurementToolsProviderProps>) {\n const [storeRef] = useState(createMeasurementToolsStore(values))\n\n return (\n <MeasurementToolsContext.Provider value={storeRef}>\n {children}\n </MeasurementToolsContext.Provider>\n )\n}\n\nexport function useMeasurementToolsState<T>(\n selector: (state: MeasurementToolsStore) => T,\n): T {\n const store = useContext(MeasurementToolsContext)\n if (!Object.keys(store).length)\n throw new Error('Missing MeasurementToolsProvider in the tree')\n return useStore(store, selector)\n}\n","import { useCallback } from 'react'\nimport { useMeasurementToolsState } from './provider/provider'\nimport type { MeasurementToolsState } from './types'\n\nexport function useMeasurementTools({ mapId }: { mapId: string }) {\n const modes = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modes,\n )\n\n const units = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.units,\n )\n\n const distance = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.distance,\n )\n const _setDistance = useMeasurementToolsState((state) => state.setDistance)\n\n const setDistance = useCallback(\n (distance: number) => _setDistance(mapId, distance),\n [_setDistance, mapId],\n )\n\n const clearLayerOnStart = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.clearLayerOnStart,\n )\n\n const enabled = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.enabled,\n )\n const _setVisibility = useMeasurementToolsState((state) => state.setEnabled)\n\n const setEnabled = useCallback(\n (enabled: MeasurementToolsState['enabled']) =>\n _setVisibility(mapId, enabled),\n [_setVisibility, mapId],\n )\n\n const modeSelected = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modeSelected,\n )\n\n const _setModeSelected = useMeasurementToolsState(\n (state) => state.setModeSelected,\n )\n\n const setModeSelected = useCallback(\n (mode: MeasurementToolsState['modeSelected']) => {\n setEnabled(!!mode)\n _setModeSelected(mapId, mode)\n },\n [_setModeSelected, mapId, setEnabled],\n )\n\n const finished = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.finished,\n )\n const _setFinished = useMeasurementToolsState((state) => state.setFinished)\n\n const setFinished = useCallback(\n (finished: MeasurementToolsState['finished']) =>\n _setFinished(mapId, finished),\n [_setFinished, mapId],\n )\n\n const locale = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.locale,\n )\n const _setLocale = useMeasurementToolsState((state) => state.setLocale)\n\n const setLocale = (locale: MeasurementToolsState['locale']) =>\n _setLocale(mapId, locale)\n\n const modeInstance = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modeInstance,\n )\n\n const _setInstance = useMeasurementToolsState(\n (state) => state.setModeInstance,\n )\n\n const setModeInstance = useCallback(\n (modeInstance: MeasurementToolsState['modeInstance']) =>\n _setInstance(mapId, modeInstance),\n [_setInstance, mapId],\n )\n\n const positions = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.positions,\n )\n const _setPositions = useMeasurementToolsState((state) => state.setPositions)\n\n const setPositions = useCallback(\n (positions: MeasurementToolsState['positions']) =>\n _setPositions(mapId, positions),\n [mapId, _setPositions],\n )\n\n const unit = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.unit,\n )\n const _setUnit = useMeasurementToolsState((state) => state.setUnit)\n\n const setUnit = useCallback(\n (unit: MeasurementToolsState['unit']) => _setUnit(mapId, unit),\n [_setUnit, mapId],\n )\n\n const clearLayer = useCallback(() => {\n modeInstance?.resetClickSequence()\n setPositions([])\n }, [modeInstance, setPositions])\n\n const toggleLayer = useCallback(\n (enabled: boolean) => {\n setEnabled(enabled)\n },\n [setEnabled],\n )\n\n return {\n modes,\n units,\n distance,\n clearLayerOnStart,\n modeSelected,\n enabled,\n finished,\n locale,\n modeInstance,\n positions,\n unit,\n setDistance,\n setModeSelected,\n setFinished,\n setLocale,\n setPositions,\n setUnit,\n setEnabled,\n toggleLayer,\n clearLayer,\n setModeInstance,\n }\n}\n","import { useCallback, useEffect } from 'react'\nimport type { MeasurementToolsControlProps } from './types'\nimport { useMeasurementTools } from './use-measurement-tools'\nimport { getTextLayerFormattedDistance } from './utils'\n\nexport function MeasurementToolsControl({\n mapId,\n textOptions,\n children,\n}: MeasurementToolsControlProps) {\n const {\n modes,\n units,\n distance,\n setDistance,\n clearLayerOnStart,\n modeSelected,\n setModeSelected,\n enabled,\n setEnabled,\n finished,\n setFinished,\n locale,\n setLocale,\n modeInstance,\n setModeInstance,\n positions,\n setPositions,\n unit,\n setUnit,\n clearLayer,\n toggleLayer: _toggleLayer,\n } = useMeasurementTools({ mapId })\n\n useEffect(() => {\n if (modeSelected && modes[modeSelected]) {\n const ModeClass = modes[modeSelected].mode\n setModeInstance(new ModeClass())\n }\n return () => {\n setPositions([])\n }\n }, [modes, modeSelected, setPositions, setModeInstance, setEnabled])\n\n const toggleLayer = useCallback(\n (enable: boolean) => {\n if (enable && (clearLayerOnStart || !finished)) {\n clearLayer()\n }\n _toggleLayer(enable)\n },\n [_toggleLayer, clearLayer, clearLayerOnStart, finished],\n )\n return children({\n mapId,\n distance,\n enabled,\n finished,\n locale,\n positions,\n unit,\n clearLayerOnStart: !!clearLayerOnStart,\n modeSelected: modeSelected!,\n modes,\n units,\n value: getTextLayerFormattedDistance({\n meters: distance,\n unit,\n locale,\n options: textOptions,\n }),\n modeInstance: modeInstance!,\n setModeSelected,\n setDistance,\n setFinished,\n setLocale,\n setPositions,\n setUnit,\n setEnabled,\n toggleLayer,\n clearLayer,\n })\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport { useLayerStore } from '../../providers/layers/store'\nimport { useMapStore } from '../../providers/map/provider'\nimport { DEFAULT_PROPS, MAP_MEASURE_LAYER_ID } from './const'\nimport { EditType } from './../const'\nimport { getMeasurementToolsLayer } from './layer'\nimport { MeasurementToolsControl } from './measurement-tools-control'\nimport type {\n MeasurementToolsLayerEditProps,\n MeasurementToolsProps,\n} from './types'\nimport { useMeasurementTools } from './use-measurement-tools'\nimport { useShallow } from 'zustand/shallow'\nimport type { Layer, LayerProps } from '@deck.gl/core'\nimport { useEventManager } from '../../use-event-manager'\n\nconst EXCEPTED_LAYER_IDS = [MAP_MEASURE_LAYER_ID]\n\nexport function MeasurementTools({\n children,\n mapId,\n defaultProps: { styles = DEFAULT_PROPS.styles } = {\n styles: DEFAULT_PROPS.styles,\n },\n layerProps,\n textOptions,\n}: MeasurementToolsProps & {\n children?: React.ReactNode\n}) {\n const {\n setDistance,\n enabled,\n finished,\n setFinished,\n locale,\n setPositions,\n unit,\n modeInstance,\n } = useMeasurementTools({ mapId })\n\n const setLayer = useLayerStore((state) => state.setLayer)\n const getController = useMapStore((state) => state.getController)\n const setController = useMapStore((state) => state.setController)\n const addLayers = useMapStore((state) => state.addLayers)\n const removeLayers = useMapStore((state) => state.removeLayers)\n const mapLayers = useMapStore(\n useShallow((state) =>\n state.maps[mapId]?.layers.filter((l) => !EXCEPTED_LAYER_IDS.includes(l)),\n ),\n )\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const mapLayersVisibilityRef = useRef<Record<string, boolean>>({})\n\n useEventManager({ mapId, layerId: MAP_MEASURE_LAYER_ID })\n\n useEffect(() => {\n const controller = getController(mapId)\n\n if (enabled) {\n addLayers(mapId, [MAP_MEASURE_LAYER_ID])\n\n setController(mapId, {\n doubleClickZoom: false,\n })\n }\n\n return () => {\n removeLayers(mapId, [MAP_MEASURE_LAYER_ID])\n setController(mapId, controller)\n }\n }, [addLayers, enabled, getController, mapId, removeLayers, setController])\n\n useEffect(() => {\n mapLayers?.forEach((layerId) => {\n const currentLayer = getDeckInstance(mapId)?.props.layers.find(\n (l) => (l as Layer<LayerProps>).props.id === layerId,\n ) as Layer<LayerProps>\n\n if (!currentLayer) return\n\n if (enabled) {\n mapLayersVisibilityRef.current[layerId] = currentLayer?.props.pickable\n }\n\n const pickable =\n !enabled &&\n (mapLayersVisibilityRef.current[layerId] ??\n currentLayer?.props.pickable)\n\n setLayer(layerId, {\n props: {\n pickable,\n },\n })\n })\n }, [enabled, getDeckInstance, mapId, mapLayers, setLayer])\n\n const onEdit = useCallback(\n ({ editType, editContext }: MeasurementToolsLayerEditProps) => {\n if (editType === EditType.cancel) {\n modeInstance!.resetClickSequence()\n return\n }\n\n if (editType === EditType.addPosition) {\n setDistance(editContext.distance)\n }\n\n setFinished(!!editContext.finished)\n\n const positions = editContext.positions\n\n if (positions?.length) {\n setPositions(positions)\n }\n },\n [modeInstance, setDistance, setFinished, setPositions],\n )\n\n useEffect(() => {\n const guideColor = finished ? styles.colors.finished : styles.colors.editing\n const pointColor = finished ? styles.colors.finished : styles.colors.point\n\n const layer = getMeasurementToolsLayer({\n layerProps: {\n ...layerProps,\n pickable: layerProps?.pickable ?? !finished,\n },\n enabled,\n guideColor,\n pointColor,\n locale,\n onEdit,\n unit,\n mode: modeInstance!,\n textOptions: textOptions,\n })\n\n setLayer(MAP_MEASURE_LAYER_ID, layer)\n }, [\n finished,\n modeInstance,\n layerProps,\n locale,\n onEdit,\n setLayer,\n styles.colors.editing,\n styles.colors.finished,\n styles.colors.point,\n textOptions,\n unit,\n enabled,\n ])\n\n return children\n}\n\nMeasurementTools.Controls = MeasurementToolsControl\n","import { useMemo } from 'react'\nimport { useLayerStore } from './providers/layers/store'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\n\nexport function useLayers({ mapId }: { mapId: MapComponentProps['id'] }) {\n const { layers: layersMap } = useMapStore((state) => state.maps[mapId]!)\n const layers = useLayerStore((state) => state.layers)\n\n const computedLayers = useMemo(() => {\n return layersMap\n .map((layerId) => layers[layerId])\n .filter((layer) => !!layer)\n }, [layers, layersMap])\n\n return computedLayers\n}\n","import { MAP_MEASURE_LAYER_ID } from '../editable/measurement-tools/const'\nimport {\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n} from '../editable/lasso-tools/const'\nimport type { Layer } from '../providers/layers/types'\n\nconst defaultLastLayerOrder = [\n MAP_MASK_LAYER_ID,\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MEASURE_LAYER_ID,\n]\n\nexport function sortLayers(layers: Layer[]) {\n const sortedLayers = layers\n .filter((layer) => !defaultLastLayerOrder.includes(layer.props.id!))\n .sort((a, b) => (a.order ?? Infinity) - (b.order ?? Infinity))\n\n const lastLayers = defaultLastLayerOrder\n .map((id) => layers.find((layer) => layer.props.id === id))\n .filter((l) => !!l)\n\n return [...sortedLayers, ...lastLayers]\n}\n","import { useCallback, useMemo, useRef } from 'react'\nimport type {\n Layer,\n MapViewState,\n ViewStateChangeParameters,\n} from '@deck.gl/core'\nimport { DeckGLComponent } from './deckgl'\nimport type { DeckGLComponentProps, MapComponentProps } from '../types'\nimport { useMapStore } from '../providers/map/provider'\nimport { useLayers } from '../use-layers'\nimport { sortLayers } from '../utils/sort-layers'\nimport type { DeckGLProps } from '@deck.gl/react'\n\nconst ZOOM_DEBOUNCE_MS = 200\n\nexport function MapComponent({\n id,\n onLoad,\n onViewStateChange,\n ...props\n}: MapComponentProps) {\n const basemap = useMapStore((state) => state.maps[id]!.basemap)\n const instanceRef = useMapStore((state) => state.maps[id]!.instanceRef)\n const overlayRef = useMapStore((state) => state.maps[id]!.overlayRef)\n const timerRef = useRef<NodeJS.Timeout | null>(null)\n const viewState = useMapStore((state) => state.viewStates[id])\n const controller = useMapStore((state) => state.maps[id]!.controller)\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const setViewState = useMapStore((state) => state.setViewState)\n const setLoad = useMapStore((state) => state.setLoad)\n const setLayersLoad = useMapStore((state) => state.setLayersLoad)\n const updateViewPort = useMapStore((state) => state.updateViewPort)\n\n const layers = useLayers({ mapId: id })\n const computedLayers = useMemo(() => {\n return sortLayers(layers)\n }, [layers])\n\n const handleViewStateChange = useCallback(\n (newViewState: ViewStateChangeParameters<MapViewState>) => {\n const callback = setViewState\n\n if (timerRef.current) {\n clearInterval(timerRef.current)\n }\n timerRef.current = setTimeout(() => {\n updateViewPort(id)\n }, ZOOM_DEBOUNCE_MS)\n\n if (onViewStateChange) {\n onViewStateChange(newViewState, callback)\n return\n }\n\n callback(id, newViewState.viewState)\n },\n [id, onViewStateChange, setViewState, updateViewPort],\n )\n\n const handleLoad = useCallback(\n (value: Parameters<NonNullable<DeckGLComponentProps['onLoad']>>[0]) => {\n setLoad(id, value)\n onLoad?.(value)\n updateViewPort(id)\n },\n [id, onLoad, setLoad, updateViewPort],\n )\n\n const handleAfterRender = useCallback(\n (\n context: Parameters<\n NonNullable<DeckGLComponentProps['onAfterRender']>\n >[0],\n ) => {\n const layers = getDeckInstance(id)?.props.layers\n const areLayersLoaded = !!layers?.every(\n (layer) => (layer as Layer<never>)?.isLoaded,\n )\n setLayersLoad(id, areLayersLoaded)\n props.onAfterRender?.(context)\n },\n [getDeckInstance, id, props, setLayersLoad],\n )\n\n // NOTE: destructuring here to keep the reference to the props object outside of the useCallback\n const _onDragEnd = props.onDragEnd\n const handleDragEnd = useCallback(\n (...args: Parameters<NonNullable<DeckGLProps['onDragEnd']>>) => {\n updateViewPort(id)\n if (_onDragEnd) {\n _onDragEnd(...args)\n }\n },\n [id, updateViewPort, _onDragEnd],\n )\n\n return (\n <DeckGLComponent\n {...props}\n controller={controller}\n id={id}\n layers={computedLayers}\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n basemap={basemap}\n initialViewState={viewState}\n onLoad={handleLoad}\n onViewStateChange={handleViewStateChange}\n onAfterRender={handleAfterRender}\n onDragEnd={handleDragEnd}\n />\n )\n}\n","const m = \"https://gcp-us-east1.api.carto.com\", w = \"v3\", B = \"ps\", O = {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n};\nfunction P(e, n) {\n return Array.isArray(n) ? `${e}=${encodeURIComponent(JSON.stringify(n))}` : n == null || n === \"\" ? \"\" : typeof n == \"object\" ? `${e}=${encodeURIComponent(JSON.stringify(n))}` : `${e}=${encodeURIComponent(n)}`;\n}\nfunction C({\n params: e,\n url: n\n}) {\n if (!e)\n return n;\n const t = Object.entries(e).map(\n ([a, s]) => P(a, s)\n );\n return `${n}?${t.filter(Boolean).join(\"&\")}`;\n}\nfunction L(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nvar j, I;\nfunction M() {\n if (I) return j;\n I = 1;\n var e = function(o) {\n return n(o) && !t(o);\n };\n function n(r) {\n return !!r && typeof r == \"object\";\n }\n function t(r) {\n var o = Object.prototype.toString.call(r);\n return o === \"[object RegExp]\" || o === \"[object Date]\" || l(r);\n }\n var a = typeof Symbol == \"function\" && Symbol.for, s = a ? Symbol.for(\"react.element\") : 60103;\n function l(r) {\n return r.$$typeof === s;\n }\n function u(r) {\n return Array.isArray(r) ? [] : {};\n }\n function i(r, o) {\n return o.clone !== !1 && o.isMergeableObject(r) ? E(u(r), r, o) : r;\n }\n function T(r, o, c) {\n return r.concat(o).map(function(A) {\n return i(A, c);\n });\n }\n function p(r, o) {\n if (!o.customMerge)\n return E;\n var c = o.customMerge(r);\n return typeof c == \"function\" ? c : E;\n }\n function _(r) {\n return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(r).filter(function(o) {\n return Object.propertyIsEnumerable.call(r, o);\n }) : [];\n }\n function f(r) {\n return Object.keys(r).concat(_(r));\n }\n function y(r, o) {\n try {\n return o in r;\n } catch {\n return !1;\n }\n }\n function g(r, o) {\n return y(r, o) && !(Object.hasOwnProperty.call(r, o) && Object.propertyIsEnumerable.call(r, o));\n }\n function d(r, o, c) {\n var A = {};\n return c.isMergeableObject(r) && f(r).forEach(function(b) {\n A[b] = i(r[b], c);\n }), f(o).forEach(function(b) {\n g(r, b) || (y(r, b) && c.isMergeableObject(o[b]) ? A[b] = p(b, c)(r[b], o[b], c) : A[b] = i(o[b], c));\n }), A;\n }\n function E(r, o, c) {\n c = c || {}, c.arrayMerge = c.arrayMerge || T, c.isMergeableObject = c.isMergeableObject || e, c.cloneUnlessOtherwiseSpecified = i;\n var A = Array.isArray(o), b = Array.isArray(r), V = A === b;\n return V ? A ? c.arrayMerge(r, o, c) : d(r, o, c) : i(o, c);\n }\n E.all = function(o, c) {\n if (!Array.isArray(o))\n throw new Error(\"first argument should be an array\");\n return o.reduce(function(A, b) {\n return E(A, b, c);\n }, {});\n };\n var h = E;\n return j = h, j;\n}\nvar D = M();\nconst R = /* @__PURE__ */ L(D);\nfunction S(e) {\n return R(\n {\n method: O.get,\n headers: {\n Accept: \"application/json\"\n }\n },\n e\n );\n}\nfunction $(e, n) {\n return R(\n {\n method: O.post,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(n)\n },\n e\n );\n}\nconst N = {\n GET: S,\n POST: $,\n PUT: $,\n PATCH: $,\n DELETE: S\n};\nfunction k({\n body: e,\n accessToken: n,\n method: t,\n ...a\n}) {\n let s = n;\n return s && !s.includes(\"Bearer\") && (s = \"Bearer \" + s), N[t](\n R(\n {\n method: t,\n headers: { ...!!s && { authorization: s } }\n },\n a\n ),\n e\n );\n}\nconst F = 6144;\nasync function U({\n signal: e,\n body: n,\n accessToken: t,\n credentials: a,\n method: s = O.get,\n params: l,\n url: u,\n requestOptions: { getMaxUrlLength: i } = {\n getMaxUrlLength: F\n },\n ...T\n}) {\n let p = C({ url: u, params: l }), _ = n, f = s;\n s === O.get && p.length > i && (_ = l, f = O.post, p = u);\n const y = k({\n body: _,\n accessToken: t ?? a?.accessToken,\n method: f,\n ...T\n });\n e && (y.signal = e);\n const g = await fetch(p, y);\n if (!g.ok) {\n const E = await g.text();\n throw new Error(E);\n }\n return g.status === 204 ? Promise.resolve() : await g.json();\n}\nconst x = {\n running: \"running\",\n pending: \"pending\",\n failure: \"failure\",\n cancelled: \"cancelled\",\n success: \"success\"\n};\nfunction J({\n accessToken: e,\n connection: n,\n credentials: t,\n sources: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/export`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.post,\n body: {\n sources: a\n },\n ...i\n });\n}\nasync function v({\n accessToken: e,\n connection: n,\n credentials: t,\n query: a,\n metadata: s,\n baseUrl: l = m,\n apiVersion: u = \"v3\",\n fetcherOptions: { signal: i, ...T } = {}\n}) {\n const p = e ?? t?.accessToken, _ = l ?? t?.apiBaseUrl, f = u ?? t?.apiVersion, y = `${_}/${f}/sql/${n}/job`;\n return U({\n accessToken: p,\n signal: i,\n url: y,\n method: O.post,\n body: {\n query: a.trim(),\n metadata: s\n },\n ...T\n });\n}\nasync function G({\n url: e,\n accessToken: n,\n credentials: t,\n params: a = {},\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = n ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/lds/${e}`;\n return U({\n signal: u,\n accessToken: T,\n url: f,\n method: O.get,\n params: a,\n ...i\n });\n}\nasync function Q({\n accessToken: e,\n connection: n,\n query: t,\n credentials: a,\n params: s = {},\n queryParameters: l,\n method: u = O.get,\n baseUrl: i = m,\n apiVersion: T = \"v3\",\n fetcherOptions: { signal: p, ..._ } = {}\n}) {\n const f = e ?? a?.accessToken, y = i ?? a?.apiBaseUrl, g = T ?? a?.apiVersion, d = `${y}/${g}/sql/${n}/query`, E = q(t), h = u !== O.get ? \"body\" : \"params\";\n return U({\n signal: p,\n accessToken: f,\n url: d,\n method: u,\n [h]: {\n q: E,\n ...s,\n queryParameters: l\n },\n ..._\n });\n}\nfunction q(e) {\n return e && e.replace(\n /'([^'\\\\]*(\\\\.[^'\\\\]*)*)'|\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"/g,\n (n) => n\n ).replace(/\\/\\*[\\s\\S]*?\\*\\//g, \" \").replace(/--.*$/gm, \"\").replace(/\\s+/g, \" \").trim();\n}\nasync function H({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/export/${a}`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.get,\n ...i\n });\n}\nasync function z({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/job/${a}`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.get,\n ...i\n });\n}\nasync function K({\n accessToken: e,\n connection: n,\n credentials: t,\n metadataFilter: a = void 0,\n createdSince: s = void 0,\n userId: l = void 0,\n baseUrl: u = m,\n apiVersion: i = \"v3\",\n fetcherOptions: { signal: T, ...p } = {}\n}) {\n const _ = e ?? t?.accessToken, f = u ?? t?.apiBaseUrl, y = i ?? t?.apiVersion, g = `${f}/${y}/sql/${n}/jobs`;\n return U({\n accessToken: _,\n signal: T,\n url: g,\n method: O.get,\n params: {\n user_id: l,\n created_since: s,\n metadata_filter: a\n },\n ...p\n });\n}\nfunction X({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n metadata: s,\n baseUrl: l = m,\n apiVersion: u = \"v3\",\n fetcherOptions: { signal: i, ...T } = {}\n}) {\n const p = e ?? t?.accessToken, _ = l ?? t?.apiBaseUrl, f = u ?? t?.apiVersion, y = `${_}/${f}/sql/${n}/job/${a}`;\n return U({\n accessToken: p,\n signal: i,\n url: y,\n method: O.patch,\n body: {\n metadata: s\n },\n ...T\n });\n}\nexport {\n m as DEFAULT_CARTO_API_URL,\n w as DEFAULT_CARTO_API_VERSION,\n B as DEFAULT_CLIENT_ID,\n O as RequestMethods,\n J as createExport,\n v as createJob,\n U as executeFetch,\n G as executeLDS,\n Q as executeSQL,\n H as getExport,\n z as getJob,\n x as jobStatus,\n K as listJobs,\n X as updateJob\n};\n//# sourceMappingURL=index.js.map\n","export const Method = {\n INIT: 'init',\n LOAD_GEOJSON: 'loadGeoJSON',\n GET_FORMULA: 'getFormula',\n GET_HISTOGRAM: 'getHistogram',\n GET_CATEGORIES: 'getCategories',\n GET_SCATTER: 'getScatter',\n GET_TABLE: 'getTable',\n GET_TIME_SERIES: 'getTimeSeries',\n GET_RANGE: 'getRange',\n GET_AGGREGATIONS: 'getAggregations',\n GET_EXTENT: 'getExtent',\n} as const\n","import type { FeatureData } from './types'\n\nexport function geojsonFeatures({\n geojson,\n uniqueIdProperty,\n}: {\n geojson: FeatureData[]\n uniqueIdProperty?: string\n}): FeatureData[] {\n return geojson.map((f) => {\n const properties = f.properties ?? {}\n const updatedProperties =\n uniqueIdProperty && properties[uniqueIdProperty] != null\n ? properties\n : {\n ...properties,\n id: uniqueIdProperty ? String(properties[uniqueIdProperty]) : '',\n }\n\n return {\n ...f,\n properties: updatedProperties,\n }\n })\n}\n","import {\n aggregationFunctions,\n AggregationTypes,\n applyFilters,\n applySorting,\n getApplicableFilters,\n groupValuesByColumn,\n groupValuesByDateColumn,\n histogram,\n OTHERS_CATEGORY_NAME,\n scatterPlot,\n WidgetSource,\n type AggregationsRequestOptions,\n type AggregationsResponse,\n type CategoryRequestOptions,\n type CategoryResponse,\n type ExtentResponse,\n type FeaturesResponse,\n type Filter,\n type FormulaRequestOptions,\n type FormulaResponse,\n type HistogramRequestOptions,\n type HistogramResponse,\n type RangeRequestOptions,\n type RangeResponse,\n type ScatterRequestOptions,\n type ScatterResponse,\n type SpatialFilter,\n type TableRequestOptions,\n type TableResponse,\n type TimeSeriesRequestOptions,\n type TimeSeriesResponse,\n} from '@carto/api-client'\nimport { geojsonFeatures } from './geojson-features'\nimport type { WidgetGeoJsonSourceProps } from './widget-geojson-source'\nimport type { FeatureData } from './types'\nimport { bbox, booleanIntersects, feature, featureCollection } from '@turf/turf'\n\n// TODO(cleanup): Parameter defaults in source functions and widget API calls are\n// currently duplicated and possibly inconsistent. Consider consolidating and\n// operating on Required<T> objects. See:\n// https://github.com/CartoDB/carto-api-client/issues/39\n\n/**\n * Local (in-memory) implementation of geojson widget calculations. This class\n * may be instantiated by {@link WidgetGeoJsonSource} in a Web Worker when\n * supported, or on the main thread.\n */\nexport class WidgetGeoJsonSourceImpl extends WidgetSource<WidgetGeoJsonSourceProps> {\n private features: FeatureData[] = []\n\n protected _filterFeaturesBySpatial(spatialFilter?: SpatialFilter) {\n if (!spatialFilter) {\n return this.features\n }\n\n return this.features.filter((f) => {\n return booleanIntersects(f, feature(spatialFilter))\n })\n }\n\n /**\n * Loads features as GeoJSON.\n */\n loadGeoJSON({ geojson }: { geojson: FeatureData[] }) {\n this.features = geojsonFeatures({\n geojson,\n })\n }\n\n override getFeatures(): Promise<FeaturesResponse> {\n return Promise.reject(new Error('getFeatures not supported for geojson'))\n }\n\n getFormula({\n column = '*',\n operation = AggregationTypes.Count,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: FormulaRequestOptions): Promise<FormulaResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (filteredFeatures.length === 0) {\n return Promise.resolve({ value: null })\n }\n\n if (operation === AggregationTypes.Custom) {\n throw new Error('Custom aggregation not supported for geojson')\n }\n\n // Column is required except when operation is 'count'.\n if ((column && column !== '*') || operation !== AggregationTypes.Count) {\n assertColumn(filteredFeatures, column)\n }\n\n const targetOperation = aggregationFunctions[operation]\n assert(targetOperation, `Unsupported aggregation operation: ${operation}`)\n\n return Promise.resolve({\n value: targetOperation(\n filteredFeatures.map((f) => f?.properties as unknown),\n column,\n joinOperation,\n ),\n })\n }\n\n override getHistogram({\n operation = AggregationTypes.Count,\n ticks,\n column,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: HistogramRequestOptions): Promise<HistogramResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, column)\n\n return Promise.resolve(\n histogram({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(column),\n joinOperation,\n ticks,\n operation,\n }),\n )\n }\n\n override getCategories({\n column,\n operation = AggregationTypes.Count,\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n othersThreshold,\n orderBy = 'frequency_desc',\n rawResult,\n }: CategoryRequestOptions): Promise<CategoryResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, column, operationColumn!)\n\n const result = groupValuesByColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn ?? column),\n joinOperation,\n keysColumn: column,\n operation,\n othersThreshold,\n orderBy,\n })\n\n if (rawResult) {\n return Promise.resolve(result as unknown as CategoryResponse)\n }\n\n if (!othersThreshold) {\n return Promise.resolve(result?.rows ?? [])\n }\n\n return Promise.resolve([\n ...(result?.rows ?? []),\n { name: OTHERS_CATEGORY_NAME, value: result?.metadata?.others ?? 0 },\n ])\n }\n\n override getScatter({\n xAxisColumn,\n yAxisColumn,\n xAxisJoinOperation,\n yAxisJoinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: ScatterRequestOptions): Promise<ScatterResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, xAxisColumn, yAxisColumn)\n\n return Promise.resolve(\n scatterPlot({\n data: filteredFeatures,\n xAxisColumns: normalizeColumns(xAxisColumn),\n xAxisJoinOperation,\n yAxisColumns: normalizeColumns(yAxisColumn),\n yAxisJoinOperation,\n }),\n )\n }\n\n override getTable({\n columns,\n searchFilterColumn,\n searchFilterText,\n sortBy,\n sortDirection,\n sortByColumnType,\n offset = 0,\n limit = 10,\n filters,\n filterOwner,\n spatialFilter,\n }: TableRequestOptions): Promise<TableResponse> {\n // Filter.\n let filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [], totalCount: 0 })\n }\n\n // Search.\n // TODO(v0.6): Remove \"searchFilterText\" and \"searchFilterColumn\".\n if (searchFilterColumn && searchFilterText) {\n // eslint-disable-next-line no-console\n console.warn(\n 'WidgetGeoJsonSource: \"searchFilterText\" is deprecated, use \"filters\" and FilterType.STRING_SEARCH instead.',\n )\n filteredFeatures = filteredFeatures.filter(\n (row) =>\n row[searchFilterColumn] &&\n String(row[searchFilterColumn] as unknown)\n .toLowerCase()\n .includes(String(searchFilterText).toLowerCase()),\n )\n }\n\n // Sort.\n let rows = applySorting(filteredFeatures, {\n sortBy,\n sortByDirection: sortDirection,\n sortByColumnType,\n })\n const totalCount = rows.length\n\n // Offset and limit.\n rows = rows.slice(\n Math.min(offset, totalCount),\n Math.min(offset + limit, totalCount),\n )\n\n // Select columns.\n rows = rows.map((srcRow: FeatureData['properties']) => {\n const dstRow: FeatureData['properties'] = {}\n if (srcRow) {\n for (const column of columns) {\n dstRow[column] = srcRow[column] as unknown\n }\n }\n return dstRow\n })\n\n return Promise.resolve({ rows, totalCount } as TableResponse)\n }\n\n override getTimeSeries({\n column,\n stepSize,\n operation,\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: TimeSeriesRequestOptions): Promise<TimeSeriesResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [] })\n }\n\n assertColumn(filteredFeatures, column, operationColumn!)\n assert(operation !== 'custom', 'Custom operation not supported for geojson')\n\n const rows =\n groupValuesByDateColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn ?? column),\n keysColumn: column,\n groupType: stepSize,\n operation,\n joinOperation,\n }) ?? []\n\n return Promise.resolve({ rows })\n }\n\n override getRange({\n column,\n filters,\n filterOwner,\n spatialFilter,\n }: RangeRequestOptions): Promise<RangeResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n // TODO: Is this the only nullable response in the Widgets API? If so,\n // can we do something more consistent?\n return Promise.resolve(null)\n }\n\n assertColumn(filteredFeatures, column)\n\n return Promise.resolve({\n min: aggregationFunctions.min(filteredFeatures, column),\n max: aggregationFunctions.max(filteredFeatures, column),\n })\n }\n\n getAggregations({\n aggregations,\n filters,\n filterOwner,\n spatialFilter,\n }: AggregationsRequestOptions): Promise<AggregationsResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [] })\n }\n\n // SQL aggregations require remote execution, and are not supported for geojson.\n assert(\n typeof aggregations !== 'string',\n 'Unsupported geojson SQL aggregation',\n )\n\n // Handle array-based aggregations\n const result: Record<string, number> = {}\n const usedAliases = new Set<string>()\n\n for (const { column, operation, alias } of aggregations) {\n // Column is required except when operation is 'count'.\n if ((column && column !== '*') || operation !== AggregationTypes.Count) {\n assertColumn(filteredFeatures, column)\n }\n\n const aliasKey = alias.toLowerCase()\n assert(!usedAliases.has(aliasKey), `Duplicate alias: ${aliasKey}`)\n usedAliases.add(aliasKey)\n\n const targetOperation = aggregationFunctions[operation]\n assert(targetOperation, `Unsupported operation: ${operation}`)\n\n result[alias] = targetOperation(filteredFeatures, column)\n }\n\n return Promise.resolve({ rows: [result] })\n }\n\n /** @experimental */\n getExtent(): Promise<ExtentResponse> {\n const _bbox = bbox(featureCollection(this.features))\n return Promise.resolve({ bbox: _bbox })\n }\n\n /****************************************************************************\n * INTERNAL\n */\n\n private _getFilteredFeatures(\n spatialFilter?: SpatialFilter,\n filters?: Record<string, Filter>,\n filterOwner?: string,\n ): NonNullable<FeatureData['properties']>[] {\n const _features = this._filterFeaturesBySpatial(spatialFilter)\n return applyFilters(\n _features.map((f) => f.properties ?? {}),\n getApplicableFilters(filterOwner, filters ?? this.props.filters),\n this.props.filtersLogicalOperator ?? 'and',\n )\n }\n}\n\nfunction assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(message)\n }\n}\n\nfunction assertColumn(\n features: FeatureData['properties'][],\n ...columnArgs: string[] | string[][]\n) {\n // Due to the multiple column shape, we normalise it as an array with normalizeColumns\n const columns = Array.from(new Set(columnArgs.map(normalizeColumns).flat()))\n\n const featureKeys = Object.keys(features[0] ?? {})\n\n // For backward compatibility, '' should pass column validation. For example,\n // operation='count',operationColumn='' is accepted.\n const invalidColumns = columns.filter(\n (column) => column && !featureKeys.includes(column),\n )\n\n if (invalidColumns.length) {\n throw new Error(`Missing column(s): ${invalidColumns.join(', ')}`)\n }\n}\n\nfunction normalizeColumns(columns: string | string[]): string[] {\n return Array.isArray(columns)\n ? columns\n : typeof columns === 'string'\n ? [columns]\n : []\n}\n","import {\n WidgetSource,\n type AggregationsRequestOptions,\n type AggregationsResponse,\n type CategoryRequestOptions,\n type CategoryResponse,\n type ExtentResponse,\n type FeaturesResponse,\n type FormulaRequestOptions,\n type FormulaResponse,\n type HistogramRequestOptions,\n type HistogramResponse,\n type RangeRequestOptions,\n type RangeResponse,\n type ScatterRequestOptions,\n type ScatterResponse,\n type SpatialFilter,\n type TableRequestOptions,\n type TableResponse,\n type TilesetSourceOptions,\n type TimeSeriesRequestOptions,\n type TimeSeriesResponse,\n type WidgetSourceProps,\n} from '@carto/api-client'\nimport type { Feature } from 'geojson'\nimport { Method } from './const'\nimport { WidgetGeoJsonSourceImpl } from './widget-geojson-source-impl'\nimport type { FeatureData, WorkerRequest, WorkerResponse } from './types'\nimport Worker from './widget-geojson-worker?worker&inline'\n\nexport type WidgetGeoJsonSourceProps = WidgetSourceProps &\n Omit<TilesetSourceOptions, 'filters' | 'tableName'> & {\n data: Feature[] | string\n }\n\nexport interface WidgetGeoJsonSourceResult {\n widgetSource: WidgetGeoJsonSource\n}\n\n/**\n * Source for Widget API requests on a data source defined by a geojson.\n */\nexport class WidgetGeoJsonSource<\n Props extends WidgetGeoJsonSourceProps = WidgetGeoJsonSourceProps,\n> extends WidgetSource<Props> {\n protected _localImpl: WidgetGeoJsonSourceImpl | null = null\n\n protected _workerImpl: Worker | null = null\n protected _workerEnabled: boolean\n protected _workerNextRequestId = 1\n\n constructor(props: Props) {\n super(props)\n\n this._workerEnabled =\n (props.widgetWorker ?? true) && typeof Worker !== 'undefined'\n\n if (!this._workerEnabled) {\n this._localImpl = new WidgetGeoJsonSourceImpl(this.props)\n }\n }\n\n override destroy() {\n this._localImpl?.destroy()\n this._localImpl = null\n\n this._workerImpl?.terminate()\n this._workerImpl = null\n\n super.destroy()\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // WEB WORKER MANAGEMENT\n\n /**\n * Returns an initialized Worker, to be reused for the lifecycle of this\n * source instance.\n */\n protected _getWorker(): Worker {\n if (this._workerImpl) {\n return this._workerImpl\n }\n\n this._workerImpl = new Worker({\n name: 'cartowidgetgeojson',\n })\n\n this._workerImpl.addEventListener('error', (e) => {\n // eslint-disable-next-line no-console\n console.error('widget-geojson-source worker error', e)\n })\n\n this._workerImpl.postMessage({\n method: Method.INIT,\n params: [this.props],\n } as WorkerRequest)\n\n return this._workerImpl\n }\n\n /** Executes a given method on the worker. */\n protected _executeWorkerMethod<T>(\n method: (typeof Method)[keyof typeof Method],\n params: unknown[],\n signal?: AbortSignal,\n ): Promise<T> {\n if (!this._workerEnabled) {\n if (!this._localImpl) {\n return Promise.reject(new Error('Local implementation not initialized'))\n }\n // @ts-expect-error - Dynamic method call with runtime type checking\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return this._localImpl[method](...params) as Promise<T>\n }\n\n const worker = this._getWorker()\n const requestId = this._workerNextRequestId++\n\n let resolve: ((value: T) => void) | null = null\n let reject: ((reason: unknown) => void) | null = null\n\n // If worker sends message to main process, check whether it's a response\n // to this request, and whether the request can been aborted. Then resolve\n // or reject the Promise.\n function onMessage(e: MessageEvent) {\n const response = e.data as WorkerResponse\n if (response.requestId !== requestId) return\n if (signal?.aborted) return // handled by 'abort' listener\n\n if (response.ok) {\n resolve!(response.result as T)\n } else {\n reject!(new Error(response.error))\n }\n }\n\n // If request is aborted by user, immediately reject the Promise.\n function onAbort() {\n reject!(new Error(String(signal!.reason)))\n }\n\n worker.addEventListener('message', onMessage)\n signal?.addEventListener('abort', onAbort)\n\n // Send the task to the worker, creating a Promise to resolve/reject later.\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n\n worker.postMessage({\n requestId,\n method,\n params,\n } as WorkerRequest)\n })\n\n // Whether the task completes, fails, or aborts: clean up afterward.\n void promise.finally(() => {\n worker.removeEventListener('message', onMessage)\n signal?.removeEventListener('abort', onAbort)\n })\n\n return promise\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // DATA LOADING\n\n /**\n * Loads features as GeoJSON\n */\n loadGeoJSON({ geojson }: { geojson: FeatureData[] }) {\n if (!this._workerEnabled) {\n return this._localImpl!.loadGeoJSON({ geojson })\n }\n\n const worker = this._getWorker()\n\n worker.postMessage({\n method: Method.LOAD_GEOJSON,\n params: [{ geojson }],\n } as WorkerRequest)\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // WIDGETS API\n\n // eslint-disable-next-line @typescript-eslint/require-await\n override async getFeatures(): Promise<FeaturesResponse> {\n throw new Error('getFeatures not supported for geojson')\n }\n\n async getFormula({\n signal,\n ...options\n }: FormulaRequestOptions): Promise<FormulaResponse> {\n return this._executeWorkerMethod(Method.GET_FORMULA, [options], signal)\n }\n\n override async getHistogram({\n signal,\n ...options\n }: HistogramRequestOptions): Promise<HistogramResponse> {\n return this._executeWorkerMethod(Method.GET_HISTOGRAM, [options], signal)\n }\n\n override async getCategories({\n signal,\n ...options\n }: CategoryRequestOptions): Promise<CategoryResponse> {\n return this._executeWorkerMethod(Method.GET_CATEGORIES, [options], signal)\n }\n\n override async getScatter({\n signal,\n ...options\n }: ScatterRequestOptions): Promise<ScatterResponse> {\n return this._executeWorkerMethod(Method.GET_SCATTER, [options], signal)\n }\n\n override async getTable({\n signal,\n ...options\n }: TableRequestOptions): Promise<TableResponse> {\n return this._executeWorkerMethod(Method.GET_TABLE, [options], signal)\n }\n\n override async getTimeSeries({\n signal,\n ...options\n }: TimeSeriesRequestOptions): Promise<TimeSeriesResponse> {\n return this._executeWorkerMethod(Method.GET_TIME_SERIES, [options], signal)\n }\n\n override async getRange({\n signal,\n ...options\n }: RangeRequestOptions): Promise<RangeResponse> {\n return this._executeWorkerMethod(Method.GET_RANGE, [options], signal)\n }\n\n async getAggregations({\n signal,\n ...options\n }: AggregationsRequestOptions): Promise<AggregationsResponse> {\n return this._executeWorkerMethod(Method.GET_AGGREGATIONS, [options], signal)\n }\n\n /** @experimental */\n async getExtent({\n signal,\n ...options\n }: {\n signal?: AbortSignal\n spatialFilter?: SpatialFilter\n }): Promise<ExtentResponse> {\n return this._executeWorkerMethod<ExtentResponse>(\n Method.GET_EXTENT,\n [options],\n signal,\n )\n }\n}\n","import { create } from 'zustand'\nimport type {\n QuerySource,\n RasterSource,\n TableSource,\n TilesetSource,\n Source,\n SourceStore,\n AllExternalSources,\n GeoJSONSource,\n AllSources,\n} from './types'\nimport {\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n DEFAULT_CLIENT_ID,\n} from '@carto/ps-services'\nimport {\n TileFormat,\n WidgetQuerySource,\n WidgetTableSource,\n WidgetTilesetSource,\n WidgetRasterSource,\n addFilter,\n removeFilter,\n type Filters,\n FilterType,\n type SpatialDataType,\n} from '@carto/api-client'\nimport { useMemo } from 'react'\nimport { devtools } from 'zustand/middleware'\nimport { WidgetGeoJsonSource } from './widgets/widget-geojson-source'\nimport { useShallow } from 'zustand/shallow'\n\nexport const useSourceStore = create<SourceStore>()(\n devtools((set, get) => ({\n sources: {},\n filters: {},\n setSource: (id, source) =>\n set(\n (state) => {\n const sources = { ...state.sources }\n\n const widgetClient = sources[id]?.widgets\n if (widgetClient) {\n widgetClient.destroy()\n delete sources[id]!.widgets\n }\n\n const previousSource = sources[id]\n const newSource = {\n apiBaseUrl: DEFAULT_CARTO_API_URL,\n clientId: DEFAULT_CLIENT_ID,\n apiVersion: DEFAULT_CARTO_API_VERSION,\n ...previousSource,\n ...source,\n id,\n } as Source\n\n newSource.widgets = getWidgetSource({\n source: newSource,\n })\n\n sources[id] = newSource\n\n return { sources }\n },\n undefined,\n 'setSource',\n ),\n removeSource: (id) =>\n set(\n (state) => {\n const sources = { ...state.sources }\n\n const widgetClient = sources[id]?.widgets\n if (widgetClient) {\n widgetClient.destroy()\n delete sources[id]!.widgets\n }\n\n delete sources[id]\n return { sources }\n },\n undefined,\n 'removeSource',\n ),\n setFilters: (id, newFilters) =>\n set(\n (state) => {\n const currentFilters = state.filters[id] ?? {}\n\n const filters = newFilters.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, currentFilters)\n\n return {\n filters: {\n ...state.filters,\n [id]: { ...filters }, // important: destructuring here to not conservere the reference to the same object\n },\n }\n },\n undefined,\n 'setFilters',\n ),\n removeFilters: (id, column, owner) =>\n set(\n (state) => {\n const currentFilters = state.filters[id] ?? {}\n if (!currentFilters) {\n return state\n }\n\n let filters = {}\n if (column) {\n filters = removeFilter(currentFilters, { column, owner })\n }\n\n return {\n filters: {\n ...state.filters,\n [id]: { ...filters }, // important: destructuring here to not conservere the reference to the same object\n },\n }\n },\n undefined,\n 'removeFilters',\n ),\n invalidateSourcesCache: (ids, { timeout = 500, maxAge = 10 } = {}) => {\n // Only invalidate cache for external sources (query, table, tileset, raster)\n // GeoJSON sources are local and don't require cache invalidation\n const externalSourceIds = ids.filter((id) => {\n const source = get().sources[id]\n return source && source.type !== 'geojson'\n })\n\n if (externalSourceIds.length === 0) {\n return\n }\n\n ids.forEach((id) => {\n get().setSource(id, {\n headers: {\n 'Cache-Control': `no-cache, max-age=${maxAge}`,\n },\n } as Partial<Source<AllExternalSources>>)\n })\n\n setTimeout(() => {\n ids.forEach((id) => {\n const source = get().sources[id] as Source<AllExternalSources>\n if (source) {\n delete source.headers\n get().setSource(id, source)\n }\n })\n }, timeout)\n },\n })),\n)\n\n/**\n * Shortcut to grabbing the source from the sources store object\n * @param id - the id of the source you want to grab\n * @returns source object without filters\n */\nexport function useSource<T extends AllSources = AllExternalSources>(\n id: string,\n) {\n return useSourceStore((state) => state.sources[id] as Source<T>)\n}\n\n/**\n * Shortcut to grabbing the source from the sources store object\n * @param ids - the ids of the sources you want to grab\n * @returns source object without filters\n */\nexport function useSources<T extends AllSources = AllExternalSources>(\n ids: string[],\n) {\n return useSourceStore(\n useShallow((state) =>\n ids\n .map((id) => state.sources[id] as Source<T>)\n .filter((source) => !!source),\n ),\n )\n}\n\n/**\n * Shortcut to grabbing the filters from the filters store object\n * @param ids - the ids of the sources the filters are applied to\n * @returns filters object as used in the `@carto/api-client` methods calls\n */\nexport function useFilters(ids: string): Filters | undefined\nexport function useFilters(ids: string[]): (Filters | undefined)[]\nexport function useFilters(\n ids: string | string[],\n): Filters | undefined | (Filters | undefined)[] {\n return useSourceStore(\n useShallow((state) => {\n if (Array.isArray(ids)) {\n return ids.map((id) => state.filters[id])\n }\n return state.filters[ids]\n }),\n )\n}\n\n/**\n * Returns a source together with its filters, pulling from the separate `sources` and `filters` state objects\n * @param id - the id of the source\n * @returns source object as used in `@carto/api-client`\n */\nexport function useSourceWithFilters<T extends AllSources = AllExternalSources>(\n id: string,\n) {\n const source = useSource<T>(id)\n const filters = useFilters(id)\n\n return useMemo(() => {\n if (!source) {\n return undefined\n }\n return {\n ...source,\n filters: filters ?? {},\n }\n }, [source, filters])\n}\n\nexport function getFilterValues(\n filters: Filters | undefined,\n { column, type }: { column: string; type: FilterType },\n) {\n return filters?.[column]?.[type]?.values ?? []\n}\n\nfunction getSpatialDataFallback(source: Source<AllExternalSources>) {\n const [, fallback] = source.type.split('+', 2)\n return {\n spatialDataType: (source.spatialDataType ??\n fallback ??\n 'geo') as SpatialDataType,\n spatialDataColumn: source.spatialDataColumn ?? fallback ?? 'geom',\n }\n}\n\nfunction getWidgetSource({ source }: { source: Source }) {\n const { spatialDataType, spatialDataColumn } = getSpatialDataFallback(\n source as Source<AllExternalSources>,\n )\n\n const options = {\n query: () => {\n const newSource = source as Source & QuerySource\n return new WidgetQuerySource({\n ...newSource,\n accessToken: '',\n sqlQuery: newSource.data as string,\n spatialDataType,\n spatialDataColumn,\n })\n },\n table: () => {\n const newSource = source as Source & TableSource\n return new WidgetTableSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n spatialDataType,\n spatialDataColumn,\n })\n },\n tileset: () => {\n const newSource = source as Source & TilesetSource\n\n if (!newSource.spatialDataBounds) {\n return null\n }\n\n return new WidgetTilesetSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n tileFormat: newSource.tileFormat ?? TileFormat.BINARY,\n spatialDataType,\n spatialDataColumn,\n spatialDataBounds: newSource.spatialDataBounds,\n })\n },\n raster: () => {\n const newSource = source as Source & RasterSource\n\n if (!newSource.rasterMetadata || !newSource.spatialDataBounds) {\n return null\n }\n\n return new WidgetRasterSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n spatialDataType: 'quadbin',\n spatialDataColumn: 'quadbin',\n rasterMetadata: newSource.rasterMetadata,\n spatialDataBounds: newSource.spatialDataBounds,\n })\n },\n geojson: () => {\n // TODO: Temporary implementation until we have a WidgetGeoJSONSource in the API\n const newSource = source as Source & GeoJSONSource\n\n return new WidgetGeoJsonSource({\n ...newSource,\n connectionName: '',\n accessToken: '',\n data: newSource.data,\n })\n },\n }\n\n const key = source.type.split('+')[0] as keyof typeof options\n const option = options[key]\n\n return option?.() as Source['widgets']\n}\n","import { useFilters } from '../../providers/sources/store'\nimport { useMemo } from 'react'\nimport deepmerge from 'deepmerge'\nimport {\n addFilter,\n type Filter,\n type AddFilterOptions,\n} from '@carto/api-client'\n\ninterface SingleSourceFilterArgs {\n sourceId: string\n sourcesId?: never\n additionalFilter?: AddFilterOptions[]\n}\n\ninterface MultiSourceFilterArgs {\n sourceId?: never\n sourcesId: string[]\n additionalFilter?: AddFilterOptions[] | AddFilterOptions[][]\n}\n\n// Overload for single source (returns single Filter or undefined)\nexport function useFiltersMerged(\n sourceId: string,\n additionalFilter?: AddFilterOptions[],\n): Filter | undefined\n\n// Overload for multi-source (returns array of Filters or undefined)\nexport function useFiltersMerged(\n sourcesId: string[],\n additionalFilter?: AddFilterOptions[] | AddFilterOptions[][],\n): Filter[] | undefined\n\n// Overload for args object pattern (single source)\nexport function useFiltersMerged(\n args: SingleSourceFilterArgs,\n): Filter | undefined\n\n// Overload for args object pattern (multi-source)\nexport function useFiltersMerged(\n args: MultiSourceFilterArgs,\n): Filter[] | undefined\n\nexport function useFiltersMerged(\n sourcesIdOrArgsOrSourceId:\n | string\n | string[]\n | SingleSourceFilterArgs\n | MultiSourceFilterArgs,\n additionalFilterOrUndefined?: AddFilterOptions[] | AddFilterOptions[][],\n): Filter | Filter[] | undefined {\n // Handle both calling patterns: function args and object args\n const { sourceId, sourcesId, additionalFilter } = useMemo(() => {\n if (typeof sourcesIdOrArgsOrSourceId === 'string') {\n // Single source ID string\n return {\n sourceId: sourcesIdOrArgsOrSourceId,\n sourcesId: undefined,\n additionalFilter: additionalFilterOrUndefined as\n | AddFilterOptions[]\n | undefined,\n }\n } else if (Array.isArray(sourcesIdOrArgsOrSourceId)) {\n // Array of source IDs\n return {\n sourceId: undefined,\n sourcesId: sourcesIdOrArgsOrSourceId,\n additionalFilter: additionalFilterOrUndefined,\n }\n } else {\n // Object signature: { sourceId/sourcesId, additionalFilter }\n return sourcesIdOrArgsOrSourceId\n }\n }, [sourcesIdOrArgsOrSourceId, additionalFilterOrUndefined])\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = useMemo(() => {\n const array = isSingleSource ? [sourceId] : sourcesId\n if (!array) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n return array\n }, [isSingleSource, sourceId, sourcesId])\n\n const _filters = useFilters(sourcesArray)\n const filters = useMemo(\n () => (Array.isArray(_filters) ? _filters : [_filters]),\n [_filters],\n )\n\n const _additionalFilter = useMemo(() => {\n if (!additionalFilter?.length) return []\n\n // Handle single source: additionalFilter is AddFilterOptions[]\n if (isSingleSource) {\n return [additionalFilter]\n }\n\n // Handle multi-source: additionalFilter can be AddFilterOptions[] or AddFilterOptions[][]\n return (\n Array.isArray(additionalFilter[0]) ? additionalFilter : [additionalFilter]\n ) as AddFilterOptions[][]\n }, [additionalFilter, isSingleSource])\n\n const mergedFilters = useMemo(() => {\n return sourcesArray.map((_: string, index: number) => {\n const filterSet = _additionalFilter[index]\n if (!filterSet?.length) return filters[index] as Filter\n\n if (!filters[index]) {\n return filterSet.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, {})\n }\n\n // Merge filters only when both exist\n const computedFilters = filterSet.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, {})\n\n return deepmerge(filters[index], computedFilters)\n })\n }, [sourcesArray, _additionalFilter, filters])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return mergedFilters[0]\n }\n\n return mergedFilters\n}\n","import { useMemo } from 'react'\nimport { useSources } from '../../providers/sources/store'\n\n// Type for the widget model returned by sources\ntype SourceWidget = ReturnType<typeof useSources>[0]['widgets']\ntype WidgetModelResult = SourceWidget | null\n\ninterface SingleSourceWidgetArgs {\n accessToken: string\n sourceId: string\n sourcesId?: never\n}\n\ninterface MultiSourceWidgetArgs {\n accessToken: string\n sourceId?: never\n sourcesId: string[]\n}\n\n// Overloads for single source (returns single widget model or null)\nexport function useWidgetModel(\n accessToken: string,\n sourceId: string,\n): WidgetModelResult\n\n// Overload for multi-source (returns array of widget models)\nexport function useWidgetModel(\n accessToken: string,\n sourcesId: string[],\n): WidgetModelResult[]\n\n// Overload for args object pattern (single source)\nexport function useWidgetModel(args: SingleSourceWidgetArgs): WidgetModelResult\n\n// Overload for args object pattern (multi-source)\nexport function useWidgetModel(args: MultiSourceWidgetArgs): WidgetModelResult[]\n\nexport function useWidgetModel(\n accessTokenOrArgs: string | SingleSourceWidgetArgs | MultiSourceWidgetArgs,\n sourcesIdOrUndefined?: string | string[],\n): WidgetModelResult | WidgetModelResult[] {\n // Handle both calling patterns: function args and object args\n const { accessToken, sourceId, sourcesId } = useMemo(() => {\n if (typeof accessTokenOrArgs === 'string') {\n // Legacy function signature: useWidgetModel(accessToken, sourcesId)\n return {\n accessToken: accessTokenOrArgs,\n sourceId:\n typeof sourcesIdOrUndefined === 'string'\n ? sourcesIdOrUndefined\n : undefined,\n sourcesId: Array.isArray(sourcesIdOrUndefined)\n ? sourcesIdOrUndefined\n : undefined,\n }\n } else {\n // New object signature: useWidgetModel({ accessToken, sourceId/sourcesId })\n return accessTokenOrArgs\n }\n }, [accessTokenOrArgs, sourcesIdOrUndefined])\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = useMemo(() => {\n const array = isSingleSource ? [sourceId] : sourcesId\n if (!array) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n return array\n }, [isSingleSource, sourceId, sourcesId])\n\n const sources = useSources(sourcesArray)\n\n const widgetModels = useMemo(() => {\n return sources.map((source) => {\n const widgetModel = source.widgets\n if (!widgetModel || !accessToken) {\n return null\n }\n\n // Set the access token directly on the widget model\n widgetModel.props.accessToken = accessToken\n return widgetModel\n })\n }, [accessToken, sources])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return widgetModels[0]\n }\n\n return widgetModels\n}\n","const RELEVANT_HEADERS = ['authorization', 'cache-control'] as const\n\nexport function getRelevantHeaders(\n headers: Record<string, string> | undefined,\n): string {\n if (!headers || typeof headers !== 'object') {\n return ''\n }\n\n const relevantEntries: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(headers)) {\n const lowerKey = key.toLowerCase()\n if (\n RELEVANT_HEADERS.includes(lowerKey as (typeof RELEVANT_HEADERS)[number])\n ) {\n relevantEntries[lowerKey] = value\n }\n }\n\n return Object.keys(relevantEntries).length > 0\n ? JSON.stringify(relevantEntries)\n : ''\n}\n","import { useMemo } from 'react'\nimport type { ModelProps } from '../types'\nimport { getRelevantHeaders } from './get-relevant-headers'\nimport { useSources } from '../../providers/sources/store'\n\ntype QueryKeyArgs<TRequestOptions, TResponse> = Pick<\n ModelProps<TRequestOptions, TResponse>,\n never\n> & { queryKeyPrefix: string[] }\n\ntype SingleSourceQueryArgs<TRequestOptions, TResponse> = QueryKeyArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId: string | undefined\n sourcesId?: never\n}\n\ntype MultiSourceQueryArgs<TRequestOptions, TResponse> = QueryKeyArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId?: never\n sourcesId: string[]\n}\n\n// Overloads: when `sourceId` is provided return a single query key,\n// when `sourcesId` is provided return an array of query keys\nexport function useQueryKey<TRequestOptions, TResponse>(\n args: SingleSourceQueryArgs<TRequestOptions, TResponse>,\n): readonly unknown[]\n\nexport function useQueryKey<TRequestOptions, TResponse>(\n args: MultiSourceQueryArgs<TRequestOptions, TResponse>,\n): unknown[][]\n\nexport function useQueryKey<TRequestOptions, TResponse>(\n args:\n | SingleSourceQueryArgs<TRequestOptions, TResponse>\n | MultiSourceQueryArgs<TRequestOptions, TResponse>,\n): readonly unknown[] | unknown[][] {\n const { queryKeyPrefix, sourceId, sourcesId = [] } = args\n\n const sourcesArray = useMemo(() => {\n const array = sourceId !== undefined ? [sourceId] : sourcesId\n return array\n }, [sourceId, sourcesId])\n\n const sources = useSources(sourcesArray)\n\n // Memoize query parameters with JSON.stringify for optimization\n const queryParametersMemo = useMemo(() => {\n return sources.map((source) => {\n if (\n !source ||\n !('queryParameters' in source) ||\n !source.queryParameters\n ) {\n return undefined\n }\n\n return JSON.stringify(source.queryParameters)\n })\n }, [sources])\n\n // Memoize relevant headers with JSON.stringify for optimization\n const relevantHeadersMemo = useMemo(() => {\n return sources.map((source) => {\n const relevantHeaders = getRelevantHeaders(source?.headers)\n if (!relevantHeaders) return undefined\n return JSON.stringify(relevantHeaders)\n })\n }, [sources])\n\n // Build query keys for all sources\n const queryKeys = useMemo(() => {\n return sourcesArray.map((currentSourceId: string, index: number) => {\n const key: unknown[] = [currentSourceId, ...queryKeyPrefix]\n\n const relevantHeaders = relevantHeadersMemo[index]\n if (relevantHeaders) {\n key.push(relevantHeaders)\n }\n\n const parameters = queryParametersMemo[index]\n if (parameters) {\n key.push(parameters)\n }\n\n return key\n })\n }, [queryKeyPrefix, queryParametersMemo, relevantHeadersMemo, sourcesArray])\n\n // Return appropriate format based on input type\n if (sourceId !== undefined) {\n // Return first query key for single source calls\n return queryKeys[0] as readonly unknown[]\n }\n\n return queryKeys\n}\n","/**\n * Resolves a property value for a specific source index\n * @param value - Single string value or array of values\n * @param sourceIndex - Index of the current source\n * @param totalSources - Total number of sources\n * @param propertyName - Name of the property being resolved (for error messages)\n * @returns The resolved string value for the source\n * @internal\n */\nexport function resolvePropertyForSource(\n value: string | string[] | undefined,\n sourceIndex: number,\n totalSources: number,\n propertyName: string,\n) {\n if (!value) return undefined\n if (typeof value === 'string') return value\n if (value.length === 1) return value.at(0)!\n if (value.length !== totalSources) {\n throw new Error(\n `${propertyName} array length (${value.length}) must match sources length (${totalSources}). ` +\n `Either provide a single ${propertyName.toLowerCase()} for all sources, or one ${propertyName.toLowerCase()} per source.`,\n )\n }\n return value[sourceIndex]!\n}\n\n/**\n * Resolves the column value for a specific source index\n * @param column - Single column string or array of columns\n * @param sourceIndex - Index of the current source\n * @param totalSources - Total number of sources\n * @returns The resolved column string for the source\n * @internal\n */\nexport function resolveColumnForSource(\n column: string | string[] | undefined,\n sourceIndex: number,\n totalSources: number,\n) {\n return resolvePropertyForSource(column, sourceIndex, totalSources, 'column')\n}\n","import { useMemo } from 'react'\nimport type { ModelProps } from '../types'\nimport { useFiltersMerged } from './use-filters-merged'\nimport { useWidgetModel } from './use-widget-model'\nimport { useQueryKey } from './use-query-key'\nimport type { Filter } from '@carto/api-client'\nimport {\n resolveColumnForSource,\n resolvePropertyForSource,\n} from './resolve-property-for-source'\n\ntype CommonModelArgs<TRequestOptions, TResponse> = Pick<\n ModelProps<TRequestOptions, TResponse>,\n 'accessToken' | 'widgetProps' | 'additionalFilter'\n> & { queryKeyPrefix: string[] }\n\ntype SingleSourceArgs<TRequestOptions, TResponse> = CommonModelArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId: string\n sourcesId?: never\n}\n\ntype MultiSourceArgs<TRequestOptions, TResponse> = CommonModelArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId?: never\n sourcesId: string[]\n}\n\ninterface SingleSourceResult {\n mergedFilters: Filter | undefined\n widgetModel: ReturnType<typeof useWidgetModel>[0] | null\n queryKey: readonly unknown[]\n}\n\ninterface MultiSourceResult {\n mergedFilters: (Filter | undefined)[]\n widgetModel: ReturnType<typeof useWidgetModel>\n queryKey: unknown[][]\n}\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n args: SingleSourceArgs<TRequestOptions, TResponse>,\n): SingleSourceResult\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n args: MultiSourceArgs<TRequestOptions, TResponse>,\n): MultiSourceResult\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n props:\n | SingleSourceArgs<TRequestOptions, TResponse>\n | MultiSourceArgs<TRequestOptions, TResponse>,\n): SingleSourceResult | MultiSourceResult {\n const {\n queryKeyPrefix,\n accessToken,\n sourceId,\n sourcesId,\n widgetProps,\n additionalFilter,\n } = props\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = isSingleSource ? [sourceId] : sourcesId\n\n // Ensure we have a valid sources array\n if (!sourcesArray) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n\n // Get all the required data using the sources array\n const mergedFilters = useFiltersMerged(sourcesArray, additionalFilter)\n const widgetModel = useWidgetModel(accessToken, sourcesArray)\n\n // Get query keys for all sources\n const baseQueryKeys = useQueryKey({\n queryKeyPrefix,\n sourcesId: sourcesArray,\n })\n\n // Memoize filters with JSON.stringify for optimization\n const mergedFiltersMemo = useMemo(() => {\n return mergedFilters?.map((filter) =>\n filter ? JSON.stringify(filter) : undefined,\n )\n }, [mergedFilters])\n\n const mergedWidgetPropsMemo = useMemo(() => {\n return baseQueryKeys.map((_, index) => {\n // Resolve column if it exists in widgetProps\n const resolvedColumn =\n 'column' in widgetProps\n ? resolveColumnForSource(\n widgetProps.column as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n )\n : undefined\n\n // Resolve operationExp if it exists in widgetProps\n const resolvedOperationExp =\n 'operationExp' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationExp as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n 'operationExp',\n )\n : undefined\n\n // Resolve operationColumn if it exists in widgetProps\n const resolvedOperationColumn =\n 'operationColumn' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationColumn as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n 'operationColumn',\n )\n : undefined\n\n // Create widget props with resolved properties for this source's query key\n const resolvedProps = {\n ...widgetProps,\n ...('column' in widgetProps && { column: resolvedColumn }),\n ...(resolvedOperationExp !== undefined && {\n operationExp: resolvedOperationExp,\n }),\n ...(resolvedOperationColumn !== undefined && {\n operationColumn: resolvedOperationColumn,\n }),\n }\n\n return JSON.stringify(resolvedProps)\n })\n }, [baseQueryKeys, widgetProps])\n\n // Enhance query keys with widget props and filters\n const enhancedQueryKeys = useMemo(() => {\n return baseQueryKeys.map((key, index) => {\n // Create widget props with resolved column for this source's query key\n const resolvedWidgetProps = mergedWidgetPropsMemo[index]\n\n const enhancedKey: unknown[] = [...key, resolvedWidgetProps]\n const filterMemo = mergedFiltersMemo?.[index]\n if (filterMemo) {\n enhancedKey.push(filterMemo)\n }\n return enhancedKey\n })\n }, [baseQueryKeys, mergedFiltersMemo, mergedWidgetPropsMemo])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return {\n mergedFilters: mergedFilters?.[0],\n widgetModel: widgetModel[0] ?? null,\n queryKey: enhancedQueryKeys[0] as readonly unknown[],\n } as SingleSourceResult\n }\n\n return {\n mergedFilters: mergedFilters ?? [],\n widgetModel,\n queryKey: enhancedQueryKeys,\n } as MultiSourceResult\n}\n","import { useQueries } from '@tanstack/react-query'\nimport type { ModelProps, ModelResponse } from '../types'\nimport { useCommonModel } from './use-common-model'\nimport {\n resolveColumnForSource,\n resolvePropertyForSource,\n} from './resolve-property-for-source'\n\ninterface ModelConfig<TRequestOptions extends object, TResponse> {\n queryKeyPrefix: string[]\n getWidgetMethod: (\n widgetModel: NonNullable<\n NonNullable<ReturnType<typeof useCommonModel>['widgetModel']>[0]\n >,\n ) => (\n params: TRequestOptions & { filters?: unknown; signal?: AbortSignal },\n ) => Promise<TResponse>\n}\n\nexport function createModel<TWidgetProps extends object, TResponse>({\n queryKeyPrefix,\n getWidgetMethod,\n}: ModelConfig<TWidgetProps, TResponse>) {\n function useModelHook<P extends ModelProps<TWidgetProps, TResponse>>(\n props: P,\n ): P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]> {\n const {\n accessToken,\n sourceId,\n sourcesId,\n widgetProps,\n additionalFilter,\n useQueryProps: { enabled = true, ...useQueryProps } = {},\n } = props\n\n const _sourcesId = sourceId ? [sourceId] : sourcesId!\n\n const { mergedFilters, queryKey, widgetModel } = useCommonModel({\n queryKeyPrefix,\n accessToken,\n additionalFilter,\n sourcesId: _sourcesId,\n widgetProps,\n })\n\n const response = useQueries({\n queries: _sourcesId.map((_, index) => ({\n queryKey: queryKey[index]!,\n queryFn: ({ signal }) => {\n const _widgetModel = widgetModel?.[index]\n if (!_widgetModel) {\n throw new Error('widgetModel is not available')\n }\n const widgetMethod = getWidgetMethod(_widgetModel)\n\n // Resolve column for this specific source (if it exists)\n const resolvedColumn =\n 'column' in widgetProps\n ? resolveColumnForSource(\n widgetProps.column as string | string[] | undefined,\n index,\n _sourcesId.length,\n )\n : undefined\n\n // Resolve operationExp for this specific source (if it exists)\n const resolvedOperationExp =\n 'operationExp' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationExp as string | string[] | undefined,\n index,\n _sourcesId.length,\n 'operationExp',\n )\n : undefined\n\n // Resolve operationColumn for this specific source (if it exists)\n const resolvedOperationColumn =\n 'operationColumn' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationColumn as string | string[] | undefined,\n index,\n _sourcesId.length,\n 'operationColumn',\n )\n : undefined\n\n const requestOptions = {\n ...widgetProps,\n ...('column' in widgetProps && { column: resolvedColumn }),\n ...(resolvedOperationExp !== undefined && {\n operationExp: resolvedOperationExp,\n }),\n ...(resolvedOperationColumn !== undefined && {\n operationColumn: resolvedOperationColumn,\n }),\n }\n\n return widgetMethod({\n ...requestOptions,\n filters: mergedFilters?.[index],\n signal,\n })\n },\n enabled: !!widgetModel.length && enabled,\n ...useQueryProps,\n })),\n combine(result) {\n let data: TResponse | TResponse[] | undefined = result\n .map((r) => r.data)\n .filter((d) => !!d) as TResponse[]\n\n if (sourceId) {\n data = data.at(0)\n }\n\n return {\n data: data,\n error: result.find((r) => r.error)?.error,\n isLoading: result.some((r) => r.isLoading),\n isFetching: result.some((r) => r.isFetching),\n isError: result.some((r) => r.isError),\n isSuccess: result.every((r) => r.isSuccess),\n status: result.some((r) => r.status === 'pending')\n ? 'pending'\n : result.some((r) => r.status === 'error')\n ? 'error'\n : 'success',\n fetchStatus: result.some((r) => r.fetchStatus === 'fetching')\n ? 'fetching'\n : result.some((r) => r.fetchStatus === 'paused')\n ? 'paused'\n : 'idle',\n isPending: result.some((r) => r.isPending),\n isStale: result.some((r) => r.isStale),\n isRefetching: result.some((r) => r.isRefetching),\n isFetched: result.every((r) => r.isFetched),\n isFetchedAfterMount: result.every((r) => r.isFetchedAfterMount),\n isRefetchError: result.some((r) => r.isRefetchError),\n isLoadingError: result.some((r) => r.isLoadingError),\n isPlaceholderData: result.some((r) => r.isPlaceholderData),\n failureCount: result.reduce(\n (acc, r) => acc + (r.failureCount ?? 0),\n 0,\n ),\n dataUpdatedAt: Math.max(...result.map((r) => r.dataUpdatedAt ?? 0)),\n errorUpdatedAt: Math.max(...result.map((r) => r.errorUpdatedAt ?? 0)),\n refetch: () => Promise.all(result.map((r) => r.refetch())),\n isPaused: result.some((r) => r.isPaused),\n failureReason: result.find((r) => r.failureReason)?.failureReason,\n errorUpdateCount: result.reduce(\n (acc, r) => acc + (r.errorUpdateCount ?? 0),\n 0,\n ),\n isEnabled: result.some((r) => r.isEnabled),\n // Promise is used in SSR\n promise: result.map((r) => r.promise),\n } as ModelResponse<TResponse | TResponse[]>\n },\n })\n\n // Return appropriate format based on input type\n return response as P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]>\n }\n\n type ModelComponentPropsSingle = ModelProps<TWidgetProps, TResponse> & {\n sourceId: string\n children: (props: ModelResponse<TResponse>) => React.ReactNode\n }\n\n type ModelComponentPropsMulti = ModelProps<TWidgetProps, TResponse> & {\n sourcesId: string[]\n children: (props: ModelResponse<TResponse[]>) => React.ReactNode\n }\n\n function ModelComponent(props: ModelComponentPropsSingle): React.ReactElement\n function ModelComponent(props: ModelComponentPropsMulti): React.ReactElement\n function ModelComponent<P extends ModelProps<TWidgetProps, TResponse>>(\n props: P & {\n children: (\n props: P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]>,\n ) => React.ReactNode\n },\n ): React.ReactElement {\n const queryResult = useModelHook(props)\n\n return props.children(queryResult) as React.ReactElement\n }\n\n return { useModelHook, ModelComponent }\n}\n","import type {\n AggregationsRequestOptions,\n AggregationsResponse,\n AggregationType,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\n\nexport type AggregationsWidgetProps = Omit<\n AggregationsRequestOptions,\n 'aggregations'\n> & {\n aggregations: (\n | {\n operation: 'custom'\n aggregationExp: string\n alias: string\n }\n | {\n column: string\n operation: Exclude<AggregationType, 'custom'>\n alias: string\n }\n )[]\n}\n\nconst { useModelHook: useAggregations, ModelComponent: AggregationsModel } =\n createModel<AggregationsWidgetProps, AggregationsResponse>({\n queryKeyPrefix: ['aggregations'],\n getWidgetMethod: (widgetModel) => (params) => {\n const aggregations = params.aggregations\n\n let adaptedAggregations: AggregationsRequestOptions['aggregations'] =\n aggregations.filter((agg) => agg.operation !== 'custom')\n\n if (aggregations.some((agg) => agg.operation === 'custom')) {\n adaptedAggregations = transformAggregationsToSql(aggregations).join(',')\n }\n\n const adaptedParams = {\n ...params,\n aggregations: adaptedAggregations,\n }\n\n return widgetModel.getAggregations(adaptedParams)\n },\n })\n\nexport { useAggregations, AggregationsModel }\n\n/**\n * Transforms aggregation objects into SQL expressions\n */\nfunction transformAggregationsToSql(\n aggregations: AggregationsWidgetProps['aggregations'],\n): string[] {\n return aggregations.map((agg) => {\n if (agg.operation === 'custom') {\n return `${agg.aggregationExp} AS ${agg.alias}`\n }\n\n const { column, operation, alias } = agg\n\n switch (operation) {\n case 'count':\n return `COUNT(${column}) AS ${alias}`\n case 'sum':\n return `SUM(${column}) AS ${alias}`\n case 'avg':\n return `AVG(${column}) AS ${alias}`\n case 'min':\n return `MIN(${column}) AS ${alias}`\n case 'max':\n return `MAX(${column}) AS ${alias}`\n default:\n // This should never happen if all AggregationType values are handled above\n throw new Error(\n `Unsupported aggregation operation: ${String(operation)}`,\n )\n }\n })\n}\n","import type {\n CategoryRequestOptions,\n CategoryResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { CategoryWidgetProps } from './types'\n\nconst { useModelHook: useCategories, ModelComponent: CategoriesModel } =\n createModel<CategoryWidgetProps, CategoryResponse>({\n queryKeyPrefix: ['categories'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getCategories(params as CategoryRequestOptions),\n })\n\nexport { useCategories, CategoriesModel }\n","import type {\n FeaturesRequestOptions,\n FeaturesResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { FeaturesWidgetProps } from './types'\n\nconst { useModelHook: useFeatures, ModelComponent: FeaturesModel } =\n createModel<FeaturesWidgetProps, FeaturesResponse>({\n queryKeyPrefix: ['features'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getFeatures(params as FeaturesRequestOptions),\n })\n\nexport { useFeatures, FeaturesModel }\n","import type { FormulaRequestOptions, FormulaResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { FormulaWidgetProps } from './types'\n\nconst { useModelHook: useFormula, ModelComponent: FormulaModel } = createModel<\n FormulaWidgetProps,\n FormulaResponse\n>({\n queryKeyPrefix: ['formula'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getFormula(params as FormulaRequestOptions),\n})\n\nexport { useFormula, FormulaModel }\n","import type {\n HistogramRequestOptions,\n HistogramResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { HistogramWidgetProps } from './types'\n\nconst { useModelHook: useHistogram, ModelComponent: HistogramModel } =\n createModel<HistogramWidgetProps, HistogramResponse>({\n queryKeyPrefix: ['histogram'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getHistogram(params as HistogramRequestOptions),\n })\n\nexport { useHistogram, HistogramModel }\n","import type { RangeRequestOptions, RangeResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { RangeWidgetProps } from './types'\n\nconst { useModelHook: useRange, ModelComponent: RangeModel } = createModel<\n RangeWidgetProps,\n RangeResponse\n>({\n queryKeyPrefix: ['range'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getRange(params as RangeRequestOptions),\n})\n\nexport { useRange, RangeModel }\n","import type { ScatterRequestOptions, ScatterResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { ScatterWidgetProps } from './types'\n\nconst { useModelHook: useScatter, ModelComponent: ScatterModel } = createModel<\n ScatterWidgetProps,\n ScatterResponse\n>({\n queryKeyPrefix: ['scatter'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getScatter(params as ScatterRequestOptions),\n})\n\nexport { useScatter, ScatterModel }\n","import type { TableRequestOptions, TableResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { TableWidgetProps } from './types'\n\nconst { useModelHook: useTable, ModelComponent: TableModel } = createModel<\n TableWidgetProps,\n TableResponse\n>({\n queryKeyPrefix: ['table'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getTable(params as TableRequestOptions),\n})\n\nexport { useTable, TableModel }\n","import type {\n TimeSeriesRequestOptions,\n TimeSeriesResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { TimeSeriesWidgetProps } from './types'\n\nconst { useModelHook: useTimeSeries, ModelComponent: TimeSeriesModel } =\n createModel<TimeSeriesWidgetProps, TimeSeriesResponse>({\n queryKeyPrefix: ['timeSeries'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getTimeSeries(params as TimeSeriesRequestOptions),\n })\n\nexport { useTimeSeries, TimeSeriesModel }\n","export const clientID = 'ps'\n","import type { PropsWithChildren } from 'react'\nimport type { MapProviderProps } from './providers/map/types'\nimport type { LassoToolsProviderProps } from './editable/lasso-tools/provider/types'\nimport type { MeasurementToolsProviderProps } from './editable/measurement-tools/provider/types'\nimport { MapProvider } from './providers/map/provider'\nimport { LassoToolsProvider } from './editable/lasso-tools/provider/provider'\nimport { MeasurementToolsProvider } from './editable/measurement-tools/provider/provider'\n\ninterface Props {\n maps: MapProviderProps['values']\n lassoTools?: LassoToolsProviderProps['values']\n measureTools?: MeasurementToolsProviderProps['values']\n}\n\nexport function MapsProvider({\n children,\n maps,\n lassoTools = [],\n measureTools = [],\n}: PropsWithChildren<Props>) {\n return (\n <MapProvider values={maps}>\n <LassoToolsProvider values={lassoTools}>\n <MeasurementToolsProvider values={measureTools}>\n {children}\n </MeasurementToolsProvider>\n </LassoToolsProvider>\n </MapProvider>\n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { useLayerStore } from './providers/layers/store'\nimport { sortLayers } from './utils/sort-layers'\nimport type { Layer, LayerLegend } from './providers/layers/types'\n\nexport function useLegend<T>(\n layersId: string[],\n callback: (layer: Layer) => T,\n) {\n const layers = useLayerStore((state) => state.layers)\n const setLayer = useLayerStore((state) => state.setLayer)\n\n const layersById = useMemo(() => {\n return sortLayers(\n layersId.map((id) => layers[id]).filter((l): l is Layer => !!l?.legend),\n ).toReversed()\n }, [layers, layersId])\n\n const legend = useMemo(() => {\n return layersById.map(callback)\n }, [callback, layersById])\n\n const onChangeVisibility = useCallback(\n ({\n id,\n visible,\n ...legend\n }: {\n id: string\n visible: boolean\n } & Partial<LayerLegend>) => {\n setLayer(id, {\n props: { visible },\n legend,\n })\n },\n [setLayer],\n )\n\n const onChangeRowCollapse = useCallback(\n ({ id, collapsed }: { id: string; collapsed: boolean }) => {\n setLayer(id, {\n legend: {\n collapsed,\n },\n })\n },\n [setLayer],\n )\n\n const onChangeOpacity = useCallback(\n ({ id, opacity }: { id: string; opacity: number }) => {\n setLayer(id, {\n props: { opacity },\n })\n },\n [setLayer],\n )\n\n return {\n legend,\n onChangeVisibility,\n onChangeOpacity,\n onChangeRowCollapse,\n }\n}\n","import { useCallback, useState } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport type { MapRef } from 'react-map-gl/maplibre'\nimport { MAPS_BASEMAP, MapsTypes } from './const'\nimport html2canvas from 'html2canvas'\n\nexport function useMapScreenshot({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const [screenshot, setScreenshot] = useState<string | undefined>(undefined)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<Error | undefined>(undefined)\n\n const basemap = useMapStore((state) => state.maps[mapId]?.basemap)!\n const deckInstanceFn = useMapStore((state) => state.getDeckInstance)\n const overlayInstanceFn = useMapStore((state) => state.getOverlayInstance)\n\n const areLayersLoaded = useMapStore((state) => state.areLayersLoaded[mapId])!\n const isLoaded = useMapStore((state) => state.maps[mapId]?.isLoaded)!\n\n const isAllLoaded = isLoaded && areLayersLoaded\n\n const { type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n const _takeScreenshot = useCallback(async () => {\n const deckInstance = deckInstanceFn(mapId)!\n const overlayInstance = overlayInstanceFn(mapId)!\n\n try {\n const canvas = document.createElement('canvas')\n canvas.width = deckInstance.width ?? 0\n canvas.height = deckInstance.height ?? 0\n\n const context = canvas.getContext('2d')\n\n if (isGmaps) {\n const _overlayInstance = overlayInstance as google.maps.Map\n\n if ((_overlayInstance.getRenderingType() as string) !== 'RASTER') {\n throw new Error('Only raster type is supported for Google Maps')\n }\n\n const data = await html2canvas(_overlayInstance.getDiv(), {\n useCORS: true,\n })\n context?.drawImage(data, 0, 0, deckInstance.width, deckInstance.height)\n } else {\n const _overlayInstance = overlayInstance as MapRef\n _overlayInstance.redraw()\n context?.drawImage(\n _overlayInstance.getMap().getCanvas(),\n 0,\n 0,\n deckInstance.width,\n deckInstance.height,\n )\n }\n\n deckInstance?.redraw('screenshot')\n context?.drawImage(\n deckInstance.getCanvas()!,\n 0,\n 0,\n deckInstance.width,\n deckInstance.height,\n )\n\n const data = canvas.toDataURL()\n\n setScreenshot(data)\n } catch (err) {\n setError(err as Error)\n\n // eslint-disable-next-line\n console.error(err)\n } finally {\n setIsLoading(false)\n }\n }, [deckInstanceFn, isGmaps, mapId, overlayInstanceFn])\n\n const takeScreenshot = useCallback(() => {\n setError(undefined)\n setIsLoading(true)\n if (!isAllLoaded) return\n\n void _takeScreenshot()\n }, [_takeScreenshot, isAllLoaded])\n\n return {\n takeScreenshot,\n isLoading,\n screenshot,\n error,\n }\n}\n","import { useMemo } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport {\n createViewportSpatialFilter,\n type SpatialFilter,\n} from '@carto/api-client'\nimport { useLassoToolsState } from './editable/lasso-tools/provider/provider'\nimport { getMaskValues } from './editable/lasso-tools/util'\nimport { multiPolygon } from '@turf/turf'\nimport type { Polygon, Position } from 'geojson'\n\nexport function useSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const viewportSpatialFilter = useViewportSpatialFilter({ mapId })\n\n const lassoToolsSpatialFilter = useLassoToolsSpatialFilter({\n mapId,\n }) as unknown as SpatialFilter | undefined\n\n const staticSpatialFilter = useStaticSpatialFilter({ mapId })\n\n return {\n spatialFilter:\n lassoToolsSpatialFilter ?? staticSpatialFilter ?? viewportSpatialFilter,\n staticSpatialFilter,\n lassoToolsSpatialFilter,\n viewportSpatialFilter,\n }\n}\n\nexport function useViewportSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const viewport = useMapStore((state) => state.viewports[mapId])\n\n return useMemo(() => {\n if (!viewport) return\n return createViewportSpatialFilter(viewport.getBounds())\n }, [viewport])\n}\n\nexport function useLassoToolsSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const _values = useLassoToolsState((state) => state.data[mapId]?.values)\n\n return useMemo(() => {\n const values = getMaskValues({ values: _values }).filter(\n (value) => value.properties.visible,\n )\n\n if (!values?.length) return\n\n return multiPolygon(\n values.map((value) => (value.geometry as Polygon).coordinates),\n ).geometry\n }, [_values])\n}\n\nexport function useStaticSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}): SpatialFilter | undefined {\n const spatialFilter = useMapStore((state) => state.spatialFilter[mapId])\n\n return useMemo(() => {\n if (!spatialFilter || !Object.keys(spatialFilter).length) return\n\n // Flatten the array to match the expected Position[][][] type\n const coordinates: Position[][][] = Object.values(spatialFilter)\n .filter((value) => value !== null && value !== undefined)\n .flatMap((geom) => {\n // If it's a Polygon, wrap its coordinates in an array to make it compatible with MultiPolygon format\n if (geom.type === 'Polygon') {\n return [geom.coordinates]\n }\n\n // Otherwise, validate or transform `geom` to ensure it matches the expected format\n return geom.coordinates\n })\n\n return multiPolygon(coordinates).geometry\n }, [spatialFilter])\n}\n","export const formatterTypes = {\n currency: 'CURRENCY',\n default: 'DEFAULT',\n number: 'NUMBER',\n} as const\n","import { formatCurrency, formatNumber } from '@carto/ps-utils'\nimport { formatterTypes } from './const'\nimport type { Formatters, Value } from './types'\n\nexport const FORMATTERS: Formatters = {\n [formatterTypes.currency]: {\n type: formatterTypes.currency,\n format: (value: Value, locale: string) => {\n return formatCurrency(value as number, locale)\n },\n },\n [formatterTypes.number]: {\n type: formatterTypes.number,\n format: (value: Value, locale: string) => {\n return formatNumber(value as number, locale)\n },\n },\n [formatterTypes.default]: {\n type: formatterTypes.default,\n format: (value: Value) => {\n return value.toLocaleString()\n },\n },\n}\n","import { formatterTypes } from './const'\nimport { FORMATTERS } from './object-to-html.contants'\nimport type { FieldFormatter, ObjectToHtmlOptions, Value } from './types'\n\n/**\n * Returns a string with the HTML content for an object.\n *\n * @param {ObjectToHtmlOptions} - The options of the formatter.\n *\n * @return {string}\n *\n * @defaultValues\n *\n * | Prop | Value |\n * | --- | --- |\n * | `formatters` | `{}` |\n * | `includeColumns` | `Object.keys(properties)` |\n * | `locale` | `en-US` |\n * | `showColumnName` | `true` |\n * | `title` | `''` |\n * | `getColumnName` | `Function` |\n * | `getFieldHtml` | `Function` |\n * | `getTitle` | `Function` |\n * | `getValue` | `Function` |\n *\n * @example\n * const properties = {\n * name: 'I am a feature',\n * price: 100,\n * }\n *\n * const html = objectToHtml({\n * properties,\n * formatters: {\n * price: 'CURRENCY',\n * },\n * locale: 'es-ES',\n * })\n */\nexport function objectToHtml<T extends Record<string, Value>>({\n properties,\n formatters = {},\n includeColumns = Object.keys(properties),\n locale = 'en-US',\n showColumnName = true,\n title,\n getColumnName = _getColumnName,\n getFieldHtml = _getFieldHtml,\n getTitle = _getTitle,\n getValue = _getValue,\n}: ObjectToHtmlOptions<T>): string {\n const header = title ? getTitle(title) : ''\n\n const propNames = includeColumns\n\n const body = propNames.reduce((acc, cur) => {\n const formatter = formatters[cur]!\n const value = properties[cur]!\n\n const valueTransformed = getValue(value, locale, formatter)\n const columnName = showColumnName ? getColumnName(cur) : ''\n\n return acc + getFieldHtml(columnName, valueTransformed)\n }, '')\n\n return header + body\n}\n\nfunction _getTitle(title: string) {\n return `<h3 style=\"margin: 0\"><strong>${title}</strong></h3></br>`\n}\n\nfunction _getFieldHtml(columnName: string, value: Value) {\n const propHtml = `${columnName}${value}</br>`\n\n return propHtml\n}\n\nfunction _getValue(value: Value, locale: string, formatter?: FieldFormatter) {\n try {\n const format = getFormatterFunction(formatter)\n return format(value, locale)\n } catch {\n return value as string\n }\n}\n\nfunction getFormatterFunction(formatter?: FieldFormatter) {\n if (typeof formatter === 'function') {\n return formatter\n }\n\n const fn =\n (formatter && FORMATTERS[formatter]) ?? FORMATTERS[formatterTypes.default]\n\n return fn.format\n}\n\nfunction _getColumnName(propName: string) {\n return `<strong>${propName}</strong>: `\n}\n","import type { Layer } from '../providers/layers/types'\n\nexport function mappingLegendMeridian<T>(layer: Layer) {\n return {\n collapsed: layer.legend?.collapsed,\n collapsible: layer.legend?.collapsible,\n helperText: layer.legend?.helperText,\n id: layer.props.id,\n legend: layer.legend?.variables,\n maxZoom: layer.legend?.maxZoom,\n minZoom: layer.legend?.minZoom,\n opacity: layer.props.opacity ?? 1,\n showOpacityControl: layer.legend?.opacityControl,\n switchable: layer.legend?.switchable,\n title: layer.name,\n visible: layer.props.visible ?? true,\n } as T\n}\n","import {\n centroid,\n lineString,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n polygon,\n} from '@turf/turf'\nimport type { Feature, Geometry, Position } from 'geojson'\n\ntype GeometryHandler = (geometry: Geometry) => Feature<Geometry> | undefined\n\n/**\n * Mapping of geometry types to their corresponding Turf.js factory functions.\n */\nconst geometryTypeHandlers: Record<string, GeometryHandler | undefined> = {\n Point: (g) => point((g as Extract<Geometry, { type: 'Point' }>).coordinates),\n LineString: (g) =>\n lineString((g as Extract<Geometry, { type: 'LineString' }>).coordinates),\n Polygon: (g) =>\n polygon((g as Extract<Geometry, { type: 'Polygon' }>).coordinates),\n MultiPoint: (g) =>\n multiPoint((g as Extract<Geometry, { type: 'MultiPoint' }>).coordinates),\n MultiLineString: (g) =>\n multiLineString(\n (g as Extract<Geometry, { type: 'MultiLineString' }>).coordinates,\n ),\n MultiPolygon: (g) =>\n multiPolygon(\n (g as Extract<Geometry, { type: 'MultiPolygon' }>).coordinates,\n ),\n}\n\n/**\n * Returns the centroid of a geometry.\n *\n * @param geometry - The geometry to get the centroid of\n * @returns The centroid coordinates [longitude, latitude] or undefined if geometry is invalid\n *\n * @example\n * ```typescript\n * const geometry = {\n * type: 'Polygon',\n * coordinates: [\n * [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]\n * ]\n * }\n * const center = getCentroid(geometry)\n * console.log(center) // [0.5, 0.5]\n * ```\n */\nexport function getCentroid(geometry: Geometry): Position | undefined {\n const handler = geometryTypeHandlers[geometry.type]\n const feature = handler?.(geometry)\n\n if (!feature) {\n return\n }\n\n return centroid(feature).geometry.coordinates\n}\n","import type { ZoomControl } from './types'\nimport { useMapStore } from './providers/map/provider'\nimport { useCallback } from 'react'\n\nexport function ZoomControls({ children, mapId }: ZoomControl) {\n const { zoom, maxZoom, minZoom } = useMapStore(\n (state) => state.viewStates[mapId]!,\n )\n const isLoaded = useMapStore((state) => state.areLayersLoaded[mapId])\n\n const setZoom = useMapStore((state) => state.setZoom)\n const flyTo = useMapStore((state) => state.flyTo)\n const resetViewState = useMapStore((state) => state.resetViewState)\n\n return children({\n zoom,\n maxZoom,\n minZoom,\n isLoading: !isLoaded,\n setZoom: useCallback((zoom) => setZoom(mapId, zoom), [mapId, setZoom]),\n flyTo: useCallback(\n (viewState: Parameters<typeof flyTo>[1]) => flyTo(mapId, viewState),\n [flyTo, mapId],\n ),\n resetViewState: useCallback(\n () => resetViewState(mapId),\n [resetViewState, mapId],\n ),\n })\n}\n","import {\n RequestMethods,\n executeFetch,\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n} from '@carto/ps-services'\nimport type { GetQueryStats } from './types'\nimport type { StatsResponse } from './types'\n\nexport async function getQueryStats<Attribute extends string | number>({\n baseUrl = DEFAULT_CARTO_API_URL,\n connection,\n accessToken,\n query,\n attribute,\n fetcherOptions: { signal, ...other } = {},\n queryParameters,\n params,\n apiVersion = DEFAULT_CARTO_API_VERSION,\n}: GetQueryStats) {\n const statsUrl = `${baseUrl}/${apiVersion}/stats/${connection}/${attribute}`\n\n return executeFetch<StatsResponse<Attribute>>({\n accessToken,\n signal,\n url: statsUrl,\n method: RequestMethods.get,\n params: { q: query, ...queryParameters, ...params },\n ...other,\n })\n}\n","import {\n RequestMethods,\n executeFetch,\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n} from '@carto/ps-services'\nimport type { GetTableStats } from './types'\nimport type { StatsResponse } from './types'\n\nexport async function getTableStats<Attribute extends string | number>({\n baseUrl = DEFAULT_CARTO_API_URL,\n connection,\n accessToken,\n table,\n attribute,\n params,\n fetcherOptions: { signal, ...other } = {},\n apiVersion = DEFAULT_CARTO_API_VERSION,\n}: GetTableStats) {\n const statsUrl = `${baseUrl}/${apiVersion}/stats/${connection}/${table}/${attribute}`\n\n return executeFetch<StatsResponse<Attribute>>({\n accessToken,\n signal,\n url: statsUrl,\n method: RequestMethods.get,\n params: { ...params },\n ...other,\n })\n}\n","import { vectorTilesetSource } from '@carto/api-client'\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query'\nimport { getQueryStats } from './get-query-stats'\nimport { getTableStats } from './get-table-stats'\nimport type {\n AllExternalSources,\n GeoJSONSource,\n QuerySource,\n Source,\n TableSource,\n TilesetSource,\n} from '../providers/sources/types'\nimport type { Stats, StatsResponse } from './types'\nimport type { Feature } from 'geojson'\nimport { useQueryKey } from '../models/utils/use-query-key'\n\nexport function useStats<Attribute extends string | number>({\n source,\n attribute,\n accessToken,\n params,\n fetcherOptions,\n useQueryProps: { enabled = true, ...useQueryProps } = {},\n}: {\n source: Source | undefined\n attribute: Stats['attribute']\n accessToken: Stats['accessToken']\n params?: Stats['params']\n fetcherOptions?: Stats['fetcherOptions']\n useQueryProps?: Omit<\n UseQueryOptions<StatsResponse<Attribute>, Error>,\n 'queryKey' | 'queryFn'\n >\n}) {\n const queryKey = useQueryKey({\n queryKeyPrefix: ['stats', attribute],\n sourceId: source?.id,\n })\n\n return useQuery<StatsResponse<Attribute>, Error>({\n queryKey,\n queryFn: () =>\n retrieveStatsBySource<Attribute>({\n source: source!,\n params,\n attribute,\n accessToken: accessToken!,\n fetcherOptions,\n }),\n select(data) {\n return {\n ...data,\n type: data.type.toLowerCase(),\n }\n },\n enabled: !!source && enabled,\n ...useQueryProps,\n })\n}\n\nfunction retrieveStatsBySource<Attribute extends string | number>({\n source,\n params,\n attribute,\n accessToken,\n fetcherOptions,\n}: {\n source: Source\n params?: Stats['params']\n attribute: Stats['attribute']\n accessToken: NonNullable<Stats['accessToken']>\n fetcherOptions?: Stats['fetcherOptions']\n}): Promise<StatsResponse<Attribute>> {\n if (source.type.startsWith('query')) {\n const _source = source as Source<AllExternalSources & QuerySource>\n return getQueryStats<Attribute>({\n connection: _source.connectionName,\n baseUrl: _source.apiBaseUrl,\n apiVersion: _source.apiVersion,\n accessToken,\n params,\n query: _source.data,\n queryParameters: _source.queryParameters,\n attribute,\n fetcherOptions,\n })\n }\n if (source.type.startsWith('table')) {\n const _source = source as Source<AllExternalSources & TableSource>\n return getTableStats<Attribute>({\n connection: _source.connectionName,\n baseUrl: _source.apiBaseUrl,\n apiVersion: _source.apiVersion,\n params,\n accessToken,\n table: _source.data,\n attribute,\n fetcherOptions,\n })\n }\n if (source.type.startsWith('tileset')) {\n const _source = source as Source<AllExternalSources & TilesetSource>\n return getStatsFromTileset<Attribute>({\n source: _source,\n accessToken,\n target: _source.data,\n attribute,\n })\n }\n\n if (source.type === 'geojson') {\n return Promise.resolve(\n getStatsFromGeoJSON({\n source: source as Source<GeoJSONSource>,\n attribute,\n }) as StatsResponse<Attribute>,\n )\n }\n\n throw new Error(`Unsupported source type: ${source.type}`)\n}\n\n// Catch Stats from tileset\n\nasync function getStatsFromTileset<Attribute extends string | number>({\n source,\n accessToken,\n target,\n attribute,\n}: {\n source: Source<AllExternalSources & TilesetSource>\n accessToken: string\n target: string\n attribute: string\n}) {\n const tileJson = await vectorTilesetSource({\n connectionName: source.connectionName,\n apiBaseUrl: source.apiBaseUrl,\n accessToken: accessToken,\n clientId: source.clientId,\n tableName: target,\n })\n if (!tileJson?.tilestats?.layers?.[0]?.attributes) {\n throw new Error(`${attribute} not found in tileset attributes`)\n }\n\n const tileStatsAttributes = tileJson.tilestats.layers[0].attributes\n const columnStats = tileStatsAttributes.find((p) => p.attribute === attribute)\n\n if (!columnStats) {\n throw new Error(`${attribute} not found in tileset attributes`)\n }\n\n return columnStats as StatsResponse<Attribute>\n}\n\nfunction getStatsFromGeoJSON({\n source,\n attribute,\n}: {\n source: Source<GeoJSONSource>\n attribute: string\n}) {\n const data = source.data\n // Find the first non-null, non-undefined value for the attribute\n const attrType = data.find((feature) => {\n const value = feature?.properties?.[attribute] as unknown\n return value !== null && value !== undefined\n })?.properties?.[attribute] as unknown\n\n if (typeof attrType === 'number') {\n return getNumberStats({ data, attribute })\n }\n\n return getStringStats({ data, attribute })\n}\n\nfunction getNumberStats({\n data,\n attribute,\n}: {\n data: Feature[]\n attribute: string\n}): StatsResponse<number> {\n const _response = data.reduce(\n (acc, curr) => {\n const value = curr.properties?.[attribute] as number\n\n acc.sum += value\n acc.max = Math.max(acc.max, value)\n acc.min = Math.min(acc.min, value)\n acc.values.push(value)\n\n return acc\n },\n {\n max: -Infinity,\n min: Infinity,\n sum: 0,\n values: [],\n } as {\n max: number\n min: number\n sum: number\n values: number[]\n },\n )\n\n const values = _response.values.sort((a, b) => a - b)\n\n const quantiles: Record<number, number[]> = {}\n for (let i = 3; i <= 20; i++) {\n quantiles[i] = []\n for (let j = 0; j <= i; j++) {\n const qIndex = Math.floor((j * (values.length - 1)) / i)\n const value = values[qIndex]\n if (value !== undefined) {\n quantiles[i]?.push(value)\n }\n }\n }\n\n const response = {\n ..._response,\n avg: data.length ? _response.sum / data.length : 0,\n attribute,\n quantiles,\n type: 'number' as const,\n }\n\n return response\n}\n\nfunction getStringStats({\n data,\n attribute,\n}: {\n data: Feature[]\n attribute: string\n}): StatsResponse<string> {\n const valuesCount: Record<string, number> = {}\n data.forEach((feature) => {\n const value = feature.properties?.[attribute] as string\n if (value !== undefined) {\n valuesCount[value] ??= 0\n valuesCount[value] += 1\n }\n })\n\n const categories = Object.entries(valuesCount).map(([value, count]) => ({\n category: value,\n frequency: count,\n }))\n\n const response = {\n categories,\n type: 'string' as const,\n attribute,\n }\n\n return response\n}\n"],"names":["GmapsBasemap","roadmap","satellite","hybrid","CartoBasemaps","darkMatter","positron","voyager","CartoBasemapURL","MapsTypes","maplibre","googleMaps","MAPS_BASEMAP","url","type","dark","getCursorDefault","isDragging","isHovering","getTooltipDefault","info","html","style","padding","background","MapLibre","t0","$","_c","controller","getCursor","getTooltip","id","instanceRef","layers","mapStyle","onLoad","onViewStateChange","overlayRef","parameters","rest","t1","filter","_temp","map","_temp2","_layers","t2","t3","value","t4","depthTest","t5","MapReferences","t6","t7","jsx","Map","_temp3","t8","MapProvider","jsxs","DeckGL","$el","document","querySelector","classList","remove","Layer","props","l","default","mapLibre","useMapLibre","useImperativeHandle","DeckGlOverlay","Symbol","for","GoogleMapsOverlay","interleaved","deck","useMap","setMap","finalize","useEffect","setProps","GoogleMaps","basemap","gmapsProps","undefined","apiKey","APIProviderProps","_gmapsProps","bb0","dragPan","doubleClickZoom","scrollZoom","_controller","_controller_0","initialViewState","maxZoom","minZoom","detail","center","zoom","heading","tilt","latitude","lat","longitude","lng","bearing","pitch","mappingGmapsToDeck","newViewState","deckInstance","current","_deck","viewState","_viewState","width","height","interactionState","isZooming","handleViewStateChange","props_0","newViewState_0","handleGmapsChange","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","APIProvider","gmaps","DeckGLComponent","isLoaded","setLoaded","useState","isGmaps","e","index","state","loaded","i","handleLoad","isAllLoaded","every","loaded_0","transitionFlyConfig","transitionDuration","transitionInterpolator","FlyToInterpolator","curve","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","val","cloneUnlessOtherwiseSpecified","options","deepmerge","defaultArrayMerge","target","source","element","getMergeFunction","key","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","object","property","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","prev","next","deepmerge_1","cjs","createMapSlice","initProps","defaultProps","reduce","acc","curr","set","get","maps","setBasemap","currentType","newType","setLoad","getOverlayInstance","getDeckInstance","getViewState","getViewports","rect","getViewport","getBounds","bounds","store","newBounds","WebMercatorViewport","fitBounds","boundsOptions","viewStateOptions","addLayers","Set","removeLayers","layer","includes","getController","setController","currentController","newController","createAreLayersLoaded","areLayersLoaded","setLayersLoad","createViewStateSlice","initialViewStates","viewStates","viewports","updateViewPort","viewport","setViewState","setInitialViewState","setZoom","setMinZoom","setMaxZoom","createCommonSlice","_","flyTo","finalViewState","loadInitialViewState","resetViewState","createSpatialFilterSlice","spatialFilter","setSpatialFilter","mapId","structuredClone","removeSpatialFilter","createLayerActionsSlice","setLayerHover","layerId","geometry","widgetManager","x","y","project","isNaN","picked","pickObject","radius","layerIds","event","MouseEvent","onHover","clearLayersHover","createMapStore","createStore","args","MapContext","createContext","children","values","storeRef","useMapStore","selector","useContext","Object","keys","length","Error","useStore","BasemapsControls","basemap_0","state_0","EditType","addFeature","addTentativePosition","updateTentativeFeature","cancel","finish","addPosition","CustomCompositeEditMode","CompositeMode","constructor","TranslateMode","ModifyMode","handleKeyUp","resetClickSequence","onEdit","updatedData","data","editType","editContext","MAP_LASSO_TOOLS_LAYER_ID","MAP_MASK_LAYER_ID","DEFAULT_LASSO_TOOLS_LAYER_PROPS","billboard","editHandlePointRadiusUnits","editHandlePointRadiusMinPixels","editHandlePointRadiusMaxPixels","editHandlePointStrokeWidth","getEditHandlePointRadius","stroked","filled","lineWidthUnits","getLineWidth","lineWidthMinPixels","DEFAULT_LASSO_TOOLS_COLORS","editing","border","fill","point","finished","DEFAULT_LASSO_TOOLS_PROPS","styles","colors","labels","mask","EXTENSION_FILTER","DataFilterExtension","filterSize","DEFAULT_MASK_LAYER_PROPS","operation","pickable","visible","extensions","filterRange","DEFAULT_LASSO_TOOLS_MODES","polygon","mode","DrawPolygonMode","rectangle","DrawRectangleMode","circle","DrawCircleFromCenterMode","lasso","DrawPolygonByDraggingMode","edit","useLayerStore","create","setLayer","_layer","extension","some","equals","push","legend","updateTriggers","removeLayer","getLayers","getLayer","EVENT_TYPES","RECOGNIZERS","multipan","Pan","threshold","direction","InputDirection","Vertical","pointers","pinch","Pinch","click","Tap","dblclick","taps","pan","useEventManager","store_0","eventManager","overlayInstance","EventManager","getDiv","recognizers","destroy","eventName","RecognizerConstructor","defaultOptions","recognizeWith","requestFailure","recognizer","store_1","CustomEditableGeojsonLayer","EditableGeoJsonLayer","updateState","oldProps","context","changeFlags","_removeEventHandlers","_addEventHandlers","_getEventManager","eventHandler","_editableLayerState","eventType","on","priority","_eventManager","off","layerName","getLassoToolsLayer","getLayerProps","layerProps","getLineColor","getFillColor","pointColor","_layerProps","modeConfig","preventOverlappingLines","defaultLayerProps","getTentativeLineColor","getTentativeFillColor","getEditHandlePointColor","getEditHandlePointOutlineColor","outline","dataComparator","oldData","features","createLassoToolsStore","enabled","modeInstance","modes","modeSelected","setEnabled","setValue","_value","setVisibility","valueId","properties","setModeSelected","setModeInstance","LassoToolsContext","LassoToolsProvider","useLassoToolsState","LassoToolsControls","state_1","state_4","_temp4","state_6","_temp5","Mode","serialize","_temp6","_temp7","mask_0","handleModeSelected","data_0","enabled_0","value_0","label","state_7","state_5","state_3","state_2","getMaskValues","convert","configureMeasurements","convertArea","area","validateUnitForAreaConversion","unit","CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA","validUnits","join","convertMetersTo","distance","dimension","unitFrom","CONVERSIONS_UNITS","MapMeasurementUnit","meter","unitTo","from","to","CONVERSIONS_UNITS_AREA","DEFAULT_AUTO_SPLIT_NUMBER","getTextLayerFormattedDistance","meters","locale","autoSplitNumber","customFormatter","intlOptions","isMetricSystem","MapMeasurementUnitAuto","isImperialSystem","isAuto","_unit","_number","isSmallDistance","convertUnit","kilometer","INTL_UNITS","feet","mile","result","formatNumber","unitDisplay","notation","minimumFractionDigits","maximumFractionDigits","getDeckController","hasDoubleClickZoom","buildTooltip","position","formatTooltip","turfOptions","units","text","parseFloat","toString","toFixed","measurementCallback","CustomMeasureAreaMode","MeasureAreaMode","_isMeasuringSessionFinished","tooltips","resultPolygon","handleClick","picks","clickedEditHandle","getPickedEditHandle","clickSequence","getClickSequence","positionAdded","allowOverlapping","addClickSequence","latestClickSequence","polygonCoordinates","coordinates","isFinalizedEdition","finalizeEdition","mapCoords","resetEdition","updateTooltip","centroid","handlePointerMove","tentativeGuide","getTentativeGuide","getGuides","getTooltips","positionIndexes","overlappingLines","currentLine","otherLines","slice","lineIntersect","polygonToAdd","selectedIndexes","editAction","getAddFeatureOrBooleanPolygonAction","positions","getTooltipText","CustomMeasureBufferMode","_currentArea","areaCircle","checkAndFinishPolygon","tentativeFeature","onUpdateCursor","CustomMeasureDistanceMode","MeasureDistanceMode","_currentDistance","stopPropagation","clickSequenceLength","_currentTooltips","MAP_MEASURE_LAYER_ID","DEFAULT_LAYER_PROPS","_subLayerProps","fontFamily","fontWeight","getSize","lineHeight","getPixelOffset","getTextAnchor","getAlignmentBaseline","guides","DEFAULT_COLORS","DEFAULT_PROPS","centimeter","milimeter","yard","MapMeasurementUnitArea","squareMeter","squareKilometer","squareMile","squareFeet","MapMeasurementUnitTurf","MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES","system","MEASUREMENT_TOOLS_UNITS_DISTANCE","MEASUREMENT_TOOLS_UNITS_AREA","DEFAULT_MEASUREMENT_TOOLS_MODES","buffer","DEFAULT_MEASUREMENT_TOOLS_UNITS","EXCEPTED_LAYER_IDS","LassoTools","defaultType","mapLayers","useShallow","mapLayersVisibilityRef","useRef","maskValues","useMemo","maskFeatureCollection","maskVisible","setData","selectedFeatureIndexes","setSelectedFeatureIndexes","setDataByValues","useCallback","_data","feature","autoIncrement","handleCancelEdit","handleApplyEdit","forEach","crypto","randomUUID","guideColorEditing","pointColorEditing","fillColorEditing","borderFinished","fillFinished","getFilterValue","onClick","_e","isGuide","d","ViewMode","f","Number","GeoJsonLayer","currentLayer","find","MaskExtension","maskId","Controls","getMeasurementToolsLayer","guideColor","textOptions","_distance","outlineColor","outlineWidth","fontSettings","sdf","smoothing","getText","with","createMeasurementToolsStore","measurements","clearLayerOnStart","setFinished","setDistance","setUnit","setLocale","setPositions","MeasurementToolsContext","MeasurementToolsProvider","useMeasurementToolsState","useMeasurementTools","_setDistance","distance_0","_setVisibility","_setModeSelected","state_8","_setFinished","finished_0","state_10","_setLocale","locale_0","state_12","_setInstance","modeInstance_0","state_14","_setPositions","positions_0","state_16","_setUnit","_temp8","unit_0","clearLayer","enabled_1","toggleLayer","state_17","state_15","state_13","state_11","state_9","MeasurementToolsControl","_toggleLayer","ModeClass","enable","MeasurementTools","l_0","useLayers","layersMap","defaultLastLayerOrder","sortLayers","sortedLayers","sort","a","b","order","Infinity","lastLayers","ZOOM_DEBOUNCE_MS","MapComponent","timerRef","computedLayers","callback","clearInterval","setTimeout","onAfterRender","handleAfterRender","_onDragEnd","onDragEnd","handleDragEnd","m","w","B","O","post","Method","INIT","LOAD_GEOJSON","GET_FORMULA","GET_HISTOGRAM","GET_CATEGORIES","GET_SCATTER","GET_TABLE","GET_TIME_SERIES","GET_RANGE","GET_AGGREGATIONS","GET_EXTENT","geojsonFeatures","geojson","uniqueIdProperty","updatedProperties","String","WidgetGeoJsonSourceImpl","WidgetSource","_filterFeaturesBySpatial","booleanIntersects","loadGeoJSON","getFeatures","Promise","reject","getFormula","column","AggregationTypes","Count","joinOperation","filters","filterOwner","filteredFeatures","_getFilteredFeatures","resolve","Custom","assertColumn","targetOperation","aggregationFunctions","assert","getHistogram","ticks","histogram","valuesColumns","normalizeColumns","getCategories","operationColumn","othersThreshold","orderBy","rawResult","groupValuesByColumn","keysColumn","rows","name","OTHERS_CATEGORY_NAME","metadata","others","getScatter","xAxisColumn","yAxisColumn","xAxisJoinOperation","yAxisJoinOperation","scatterPlot","xAxisColumns","yAxisColumns","getTable","columns","searchFilterColumn","searchFilterText","sortBy","sortDirection","sortByColumnType","offset","limit","totalCount","console","warn","row","toLowerCase","applySorting","sortByDirection","Math","min","srcRow","dstRow","getTimeSeries","stepSize","groupValuesByDateColumn","groupType","getRange","max","getAggregations","aggregations","usedAliases","alias","aliasKey","has","add","getExtent","_bbox","bbox","featureCollection","_features","applyFilters","getApplicableFilters","filtersLogicalOperator","condition","message","columnArgs","Array","flat","featureKeys","invalidColumns","isArray","WidgetGeoJsonSource","_localImpl","_workerImpl","_workerEnabled","_workerNextRequestId","widgetWorker","Worker","terminate","_getWorker","addEventListener","error","postMessage","method","params","_executeWorkerMethod","signal","worker","requestId","onMessage","response","aborted","ok","onAbort","reason","promise","_resolve","_reject","finally","removeEventListener","useSourceStore","devtools","sources","setSource","widgetClient","widgets","previousSource","newSource","apiBaseUrl","DEFAULT_CARTO_API_URL","clientId","DEFAULT_CLIENT_ID","apiVersion","DEFAULT_CARTO_API_VERSION","getWidgetSource","removeSource","setFilters","newFilters","currentFilters","addFilter","removeFilters","owner","removeFilter","invalidateSourcesCache","ids","timeout","maxAge","headers","useSource","useSources","useFilters","useSourceWithFilters","getFilterValues","getSpatialDataFallback","fallback","split","spatialDataType","spatialDataColumn","query","WidgetQuerySource","accessToken","sqlQuery","table","WidgetTableSource","tableName","tileset","spatialDataBounds","WidgetTilesetSource","tileFormat","TileFormat","BINARY","raster","rasterMetadata","WidgetRasterSource","connectionName","option","useFiltersMerged","sourcesIdOrArgsOrSourceId","additionalFilterOrUndefined","sourceId","sourcesId","additionalFilter","isSingleSource","sourcesArray","_filters","_additionalFilter","filterSet","computedFilters","mergedFilters","acc_0","filter_0","useWidgetModel","accessTokenOrArgs","sourcesIdOrUndefined","widgetModel","widgetModels","RELEVANT_HEADERS","getRelevantHeaders","relevantEntries","entries","lowerKey","JSON","stringify","useQueryKey","queryKeyPrefix","queryParametersMemo","relevantHeadersMemo","currentSourceId","relevantHeaders_0","relevantHeaders","queryKeys","source_0","queryParameters","resolvePropertyForSource","sourceIndex","totalSources","propertyName","at","resolveColumnForSource","useCommonModel","widgetProps","baseQueryKeys","mergedFiltersMemo","resolvedColumn","resolvedOperationExp","operationExp","resolvedOperationColumn","resolvedProps","mergedWidgetPropsMemo","index_0","resolvedWidgetProps","enhancedKey","filterMemo","enhancedQueryKeys","queryKey","createModel","getWidgetMethod","useModelHook","useQueryProps","_sourcesId","queryFn","_widgetModel","widgetMethod","requestOptions","queries","combine","isLoading","isFetching","isError","isSuccess","status","_temp9","fetchStatus","_temp0","_temp1","isPending","_temp10","isStale","_temp11","isRefetching","_temp12","isFetched","_temp13","isFetchedAfterMount","_temp14","isRefetchError","_temp15","isLoadingError","_temp16","isPlaceholderData","_temp17","failureCount","_temp18","dataUpdatedAt","_temp19","errorUpdatedAt","_temp20","refetch","all","_temp21","isPaused","_temp22","failureReason","_temp23","errorUpdateCount","_temp24","isEnabled","_temp25","_temp26","useQueries","r_25","r","r_24","r_23","r_22","r_21","r_20","r_19","r_18","r_17","r_16","r_15","r_14","r_13","r_12","r_11","r_10","r_9","r_7","r_8","r_5","r_6","r_4","r_3","r_2","r_1","r_0","ModelComponent","queryResult","useAggregations","AggregationsModel","adaptedAggregations","agg","transformAggregationsToSql","adaptedParams","aggregationExp","useCategories","CategoriesModel","useFeatures","FeaturesModel","useFormula","FormulaModel","useHistogram","HistogramModel","useRange","RangeModel","useScatter","ScatterModel","useTable","TableModel","useTimeSeries","TimeSeriesModel","clientID","MapsProvider","lassoTools","measureTools","useLegend","layersId","toReversed","layersById","id_0","legend_0","onChangeVisibility","id_1","collapsed","onChangeRowCollapse","id_2","opacity","onChangeOpacity","useMapScreenshot","screenshot","setScreenshot","setIsLoading","setError","deckInstanceFn","overlayInstanceFn","_takeScreenshot","canvas","createElement","getContext","_overlayInstance","getRenderingType","html2canvas","useCORS","drawImage","redraw","getMap","getCanvas","toDataURL","err","takeScreenshot","useSpatialFilter","viewportSpatialFilter","useViewportSpatialFilter","lassoToolsSpatialFilter","useLassoToolsSpatialFilter","staticSpatialFilter","useStaticSpatialFilter","createViewportSpatialFilter","_values","multiPolygon","flatMap","geom","formatterTypes","currency","number","FORMATTERS","format","formatCurrency","toLocaleString","objectToHtml","formatters","includeColumns","showColumnName","title","getColumnName","_getColumnName","getFieldHtml","_getFieldHtml","getTitle","_getTitle","getValue","_getValue","header","body","cur","formatter","valueTransformed","columnName","getFormatterFunction","propName","mappingLegendMeridian","collapsible","helperText","variables","showOpacityControl","opacityControl","switchable","geometryTypeHandlers","Point","g","LineString","lineString","Polygon","MultiPoint","multiPoint","MultiLineString","multiLineString","MultiPolygon","getCentroid","handler","ZoomControls","zoom_0","getQueryStats","baseUrl","connection","attribute","fetcherOptions","other","statsUrl","executeFetch","RequestMethods","q","getTableStats","useStats","retrieveStatsBySource","select","useQuery","startsWith","_source","getStatsFromTileset","getStatsFromGeoJSON","tileJson","vectorTilesetSource","tilestats","attributes","columnStats","p","getNumberStats","getStringStats","_response","sum","quantiles","j","qIndex","floor","avg","valuesCount","categories","count","category","frequency"],"mappings":"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","x_google_ignoreList":[7]}
1
+ {"version":3,"file":"index.js","sources":["../src/const.ts","../src/helpers.ts","../src/maps/map-libre.tsx","../src/maps/deck-overlay.tsx","../src/maps/google-maps.tsx","../src/maps/deckgl.tsx","../src/providers/map/const.ts","../../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../src/providers/map/store.ts","../src/providers/map/provider.tsx","../src/basemap-controls.tsx","../src/editable/const.ts","../src/editable/lasso-tools/modes/custom-edit-mode.class.tsx","../src/editable/lasso-tools/const.ts","../src/providers/layers/store.ts","../src/use-event-manager.ts","../src/editable/custom-editable-geojson-layer.tsx","../src/editable/lasso-tools/layer.tsx","../src/editable/lasso-tools/provider/store.ts","../src/editable/lasso-tools/provider/provider.tsx","../src/editable/lasso-tools/lasso-tools-control.tsx","../src/editable/lasso-tools/util.ts","../src/editable/measurement-tools/utils.ts","../src/editable/measurement-tools/modes/custom-measurement-area.class.tsx","../src/editable/measurement-tools/modes/custom-measurement-buffer.class.tsx","../src/editable/measurement-tools/modes/custom-measurement-distance.class.tsx","../src/editable/measurement-tools/const.ts","../src/editable/lasso-tools/lasso-tools.tsx","../src/editable/measurement-tools/layer.tsx","../src/editable/measurement-tools/provider/store.ts","../src/editable/measurement-tools/provider/provider.tsx","../src/editable/measurement-tools/use-measurement-tools.tsx","../src/editable/measurement-tools/measurement-tools-control.tsx","../src/editable/measurement-tools/measurement-tools.tsx","../src/use-layers.ts","../src/utils/sort-layers.ts","../src/maps/map.tsx","../../services/dist/index.js","../src/providers/sources/widgets/const.ts","../src/providers/sources/widgets/geojson-features.ts","../src/providers/sources/widgets/widget-geojson-source-impl.ts","../src/providers/sources/widgets/widget-geojson-source.ts","../src/providers/sources/store.ts","../src/models/utils/use-filters-merged.tsx","../src/models/utils/use-widget-model.ts","../src/models/utils/get-relevant-headers.tsx","../src/models/utils/use-query-key.ts","../src/models/utils/resolve-property-for-source.ts","../src/models/utils/use-common-model.ts","../src/models/utils/create-model.tsx","../src/models/aggregations.tsx","../src/models/categories.tsx","../src/models/features.tsx","../src/models/formula.tsx","../src/models/histogram.tsx","../src/models/range.tsx","../src/models/scatter.tsx","../src/models/table.tsx","../src/models/time-series.tsx","../src/providers/sources/const.ts","../src/provider.tsx","../src/use-legend.ts","../src/use-map-screenshot.ts","../src/use-spatial-filter.ts","../src/utils/object-to-html/const.ts","../src/utils/object-to-html/object-to-html.contants.ts","../src/utils/object-to-html/object-to-html.ts","../src/utils/mapping-meridian.ts","../src/utils/geometry/get-centroid.ts","../src/zoom-controls.tsx","../src/stats/get-query-stats.ts","../src/stats/get-table-stats.ts","../src/stats/use-stats.tsx"],"sourcesContent":["import type { BasemapKey, BasemapType } from './types'\n\n/**\n * Google Maps basemap types.\n */\nexport const GmapsBasemap = {\n roadmap: 'roadmap',\n satellite: 'satellite',\n hybrid: 'hybrid',\n} as const\n\n/**\n * CARTO basemap names.\n */\nexport const CartoBasemaps = {\n darkMatter: 'darkMatter',\n positron: 'positron',\n voyager: 'voyager',\n} as const\n\nexport const CartoBasemapURL = {\n [CartoBasemaps.positron]:\n 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',\n [CartoBasemaps.voyager]:\n 'https://basemaps.cartocdn.com/gl/voyager-gl-style/style.json',\n [CartoBasemaps.darkMatter]:\n 'https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json',\n}\n\nexport const MapsTypes = {\n maplibre: 'maplibre',\n googleMaps: 'google-maps',\n}\n\nexport const MAPS_BASEMAP: Record<\n BasemapKey,\n {\n url?: string\n dark?: boolean\n type: BasemapType\n }\n> = {\n [CartoBasemaps.positron]: {\n url: CartoBasemapURL[CartoBasemaps.positron],\n type: MapsTypes.maplibre,\n },\n [CartoBasemaps.voyager]: {\n url: CartoBasemapURL[CartoBasemaps.voyager],\n type: MapsTypes.maplibre,\n },\n [CartoBasemaps.darkMatter]: {\n url: CartoBasemapURL[CartoBasemaps.darkMatter],\n type: MapsTypes.maplibre,\n dark: true,\n },\n [GmapsBasemap.roadmap]: {\n type: MapsTypes.googleMaps,\n },\n [GmapsBasemap.satellite]: {\n type: MapsTypes.googleMaps,\n },\n [GmapsBasemap.hybrid]: {\n type: MapsTypes.googleMaps,\n },\n}\n","import type { Tooltip } from './types'\n\nexport function getCursorDefault({\n isDragging,\n isHovering,\n}: {\n isHovering: boolean\n isDragging: boolean\n}) {\n return isDragging ? 'grabbing' : isHovering ? 'pointer' : 'grab'\n}\n\nexport function getTooltipDefault(info: Tooltip) {\n if (!info.html) return null\n\n return {\n html: `<div class='map-tooltip__content'>${info.html}</div>`,\n style: {\n padding: '0',\n background: 'none',\n },\n }\n}\n","import { Map, MapProvider, useMap as useMapLibre } from 'react-map-gl/maplibre'\nimport type { DeckGLComponentProps, InstanceRef } from '../types'\nimport DeckGL from '@deck.gl/react'\nimport { useImperativeHandle, useMemo, type RefObject } from 'react'\n\nexport function MapLibre({\n instanceRef,\n overlayRef,\n controller,\n id,\n layers,\n mapStyle,\n parameters,\n getCursor,\n getTooltip,\n onLoad,\n onViewStateChange,\n ...rest\n}: Omit<DeckGLComponentProps, 'onLoad'> & {\n onLoad: (event: { type: 'deckgl' | 'load'; value: boolean }) => void\n mapStyle: string | undefined\n}) {\n const _layers = useMemo(\n () =>\n layers\n .filter((l) => !!l?.type)\n .map(({ type: Layer, props }) => new Layer!(props)),\n [layers],\n )\n\n return (\n <MapProvider>\n <div className='deckgl-map'>\n <DeckGL\n controller={controller}\n id={id}\n ref={instanceRef as RefObject<InstanceRef>}\n layers={_layers}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={() =>\n onLoad({\n type: 'deckgl',\n value: true,\n })\n }\n onViewStateChange={onViewStateChange}\n parameters={{\n // @ts-expect-error - `depthTest` is not in the types\n depthTest: false,\n ...parameters,\n }}\n {...rest}\n >\n <MapReferences overlayRef={overlayRef} />\n <Map\n reuseMaps={false}\n mapStyle={mapStyle}\n onLoad={() =>\n onLoad({\n type: 'load',\n value: true,\n })\n }\n onRender={() => {\n const $el = document.querySelector('.maplibregl-compact-show')\n $el?.classList.remove('maplibregl-compact-show')\n }}\n />\n </DeckGL>\n </div>\n </MapProvider>\n )\n}\n\nfunction MapReferences({\n overlayRef,\n}: {\n overlayRef: DeckGLComponentProps['overlayRef']\n}) {\n const { default: mapLibre } = useMapLibre()\n\n useImperativeHandle(overlayRef, () => {\n return mapLibre\n }, [mapLibre])\n\n return null\n}\n","import { useMap } from '@vis.gl/react-google-maps'\nimport { useEffect, useImperativeHandle, useMemo } from 'react'\n\nimport {\n GoogleMapsOverlay,\n type GoogleMapsOverlayProps,\n} from '@deck.gl/google-maps'\nimport type { DeckGLComponentProps } from '../types'\n\n/**\n * A very simple implementation of a component that renders a list of deck.gl layers\n * via the GoogleMapsOverlay into the <Map> component containing it.\n */\nexport const DeckGlOverlay = (\n props: GoogleMapsOverlayProps & {\n instanceRef?: DeckGLComponentProps['instanceRef']\n },\n) => {\n // the GoogleMapsOverlay can persist throughout the lifetime of the DeckGlOverlay\n const deck = useMemo(\n () =>\n new GoogleMapsOverlay({\n interleaved: true,\n }),\n [],\n )\n\n // add the overlay to the map once the map is available\n const map = useMap()\n\n useImperativeHandle(\n props.instanceRef,\n () => {\n return deck\n },\n [deck],\n )\n\n useEffect(() => {\n deck.setMap(map)\n\n return () => {\n deck.finalize()\n }\n }, [deck, map])\n\n // whenever the rendered data changes, the layers will be updated\n useEffect(() => {\n deck.setProps(props)\n }, [deck, props])\n\n // no dom rendered by this component\n return null\n}\n","import {\n APIProvider,\n Map,\n useMap,\n type MapCameraChangedEvent,\n} from '@vis.gl/react-google-maps'\nimport type { DeckGLComponentProps, InstanceRef } from '../types'\nimport { useCallback, useImperativeHandle, useMemo } from 'react'\nimport { DeckGlOverlay } from './deck-overlay'\nimport type { MapViewState, ViewStateChangeParameters } from '@deck.gl/core'\nimport type { GoogleMapsOverlay } from '@deck.gl/google-maps'\nimport type { ControllerOptions } from 'node_modules/@deck.gl/core/dist/controllers/controller'\n\nexport function GoogleMaps({\n id,\n instanceRef,\n basemap,\n layers,\n gmapsProps: { apiKey, APIProviderProps, ..._gmapsProps } = { apiKey: '' },\n overlayRef,\n parameters,\n controller,\n onLoad,\n onViewStateChange,\n ...rest\n}: Omit<DeckGLComponentProps, 'onLoad'> & {\n onLoad: (event: { type: 'deckgl' | 'load'; value: boolean }) => void\n}) {\n const _controller: ControllerOptions = useMemo(() => {\n if (typeof controller === 'boolean') {\n return {\n dragPan: controller,\n doubleClickZoom: controller,\n scrollZoom: controller,\n }\n }\n\n const _controller = controller as ControllerOptions\n\n return {\n dragPan: _controller?.dragPan ?? true,\n doubleClickZoom: _controller?.doubleClickZoom ?? true,\n scrollZoom: _controller?.scrollZoom ?? true,\n }\n }, [controller])\n\n const _layers = useMemo(() => {\n return layers\n .filter((l) => !!l?.type)\n .map(({ type: Layer, props }) => new Layer!(props))\n }, [layers])\n\n const mappingGmapsToDeck = useCallback(\n ({ detail: { center, zoom, heading, tilt } }: MapCameraChangedEvent) => {\n return {\n maxZoom: rest.initialViewState?.maxZoom,\n minZoom: rest.initialViewState?.minZoom,\n latitude: center.lat,\n longitude: center.lng,\n zoom: zoom - 1,\n bearing: heading,\n pitch: tilt,\n }\n },\n [rest.initialViewState?.maxZoom, rest.initialViewState?.minZoom],\n )\n\n const handleViewStateChange = useCallback(\n (newViewState: MapViewState) => {\n const _instanceRef = instanceRef?.current as GoogleMapsOverlay\n // @ts-expect-error accessing private property\n const deckInstance = _instanceRef?._deck as InstanceRef['deck']\n\n const viewState = {\n // @ts-expect-error accessing protected props\n ...deckInstance?.viewState,\n ...newViewState,\n }\n\n const _viewState: MapViewState = {\n ...viewState,\n latitude: viewState.latitude,\n longitude: viewState.longitude,\n zoom: viewState.zoom,\n pitch: viewState.pitch,\n bearing: viewState.bearing,\n // @ts-expect-error - `width` and `height` is not in the types\n width: deckInstance?.width,\n height: deckInstance?.height,\n }\n\n onViewStateChange?.({\n viewState: _viewState,\n interactionState: {\n isZooming: true,\n },\n } as ViewStateChangeParameters<MapViewState>)\n },\n [instanceRef, onViewStateChange],\n )\n\n const handleGmapsChange = useCallback(\n (props: MapCameraChangedEvent) => {\n const newViewState = mappingGmapsToDeck(props)\n handleViewStateChange(newViewState)\n },\n [mappingGmapsToDeck, handleViewStateChange],\n )\n\n return (\n <APIProvider apiKey={apiKey} {...APIProviderProps}>\n <div className='deckgl-map'>\n <Map\n id={id}\n mapTypeId={basemap}\n disableDefaultUI={true}\n {..._gmapsProps}\n center={{\n lat: rest.initialViewState?.latitude ?? 0,\n lng: rest.initialViewState?.longitude ?? 0,\n }}\n zoom={(rest.initialViewState?.zoom ?? 0) + 1}\n maxZoom={(rest.initialViewState?.maxZoom ?? 23) + 1}\n minZoom={(rest.initialViewState?.minZoom ?? 0) + 1}\n tilt={rest.initialViewState?.pitch}\n heading={rest.initialViewState?.bearing}\n onTilesLoaded={() => {\n onLoad({\n type: 'load',\n value: true,\n })\n handleViewStateChange(rest.initialViewState!)\n }}\n onBoundsChanged={handleGmapsChange}\n onZoomChanged={handleGmapsChange}\n scrollwheel={\n typeof _controller.scrollZoom === 'boolean'\n ? _controller.scrollZoom\n : !!_controller.scrollZoom\n }\n gestureHandling={!_controller.dragPan ? 'none' : 'greedy'}\n disableDoubleClickZoom={!_controller.doubleClickZoom}\n >\n <MapReferences id={id} overlayRef={overlayRef} />\n <DeckGlOverlay\n id={id}\n instanceRef={instanceRef}\n layers={_layers}\n onLoad={() => {\n onLoad({\n type: 'deckgl',\n value: true,\n })\n }}\n parameters={{\n // @ts-expect-error - `depthTest` is not in the types\n depthTest: false,\n ...parameters,\n }}\n {...rest}\n />\n </Map>\n </div>\n </APIProvider>\n )\n}\n\nfunction MapReferences({\n id,\n overlayRef,\n}: {\n id: DeckGLComponentProps['id']\n overlayRef: DeckGLComponentProps['overlayRef']\n}) {\n const gmaps = useMap(id)!\n\n useImperativeHandle(overlayRef, () => {\n return gmaps\n }, [gmaps])\n\n return null\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { CartoBasemaps, MAPS_BASEMAP, MapsTypes } from '../const'\nimport type { DeckGLComponentProps } from '../types'\nimport { getCursorDefault, getTooltipDefault } from '../helpers'\nimport { MapLibre } from '../maps/map-libre'\nimport { GoogleMaps } from '../maps/google-maps'\n\nexport function DeckGLComponent({\n instanceRef,\n overlayRef,\n basemap = CartoBasemaps.positron,\n controller = true,\n id = 'deck-gl-map',\n layers = [],\n gmapsProps,\n getCursor = getCursorDefault,\n getTooltip = getTooltipDefault,\n onLoad,\n onViewStateChange = () => null,\n ...rest\n}: DeckGLComponentProps) {\n const [isLoaded, setLoaded] = useState([false, false])\n\n const { url: mapStyle, type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n const handleLoad = useCallback(\n (e: { type: 'deckgl' | 'load'; value: boolean }) => {\n const index = e.type === 'deckgl' ? 0 : 1\n setLoaded((state) =>\n state.map((loaded, i) => (i === index ? e.value : loaded)),\n )\n },\n [],\n )\n\n useEffect(() => {\n return () => {\n handleLoad({\n type: 'load',\n value: false,\n })\n handleLoad({\n type: 'deckgl',\n value: false,\n })\n }\n }, [handleLoad])\n\n useEffect(() => {\n const isAllLoaded = isLoaded.every((loaded) => loaded)\n onLoad?.(isAllLoaded)\n }, [isLoaded, onLoad])\n\n if (isGmaps) {\n return (\n <GoogleMaps\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n controller={controller}\n id={id}\n basemap={basemap}\n layers={layers}\n gmapsProps={gmapsProps}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={handleLoad}\n onViewStateChange={onViewStateChange}\n {...rest}\n />\n )\n }\n\n return (\n <MapLibre\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n controller={controller}\n id={id}\n layers={layers}\n mapStyle={mapStyle}\n getCursor={getCursor}\n getTooltip={getTooltip}\n onLoad={handleLoad}\n onViewStateChange={onViewStateChange}\n {...rest}\n />\n )\n}\n","import { FlyToInterpolator, type MapViewState } from '@deck.gl/core'\n\nexport const transitionFlyConfig: Pick<\n MapViewState,\n 'transitionDuration' | 'transitionInterpolator'\n> = {\n transitionDuration: 'auto',\n transitionInterpolator: new FlyToInterpolator({\n curve: 2,\n }),\n}\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","import { createStore, type StateCreator } from 'zustand'\nimport {\n WebMercatorViewport,\n type MapViewState,\n type PickingInfo,\n} from '@deck.gl/core'\nimport type {\n CommonSlice,\n MapProviderProps,\n MapStore,\n MapSlice,\n ViewStateSlice,\n AreLayerLoadedSlice,\n SpatialFilterSlice,\n LayerActionsSlice,\n} from './types'\nimport { transitionFlyConfig } from './const'\nimport type { DeckGLComponentProps, InstanceRef } from '../../types'\nimport { MAPS_BASEMAP } from '../../const'\nimport type { GoogleMapsOverlay } from '@deck.gl/google-maps'\nimport deepmerge from 'deepmerge'\nimport type { MjolnirPointerEvent } from 'mjolnir.js'\n\nconst createMapSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const { id, basemap } = curr\n acc[id] = {\n isLoaded: false,\n basemap,\n instanceRef: {\n current: {} as InstanceRef,\n },\n overlayRef: {\n current: null,\n },\n layers: curr.layers ?? [],\n controller: curr.controller ?? true,\n }\n return acc\n },\n {} as MapSlice['maps'],\n )\n\n return ((set, get) => ({\n maps: defaultProps,\n setBasemap: (id, basemap) =>\n set((state) => {\n const { type: currentType } = MAPS_BASEMAP[state.maps[id]!.basemap]\n const { type: newType } = MAPS_BASEMAP[basemap]\n\n const isLoaded = currentType === newType && !!state.maps[id]?.isLoaded\n\n return {\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n isLoaded,\n basemap,\n },\n },\n }\n }),\n setLoad: (id, isLoaded) =>\n set((state) => ({\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n isLoaded,\n },\n },\n })),\n getOverlayInstance: (id) => {\n const store = get()\n return store.maps[id]?.overlayRef?.current\n },\n getDeckInstance: (id) => {\n const store = get()\n const current = store.maps[id]?.instanceRef?.current\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return (\n // @ts-expect-error accessing protected props\n (current as InstanceRef)?.deck ?? (current as GoogleMapsOverlay)?._deck\n )\n },\n getViewState: (id) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n\n // @ts-expect-error - viewState is not in the types\n if (!deck?.viewState) return\n\n const { width = 0, height = 0 } = deck\n return {\n // @ts-expect-error - viewState is not in the types\n ...deck.viewState,\n // @ts-expect-error - viewState is not in the types\n width: (deck.viewState.width ?? width) as number,\n // @ts-expect-error - viewState is not in the types\n height: (deck.viewState.height ?? height) as number,\n }\n },\n getViewports: (id, rect) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n return deck?.getViewports(rect)\n },\n getViewport: (id, index = 0, rect) => {\n const store = get()\n const deck = store.getDeckInstance(id)\n return deck?.getViewports(rect)?.[index]\n },\n getBounds: (id, bounds, options) => {\n const store = get()\n if (!store.maps?.[id]?.isLoaded) return\n\n const viewState = store.getViewState(id)\n\n if (!viewState) return\n\n const viewport = new WebMercatorViewport(viewState)\n\n const newBounds = viewport.fitBounds(bounds, options?.boundsOptions)\n\n return {\n latitude: newBounds.latitude,\n longitude: newBounds.longitude,\n zoom: newBounds.zoom,\n ...options?.viewStateOptions,\n }\n },\n addLayers: (id, layers) =>\n set((state) => {\n const maps = { ...state.maps }\n const _layers = maps[id]?.layers ?? []\n\n const set = new Set([..._layers, ...layers])\n\n maps[id] = {\n ...maps[id]!,\n layers: [...set],\n }\n return { maps }\n }),\n removeLayers: (id, layers) =>\n set((state) => {\n const maps = { ...state.maps }\n const _layers = maps[id]?.layers ?? []\n maps[id] = {\n ...maps[id]!,\n layers: _layers.filter((layer) => !layers.includes(layer)),\n }\n return { maps }\n }),\n getController: (id) => {\n const store = get()\n return store.maps[id]?.controller ?? {}\n },\n setController: (id, controller) =>\n set((state) => {\n const currentController = state.maps[id]?.controller ?? {}\n\n const _currentController =\n typeof currentController === 'boolean' ? {} : currentController\n\n const newController =\n !controller || typeof controller === 'boolean'\n ? controller\n : deepmerge<DeckGLComponentProps['controller']>(\n _currentController,\n controller,\n )\n\n return {\n maps: {\n ...state.maps,\n [id]: {\n ...state.maps[id]!,\n controller: newController,\n },\n },\n }\n }),\n })) as StateCreator<MapSlice, [], [], MapSlice>\n}\n\nconst createAreLayersLoaded = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const { id } = curr\n acc[id] = false\n return acc\n },\n {} as AreLayerLoadedSlice['areLayersLoaded'],\n )\n\n return ((set) => ({\n areLayersLoaded: defaultProps,\n setLayersLoad: (id, isLoaded) =>\n set((state) => ({\n areLayersLoaded: {\n ...state.areLayersLoaded,\n [id]: isLoaded,\n },\n })),\n })) as StateCreator<AreLayerLoadedSlice, [], [], AreLayerLoadedSlice>\n}\n\nconst createViewStateSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const initialViewState = curr.initialViewState ?? curr.viewState\n acc.initialViewStates[curr.id] = initialViewState\n acc.viewStates[curr.id] = initialViewState\n acc.viewports[curr.id] = null\n return acc\n },\n {\n viewStates: {} as ViewStateSlice['viewStates'],\n viewports: {} as ViewStateSlice['viewports'],\n initialViewStates: {} as ViewStateSlice['initialViewStates'],\n },\n )\n\n return ((set, get) => ({\n viewports: defaultProps.viewports,\n initialViewStates: defaultProps.initialViewStates,\n updateViewPort: (id) => {\n const store = get() as MapStore\n if (!store.maps[id]?.isLoaded) return\n\n const viewState = store.getViewState(id)\n\n if (!viewState) return\n\n const viewport = new WebMercatorViewport(viewState)\n set((state) => ({\n viewports: {\n ...state.viewports,\n [id]: viewport,\n },\n }))\n },\n viewStates: defaultProps.viewStates,\n setViewState: (id, viewState) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id],\n ...viewState,\n },\n },\n })),\n setInitialViewState: (id, viewState) =>\n set((state) => ({\n initialViewStates: {\n ...state.initialViewStates,\n [id]: viewState,\n },\n })),\n setZoom: (id, zoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n zoom,\n },\n },\n })),\n setMinZoom: (id, minZoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n minZoom,\n },\n },\n })),\n setMaxZoom: (id, maxZoom) =>\n set((state) => ({\n viewStates: {\n ...state.viewStates,\n [id]: {\n ...state.viewStates[id]!,\n maxZoom,\n },\n },\n })),\n })) as StateCreator<ViewStateSlice, [], [], ViewStateSlice>\n}\n\nconst createCommonSlice = ((_, get) => ({\n fitBounds: (id, bounds, options) => {\n const store = get()\n const newViewState = store.getBounds(id, bounds, options)\n\n if (!newViewState) return\n\n store.setViewState(id, newViewState)\n store.updateViewPort(id)\n },\n flyTo: (id, target, options = {}) => {\n const store = get()\n\n const viewStateOptions = {\n ...transitionFlyConfig,\n ...options?.viewStateOptions,\n }\n\n // Merge with current view state and options\n const finalViewState = {\n ...target,\n ...viewStateOptions,\n } as MapViewState\n store.setViewState(id, finalViewState)\n store.updateViewPort(id)\n },\n loadInitialViewState: (id, initialViewState) => {\n const store = get()\n store.setInitialViewState(id, initialViewState)\n store.flyTo(id, initialViewState, {\n viewStateOptions: { transitionDuration: 0 },\n })\n },\n resetViewState: (id: string) => {\n const store = get()\n const initialViewStates = store.initialViewStates\n if (!initialViewStates[id]) return\n store.flyTo(id, initialViewStates[id])\n },\n})) as StateCreator<MapStore, [], [], CommonSlice>\n\nconst createSpatialFilterSlice = (initProps: MapProviderProps['values']) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n acc[curr.id] = curr.spatialFilter ?? {} // Initialize every mapId to an empty record\n return acc\n },\n {} as SpatialFilterSlice['spatialFilter'],\n )\n return ((set) => ({\n spatialFilter: defaultProps,\n setSpatialFilter: (mapId, id, value) => {\n set((state) => {\n const spatialFilter = structuredClone(state.spatialFilter)\n\n spatialFilter[mapId] = {\n ...spatialFilter[mapId],\n [id]: value,\n }\n\n return {\n spatialFilter,\n }\n })\n },\n removeSpatialFilter: (mapId, id) => {\n set((state) => {\n const spatialFilter = structuredClone(state.spatialFilter)\n if (spatialFilter[mapId]) {\n delete spatialFilter[mapId][id]\n }\n return {\n spatialFilter,\n }\n })\n },\n })) as StateCreator<SpatialFilterSlice, [], [], SpatialFilterSlice>\n}\n\nconst createLayerActionsSlice = ((_, get) => ({\n setLayerHover: (mapId, layerId, geometry) => {\n const store = get() as MapStore\n const deckInstance = store.getDeckInstance(mapId)\n const viewport = store.getViewport(mapId)\n\n // @ts-expect-error - widgetManager is protected\n const widgetManager = deckInstance?.widgetManager\n\n if (!widgetManager || !viewport) return\n\n const [x, y] = viewport.project(geometry)\n\n if (x == null || y == null || isNaN(x) || isNaN(y)) return\n\n const picked = deckInstance.pickObject({\n x,\n y,\n radius: 5,\n layerIds: [layerId],\n })\n\n if (!picked) return\n\n const object: PickingInfo = {\n ...picked,\n x,\n y,\n }\n\n const event = new MouseEvent('mouseenter') as unknown as MjolnirPointerEvent\n\n picked.layer?.onHover?.(object, event)\n widgetManager.onHover?.(object, event)\n },\n clearLayersHover: (mapId) => {\n const store = get() as MapStore\n const deckInstance = store.getDeckInstance(mapId)\n // @ts-expect-error - widgetManager is protected\n const widgetManager = deckInstance?.widgetManager\n\n if (!widgetManager) return\n\n const event = new MouseEvent('mouseleave') as unknown as MjolnirPointerEvent\n\n widgetManager.onHover?.({} as PickingInfo, event)\n },\n})) as StateCreator<LayerActionsSlice, [], [], LayerActionsSlice>\n\nexport const createMapStore = (initProps: MapProviderProps['values']) => {\n return createStore<MapStore>()((...args) => {\n return {\n ...createMapSlice(initProps)(...args),\n ...createAreLayersLoaded(initProps)(...args),\n ...createViewStateSlice(initProps)(...args),\n ...createSpatialFilterSlice(initProps)(...args),\n ...createCommonSlice(...args),\n ...createLayerActionsSlice(...args),\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createMapStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type { MapProviderProps, MapStore } from './types'\n\nconst MapContext = createContext<StoreApi<MapStore>>({} as StoreApi<MapStore>)\n\nexport function MapProvider({\n children,\n values,\n}: PropsWithChildren<MapProviderProps>) {\n const [storeRef] = useState(createMapStore(values))\n\n return <MapContext.Provider value={storeRef}>{children}</MapContext.Provider>\n}\n\nexport function useMapStore<T>(selector: (state: MapStore) => T): T {\n const store = useContext(MapContext)\n if (!Object.keys(store).length)\n throw new Error('Missing MapProvider in the tree')\n return useStore(store, selector)\n}\n","import type { BasemapsControlsProps, MapComponentProps } from './types'\nimport { useMapStore } from './providers/map/provider'\nimport { useCallback } from 'react'\n\nexport function BasemapsControls({ children, mapId }: BasemapsControlsProps) {\n const { basemap } = useMapStore((state) => state.maps[mapId]!)\n const setBasemap = useMapStore((state) => state.setBasemap)\n\n return children({\n basemap,\n setBasemap: useCallback(\n (basemap: NonNullable<MapComponentProps['basemap']>) =>\n setBasemap(mapId, basemap),\n [setBasemap, mapId],\n ),\n })\n}\n","export const EditType = {\n addFeature: 'addFeature',\n addTentativePosition: 'addTentativePosition',\n updateTentativeFeature: 'updateTentativeFeature',\n cancel: 'cancelFeature',\n finish: 'finish',\n addPosition: 'addPosition',\n} as const\n","import {\n CompositeMode,\n ModifyMode,\n TranslateMode,\n type FeatureCollection,\n type ModeProps,\n} from '@deck.gl-community/editable-layers'\nimport { EditType } from '../../../editable/const'\n\nexport class CustomCompositeEditMode extends CompositeMode {\n constructor() {\n super([new TranslateMode(), new ModifyMode()])\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n super.handleKeyUp(event, props)\n if (event.key === 'Enter') {\n this.resetClickSequence()\n props.onEdit({\n updatedData: props.data,\n editType: EditType.addFeature,\n editContext: {},\n })\n }\n }\n}\n","import {\n DrawPolygonMode,\n DrawRectangleMode,\n DrawCircleFromCenterMode,\n DrawPolygonByDraggingMode,\n GeoJsonEditMode,\n} from '@deck.gl-community/editable-layers'\nimport type { LassoToolsMode, LassoToolsModes } from '../../types'\nimport { CustomCompositeEditMode } from './modes/custom-edit-mode.class'\nimport type { DefaultLassoToolsProps } from './types'\nimport { DataFilterExtension } from '@deck.gl/extensions'\n\nexport const MAP_LASSO_TOOLS_LAYER_ID = 'lassoLayer'\nexport const MAP_MASK_LAYER_ID = 'maskLayer'\n\nexport const DEFAULT_LASSO_TOOLS_LAYER_PROPS = {\n id: MAP_LASSO_TOOLS_LAYER_ID,\n billboard: false,\n editHandlePointRadiusUnits: 'pixels',\n editHandlePointRadiusMinPixels: 1,\n editHandlePointRadiusMaxPixels: 12,\n editHandlePointStrokeWidth: 3,\n getEditHandlePointRadius: 3,\n stroked: true,\n filled: true,\n lineWidthUnits: 'pixels',\n getLineWidth: 2,\n lineWidthMinPixels: 2,\n} as const\n\nexport const DEFAULT_LASSO_TOOLS_COLORS: DefaultLassoToolsProps['styles']['colors'] =\n {\n editing: {\n border: [3, 111, 226, 255],\n fill: [3, 111, 226, 20.4],\n point: [255, 255, 255, 255],\n },\n finished: {\n border: [71, 219, 153, 255],\n fill: [71, 219, 153, 0],\n },\n } as const\n\nexport const DEFAULT_LASSO_TOOLS_PROPS: DefaultLassoToolsProps = {\n styles: {\n colors: {\n editing: DEFAULT_LASSO_TOOLS_COLORS.editing,\n finished: DEFAULT_LASSO_TOOLS_COLORS.finished,\n },\n },\n labels: {\n mask: 'Mask',\n },\n} as const\n\nconst EXTENSION_FILTER = [new DataFilterExtension({ filterSize: 1 })]\n\nexport const DEFAULT_MASK_LAYER_PROPS = {\n id: MAP_MASK_LAYER_ID,\n operation: 'mask',\n pickable: false,\n visible: true,\n extensions: EXTENSION_FILTER,\n filterRange: [1, 1],\n}\n\nexport const DEFAULT_LASSO_TOOLS_MODES: LassoToolsModes<\n LassoToolsMode,\n GeoJsonEditMode\n> = {\n polygon: {\n value: 'polygon',\n mode: DrawPolygonMode,\n },\n rectangle: {\n value: 'rectangle',\n mode: DrawRectangleMode,\n },\n circle: {\n value: 'circle',\n mode: DrawCircleFromCenterMode,\n },\n lasso: {\n value: 'lasso',\n mode: DrawPolygonByDraggingMode,\n },\n edit: {\n value: 'edit',\n mode: CustomCompositeEditMode,\n },\n} as const\n","import { create } from 'zustand'\nimport type { LayerStore } from './types'\nimport type { LayerExtension } from '@deck.gl/core'\n\nexport const useLayerStore = create<LayerStore>((set, get) => ({\n layers: {},\n setLayer: (id, layer) =>\n set((state) => {\n const layers = { ...state.layers }\n\n const _layer = layers[id] ?? { type: null, props: {} }\n\n const extensions = [\n ...(_layer.props.extensions ?? []),\n ...(layer.props?.extensions ?? []),\n ].reduce((acc, extension) => {\n if (!acc.some((e) => e.equals(extension))) {\n acc.push(extension)\n }\n return acc\n }, [] as LayerExtension[])\n\n const legend =\n !!_layer.legend || !!layer.legend\n ? {\n ..._layer.legend,\n ...layer.legend,\n }\n : undefined\n\n layers[id] = {\n ..._layer,\n ...layer,\n props: {\n id,\n ..._layer.props,\n ...layer.props,\n updateTriggers: {\n ...(_layer.props.updateTriggers ?? {}),\n ...(layer.props?.updateTriggers ?? {}),\n },\n extensions,\n },\n legend,\n }\n\n return { layers }\n }),\n removeLayer: (id) =>\n set((state) => {\n const layers = { ...state.layers }\n delete layers[id]\n return { layers }\n }),\n getLayers: () => get().layers,\n getLayer: (id) => get().layers[id],\n}))\n","import { useEffect } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport { MAPS_BASEMAP, MapsTypes } from './const'\nimport {\n type RecognizerTuple,\n EventManager,\n Pan,\n InputDirection,\n Pinch,\n Tap,\n} from 'mjolnir.js'\nimport type { Layer } from './providers/layers/types'\nimport { useLayerStore } from './providers/layers/store'\nimport type { LayerProps } from '@deck.gl/core'\n\nexport const EVENT_TYPES = [\n 'click',\n 'keyup',\n 'panstart',\n 'panmove',\n 'panend',\n 'pointermove',\n] as const\n\nconst RECOGNIZERS = {\n multipan: [\n Pan,\n { threshold: 10, direction: InputDirection.Vertical, pointers: 2 },\n ],\n pinch: [Pinch, {}, null, ['multipan']],\n click: [Tap, { event: 'click' }, null, ['dblclick']],\n dblclick: [Tap, { event: 'dblclick', taps: 2 }],\n pan: [Pan, { threshold: 1 }, ['pinch'], ['multipan']],\n} as const\n\nexport function useEventManager({\n mapId,\n layerId,\n}: {\n mapId: MapComponentProps['id']\n layerId: NonNullable<Layer['props']['id']>\n}) {\n const basemap = useMapStore((store) => store.maps[mapId]?.basemap)!\n const isLoaded = useMapStore((store) => store.maps[mapId]?.isLoaded)\n const getOverlayInstance = useMapStore((store) => store.getOverlayInstance)\n const setLayer = useLayerStore((state) => state.setLayer)\n\n const { type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n useEffect(() => {\n let eventManager: EventManager | null = null\n\n if (isGmaps && isLoaded) {\n const overlayInstance = getOverlayInstance(mapId) as google.maps.Map\n eventManager = new EventManager(overlayInstance.getDiv(), {\n recognizers: Object.keys(RECOGNIZERS).map((eventName: string) => {\n const [\n RecognizerConstructor,\n defaultOptions,\n recognizeWith,\n requestFailure,\n ] = RECOGNIZERS[eventName as keyof typeof RECOGNIZERS]\n\n const options = { ...defaultOptions, event: eventName }\n\n return {\n recognizer: new RecognizerConstructor(options),\n recognizeWith,\n requestFailure,\n } as RecognizerTuple\n }),\n })\n }\n\n setLayer(layerId, {\n props: {\n eventManager,\n } as LayerProps & {\n eventManager: EventManager | null\n },\n })\n\n return () => {\n eventManager?.destroy()\n eventManager = null\n }\n }, [getOverlayInstance, isGmaps, isLoaded, layerId, mapId, setLayer])\n}\n","import { EditableGeoJsonLayer } from '@deck.gl-community/editable-layers'\nimport type { UpdateParameters } from '@deck.gl/core'\nimport { EventManager } from 'mjolnir.js'\nimport { EVENT_TYPES } from '../use-event-manager'\n\nexport class CustomEditableGeojsonLayer extends EditableGeoJsonLayer {\n declare props: EditableGeoJsonLayer['props'] & {\n eventManager?: EventManager | null\n }\n\n override updateState({\n props,\n oldProps,\n context,\n changeFlags,\n }: UpdateParameters<this>) {\n if (props.eventManager !== oldProps.eventManager) {\n this._removeEventHandlers(props.eventManager)\n this._removeEventHandlers(oldProps.eventManager)\n this._addEventHandlers()\n }\n super.updateState({ props, oldProps, context, changeFlags })\n }\n\n override _addEventHandlers() {\n const eventManager = this._getEventManager()!\n // _editableLayerState is not in the types, but it's a private property that can be accessed\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { eventHandler } = this.state._editableLayerState\n\n for (const eventType of EVENT_TYPES) {\n // error derived from the _editableLayerState. The type is not exists\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n eventManager.on(eventType, eventHandler, {\n priority: 100,\n })\n }\n }\n\n override _removeEventHandlers(_eventManager?: EventManager | null) {\n const eventManager = _eventManager ?? this._getEventManager()!\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { eventHandler } = this.state._editableLayerState\n\n for (const eventType of EVENT_TYPES) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n eventManager.off(eventType as 'anyclick', eventHandler)\n }\n }\n\n _getEventManager() {\n return (\n this.props.eventManager ??\n // @ts-expect-error accessing protected props\n this.context.deck.eventManager\n )\n }\n}\n\nCustomEditableGeojsonLayer.layerName = 'CustomEditableGeojsonLayer'\n","import type { LayerType } from '../../types'\nimport { DEFAULT_LASSO_TOOLS_LAYER_PROPS } from './const'\nimport type { LassoToolsLayerProps } from './types'\nimport deepmerge from 'deepmerge'\nimport type { FeatureCollection } from 'geojson'\nimport type { LayerProps } from '@deck.gl/core'\nimport { CustomEditableGeojsonLayer } from '../custom-editable-geojson-layer'\n\nexport function getLassoToolsLayer({\n mode,\n ...defaultProps\n}: LassoToolsLayerProps & {}): LayerType {\n const props = getLayerProps(defaultProps)\n\n return {\n type: CustomEditableGeojsonLayer,\n props: {\n ...props,\n mode,\n } as LayerProps,\n }\n}\n\n/**\n * Gets the layer props for the MapLassoToolsLayer component.\n * @param layerProps - The layer props.\n * @param onEdit - The onEdit event handler.\n * @param guideColor - The guide color.\n * @returns The layer props for the component.\n */\nfunction getLayerProps({\n layerProps,\n onEdit,\n getLineColor,\n getFillColor,\n pointColor,\n}: Omit<LassoToolsLayerProps, 'mode'>) {\n const _layerProps = deepmerge(layerProps, {\n modeConfig: {\n // // We force distance due to conversion is addressed at feature getText level\n // formatTooltip: (_distance: number) => {\n // return _distance\n // },\n preventOverlappingLines: true,\n },\n onEdit,\n })\n\n const defaultLayerProps = deepmerge(DEFAULT_LASSO_TOOLS_LAYER_PROPS, {\n getTentativeLineColor: getLineColor,\n getTentativeFillColor: getFillColor,\n getLineColor: getLineColor,\n getFillColor: getFillColor,\n getEditHandlePointColor: pointColor.fill,\n getEditHandlePointOutlineColor: pointColor.outline,\n dataComparator: (data: FeatureCollection, oldData: FeatureCollection) =>\n data.features[0] === oldData.features[0],\n })\n\n const props = deepmerge(defaultLayerProps, _layerProps)\n return props\n}\n","import { createStore } from 'zustand'\nimport type { LassoToolsProviderProps, LassoToolsStore } from './types'\nimport type { LassoToolsState } from '../types'\nimport { DEFAULT_LASSO_TOOLS_MODES } from '../const'\n\nexport const createLassoToolsStore = (\n initProps: LassoToolsProviderProps['values'],\n) => {\n return createStore<LassoToolsStore>()((set) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const {\n enabled = false,\n mapId,\n modeInstance = new DEFAULT_LASSO_TOOLS_MODES.polygon.mode(),\n modes = DEFAULT_LASSO_TOOLS_MODES,\n modeSelected = DEFAULT_LASSO_TOOLS_MODES.polygon.value,\n values = {},\n } = curr\n acc[mapId] = {\n enabled,\n modeInstance,\n modes,\n modeSelected,\n values,\n }\n return acc\n },\n {} as LassoToolsStore['data'],\n )\n\n return {\n data: defaultProps,\n setEnabled: (mapId, enabled) => {\n set((state) => ({\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n enabled,\n visible: enabled,\n },\n },\n }))\n },\n setValue: (mapId, id, value) => {\n set((state) => {\n const values = { ...state.data[mapId]!.values }\n\n const _value =\n values[id] ??\n ({\n type: 'mask',\n } as LassoToolsState['values'][number])\n\n values[id] = {\n ..._value,\n ...value,\n id,\n }\n\n if (!value) {\n delete values[id]\n }\n\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n values,\n },\n },\n }\n })\n },\n setVisibility: (mapId, valueId, visible) => {\n set((state) => {\n const values = { ...state.data[mapId]!.values }\n const _value =\n values[valueId] ?? ({} as LassoToolsState['values'][number])\n _value.properties.visible = visible\n\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n values: {\n ...values,\n [valueId]: _value,\n },\n },\n },\n }\n })\n },\n setModeSelected: (mapId, mode) => {\n set((state) => {\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n modeSelected: mode,\n },\n },\n }\n })\n },\n setModeInstance: (mapId, modeInstance) => {\n set((state) => {\n return {\n data: {\n ...state.data,\n [mapId]: {\n ...state.data[mapId]!,\n modeInstance,\n },\n },\n }\n })\n },\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createLassoToolsStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type { LassoToolsProviderProps, LassoToolsStore } from './types'\n\nconst LassoToolsContext = createContext<StoreApi<LassoToolsStore>>(\n {} as StoreApi<LassoToolsStore>,\n)\n\nexport function LassoToolsProvider({\n children,\n values,\n}: PropsWithChildren<LassoToolsProviderProps>) {\n const [storeRef] = useState(() => createLassoToolsStore(values))\n\n return (\n <LassoToolsContext.Provider value={storeRef}>\n {children}\n </LassoToolsContext.Provider>\n )\n}\n\nexport function useLassoToolsState<T>(\n selector: (state: LassoToolsStore) => T,\n): T {\n const store = useContext(LassoToolsContext)\n if (!Object.keys(store).length) {\n throw new Error('Missing LassoToolsProvider in the tree')\n }\n return useStore(store, selector)\n}\n","import { useCallback, useEffect, useMemo } from 'react'\nimport type {\n LassoToolsData,\n LassoToolsControlProps,\n LassoToolsState,\n} from './types'\nimport { useLassoToolsState } from './provider/provider'\n\nexport function LassoToolsControls({\n mapId,\n children,\n}: LassoToolsControlProps) {\n const enabled = useLassoToolsState((state) => state.data[mapId]?.enabled)!\n const setEnabled = useLassoToolsState((state) => state.setEnabled)\n const values = useLassoToolsState((state) => state.data[mapId]?.values)!\n const setValue = useLassoToolsState((state) => state.setValue)\n const setVisibility = useLassoToolsState((state) => state.setVisibility)\n const modeSelected = useLassoToolsState(\n (state) => state.data[mapId]?.modeSelected,\n )!\n const setModeSelected = useLassoToolsState((state) => state.setModeSelected)\n const modes = useLassoToolsState((state) => state.data[mapId]?.modes)!\n const setModeInstance = useLassoToolsState((state) => state.setModeInstance)\n\n useEffect(() => {\n const data = modes[modeSelected]\n\n if (data && enabled) {\n const Mode = data.mode\n setModeInstance(mapId, new Mode() as LassoToolsState['modeInstance'])\n }\n }, [enabled, mapId, modeSelected, modes, setModeInstance])\n\n const [\n mask,\n // , draw\n ] = useMemo(() => {\n const serialize = (value: LassoToolsData) => ({\n id: value.id,\n ...value.properties,\n visible: value.properties.visible,\n label: value.properties.label,\n })\n const _values = Object.values(values)\n const mask = _values.filter((value) => value.type === 'mask').map(serialize)\n // const draw = _values.filter((value) => value.type === 'draw').map(serialize)\n return [\n mask,\n // , draw\n ]\n }, [values])\n\n const handleModeSelected = useCallback(\n (mode: LassoToolsState['modeSelected']) => {\n setEnabled(mapId, !!mode)\n setModeSelected(mapId, mode)\n },\n [mapId, setEnabled, setModeSelected],\n )\n\n return children({\n mapId,\n enabled,\n modes,\n modeSelected,\n values: {\n mask,\n // draw,\n },\n setValue: useCallback(\n (id, data) => setValue(mapId, id, data),\n [mapId, setValue],\n ),\n setEnabled: useCallback(\n (enabled) => setEnabled(mapId, enabled),\n [mapId, setEnabled],\n ),\n setVisibility: useCallback(\n (valueId, visible) => setVisibility(mapId, valueId, visible),\n [mapId, setVisibility],\n ),\n setModeSelected: handleModeSelected,\n })\n}\n","import type { LassoToolsStore } from './provider/types'\n\nexport function getMaskValues({\n values,\n}: {\n values?: LassoToolsStore['data'][number]['values']\n}) {\n return Object.values(values ?? {}).filter((value) => value.type === 'mask')\n}\n","import { formatNumber } from '@carto/ps-utils'\nimport type { Tooltip, Position } from '@deck.gl-community/editable-layers'\nimport configureMeasurements from 'convert-units'\nimport length, { type LengthUnits } from 'convert-units/definitions/length'\nimport type { ControllerOptions } from 'node_modules/@deck.gl/core/dist/controllers/controller'\nimport type { ValueOf } from 'type-fest'\nimport type { DeckGLComponentProps } from '../../types'\nimport {\n CONVERSIONS_UNITS,\n CONVERSIONS_UNITS_AREA,\n CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA,\n INTL_UNITS,\n MapMeasurementUnit,\n MapMeasurementUnitAuto,\n} from './const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from './types'\nimport type { AreaUnits } from 'convert-units/definitions/area'\nimport area from 'convert-units/definitions/area'\n\nconst convert = configureMeasurements({\n length,\n})\n\nconst convertArea = configureMeasurements({\n area,\n})\n\nfunction validateUnitForAreaConversion(\n unit: string,\n): asserts unit is keyof typeof CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA {\n if (!(unit in CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA)) {\n const validUnits = Object.keys(CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA)\n throw new Error(\n `Unit \"${unit}\" cannot be converted to area. Valid units are: ${validUnits.join(', ')}`,\n )\n }\n}\n\nexport function convertMetersTo(\n distance: number,\n unit: ValueOf<typeof MapMeasurementUnit>,\n dimension: 'length' | 'area',\n) {\n switch (dimension) {\n case 'length': {\n const unitFrom: LengthUnits = CONVERSIONS_UNITS[MapMeasurementUnit.meter]\n const unitTo: LengthUnits = CONVERSIONS_UNITS[unit]\n\n return convert(distance).from(unitFrom).to(unitTo)\n }\n case 'area': {\n validateUnitForAreaConversion(unit)\n const unitFrom: AreaUnits =\n CONVERSIONS_UNITS_AREA[\n CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA[MapMeasurementUnit.meter]\n ]\n const unitTo: AreaUnits =\n CONVERSIONS_UNITS_AREA[CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA[unit]]\n\n return convertArea(distance).from(unitFrom).to(unitTo)\n }\n default: {\n throw new Error(\n `Invalid dimension: ${dimension as string}, valid dimensions are: length, area`,\n )\n }\n }\n}\n\nconst DEFAULT_AUTO_SPLIT_NUMBER = 10000\n\nexport function getTextLayerFormattedDistance({\n meters,\n unit,\n locale,\n options: { autoSplitNumber, customFormatter, ...intlOptions } = {\n autoSplitNumber: DEFAULT_AUTO_SPLIT_NUMBER,\n },\n dimension = 'length',\n}: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n dimension?: 'length' | 'area'\n}) {\n const isMetricSystem = unit === MapMeasurementUnitAuto['m-km']\n const isImperialSystem = unit === MapMeasurementUnitAuto['ft-mi']\n const isAuto = isMetricSystem || isImperialSystem\n\n let _unit\n let _number\n\n if (isAuto) {\n const isSmallDistance =\n meters < (autoSplitNumber ?? DEFAULT_AUTO_SPLIT_NUMBER)\n let convertUnit: ValueOf<typeof MapMeasurementUnit> = isSmallDistance\n ? MapMeasurementUnit.meter\n : MapMeasurementUnit.kilometer\n\n _unit = isSmallDistance ? INTL_UNITS.meter : INTL_UNITS.kilometer\n\n if (isImperialSystem) {\n _unit = isSmallDistance ? INTL_UNITS.feet : INTL_UNITS.mile\n convertUnit = isSmallDistance\n ? MapMeasurementUnit.feet\n : MapMeasurementUnit.mile\n }\n\n _number = convertMetersTo(meters, convertUnit, dimension)\n } else {\n _unit = INTL_UNITS[unit]\n _number = convertMetersTo(meters, unit, dimension)\n }\n\n let result = `${formatNumber(_number, locale, {\n style: 'unit',\n unit: _unit,\n unitDisplay: 'short',\n notation: 'standard',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n ...intlOptions,\n })}`\n\n if (dimension === 'area') {\n result += '2'\n }\n\n if (customFormatter) {\n return customFormatter(result)\n }\n\n return result\n}\n\nexport function getDeckController(\n controller: DeckGLComponentProps['controller'],\n {\n hasDoubleClickZoom,\n }: {\n hasDoubleClickZoom: boolean\n },\n): ControllerOptions {\n return typeof controller === 'boolean'\n ? { doubleClickZoom: hasDoubleClickZoom }\n : { ...controller, doubleClickZoom: hasDoubleClickZoom }\n}\n\nexport function buildTooltip(\n value: number,\n position: Position,\n modeConfig: EditModeConfig,\n): Tooltip[] {\n if (value > 0) {\n const { formatTooltip, turfOptions } = modeConfig ?? {\n turfOptions: {\n units: 'kilometers',\n },\n }\n\n const units = turfOptions?.units\n\n let text\n if (formatTooltip) {\n text = formatTooltip(value)\n } else {\n text = `${parseFloat(value.toString()).toFixed(2)} ${units}`\n }\n\n const { measurementCallback } = modeConfig as {\n measurementCallback?: (value: number) => void\n }\n\n if (measurementCallback) {\n measurementCallback(value)\n }\n\n return [\n {\n position,\n text,\n },\n ]\n }\n return []\n}\n","import {\n getPickedEditHandle,\n MeasureAreaMode,\n type ClickEvent,\n type FeatureCollection,\n type FeatureOf,\n type GuideFeatureCollection,\n type LineString,\n type ModeProps,\n type Point,\n type PointerMoveEvent,\n type Polygon,\n type Position,\n type Tooltip,\n} from '@deck.gl-community/editable-layers'\nimport { area, centroid, lineIntersect } from '@turf/turf'\nimport { EditType } from '../../../editable/const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from '../types'\nimport { buildTooltip, getTextLayerFormattedDistance } from '../utils'\nimport type { ValueOf } from 'type-fest'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { TentativeFeature } from 'node_modules/@deck.gl-community/editable-layers/dist/edit-modes/types'\n\nexport class CustomMeasureAreaMode extends MeasureAreaMode {\n _isMeasuringSessionFinished = false\n area = 0\n tooltips: Tooltip[] = []\n resultPolygon: FeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n }\n\n override handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {\n // restart measuring session\n if (this._isMeasuringSessionFinished) {\n this._isMeasuringSessionFinished = false\n this.resetClickSequence()\n this.area = 0\n }\n\n const { picks } = event\n const clickedEditHandle = getPickedEditHandle(picks)\n const clickSequence = this.getClickSequence()\n\n let positionAdded = false\n if (!clickedEditHandle && !this.allowOverlapping(props)) {\n // Don't add another point right next to an existing one\n this.addClickSequence(event)\n positionAdded = true\n }\n\n const latestClickSequence = this.getClickSequence()\n const polygonCoordinates = [...latestClickSequence, latestClickSequence[0]!]\n this.area = area({\n type: 'Polygon',\n coordinates: [polygonCoordinates],\n })\n\n if (\n this.isFinalizedEdition(\n clickSequence,\n clickedEditHandle as unknown as {\n properties: { positionIndexes: number[] }\n },\n )\n ) {\n this.finalizeEdition(props)\n } else if (positionAdded) {\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: 'addTentativePosition',\n editContext: {\n position: event.mapCoords,\n },\n })\n }\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (event.key === 'Enter') {\n const clickSequence = this.getClickSequence()\n if (clickSequence.length > 2) {\n this.finalizeEdition(props)\n } else {\n this.resetEdition(props)\n }\n } else if (event.key === 'Escape') {\n this.resetEdition(props)\n }\n }\n\n updateTooltip(\n polygon: Polygon | TentativeFeature,\n props: ModeProps<FeatureCollection>,\n ): void {\n const position = centroid(polygon) as FeatureOf<Point>\n this.area = area(polygon)\n this.tooltips = buildTooltip(\n this.area,\n position.geometry.coordinates as unknown as Position,\n props.modeConfig as EditModeConfig,\n )\n }\n\n override handlePointerMove(\n event: PointerMoveEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n if (this._isMeasuringSessionFinished) {\n return\n }\n super.handlePointerMove(event, props)\n const tentativeGuide = this.getTentativeGuide(props)\n if (tentativeGuide?.geometry.type === 'Polygon') {\n this.updateTooltip(tentativeGuide, props)\n }\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this.tooltips = []\n this._isMeasuringSessionFinished = false\n this.area = 0\n }\n\n override getGuides(\n props: ModeProps<FeatureCollection>,\n ): GuideFeatureCollection {\n if (this._isMeasuringSessionFinished) {\n return this.resultPolygon as GuideFeatureCollection\n } else {\n return super.getGuides(props)\n }\n }\n\n override getTooltips() {\n return this.tooltips\n }\n\n isFinalizedEdition(\n clickSequence: Position[],\n clickedEditHandle:\n | { properties: { positionIndexes: number[] } }\n | null\n | undefined,\n ): boolean {\n const { positionIndexes } = clickedEditHandle?.properties ?? {\n positionIndexes: [],\n }\n return (\n clickSequence.length > 2 &&\n clickedEditHandle !== undefined &&\n (positionIndexes[0] === 0 ||\n positionIndexes[0] === clickSequence.length - 1)\n )\n }\n\n allowOverlapping(props: ModeProps<FeatureCollection>) {\n let overlappingLines = false\n const clickSequence = this.getClickSequence()\n if (\n clickSequence.length > 2 &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n props.modeConfig?.preventOverlappingLines\n ) {\n const currentLine = {\n type: 'LineString',\n coordinates: [...clickSequence, clickSequence[0]],\n } as LineString\n const otherLines = {\n type: 'LineString',\n coordinates: [...clickSequence.slice(0, clickSequence.length - 1)],\n } as LineString\n const intersectingPoints = lineIntersect(currentLine, otherLines)\n if ((intersectingPoints as FeatureCollection).features.length > 0) {\n overlappingLines = true\n }\n }\n return overlappingLines\n }\n\n finalizeEdition(props: ModeProps<FeatureCollection>) {\n const clickSequence = this.getClickSequence()\n // They clicked the first or last point (or double-clicked), so complete the polygon\n // Remove the hovered position\n const polygonToAdd: Polygon = {\n type: 'Polygon',\n coordinates: [[...clickSequence, clickSequence[0]!]],\n }\n props.selectedIndexes = []\n props.data = {\n type: 'FeatureCollection',\n features: [],\n }\n const editAction = this.getAddFeatureOrBooleanPolygonAction(\n polygonToAdd,\n props,\n )\n this._isMeasuringSessionFinished = true\n if (editAction) {\n this.resultPolygon = editAction.updatedData\n props.onEdit({\n ...editAction,\n editType: EditType.addPosition,\n editContext: {\n ...(editAction.editContext as Record<string, unknown>),\n distance: this.area,\n positions: this.getClickSequence(),\n finished: this._isMeasuringSessionFinished,\n },\n })\n }\n // Update the tooltip with the final area\n this.updateTooltip(polygonToAdd, props)\n }\n\n resetEdition(props: ModeProps<FeatureCollection>) {\n this.resetClickSequence()\n props.onEdit({\n // Because the new drawing feature is dropped, so the data will keep as the same.\n updatedData: props.data,\n editType: 'cancelFeature',\n editContext: {},\n })\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n dimension: 'area',\n })\n }\n}\n","import {\n DrawCircleFromCenterMode,\n type ClickEvent,\n type FeatureCollection,\n type FeatureOf,\n type Geometry,\n type GuideFeatureCollection,\n type ModeProps,\n type PointerMoveEvent,\n type Polygon,\n type Position,\n type Tooltip,\n} from '@deck.gl-community/editable-layers'\nimport type { ValueOf } from 'type-fest'\nimport { EditType } from '../../../editable/const'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { EditModeConfig, MeasurementToolsTextProps } from '../types'\nimport { buildTooltip, getTextLayerFormattedDistance } from '../utils'\n\nexport class CustomMeasureBufferMode extends DrawCircleFromCenterMode {\n _isMeasuringSessionFinished = false\n _currentArea = 0\n resultPolygon: FeatureCollection = {\n type: 'FeatureCollection',\n features: [],\n }\n tooltips: Tooltip[] = []\n\n override handleClick(event: ClickEvent, props: ModeProps<FeatureCollection>) {\n // restart measuring session\n if (this._isMeasuringSessionFinished) {\n this._isMeasuringSessionFinished = false\n this.resetClickSequence()\n this._currentArea = 0\n }\n\n super.handleClick(event, props)\n }\n\n override handlePointerMove(\n event: PointerMoveEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n if (this._isMeasuringSessionFinished) {\n return\n }\n super.handlePointerMove(event, props)\n this.tooltips = buildTooltip(\n this.areaCircle!,\n this.position,\n props.modeConfig as EditModeConfig,\n )\n }\n\n override checkAndFinishPolygon(props: ModeProps<FeatureCollection>) {\n const clickSequence = this.getClickSequence()\n const tentativeFeature = this.getTentativeGuide(props)\n if (\n this.isFinalizedEdition(\n clickSequence,\n tentativeFeature as { geometry: Geometry },\n )\n ) {\n this.finalizeEdition(props)\n }\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (event.key === 'Enter') {\n this.finalizeEdition(props)\n } else if (event.key === 'Escape') {\n this.resetEdition(props)\n }\n }\n\n override getGuides(\n props: ModeProps<FeatureCollection>,\n ): GuideFeatureCollection {\n if (this._isMeasuringSessionFinished) {\n return this.resultPolygon as GuideFeatureCollection\n } else {\n return super.getGuides(props)\n }\n }\n\n isFinalizedEdition(\n clickSequence: Position[],\n tentativeFeature: { geometry: Geometry },\n ): boolean {\n return (\n clickSequence.length > 1 && tentativeFeature?.geometry.type === 'Polygon'\n )\n }\n\n finalizeEdition(props: ModeProps<FeatureCollection>) {\n const tentativeFeature = this.getTentativeGuide(props)\n props.selectedIndexes = []\n props.data = {\n type: 'FeatureCollection',\n features: [],\n }\n\n const editAction = this.getAddFeatureOrBooleanPolygonAction(\n tentativeFeature as FeatureOf<Polygon>,\n props,\n )\n this._isMeasuringSessionFinished = true\n props.onUpdateCursor('cell')\n if (editAction) {\n this.resultPolygon = editAction.updatedData\n props.onEdit({\n ...editAction,\n editType: EditType.addPosition,\n editContext: {\n ...(editAction.editContext as Record<string, unknown>),\n distance: this._currentArea,\n positions: this.getClickSequence(),\n finished: this._isMeasuringSessionFinished,\n },\n })\n }\n }\n\n resetEdition(props: ModeProps<FeatureCollection>) {\n this.resetClickSequence()\n props.onEdit({\n // Because the new drawing feature is dropped, so the data will keep as the same.\n updatedData: props.data,\n editType: 'cancelFeature',\n editContext: {},\n })\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this.tooltips = []\n this._isMeasuringSessionFinished = false\n this._currentArea = 0\n this.radius = 0\n this.areaCircle = 0\n }\n\n override getTooltips(): Tooltip[] {\n return this.tooltips\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n dimension: 'area',\n })\n }\n}\n","import {\n MeasureDistanceMode,\n type FeatureCollection,\n type ModeProps,\n} from '@deck.gl-community/editable-layers'\nimport type { BasePointerEvent } from 'node_modules/@deck.gl-community/editable-layers/dist/edit-modes/types'\nimport { EditType } from '../../../editable/const'\nimport type { ValueOf } from 'type-fest'\nimport type { MapMeasurementUnitAuto } from '../const'\nimport type { MeasurementToolsTextProps } from '../types'\nimport { getTextLayerFormattedDistance } from '../utils'\n\nexport class CustomMeasureDistanceMode extends MeasureDistanceMode {\n override handleClick(\n event: BasePointerEvent,\n props: ModeProps<FeatureCollection>,\n ): void {\n super.handleClick(event, props)\n\n props.onEdit({\n // data is the same\n updatedData: props.data,\n editType: EditType.addPosition,\n editContext: {\n distance: this._currentDistance,\n finished: this._isMeasuringSessionFinished,\n positions: this.getClickSequence(),\n },\n })\n }\n\n override handleKeyUp(\n event: KeyboardEvent,\n props: ModeProps<FeatureCollection>,\n ) {\n if (this._isMeasuringSessionFinished) return\n\n event.stopPropagation()\n const { key } = event\n\n const clickSequenceLength = this.getClickSequence().length\n\n let editType: ValueOf<typeof EditType> = EditType.finish\n\n switch (key) {\n case 'Escape':\n props.onEdit({\n updatedData: {\n type: 'FeatureCollection',\n features: [],\n },\n editType: EditType.cancel,\n editContext: {},\n })\n break\n case 'Enter':\n this._isMeasuringSessionFinished = true\n if (clickSequenceLength === 1) {\n this.resetClickSequence()\n editType = EditType.cancel\n }\n // force update drawings\n props.onUpdateCursor('cell')\n props.onEdit({\n updatedData: props.data,\n editType,\n editContext: {\n finished: this._isMeasuringSessionFinished,\n },\n })\n break\n default:\n break\n }\n }\n\n override resetClickSequence() {\n super.resetClickSequence()\n this._isMeasuringSessionFinished = false\n this._currentTooltips = []\n this._currentDistance = 0\n }\n\n getTooltipText({\n meters,\n locale,\n unit,\n options,\n }: {\n meters: number\n unit: ValueOf<typeof MapMeasurementUnitAuto>\n locale: string\n options?: MeasurementToolsTextProps\n }): string {\n return getTextLayerFormattedDistance({\n meters,\n locale,\n unit,\n options,\n })\n }\n}\n","import type { GeoJsonEditMode } from '@deck.gl-community/editable-layers'\nimport type { Color } from '@deck.gl/core'\nimport type { LengthUnits } from 'convert-units/definitions/length'\nimport type {\n MeasurementMode,\n MeasurementModes,\n MeasurementUnit,\n MeasurementUnitOption,\n MeasurementUnits,\n} from '../../types'\nimport type { ValueOf } from 'type-fest'\nimport { CustomMeasureAreaMode } from './modes/custom-measurement-area.class'\nimport { CustomMeasureBufferMode } from './modes/custom-measurement-buffer.class'\nimport { CustomMeasureDistanceMode } from './modes/custom-measurement-distance.class'\nimport type { DefaultMeasureToolProps } from './types'\nimport type { AreaUnits } from 'convert-units/definitions/area'\n\nexport const MAP_MEASURE_LAYER_ID = 'mapMeasureLayer'\n\nexport const DEFAULT_LAYER_PROPS = {\n id: MAP_MEASURE_LAYER_ID,\n pickable: false,\n billboard: false,\n editHandlePointRadiusUnits: 'pixels',\n editHandlePointRadiusMinPixels: 1,\n editHandlePointRadiusMaxPixels: 12,\n lineWidthMinPixels: 2,\n editHandlePointStrokeWidth: 3,\n getEditHandlePointRadius: 3,\n _subLayerProps: {\n tooltips: {\n fontFamily: 'Open Sans, Inter, sans-serif',\n fontWeight: 'lighter',\n getSize: 11,\n lineHeight: 1.4545,\n getPixelOffset: [0, 20],\n getTextAnchor: 'middle',\n getAlignmentBaseline: 'center',\n updateTriggers: {},\n },\n guides: {\n getLineWidth: 2,\n },\n },\n} as const\n\nexport const DEFAULT_COLORS: Record<string, Color> = {\n editing: [23, 102, 214, 255],\n finished: [71, 219, 153, 255],\n point: [255, 255, 255, 255],\n} as const\n\nexport const DEFAULT_PROPS: DefaultMeasureToolProps = {\n styles: {\n colors: {\n editing: DEFAULT_COLORS.editing!,\n finished: DEFAULT_COLORS.finished!,\n point: DEFAULT_COLORS.point!,\n },\n },\n} as const\n\nexport const MapMeasurementUnit = {\n kilometer: 'kilometer',\n meter: 'meter',\n centimeter: 'centimeter',\n milimeter: 'milimeter',\n mile: 'mile',\n yard: 'yard',\n feet: 'feet',\n} as const\n\nexport const MapMeasurementUnitArea = {\n squareMeter: 'squareMeter',\n squareKilometer: 'squareKilometer',\n squareMile: 'squareMile',\n squareFeet: 'squareFeet',\n} as const\n\nexport const MapMeasurementUnitAuto = {\n 'm-km': 'm-km',\n 'ft-mi': 'ft-mi',\n ...MapMeasurementUnit,\n} as const\n\nexport const MapMeasurementUnitTurf = {\n meters: 'meters',\n kilometer: 'kilometers',\n mile: 'miles',\n} as const\n\nexport type MapMeasurementUnitAreaValue = Pick<\n typeof MapMeasurementUnit,\n 'kilometer' | 'meter' | 'mile' | 'feet'\n>\n\nexport const CONVERSIONS_UNITS: Record<\n ValueOf<typeof MapMeasurementUnit>,\n LengthUnits\n> = {\n [MapMeasurementUnit.kilometer]: 'km',\n [MapMeasurementUnit.meter]: 'm',\n [MapMeasurementUnit.centimeter]: 'cm',\n [MapMeasurementUnit.milimeter]: 'mm',\n [MapMeasurementUnit.mile]: 'mi',\n [MapMeasurementUnit.yard]: 'yd',\n [MapMeasurementUnit.feet]: 'ft',\n} as const\n\nexport const CONVERSIONS_UNITS_AREA: Record<\n ValueOf<typeof MapMeasurementUnitArea>,\n AreaUnits\n> = {\n [MapMeasurementUnitArea.squareMeter]: 'm2',\n [MapMeasurementUnitArea.squareKilometer]: 'km2',\n [MapMeasurementUnitArea.squareMile]: 'mi2',\n [MapMeasurementUnitArea.squareFeet]: 'ft2',\n} as const\n\nexport const CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA: Record<\n keyof MapMeasurementUnitAreaValue,\n ValueOf<typeof MapMeasurementUnitArea>\n> = {\n [MapMeasurementUnit.meter]: MapMeasurementUnitArea.squareMeter,\n [MapMeasurementUnit.kilometer]: MapMeasurementUnitArea.squareKilometer,\n [MapMeasurementUnit.mile]: MapMeasurementUnitArea.squareMile,\n [MapMeasurementUnit.feet]: MapMeasurementUnitArea.squareFeet,\n} as const\n\nexport const INTL_UNITS: Record<ValueOf<typeof MapMeasurementUnit>, string> = {\n [MapMeasurementUnit.kilometer]: 'kilometer',\n [MapMeasurementUnit.meter]: 'meter',\n [MapMeasurementUnit.centimeter]: 'centimeter',\n [MapMeasurementUnit.milimeter]: 'millimeter',\n [MapMeasurementUnit.mile]: 'mile',\n [MapMeasurementUnit.yard]: 'yard',\n [MapMeasurementUnit.feet]: 'foot',\n} as const\n\nexport const MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES: Record<\n MeasurementUnit,\n MeasurementUnitOption\n> = {\n 'm-km': {\n value: 'm-km',\n system: 'metric',\n },\n kilometer: {\n value: 'kilometer',\n system: 'metric',\n },\n meter: {\n value: 'meter',\n system: 'metric',\n },\n centimeter: {\n value: 'centimeter',\n system: 'metric',\n },\n milimeter: {\n value: 'milimeter',\n system: 'metric',\n },\n 'ft-mi': {\n value: 'ft-mi',\n system: 'imperial',\n },\n mile: {\n value: 'mile',\n system: 'imperial',\n },\n yard: {\n value: 'yard',\n system: 'imperial',\n },\n feet: {\n value: 'feet',\n system: 'imperial',\n },\n} as const\n\nexport const MEASUREMENT_TOOLS_UNITS_DISTANCE: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n>[keyof MeasurementModes] = [\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['m-km'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.kilometer,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.meter,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['ft-mi'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.mile,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.feet,\n] as const\n\nexport const MEASUREMENT_TOOLS_UNITS_AREA: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n>[keyof MeasurementModes] = [\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['m-km'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.kilometer,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.meter,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES['ft-mi'],\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.mile,\n MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES.feet,\n] as const\n\nexport const DEFAULT_MEASUREMENT_TOOLS_MODES: MeasurementModes<\n MeasurementMode,\n GeoJsonEditMode\n> = {\n distance: {\n value: 'distance',\n mode: CustomMeasureDistanceMode,\n },\n buffer: {\n value: 'buffer',\n mode: CustomMeasureBufferMode,\n },\n area: {\n value: 'area',\n mode: CustomMeasureAreaMode,\n },\n} as const\n\nexport const DEFAULT_MEASUREMENT_TOOLS_UNITS: MeasurementUnits<\n MeasurementMode,\n MeasurementUnit\n> = {\n distance: MEASUREMENT_TOOLS_UNITS_DISTANCE,\n buffer: MEASUREMENT_TOOLS_UNITS_DISTANCE,\n area: MEASUREMENT_TOOLS_UNITS_AREA,\n} as const\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport { useLayerStore } from '../../providers/layers/store'\nimport { useMapStore } from '../../providers/map/provider'\nimport type {\n LassoToolsLayerEditProps,\n LassoToolsProps,\n LassoToolsData,\n} from './types'\nimport { getLassoToolsLayer } from './layer'\nimport {\n DEFAULT_MASK_LAYER_PROPS,\n DEFAULT_LASSO_TOOLS_PROPS,\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n} from './const'\nimport { useLassoToolsState } from './provider/provider'\nimport { GeoJsonLayer, type GeoJsonLayerProps } from '@deck.gl/layers'\nimport { MaskExtension } from '@deck.gl/extensions'\nimport { LassoToolsControls } from './lasso-tools-control'\nimport { EditType } from '../const'\nimport { useShallow } from 'zustand/shallow'\nimport { getMaskValues } from './util'\nimport { MAP_MEASURE_LAYER_ID } from '../measurement-tools/const'\nimport type { Layer, LayerProps, PickingInfo } from '@deck.gl/core'\nimport { ViewMode } from '@deck.gl-community/editable-layers'\nimport { useEventManager } from '../../use-event-manager'\n\nconst EXCEPTED_LAYER_IDS = [\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n MAP_MEASURE_LAYER_ID,\n]\n\n/**\n * LassoTools component provides tools for lasso selection on a map.\n *\n * @param {Object} props - The properties object.\n * @param {ReactNode} props.children - The child components to be rendered.\n * @param {string} props.mapId - The unique identifier for the map.\n * @param {Object} [props.defaultProps] - The default properties for the component.\n * @param {Object} [props.defaultProps.styles] - The default styles for the lasso tools.\n * @param {Object} [props.defaultProps.labels] - The default labels for the lasso tools.\n * @param {Object} [props.layerProps] - The properties for the layer.\n * @param {string} [props.defaultType='mask'] - The default type for the lasso tools.\n *\n * @returns {ReactNode} The rendered children components.\n *\n * @example\n * <LassoTools mapId=\"map1\">\n * <ChildComponent />\n * </LassoTools>\n */\nexport function LassoTools({\n children,\n mapId,\n defaultProps: { styles = DEFAULT_LASSO_TOOLS_PROPS.styles, labels } = {\n styles: DEFAULT_LASSO_TOOLS_PROPS.styles,\n labels: DEFAULT_LASSO_TOOLS_PROPS.labels,\n },\n layerProps = {},\n defaultType = 'mask',\n}: LassoToolsProps & {\n children?: ReactNode\n}) {\n const getController = useMapStore((state) => state.getController)\n const setController = useMapStore((state) => state.setController)\n const enabled = useLassoToolsState((state) => state.data[mapId]?.enabled)\n const setEnabled = useLassoToolsState((state) => state.setEnabled)\n const values = useLassoToolsState((state) => state.data[mapId]?.values)\n const setValue = useLassoToolsState((state) => state.setValue)\n const modeInstance = useLassoToolsState(\n (state) => state.data[mapId]?.modeInstance,\n )!\n const modeSelected = useLassoToolsState(\n (state) => state.data[mapId]?.modeSelected,\n )\n\n const setLayer = useLayerStore((state) => state.setLayer)\n const addLayers = useMapStore((state) => state.addLayers)\n const removeLayers = useMapStore((state) => state.removeLayers)\n const mapLayers = useMapStore(\n useShallow((state) =>\n state.maps[mapId]?.layers.filter((l) => !EXCEPTED_LAYER_IDS.includes(l)),\n ),\n )\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const mapLayersVisibilityRef = useRef<Record<string, boolean>>({})\n\n useEventManager({ mapId, layerId: MAP_LASSO_TOOLS_LAYER_ID })\n\n useEffect(() => {\n const controller = getController(mapId)\n\n if (enabled) {\n setController(mapId, {\n doubleClickZoom: false,\n dragPan: modeSelected !== 'lasso',\n })\n }\n\n return () => {\n setController(mapId, controller)\n }\n }, [enabled, getController, mapId, modeSelected, setController])\n\n const maskValues = useMemo(() => {\n return getMaskValues({ values })\n }, [values])\n\n const maskFeatureCollection: LassoToolsLayerEditProps['updatedData'] =\n useMemo(() => {\n return {\n type: 'FeatureCollection',\n features: maskValues.map((value) => ({\n type: 'Feature',\n geometry: value.geometry,\n properties: value.properties,\n id: value.id,\n })),\n }\n }, [maskValues])\n\n const maskVisible = useMemo(() => {\n return maskValues\n .filter((value) => value.properties.visible)\n .map((value) => value.id)\n }, [maskValues])\n\n const [data, setData] = useState<LassoToolsLayerEditProps['updatedData']>(\n maskFeatureCollection,\n )\n const [selectedFeatureIndexes, setSelectedFeatureIndexes] = useState<\n number[]\n >([])\n\n const setDataByValues = useCallback(() => {\n const _data = {\n ...maskFeatureCollection,\n features: maskFeatureCollection.features.filter(\n (feature) => feature.properties?.visible,\n ),\n }\n setData(_data)\n }, [maskFeatureCollection])\n\n useEffect(() => {\n setDataByValues()\n }, [setDataByValues])\n\n const autoIncrement = useRef(maskValues.length)\n\n useEffect(() => {\n addLayers(mapId, [MAP_LASSO_TOOLS_LAYER_ID])\n\n return () => {\n removeLayers(mapId, [MAP_LASSO_TOOLS_LAYER_ID])\n }\n }, [addLayers, mapId, removeLayers])\n\n const handleCancelEdit = useCallback(() => {\n setDataByValues()\n setSelectedFeatureIndexes([])\n setEnabled(mapId, false)\n }, [mapId, setDataByValues, setEnabled])\n\n const handleApplyEdit = useCallback(\n (features: LassoToolsLayerEditProps['updatedData']['features']) => {\n features.forEach((feature, index) => {\n feature.properties.label ??= `${labels?.mask} ${autoIncrement.current}`\n feature.properties.index = index\n feature.properties.visible = feature.properties.visible ?? true\n\n const id = (feature.id as string) ?? crypto.randomUUID()\n\n setValue(mapId, id, {\n geometry: feature.geometry,\n properties: feature.properties,\n type: defaultType,\n })\n })\n },\n [defaultType, labels?.mask, mapId, setValue],\n )\n\n const onEdit = useCallback(\n ({ editType, updatedData }: LassoToolsLayerEditProps) => {\n if (editType === EditType.cancel) {\n handleCancelEdit()\n return\n }\n\n setData(updatedData)\n\n if (editType === EditType.updateTentativeFeature) {\n return\n }\n\n if (editType === EditType.addFeature) {\n if (modeSelected !== 'edit') {\n autoIncrement.current = autoIncrement.current + 1\n }\n handleApplyEdit(updatedData.features)\n handleCancelEdit()\n }\n },\n [handleApplyEdit, handleCancelEdit, modeSelected],\n )\n\n useEffect(() => {\n const pickable = enabled\n\n const {\n border: guideColorEditing,\n point: pointColorEditing,\n fill: fillColorEditing,\n } = styles.colors.editing\n\n const { border: borderFinished, fill: fillFinished } =\n styles.colors.finished\n\n const layer = getLassoToolsLayer({\n layerProps: {\n ...layerProps.mask,\n pickable,\n data,\n selectedFeatureIndexes,\n updateTriggers: {\n getFilterValue: maskVisible,\n },\n onClick: (e: PickingInfo) => {\n const _e = e as PickingInfo<never, { isGuide: boolean }>\n if (_e.isGuide) {\n return\n }\n setSelectedFeatureIndexes([_e.index])\n },\n },\n getLineColor: (d: LassoToolsData) =>\n selectedFeatureIndexes[0] === d.properties.index\n ? guideColorEditing\n : borderFinished,\n getFillColor: (d: LassoToolsData) =>\n selectedFeatureIndexes[0] === d.properties.index\n ? fillColorEditing\n : fillFinished,\n pointColor: {\n fill: pointColorEditing,\n outline: guideColorEditing,\n },\n onEdit,\n mode: !pickable ? new ViewMode() : modeInstance,\n })\n\n setLayer(MAP_LASSO_TOOLS_LAYER_ID, layer)\n }, [\n data,\n enabled,\n layerProps.mask,\n maskVisible,\n modeInstance,\n onEdit,\n selectedFeatureIndexes,\n setLayer,\n styles.colors.editing,\n styles.colors.finished,\n ])\n\n useEffect(() => {\n const props = {\n ...DEFAULT_MASK_LAYER_PROPS,\n data: maskFeatureCollection,\n getFilterValue: (f: LassoToolsData) => Number(maskVisible.includes(f.id)),\n updateTriggers: {\n getFilterValue: maskVisible,\n },\n } as GeoJsonLayerProps\n\n setLayer(DEFAULT_MASK_LAYER_PROPS.id, {\n type: GeoJsonLayer,\n props,\n })\n\n addLayers(mapId, [DEFAULT_MASK_LAYER_PROPS.id])\n return () => {\n removeLayers(mapId, [DEFAULT_MASK_LAYER_PROPS.id])\n }\n }, [\n addLayers,\n mapId,\n maskFeatureCollection,\n maskVisible,\n removeLayers,\n setLayer,\n ])\n\n useEffect(() => {\n if (!enabled && selectedFeatureIndexes.length && data.features.length) {\n handleApplyEdit(data.features)\n handleCancelEdit()\n }\n }, [\n data.features,\n enabled,\n handleApplyEdit,\n handleCancelEdit,\n selectedFeatureIndexes.length,\n ])\n\n useEffect(() => {\n mapLayers?.forEach((layerId) => {\n const currentLayer = getDeckInstance(mapId)?.props.layers.find(\n (l) => (l as Layer<LayerProps>).props.id === layerId,\n ) as Layer<LayerProps>\n\n if (!currentLayer) return\n\n if (enabled) {\n mapLayersVisibilityRef.current[layerId] = currentLayer?.props.pickable\n }\n\n const pickable =\n !enabled &&\n (mapLayersVisibilityRef.current[layerId] ??\n currentLayer?.props.pickable)\n\n setLayer(layerId, {\n props: {\n pickable: pickable,\n extensions: [new MaskExtension()],\n maskId:\n !enabled && maskVisible.length ? MAP_MASK_LAYER_ID : undefined,\n } as Partial<GeoJsonLayerProps>,\n })\n })\n }, [enabled, getDeckInstance, mapId, mapLayers, maskVisible.length, setLayer])\n\n return children\n}\n\nLassoTools.Controls = LassoToolsControls\n","import deepmerge from 'deepmerge'\nimport type { LayerType } from '../../types'\nimport { DEFAULT_LAYER_PROPS, MapMeasurementUnitTurf } from './const'\nimport type { MeasurementToolsLayerProps, MeasurementToolsState } from './types'\nimport type { LayerProps } from '@deck.gl/core'\nimport { CustomEditableGeojsonLayer } from '../custom-editable-geojson-layer'\n\nexport function getMeasurementToolsLayer({\n mode,\n ...defaultProps\n}: MeasurementToolsLayerProps & {}): LayerType {\n const props = getLayerProps({\n mode,\n ...defaultProps,\n })\n return {\n type: CustomEditableGeojsonLayer,\n props: {\n ...props,\n mode,\n data: [],\n } as unknown as LayerProps,\n }\n}\n\n/**\n * Gets the layer props for the MapMeasurementToolsLayer component.\n * @param layerProps - The layer props.\n * @param locale - The locale.\n * @param unit - The unit.\n * @param onHover - The onHover event handler.\n * @param onEdit - The onEdit event handler.\n * @param guideColor - The guide color.\n * @returns The layer props for the component.\n */\nfunction getLayerProps({\n mode,\n layerProps,\n locale,\n enabled,\n unit,\n onEdit,\n guideColor,\n pointColor,\n textOptions,\n}: MeasurementToolsLayerProps) {\n const _layerProps = deepmerge(layerProps, {\n visible: enabled,\n pickable: enabled,\n modeConfig: {\n // We force distance due to conversion is addressed at feature getText level\n formatTooltip: (_distance: number) => {\n return _distance\n },\n turfOptions: {\n units: MapMeasurementUnitTurf.meters,\n },\n },\n ...(enabled && { onEdit }),\n _subLayerProps: {\n tooltips: {\n outlineColor: [255, 255, 255, 255],\n outlineWidth: 6,\n fontSettings: {\n sdf: true, // needed for the outlineWidth and outlineColor attributes to be effective\n smoothing: 0.2,\n },\n getText: (properties: { text: MeasurementToolsState['distance'] }) => {\n // @ts-expect-error - fix EditGeoJSON methods\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return mode?.getTooltipText?.({\n meters: properties.text,\n locale,\n unit,\n options: textOptions,\n }) as string\n },\n updateTriggers: {\n getText: [unit, locale, textOptions],\n },\n },\n },\n })\n const defaultLayerProps = deepmerge(DEFAULT_LAYER_PROPS, {\n _subLayerProps: {\n guides: {\n getLineColor: guideColor,\n getFillColor: guideColor.with(3, 20),\n },\n },\n getEditHandlePointColor: pointColor,\n getEditHandlePointOutlineColor: guideColor,\n })\n\n const props = deepmerge(defaultLayerProps, _layerProps)\n return props\n}\n","import { createStore } from 'zustand'\nimport type {\n MeasurementToolsProviderProps,\n MeasurementToolsStore,\n} from './types'\nimport {\n DEFAULT_MEASUREMENT_TOOLS_MODES,\n DEFAULT_MEASUREMENT_TOOLS_UNITS,\n MapMeasurementUnitAuto,\n} from '../const'\nimport { CustomMeasureDistanceMode } from '../modes/custom-measurement-distance.class'\n\nexport const createMeasurementToolsStore = (\n initProps: MeasurementToolsProviderProps['values'],\n) => {\n return createStore<MeasurementToolsStore>()((set) => {\n const defaultProps = initProps.reduce(\n (acc, curr) => {\n const {\n mapId,\n modeSelected,\n modes = DEFAULT_MEASUREMENT_TOOLS_MODES,\n units = DEFAULT_MEASUREMENT_TOOLS_UNITS,\n distance = 0,\n finished = false,\n locale = 'en',\n positions = [],\n clearLayerOnStart = false,\n unit = MapMeasurementUnitAuto['m-km'],\n enabled = false,\n } = curr\n acc[mapId] = {\n modes,\n units,\n modeSelected,\n distance,\n finished,\n locale,\n positions,\n unit,\n clearLayerOnStart,\n enabled,\n }\n return acc\n },\n {} as MeasurementToolsStore['measurements'],\n )\n\n return {\n measurements: defaultProps,\n mode: CustomMeasureDistanceMode,\n setModeInstance: (mapId, modeInstance) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n modeInstance,\n },\n },\n }))\n },\n setModeSelected: (mapId, modeSelected) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n modeSelected,\n },\n },\n }))\n },\n setFinished: (mapId, finished) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n finished,\n },\n },\n }))\n },\n setDistance: (mapId, distance) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n distance,\n },\n },\n }))\n },\n setUnit: (mapId, unit) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n unit,\n },\n },\n }))\n },\n setLocale: (mapId, locale) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n locale,\n },\n },\n }))\n },\n setPositions: (mapId, positions) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n positions: [...positions],\n },\n },\n }))\n },\n setEnabled: (mapId, enabled) => {\n set((state) => ({\n measurements: {\n ...state.measurements,\n [mapId]: {\n ...state.measurements[mapId]!,\n enabled,\n },\n },\n }))\n },\n }\n })\n}\n","import {\n createContext,\n useContext,\n useState,\n type PropsWithChildren,\n} from 'react'\nimport { useStore } from 'zustand'\nimport { createMeasurementToolsStore } from './store'\nimport type { StoreApi } from 'zustand'\nimport type {\n MeasurementToolsProviderProps,\n MeasurementToolsStore,\n} from './types'\n\nconst MeasurementToolsContext = createContext<StoreApi<MeasurementToolsStore>>(\n {} as StoreApi<MeasurementToolsStore>,\n)\n\nexport function MeasurementToolsProvider({\n children,\n values,\n}: PropsWithChildren<MeasurementToolsProviderProps>) {\n const [storeRef] = useState(createMeasurementToolsStore(values))\n\n return (\n <MeasurementToolsContext.Provider value={storeRef}>\n {children}\n </MeasurementToolsContext.Provider>\n )\n}\n\nexport function useMeasurementToolsState<T>(\n selector: (state: MeasurementToolsStore) => T,\n): T {\n const store = useContext(MeasurementToolsContext)\n if (!Object.keys(store).length)\n throw new Error('Missing MeasurementToolsProvider in the tree')\n return useStore(store, selector)\n}\n","import { useCallback } from 'react'\nimport { useMeasurementToolsState } from './provider/provider'\nimport type { MeasurementToolsState } from './types'\n\nexport function useMeasurementTools({ mapId }: { mapId: string }) {\n const modes = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modes,\n )\n\n const units = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.units,\n )\n\n const distance = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.distance,\n )\n const _setDistance = useMeasurementToolsState((state) => state.setDistance)\n\n const setDistance = useCallback(\n (distance: number) => _setDistance(mapId, distance),\n [_setDistance, mapId],\n )\n\n const clearLayerOnStart = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.clearLayerOnStart,\n )\n\n const enabled = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.enabled,\n )\n const _setVisibility = useMeasurementToolsState((state) => state.setEnabled)\n\n const setEnabled = useCallback(\n (enabled: MeasurementToolsState['enabled']) =>\n _setVisibility(mapId, enabled),\n [_setVisibility, mapId],\n )\n\n const modeSelected = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modeSelected,\n )\n\n const _setModeSelected = useMeasurementToolsState(\n (state) => state.setModeSelected,\n )\n\n const setModeSelected = useCallback(\n (mode: MeasurementToolsState['modeSelected']) => {\n setEnabled(!!mode)\n _setModeSelected(mapId, mode)\n },\n [_setModeSelected, mapId, setEnabled],\n )\n\n const finished = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.finished,\n )\n const _setFinished = useMeasurementToolsState((state) => state.setFinished)\n\n const setFinished = useCallback(\n (finished: MeasurementToolsState['finished']) =>\n _setFinished(mapId, finished),\n [_setFinished, mapId],\n )\n\n const locale = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.locale,\n )\n const _setLocale = useMeasurementToolsState((state) => state.setLocale)\n\n const setLocale = (locale: MeasurementToolsState['locale']) =>\n _setLocale(mapId, locale)\n\n const modeInstance = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.modeInstance,\n )\n\n const _setInstance = useMeasurementToolsState(\n (state) => state.setModeInstance,\n )\n\n const setModeInstance = useCallback(\n (modeInstance: MeasurementToolsState['modeInstance']) =>\n _setInstance(mapId, modeInstance),\n [_setInstance, mapId],\n )\n\n const positions = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.positions,\n )\n const _setPositions = useMeasurementToolsState((state) => state.setPositions)\n\n const setPositions = useCallback(\n (positions: MeasurementToolsState['positions']) =>\n _setPositions(mapId, positions),\n [mapId, _setPositions],\n )\n\n const unit = useMeasurementToolsState(\n (state) => state.measurements[mapId]!.unit,\n )\n const _setUnit = useMeasurementToolsState((state) => state.setUnit)\n\n const setUnit = useCallback(\n (unit: MeasurementToolsState['unit']) => _setUnit(mapId, unit),\n [_setUnit, mapId],\n )\n\n const clearLayer = useCallback(() => {\n modeInstance?.resetClickSequence()\n setPositions([])\n }, [modeInstance, setPositions])\n\n const toggleLayer = useCallback(\n (enabled: boolean) => {\n setEnabled(enabled)\n },\n [setEnabled],\n )\n\n return {\n modes,\n units,\n distance,\n clearLayerOnStart,\n modeSelected,\n enabled,\n finished,\n locale,\n modeInstance,\n positions,\n unit,\n setDistance,\n setModeSelected,\n setFinished,\n setLocale,\n setPositions,\n setUnit,\n setEnabled,\n toggleLayer,\n clearLayer,\n setModeInstance,\n }\n}\n","import { useCallback, useEffect } from 'react'\nimport type { MeasurementToolsControlProps } from './types'\nimport { useMeasurementTools } from './use-measurement-tools'\nimport { getTextLayerFormattedDistance } from './utils'\n\nexport function MeasurementToolsControl({\n mapId,\n textOptions,\n children,\n}: MeasurementToolsControlProps) {\n const {\n modes,\n units,\n distance,\n setDistance,\n clearLayerOnStart,\n modeSelected,\n setModeSelected,\n enabled,\n setEnabled,\n finished,\n setFinished,\n locale,\n setLocale,\n modeInstance,\n setModeInstance,\n positions,\n setPositions,\n unit,\n setUnit,\n clearLayer,\n toggleLayer: _toggleLayer,\n } = useMeasurementTools({ mapId })\n\n useEffect(() => {\n if (modeSelected && modes[modeSelected]) {\n const ModeClass = modes[modeSelected].mode\n setModeInstance(new ModeClass())\n }\n return () => {\n setPositions([])\n }\n }, [modes, modeSelected, setPositions, setModeInstance, setEnabled])\n\n const toggleLayer = useCallback(\n (enable: boolean) => {\n if (enable && (clearLayerOnStart || !finished)) {\n clearLayer()\n }\n _toggleLayer(enable)\n },\n [_toggleLayer, clearLayer, clearLayerOnStart, finished],\n )\n return children({\n mapId,\n distance,\n enabled,\n finished,\n locale,\n positions,\n unit,\n clearLayerOnStart: !!clearLayerOnStart,\n modeSelected: modeSelected!,\n modes,\n units,\n value: getTextLayerFormattedDistance({\n meters: distance,\n unit,\n locale,\n options: textOptions,\n }),\n modeInstance: modeInstance!,\n setModeSelected,\n setDistance,\n setFinished,\n setLocale,\n setPositions,\n setUnit,\n setEnabled,\n toggleLayer,\n clearLayer,\n })\n}\n","import { useCallback, useEffect, useRef } from 'react'\nimport { useLayerStore } from '../../providers/layers/store'\nimport { useMapStore } from '../../providers/map/provider'\nimport { DEFAULT_PROPS, MAP_MEASURE_LAYER_ID } from './const'\nimport { EditType } from './../const'\nimport { getMeasurementToolsLayer } from './layer'\nimport { MeasurementToolsControl } from './measurement-tools-control'\nimport type {\n MeasurementToolsLayerEditProps,\n MeasurementToolsProps,\n} from './types'\nimport { useMeasurementTools } from './use-measurement-tools'\nimport { useShallow } from 'zustand/shallow'\nimport type { Layer, LayerProps } from '@deck.gl/core'\nimport { useEventManager } from '../../use-event-manager'\n\nconst EXCEPTED_LAYER_IDS = [MAP_MEASURE_LAYER_ID]\n\nexport function MeasurementTools({\n children,\n mapId,\n defaultProps: { styles = DEFAULT_PROPS.styles } = {\n styles: DEFAULT_PROPS.styles,\n },\n layerProps,\n textOptions,\n}: MeasurementToolsProps & {\n children?: React.ReactNode\n}) {\n const {\n setDistance,\n enabled,\n finished,\n setFinished,\n locale,\n setPositions,\n unit,\n modeInstance,\n } = useMeasurementTools({ mapId })\n\n const setLayer = useLayerStore((state) => state.setLayer)\n const getController = useMapStore((state) => state.getController)\n const setController = useMapStore((state) => state.setController)\n const addLayers = useMapStore((state) => state.addLayers)\n const removeLayers = useMapStore((state) => state.removeLayers)\n const mapLayers = useMapStore(\n useShallow((state) =>\n state.maps[mapId]?.layers.filter((l) => !EXCEPTED_LAYER_IDS.includes(l)),\n ),\n )\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const mapLayersVisibilityRef = useRef<Record<string, boolean>>({})\n\n useEventManager({ mapId, layerId: MAP_MEASURE_LAYER_ID })\n\n useEffect(() => {\n const controller = getController(mapId)\n\n if (enabled) {\n addLayers(mapId, [MAP_MEASURE_LAYER_ID])\n\n setController(mapId, {\n doubleClickZoom: false,\n })\n }\n\n return () => {\n removeLayers(mapId, [MAP_MEASURE_LAYER_ID])\n setController(mapId, controller)\n }\n }, [addLayers, enabled, getController, mapId, removeLayers, setController])\n\n useEffect(() => {\n mapLayers?.forEach((layerId) => {\n const currentLayer = getDeckInstance(mapId)?.props.layers.find(\n (l) => (l as Layer<LayerProps>).props.id === layerId,\n ) as Layer<LayerProps>\n\n if (!currentLayer) return\n\n if (enabled) {\n mapLayersVisibilityRef.current[layerId] = currentLayer?.props.pickable\n }\n\n const pickable =\n !enabled &&\n (mapLayersVisibilityRef.current[layerId] ??\n currentLayer?.props.pickable)\n\n setLayer(layerId, {\n props: {\n pickable,\n },\n })\n })\n }, [enabled, getDeckInstance, mapId, mapLayers, setLayer])\n\n const onEdit = useCallback(\n ({ editType, editContext }: MeasurementToolsLayerEditProps) => {\n if (editType === EditType.cancel) {\n modeInstance!.resetClickSequence()\n return\n }\n\n if (editType === EditType.addPosition) {\n setDistance(editContext.distance)\n }\n\n setFinished(!!editContext.finished)\n\n const positions = editContext.positions\n\n if (positions?.length) {\n setPositions(positions)\n }\n },\n [modeInstance, setDistance, setFinished, setPositions],\n )\n\n useEffect(() => {\n const guideColor = finished ? styles.colors.finished : styles.colors.editing\n const pointColor = finished ? styles.colors.finished : styles.colors.point\n\n const layer = getMeasurementToolsLayer({\n layerProps: {\n ...layerProps,\n pickable: layerProps?.pickable ?? !finished,\n },\n enabled,\n guideColor,\n pointColor,\n locale,\n onEdit,\n unit,\n mode: modeInstance!,\n textOptions: textOptions,\n })\n\n setLayer(MAP_MEASURE_LAYER_ID, layer)\n }, [\n finished,\n modeInstance,\n layerProps,\n locale,\n onEdit,\n setLayer,\n styles.colors.editing,\n styles.colors.finished,\n styles.colors.point,\n textOptions,\n unit,\n enabled,\n ])\n\n return children\n}\n\nMeasurementTools.Controls = MeasurementToolsControl\n","import { useMemo } from 'react'\nimport { useLayerStore } from './providers/layers/store'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\n\nexport function useLayers({ mapId }: { mapId: MapComponentProps['id'] }) {\n const { layers: layersMap } = useMapStore((state) => state.maps[mapId]!)\n const layers = useLayerStore((state) => state.layers)\n\n const computedLayers = useMemo(() => {\n return layersMap\n .map((layerId) => layers[layerId])\n .filter((layer) => !!layer)\n }, [layers, layersMap])\n\n return computedLayers\n}\n","import { MAP_MEASURE_LAYER_ID } from '../editable/measurement-tools/const'\nimport {\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MASK_LAYER_ID,\n} from '../editable/lasso-tools/const'\nimport type { Layer } from '../providers/layers/types'\n\nconst defaultLastLayerOrder = [\n MAP_MASK_LAYER_ID,\n MAP_LASSO_TOOLS_LAYER_ID,\n MAP_MEASURE_LAYER_ID,\n]\n\nexport function sortLayers(layers: Layer[]) {\n const sortedLayers = layers\n .filter((layer) => !defaultLastLayerOrder.includes(layer.props.id!))\n .sort((a, b) => (a.order ?? Infinity) - (b.order ?? Infinity))\n\n const lastLayers = defaultLastLayerOrder\n .map((id) => layers.find((layer) => layer.props.id === id))\n .filter((l) => !!l)\n\n return [...sortedLayers, ...lastLayers]\n}\n","import { useCallback, useMemo, useRef } from 'react'\nimport type {\n Layer,\n MapViewState,\n ViewStateChangeParameters,\n} from '@deck.gl/core'\nimport { DeckGLComponent } from './deckgl'\nimport type { DeckGLComponentProps, MapComponentProps } from '../types'\nimport { useMapStore } from '../providers/map/provider'\nimport { useLayers } from '../use-layers'\nimport { sortLayers } from '../utils/sort-layers'\nimport type { DeckGLProps } from '@deck.gl/react'\n\nconst ZOOM_DEBOUNCE_MS = 200\n\nexport function MapComponent({\n id,\n onLoad,\n onViewStateChange,\n ...props\n}: MapComponentProps) {\n const basemap = useMapStore((state) => state.maps[id]!.basemap)\n const instanceRef = useMapStore((state) => state.maps[id]!.instanceRef)\n const overlayRef = useMapStore((state) => state.maps[id]!.overlayRef)\n const timerRef = useRef<NodeJS.Timeout | null>(null)\n const viewState = useMapStore((state) => state.viewStates[id])\n const controller = useMapStore((state) => state.maps[id]!.controller)\n const getDeckInstance = useMapStore((state) => state.getDeckInstance)\n const setViewState = useMapStore((state) => state.setViewState)\n const setLoad = useMapStore((state) => state.setLoad)\n const setLayersLoad = useMapStore((state) => state.setLayersLoad)\n const updateViewPort = useMapStore((state) => state.updateViewPort)\n\n const layers = useLayers({ mapId: id })\n const computedLayers = useMemo(() => {\n return sortLayers(layers)\n }, [layers])\n\n const handleViewStateChange = useCallback(\n (newViewState: ViewStateChangeParameters<MapViewState>) => {\n const callback = setViewState\n\n if (timerRef.current) {\n clearInterval(timerRef.current)\n }\n timerRef.current = setTimeout(() => {\n updateViewPort(id)\n }, ZOOM_DEBOUNCE_MS)\n\n if (onViewStateChange) {\n onViewStateChange(newViewState, callback)\n return\n }\n\n callback(id, newViewState.viewState)\n },\n [id, onViewStateChange, setViewState, updateViewPort],\n )\n\n const handleLoad = useCallback(\n (value: Parameters<NonNullable<DeckGLComponentProps['onLoad']>>[0]) => {\n setLoad(id, value)\n onLoad?.(value)\n updateViewPort(id)\n },\n [id, onLoad, setLoad, updateViewPort],\n )\n\n const handleAfterRender = useCallback(\n (\n context: Parameters<\n NonNullable<DeckGLComponentProps['onAfterRender']>\n >[0],\n ) => {\n const layers = getDeckInstance(id)?.props.layers\n const areLayersLoaded = !!layers?.every(\n (layer) => (layer as Layer<never>)?.isLoaded,\n )\n setLayersLoad(id, areLayersLoaded)\n props.onAfterRender?.(context)\n },\n [getDeckInstance, id, props, setLayersLoad],\n )\n\n // NOTE: destructuring here to keep the reference to the props object outside of the useCallback\n const _onDragEnd = props.onDragEnd\n const handleDragEnd = useCallback(\n (...args: Parameters<NonNullable<DeckGLProps['onDragEnd']>>) => {\n updateViewPort(id)\n if (_onDragEnd) {\n _onDragEnd(...args)\n }\n },\n [id, updateViewPort, _onDragEnd],\n )\n\n return (\n <DeckGLComponent\n {...props}\n controller={controller}\n id={id}\n layers={computedLayers}\n instanceRef={instanceRef}\n overlayRef={overlayRef}\n basemap={basemap}\n initialViewState={viewState}\n onLoad={handleLoad}\n onViewStateChange={handleViewStateChange}\n onAfterRender={handleAfterRender}\n onDragEnd={handleDragEnd}\n />\n )\n}\n","const m = \"https://gcp-us-east1.api.carto.com\", w = \"v3\", B = \"ps\", O = {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n};\nfunction P(e, n) {\n return Array.isArray(n) ? `${e}=${encodeURIComponent(JSON.stringify(n))}` : n == null || n === \"\" ? \"\" : typeof n == \"object\" ? `${e}=${encodeURIComponent(JSON.stringify(n))}` : `${e}=${encodeURIComponent(n)}`;\n}\nfunction C({\n params: e,\n url: n\n}) {\n if (!e)\n return n;\n const t = Object.entries(e).map(\n ([a, s]) => P(a, s)\n );\n return `${n}?${t.filter(Boolean).join(\"&\")}`;\n}\nfunction L(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nvar j, I;\nfunction M() {\n if (I) return j;\n I = 1;\n var e = function(o) {\n return n(o) && !t(o);\n };\n function n(r) {\n return !!r && typeof r == \"object\";\n }\n function t(r) {\n var o = Object.prototype.toString.call(r);\n return o === \"[object RegExp]\" || o === \"[object Date]\" || l(r);\n }\n var a = typeof Symbol == \"function\" && Symbol.for, s = a ? Symbol.for(\"react.element\") : 60103;\n function l(r) {\n return r.$$typeof === s;\n }\n function u(r) {\n return Array.isArray(r) ? [] : {};\n }\n function i(r, o) {\n return o.clone !== !1 && o.isMergeableObject(r) ? E(u(r), r, o) : r;\n }\n function T(r, o, c) {\n return r.concat(o).map(function(A) {\n return i(A, c);\n });\n }\n function p(r, o) {\n if (!o.customMerge)\n return E;\n var c = o.customMerge(r);\n return typeof c == \"function\" ? c : E;\n }\n function _(r) {\n return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(r).filter(function(o) {\n return Object.propertyIsEnumerable.call(r, o);\n }) : [];\n }\n function f(r) {\n return Object.keys(r).concat(_(r));\n }\n function y(r, o) {\n try {\n return o in r;\n } catch {\n return !1;\n }\n }\n function g(r, o) {\n return y(r, o) && !(Object.hasOwnProperty.call(r, o) && Object.propertyIsEnumerable.call(r, o));\n }\n function d(r, o, c) {\n var A = {};\n return c.isMergeableObject(r) && f(r).forEach(function(b) {\n A[b] = i(r[b], c);\n }), f(o).forEach(function(b) {\n g(r, b) || (y(r, b) && c.isMergeableObject(o[b]) ? A[b] = p(b, c)(r[b], o[b], c) : A[b] = i(o[b], c));\n }), A;\n }\n function E(r, o, c) {\n c = c || {}, c.arrayMerge = c.arrayMerge || T, c.isMergeableObject = c.isMergeableObject || e, c.cloneUnlessOtherwiseSpecified = i;\n var A = Array.isArray(o), b = Array.isArray(r), V = A === b;\n return V ? A ? c.arrayMerge(r, o, c) : d(r, o, c) : i(o, c);\n }\n E.all = function(o, c) {\n if (!Array.isArray(o))\n throw new Error(\"first argument should be an array\");\n return o.reduce(function(A, b) {\n return E(A, b, c);\n }, {});\n };\n var h = E;\n return j = h, j;\n}\nvar D = M();\nconst R = /* @__PURE__ */ L(D);\nfunction S(e) {\n return R(\n {\n method: O.get,\n headers: {\n Accept: \"application/json\"\n }\n },\n e\n );\n}\nfunction $(e, n) {\n return R(\n {\n method: O.post,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(n)\n },\n e\n );\n}\nconst N = {\n GET: S,\n POST: $,\n PUT: $,\n PATCH: $,\n DELETE: S\n};\nfunction k({\n body: e,\n accessToken: n,\n method: t,\n ...a\n}) {\n let s = n;\n return s && !s.includes(\"Bearer\") && (s = \"Bearer \" + s), N[t](\n R(\n {\n method: t,\n headers: { ...!!s && { authorization: s } }\n },\n a\n ),\n e\n );\n}\nconst F = 6144;\nasync function U({\n signal: e,\n body: n,\n accessToken: t,\n credentials: a,\n method: s = O.get,\n params: l,\n url: u,\n requestOptions: { getMaxUrlLength: i } = {\n getMaxUrlLength: F\n },\n ...T\n}) {\n let p = C({ url: u, params: l }), _ = n, f = s;\n s === O.get && p.length > i && (_ = l, f = O.post, p = u);\n const y = k({\n body: _,\n accessToken: t ?? a?.accessToken,\n method: f,\n ...T\n });\n e && (y.signal = e);\n const g = await fetch(p, y);\n if (!g.ok) {\n const E = await g.text();\n throw new Error(E);\n }\n return g.status === 204 ? Promise.resolve() : await g.json();\n}\nconst x = {\n running: \"running\",\n pending: \"pending\",\n failure: \"failure\",\n cancelled: \"cancelled\",\n success: \"success\"\n};\nfunction J({\n accessToken: e,\n connection: n,\n credentials: t,\n sources: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/export`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.post,\n body: {\n sources: a\n },\n ...i\n });\n}\nasync function v({\n accessToken: e,\n connection: n,\n credentials: t,\n query: a,\n metadata: s,\n baseUrl: l = m,\n apiVersion: u = \"v3\",\n fetcherOptions: { signal: i, ...T } = {}\n}) {\n const p = e ?? t?.accessToken, _ = l ?? t?.apiBaseUrl, f = u ?? t?.apiVersion, y = `${_}/${f}/sql/${n}/job`;\n return U({\n accessToken: p,\n signal: i,\n url: y,\n method: O.post,\n body: {\n query: a.trim(),\n metadata: s\n },\n ...T\n });\n}\nasync function G({\n url: e,\n accessToken: n,\n credentials: t,\n params: a = {},\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = n ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/lds/${e}`;\n return U({\n signal: u,\n accessToken: T,\n url: f,\n method: O.get,\n params: a,\n ...i\n });\n}\nasync function Q({\n accessToken: e,\n connection: n,\n query: t,\n credentials: a,\n params: s = {},\n queryParameters: l,\n method: u = O.get,\n baseUrl: i = m,\n apiVersion: T = \"v3\",\n fetcherOptions: { signal: p, ..._ } = {}\n}) {\n const f = e ?? a?.accessToken, y = i ?? a?.apiBaseUrl, g = T ?? a?.apiVersion, d = `${y}/${g}/sql/${n}/query`, E = q(t), h = u !== O.get ? \"body\" : \"params\";\n return U({\n signal: p,\n accessToken: f,\n url: d,\n method: u,\n [h]: {\n q: E,\n ...s,\n queryParameters: l\n },\n ..._\n });\n}\nfunction q(e) {\n return e && e.replace(\n /'([^'\\\\]*(\\\\.[^'\\\\]*)*)'|\"([^\"\\\\]*(\\\\.[^\"\\\\]*)*)\"/g,\n (n) => n\n ).replace(/\\/\\*[\\s\\S]*?\\*\\//g, \" \").replace(/--.*$/gm, \"\").replace(/\\s+/g, \" \").trim();\n}\nasync function H({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/export/${a}`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.get,\n ...i\n });\n}\nasync function z({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n baseUrl: s = m,\n apiVersion: l = \"v3\",\n fetcherOptions: { signal: u, ...i } = {}\n}) {\n const T = e ?? t?.accessToken, p = s ?? t?.apiBaseUrl, _ = l ?? t?.apiVersion, f = `${p}/${_}/sql/${n}/job/${a}`;\n return U({\n accessToken: T,\n signal: u,\n url: f,\n method: O.get,\n ...i\n });\n}\nasync function K({\n accessToken: e,\n connection: n,\n credentials: t,\n metadataFilter: a = void 0,\n createdSince: s = void 0,\n userId: l = void 0,\n baseUrl: u = m,\n apiVersion: i = \"v3\",\n fetcherOptions: { signal: T, ...p } = {}\n}) {\n const _ = e ?? t?.accessToken, f = u ?? t?.apiBaseUrl, y = i ?? t?.apiVersion, g = `${f}/${y}/sql/${n}/jobs`;\n return U({\n accessToken: _,\n signal: T,\n url: g,\n method: O.get,\n params: {\n user_id: l,\n created_since: s,\n metadata_filter: a\n },\n ...p\n });\n}\nfunction X({\n accessToken: e,\n connection: n,\n credentials: t,\n jobId: a,\n metadata: s,\n baseUrl: l = m,\n apiVersion: u = \"v3\",\n fetcherOptions: { signal: i, ...T } = {}\n}) {\n const p = e ?? t?.accessToken, _ = l ?? t?.apiBaseUrl, f = u ?? t?.apiVersion, y = `${_}/${f}/sql/${n}/job/${a}`;\n return U({\n accessToken: p,\n signal: i,\n url: y,\n method: O.patch,\n body: {\n metadata: s\n },\n ...T\n });\n}\nexport {\n m as DEFAULT_CARTO_API_URL,\n w as DEFAULT_CARTO_API_VERSION,\n B as DEFAULT_CLIENT_ID,\n O as RequestMethods,\n J as createExport,\n v as createJob,\n U as executeFetch,\n G as executeLDS,\n Q as executeSQL,\n H as getExport,\n z as getJob,\n x as jobStatus,\n K as listJobs,\n X as updateJob\n};\n//# sourceMappingURL=index.js.map\n","export const Method = {\n INIT: 'init',\n LOAD_GEOJSON: 'loadGeoJSON',\n GET_FORMULA: 'getFormula',\n GET_HISTOGRAM: 'getHistogram',\n GET_CATEGORIES: 'getCategories',\n GET_SCATTER: 'getScatter',\n GET_TABLE: 'getTable',\n GET_TIME_SERIES: 'getTimeSeries',\n GET_RANGE: 'getRange',\n GET_AGGREGATIONS: 'getAggregations',\n GET_EXTENT: 'getExtent',\n} as const\n","import type { FeatureData } from './types'\n\nexport function geojsonFeatures({\n geojson,\n uniqueIdProperty,\n}: {\n geojson: FeatureData[]\n uniqueIdProperty?: string\n}): FeatureData[] {\n return geojson.map((f) => {\n const properties = f.properties ?? {}\n const updatedProperties =\n uniqueIdProperty && properties[uniqueIdProperty] != null\n ? properties\n : {\n ...properties,\n id: uniqueIdProperty ? String(properties[uniqueIdProperty]) : '',\n }\n\n return {\n ...f,\n properties: updatedProperties,\n }\n })\n}\n","import {\n aggregationFunctions,\n AggregationTypes,\n applyFilters,\n applySorting,\n getApplicableFilters,\n groupValuesByColumn,\n groupValuesByDateColumn,\n histogram,\n OTHERS_CATEGORY_NAME,\n scatterPlot,\n WidgetSource,\n type AggregationsRequestOptions,\n type AggregationsResponse,\n type CategoryRequestOptions,\n type CategoryResponse,\n type ExtentResponse,\n type FeaturesResponse,\n type Filter,\n type FormulaRequestOptions,\n type FormulaResponse,\n type HistogramRequestOptions,\n type HistogramResponse,\n type RangeRequestOptions,\n type RangeResponse,\n type ScatterRequestOptions,\n type ScatterResponse,\n type SpatialFilter,\n type TableRequestOptions,\n type TableResponse,\n type TimeSeriesRequestOptions,\n type TimeSeriesResponse,\n} from '@carto/api-client'\nimport { geojsonFeatures } from './geojson-features'\nimport type { WidgetGeoJsonSourceProps } from './widget-geojson-source'\nimport type { FeatureData } from './types'\nimport { bbox, booleanIntersects, feature, featureCollection } from '@turf/turf'\n\n// TODO(cleanup): Parameter defaults in source functions and widget API calls are\n// currently duplicated and possibly inconsistent. Consider consolidating and\n// operating on Required<T> objects. See:\n// https://github.com/CartoDB/carto-api-client/issues/39\n\n/**\n * Local (in-memory) implementation of geojson widget calculations. This class\n * may be instantiated by {@link WidgetGeoJsonSource} in a Web Worker when\n * supported, or on the main thread.\n */\nexport class WidgetGeoJsonSourceImpl extends WidgetSource<WidgetGeoJsonSourceProps> {\n private features: FeatureData[] = []\n\n protected _filterFeaturesBySpatial(spatialFilter?: SpatialFilter) {\n if (!spatialFilter) {\n return this.features\n }\n\n return this.features.filter((f) => {\n return booleanIntersects(f, feature(spatialFilter))\n })\n }\n\n /**\n * Loads features as GeoJSON.\n */\n loadGeoJSON({ geojson }: { geojson: FeatureData[] }) {\n this.features = geojsonFeatures({\n geojson,\n })\n }\n\n override getFeatures(): Promise<FeaturesResponse> {\n return Promise.reject(new Error('getFeatures not supported for geojson'))\n }\n\n getFormula({\n column = '*',\n operation = AggregationTypes.Count,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: FormulaRequestOptions): Promise<FormulaResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (filteredFeatures.length === 0) {\n return Promise.resolve({ value: null })\n }\n\n if (operation === AggregationTypes.Custom) {\n throw new Error('Custom aggregation not supported for geojson')\n }\n\n // Column is required except when operation is 'count'.\n if ((column && column !== '*') || operation !== AggregationTypes.Count) {\n assertColumn(filteredFeatures, column)\n }\n\n const targetOperation = aggregationFunctions[operation]\n assert(targetOperation, `Unsupported aggregation operation: ${operation}`)\n\n return Promise.resolve({\n value: targetOperation(\n filteredFeatures.map((f) => f?.properties as unknown),\n column,\n joinOperation,\n ),\n })\n }\n\n override getHistogram({\n operation = AggregationTypes.Count,\n ticks,\n column,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: HistogramRequestOptions): Promise<HistogramResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, column)\n\n return Promise.resolve(\n histogram({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(column),\n joinOperation,\n ticks,\n operation,\n }),\n )\n }\n\n override getCategories({\n column,\n operation = AggregationTypes.Count,\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n othersThreshold,\n orderBy = 'frequency_desc',\n rawResult,\n }: CategoryRequestOptions): Promise<CategoryResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, column, operationColumn!)\n\n const result = groupValuesByColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn ?? column),\n joinOperation,\n keysColumn: column,\n operation,\n othersThreshold,\n orderBy,\n })\n\n if (rawResult) {\n return Promise.resolve(result as unknown as CategoryResponse)\n }\n\n if (!othersThreshold) {\n return Promise.resolve(result?.rows ?? [])\n }\n\n return Promise.resolve([\n ...(result?.rows ?? []),\n { name: OTHERS_CATEGORY_NAME, value: result?.metadata?.others ?? 0 },\n ])\n }\n\n override getScatter({\n xAxisColumn,\n yAxisColumn,\n xAxisJoinOperation,\n yAxisJoinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: ScatterRequestOptions): Promise<ScatterResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve([])\n }\n\n assertColumn(filteredFeatures, xAxisColumn, yAxisColumn)\n\n return Promise.resolve(\n scatterPlot({\n data: filteredFeatures,\n xAxisColumns: normalizeColumns(xAxisColumn),\n xAxisJoinOperation,\n yAxisColumns: normalizeColumns(yAxisColumn),\n yAxisJoinOperation,\n }),\n )\n }\n\n override getTable({\n columns,\n searchFilterColumn,\n searchFilterText,\n sortBy,\n sortDirection,\n sortByColumnType,\n offset = 0,\n limit = 10,\n filters,\n filterOwner,\n spatialFilter,\n }: TableRequestOptions): Promise<TableResponse> {\n // Filter.\n let filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [], totalCount: 0 })\n }\n\n // Search.\n // TODO(v0.6): Remove \"searchFilterText\" and \"searchFilterColumn\".\n if (searchFilterColumn && searchFilterText) {\n // eslint-disable-next-line no-console\n console.warn(\n 'WidgetGeoJsonSource: \"searchFilterText\" is deprecated, use \"filters\" and FilterType.STRING_SEARCH instead.',\n )\n filteredFeatures = filteredFeatures.filter(\n (row) =>\n row[searchFilterColumn] &&\n String(row[searchFilterColumn] as unknown)\n .toLowerCase()\n .includes(String(searchFilterText).toLowerCase()),\n )\n }\n\n // Sort.\n let rows = applySorting(filteredFeatures, {\n sortBy,\n sortByDirection: sortDirection,\n sortByColumnType,\n })\n const totalCount = rows.length\n\n // Offset and limit.\n rows = rows.slice(\n Math.min(offset, totalCount),\n Math.min(offset + limit, totalCount),\n )\n\n // Select columns.\n rows = rows.map((srcRow: FeatureData['properties']) => {\n const dstRow: FeatureData['properties'] = {}\n if (srcRow) {\n for (const column of columns) {\n dstRow[column] = srcRow[column] as unknown\n }\n }\n return dstRow\n })\n\n return Promise.resolve({ rows, totalCount } as TableResponse)\n }\n\n override getTimeSeries({\n column,\n stepSize,\n operation,\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: TimeSeriesRequestOptions): Promise<TimeSeriesResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [] })\n }\n\n assertColumn(filteredFeatures, column, operationColumn!)\n assert(operation !== 'custom', 'Custom operation not supported for geojson')\n\n const rows =\n groupValuesByDateColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn ?? column),\n keysColumn: column,\n groupType: stepSize,\n operation,\n joinOperation,\n }) ?? []\n\n return Promise.resolve({ rows })\n }\n\n override getRange({\n column,\n filters,\n filterOwner,\n spatialFilter,\n }: RangeRequestOptions): Promise<RangeResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n // TODO: Is this the only nullable response in the Widgets API? If so,\n // can we do something more consistent?\n return Promise.resolve(null)\n }\n\n assertColumn(filteredFeatures, column)\n\n return Promise.resolve({\n min: aggregationFunctions.min(filteredFeatures, column),\n max: aggregationFunctions.max(filteredFeatures, column),\n })\n }\n\n getAggregations({\n aggregations,\n filters,\n filterOwner,\n spatialFilter,\n }: AggregationsRequestOptions): Promise<AggregationsResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner,\n )\n\n if (!filteredFeatures.length) {\n return Promise.resolve({ rows: [] })\n }\n\n // SQL aggregations require remote execution, and are not supported for geojson.\n assert(\n typeof aggregations !== 'string',\n 'Unsupported geojson SQL aggregation',\n )\n\n // Handle array-based aggregations\n const result: Record<string, number> = {}\n const usedAliases = new Set<string>()\n\n for (const { column, operation, alias } of aggregations) {\n // Column is required except when operation is 'count'.\n if ((column && column !== '*') || operation !== AggregationTypes.Count) {\n assertColumn(filteredFeatures, column)\n }\n\n const aliasKey = alias.toLowerCase()\n assert(!usedAliases.has(aliasKey), `Duplicate alias: ${aliasKey}`)\n usedAliases.add(aliasKey)\n\n const targetOperation = aggregationFunctions[operation]\n assert(targetOperation, `Unsupported operation: ${operation}`)\n\n result[alias] = targetOperation(filteredFeatures, column)\n }\n\n return Promise.resolve({ rows: [result] })\n }\n\n /** @experimental */\n getExtent(): Promise<ExtentResponse> {\n const _bbox = bbox(featureCollection(this.features))\n return Promise.resolve({ bbox: _bbox })\n }\n\n /****************************************************************************\n * INTERNAL\n */\n\n private _getFilteredFeatures(\n spatialFilter?: SpatialFilter,\n filters?: Record<string, Filter>,\n filterOwner?: string,\n ): NonNullable<FeatureData['properties']>[] {\n const _features = this._filterFeaturesBySpatial(spatialFilter)\n return applyFilters(\n _features.map((f) => f.properties ?? {}),\n getApplicableFilters(filterOwner, filters ?? this.props.filters),\n this.props.filtersLogicalOperator ?? 'and',\n )\n }\n}\n\nfunction assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(message)\n }\n}\n\nfunction assertColumn(\n features: FeatureData['properties'][],\n ...columnArgs: string[] | string[][]\n) {\n // Due to the multiple column shape, we normalise it as an array with normalizeColumns\n const columns = Array.from(new Set(columnArgs.map(normalizeColumns).flat()))\n\n const featureKeys = Object.keys(features[0] ?? {})\n\n // For backward compatibility, '' should pass column validation. For example,\n // operation='count',operationColumn='' is accepted.\n const invalidColumns = columns.filter(\n (column) => column && !featureKeys.includes(column),\n )\n\n if (invalidColumns.length) {\n throw new Error(`Missing column(s): ${invalidColumns.join(', ')}`)\n }\n}\n\nfunction normalizeColumns(columns: string | string[]): string[] {\n return Array.isArray(columns)\n ? columns\n : typeof columns === 'string'\n ? [columns]\n : []\n}\n","import {\n WidgetSource,\n type AggregationsRequestOptions,\n type AggregationsResponse,\n type CategoryRequestOptions,\n type CategoryResponse,\n type ExtentResponse,\n type FeaturesResponse,\n type FormulaRequestOptions,\n type FormulaResponse,\n type HistogramRequestOptions,\n type HistogramResponse,\n type RangeRequestOptions,\n type RangeResponse,\n type ScatterRequestOptions,\n type ScatterResponse,\n type SpatialFilter,\n type TableRequestOptions,\n type TableResponse,\n type TilesetSourceOptions,\n type TimeSeriesRequestOptions,\n type TimeSeriesResponse,\n type WidgetSourceProps,\n} from '@carto/api-client'\nimport type { Feature } from 'geojson'\nimport { Method } from './const'\nimport { WidgetGeoJsonSourceImpl } from './widget-geojson-source-impl'\nimport type { FeatureData, WorkerRequest, WorkerResponse } from './types'\nimport Worker from './widget-geojson-worker?worker&inline'\n\nexport type WidgetGeoJsonSourceProps = WidgetSourceProps &\n Omit<TilesetSourceOptions, 'filters' | 'tableName'> & {\n data: Feature[] | string\n }\n\nexport interface WidgetGeoJsonSourceResult {\n widgetSource: WidgetGeoJsonSource\n}\n\n/**\n * Source for Widget API requests on a data source defined by a geojson.\n */\nexport class WidgetGeoJsonSource<\n Props extends WidgetGeoJsonSourceProps = WidgetGeoJsonSourceProps,\n> extends WidgetSource<Props> {\n protected _localImpl: WidgetGeoJsonSourceImpl | null = null\n\n protected _workerImpl: Worker | null = null\n protected _workerEnabled: boolean\n protected _workerNextRequestId = 1\n\n constructor(props: Props) {\n super(props)\n\n this._workerEnabled =\n (props.widgetWorker ?? true) && typeof Worker !== 'undefined'\n\n if (!this._workerEnabled) {\n this._localImpl = new WidgetGeoJsonSourceImpl(this.props)\n }\n }\n\n override destroy() {\n this._localImpl?.destroy()\n this._localImpl = null\n\n this._workerImpl?.terminate()\n this._workerImpl = null\n\n super.destroy()\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // WEB WORKER MANAGEMENT\n\n /**\n * Returns an initialized Worker, to be reused for the lifecycle of this\n * source instance.\n */\n protected _getWorker(): Worker {\n if (this._workerImpl) {\n return this._workerImpl\n }\n\n this._workerImpl = new Worker({\n name: 'cartowidgetgeojson',\n })\n\n this._workerImpl.addEventListener('error', (e) => {\n // eslint-disable-next-line no-console\n console.error('widget-geojson-source worker error', e)\n })\n\n this._workerImpl.postMessage({\n method: Method.INIT,\n params: [this.props],\n } as WorkerRequest)\n\n return this._workerImpl\n }\n\n /** Executes a given method on the worker. */\n protected _executeWorkerMethod<T>(\n method: (typeof Method)[keyof typeof Method],\n params: unknown[],\n signal?: AbortSignal,\n ): Promise<T> {\n if (!this._workerEnabled) {\n if (!this._localImpl) {\n return Promise.reject(new Error('Local implementation not initialized'))\n }\n // @ts-expect-error - Dynamic method call with runtime type checking\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return this._localImpl[method](...params) as Promise<T>\n }\n\n const worker = this._getWorker()\n const requestId = this._workerNextRequestId++\n\n let resolve: ((value: T) => void) | null = null\n let reject: ((reason: unknown) => void) | null = null\n\n // If worker sends message to main process, check whether it's a response\n // to this request, and whether the request can been aborted. Then resolve\n // or reject the Promise.\n function onMessage(e: MessageEvent) {\n const response = e.data as WorkerResponse\n if (response.requestId !== requestId) return\n if (signal?.aborted) return // handled by 'abort' listener\n\n if (response.ok) {\n resolve!(response.result as T)\n } else {\n reject!(new Error(response.error))\n }\n }\n\n // If request is aborted by user, immediately reject the Promise.\n function onAbort() {\n reject!(new Error(String(signal!.reason)))\n }\n\n worker.addEventListener('message', onMessage)\n signal?.addEventListener('abort', onAbort)\n\n // Send the task to the worker, creating a Promise to resolve/reject later.\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n\n worker.postMessage({\n requestId,\n method,\n params,\n } as WorkerRequest)\n })\n\n // Whether the task completes, fails, or aborts: clean up afterward.\n void promise.finally(() => {\n worker.removeEventListener('message', onMessage)\n signal?.removeEventListener('abort', onAbort)\n })\n\n return promise\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // DATA LOADING\n\n /**\n * Loads features as GeoJSON\n */\n loadGeoJSON({ geojson }: { geojson: FeatureData[] }) {\n if (!this._workerEnabled) {\n return this._localImpl!.loadGeoJSON({ geojson })\n }\n\n const worker = this._getWorker()\n\n worker.postMessage({\n method: Method.LOAD_GEOJSON,\n params: [{ geojson }],\n } as WorkerRequest)\n }\n\n /////////////////////////////////////////////////////////////////////////////\n // WIDGETS API\n\n // eslint-disable-next-line @typescript-eslint/require-await\n override async getFeatures(): Promise<FeaturesResponse> {\n throw new Error('getFeatures not supported for geojson')\n }\n\n async getFormula({\n signal,\n ...options\n }: FormulaRequestOptions): Promise<FormulaResponse> {\n return this._executeWorkerMethod(Method.GET_FORMULA, [options], signal)\n }\n\n override async getHistogram({\n signal,\n ...options\n }: HistogramRequestOptions): Promise<HistogramResponse> {\n return this._executeWorkerMethod(Method.GET_HISTOGRAM, [options], signal)\n }\n\n override async getCategories({\n signal,\n ...options\n }: CategoryRequestOptions): Promise<CategoryResponse> {\n return this._executeWorkerMethod(Method.GET_CATEGORIES, [options], signal)\n }\n\n override async getScatter({\n signal,\n ...options\n }: ScatterRequestOptions): Promise<ScatterResponse> {\n return this._executeWorkerMethod(Method.GET_SCATTER, [options], signal)\n }\n\n override async getTable({\n signal,\n ...options\n }: TableRequestOptions): Promise<TableResponse> {\n return this._executeWorkerMethod(Method.GET_TABLE, [options], signal)\n }\n\n override async getTimeSeries({\n signal,\n ...options\n }: TimeSeriesRequestOptions): Promise<TimeSeriesResponse> {\n return this._executeWorkerMethod(Method.GET_TIME_SERIES, [options], signal)\n }\n\n override async getRange({\n signal,\n ...options\n }: RangeRequestOptions): Promise<RangeResponse> {\n return this._executeWorkerMethod(Method.GET_RANGE, [options], signal)\n }\n\n async getAggregations({\n signal,\n ...options\n }: AggregationsRequestOptions): Promise<AggregationsResponse> {\n return this._executeWorkerMethod(Method.GET_AGGREGATIONS, [options], signal)\n }\n\n /** @experimental */\n async getExtent({\n signal,\n ...options\n }: {\n signal?: AbortSignal\n spatialFilter?: SpatialFilter\n }): Promise<ExtentResponse> {\n return this._executeWorkerMethod<ExtentResponse>(\n Method.GET_EXTENT,\n [options],\n signal,\n )\n }\n}\n","import { create } from 'zustand'\nimport type {\n QuerySource,\n RasterSource,\n TableSource,\n TilesetSource,\n Source,\n SourceStore,\n AllExternalSources,\n GeoJSONSource,\n AllSources,\n} from './types'\nimport {\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n DEFAULT_CLIENT_ID,\n} from '@carto/ps-services'\nimport {\n TileFormat,\n WidgetQuerySource,\n WidgetTableSource,\n WidgetTilesetSource,\n WidgetRasterSource,\n addFilter,\n removeFilter,\n type Filters,\n FilterType,\n type SpatialDataType,\n} from '@carto/api-client'\nimport { useMemo } from 'react'\nimport { devtools } from 'zustand/middleware'\nimport { WidgetGeoJsonSource } from './widgets/widget-geojson-source'\nimport { useShallow } from 'zustand/shallow'\n\nexport const useSourceStore = create<SourceStore>()(\n devtools((set, get) => ({\n sources: {},\n filters: {},\n setSource: (id, source) =>\n set(\n (state) => {\n const sources = { ...state.sources }\n\n const widgetClient = sources[id]?.widgets\n if (widgetClient) {\n widgetClient.destroy()\n delete sources[id]!.widgets\n }\n\n const previousSource = sources[id]\n const newSource = {\n apiBaseUrl: DEFAULT_CARTO_API_URL,\n clientId: DEFAULT_CLIENT_ID,\n apiVersion: DEFAULT_CARTO_API_VERSION,\n ...previousSource,\n ...source,\n id,\n } as Source\n\n newSource.widgets = getWidgetSource({\n source: newSource,\n })\n\n sources[id] = newSource\n\n return { sources }\n },\n undefined,\n 'setSource',\n ),\n removeSource: (id) =>\n set(\n (state) => {\n const sources = { ...state.sources }\n\n const widgetClient = sources[id]?.widgets\n if (widgetClient) {\n widgetClient.destroy()\n delete sources[id]!.widgets\n }\n\n delete sources[id]\n return { sources }\n },\n undefined,\n 'removeSource',\n ),\n setFilters: (id, newFilters) =>\n set(\n (state) => {\n const currentFilters = state.filters[id] ?? {}\n\n const filters = newFilters.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, currentFilters)\n\n return {\n filters: {\n ...state.filters,\n [id]: { ...filters }, // important: destructuring here to not conservere the reference to the same object\n },\n }\n },\n undefined,\n 'setFilters',\n ),\n removeFilters: (id, column, owner) =>\n set(\n (state) => {\n const currentFilters = state.filters[id] ?? {}\n if (!currentFilters) {\n return state\n }\n\n let filters = {}\n if (column) {\n filters = removeFilter(currentFilters, { column, owner })\n }\n\n return {\n filters: {\n ...state.filters,\n [id]: { ...filters }, // important: destructuring here to not conservere the reference to the same object\n },\n }\n },\n undefined,\n 'removeFilters',\n ),\n invalidateSourcesCache: (ids, { timeout = 500, maxAge = 10 } = {}) => {\n // Only invalidate cache for external sources (query, table, tileset, raster)\n // GeoJSON sources are local and don't require cache invalidation\n const externalSourceIds = ids.filter((id) => {\n const source = get().sources[id]\n return source && source.type !== 'geojson'\n })\n\n if (externalSourceIds.length === 0) {\n return\n }\n\n ids.forEach((id) => {\n get().setSource(id, {\n headers: {\n 'Cache-Control': `no-cache, max-age=${maxAge}`,\n },\n } as Partial<Source<AllExternalSources>>)\n })\n\n setTimeout(() => {\n ids.forEach((id) => {\n const source = get().sources[id] as Source<AllExternalSources>\n if (source) {\n delete source.headers\n get().setSource(id, source)\n }\n })\n }, timeout)\n },\n })),\n)\n\n/**\n * Shortcut to grabbing the source from the sources store object\n * @param id - the id of the source you want to grab\n * @returns source object without filters\n */\nexport function useSource<T extends AllSources = AllExternalSources>(\n id: string,\n) {\n return useSourceStore((state) => state.sources[id] as Source<T>)\n}\n\n/**\n * Shortcut to grabbing the source from the sources store object\n * @param ids - the ids of the sources you want to grab\n * @returns source object without filters\n */\nexport function useSources<T extends AllSources = AllExternalSources>(\n ids: string[],\n) {\n return useSourceStore(\n useShallow((state) =>\n ids\n .map((id) => state.sources[id] as Source<T>)\n .filter((source) => !!source),\n ),\n )\n}\n\n/**\n * Shortcut to grabbing the filters from the filters store object\n * @param ids - the ids of the sources the filters are applied to\n * @returns filters object as used in the `@carto/api-client` methods calls\n */\nexport function useFilters(ids: string): Filters | undefined\nexport function useFilters(ids: string[]): (Filters | undefined)[]\nexport function useFilters(\n ids: string | string[],\n): Filters | undefined | (Filters | undefined)[] {\n return useSourceStore(\n useShallow((state) => {\n if (Array.isArray(ids)) {\n return ids.map((id) => state.filters[id])\n }\n return state.filters[ids]\n }),\n )\n}\n\n/**\n * Returns a source together with its filters, pulling from the separate `sources` and `filters` state objects\n * @param id - the id of the source\n * @returns source object as used in `@carto/api-client`\n */\nexport function useSourceWithFilters<T extends AllSources = AllExternalSources>(\n id: string,\n) {\n const source = useSource<T>(id)\n const filters = useFilters(id)\n\n return useMemo(() => {\n if (!source) {\n return undefined\n }\n return {\n ...source,\n filters: filters ?? {},\n }\n }, [source, filters])\n}\n\nexport function getFilterValues(\n filters: Filters | undefined,\n { column, type }: { column: string; type: FilterType },\n) {\n return filters?.[column]?.[type]?.values ?? []\n}\n\nfunction getSpatialDataFallback(source: Source<AllExternalSources>) {\n const [, fallback] = source.type.split('+', 2)\n return {\n spatialDataType: (source.spatialDataType ??\n fallback ??\n 'geo') as SpatialDataType,\n spatialDataColumn: source.spatialDataColumn ?? fallback ?? 'geom',\n }\n}\n\nfunction getWidgetSource({ source }: { source: Source }) {\n const { spatialDataType, spatialDataColumn } = getSpatialDataFallback(\n source as Source<AllExternalSources>,\n )\n\n const options = {\n query: () => {\n const newSource = source as Source & QuerySource\n return new WidgetQuerySource({\n ...newSource,\n accessToken: '',\n sqlQuery: newSource.data as string,\n spatialDataType,\n spatialDataColumn,\n })\n },\n table: () => {\n const newSource = source as Source & TableSource\n return new WidgetTableSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n spatialDataType,\n spatialDataColumn,\n })\n },\n tileset: () => {\n const newSource = source as Source & TilesetSource\n\n if (!newSource.spatialDataBounds) {\n return null\n }\n\n return new WidgetTilesetSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n tileFormat: newSource.tileFormat ?? TileFormat.BINARY,\n spatialDataType,\n spatialDataColumn,\n spatialDataBounds: newSource.spatialDataBounds,\n })\n },\n raster: () => {\n const newSource = source as Source & RasterSource\n\n if (!newSource.rasterMetadata || !newSource.spatialDataBounds) {\n return null\n }\n\n return new WidgetRasterSource({\n ...newSource,\n accessToken: '',\n tableName: newSource.data as string,\n spatialDataType: 'quadbin',\n spatialDataColumn: 'quadbin',\n rasterMetadata: newSource.rasterMetadata,\n spatialDataBounds: newSource.spatialDataBounds,\n })\n },\n geojson: () => {\n // TODO: Temporary implementation until we have a WidgetGeoJSONSource in the API\n const newSource = source as Source & GeoJSONSource\n\n return new WidgetGeoJsonSource({\n ...newSource,\n connectionName: '',\n accessToken: '',\n data: newSource.data,\n })\n },\n }\n\n const key = source.type.split('+')[0] as keyof typeof options\n const option = options[key]\n\n return option?.() as Source['widgets']\n}\n","import { useFilters } from '../../providers/sources/store'\nimport { useMemo } from 'react'\nimport deepmerge from 'deepmerge'\nimport {\n addFilter,\n type Filter,\n type AddFilterOptions,\n} from '@carto/api-client'\n\ninterface SingleSourceFilterArgs {\n sourceId: string\n sourcesId?: never\n additionalFilter?: AddFilterOptions[]\n}\n\ninterface MultiSourceFilterArgs {\n sourceId?: never\n sourcesId: string[]\n additionalFilter?: AddFilterOptions[] | AddFilterOptions[][]\n}\n\n// Overload for single source (returns single Filter or undefined)\nexport function useFiltersMerged(\n sourceId: string,\n additionalFilter?: AddFilterOptions[],\n): Filter | undefined\n\n// Overload for multi-source (returns array of Filters or undefined)\nexport function useFiltersMerged(\n sourcesId: string[],\n additionalFilter?: AddFilterOptions[] | AddFilterOptions[][],\n): Filter[] | undefined\n\n// Overload for args object pattern (single source)\nexport function useFiltersMerged(\n args: SingleSourceFilterArgs,\n): Filter | undefined\n\n// Overload for args object pattern (multi-source)\nexport function useFiltersMerged(\n args: MultiSourceFilterArgs,\n): Filter[] | undefined\n\nexport function useFiltersMerged(\n sourcesIdOrArgsOrSourceId:\n | string\n | string[]\n | SingleSourceFilterArgs\n | MultiSourceFilterArgs,\n additionalFilterOrUndefined?: AddFilterOptions[] | AddFilterOptions[][],\n): Filter | Filter[] | undefined {\n // Handle both calling patterns: function args and object args\n const { sourceId, sourcesId, additionalFilter } = useMemo(() => {\n if (typeof sourcesIdOrArgsOrSourceId === 'string') {\n // Single source ID string\n return {\n sourceId: sourcesIdOrArgsOrSourceId,\n sourcesId: undefined,\n additionalFilter: additionalFilterOrUndefined as\n | AddFilterOptions[]\n | undefined,\n }\n } else if (Array.isArray(sourcesIdOrArgsOrSourceId)) {\n // Array of source IDs\n return {\n sourceId: undefined,\n sourcesId: sourcesIdOrArgsOrSourceId,\n additionalFilter: additionalFilterOrUndefined,\n }\n } else {\n // Object signature: { sourceId/sourcesId, additionalFilter }\n return sourcesIdOrArgsOrSourceId\n }\n }, [sourcesIdOrArgsOrSourceId, additionalFilterOrUndefined])\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = useMemo(() => {\n const array = isSingleSource ? [sourceId] : sourcesId\n if (!array) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n return array\n }, [isSingleSource, sourceId, sourcesId])\n\n const _filters = useFilters(sourcesArray)\n const filters = useMemo(\n () => (Array.isArray(_filters) ? _filters : [_filters]),\n [_filters],\n )\n\n const _additionalFilter = useMemo(() => {\n if (!additionalFilter?.length) return []\n\n // Handle single source: additionalFilter is AddFilterOptions[]\n if (isSingleSource) {\n return [additionalFilter]\n }\n\n // Handle multi-source: additionalFilter can be AddFilterOptions[] or AddFilterOptions[][]\n return (\n Array.isArray(additionalFilter[0]) ? additionalFilter : [additionalFilter]\n ) as AddFilterOptions[][]\n }, [additionalFilter, isSingleSource])\n\n const mergedFilters = useMemo(() => {\n return sourcesArray.map((_: string, index: number) => {\n const filterSet = _additionalFilter[index]\n if (!filterSet?.length) return filters[index] as Filter\n\n if (!filters[index]) {\n return filterSet.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, {})\n }\n\n // Merge filters only when both exist\n const computedFilters = filterSet.reduce((acc, filter) => {\n return addFilter(acc, filter)\n }, {})\n\n return deepmerge(filters[index], computedFilters)\n })\n }, [sourcesArray, _additionalFilter, filters])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return mergedFilters[0]\n }\n\n return mergedFilters\n}\n","import { useMemo } from 'react'\nimport { useSources } from '../../providers/sources/store'\n\n// Type for the widget model returned by sources\ntype SourceWidget = ReturnType<typeof useSources>[0]['widgets']\ntype WidgetModelResult = SourceWidget | null\n\ninterface SingleSourceWidgetArgs {\n accessToken: string\n sourceId: string\n sourcesId?: never\n}\n\ninterface MultiSourceWidgetArgs {\n accessToken: string\n sourceId?: never\n sourcesId: string[]\n}\n\n// Overloads for single source (returns single widget model or null)\nexport function useWidgetModel(\n accessToken: string,\n sourceId: string,\n): WidgetModelResult\n\n// Overload for multi-source (returns array of widget models)\nexport function useWidgetModel(\n accessToken: string,\n sourcesId: string[],\n): WidgetModelResult[]\n\n// Overload for args object pattern (single source)\nexport function useWidgetModel(args: SingleSourceWidgetArgs): WidgetModelResult\n\n// Overload for args object pattern (multi-source)\nexport function useWidgetModel(args: MultiSourceWidgetArgs): WidgetModelResult[]\n\nexport function useWidgetModel(\n accessTokenOrArgs: string | SingleSourceWidgetArgs | MultiSourceWidgetArgs,\n sourcesIdOrUndefined?: string | string[],\n): WidgetModelResult | WidgetModelResult[] {\n // Handle both calling patterns: function args and object args\n const { accessToken, sourceId, sourcesId } = useMemo(() => {\n if (typeof accessTokenOrArgs === 'string') {\n // Legacy function signature: useWidgetModel(accessToken, sourcesId)\n return {\n accessToken: accessTokenOrArgs,\n sourceId:\n typeof sourcesIdOrUndefined === 'string'\n ? sourcesIdOrUndefined\n : undefined,\n sourcesId: Array.isArray(sourcesIdOrUndefined)\n ? sourcesIdOrUndefined\n : undefined,\n }\n } else {\n // New object signature: useWidgetModel({ accessToken, sourceId/sourcesId })\n return accessTokenOrArgs\n }\n }, [accessTokenOrArgs, sourcesIdOrUndefined])\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = useMemo(() => {\n const array = isSingleSource ? [sourceId] : sourcesId\n if (!array) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n return array\n }, [isSingleSource, sourceId, sourcesId])\n\n const sources = useSources(sourcesArray)\n\n const widgetModels = useMemo(() => {\n return sources.map((source) => {\n const widgetModel = source.widgets\n if (!widgetModel || !accessToken) {\n return null\n }\n\n // Set the access token directly on the widget model\n widgetModel.props.accessToken = accessToken\n return widgetModel\n })\n }, [accessToken, sources])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return widgetModels[0]\n }\n\n return widgetModels\n}\n","const RELEVANT_HEADERS = ['authorization', 'cache-control'] as const\n\nexport function getRelevantHeaders(\n headers: Record<string, string> | undefined,\n): string {\n if (!headers || typeof headers !== 'object') {\n return ''\n }\n\n const relevantEntries: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(headers)) {\n const lowerKey = key.toLowerCase()\n if (\n RELEVANT_HEADERS.includes(lowerKey as (typeof RELEVANT_HEADERS)[number])\n ) {\n relevantEntries[lowerKey] = value\n }\n }\n\n return Object.keys(relevantEntries).length > 0\n ? JSON.stringify(relevantEntries)\n : ''\n}\n","import { useMemo } from 'react'\nimport type { ModelProps } from '../types'\nimport { getRelevantHeaders } from './get-relevant-headers'\nimport { useSources } from '../../providers/sources/store'\n\ntype QueryKeyArgs<TRequestOptions, TResponse> = Pick<\n ModelProps<TRequestOptions, TResponse>,\n never\n> & { queryKeyPrefix: string[] }\n\ntype SingleSourceQueryArgs<TRequestOptions, TResponse> = QueryKeyArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId: string | undefined\n sourcesId?: never\n}\n\ntype MultiSourceQueryArgs<TRequestOptions, TResponse> = QueryKeyArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId?: never\n sourcesId: string[]\n}\n\n// Overloads: when `sourceId` is provided return a single query key,\n// when `sourcesId` is provided return an array of query keys\nexport function useQueryKey<TRequestOptions, TResponse>(\n args: SingleSourceQueryArgs<TRequestOptions, TResponse>,\n): readonly unknown[]\n\nexport function useQueryKey<TRequestOptions, TResponse>(\n args: MultiSourceQueryArgs<TRequestOptions, TResponse>,\n): unknown[][]\n\nexport function useQueryKey<TRequestOptions, TResponse>(\n args:\n | SingleSourceQueryArgs<TRequestOptions, TResponse>\n | MultiSourceQueryArgs<TRequestOptions, TResponse>,\n): readonly unknown[] | unknown[][] {\n const { queryKeyPrefix, sourceId, sourcesId = [] } = args\n\n const sourcesArray = useMemo(() => {\n const array = sourceId !== undefined ? [sourceId] : sourcesId\n return array\n }, [sourceId, sourcesId])\n\n const sources = useSources(sourcesArray)\n\n // Memoize query parameters with JSON.stringify for optimization\n const queryParametersMemo = useMemo(() => {\n return sources.map((source) => {\n if (\n !source ||\n !('queryParameters' in source) ||\n !source.queryParameters\n ) {\n return undefined\n }\n\n return JSON.stringify(source.queryParameters)\n })\n }, [sources])\n\n // Memoize relevant headers with JSON.stringify for optimization\n const relevantHeadersMemo = useMemo(() => {\n return sources.map((source) => {\n const relevantHeaders = getRelevantHeaders(source?.headers)\n if (!relevantHeaders) return undefined\n return JSON.stringify(relevantHeaders)\n })\n }, [sources])\n\n // Build query keys for all sources\n const queryKeys = useMemo(() => {\n return sourcesArray.map((currentSourceId: string, index: number) => {\n const key: unknown[] = [currentSourceId, ...queryKeyPrefix]\n\n const relevantHeaders = relevantHeadersMemo[index]\n if (relevantHeaders) {\n key.push(relevantHeaders)\n }\n\n const parameters = queryParametersMemo[index]\n if (parameters) {\n key.push(parameters)\n }\n\n return key\n })\n }, [queryKeyPrefix, queryParametersMemo, relevantHeadersMemo, sourcesArray])\n\n // Return appropriate format based on input type\n if (sourceId !== undefined) {\n // Return first query key for single source calls\n return queryKeys[0] as readonly unknown[]\n }\n\n return queryKeys\n}\n","/**\n * Resolves a property value for a specific source index\n * @param value - Single string value or array of values\n * @param sourceIndex - Index of the current source\n * @param totalSources - Total number of sources\n * @param propertyName - Name of the property being resolved (for error messages)\n * @returns The resolved string value for the source\n * @internal\n */\nexport function resolvePropertyForSource(\n value: string | string[] | undefined,\n sourceIndex: number,\n totalSources: number,\n propertyName: string,\n) {\n if (!value) return undefined\n if (typeof value === 'string') return value\n if (value.length === 1) return value.at(0)!\n if (value.length !== totalSources) {\n throw new Error(\n `${propertyName} array length (${value.length}) must match sources length (${totalSources}). ` +\n `Either provide a single ${propertyName.toLowerCase()} for all sources, or one ${propertyName.toLowerCase()} per source.`,\n )\n }\n return value[sourceIndex]!\n}\n\n/**\n * Resolves the column value for a specific source index\n * @param column - Single column string or array of columns\n * @param sourceIndex - Index of the current source\n * @param totalSources - Total number of sources\n * @returns The resolved column string for the source\n * @internal\n */\nexport function resolveColumnForSource(\n column: string | string[] | undefined,\n sourceIndex: number,\n totalSources: number,\n) {\n return resolvePropertyForSource(column, sourceIndex, totalSources, 'column')\n}\n","import { useMemo } from 'react'\nimport type { ModelProps } from '../types'\nimport { useFiltersMerged } from './use-filters-merged'\nimport { useWidgetModel } from './use-widget-model'\nimport { useQueryKey } from './use-query-key'\nimport type { Filter } from '@carto/api-client'\nimport {\n resolveColumnForSource,\n resolvePropertyForSource,\n} from './resolve-property-for-source'\n\ntype CommonModelArgs<TRequestOptions, TResponse> = Pick<\n ModelProps<TRequestOptions, TResponse>,\n 'accessToken' | 'widgetProps' | 'additionalFilter'\n> & { queryKeyPrefix: string[] }\n\ntype SingleSourceArgs<TRequestOptions, TResponse> = CommonModelArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId: string\n sourcesId?: never\n}\n\ntype MultiSourceArgs<TRequestOptions, TResponse> = CommonModelArgs<\n TRequestOptions,\n TResponse\n> & {\n sourceId?: never\n sourcesId: string[]\n}\n\ninterface SingleSourceResult {\n mergedFilters: Filter | undefined\n widgetModel: ReturnType<typeof useWidgetModel>[0] | null\n queryKey: readonly unknown[]\n}\n\ninterface MultiSourceResult {\n mergedFilters: (Filter | undefined)[]\n widgetModel: ReturnType<typeof useWidgetModel>\n queryKey: unknown[][]\n}\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n args: SingleSourceArgs<TRequestOptions, TResponse>,\n): SingleSourceResult\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n args: MultiSourceArgs<TRequestOptions, TResponse>,\n): MultiSourceResult\n\nexport function useCommonModel<TRequestOptions extends object, TResponse>(\n props:\n | SingleSourceArgs<TRequestOptions, TResponse>\n | MultiSourceArgs<TRequestOptions, TResponse>,\n): SingleSourceResult | MultiSourceResult {\n const {\n queryKeyPrefix,\n accessToken,\n sourceId,\n sourcesId,\n widgetProps,\n additionalFilter,\n } = props\n\n // Normalize to array format for consistent processing\n const isSingleSource = !!sourceId\n const sourcesArray = isSingleSource ? [sourceId] : sourcesId\n\n // Ensure we have a valid sources array\n if (!sourcesArray) {\n throw new Error('Either sourceId or sourcesId must be provided')\n }\n\n // Get all the required data using the sources array\n const mergedFilters = useFiltersMerged(sourcesArray, additionalFilter)\n const widgetModel = useWidgetModel(accessToken, sourcesArray)\n\n // Get query keys for all sources\n const baseQueryKeys = useQueryKey({\n queryKeyPrefix,\n sourcesId: sourcesArray,\n })\n\n // Memoize filters with JSON.stringify for optimization\n const mergedFiltersMemo = useMemo(() => {\n return mergedFilters?.map((filter) =>\n filter ? JSON.stringify(filter) : undefined,\n )\n }, [mergedFilters])\n\n const mergedWidgetPropsMemo = useMemo(() => {\n return baseQueryKeys.map((_, index) => {\n // Resolve column if it exists in widgetProps\n const resolvedColumn =\n 'column' in widgetProps\n ? resolveColumnForSource(\n widgetProps.column as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n )\n : undefined\n\n // Resolve operationExp if it exists in widgetProps\n const resolvedOperationExp =\n 'operationExp' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationExp as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n 'operationExp',\n )\n : undefined\n\n // Resolve operationColumn if it exists in widgetProps\n const resolvedOperationColumn =\n 'operationColumn' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationColumn as string | string[] | undefined,\n index,\n baseQueryKeys.length,\n 'operationColumn',\n )\n : undefined\n\n // Create widget props with resolved properties for this source's query key\n const resolvedProps = {\n ...widgetProps,\n ...('column' in widgetProps && { column: resolvedColumn }),\n ...(resolvedOperationExp !== undefined && {\n operationExp: resolvedOperationExp,\n }),\n ...(resolvedOperationColumn !== undefined && {\n operationColumn: resolvedOperationColumn,\n }),\n }\n\n return JSON.stringify(resolvedProps)\n })\n }, [baseQueryKeys, widgetProps])\n\n // Enhance query keys with widget props and filters\n const enhancedQueryKeys = useMemo(() => {\n return baseQueryKeys.map((key, index) => {\n // Create widget props with resolved column for this source's query key\n const resolvedWidgetProps = mergedWidgetPropsMemo[index]\n\n const enhancedKey: unknown[] = [...key, resolvedWidgetProps]\n const filterMemo = mergedFiltersMemo?.[index]\n if (filterMemo) {\n enhancedKey.push(filterMemo)\n }\n return enhancedKey\n })\n }, [baseQueryKeys, mergedFiltersMemo, mergedWidgetPropsMemo])\n\n // Return appropriate format based on input type\n if (isSingleSource) {\n return {\n mergedFilters: mergedFilters?.[0],\n widgetModel: widgetModel[0] ?? null,\n queryKey: enhancedQueryKeys[0] as readonly unknown[],\n } as SingleSourceResult\n }\n\n return {\n mergedFilters: mergedFilters ?? [],\n widgetModel,\n queryKey: enhancedQueryKeys,\n } as MultiSourceResult\n}\n","import { useQuery, type UseQueryOptions } from '@tanstack/react-query'\nimport type { ModelProps, ModelResponse } from '../types'\nimport { useCommonModel } from './use-common-model'\nimport {\n resolveColumnForSource,\n resolvePropertyForSource,\n} from './resolve-property-for-source'\n\ninterface ModelConfig<TRequestOptions extends object, TResponse> {\n queryKeyPrefix: string[]\n getWidgetMethod: (\n widgetModel: NonNullable<\n NonNullable<ReturnType<typeof useCommonModel>['widgetModel']>[0]\n >,\n ) => (\n params: TRequestOptions & { filters?: unknown; signal?: AbortSignal },\n ) => Promise<TResponse>\n}\n\nexport function createModel<TWidgetProps extends object, TResponse>({\n queryKeyPrefix,\n getWidgetMethod,\n}: ModelConfig<TWidgetProps, TResponse>) {\n function useModelHook<P extends ModelProps<TWidgetProps, TResponse>>(\n props: P,\n ): P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]> {\n const {\n accessToken,\n sourceId,\n sourcesId,\n widgetProps,\n additionalFilter,\n useQueryProps: { enabled = true, ...useQueryProps } = {},\n } = props\n\n const _sourcesId = sourceId ? [sourceId] : sourcesId!\n\n const { mergedFilters, queryKey, widgetModel } = useCommonModel({\n queryKeyPrefix,\n accessToken,\n additionalFilter,\n sourcesId: _sourcesId,\n widgetProps,\n })\n\n type QueryData = TResponse | TResponse[]\n const response = useQuery<QueryData, Error>({\n queryKey: queryKey.flat(),\n queryFn: async ({ signal }: { signal: AbortSignal }) => {\n const promises = _sourcesId.map((_, index) => {\n const _widgetModel = widgetModel?.[index]\n if (!_widgetModel) {\n return Promise.reject(new Error('widgetModel is not available'))\n }\n const widgetMethod = getWidgetMethod(_widgetModel)\n\n // Resolve column for this specific source (if it exists)\n const resolvedColumn =\n 'column' in widgetProps\n ? resolveColumnForSource(\n widgetProps.column as string | string[] | undefined,\n index,\n _sourcesId.length,\n )\n : undefined\n\n // Resolve operationExp for this specific source (if it exists)\n const resolvedOperationExp =\n 'operationExp' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationExp as string | string[] | undefined,\n index,\n _sourcesId.length,\n 'operationExp',\n )\n : undefined\n\n // Resolve operationColumn for this specific source (if it exists)\n const resolvedOperationColumn =\n 'operationColumn' in widgetProps\n ? resolvePropertyForSource(\n widgetProps.operationColumn as string | string[] | undefined,\n index,\n _sourcesId.length,\n 'operationColumn',\n )\n : undefined\n\n const requestOptions = {\n ...widgetProps,\n ...('column' in widgetProps && { column: resolvedColumn }),\n ...(resolvedOperationExp !== undefined && {\n operationExp: resolvedOperationExp,\n }),\n ...(resolvedOperationColumn !== undefined && {\n operationColumn: resolvedOperationColumn,\n }),\n }\n\n return widgetMethod({\n ...requestOptions,\n filters: mergedFilters?.[index],\n signal,\n })\n })\n\n const results = await Promise.allSettled(promises)\n const data: TResponse[] = []\n let error: Error | undefined\n\n for (const [index, result] of results.entries()) {\n if (result.status === 'fulfilled') {\n data.push(result.value)\n continue\n }\n\n if (result.status === 'rejected') {\n error =\n result.reason instanceof Error\n ? result.reason\n : new Error(\n `Query failed for source ${_sourcesId[index]}: ${String(result.reason)}`,\n )\n break\n }\n }\n\n if (error) {\n throw error\n }\n\n return (sourceId ? data.at(0) : data) as QueryData\n },\n enabled: !!widgetModel.length && enabled,\n ...useQueryProps,\n } as UseQueryOptions<QueryData, Error>)\n\n // Return appropriate format based on input type\n return response as P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]>\n }\n\n type ModelComponentPropsSingle = ModelProps<TWidgetProps, TResponse> & {\n sourceId: string\n children: (props: ModelResponse<TResponse>) => React.ReactNode\n }\n\n type ModelComponentPropsMulti = ModelProps<TWidgetProps, TResponse> & {\n sourcesId: string[]\n children: (props: ModelResponse<TResponse[]>) => React.ReactNode\n }\n\n function ModelComponent(props: ModelComponentPropsSingle): React.ReactElement\n function ModelComponent(props: ModelComponentPropsMulti): React.ReactElement\n function ModelComponent<P extends ModelProps<TWidgetProps, TResponse>>(\n props: P & {\n children: (\n props: P extends { sourceId: string; sourcesId?: string[] }\n ? ModelResponse<TResponse>\n : ModelResponse<TResponse[]>,\n ) => React.ReactNode\n },\n ): React.ReactElement {\n const queryResult = useModelHook(props)\n\n return props.children(queryResult) as React.ReactElement\n }\n\n return { useModelHook, ModelComponent }\n}\n","import type {\n AggregationsRequestOptions,\n AggregationsResponse,\n AggregationType,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\n\nexport type AggregationsWidgetProps = Omit<\n AggregationsRequestOptions,\n 'aggregations'\n> & {\n aggregations: (\n | {\n operation: 'custom'\n aggregationExp: string\n alias: string\n }\n | {\n column: string\n operation: Exclude<AggregationType, 'custom'>\n alias: string\n }\n )[]\n}\n\nconst { useModelHook: useAggregations, ModelComponent: AggregationsModel } =\n createModel<AggregationsWidgetProps, AggregationsResponse>({\n queryKeyPrefix: ['aggregations'],\n getWidgetMethod: (widgetModel) => (params) => {\n const aggregations = params.aggregations\n\n let adaptedAggregations: AggregationsRequestOptions['aggregations'] =\n aggregations.filter((agg) => agg.operation !== 'custom')\n\n if (aggregations.some((agg) => agg.operation === 'custom')) {\n adaptedAggregations = transformAggregationsToSql(aggregations).join(',')\n }\n\n const adaptedParams = {\n ...params,\n aggregations: adaptedAggregations,\n }\n\n return widgetModel.getAggregations(adaptedParams)\n },\n })\n\nexport { useAggregations, AggregationsModel }\n\n/**\n * Transforms aggregation objects into SQL expressions\n */\nfunction transformAggregationsToSql(\n aggregations: AggregationsWidgetProps['aggregations'],\n): string[] {\n return aggregations.map((agg) => {\n if (agg.operation === 'custom') {\n return `${agg.aggregationExp} AS ${agg.alias}`\n }\n\n const { column, operation, alias } = agg\n\n switch (operation) {\n case 'count':\n return `COUNT(${column}) AS ${alias}`\n case 'sum':\n return `SUM(${column}) AS ${alias}`\n case 'avg':\n return `AVG(${column}) AS ${alias}`\n case 'min':\n return `MIN(${column}) AS ${alias}`\n case 'max':\n return `MAX(${column}) AS ${alias}`\n default:\n // This should never happen if all AggregationType values are handled above\n throw new Error(\n `Unsupported aggregation operation: ${String(operation)}`,\n )\n }\n })\n}\n","import type {\n CategoryRequestOptions,\n CategoryResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { CategoryWidgetProps } from './types'\n\nconst { useModelHook: useCategories, ModelComponent: CategoriesModel } =\n createModel<CategoryWidgetProps, CategoryResponse>({\n queryKeyPrefix: ['categories'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getCategories(params as CategoryRequestOptions),\n })\n\nexport { useCategories, CategoriesModel }\n","import type {\n FeaturesRequestOptions,\n FeaturesResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { FeaturesWidgetProps } from './types'\n\nconst { useModelHook: useFeatures, ModelComponent: FeaturesModel } =\n createModel<FeaturesWidgetProps, FeaturesResponse>({\n queryKeyPrefix: ['features'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getFeatures(params as FeaturesRequestOptions),\n })\n\nexport { useFeatures, FeaturesModel }\n","import type { FormulaRequestOptions, FormulaResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { FormulaWidgetProps } from './types'\n\nconst { useModelHook: useFormula, ModelComponent: FormulaModel } = createModel<\n FormulaWidgetProps,\n FormulaResponse\n>({\n queryKeyPrefix: ['formula'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getFormula(params as FormulaRequestOptions),\n})\n\nexport { useFormula, FormulaModel }\n","import type {\n HistogramRequestOptions,\n HistogramResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { HistogramWidgetProps } from './types'\n\nconst { useModelHook: useHistogram, ModelComponent: HistogramModel } =\n createModel<HistogramWidgetProps, HistogramResponse>({\n queryKeyPrefix: ['histogram'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getHistogram(params as HistogramRequestOptions),\n })\n\nexport { useHistogram, HistogramModel }\n","import type { RangeRequestOptions, RangeResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { RangeWidgetProps } from './types'\n\nconst { useModelHook: useRange, ModelComponent: RangeModel } = createModel<\n RangeWidgetProps,\n RangeResponse\n>({\n queryKeyPrefix: ['range'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getRange(params as RangeRequestOptions),\n})\n\nexport { useRange, RangeModel }\n","import type { ScatterRequestOptions, ScatterResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { ScatterWidgetProps } from './types'\n\nconst { useModelHook: useScatter, ModelComponent: ScatterModel } = createModel<\n ScatterWidgetProps,\n ScatterResponse\n>({\n queryKeyPrefix: ['scatter'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getScatter(params as ScatterRequestOptions),\n})\n\nexport { useScatter, ScatterModel }\n","import type { TableRequestOptions, TableResponse } from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { TableWidgetProps } from './types'\n\nconst { useModelHook: useTable, ModelComponent: TableModel } = createModel<\n TableWidgetProps,\n TableResponse\n>({\n queryKeyPrefix: ['table'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getTable(params as TableRequestOptions),\n})\n\nexport { useTable, TableModel }\n","import type {\n TimeSeriesRequestOptions,\n TimeSeriesResponse,\n} from '@carto/api-client'\nimport { createModel } from './utils/create-model'\nimport type { TimeSeriesWidgetProps } from './types'\n\nconst { useModelHook: useTimeSeries, ModelComponent: TimeSeriesModel } =\n createModel<TimeSeriesWidgetProps, TimeSeriesResponse>({\n queryKeyPrefix: ['timeSeries'],\n getWidgetMethod: (widgetModel) => (params) =>\n widgetModel.getTimeSeries(params as TimeSeriesRequestOptions),\n })\n\nexport { useTimeSeries, TimeSeriesModel }\n","export const clientID = 'ps'\n","import type { PropsWithChildren } from 'react'\nimport type { MapProviderProps } from './providers/map/types'\nimport type { LassoToolsProviderProps } from './editable/lasso-tools/provider/types'\nimport type { MeasurementToolsProviderProps } from './editable/measurement-tools/provider/types'\nimport { MapProvider } from './providers/map/provider'\nimport { LassoToolsProvider } from './editable/lasso-tools/provider/provider'\nimport { MeasurementToolsProvider } from './editable/measurement-tools/provider/provider'\n\ninterface Props {\n maps: MapProviderProps['values']\n lassoTools?: LassoToolsProviderProps['values']\n measureTools?: MeasurementToolsProviderProps['values']\n}\n\nexport function MapsProvider({\n children,\n maps,\n lassoTools = [],\n measureTools = [],\n}: PropsWithChildren<Props>) {\n return (\n <MapProvider values={maps}>\n <LassoToolsProvider values={lassoTools}>\n <MeasurementToolsProvider values={measureTools}>\n {children}\n </MeasurementToolsProvider>\n </LassoToolsProvider>\n </MapProvider>\n )\n}\n","import { useCallback, useMemo } from 'react'\nimport { useLayerStore } from './providers/layers/store'\nimport { sortLayers } from './utils/sort-layers'\nimport type { Layer, LayerLegend } from './providers/layers/types'\n\nexport function useLegend<T>(\n layersId: string[],\n callback: (layer: Layer) => T,\n) {\n const layers = useLayerStore((state) => state.layers)\n const setLayer = useLayerStore((state) => state.setLayer)\n\n const layersById = useMemo(() => {\n return sortLayers(\n layersId.map((id) => layers[id]).filter((l): l is Layer => !!l?.legend),\n ).toReversed()\n }, [layers, layersId])\n\n const legend = useMemo(() => {\n return layersById.map(callback)\n }, [callback, layersById])\n\n const onChangeVisibility = useCallback(\n ({\n id,\n visible,\n ...legend\n }: {\n id: string\n visible: boolean\n } & Partial<LayerLegend>) => {\n setLayer(id, {\n props: { visible },\n legend,\n })\n },\n [setLayer],\n )\n\n const onChangeRowCollapse = useCallback(\n ({ id, collapsed }: { id: string; collapsed: boolean }) => {\n setLayer(id, {\n legend: {\n collapsed,\n },\n })\n },\n [setLayer],\n )\n\n const onChangeOpacity = useCallback(\n ({ id, opacity }: { id: string; opacity: number }) => {\n setLayer(id, {\n props: { opacity },\n })\n },\n [setLayer],\n )\n\n return {\n legend,\n onChangeVisibility,\n onChangeOpacity,\n onChangeRowCollapse,\n }\n}\n","import { useCallback, useState } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport type { MapRef } from 'react-map-gl/maplibre'\nimport { MAPS_BASEMAP, MapsTypes } from './const'\nimport html2canvas from 'html2canvas'\n\nexport function useMapScreenshot({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const [screenshot, setScreenshot] = useState<string | undefined>(undefined)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<Error | undefined>(undefined)\n\n const basemap = useMapStore((state) => state.maps[mapId]?.basemap)!\n const deckInstanceFn = useMapStore((state) => state.getDeckInstance)\n const overlayInstanceFn = useMapStore((state) => state.getOverlayInstance)\n\n const areLayersLoaded = useMapStore((state) => state.areLayersLoaded[mapId])!\n const isLoaded = useMapStore((state) => state.maps[mapId]?.isLoaded)!\n\n const isAllLoaded = isLoaded && areLayersLoaded\n\n const { type } = MAPS_BASEMAP[basemap]\n const isGmaps = type === MapsTypes.googleMaps\n\n const _takeScreenshot = useCallback(async () => {\n const deckInstance = deckInstanceFn(mapId)!\n const overlayInstance = overlayInstanceFn(mapId)!\n\n try {\n const canvas = document.createElement('canvas')\n canvas.width = deckInstance.width ?? 0\n canvas.height = deckInstance.height ?? 0\n\n const context = canvas.getContext('2d')\n\n if (isGmaps) {\n const _overlayInstance = overlayInstance as google.maps.Map\n\n if ((_overlayInstance.getRenderingType() as string) !== 'RASTER') {\n throw new Error('Only raster type is supported for Google Maps')\n }\n\n const data = await html2canvas(_overlayInstance.getDiv(), {\n useCORS: true,\n })\n context?.drawImage(data, 0, 0, deckInstance.width, deckInstance.height)\n } else {\n const _overlayInstance = overlayInstance as MapRef\n _overlayInstance.redraw()\n context?.drawImage(\n _overlayInstance.getMap().getCanvas(),\n 0,\n 0,\n deckInstance.width,\n deckInstance.height,\n )\n }\n\n deckInstance?.redraw('screenshot')\n context?.drawImage(\n deckInstance.getCanvas()!,\n 0,\n 0,\n deckInstance.width,\n deckInstance.height,\n )\n\n const data = canvas.toDataURL()\n\n setScreenshot(data)\n } catch (err) {\n setError(err as Error)\n\n // eslint-disable-next-line\n console.error(err)\n } finally {\n setIsLoading(false)\n }\n }, [deckInstanceFn, isGmaps, mapId, overlayInstanceFn])\n\n const takeScreenshot = useCallback(() => {\n setError(undefined)\n setIsLoading(true)\n if (!isAllLoaded) return\n\n void _takeScreenshot()\n }, [_takeScreenshot, isAllLoaded])\n\n return {\n takeScreenshot,\n isLoading,\n screenshot,\n error,\n }\n}\n","import { useMemo } from 'react'\nimport { useMapStore } from './providers/map/provider'\nimport type { MapComponentProps } from './types'\nimport {\n createViewportSpatialFilter,\n type SpatialFilter,\n} from '@carto/api-client'\nimport { useLassoToolsState } from './editable/lasso-tools/provider/provider'\nimport { getMaskValues } from './editable/lasso-tools/util'\nimport { multiPolygon } from '@turf/turf'\nimport type { Polygon, Position } from 'geojson'\n\nexport function useSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const viewportSpatialFilter = useViewportSpatialFilter({ mapId })\n\n const lassoToolsSpatialFilter = useLassoToolsSpatialFilter({\n mapId,\n }) as unknown as SpatialFilter | undefined\n\n const staticSpatialFilter = useStaticSpatialFilter({ mapId })\n\n return {\n spatialFilter:\n lassoToolsSpatialFilter ?? staticSpatialFilter ?? viewportSpatialFilter,\n staticSpatialFilter,\n lassoToolsSpatialFilter,\n viewportSpatialFilter,\n }\n}\n\nexport function useViewportSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const viewport = useMapStore((state) => state.viewports[mapId])\n\n return useMemo(() => {\n if (!viewport) return\n return createViewportSpatialFilter(viewport.getBounds())\n }, [viewport])\n}\n\nexport function useLassoToolsSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}) {\n const _values = useLassoToolsState((state) => state.data[mapId]?.values)\n\n return useMemo(() => {\n const values = getMaskValues({ values: _values }).filter(\n (value) => value.properties.visible,\n )\n\n if (!values?.length) return\n\n return multiPolygon(\n values.map((value) => (value.geometry as Polygon).coordinates),\n ).geometry\n }, [_values])\n}\n\nexport function useStaticSpatialFilter({\n mapId,\n}: {\n mapId: MapComponentProps['id']\n}): SpatialFilter | undefined {\n const spatialFilter = useMapStore((state) => state.spatialFilter[mapId])\n\n return useMemo(() => {\n if (!spatialFilter || !Object.keys(spatialFilter).length) return\n\n // Flatten the array to match the expected Position[][][] type\n const coordinates: Position[][][] = Object.values(spatialFilter)\n .filter((value) => value !== null && value !== undefined)\n .flatMap((geom) => {\n // If it's a Polygon, wrap its coordinates in an array to make it compatible with MultiPolygon format\n if (geom.type === 'Polygon') {\n return [geom.coordinates]\n }\n\n // Otherwise, validate or transform `geom` to ensure it matches the expected format\n return geom.coordinates\n })\n\n return multiPolygon(coordinates).geometry\n }, [spatialFilter])\n}\n","export const formatterTypes = {\n currency: 'CURRENCY',\n default: 'DEFAULT',\n number: 'NUMBER',\n} as const\n","import { formatCurrency, formatNumber } from '@carto/ps-utils'\nimport { formatterTypes } from './const'\nimport type { Formatters, Value } from './types'\n\nexport const FORMATTERS: Formatters = {\n [formatterTypes.currency]: {\n type: formatterTypes.currency,\n format: (value: Value, locale: string) => {\n return formatCurrency(value as number, locale)\n },\n },\n [formatterTypes.number]: {\n type: formatterTypes.number,\n format: (value: Value, locale: string) => {\n return formatNumber(value as number, locale)\n },\n },\n [formatterTypes.default]: {\n type: formatterTypes.default,\n format: (value: Value) => {\n return value.toLocaleString()\n },\n },\n}\n","import { formatterTypes } from './const'\nimport { FORMATTERS } from './object-to-html.contants'\nimport type { FieldFormatter, ObjectToHtmlOptions, Value } from './types'\n\n/**\n * Returns a string with the HTML content for an object.\n *\n * @param {ObjectToHtmlOptions} - The options of the formatter.\n *\n * @return {string}\n *\n * @defaultValues\n *\n * | Prop | Value |\n * | --- | --- |\n * | `formatters` | `{}` |\n * | `includeColumns` | `Object.keys(properties)` |\n * | `locale` | `en-US` |\n * | `showColumnName` | `true` |\n * | `title` | `''` |\n * | `getColumnName` | `Function` |\n * | `getFieldHtml` | `Function` |\n * | `getTitle` | `Function` |\n * | `getValue` | `Function` |\n *\n * @example\n * const properties = {\n * name: 'I am a feature',\n * price: 100,\n * }\n *\n * const html = objectToHtml({\n * properties,\n * formatters: {\n * price: 'CURRENCY',\n * },\n * locale: 'es-ES',\n * })\n */\nexport function objectToHtml<T extends Record<string, Value>>({\n properties,\n formatters = {},\n includeColumns = Object.keys(properties),\n locale = 'en-US',\n showColumnName = true,\n title,\n getColumnName = _getColumnName,\n getFieldHtml = _getFieldHtml,\n getTitle = _getTitle,\n getValue = _getValue,\n}: ObjectToHtmlOptions<T>): string {\n const header = title ? getTitle(title) : ''\n\n const propNames = includeColumns\n\n const body = propNames.reduce((acc, cur) => {\n const formatter = formatters[cur]!\n const value = properties[cur]!\n\n const valueTransformed = getValue(value, locale, formatter)\n const columnName = showColumnName ? getColumnName(cur) : ''\n\n return acc + getFieldHtml(columnName, valueTransformed)\n }, '')\n\n return header + body\n}\n\nfunction _getTitle(title: string) {\n return `<h3 style=\"margin: 0\"><strong>${title}</strong></h3></br>`\n}\n\nfunction _getFieldHtml(columnName: string, value: Value) {\n const propHtml = `${columnName}${value}</br>`\n\n return propHtml\n}\n\nfunction _getValue(value: Value, locale: string, formatter?: FieldFormatter) {\n try {\n const format = getFormatterFunction(formatter)\n return format(value, locale)\n } catch {\n return value as string\n }\n}\n\nfunction getFormatterFunction(formatter?: FieldFormatter) {\n if (typeof formatter === 'function') {\n return formatter\n }\n\n const fn =\n (formatter && FORMATTERS[formatter]) ?? FORMATTERS[formatterTypes.default]\n\n return fn.format\n}\n\nfunction _getColumnName(propName: string) {\n return `<strong>${propName}</strong>: `\n}\n","import type { Layer } from '../providers/layers/types'\n\nexport function mappingLegendMeridian<T>(layer: Layer) {\n return {\n collapsed: layer.legend?.collapsed,\n collapsible: layer.legend?.collapsible,\n helperText: layer.legend?.helperText,\n id: layer.props.id,\n legend: layer.legend?.variables,\n maxZoom: layer.legend?.maxZoom,\n minZoom: layer.legend?.minZoom,\n opacity: layer.props.opacity ?? 1,\n showOpacityControl: layer.legend?.opacityControl,\n switchable: layer.legend?.switchable,\n title: layer.name,\n visible: layer.props.visible ?? true,\n } as T\n}\n","import {\n centroid,\n lineString,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n polygon,\n} from '@turf/turf'\nimport type { Feature, Geometry, Position } from 'geojson'\n\ntype GeometryHandler = (geometry: Geometry) => Feature<Geometry> | undefined\n\n/**\n * Mapping of geometry types to their corresponding Turf.js factory functions.\n */\nconst geometryTypeHandlers: Record<string, GeometryHandler | undefined> = {\n Point: (g) => point((g as Extract<Geometry, { type: 'Point' }>).coordinates),\n LineString: (g) =>\n lineString((g as Extract<Geometry, { type: 'LineString' }>).coordinates),\n Polygon: (g) =>\n polygon((g as Extract<Geometry, { type: 'Polygon' }>).coordinates),\n MultiPoint: (g) =>\n multiPoint((g as Extract<Geometry, { type: 'MultiPoint' }>).coordinates),\n MultiLineString: (g) =>\n multiLineString(\n (g as Extract<Geometry, { type: 'MultiLineString' }>).coordinates,\n ),\n MultiPolygon: (g) =>\n multiPolygon(\n (g as Extract<Geometry, { type: 'MultiPolygon' }>).coordinates,\n ),\n}\n\n/**\n * Returns the centroid of a geometry.\n *\n * @param geometry - The geometry to get the centroid of\n * @returns The centroid coordinates [longitude, latitude] or undefined if geometry is invalid\n *\n * @example\n * ```typescript\n * const geometry = {\n * type: 'Polygon',\n * coordinates: [\n * [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]\n * ]\n * }\n * const center = getCentroid(geometry)\n * console.log(center) // [0.5, 0.5]\n * ```\n */\nexport function getCentroid(geometry: Geometry): Position | undefined {\n const handler = geometryTypeHandlers[geometry.type]\n const feature = handler?.(geometry)\n\n if (!feature) {\n return\n }\n\n return centroid(feature).geometry.coordinates\n}\n","import type { ZoomControl } from './types'\nimport { useMapStore } from './providers/map/provider'\nimport { useCallback } from 'react'\n\nexport function ZoomControls({ children, mapId }: ZoomControl) {\n const { zoom, maxZoom, minZoom } = useMapStore(\n (state) => state.viewStates[mapId]!,\n )\n const isLoaded = useMapStore((state) => state.areLayersLoaded[mapId])\n\n const setZoom = useMapStore((state) => state.setZoom)\n const flyTo = useMapStore((state) => state.flyTo)\n const resetViewState = useMapStore((state) => state.resetViewState)\n\n return children({\n zoom,\n maxZoom,\n minZoom,\n isLoading: !isLoaded,\n setZoom: useCallback((zoom) => setZoom(mapId, zoom), [mapId, setZoom]),\n flyTo: useCallback(\n (viewState: Parameters<typeof flyTo>[1]) => flyTo(mapId, viewState),\n [flyTo, mapId],\n ),\n resetViewState: useCallback(\n () => resetViewState(mapId),\n [resetViewState, mapId],\n ),\n })\n}\n","import {\n RequestMethods,\n executeFetch,\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n} from '@carto/ps-services'\nimport type { GetQueryStats } from './types'\nimport type { StatsResponse } from './types'\n\nexport async function getQueryStats<Attribute extends string | number>({\n baseUrl = DEFAULT_CARTO_API_URL,\n connection,\n accessToken,\n query,\n attribute,\n fetcherOptions: { signal, ...other } = {},\n queryParameters,\n params,\n apiVersion = DEFAULT_CARTO_API_VERSION,\n}: GetQueryStats) {\n const statsUrl = `${baseUrl}/${apiVersion}/stats/${connection}/${attribute}`\n\n return executeFetch<StatsResponse<Attribute>>({\n accessToken,\n signal,\n url: statsUrl,\n method: RequestMethods.get,\n params: { q: query, ...queryParameters, ...params },\n ...other,\n })\n}\n","import {\n RequestMethods,\n executeFetch,\n DEFAULT_CARTO_API_URL,\n DEFAULT_CARTO_API_VERSION,\n} from '@carto/ps-services'\nimport type { GetTableStats } from './types'\nimport type { StatsResponse } from './types'\n\nexport async function getTableStats<Attribute extends string | number>({\n baseUrl = DEFAULT_CARTO_API_URL,\n connection,\n accessToken,\n table,\n attribute,\n params,\n fetcherOptions: { signal, ...other } = {},\n apiVersion = DEFAULT_CARTO_API_VERSION,\n}: GetTableStats) {\n const statsUrl = `${baseUrl}/${apiVersion}/stats/${connection}/${table}/${attribute}`\n\n return executeFetch<StatsResponse<Attribute>>({\n accessToken,\n signal,\n url: statsUrl,\n method: RequestMethods.get,\n params: { ...params },\n ...other,\n })\n}\n","import { vectorTilesetSource } from '@carto/api-client'\nimport { useQuery, type UseQueryOptions } from '@tanstack/react-query'\nimport { getQueryStats } from './get-query-stats'\nimport { getTableStats } from './get-table-stats'\nimport type {\n AllExternalSources,\n GeoJSONSource,\n QuerySource,\n Source,\n TableSource,\n TilesetSource,\n} from '../providers/sources/types'\nimport type { Stats, StatsResponse } from './types'\nimport type { Feature } from 'geojson'\nimport { useQueryKey } from '../models/utils/use-query-key'\n\nexport function useStats<Attribute extends string | number>({\n source,\n attribute,\n accessToken,\n params,\n fetcherOptions,\n useQueryProps: { enabled = true, ...useQueryProps } = {},\n}: {\n source: Source | undefined\n attribute: Stats['attribute']\n accessToken: Stats['accessToken']\n params?: Stats['params']\n fetcherOptions?: Stats['fetcherOptions']\n useQueryProps?: Omit<\n UseQueryOptions<StatsResponse<Attribute>, Error>,\n 'queryKey' | 'queryFn'\n >\n}) {\n const queryKey = useQueryKey({\n queryKeyPrefix: ['stats', attribute],\n sourceId: source?.id,\n })\n\n return useQuery<StatsResponse<Attribute>, Error>({\n queryKey,\n queryFn: () =>\n retrieveStatsBySource<Attribute>({\n source: source!,\n params,\n attribute,\n accessToken: accessToken!,\n fetcherOptions,\n }),\n select(data) {\n return {\n ...data,\n type: data.type.toLowerCase(),\n }\n },\n enabled: !!source && enabled,\n ...useQueryProps,\n })\n}\n\nfunction retrieveStatsBySource<Attribute extends string | number>({\n source,\n params,\n attribute,\n accessToken,\n fetcherOptions,\n}: {\n source: Source\n params?: Stats['params']\n attribute: Stats['attribute']\n accessToken: NonNullable<Stats['accessToken']>\n fetcherOptions?: Stats['fetcherOptions']\n}): Promise<StatsResponse<Attribute>> {\n if (source.type.startsWith('query')) {\n const _source = source as Source<AllExternalSources & QuerySource>\n return getQueryStats<Attribute>({\n connection: _source.connectionName,\n baseUrl: _source.apiBaseUrl,\n apiVersion: _source.apiVersion,\n accessToken,\n params,\n query: _source.data,\n queryParameters: _source.queryParameters,\n attribute,\n fetcherOptions,\n })\n }\n if (source.type.startsWith('table')) {\n const _source = source as Source<AllExternalSources & TableSource>\n return getTableStats<Attribute>({\n connection: _source.connectionName,\n baseUrl: _source.apiBaseUrl,\n apiVersion: _source.apiVersion,\n params,\n accessToken,\n table: _source.data,\n attribute,\n fetcherOptions,\n })\n }\n if (source.type.startsWith('tileset')) {\n const _source = source as Source<AllExternalSources & TilesetSource>\n return getStatsFromTileset<Attribute>({\n source: _source,\n accessToken,\n target: _source.data,\n attribute,\n })\n }\n\n if (source.type === 'geojson') {\n return Promise.resolve(\n getStatsFromGeoJSON({\n source: source as Source<GeoJSONSource>,\n attribute,\n }) as StatsResponse<Attribute>,\n )\n }\n\n throw new Error(`Unsupported source type: ${source.type}`)\n}\n\n// Catch Stats from tileset\n\nasync function getStatsFromTileset<Attribute extends string | number>({\n source,\n accessToken,\n target,\n attribute,\n}: {\n source: Source<AllExternalSources & TilesetSource>\n accessToken: string\n target: string\n attribute: string\n}) {\n const tileJson = await vectorTilesetSource({\n connectionName: source.connectionName,\n apiBaseUrl: source.apiBaseUrl,\n accessToken: accessToken,\n clientId: source.clientId,\n tableName: target,\n })\n if (!tileJson?.tilestats?.layers?.[0]?.attributes) {\n throw new Error(`${attribute} not found in tileset attributes`)\n }\n\n const tileStatsAttributes = tileJson.tilestats.layers[0].attributes\n const columnStats = tileStatsAttributes.find((p) => p.attribute === attribute)\n\n if (!columnStats) {\n throw new Error(`${attribute} not found in tileset attributes`)\n }\n\n return columnStats as StatsResponse<Attribute>\n}\n\nfunction getStatsFromGeoJSON({\n source,\n attribute,\n}: {\n source: Source<GeoJSONSource>\n attribute: string\n}) {\n const data = source.data\n // Find the first non-null, non-undefined value for the attribute\n const attrType = data.find((feature) => {\n const value = feature?.properties?.[attribute] as unknown\n return value !== null && value !== undefined\n })?.properties?.[attribute] as unknown\n\n if (typeof attrType === 'number') {\n return getNumberStats({ data, attribute })\n }\n\n return getStringStats({ data, attribute })\n}\n\nfunction getNumberStats({\n data,\n attribute,\n}: {\n data: Feature[]\n attribute: string\n}): StatsResponse<number> {\n const _response = data.reduce(\n (acc, curr) => {\n const value = curr.properties?.[attribute] as number\n\n acc.sum += value\n acc.max = Math.max(acc.max, value)\n acc.min = Math.min(acc.min, value)\n acc.values.push(value)\n\n return acc\n },\n {\n max: -Infinity,\n min: Infinity,\n sum: 0,\n values: [],\n } as {\n max: number\n min: number\n sum: number\n values: number[]\n },\n )\n\n const values = _response.values.sort((a, b) => a - b)\n\n const quantiles: Record<number, number[]> = {}\n for (let i = 3; i <= 20; i++) {\n quantiles[i] = []\n for (let j = 0; j <= i; j++) {\n const qIndex = Math.floor((j * (values.length - 1)) / i)\n const value = values[qIndex]\n if (value !== undefined) {\n quantiles[i]?.push(value)\n }\n }\n }\n\n const response = {\n ..._response,\n avg: data.length ? _response.sum / data.length : 0,\n attribute,\n quantiles,\n type: 'number' as const,\n }\n\n return response\n}\n\nfunction getStringStats({\n data,\n attribute,\n}: {\n data: Feature[]\n attribute: string\n}): StatsResponse<string> {\n const valuesCount: Record<string, number> = {}\n data.forEach((feature) => {\n const value = feature.properties?.[attribute] as string\n if (value !== undefined) {\n valuesCount[value] ??= 0\n valuesCount[value] += 1\n }\n })\n\n const categories = Object.entries(valuesCount).map(([value, count]) => ({\n category: value,\n frequency: count,\n }))\n\n const response = {\n categories,\n type: 'string' as const,\n attribute,\n }\n\n return response\n}\n"],"names":["GmapsBasemap","roadmap","satellite","hybrid","CartoBasemaps","darkMatter","positron","voyager","CartoBasemapURL","MapsTypes","maplibre","googleMaps","MAPS_BASEMAP","url","type","dark","getCursorDefault","isDragging","isHovering","getTooltipDefault","info","html","style","padding","background","MapLibre","t0","$","_c","controller","getCursor","getTooltip","id","instanceRef","layers","mapStyle","onLoad","onViewStateChange","overlayRef","parameters","rest","t1","filter","_temp","map","_temp2","_layers","t2","t3","value","t4","depthTest","t5","MapReferences","t6","t7","jsx","Map","_temp3","t8","MapProvider","jsxs","DeckGL","$el","document","querySelector","classList","remove","Layer","props","l","default","mapLibre","useMapLibre","useImperativeHandle","DeckGlOverlay","Symbol","for","GoogleMapsOverlay","interleaved","deck","useMap","setMap","finalize","useEffect","setProps","GoogleMaps","basemap","gmapsProps","undefined","apiKey","APIProviderProps","_gmapsProps","bb0","dragPan","doubleClickZoom","scrollZoom","_controller","_controller_0","initialViewState","maxZoom","minZoom","detail","center","zoom","heading","tilt","latitude","lat","longitude","lng","bearing","pitch","mappingGmapsToDeck","newViewState","deckInstance","current","_deck","viewState","_viewState","width","height","interactionState","isZooming","handleViewStateChange","props_0","newViewState_0","handleGmapsChange","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","APIProvider","gmaps","DeckGLComponent","isLoaded","setLoaded","useState","isGmaps","e","index","state","loaded","i","handleLoad","isAllLoaded","every","loaded_0","transitionFlyConfig","transitionDuration","transitionInterpolator","FlyToInterpolator","curve","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","val","cloneUnlessOtherwiseSpecified","options","deepmerge","defaultArrayMerge","target","source","element","getMergeFunction","key","customMerge","getEnumerableOwnPropertySymbols","symbol","getKeys","propertyIsOnObject","object","property","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","array","prev","next","deepmerge_1","cjs","createMapSlice","initProps","defaultProps","reduce","acc","curr","set","get","maps","setBasemap","currentType","newType","setLoad","getOverlayInstance","getDeckInstance","getViewState","getViewports","rect","getViewport","getBounds","bounds","store","newBounds","WebMercatorViewport","fitBounds","boundsOptions","viewStateOptions","addLayers","Set","removeLayers","layer","includes","getController","setController","currentController","newController","createAreLayersLoaded","areLayersLoaded","setLayersLoad","createViewStateSlice","initialViewStates","viewStates","viewports","updateViewPort","viewport","setViewState","setInitialViewState","setZoom","setMinZoom","setMaxZoom","createCommonSlice","_","flyTo","finalViewState","loadInitialViewState","resetViewState","createSpatialFilterSlice","spatialFilter","setSpatialFilter","mapId","structuredClone","removeSpatialFilter","createLayerActionsSlice","setLayerHover","layerId","geometry","widgetManager","x","y","project","isNaN","picked","pickObject","radius","layerIds","event","MouseEvent","onHover","clearLayersHover","createMapStore","createStore","args","MapContext","createContext","children","values","storeRef","useMapStore","selector","useContext","Object","keys","length","Error","useStore","BasemapsControls","basemap_0","state_0","EditType","addFeature","addTentativePosition","updateTentativeFeature","cancel","finish","addPosition","CustomCompositeEditMode","CompositeMode","constructor","TranslateMode","ModifyMode","handleKeyUp","resetClickSequence","onEdit","updatedData","data","editType","editContext","MAP_LASSO_TOOLS_LAYER_ID","MAP_MASK_LAYER_ID","DEFAULT_LASSO_TOOLS_LAYER_PROPS","billboard","editHandlePointRadiusUnits","editHandlePointRadiusMinPixels","editHandlePointRadiusMaxPixels","editHandlePointStrokeWidth","getEditHandlePointRadius","stroked","filled","lineWidthUnits","getLineWidth","lineWidthMinPixels","DEFAULT_LASSO_TOOLS_COLORS","editing","border","fill","point","finished","DEFAULT_LASSO_TOOLS_PROPS","styles","colors","labels","mask","EXTENSION_FILTER","DataFilterExtension","filterSize","DEFAULT_MASK_LAYER_PROPS","operation","pickable","visible","extensions","filterRange","DEFAULT_LASSO_TOOLS_MODES","polygon","mode","DrawPolygonMode","rectangle","DrawRectangleMode","circle","DrawCircleFromCenterMode","lasso","DrawPolygonByDraggingMode","edit","useLayerStore","create","setLayer","_layer","extension","some","equals","push","legend","updateTriggers","removeLayer","getLayers","getLayer","EVENT_TYPES","RECOGNIZERS","multipan","Pan","threshold","direction","InputDirection","Vertical","pointers","pinch","Pinch","click","Tap","dblclick","taps","pan","useEventManager","store_0","eventManager","overlayInstance","EventManager","getDiv","recognizers","destroy","eventName","RecognizerConstructor","defaultOptions","recognizeWith","requestFailure","recognizer","store_1","CustomEditableGeojsonLayer","EditableGeoJsonLayer","updateState","oldProps","context","changeFlags","_removeEventHandlers","_addEventHandlers","_getEventManager","eventHandler","_editableLayerState","eventType","on","priority","_eventManager","off","layerName","getLassoToolsLayer","getLayerProps","layerProps","getLineColor","getFillColor","pointColor","_layerProps","modeConfig","preventOverlappingLines","defaultLayerProps","getTentativeLineColor","getTentativeFillColor","getEditHandlePointColor","getEditHandlePointOutlineColor","outline","dataComparator","oldData","features","createLassoToolsStore","enabled","modeInstance","modes","modeSelected","setEnabled","setValue","_value","setVisibility","valueId","properties","setModeSelected","setModeInstance","LassoToolsContext","LassoToolsProvider","useLassoToolsState","LassoToolsControls","state_1","state_4","_temp4","state_6","_temp5","Mode","serialize","_temp6","_temp7","mask_0","handleModeSelected","data_0","enabled_0","value_0","label","state_7","state_5","state_3","state_2","getMaskValues","convert","configureMeasurements","convertArea","area","validateUnitForAreaConversion","unit","CONVERSIONS_UNITS_FROM_LINEAR_TO_AREA","validUnits","join","convertMetersTo","distance","dimension","unitFrom","CONVERSIONS_UNITS","MapMeasurementUnit","meter","unitTo","from","to","CONVERSIONS_UNITS_AREA","DEFAULT_AUTO_SPLIT_NUMBER","getTextLayerFormattedDistance","meters","locale","autoSplitNumber","customFormatter","intlOptions","isMetricSystem","MapMeasurementUnitAuto","isImperialSystem","isAuto","_unit","_number","isSmallDistance","convertUnit","kilometer","INTL_UNITS","feet","mile","result","formatNumber","unitDisplay","notation","minimumFractionDigits","maximumFractionDigits","getDeckController","hasDoubleClickZoom","buildTooltip","position","formatTooltip","turfOptions","units","text","parseFloat","toString","toFixed","measurementCallback","CustomMeasureAreaMode","MeasureAreaMode","_isMeasuringSessionFinished","tooltips","resultPolygon","handleClick","picks","clickedEditHandle","getPickedEditHandle","clickSequence","getClickSequence","positionAdded","allowOverlapping","addClickSequence","latestClickSequence","polygonCoordinates","coordinates","isFinalizedEdition","finalizeEdition","mapCoords","resetEdition","updateTooltip","centroid","handlePointerMove","tentativeGuide","getTentativeGuide","getGuides","getTooltips","positionIndexes","overlappingLines","currentLine","otherLines","slice","lineIntersect","polygonToAdd","selectedIndexes","editAction","getAddFeatureOrBooleanPolygonAction","positions","getTooltipText","CustomMeasureBufferMode","_currentArea","areaCircle","checkAndFinishPolygon","tentativeFeature","onUpdateCursor","CustomMeasureDistanceMode","MeasureDistanceMode","_currentDistance","stopPropagation","clickSequenceLength","_currentTooltips","MAP_MEASURE_LAYER_ID","DEFAULT_LAYER_PROPS","_subLayerProps","fontFamily","fontWeight","getSize","lineHeight","getPixelOffset","getTextAnchor","getAlignmentBaseline","guides","DEFAULT_COLORS","DEFAULT_PROPS","centimeter","milimeter","yard","MapMeasurementUnitArea","squareMeter","squareKilometer","squareMile","squareFeet","MapMeasurementUnitTurf","MEASUREMENT_TOOLS_UNITS_DISTANCE_VALUES","system","MEASUREMENT_TOOLS_UNITS_DISTANCE","MEASUREMENT_TOOLS_UNITS_AREA","DEFAULT_MEASUREMENT_TOOLS_MODES","buffer","DEFAULT_MEASUREMENT_TOOLS_UNITS","EXCEPTED_LAYER_IDS","LassoTools","defaultType","mapLayers","useShallow","mapLayersVisibilityRef","useRef","maskValues","useMemo","maskFeatureCollection","maskVisible","setData","selectedFeatureIndexes","setSelectedFeatureIndexes","setDataByValues","useCallback","_data","feature","autoIncrement","handleCancelEdit","handleApplyEdit","forEach","crypto","randomUUID","guideColorEditing","pointColorEditing","fillColorEditing","borderFinished","fillFinished","getFilterValue","onClick","_e","isGuide","d","ViewMode","f","Number","GeoJsonLayer","currentLayer","find","MaskExtension","maskId","Controls","getMeasurementToolsLayer","guideColor","textOptions","_distance","outlineColor","outlineWidth","fontSettings","sdf","smoothing","getText","with","createMeasurementToolsStore","measurements","clearLayerOnStart","setFinished","setDistance","setUnit","setLocale","setPositions","MeasurementToolsContext","MeasurementToolsProvider","useMeasurementToolsState","useMeasurementTools","_setDistance","distance_0","_setVisibility","_setModeSelected","state_8","_setFinished","finished_0","state_10","_setLocale","locale_0","state_12","_setInstance","modeInstance_0","state_14","_setPositions","positions_0","state_16","_setUnit","_temp8","unit_0","clearLayer","enabled_1","toggleLayer","state_17","state_15","state_13","state_11","state_9","MeasurementToolsControl","_toggleLayer","ModeClass","enable","MeasurementTools","l_0","useLayers","layersMap","defaultLastLayerOrder","sortLayers","sortedLayers","sort","a","b","order","Infinity","lastLayers","ZOOM_DEBOUNCE_MS","MapComponent","timerRef","computedLayers","callback","clearInterval","setTimeout","onAfterRender","handleAfterRender","_onDragEnd","onDragEnd","handleDragEnd","m","w","B","O","post","Method","INIT","LOAD_GEOJSON","GET_FORMULA","GET_HISTOGRAM","GET_CATEGORIES","GET_SCATTER","GET_TABLE","GET_TIME_SERIES","GET_RANGE","GET_AGGREGATIONS","GET_EXTENT","geojsonFeatures","geojson","uniqueIdProperty","updatedProperties","String","WidgetGeoJsonSourceImpl","WidgetSource","_filterFeaturesBySpatial","booleanIntersects","loadGeoJSON","getFeatures","Promise","reject","getFormula","column","AggregationTypes","Count","joinOperation","filters","filterOwner","filteredFeatures","_getFilteredFeatures","resolve","Custom","assertColumn","targetOperation","aggregationFunctions","assert","getHistogram","ticks","histogram","valuesColumns","normalizeColumns","getCategories","operationColumn","othersThreshold","orderBy","rawResult","groupValuesByColumn","keysColumn","rows","name","OTHERS_CATEGORY_NAME","metadata","others","getScatter","xAxisColumn","yAxisColumn","xAxisJoinOperation","yAxisJoinOperation","scatterPlot","xAxisColumns","yAxisColumns","getTable","columns","searchFilterColumn","searchFilterText","sortBy","sortDirection","sortByColumnType","offset","limit","totalCount","console","warn","row","toLowerCase","applySorting","sortByDirection","Math","min","srcRow","dstRow","getTimeSeries","stepSize","groupValuesByDateColumn","groupType","getRange","max","getAggregations","aggregations","usedAliases","alias","aliasKey","has","add","getExtent","_bbox","bbox","featureCollection","_features","applyFilters","getApplicableFilters","filtersLogicalOperator","condition","message","columnArgs","Array","flat","featureKeys","invalidColumns","isArray","WidgetGeoJsonSource","_localImpl","_workerImpl","_workerEnabled","_workerNextRequestId","widgetWorker","Worker","terminate","_getWorker","addEventListener","error","postMessage","method","params","_executeWorkerMethod","signal","worker","requestId","onMessage","response","aborted","ok","onAbort","reason","promise","_resolve","_reject","finally","removeEventListener","useSourceStore","devtools","sources","setSource","widgetClient","widgets","previousSource","newSource","apiBaseUrl","DEFAULT_CARTO_API_URL","clientId","DEFAULT_CLIENT_ID","apiVersion","DEFAULT_CARTO_API_VERSION","getWidgetSource","removeSource","setFilters","newFilters","currentFilters","addFilter","removeFilters","owner","removeFilter","invalidateSourcesCache","ids","timeout","maxAge","headers","useSource","useSources","useFilters","useSourceWithFilters","getFilterValues","getSpatialDataFallback","fallback","split","spatialDataType","spatialDataColumn","query","WidgetQuerySource","accessToken","sqlQuery","table","WidgetTableSource","tableName","tileset","spatialDataBounds","WidgetTilesetSource","tileFormat","TileFormat","BINARY","raster","rasterMetadata","WidgetRasterSource","connectionName","option","useFiltersMerged","sourcesIdOrArgsOrSourceId","additionalFilterOrUndefined","sourceId","sourcesId","additionalFilter","isSingleSource","sourcesArray","_filters","_additionalFilter","filterSet","computedFilters","mergedFilters","acc_0","filter_0","useWidgetModel","accessTokenOrArgs","sourcesIdOrUndefined","widgetModel","widgetModels","RELEVANT_HEADERS","getRelevantHeaders","relevantEntries","entries","lowerKey","JSON","stringify","useQueryKey","queryKeyPrefix","queryParametersMemo","relevantHeadersMemo","currentSourceId","relevantHeaders_0","relevantHeaders","queryKeys","source_0","queryParameters","resolvePropertyForSource","sourceIndex","totalSources","propertyName","at","resolveColumnForSource","useCommonModel","widgetProps","baseQueryKeys","mergedFiltersMemo","resolvedColumn","resolvedOperationExp","operationExp","resolvedOperationColumn","resolvedProps","mergedWidgetPropsMemo","index_0","resolvedWidgetProps","enhancedKey","filterMemo","enhancedQueryKeys","queryKey","createModel","getWidgetMethod","useModelHook","useQueryProps","_sourcesId","promises","_widgetModel","widgetMethod","requestOptions","results","allSettled","status","queryFn","useQuery","ModelComponent","queryResult","useAggregations","AggregationsModel","adaptedAggregations","agg","transformAggregationsToSql","adaptedParams","aggregationExp","useCategories","CategoriesModel","useFeatures","FeaturesModel","useFormula","FormulaModel","useHistogram","HistogramModel","useRange","RangeModel","useScatter","ScatterModel","useTable","TableModel","useTimeSeries","TimeSeriesModel","clientID","MapsProvider","lassoTools","measureTools","useLegend","layersId","toReversed","layersById","id_0","legend_0","onChangeVisibility","id_1","collapsed","onChangeRowCollapse","id_2","opacity","onChangeOpacity","useMapScreenshot","screenshot","setScreenshot","isLoading","setIsLoading","setError","deckInstanceFn","overlayInstanceFn","_takeScreenshot","canvas","createElement","getContext","_overlayInstance","getRenderingType","html2canvas","useCORS","drawImage","redraw","getMap","getCanvas","toDataURL","err","takeScreenshot","useSpatialFilter","viewportSpatialFilter","useViewportSpatialFilter","lassoToolsSpatialFilter","useLassoToolsSpatialFilter","staticSpatialFilter","useStaticSpatialFilter","createViewportSpatialFilter","_values","multiPolygon","flatMap","geom","formatterTypes","currency","number","FORMATTERS","format","formatCurrency","toLocaleString","objectToHtml","formatters","includeColumns","showColumnName","title","getColumnName","_getColumnName","getFieldHtml","_getFieldHtml","getTitle","_getTitle","getValue","_getValue","header","body","cur","formatter","valueTransformed","columnName","getFormatterFunction","propName","mappingLegendMeridian","collapsible","helperText","variables","showOpacityControl","opacityControl","switchable","geometryTypeHandlers","Point","g","LineString","lineString","Polygon","MultiPoint","multiPoint","MultiLineString","multiLineString","MultiPolygon","getCentroid","handler","ZoomControls","zoom_0","getQueryStats","baseUrl","connection","attribute","fetcherOptions","other","statsUrl","executeFetch","RequestMethods","q","getTableStats","useStats","retrieveStatsBySource","select","startsWith","_source","getStatsFromTileset","getStatsFromGeoJSON","tileJson","vectorTilesetSource","tilestats","attributes","columnStats","p","getNumberStats","getStringStats","_response","sum","quantiles","j","qIndex","floor","avg","valuesCount","categories","count","category","frequency"],"mappings":"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","x_google_ignoreList":[7]}