@defra/interactive-map 0.0.3-alpha → 0.0.5-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 (407) hide show
  1. package/README.md +16 -57
  2. package/dist/css/index.css +1 -1
  3. package/dist/esm/im-core.js +1 -1
  4. package/dist/esm/index.js +1 -1
  5. package/dist/umd/im-core.js +1 -1
  6. package/dist/umd/index.js +1 -1
  7. package/docs/api/button-definition.md +176 -0
  8. package/docs/api/context.md +124 -0
  9. package/docs/api/control-definition.md +72 -0
  10. package/docs/api/icon-definition.md +28 -0
  11. package/docs/api/map-style-config.md +76 -0
  12. package/docs/api/marker-config.md +51 -0
  13. package/docs/api/panel-definition.md +117 -0
  14. package/docs/api/slots.md +25 -0
  15. package/docs/api.md +721 -0
  16. package/docs/architecture.md +139 -0
  17. package/docs/building-a-plugin.md +149 -0
  18. package/docs/getting-started.md +46 -0
  19. package/docs/govuk-prototype.md +0 -0
  20. package/docs/plugins/interact.md +205 -0
  21. package/docs/plugins/map-styles.md +84 -0
  22. package/docs/plugins/plugin-context.md +67 -0
  23. package/docs/plugins/plugin-descriptor.md +71 -0
  24. package/docs/plugins/plugin-manifest.md +118 -0
  25. package/docs/plugins/scale-bar.md +62 -0
  26. package/docs/plugins/search.md +162 -0
  27. package/docs/plugins.md +116 -0
  28. package/govuk-prototype-kit.config.json +7 -7
  29. package/package.json +16 -2
  30. package/plugins/beta/datasets/dist/esm/im-datasets-plugin.js +2 -0
  31. package/plugins/beta/datasets/dist/esm/index.js +2 -0
  32. package/plugins/beta/datasets/dist/umd/im-datasets-plugin.js +2 -0
  33. package/plugins/beta/datasets/dist/umd/index.js +2 -0
  34. package/plugins/beta/datasets/src/datasets.js +113 -0
  35. package/plugins/beta/datasets/src/fetch/createDynamicSource.js +206 -0
  36. package/plugins/beta/datasets/src/fetch/fetchGeoJSON.js +38 -0
  37. package/plugins/{datasets → beta/datasets}/src/handleSetMapStyle.js +8 -1
  38. package/plugins/{datasets → beta/datasets}/src/manifest.js +1 -1
  39. package/plugins/{datasets → beta/datasets}/src/mapLayers.js +42 -4
  40. package/plugins/{datasets → beta/datasets}/src/panels/Key.jsx +1 -1
  41. package/plugins/beta/datasets/src/utils/bbox.js +115 -0
  42. package/plugins/beta/draw-ml/dist/css/index.css +1 -0
  43. package/plugins/beta/draw-ml/dist/esm/im-draw-ml-plugin.js +1 -0
  44. package/plugins/beta/draw-ml/dist/esm/index.js +2 -0
  45. package/plugins/beta/draw-ml/dist/umd/im-draw-ml-plugin.js +1 -0
  46. package/plugins/beta/draw-ml/dist/umd/index.js +2 -0
  47. package/plugins/beta/draw-ml/src/api/addFeature.js +27 -0
  48. package/plugins/{draw-ml → beta/draw-ml}/src/api/editFeature.js +17 -6
  49. package/plugins/beta/draw-ml/src/api/merge.js +9 -0
  50. package/plugins/beta/draw-ml/src/api/newLine.js +68 -0
  51. package/plugins/beta/draw-ml/src/api/newPolygon.js +68 -0
  52. package/plugins/beta/draw-ml/src/api/split.js +81 -0
  53. package/plugins/{draw-ml → beta/draw-ml}/src/defaults.js +3 -0
  54. package/plugins/beta/draw-ml/src/draw.scss +32 -0
  55. package/plugins/beta/draw-ml/src/events.js +171 -0
  56. package/plugins/beta/draw-ml/src/manifest.js +132 -0
  57. package/plugins/{draw-ml → beta/draw-ml}/src/mapboxDraw.js +51 -2
  58. package/plugins/{draw-ml → beta/draw-ml}/src/mapboxSnap.js +18 -12
  59. package/plugins/beta/draw-ml/src/modes/createDrawMode.js +497 -0
  60. package/plugins/beta/draw-ml/src/modes/drawLineMode.js +18 -0
  61. package/plugins/beta/draw-ml/src/modes/drawPolygonMode.js +16 -0
  62. package/plugins/beta/draw-ml/src/modes/editVertex/geometryHelpers.js +135 -0
  63. package/plugins/beta/draw-ml/src/modes/editVertex/helpers.js +2 -0
  64. package/plugins/beta/draw-ml/src/modes/editVertex/touchHandlers.js +134 -0
  65. package/plugins/beta/draw-ml/src/modes/editVertex/undoHandlers.js +133 -0
  66. package/plugins/beta/draw-ml/src/modes/editVertex/vertexOperations.js +141 -0
  67. package/plugins/beta/draw-ml/src/modes/editVertex/vertexQueries.js +121 -0
  68. package/plugins/beta/draw-ml/src/modes/editVertexMode.js +437 -0
  69. package/plugins/{draw-ml → beta/draw-ml}/src/reducer.js +30 -2
  70. package/plugins/{draw-ml → beta/draw-ml}/src/styles.js +66 -36
  71. package/plugins/beta/draw-ml/src/undoStack.js +50 -0
  72. package/plugins/beta/draw-ml/src/utils/debounce.js +16 -0
  73. package/plugins/beta/draw-ml/src/utils/flattenStyleProperties.js +49 -0
  74. package/plugins/beta/draw-ml/src/utils/spatial.js +258 -0
  75. package/plugins/beta/frame/dist/esm/im-frame-plugin.js +1 -0
  76. package/plugins/beta/frame/dist/esm/index.js +2 -0
  77. package/plugins/beta/frame/dist/umd/im-frame-plugin.js +1 -0
  78. package/plugins/beta/frame/dist/umd/index.js +2 -0
  79. package/plugins/{frame → beta/frame}/src/Frame.jsx +1 -1
  80. package/plugins/{map-styles → beta/map-styles}/dist/css/index.css +1 -1
  81. package/plugins/beta/map-styles/dist/esm/im-map-styles-plugin.js +1 -0
  82. package/plugins/beta/map-styles/dist/esm/index.js +2 -0
  83. package/plugins/beta/map-styles/dist/umd/im-map-styles-plugin.js +1 -0
  84. package/plugins/beta/map-styles/dist/umd/index.js +2 -0
  85. package/plugins/{map-styles → beta/map-styles}/src/MapStyles.jsx +1 -1
  86. package/plugins/{map-styles → beta/map-styles}/src/manifest.js +8 -10
  87. package/plugins/{map-styles → beta/map-styles}/src/mapStyles.scss +4 -1
  88. package/plugins/beta/scale-bar/dist/esm/im-scale-bar-plugin.js +1 -0
  89. package/plugins/beta/scale-bar/dist/esm/index.js +2 -0
  90. package/plugins/beta/scale-bar/dist/umd/im-scale-bar-plugin.js +1 -0
  91. package/plugins/beta/scale-bar/dist/umd/index.js +2 -0
  92. package/plugins/beta/use-location/dist/esm/im-use-location-plugin.js +1 -0
  93. package/plugins/beta/use-location/dist/esm/index.js +2 -0
  94. package/plugins/beta/use-location/dist/umd/im-use-location-plugin.js +1 -0
  95. package/plugins/beta/use-location/dist/umd/index.js +2 -0
  96. package/plugins/interact/dist/css/index.css +1 -1
  97. package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
  98. package/plugins/interact/dist/esm/index.js +1 -1
  99. package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
  100. package/plugins/interact/dist/umd/index.js +1 -1
  101. package/plugins/interact/src/InteractInit.jsx +1 -1
  102. package/plugins/interact/src/InteractInit.test.js +97 -0
  103. package/plugins/interact/src/api/clear.test.js +18 -0
  104. package/plugins/interact/src/api/disable.test.js +12 -0
  105. package/plugins/interact/src/api/enable.test.js +48 -0
  106. package/plugins/interact/src/api/selectFeature.test.js +33 -0
  107. package/plugins/interact/src/api/unselectFeature.test.js +33 -0
  108. package/plugins/interact/src/defaults.js +2 -0
  109. package/plugins/interact/src/events.js +37 -52
  110. package/plugins/interact/src/events.test.js +186 -0
  111. package/plugins/interact/src/hooks/useHighlightSync.js +1 -1
  112. package/plugins/interact/src/hooks/useHighlightSync.test.js +212 -0
  113. package/plugins/interact/src/hooks/useInteractionHandlers.js +80 -41
  114. package/plugins/interact/src/hooks/useInteractionHandlers.test.js +316 -0
  115. package/plugins/interact/src/index.test.js +22 -0
  116. package/plugins/interact/src/interact.scss +6 -0
  117. package/plugins/interact/src/manifest.js +1 -1
  118. package/plugins/interact/src/manifest.test.js +94 -0
  119. package/plugins/interact/src/reducer.js +28 -21
  120. package/plugins/interact/src/reducer.test.js +155 -0
  121. package/plugins/interact/src/utils/buildStylesMap.test.js +57 -0
  122. package/plugins/interact/src/utils/featureQueries.js +2 -2
  123. package/plugins/interact/src/utils/featureQueries.test.js +56 -0
  124. package/plugins/interact/src/utils/spatial.js +95 -0
  125. package/plugins/interact/src/utils/spatial.test.js +93 -0
  126. package/plugins/search/dist/css/index.css +1 -1
  127. package/plugins/search/dist/esm/im-search-plugin.js +1 -1
  128. package/plugins/search/dist/esm/index.js +1 -1
  129. package/plugins/search/dist/umd/im-search-plugin.js +1 -1
  130. package/plugins/search/dist/umd/index.js +1 -1
  131. package/plugins/search/src/Search.jsx +2 -2
  132. package/plugins/search/src/components/Form/Form.jsx +1 -1
  133. package/plugins/search/src/components/Suggestions/Suggestions.jsx +5 -5
  134. package/plugins/search/src/datasets.js +1 -1
  135. package/plugins/search/src/defaults.js +3 -0
  136. package/plugins/search/src/events/fetchSuggestions.js +48 -53
  137. package/plugins/search/src/events/formHandlers.js +3 -2
  138. package/plugins/search/src/events/index.js +1 -1
  139. package/plugins/search/src/events/inputHandlers.js +3 -1
  140. package/plugins/search/src/events/suggestionHandlers.js +12 -3
  141. package/plugins/search/src/search.scss +4 -1
  142. package/plugins/search/src/utils/parseOsNamesResults.js +15 -19
  143. package/providers/{esri → beta/esri}/src/esriProvider.js +1 -1
  144. package/providers/{esri → beta/esri}/src/index.js +1 -1
  145. package/providers/{esri → beta/esri}/src/mapEvents.js +2 -2
  146. package/providers/beta/open-names/dist/esm/im-reverse-geocode.js +2 -0
  147. package/providers/beta/open-names/dist/esm/index.js +2 -0
  148. package/providers/beta/open-names/dist/umd/im-reverse-geocode.js +2 -0
  149. package/providers/beta/open-names/dist/umd/im-reverse-geocode.js.LICENSE.txt +1 -0
  150. package/providers/beta/open-names/dist/umd/index.js +2 -0
  151. package/providers/beta/open-names/dist/umd/index.js.LICENSE.txt +1 -0
  152. package/providers/maplibre/dist/esm/im-maplibre-framework.js +1 -1
  153. package/providers/maplibre/dist/esm/im-maplibre-framework.js.LICENSE.txt +1 -1
  154. package/providers/maplibre/dist/esm/im-maplibre-provider.js +1 -1
  155. package/providers/maplibre/dist/esm/index.js +1 -1
  156. package/providers/maplibre/dist/umd/im-maplibre-framework.js +1 -1
  157. package/providers/maplibre/dist/umd/im-maplibre-framework.js.LICENSE.txt +1 -1
  158. package/providers/maplibre/dist/umd/im-maplibre-provider.js +1 -1
  159. package/providers/maplibre/dist/umd/index.js +1 -1
  160. package/providers/maplibre/src/defaults.js +3 -2
  161. package/providers/maplibre/src/index.js +36 -20
  162. package/providers/maplibre/src/maplibreProvider.js +140 -11
  163. package/providers/maplibre/src/utils/detectWebgl.js +1 -2
  164. package/providers/maplibre/src/utils/highlightFeatures.js +78 -67
  165. package/providers/maplibre/src/utils/labels.js +174 -120
  166. package/providers/maplibre/src/utils/maplibreFixes.js +2 -2
  167. package/providers/maplibre/src/utils/queryFeatures.js +146 -0
  168. package/providers/maplibre/src/utils/spatial.js +14 -17
  169. package/sonar-project.properties +40 -3
  170. package/src/App/components/Actions/Actions.jsx +2 -2
  171. package/src/App/components/Actions/Actions.module.scss +2 -2
  172. package/src/App/components/KeyboardHelp/KeyboardHelp.jsx +3 -1
  173. package/src/App/components/KeyboardHelp/KeyboardHelp.test.jsx +9 -0
  174. package/src/App/components/Logo/Logo.jsx +1 -1
  175. package/src/App/components/MapButton/MapButton.jsx +217 -41
  176. package/src/App/components/MapButton/MapButton.module.scss +32 -21
  177. package/src/App/components/MapButton/MapButton.test.jsx +128 -84
  178. package/src/App/components/Markers/Markers.jsx +1 -1
  179. package/src/App/components/Markers/Markers.module.scss +0 -5
  180. package/src/App/components/Panel/Panel.jsx +75 -45
  181. package/src/App/components/Panel/Panel.module.scss +18 -24
  182. package/src/App/components/Panel/Panel.test.jsx +18 -0
  183. package/src/App/components/PopupMenu/PopupMenu.jsx +246 -0
  184. package/src/App/components/PopupMenu/PopupMenu.module.scss +70 -0
  185. package/src/App/components/PopupMenu/PopupMenu.test.jsx +304 -0
  186. package/src/App/components/Tooltip/Tooltip.jsx +4 -2
  187. package/src/App/components/Tooltip/getTooltipPosition.js +1 -1
  188. package/src/App/components/Viewport/MapController.jsx +1 -1
  189. package/src/App/components/Viewport/MapStatus.jsx +1 -1
  190. package/src/App/components/Viewport/Viewport.jsx +2 -2
  191. package/src/App/components/Viewport/Viewport.module.scss +2 -2
  192. package/src/App/controls/keyboardActions.js +3 -2
  193. package/src/App/controls/keyboardShortcuts.js +4 -2
  194. package/src/App/hooks/useButtonStateEvaluator.js +58 -45
  195. package/src/App/hooks/useButtonStateEvaluator.test.js +36 -3
  196. package/src/App/hooks/useCrossHairAPI.js +49 -47
  197. package/src/App/hooks/useFocusVisible.js +2 -2
  198. package/src/App/hooks/useInterfaceAPI.js +36 -1
  199. package/src/App/hooks/useKeyboardHint.js +1 -1
  200. package/src/App/hooks/useKeyboardShortcuts.js +4 -2
  201. package/src/App/hooks/useMapAnnouncements.js +34 -32
  202. package/src/App/hooks/useMapEvents.js +12 -1
  203. package/src/App/hooks/useMapProviderOverrides.js +3 -3
  204. package/src/App/hooks/useMapStateSync.js +7 -1
  205. package/src/App/hooks/useMapURLSync.js +6 -1
  206. package/src/App/hooks/useMarkersAPI.js +88 -50
  207. package/src/App/hooks/useMediaQueryDispatch.test.js +48 -0
  208. package/src/App/hooks/useModalPanelBehaviour.js +46 -40
  209. package/src/App/hooks/useResizeObserver.js +2 -2
  210. package/src/App/initialiseApp.js +45 -38
  211. package/src/App/layout/Layout.jsx +6 -4
  212. package/src/App/layout/layout.module.scss +13 -17
  213. package/src/App/registry/keyboardShortcutRegistry.js +12 -2
  214. package/src/App/registry/keyboardShortcutRegistry.test.js +28 -0
  215. package/src/App/registry/mergeManifests.js +1 -1
  216. package/src/App/registry/panelRegistry.js +1 -1
  217. package/src/App/registry/panelRegistry.test.js +30 -1
  218. package/src/App/registry/pluginRegistry.js +14 -51
  219. package/src/App/registry/pluginRegistry.test.js +54 -6
  220. package/src/App/renderer/HtmlElementHost.jsx +186 -0
  221. package/src/App/renderer/HtmlElementHost.test.jsx +231 -0
  222. package/src/App/renderer/mapButtons.js +12 -9
  223. package/src/App/renderer/mapButtons.test.js +6 -4
  224. package/src/App/renderer/mapControls.js +6 -0
  225. package/src/App/renderer/mapControls.test.js +10 -2
  226. package/src/App/renderer/mapPanels.js +39 -26
  227. package/src/App/renderer/mapPanels.test.js +29 -0
  228. package/src/App/renderer/pluginWrapper.test.js +28 -0
  229. package/src/App/renderer/slotHelpers.js +60 -0
  230. package/src/App/renderer/slotHelpers.test.js +82 -0
  231. package/src/App/store/AppProvider.jsx +3 -0
  232. package/src/App/store/AppProvider.test.jsx +40 -0
  233. package/src/App/store/PluginProvider.jsx +7 -5
  234. package/src/App/store/appActionsMap.js +46 -1
  235. package/src/App/store/appActionsMap.test.js +21 -0
  236. package/src/App/store/appReducer.js +1 -0
  237. package/src/App/store/mapActionsMap.js +12 -24
  238. package/src/App/store/mapReducer.js +1 -1
  239. package/src/InteractiveMap/InteractiveMap.js +194 -13
  240. package/src/InteractiveMap/InteractiveMap.test.js +164 -2
  241. package/src/InteractiveMap/behaviourController.js +12 -2
  242. package/src/InteractiveMap/behaviourController.test.js +82 -1
  243. package/src/InteractiveMap/deviceChecker.js +1 -1
  244. package/src/InteractiveMap/deviceChecker.test.js +2 -2
  245. package/src/InteractiveMap/historyManager.js +41 -5
  246. package/src/InteractiveMap/historyManager.test.js +37 -6
  247. package/src/InteractiveMap/polyfills.js +39 -0
  248. package/src/InteractiveMap/polyfills.test.js +127 -0
  249. package/src/config/appConfig.js +5 -5
  250. package/src/config/appConfig.test.js +107 -42
  251. package/src/config/defaults.js +30 -20
  252. package/src/config/events.js +110 -4
  253. package/src/index.js +5 -2
  254. package/src/index.umd.js +1 -1
  255. package/src/scss/main.scss +1 -0
  256. package/src/scss/settings/_dimensions.scss +6 -2
  257. package/src/scss/tools/_border-focus.scss +20 -4
  258. package/src/services/eventBus.test.js +24 -1
  259. package/src/test-utils.js +1 -0
  260. package/src/types.js +590 -0
  261. package/src/utils/detectBreakpoint.js +78 -77
  262. package/src/utils/detectBreakpoint.test.js +50 -4
  263. package/src/utils/detectInterfaceType.js +4 -4
  264. package/src/utils/getIsFullscreen.js +3 -1
  265. package/src/utils/getSafeZoneInset.js +23 -7
  266. package/src/utils/getSafeZoneInset.test.js +18 -0
  267. package/src/utils/mapStateSync.js +3 -3
  268. package/src/utils/queryString.js +1 -1
  269. package/src/utils/stringToKebab.js +1 -1
  270. package/src/utils/toggleInertElements.js +37 -12
  271. package/webpack.dev.mjs +3 -4
  272. package/webpack.esm.mjs +8 -8
  273. package/webpack.umd.mjs +8 -8
  274. package/plugins/datasets/dist/esm/im-datasets-plugin.js +0 -1
  275. package/plugins/datasets/dist/esm/index.js +0 -2
  276. package/plugins/datasets/dist/umd/im-datasets-plugin.js +0 -1
  277. package/plugins/datasets/dist/umd/index.js +0 -2
  278. package/plugins/datasets/src/datasets.js +0 -60
  279. package/plugins/datasets/src/utils/bbox.js +0 -4
  280. package/plugins/draw-ml/dist/css/index.css +0 -1
  281. package/plugins/draw-ml/dist/esm/im-draw-ml-plugin.js +0 -1
  282. package/plugins/draw-ml/dist/esm/index.js +0 -2
  283. package/plugins/draw-ml/dist/umd/im-draw-ml-plugin.js +0 -1
  284. package/plugins/draw-ml/dist/umd/index.js +0 -2
  285. package/plugins/draw-ml/src/api/addFeature.js +0 -15
  286. package/plugins/draw-ml/src/api/newPolygon.js +0 -43
  287. package/plugins/draw-ml/src/draw.scss +0 -9
  288. package/plugins/draw-ml/src/events.js +0 -127
  289. package/plugins/draw-ml/src/manifest.js +0 -100
  290. package/plugins/draw-ml/src/modes/drawVertexMode.js +0 -275
  291. package/plugins/draw-ml/src/modes/editVertexMode.js +0 -426
  292. package/plugins/draw-ml/src/utils.js +0 -102
  293. package/plugins/frame/dist/esm/im-frame-plugin.js +0 -1
  294. package/plugins/frame/dist/esm/index.js +0 -2
  295. package/plugins/frame/dist/umd/im-frame-plugin.js +0 -1
  296. package/plugins/frame/dist/umd/index.js +0 -2
  297. package/plugins/map-styles/dist/esm/im-map-styles-plugin.js +0 -1
  298. package/plugins/map-styles/dist/esm/index.js +0 -2
  299. package/plugins/map-styles/dist/umd/im-map-styles-plugin.js +0 -1
  300. package/plugins/map-styles/dist/umd/index.js +0 -2
  301. package/plugins/scale-bar/dist/esm/im-scale-bar-plugin.js +0 -1
  302. package/plugins/scale-bar/dist/esm/index.js +0 -2
  303. package/plugins/scale-bar/dist/umd/im-scale-bar-plugin.js +0 -1
  304. package/plugins/scale-bar/dist/umd/index.js +0 -2
  305. package/plugins/search/src/utils/fetchDataset.js +0 -23
  306. package/plugins/use-location/dist/esm/im-use-location-plugin.js +0 -1
  307. package/plugins/use-location/dist/esm/index.js +0 -2
  308. package/plugins/use-location/dist/umd/im-use-location-plugin.js +0 -1
  309. package/plugins/use-location/dist/umd/index.js +0 -2
  310. package/providers/maplibre/dist/esm/im-maplibre-legacy-framework.js +0 -1
  311. package/providers/maplibre/dist/umd/im-maplibre-legacy-framework.js +0 -1
  312. package/providers/open-names/dist/esm/im-reverse-geocode.js +0 -2
  313. package/providers/open-names/dist/esm/index.js +0 -2
  314. package/providers/open-names/dist/umd/im-reverse-geocode.js +0 -2
  315. package/providers/open-names/dist/umd/index.js +0 -2
  316. /package/docs/architecture/{ARCHITECTURE_DIAGRAMS.md → architecture-diagrams.md} +0 -0
  317. /package/plugins/{datasets → beta/datasets}/dist/css/index.css +0 -0
  318. /package/plugins/{datasets/dist/esm/index.js.LICENSE.txt → beta/datasets/dist/esm/im-datasets-plugin.js.LICENSE.txt} +0 -0
  319. /package/plugins/{datasets/dist/umd → beta/datasets/dist/esm}/index.js.LICENSE.txt +0 -0
  320. /package/plugins/{draw-ml/dist/esm/index.js.LICENSE.txt → beta/datasets/dist/umd/im-datasets-plugin.js.LICENSE.txt} +0 -0
  321. /package/plugins/{draw-ml → beta/datasets}/dist/umd/index.js.LICENSE.txt +0 -0
  322. /package/plugins/{datasets → beta/datasets}/src/DatasetsInit.jsx +0 -0
  323. /package/plugins/{datasets → beta/datasets}/src/api/addDataset.js +0 -0
  324. /package/plugins/{datasets → beta/datasets}/src/api/hideDataset.js +0 -0
  325. /package/plugins/{datasets → beta/datasets}/src/api/hideFeatures.js +0 -0
  326. /package/plugins/{datasets → beta/datasets}/src/api/removeDataset.js +0 -0
  327. /package/plugins/{datasets → beta/datasets}/src/api/showDataset.js +0 -0
  328. /package/plugins/{datasets → beta/datasets}/src/api/showFeatures.js +0 -0
  329. /package/plugins/{datasets → beta/datasets}/src/datasets.scss +0 -0
  330. /package/plugins/{datasets → beta/datasets}/src/defaults.js +0 -0
  331. /package/plugins/{datasets → beta/datasets}/src/index.js +0 -0
  332. /package/plugins/{datasets → beta/datasets}/src/panels/Key.module.scss +0 -0
  333. /package/plugins/{datasets → beta/datasets}/src/panels/Layers.jsx +0 -0
  334. /package/plugins/{datasets → beta/datasets}/src/panels/Layers.module.scss +0 -0
  335. /package/plugins/{datasets → beta/datasets}/src/reducer.js +0 -0
  336. /package/plugins/{datasets → beta/datasets}/src/utils/debounce.js +0 -0
  337. /package/plugins/{datasets → beta/datasets}/src/utils/filters.js +0 -0
  338. /package/plugins/{draw-es → beta/draw-es}/src/DrawInit.jsx +0 -0
  339. /package/plugins/{draw-es → beta/draw-es}/src/api/addFeature.js +0 -0
  340. /package/plugins/{draw-es → beta/draw-es}/src/api/deleteFeature.js +0 -0
  341. /package/plugins/{draw-es → beta/draw-es}/src/api/editFeature.js +0 -0
  342. /package/plugins/{draw-es → beta/draw-es}/src/api/newPolygon.js +0 -0
  343. /package/plugins/{draw-es → beta/draw-es}/src/events.js +0 -0
  344. /package/plugins/{draw-es → beta/draw-es}/src/graphic.js +0 -0
  345. /package/plugins/{draw-es → beta/draw-es}/src/index.js +0 -0
  346. /package/plugins/{draw-es → beta/draw-es}/src/manifest.js +0 -0
  347. /package/plugins/{draw-es → beta/draw-es}/src/reducer.js +0 -0
  348. /package/plugins/{draw-es → beta/draw-es}/src/sketchViewModel.js +0 -0
  349. /package/plugins/{frame → beta/draw-ml}/dist/esm/index.js.LICENSE.txt +0 -0
  350. /package/plugins/{frame → beta/draw-ml}/dist/umd/index.js.LICENSE.txt +0 -0
  351. /package/plugins/{draw-ml → beta/draw-ml}/src/DrawInit.jsx +0 -0
  352. /package/plugins/{draw-ml → beta/draw-ml}/src/api/deleteFeature.js +0 -0
  353. /package/plugins/{draw-ml → beta/draw-ml}/src/index.js +0 -0
  354. /package/plugins/{draw-ml → beta/draw-ml}/src/modes/disabledMode.js +0 -0
  355. /package/plugins/{draw-ml/src → beta/draw-ml/src/utils}/snapHelpers.js +0 -0
  356. /package/plugins/{frame → beta/frame}/dist/css/index.css +0 -0
  357. /package/plugins/{map-styles → beta/frame}/dist/esm/index.js.LICENSE.txt +0 -0
  358. /package/plugins/{map-styles → beta/frame}/dist/umd/index.js.LICENSE.txt +0 -0
  359. /package/plugins/{frame → beta/frame}/package.json +0 -0
  360. /package/plugins/{frame → beta/frame}/src/FrameInit.jsx +0 -0
  361. /package/plugins/{frame → beta/frame}/src/api/addFrame.js +0 -0
  362. /package/plugins/{frame → beta/frame}/src/api/editFeature.js +0 -0
  363. /package/plugins/{frame → beta/frame}/src/config.js +0 -0
  364. /package/plugins/{frame → beta/frame}/src/frame.scss +0 -0
  365. /package/plugins/{frame → beta/frame}/src/index.js +0 -0
  366. /package/plugins/{frame → beta/frame}/src/manifest.js +0 -0
  367. /package/plugins/{frame → beta/frame}/src/reducer.js +0 -0
  368. /package/plugins/{frame → beta/frame}/src/utils.js +0 -0
  369. /package/plugins/{scale-bar → beta/map-styles}/dist/esm/index.js.LICENSE.txt +0 -0
  370. /package/plugins/{scale-bar → beta/map-styles}/dist/umd/index.js.LICENSE.txt +0 -0
  371. /package/plugins/{map-styles → beta/map-styles}/src/MapStylesInit.jsx +0 -0
  372. /package/plugins/{map-styles → beta/map-styles}/src/config.js +0 -0
  373. /package/plugins/{map-styles → beta/map-styles}/src/index.js +0 -0
  374. /package/plugins/{scale-bar → beta/scale-bar}/dist/css/index.css +0 -0
  375. /package/plugins/{use-location → beta/scale-bar}/dist/esm/index.js.LICENSE.txt +0 -0
  376. /package/plugins/{use-location → beta/scale-bar}/dist/umd/index.js.LICENSE.txt +0 -0
  377. /package/plugins/{scale-bar → beta/scale-bar}/package.json +0 -0
  378. /package/plugins/{scale-bar → beta/scale-bar}/src/ScaleBar.jsx +0 -0
  379. /package/plugins/{scale-bar → beta/scale-bar}/src/ScaleBar.test.jsx +0 -0
  380. /package/plugins/{scale-bar → beta/scale-bar}/src/index.js +0 -0
  381. /package/plugins/{scale-bar → beta/scale-bar}/src/index.test.js +0 -0
  382. /package/plugins/{scale-bar → beta/scale-bar}/src/manifest.js +0 -0
  383. /package/plugins/{scale-bar → beta/scale-bar}/src/scaleBar.scss +0 -0
  384. /package/plugins/{scale-bar → beta/scale-bar}/src/utils.js +0 -0
  385. /package/plugins/{scale-bar → beta/scale-bar}/src/utils.test.js +0 -0
  386. /package/{providers/open-names → plugins/beta/use-location}/dist/esm/index.js.LICENSE.txt +0 -0
  387. /package/{providers/open-names → plugins/beta/use-location}/dist/umd/index.js.LICENSE.txt +0 -0
  388. /package/plugins/{use-location → beta/use-location}/src/UseLocation.jsx +0 -0
  389. /package/plugins/{use-location → beta/use-location}/src/UseLocationInit.jsx +0 -0
  390. /package/plugins/{use-location → beta/use-location}/src/defaults.js +0 -0
  391. /package/plugins/{use-location → beta/use-location}/src/events.js +0 -0
  392. /package/plugins/{use-location → beta/use-location}/src/index.js +0 -0
  393. /package/plugins/{use-location → beta/use-location}/src/manifest.js +0 -0
  394. /package/plugins/{use-location → beta/use-location}/src/reducer.js +0 -0
  395. /package/providers/{esri → beta/esri}/src/appEvents.js +0 -0
  396. /package/providers/{esri → beta/esri}/src/defaults.js +0 -0
  397. /package/providers/{esri → beta/esri}/src/esriProvider.scss +0 -0
  398. /package/providers/{esri → beta/esri}/src/utils/coords.js +0 -0
  399. /package/providers/{esri → beta/esri}/src/utils/detectWebGL.js +0 -0
  400. /package/providers/{esri → beta/esri}/src/utils/esriFixes.js +0 -0
  401. /package/providers/{esri → beta/esri}/src/utils/query.js +0 -0
  402. /package/providers/{esri → beta/esri}/src/utils/spatial.js +0 -0
  403. /package/providers/{open-names → beta/open-names}/dist/esm/im-reverse-geocode.js.LICENSE.txt +0 -0
  404. /package/providers/{open-names/dist/umd/im-reverse-geocode.js.LICENSE.txt → beta/open-names/dist/esm/index.js.LICENSE.txt} +0 -0
  405. /package/providers/{open-names → beta/open-names}/src/index.js +0 -0
  406. /package/providers/{open-names → beta/open-names}/src/reverseGeocode.js +0 -0
  407. /package/providers/{open-names → beta/open-names}/src/utils/mapToLocationModel.js +0 -0
