@defra/interactive-map 0.0.17-alpha → 0.0.19-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.
Files changed (185) hide show
  1. package/assets/css/docusaurus.css +58 -34
  2. package/dist/css/index.css +1 -1
  3. package/dist/esm/im-core.js +1 -1
  4. package/dist/esm/im-shell.js +1 -1
  5. package/dist/umd/im-core.js +1 -1
  6. package/dist/umd/index.js +1 -1
  7. package/docs/api/context.md +53 -7
  8. package/docs/api/map-style-config.md +41 -2
  9. package/docs/api/marker-config.md +53 -11
  10. package/docs/api/panel-definition.md +16 -0
  11. package/docs/api/symbol-config.md +160 -0
  12. package/docs/api/symbol-registry.md +115 -0
  13. package/docs/api.md +50 -23
  14. package/docs/assets/basic-map.jpg +0 -0
  15. package/docs/assets/button-first.jpg +0 -0
  16. package/docs/assets/maker-panel.jpg +0 -0
  17. package/docs/examples/add-marker-with-panel.mdx +59 -0
  18. package/docs/examples/basic-map.mdx +24 -0
  19. package/docs/examples/button-map.mdx +24 -0
  20. package/docs/examples/index.mdx +49 -0
  21. package/docs/index.mdx +1 -1
  22. package/docs/plugins/datasets.md +105 -9
  23. package/docs/plugins/interact.md +100 -44
  24. package/docs/plugins/search.md +15 -3
  25. package/docs/plugins.md +1 -1
  26. package/docusaurus.config.cjs +9 -1
  27. package/package.json +1 -1
  28. package/plugins/beta/datasets/dist/css/index.css +32 -14
  29. package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +1 -1
  30. package/plugins/beta/datasets/dist/esm/index.js +1 -1
  31. package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +1 -1
  32. package/plugins/beta/datasets/dist/umd/index.js +1 -1
  33. package/plugins/beta/datasets/src/DatasetsInit.jsx +9 -4
  34. package/plugins/beta/datasets/src/adapters/maplibre/layerBuilders.js +57 -11
  35. package/plugins/beta/datasets/src/adapters/maplibre/layerIds.js +14 -8
  36. package/plugins/beta/datasets/src/adapters/maplibre/maplibreLayerAdapter.js +155 -53
  37. package/plugins/beta/datasets/src/adapters/maplibre/patternImages.js +27 -0
  38. package/plugins/beta/datasets/src/adapters/maplibre/symbolImages.js +31 -0
  39. package/plugins/beta/datasets/src/api/addDataset.js +1 -1
  40. package/plugins/beta/datasets/src/api/setData.js +4 -2
  41. package/plugins/beta/datasets/src/api/setStyle.js +2 -2
  42. package/plugins/beta/datasets/src/components/EmptyKey.jsx +7 -0
  43. package/plugins/beta/datasets/src/components/EmptyKey.test.jsx +21 -0
  44. package/plugins/beta/datasets/src/components/KeySvg.jsx +24 -0
  45. package/plugins/beta/datasets/src/components/KeySvgLine.jsx +19 -0
  46. package/plugins/beta/datasets/src/components/KeySvgPattern.jsx +15 -0
  47. package/plugins/beta/datasets/src/components/KeySvgRect.jsx +22 -0
  48. package/plugins/beta/datasets/src/components/KeySvgSymbol.jsx +16 -0
  49. package/plugins/beta/datasets/src/components/svgProperties.js +20 -0
  50. package/plugins/beta/datasets/src/datasets.js +13 -4
  51. package/plugins/beta/datasets/src/defaults.js +4 -2
  52. package/plugins/beta/datasets/src/index.js +2 -1
  53. package/plugins/beta/datasets/src/manifest.js +1 -1
  54. package/plugins/beta/datasets/src/panels/Key.jsx +11 -89
  55. package/plugins/beta/datasets/src/panels/Key.module.scss +24 -13
  56. package/plugins/beta/datasets/src/panels/Layers.module.scss +13 -7
  57. package/plugins/beta/datasets/src/reducer.js +6 -0
  58. package/plugins/beta/datasets/src/reducers/keyReducer.js +34 -0
  59. package/plugins/beta/datasets/src/utils/mergeSublayer.js +8 -0
  60. package/plugins/beta/draw-es/dist/esm/im-draw-es-plugin.js +1 -1
  61. package/plugins/beta/draw-es/src/DrawInit.jsx +3 -2
  62. package/plugins/beta/draw-ml/dist/css/index.css +3 -0
  63. package/plugins/beta/draw-ml/dist/esm/im-draw-ml-plugin.js +1 -1
  64. package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -1
  65. package/plugins/beta/draw-ml/dist/umd/index.js +1 -1
  66. package/plugins/beta/draw-ml/src/DrawInit.jsx +4 -3
  67. package/plugins/beta/map-styles/dist/esm/im-map-styles-plugin.js +1 -1
  68. package/plugins/beta/map-styles/dist/umd/im-map-styles-plugin.js +1 -1
  69. package/plugins/beta/map-styles/dist/umd/index.js +1 -1
  70. package/plugins/beta/map-styles/src/MapStyles.jsx +5 -4
  71. package/plugins/beta/map-styles/src/MapStylesInit.jsx +5 -4
  72. package/plugins/beta/scale-bar/dist/css/index.css +1 -1
  73. package/plugins/beta/scale-bar/src/scaleBar.scss +1 -0
  74. package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
  75. package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
  76. package/plugins/interact/dist/umd/index.js +1 -1
  77. package/plugins/interact/src/InteractInit.jsx +19 -8
  78. package/plugins/interact/src/InteractInit.test.js +26 -6
  79. package/plugins/interact/src/api/clear.js +1 -1
  80. package/plugins/interact/src/api/enable.test.js +7 -7
  81. package/plugins/interact/src/api/selectMarker.js +14 -0
  82. package/plugins/interact/src/api/selectMarker.test.js +25 -0
  83. package/plugins/interact/src/api/unselectMarker.js +14 -0
  84. package/plugins/interact/src/api/unselectMarker.test.js +14 -0
  85. package/plugins/interact/src/defaults.js +4 -6
  86. package/plugins/interact/src/events.js +27 -36
  87. package/plugins/interact/src/events.test.js +119 -90
  88. package/plugins/interact/src/hooks/useHighlightSync.js +3 -3
  89. package/plugins/interact/src/hooks/useHighlightSync.test.js +6 -6
  90. package/plugins/interact/src/hooks/useHoverCursor.js +10 -0
  91. package/plugins/interact/src/hooks/useHoverCursor.test.js +44 -0
  92. package/plugins/interact/src/hooks/useInteractionHandlers.js +111 -69
  93. package/plugins/interact/src/hooks/useInteractionHandlers.test.js +147 -32
  94. package/plugins/interact/src/manifest.js +10 -2
  95. package/plugins/interact/src/reducer.js +59 -5
  96. package/plugins/interact/src/reducer.test.js +100 -12
  97. package/plugins/interact/src/utils/buildStylesMap.js +17 -4
  98. package/plugins/interact/src/utils/buildStylesMap.test.js +16 -2
  99. package/plugins/interact/src/utils/featureQueries.js +11 -6
  100. package/plugins/interact/src/utils/featureQueries.test.js +8 -1
  101. package/plugins/interact/src/utils/interactionModes.js +12 -0
  102. package/plugins/search/dist/esm/im-search-plugin.js +1 -1
  103. package/plugins/search/dist/umd/im-search-plugin.js +1 -1
  104. package/plugins/search/src/Search.jsx +3 -1
  105. package/plugins/search/src/events/fetchSuggestions.js +6 -4
  106. package/plugins/search/src/events/fetchSuggestions.test.js +26 -4
  107. package/plugins/search/src/events/formHandlers.js +3 -3
  108. package/plugins/search/src/events/formHandlers.test.js +1 -1
  109. package/plugins/search/src/events/suggestionHandlers.js +2 -2
  110. package/plugins/search/src/events/suggestionHandlers.test.js +1 -1
  111. package/plugins/search/src/utils/updateMap.js +3 -3
  112. package/plugins/search/src/utils/updateMap.test.js +3 -3
  113. package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
  114. package/providers/maplibre/dist/umd/im-maplibre-provider.js +1 -1
  115. package/providers/maplibre/dist/umd/index.js +1 -1
  116. package/providers/maplibre/src/appEvents.js +7 -0
  117. package/providers/maplibre/src/appEvents.test.js +18 -4
  118. package/providers/maplibre/src/maplibreProvider.js +52 -0
  119. package/providers/maplibre/src/maplibreProvider.test.js +105 -1
  120. package/providers/maplibre/src/utils/highlightFeatures.js +36 -7
  121. package/providers/maplibre/src/utils/highlightFeatures.test.js +153 -96
  122. package/providers/maplibre/src/utils/hoverCursor.js +61 -0
  123. package/providers/maplibre/src/utils/hoverCursor.test.js +130 -0
  124. package/providers/maplibre/src/utils/patternImages.js +70 -0
  125. package/providers/maplibre/src/utils/patternImages.test.js +180 -0
  126. package/providers/maplibre/src/utils/queryFeatures.js +38 -16
  127. package/providers/maplibre/src/utils/queryFeatures.test.js +20 -3
  128. package/providers/maplibre/src/utils/rasteriseToImageData.js +30 -0
  129. package/providers/maplibre/src/utils/rasteriseToImageData.test.js +69 -0
  130. package/providers/maplibre/src/utils/symbolImages.js +147 -0
  131. package/providers/maplibre/src/utils/symbolImages.test.js +248 -0
  132. package/src/App/components/Markers/Markers.jsx +122 -27
  133. package/src/App/components/Markers/Markers.module.scss +0 -10
  134. package/src/App/components/Markers/Markers.test.jsx +246 -0
  135. package/src/App/components/Panel/Panel.jsx +6 -6
  136. package/src/App/components/Panel/Panel.test.jsx +37 -0
  137. package/src/App/components/Viewport/Viewport.jsx +5 -15
  138. package/src/App/components/Viewport/Viewport.module.scss +2 -0
  139. package/src/App/components/Viewport/Viewport.test.jsx +16 -33
  140. package/src/App/hooks/useInterfaceAPI.js +7 -7
  141. package/src/App/hooks/useInterfaceAPI.test.js +162 -0
  142. package/src/App/hooks/useLayoutMeasurements.js +64 -72
  143. package/src/App/hooks/useMarkersAPI.js +2 -5
  144. package/src/App/hooks/useMarkersAPI.test.js +4 -4
  145. package/src/App/layout/Layout.jsx +3 -3
  146. package/src/App/layout/Layout.test.jsx +4 -2
  147. package/src/App/layout/layout.module.scss +1 -8
  148. package/src/App/renderer/HtmlElementHost.jsx +10 -5
  149. package/src/App/renderer/mapPanels.js +2 -1
  150. package/src/App/store/ServiceProvider.jsx +7 -5
  151. package/src/App/store/appActionsMap.js +4 -4
  152. package/src/App/store/appActionsMap.test.js +10 -0
  153. package/src/App/store/mapActionsMap.js +4 -6
  154. package/src/App/store/mapActionsMap.test.js +3 -2
  155. package/src/App/store/mapReducer.js +2 -1
  156. package/src/InteractiveMap/InteractiveMap.js +59 -11
  157. package/src/InteractiveMap/InteractiveMap.test.js +126 -4
  158. package/src/InteractiveMap/domStateManager.js +18 -6
  159. package/src/InteractiveMap/domStateManager.test.js +21 -0
  160. package/src/InteractiveMap/historyManager.js +28 -16
  161. package/src/InteractiveMap/historyManager.test.js +17 -0
  162. package/src/config/appConfig.js +2 -7
  163. package/src/config/appConfig.test.js +4 -15
  164. package/src/config/defaults.js +2 -3
  165. package/src/config/events.js +20 -21
  166. package/src/config/mapTheme.js +56 -0
  167. package/src/config/patternConfig.js +16 -0
  168. package/src/config/symbolConfig.js +80 -0
  169. package/src/scss/settings/_colors.scss +0 -9
  170. package/src/services/closeApp.js +1 -10
  171. package/src/services/closeApp.test.js +3 -43
  172. package/src/services/patternRegistry.js +40 -0
  173. package/src/services/patternRegistry.test.js +48 -0
  174. package/src/services/symbolRegistry.js +113 -0
  175. package/src/services/symbolRegistry.test.js +262 -0
  176. package/src/types.js +99 -12
  177. package/src/utils/mapStateSync.js +48 -10
  178. package/src/utils/mapStateSync.test.js +29 -9
  179. package/src/utils/patternUtils.js +94 -0
  180. package/src/utils/patternUtils.test.js +160 -0
  181. package/src/utils/symbolUtils.js +85 -0
  182. package/src/utils/symbolUtils.test.js +156 -0
  183. package/docs/examples.mdx +0 -70
  184. package/plugins/beta/datasets/src/adapters/maplibre/patternRegistry.js +0 -48
  185. package/plugins/beta/datasets/src/styles/patterns.js +0 -157
