@defra/interactive-map 0.0.43-alpha → 0.0.44-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/index.css +1 -1
- package/dist/esm/im-core.js +1 -1
- package/dist/esm/im-shell.js +1 -1
- package/dist/umd/im-core.js +1 -1
- package/dist/umd/index.js +1 -1
- package/docs/api.md +16 -8
- package/docs/plugins/draw.md +1 -1
- package/package.json +1 -1
- package/plugins/beta/draw-es/dist/esm/im-draw-es-plugin.js +1 -1
- package/plugins/beta/draw-ml/dist/esm/im-draw-ml-plugin.js +1 -1
- package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -1
- package/plugins/beta/draw-ol/dist/esm/im-draw-ol-plugin.js +1 -1
- package/plugins/beta/map-styles/dist/umd/im-map-styles-plugin.js +1 -1
- package/plugins/beta/map-styles/dist/umd/index.js +1 -1
- package/plugins/datasets/dist/css/index.css +1 -1
- package/plugins/datasets/dist/esm/im-datasets-plugin.js +1 -1
- package/plugins/datasets/dist/umd/im-datasets-plugin.js +1 -1
- package/plugins/datasets/src/components/LayersMenu/Layers.module.scss +1 -0
- package/plugins/datasets/src/initialise/DatasetsInit.jsx +2 -2
- package/plugins/datasets/src/initialise/DatasetsInit.test.jsx +6 -5
- package/plugins/draw/dist/esm/im-draw-ml-adapter.js +1 -1
- package/plugins/draw/dist/esm/im-draw-ol-adapter.js +1 -1
- package/plugins/draw/dist/esm/im-draw-plugin.js +1 -1
- package/plugins/draw/dist/esm/index.js +1 -1
- package/plugins/draw/dist/umd/im-draw-ml-adapter.js +1 -1
- package/plugins/draw/dist/umd/im-draw-ol-adapter.js +1 -1
- package/plugins/draw/dist/umd/im-draw-plugin.js +1 -1
- package/plugins/draw/dist/umd/index.js +1 -1
- package/plugins/draw/src/DrawInit.jsx +31 -26
- package/plugins/draw/src/DrawInit.test.jsx +55 -12
- package/plugins/draw/src/adapters/maplibre/MaplibreDrawAdapter.js +113 -114
- package/plugins/draw/src/adapters/maplibre/MaplibreDrawAdapter.test.js +82 -9
- package/plugins/draw/src/adapters/maplibre/drawEvents.js +3 -1
- package/plugins/draw/src/adapters/maplibre/modes/createDrawMode.test.js +1 -1
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/__helpers__/harness.js +18 -9
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/clickHandlers.js +9 -1
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/clickHandlers.test.js +11 -1
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/lifecycle.js +8 -2
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/lifecycle.test.js +35 -0
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/pointerHandlers.js +29 -19
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/pointerHandlers.test.js +17 -2
- package/plugins/draw/src/adapters/maplibre/modes/drawMode/undoHandlers.test.js +1 -1
- package/plugins/draw/src/adapters/maplibre/modes/drawPointMode.js +35 -29
- package/plugins/draw/src/adapters/maplibre/modes/drawPointMode.test.js +24 -6
- package/plugins/draw/src/adapters/maplibre/modes/editPointMode/keyboardHandlers.js +22 -20
- package/plugins/draw/src/adapters/maplibre/modes/editPointMode/pointOperations.js +1 -1
- package/plugins/draw/src/adapters/maplibre/modes/editPointMode.js +2 -2
- package/plugins/draw/src/adapters/maplibre/modes/editPointMode.test.js +3 -3
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/geometryHelpers.js +31 -0
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/geometryHelpers.test.js +8 -1
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/keyboardHandlers.js +38 -30
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/keyboardHandlers.test.js +20 -3
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/pointerHandlers.js +5 -5
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/touchHandlers.js +2 -2
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/touchHandlers.test.js +2 -2
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/undoHandlers.js +3 -3
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/undoHandlers.test.js +7 -7
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexOperations.js +4 -4
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexOperations.test.js +14 -14
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexQueries.js +12 -32
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexQueries.test.js +10 -10
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode.js +48 -22
- package/plugins/draw/src/adapters/maplibre/modes/editVertexMode.test.js +74 -6
- package/plugins/draw/src/adapters/maplibre/utils/snapMovement.js +2 -2
- package/plugins/draw/src/adapters/openlayers/OLDrawAdapter.js +6 -0
- package/plugins/draw/src/adapters/openlayers/OLDrawAdapter.test.js +9 -0
- package/plugins/draw/src/adapters/openlayers/core/OLDrawManager.js +15 -2
- package/plugins/draw/src/adapters/openlayers/core/OLDrawManager.test.js +27 -1
- package/plugins/draw/src/adapters/openlayers/draw/DrawMode.test.js +1 -1
- package/plugins/draw/src/adapters/openlayers/draw/drawInput.js +31 -17
- package/plugins/draw/src/adapters/openlayers/draw/drawInput.test.js +55 -1
- package/plugins/draw/src/adapters/openlayers/draw/vertexPlacement.js +13 -7
- package/plugins/draw/src/adapters/openlayers/draw/vertexPlacement.test.js +7 -15
- package/plugins/draw/src/adapters/openlayers/edit/EditMode.js +36 -4
- package/plugins/draw/src/adapters/openlayers/edit/EditMode.test.js +41 -1
- package/plugins/draw/src/adapters/openlayers/edit/keyboardHandler.js +35 -25
- package/plugins/draw/src/adapters/openlayers/edit/keyboardHandler.test.js +40 -2
- package/plugins/draw/src/adapters/openlayers/edit/nudge.js +2 -2
- package/plugins/draw/src/adapters/openlayers/edit/nudge.test.js +2 -2
- package/plugins/draw/src/adapters/openlayers/point/drawPointMode.js +32 -57
- package/plugins/draw/src/adapters/openlayers/point/drawPointMode.test.js +14 -13
- package/plugins/draw/src/adapters/openlayers/point/editPointMode.js +1 -1
- package/plugins/draw/src/adapters/openlayers/point/editPointMode.test.js +17 -1
- package/plugins/draw/src/events.js +4 -4
- package/plugins/draw/src/events.test.js +1 -1
- package/plugins/draw/src/hooks/useSpatialList.js +180 -0
- package/plugins/draw/src/hooks/useSpatialList.test.js +339 -0
- package/plugins/draw/src/utils/spatial.js +1 -31
- package/plugins/draw/src/utils/spatial.test.js +1 -24
- package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
- package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
- package/plugins/interact/dist/umd/index.js +1 -1
- package/plugins/interact/src/InteractInit.jsx +2 -2
- package/plugins/interact/src/InteractInit.test.js +3 -3
- package/plugins/interact/src/events.js +5 -0
- package/plugins/interact/src/hooks/useAttachEvents.js +20 -0
- package/plugins/interact/src/hooks/useAttachEvents.test.js +44 -1
- package/plugins/interact/src/hooks/useCrossHairVisibility.js +4 -4
- package/plugins/interact/src/hooks/useCrossHairVisibility.test.js +7 -7
- package/plugins/interact/src/hooks/{useMapItemList.js → useSpatialList.js} +87 -52
- package/plugins/interact/src/hooks/{useMapItemList.test.js → useSpatialList.test.js} +152 -71
- package/plugins/interact/src/manifest.js +12 -1
- package/plugins/interact/src/manifest.test.js +20 -0
- package/plugins/interact/src/utils/spatial.js +1 -1
- package/providers/beta/openlayers/src/utils/queryFeatures.js +1 -1
- package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
- package/providers/maplibre/dist/umd/im-maplibre-provider.js +1 -1
- package/providers/maplibre/dist/umd/index.js +1 -1
- package/providers/maplibre/src/utils/labels.js +2 -2
- package/providers/maplibre/src/utils/labels.test.js +5 -5
- package/providers/maplibre/src/utils/spatial.js +0 -57
- package/providers/maplibre/src/utils/spatial.test.js +0 -27
- package/src/App/components/CrossHair/CrossHair.jsx +10 -4
- package/src/App/components/CrossHair/CrossHair.module.scss +16 -12
- package/src/App/components/CrossHair/CrossHair.test.jsx +9 -4
- package/src/App/components/Hints/Hints.jsx +3 -3
- package/src/App/components/Hints/Hints.test.jsx +3 -3
- package/src/App/components/MapButton/MapButton.module.scss +1 -2
- package/src/App/components/{MoveControls/MoveControls.jsx → MapControls/MapControls.jsx} +10 -10
- package/src/App/components/{MoveControls/MoveControls.module.scss → MapControls/MapControls.module.scss} +25 -25
- package/src/App/components/{MoveControls/MoveControls.test.jsx → MapControls/MapControls.test.jsx} +48 -48
- package/src/App/components/Markers/Markers.jsx +2 -2
- package/src/App/components/Markers/Markers.test.jsx +3 -3
- package/src/App/components/Markers/SymbolMarker.test.jsx +2 -2
- package/src/App/components/Viewport/MapStatus.jsx +1 -1
- package/src/App/components/Viewport/SpatialList.jsx +47 -0
- package/src/App/components/Viewport/{Features.module.scss → SpatialList.module.scss} +3 -3
- package/src/App/components/Viewport/{Features.test.jsx → SpatialList.test.jsx} +60 -43
- package/src/App/components/Viewport/Viewport.jsx +20 -10
- package/src/App/components/Viewport/Viewport.test.jsx +18 -2
- package/src/App/hooks/useCrossHairAPI.js +5 -5
- package/src/App/hooks/useCrossHairAPI.test.js +5 -5
- package/src/App/hooks/useHintsAPI.js +5 -5
- package/src/App/hooks/useSpatialListFocus.js +296 -0
- package/src/App/hooks/{useFeatureFocus.test.js → useSpatialListFocus.test.js} +318 -163
- package/src/App/hooks/useSpatialListItems.js +51 -0
- package/src/App/hooks/useSpatialListItems.test.js +217 -0
- package/src/App/initialiseApp.js +6 -3
- package/src/App/initialiseApp.test.js +11 -0
- package/src/App/registry/spatialListRegistry.js +104 -0
- package/src/App/registry/spatialListRegistry.test.js +218 -0
- package/src/App/store/AppProvider.jsx +3 -2
- package/src/config/appConfig.js +14 -14
- package/src/config/appConfig.test.js +19 -19
- package/src/config/defaults.js +2 -2
- package/src/config/events.js +8 -8
- package/src/scss/main.scss +2 -2
- package/src/test-utils.js +8 -0
- package/src/types.js +11 -9
- package/src/utils/findNearestItemInDirection.js +29 -0
- package/src/utils/findNearestItemInDirection.test.js +67 -0
- package/src/utils/globalAltShortcuts.js +12 -0
- package/src/utils/globalAltShortcuts.test.js +27 -0
- package/src/utils/spatialNavigate.js +49 -0
- package/src/utils/spatialNavigate.test.js +42 -0
- package/src/App/components/Viewport/Features.jsx +0 -49
- package/src/App/hooks/useFeatureFocus.js +0 -257
- package/src/App/hooks/useFeatureItems.js +0 -39
- package/src/App/hooks/useFeatureItems.test.js +0 -155
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { renderHook, act } from '@testing-library/react'
|
|
2
|
+
import { useSpatialList } from './useSpatialList.js'
|
|
3
|
+
import { createSpatialListRegistry } from '../../../../src/App/registry/spatialListRegistry.js'
|
|
4
|
+
import { ADAPTER_EVENTS } from '../adapterEvents.js'
|
|
5
|
+
|
|
6
|
+
const SET_FEATURES = 'map:setspatiallist'
|
|
7
|
+
const SET_ACTIVE = 'map:setactiveitem'
|
|
8
|
+
const CONFIRM = 'map:selectitem'
|
|
9
|
+
const MOVE_END = 'map:moveend'
|
|
10
|
+
|
|
11
|
+
const vertexItem = (overrides) => expect.objectContaining({ isMidpoint: false, ...overrides })
|
|
12
|
+
const midpointItem = (overrides) => expect.objectContaining({ isMidpoint: true, ...overrides })
|
|
13
|
+
|
|
14
|
+
const makeEventBus = () => {
|
|
15
|
+
const listeners = {}
|
|
16
|
+
return {
|
|
17
|
+
on: jest.fn((eventName, fn) => { listeners[eventName] = fn }),
|
|
18
|
+
off: jest.fn(),
|
|
19
|
+
emit: jest.fn((eventName, payload) => listeners[eventName]?.(payload))
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// A minimal stand-in for the adapter surface useSpatialList.js actually calls
|
|
24
|
+
// (getVertexItems/selectVertex/insertVertexAtMidpoint), plus its own on/off/UPDATE bus.
|
|
25
|
+
const makeDrawAdapter = ({ vertices = [], midpoints = [] } = {}) => {
|
|
26
|
+
const listeners = {}
|
|
27
|
+
return {
|
|
28
|
+
getVertexItems: jest.fn(() => ({ vertices, midpoints })),
|
|
29
|
+
selectVertex: jest.fn(),
|
|
30
|
+
insertVertexAtMidpoint: jest.fn(),
|
|
31
|
+
on: jest.fn((eventName, fn) => { listeners[eventName] = fn }),
|
|
32
|
+
off: jest.fn(),
|
|
33
|
+
fireUpdate: () => listeners[ADAPTER_EVENTS.UPDATE]?.()
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const makeMapProvider = (draw) => ({
|
|
38
|
+
draw,
|
|
39
|
+
mapToScreen: jest.fn(() => ({ x: 10, y: 20 }))
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
const makeViewportRef = () => ({ current: { focus: jest.fn() } })
|
|
43
|
+
|
|
44
|
+
const setup = ({ mode = 'edit_vertex', draw, eventBus, mapSize = 'small', registry, viewportRef, announce } = {}) => {
|
|
45
|
+
const eb = eventBus ?? makeEventBus()
|
|
46
|
+
const adapter = draw ?? makeDrawAdapter()
|
|
47
|
+
const mp = makeMapProvider(adapter)
|
|
48
|
+
const vpRef = viewportRef ?? makeViewportRef()
|
|
49
|
+
const announceSpy = announce ?? jest.fn()
|
|
50
|
+
// A real registry, not a mock — spatialListRegistry.test.js already covers its own
|
|
51
|
+
// aggregation/exclusive-claim behaviour generically; using the real thing here proves this
|
|
52
|
+
// hook actually drives it correctly, same convention as interact's own useSpatialList.test.js.
|
|
53
|
+
const spatialListRegistry = registry ?? createSpatialListRegistry({ eventBus: eb })
|
|
54
|
+
const { result, unmount, rerender } = renderHook(
|
|
55
|
+
({ mode }) => useSpatialList({
|
|
56
|
+
mapState: { mapSize },
|
|
57
|
+
pluginState: { mode },
|
|
58
|
+
services: { eventBus: eb, announce: announceSpy },
|
|
59
|
+
mapProvider: mp,
|
|
60
|
+
spatialListRegistry,
|
|
61
|
+
viewportRef: vpRef
|
|
62
|
+
}),
|
|
63
|
+
{ initialProps: { mode } }
|
|
64
|
+
)
|
|
65
|
+
return { eb, mp, adapter, result, unmount, rerender, spatialListRegistry, viewportRef: vpRef, announce: announceSpy }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ─── useSpatialList — lifecycle ──────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
describe('useSpatialList — lifecycle', () => {
|
|
71
|
+
it('registers a "draw" item provider with spatialListRegistry on mount', () => {
|
|
72
|
+
const eb = makeEventBus()
|
|
73
|
+
const spatialListRegistry = createSpatialListRegistry({ eventBus: eb })
|
|
74
|
+
const registerSpy = jest.spyOn(spatialListRegistry, 'registerItemProvider')
|
|
75
|
+
const { unmount } = setup({ eventBus: eb, registry: spatialListRegistry })
|
|
76
|
+
expect(registerSpy).toHaveBeenCalledWith('draw', { getItems: expect.any(Function), exclusive: true })
|
|
77
|
+
unmount()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('unregisters the "draw" provider on unmount', () => {
|
|
81
|
+
const eb = makeEventBus()
|
|
82
|
+
const spatialListRegistry = createSpatialListRegistry({ eventBus: eb })
|
|
83
|
+
const unregisterSpy = jest.spyOn(spatialListRegistry, 'unregisterItemProvider')
|
|
84
|
+
const { unmount } = setup({ eventBus: eb, registry: spatialListRegistry })
|
|
85
|
+
unmount()
|
|
86
|
+
expect(unregisterSpy).toHaveBeenCalledWith('draw')
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('subscribes to the adapter\'s UPDATE event while edit_vertex is active', () => {
|
|
90
|
+
const { adapter, unmount } = setup({ mode: 'edit_vertex' })
|
|
91
|
+
expect(adapter.on).toHaveBeenCalledWith(ADAPTER_EVENTS.UPDATE, expect.any(Function))
|
|
92
|
+
unmount()
|
|
93
|
+
expect(adapter.off).toHaveBeenCalledWith(ADAPTER_EVENTS.UPDATE, expect.any(Function))
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('is safe when mapProvider.draw does not exist yet', () => {
|
|
97
|
+
const eb = makeEventBus()
|
|
98
|
+
const mp = { draw: null, mapToScreen: jest.fn() }
|
|
99
|
+
expect(() => renderHook(() => useSpatialList({
|
|
100
|
+
mapState: { mapSize: 'small' },
|
|
101
|
+
pluginState: { mode: 'edit_vertex' },
|
|
102
|
+
services: { eventBus: eb },
|
|
103
|
+
mapProvider: mp,
|
|
104
|
+
spatialListRegistry: createSpatialListRegistry({ eventBus: eb })
|
|
105
|
+
}))).not.toThrow()
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// ─── useSpatialList — item building ──────────────────────────────────────
|
|
110
|
+
|
|
111
|
+
describe('useSpatialList — item building', () => {
|
|
112
|
+
it('emits no items and label "Shape points" is never surfaced (no claim) outside edit_vertex', () => {
|
|
113
|
+
const eb = makeEventBus()
|
|
114
|
+
setup({ eventBus: eb, mode: 'draw_polygon' })
|
|
115
|
+
// Not the exclusive claimant, so its own empty items don't even reach the emit.
|
|
116
|
+
expect(eb.emit).not.toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({ label: 'Shape points' }))
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it('builds vertex items — id, "Point N" label, and screen position — on entering edit_vertex', () => {
|
|
120
|
+
const eb = makeEventBus()
|
|
121
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [] })
|
|
122
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
123
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, {
|
|
124
|
+
items: [
|
|
125
|
+
vertexItem({ id: '0', label: 'Point 1', x: 10, y: 20 }),
|
|
126
|
+
vertexItem({ id: '1', label: 'Point 2', x: 10, y: 20 })
|
|
127
|
+
],
|
|
128
|
+
multiselectable: false,
|
|
129
|
+
label: 'Shape points',
|
|
130
|
+
focusable: false
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('interleaves each midpoint after its vertex, with a flat id continuing the vertex index space', () => {
|
|
135
|
+
const eb = makeEventBus()
|
|
136
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1], [2, 2]], midpoints: [[0.5, 0.5], [1.5, 1.5], [1, 1]] })
|
|
137
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
138
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, {
|
|
139
|
+
items: [
|
|
140
|
+
vertexItem({ id: '0' }),
|
|
141
|
+
midpointItem({ id: '3', label: 'Insert 1-2' }),
|
|
142
|
+
vertexItem({ id: '1' }),
|
|
143
|
+
midpointItem({ id: '4', label: 'Insert 2-3' }),
|
|
144
|
+
vertexItem({ id: '2' }),
|
|
145
|
+
midpointItem({ id: '5', label: 'Insert 3-1' })
|
|
146
|
+
],
|
|
147
|
+
multiselectable: false,
|
|
148
|
+
label: 'Shape points',
|
|
149
|
+
focusable: false
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
it('declares focusable: false — no item is ever a real Tab stop for this list', () => {
|
|
154
|
+
const eb = makeEventBus()
|
|
155
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
156
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
157
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({ focusable: false }))
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
it('rebuilds on the adapter\'s UPDATE event (e.g. a vertex was inserted/moved)', () => {
|
|
161
|
+
const eb = makeEventBus()
|
|
162
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
163
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
164
|
+
eb.emit.mockClear()
|
|
165
|
+
|
|
166
|
+
draw.getVertexItems.mockReturnValue({ vertices: [[0, 0], [1, 1]], midpoints: [] })
|
|
167
|
+
act(() => draw.fireUpdate())
|
|
168
|
+
|
|
169
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({
|
|
170
|
+
items: [vertexItem({ id: '0' }), vertexItem({ id: '1' })]
|
|
171
|
+
}))
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
it('rebuilds on MAP_MOVE_END (pan/zoom) — the underlying coordinate is unchanged but its screen position moves', () => {
|
|
175
|
+
const eb = makeEventBus()
|
|
176
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
177
|
+
const { mp } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
178
|
+
eb.emit.mockClear()
|
|
179
|
+
|
|
180
|
+
mp.mapToScreen.mockReturnValue({ x: 99, y: 88 })
|
|
181
|
+
act(() => eb.emit(MOVE_END))
|
|
182
|
+
|
|
183
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({
|
|
184
|
+
items: [vertexItem({ id: '0', x: 99, y: 88 })]
|
|
185
|
+
}))
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('reports no items when leaving edit_vertex for another mode', () => {
|
|
189
|
+
const eb = makeEventBus()
|
|
190
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
191
|
+
const { rerender } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
192
|
+
eb.emit.mockClear()
|
|
193
|
+
|
|
194
|
+
rerender({ mode: 'disabled' })
|
|
195
|
+
|
|
196
|
+
// Once draw releases its exclusive claim (no other provider registered here), the
|
|
197
|
+
// registry has nothing left to emit for — items are simply gone, not merely empty.
|
|
198
|
+
expect(eb.emit).not.toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({ label: 'Shape points' }))
|
|
199
|
+
})
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
// ─── useSpatialList — exclusive claim ────────────────────────────────────
|
|
203
|
+
|
|
204
|
+
describe('useSpatialList — exclusive claim', () => {
|
|
205
|
+
it('claims exclusive ownership on entering edit_vertex, excluding an additive provider\'s own items', () => {
|
|
206
|
+
const eb = makeEventBus()
|
|
207
|
+
const registry = createSpatialListRegistry({ eventBus: eb })
|
|
208
|
+
registry.registerItemProvider('interact', { getItems: () => ({ items: [{ id: 'feature-1' }], label: 'Map features' }) })
|
|
209
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
210
|
+
|
|
211
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex', registry })
|
|
212
|
+
|
|
213
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, expect.objectContaining({ label: 'Shape points' }))
|
|
214
|
+
const lastEmit = eb.emit.mock.calls.at(-1)[1]
|
|
215
|
+
expect(lastEmit.items.some(i => i.id === 'feature-1')).toBe(false)
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
it('releases the claim on leaving edit_vertex, reverting to the additive provider\'s items', () => {
|
|
219
|
+
const eb = makeEventBus()
|
|
220
|
+
const registry = createSpatialListRegistry({ eventBus: eb })
|
|
221
|
+
registry.registerItemProvider('interact', { getItems: () => ({ items: [{ id: 'feature-1' }], label: 'Map features' }) })
|
|
222
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
223
|
+
|
|
224
|
+
const { rerender } = setup({ eventBus: eb, draw, mode: 'edit_vertex', registry })
|
|
225
|
+
eb.emit.mockClear()
|
|
226
|
+
rerender({ mode: 'disabled' })
|
|
227
|
+
|
|
228
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, { items: [{ id: 'feature-1' }], multiselectable: false, label: 'Map features' })
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
it('releases the claim on unmount too', () => {
|
|
232
|
+
const eb = makeEventBus()
|
|
233
|
+
const registry = createSpatialListRegistry({ eventBus: eb })
|
|
234
|
+
registry.registerItemProvider('interact', { getItems: () => ({ items: [{ id: 'feature-1' }], label: 'Map features' }) })
|
|
235
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
236
|
+
|
|
237
|
+
const { unmount } = setup({ eventBus: eb, draw, mode: 'edit_vertex', registry })
|
|
238
|
+
eb.emit.mockClear()
|
|
239
|
+
unmount()
|
|
240
|
+
|
|
241
|
+
expect(eb.emit).toHaveBeenCalledWith(SET_FEATURES, { items: [{ id: 'feature-1' }], multiselectable: false, label: 'Map features' })
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
// ─── useSpatialList — active item preview (MAP_SET_ACTIVE_ITEM) ─────────
|
|
246
|
+
|
|
247
|
+
describe('useSpatialList — active item preview', () => {
|
|
248
|
+
it('previews a real vertex via selectVertex, by numeric index', () => {
|
|
249
|
+
const eb = makeEventBus()
|
|
250
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [] })
|
|
251
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
252
|
+
act(() => eb.emit(SET_ACTIVE, { id: '1' }))
|
|
253
|
+
expect(draw.selectVertex).toHaveBeenCalledWith(1)
|
|
254
|
+
})
|
|
255
|
+
|
|
256
|
+
it('previews a midpoint via selectVertex too — preview alone never inserts', () => {
|
|
257
|
+
const eb = makeEventBus()
|
|
258
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [[0.5, 0.5]] })
|
|
259
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
260
|
+
act(() => eb.emit(SET_ACTIVE, { id: '2' }))
|
|
261
|
+
expect(draw.selectVertex).toHaveBeenCalledWith(2)
|
|
262
|
+
expect(draw.insertVertexAtMidpoint).not.toHaveBeenCalled()
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
it('a null id (blur) does not call selectVertex — the selection must survive losing listbox focus', () => {
|
|
266
|
+
const eb = makeEventBus()
|
|
267
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
268
|
+
setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
269
|
+
act(() => eb.emit(SET_ACTIVE, { id: null }))
|
|
270
|
+
expect(draw.selectVertex).not.toHaveBeenCalled()
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
it('does nothing outside edit_vertex, even if a stale event arrives', () => {
|
|
274
|
+
const eb = makeEventBus()
|
|
275
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [] })
|
|
276
|
+
setup({ eventBus: eb, draw, mode: 'draw_polygon' })
|
|
277
|
+
act(() => eb.emit(SET_ACTIVE, { id: '0' }))
|
|
278
|
+
expect(draw.selectVertex).not.toHaveBeenCalled()
|
|
279
|
+
})
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
// ─── useSpatialList — confirm (MAP_SELECT_ITEM) ──────────────────────────
|
|
283
|
+
|
|
284
|
+
describe('useSpatialList — confirm', () => {
|
|
285
|
+
it('inserts a vertex when the active item is a midpoint, announces it, and hands focus back to the viewport', () => {
|
|
286
|
+
const eb = makeEventBus()
|
|
287
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [[0.5, 0.5]] })
|
|
288
|
+
const { viewportRef, announce } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
289
|
+
act(() => eb.emit(SET_ACTIVE, { id: '2' })) // the midpoint
|
|
290
|
+
act(() => eb.emit(CONFIRM))
|
|
291
|
+
expect(draw.insertVertexAtMidpoint).toHaveBeenCalledWith(2)
|
|
292
|
+
expect(announce).toHaveBeenCalledWith('New point inserted', 'action')
|
|
293
|
+
expect(viewportRef.current.focus).toHaveBeenCalled()
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
it('does not insert anything for a real vertex — already the live selection — but still announces it and hands focus back', () => {
|
|
297
|
+
const eb = makeEventBus()
|
|
298
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [[0.5, 0.5]] })
|
|
299
|
+
const { viewportRef, announce } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
300
|
+
act(() => eb.emit(SET_ACTIVE, { id: '0' }))
|
|
301
|
+
act(() => eb.emit(CONFIRM))
|
|
302
|
+
expect(draw.insertVertexAtMidpoint).not.toHaveBeenCalled()
|
|
303
|
+
expect(announce).toHaveBeenCalledWith('Point 1 selected', 'action')
|
|
304
|
+
expect(viewportRef.current.focus).toHaveBeenCalled()
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
it('is a no-op — no insert, no announce, no refocus — when nothing is active yet', () => {
|
|
308
|
+
const eb = makeEventBus()
|
|
309
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [[0.5, 0.5]] })
|
|
310
|
+
const { viewportRef, announce } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
311
|
+
act(() => eb.emit(CONFIRM))
|
|
312
|
+
expect(draw.insertVertexAtMidpoint).not.toHaveBeenCalled()
|
|
313
|
+
expect(announce).not.toHaveBeenCalled()
|
|
314
|
+
expect(viewportRef.current.focus).not.toHaveBeenCalled()
|
|
315
|
+
})
|
|
316
|
+
|
|
317
|
+
it('is a no-op when the active id no longer matches any built item (e.g. the geometry changed underneath it)', () => {
|
|
318
|
+
const eb = makeEventBus()
|
|
319
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0], [1, 1]], midpoints: [] })
|
|
320
|
+
const { viewportRef, announce } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
321
|
+
act(() => eb.emit(SET_ACTIVE, { id: '99' })) // never a built item
|
|
322
|
+
act(() => eb.emit(CONFIRM))
|
|
323
|
+
expect(draw.insertVertexAtMidpoint).not.toHaveBeenCalled()
|
|
324
|
+
expect(announce).not.toHaveBeenCalled()
|
|
325
|
+
expect(viewportRef.current.focus).not.toHaveBeenCalled()
|
|
326
|
+
})
|
|
327
|
+
|
|
328
|
+
it('is a no-op outside edit_vertex, even with a stale active id', () => {
|
|
329
|
+
const eb = makeEventBus()
|
|
330
|
+
const draw = makeDrawAdapter({ vertices: [[0, 0]], midpoints: [[0.5, 0.5]] })
|
|
331
|
+
const { rerender, viewportRef, announce } = setup({ eventBus: eb, draw, mode: 'edit_vertex' })
|
|
332
|
+
act(() => eb.emit(SET_ACTIVE, { id: '1' })) // the midpoint, while still in edit_vertex
|
|
333
|
+
rerender({ mode: 'disabled' })
|
|
334
|
+
act(() => eb.emit(CONFIRM))
|
|
335
|
+
expect(draw.insertVertexAtMidpoint).not.toHaveBeenCalled()
|
|
336
|
+
expect(announce).not.toHaveBeenCalled()
|
|
337
|
+
expect(viewportRef.current.focus).not.toHaveBeenCalled()
|
|
338
|
+
})
|
|
339
|
+
})
|
|
@@ -202,35 +202,6 @@ const isValidClick = (coords) => {
|
|
|
202
202
|
return coords[0].length <= 1 || isNewCoordinate(coords)
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
const spatialNavigate = (start, pixels, direction) => {
|
|
206
|
-
const quadrant = pixels.filter((p) => {
|
|
207
|
-
const offsetX = Math.abs(p[0] - start[0])
|
|
208
|
-
const offsetY = Math.abs(p[1] - start[1])
|
|
209
|
-
let isQuadrant = false
|
|
210
|
-
if (direction === 'ArrowUp') {
|
|
211
|
-
isQuadrant = p[1] <= start[1] && offsetY >= offsetX
|
|
212
|
-
} else if (direction === 'ArrowDown') {
|
|
213
|
-
isQuadrant = p[1] > start[1] && offsetY >= offsetX
|
|
214
|
-
} else if (direction === 'ArrowLeft') {
|
|
215
|
-
isQuadrant = p[0] <= start[0] && offsetY < offsetX
|
|
216
|
-
} else if (direction === 'ArrowRight') {
|
|
217
|
-
isQuadrant = p[0] > start[0] && offsetY < offsetX
|
|
218
|
-
} else {
|
|
219
|
-
isQuadrant = true
|
|
220
|
-
}
|
|
221
|
-
return isQuadrant && (JSON.stringify(p) !== JSON.stringify(start))
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
if (!quadrant.length) {
|
|
225
|
-
quadrant.push(start)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const pythagorean = (a, b) => Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2))
|
|
229
|
-
const distances = quadrant.map(p => pythagorean(Math.abs(start[0] - p[0]), Math.abs(start[1] - p[1])))
|
|
230
|
-
const closest = quadrant[distances.indexOf(Math.min(...distances))]
|
|
231
|
-
return pixels.findIndex(i => JSON.stringify(i) === JSON.stringify(closest))
|
|
232
|
-
}
|
|
233
|
-
|
|
234
205
|
export {
|
|
235
206
|
toTurfGeometry,
|
|
236
207
|
splitPolygon,
|
|
@@ -238,6 +209,5 @@ export {
|
|
|
238
209
|
extendLine,
|
|
239
210
|
isNewCoordinate,
|
|
240
211
|
isValidClick,
|
|
241
|
-
isValidLineClick
|
|
242
|
-
spatialNavigate
|
|
212
|
+
isValidLineClick
|
|
243
213
|
}
|
|
@@ -7,8 +7,7 @@ import {
|
|
|
7
7
|
extendLine,
|
|
8
8
|
isNewCoordinate,
|
|
9
9
|
isValidClick,
|
|
10
|
-
isValidLineClick
|
|
11
|
-
spatialNavigate
|
|
10
|
+
isValidLineClick
|
|
12
11
|
} from './spatial.js'
|
|
13
12
|
|
|
14
13
|
jest.mock('polygon-splitter', () => jest.fn())
|
|
@@ -219,25 +218,3 @@ describe('isValidLineClick', () => {
|
|
|
219
218
|
expect(isValidLineClick([[0, 0], [0, 0]])).toBe(false)
|
|
220
219
|
})
|
|
221
220
|
})
|
|
222
|
-
|
|
223
|
-
describe('spatialNavigate', () => {
|
|
224
|
-
const start = [0, 0]
|
|
225
|
-
const pixels = [[0, 0], [0, -10], [0, 10], [-10, 0], [10, 0]]
|
|
226
|
-
|
|
227
|
-
test.each([
|
|
228
|
-
['ArrowUp', 1],
|
|
229
|
-
['ArrowDown', 2],
|
|
230
|
-
['ArrowLeft', 3],
|
|
231
|
-
['ArrowRight', 4]
|
|
232
|
-
])('finds the nearest pixel for %s', (direction, expectedIndex) => {
|
|
233
|
-
expect(spatialNavigate(start, pixels, direction)).toBe(expectedIndex)
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
test('considers all pixels for an unrecognised direction', () => {
|
|
237
|
-
expect(spatialNavigate(start, pixels, 'Tab')).toBe(1)
|
|
238
|
-
})
|
|
239
|
-
|
|
240
|
-
test('falls back to the start point when no pixel is in the quadrant', () => {
|
|
241
|
-
expect(spatialNavigate(start, [[0, 0]], 'ArrowUp')).toBe(0)
|
|
242
|
-
})
|
|
243
|
-
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@babel/runtime/helpers/defineProperty";import"@babel/runtime/helpers/objectWithoutProperties";import{useContext as t,createContext as r,useState as n,useCallback as o,useRef as i,useEffect as a,useMemo as l}from"preact/compat";import{jsxs as s,jsx as c}from"preact/jsx-runtime";import"@babel/runtime/helpers/asyncToGenerator";var u={APP_ADD_MARKER:"app:addmarker",APP_UPDATE_MARKER:"app:updatemarker",APP_REMOVE_MARKER:"app:removemarker",APP_SET_MODE:"app:setmode",APP_REVERT_MODE:"app:revertmode",APP_ADD_BUTTON:"app:addbutton",APP_TOGGLE_BUTTON_STATE:"app:togglebuttonstate",APP_ADD_PANEL:"app:addpanel",APP_REMOVE_PANEL:"app:removepanel",APP_SHOW_PANEL:"app:showpanel",APP_HIDE_PANEL:"app:hidepanel",APP_ADD_CONTROL:"app:addcontrol",APP_SHOW_HINT:"app:showhint",APP_DISMISS_HINT:"app:dismisshint",APP_READY:"app:ready",APP_OPENED:"app:opened",APP_CLOSED:"app:closed",APP_FULLSCREEN_CHANGE:"app:fullscreenchange",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",MAP_SET_FEATURES:"map:setfeatures",MAP_SET_FEATURES_SUPPRESSED:"map:setfeaturessuppressed",MAP_SET_ACTIVE_FEATURE:"map:setactivefeature",MAP_SELECT_FEATURE:"map:selectfeature",MAP_SET_PIXEL_RATIO:"map:setpixelratio",MAP_FIT_TO_BOUNDS:"map:fittobounds",MAP_SET_VIEW:"map:setview",MAP_INIT_MAP_STYLES:"map:initmapstyles",MAP_STYLE_CHANGE:"map:stylechange",MAP_LOADED:"map:loaded",MAP_READY:"map:ready",MAP_SIZE_CHANGE:"map:sizechange",MAP_FIRST_IDLE:"map:firstidle",MAP_MOVE_START:"map:movestart",MAP_MOVE:"map:move",MAP_MOVE_END:"map:moveend",MAP_STATE_UPDATED:"map:stateupdated",MAP_DATA_CHANGE:"map:datachange",MAP_RENDER:"map:render",MAP_CLICK:"map:click",MAP_DESTROY:"map:destroy"};function p(e,t,r={}){const n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=t||{},n.geometry=e,n}function d(e,t,r={}){if(!e)throw new Error("coordinates is required");if(!Array.isArray(e))throw new Error("coordinates must be an Array");if(e.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!g(e[0])||!g(e[1]))throw new Error("coordinates must contain numbers");return p({type:"Point",coordinates:e},t,r)}function f(e,t,r={}){if(e.length<2)throw new Error("coordinates must be an array of two or more positions");return p({type:"LineString",coordinates:e},t,r)}function y(e,t={}){const r={type:"FeatureCollection"};return t.id&&(r.id=t.id),t.bbox&&(r.bbox=t.bbox),r.features=e,r}function v(e,t,r={}){return p({type:"MultiLineString",coordinates:e},t,r)}function g(e){return!isNaN(e)&&null!==e&&!Array.isArray(e)}const m=11102230246251565e-32,E=134217729,h=(3+8*m)*m;function S(e,t,r,n,o){let i,a,l,s,c=t[0],u=n[0],p=0,d=0;u>c==u>-c?(i=c,c=t[++p]):(i=u,u=n[++d]);let f=0;if(p<e&&d<r)for(u>c==u>-c?(a=c+i,l=i-(a-c),c=t[++p]):(a=u+i,l=i-(a-u),u=n[++d]),i=a,0!==l&&(o[f++]=l);p<e&&d<r;)u>c==u>-c?(a=i+c,s=a-i,l=i-(a-s)+(c-s),c=t[++p]):(a=i+u,s=a-i,l=i-(a-s)+(u-s),u=n[++d]),i=a,0!==l&&(o[f++]=l);for(;p<e;)a=i+c,s=a-i,l=i-(a-s)+(c-s),c=t[++p],i=a,0!==l&&(o[f++]=l);for(;d<r;)a=i+u,s=a-i,l=i-(a-s)+(u-s),u=n[++d],i=a,0!==l&&(o[f++]=l);return 0===i&&0!==f||(o[f++]=i),f}function P(e){return new Float64Array(e)}const b=P(4),A=P(8),_=P(12),O=P(16),w=P(4);function M(e,t,r,n,o,i){const a=(t-i)*(r-o),l=(e-o)*(n-i),s=a-l,c=Math.abs(a+l);return Math.abs(s)>=33306690738754716e-32*c?s:-function(e,t,r,n,o,i,a){let l,s,c,u,p,d,f,y,v,g,m,P,M,k,T,I,C,L;const F=e-o,D=r-o,R=t-i,j=n-i;k=F*j,d=E*F,f=d-(d-F),y=F-f,d=E*j,v=d-(d-j),g=j-v,T=y*g-(k-f*v-y*v-f*g),I=R*D,d=E*R,f=d-(d-R),y=R-f,d=E*D,v=d-(d-D),g=D-v,C=y*g-(I-f*v-y*v-f*g),m=T-C,p=T-m,b[0]=T-(m+p)+(p-C),P=k+m,p=P-k,M=k-(P-p)+(m-p),m=M-I,p=M-m,b[1]=M-(m+p)+(p-I),L=P+m,p=L-P,b[2]=P-(L-p)+(m-p),b[3]=L;let x=function(e,t){let r=t[0];for(let n=1;n<e;n++)r+=t[n];return r}(4,b),N=22204460492503146e-32*a;if(x>=N||-x>=N)return x;if(p=e-F,l=e-(F+p)+(p-o),p=r-D,c=r-(D+p)+(p-o),p=t-R,s=t-(R+p)+(p-i),p=n-j,u=n-(j+p)+(p-i),0===l&&0===s&&0===c&&0===u)return x;if(N=11093356479670487e-47*a+h*Math.abs(x),x+=F*u+j*l-(R*c+D*s),x>=N||-x>=N)return x;k=l*j,d=E*l,f=d-(d-l),y=l-f,d=E*j,v=d-(d-j),g=j-v,T=y*g-(k-f*v-y*v-f*g),I=s*D,d=E*s,f=d-(d-s),y=s-f,d=E*D,v=d-(d-D),g=D-v,C=y*g-(I-f*v-y*v-f*g),m=T-C,p=T-m,w[0]=T-(m+p)+(p-C),P=k+m,p=P-k,M=k-(P-p)+(m-p),m=M-I,p=M-m,w[1]=M-(m+p)+(p-I),L=P+m,p=L-P,w[2]=P-(L-p)+(m-p),w[3]=L;const B=S(4,b,4,w,A);k=F*u,d=E*F,f=d-(d-F),y=F-f,d=E*u,v=d-(d-u),g=u-v,T=y*g-(k-f*v-y*v-f*g),I=R*c,d=E*R,f=d-(d-R),y=R-f,d=E*c,v=d-(d-c),g=c-v,C=y*g-(I-f*v-y*v-f*g),m=T-C,p=T-m,w[0]=T-(m+p)+(p-C),P=k+m,p=P-k,M=k-(P-p)+(m-p),m=M-I,p=M-m,w[1]=M-(m+p)+(p-I),L=P+m,p=L-P,w[2]=P-(L-p)+(m-p),w[3]=L;const G=S(B,A,4,w,_);k=l*u,d=E*l,f=d-(d-l),y=l-f,d=E*u,v=d-(d-u),g=u-v,T=y*g-(k-f*v-y*v-f*g),I=s*c,d=E*s,f=d-(d-s),y=s-f,d=E*c,v=d-(d-c),g=c-v,C=y*g-(I-f*v-y*v-f*g),m=T-C,p=T-m,w[0]=T-(m+p)+(p-C),P=k+m,p=P-k,M=k-(P-p)+(m-p),m=M-I,p=M-m,w[1]=M-(m+p)+(p-I),L=P+m,p=L-P,w[2]=P-(L-p)+(m-p),w[3]=L;const U=S(G,_,4,w,O);return O[U-1]}(e,t,r,n,o,i,c)}function k(e,t){var r,n,o,i,a,l,s,c,u,p=0,d=e[0],f=e[1],y=t.length;for(r=0;r<y;r++){n=0;var v=t[r],g=v.length-1;if((c=v[0])[0]!==v[g][0]&&c[1]!==v[g][1])throw new Error("First and last coordinates in a ring must be the same");for(i=c[0]-d,a=c[1]-f;n<g;n++){if(l=(u=v[n+1])[0]-d,s=u[1]-f,0===a&&0===s){if(l<=0&&i>=0||i<=0&&l>=0)return 0}else if(s>=0&&a<=0||s<=0&&a>=0){if(0===(o=M(i,l,a,s,0,0)))return 0;(o>0&&s>0&&a<=0||o<0&&s<=0&&a>0)&&p++}c=u,a=s,i=l}}return p%2!=0}function T(e){return"Feature"===e.type?e.geometry:e}function I(e,t,r={}){if(!e)throw new Error("point is required");if(!t)throw new Error("polygon is required");const n=function(e){if(!e)throw new Error("coord is required");if(!Array.isArray(e)){if("Feature"===e.type&&null!==e.geometry&&"Point"===e.geometry.type)return[...e.geometry.coordinates];if("Point"===e.type)return[...e.coordinates]}if(Array.isArray(e)&&e.length>=2&&!Array.isArray(e[0])&&!Array.isArray(e[1]))return[...e];throw new Error("coord must be GeoJSON Point or an Array of numbers")}(e),o=T(t),i=o.type,a=t.bbox;let l=o.coordinates;if(a&&!1===function(e,t){return t[0]<=e[0]&&t[1]<=e[1]&&t[2]>=e[0]&&t[3]>=e[1]}(n,a))return!1;"Polygon"===i&&(l=[l]);let s=!1;for(var c=0;c<l.length;++c){const e=k(n,l[c]);if(0===e)return!r.ignoreBoundary;e&&(s=!0)}return s}class C{constructor(e=[],t=L){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const e=this.data[0],t=this.data.pop();return this.length--,this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){const{data:t,compare:r}=this,n=t[e];for(;e>0;){const o=e-1>>1,i=t[o];if(r(n,i)>=0)break;t[e]=i,e=o}t[e]=n}_down(e){const{data:t,compare:r}=this,n=this.length>>1,o=t[e];for(;e<n;){let n=1+(e<<1),i=t[n];const a=n+1;if(a<this.length&&r(t[a],i)<0&&(n=a,i=t[a]),r(i,o)>=0)break;t[e]=i,e=n}t[e]=o}}function L(e,t){return e<t?-1:e>t?1:0}function F(e,t){return e.p.x>t.p.x?1:e.p.x<t.p.x?-1:e.p.y!==t.p.y?e.p.y>t.p.y?1:-1:1}function D(e,t){return e.rightSweepEvent.p.x>t.rightSweepEvent.p.x?1:e.rightSweepEvent.p.x<t.rightSweepEvent.p.x?-1:e.rightSweepEvent.p.y!==t.rightSweepEvent.p.y?e.rightSweepEvent.p.y<t.rightSweepEvent.p.y?1:-1:1}class R{constructor(e,t,r,n){this.p={x:e[0],y:e[1]},this.featureId=t,this.ringId=r,this.eventId=n,this.otherEvent=null,this.isLeftEndpoint=null}isSamePoint(e){return this.p.x===e.p.x&&this.p.y===e.p.y}}let j=0,x=0,N=0;function B(e,t){const r="Feature"===e.type?e.geometry:e;let n=r.coordinates;"Polygon"!==r.type&&"MultiLineString"!==r.type||(n=[n]),"LineString"===r.type&&(n=[[n]]);for(let e=0;e<n.length;e++)for(let r=0;r<n[e].length;r++){let o=n[e][r][0],i=null;x+=1;for(let a=0;a<n[e][r].length-1;a++){i=n[e][r][a+1];const l=new R(o,j,x,N),s=new R(i,j,x,N+1);l.otherEvent=s,s.otherEvent=l,F(l,s)>0?(s.isLeftEndpoint=!0,l.isLeftEndpoint=!1):(l.isLeftEndpoint=!0,s.isLeftEndpoint=!1),t.push(l),t.push(s),o=i,N+=1}}j+=1}class G{constructor(e){this.leftSweepEvent=e,this.rightSweepEvent=e.otherEvent}}function U(e,t){if(null===e||null===t)return!1;if(e.leftSweepEvent.ringId===t.leftSweepEvent.ringId&&(e.rightSweepEvent.isSamePoint(t.leftSweepEvent)||e.rightSweepEvent.isSamePoint(t.leftSweepEvent)||e.rightSweepEvent.isSamePoint(t.rightSweepEvent)||e.leftSweepEvent.isSamePoint(t.leftSweepEvent)||e.leftSweepEvent.isSamePoint(t.rightSweepEvent)))return!1;const r=e.leftSweepEvent.p.x,n=e.leftSweepEvent.p.y,o=e.rightSweepEvent.p.x,i=e.rightSweepEvent.p.y,a=t.leftSweepEvent.p.x,l=t.leftSweepEvent.p.y,s=t.rightSweepEvent.p.x,c=t.rightSweepEvent.p.y,u=(c-l)*(o-r)-(s-a)*(i-n),p=(s-a)*(n-l)-(c-l)*(r-a),d=(o-r)*(n-l)-(i-n)*(r-a);if(0===u)return!1;const f=p/u,y=d/u;if(f>=0&&f<=1&&y>=0&&y<=1){return[r+f*(o-r),n+f*(i-n)]}return!1}var H=function(e,t){const r=new C([],F);return function(e,t){if("FeatureCollection"===e.type){const r=e.features;for(let e=0;e<r.length;e++)B(r[e],t)}else B(e,t)}(e,r),function(e,t){t=t||!1;const r=[],n=new C([],D);for(;e.length;){const o=e.pop();if(o.isLeftEndpoint){const e=new G(o);for(let i=0;i<n.data.length;i++){const a=n.data[i];if(t&&a.leftSweepEvent.featureId===o.featureId)continue;const l=U(e,a);!1!==l&&r.push(l)}n.push(e)}else!1===o.isLeftEndpoint&&n.pop()}return r}(r,t)};function K(e,t,r={}){const{removeDuplicates:n=!0,ignoreSelfIntersections:o=!0}=r;let i=[];"FeatureCollection"===e.type?i=i.concat(e.features):"Feature"===e.type?i.push(e):"LineString"!==e.type&&"Polygon"!==e.type&&"MultiLineString"!==e.type&&"MultiPolygon"!==e.type||i.push(p(e)),"FeatureCollection"===t.type?i=i.concat(t.features):"Feature"===t.type?i.push(t):"LineString"!==t.type&&"Polygon"!==t.type&&"MultiLineString"!==t.type&&"MultiPolygon"!==t.type||i.push(p(t));const a=H(y(i),o);let l=[];if(n){const e={};a.forEach(t=>{const r=t.join(",");e[r]||(e[r]=!0,l.push(t))})}else l=a;return y(l.map(e=>d(e)))}function V(e,t,r){if(null!==e)for(var n,o,i,a,l,s,c,u,p=0,d=0,f=e.type,y="FeatureCollection"===f,v="Feature"===f,g=y?e.features.length:1,m=0;m<g;m++){l=(u=!!(c=y?e.features[m].geometry:v?e.geometry:e)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var E=0;E<l;E++){var h=0,S=0;if(null!==(a=u?c.geometries[E]:c)){s=a.coordinates;var P=a.type;switch(p=0,P){case null:break;case"Point":if(!1===t(s,d,m,h,S))return!1;d++,h++;break;case"LineString":case"MultiPoint":for(n=0;n<s.length;n++){if(!1===t(s[n],d,m,h,S))return!1;d++,"MultiPoint"===P&&h++}"LineString"===P&&h++;break;case"Polygon":case"MultiLineString":for(n=0;n<s.length;n++){for(o=0;o<s[n].length-p;o++){if(!1===t(s[n][o],d,m,h,S))return!1;d++}"MultiLineString"===P&&h++,"Polygon"===P&&S++}"Polygon"===P&&h++;break;case"MultiPolygon":for(n=0;n<s.length;n++){for(S=0,o=0;o<s[n].length;o++){for(i=0;i<s[n][o].length-p;i++){if(!1===t(s[n][o][i],d,m,h,S))return!1;d++}S++}h++}break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===V(a.geometries[n],t))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function W(e,t){!function(e,t){var r,n,o,i,a,l,s,c,u,p,d=0,f="FeatureCollection"===e.type,y="Feature"===e.type,v=f?e.features.length:1;for(r=0;r<v;r++){for(l=f?e.features[r].geometry:y?e.geometry:e,c=f?e.features[r].properties:y?e.properties:{},u=f?e.features[r].bbox:y?e.bbox:void 0,p=f?e.features[r].id:y?e.id:void 0,a=(s=!!l&&"GeometryCollection"===l.type)?l.geometries.length:1,o=0;o<a;o++)if(null!==(i=s?l.geometries[o]:l))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===t(i,d,c,u,p))return!1;break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===t(i.geometries[n],d,c,u,p))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===t(null,d,c,u,p))return!1;d++}}(e,function(e,r,n,o,i){var a,l=null===e?null:e.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==t(p(e,n,{bbox:o,id:i}),r,0)&&void 0}switch(l){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var s=0;s<e.coordinates.length;s++){var c=e.coordinates[s];if(!1===t(p({type:a,coordinates:c},n),r,s))return!1}})}function z(e,t={}){const r=T(e);switch(t.properties||"Feature"!==e.type||(t.properties=e.properties),r.type){case"Polygon":return function(e,t={}){const r=T(e),n=r.coordinates,o=t.properties?t.properties:"Feature"===e.type?e.properties:{};return Y(n,o)}(r,t);case"MultiPolygon":return function(e,t={}){const r=T(e),n=r.coordinates,o=t.properties?t.properties:"Feature"===e.type?e.properties:{},i=[];return n.forEach(e=>{i.push(Y(e,o))}),y(i)}(r,t);default:throw new Error("invalid poly")}}function Y(e,t){return e.length>1?v(e,t):f(e[0],t)}function q(e,t){for(let r=0;r<e.coordinates.length-1;r++)if(Z(e.coordinates[r],e.coordinates[r+1],t.coordinates))return!0;return!1}function X(e,t,r){for(const r of t.coordinates)if(I(r,e))return!0;return K(t,z(e),{ignoreSelfIntersections:r}).features.length>0}function Z(e,t,r){const n=r[0]-e[0],o=r[1]-e[1],i=t[0]-e[0],a=t[1]-e[1];return 0===n*a-o*i&&(Math.abs(i)>=Math.abs(a)?i>0?e[0]<=r[0]&&r[0]<=t[0]:t[0]<=r[0]&&r[0]<=e[0]:a>0?e[1]<=r[1]&&r[1]<=t[1]:t[1]<=r[1]&&r[1]<=e[1])}var J=function(e,t,{ignoreSelfIntersections:r=!0}={ignoreSelfIntersections:!0}){let n=!0;return W(e,e=>{W(t,t=>{if(!1===n)return!1;n=function(e,t,r){switch(e.type){case"Point":switch(t.type){case"Point":return n=e.coordinates,o=t.coordinates,!(n[0]===o[0]&&n[1]===o[1]);case"LineString":return!q(t,e);case"Polygon":return!I(e,t)}break;case"LineString":switch(t.type){case"Point":return!q(e,t);case"LineString":return!function(e,t,r){const n=K(e,t,{ignoreSelfIntersections:r});if(n.features.length>0)return!0;return!1}(e,t,r);case"Polygon":return!X(t,e,r)}break;case"Polygon":switch(t.type){case"Point":return!I(t,e);case"LineString":return!X(e,t,r);case"Polygon":return!function(e,t,r){for(const r of e.coordinates[0])if(I(r,t))return!0;for(const r of t.coordinates[0])if(I(r,e))return!0;const n=K(z(e),z(t),{ignoreSelfIntersections:r});if(n.features.length>0)return!0;return!1}(t,e,r)}}var n,o;return!1}(e.geometry,t.geometry,r)})}),n};var Q=function(e,t={}){if(null!=e.bbox&&!0!==t.recompute)return e.bbox;const r=[1/0,1/0,-1/0,-1/0];return V(e,e=>{r[0]>e[0]&&(r[0]=e[0]),r[1]>e[1]&&(r[1]=e[1]),r[2]<e[0]&&(r[2]=e[0]),r[3]<e[1]&&(r[3]=e[1])}),r};function $(e){var t=e.geometry||e;switch(t.type){case"Polygon":return function(e,t,r={}){for(const t of e){if(t.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(t[t.length-1].length!==t[0].length)throw new Error("First and last Position are not equivalent.");for(let e=0;e<t[t.length-1].length;e++)if(t[t.length-1][e]!==t[0][e])throw new Error("First and last Position are not equivalent.")}return p({type:"Polygon",coordinates:e},t,r)}(t.coordinates);case"MultiPolygon":return function(e,t,r={}){return p({type:"MultiPolygon",coordinates:e},t,r)}(t.coordinates);case"LineString":return f(t.coordinates);case"MultiLineString":return v(t.coordinates);case"Point":return d(t.coordinates);case"MultiPoint":return function(e,t,r={}){return p({type:"MultiPoint",coordinates:e},t,r)}(t.coordinates);default:throw new Error("Unsupported geometry type: ".concat(t.type))}}function ee(e,t){return t.some(t=>!J($(t),$(e)))}function te(e){if(e.length<2)return!1;if(e.some(e=>{var t,r;return!("Polygon"===(r=null===(t=e.geometry)||void 0===t?void 0:t.type)||"MultiPolygon"===r)}))return!1;for(var t=new Set([0]),r=!0;r;){r=!1;for(var n=1;n<e.length;n++)if(!t.has(n)){var o=[...t].map(t=>e[t]);ee(e[n],o)&&(t.add(n),r=!0)}}return t.size===e.length}var re={".cold":".hot",".hot":".cold"},ne=e=>{for(var[t,r]of Object.entries(re))if(e.endsWith(t))return"".concat(e.slice(0,-t.length)).concat(r);return null},oe=e=>{var t={};for(var r of e){t[r.layerId]=r;var n=ne(r.layerId);n&&(t[n]=r)}return t},ie=(e,t,r)=>{try{return(null==e?void 0:e.getFeaturesAtPoint(t,r))||[]}catch(e){return console.warn("Feature query failed:",e),[]}},ae=e=>{var t,r=null===(t=e.geometry)||void 0===t?void 0:t.type;return"Point"===r||"MultiPoint"===r};var le=(e,t)=>{if(!e)return null;if("string"==typeof e)return e.trim();if("object"==typeof e){if(t&&e[t])return e[t];var r=Object.values(e)[0];return null!=r?r:null}return null},se=e=>!!e.label&&(!e.symbol&&!e.symbolSvgContent&&(null===e.symbol||null===e.symbolSvgContent)),ce={light:{haloColor:"#ffffff",selectedColor:"#0b0c0c",activeColor:"#ffdd00",foregroundColor:"#0b0c0c"},dark:{haloColor:"#0b0c0c",selectedColor:"#ffffff",activeColor:"#ffdd00",foregroundColor:"#ffffff"}};function ue(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function pe(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ue(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ue(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var de={slot:"middle",open:!1,dismissible:!0,modal:!0};pe({},de),pe(pe({},de),{},{width:"500px"}),pe(pe({},de),{},{width:"500px"});var fe={small:1,medium:1.5,large:2};function ye(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ve(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ye(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ye(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var ge=(e,t,r,n)=>({featureId:e,multiSelect:t,layerId:r.layerId,idProperty:r.idProperty,properties:n.properties,geometry:n.geometry}),me=e=>{var t,{featureId:r,feature:n,config:o,selectedFeatures:i,dispatch:a,multiSelect:l}=e;if(!i.length)return!1;var s=i.findIndex(e=>e.featureId===r&&e.layerId===o.layerId);if(-1!==s){if(i.length<3)return!1;var c=(e=>{for(var t=new Set([0]),r=!0;r;){r=!1;for(var n=1;n<e.length;n++){var o;if(!t.has(n)){var i=[...t].map(t=>e[t]);null!==(o=e[n].geometry)&&void 0!==o&&o.type&&ee(e[n],i)&&(t.add(n),r=!0)}}}return t.size===e.length?null:[...t].map(t=>e[t])})(i.filter((e,t)=>t!==s));return!!c&&(a({type:"SET_SELECTED_FEATURES",payload:c}),!0)}var u=i.filter(e=>{var t;return null===(t=e.geometry)||void 0===t?void 0:t.type});return!(null===(t=n.geometry)||void 0===t||!t.type||!u.length)&&(!ee(n,u)&&(a({type:"TOGGLE_SELECTED_FEATURES",payload:ve(ve({},ge(r,l,o,n)),{},{replaceAll:!0})}),!0))},Ee=e=>{var{mapProvider:t,layers:r,interactionModes:n,multiSelect:i,dispatch:a,markers:l,layerConfigMap:s,debug:c,tolerance:u,processFeatureMatch:p,processFallback:d,scale:f}=e;return o(e=>{var{point:o,coords:y}=e,v=c?ie(t,o,{radius:u}):null;if(v&&((e,t)=>{var[r,n]=e;console.groupCollapsed("[interact] click (".concat(r.toFixed(4),", ").concat(n.toFixed(4),") — ").concat(t.length," feature").concat(1!==t.length?"s":"")),t.forEach(e=>{var t,r;console.log({layer:e.layer.id,type:e.layer.type,id:null!==(t=e.id)&&void 0!==t?t:"—",sourceLayer:null!==(r=e.sourceLayer)&&void 0!==r?r:"—",properties:e.properties})}),console.groupEnd()})(y,v),n.includes("selectMarker")){var g=((e,t,r)=>{for(var n of e.items){var o,i=null===(o=e.markerRefs)||void 0===o?void 0:o.get(n.id);if(i&&!se(n)){var a=i.closest(".im-c-viewport__markers")||i.parentElement,l=a?a.getBoundingClientRect():{left:0,top:0},{left:s,top:c,right:u,bottom:p}=i.getBoundingClientRect(),d=t.x*r,f=t.y*r;if(d>=s-l.left&&d<=u-l.left&&f>=c-l.top&&f<=p-l.top)return n.id}}return null})(l,o,f);if(g)return void a({type:"TOGGLE_SELECTED_MARKERS",payload:{markerId:g,multiSelect:i}})}if(n.includes("selectFeature")&&r.length>0){var m=((e,t)=>{var r=e.filter(e=>{var r;return t[null===(r=e.layer)||void 0===r?void 0:r.id]}),n=r.find(ae);if(n)return{feature:n,config:t[n.layer.id]};var o=r[0];return o?{feature:o,config:t[o.layer.id]}:null})(null!=v?v:ie(t,o,{radius:u}),s);if(m)return void p(m)}d({coords:y})},[t,r,n,i,a,l,s,c,u,p,d,f])},he=e=>{var t,{mapState:r,pluginState:n,services:l,mapProvider:s}=e,{markers:c,mapSize:u}=r,{dispatch:p,layers:d,interactionModes:f,multiSelect:y,contiguous:v,marker:g,tolerance:m,selectedFeatures:E,selectedMarkers:h,deselectOnClickOutside:S}=n,{eventBus:P}=l,b=oe(d),A=null!==(t=fe[u])&&void 0!==t?t:1,_=o(e=>{var t,r,n,{feature:o,config:i}=e;c.remove("location");var a=null!==(t=null===(r=o.properties)||void 0===r?void 0:r[i.idProperty])&&void 0!==t?t:o.id;if(null!=a){var l=null===(n=s.getFeatureGeometry)||void 0===n?void 0:n.call(s,i.layerId,a,i.idProperty),u=l?ve(ve({},o),{},{geometry:l}):o;if(v&&y)if(me({featureId:a,feature:u,config:i,selectedFeatures:E,dispatch:p,multiSelect:y}))return;p({type:"TOGGLE_SELECTED_FEATURES",payload:ge(a,y,i,u)})}},[c,p,y,v,E,s]),O=o(e=>{var{coords:t}=e,r=f.includes("placeMarker");(r||S)&&(p({type:"CLEAR_SELECTED_FEATURES"}),r&&(c.add("location",t,g),P.emit("interact:markerchange",{coords:t})))},[f,p,c,g,P,S]),w=Ee({mapProvider:s,layers:d,interactionModes:f,multiSelect:y,dispatch:p,markers:c,layerConfigMap:b,debug:null==n?void 0:n.debug,tolerance:m,processFeatureMatch:_,processFallback:O,scale:A});return((e,t,r)=>{var n=i(null);a(()=>{var o=n.current;(null===o||0===o.features.length&&0===o.markers.length)&&0===t.length&&0===r.length||(e.emit("interact:selectionchange",{selectedFeatures:t.map(e=>{var{featureId:t,layerId:r,idProperty:n,properties:o,geometry:i}=e;return{featureId:t,layerId:r,idProperty:n,properties:o,geometryType:null==i?void 0:i.type}}),selectedMarkers:r,contiguous:te(t)}),n.current={features:t,markers:r})},[t,r])})(P,E,h),{handleInteraction:w}};function Se(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Pe(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Se(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var be=(e,t)=>{var r,n;return t?null!==(r=null===(n=e.properties)||void 0===n?void 0:n[t.idProperty])&&void 0!==r?r:e.id:null},Ae=e=>{var t=e.closest(".im-c-viewport__markers");if(!t)return!1;var r=t.getBoundingClientRect(),{left:n,right:o,top:i,bottom:a}=e.getBoundingClientRect();return o>r.left&&n<r.right&&a>r.top&&i<r.bottom},_e=(e,t,r)=>{var{x:n,y:o}=e.mapToScreen(r);return{x:n*fe[t],y:o*fe[t]}},Oe=(e,t,r,n,o)=>{var i,a,l,s=t[null===(i=e.layer)||void 0===i?void 0:i.id];if(null==s||!s.labelProperty)return null;var c=be(e,s),u=null==c?null:String(c);if(null==u||r.has(u))return null;r.add(u);var p={id:u,label:null!==(a=null===(l=e.properties)||void 0===l?void 0:l[s.labelProperty])&&void 0!==a?a:u},d=function(e){try{var[t,r,n,o]=Q($(e));return[(t+n)/2,(r+o)/2]}catch(e){return null}}(e);return d&&Object.assign(p,_e(n,o,d)),p};function we(e){var{markers:t,mapSize:r,interactionModes:n,layers:o,mapProvider:i,multiSelect:l,eventBus:s}=e;a(()=>{var e=()=>{var e=[];null!=n&&n.includes("selectMarker")&&e.push(...((e,t,r)=>{var n=[];for(var o of e.items){var i;if(o.label){var a=null===(i=e.markerRefs)||void 0===i?void 0:i.get(o.id);if(!se(o)&&a&&Ae(a)){var l={id:o.id,label:o.label};o.coords&&Object.assign(l,_e(t,r,o.coords)),n.push(l)}}}return n})(t,i,r)),null!=n&&n.includes("selectFeature")&&o.length>0&&e.push(...((e,t,r)=>{var n=[],o=new Set,i=t.map(e=>e.layerId),a=oe(t),l=e.getVisibleFeatures(i);for(var s of l){var c=Oe(s,a,o,e,r);c&&n.push(c)}return n})(i,o,r)),s.emit(u.MAP_SET_FEATURES,{items:e,multiselectable:l})};return e(),s.on(u.MAP_MOVE_END,e),s.on(u.MAP_DATA_CHANGE,e),()=>{s.off(u.MAP_MOVE_END,e),s.off(u.MAP_DATA_CHANGE,e)}},[t,r,n,o,i,l,s])}function Me(e){var{markers:t,interactionModes:r,layers:n,mapProvider:o,eventBus:i,dispatch:l,listboxActiveItemRef:s}=e;a(()=>{var e=e=>{var{id:i}=e;if(null===i)return s.current=null,void l({type:"SET_LISTBOX_ACTIVE",payload:null});if(t.items.some(e=>e.id===i))return s.current={id:i,isMarker:!0},void l({type:"SET_LISTBOX_ACTIVE",payload:null});if(null!=r&&r.includes("selectFeature")&&n.length>0){var a=n.map(e=>e.layerId),c=oe(n),u=((e,t,r)=>{for(var n of e){var o,i=t[null===(o=n.layer)||void 0===o?void 0:o.id],a=be(n,i);if(null!=a&&String(a)===String(r))return{feature:n,config:i,rawId:a}}return null})(o.getVisibleFeatures(a),c,i);if(u){var p={featureId:u.rawId,layerId:u.config.layerId,idProperty:u.config.idProperty,geometry:u.feature.geometry};s.current=Pe(Pe({id:i,isMarker:!1},p),{},{properties:u.feature.properties}),l({type:"SET_LISTBOX_ACTIVE",payload:p})}}};return i.on(u.MAP_SET_ACTIVE_FEATURE,e),()=>{i.off(u.MAP_SET_ACTIVE_FEATURE,e)}},[t,r,n,o,i,l,s])}function ke(e){var{mapState:t,pluginState:r,services:n,mapProvider:o}=e,{markers:l,mapSize:s}=t,{dispatch:c,interactionModes:p,layers:d,multiSelect:f}=r,{eventBus:y}=n,v=i(null);we({markers:l,mapSize:s,interactionModes:p,layers:d,mapProvider:o,multiSelect:f,eventBus:y}),Me({markers:l,interactionModes:p,layers:d,mapProvider:o,eventBus:y,dispatch:c,listboxActiveItemRef:v}),function(e){var{eventBus:t,dispatch:r,listboxActiveItemRef:n,multiSelect:o}=e;a(()=>{var e=()=>{var e=n.current;if(e)if(e.isMarker)r({type:"TOGGLE_SELECTED_MARKERS",payload:{markerId:e.id,multiSelect:o}});else{var{featureId:t,layerId:i,idProperty:a,geometry:l,properties:s}=e;r({type:"TOGGLE_SELECTED_FEATURES",payload:{featureId:t,layerId:i,idProperty:a,geometry:l,properties:s,multiSelect:o,replaceAll:!o}})}};return t.on(u.MAP_SELECT_FEATURE,e),()=>{t.off(u.MAP_SELECT_FEATURE,e)}},[t,r,n,o])}({eventBus:y,dispatch:c,listboxActiveItemRef:v,multiSelect:f})}var Te=e=>{var{mapProvider:t,mapStyle:r,pluginState:n,selectedFeatures:o,events:i,eventBus:s}=e,{layers:c,listboxActiveItem:u}=n,p=l(()=>r?((e,t)=>{var r,n,o,i={};if(!t)return console.warn("[interact] buildStylesMap: mapStyle is null/undefined, cannot build styles"),i;var a=null!==(r=ce[t.mapColorScheme])&&void 0!==r?r:ce.light,l=null!==(n=t.activeColor)&&void 0!==n?n:a.activeColor,s=null!==(o=t.selectedColor)&&void 0!==o?o:a.selectedColor;return e.forEach(e=>{var r=e.activeStroke||l,n=e.selectedStroke||s,o=e.selectedFill||"transparent",a=e.selectedStrokeWidth||3,c=a+6;i[e.layerId]={stroke:le(r,t.id),selectionStroke:le(n,t.id),fill:le(o,t.id),strokeWidth:a,activeStrokeWidth:c}}),i})(c,r):null,[c,r]),d=()=>{var e,r=u?[{featureId:u.featureId,layerId:u.layerId,idProperty:u.idProperty,geometry:u.geometry}]:[];null===(e=t.updateHighlightedFeatures)||void 0===e||e.call(t,o,r,p)};a(()=>{if(t&&p){d();var e=0,r=!1,n=()=>{d(),Date.now()>=e&&(s.off(i.MAP_DATA_CHANGE,n),r=!1)},o=()=>{e=Date.now()+3e3,r||(r=!0,s.on(i.MAP_DATA_CHANGE,n))};return s.on(i.MAP_STYLE_CHANGE,o),s.on(i.MAP_SET_SIZE,o),()=>{s.off(i.MAP_STYLE_CHANGE,o),s.off(i.MAP_SET_SIZE,o),s.off(i.MAP_DATA_CHANGE,n)}}},[o,u,t,p,s])};function Ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Ce(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Ie(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ie(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Le=e=>!("Enter"!==e.key||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey);function Fe(e){var t,r,n,{getAppState:o,mapState:i,getPluginState:a,buttonConfig:l,events:s,eventBus:c,handleInteraction:u,clickReadyRef:p}=e,{selectAtTarget:d}=l,f=()=>u(i.crossHair.getDetail()),y=e=>{p.current&&u(e)},{handleKeydown:v,handleKeyup:g}=(t=o().layoutRefs.viewportRef,r=f,n=!1,{handleKeydown:e=>{n=Le(e)&&t.current===e.target},handleKeyup:e=>{Le(e)&&n&&(e.preventDefault(),r())}}),m=((e,t)=>(r,n)=>{var o=t();e.markers.remove("location"),o.dispatch({type:"TOGGLE_SELECTED_FEATURES",payload:Ce({multiSelect:o.multiSelect,addToExisting:n},r)})})(i,a),E=e=>m(e,!0),h=e=>m(e,!1);return document.addEventListener("keydown",v),document.addEventListener("keyup",g),c.on(s.MAP_CLICK,y),c.on("interact:selectFeature",E),c.on("interact:unselectFeature",h),d.onClick=f,()=>{d.onClick=null,document.removeEventListener("keydown",v),document.removeEventListener("keyup",g),c.off(s.MAP_CLICK,y),c.off("interact:selectFeature",E),c.off("interact:unselectFeature",h)}}var De=e=>1===(null==e?void 0:e.length)&&e.includes("selectMarker");function Re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function je(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Re(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Re(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var xe={ENABLE:(e,t)=>je(je(je({},e),t),{},{enabled:!0}),DISABLE:e=>je(je({},e),{},{enabled:!1,selectedFeatures:[],selectedMarkers:[],listboxActiveItem:null}),TOGGLE_SELECTED_FEATURES:(e,t)=>{var{featureId:r,multiSelect:n,layerId:o,idProperty:i,addToExisting:a=!0,replaceAll:l=!1,properties:s,geometry:c}=t,u=Array.isArray(e.selectedFeatures)?e.selectedFeatures:[],p=u.findIndex(e=>e.featureId===r&&e.layerId===o);if(!1===a){var d=u.filter((e,t)=>t!==p);return je(je({},e),{},{selectedFeatures:d})}var f,y={featureId:r,layerId:o,idProperty:i,properties:s,geometry:c};if(n&&!l){var v=[...u];-1===p?v.push(y):v.splice(p,1),f=v}else{f=-1!==p&&1===u.length?[]:[y]}return je(je({},e),{},{selectedFeatures:f,selectedMarkers:n&&!l?e.selectedMarkers:[]})},TOGGLE_SELECTED_MARKERS:(e,t)=>{var{markerId:r,multiSelect:n}=t,o=e.selectedMarkers,i=o.includes(r);if(n){var a=i?o.filter(e=>e!==r):[...o,r];return je(je({},e),{},{selectedMarkers:a})}return je(je({},e),{},{selectedFeatures:[],selectedMarkers:i&&1===o.length?[]:[r]})},CLEAR_SELECTED_FEATURES:e=>je(je({},e),{},{selectedFeatures:[],selectedMarkers:[]}),SET_SELECTED_FEATURES:(e,t)=>je(je({},e),{},{selectedFeatures:t}),SELECT_MARKER:(e,t)=>{var{markerId:r,multiSelect:n}=t,o=e.selectedMarkers;if(o.includes(r))return e;var i=n?[...o,r]:[r];return je(je({},e),{},{selectedFeatures:n?e.selectedFeatures:[],selectedMarkers:i})},UNSELECT_MARKER:(e,t)=>{var{markerId:r}=t,n=e.selectedMarkers;return n.includes(r)?je(je({},e),{},{selectedMarkers:n.filter(e=>e!==r)}):e},SET_LISTBOX_ACTIVE:(e,t)=>je(je({},e),{},{listboxActiveItem:null!=t?t:null})},Ne={tolerance:10,interactionModes:["selectMarker"],multiSelect:!1,contiguous:!1,deselectOnClickOutside:!1,marker:{}};function Be(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Ge(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Be(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Be(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Ue="Select",He={InitComponent:e=>{var{appState:t,mapState:r,services:n,buttonConfig:l,mapProvider:s,pluginState:c}=e,{enabled:p,selectedFeatures:d,interactionModes:f,layers:y}=c,{eventBus:v}=n,{crossHair:g,mapStyle:m,markers:E}=r,h=De(f);ke({mapState:r,pluginState:c,services:n,mapProvider:s});var{handleInteraction:S}=he({mapState:r,pluginState:c,services:n,mapProvider:s});return Te({mapProvider:s,mapStyle:m,pluginState:c,selectedFeatures:d,events:u,eventBus:v}),a(()=>{v.emit("interact:active",{active:p,interactionModes:f})},[p,f]),function(e){var{enabled:t,interactionModes:r,markers:n,layers:o,eventBus:i}=e;a(()=>{if(t){var e=(null==r?void 0:r.includes("selectMarker"))&&n.items.some(e=>e.label),a=(null==r?void 0:r.includes("selectFeature"))&&o.some(e=>e.labelProperty);(e||a)&&i.emit("interact:listboxcapable")}},[t,r,n,o,i])}({enabled:p,interactionModes:f,markers:E,layers:y,eventBus:v}),((e,t,r,n)=>{a(()=>{var o,i=t&&(null==r?void 0:r.includes("selectFeature"))?n.map(e=>e.layerId):[];return null===(o=e.setHoverCursor)||void 0===o||o.call(e,i),()=>{var t;return null===(t=e.setHoverCursor)||void 0===t?void 0:t.call(e,[])}},[t,r,n])})(s,p,f,y),function(e){var{crossHair:t,enabled:r,selectMarkerOnly:n,appState:l}=e,s=i(r);s.current=r;var c=i(n);c.current=n;var u=i(t);u.current=t;var p=i(!1),d=i(!1),f=i(l.interfaceType);f.current=l.interfaceType;var y=o(()=>{var e,t=f.current,r="keyboard"===t&&d.current,n="touch"===t&&!c.current&&!p.current,o=null===(e=l.expandedButtons)||void 0===e?void 0:e.has("moveControls");s.current&&(r||n||o)?u.current.fixAtCenter():u.current.hide()},[l.expandedButtons]);a(()=>{y()},[r,n,l.interfaceType,l.expandedButtons,y]),a(()=>{var e,t,r=null===(e=l.layoutRefs)||void 0===e||null===(e=e.appContainerRef)||void 0===e?void 0:e.current;if(r){d.current=!(null===(t=document.activeElement)||void 0===t||!t.closest("[data-map-keyboard-scope]"));var n=e=>{var t=!!e.target.closest('[role="listbox"], [role="option"]'),r=!!e.target.closest("[data-map-keyboard-scope]"),n=p.current!==t||d.current!==r;p.current=t,d.current=r,n&&s.current&&y()};return r.addEventListener("focusin",n),()=>{r.removeEventListener("focusin",n)}}},[l.layoutRefs,y])}({crossHair:g,enabled:p,selectMarkerOnly:h,appState:t}),function(e){var{pluginState:t,appState:r,mapState:n,buttonConfig:o,eventBus:l,handleInteraction:s}=e,c=i(s);c.current=s;var p=i(t);p.current=t;var d=i(r);d.current=r;var f=i(!1);a(()=>{f.current=!1;var e=setTimeout(()=>{f.current=!0},0);return()=>clearTimeout(e)},[t.enabled]),a(()=>{if(t.enabled)return Fe({getAppState:()=>d.current,mapState:n,getPluginState:()=>p.current,buttonConfig:o,events:u,eventBus:l,handleInteraction:e=>c.current(e),clickReadyRef:f})},[t.enabled,o,l])}({pluginState:c,appState:t,mapState:r,buttonConfig:l,eventBus:v,handleInteraction:S}),null},reducer:{initialState:{enabled:!1,layers:[],marker:null,interactionModes:null,multiSelect:!1,deselectOnClickOutside:!1,selectedFeatures:[],selectedMarkers:[],closeOnAction:!0,listboxActiveItem:null},actions:xe},buttons:[{id:"selectAtTarget",label:"Select",variant:"primary",hiddenWhen:e=>{var{appState:t,pluginState:r}=e;return!r.enabled||"touch"!==t.interfaceType||De(r.interactionModes)},mobile:{slot:"actions"},tablet:{slot:"actions"},desktop:{slot:"actions"}}],keyboardShortcuts:[{id:"clickAtTarget",title:"Click at target",command:"<kbd>Enter</kbd>"},{id:"selectFeatures",group:Ue,context:"listbox",title:"Select features",command:"<kbd>Tab</kbd>"},{id:"navigateFeatures",group:Ue,context:"listbox",title:"Navigate features",command:"<kbd>↑</kbd> or <kbd>↓</kbd>"},{id:"selectFeature",group:Ue,context:"listbox",title:"Select a feature",command:"<kbd>Enter</kbd> or <kbd>Space</kbd>"},{id:"dismissHintOrReturn",group:Ue,context:"listbox",title:"Dismiss hint / return to map",command:"<kbd>Escape</kbd>"}],icons:[{id:"select",svgContent:'<path d="M22 14a8 8 0 0 1-8 8"/><path d="M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2"/><path d="M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1"/><path d="M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10"/><path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"/>'}],api:{enable:(e,t)=>{var{pluginState:r,pluginConfig:n}=e;r.dispatch({type:"ENABLE",payload:Ge(Ge(Ge({},Ne),n),t)})},disable:e=>{var{pluginState:t}=e;t.dispatch({type:"DISABLE"})},clear:e=>{var{pluginState:t,mapState:r}=e;t.dispatch({type:"CLEAR_SELECTED_FEATURES"}),r.markers.remove("location")},selectFeature:(e,t)=>{var{services:r}=e,{featureId:n,layerId:o,idProperty:i}=t;r.eventBus.emit("interact:selectFeature",{featureId:n,layerId:o,idProperty:i})},unselectFeature:(e,t)=>{var{services:r}=e,{featureId:n,layerId:o,idProperty:i}=t;r.eventBus.emit("interact:unselectFeature",{featureId:n,layerId:o,idProperty:i})},selectMarker:(e,t)=>{var{pluginState:r}=e;r.dispatch({type:"SELECT_MARKER",payload:{markerId:t,multiSelect:r.multiSelect}})},unselectMarker:(e,t)=>{var{pluginState:r}=e;r.dispatch({type:"UNSELECT_MARKER",payload:{markerId:t}})}}};export{He as manifest};
|
|
1
|
+
import e from"@babel/runtime/helpers/defineProperty";import"@babel/runtime/helpers/objectWithoutProperties";import{useContext as t,createContext as r,useState as n,useCallback as o,useRef as i,useEffect as a,useMemo as l}from"preact/compat";import{jsxs as s,jsx as c}from"preact/jsx-runtime";import"@babel/runtime/helpers/asyncToGenerator";var u={APP_ADD_MARKER:"app:addmarker",APP_UPDATE_MARKER:"app:updatemarker",APP_REMOVE_MARKER:"app:removemarker",APP_SET_MODE:"app:setmode",APP_REVERT_MODE:"app:revertmode",APP_ADD_BUTTON:"app:addbutton",APP_TOGGLE_BUTTON_STATE:"app:togglebuttonstate",APP_ADD_PANEL:"app:addpanel",APP_REMOVE_PANEL:"app:removepanel",APP_SHOW_PANEL:"app:showpanel",APP_HIDE_PANEL:"app:hidepanel",APP_ADD_CONTROL:"app:addcontrol",APP_SHOW_HINT:"app:showhint",APP_DISMISS_HINT:"app:dismisshint",APP_READY:"app:ready",APP_OPENED:"app:opened",APP_CLOSED:"app:closed",APP_FULLSCREEN_CHANGE:"app:fullscreenchange",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",MAP_SET_SPATIAL_LIST:"map:setspatiallist",MAP_SET_SPATIAL_LIST_SUPPRESSED:"map:setspatiallistsuppressed",MAP_SET_ACTIVE_ITEM:"map:setactiveitem",MAP_SELECT_ITEM:"map:selectitem",MAP_SET_PIXEL_RATIO:"map:setpixelratio",MAP_FIT_TO_BOUNDS:"map:fittobounds",MAP_SET_VIEW:"map:setview",MAP_INIT_MAP_STYLES:"map:initmapstyles",MAP_STYLE_CHANGE:"map:stylechange",MAP_LOADED:"map:loaded",MAP_READY:"map:ready",MAP_SIZE_CHANGE:"map:sizechange",MAP_FIRST_IDLE:"map:firstidle",MAP_MOVE_START:"map:movestart",MAP_MOVE:"map:move",MAP_MOVE_END:"map:moveend",MAP_STATE_UPDATED:"map:stateupdated",MAP_DATA_CHANGE:"map:datachange",MAP_RENDER:"map:render",MAP_CLICK:"map:click",MAP_DESTROY:"map:destroy"};function p(e,t,r={}){const n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=t||{},n.geometry=e,n}function d(e,t,r={}){if(!e)throw new Error("coordinates is required");if(!Array.isArray(e))throw new Error("coordinates must be an Array");if(e.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!g(e[0])||!g(e[1]))throw new Error("coordinates must contain numbers");return p({type:"Point",coordinates:e},t,r)}function f(e,t,r={}){if(e.length<2)throw new Error("coordinates must be an array of two or more positions");return p({type:"LineString",coordinates:e},t,r)}function y(e,t={}){const r={type:"FeatureCollection"};return t.id&&(r.id=t.id),t.bbox&&(r.bbox=t.bbox),r.features=e,r}function v(e,t,r={}){return p({type:"MultiLineString",coordinates:e},t,r)}function g(e){return!isNaN(e)&&null!==e&&!Array.isArray(e)}const m=11102230246251565e-32,h=134217729,E=(3+8*m)*m;function S(e,t,r,n,o){let i,a,l,s,c=t[0],u=n[0],p=0,d=0;u>c==u>-c?(i=c,c=t[++p]):(i=u,u=n[++d]);let f=0;if(p<e&&d<r)for(u>c==u>-c?(a=c+i,l=i-(a-c),c=t[++p]):(a=u+i,l=i-(a-u),u=n[++d]),i=a,0!==l&&(o[f++]=l);p<e&&d<r;)u>c==u>-c?(a=i+c,s=a-i,l=i-(a-s)+(c-s),c=t[++p]):(a=i+u,s=a-i,l=i-(a-s)+(u-s),u=n[++d]),i=a,0!==l&&(o[f++]=l);for(;p<e;)a=i+c,s=a-i,l=i-(a-s)+(c-s),c=t[++p],i=a,0!==l&&(o[f++]=l);for(;d<r;)a=i+u,s=a-i,l=i-(a-s)+(u-s),u=n[++d],i=a,0!==l&&(o[f++]=l);return 0===i&&0!==f||(o[f++]=i),f}function b(e){return new Float64Array(e)}const P=b(4),A=b(8),_=b(12),O=b(16),M=b(4);function w(e,t,r,n,o,i){const a=(t-i)*(r-o),l=(e-o)*(n-i),s=a-l,c=Math.abs(a+l);return Math.abs(s)>=33306690738754716e-32*c?s:-function(e,t,r,n,o,i,a){let l,s,c,u,p,d,f,y,v,g,m,b,w,k,I,T,L,C;const D=e-o,F=r-o,R=t-i,j=n-i;k=D*j,d=h*D,f=d-(d-D),y=D-f,d=h*j,v=d-(d-j),g=j-v,I=y*g-(k-f*v-y*v-f*g),T=R*F,d=h*R,f=d-(d-R),y=R-f,d=h*F,v=d-(d-F),g=F-v,L=y*g-(T-f*v-y*v-f*g),m=I-L,p=I-m,P[0]=I-(m+p)+(p-L),b=k+m,p=b-k,w=k-(b-p)+(m-p),m=w-T,p=w-m,P[1]=w-(m+p)+(p-T),C=b+m,p=C-b,P[2]=b-(C-p)+(m-p),P[3]=C;let x=function(e,t){let r=t[0];for(let n=1;n<e;n++)r+=t[n];return r}(4,P),B=22204460492503146e-32*a;if(x>=B||-x>=B)return x;if(p=e-D,l=e-(D+p)+(p-o),p=r-F,c=r-(F+p)+(p-o),p=t-R,s=t-(R+p)+(p-i),p=n-j,u=n-(j+p)+(p-i),0===l&&0===s&&0===c&&0===u)return x;if(B=11093356479670487e-47*a+E*Math.abs(x),x+=D*u+j*l-(R*c+F*s),x>=B||-x>=B)return x;k=l*j,d=h*l,f=d-(d-l),y=l-f,d=h*j,v=d-(d-j),g=j-v,I=y*g-(k-f*v-y*v-f*g),T=s*F,d=h*s,f=d-(d-s),y=s-f,d=h*F,v=d-(d-F),g=F-v,L=y*g-(T-f*v-y*v-f*g),m=I-L,p=I-m,M[0]=I-(m+p)+(p-L),b=k+m,p=b-k,w=k-(b-p)+(m-p),m=w-T,p=w-m,M[1]=w-(m+p)+(p-T),C=b+m,p=C-b,M[2]=b-(C-p)+(m-p),M[3]=C;const G=S(4,P,4,M,A);k=D*u,d=h*D,f=d-(d-D),y=D-f,d=h*u,v=d-(d-u),g=u-v,I=y*g-(k-f*v-y*v-f*g),T=R*c,d=h*R,f=d-(d-R),y=R-f,d=h*c,v=d-(d-c),g=c-v,L=y*g-(T-f*v-y*v-f*g),m=I-L,p=I-m,M[0]=I-(m+p)+(p-L),b=k+m,p=b-k,w=k-(b-p)+(m-p),m=w-T,p=w-m,M[1]=w-(m+p)+(p-T),C=b+m,p=C-b,M[2]=b-(C-p)+(m-p),M[3]=C;const N=S(G,A,4,M,_);k=l*u,d=h*l,f=d-(d-l),y=l-f,d=h*u,v=d-(d-u),g=u-v,I=y*g-(k-f*v-y*v-f*g),T=s*c,d=h*s,f=d-(d-s),y=s-f,d=h*c,v=d-(d-c),g=c-v,L=y*g-(T-f*v-y*v-f*g),m=I-L,p=I-m,M[0]=I-(m+p)+(p-L),b=k+m,p=b-k,w=k-(b-p)+(m-p),m=w-T,p=w-m,M[1]=w-(m+p)+(p-T),C=b+m,p=C-b,M[2]=b-(C-p)+(m-p),M[3]=C;const H=S(N,_,4,M,O);return O[H-1]}(e,t,r,n,o,i,c)}function k(e,t){var r,n,o,i,a,l,s,c,u,p=0,d=e[0],f=e[1],y=t.length;for(r=0;r<y;r++){n=0;var v=t[r],g=v.length-1;if((c=v[0])[0]!==v[g][0]&&c[1]!==v[g][1])throw new Error("First and last coordinates in a ring must be the same");for(i=c[0]-d,a=c[1]-f;n<g;n++){if(l=(u=v[n+1])[0]-d,s=u[1]-f,0===a&&0===s){if(l<=0&&i>=0||i<=0&&l>=0)return 0}else if(s>=0&&a<=0||s<=0&&a>=0){if(0===(o=w(i,l,a,s,0,0)))return 0;(o>0&&s>0&&a<=0||o<0&&s<=0&&a>0)&&p++}c=u,a=s,i=l}}return p%2!=0}function I(e){return"Feature"===e.type?e.geometry:e}function T(e,t,r={}){if(!e)throw new Error("point is required");if(!t)throw new Error("polygon is required");const n=function(e){if(!e)throw new Error("coord is required");if(!Array.isArray(e)){if("Feature"===e.type&&null!==e.geometry&&"Point"===e.geometry.type)return[...e.geometry.coordinates];if("Point"===e.type)return[...e.coordinates]}if(Array.isArray(e)&&e.length>=2&&!Array.isArray(e[0])&&!Array.isArray(e[1]))return[...e];throw new Error("coord must be GeoJSON Point or an Array of numbers")}(e),o=I(t),i=o.type,a=t.bbox;let l=o.coordinates;if(a&&!1===function(e,t){return t[0]<=e[0]&&t[1]<=e[1]&&t[2]>=e[0]&&t[3]>=e[1]}(n,a))return!1;"Polygon"===i&&(l=[l]);let s=!1;for(var c=0;c<l.length;++c){const e=k(n,l[c]);if(0===e)return!r.ignoreBoundary;e&&(s=!0)}return s}class L{constructor(e=[],t=C){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const e=this.data[0],t=this.data.pop();return this.length--,this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){const{data:t,compare:r}=this,n=t[e];for(;e>0;){const o=e-1>>1,i=t[o];if(r(n,i)>=0)break;t[e]=i,e=o}t[e]=n}_down(e){const{data:t,compare:r}=this,n=this.length>>1,o=t[e];for(;e<n;){let n=1+(e<<1),i=t[n];const a=n+1;if(a<this.length&&r(t[a],i)<0&&(n=a,i=t[a]),r(i,o)>=0)break;t[e]=i,e=n}t[e]=o}}function C(e,t){return e<t?-1:e>t?1:0}function D(e,t){return e.p.x>t.p.x?1:e.p.x<t.p.x?-1:e.p.y!==t.p.y?e.p.y>t.p.y?1:-1:1}function F(e,t){return e.rightSweepEvent.p.x>t.rightSweepEvent.p.x?1:e.rightSweepEvent.p.x<t.rightSweepEvent.p.x?-1:e.rightSweepEvent.p.y!==t.rightSweepEvent.p.y?e.rightSweepEvent.p.y<t.rightSweepEvent.p.y?1:-1:1}class R{constructor(e,t,r,n){this.p={x:e[0],y:e[1]},this.featureId=t,this.ringId=r,this.eventId=n,this.otherEvent=null,this.isLeftEndpoint=null}isSamePoint(e){return this.p.x===e.p.x&&this.p.y===e.p.y}}let j=0,x=0,B=0;function G(e,t){const r="Feature"===e.type?e.geometry:e;let n=r.coordinates;"Polygon"!==r.type&&"MultiLineString"!==r.type||(n=[n]),"LineString"===r.type&&(n=[[n]]);for(let e=0;e<n.length;e++)for(let r=0;r<n[e].length;r++){let o=n[e][r][0],i=null;x+=1;for(let a=0;a<n[e][r].length-1;a++){i=n[e][r][a+1];const l=new R(o,j,x,B),s=new R(i,j,x,B+1);l.otherEvent=s,s.otherEvent=l,D(l,s)>0?(s.isLeftEndpoint=!0,l.isLeftEndpoint=!1):(l.isLeftEndpoint=!0,s.isLeftEndpoint=!1),t.push(l),t.push(s),o=i,B+=1}}j+=1}class N{constructor(e){this.leftSweepEvent=e,this.rightSweepEvent=e.otherEvent}}function H(e,t){if(null===e||null===t)return!1;if(e.leftSweepEvent.ringId===t.leftSweepEvent.ringId&&(e.rightSweepEvent.isSamePoint(t.leftSweepEvent)||e.rightSweepEvent.isSamePoint(t.leftSweepEvent)||e.rightSweepEvent.isSamePoint(t.rightSweepEvent)||e.leftSweepEvent.isSamePoint(t.leftSweepEvent)||e.leftSweepEvent.isSamePoint(t.rightSweepEvent)))return!1;const r=e.leftSweepEvent.p.x,n=e.leftSweepEvent.p.y,o=e.rightSweepEvent.p.x,i=e.rightSweepEvent.p.y,a=t.leftSweepEvent.p.x,l=t.leftSweepEvent.p.y,s=t.rightSweepEvent.p.x,c=t.rightSweepEvent.p.y,u=(c-l)*(o-r)-(s-a)*(i-n),p=(s-a)*(n-l)-(c-l)*(r-a),d=(o-r)*(n-l)-(i-n)*(r-a);if(0===u)return!1;const f=p/u,y=d/u;if(f>=0&&f<=1&&y>=0&&y<=1){return[r+f*(o-r),n+f*(i-n)]}return!1}var U=function(e,t){const r=new L([],D);return function(e,t){if("FeatureCollection"===e.type){const r=e.features;for(let e=0;e<r.length;e++)G(r[e],t)}else G(e,t)}(e,r),function(e,t){t=t||!1;const r=[],n=new L([],F);for(;e.length;){const o=e.pop();if(o.isLeftEndpoint){const e=new N(o);for(let i=0;i<n.data.length;i++){const a=n.data[i];if(t&&a.leftSweepEvent.featureId===o.featureId)continue;const l=H(e,a);!1!==l&&r.push(l)}n.push(e)}else!1===o.isLeftEndpoint&&n.pop()}return r}(r,t)};function K(e,t,r={}){const{removeDuplicates:n=!0,ignoreSelfIntersections:o=!0}=r;let i=[];"FeatureCollection"===e.type?i=i.concat(e.features):"Feature"===e.type?i.push(e):"LineString"!==e.type&&"Polygon"!==e.type&&"MultiLineString"!==e.type&&"MultiPolygon"!==e.type||i.push(p(e)),"FeatureCollection"===t.type?i=i.concat(t.features):"Feature"===t.type?i.push(t):"LineString"!==t.type&&"Polygon"!==t.type&&"MultiLineString"!==t.type&&"MultiPolygon"!==t.type||i.push(p(t));const a=U(y(i),o);let l=[];if(n){const e={};a.forEach(t=>{const r=t.join(",");e[r]||(e[r]=!0,l.push(t))})}else l=a;return y(l.map(e=>d(e)))}function V(e,t,r){if(null!==e)for(var n,o,i,a,l,s,c,u,p=0,d=0,f=e.type,y="FeatureCollection"===f,v="Feature"===f,g=y?e.features.length:1,m=0;m<g;m++){l=(u=!!(c=y?e.features[m].geometry:v?e.geometry:e)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var h=0;h<l;h++){var E=0,S=0;if(null!==(a=u?c.geometries[h]:c)){s=a.coordinates;var b=a.type;switch(p=0,b){case null:break;case"Point":if(!1===t(s,d,m,E,S))return!1;d++,E++;break;case"LineString":case"MultiPoint":for(n=0;n<s.length;n++){if(!1===t(s[n],d,m,E,S))return!1;d++,"MultiPoint"===b&&E++}"LineString"===b&&E++;break;case"Polygon":case"MultiLineString":for(n=0;n<s.length;n++){for(o=0;o<s[n].length-p;o++){if(!1===t(s[n][o],d,m,E,S))return!1;d++}"MultiLineString"===b&&E++,"Polygon"===b&&S++}"Polygon"===b&&E++;break;case"MultiPolygon":for(n=0;n<s.length;n++){for(S=0,o=0;o<s[n].length;o++){for(i=0;i<s[n][o].length-p;i++){if(!1===t(s[n][o][i],d,m,E,S))return!1;d++}S++}E++}break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===V(a.geometries[n],t))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function W(e,t){!function(e,t){var r,n,o,i,a,l,s,c,u,p,d=0,f="FeatureCollection"===e.type,y="Feature"===e.type,v=f?e.features.length:1;for(r=0;r<v;r++){for(l=f?e.features[r].geometry:y?e.geometry:e,c=f?e.features[r].properties:y?e.properties:{},u=f?e.features[r].bbox:y?e.bbox:void 0,p=f?e.features[r].id:y?e.id:void 0,a=(s=!!l&&"GeometryCollection"===l.type)?l.geometries.length:1,o=0;o<a;o++)if(null!==(i=s?l.geometries[o]:l))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===t(i,d,c,u,p))return!1;break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===t(i.geometries[n],d,c,u,p))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===t(null,d,c,u,p))return!1;d++}}(e,function(e,r,n,o,i){var a,l=null===e?null:e.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==t(p(e,n,{bbox:o,id:i}),r,0)&&void 0}switch(l){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var s=0;s<e.coordinates.length;s++){var c=e.coordinates[s];if(!1===t(p({type:a,coordinates:c},n),r,s))return!1}})}function z(e,t={}){const r=I(e);switch(t.properties||"Feature"!==e.type||(t.properties=e.properties),r.type){case"Polygon":return function(e,t={}){const r=I(e),n=r.coordinates,o=t.properties?t.properties:"Feature"===e.type?e.properties:{};return Y(n,o)}(r,t);case"MultiPolygon":return function(e,t={}){const r=I(e),n=r.coordinates,o=t.properties?t.properties:"Feature"===e.type?e.properties:{},i=[];return n.forEach(e=>{i.push(Y(e,o))}),y(i)}(r,t);default:throw new Error("invalid poly")}}function Y(e,t){return e.length>1?v(e,t):f(e[0],t)}function q(e,t){for(let r=0;r<e.coordinates.length-1;r++)if(Z(e.coordinates[r],e.coordinates[r+1],t.coordinates))return!0;return!1}function X(e,t,r){for(const r of t.coordinates)if(T(r,e))return!0;return K(t,z(e),{ignoreSelfIntersections:r}).features.length>0}function Z(e,t,r){const n=r[0]-e[0],o=r[1]-e[1],i=t[0]-e[0],a=t[1]-e[1];return 0===n*a-o*i&&(Math.abs(i)>=Math.abs(a)?i>0?e[0]<=r[0]&&r[0]<=t[0]:t[0]<=r[0]&&r[0]<=e[0]:a>0?e[1]<=r[1]&&r[1]<=t[1]:t[1]<=r[1]&&r[1]<=e[1])}var J=function(e,t,{ignoreSelfIntersections:r=!0}={ignoreSelfIntersections:!0}){let n=!0;return W(e,e=>{W(t,t=>{if(!1===n)return!1;n=function(e,t,r){switch(e.type){case"Point":switch(t.type){case"Point":return n=e.coordinates,o=t.coordinates,!(n[0]===o[0]&&n[1]===o[1]);case"LineString":return!q(t,e);case"Polygon":return!T(e,t)}break;case"LineString":switch(t.type){case"Point":return!q(e,t);case"LineString":return!function(e,t,r){const n=K(e,t,{ignoreSelfIntersections:r});if(n.features.length>0)return!0;return!1}(e,t,r);case"Polygon":return!X(t,e,r)}break;case"Polygon":switch(t.type){case"Point":return!T(t,e);case"LineString":return!X(e,t,r);case"Polygon":return!function(e,t,r){for(const r of e.coordinates[0])if(T(r,t))return!0;for(const r of t.coordinates[0])if(T(r,e))return!0;const n=K(z(e),z(t),{ignoreSelfIntersections:r});if(n.features.length>0)return!0;return!1}(t,e,r)}}var n,o;return!1}(e.geometry,t.geometry,r)})}),n};var Q=function(e,t={}){if(null!=e.bbox&&!0!==t.recompute)return e.bbox;const r=[1/0,1/0,-1/0,-1/0];return V(e,e=>{r[0]>e[0]&&(r[0]=e[0]),r[1]>e[1]&&(r[1]=e[1]),r[2]<e[0]&&(r[2]=e[0]),r[3]<e[1]&&(r[3]=e[1])}),r};function $(e){var t=e.geometry||e;switch(t.type){case"Polygon":return function(e,t,r={}){for(const t of e){if(t.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(t[t.length-1].length!==t[0].length)throw new Error("First and last Position are not equivalent.");for(let e=0;e<t[t.length-1].length;e++)if(t[t.length-1][e]!==t[0][e])throw new Error("First and last Position are not equivalent.")}return p({type:"Polygon",coordinates:e},t,r)}(t.coordinates);case"MultiPolygon":return function(e,t,r={}){return p({type:"MultiPolygon",coordinates:e},t,r)}(t.coordinates);case"LineString":return f(t.coordinates);case"MultiLineString":return v(t.coordinates);case"Point":return d(t.coordinates);case"MultiPoint":return function(e,t,r={}){return p({type:"MultiPoint",coordinates:e},t,r)}(t.coordinates);default:throw new Error("Unsupported geometry type: ".concat(t.type))}}function ee(e,t){return t.some(t=>!J($(t),$(e)))}function te(e){if(e.length<2)return!1;if(e.some(e=>{var t,r;return!("Polygon"===(r=null===(t=e.geometry)||void 0===t?void 0:t.type)||"MultiPolygon"===r)}))return!1;for(var t=new Set([0]),r=!0;r;){r=!1;for(var n=1;n<e.length;n++)if(!t.has(n)){var o=[...t].map(t=>e[t]);ee(e[n],o)&&(t.add(n),r=!0)}}return t.size===e.length}var re={".cold":".hot",".hot":".cold"},ne=e=>{for(var[t,r]of Object.entries(re))if(e.endsWith(t))return"".concat(e.slice(0,-t.length)).concat(r);return null},oe=e=>{var t={};for(var r of e){t[r.layerId]=r;var n=ne(r.layerId);n&&(t[n]=r)}return t},ie=(e,t,r)=>{try{return(null==e?void 0:e.getFeaturesAtPoint(t,r))||[]}catch(e){return console.warn("Feature query failed:",e),[]}},ae=e=>{var t,r=null===(t=e.geometry)||void 0===t?void 0:t.type;return"Point"===r||"MultiPoint"===r};var le=(e,t)=>{if(!e)return null;if("string"==typeof e)return e.trim();if("object"==typeof e){if(t&&e[t])return e[t];var r=Object.values(e)[0];return null!=r?r:null}return null},se=e=>!!e.label&&(!e.symbol&&!e.symbolSvgContent&&(null===e.symbol||null===e.symbolSvgContent)),ce={light:{haloColor:"#ffffff",selectedColor:"#0b0c0c",activeColor:"#ffdd00",foregroundColor:"#0b0c0c"},dark:{haloColor:"#0b0c0c",selectedColor:"#ffffff",activeColor:"#ffdd00",foregroundColor:"#ffffff"}};function ue(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function pe(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ue(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ue(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var de={slot:"middle",open:!1,dismissible:!0,modal:!0};pe({},de),pe(pe({},de),{},{width:"500px"}),pe(pe({},de),{},{width:"500px"});var fe={small:1,medium:1.5,large:2};function ye(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ve(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ye(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ye(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var ge=(e,t,r,n)=>({featureId:e,multiSelect:t,layerId:r.layerId,idProperty:r.idProperty,properties:n.properties,geometry:n.geometry}),me=e=>{var t,{featureId:r,feature:n,config:o,selectedFeatures:i,dispatch:a,multiSelect:l}=e;if(!i.length)return!1;var s=i.findIndex(e=>e.featureId===r&&e.layerId===o.layerId);if(-1!==s){if(i.length<3)return!1;var c=(e=>{for(var t=new Set([0]),r=!0;r;){r=!1;for(var n=1;n<e.length;n++){var o;if(!t.has(n)){var i=[...t].map(t=>e[t]);null!==(o=e[n].geometry)&&void 0!==o&&o.type&&ee(e[n],i)&&(t.add(n),r=!0)}}}return t.size===e.length?null:[...t].map(t=>e[t])})(i.filter((e,t)=>t!==s));return!!c&&(a({type:"SET_SELECTED_FEATURES",payload:c}),!0)}var u=i.filter(e=>{var t;return null===(t=e.geometry)||void 0===t?void 0:t.type});return!(null===(t=n.geometry)||void 0===t||!t.type||!u.length)&&(!ee(n,u)&&(a({type:"TOGGLE_SELECTED_FEATURES",payload:ve(ve({},ge(r,l,o,n)),{},{replaceAll:!0})}),!0))},he=e=>{var{mapProvider:t,layers:r,interactionModes:n,multiSelect:i,dispatch:a,markers:l,layerConfigMap:s,debug:c,tolerance:u,processFeatureMatch:p,processFallback:d,scale:f}=e;return o(e=>{var{point:o,coords:y}=e,v=c?ie(t,o,{radius:u}):null;if(v&&((e,t)=>{var[r,n]=e;console.groupCollapsed("[interact] click (".concat(r.toFixed(4),", ").concat(n.toFixed(4),") — ").concat(t.length," feature").concat(1!==t.length?"s":"")),t.forEach(e=>{var t,r;console.log({layer:e.layer.id,type:e.layer.type,id:null!==(t=e.id)&&void 0!==t?t:"—",sourceLayer:null!==(r=e.sourceLayer)&&void 0!==r?r:"—",properties:e.properties})}),console.groupEnd()})(y,v),n.includes("selectMarker")){var g=((e,t,r)=>{for(var n of e.items){var o,i=null===(o=e.markerRefs)||void 0===o?void 0:o.get(n.id);if(i&&!se(n)){var a=i.closest(".im-c-viewport__markers")||i.parentElement,l=a?a.getBoundingClientRect():{left:0,top:0},{left:s,top:c,right:u,bottom:p}=i.getBoundingClientRect(),d=t.x*r,f=t.y*r;if(d>=s-l.left&&d<=u-l.left&&f>=c-l.top&&f<=p-l.top)return n.id}}return null})(l,o,f);if(g)return void a({type:"TOGGLE_SELECTED_MARKERS",payload:{markerId:g,multiSelect:i}})}if(n.includes("selectFeature")&&r.length>0){var m=((e,t)=>{var r=e.filter(e=>{var r;return t[null===(r=e.layer)||void 0===r?void 0:r.id]}),n=r.find(ae);if(n)return{feature:n,config:t[n.layer.id]};var o=r[0];return o?{feature:o,config:t[o.layer.id]}:null})(null!=v?v:ie(t,o,{radius:u}),s);if(m)return void p(m)}d({coords:y})},[t,r,n,i,a,l,s,c,u,p,d,f])},Ee=e=>{var t,{mapState:r,pluginState:n,services:l,mapProvider:s}=e,{markers:c,mapSize:u}=r,{dispatch:p,layers:d,interactionModes:f,multiSelect:y,contiguous:v,marker:g,tolerance:m,selectedFeatures:h,selectedMarkers:E,deselectOnClickOutside:S}=n,{eventBus:b}=l,P=oe(d),A=null!==(t=fe[u])&&void 0!==t?t:1,_=o(e=>{var t,r,n,{feature:o,config:i}=e;c.remove("location");var a=null!==(t=null===(r=o.properties)||void 0===r?void 0:r[i.idProperty])&&void 0!==t?t:o.id;if(null!=a){var l=null===(n=s.getFeatureGeometry)||void 0===n?void 0:n.call(s,i.layerId,a,i.idProperty),u=l?ve(ve({},o),{},{geometry:l}):o;if(v&&y)if(me({featureId:a,feature:u,config:i,selectedFeatures:h,dispatch:p,multiSelect:y}))return;p({type:"TOGGLE_SELECTED_FEATURES",payload:ge(a,y,i,u)})}},[c,p,y,v,h,s]),O=o(e=>{var{coords:t}=e,r=f.includes("placeMarker");(r||S)&&(p({type:"CLEAR_SELECTED_FEATURES"}),r&&(c.add("location",t,g),b.emit("interact:markerchange",{coords:t})))},[f,p,c,g,b,S]),M=he({mapProvider:s,layers:d,interactionModes:f,multiSelect:y,dispatch:p,markers:c,layerConfigMap:P,debug:null==n?void 0:n.debug,tolerance:m,processFeatureMatch:_,processFallback:O,scale:A});return((e,t,r)=>{var n=i(null);a(()=>{var o=n.current;(null===o||0===o.features.length&&0===o.markers.length)&&0===t.length&&0===r.length||(e.emit("interact:selectionchange",{selectedFeatures:t.map(e=>{var{featureId:t,layerId:r,idProperty:n,properties:o,geometry:i}=e;return{featureId:t,layerId:r,idProperty:n,properties:o,geometryType:null==i?void 0:i.type}}),selectedMarkers:r,contiguous:te(t)}),n.current={features:t,markers:r})},[t,r])})(b,h,E),{handleInteraction:M}};function Se(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function be(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Se(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Pe=e=>{var t=e.closest(".im-c-viewport__markers");if(!t)return!1;var r=t.getBoundingClientRect(),{left:n,right:o,top:i,bottom:a}=e.getBoundingClientRect();return o>r.left&&n<r.right&&a>r.top&&i<r.bottom},Ae=(e,t,r)=>{var{x:n,y:o}=e.mapToScreen(r);return{x:n*fe[t],y:o*fe[t]}},_e=(e,t,r,n,o)=>{var i,a,l,s=t[null===(i=e.layer)||void 0===i?void 0:i.id];if(null==s||!s.labelProperty)return null;var c=((e,t)=>{var r,n;return null!==(r=null===(n=e.properties)||void 0===n?void 0:n[t.idProperty])&&void 0!==r?r:e.id})(e,s),u=null==c?null:String(c);if(null==u||r.has(u))return null;r.add(u);var p={id:u,label:null!==(a=null===(l=e.properties)||void 0===l?void 0:l[s.labelProperty])&&void 0!==a?a:u,isMarker:!1,featureId:c,layerId:s.layerId,idProperty:s.idProperty,geometry:e.geometry,properties:e.properties},d=function(e){try{var[t,r,n,o]=Q($(e));return[(t+n)/2,(r+o)/2]}catch(e){return null}}(e);return d&&Object.assign(p,Ae(n,o,d)),p};function Oe(e){var{markers:t,mapSize:r,interactionModes:n,layers:o,mapProvider:l,multiSelect:s,spatialListRegistry:c,eventBus:p,itemsRef:d}=e,f=i(s);f.current=s,a(()=>{var e=()=>{var e=[];null!=n&&n.includes("selectMarker")&&e.push(...((e,t,r)=>{var n=[];for(var o of e.items){var i;if(o.label){var a=null===(i=e.markerRefs)||void 0===i?void 0:i.get(o.id);if(!se(o)&&a&&Pe(a)){var l={id:o.id,label:o.label,isMarker:!0};o.coords&&Object.assign(l,Ae(t,r,o.coords)),n.push(l)}}}return n})(t,l,r)),null!=n&&n.includes("selectFeature")&&o.length>0&&e.push(...((e,t,r)=>{var n=[],o=new Set,i=t.map(e=>e.layerId),a=oe(t),l=e.getVisibleFeatures(i);for(var s of l){var c=_e(s,a,o,e,r);c&&n.push(c)}return n})(l,o,r)),d.current=e,c.notifyItemsChanged("interact")};return e(),p.on(u.MAP_MOVE_END,e),p.on(u.MAP_DATA_CHANGE,e),()=>{p.off(u.MAP_MOVE_END,e),p.off(u.MAP_DATA_CHANGE,e)}},[t,r,n,o,l,s,c,p,d]),a(()=>(c.registerItemProvider("interact",{getItems:()=>({items:d.current,multiselectable:f.current,label:"Map features"})}),()=>{c.unregisterItemProvider("interact")}),[c,d])}function Me(e){var{mapState:t,pluginState:r,services:n,mapProvider:o,spatialListRegistry:l}=e,{markers:s,mapSize:c}=t,{dispatch:p,interactionModes:d,layers:f,multiSelect:y}=r,{eventBus:v}=n,g=i(null),m=i([]);Oe({markers:s,mapSize:c,interactionModes:d,layers:f,mapProvider:o,multiSelect:y,spatialListRegistry:l,eventBus:v,itemsRef:m}),function(e){var{itemsRef:t,eventBus:r,dispatch:n,listboxActiveItemRef:o}=e;a(()=>{var e=e=>{var{id:r}=e;if(null===r)return o.current=null,void n({type:"SET_LISTBOX_ACTIVE",payload:null});var i=t.current.find(e=>e.id===r);if(i){if(i.isMarker)return o.current={id:r,isMarker:!0},void n({type:"SET_LISTBOX_ACTIVE",payload:null});var a={featureId:i.featureId,layerId:i.layerId,idProperty:i.idProperty,geometry:i.geometry};o.current=be(be({id:r,isMarker:!1},a),{},{properties:i.properties}),n({type:"SET_LISTBOX_ACTIVE",payload:a})}};return r.on(u.MAP_SET_ACTIVE_ITEM,e),()=>{r.off(u.MAP_SET_ACTIVE_ITEM,e)}},[t,r,n,o])}({itemsRef:m,eventBus:v,dispatch:p,listboxActiveItemRef:g}),function(e){var{eventBus:t,dispatch:r,listboxActiveItemRef:n,multiSelect:o}=e;a(()=>{var e=()=>{var e=n.current;if(e)if(e.isMarker)r({type:"TOGGLE_SELECTED_MARKERS",payload:{markerId:e.id,multiSelect:o}});else{var{featureId:t,layerId:i,idProperty:a,geometry:l,properties:s}=e;r({type:"TOGGLE_SELECTED_FEATURES",payload:{featureId:t,layerId:i,idProperty:a,geometry:l,properties:s,multiSelect:o,replaceAll:!o}})}};return t.on(u.MAP_SELECT_ITEM,e),()=>{t.off(u.MAP_SELECT_ITEM,e)}},[t,r,n,o])}({eventBus:v,dispatch:p,listboxActiveItemRef:g,multiSelect:y})}var we=e=>{var{mapProvider:t,mapStyle:r,pluginState:n,selectedFeatures:o,events:i,eventBus:s}=e,{layers:c,listboxActiveItem:u}=n,p=l(()=>r?((e,t)=>{var r,n,o,i={};if(!t)return console.warn("[interact] buildStylesMap: mapStyle is null/undefined, cannot build styles"),i;var a=null!==(r=ce[t.mapColorScheme])&&void 0!==r?r:ce.light,l=null!==(n=t.activeColor)&&void 0!==n?n:a.activeColor,s=null!==(o=t.selectedColor)&&void 0!==o?o:a.selectedColor;return e.forEach(e=>{var r=e.activeStroke||l,n=e.selectedStroke||s,o=e.selectedFill||"transparent",a=e.selectedStrokeWidth||3,c=a+6;i[e.layerId]={stroke:le(r,t.id),selectionStroke:le(n,t.id),fill:le(o,t.id),strokeWidth:a,activeStrokeWidth:c}}),i})(c,r):null,[c,r]),d=()=>{var e,r=u?[{featureId:u.featureId,layerId:u.layerId,idProperty:u.idProperty,geometry:u.geometry}]:[];null===(e=t.updateHighlightedFeatures)||void 0===e||e.call(t,o,r,p)};a(()=>{if(t&&p){d();var e=0,r=!1,n=()=>{d(),Date.now()>=e&&(s.off(i.MAP_DATA_CHANGE,n),r=!1)},o=()=>{e=Date.now()+3e3,r||(r=!0,s.on(i.MAP_DATA_CHANGE,n))};return s.on(i.MAP_STYLE_CHANGE,o),s.on(i.MAP_SET_SIZE,o),()=>{s.off(i.MAP_STYLE_CHANGE,o),s.off(i.MAP_SET_SIZE,o),s.off(i.MAP_DATA_CHANGE,n)}}},[o,u,t,p,s])};function ke(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Ie(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ke(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ke(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Te=e=>!("Enter"!==e.key||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey);function Le(e){var t,r,n,{getAppState:o,mapState:i,getPluginState:a,buttonConfig:l,events:s,eventBus:c,handleInteraction:u,clickReadyRef:p}=e,{selectAtTarget:d}=l,f=()=>u(i.crossHair.getDetail()),y=e=>{p.current&&u(e)},{handleKeydown:v,handleKeyup:g}=(t=o().layoutRefs.viewportRef,r=f,n=!1,{handleKeydown:e=>{n=Te(e)&&t.current===e.target},handleKeyup:e=>{Te(e)&&n&&(e.preventDefault(),r())}}),m=((e,t)=>(r,n)=>{var o=t();e.markers.remove("location"),o.dispatch({type:"TOGGLE_SELECTED_FEATURES",payload:Ie({multiSelect:o.multiSelect,addToExisting:n},r)})})(i,a),h=e=>m(e,!0),E=e=>m(e,!1);return document.addEventListener("keydown",v),document.addEventListener("keyup",g),c.on(s.MAP_CLICK,y),c.on("interact:selectFeature",h),c.on("interact:unselectFeature",E),d.onClick=f,()=>{d.onClick=null,document.removeEventListener("keydown",v),document.removeEventListener("keyup",g),c.off(s.MAP_CLICK,y),c.off("interact:selectFeature",h),c.off("interact:unselectFeature",E)}}var Ce=e=>1===(null==e?void 0:e.length)&&e.includes("selectMarker");function De(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Fe(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?De(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Re={ENABLE:(e,t)=>Fe(Fe(Fe({},e),t),{},{enabled:!0}),DISABLE:e=>Fe(Fe({},e),{},{enabled:!1,selectedFeatures:[],selectedMarkers:[],listboxActiveItem:null}),TOGGLE_SELECTED_FEATURES:(e,t)=>{var{featureId:r,multiSelect:n,layerId:o,idProperty:i,addToExisting:a=!0,replaceAll:l=!1,properties:s,geometry:c}=t,u=Array.isArray(e.selectedFeatures)?e.selectedFeatures:[],p=u.findIndex(e=>e.featureId===r&&e.layerId===o);if(!1===a){var d=u.filter((e,t)=>t!==p);return Fe(Fe({},e),{},{selectedFeatures:d})}var f,y={featureId:r,layerId:o,idProperty:i,properties:s,geometry:c};if(n&&!l){var v=[...u];-1===p?v.push(y):v.splice(p,1),f=v}else{f=-1!==p&&1===u.length?[]:[y]}return Fe(Fe({},e),{},{selectedFeatures:f,selectedMarkers:n&&!l?e.selectedMarkers:[]})},TOGGLE_SELECTED_MARKERS:(e,t)=>{var{markerId:r,multiSelect:n}=t,o=e.selectedMarkers,i=o.includes(r);if(n){var a=i?o.filter(e=>e!==r):[...o,r];return Fe(Fe({},e),{},{selectedMarkers:a})}return Fe(Fe({},e),{},{selectedFeatures:[],selectedMarkers:i&&1===o.length?[]:[r]})},CLEAR_SELECTED_FEATURES:e=>Fe(Fe({},e),{},{selectedFeatures:[],selectedMarkers:[]}),SET_SELECTED_FEATURES:(e,t)=>Fe(Fe({},e),{},{selectedFeatures:t}),SELECT_MARKER:(e,t)=>{var{markerId:r,multiSelect:n}=t,o=e.selectedMarkers;if(o.includes(r))return e;var i=n?[...o,r]:[r];return Fe(Fe({},e),{},{selectedFeatures:n?e.selectedFeatures:[],selectedMarkers:i})},UNSELECT_MARKER:(e,t)=>{var{markerId:r}=t,n=e.selectedMarkers;return n.includes(r)?Fe(Fe({},e),{},{selectedMarkers:n.filter(e=>e!==r)}):e},SET_LISTBOX_ACTIVE:(e,t)=>Fe(Fe({},e),{},{listboxActiveItem:null!=t?t:null})},je={tolerance:10,interactionModes:["selectMarker"],multiSelect:!1,contiguous:!1,deselectOnClickOutside:!1,marker:{}};function xe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Be(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?xe(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):xe(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Ge,Ne="Select",He="undefined"!=typeof navigator&&/mac/i.test((null===(Ge=navigator.userAgentData)||void 0===Ge?void 0:Ge.platform)||navigator.platform||"")?"<kbd>Option</kbd>":"<kbd>Alt</kbd>",Ue={InitComponent:e=>{var{appState:t,mapState:r,services:n,buttonConfig:l,mapProvider:s,pluginState:c}=e,{enabled:p,selectedFeatures:d,interactionModes:f,layers:y}=c,{eventBus:v}=n,{crossHair:g,mapStyle:m,markers:h}=r,E=Ce(f);Me({mapState:r,pluginState:c,services:n,mapProvider:s,spatialListRegistry:t.spatialListRegistry});var{handleInteraction:S}=Ee({mapState:r,pluginState:c,services:n,mapProvider:s});return we({mapProvider:s,mapStyle:m,pluginState:c,selectedFeatures:d,events:u,eventBus:v}),a(()=>{v.emit("interact:active",{active:p,interactionModes:f})},[p,f]),function(e){var{enabled:t,interactionModes:r,markers:n,layers:o,eventBus:i}=e;a(()=>{if(t){var e=(null==r?void 0:r.includes("selectMarker"))&&n.items.some(e=>e.label),a=(null==r?void 0:r.includes("selectFeature"))&&o.some(e=>e.labelProperty);(e||a)&&i.emit("interact:listboxcapable")}},[t,r,n,o,i])}({enabled:p,interactionModes:f,markers:h,layers:y,eventBus:v}),((e,t,r,n)=>{a(()=>{var o,i=t&&(null==r?void 0:r.includes("selectFeature"))?n.map(e=>e.layerId):[];return null===(o=e.setHoverCursor)||void 0===o||o.call(e,i),()=>{var t;return null===(t=e.setHoverCursor)||void 0===t?void 0:t.call(e,[])}},[t,r,n])})(s,p,f,y),function(e){var{crossHair:t,enabled:r,selectMarkerOnly:n,appState:l}=e,s=i(r);s.current=r;var c=i(n);c.current=n;var u=i(t);u.current=t;var p=i(!1),d=i(!1),f=i(l.interfaceType);f.current=l.interfaceType;var y=o(()=>{var e,t=f.current,r="keyboard"===t&&d.current,n="touch"===t&&!c.current&&!p.current,o=null===(e=l.expandedButtons)||void 0===e?void 0:e.has("mapControls");s.current&&(r||n||o)?u.current.fixAtCenter():u.current.hide()},[l.expandedButtons]);a(()=>{y()},[r,n,l.interfaceType,l.expandedButtons,y]),a(()=>{var e,t,r=null===(e=l.layoutRefs)||void 0===e||null===(e=e.appContainerRef)||void 0===e?void 0:e.current;if(r){d.current=!(null===(t=document.activeElement)||void 0===t||!t.closest("[data-map-keyboard-scope]"));var n=e=>{var t=!!e.target.closest('[role="listbox"], [role="option"]'),r=!!e.target.closest("[data-map-keyboard-scope]"),n=p.current!==t||d.current!==r;p.current=t,d.current=r,n&&s.current&&y()};return r.addEventListener("focusin",n),()=>{r.removeEventListener("focusin",n)}}},[l.layoutRefs,y])}({crossHair:g,enabled:p,selectMarkerOnly:E,appState:t}),function(e){var{pluginState:t,appState:r,mapState:n,buttonConfig:o,eventBus:l,handleInteraction:s}=e,c=i(s);c.current=s;var p=i(t);p.current=t;var d=i(r);d.current=r;var f=i(!1);a(()=>{f.current=!1;var e=setTimeout(()=>{f.current=!0},0);return()=>clearTimeout(e)},[t.enabled]),a(()=>{if(t.enabled)return Le({getAppState:()=>d.current,mapState:n,getPluginState:()=>p.current,buttonConfig:o,events:u,eventBus:l,handleInteraction:e=>c.current(e),clickReadyRef:f})},[t.enabled,o,l]),a(()=>{if(t.enabled){var e=()=>c.current(n.crossHair.getDetail());return n.crossHair.activate=e,()=>{n.crossHair.activate===e&&(n.crossHair.activate=null)}}},[t.enabled,n.crossHair])}({pluginState:c,appState:t,mapState:r,buttonConfig:l,eventBus:v,handleInteraction:S}),null},reducer:{initialState:{enabled:!1,layers:[],marker:null,interactionModes:null,multiSelect:!1,deselectOnClickOutside:!1,selectedFeatures:[],selectedMarkers:[],closeOnAction:!0,listboxActiveItem:null},actions:Re},buttons:[{id:"selectAtTarget",label:"Select",variant:"primary",hiddenWhen:e=>{var{appState:t,pluginState:r}=e;return!r.enabled||"touch"!==t.interfaceType||Ce(r.interactionModes)},mobile:{slot:"actions"},tablet:{slot:"actions"},desktop:{slot:"actions"}}],keyboardShortcuts:[{id:"clickAtTarget",title:"Click at target",command:"<kbd>Enter</kbd>"},{id:"selectFeatures",group:Ne,context:"listbox",title:"Select features",command:"<kbd>Tab</kbd>"},{id:"navigateFeatures",group:Ne,context:"listbox",title:"Highlight next feature",command:"<kbd>↑</kbd> or <kbd>↓</kbd>"},{id:"navigateFeaturesSpatially",group:Ne,context:"listbox",title:"Highlight nearby feature",command:"".concat(He," + <kbd>↑</kbd>, <kbd>↓</kbd>, <kbd>←</kbd> or <kbd>→</kbd>")},{id:"selectFeature",group:Ne,context:"listbox",title:"Select a feature",command:"<kbd>Enter</kbd> or <kbd>Space</kbd>"},{id:"dismissHintOrReturn",group:Ne,context:"listbox",title:"Dismiss hint / return to map",command:"<kbd>Escape</kbd>"}],icons:[{id:"select",svgContent:'<path d="M22 14a8 8 0 0 1-8 8"/><path d="M18 11v-1a2 2 0 0 0-2-2a2 2 0 0 0-2 2"/><path d="M14 10V9a2 2 0 0 0-2-2a2 2 0 0 0-2 2v1"/><path d="M10 9.5V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v10"/><path d="M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"/>'}],api:{enable:(e,t)=>{var{pluginState:r,pluginConfig:n}=e;r.dispatch({type:"ENABLE",payload:Be(Be(Be({},je),n),t)})},disable:e=>{var{pluginState:t}=e;t.dispatch({type:"DISABLE"})},clear:e=>{var{pluginState:t,mapState:r}=e;t.dispatch({type:"CLEAR_SELECTED_FEATURES"}),r.markers.remove("location")},selectFeature:(e,t)=>{var{services:r}=e,{featureId:n,layerId:o,idProperty:i}=t;r.eventBus.emit("interact:selectFeature",{featureId:n,layerId:o,idProperty:i})},unselectFeature:(e,t)=>{var{services:r}=e,{featureId:n,layerId:o,idProperty:i}=t;r.eventBus.emit("interact:unselectFeature",{featureId:n,layerId:o,idProperty:i})},selectMarker:(e,t)=>{var{pluginState:r}=e;r.dispatch({type:"SELECT_MARKER",payload:{markerId:t,multiSelect:r.multiSelect}})},unselectMarker:(e,t)=>{var{pluginState:r}=e;r.dispatch({type:"UNSELECT_MARKER",payload:{markerId:t}})}}};export{Ue as manifest};
|