package/src/types.js ADDED
@@ -0,0 +1,590 @@
1
+ // src/types.js
2
+ // This file contains shared JSDoc type definitions used across the core codebase.
3
+ // These are used by TypeScript to generate .d.ts files.
4
+
5
+ /**
6
+ * A functional component type. Uses React types for better IDE support (compatible with Preact via aliasing).
7
+ *
8
+ * @typedef {import('react').ComponentType<any>} ComponentType
9
+ */
10
+
11
+ /**
12
+ * Configuration for how a button behaves at a specific breakpoint (mobile, tablet, desktop).
13
+ *
14
+ * @typedef {Object} ButtonBreakpointConfig
15
+ *
16
+ * @property {number} [order]
17
+ * The order the button appears within its slot.
18
+ *
19
+ * @property {boolean} [showLabel]
20
+ * Whether to a show label, if false then a tooltip is generated from the the label.
21
+ *
22
+ * @property {string} slot
23
+ * The slot that the button should appear in at this breakpoint.
24
+ */
25
+
26
+ /**
27
+ * Configuration for how a control behaves at a specific breakpoint (mobile, tablet, desktop).
28
+ *
29
+ * @typedef {Object} ControlBreakpointConfig
30
+ *
31
+ * @property {string} slot
32
+ * Slot identifier.
33
+ */
34
+
35
+ /**
36
+ * Configuration for how a panel behaves at a specific breakpoint (mobile, tablet, desktop).
37
+ *
38
+ * @typedef {Object} PanelBreakpointConfig
39
+ *
40
+ * @property {boolean} [dismissable]
41
+ * Whether panel can be dismissed.
42
+ *
43
+ * @property {boolean} [exclusive]
44
+ * Whether panel is exclusive. An exclusive panel will hide other panels when it is visible.
45
+ *
46
+ * @property {boolean} [initiallyOpen]
47
+ * Whether panel is initially open.
48
+ *
49
+ * @property {boolean} [modal]
50
+ * Whether panel is modal.
51
+ *
52
+ * @property {string} slot
53
+ * Slot identifier.
54
+ *
55
+ * @property {string} [width]
56
+ * Panel width.
57
+ */
58
+
59
+ /**
60
+ * Context object passed to plugin callbacks and components, providing access to config, state and services.
61
+ *
62
+ * @typedef {Object} PluginContext
63
+ *
64
+ * @property {Object} [appConfig]
65
+ * Application configuration.
66
+ *
67
+ * @property {Object} [appState]
68
+ * Application state.
69
+ *
70
+ * @property {Object} [iconRegistry]
71
+ * Icon registry.
72
+ *
73
+ * @property {MapProvider} [mapProvider]
74
+ * Map provider instance.
75
+ *
76
+ * @property {Object} [mapState]
77
+ * Map state.
78
+ *
79
+ * @property {Object} [pluginConfig]
80
+ * Plugin-specific configuration.
81
+ *
82
+ * @property {Object} [pluginState]
83
+ * Plugin-specific state.
84
+ *
85
+ * @property {Object} [services]
86
+ * Core services (announce, reverseGeocode, closeApp, etc.).
87
+ */
88
+
89
+ /**
90
+ * Defines a button that can be rendered in the UI at various breakpoints.
91
+ *
92
+ * @typedef {Object} ButtonDefinition
93
+ *
94
+ * @property {ButtonBreakpointConfig} [desktop]
95
+ * Desktop breakpoint configuration.
96
+ *
97
+ * @property {(context: PluginContext) => boolean} [enableWhen]
98
+ * Callback to determine if the button should be enabled. Sets aria-disabled accordingly.
99
+ * Only evaluated for plugin-defined buttons; use toggleButtonState() for host buttons.
100
+ *
101
+ * @property {(context: PluginContext) => boolean} [excludeWhen]
102
+ * Callback to determine if the button should be excluded from rendering.
103
+ *
104
+ * @property {string} [group]
105
+ * Button group label for grouping related buttons.
106
+ *
107
+ * @property {(context: PluginContext) => boolean} [hiddenWhen]
108
+ * Callback to determine if the button should be hidden. Sets display: none if true.
109
+ * Only evaluated for plugin-defined buttons; use toggleButtonState() for host buttons.
110
+ *
111
+ * @property {string} [iconId]
112
+ * Icon identifier from the icon registry.
113
+ *
114
+ * @property {string} [iconSvgContent]
115
+ * Raw SVG content for the button icon. The SVG tag itself should be excluded.
116
+ *
117
+ * @property {string} id
118
+ * Unique button identifier.
119
+ *
120
+ * @property {boolean} [inline=true]
121
+ * Whether the button is rendered when the app is not in fullscreen mode.
122
+ * Set to false to only show the button when fullscreen.
123
+ *
124
+ * @property {boolean} [isPressed]
125
+ * Sets the button’s pressed state. When true or false, aria-pressed is added accordingly.
126
+ * For host buttons added via addButton() as an alternative to pressedWhen.
127
+ *
128
+ * @property {string | (() => string)} label
129
+ * Accesible label. Text or a function returning the text. Used for the label or tooltip if 'showLabel' is false.
130
+ *
131
+ * @property {ButtonBreakpointConfig} mobile
132
+ * Mobile breakpoint configuration.
133
+ *
134
+ * @property {(event: MouseEvent, context: PluginContext) => void} [onClick]
135
+ * Click handler for the button.
136
+ *
137
+ * @property {string} [panelId]
138
+ * Associated panel identifier to toggle open when clicked.
139
+ *
140
+ * @property {(context: PluginContext) => boolean} [pressedWhen]
141
+ * Callback to determine if the button should appear pressed. Sets aria-pressed accordingly.
142
+ * Only evaluated for plugin-defined buttons; use toggleButtonState() for host buttons.
143
+ *
144
+ * @property {ButtonBreakpointConfig} tablet
145
+ * Tablet breakpoint configuration.
146
+ */
147
+
148
+ /**
149
+ * Defines a custom control component that can be rendered in the UI at various breakpoints.
150
+ *
151
+ * @typedef {Object} ControlDefinition
152
+ *
153
+ * @property {string} id
154
+ * Unique control identifier.
155
+ *
156
+ * @property {string} label
157
+ * Accessible label for the control.
158
+ *
159
+ * @property {ComponentType} render
160
+ * Render component.
161
+ *
162
+ * @property {ControlBreakpointConfig} mobile
163
+ * Mobile breakpoint configuration.
164
+ *
165
+ * @property {ControlBreakpointConfig} tablet
166
+ * Tablet breakpoint configuration.
167
+ *
168
+ * @property {ControlBreakpointConfig} desktop
169
+ * Desktop breakpoint configuration.
170
+ */
171
+
172
+ /**
173
+ * Interface for map provider implementations that wrap underlying map libraries.
174
+ *
175
+ * @typedef {Object} MapProvider
176
+ *
177
+ * @property {any} map
178
+ * Underlying map instance.
179
+ *
180
+ * @property {{ supportedShortcuts: string[], supportsMapSizes: boolean }} capabilities
181
+ * Map provider capabilities.
182
+ *
183
+ * @property {(config: any) => Promise<void>} initMap
184
+ * Initialize the map.
185
+ *
186
+ * @property {() => void} destroyMap
187
+ * Destroy the map.
188
+ *
189
+ * @property {(options: { center?: [number, number], zoom?: number }) => void} setView
190
+ * Set map view with optional center ([lng, lat] or [easting, northing] depending on the crs of the map provider) and zoom.
191
+ *
192
+ * @property {(delta: number) => void} zoomIn
193
+ * Zoom in by delta.
194
+ *
195
+ * @property {(delta: number) => void} zoomOut
196
+ * Zoom out by delta.
197
+ *
198
+ * @property {(offset: [number, number]) => void} panBy
199
+ * Pan map by pixel offset [x, y]. Positive x pans right, positive y pans down.
200
+ *
201
+ * @property {(bounds: [number, number, number, number]) => void} fitToBounds
202
+ * Fit map view to the specified bounds [west, south, east, north] or [minX, minY, maxX, maxY] depending on the crs of the map provider.
203
+ *
204
+ * @property {(padding: { top?: number, bottom?: number, left?: number, right?: number }) => void} setPadding
205
+ * Set map padding as pixel insets from the top, bottom, left and right edges of the map.
206
+ *
207
+ * @property {() => [number, number]} getCenter
208
+ * Get current center coordinates [lng, lat] or [easting, northing] depending on the crs of the map provider.
209
+ *
210
+ * @property {() => number} getZoom
211
+ * Get current zoom level.
212
+ *
213
+ * @property {() => [number, number, number, number]} getBounds
214
+ * Get current bounds as [west, south, east, north] or [minX, minY, maxX, maxY] depending on the crs of the map provider.
215
+ *
216
+ * @property {(point: { x: number, y: number }) => any[]} getFeaturesAtPoint
217
+ * Query rendered features at a screen pixel position (x from left edge, y from top edge of viewport).
218
+ *
219
+ * @property {() => string} getAreaDimensions
220
+ * Get the dimensions of the visible map area as a formatted string (e.g., '400m by 750m').
221
+ *
222
+ * @property {(from: [number, number], to: [number, number]) => string} getCardinalMove
223
+ * Get cardinal direction and distance between two coordinates ([lng, lat] or [easting, northing] depending on the crs of the map provider). Returns a formatted string (e.g., 'north 400m' or 'south 400m, west 750m').
224
+ *
225
+ * @property {() => number} getResolution
226
+ * Get map resolution in meters per pixel.
227
+ *
228
+ * @property {(coords: [number, number]) => { x: number, y: number }} mapToScreen
229
+ * Convert map coordinates ([lng, lat] or [easting, northing] depending on the crs of the map provider) to screen pixel position (x from left edge, y from top edge of viewport).
230
+ *
231
+ * @property {(point: { x: number, y: number }) => [number, number]} screenToMap
232
+ * Convert screen pixel position (x from left edge, y from top edge of viewport) to map coordinates ([lng, lat] or [easting, northing] depending on the crs of the map provider).
233
+ *
234
+ * @property {(selectedFeatures: any[], stylesMap: any) => any} [updateHighlightedFeatures]
235
+ * @experimental Update highlighted features on the map.
236
+ *
237
+ * @property {(direction: string) => any} [highlightNextLabel]
238
+ * @experimental Highlight the next label in the specified direction for keyboard navigation.
239
+ *
240
+ * @property {() => any} [highlightLabelAtCenter]
241
+ * @experimental Highlight the label nearest to the map center.
242
+ *
243
+ * @property {() => void} [clearHighlightedLabel]
244
+ * @experimental Clear any highlighted label.
245
+ */
246
+
247
+ /**
248
+ * Configuration options for a map provider.
249
+ *
250
+ * @typedef {Object} MapProviderConfig
251
+ *
252
+ * @property {'EPSG:4326' | 'EPSG:27700'} crs
253
+ * Coordinate reference system.
254
+ */
255
+
256
+ /**
257
+ * Descriptor for lazy-loading a map provider.
258
+ *
259
+ * @typedef {Object} MapProviderDescriptor
260
+ *
261
+ * @property {() => { isSupported: boolean, error?: string }} checkDeviceCapabilities
262
+ * Check if device is supported.
263
+ *
264
+ * @property {() => Promise<MapProviderLoadResult>} load
265
+ * Load the map provider.
266
+ */
267
+
268
+ /**
269
+ * Result returned when a map provider is loaded.
270
+ *
271
+ * @typedef {Object} MapProviderLoadResult
272
+ *
273
+ * @property {new (options: any) => MapProvider} MapProvider
274
+ * Map provider constructor.
275
+ *
276
+ * @property {MapProviderConfig} mapProviderConfig
277
+ * Map provider configuration.
278
+ *
279
+ * @property {any} [mapFramework]
280
+ * Underlying map framework.
281
+ */
282
+
283
+ /**
284
+ * Configuration for a map style (basemap appearance).
285
+ *
286
+ * @typedef {Object} MapStyleConfig
287
+ *
288
+ * @property {'light' | 'dark'} [appColorScheme]
289
+ * App UI color scheme. Ensures that panels, buttons and controls use the appropriate colour scheme.
290
+ *
291
+ * @property {string} [attribution]
292
+ * Attribution text.
293
+ *
294
+ * @property {string} [backgroundColor]
295
+ * CSS background color. Allows the viewport background to matche the background layer of the style.
296
+ *
297
+ * @property {string} [id]
298
+ * Unique identifier for the style.
299
+ *
300
+ * @property {string} [label]
301
+ * Display label for the style.
302
+ *
303
+ * @property {string} [logo]
304
+ * URL to logo image.
305
+ *
306
+ * @property {string} [logoAltText]
307
+ * Alt text for logo.
308
+ *
309
+ * @property {'light' | 'dark'} [mapColorScheme]
310
+ * Map color scheme. Used to determine the style of controls on the map. eg. Halo colours etc
311
+ *
312
+ * @property {string} [thumbnail]
313
+ * URL to thumbnail image.
314
+ *
315
+ * @property {string} url
316
+ * URL to the style.json (Mapbox Style Specification).
317
+ */
318
+
319
+ /**
320
+ * Configuration for a map marker.
321
+ *
322
+ * @typedef {Object} MarkerConfig
323
+ *
324
+ * @property {[number, number]} coords
325
+ * Coordinates [lng, lat] or [x, y].
326
+ *
327
+ * @property {string} id
328
+ * Unique marker identifier.
329
+ *
330
+ * @property {MarkerOptions} [options]
331
+ * Optional marker appearance options.
332
+ */
333
+
334
+ /**
335
+ * Options for customizing marker appearance.
336
+ *
337
+ * @typedef {Object} MarkerOptions
338
+ *
339
+ * @property {string | Record<string, string>} [color]
340
+ * Marker color or object with colors keyed by style ID.
341
+ *
342
+ * @property {string} [shape]
343
+ * Marker shape (e.g., 'pin').
344
+ */
345
+
346
+ /**
347
+ * Defines a panel that can be rendered in the UI at various breakpoints.
348
+ *
349
+ * @typedef {Object} PanelDefinition
350
+ *
351
+ * @property {PanelBreakpointConfig} desktop
352
+ * Desktop breakpoint configuration.
353
+ *
354
+ * @property {string} [html]
355
+ * HTML content.
356
+ *
357
+ * @property {string} id
358
+ * Panel identifier.
359
+ *
360
+ * @property {string} label
361
+ * Accessible label. Used as the panel heading.
362
+ *
363
+ * @property {PanelBreakpointConfig} mobile
364
+ * Mobile breakpoint configuration.
365
+ *
366
+ * @property {ComponentType} [render]
367
+ * Render component.
368
+ *
369
+ * @property {boolean} [showLabel]
370
+ * Whether to show the panel heading. The panel heading is visually hidden if false.
371
+ *
372
+ * @property {PanelBreakpointConfig} tablet
373
+ * Tablet breakpoint configuration.
374
+ */
375
+
376
+ /**
377
+ * Descriptor for lazy-loading a plugin.
378
+ *
379
+ * @typedef {Object} PluginDescriptor
380
+ *
381
+ * @property {string} id
382
+ * Unique plugin identifier.
383
+ *
384
+ * @property {() => Promise<PluginManifest>} load
385
+ * Async loader.
386
+ *
387
+ * @property {Partial<PluginManifest>} [manifest]
388
+ * Optional manifest overrides.
389
+ */
390
+
391
+ /**
392
+ * Definition for a custom icon that can be registered and used by buttons.
393
+ *
394
+ * @typedef {Object} IconDefinition
395
+ *
396
+ * @property {string} id
397
+ * Unique icon identifier.
398
+ *
399
+ * @property {string} svgContent
400
+ * Raw SVG content (without the outer SVG tag).
401
+ */
402
+
403
+ /**
404
+ * Manifest defining a plugin's buttons, panels, controls, API methods, and state.
405
+ *
406
+ * @typedef {Object} PluginManifest
407
+ *
408
+ * @property {Record<string, Function>} [api]
409
+ * API methods.
410
+ *
411
+ * @property {ButtonDefinition[]} [buttons]
412
+ * Button definitions.
413
+ *
414
+ * @property {ControlDefinition[]} [controls]
415
+ * Control definitions.
416
+ *
417
+ * @property {IconDefinition[]} [icons]
418
+ * Icon definitions.
419
+ *
420
+ * @property {ComponentType} [InitComponent]
421
+ * Initialization component.
422
+ *
423
+ * @property {PanelDefinition[]} [panels]
424
+ * Panel definitions.
425
+ *
426
+ * @property {{ initialState: Record<string, any>, actions: Record<string, Function> }} [reducer]
427
+ * Reducer configuration.
428
+ */
429
+
430
+ /**
431
+ * Function that performs reverse geocoding to get an address from coordinates.
432
+ *
433
+ * @typedef {(url: string, transformRequest: TransformRequestFn | undefined, crs: string, zoom: number, coord: [number, number]) => Promise<string | null>} ReverseGeocodeFn
434
+ */
435
+
436
+ /**
437
+ * Descriptor for lazy-loading a reverse geocode provider.
438
+ *
439
+ * @typedef {Object} ReverseGeocodeProviderDescriptor
440
+ *
441
+ * @property {() => Promise<ReverseGeocodeFn>} load
442
+ * Load reverse geocode function.
443
+ *
444
+ * @property {TransformRequestFn} [transformRequest]
445
+ * Request transformer.
446
+ *
447
+ * @property {string} [url]
448
+ * Provider URL.
449
+ */
450
+
451
+ /**
452
+ * Function to transform outgoing requests (e.g., to add authentication headers).
453
+ *
454
+ * @typedef {(request: Request) => Request | Promise<Request>} TransformRequestFn
455
+ */
456
+
457
+ /**
458
+ * Configuration options for the InteractiveMap constructor.
459
+ *
460
+ * Some properties (zoom, center, minZoom, maxZoom, bounds, extent) are passed
461
+ * directly to the underlying map engine. See your map provider's documentation
462
+ * for detailed behaviour.
463
+ *
464
+ * @typedef {Object} InteractiveMapConfig
465
+ *
466
+ * @property {'light' | 'dark'} [appColorScheme='light']
467
+ * Application colour scheme.
468
+ *
469
+ * @property {boolean} [autoColorScheme=false]
470
+ * Whether to automatically determine the colour scheme based on system preferences.
471
+ *
472
+ * @property {string} [backgroundColor='var(--background-color)']
473
+ * Background color for the map container. A CSS color value.
474
+ *
475
+ * @property {'buttonFirst' | 'hybrid' | 'inline' | 'mapOnly'} [behaviour='buttonFirst']
476
+ * Map interaction behaviour mode.
477
+ *
478
+ * @property {[number, number, number, number]} [bounds]
479
+ * Initial bounds [west, south, east, north]. Equivalent to extent; use whichever matches your map provider's terminology.
480
+ *
481
+ * @property {string} [buttonClass='im-c-open-map-button']
482
+ * CSS class applied to the 'Open map' button.
483
+ *
484
+ * @property {string} [buttonText='Map view']
485
+ * Text content for the button used to open or toggle the map view.
486
+ *
487
+ * @property {[number, number]} [center]
488
+ * Initial center [lng, lat] or [easting, northing] depending on the crs of the map provider.
489
+ *
490
+ * @property {string} [containerHeight='600px']
491
+ * Height of the map container. Accepts any valid CSS height value (e.g. '640px', '40rem' or '100%').
492
+ *
493
+ * @property {string} [deviceNotSupportedText]
494
+ * Message displayed when the user's device or browser does not support the component.
495
+ *
496
+ * @property {boolean} [enableFullscreen=false]
497
+ * Whether a toggle fullscreen button is displayed.
498
+ *
499
+ * @property {boolean} [enableZoomControls=false]
500
+ * Whether zoom control buttons are displayed.
501
+ *
502
+ * @property {[number, number, number, number]} [extent]
503
+ * Initial extent [minX, minY, maxX, maxY]. Equivalent to bounds; use whichever matches your map provider's terminology.
504
+ *
505
+ * @property {string} [genericErrorText]
506
+ * Fallback error message shown when the map fails to load.
507
+ *
508
+ * @property {boolean} [hasExitButton=false]
509
+ * Whether an exit map button is displayed when the app is fullscreen.
510
+ *
511
+ * @property {number | null} [hybridWidth]
512
+ * Optional breakpoint (in pixels) for hybrid behaviour. Defaults to 'maxMobileWidth' when not set.
513
+ *
514
+ * @property {string} [keyboardHintText]
515
+ * HTML string providing keyboard shortcut instructions for accessibility users.
516
+ *
517
+ * @property {string} [mapLabel='Interactive map']
518
+ * Accessible label for the map, announced by screen readers.
519
+ *
520
+ * @property {MapProviderDescriptor} [mapProvider]
521
+ * A factory function that returns a map provider instance (e.g. maplibreProvider()).
522
+ *
523
+ * @property {'small' | 'medium' | 'large'} [mapSize='small']
524
+ * Visual size variant of the map.
525
+ *
526
+ * @property {MapStyleConfig} [mapStyle]
527
+ * Map style configuration.
528
+ *
529
+ * @property {string} [mapViewParamKey='mv']
530
+ * URL query parameter key used to control map view state.
531
+ *
532
+ * @property {string | Record<string, string>} [markerColor='#ff0000']
533
+ * Colour used for map markers. May be a single colour value or an object keyed by map style ID.
534
+ *
535
+ * @property {MarkerConfig[]} [markers]
536
+ * Initial markers to display on the map.
537
+ *
538
+ * @property {string} [markerShape='pin']
539
+ * Shape used for map markers.
540
+ *
541
+ * @property {[number, number, number, number]} [maxExtent]
542
+ * Maximum viewable extent [west, south, east, north].
543
+ *
544
+ * @property {number} [maxMobileWidth=640]
545
+ * Maximum viewport width (in pixels) considered to be a mobile device.
546
+ *
547
+ * @property {number} [maxZoom]
548
+ * Maximum zoom level.
549
+ *
550
+ * @property {number} [minDesktopWidth=835]
551
+ * Minimum viewport width (in pixels) considered to be a desktop device.
552
+ *
553
+ * @property {number} [minZoom]
554
+ * Minimum zoom level.
555
+ *
556
+ * @property {number} [nudgePanDelta=5]
557
+ * Smaller pan increment (in pixels) used for fine-grained panning.
558
+ *
559
+ * @property {number} [nudgeZoomDelta=0.1]
560
+ * Smaller zoom increment used for fine-grained zoom adjustments.
561
+ *
562
+ * @property {string} [pageTitle='Map view']
563
+ * Page title text used when the map is fullscreen.
564
+ *
565
+ * @property {number} [panDelta=100]
566
+ * Distance (in pixels) to pan the map during standard pan interactions.
567
+ *
568
+ * @property {PluginDescriptor[]} [plugins]
569
+ * Plugins to load.
570
+ *
571
+ * @property {boolean} [preserveStateOnClose=false]
572
+ * Whether to preserve the map state when closed via back button or exit button.
573
+ * When true, the map is hidden but not destroyed, preserving markers, zoom, etc.
574
+ * Useful for list/map toggle scenarios. Only applies to 'hybrid' and 'buttonFirst' behaviours.
575
+ *
576
+ * @property {boolean} [readMapText=false]
577
+ * Whether map text labels can be selected and read aloud by assistive technologies.
578
+ *
579
+ * @property {ReverseGeocodeProviderDescriptor} [reverseGeocodeProvider]
580
+ * A factory function that returns a reverse geocode provider instance.
581
+ *
582
+ * @property {TransformRequestFn} [transformRequest]
583
+ * Request transformer for outgoing requests (e.g., to add authentication headers).
584
+ *
585
+ * @property {number} [zoom]
586
+ * Initial zoom level.
587
+ *
588
+ * @property {number} [zoomDelta=1]
589
+ * Amount to change zoom level for standard zoom interactions.
590
+ */