@@ -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
- interactionMode: 'auto',
11
+ interactionModes: ['selectMarker', 'selectFeature'],
12
12
  multiSelect: true,
13
- dataLayers: [
13
+ layers: [
14
14
  { layerId: 'my-layer', idProperty: 'id' }
15
15
  ]
16
16
  })
@@ -40,40 +40,64 @@ Array of mode identifiers. When set, the plugin does not render when the app is
40
40
 
41
41
  ---
42
42
 
43
- ### `interactionMode`
44
- **Type:** `'marker' | 'select' | 'auto'`
45
- **Default:** `'marker'`
43
+ ### `interactionModes`
44
+ **Type:** `Array<'selectMarker' | 'selectFeature' | 'placeMarker'>`
45
+ **Default:** `['selectMarker']`
46
46
 
47
- Controls how user clicks are interpreted.
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
- - `'marker'` — clicking always places a location marker at the clicked coordinates
50
- - `'select'` — clicking attempts to match a feature from `dataLayers`; click outside clears selection (unless `deselectOnClickOutside` is `false`)
51
- - `'auto'` — attempts feature matching first, falls back to placing a marker if no feature is found
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
+ > [!NOTE]
54
+ > On touch and keyboard, a crosshair and "Select" action button are shown when interact is enabled. For touch users, this applies when `'placeMarker'` or `'selectFeature'` is included — modes where a precise point on the map needs to be chosen. When `'selectMarker'` is the only active mode, touch users tap markers directly and the crosshair is not shown.
55
+
56
+ **Common combinations:**
57
+
58
+ ```js
59
+ interactionModes: ['selectMarker'] // marker selection only (default)
60
+ interactionModes: ['selectFeature'] // feature selection only
61
+ interactionModes: ['placeMarker'] // always place a marker on click
62
+ interactionModes: ['selectMarker', 'selectFeature'] // select markers or features
63
+ interactionModes: ['selectFeature', 'placeMarker'] // select features, fall back to placing a marker
64
+ interactionModes: ['selectMarker', 'selectFeature', 'placeMarker'] // all interactions active
65
+ ```
52
66
 
