@defra/interactive-map 0.0.16-alpha → 0.0.18-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/images/slot-map.svg +264 -0
- 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/context.md +53 -7
- package/docs/api/map-style-config.md +41 -2
- package/docs/api/marker-config.md +53 -11
- package/docs/api/slots.md +16 -15
- package/docs/api/symbol-config.md +160 -0
- package/docs/api/symbol-registry.md +115 -0
- package/docs/api.md +25 -22
- package/docs/getting-started.md +4 -1
- package/docs/plugins/datasets.md +657 -0
- package/docs/plugins/interact.md +68 -43
- package/docs/plugins/search.md +15 -3
- package/docs/plugins.md +1 -1
- package/package.json +2 -2
- package/plugins/beta/datasets/dist/css/index.css +103 -15
- package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +1 -1
- package/plugins/beta/datasets/dist/esm/index.js +1 -1
- package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +1 -1
- package/plugins/beta/datasets/dist/umd/index.js +1 -1
- package/plugins/beta/datasets/src/DatasetsInit.jsx +29 -9
- package/plugins/beta/datasets/src/adapters/maplibre/index.js +18 -0
- package/plugins/beta/datasets/src/adapters/maplibre/layerBuilders.js +159 -0
- package/plugins/beta/datasets/src/adapters/maplibre/layerIds.js +75 -0
- package/plugins/beta/datasets/src/adapters/maplibre/maplibreLayerAdapter.js +440 -0
- package/plugins/beta/datasets/src/adapters/maplibre/patternImages.js +27 -0
- package/plugins/beta/datasets/src/adapters/maplibre/symbolImages.js +31 -0
- package/plugins/beta/datasets/src/api/addDataset.js +2 -8
- package/plugins/beta/datasets/src/api/getOpacity.js +17 -0
- package/plugins/beta/datasets/src/api/getStyle.js +13 -0
- package/plugins/beta/datasets/src/api/removeDataset.js +2 -44
- package/plugins/beta/datasets/src/api/setData.js +10 -0
- package/plugins/beta/datasets/src/api/setDatasetVisibility.js +37 -0
- package/plugins/beta/datasets/src/api/setFeatureVisibility.js +22 -0
- package/plugins/beta/datasets/src/api/setOpacity.js +29 -0
- package/plugins/beta/datasets/src/api/setStyle.js +22 -0
- package/plugins/beta/datasets/src/components/EmptyKey.jsx +7 -0
- package/plugins/beta/datasets/src/components/EmptyKey.test.jsx +21 -0
- package/plugins/beta/datasets/src/components/KeySvg.jsx +24 -0
- package/plugins/beta/datasets/src/components/KeySvgLine.jsx +19 -0
- package/plugins/beta/datasets/src/components/KeySvgPattern.jsx +15 -0
- package/plugins/beta/datasets/src/components/KeySvgRect.jsx +22 -0
- package/plugins/beta/datasets/src/components/KeySvgSymbol.jsx +16 -0
- package/plugins/beta/datasets/src/components/svgProperties.js +20 -0
- package/plugins/beta/datasets/src/datasets.js +39 -56
- package/plugins/beta/datasets/src/defaults.js +44 -8
- package/plugins/beta/datasets/src/fetch/createDynamicSource.js +34 -25
- package/plugins/beta/datasets/src/fetch/fetchGeoJSON.js +2 -2
- package/plugins/beta/datasets/src/index.js +2 -1
- package/plugins/beta/datasets/src/manifest.js +25 -17
- package/plugins/beta/datasets/src/panels/Key.jsx +51 -51
- package/plugins/beta/datasets/src/panels/Key.module.scss +59 -9
- package/plugins/beta/datasets/src/panels/Layers.jsx +132 -29
- package/plugins/beta/datasets/src/panels/Layers.module.scss +56 -8
- package/plugins/beta/datasets/src/reducer.js +134 -9
- package/plugins/beta/datasets/src/reducers/keyReducer.js +34 -0
- package/plugins/beta/datasets/src/utils/bbox.js +7 -5
- package/plugins/beta/datasets/src/utils/filters.js +5 -2
- package/plugins/beta/datasets/src/utils/mergeSublayer.js +86 -0
- package/plugins/beta/draw-es/dist/esm/im-draw-es-plugin.js +1 -1
- package/plugins/beta/draw-es/src/DrawInit.jsx +3 -2
- package/plugins/beta/draw-ml/dist/css/index.css +21 -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-ml/dist/umd/index.js +1 -1
- package/plugins/beta/draw-ml/src/DrawInit.jsx +4 -3
- package/plugins/beta/draw-ml/src/draw.scss +0 -7
- package/plugins/beta/draw-ml/src/manifest.js +16 -16
- package/plugins/beta/frame/dist/esm/im-frame-plugin.js +1 -1
- package/plugins/beta/frame/dist/umd/im-frame-plugin.js +1 -1
- package/plugins/beta/frame/src/Frame.jsx +5 -5
- package/plugins/beta/map-styles/dist/esm/im-map-styles-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/beta/map-styles/src/MapStyles.jsx +5 -4
- package/plugins/beta/map-styles/src/MapStylesInit.jsx +5 -4
- package/plugins/beta/map-styles/src/manifest.js +1 -1
- package/plugins/beta/scale-bar/dist/css/index.css +1 -1
- package/plugins/beta/scale-bar/dist/esm/im-scale-bar-plugin.js +1 -1
- package/plugins/beta/scale-bar/dist/umd/im-scale-bar-plugin.js +1 -1
- package/plugins/beta/scale-bar/src/index.test.js +3 -3
- package/plugins/beta/scale-bar/src/manifest.js +3 -3
- package/plugins/beta/scale-bar/src/scaleBar.scss +2 -1
- package/plugins/interact/dist/css/index.css +1 -1
- 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 +14 -5
- package/plugins/interact/src/InteractInit.test.js +26 -6
- package/plugins/interact/src/api/enable.test.js +7 -7
- package/plugins/interact/src/defaults.js +4 -6
- package/plugins/interact/src/events.js +9 -6
- package/plugins/interact/src/events.test.js +28 -4
- package/plugins/interact/src/hooks/useHighlightSync.js +3 -3
- package/plugins/interact/src/hooks/useHighlightSync.test.js +6 -6
- package/plugins/interact/src/hooks/useHoverCursor.js +10 -0
- package/plugins/interact/src/hooks/useHoverCursor.test.js +44 -0
- package/plugins/interact/src/hooks/useInteractionHandlers.js +111 -69
- package/plugins/interact/src/hooks/useInteractionHandlers.test.js +147 -32
- package/plugins/interact/src/interact.scss +0 -7
- package/plugins/interact/src/manifest.js +14 -18
- package/plugins/interact/src/manifest.test.js +3 -1
- package/plugins/interact/src/reducer.js +23 -4
- package/plugins/interact/src/reducer.test.js +60 -11
- package/plugins/interact/src/utils/buildStylesMap.js +17 -4
- package/plugins/interact/src/utils/buildStylesMap.test.js +16 -2
- package/plugins/interact/src/utils/featureQueries.js +11 -6
- package/plugins/interact/src/utils/featureQueries.test.js +8 -1
- package/plugins/search/dist/css/index.css +1 -1
- package/plugins/search/dist/esm/im-search-plugin.js +1 -1
- package/plugins/search/dist/umd/im-search-plugin.js +1 -1
- package/plugins/search/src/Search.jsx +3 -1
- package/plugins/search/src/components/Form/Form.module.scss +2 -1
- package/plugins/search/src/events/fetchSuggestions.js +6 -4
- package/plugins/search/src/events/fetchSuggestions.test.js +26 -4
- package/plugins/search/src/events/formHandlers.js +3 -3
- package/plugins/search/src/events/formHandlers.test.js +1 -1
- package/plugins/search/src/events/suggestionHandlers.js +2 -2
- package/plugins/search/src/events/suggestionHandlers.test.js +1 -1
- package/plugins/search/src/utils/updateMap.js +3 -3
- package/plugins/search/src/utils/updateMap.test.js +3 -3
- package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
- package/providers/maplibre/dist/umd/im-maplibre-framework.js +1 -1
- package/providers/maplibre/dist/umd/im-maplibre-framework.js.LICENSE.txt +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/appEvents.js +7 -0
- package/providers/maplibre/src/appEvents.test.js +18 -4
- package/providers/maplibre/src/maplibreProvider.js +52 -0
- package/providers/maplibre/src/maplibreProvider.test.js +105 -1
- package/providers/maplibre/src/utils/highlightFeatures.js +37 -7
- package/providers/maplibre/src/utils/highlightFeatures.test.js +153 -95
- package/providers/maplibre/src/utils/hoverCursor.js +61 -0
- package/providers/maplibre/src/utils/hoverCursor.test.js +130 -0
- package/providers/maplibre/src/utils/patternImages.js +70 -0
- package/providers/maplibre/src/utils/patternImages.test.js +180 -0
- package/providers/maplibre/src/utils/queryFeatures.js +38 -16
- package/providers/maplibre/src/utils/queryFeatures.test.js +20 -3
- package/providers/maplibre/src/utils/rasteriseToImageData.js +30 -0
- package/providers/maplibre/src/utils/rasteriseToImageData.test.js +69 -0
- package/providers/maplibre/src/utils/symbolImages.js +147 -0
- package/providers/maplibre/src/utils/symbolImages.test.js +248 -0
- package/src/App/components/Actions/Actions.jsx +2 -2
- package/src/App/components/Actions/Actions.module.scss +0 -7
- package/src/App/components/Actions/Actions.test.jsx +1 -1
- package/src/App/components/Icon/Icon.jsx +3 -2
- package/src/App/components/Icon/Icon.module.scss +4 -0
- package/src/App/components/Icon/Icon.test.jsx +43 -4
- package/src/App/components/MapButton/MapButton.jsx +42 -17
- package/src/App/components/MapButton/MapButton.module.scss +4 -13
- package/src/App/components/MapButton/MapButton.test.jsx +27 -3
- package/src/App/components/Markers/Markers.jsx +122 -27
- package/src/App/components/Markers/Markers.module.scss +0 -10
- package/src/App/components/Markers/Markers.test.jsx +246 -0
- package/src/App/components/PopupMenu/PopupMenu.jsx +51 -274
- package/src/App/components/PopupMenu/PopupMenu.module.scss +14 -7
- package/src/App/components/PopupMenu/PopupMenu.test.jsx +70 -1
- package/src/App/components/PopupMenu/usePopupMenu.js +258 -0
- package/src/App/hooks/useButtonStateEvaluator.js +12 -2
- package/src/App/hooks/useButtonStateEvaluator.test.js +38 -4
- package/src/App/hooks/useInterfaceAPI.js +6 -0
- package/src/App/hooks/useInterfaceAPI.test.js +156 -0
- package/src/App/hooks/useLayoutMeasurements.js +84 -18
- package/src/App/hooks/useLayoutMeasurements.test.js +124 -17
- package/src/App/hooks/useMarkersAPI.js +2 -5
- package/src/App/hooks/useMarkersAPI.test.js +4 -4
- package/src/App/layout/Layout.jsx +14 -9
- package/src/App/layout/Layout.test.jsx +6 -4
- package/src/App/layout/layout.module.scss +67 -29
- package/src/App/registry/pluginRegistry.js +1 -1
- package/src/App/renderer/HtmlElementHost.jsx +2 -1
- package/src/App/renderer/HtmlElementHost.test.jsx +7 -7
- package/src/App/renderer/mapButtons.js +1 -1
- package/src/App/renderer/mapPanels.test.js +2 -2
- package/src/App/renderer/slotHelpers.js +2 -2
- package/src/App/renderer/slotHelpers.test.js +5 -5
- package/src/App/renderer/slots.js +9 -5
- package/src/App/store/AppProvider.jsx +3 -1
- package/src/App/store/AppProvider.test.jsx +1 -1
- package/src/App/store/ServiceProvider.jsx +8 -4
- package/src/App/store/appActionsMap.js +16 -0
- package/src/App/store/appActionsMap.test.js +27 -0
- package/src/App/store/appDispatchMiddleware.js +1 -1
- package/src/App/store/appDispatchMiddleware.test.js +2 -2
- package/src/App/store/appReducer.js +2 -0
- package/src/App/store/mapActionsMap.js +4 -6
- package/src/App/store/mapActionsMap.test.js +3 -2
- package/src/App/store/mapReducer.js +2 -1
- package/src/InteractiveMap/InteractiveMap.js +4 -0
- package/src/config/appConfig.js +5 -8
- package/src/config/appConfig.test.js +1 -2
- package/src/config/defaults.js +0 -2
- package/src/config/events.js +28 -0
- package/src/config/mapTheme.js +56 -0
- package/src/config/patternConfig.js +16 -0
- package/src/config/symbolConfig.js +80 -0
- package/src/scss/main.scss +1 -0
- package/src/scss/settings/_colors.scss +0 -9
- package/src/scss/settings/_dimensions.scss +0 -1
- package/src/services/patternRegistry.js +40 -0
- package/src/services/patternRegistry.test.js +48 -0
- package/src/services/symbolRegistry.js +113 -0
- package/src/services/symbolRegistry.test.js +262 -0
- package/src/types.js +93 -11
- package/src/utils/getSafeZoneInset.js +9 -7
- package/src/utils/getSafeZoneInset.test.js +10 -10
- package/src/utils/patternUtils.js +94 -0
- package/src/utils/patternUtils.test.js +160 -0
- package/src/utils/symbolUtils.js +85 -0
- package/src/utils/symbolUtils.test.js +156 -0
- package/webpack.dev.mjs +1 -1
- package/docs/api/slot-map.svg +0 -1
- package/plugins/beta/datasets/src/api/hideDataset.js +0 -14
- package/plugins/beta/datasets/src/api/hideFeatures.js +0 -41
- package/plugins/beta/datasets/src/api/showDataset.js +0 -14
- package/plugins/beta/datasets/src/api/showFeatures.js +0 -44
- package/plugins/beta/datasets/src/handleSetMapStyle.js +0 -54
- package/plugins/beta/datasets/src/mapLayers.js +0 -164
- /package/src/{utils → services}/logger.js +0 -0
- /package/src/{utils → services}/logger.test.js +0 -0
package/docs/plugins/interact.md
CHANGED
|
@@ -8,9 +8,9 @@ The interact plugin provides a unified way to handle user interactions for selec
|
|
|
8
8
|
import createInteractPlugin from '@defra/interactive-map/plugins/interact'
|
|
9
9
|
|
|
10
10
|
const interactPlugin = createInteractPlugin({
|
|
11
|
-
|
|
11
|
+
interactionModes: ['selectMarker', 'selectFeature'],
|
|
12
12
|
multiSelect: true,
|
|
13
|
-
|
|
13
|
+
layers: [
|
|
14
14
|
{ layerId: 'my-layer', idProperty: 'id' }
|
|
15
15
|
]
|
|
16
16
|
})
|
|
@@ -40,40 +40,61 @@ Array of mode identifiers. When set, the plugin does not render when the app is
|
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
43
|
-
### `
|
|
44
|
-
**Type:** `'
|
|
45
|
-
**Default:** `'
|
|
43
|
+
### `interactionModes`
|
|
44
|
+
**Type:** `Array<'selectMarker' | 'selectFeature' | 'placeMarker'>`
|
|
45
|
+
**Default:** `['selectMarker']`
|
|
46
46
|
|
|
47
|
-
Controls
|
|
47
|
+
Controls which interactions are active when the user clicks the map. Values can be combined freely — the plugin always processes them in a fixed priority order: marker selection → feature selection → place marker.
|
|
48
48
|
|
|
49
|
-
- `'
|
|
50
|
-
- `'
|
|
51
|
-
- `'
|
|
49
|
+
- `'selectMarker'` — clicking a placed marker toggles its selection state
|
|
50
|
+
- `'selectFeature'` — clicking the map attempts to match a feature from `layers`
|
|
51
|
+
- `'placeMarker'` — if no feature is matched (or `selectFeature` is not active), places a location marker at the clicked coordinates
|
|
52
|
+
|
|
53
|
+
**Common combinations:**
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
interactionModes: ['selectMarker'] // marker selection only (default)
|
|
57
|
+
interactionModes: ['selectFeature'] // feature selection only
|
|
58
|
+
interactionModes: ['placeMarker'] // always place a marker on click
|
|
59
|
+
interactionModes: ['selectMarker', 'selectFeature'] // select markers or features
|
|
60
|
+
interactionModes: ['selectFeature', 'placeMarker'] // select features, fall back to placing a marker
|
|
61
|
+
interactionModes: ['selectMarker', 'selectFeature', 'placeMarker'] // all interactions active
|
|
62
|
+
```
|
|
52
63
|
|
|
53
64
|
---
|
|
54
65
|
|
|
55
|
-
### `
|
|
56
|
-
**Type:** `Array<
|
|
66
|
+
### `layers`
|
|
67
|
+
**Type:** `Array<LayerConfig>`
|
|
57
68
|
**Default:** `[]`
|
|
58
69
|
|
|
59
70
|
Array of map layer configurations that are selectable. Each entry specifies which layer to watch and how to identify features.
|
|
60
71
|
|
|
61
72
|
```js
|
|
62
|
-
|
|
63
|
-
{ layerId: 'my-polygons', idProperty: '
|
|
73
|
+
layers: [
|
|
74
|
+
{ layerId: 'my-polygons', idProperty: 'guid' },
|
|
64
75
|
{ layerId: 'my-lines' }
|
|
65
76
|
]
|
|
66
77
|
```
|
|
67
78
|
|
|
68
|
-
#### `
|
|
79
|
+
#### `LayerConfig` properties
|
|
69
80
|
|
|
70
81
|
| Property | Type | Description |
|
|
71
82
|
|----------|------|-------------|
|
|
72
83
|
| `layerId` | `string` | **Required.** The map layer identifier to enable selection on |
|
|
73
84
|
| `idProperty` | `string` | Property name used as the feature's unique identifier. If omitted, features are matched by index |
|
|
74
|
-
| `selectedStroke` | `string` | Overrides the
|
|
75
|
-
| `selectedFill` | `string` | Overrides the
|
|
76
|
-
| `selectedStrokeWidth` | `number` | Overrides the
|
|
85
|
+
| `selectedStroke` | `string` | Overrides the selection stroke colour for this layer. Defaults to `MapStyleConfig.selectedColor` |
|
|
86
|
+
| `selectedFill` | `string` | Overrides the selection fill colour for this layer. Defaults to `transparent` |
|
|
87
|
+
| `selectedStrokeWidth` | `number` | Overrides the selection stroke width for this layer. Defaults to `3` |
|
|
88
|
+
|
|
89
|
+
#### Finding layer IDs
|
|
90
|
+
|
|
91
|
+
What to use as `layerId` depends on how your data is added to the map — these are the layers the plugin will enable for feature selection:
|
|
92
|
+
|
|
93
|
+
- **Map provider directly** — use the layer IDs defined in your style or added via your map provider's layer API
|
|
94
|
+
- **Datasets plugin** — use the dataset ID, or the sublayer ID for datasets with sublayers
|
|
95
|
+
- **Draw plugin** — uses generated layer IDs; inspect the map at runtime to find them (e.g. `fill-inactive.cold`, `stroke-inactive.cold` when using MapLibre)
|
|
96
|
+
|
|
97
|
+
If you're unsure of the layer IDs available at runtime, set `debug: true` in the interact plugin options — this lets you query the map and inspect layer names in the browser console.
|
|
77
98
|
|
|
78
99
|
---
|
|
79
100
|
|
|
@@ -97,7 +118,7 @@ When `true`, only features that touch or overlap the existing selection can be a
|
|
|
97
118
|
**Type:** `boolean`
|
|
98
119
|
**Default:** `false`
|
|
99
120
|
|
|
100
|
-
When `true`, clicking outside any selectable
|
|
121
|
+
When `true`, clicking outside any selectable feature clears the current selection.
|
|
101
122
|
|
|
102
123
|
---
|
|
103
124
|
|
|
@@ -105,7 +126,7 @@ When `true`, clicking outside any selectable layer clears the current selection.
|
|
|
105
126
|
**Type:** `number`
|
|
106
127
|
**Default:** `10`
|
|
107
128
|
|
|
108
|
-
Click detection radius in pixels
|
|
129
|
+
Click detection radius in pixels applied to line features. Lines have a 1px rendered width so a buffer is required for reliable selection. Polygon and symbol/icon features use exact hit detection and are unaffected by this value.
|
|
109
130
|
|
|
110
131
|
---
|
|
111
132
|
|
|
@@ -117,35 +138,32 @@ When `true`, the app closes after the user clicks "Done" or "Cancel".
|
|
|
117
138
|
|
|
118
139
|
---
|
|
119
140
|
|
|
120
|
-
### `
|
|
121
|
-
**Type:** `
|
|
122
|
-
**Default:** `'rgba(212,53,28,1)'`
|
|
123
|
-
|
|
124
|
-
Color of the location marker placed on the map.
|
|
125
|
-
|
|
126
|
-
---
|
|
141
|
+
### `marker`
|
|
142
|
+
**Type:** `MarkerOptions`
|
|
127
143
|
|
|
128
|
-
|
|
129
|
-
**Type:** `string`
|
|
130
|
-
**Default:** `'rgba(212,53,28,1)'`
|
|
144
|
+
Appearance of the location marker placed on the map. Accepts the same properties as [`MarkerOptions`](../api/marker-config.md#markeroptions). See [Symbol Config](../api/symbol-config.md) for the full property reference.
|
|
131
145
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
146
|
+
```js
|
|
147
|
+
createInteractPlugin({
|
|
148
|
+
marker: {
|
|
149
|
+
symbol: 'pin',
|
|
150
|
+
backgroundColor: { outdoor: '#d4351c', dark: '#ff6b6b' },
|
|
151
|
+
foregroundColor: '#ffffff'
|
|
152
|
+
}
|
|
153
|
+
})
|
|
154
|
+
```
|
|
139
155
|
|
|
140
|
-
|
|
156
|
+
When not set, the marker inherits from the constructor `symbolDefaults` cascade.
|
|
141
157
|
|
|
142
158
|
---
|
|
143
159
|
|
|
144
160
|
### `selectedStrokeWidth`
|
|
145
161
|
**Type:** `number`
|
|
146
|
-
**Default:** `
|
|
162
|
+
**Default:** `3`
|
|
163
|
+
|
|
164
|
+
Stroke width used to highlight selected features. Can be overridden per layer via `layers[].selectedStrokeWidth`.
|
|
147
165
|
|
|
148
|
-
|
|
166
|
+
> **Selection colours** — stroke and fill colours for selected features are not configured here. Stroke colour comes from `MapStyleConfig.selectedColor` (falling back to the `mapColorScheme` scheme default), ensuring the selection colour stays consistent with the rest of the map theme. Fill defaults to `transparent`. Both can be overridden per layer via `layers[].selectedStroke` and `layers[].selectedFill`.
|
|
149
167
|
|
|
150
168
|
---
|
|
151
169
|
|
|
@@ -169,7 +187,7 @@ interactiveMap.on('map:ready', () => {
|
|
|
169
187
|
})
|
|
170
188
|
|
|
171
189
|
// Override options at runtime
|
|
172
|
-
interactPlugin.enable({ multiSelect: true,
|
|
190
|
+
interactPlugin.enable({ multiSelect: true, interactionModes: ['selectFeature'] })
|
|
173
191
|
```
|
|
174
192
|
|
|
175
193
|
---
|
|
@@ -247,12 +265,15 @@ Emitted when the user confirms their selection (clicks "Done").
|
|
|
247
265
|
**Payload:**
|
|
248
266
|
```js
|
|
249
267
|
{
|
|
250
|
-
// If a marker was placed:
|
|
268
|
+
// If a location marker was placed:
|
|
251
269
|
coords: [lng, lat],
|
|
252
270
|
|
|
253
271
|
// If features were selected:
|
|
254
272
|
selectedFeatures: [...],
|
|
255
|
-
selectionBounds: [west, south, east, north]
|
|
273
|
+
selectionBounds: [west, south, east, north],
|
|
274
|
+
|
|
275
|
+
// If markers were selected:
|
|
276
|
+
selectedMarkers: ['...']
|
|
256
277
|
}
|
|
257
278
|
```
|
|
258
279
|
|
|
@@ -264,6 +285,9 @@ interactiveMap.on('interact:done', (e) => {
|
|
|
264
285
|
if (e.selectedFeatures) {
|
|
265
286
|
console.log('Features selected:', e.selectedFeatures)
|
|
266
287
|
}
|
|
288
|
+
if (e.selectedMarkers) {
|
|
289
|
+
console.log('Markers selected:', e.selectedMarkers)
|
|
290
|
+
}
|
|
267
291
|
})
|
|
268
292
|
```
|
|
269
293
|
|
|
@@ -285,7 +309,7 @@ interactiveMap.on('interact:cancel', () => {
|
|
|
285
309
|
|
|
286
310
|
### `interact:selectionchange`
|
|
287
311
|
|
|
288
|
-
Emitted whenever the
|
|
312
|
+
Emitted whenever the selected features or selected markers change.
|
|
289
313
|
|
|
290
314
|
**Payload:**
|
|
291
315
|
```js
|
|
@@ -293,6 +317,7 @@ Emitted whenever the feature selection changes.
|
|
|
293
317
|
selectedFeatures: [
|
|
294
318
|
{ featureId: '...', layerId: '...', properties: {...}, geometry: {...} }
|
|
295
319
|
],
|
|
320
|
+
selectedMarkers: ['...'], // array of selected marker IDs
|
|
296
321
|
selectionBounds: [west, south, east, north] | null,
|
|
297
322
|
canMerge: boolean, // true when all selected features are contiguous
|
|
298
323
|
canSplit: boolean // true when exactly one Polygon or MultiPolygon is selected
|
package/docs/plugins/search.md
CHANGED
|
@@ -90,10 +90,22 @@ Whether to place a marker on the map when a search result is selected.
|
|
|
90
90
|
|
|
91
91
|
---
|
|
92
92
|
|
|
93
|
-
### `
|
|
94
|
-
**Type:** `
|
|
93
|
+
### `marker`
|
|
94
|
+
**Type:** `MarkerOptions`
|
|
95
|
+
|
|
96
|
+
Appearance of the marker placed when a search result is selected. Accepts the same properties as [`MarkerOptions`](../api/marker-config.md#markeroptions). See [Symbol Config](../api/symbol-config.md) for the full property reference.
|
|
97
|
+
|
|
98
|
+
```js
|
|
99
|
+
searchPlugin({
|
|
100
|
+
showMarker: true,
|
|
101
|
+
marker: {
|
|
102
|
+
symbol: 'circle',
|
|
103
|
+
backgroundColor: { outdoor: '#1d70b8', dark: '#5694ca' }
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
```
|
|
95
107
|
|
|
96
|
-
|
|
108
|
+
When not set, the marker inherits from the constructor `symbolDefaults` cascade.
|
|
97
109
|
|
|
98
110
|
---
|
|
99
111
|
|
package/docs/plugins.md
CHANGED
|
@@ -28,7 +28,7 @@ Location search plugin with autocomplete functionality. Include custom datasets
|
|
|
28
28
|
|
|
29
29
|
The following plugins are in early development. APIs and features may change.
|
|
30
30
|
|
|
31
|
-
### Datasets
|
|
31
|
+
### [Datasets](./plugins/datasets.md)
|
|
32
32
|
|
|
33
33
|
Add datasets to your map, configure the display, layer toggling and render a key of symbology.
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/interactive-map",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18-alpha",
|
|
4
4
|
"description": "An accessible map component",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"@turf/polygon-to-line": "^7.3.3",
|
|
219
219
|
"accessible-autocomplete": "^3.0.1",
|
|
220
220
|
"govuk-frontend": "^5.13.0",
|
|
221
|
-
"maplibre-gl": "^5.
|
|
221
|
+
"maplibre-gl": "^5.21.1",
|
|
222
222
|
"polygon-splitter": "^0.0.11",
|
|
223
223
|
"preact": "^10.27.2",
|
|
224
224
|
"tslib": "^2.8.1"
|
|
@@ -1,25 +1,97 @@
|
|
|
1
|
-
.im-c-datasets-
|
|
1
|
+
.im-c-datasets-key > *:first-child {
|
|
2
|
+
padding-top: 5px;
|
|
3
|
+
}
|
|
4
|
+
.im-c-datasets-key > *:first-child .im-c-datasets-key__group-heading {
|
|
5
|
+
padding-top: 0;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.im-c-datasets-key--has-groups > *:not(:first-child) {
|
|
9
|
+
border-top: 1px solid var(--button-hover-color);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.im-c-datasets-key__group:not(:last-child) {
|
|
13
|
+
padding-bottom: 5px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.im-c-datasets-key__group-heading {
|
|
17
|
+
padding-top: 15px;
|
|
18
|
+
padding-bottom: 10px;
|
|
19
|
+
margin: 0;
|
|
20
|
+
font-size: 1rem;
|
|
21
|
+
font-weight: bold;
|
|
22
|
+
color: var(--foreground-color);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.im-c-datasets-key__item {
|
|
2
26
|
display: flex;
|
|
3
27
|
align-items: start;
|
|
4
|
-
padding-top:
|
|
5
|
-
padding-bottom:
|
|
6
|
-
align-self: auto;
|
|
28
|
+
padding-top: 10px;
|
|
29
|
+
padding-bottom: 10px;
|
|
7
30
|
font-size: 1rem;
|
|
8
|
-
|
|
31
|
+
}
|
|
32
|
+
.im-c-datasets-key__group .im-c-datasets-key__item:first-child {
|
|
33
|
+
padding-top: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.im-c-datasets-key--has-groups > .im-c-datasets-key__item:not(:first-child) {
|
|
37
|
+
padding-top: 15px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.im-c-datasets-key--has-groups > .im-c-datasets-key__item {
|
|
41
|
+
padding-bottom: 15px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.im-c-datasets-key__group .im-c-datasets-key__item {
|
|
45
|
+
padding-top: 10px;
|
|
46
|
+
padding-bottom: 10px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.im-c-datasets-key > .im-c-datasets-key__item:last-child,
|
|
50
|
+
.im-c-datasets-key__group:last-child .im-c-datasets-key__item:last-child {
|
|
51
|
+
padding-bottom: 5px;
|
|
9
52
|
}
|
|
10
53
|
|
|
11
|
-
.
|
|
54
|
+
.am-c-datasets-key-symbol {
|
|
12
55
|
position: relative;
|
|
13
56
|
flex-shrink: 0;
|
|
14
|
-
margin:
|
|
57
|
+
margin: 0 13px 0 2px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.am-c-datasets-key-symbol--point {
|
|
61
|
+
margin: -9px 3px -9px -7px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.im-c-datasets-layers--has-groups > *:not(:first-child) {
|
|
65
|
+
border-top: 1px solid var(--button-hover-color);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.im-c-datasets-layers > *:first-child {
|
|
69
|
+
padding-top: 5px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.im-c-datasets-layers > *:last-child {
|
|
73
|
+
margin-bottom: -5px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.im-c-datasets-layers-group:not(:last-child) {
|
|
77
|
+
padding-bottom: 5px;
|
|
15
78
|
}
|
|
16
79
|
|
|
17
80
|
.im-c-datasets-layers__item {
|
|
18
|
-
|
|
19
|
-
|
|
81
|
+
padding-bottom: 5px;
|
|
82
|
+
}
|
|
83
|
+
.im-c-datasets-layers__item:first-child {
|
|
84
|
+
padding-top: 0;
|
|
85
|
+
}
|
|
86
|
+
.im-c-datasets-layers--has-groups > .im-c-datasets-layers__item:not(:first-child) {
|
|
87
|
+
padding-top: 5px;
|
|
20
88
|
}
|
|
21
|
-
.im-c-datasets-
|
|
22
|
-
|
|
89
|
+
.im-c-datasets-layers-group .im-c-datasets-layers__item {
|
|
90
|
+
padding-top: 0;
|
|
91
|
+
padding-bottom: 0;
|
|
92
|
+
}
|
|
93
|
+
.im-c-datasets-layers-group .im-c-datasets-layers__item:not(:last-child) {
|
|
94
|
+
margin-bottom: 0;
|
|
23
95
|
}
|
|
24
96
|
|
|
25
97
|
.im-c-datasets-layers__item-label {
|
|
@@ -34,10 +106,6 @@
|
|
|
34
106
|
color: var(--foreground-color);
|
|
35
107
|
}
|
|
36
108
|
|
|
37
|
-
.im-c-datasets-layers__item--checked {
|
|
38
|
-
border-color: var(--app-border-color);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
109
|
.im-c-datasets-layers__item .govuk-checkboxes__item {
|
|
42
110
|
flex-wrap: nowrap;
|
|
43
111
|
}
|
|
@@ -45,6 +113,26 @@
|
|
|
45
113
|
margin-left: -3px;
|
|
46
114
|
}
|
|
47
115
|
|
|
116
|
+
.im-c-datasets-layers-group__fieldset {
|
|
117
|
+
border: none;
|
|
118
|
+
padding: 0;
|
|
119
|
+
margin: 0;
|
|
120
|
+
min-width: 0;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.im-c-datasets-layers-group__legend {
|
|
124
|
+
padding-top: 15px;
|
|
125
|
+
padding-bottom: 10px;
|
|
126
|
+
padding-inline: 0;
|
|
127
|
+
font-size: 1rem;
|
|
128
|
+
font-weight: bold;
|
|
129
|
+
color: var(--foreground-color);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.im-c-datasets-layers-group:first-child .im-c-datasets-layers-group__legend {
|
|
133
|
+
padding-top: 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
48
136
|
.im-c-datasets {
|
|
49
137
|
display: block;
|
|
50
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useRef as e,useEffect as t}from"preact/compat";import{jsx as r,jsxs as a}from"preact/jsx-runtime";import i from"@babel/runtime/helpers/objectWithoutProperties";import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/asyncToGenerator";function n(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t);if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function d(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var u={SET_DATASETS:(e,t)=>{var{datasets:r,datasetDefaults:a}=t;return d(d({},e),{},{datasets:r.map(e=>d(d({},a),e))})},ADD_DATASET:(e,t)=>{var{dataset:r,datasetDefaults:a}=t;return d(d({},e),{},{datasets:[...e.datasets||[],d(d({},a),r)]})},REMOVE_DATASET:(e,t)=>{var r,{id:a}=t;return d(d({},e),{},{datasets:(null===(r=e.datasets)||void 0===r?void 0:r.filter(e=>e.id!==a))||[]})},SET_DATASET_VISIBILITY:(e,t)=>{var r,{id:a,visibility:i}=t;return d(d({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>e.id===a?d(d({},e),{},{visibility:i}):e)})},HIDE_FEATURES:(e,t)=>{var{layerId:r,idProperty:a,featureIds:i}=t,o=e.hiddenFeatures[r],s=(null==o?void 0:o.ids)||[],n=[...new Set([...s,...i])];return d(d({},e),{},{hiddenFeatures:d(d({},e.hiddenFeatures),{},{[r]:{idProperty:a,ids:n}})})},SHOW_FEATURES:(e,t)=>{var{layerId:r,featureIds:a}=t,o=e.hiddenFeatures[r];if(!o)return e;var s=o.ids.filter(e=>!a.includes(e));if(0===s.length){var l=e.hiddenFeatures,{[r]:u}=l,c=i(l,[r].map(n));return d(d({},e),{},{hiddenFeatures:c})}return d(d({},e),{},{hiddenFeatures:d(d({},e.hiddenFeatures),{},{[r]:d(d({},o),{},{ids:s})})})}},c={stroke:"#d4351c",strokeWidth:2,fill:"transparent",symbolDescription:"red outline",minZoom:6,maxZoom:24,showInKey:!1,showInLayers:!1,visibility:"visible"},p=(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};function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function v(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?y(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):y(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var f=e=>{var t=0;for(var r of e)t=(t<<5)-t+r.codePointAt(0),t&=t;return Math.abs(t).toString(36)},h=e=>{if(e.tiles){var t=Array.isArray(e.tiles)?e.tiles.join(","):e.tiles;return"tiles-".concat(f(t))}return e.geojson?m(e)?"geojson-dynamic-".concat(e.id):"string"==typeof e.geojson?"geojson-".concat(f(e.geojson)):"geojson-".concat(e.id):"source-".concat(e.id)},m=e=>"string"==typeof e.geojson&&!!e.idProperty&&"function"==typeof e.transformRequest,g=(e,t,r)=>{var a=h(r);if(!e.getSource(a))if(r.tiles)e.addSource(a,{type:"vector",tiles:r.tiles,minzoom:r.minZoom||0,maxzoom:r.maxZoom||22});else if(r.geojson){var i=m(r)?{type:"FeatureCollection",features:[]}:r.geojson;e.addSource(a,{type:"geojson",data:i})}var o=!!r.fill,s=!!r.stroke,n=o?r.id:null,l=s?o?"".concat(r.id,"-stroke"):r.id:null,d="hidden"===r.visibility?"none":"visible";if(o&&!e.getLayer(n)){var u,c=p(r.fill,t);e.addLayer(v({id:n,type:"fill",source:a,"source-layer":null!=r&&null!==(u=r.tiles)&&void 0!==u&&u.length?r.sourceLayer:void 0,layout:{visibility:d},paint:{"fill-color":c,"fill-opacity":r.opacity||1}},r.filter?{filter:r.filter}:{}))}if(s&&!e.getLayer(l)){var y,f=p(r.stroke,t);e.addLayer(v({id:l,type:"line",source:a,"source-layer":null!=r&&null!==(y=r.tiles)&&void 0!==y&&y.length?r.sourceLayer:void 0,layout:{visibility:d},paint:v({"line-color":f,"line-width":r.strokeWidth||1,"line-opacity":r.opacity||1},r.strokeDashArray?{"line-dasharray":r.strokeDashArray}:{})},r.filter?{filter:r.filter}:{}))}},b=(e,t,r,a,i)=>{if(e.getLayer(t)){var o=((e,t,r)=>{if(!r||0===r.length)return e;var a=["!",["in",["to-string",["get",t]],["literal",r.map(e=>String(e))]]];return e?["all",e,a]:a})(r,a,i);e.setFilter(t,o)}},S=function(){var e=s(function*(e,t,r){var a=r(e,t),i="string"==typeof a?{url:a}:a,{url:o,headers:s={}}=i,n=yield fetch(o,{headers:s});if(!n.ok)throw new Error("Failed to fetch GeoJSON: ".concat(n.status," ").concat(n.statusText));var l=yield n.json();if("FeatureCollection"===l.type)return l;if("Feature"===l.type)return{type:"FeatureCollection",features:[l]};if(Array.isArray(l))return{type:"FeatureCollection",features:l};throw new Error("Invalid GeoJSON response")});return function(t,r,a){return e.apply(this,arguments)}}(),k=(e,t)=>!(!e||!t)&&!(e[2]<t[0]||e[0]>t[2]||e[3]<t[1]||e[1]>t[3]),w=e=>{var t=1/0,r=1/0,a=-1/0,i=-1/0,o=(e,s)=>{var n;0===s?(n=e,t=Math.min(t,n[0]),r=Math.min(r,n[1]),a=Math.max(a,n[0]),i=Math.max(i,n[1])):e.forEach(e=>o(e,s-1))};switch(e.type){case"Point":o(e.coordinates,0);break;case"LineString":case"MultiPoint":o(e.coordinates,1);break;case"Polygon":case"MultiLineString":o(e.coordinates,2);break;case"MultiPolygon":o(e.coordinates,3);break;case"GeometryCollection":e.geometries.forEach(e=>{var o=w(e);t=Math.min(t,o[0]),r=Math.min(r,o[1]),a=Math.max(a,o[2]),i=Math.max(i,o[3])})}return[t,r,a,i]},O=e=>{var t,r,a,i,{dataset:o,map:n,sourceId:l,onUpdate:d}=e,{geojson:u,idProperty:c,transformRequest:p,maxFeatures:y,minZoom:v=0}=o,f=new Map,h=null,m=!1,g=()=>({type:"FeatureCollection",features:Array.from(f.values()).map(e=>e.feature)}),b=function(){var e=s(function*(){var e=n.getZoom();if(!(e<v)){var t,r,a=(e=>{var t=e.getBounds();return[t.getWest(),t.getSouth(),t.getEast(),t.getNorth()]})(n);if(!(h&&(t=h,r=a,t&&r&&r[0]>=t[0]&&r[1]>=t[1]&&r[2]<=t[2]&&r[3]<=t[3])))if(!m){m=!0;try{var i={bbox:a,zoom:e,dataset:o},s=yield S(u,i,p),b=Date.now();s.features.forEach(e=>{var t=(e=>{var t,r;return c&&null!==(t=null===(r=e.properties)||void 0===r?void 0:r[c])&&void 0!==t?t:e.id})(e);null!=t?f.set(t,{feature:e,bbox:w(e.geometry),addedAt:f.has(t)?f.get(t).addedAt:b}):console.warn("Feature missing ID, skipping:",e)}),P=a,h=(O=h)?[Math.min(O[0],P[0]),Math.min(O[1],P[1]),Math.max(O[2],P[2]),Math.max(O[3],P[3])]:[...P],(e=>{if(y&&!(f.size<=1.2*y)){var t=y,r=[],a=[];for(var[i,o]of f)k(o.bbox,e)?r.push(i):a.push({id:i,addedAt:o.addedAt});a.sort((e,t)=>e.addedAt-t.addedAt);for(var s=f.size-t,n=0;n<s&&n<a.length;n++)f.delete(a[n].id);if(f.size>t)for(var l=f.size-t,d=r.map(e=>({id:e,addedAt:f.get(e).addedAt})).sort((e,t)=>e.addedAt-t.addedAt),u=0;u<l&&u<d.length;u++)f.delete(d[u].id)}})(a),d(l,g())}catch(e){console.error("Failed to fetch dynamic GeoJSON for ".concat(o.id,":"),e)}finally{m=!1}var O,P}}});return function(){return e.apply(this,arguments)}}(),O=(t=b,r=200,(i=function(){for(var e=arguments.length,i=new Array(e),o=0;o<e;o++)i[o]=arguments[o];clearTimeout(a),a=setTimeout(()=>t(...i),r)}).cancel=()=>{clearTimeout(a),a=null},i),P=()=>{O()};return n.on("moveend",P),b(),{destroy(){n.off("moveend",P),O.cancel()},clear(){f.clear(),h=null,d(l,{type:"FeatureCollection",features:[]})},refresh(){f.clear(),h=null,b()},getFeatureCount:()=>f.size,reapply(){f.size>0&&d(l,g())}}},P=e=>{var{pluginConfig:t,pluginStateRef:r,mapStyleId:a,mapProvider:i,events:o,eventBus:s}=e,{map:n}=i,{datasets:l}=t,d=new Map,u=()=>r.current.datasets||l;l.forEach(e=>{if(g(n,a,e),m(e)){var t=h(e),r=O({dataset:e,map:n,sourceId:t,onUpdate:(e,t)=>((e,t,r)=>{var a=e.getSource(t);a&&"function"==typeof a.setData&&a.setData(r)})(n,e,t)});d.set(e.id,r)}}),n.once("idle",()=>{s.emit("datasets:ready")});var c=(e=>{var{map:t,events:r,eventBus:a,getDatasets:i,getHiddenFeatures:o,getDynamicSources:s}=e,n=e=>{t.once("idle",()=>{var r=e.id,a=i(),n=o(),l=s?s():new Map;a.forEach(e=>{g(t,r,e)}),l.forEach(e=>{e.reapply()}),Object.entries(n).forEach(e=>{var[r,{idProperty:i,ids:o}]=e,s=a.find(e=>e.id===r);if(s){var n=s.filter||null,l=!!s.fill,d=!!s.stroke,u=l?r:null,c=d?l?"".concat(r,"-stroke"):r:null;u&&b(t,u,n,i,o),c&&b(t,c,n,i,o)}})})};return a.on(r.MAP_SET_STYLE,n),n})({map:n,events:o,eventBus:s,getDatasets:u,getHiddenFeatures:()=>r.current.hiddenFeatures||{},getDynamicSources:()=>d});return{remove(){s.off(o.MAP_SET_STYLE,c),d.forEach(e=>e.destroy()),d.clear();var e=u(),t=new Set;e.forEach(e=>{var r=h(e),a=((e,t)=>{var r=e.getStyle();return null!=r&&r.layers?r.layers.filter(e=>e.source===t).map(e=>e.id):[]})(n,r);a.forEach(e=>n.removeLayer(e)),!t.has(r)&&n.getSource(r)&&(n.removeSource(r),t.add(r))})},refreshDataset(e){var t=d.get(e);t&&t.refresh()},clearDatasetCache(e){var t=d.get(e);t&&t.clear()},getFeatureCount(e){var t=d.get(e);return t?t.getFeatureCount():null}}};var j=(e,t)=>{var{mapProvider:r,pluginState:a}=e,i=r.map;i.getLayer(t)&&i.setLayoutProperty(t,"visibility","visible"),i.getLayer("".concat(t,"-stroke"))&&i.setLayoutProperty("".concat(t,"-stroke"),"visibility","visible"),a.dispatch({type:"SET_DATASET_VISIBILITY",payload:{id:t,visibility:"visible"}})},E=(e,t)=>{var{mapProvider:r,pluginState:a}=e,i=r.map;i.getLayer(t)&&i.setLayoutProperty(t,"visibility","none"),i.getLayer("".concat(t,"-stroke"))&&i.setLayoutProperty("".concat(t,"-stroke"),"visibility","none"),a.dispatch({type:"SET_DATASET_VISIBILITY",payload:{id:t,visibility:"hidden"}})};function D(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?D(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):D(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var I={InitComponent:function(r){var a,{pluginConfig:i,pluginState:o,appState:s,mapState:n,mapProvider:l,services:d}=r,{dispatch:u}=o,{events:p,eventBus:y}=d,v=!(null===(a=l.map)||void 0===a||!a.getStyle()),f=e(o);f.current=o;var h=e(null);return t(()=>{var e,t,r,a,d=null===(e=null===(t=i.includeModes)||void 0===t?void 0:t.includes(s.mode))||void 0===e||e,m=null!==(r=null===(a=i.excludeModes)||void 0===a?void 0:a.includes(s.mode))&&void 0!==r&&r;v&&d&&!m&&(h.current||(o.datasets||u({type:"SET_DATASETS",payload:{datasets:i.datasets,datasetDefaults:c}}),h.current=P({mapStyleId:n.mapStyle.id,pluginConfig:i,pluginStateRef:f,mapProvider:l,events:p,eventBus:y})))},[v,s.mode]),t(()=>()=>{h.current&&(h.current.remove(),h.current=null)},[]),null},reducer:{initialState:{datasets:null,hiddenFeatures:{}},actions:u},panels:[{id:"datasetsLayers",label:"Layers",mobile:{slot:"bottom",modal:!0,dismissible:!0},tablet:{slot:"left-top",dismissible:!0,exclusive:!0,width:"300px"},desktop:{slot:"left-top",modal:!1,dismissible:!0,exclusive:!0,width:"320px"},render:e=>{var{pluginState:t,mapProvider:i}=e,o=e=>{var{value:r,checked:a}=e.target;a?j({mapProvider:i,pluginState:t},r):E({mapProvider:i,pluginState:t},r)};return r("div",{className:"im-c-datasets-layers",children:r("div",{className:"govuk-form-group",children:a("fieldset",{className:"govuk-fieldset",children:[r("legend",{className:"govuk-visually-hidden",children:"Layers"}),r("div",{className:"govuk-checkboxes govuk-checkboxes--small","data-module":"govuk-checkboxes",children:(t.datasets||[]).filter(e=>e.showInLayers).map(e=>r("div",{className:"im-c-datasets-layers__item".concat("hidden"!==e.visibility?" im-c-datasets-layers__item--checked":""),children:a("div",{className:"govuk-checkboxes__item",children:[r("input",{className:"govuk-checkboxes__input",id:e.id,name:"layers",type:"checkbox",value:e.id,checked:"hidden"!==e.visibility,onChange:o}),r("label",{className:"im-c-datasets-layers__item-label govuk-label govuk-checkboxes__label",htmlFor:e.id,children:e.label})]})},e.id))})]})})})}},{id:"datasetsKey",label:"Key",mobile:{slot:"bottom",modal:!0},tablet:{slot:"left-top",width:"300px"},desktop:{slot:"left-top",width:"320px"},render:e=>{var{mapState:t,pluginState:i}=e,{mapStyle:o}=t,s=e=>r("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20","aria-hidden":"true",focusable:"false",children:"line"===e.keySymbolShape?r("line",{x1:e.strokeWidth/2,y1:"10",x2:20-e.strokeWidth/2,y2:"10",stroke:p(e.stroke,o.id),strokeWidth:e.strokeWidth,strokeLinecap:"round"}):r("rect",{x:e.strokeWidth/2,y:e.strokeWidth/2,width:20-e.strokeWidth,height:20-e.strokeWidth,rx:e.strokeWidth,ry:e.strokeWidth,fill:p(e.fill,o.id),stroke:p(e.stroke,o.id),strokeWidth:e.strokeWidth,strokeLinejoin:"round"})});return r("div",{className:"im-c-datasets-key",children:(i.datasets||[]).filter(e=>e.showInKey&&"hidden"!==e.visibility).map(e=>r("div",{className:"im-c-datasets-key__item",children:a("div",{className:"im-c-datasets-key__item-label",children:[s(e),e.label,e.symbolDescription&&a("span",{className:"govuk-visually-hidden",children:["(",p(e.symbolDescription,o.id),")"]})]})},e.id))})}}],buttons:[{id:"datasetsLayers",label:"Layers",panelId:"datasetsLayers",iconId:"layers",excludeWhen:e=>{var{pluginConfig:t}=e;return!t.datasets.find(e=>e.showInLayers)},mobile:{slot:"top-left",showLabel:!0},tablet:{slot:"top-left",showLabel:!0},desktop:{slot:"top-left",showLabel:!0}},{id:"datasetsKey",label:"Key",panelId:"datasetsKey",iconId:"key",excludeWhen:e=>{var{pluginConfig:t}=e;return!t.datasets.find(e=>e.showInKey)},mobile:{slot:"top-left",showLabel:!1},tablet:{slot:"top-left",showLabel:!0},desktop:{slot:"top-left",showLabel:!0}}],icons:[{id:"layers",svgContent:'<path d="M13 13.74a2 2 0 0 1-2 0L2.5 8.87a1 1 0 0 1 0-1.74L11 2.26a2 2 0 0 1 2 0l8.5 4.87a1 1 0 0 1 0 1.74z"></path><path d="m20 14.285 1.5.845a1 1 0 0 1 0 1.74L13 21.74a2 2 0 0 1-2 0l-8.5-4.87a1 1 0 0 1 0-1.74l1.5-.845"></path>'},{id:"key",svgContent:'<path d="M3 5h.01"/><path d="M3 12h.01"/><path d="M3 19h.01"/><path d="M8 5h13"/><path d="M8 12h13"/><path d="M8 19h13"/>'}],api:{showDataset:j,hideDataset:E,addDataset:(e,t)=>{var{mapProvider:r,mapState:a,pluginState:i}=e,o=r.map;g(o,a.mapStyle.id,L(L({},c),t)),i.dispatch({type:"ADD_DATASET",payload:{dataset:t,datasetDefaults:c}})},removeDataset:(e,t)=>{var r,a,{mapProvider:i,pluginState:o}=e,s=i.map,n=null===(r=o.datasets)||void 0===r?void 0:r.find(e=>e.id===t);if(n){var{fillLayerId:l,strokeLayerId:d}=(e=>{var t=!!e.fill,r=!!e.stroke,a=t?e.id:null,i=null;return r&&(i=t?"".concat(e.id,"-stroke"):e.id),{fillLayerId:a,strokeLayerId:i}})(n),u=h(n);[d,l].forEach(e=>{e&&s.getLayer(e)&&s.removeLayer(e)}),!(null===(a=o.datasets)||void 0===a?void 0:a.some(e=>e.id!==t&&h(e)===u))&&s.getSource(u)&&s.removeSource(u),o.dispatch({type:"REMOVE_DATASET",payload:{id:t}})}},showFeatures:(e,t)=>{var r,{mapProvider:a,pluginState:i}=e,{featureIds:o,idProperty:s,datasetId:n}=t,l=a.map,d=i.hiddenFeatures[n];if(d){var u=null===(r=i.datasets)||void 0===r?void 0:r.find(e=>e.id===n);if(u){var c=u.filter||null,p=!!u.fill,y=!!u.stroke,v=p?n:null,f=null;y&&(f=p?"".concat(n,"-stroke"):n);var h=d.ids.filter(e=>!o.includes(e));i.dispatch({type:"SHOW_FEATURES",payload:{layerId:n,featureIds:o}}),v&&b(l,v,c,s,h),f&&b(l,f,c,s,h)}}},hideFeatures:(e,t)=>{var r,{mapProvider:a,pluginState:i}=e,{featureIds:o,idProperty:s,datasetId:n}=t,l=a.map,d=null===(r=i.datasets)||void 0===r?void 0:r.find(e=>e.id===n);if(d){var u=d.filter||null,c=!!d.fill,p=!!d.stroke,y=c?n:null,v=null;p&&(v=c?"".concat(n,"-stroke"):n);var f=i.hiddenFeatures[n],h=f?[...new Set([...f.ids,...o])]:o;i.dispatch({type:"HIDE_FEATURES",payload:{layerId:n,idProperty:s,featureIds:o}}),y&&b(l,y,u,s,h),v&&b(l,v,u,s,h)}}}};export{I as manifest};
|
|
1
|
+
import{useRef as e,useEffect as t}from"preact/compat";import{jsx as r,jsxs as a}from"preact/jsx-runtime";import o from"@babel/runtime/helpers/defineProperty";import l from"@babel/runtime/helpers/asyncToGenerator";function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function n(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var s={minZoom:6,maxZoom:24,showInKey:!1,toggleVisibility:!1,visibility:"visible",style:{stroke:"#d4351c",strokeWidth:2,fill:"transparent",symbolDescription:"red outline"}},d=["stroke","strokeWidth","strokeDashArray","fill","fillPattern","fillPatternSvgContent","fillPatternForegroundColor","fillPatternBackgroundColor","opacity","symbolDescription","keySymbolShape","symbol","symbolSvgContent","symbolViewBox","symbolAnchor","symbolBackgroundColor","symbolForegroundColor","symbolHaloWidth","symbolGraphic"],u=["stroke","fill","fillPattern","fillPatternSvgContent","symbol","symbolSvgContent"],c=e=>u.some(t=>t in e),p=(e,t)=>{var r=e.style||{},a=n(n({},t.style),r);!("symbolDescription"in r)&&c(r)&&delete a.symbolDescription;var o=n({},e);delete o.style,d.forEach(e=>delete o[e]);var l=n({},t);return delete l.style,n(n(n({},l),o),a)};function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function b(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?y(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):y(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function v(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function f(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?v(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):v(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var m=e=>{var t;if(null===(t=e.sublayers)||void 0===t||!t.length)return e;var r={};return e.sublayers.forEach(e=>{r[e.id]="visible"}),f(f({},e),{},{sublayerVisibility:r})},h={BUILD_KEY_GROUPS:e=>{var t=e.datasets||[],r=new Set,a=[],o=!1;return t.forEach(e=>{var l;if(e.showInKey&&"hidden"!==e.visibility)if(null!==(l=e.sublayers)&&void 0!==l&&l.length){var{sublayerVisibility:i=[]}=e;Object.values(i).some(e=>"hidden"!==e)&&(o=!0,a.push({type:"sublayers",dataset:e}))}else{if(e.groupLabel){if(r.has(e.groupLabel))return;return r.add(e.groupLabel),o=!0,void a.push({type:"group",groupLabel:e.groupLabel,datasets:t.filter(t=>{var r;return!(null!==(r=t.sublayers)&&void 0!==r&&r.length)&&t.groupLabel===e.groupLabel})})}a.push({type:"flat",dataset:e})}}),b(b({},e),{},{key:{items:a,hasGroups:o}})},SET_DATASETS:(e,t)=>{var{datasets:r,datasetDefaults:a}=t;return f(f({},e),{},{datasets:r.map(e=>m(p(e,a)))})},ADD_DATASET:(e,t)=>{var{dataset:r,datasetDefaults:a}=t;return f(f({},e),{},{datasets:[...e.datasets||[],m(p(r,a))]})},REMOVE_DATASET:(e,t)=>{var r,{id:a}=t;return f(f({},e),{},{datasets:(null===(r=e.datasets)||void 0===r?void 0:r.filter(e=>e.id!==a))||[]})},SET_DATASET_VISIBILITY:(e,t)=>{var r,{id:a,visibility:o}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>e.id===a?f(f({},e),{},{visibility:o}):e)})},SET_GLOBAL_VISIBILITY:(e,t)=>{var r,{visibility:a}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>f(f({},e),{},{visibility:a}))})},SET_SUBLAYER_VISIBILITY:(e,t)=>{var r,{datasetId:a,sublayerId:o,visibility:l}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>e.id!==a?e:f(f({},e),{},{sublayerVisibility:f(f({},e.sublayerVisibility),{},{[o]:l})}))})},SET_DATASET_STYLE:(e,t)=>{var r,{datasetId:a,styleChanges:o}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>e.id===a?f(f({},e),o):e)})},SET_SUBLAYER_STYLE:(e,t)=>{var r,{datasetId:a,sublayerId:o,styleChanges:l}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>{var t;return e.id!==a?e:f(f({},e),{},{sublayers:null===(t=e.sublayers)||void 0===t?void 0:t.map(e=>e.id===o?f(f({},e),{},{style:f(f({},e.style),l)}):e)})})})},SET_OPACITY:(e,t)=>{var r,{datasetId:a,opacity:o}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>e.id===a?f(f({},e),{},{opacity:o}):e)})},SET_GLOBAL_OPACITY:(e,t)=>{var r,{opacity:a}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>f(f({},e),{},{opacity:a}))})},SET_SUBLAYER_OPACITY:(e,t)=>{var r,{datasetId:a,sublayerId:o,opacity:l}=t;return f(f({},e),{},{datasets:null===(r=e.datasets)||void 0===r?void 0:r.map(e=>{var t;return e.id!==a?e:f(f({},e),{},{sublayers:null===(t=e.sublayers)||void 0===t?void 0:t.map(e=>e.id===o?f(f({},e),{},{style:f(f({},e.style),{},{opacity:l})}):e)})})})},HIDE_FEATURES:(e,t)=>{var{layerId:r,idProperty:a,featureIds:o}=t,l=e.hiddenFeatures[r],i=(null==l?void 0:l.ids)||[],n=[...new Set([...i,...o])];return f(f({},e),{},{hiddenFeatures:f(f({},e.hiddenFeatures),{},{[r]:{idProperty:a,ids:n}})})},SHOW_FEATURES:(e,t)=>{var{layerId:r,featureIds:a}=t,o=e.hiddenFeatures[r];if(!o)return e;var l=o.ids.filter(e=>!a.includes(e));if(0===l.length){var i=f({},e.hiddenFeatures);return delete i[r],f(f({},e),{},{hiddenFeatures:i})}return f(f({},e),{},{hiddenFeatures:f(f({},e.hiddenFeatures),{},{[r]:f(f({},o),{},{ids:l})})})},SET_LAYER_ADAPTER:(e,t)=>f(f({},e),{},{layerAdapter:t})},g={APP_ADD_MARKER:"app:addmarker",APP_REMOVE_MARKER:"app:removemarker",APP_SET_MODE:"app:setmode",APP_REVERT_MODE:"app:revertmode",APP_ADD_BUTTON:"app:addbutton",APP_TOGGLE_BUTTON_STATE:"app:togglebuttonstate",APP_ADD_PANEL:"app:addpanel",APP_REMOVE_PANEL:"app:removepanel",APP_SHOW_PANEL:"app:showpanel",APP_HIDE_PANEL:"app:hidepanel",APP_ADD_CONTROL:"app:addcontrol",APP_READY:"app:ready",APP_VISIBLE:"app:visible",APP_HIDDEN:"app:hidden",APP_PANEL_OPENED:"app:panelopened",APP_PANEL_CLOSED:"app:panelclosed",MAP_SET_STYLE:"map:setstyle",MAP_SET_SIZE:"map:setsize",MAP_SET_PIXEL_RATIO:"map:setpixelratio",MAP_FIT_TO_BOUNDS:"map:fittobounds",MAP_SET_VIEW:"map:setview",MAP_INIT_MAP_STYLES:"map:initmapstyles",MAP_STYLE_CHANGE:"map:stylechange",MAP_LOADED:"map:loaded",MAP_READY:"map:ready",MAP_SIZE_CHANGE:"map:sizechange",MAP_FIRST_IDLE:"map:firstidle",MAP_MOVE_START:"map:movestart",MAP_MOVE:"map:move",MAP_MOVE_END:"map:moveend",MAP_STATE_UPDATED:"map:stateupdated",MAP_DATA_CHANGE:"map:datachange",MAP_RENDER:"map:render",MAP_CLICK:"map:click",MAP_EXIT:"map:exit",MAP_DESTROY:"map:destroy"},O=function(){var e=l(function*(e,t,r,a){var o=r(e,t),l="string"==typeof o?{url:o}:o,{url:i,headers:n={}}=l,s=yield fetch(i,{headers:n,signal:a});if(!s.ok)throw new Error("Failed to fetch GeoJSON: ".concat(s.status," ").concat(s.statusText));var d=yield s.json();if("FeatureCollection"===d.type)return d;if("Feature"===d.type)return{type:"FeatureCollection",features:[d]};if(Array.isArray(d))return{type:"FeatureCollection",features:d};throw new Error("Invalid GeoJSON response")});return function(t,r,a,o){return e.apply(this,arguments)}}(),P=(e,t)=>!(!e||!t)&&!(e[2]<t[0]||e[0]>t[2]||e[3]<t[1]||e[1]>t[3]),S=e=>{var t=1/0,r=1/0,a=-1/0,o=-1/0,l=(e,i)=>{var n;0===i?(n=e,t=Math.min(t,n[0]),r=Math.min(r,n[1]),a=Math.max(a,n[0]),o=Math.max(o,n[1])):e.forEach(e=>l(e,i-1))};switch(e.type){case"Point":l(e.coordinates,0);break;case"LineString":case"MultiPoint":l(e.coordinates,1);break;case"Polygon":case"MultiLineString":l(e.coordinates,2);break;case"MultiPolygon":l(e.coordinates,3);break;case"GeometryCollection":e.geometries.forEach(e=>{var l=S(e);t=Math.min(t,l[0]),r=Math.min(r,l[1]),a=Math.max(a,l[2]),o=Math.max(o,l[3])});break;default:throw new Error("Unsupported geometry type: ".concat(e.type))}return[t,r,a,o]},_=e=>{var t,r,a,o,{dataset:i,map:n,onUpdate:s}=e,{geojson:d,idProperty:u,transformRequest:c,maxFeatures:p,minZoom:y=0}=i,b=new Map,v=null,f=null,m=()=>({type:"FeatureCollection",features:Array.from(b.values()).map(e=>e.feature)}),h=function(){var e=l(function*(){var e=n.getZoom();if(!(e<y)){var t=(e=>{var t=e.getBounds();return[t.getWest(),t.getSouth(),t.getEast(),t.getNorth()]})(n);if(!(v&&(r=v,a=t,r&&a&&a[0]>=r[0]&&a[1]>=r[1]&&a[2]<=r[2]&&a[3]<=r[3]))){var r,a,o,l;f&&f.abort(),f=new AbortController;try{var h={bbox:t,zoom:e,dataset:i},g=yield O(d,h,c,f.signal),_=Date.now();g.features.forEach(e=>{var t=(e=>{var t,r;return u&&null!==(t=null===(r=e.properties)||void 0===r?void 0:r[u])&&void 0!==t?t:e.id})(e);null!=t?b.set(t,{feature:e,bbox:S(e.geometry),lastSeenAt:_}):console.warn("Feature missing ID, skipping:",e)}),l=t,v=(o=v)?[Math.min(o[0],l[0]),Math.min(o[1],l[1]),Math.max(o[2],l[2]),Math.max(o[3],l[3])]:[...l];var E=b.size;(e=>{if(p&&!(b.size<=1.2*p)){var t=p,r=[],a=[];for(var[o,l]of b)P(l.bbox,e)?r.push(o):a.push({id:o,lastSeenAt:l.lastSeenAt});a.sort((e,t)=>e.lastSeenAt-t.lastSeenAt);for(var i=b.size-t,n=0;n<i&&n<a.length;n++)b.delete(a[n].id);if(b.size>t)for(var s=b.size-t,d=r.map(e=>({id:e,lastSeenAt:b.get(e).lastSeenAt})).sort((e,t)=>e.lastSeenAt-t.lastSeenAt),u=0;u<s&&u<d.length;u++)b.delete(d[u].id)}})(t),b.size<E&&(v=t),s(i.id,m())}catch(e){if("AbortError"===e.name)return;console.error("Failed to fetch dynamic GeoJSON for ".concat(i.id,":"),e)}}}});return function(){return e.apply(this,arguments)}}(),g=(t=h,r=200,(o=function(){for(var e=arguments.length,o=new Array(e),l=0;l<e;l++)o[l]=arguments[l];clearTimeout(a),a=setTimeout(()=>t(...o),r)}).cancel=()=>{clearTimeout(a),a=null},o),_=()=>{g()};return n.on("moveend",_),h(),{destroy(){n.off("moveend",_),g.cancel(),f&&f.abort()},clear(){b.clear(),v=null,s(i.id,{type:"FeatureCollection",features:[]})},refresh(){b.clear(),v=null,h()},getFeatureCount:()=>b.size,reapply(){b.size>0&&s(i.id,m())}}},E=e=>{var{adapter:t,pluginConfig:r,pluginStateRef:a,mapStyle:o,mapProvider:l,events:i,eventBus:n}=e,{datasets:d}=r,u=new Map,c=()=>a.current.datasets||d,y=d.map(e=>p(e,s));t.init(y,o).then(()=>{y.forEach(e=>{if((e=>"string"==typeof e.geojson&&!!e.idProperty&&"function"==typeof e.transformRequest)(e)){var r=_({dataset:e,map:l.map,onUpdate:(e,r)=>t.setData(e,r)});u.set(e.id,r)}}),n.emit("datasets:ready")});var b=o,v=e=>{b=e,t.onStyleChange(c(),e,a.current.hiddenFeatures||{},u)},f=()=>{t.onSizeChange(c(),b)};return n.on(i.MAP_SET_STYLE,v),n.on(i.MAP_SIZE_CHANGE,f),{remove(){n.off(i.MAP_SET_STYLE,v),n.off(i.MAP_SIZE_CHANGE,f),u.forEach(e=>e.destroy()),u.clear(),t.destroy(c())},refreshDataset(e){var t;null===(t=u.get(e))||void 0===t||t.refresh()},clearDatasetCache(e){var t;null===(t=u.get(e))||void 0===t||t.clear()},getFeatureCount(e){var t,r;return null!==(t=null===(r=u.get(e))||void 0===r?void 0:r.getFeatureCount())&&void 0!==t?t:null}}};var A=function(e,t){var r,a,{pluginState:o}=e,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{datasetId:i,sublayerId:n}=l;if(n){var s,d=t?"visible":"hidden";return null===(s=o.layerAdapter)||void 0===s||s[t?"showSublayer":"hideSublayer"](i,n),void o.dispatch({type:"SET_SUBLAYER_VISIBILITY",payload:{datasetId:i,sublayerId:n,visibility:d}})}if(i){if(null===(a=o.layerAdapter)||void 0===a||a[t?"showDataset":"hideDataset"](i),o.dispatch({type:"SET_DATASET_VISIBILITY",payload:{id:i,visibility:t?"visible":"hidden"}}),t){var u,c=null===(u=o.datasets)||void 0===u?void 0:u.find(e=>e.id===i);Object.entries((null==c?void 0:c.sublayerVisibility)||{}).forEach(e=>{var t,[r,a]=e;"hidden"===a&&(null===(t=o.layerAdapter)||void 0===t||t.hideSublayer(i,r))})}}else o.dispatch({type:"SET_GLOBAL_VISIBILITY",payload:{visibility:t?"visible":"hidden"}}),null===(r=o.datasets)||void 0===r||r.forEach(e=>{var r;null===(r=o.layerAdapter)||void 0===r||r[t?"showDataset":"hideDataset"](e.id),t&&Object.entries(e.sublayerVisibility||{}).forEach(t=>{var r,[a,l]=t;"hidden"===l&&(null===(r=o.layerAdapter)||void 0===r||r.hideSublayer(e.id,a))})})},j="im-c-datasets-layers__item-label govuk-label govuk-checkboxes__label",w=e=>{var t;return null===(t=e.sublayers)||void 0===t?void 0:t.some(e=>e.toggleVisibility)},k=(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};function D(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}var I=(e,t)=>"symbolDescription"in t?t.symbolDescription:c(t)?void 0:e.symbolDescription,T=(e,t)=>{var r,a,l,i,n,s,d,u,c,p,y,b,v,f,m,h,g,O=t.style||{},P=(h=e.filter,g=t.filter,h&&g?["all",h,g]:g||h||null);return function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?D(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):D(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({id:t.id,label:t.label,stroke:null!==(r=O.stroke)&&void 0!==r?r:e.stroke,strokeWidth:null!==(a=O.strokeWidth)&&void 0!==a?a:e.strokeWidth,strokeDashArray:null!==(l=O.strokeDashArray)&&void 0!==l?l:e.strokeDashArray,opacity:null!==(i=O.opacity)&&void 0!==i?i:e.opacity,keySymbolShape:null!==(n=O.keySymbolShape)&&void 0!==n?n:e.keySymbolShape,symbolDescription:I(e,O),showInKey:null!==(s=t.showInKey)&&void 0!==s?s:e.showInKey,toggleVisibility:null!==(d=t.toggleVisibility)&&void 0!==d&&d,filter:P,minZoom:e.minZoom,maxZoom:e.maxZoom,symbol:null!==(u=O.symbol)&&void 0!==u?u:e.symbol,symbolSvgContent:null!==(c=O.symbolSvgContent)&&void 0!==c?c:e.symbolSvgContent,symbolViewBox:null!==(p=O.symbolViewBox)&&void 0!==p?p:e.symbolViewBox,symbolAnchor:null!==(y=O.symbolAnchor)&&void 0!==y?y:e.symbolAnchor,symbolBackgroundColor:null!==(b=O.symbolBackgroundColor)&&void 0!==b?b:e.symbolBackgroundColor,symbolForegroundColor:null!==(v=O.symbolForegroundColor)&&void 0!==v?v:e.symbolForegroundColor,symbolHaloWidth:null!==(f=O.symbolHaloWidth)&&void 0!==f?f:e.symbolHaloWidth,symbolGraphic:null!==(m=O.symbolGraphic)&&void 0!==m?m:e.symbolGraphic},((e,t)=>{var r,a;return t.fillPattern||t.fillPatternSvgContent?{fillPattern:t.fillPattern,fillPatternSvgContent:t.fillPatternSvgContent,fillPatternForegroundColor:null!==(r=t.fillPatternForegroundColor)&&void 0!==r?r:e.fillPatternForegroundColor,fillPatternBackgroundColor:null!==(a=t.fillPatternBackgroundColor)&&void 0!==a?a:e.fillPatternBackgroundColor}:"fill"in t?{fill:t.fill}:{fill:e.fill,fillPattern:e.fillPattern,fillPatternSvgContent:e.fillPatternSvgContent,fillPatternForegroundColor:e.fillPatternForegroundColor,fillPatternBackgroundColor:e.fillPatternBackgroundColor}})(e,O))},C=e=>{var{text:t}=e;return r("div",{className:"im-c-datasets-key",children:r("p",{className:"im-c-datasets-key__empty-message",children:t})})},L=new Set(["symbolBackgroundColor","symbolForegroundColor","symbolHaloWidth","symbolGraphic"]),M=e=>!(!e.symbol&&!e.symbolSvgContent),x=(e,t,r)=>e.replace(/\{\{foregroundColor\}\}/g,t||"black").replace(/\{\{backgroundColor\}\}/g,r);function N(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function R(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?N(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):N(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var F=20,B={xmlns:"http://www.w3.org/2000/svg",width:F,height:F,viewBox:"0 0 ".concat(F," ").concat(F),className:"am-c-datasets-key-symbol","aria-hidden":"true",focusable:"false"},V=R(R({},B),{},{width:38,height:38,className:"am-c-datasets-key-symbol am-c-datasets-key-symbol--point"});function Y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Y(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Y(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var G=e=>{var{patternRegistry:t,mapStyle:o}=e,l=((e,t,r)=>{var a=((e,t)=>{return e.fillPatternSvgContent?e.fillPatternSvgContent:e.fillPattern&&null!==(r=null==t||null===(a=t.get(e.fillPattern))||void 0===a?void 0:a.svgContent)&&void 0!==r?r:null;var r,a})(e,r);if(!a)return null;var o=k(e.fillPatternForegroundColor,t)||"black",l=k(e.fillPatternBackgroundColor,t)||"transparent",i=k(e.stroke,t)||o;return{border:x('<path d="M19 2.862v14.275c0 1.028-.835 1.862-1.862 1.862H2.863c-1.028 0-1.862-.835-1.862-1.862V2.862C1.001 1.834 1.836 1 2.863 1h14.275C18.166 1 19 1.835 19 2.862z" fill="{{backgroundColor}}" stroke="{{foregroundColor}}" stroke-width="2"/>',i,l),content:x(a,o,l)}})(e,o.id,t);return a("svg",W(W({},B),{},{children:[r("g",{dangerouslySetInnerHTML:{__html:l.border}}),r("g",{transform:"translate(".concat(2,", ").concat(2,")"),dangerouslySetInnerHTML:{__html:l.content}})]}))};function H(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function U(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?H(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):H(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var K=e=>{var t,{symbolRegistry:a,mapStyle:o,symbolDef:l}=e,i=null!==(t=null==o?void 0:o.appColorScheme)&&void 0!==t?t:"light",n=U(U({},o),{},{mapColorScheme:i}),s=a.resolve(l,(e=>{if(!M(e))return{};var t={};return L.forEach(r=>{if(null!=e[r]){var a=r.charAt(6).toLowerCase()+r.slice(7);t[a]=e[r]}}),t})(e),n),d=((e,t)=>{var r;return e.symbolViewBox?e.symbolViewBox:null!==(r=null==t?void 0:t.viewBox)&&void 0!==r?r:"0 0 38 38"})(e,l);return r("svg",U(U({},V),{},{viewBox:d,children:r("g",{dangerouslySetInnerHTML:{__html:s}})}))};function z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function Z(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?z(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):z(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var J=e=>{var{mapStyle:t}=e;return r("svg",Z(Z({},B),{},{children:r("line",{x1:e.strokeWidth/2,y1:10,x2:F-e.strokeWidth/2,y2:10,stroke:k(e.stroke,t.id),strokeWidth:e.strokeWidth,strokeLinecap:"round"})}))};function q(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function X(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?q(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):q(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var Q=e=>{var{mapStyle:t}=e;return r("svg",X(X({},B),{},{children:r("rect",{x:e.strokeWidth/2,y:e.strokeWidth/2,width:F-e.strokeWidth,height:F-e.strokeWidth,rx:e.strokeWidth,ry:e.strokeWidth,fill:k(e.fill,t.id),stroke:k(e.stroke,t.id),strokeWidth:e.strokeWidth,strokeLinejoin:"round"})}))};function $(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function ee(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?$(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):$(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var te=e=>{var t,{symbolRegistry:a}=e,o=M(e)&&((e,t)=>e.symbolSvgContent?{svg:e.symbolSvgContent}:e.symbol?t.get(e.symbol):void 0)(e,a);return o?r(K,ee(ee({},e),{},{symbolDef:o})):(t=e).fillPattern||t.fillPatternSvgContent?r(G,ee({},e)):"line"===e.keySymbolShape?r(J,ee({},e)):r(Q,ee({},e))};function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function ae(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?re(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):re(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function oe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function le(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?oe(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):oe(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function ie(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,a)}return r}function ne(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ie(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ie(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var se="[interactive-map]",de=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return console.warn(se,...t)},ue={InitComponent:function(r){var a,{pluginConfig:o,pluginState:i,appState:n,mapState:d,mapProvider:u,services:c}=r,{dispatch:p}=i,{eventBus:y,symbolRegistry:b,patternRegistry:v}=c,f=!(null===(a=u.map)||void 0===a||!a.getStyle()),m=e(i);m.current=i;var h=e(null);return t(()=>{var e,t,r,a,c=null===(e=null===(t=o.includeModes)||void 0===t?void 0:t.includes(n.mode))||void 0===e||e,O=null!==(r=null===(a=o.excludeModes)||void 0===a?void 0:a.includes(n.mode))&&void 0!==r&&r;if(f&&c&&!O&&!h.current){i.datasets||p({type:"SET_DATASETS",payload:{datasets:o.datasets,datasetDefaults:s}});var P=function(){var e=l(function*(){if(!o.layerAdapter)throw new Error("datasets plugin: no layerAdapter provided. Import and pass maplibreLayerAdapter or a custom adapter.");var{default:e}=yield o.layerAdapter.load(),t=new e(u,b,v);p({type:"SET_LAYER_ADAPTER",payload:t}),h.current=E({adapter:t,pluginConfig:o,pluginStateRef:m,mapStyle:d.mapStyle,mapProvider:u,events:g,eventBus:y})});return function(){return e.apply(this,arguments)}}();P()}},[f,n.mode]),t(()=>{p({type:"BUILD_KEY_GROUPS",payload:null})},[i.datasets]),t(()=>()=>{h.current&&(h.current.remove(),h.current=null),p({type:"SET_LAYER_ADAPTER",payload:null})},[]),null},reducer:{initialState:{datasets:null,key:{items:[],hasGroups:!1},hiddenFeatures:{},layerAdapter:null},actions:h},panels:[{id:"datasetsLayers",label:"Layers",mobile:{slot:"drawer",modal:!0,dismissible:!0},tablet:{slot:"left-top",dismissible:!0,exclusive:!0,width:"260px"},desktop:{slot:"left-top",modal:!1,dismissible:!0,exclusive:!0,width:"280px"},render:e=>{var t,o,l,{pluginState:i}=e,n=e=>{var{value:t,checked:r}=e.target;A({pluginState:i},r,{datasetId:t})},s=e=>{var{checked:t}=e.target,r=e.target.dataset.datasetId,a=e.target.dataset.sublayerId;A({pluginState:i},t,{datasetId:r,sublayerId:a})},d=e=>{var t="im-c-datasets-layers__item govuk-checkboxes govuk-checkboxes--small".concat("hidden"===e.visibility?"":" im-c-datasets-layers__item--checked");return r("div",{className:t,"data-module":"govuk-checkboxes",children:a("div",{className:"govuk-checkboxes__item",children:[r("input",{className:"govuk-checkboxes__input",id:e.id,name:"layers",type:"checkbox",value:e.id,checked:"hidden"!==e.visibility,onChange:n}),r("label",{className:j,htmlFor:e.id,children:e.label})]})},e.id)},u=(i.datasets||[]).filter(e=>e.toggleVisibility||w(e)),c=(t=u,o=new Set,l=[],t.forEach(e=>{if(w(e))l.push({type:"sublayers",dataset:e});else{if(e.groupLabel){if(o.has(e.groupLabel))return;return o.add(e.groupLabel),void l.push({type:"group",groupLabel:e.groupLabel,datasets:t.filter(t=>!w(t)&&t.groupLabel===e.groupLabel)})}l.push({type:"flat",dataset:e})}}),l),p=c.some(e=>"sublayers"===e.type||"group"===e.type),y="im-c-datasets-layers".concat(p?" im-c-datasets-layers--has-groups":"");return r("div",{className:y,children:c.map(e=>{if("sublayers"===e.type){var{dataset:t}=e,o=t.sublayers.filter(e=>e.toggleVisibility).some(e=>{var r;return"hidden"!==(null===(r=t.sublayerVisibility)||void 0===r?void 0:r[e.id])}),l="govuk-form-group im-c-datasets-layers-group".concat(o?" im-c-datasets-layers-group--items-checked":"");return r("div",{className:l,children:a("fieldset",{className:"im-c-datasets-layers-group__fieldset",children:[r("legend",{className:"im-c-datasets-layers-group__legend",children:t.label}),t.sublayers.filter(e=>e.toggleVisibility).map(e=>{var o,l="hidden"!==(null===(o=t.sublayerVisibility)||void 0===o?void 0:o[e.id]),i="".concat(t.id,"-").concat(e.id),n="im-c-datasets-layers__item govuk-checkboxes govuk-checkboxes--small".concat(l?" im-c-datasets-layers__item--checked":"");return r("div",{className:n,"data-module":"govuk-checkboxes",children:a("div",{className:"govuk-checkboxes__item",children:[r("input",{className:"govuk-checkboxes__input",id:i,type:"checkbox",checked:l,"data-dataset-id":t.id,"data-sublayer-id":e.id,onChange:s}),r("label",{className:j,htmlFor:i,children:e.label})]})},e.id)})]})},t.id)}if("group"===e.type){var i=e.datasets.some(e=>"hidden"!==e.visibility),n="govuk-form-group im-c-datasets-layers-group".concat(i?" im-c-datasets-layers-group--items-checked":"");return r("div",{className:n,children:a("fieldset",{className:"im-c-datasets-layers-group__fieldset",children:[r("legend",{className:"im-c-datasets-layers-group__legend",children:e.groupLabel}),e.datasets.map(e=>d(e))]})},e.groupLabel)}return d(e.dataset)})})}},{id:"datasetsKey",label:"Key",mobile:{slot:"drawer",modal:!0},tablet:{slot:"left-top",width:"260px"},desktop:{slot:"left-top",width:"280px"},render:e=>{var t,{pluginConfig:o,mapState:l,pluginState:i,services:n}=e;if(null==i||null===(t=i.key)||void 0===t||null===(t=t.items)||void 0===t||!t.length)return r(C,{text:o.noKeyItemText});var{mapStyle:s}=l,{symbolRegistry:d,patternRegistry:u}=n,c=(e,t)=>a("dl",{className:"im-c-datasets-key__item",children:[r("dt",{className:"im-c-datasets-key__item-symbol",children:r(te,ae(ae({},t),{},{symbolRegistry:d,patternRegistry:u,mapStyle:s}))}),a("dd",{className:"im-c-datasets-key__item-label",children:[t.label,t.symbolDescription&&a("span",{className:"govuk-visually-hidden",children:["(",k(t.symbolDescription,s.id),")"]})]})]},e),{items:p,hasGroups:y}=i.key,b="im-c-datasets-key".concat(y?" im-c-datasets-key--has-groups":"");return r("div",{className:b,children:p.map(e=>{if("sublayers"===e.type){var t="key-heading-".concat(e.dataset.id);return a("section",{className:"im-c-datasets-key__group","aria-labelledby":t,children:[r("h3",{id:t,className:"im-c-datasets-key__group-heading",children:e.dataset.label}),e.dataset.sublayers.filter(t=>{var r;return"hidden"!==(null===(r=e.dataset.sublayerVisibility)||void 0===r?void 0:r[t.id])}).map(t=>c("".concat(e.dataset.id,"-").concat(t.id),T(e.dataset,t)))]},e.dataset.id)}if("group"===e.type){var o="key-heading-".concat(e.groupLabel.toLowerCase().replaceAll(/\s+/g,"-"));return a("section",{className:"im-c-datasets-key__group","aria-labelledby":o,children:[r("h3",{id:o,className:"im-c-datasets-key__group-heading",children:e.groupLabel}),e.datasets.map(e=>c(e.id,e))]},e.groupLabel)}return c(e.dataset.id,e.dataset)})})}}],buttons:[{id:"datasetsLayers",label:"Layers",panelId:"datasetsLayers",iconId:"layers",excludeWhen:e=>{var{pluginConfig:t}=e;return!t.datasets.some(e=>{var t;return e.toggleVisibility||(null===(t=e.sublayers)||void 0===t?void 0:t.some(e=>e.toggleVisibility))})},mobile:{slot:"top-left",showLabel:!0},tablet:{slot:"top-left",showLabel:!0},desktop:{slot:"top-left",showLabel:!0}},{id:"datasetsKey",label:"Key",panelId:"datasetsKey",iconId:"key",excludeWhen:e=>{var{pluginConfig:t}=e;return!t.datasets.some(e=>e.showInKey)},mobile:{slot:"top-left",showLabel:!1},tablet:{slot:"top-left",showLabel:!0},desktop:{slot:"top-left",showLabel:!0}}],icons:[{id:"layers",svgContent:'<path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path>'},{id:"key",svgContent:'<path d="M3 5h.01"/><path d="M3 12h.01"/><path d="M3 19h.01"/><path d="M8 5h13"/><path d="M8 12h13"/><path d="M8 19h13"/>'}],api:{addDataset:(e,t)=>{var r,{pluginState:a,mapState:o}=e;null===(r=a.layerAdapter)||void 0===r||r.addDataset(le(le({},s),t),o.mapStyle),a.dispatch({type:"ADD_DATASET",payload:{dataset:t,datasetDefaults:s}})},removeDataset:(e,t)=>{var r,a,{pluginState:o}=e,l=null===(r=o.datasets)||void 0===r?void 0:r.find(e=>e.id===t);l&&(null===(a=o.layerAdapter)||void 0===a||a.removeDataset(l,o.datasets),o.dispatch({type:"REMOVE_DATASET",payload:{id:t}}))},setDatasetVisibility:A,setFeatureVisibility:function(e,t,r){var a,{pluginState:o}=e,{datasetId:l,idProperty:i=null}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=null===(a=o.datasets)||void 0===a?void 0:a.find(e=>e.id===l);if(n)if(t){var s,d=o.hiddenFeatures[l];if(!d)return;var u=d.ids.filter(e=>!r.includes(e));o.dispatch({type:"SHOW_FEATURES",payload:{layerId:l,featureIds:r}}),null===(s=o.layerAdapter)||void 0===s||s.showFeatures(n,i,u)}else{var c,p=o.hiddenFeatures[l],y=(null==p?void 0:p.ids)||[],b=[...new Set([...y,...r])];o.dispatch({type:"HIDE_FEATURES",payload:{layerId:l,idProperty:i,featureIds:r}}),null===(c=o.layerAdapter)||void 0===c||c.hideFeatures(n,i,b)}},setStyle:function(e,t){var r,a,{pluginState:o,mapState:l}=e,{datasetId:i,sublayerId:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=null===(r=o.datasets)||void 0===r?void 0:r.find(e=>e.id===i);if(s)if(n){var d,u;o.dispatch({type:"SET_SUBLAYER_STYLE",payload:{datasetId:i,sublayerId:n,styleChanges:t}});var c=ne(ne({},s),{},{sublayers:null===(d=s.sublayers)||void 0===d?void 0:d.map(e=>e.id===n?ne(ne({},e),{},{style:ne(ne({},e.style),t)}):e)});null===(u=o.layerAdapter)||void 0===u||u.setSublayerStyle(c,n,l.mapStyle)}else{o.dispatch({type:"SET_DATASET_STYLE",payload:{datasetId:i,styleChanges:t}});var p=ne(ne({},s),t);null===(a=o.layerAdapter)||void 0===a||a.setStyle(p,l.mapStyle)}},getStyle:function(e){var t,r,{pluginState:a}=e,{datasetId:o,sublayerId:l}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null===(t=a.datasets)||void 0===t?void 0:t.find(e=>e.id===o);if(!i)return null;if(l){var n,s,d=null===(n=i.sublayers)||void 0===n?void 0:n.find(e=>e.id===l);return null!==(s=null==d?void 0:d.style)&&void 0!==s?s:null}return null!==(r=i.style)&&void 0!==r?r:null},setOpacity:(e,t,r)=>{var a,{pluginState:o}=e,{datasetId:l,sublayerId:i}=r||{};if(i){var n,s;if(!(null===(n=o.datasets)||void 0===n?void 0:n.find(e=>e.id===l)))return;return o.dispatch({type:"SET_SUBLAYER_OPACITY",payload:{datasetId:l,sublayerId:i,opacity:t}}),void(null===(s=o.layerAdapter)||void 0===s||s.setSublayerOpacity(l,i,t))}if(l){var d,u;if(!(null===(d=o.datasets)||void 0===d?void 0:d.find(e=>e.id===l)))return;return o.dispatch({type:"SET_OPACITY",payload:{datasetId:l,opacity:t}}),void(null===(u=o.layerAdapter)||void 0===u||u.setOpacity(l,t))}o.dispatch({type:"SET_GLOBAL_OPACITY",payload:{opacity:t}}),null===(a=o.datasets)||void 0===a||a.forEach(e=>{var r;null===(r=o.layerAdapter)||void 0===r||r.setOpacity(e.id,t)})},getOpacity:(e,t)=>{var r,a,{pluginState:o}=e,{datasetId:l,sublayerId:i}=t||{};if(i){var n,s,d,u,c=null===(n=o.datasets)||void 0===n?void 0:n.find(e=>e.id===l),p=null==c||null===(s=c.sublayers)||void 0===s?void 0:s.find(e=>e.id===i);return null!==(d=null==p||null===(u=p.style)||void 0===u?void 0:u.opacity)&&void 0!==d?d:null}if(l){var y,b,v=null===(y=o.datasets)||void 0===y?void 0:y.find(e=>e.id===l);return null!==(b=null==v?void 0:v.opacity)&&void 0!==b?b:null}return null!==(r=null===(a=o.datasets)||void 0===a||null===(a=a[0])||void 0===a?void 0:a.opacity)&&void 0!==r?r:null},setData:(e,t,r)=>{var a,o,{pluginState:l}=e,{datasetId:i}=r,n=null===(a=l.datasets)||void 0===a?void 0:a.find(e=>e.id===i);null!=n&&n.tiles?de('setData called on vector tile dataset "'.concat(i,'" — has no effect')):null===(o=l.layerAdapter)||void 0===o||o.setData(i,t)}}};export{ue as manifest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";function r(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 n(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach(function(r){t(e,r,o[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function o(){var t,r=n(n({},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),{},{id:"datasets",load:(t=e(function*(){return(yield import(/* webpackChunkName: "im-datasets-plugin" */ "./im-datasets-plugin.js")).manifest}),function(){return t.apply(this,arguments)})});return r}export{o as default};
|
|
1
|
+
import e from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/defineProperty";function r(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 n(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach(function(r){t(e,r,o[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))})}return e}function o(){var t,r=n(n({noKeyItemText:"No features displayed"},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),{},{id:"datasets",load:(t=e(function*(){return(yield import(/* webpackChunkName: "im-datasets-plugin" */ "./im-datasets-plugin.js")).manifest}),function(){return t.apply(this,arguments)})});return r}export{o as default};
|