53
67
  ---
54
68
 
55
- ### `dataLayers`
56
- **Type:** `Array<DataLayer>`
69
+ ### `layers`
70
+ **Type:** `Array<LayerConfig>`
57
71
  **Default:** `[]`
58
72
 
59
73
  Array of map layer configurations that are selectable. Each entry specifies which layer to watch and how to identify features.
60
74
 
61
75
  ```js
62
- dataLayers: [
63
- { layerId: 'my-polygons', idProperty: 'id' },
76
+ layers: [
77
+ { layerId: 'my-polygons', idProperty: 'guid' },
64
78
  { layerId: 'my-lines' }
65
79
  ]
66
80
  ```
67
81
 
68
- #### `DataLayer` properties
82
+ #### `LayerConfig` properties
69
83
 
70
84
  | Property | Type | Description |
71
85
  |----------|------|-------------|
72
86
  | `layerId` | `string` | **Required.** The map layer identifier to enable selection on |
73
87
  | `idProperty` | `string` | Property name used as the feature's unique identifier. If omitted, features are matched by index |
74
- | `selectedStroke` | `string` | Overrides the global `selectedStroke` for this layer |
75
- | `selectedFill` | `string` | Overrides the global `selectedFill` for this layer |
76
- | `selectedStrokeWidth` | `number` | Overrides the global `selectedStrokeWidth` for this layer |
88
+ | `selectedStroke` | `string` | Overrides the selection stroke colour for this layer. Defaults to `MapStyleConfig.selectedColor` |
89
+ | `selectedFill` | `string` | Overrides the selection fill colour for this layer. Defaults to `transparent` |
90
+ | `selectedStrokeWidth` | `number` | Overrides the selection stroke width for this layer. Defaults to `3` |
91
+
92
+ #### Finding layer IDs
93
+
94
+ 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:
95
+
96
+ - **Map provider directly** — use the layer IDs defined in your style or added via your map provider's layer API
97
+ - **Datasets plugin** — use the dataset ID, or the sublayer ID for datasets with sublayers
98
+ - **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)
99
+
100
+ 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
101
 
78
102
  ---
79
103
 
@@ -97,7 +121,7 @@ When `true`, only features that touch or overlap the existing selection can be a
97
121
  **Type:** `boolean`
98
122
  **Default:** `false`
99
123
 
100
- When `true`, clicking outside any selectable layer clears the current selection.
124
+ When `true`, clicking outside any selectable feature clears the current selection.
101
125
 
102
126
  ---
103
127
 
@@ -105,7 +129,7 @@ When `true`, clicking outside any selectable layer clears the current selection.
105
129
  **Type:** `number`
106
130
  **Default:** `10`
107
131
 
108
- Click detection radius in pixels. Increases the hit area around the cursor when matching features, which is useful for lines and points.
132
+ 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
133
 
110
134
  ---
111
135
 
@@ -117,35 +141,32 @@ When `true`, the app closes after the user clicks "Done" or "Cancel".
117
141
 
118
142
  ---
119
143
 
120
- ### `markerColor`
121
- **Type:** `string`
122
- **Default:** `'rgba(212,53,28,1)'`
144
+ ### `marker`
145
+ **Type:** `MarkerOptions`
123
146
 
124
- Color of the location marker placed on the map.
125
-
126
- ---
147
+ 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.
127
148
 
128
- ### `selectedStroke`
129
- **Type:** `string`
130
- **Default:** `'rgba(212,53,28,1)'`
131
-
132
- Stroke color used to highlight selected features. Can be overridden per layer via `dataLayers`.
133
-
134
- ---
135
-
136
- ### `selectedFill`
137
- **Type:** `string`
138
- **Default:** `'rgba(255, 0, 0, 0.1)'`
149
+ ```js
150
+ createInteractPlugin({
151
+ marker: {
152
+ symbol: 'pin',
153
+ backgroundColor: { outdoor: '#d4351c', dark: '#ff6b6b' },
154
+ foregroundColor: '#ffffff'
155
+ }
156
+ })
157
+ ```
139
158
 
140
- Fill color used to highlight selected features. Can be overridden per layer via `dataLayers`.
159
+ When not set, the marker inherits from the constructor `symbolDefaults` cascade.
141
160
 
142
161
  ---
143
162
 
144
163
  ### `selectedStrokeWidth`
145
164
  **Type:** `number`
146
- **Default:** `2`
165
+ **Default:** `3`
147
166
 
148
- Stroke width used to highlight selected features. Can be overridden per layer via `dataLayers`.
167
+ Stroke width used to highlight selected features. Can be overridden per layer via `layers[].selectedStrokeWidth`.
168
+
169
+ > **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
170
 
150
171
  ---
151
172
 
@@ -169,7 +190,7 @@ interactiveMap.on('map:ready', () => {
169
190
  })
170
191
 
171
192
  // Override options at runtime
172
- interactPlugin.enable({ multiSelect: true, interactionMode: 'select' })
193
+ interactPlugin.enable({ multiSelect: true, interactionModes: ['selectFeature'] })
173
194
  ```
174
195
 
175
196
  ---
@@ -186,7 +207,7 @@ interactPlugin.disable()
186
207
 
187
208
  ### `clear()`
188
209
 
189
- Clear the current selection or marker.
210
+ Clear all selected features and markers, and remove the location marker.
190
211
 
191
212
  ```js
192
213
  interactPlugin.clear()
@@ -234,6 +255,34 @@ interactPlugin.unselectFeature({
234
255
 
235
256
  ---
236
257
 
258
+ ### `selectMarker(markerId)`
259
+
260
+ Programmatically select a marker. Idempotent — has no effect if the marker is already selected. In single-select mode, clears any selected features and replaces the marker selection. In multi-select mode, adds to the existing selection.
261
+
262
+ | Parameter | Type | Description |
263
+ |-----------|------|-------------|
264
+ | `markerId` | `string` | The ID of the marker to select |
265
+
266
+ ```js
267
+ interactPlugin.selectMarker('my-marker')
268
+ ```
269
+
270
+ ---
271
+
272
+ ### `unselectMarker(markerId)`
273
+
274
+ Programmatically unselect a specific marker. Idempotent — has no effect if the marker is not selected.
275
+
276
+ | Parameter | Type | Description |
277
+ |-----------|------|-------------|
278
+ | `markerId` | `string` | The ID of the marker to unselect |
279
+
280
+ ```js
281
+ interactPlugin.unselectMarker('my-marker')
282
+ ```
283
+
284
+ ---
285
+
237
286
  ## Events
238
287
 
239
288
  Subscribe to events using `interactiveMap.on()`.
@@ -247,12 +296,15 @@ Emitted when the user confirms their selection (clicks "Done").
247
296
  **Payload:**
248
297
  ```js
249
298
  {
250
- // If a marker was placed:
299
+ // If a location marker was placed:
251
300
  coords: [lng, lat],
252
301
 
253
302
  // If features were selected:
254
303
  selectedFeatures: [...],
255
- selectionBounds: [west, south, east, north]
304
+ selectionBounds: [west, south, east, north],
305
+
306
+ // If markers were selected:
307
+ selectedMarkers: ['...']
256
308
  }
257
309
  ```
258
310
 
@@ -264,6 +316,9 @@ interactiveMap.on('interact:done', (e) => {
264
316
  if (e.selectedFeatures) {
265
317
  console.log('Features selected:', e.selectedFeatures)
266
318
  }
319
+ if (e.selectedMarkers) {
320
+ console.log('Markers selected:', e.selectedMarkers)
321
+ }
267
322
  })
268
323
  ```
269
324
 
@@ -285,7 +340,7 @@ interactiveMap.on('interact:cancel', () => {
285
340
 
286
341
  ### `interact:selectionchange`
287
342
 
288
- Emitted whenever the feature selection changes.
343
+ Emitted whenever the selected features or selected markers change.
289
344
 
290
345
  **Payload:**
291
346
  ```js
@@ -293,6 +348,7 @@ Emitted whenever the feature selection changes.
293
348
  selectedFeatures: [
294
349
  { featureId: '...', layerId: '...', properties: {...}, geometry: {...} }
295
350
  ],
351
+ selectedMarkers: ['...'], // array of selected marker IDs
296
352
  selectionBounds: [west, south, east, north] | null,
297
353
  canMerge: boolean, // true when all selected features are contiguous
298
354
  canSplit: boolean // true when exactly one Polygon or MultiPolygon is selected
@@ -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
- ### `markerColor`
94
- **Type:** `string`
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
- Colour of the search result marker.
108
+ When not set, the marker inherits from the constructor `symbolDefaults` cascade.
97
109
 
98
110
  ---
99
111
 
package/docs/plugins.md CHANGED
@@ -10,7 +10,7 @@ The following plugins are available for use with InteractiveMap.
10
10
 
11
11
  ### [Interact](./plugins/interact.md)
12
12
 
13
- Select features or place markers on the map.
13
+ Select map features, select markers, or place a location marker on the map.
14
14
 
15
15
  ### [Map Styles](./plugins/map-styles.md)
16
16
 
@@ -84,7 +84,15 @@ const config = {
84
84
  { text: 'GOV.UK Prototype kit', href: '/getting-started#govuk-prototype-kit-plugin' }
85
85
  ],
86
86
  },
87
- { text: 'Examples', href: '/examples', sidebar: 'auto' },
87
+ {
88
+ text: 'Examples',
89
+ href: '/examples',
90
+ sidebar: [
91
+ { text: 'Basic map', href: '/examples/basic-map' },
92
+ { text: 'Button-triggered map', href: '/examples/button-map' },
93
+ { text: 'Add a marker with a panel', href: '/examples/add-marker-with-panel' },
94
+ ],
95
+ },
88
96
  {
89
97
  text: 'API',
90
98
  href: '/api',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/interactive-map",
3
- "version": "0.0.17-alpha",
3
+ "version": "0.0.19-alpha",
4
4
  "description": "An accessible map component",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,8 +1,11 @@
1
- .im-c-datasets-key--has-groups > * {
2
- border-top: 1px solid var(--button-hover-color);
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;
3
6
  }
4
7
 
5
- .im-c-datasets-key:not(.im-c-datasets-key--has-groups) > *:first-child {
8
+ .im-c-datasets-key--has-groups > *:not(:first-child) {
6
9
  border-top: 1px solid var(--button-hover-color);
7
10
  }
8
11
 
@@ -26,36 +29,44 @@
26
29
  padding-bottom: 10px;
27
30
  font-size: 1rem;
28
31
  }
29
- .im-c-datasets-key--has-groups > .im-c-datasets-key__item {
30
- padding-top: 15px;
31
- padding-bottom: 15px;
32
- }
33
32
  .im-c-datasets-key__group .im-c-datasets-key__item:first-child {
34
33
  padding-top: 0;
35
34
  }
36
35
 
37
- .im-c-datasets-key:not(.im-c-datasets-key--has-groups) > .im-c-datasets-key__item:first-child {
36
+ .im-c-datasets-key--has-groups > .im-c-datasets-key__item:not(:first-child) {
38
37
  padding-top: 15px;
39
38
  }
40
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
+
41
49
  .im-c-datasets-key > .im-c-datasets-key__item:last-child,
42
50
  .im-c-datasets-key__group:last-child .im-c-datasets-key__item:last-child {
43
51
  padding-bottom: 5px;
44
52
  }
45
53
 
46
- .im-c-datasets-key__item svg {
54
+ .am-c-datasets-key-symbol {
47
55
  position: relative;
48
56
  flex-shrink: 0;
49
57
  margin: 0 13px 0 2px;
50
58
  }
51
59
 
52
- .im-c-datasets-layers--has-groups > * {
53
- border-top: 1px solid var(--button-hover-color);
60
+ .am-c-datasets-key-symbol--point {
61
+ margin: -9px 3px -9px -7px;
54
62
  }
55
63
 
56
- .im-c-datasets-layers:not(.im-c-datasets-layers--has-groups) > *:first-child {
64
+ .im-c-datasets-layers--has-groups > *:not(:first-child) {
57
65
  border-top: 1px solid var(--button-hover-color);
58
- padding-top: 10px;
66
+ }
67
+
68
+ .im-c-datasets-layers > *:first-child {
69
+ padding-top: 5px;
59
70
  }
60
71
 
61
72
  .im-c-datasets-layers > *:last-child {
@@ -69,7 +80,10 @@
69
80
  .im-c-datasets-layers__item {
70
81
  padding-bottom: 5px;
71
82
  }
72
- .im-c-datasets-layers--has-groups > .im-c-datasets-layers__item {
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) {
73
87
  padding-top: 5px;
74
88
  }
75
89
  .im-c-datasets-layers-group .im-c-datasets-layers__item {
@@ -115,6 +129,10 @@
115
129
  color: var(--foreground-color);
116
130
  }
117
131
 
132
+ .im-c-datasets-layers-group:first-child .im-c-datasets-layers-group__legend {
133
+ padding-top: 0;
134
+ }
135
+
118
136
  .im-c-datasets {
119
137
  display: block;
120
138
  }
@@ -1 +1 @@
1
- import{useRef as e,useEffect as t}from"preact/compat";import{jsx as a,jsxs as r}from"preact/jsx-runtime";import i from"@babel/runtime/helpers/defineProperty";import l from"@babel/runtime/helpers/asyncToGenerator";function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var n={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"],u=["stroke","fill","fillPattern","fillPatternSvgContent"],c=e=>u.some(t=>t in e),p=(e,t)=>{var a=e.style||{},r=s(s({},t.style),a);!("symbolDescription"in a)&&c(a)&&delete r.symbolDescription;var i=s({},e);delete i.style,d.forEach(e=>delete i[e]);var l=s({},t);return delete l.style,s(s(s({},l),i),r)};function y(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function v(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?y(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):y(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var h=e=>{var t;if(null===(t=e.sublayers)||void 0===t||!t.length)return e;var a={};return e.sublayers.forEach(e=>{a[e.id]="visible"}),v(v({},e),{},{sublayerVisibility:a})},f={SET_DATASETS:(e,t)=>{var{datasets:a,datasetDefaults:r}=t;return v(v({},e),{},{datasets:a.map(e=>h(p(e,r)))})},ADD_DATASET:(e,t)=>{var{dataset:a,datasetDefaults:r}=t;return v(v({},e),{},{datasets:[...e.datasets||[],h(p(a,r))]})},REMOVE_DATASET:(e,t)=>{var a,{id:r}=t;return v(v({},e),{},{datasets:(null===(a=e.datasets)||void 0===a?void 0:a.filter(e=>e.id!==r))||[]})},SET_DATASET_VISIBILITY:(e,t)=>{var a,{id:r,visibility:i}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>e.id===r?v(v({},e),{},{visibility:i}):e)})},SET_GLOBAL_VISIBILITY:(e,t)=>{var a,{visibility:r}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>v(v({},e),{},{visibility:r}))})},SET_SUBLAYER_VISIBILITY:(e,t)=>{var a,{datasetId:r,sublayerId:i,visibility:l}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>e.id!==r?e:v(v({},e),{},{sublayerVisibility:v(v({},e.sublayerVisibility),{},{[i]:l})}))})},SET_DATASET_STYLE:(e,t)=>{var a,{datasetId:r,styleChanges:i}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>e.id===r?v(v({},e),i):e)})},SET_SUBLAYER_STYLE:(e,t)=>{var a,{datasetId:r,sublayerId:i,styleChanges:l}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>{var t;return e.id!==r?e:v(v({},e),{},{sublayers:null===(t=e.sublayers)||void 0===t?void 0:t.map(e=>e.id===i?v(v({},e),{},{style:v(v({},e.style),l)}):e)})})})},SET_OPACITY:(e,t)=>{var a,{datasetId:r,opacity:i}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>e.id===r?v(v({},e),{},{opacity:i}):e)})},SET_GLOBAL_OPACITY:(e,t)=>{var a,{opacity:r}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>v(v({},e),{},{opacity:r}))})},SET_SUBLAYER_OPACITY:(e,t)=>{var a,{datasetId:r,sublayerId:i,opacity:l}=t;return v(v({},e),{},{datasets:null===(a=e.datasets)||void 0===a?void 0:a.map(e=>{var t;return e.id!==r?e:v(v({},e),{},{sublayers:null===(t=e.sublayers)||void 0===t?void 0:t.map(e=>e.id===i?v(v({},e),{},{style:v(v({},e.style),{},{opacity:l})}):e)})})})},HIDE_FEATURES:(e,t)=>{var{layerId:a,idProperty:r,featureIds:i}=t,l=e.hiddenFeatures[a],o=(null==l?void 0:l.ids)||[],s=[...new Set([...o,...i])];return v(v({},e),{},{hiddenFeatures:v(v({},e.hiddenFeatures),{},{[a]:{idProperty:r,ids:s}})})},SHOW_FEATURES:(e,t)=>{var{layerId:a,featureIds:r}=t,i=e.hiddenFeatures[a];if(!i)return e;var l=i.ids.filter(e=>!r.includes(e));if(0===l.length){var o=v({},e.hiddenFeatures);return delete o[a],v(v({},e),{},{hiddenFeatures:o})}return v(v({},e),{},{hiddenFeatures:v(v({},e.hiddenFeatures),{},{[a]:v(v({},i),{},{ids:l})})})},SET_LAYER_ADAPTER:(e,t)=>v(v({},e),{},{layerAdapter:t})},b=function(){var e=l(function*(e,t,a,r){var i=a(e,t),l="string"==typeof i?{url:i}:i,{url:o,headers:s={}}=l,n=yield fetch(o,{headers:s,signal:r});if(!n.ok)throw new Error("Failed to fetch GeoJSON: ".concat(n.status," ").concat(n.statusText));var d=yield n.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,a,r,i){return e.apply(this,arguments)}}(),g=(e,t)=>!(!e||!t)&&!(e[2]<t[0]||e[0]>t[2]||e[3]<t[1]||e[1]>t[3]),m=e=>{var t=1/0,a=1/0,r=-1/0,i=-1/0,l=(e,o)=>{var s;0===o?(s=e,t=Math.min(t,s[0]),a=Math.min(a,s[1]),r=Math.max(r,s[0]),i=Math.max(i,s[1])):e.forEach(e=>l(e,o-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=m(e);t=Math.min(t,l[0]),a=Math.min(a,l[1]),r=Math.max(r,l[2]),i=Math.max(i,l[3])});break;default:throw new Error("Unsupported geometry type: ".concat(e.type))}return[t,a,r,i]},S=e=>{var t,a,r,i,{dataset:o,map:s,onUpdate:n}=e,{geojson:d,idProperty:u,transformRequest:c,maxFeatures:p,minZoom:y=0}=o,v=new Map,h=null,f=null,S=()=>({type:"FeatureCollection",features:Array.from(v.values()).map(e=>e.feature)}),O=function(){var e=l(function*(){var e=s.getZoom();if(!(e<y)){var t=(e=>{var t=e.getBounds();return[t.getWest(),t.getSouth(),t.getEast(),t.getNorth()]})(s);if(!(h&&(a=h,r=t,a&&r&&r[0]>=a[0]&&r[1]>=a[1]&&r[2]<=a[2]&&r[3]<=a[3]))){var a,r,i,l;f&&f.abort(),f=new AbortController;try{var O={bbox:t,zoom:e,dataset:o},k=yield b(d,O,c,f.signal),P=Date.now();k.features.forEach(e=>{var t=(e=>{var t,a;return u&&null!==(t=null===(a=e.properties)||void 0===a?void 0:a[u])&&void 0!==t?t:e.id})(e);null!=t?v.set(t,{feature:e,bbox:m(e.geometry),lastSeenAt:P}):console.warn("Feature missing ID, skipping:",e)}),l=t,h=(i=h)?[Math.min(i[0],l[0]),Math.min(i[1],l[1]),Math.max(i[2],l[2]),Math.max(i[3],l[3])]:[...l];var A=v.size;(e=>{if(p&&!(v.size<=1.2*p)){var t=p,a=[],r=[];for(var[i,l]of v)g(l.bbox,e)?a.push(i):r.push({id:i,lastSeenAt:l.lastSeenAt});r.sort((e,t)=>e.lastSeenAt-t.lastSeenAt);for(var o=v.size-t,s=0;s<o&&s<r.length;s++)v.delete(r[s].id);if(v.size>t)for(var n=v.size-t,d=a.map(e=>({id:e,lastSeenAt:v.get(e).lastSeenAt})).sort((e,t)=>e.lastSeenAt-t.lastSeenAt),u=0;u<n&&u<d.length;u++)v.delete(d[u].id)}})(t),v.size<A&&(h=t),n(o.id,S())}catch(e){if("AbortError"===e.name)return;console.error("Failed to fetch dynamic GeoJSON for ".concat(o.id,":"),e)}}}});return function(){return e.apply(this,arguments)}}(),k=(t=O,a=200,(i=function(){for(var e=arguments.length,i=new Array(e),l=0;l<e;l++)i[l]=arguments[l];clearTimeout(r),r=setTimeout(()=>t(...i),a)}).cancel=()=>{clearTimeout(r),r=null},i),P=()=>{k()};return s.on("moveend",P),O(),{destroy(){s.off("moveend",P),k.cancel(),f&&f.abort()},clear(){v.clear(),h=null,n(o.id,{type:"FeatureCollection",features:[]})},refresh(){v.clear(),h=null,O()},getFeatureCount:()=>v.size,reapply(){v.size>0&&n(o.id,S())}}},O=e=>{var{adapter:t,pluginConfig:a,pluginStateRef:r,mapStyleId:i,mapProvider:l,events:o,eventBus:s}=e,{datasets:d}=a,u=new Map,c=()=>r.current.datasets||d,y=d.map(e=>p(e,n));t.init(y,i).then(()=>{y.forEach(e=>{if((e=>"string"==typeof e.geojson&&!!e.idProperty&&"function"==typeof e.transformRequest)(e)){var a=S({dataset:e,map:l.map,onUpdate:(e,a)=>t.setData(e,a)});u.set(e.id,a)}}),s.emit("datasets:ready")});var v=e=>{t.onStyleChange(c(),e.id,r.current.hiddenFeatures||{},u)};return s.on(o.MAP_SET_STYLE,v),{remove(){s.off(o.MAP_SET_STYLE,v),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,a;return null!==(t=null===(a=u.get(e))||void 0===a?void 0:a.getFeatureCount())&&void 0!==t?t:null}}};var k=function(e,t){var a,r,{pluginState:i}=e,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{datasetId:o,sublayerId:s}=l;if(s){var n,d=t?"visible":"hidden";return null===(n=i.layerAdapter)||void 0===n||n[t?"showSublayer":"hideSublayer"](o,s),void i.dispatch({type:"SET_SUBLAYER_VISIBILITY",payload:{datasetId:o,sublayerId:s,visibility:d}})}if(o){if(null===(r=i.layerAdapter)||void 0===r||r[t?"showDataset":"hideDataset"](o),i.dispatch({type:"SET_DATASET_VISIBILITY",payload:{id:o,visibility:t?"visible":"hidden"}}),t){var u,c=null===(u=i.datasets)||void 0===u?void 0:u.find(e=>e.id===o);Object.entries((null==c?void 0:c.sublayerVisibility)||{}).forEach(e=>{var t,[a,r]=e;"hidden"===r&&(null===(t=i.layerAdapter)||void 0===t||t.hideSublayer(o,a))})}}else i.dispatch({type:"SET_GLOBAL_VISIBILITY",payload:{visibility:t?"visible":"hidden"}}),null===(a=i.datasets)||void 0===a||a.forEach(e=>{var a;null===(a=i.layerAdapter)||void 0===a||a[t?"showDataset":"hideDataset"](e.id),t&&Object.entries(e.sublayerVisibility||{}).forEach(t=>{var a,[r,l]=t;"hidden"===l&&(null===(a=i.layerAdapter)||void 0===a||a.hideSublayer(e.id,r))})})},P="im-c-datasets-layers__item-label govuk-label govuk-checkboxes__label",A=e=>{var t;return null===(t=e.sublayers)||void 0===t?void 0:t.some(e=>e.toggleVisibility)},E=(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 a=Object.values(e)[0];return null!=a?a:null}return null},_={"cross-hatch":'<path d="M0 4.486V3.485h3.5V.001h1v3.484h7.002V.001h1v3.484h3.5v1.001h-3.5v7h3.5v.999h-3.5v3.516h-1v-3.516H4.499v3.516h-1v-3.516H0v-.999h3.5v-7H0zm11.501 0H4.499v7h7.002v-7z" fill="{{foreground}}"/>',"diagonal-cross-hatch":'<path d="M0 8.707V7.293L7.293 0h1.414L16 7.293v1.414L8.707 16H7.293L0 8.707zM.707 8L8 15.293 15.293 8 8 .707.707 8z" fill="{{foreground}}"/>',"forward-diagonal-hatch":'<path d="M16 8.707V7.293L7.293 16h1.414L16 8.707zm-16 0L8.707 0H7.293L0 7.293v1.414z" fill="{{foreground}}"/>',"backward-diagonal-hatch":'<path d="M0 8.707V7.293L8.707 16H7.293L0 8.707zm16 0L7.293 0h1.414L16 7.293v1.414z" fill="{{foreground}}"/>',"horizontal-hatch":'<path d="M0 4.5V3.499h15.999V4.5H0zm0 7h15.999V12.5H0v-1.001z" fill="{{foreground}}"/>',"vertical-hatch":'<path d="M3.501 16.001V0h1v16.001h-1zm7.998 0V0h1v16.001h-1z" fill="{{foreground}}"/>',dot:'<path d="M3.999 2A2 2 0 0 1 6 3.999C6 5.103 5.103 6 3.999 6a2 2 0 0 1-1.999-2.001A2 2 0 0 1 3.999 2zm0 7.999C5.103 10 6 10.897 6 12.001A2 2 0 0 1 3.999 14a2 2 0 0 1-1.999-1.999A2 2 0 0 1 3.999 10zM11.999 2A2 2 0 0 1 14 3.999C14 5.103 13.103 6 11.999 6S10 5.103 10 3.999A2 2 0 0 1 11.999 2zm0 7.999c1.104 0 2.001.897 2.001 2.001A2 2 0 0 1 11.999 14 2 2 0 0 1 10 12.001c0-1.104.897-2.001 1.999-2.001z" fill="{{foreground}}"/>',diamond:'<path d="M4 .465L7.535 4 4 7.535.465 4 4 .465zm0 7.999l3.535 3.535L4 15.535.465 11.999 4 8.464zm8-8l3.535 3.535-3.536 3.536L8.464 4 12 .464zm0 8.001L15.536 12 12 15.536 8.465 12 12 8.465z" fill="{{foreground}}"/>'},I=(e,t,a)=>e.replace(/\{\{foreground\}\}/g,t||"black").replace(/\{\{background\}\}/g,a),w=(e,t)=>{var a=(e=>e.fillPatternSvgContent?e.fillPatternSvgContent:e.fillPattern&&_[e.fillPattern]?_[e.fillPattern]:null)(e);if(!a)return null;var r=E(e.fillPatternForegroundColor,t)||"black",i=E(e.fillPatternBackgroundColor,t)||"transparent",l=E(e.stroke,t)||r;return{border:I('<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="{{background}}" stroke="{{foreground}}" stroke-width="2"/>',l,i),content:I(a,r,i)}};function L(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}var D=(e,t)=>"symbolDescription"in t?t.symbolDescription:c(t)?void 0:e.symbolDescription,j=(e,t)=>{var a,r,l,o,s,n,d,u,c,p=t.style||{},y=(u=e.filter,c=t.filter,u&&c?["all",u,c]:c||u||null);return function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?L(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):L(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}({id:t.id,label:t.label,stroke:null!==(a=p.stroke)&&void 0!==a?a:e.stroke,strokeWidth:null!==(r=p.strokeWidth)&&void 0!==r?r:e.strokeWidth,strokeDashArray:null!==(l=p.strokeDashArray)&&void 0!==l?l:e.strokeDashArray,opacity:null!==(o=p.opacity)&&void 0!==o?o:e.opacity,keySymbolShape:null!==(s=p.keySymbolShape)&&void 0!==s?s:e.keySymbolShape,symbolDescription:D(e,p),showInKey:null!==(n=t.showInKey)&&void 0!==n?n:e.showInKey,toggleVisibility:null!==(d=t.toggleVisibility)&&void 0!==d&&d,filter:y,minZoom:e.minZoom,maxZoom:e.maxZoom},((e,t)=>{var a,r;return t.fillPattern||t.fillPatternSvgContent?{fillPattern:t.fillPattern,fillPatternSvgContent:t.fillPatternSvgContent,fillPatternForegroundColor:null!==(a=t.fillPatternForegroundColor)&&void 0!==a?a:e.fillPatternForegroundColor,fillPatternBackgroundColor:null!==(r=t.fillPatternBackgroundColor)&&void 0!==r?r:e.fillPatternBackgroundColor}:"fill"in t?{fill:t.fill}:{fill:e.fill,fillPattern:e.fillPattern,fillPatternSvgContent:e.fillPatternSvgContent,fillPatternForegroundColor:e.fillPatternForegroundColor,fillPatternBackgroundColor:e.fillPatternBackgroundColor}})(e,p))};function T(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function C(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?T(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):T(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var x=20;function M(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function F(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?M(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):M(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}function V(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function z(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?V(Object(a),!0).forEach(function(t){i(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):V(Object(a)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var B={InitComponent:function(a){var r,{pluginConfig:i,pluginState:o,appState:s,mapState:d,mapProvider:u,services:c}=a,{dispatch:p}=o,{events:y,eventBus:v}=c,h=!(null===(r=u.map)||void 0===r||!r.getStyle()),f=e(o);f.current=o;var b=e(null);return t(()=>{var e,t,a,r,c=null===(e=null===(t=i.includeModes)||void 0===t?void 0:t.includes(s.mode))||void 0===e||e,g=null!==(a=null===(r=i.excludeModes)||void 0===r?void 0:r.includes(s.mode))&&void 0!==a&&a;if(h&&c&&!g&&!b.current){o.datasets||p({type:"SET_DATASETS",payload:{datasets:i.datasets,datasetDefaults:n}});var m=function(){var e=l(function*(){if(!i.layerAdapter)throw new Error("datasets plugin: no layerAdapter provided. Import and pass maplibreLayerAdapter or a custom adapter.");var{default:e}=yield i.layerAdapter.load(),t=new e(u.map);p({type:"SET_LAYER_ADAPTER",payload:t}),b.current=O({adapter:t,pluginConfig:i,pluginStateRef:f,mapStyleId:d.mapStyle.id,mapProvider:u,events:y,eventBus:v})});return function(){return e.apply(this,arguments)}}();m()}},[h,s.mode]),t(()=>()=>{b.current&&(b.current.remove(),b.current=null),p({type:"SET_LAYER_ADAPTER",payload:null})},[]),null},reducer:{initialState:{datasets:null,hiddenFeatures:{},layerAdapter:null},actions:f},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,i,l,{pluginState:o}=e,s=e=>{var{value:t,checked:a}=e.target;k({pluginState:o},a,{datasetId:t})},n=e=>{var{checked:t}=e.target,a=e.target.dataset.datasetId,r=e.target.dataset.sublayerId;k({pluginState:o},t,{datasetId:a,sublayerId:r})},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 a("div",{className:t,"data-module":"govuk-checkboxes",children:r("div",{className:"govuk-checkboxes__item",children:[a("input",{className:"govuk-checkboxes__input",id:e.id,name:"layers",type:"checkbox",value:e.id,checked:"hidden"!==e.visibility,onChange:s}),a("label",{className:P,htmlFor:e.id,children:e.label})]})},e.id)},u=(o.datasets||[]).filter(e=>e.toggleVisibility||A(e)),c=(t=u,i=new Set,l=[],t.forEach(e=>{if(A(e))l.push({type:"sublayers",dataset:e});else{if(e.groupLabel){if(i.has(e.groupLabel))return;return i.add(e.groupLabel),void l.push({type:"group",groupLabel:e.groupLabel,datasets:t.filter(t=>!A(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 a("div",{className:y,children:c.map(e=>{if("sublayers"===e.type){var{dataset:t}=e,i=t.sublayers.filter(e=>e.toggleVisibility).some(e=>{var a;return"hidden"!==(null===(a=t.sublayerVisibility)||void 0===a?void 0:a[e.id])}),l="govuk-form-group im-c-datasets-layers-group".concat(i?" im-c-datasets-layers-group--items-checked":"");return a("div",{className:l,children:r("fieldset",{className:"im-c-datasets-layers-group__fieldset",children:[a("legend",{className:"im-c-datasets-layers-group__legend",children:t.label}),t.sublayers.filter(e=>e.toggleVisibility).map(e=>{var i,l="hidden"!==(null===(i=t.sublayerVisibility)||void 0===i?void 0:i[e.id]),o="".concat(t.id,"-").concat(e.id),s="im-c-datasets-layers__item govuk-checkboxes govuk-checkboxes--small".concat(l?" im-c-datasets-layers__item--checked":"");return a("div",{className:s,"data-module":"govuk-checkboxes",children:r("div",{className:"govuk-checkboxes__item",children:[a("input",{className:"govuk-checkboxes__input",id:o,type:"checkbox",checked:l,"data-dataset-id":t.id,"data-sublayer-id":e.id,onChange:n}),a("label",{className:P,htmlFor:o,children:e.label})]})},e.id)})]})},t.id)}if("group"===e.type){var o=e.datasets.some(e=>"hidden"!==e.visibility),s="govuk-form-group im-c-datasets-layers-group".concat(o?" im-c-datasets-layers-group--items-checked":"");return a("div",{className:s,children:r("fieldset",{className:"im-c-datasets-layers-group__fieldset",children:[a("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,i,l,{mapState:o,pluginState:s}=e,{mapStyle:n}=o,d=e=>{var t,i={xmlns:"http://www.w3.org/2000/svg",width:x,height:x,viewBox:"0 0 ".concat(x," ").concat(x),"aria-hidden":"true",focusable:"false"};if((t=e).fillPattern||t.fillPatternSvgContent){var l=w(e,n.id);return r("svg",C(C({},i),{},{children:[a("g",{dangerouslySetInnerHTML:{__html:l.border}}),a("g",{transform:"translate(".concat(2,", ").concat(2,")"),dangerouslySetInnerHTML:{__html:l.content}})]}))}return a("svg",C(C({},i),{},{children:"line"===e.keySymbolShape?a("line",{x1:e.strokeWidth/2,y1:10,x2:x-e.strokeWidth/2,y2:10,stroke:E(e.stroke,n.id),strokeWidth:e.strokeWidth,strokeLinecap:"round"}):a("rect",{x:e.strokeWidth/2,y:e.strokeWidth/2,width:x-e.strokeWidth,height:x-e.strokeWidth,rx:e.strokeWidth,ry:e.strokeWidth,fill:E(e.fill,n.id),stroke:E(e.stroke,n.id),strokeWidth:e.strokeWidth,strokeLinejoin:"round"})}))},u=(e,t)=>r("dl",{className:"im-c-datasets-key__item",children:[a("dt",{className:"im-c-datasets-key__item-symbol",children:d(t)}),r("dd",{className:"im-c-datasets-key__item-label",children:[t.label,t.symbolDescription&&r("span",{className:"govuk-visually-hidden",children:["(",E(t.symbolDescription,n.id),")"]})]})]},e),c=(s.datasets||[]).filter(e=>e.showInKey&&"hidden"!==e.visibility),p=(t=c,i=new Set,l=[],t.forEach(e=>{var a;if(null!==(a=e.sublayers)&&void 0!==a&&a.length)l.push({type:"sublayers",dataset:e});else{if(e.groupLabel){if(i.has(e.groupLabel))return;return i.add(e.groupLabel),void l.push({type:"group",groupLabel:e.groupLabel,datasets:t.filter(t=>{var a;return!(null!==(a=t.sublayers)&&void 0!==a&&a.length)&&t.groupLabel===e.groupLabel})})}l.push({type:"flat",dataset:e})}}),l),y=p.some(e=>"sublayers"===e.type||"group"===e.type),v="im-c-datasets-key".concat(y?" im-c-datasets-key--has-groups":"");return a("div",{className:v,children:p.map(e=>{if("sublayers"===e.type){var t="key-heading-".concat(e.dataset.id);return r("section",{className:"im-c-datasets-key__group","aria-labelledby":t,children:[a("h3",{id:t,className:"im-c-datasets-key__group-heading",children:e.dataset.label}),e.dataset.sublayers.filter(t=>{var a;return"hidden"!==(null===(a=e.dataset.sublayerVisibility)||void 0===a?void 0:a[t.id])}).map(t=>u("".concat(e.dataset.id,"-").concat(t.id),j(e.dataset,t)))]},e.dataset.id)}if("group"===e.type){var i="key-heading-".concat(e.groupLabel.toLowerCase().replaceAll(/\s+/g,"-"));return r("section",{className:"im-c-datasets-key__group","aria-labelledby":i,children:[a("h3",{id:i,className:"im-c-datasets-key__group-heading",children:e.groupLabel}),e.datasets.map(e=>u(e.id,e))]},e.groupLabel)}return u(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="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:{addDataset:(e,t)=>{var a,{pluginState:r,mapState:i}=e;null===(a=r.layerAdapter)||void 0===a||a.addDataset(F(F({},n),t),i.mapStyle.id),r.dispatch({type:"ADD_DATASET",payload:{dataset:t,datasetDefaults:n}})},removeDataset:(e,t)=>{var a,r,{pluginState:i}=e,l=null===(a=i.datasets)||void 0===a?void 0:a.find(e=>e.id===t);l&&(null===(r=i.layerAdapter)||void 0===r||r.removeDataset(l,i.datasets),i.dispatch({type:"REMOVE_DATASET",payload:{id:t}}))},setDatasetVisibility:k,setFeatureVisibility:function(e,t,a){var r,{pluginState:i}=e,{datasetId:l,idProperty:o=null}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=null===(r=i.datasets)||void 0===r?void 0:r.find(e=>e.id===l);if(s)if(t){var n,d=i.hiddenFeatures[l];if(!d)return;var u=d.ids.filter(e=>!a.includes(e));i.dispatch({type:"SHOW_FEATURES",payload:{layerId:l,featureIds:a}}),null===(n=i.layerAdapter)||void 0===n||n.showFeatures(s,o,u)}else{var c,p=i.hiddenFeatures[l],y=(null==p?void 0:p.ids)||[],v=[...new Set([...y,...a])];i.dispatch({type:"HIDE_FEATURES",payload:{layerId:l,idProperty:o,featureIds:a}}),null===(c=i.layerAdapter)||void 0===c||c.hideFeatures(s,o,v)}},setStyle:function(e,t){var a,r,{pluginState:i,mapState:l}=e,{datasetId:o,sublayerId:s}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=null===(a=i.datasets)||void 0===a?void 0:a.find(e=>e.id===o);if(n)if(s){var d,u;i.dispatch({type:"SET_SUBLAYER_STYLE",payload:{datasetId:o,sublayerId:s,styleChanges:t}});var c=z(z({},n),{},{sublayers:null===(d=n.sublayers)||void 0===d?void 0:d.map(e=>e.id===s?z(z({},e),{},{style:z(z({},e.style),t)}):e)});null===(u=i.layerAdapter)||void 0===u||u.setSublayerStyle(c,s,l.mapStyle.id)}else{i.dispatch({type:"SET_DATASET_STYLE",payload:{datasetId:o,styleChanges:t}});var p=z(z({},n),t);null===(r=i.layerAdapter)||void 0===r||r.setStyle(p,l.mapStyle.id)}},getStyle:function(e){var t,a,{pluginState:r}=e,{datasetId:i,sublayerId:l}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=null===(t=r.datasets)||void 0===t?void 0:t.find(e=>e.id===i);if(!o)return null;if(l){var s,n,d=null===(s=o.sublayers)||void 0===s?void 0:s.find(e=>e.id===l);return null!==(n=null==d?void 0:d.style)&&void 0!==n?n:null}return null!==(a=o.style)&&void 0!==a?a:null},setOpacity:(e,t,a)=>{var r,{pluginState:i}=e,{datasetId:l,sublayerId:o}=a||{};if(o){var s,n;if(!(null===(s=i.datasets)||void 0===s?void 0:s.find(e=>e.id===l)))return;return i.dispatch({type:"SET_SUBLAYER_OPACITY",payload:{datasetId:l,sublayerId:o,opacity:t}}),void(null===(n=i.layerAdapter)||void 0===n||n.setSublayerOpacity(l,o,t))}if(l){var d,u;if(!(null===(d=i.datasets)||void 0===d?void 0:d.find(e=>e.id===l)))return;return i.dispatch({type:"SET_OPACITY",payload:{datasetId:l,opacity:t}}),void(null===(u=i.layerAdapter)||void 0===u||u.setOpacity(l,t))}i.dispatch({type:"SET_GLOBAL_OPACITY",payload:{opacity:t}}),null===(r=i.datasets)||void 0===r||r.forEach(e=>{var a;null===(a=i.layerAdapter)||void 0===a||a.setOpacity(e.id,t)})},getOpacity:(e,t)=>{var a,r,{pluginState:i}=e,{datasetId:l,sublayerId:o}=t||{};if(o){var s,n,d,u,c=null===(s=i.datasets)||void 0===s?void 0:s.find(e=>e.id===l),p=null==c||null===(n=c.sublayers)||void 0===n?void 0:n.find(e=>e.id===o);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,v,h=null===(y=i.datasets)||void 0===y?void 0:y.find(e=>e.id===l);return null!==(v=null==h?void 0:h.opacity)&&void 0!==v?v:null}return null!==(a=null===(r=i.datasets)||void 0===r||null===(r=r[0])||void 0===r?void 0:r.opacity)&&void 0!==a?a:null},setData:(e,t,a)=>{var r,i,{pluginState:l,services:o}=e,{datasetId:s}=a,n=null===(r=l.datasets)||void 0===r?void 0:r.find(e=>e.id===s);null!=n&&n.tiles?o.logger.warn('setData called on vector tile dataset "'.concat(s,'" — has no effect')):null===(i=l.layerAdapter)||void 0===i||i.setData(s,t)}}};export{B 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_OPENED:"app:opened",APP_CLOSED:"app:closed",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_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 U(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 H(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?U(Object(r),!0).forEach(function(t){o(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):U(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=H(H({},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",H(H({},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};