@defra/forms-engine-plugin 5.0.0-alpha.1 → 5.0.0-alpha.10

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 (278) hide show
  1. package/.public/javascripts/application.min.js +1 -1
  2. package/.public/javascripts/application.min.js.map +1 -1
  3. package/.public/javascripts/shared.min.js +1 -1
  4. package/.public/javascripts/shared.min.js.map +1 -1
  5. package/.public/stylesheets/application.min.css.map +1 -1
  6. package/.server/client/javascripts/file-upload.js +5 -3
  7. package/.server/client/javascripts/file-upload.js.map +1 -1
  8. package/.server/client/javascripts/geospatial-map.js +31 -26
  9. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  10. package/.server/client/javascripts/location-map.js +9 -1
  11. package/.server/client/javascripts/location-map.js.map +1 -1
  12. package/.server/client/javascripts/maps.d.ts +5 -0
  13. package/.server/client/javascripts/maps.js +6 -0
  14. package/.server/client/javascripts/maps.js.map +1 -0
  15. package/.server/client/javascripts/shared.d.ts +1 -3
  16. package/.server/client/javascripts/shared.js +1 -3
  17. package/.server/client/javascripts/shared.js.map +1 -1
  18. package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
  19. package/.server/client/javascripts/sssi-dataset.js +37 -39
  20. package/.server/client/javascripts/sssi-dataset.js.map +1 -1
  21. package/.server/client/stylesheets/maps.scss +4 -0
  22. package/.server/client/stylesheets/shared.scss +1 -5
  23. package/.server/server/constants.d.ts +2 -0
  24. package/.server/server/constants.js +2 -0
  25. package/.server/server/constants.js.map +1 -1
  26. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
  27. package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
  28. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  29. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +4 -1
  30. package/.server/server/plugins/engine/components/CheckboxesField.js +13 -0
  31. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  32. package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
  33. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  34. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  35. package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
  36. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  37. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  38. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  39. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  40. package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
  41. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  42. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  43. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  44. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +26 -2
  45. package/.server/server/plugins/engine/components/EastingNorthingField.js +93 -54
  46. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  47. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  48. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  49. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  50. package/.server/server/plugins/engine/components/FileUploadField.d.ts +12 -0
  51. package/.server/server/plugins/engine/components/FileUploadField.js +20 -2
  52. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  53. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  54. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  55. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  56. package/.server/server/plugins/engine/components/GeospatialField.d.ts +1 -0
  57. package/.server/server/plugins/engine/components/GeospatialField.js +1 -1
  58. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  59. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  60. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  61. package/.server/server/plugins/engine/components/LatLongField.d.ts +26 -2
  62. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  63. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  64. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  65. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
  66. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  67. package/.server/server/plugins/engine/components/LocationFieldBase.js +18 -5
  68. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  69. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +5 -2
  70. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +10 -11
  71. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  72. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  73. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  74. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  75. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  76. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  77. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  78. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  79. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  80. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  81. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  82. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  83. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  84. package/.server/server/plugins/engine/components/NumberField.js +16 -0
  85. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  86. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
  87. package/.server/server/plugins/engine/components/OsGridRefField.js +4 -3
  88. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  89. package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
  90. package/.server/server/plugins/engine/components/PaymentField.js +17 -6
  91. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  92. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  93. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  94. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  95. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  96. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  97. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  98. package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
  99. package/.server/server/plugins/engine/components/YesNoField.js +17 -8
  100. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  101. package/.server/server/plugins/engine/components/helpers/components.js +1 -2
  102. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  103. package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
  104. package/.server/server/plugins/engine/components/helpers/index.js +13 -1
  105. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  106. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  107. package/.server/server/plugins/engine/components/types.js.map +1 -1
  108. package/.server/server/plugins/engine/helpers.d.ts +22 -2
  109. package/.server/server/plugins/engine/helpers.js +44 -5
  110. package/.server/server/plugins/engine/helpers.js.map +1 -1
  111. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +3 -0
  112. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +10 -7
  113. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  114. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  115. package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
  116. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  117. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  118. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  119. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  120. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  121. package/.server/server/plugins/engine/i18n/form.js +35 -0
  122. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  123. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  124. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  125. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  126. package/.server/server/plugins/engine/i18n/translations/cy.json +73 -6
  127. package/.server/server/plugins/engine/i18n/translations/en-GB.json +43 -4
  128. package/.server/server/plugins/engine/i18n/types.d.ts +2 -0
  129. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  130. package/.server/server/plugins/engine/index.d.ts +4 -0
  131. package/.server/server/plugins/engine/index.js +4 -0
  132. package/.server/server/plugins/engine/index.js.map +1 -1
  133. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  134. package/.server/server/plugins/engine/models/FormModel.js +9 -15
  135. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  136. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  137. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  138. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +3 -5
  139. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  140. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  141. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  142. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  143. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  144. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  145. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +1 -1
  146. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +22 -9
  147. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  148. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  149. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
  150. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  151. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  152. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  153. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  154. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  155. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  156. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
  157. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  158. package/.server/server/plugins/engine/pageControllers/validationOptions.js +23 -2
  159. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  160. package/.server/server/plugins/engine/types/schema.js +1 -0
  161. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  162. package/.server/server/plugins/engine/types.d.ts +1 -0
  163. package/.server/server/plugins/engine/types.js.map +1 -1
  164. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  165. package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  166. package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
  167. package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  168. package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
  169. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  170. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  171. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  172. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  173. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  174. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  175. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  176. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  177. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  178. package/.server/server/plugins/payment/helper.d.ts +11 -1
  179. package/.server/server/plugins/payment/helper.js +18 -2
  180. package/.server/server/plugins/payment/helper.js.map +1 -1
  181. package/.server/server/plugins/payment/helper.test.js +2 -1
  182. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  183. package/.server/server/plugins/payment/service.d.ts +2 -1
  184. package/.server/server/plugins/payment/service.js +5 -2
  185. package/.server/server/plugins/payment/service.js.map +1 -1
  186. package/.server/server/plugins/payment/service.test.js +7 -3
  187. package/.server/server/plugins/payment/service.test.js.map +1 -1
  188. package/.server/server/plugins/payment/types.d.ts +4 -0
  189. package/.server/server/plugins/payment/types.js +1 -0
  190. package/.server/server/plugins/payment/types.js.map +1 -1
  191. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  192. package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
  193. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  194. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  195. package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
  196. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  197. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  198. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  199. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  200. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  201. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  202. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  203. package/.server/server/utils/type-utils.d.ts +1 -2
  204. package/.server/server/utils/type-utils.js +0 -3
  205. package/.server/server/utils/type-utils.js.map +1 -1
  206. package/package.json +8 -2
  207. package/src/client/javascripts/file-upload.js +10 -3
  208. package/src/client/javascripts/geospatial-map.js +32 -30
  209. package/src/client/javascripts/location-map.js +7 -1
  210. package/src/client/javascripts/maps.js +5 -0
  211. package/src/client/javascripts/shared.js +1 -3
  212. package/src/client/javascripts/sssi-dataset.js +39 -41
  213. package/src/client/stylesheets/maps.scss +4 -0
  214. package/src/client/stylesheets/shared.scss +1 -5
  215. package/src/server/constants.js +2 -0
  216. package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
  217. package/src/server/plugins/engine/components/CheckboxesField.ts +13 -1
  218. package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
  219. package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
  220. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  221. package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
  222. package/src/server/plugins/engine/components/EastingNorthingField.ts +154 -89
  223. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  224. package/src/server/plugins/engine/components/FileUploadField.ts +21 -2
  225. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  226. package/src/server/plugins/engine/components/GeospatialField.ts +6 -1
  227. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  228. package/src/server/plugins/engine/components/LocationFieldBase.ts +23 -6
  229. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +14 -11
  230. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  231. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  232. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  233. package/src/server/plugins/engine/components/NumberField.ts +21 -1
  234. package/src/server/plugins/engine/components/OsGridRefField.ts +9 -3
  235. package/src/server/plugins/engine/components/PaymentField.ts +15 -5
  236. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  237. package/src/server/plugins/engine/components/YesNoField.ts +17 -9
  238. package/src/server/plugins/engine/components/helpers/components.ts +1 -2
  239. package/src/server/plugins/engine/components/helpers/index.ts +19 -0
  240. package/src/server/plugins/engine/components/types.ts +1 -0
  241. package/src/server/plugins/engine/helpers.ts +52 -5
  242. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +10 -7
  243. package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
  244. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  245. package/src/server/plugins/engine/i18n/form.ts +54 -0
  246. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  247. package/src/server/plugins/engine/i18n/translations/cy.json +73 -6
  248. package/src/server/plugins/engine/i18n/translations/en-GB.json +43 -4
  249. package/src/server/plugins/engine/i18n/types.ts +2 -0
  250. package/src/server/plugins/engine/index.ts +7 -0
  251. package/src/server/plugins/engine/models/FormModel.ts +9 -15
  252. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  253. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
  254. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  255. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  256. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +18 -8
  257. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
  258. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  259. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  260. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +6 -3
  261. package/src/server/plugins/engine/pageControllers/validationOptions.ts +27 -2
  262. package/src/server/plugins/engine/types/schema.ts +1 -0
  263. package/src/server/plugins/engine/types.ts +1 -0
  264. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  265. package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  266. package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
  267. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  268. package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
  269. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  270. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  271. package/src/server/plugins/payment/helper.js +22 -2
  272. package/src/server/plugins/payment/service.js +6 -2
  273. package/src/server/plugins/payment/types.js +1 -0
  274. package/src/server/plugins/postcode-lookup/models/index.js +75 -43
  275. package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
  276. package/src/server/plugins/postcode-lookup/types.js +6 -1
  277. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  278. package/src/server/utils/type-utils.ts +1 -11
@@ -1 +1 @@
1
- {"version":3,"file":"location-map.js","names":["createDatasetsPlugin","EVENTS","centerMap","createMap","defaultConfig","eastingNorthingToLatLong","getMapLayers","latLongToEastingNorthing","latLongToOsGridRef","osGridRefToLatLong","sssiDataset","LOCATION_FIELD_SELECTOR","getInitMapConfig","locationField","locationType","dataset","locationtype","getInitLatLongMapConfig","getInitEastingNorthingMapConfig","getInitOsGridRefMapConfig","Error","validateLatLong","strLat","strLong","lat","trim","Number","long","valid","latMin","latMax","longMin","longMax","latInBounds","longInBounds","value","validateEastingNorthing","strEasting","strNorthing","easting","northing","eastingMin","eastingMax","northingMin","northingMax","validateOsGridRef","osGridRef","pattern","match","exec","getLatLongInputs","inputs","querySelectorAll","length","latInput","longInput","getEastingNorthingInputs","eastingInput","northingInput","getOsGridRefInput","input","querySelector","getInitMapCenterConfig","center","zoom","markers","id","coords","result","undefined","latlong","osGridRefInput","bindLatLongField","map","mapProvider","on","interactMarkerChange","onInteractMarkerChange","e","maxPrecision","toFixed","onUpdateInputs","addEventListener","bindEastingNorthingField","point","bindOsGridRefField","onUpdateInput","processLocation","config","location","index","HTMLDivElement","locationInputs","supportedLocations","includes","mapContainer","document","createElement","mapId","setAttribute","initConfig","after","mapLayers","maplayers","plugins","interactPlugin","mapReady","onMapReady","addPanel","focus","showLabel","label","mobile","slot","open","dismissible","modal","tablet","desktop","html","enable"],"sources":["../../../src/client/javascripts/location-map.js"],"sourcesContent":["// @ts-expect-error - no types\nimport createDatasetsPlugin from '@defra/interactive-map/plugins/datasets'\n\nimport {\n EVENTS,\n centerMap,\n createMap,\n defaultConfig,\n eastingNorthingToLatLong,\n getMapLayers,\n latLongToEastingNorthing,\n latLongToOsGridRef,\n osGridRefToLatLong\n} from '~/src/client/javascripts/map.js'\nimport sssiDataset from '~/src/client/javascripts/sssi-dataset.js'\n\nconst LOCATION_FIELD_SELECTOR = 'input.govuk-input'\n\n/**\n * Gets initial map config for a location field\n * @param {HTMLDivElement} locationField - the location field element\n */\nfunction getInitMapConfig(locationField) {\n const locationType = locationField.dataset.locationtype\n\n switch (locationType) {\n case 'latlongfield':\n return getInitLatLongMapConfig(locationField)\n case 'eastingnorthingfield':\n return getInitEastingNorthingMapConfig(locationField)\n case 'osgridreffield':\n return getInitOsGridRefMapConfig(locationField)\n default:\n throw new Error('Not implemented')\n }\n}\n\n/**\n * Validates lat and long is numeric and within UK bounds\n * @param {string} strLat - the latitude string\n * @param {string} strLong - the longitude string\n * @returns {{ valid: false } | { valid: true, value: { lat: number, long: number } }}\n */\nfunction validateLatLong(strLat, strLong) {\n const lat = strLat.trim() && Number(strLat.trim())\n const long = strLong.trim() && Number(strLong.trim())\n\n if (!lat || !long) {\n return { valid: false }\n }\n\n const latMin = 49.85\n const latMax = 60.859\n const longMin = -13.687\n const longMax = 1.767\n\n const latInBounds = lat >= latMin && lat <= latMax\n const longInBounds = long >= longMin && long <= longMax\n\n if (!latInBounds || !longInBounds) {\n return { valid: false }\n }\n\n return { valid: true, value: { lat, long } }\n}\n\n/**\n * Validates easting and northing is numeric and within UK bounds\n * @param {string} strEasting - the easting string\n * @param {string} strNorthing - the northing string\n * @returns {{ valid: false } | { valid: true, value: { easting: number, northing: number } }}\n */\nfunction validateEastingNorthing(strEasting, strNorthing) {\n const easting = strEasting.trim() && Number(strEasting.trim())\n const northing = strNorthing.trim() && Number(strNorthing.trim())\n\n if (!easting || !northing) {\n return { valid: false }\n }\n\n const eastingMin = 0\n const eastingMax = 700000\n const northingMin = 0\n const northingMax = 1300000\n\n const latInBounds = easting >= eastingMin && easting <= eastingMax\n const longInBounds = northing >= northingMin && northing <= northingMax\n\n if (!latInBounds || !longInBounds) {\n return { valid: false }\n }\n\n return { valid: true, value: { easting, northing } }\n}\n\n/**\n * Validates OS grid reference is correct\n * @param {string} osGridRef - the OsGridRef\n * @returns {{ valid: false } | { valid: true, value: string }}\n */\nfunction validateOsGridRef(osGridRef) {\n if (!osGridRef) {\n return { valid: false }\n }\n\n const pattern =\n /^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\\s?(([0-9]{3})\\s?([0-9]{3})|([0-9]{4})\\s?([0-9]{4})|([0-9]{5})\\s?([0-9]{5}))$/\n\n const match = pattern.exec(osGridRef)\n\n if (match === null) {\n return { valid: false }\n }\n\n return { valid: true, value: match[0] }\n}\n\n/**\n * Gets the inputs for a latlong location field\n * @param {HTMLDivElement} locationField - the latlong location field element\n */\nfunction getLatLongInputs(locationField) {\n const inputs = locationField.querySelectorAll(LOCATION_FIELD_SELECTOR)\n\n if (inputs.length !== 2) {\n throw new Error('Expected 2 inputs for lat and long')\n }\n\n const latInput = /** @type {HTMLInputElement} */ (inputs[0])\n const longInput = /** @type {HTMLInputElement} */ (inputs[1])\n\n return { latInput, longInput }\n}\n\n/**\n * Gets the inputs for a easting/northing location field\n * @param {HTMLDivElement} locationField - the eastingnorthing location field element\n */\nfunction getEastingNorthingInputs(locationField) {\n const inputs = locationField.querySelectorAll(LOCATION_FIELD_SELECTOR)\n\n if (inputs.length !== 2) {\n throw new Error('Expected 2 inputs for easting and northing')\n }\n\n const eastingInput = /** @type {HTMLInputElement} */ (inputs[0])\n const northingInput = /** @type {HTMLInputElement} */ (inputs[1])\n\n return { eastingInput, northingInput }\n}\n\n/**\n * Gets the input for a OS grid reference location field\n * @param {HTMLDivElement} locationField - the osgridref location field element\n */\nfunction getOsGridRefInput(locationField) {\n const input = locationField.querySelector(LOCATION_FIELD_SELECTOR)\n\n if (input === null) {\n throw new Error('Expected 1 input for osgridref')\n }\n\n return /** @type {HTMLInputElement} */ (input)\n}\n\n/**\n * Get the initial map config for a center point\n * @param {MapCenter} center - the point\n */\nfunction getInitMapCenterConfig(center) {\n return {\n zoom: '16',\n center,\n markers: [\n {\n id: 'location',\n coords: center\n }\n ]\n }\n}\n\n/**\n * Gets initial map config for a latlong location field\n * @param {HTMLDivElement} locationField - the latlong location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitLatLongMapConfig(locationField) {\n const { latInput, longInput } = getLatLongInputs(locationField)\n const result = validateLatLong(latInput.value, longInput.value)\n\n if (!result.valid) {\n return undefined\n }\n\n /** @type {MapCenter} */\n const center = [result.value.long, result.value.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Gets initial map config for a easting/northing location field\n * @param {HTMLDivElement} locationField - the eastingnorthing location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitEastingNorthingMapConfig(locationField) {\n const { eastingInput, northingInput } =\n getEastingNorthingInputs(locationField)\n const result = validateEastingNorthing(\n eastingInput.value,\n northingInput.value\n )\n\n if (!result.valid) {\n return undefined\n }\n\n const latlong = eastingNorthingToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Gets initial map config for an OS grid reference location field\n * @param {HTMLDivElement} locationField - the osgridref location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitOsGridRefMapConfig(locationField) {\n const osGridRefInput = getOsGridRefInput(locationField)\n const result = validateOsGridRef(osGridRefInput.value)\n\n if (!result.valid) {\n return undefined\n }\n\n const latlong = osGridRefToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Bind a latlong field to the map\n * @param {HTMLDivElement} locationField - the latlong location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindLatLongField(locationField, map, mapProvider) {\n const { latInput, longInput } = getLatLongInputs(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const maxPrecision = 7\n latInput.value = e.coords[1].toFixed(maxPrecision)\n longInput.value = e.coords[0].toFixed(maxPrecision)\n }\n )\n\n /**\n * Lat & long input change event listener\n * Update the map view location when the inputs are changed\n */\n function onUpdateInputs() {\n const result = validateLatLong(latInput.value, longInput.value)\n\n if (result.valid) {\n /** @type {MapCenter} */\n const center = [result.value.long, result.value.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n latInput.addEventListener('change', onUpdateInputs, false)\n longInput.addEventListener('change', onUpdateInputs, false)\n}\n\n/**\n * Bind an eastingnorthing field to the map\n * @param {HTMLDivElement} locationField - the eastingnorthing location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindEastingNorthingField(locationField, map, mapProvider) {\n const { eastingInput, northingInput } =\n getEastingNorthingInputs(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const maxPrecision = 0\n const point = latLongToEastingNorthing({\n lat: e.coords[1],\n long: e.coords[0]\n })\n\n eastingInput.value = point.easting.toFixed(maxPrecision)\n northingInput.value = point.northing.toFixed(maxPrecision)\n }\n )\n\n /**\n * Easting & northing input change event listener\n * Update the map view location when the inputs are changed\n */\n function onUpdateInputs() {\n const result = validateEastingNorthing(\n eastingInput.value,\n northingInput.value\n )\n\n if (result.valid) {\n const latlong = eastingNorthingToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n eastingInput.addEventListener('change', onUpdateInputs, false)\n northingInput.addEventListener('change', onUpdateInputs, false)\n}\n\n/**\n * Bind an OS grid reference field to the map\n * @param {HTMLDivElement} locationField - the osgridref location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindOsGridRefField(locationField, map, mapProvider) {\n const osGridRefInput = getOsGridRefInput(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const point = latLongToOsGridRef({\n lat: e.coords[1],\n long: e.coords[0]\n })\n\n osGridRefInput.value = point\n }\n )\n\n /**\n * OS grid reference input change event listener\n * Update the map view location when the input is changed\n */\n function onUpdateInput() {\n const result = validateOsGridRef(osGridRefInput.value)\n\n if (result.valid) {\n const latlong = osGridRefToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n osGridRefInput.addEventListener('change', onUpdateInput, false)\n}\n\n/**\n * Processes a location field to add map capability\n * @param {MapsEnvironmentConfig} config - the location field element\n * @param {Element} location - the location field element\n * @param {number} index - the 0-based index\n */\nexport function processLocation(config, location, index) {\n if (!(location instanceof HTMLDivElement)) {\n return\n }\n\n const locationInputs = location.querySelector('.app-location-field-inputs')\n if (!(locationInputs instanceof HTMLDivElement)) {\n return\n }\n const locationType = location.dataset.locationtype\n\n // Check for support\n const supportedLocations = [\n 'latlongfield',\n 'eastingnorthingfield',\n 'osgridreffield'\n ]\n if (!locationType || !supportedLocations.includes(locationType)) {\n return\n }\n\n const mapContainer = document.createElement('div')\n const mapId = `map_${index}`\n\n mapContainer.setAttribute('id', mapId)\n mapContainer.setAttribute('class', 'map-container')\n\n const initConfig = getInitMapConfig(location) ?? defaultConfig\n\n locationInputs.after(mapContainer)\n\n const mapLayers = getMapLayers(location.dataset.maplayers)\n\n if (mapLayers.includes('sssi')) {\n initConfig.plugins = [createDatasetsPlugin(sssiDataset)]\n }\n\n const { map, interactPlugin } = createMap(mapId, initConfig, config)\n\n map.on(\n EVENTS.mapReady,\n /**\n * Callback function which fires when the map is ready\n * @param {object} e - the event\n * @param {MapLibreMap} e.map - the map provider instance\n */\n function onMapReady(e) {\n switch (locationType) {\n case 'latlongfield':\n bindLatLongField(location, map, e.map)\n break\n case 'eastingnorthingfield':\n bindEastingNorthingField(location, map, e.map)\n break\n case 'osgridreffield':\n bindOsGridRefField(location, map, e.map)\n break\n default:\n throw new Error('Not implemented')\n }\n\n // Add info panel\n map.addPanel('info', {\n focus: false,\n showLabel: true,\n label: 'How to use the map',\n mobile: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n tablet: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n desktop: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n html: '<ul><li>Search for a place or postcode</li><li>Use the + and - icons to zoom in and out</li><li>Use a mouse or keyboard to centre the point at the location</li><li>Click to add the location to the map</li></ul>'\n })\n\n // Enable the interact plugin\n interactPlugin.enable()\n }\n )\n}\n\n/**\n * @import { InteractiveMap, InteractiveMapInitConfig, MapCenter, MapLibreMap, MapsEnvironmentConfig } from '~/src/client/javascripts/map.js'\n */\n"],"mappings":"AAAA;AACA,OAAOA,oBAAoB,MAAM,yCAAyC;AAE1E,SACEC,MAAM,EACNC,SAAS,EACTC,SAAS,EACTC,aAAa,EACbC,wBAAwB,EACxBC,YAAY,EACZC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB;AAEpB,OAAOC,WAAW;AAElB,MAAMC,uBAAuB,GAAG,mBAAmB;;AAEnD;AACA;AACA;AACA;AACA,SAASC,gBAAgBA,CAACC,aAAa,EAAE;EACvC,MAAMC,YAAY,GAAGD,aAAa,CAACE,OAAO,CAACC,YAAY;EAEvD,QAAQF,YAAY;IAClB,KAAK,cAAc;MACjB,OAAOG,uBAAuB,CAACJ,aAAa,CAAC;IAC/C,KAAK,sBAAsB;MACzB,OAAOK,+BAA+B,CAACL,aAAa,CAAC;IACvD,KAAK,gBAAgB;MACnB,OAAOM,yBAAyB,CAACN,aAAa,CAAC;IACjD;MACE,MAAM,IAAIO,KAAK,CAAC,iBAAiB,CAAC;EACtC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,MAAM,EAAEC,OAAO,EAAE;EACxC,MAAMC,GAAG,GAAGF,MAAM,CAACG,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACJ,MAAM,CAACG,IAAI,CAAC,CAAC,CAAC;EAClD,MAAME,IAAI,GAAGJ,OAAO,CAACE,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACH,OAAO,CAACE,IAAI,CAAC,CAAC,CAAC;EAErD,IAAI,CAACD,GAAG,IAAI,CAACG,IAAI,EAAE;IACjB,OAAO;MAAEC,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMC,MAAM,GAAG,KAAK;EACpB,MAAMC,MAAM,GAAG,MAAM;EACrB,MAAMC,OAAO,GAAG,CAAC,MAAM;EACvB,MAAMC,OAAO,GAAG,KAAK;EAErB,MAAMC,WAAW,GAAGT,GAAG,IAAIK,MAAM,IAAIL,GAAG,IAAIM,MAAM;EAClD,MAAMI,YAAY,GAAGP,IAAI,IAAII,OAAO,IAAIJ,IAAI,IAAIK,OAAO;EAEvD,IAAI,CAACC,WAAW,IAAI,CAACC,YAAY,EAAE;IACjC,OAAO;MAAEN,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAE;MAAEX,GAAG;MAAEG;IAAK;EAAE,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,uBAAuBA,CAACC,UAAU,EAAEC,WAAW,EAAE;EACxD,MAAMC,OAAO,GAAGF,UAAU,CAACZ,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACW,UAAU,CAACZ,IAAI,CAAC,CAAC,CAAC;EAC9D,MAAMe,QAAQ,GAAGF,WAAW,CAACb,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACY,WAAW,CAACb,IAAI,CAAC,CAAC,CAAC;EAEjE,IAAI,CAACc,OAAO,IAAI,CAACC,QAAQ,EAAE;IACzB,OAAO;MAAEZ,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMa,UAAU,GAAG,CAAC;EACpB,MAAMC,UAAU,GAAG,MAAM;EACzB,MAAMC,WAAW,GAAG,CAAC;EACrB,MAAMC,WAAW,GAAG,OAAO;EAE3B,MAAMX,WAAW,GAAGM,OAAO,IAAIE,UAAU,IAAIF,OAAO,IAAIG,UAAU;EAClE,MAAMR,YAAY,GAAGM,QAAQ,IAAIG,WAAW,IAAIH,QAAQ,IAAII,WAAW;EAEvE,IAAI,CAACX,WAAW,IAAI,CAACC,YAAY,EAAE;IACjC,OAAO;MAAEN,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAE;MAAEI,OAAO;MAAEC;IAAS;EAAE,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASK,iBAAiBA,CAACC,SAAS,EAAE;EACpC,IAAI,CAACA,SAAS,EAAE;IACd,OAAO;MAAElB,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMmB,OAAO,GACX,qLAAqL;EAEvL,MAAMC,KAAK,GAAGD,OAAO,CAACE,IAAI,CAACH,SAAS,CAAC;EAErC,IAAIE,KAAK,KAAK,IAAI,EAAE;IAClB,OAAO;MAAEpB,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAEa,KAAK,CAAC,CAAC;EAAE,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA,SAASE,gBAAgBA,CAACrC,aAAa,EAAE;EACvC,MAAMsC,MAAM,GAAGtC,aAAa,CAACuC,gBAAgB,CAACzC,uBAAuB,CAAC;EAEtE,IAAIwC,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIjC,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,MAAMkC,QAAQ,GAAG,+BAAiCH,MAAM,CAAC,CAAC,CAAE;EAC5D,MAAMI,SAAS,GAAG,+BAAiCJ,MAAM,CAAC,CAAC,CAAE;EAE7D,OAAO;IAAEG,QAAQ;IAAEC;EAAU,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA,SAASC,wBAAwBA,CAAC3C,aAAa,EAAE;EAC/C,MAAMsC,MAAM,GAAGtC,aAAa,CAACuC,gBAAgB,CAACzC,uBAAuB,CAAC;EAEtE,IAAIwC,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIjC,KAAK,CAAC,4CAA4C,CAAC;EAC/D;EAEA,MAAMqC,YAAY,GAAG,+BAAiCN,MAAM,CAAC,CAAC,CAAE;EAChE,MAAMO,aAAa,GAAG,+BAAiCP,MAAM,CAAC,CAAC,CAAE;EAEjE,OAAO;IAAEM,YAAY;IAAEC;EAAc,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAAC9C,aAAa,EAAE;EACxC,MAAM+C,KAAK,GAAG/C,aAAa,CAACgD,aAAa,CAAClD,uBAAuB,CAAC;EAElE,IAAIiD,KAAK,KAAK,IAAI,EAAE;IAClB,MAAM,IAAIxC,KAAK,CAAC,gCAAgC,CAAC;EACnD;EAEA,OAAO,+BAAiCwC,KAAK;AAC/C;;AAEA;AACA;AACA;AACA;AACA,SAASE,sBAAsBA,CAACC,MAAM,EAAE;EACtC,OAAO;IACLC,IAAI,EAAE,IAAI;IACVD,MAAM;IACNE,OAAO,EAAE,CACP;MACEC,EAAE,EAAE,UAAU;MACdC,MAAM,EAAEJ;IACV,CAAC;EAEL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS9C,uBAAuBA,CAACJ,aAAa,EAAE;EAC9C,MAAM;IAAEyC,QAAQ;IAAEC;EAAU,CAAC,GAAGL,gBAAgB,CAACrC,aAAa,CAAC;EAC/D,MAAMuD,MAAM,GAAG/C,eAAe,CAACiC,QAAQ,CAACnB,KAAK,EAAEoB,SAAS,CAACpB,KAAK,CAAC;EAE/D,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;;EAEA;EACA,MAAMN,MAAM,GAAG,CAACK,MAAM,CAACjC,KAAK,CAACR,IAAI,EAAEyC,MAAM,CAACjC,KAAK,CAACX,GAAG,CAAC;EAEpD,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS7C,+BAA+BA,CAACL,aAAa,EAAE;EACtD,MAAM;IAAE4C,YAAY;IAAEC;EAAc,CAAC,GACnCF,wBAAwB,CAAC3C,aAAa,CAAC;EACzC,MAAMuD,MAAM,GAAGhC,uBAAuB,CACpCqB,YAAY,CAACtB,KAAK,EAClBuB,aAAa,CAACvB,KAChB,CAAC;EAED,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;EAEA,MAAMC,OAAO,GAAGjE,wBAAwB,CAAC+D,MAAM,CAACjC,KAAK,CAAC;;EAEtD;EACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;EAE1C,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS5C,yBAAyBA,CAACN,aAAa,EAAE;EAChD,MAAM0D,cAAc,GAAGZ,iBAAiB,CAAC9C,aAAa,CAAC;EACvD,MAAMuD,MAAM,GAAGvB,iBAAiB,CAAC0B,cAAc,CAACpC,KAAK,CAAC;EAEtD,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;EAEA,MAAMC,OAAO,GAAG7D,kBAAkB,CAAC2D,MAAM,CAACjC,KAAK,CAAC;;EAEhD;EACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;EAE1C,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,gBAAgBA,CAAC3D,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EACzD,MAAM;IAAEpB,QAAQ;IAAEC;EAAU,CAAC,GAAGL,gBAAgB,CAACrC,aAAa,CAAC;EAE/D4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMC,YAAY,GAAG,CAAC;IACtBzB,QAAQ,CAACnB,KAAK,GAAG2C,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC,CAACa,OAAO,CAACD,YAAY,CAAC;IAClDxB,SAAS,CAACpB,KAAK,GAAG2C,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC,CAACa,OAAO,CAACD,YAAY,CAAC;EACrD,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,cAAcA,CAAA,EAAG;IACxB,MAAMb,MAAM,GAAG/C,eAAe,CAACiC,QAAQ,CAACnB,KAAK,EAAEoB,SAAS,CAACpB,KAAK,CAAC;IAE/D,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB;MACA,MAAMmC,MAAM,GAAG,CAACK,MAAM,CAACjC,KAAK,CAACR,IAAI,EAAEyC,MAAM,CAACjC,KAAK,CAACX,GAAG,CAAC;MAEpDtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAT,QAAQ,CAAC4B,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;EAC1D1B,SAAS,CAAC2B,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,wBAAwBA,CAACtE,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EACjE,MAAM;IAAEjB,YAAY;IAAEC;EAAc,CAAC,GACnCF,wBAAwB,CAAC3C,aAAa,CAAC;EAEzC4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMC,YAAY,GAAG,CAAC;IACtB,MAAMK,KAAK,GAAG7E,wBAAwB,CAAC;MACrCiB,GAAG,EAAEsD,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC;MAChBxC,IAAI,EAAEmD,CAAC,CAACX,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC;IAEFV,YAAY,CAACtB,KAAK,GAAGiD,KAAK,CAAC7C,OAAO,CAACyC,OAAO,CAACD,YAAY,CAAC;IACxDrB,aAAa,CAACvB,KAAK,GAAGiD,KAAK,CAAC5C,QAAQ,CAACwC,OAAO,CAACD,YAAY,CAAC;EAC5D,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,cAAcA,CAAA,EAAG;IACxB,MAAMb,MAAM,GAAGhC,uBAAuB,CACpCqB,YAAY,CAACtB,KAAK,EAClBuB,aAAa,CAACvB,KAChB,CAAC;IAED,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB,MAAM0C,OAAO,GAAGjE,wBAAwB,CAAC+D,MAAM,CAACjC,KAAK,CAAC;;MAEtD;MACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;MAE1CtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAN,YAAY,CAACyB,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;EAC9DvB,aAAa,CAACwB,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,kBAAkBA,CAACxE,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EAC3D,MAAMH,cAAc,GAAGZ,iBAAiB,CAAC9C,aAAa,CAAC;EAEvD4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMM,KAAK,GAAG5E,kBAAkB,CAAC;MAC/BgB,GAAG,EAAEsD,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC;MAChBxC,IAAI,EAAEmD,CAAC,CAACX,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC;IAEFI,cAAc,CAACpC,KAAK,GAAGiD,KAAK;EAC9B,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,aAAaA,CAAA,EAAG;IACvB,MAAMlB,MAAM,GAAGvB,iBAAiB,CAAC0B,cAAc,CAACpC,KAAK,CAAC;IAEtD,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB,MAAM0C,OAAO,GAAG7D,kBAAkB,CAAC2D,MAAM,CAACjC,KAAK,CAAC;;MAEhD;MACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;MAE1CtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAQ,cAAc,CAACW,gBAAgB,CAAC,QAAQ,EAAEI,aAAa,EAAE,KAAK,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAE;EACvD,IAAI,EAAED,QAAQ,YAAYE,cAAc,CAAC,EAAE;IACzC;EACF;EAEA,MAAMC,cAAc,GAAGH,QAAQ,CAAC5B,aAAa,CAAC,4BAA4B,CAAC;EAC3E,IAAI,EAAE+B,cAAc,YAAYD,cAAc,CAAC,EAAE;IAC/C;EACF;EACA,MAAM7E,YAAY,GAAG2E,QAAQ,CAAC1E,OAAO,CAACC,YAAY;;EAElD;EACA,MAAM6E,kBAAkB,GAAG,CACzB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,CACjB;EACD,IAAI,CAAC/E,YAAY,IAAI,CAAC+E,kBAAkB,CAACC,QAAQ,CAAChF,YAAY,CAAC,EAAE;IAC/D;EACF;EAEA,MAAMiF,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EAClD,MAAMC,KAAK,GAAG,OAAOR,KAAK,EAAE;EAE5BK,YAAY,CAACI,YAAY,CAAC,IAAI,EAAED,KAAK,CAAC;EACtCH,YAAY,CAACI,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC;EAEnD,MAAMC,UAAU,GAAGxF,gBAAgB,CAAC6E,QAAQ,CAAC,IAAIrF,aAAa;EAE9DwF,cAAc,CAACS,KAAK,CAACN,YAAY,CAAC;EAElC,MAAMO,SAAS,GAAGhG,YAAY,CAACmF,QAAQ,CAAC1E,OAAO,CAACwF,SAAS,CAAC;EAE1D,IAAID,SAAS,CAACR,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC9BM,UAAU,CAACI,OAAO,GAAG,CAACxG,oBAAoB,CAACU,WAAW,CAAC,CAAC;EAC1D;EAEA,MAAM;IAAE+D,GAAG;IAAEgC;EAAe,CAAC,GAAGtG,SAAS,CAAC+F,KAAK,EAAEE,UAAU,EAAEZ,MAAM,CAAC;EAEpEf,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAACyG,QAAQ;EACf;AACJ;AACA;AACA;AACA;EACI,SAASC,UAAUA,CAAC7B,CAAC,EAAE;IACrB,QAAQhE,YAAY;MAClB,KAAK,cAAc;QACjB0D,gBAAgB,CAACiB,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QACtC;MACF,KAAK,sBAAsB;QACzBU,wBAAwB,CAACM,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QAC9C;MACF,KAAK,gBAAgB;QACnBY,kBAAkB,CAACI,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QACxC;MACF;QACE,MAAM,IAAIrD,KAAK,CAAC,iBAAiB,CAAC;IACtC;;IAEA;IACAqD,GAAG,CAACmC,QAAQ,CAAC,MAAM,EAAE;MACnBC,KAAK,EAAE,KAAK;MACZC,SAAS,EAAE,IAAI;MACfC,KAAK,EAAE,oBAAoB;MAC3BC,MAAM,EAAE;QACNC,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDC,MAAM,EAAE;QACNJ,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDE,OAAO,EAAE;QACPL,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDG,IAAI,EAAE;IACR,CAAC,CAAC;;IAEF;IACAd,cAAc,CAACe,MAAM,CAAC,CAAC;EACzB,CACF,CAAC;AACH;;AAEA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"location-map.js","names":["createDatasetsPlugin","EVENTS","centerMap","createMap","defaultConfig","eastingNorthingToLatLong","getMapLayers","latLongToEastingNorthing","latLongToOsGridRef","osGridRefToLatLong","sssiDataset","LOCATION_FIELD_SELECTOR","getInitMapConfig","locationField","locationType","dataset","locationtype","getInitLatLongMapConfig","getInitEastingNorthingMapConfig","getInitOsGridRefMapConfig","Error","validateLatLong","strLat","strLong","lat","trim","Number","long","valid","latMin","latMax","longMin","longMax","latInBounds","longInBounds","value","validateEastingNorthing","strEasting","strNorthing","easting","northing","eastingMin","eastingMax","northingMin","northingMax","validateOsGridRef","osGridRef","pattern","match","exec","getLatLongInputs","inputs","querySelectorAll","length","latInput","longInput","getEastingNorthingInputs","eastingInput","northingInput","getOsGridRefInput","input","querySelector","getInitMapCenterConfig","center","zoom","markers","id","coords","result","undefined","latlong","osGridRefInput","bindLatLongField","map","mapProvider","on","interactMarkerChange","onInteractMarkerChange","e","maxPrecision","toFixed","onUpdateInputs","addEventListener","bindEastingNorthingField","point","bindOsGridRefField","onUpdateInput","processLocation","config","location","index","HTMLDivElement","locationInputs","supportedLocations","includes","mapContainer","document","createElement","mapId","setAttribute","initConfig","after","datasets","mapLayers","maplayers","push","plugins","interactPlugin","mapReady","onMapReady","addPanel","focus","showLabel","label","mobile","slot","open","dismissible","modal","tablet","desktop","html","enable"],"sources":["../../../src/client/javascripts/location-map.js"],"sourcesContent":["// @ts-expect-error - no types\nimport createDatasetsPlugin from '@defra/interactive-map/plugins/datasets'\n\nimport {\n EVENTS,\n centerMap,\n createMap,\n defaultConfig,\n eastingNorthingToLatLong,\n getMapLayers,\n latLongToEastingNorthing,\n latLongToOsGridRef,\n osGridRefToLatLong\n} from '~/src/client/javascripts/map.js'\nimport sssiDataset from '~/src/client/javascripts/sssi-dataset.js'\n\nconst LOCATION_FIELD_SELECTOR = 'input.govuk-input'\n\n/**\n * Gets initial map config for a location field\n * @param {HTMLDivElement} locationField - the location field element\n */\nfunction getInitMapConfig(locationField) {\n const locationType = locationField.dataset.locationtype\n\n switch (locationType) {\n case 'latlongfield':\n return getInitLatLongMapConfig(locationField)\n case 'eastingnorthingfield':\n return getInitEastingNorthingMapConfig(locationField)\n case 'osgridreffield':\n return getInitOsGridRefMapConfig(locationField)\n default:\n throw new Error('Not implemented')\n }\n}\n\n/**\n * Validates lat and long is numeric and within UK bounds\n * @param {string} strLat - the latitude string\n * @param {string} strLong - the longitude string\n * @returns {{ valid: false } | { valid: true, value: { lat: number, long: number } }}\n */\nfunction validateLatLong(strLat, strLong) {\n const lat = strLat.trim() && Number(strLat.trim())\n const long = strLong.trim() && Number(strLong.trim())\n\n if (!lat || !long) {\n return { valid: false }\n }\n\n const latMin = 49.85\n const latMax = 60.859\n const longMin = -13.687\n const longMax = 1.767\n\n const latInBounds = lat >= latMin && lat <= latMax\n const longInBounds = long >= longMin && long <= longMax\n\n if (!latInBounds || !longInBounds) {\n return { valid: false }\n }\n\n return { valid: true, value: { lat, long } }\n}\n\n/**\n * Validates easting and northing is numeric and within UK bounds\n * @param {string} strEasting - the easting string\n * @param {string} strNorthing - the northing string\n * @returns {{ valid: false } | { valid: true, value: { easting: number, northing: number } }}\n */\nfunction validateEastingNorthing(strEasting, strNorthing) {\n const easting = strEasting.trim() && Number(strEasting.trim())\n const northing = strNorthing.trim() && Number(strNorthing.trim())\n\n if (!easting || !northing) {\n return { valid: false }\n }\n\n const eastingMin = 0\n const eastingMax = 700000\n const northingMin = 0\n const northingMax = 1300000\n\n const latInBounds = easting >= eastingMin && easting <= eastingMax\n const longInBounds = northing >= northingMin && northing <= northingMax\n\n if (!latInBounds || !longInBounds) {\n return { valid: false }\n }\n\n return { valid: true, value: { easting, northing } }\n}\n\n/**\n * Validates OS grid reference is correct\n * @param {string} osGridRef - the OsGridRef\n * @returns {{ valid: false } | { valid: true, value: string }}\n */\nfunction validateOsGridRef(osGridRef) {\n if (!osGridRef) {\n return { valid: false }\n }\n\n const pattern =\n /^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\\s?(([0-9]{3})\\s?([0-9]{3})|([0-9]{4})\\s?([0-9]{4})|([0-9]{5})\\s?([0-9]{5}))$/\n\n const match = pattern.exec(osGridRef)\n\n if (match === null) {\n return { valid: false }\n }\n\n return { valid: true, value: match[0] }\n}\n\n/**\n * Gets the inputs for a latlong location field\n * @param {HTMLDivElement} locationField - the latlong location field element\n */\nfunction getLatLongInputs(locationField) {\n const inputs = locationField.querySelectorAll(LOCATION_FIELD_SELECTOR)\n\n if (inputs.length !== 2) {\n throw new Error('Expected 2 inputs for lat and long')\n }\n\n const latInput = /** @type {HTMLInputElement} */ (inputs[0])\n const longInput = /** @type {HTMLInputElement} */ (inputs[1])\n\n return { latInput, longInput }\n}\n\n/**\n * Gets the inputs for a easting/northing location field\n * @param {HTMLDivElement} locationField - the eastingnorthing location field element\n */\nfunction getEastingNorthingInputs(locationField) {\n const inputs = locationField.querySelectorAll(LOCATION_FIELD_SELECTOR)\n\n if (inputs.length !== 2) {\n throw new Error('Expected 2 inputs for easting and northing')\n }\n\n const eastingInput = /** @type {HTMLInputElement} */ (inputs[0])\n const northingInput = /** @type {HTMLInputElement} */ (inputs[1])\n\n return { eastingInput, northingInput }\n}\n\n/**\n * Gets the input for a OS grid reference location field\n * @param {HTMLDivElement} locationField - the osgridref location field element\n */\nfunction getOsGridRefInput(locationField) {\n const input = locationField.querySelector(LOCATION_FIELD_SELECTOR)\n\n if (input === null) {\n throw new Error('Expected 1 input for osgridref')\n }\n\n return /** @type {HTMLInputElement} */ (input)\n}\n\n/**\n * Get the initial map config for a center point\n * @param {MapCenter} center - the point\n */\nfunction getInitMapCenterConfig(center) {\n return {\n zoom: '16',\n center,\n markers: [\n {\n id: 'location',\n coords: center\n }\n ]\n }\n}\n\n/**\n * Gets initial map config for a latlong location field\n * @param {HTMLDivElement} locationField - the latlong location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitLatLongMapConfig(locationField) {\n const { latInput, longInput } = getLatLongInputs(locationField)\n const result = validateLatLong(latInput.value, longInput.value)\n\n if (!result.valid) {\n return undefined\n }\n\n /** @type {MapCenter} */\n const center = [result.value.long, result.value.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Gets initial map config for a easting/northing location field\n * @param {HTMLDivElement} locationField - the eastingnorthing location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitEastingNorthingMapConfig(locationField) {\n const { eastingInput, northingInput } =\n getEastingNorthingInputs(locationField)\n const result = validateEastingNorthing(\n eastingInput.value,\n northingInput.value\n )\n\n if (!result.valid) {\n return undefined\n }\n\n const latlong = eastingNorthingToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Gets initial map config for an OS grid reference location field\n * @param {HTMLDivElement} locationField - the osgridref location field element\n * @returns {InteractiveMapInitConfig | undefined}\n */\nfunction getInitOsGridRefMapConfig(locationField) {\n const osGridRefInput = getOsGridRefInput(locationField)\n const result = validateOsGridRef(osGridRefInput.value)\n\n if (!result.valid) {\n return undefined\n }\n\n const latlong = osGridRefToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n return getInitMapCenterConfig(center)\n}\n\n/**\n * Bind a latlong field to the map\n * @param {HTMLDivElement} locationField - the latlong location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindLatLongField(locationField, map, mapProvider) {\n const { latInput, longInput } = getLatLongInputs(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const maxPrecision = 7\n latInput.value = e.coords[1].toFixed(maxPrecision)\n longInput.value = e.coords[0].toFixed(maxPrecision)\n }\n )\n\n /**\n * Lat & long input change event listener\n * Update the map view location when the inputs are changed\n */\n function onUpdateInputs() {\n const result = validateLatLong(latInput.value, longInput.value)\n\n if (result.valid) {\n /** @type {MapCenter} */\n const center = [result.value.long, result.value.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n latInput.addEventListener('change', onUpdateInputs, false)\n longInput.addEventListener('change', onUpdateInputs, false)\n}\n\n/**\n * Bind an eastingnorthing field to the map\n * @param {HTMLDivElement} locationField - the eastingnorthing location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindEastingNorthingField(locationField, map, mapProvider) {\n const { eastingInput, northingInput } =\n getEastingNorthingInputs(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const maxPrecision = 0\n const point = latLongToEastingNorthing({\n lat: e.coords[1],\n long: e.coords[0]\n })\n\n eastingInput.value = point.easting.toFixed(maxPrecision)\n northingInput.value = point.northing.toFixed(maxPrecision)\n }\n )\n\n /**\n * Easting & northing input change event listener\n * Update the map view location when the inputs are changed\n */\n function onUpdateInputs() {\n const result = validateEastingNorthing(\n eastingInput.value,\n northingInput.value\n )\n\n if (result.valid) {\n const latlong = eastingNorthingToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n eastingInput.addEventListener('change', onUpdateInputs, false)\n northingInput.addEventListener('change', onUpdateInputs, false)\n}\n\n/**\n * Bind an OS grid reference field to the map\n * @param {HTMLDivElement} locationField - the osgridref location field\n * @param {InteractiveMap} map - the map component instance (of InteractiveMap)\n * @param {MapLibreMap} mapProvider - the map provider instance (of MapLibreMap)\n */\nfunction bindOsGridRefField(locationField, map, mapProvider) {\n const osGridRefInput = getOsGridRefInput(locationField)\n\n map.on(\n EVENTS.interactMarkerChange,\n /**\n * Callback function which fires when the map marker changes\n * @param {object} e - the event\n * @param {[number, number]} e.coords - the map marker coordinates\n */\n function onInteractMarkerChange(e) {\n const point = latLongToOsGridRef({\n lat: e.coords[1],\n long: e.coords[0]\n })\n\n osGridRefInput.value = point\n }\n )\n\n /**\n * OS grid reference input change event listener\n * Update the map view location when the input is changed\n */\n function onUpdateInput() {\n const result = validateOsGridRef(osGridRefInput.value)\n\n if (result.valid) {\n const latlong = osGridRefToLatLong(result.value)\n\n /** @type {MapCenter} */\n const center = [latlong.long, latlong.lat]\n\n centerMap(map, mapProvider, center)\n }\n }\n\n osGridRefInput.addEventListener('change', onUpdateInput, false)\n}\n\n/**\n * Processes a location field to add map capability\n * @param {MapsEnvironmentConfig} config - the location field element\n * @param {Element} location - the location field element\n * @param {number} index - the 0-based index\n */\nexport function processLocation(config, location, index) {\n if (!(location instanceof HTMLDivElement)) {\n return\n }\n\n const locationInputs = location.querySelector('.app-location-field-inputs')\n if (!(locationInputs instanceof HTMLDivElement)) {\n return\n }\n const locationType = location.dataset.locationtype\n\n // Check for support\n const supportedLocations = [\n 'latlongfield',\n 'eastingnorthingfield',\n 'osgridreffield'\n ]\n if (!locationType || !supportedLocations.includes(locationType)) {\n return\n }\n\n const mapContainer = document.createElement('div')\n const mapId = `map_${index}`\n\n mapContainer.setAttribute('id', mapId)\n mapContainer.setAttribute('class', 'map-container')\n\n const initConfig = getInitMapConfig(location) ?? defaultConfig\n\n locationInputs.after(mapContainer)\n\n const datasets = []\n const mapLayers = getMapLayers(location.dataset.maplayers)\n\n if (mapLayers.includes('sssi')) {\n datasets.push(...sssiDataset)\n }\n\n // Create a map dataset plugin if there are any present\n if (datasets.length) {\n initConfig.plugins = [createDatasetsPlugin({ datasets })]\n }\n\n const { map, interactPlugin } = createMap(mapId, initConfig, config)\n\n map.on(\n EVENTS.mapReady,\n /**\n * Callback function which fires when the map is ready\n * @param {object} e - the event\n * @param {MapLibreMap} e.map - the map provider instance\n */\n function onMapReady(e) {\n switch (locationType) {\n case 'latlongfield':\n bindLatLongField(location, map, e.map)\n break\n case 'eastingnorthingfield':\n bindEastingNorthingField(location, map, e.map)\n break\n case 'osgridreffield':\n bindOsGridRefField(location, map, e.map)\n break\n default:\n throw new Error('Not implemented')\n }\n\n // Add info panel\n map.addPanel('info', {\n focus: false,\n showLabel: true,\n label: 'How to use the map',\n mobile: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n tablet: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n desktop: {\n slot: 'drawer',\n open: true,\n dismissible: true,\n modal: false\n },\n html: '<ul><li>Search for a place or postcode</li><li>Use the + and - icons to zoom in and out</li><li>Use a mouse or keyboard to centre the point at the location</li><li>Click to add the location to the map</li></ul>'\n })\n\n // Enable the interact plugin\n interactPlugin.enable()\n }\n )\n}\n\n/**\n * @import { InteractiveMap, InteractiveMapInitConfig, MapCenter, MapLibreMap, MapsEnvironmentConfig } from '~/src/client/javascripts/map.js'\n */\n"],"mappings":"AAAA;AACA,OAAOA,oBAAoB,MAAM,yCAAyC;AAE1E,SACEC,MAAM,EACNC,SAAS,EACTC,SAAS,EACTC,aAAa,EACbC,wBAAwB,EACxBC,YAAY,EACZC,wBAAwB,EACxBC,kBAAkB,EAClBC,kBAAkB;AAEpB,OAAOC,WAAW;AAElB,MAAMC,uBAAuB,GAAG,mBAAmB;;AAEnD;AACA;AACA;AACA;AACA,SAASC,gBAAgBA,CAACC,aAAa,EAAE;EACvC,MAAMC,YAAY,GAAGD,aAAa,CAACE,OAAO,CAACC,YAAY;EAEvD,QAAQF,YAAY;IAClB,KAAK,cAAc;MACjB,OAAOG,uBAAuB,CAACJ,aAAa,CAAC;IAC/C,KAAK,sBAAsB;MACzB,OAAOK,+BAA+B,CAACL,aAAa,CAAC;IACvD,KAAK,gBAAgB;MACnB,OAAOM,yBAAyB,CAACN,aAAa,CAAC;IACjD;MACE,MAAM,IAAIO,KAAK,CAAC,iBAAiB,CAAC;EACtC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,MAAM,EAAEC,OAAO,EAAE;EACxC,MAAMC,GAAG,GAAGF,MAAM,CAACG,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACJ,MAAM,CAACG,IAAI,CAAC,CAAC,CAAC;EAClD,MAAME,IAAI,GAAGJ,OAAO,CAACE,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACH,OAAO,CAACE,IAAI,CAAC,CAAC,CAAC;EAErD,IAAI,CAACD,GAAG,IAAI,CAACG,IAAI,EAAE;IACjB,OAAO;MAAEC,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMC,MAAM,GAAG,KAAK;EACpB,MAAMC,MAAM,GAAG,MAAM;EACrB,MAAMC,OAAO,GAAG,CAAC,MAAM;EACvB,MAAMC,OAAO,GAAG,KAAK;EAErB,MAAMC,WAAW,GAAGT,GAAG,IAAIK,MAAM,IAAIL,GAAG,IAAIM,MAAM;EAClD,MAAMI,YAAY,GAAGP,IAAI,IAAII,OAAO,IAAIJ,IAAI,IAAIK,OAAO;EAEvD,IAAI,CAACC,WAAW,IAAI,CAACC,YAAY,EAAE;IACjC,OAAO;MAAEN,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAE;MAAEX,GAAG;MAAEG;IAAK;EAAE,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,uBAAuBA,CAACC,UAAU,EAAEC,WAAW,EAAE;EACxD,MAAMC,OAAO,GAAGF,UAAU,CAACZ,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACW,UAAU,CAACZ,IAAI,CAAC,CAAC,CAAC;EAC9D,MAAMe,QAAQ,GAAGF,WAAW,CAACb,IAAI,CAAC,CAAC,IAAIC,MAAM,CAACY,WAAW,CAACb,IAAI,CAAC,CAAC,CAAC;EAEjE,IAAI,CAACc,OAAO,IAAI,CAACC,QAAQ,EAAE;IACzB,OAAO;MAAEZ,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMa,UAAU,GAAG,CAAC;EACpB,MAAMC,UAAU,GAAG,MAAM;EACzB,MAAMC,WAAW,GAAG,CAAC;EACrB,MAAMC,WAAW,GAAG,OAAO;EAE3B,MAAMX,WAAW,GAAGM,OAAO,IAAIE,UAAU,IAAIF,OAAO,IAAIG,UAAU;EAClE,MAAMR,YAAY,GAAGM,QAAQ,IAAIG,WAAW,IAAIH,QAAQ,IAAII,WAAW;EAEvE,IAAI,CAACX,WAAW,IAAI,CAACC,YAAY,EAAE;IACjC,OAAO;MAAEN,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAE;MAAEI,OAAO;MAAEC;IAAS;EAAE,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASK,iBAAiBA,CAACC,SAAS,EAAE;EACpC,IAAI,CAACA,SAAS,EAAE;IACd,OAAO;MAAElB,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,MAAMmB,OAAO,GACX,qLAAqL;EAEvL,MAAMC,KAAK,GAAGD,OAAO,CAACE,IAAI,CAACH,SAAS,CAAC;EAErC,IAAIE,KAAK,KAAK,IAAI,EAAE;IAClB,OAAO;MAAEpB,KAAK,EAAE;IAAM,CAAC;EACzB;EAEA,OAAO;IAAEA,KAAK,EAAE,IAAI;IAAEO,KAAK,EAAEa,KAAK,CAAC,CAAC;EAAE,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA,SAASE,gBAAgBA,CAACrC,aAAa,EAAE;EACvC,MAAMsC,MAAM,GAAGtC,aAAa,CAACuC,gBAAgB,CAACzC,uBAAuB,CAAC;EAEtE,IAAIwC,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIjC,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,MAAMkC,QAAQ,GAAG,+BAAiCH,MAAM,CAAC,CAAC,CAAE;EAC5D,MAAMI,SAAS,GAAG,+BAAiCJ,MAAM,CAAC,CAAC,CAAE;EAE7D,OAAO;IAAEG,QAAQ;IAAEC;EAAU,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA,SAASC,wBAAwBA,CAAC3C,aAAa,EAAE;EAC/C,MAAMsC,MAAM,GAAGtC,aAAa,CAACuC,gBAAgB,CAACzC,uBAAuB,CAAC;EAEtE,IAAIwC,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIjC,KAAK,CAAC,4CAA4C,CAAC;EAC/D;EAEA,MAAMqC,YAAY,GAAG,+BAAiCN,MAAM,CAAC,CAAC,CAAE;EAChE,MAAMO,aAAa,GAAG,+BAAiCP,MAAM,CAAC,CAAC,CAAE;EAEjE,OAAO;IAAEM,YAAY;IAAEC;EAAc,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAAC9C,aAAa,EAAE;EACxC,MAAM+C,KAAK,GAAG/C,aAAa,CAACgD,aAAa,CAAClD,uBAAuB,CAAC;EAElE,IAAIiD,KAAK,KAAK,IAAI,EAAE;IAClB,MAAM,IAAIxC,KAAK,CAAC,gCAAgC,CAAC;EACnD;EAEA,OAAO,+BAAiCwC,KAAK;AAC/C;;AAEA;AACA;AACA;AACA;AACA,SAASE,sBAAsBA,CAACC,MAAM,EAAE;EACtC,OAAO;IACLC,IAAI,EAAE,IAAI;IACVD,MAAM;IACNE,OAAO,EAAE,CACP;MACEC,EAAE,EAAE,UAAU;MACdC,MAAM,EAAEJ;IACV,CAAC;EAEL,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS9C,uBAAuBA,CAACJ,aAAa,EAAE;EAC9C,MAAM;IAAEyC,QAAQ;IAAEC;EAAU,CAAC,GAAGL,gBAAgB,CAACrC,aAAa,CAAC;EAC/D,MAAMuD,MAAM,GAAG/C,eAAe,CAACiC,QAAQ,CAACnB,KAAK,EAAEoB,SAAS,CAACpB,KAAK,CAAC;EAE/D,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;;EAEA;EACA,MAAMN,MAAM,GAAG,CAACK,MAAM,CAACjC,KAAK,CAACR,IAAI,EAAEyC,MAAM,CAACjC,KAAK,CAACX,GAAG,CAAC;EAEpD,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS7C,+BAA+BA,CAACL,aAAa,EAAE;EACtD,MAAM;IAAE4C,YAAY;IAAEC;EAAc,CAAC,GACnCF,wBAAwB,CAAC3C,aAAa,CAAC;EACzC,MAAMuD,MAAM,GAAGhC,uBAAuB,CACpCqB,YAAY,CAACtB,KAAK,EAClBuB,aAAa,CAACvB,KAChB,CAAC;EAED,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;EAEA,MAAMC,OAAO,GAAGjE,wBAAwB,CAAC+D,MAAM,CAACjC,KAAK,CAAC;;EAEtD;EACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;EAE1C,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS5C,yBAAyBA,CAACN,aAAa,EAAE;EAChD,MAAM0D,cAAc,GAAGZ,iBAAiB,CAAC9C,aAAa,CAAC;EACvD,MAAMuD,MAAM,GAAGvB,iBAAiB,CAAC0B,cAAc,CAACpC,KAAK,CAAC;EAEtD,IAAI,CAACiC,MAAM,CAACxC,KAAK,EAAE;IACjB,OAAOyC,SAAS;EAClB;EAEA,MAAMC,OAAO,GAAG7D,kBAAkB,CAAC2D,MAAM,CAACjC,KAAK,CAAC;;EAEhD;EACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;EAE1C,OAAOsC,sBAAsB,CAACC,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASS,gBAAgBA,CAAC3D,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EACzD,MAAM;IAAEpB,QAAQ;IAAEC;EAAU,CAAC,GAAGL,gBAAgB,CAACrC,aAAa,CAAC;EAE/D4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMC,YAAY,GAAG,CAAC;IACtBzB,QAAQ,CAACnB,KAAK,GAAG2C,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC,CAACa,OAAO,CAACD,YAAY,CAAC;IAClDxB,SAAS,CAACpB,KAAK,GAAG2C,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC,CAACa,OAAO,CAACD,YAAY,CAAC;EACrD,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,cAAcA,CAAA,EAAG;IACxB,MAAMb,MAAM,GAAG/C,eAAe,CAACiC,QAAQ,CAACnB,KAAK,EAAEoB,SAAS,CAACpB,KAAK,CAAC;IAE/D,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB;MACA,MAAMmC,MAAM,GAAG,CAACK,MAAM,CAACjC,KAAK,CAACR,IAAI,EAAEyC,MAAM,CAACjC,KAAK,CAACX,GAAG,CAAC;MAEpDtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAT,QAAQ,CAAC4B,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;EAC1D1B,SAAS,CAAC2B,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,wBAAwBA,CAACtE,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EACjE,MAAM;IAAEjB,YAAY;IAAEC;EAAc,CAAC,GACnCF,wBAAwB,CAAC3C,aAAa,CAAC;EAEzC4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMC,YAAY,GAAG,CAAC;IACtB,MAAMK,KAAK,GAAG7E,wBAAwB,CAAC;MACrCiB,GAAG,EAAEsD,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC;MAChBxC,IAAI,EAAEmD,CAAC,CAACX,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC;IAEFV,YAAY,CAACtB,KAAK,GAAGiD,KAAK,CAAC7C,OAAO,CAACyC,OAAO,CAACD,YAAY,CAAC;IACxDrB,aAAa,CAACvB,KAAK,GAAGiD,KAAK,CAAC5C,QAAQ,CAACwC,OAAO,CAACD,YAAY,CAAC;EAC5D,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,cAAcA,CAAA,EAAG;IACxB,MAAMb,MAAM,GAAGhC,uBAAuB,CACpCqB,YAAY,CAACtB,KAAK,EAClBuB,aAAa,CAACvB,KAChB,CAAC;IAED,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB,MAAM0C,OAAO,GAAGjE,wBAAwB,CAAC+D,MAAM,CAACjC,KAAK,CAAC;;MAEtD;MACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;MAE1CtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAN,YAAY,CAACyB,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;EAC9DvB,aAAa,CAACwB,gBAAgB,CAAC,QAAQ,EAAED,cAAc,EAAE,KAAK,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASI,kBAAkBA,CAACxE,aAAa,EAAE4D,GAAG,EAAEC,WAAW,EAAE;EAC3D,MAAMH,cAAc,GAAGZ,iBAAiB,CAAC9C,aAAa,CAAC;EAEvD4D,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2E,oBAAoB;EAC3B;AACJ;AACA;AACA;AACA;EACI,SAASC,sBAAsBA,CAACC,CAAC,EAAE;IACjC,MAAMM,KAAK,GAAG5E,kBAAkB,CAAC;MAC/BgB,GAAG,EAAEsD,CAAC,CAACX,MAAM,CAAC,CAAC,CAAC;MAChBxC,IAAI,EAAEmD,CAAC,CAACX,MAAM,CAAC,CAAC;IAClB,CAAC,CAAC;IAEFI,cAAc,CAACpC,KAAK,GAAGiD,KAAK;EAC9B,CACF,CAAC;;EAED;AACF;AACA;AACA;EACE,SAASE,aAAaA,CAAA,EAAG;IACvB,MAAMlB,MAAM,GAAGvB,iBAAiB,CAAC0B,cAAc,CAACpC,KAAK,CAAC;IAEtD,IAAIiC,MAAM,CAACxC,KAAK,EAAE;MAChB,MAAM0C,OAAO,GAAG7D,kBAAkB,CAAC2D,MAAM,CAACjC,KAAK,CAAC;;MAEhD;MACA,MAAM4B,MAAM,GAAG,CAACO,OAAO,CAAC3C,IAAI,EAAE2C,OAAO,CAAC9C,GAAG,CAAC;MAE1CtB,SAAS,CAACuE,GAAG,EAAEC,WAAW,EAAEX,MAAM,CAAC;IACrC;EACF;EAEAQ,cAAc,CAACW,gBAAgB,CAAC,QAAQ,EAAEI,aAAa,EAAE,KAAK,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAE;EACvD,IAAI,EAAED,QAAQ,YAAYE,cAAc,CAAC,EAAE;IACzC;EACF;EAEA,MAAMC,cAAc,GAAGH,QAAQ,CAAC5B,aAAa,CAAC,4BAA4B,CAAC;EAC3E,IAAI,EAAE+B,cAAc,YAAYD,cAAc,CAAC,EAAE;IAC/C;EACF;EACA,MAAM7E,YAAY,GAAG2E,QAAQ,CAAC1E,OAAO,CAACC,YAAY;;EAElD;EACA,MAAM6E,kBAAkB,GAAG,CACzB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,CACjB;EACD,IAAI,CAAC/E,YAAY,IAAI,CAAC+E,kBAAkB,CAACC,QAAQ,CAAChF,YAAY,CAAC,EAAE;IAC/D;EACF;EAEA,MAAMiF,YAAY,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EAClD,MAAMC,KAAK,GAAG,OAAOR,KAAK,EAAE;EAE5BK,YAAY,CAACI,YAAY,CAAC,IAAI,EAAED,KAAK,CAAC;EACtCH,YAAY,CAACI,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC;EAEnD,MAAMC,UAAU,GAAGxF,gBAAgB,CAAC6E,QAAQ,CAAC,IAAIrF,aAAa;EAE9DwF,cAAc,CAACS,KAAK,CAACN,YAAY,CAAC;EAElC,MAAMO,QAAQ,GAAG,EAAE;EACnB,MAAMC,SAAS,GAAGjG,YAAY,CAACmF,QAAQ,CAAC1E,OAAO,CAACyF,SAAS,CAAC;EAE1D,IAAID,SAAS,CAACT,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC9BQ,QAAQ,CAACG,IAAI,CAAC,GAAG/F,WAAW,CAAC;EAC/B;;EAEA;EACA,IAAI4F,QAAQ,CAACjD,MAAM,EAAE;IACnB+C,UAAU,CAACM,OAAO,GAAG,CAAC1G,oBAAoB,CAAC;MAAEsG;IAAS,CAAC,CAAC,CAAC;EAC3D;EAEA,MAAM;IAAE7B,GAAG;IAAEkC;EAAe,CAAC,GAAGxG,SAAS,CAAC+F,KAAK,EAAEE,UAAU,EAAEZ,MAAM,CAAC;EAEpEf,GAAG,CAACE,EAAE,CACJ1E,MAAM,CAAC2G,QAAQ;EACf;AACJ;AACA;AACA;AACA;EACI,SAASC,UAAUA,CAAC/B,CAAC,EAAE;IACrB,QAAQhE,YAAY;MAClB,KAAK,cAAc;QACjB0D,gBAAgB,CAACiB,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QACtC;MACF,KAAK,sBAAsB;QACzBU,wBAAwB,CAACM,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QAC9C;MACF,KAAK,gBAAgB;QACnBY,kBAAkB,CAACI,QAAQ,EAAEhB,GAAG,EAAEK,CAAC,CAACL,GAAG,CAAC;QACxC;MACF;QACE,MAAM,IAAIrD,KAAK,CAAC,iBAAiB,CAAC;IACtC;;IAEA;IACAqD,GAAG,CAACqC,QAAQ,CAAC,MAAM,EAAE;MACnBC,KAAK,EAAE,KAAK;MACZC,SAAS,EAAE,IAAI;MACfC,KAAK,EAAE,oBAAoB;MAC3BC,MAAM,EAAE;QACNC,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDC,MAAM,EAAE;QACNJ,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDE,OAAO,EAAE;QACPL,IAAI,EAAE,QAAQ;QACdC,IAAI,EAAE,IAAI;QACVC,WAAW,EAAE,IAAI;QACjBC,KAAK,EAAE;MACT,CAAC;MACDG,IAAI,EAAE;IACR,CAAC,CAAC;;IAEF;IACAd,cAAc,CAACe,MAAM,CAAC,CAAC;EACzB,CACF,CAAC;AACH;;AAEA;AACA;AACA","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export { initMaps } from "../../client/javascripts/map.js";
2
+ export * as map from "../../client/javascripts/map.js";
3
+ export * as locationMap from "../../client/javascripts/location-map.js";
4
+ export * as geospatialMap from "../../client/javascripts/geospatial-map.js";
5
+ export * as sssiDataset from "../../client/javascripts/sssi-dataset.js";
@@ -0,0 +1,6 @@
1
+ export { initMaps } from "./map.js";
2
+ export * as map from "./map.js";
3
+ export * as locationMap from "./location-map.js";
4
+ export * as geospatialMap from "./geospatial-map.js";
5
+ export * as sssiDataset from "./sssi-dataset.js";
6
+ //# sourceMappingURL=maps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps.js","names":["initMaps","map","locationMap","geospatialMap","sssiDataset"],"sources":["../../../src/client/javascripts/maps.js"],"sourcesContent":["export { initMaps } from '~/src/client/javascripts/map.js'\nexport * as map from '~/src/client/javascripts/map.js'\nexport * as locationMap from '~/src/client/javascripts/location-map.js'\nexport * as geospatialMap from '~/src/client/javascripts/geospatial-map.js'\nexport * as sssiDataset from '~/src/client/javascripts/sssi-dataset.js'\n"],"mappings":"AAAA,SAASA,QAAQ;AACjB,OAAO,KAAKC,GAAG;AACf,OAAO,KAAKC,WAAW;AACvB,OAAO,KAAKC,aAAa;AACzB,OAAO,KAAKC,WAAW","ignoreList":[]}
@@ -2,9 +2,7 @@
2
2
  * Initialise all clientside components (but not maps as this will be an opt-in for now given the additional UMD assets that are required)
3
3
  */
4
4
  export function initAll(): void;
5
- export { initMaps } from "../../client/javascripts/map.js";
6
- export * as map from "../../client/javascripts/map.js";
7
- export * as geospatialMap from "../../client/javascripts/geospatial-map.js";
5
+ export * from "../../client/javascripts/maps.js";
8
6
  export const initAllGovuk: typeof initAllGovukImp;
9
7
  export const initAllAutocomplete: typeof initAllAutocompleteImp;
10
8
  export const initDebounceClick: typeof initDebounceClickImp;
@@ -3,9 +3,7 @@ import { initDebounceClick as initDebounceClickImp } from "./debounce-click.js";
3
3
  import { initFileUpload as initFileUploadImp } from "./file-upload.js";
4
4
  import { initAllGovuk as initAllGovukImp } from "./govuk.js";
5
5
  import { initPreviewCloseLink as initPreviewCloseLinkImp } from "./preview-close-link.js";
6
- export { initMaps } from "./map.js";
7
- export * as map from "./map.js";
8
- export * as geospatialMap from "./geospatial-map.js";
6
+ export * from "./maps.js";
9
7
  export const initAllGovuk = initAllGovukImp;
10
8
  export const initAllAutocomplete = initAllAutocompleteImp;
11
9
  export const initDebounceClick = initDebounceClickImp;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","names":["initAllAutocomplete","initAllAutocompleteImp","initDebounceClick","initDebounceClickImp","initFileUpload","initFileUploadImp","initAllGovuk","initAllGovukImp","initPreviewCloseLink","initPreviewCloseLinkImp","initMaps","map","geospatialMap","initAll"],"sources":["../../../src/client/javascripts/shared.js"],"sourcesContent":["import { initAllAutocomplete as initAllAutocompleteImp } from '~/src/client/javascripts/autocomplete.js'\nimport { initDebounceClick as initDebounceClickImp } from '~/src/client/javascripts/debounce-click.js'\nimport { initFileUpload as initFileUploadImp } from '~/src/client/javascripts/file-upload.js'\nimport { initAllGovuk as initAllGovukImp } from '~/src/client/javascripts/govuk.js'\nimport { initPreviewCloseLink as initPreviewCloseLinkImp } from '~/src/client/javascripts/preview-close-link.js'\nexport { initMaps } from '~/src/client/javascripts/map.js'\nexport * as map from '~/src/client/javascripts/map.js'\nexport * as geospatialMap from '~/src/client/javascripts/geospatial-map.js'\n\nexport const initAllGovuk = initAllGovukImp\nexport const initAllAutocomplete = initAllAutocompleteImp\nexport const initDebounceClick = initDebounceClickImp\nexport const initFileUpload = initFileUploadImp\nexport const initPreviewCloseLink = initPreviewCloseLinkImp\n\n/**\n * Initialise all clientside components (but not maps as this will be an opt-in for now given the additional UMD assets that are required)\n */\nexport function initAll() {\n initAllGovuk()\n initAllAutocomplete()\n initDebounceClick()\n initFileUpload()\n initPreviewCloseLink()\n}\n"],"mappings":"AAAA,SAASA,mBAAmB,IAAIC,sBAAsB;AACtD,SAASC,iBAAiB,IAAIC,oBAAoB;AAClD,SAASC,cAAc,IAAIC,iBAAiB;AAC5C,SAASC,YAAY,IAAIC,eAAe;AACxC,SAASC,oBAAoB,IAAIC,uBAAuB;AACxD,SAASC,QAAQ;AACjB,OAAO,KAAKC,GAAG;AACf,OAAO,KAAKC,aAAa;AAEzB,OAAO,MAAMN,YAAY,GAAGC,eAAe;AAC3C,OAAO,MAAMP,mBAAmB,GAAGC,sBAAsB;AACzD,OAAO,MAAMC,iBAAiB,GAAGC,oBAAoB;AACrD,OAAO,MAAMC,cAAc,GAAGC,iBAAiB;AAC/C,OAAO,MAAMG,oBAAoB,GAAGC,uBAAuB;;AAE3D;AACA;AACA;AACA,OAAO,SAASI,OAAOA,CAAA,EAAG;EACxBP,YAAY,CAAC,CAAC;EACdN,mBAAmB,CAAC,CAAC;EACrBE,iBAAiB,CAAC,CAAC;EACnBE,cAAc,CAAC,CAAC;EAChBI,oBAAoB,CAAC,CAAC;AACxB","ignoreList":[]}
1
+ {"version":3,"file":"shared.js","names":["initAllAutocomplete","initAllAutocompleteImp","initDebounceClick","initDebounceClickImp","initFileUpload","initFileUploadImp","initAllGovuk","initAllGovukImp","initPreviewCloseLink","initPreviewCloseLinkImp","initAll"],"sources":["../../../src/client/javascripts/shared.js"],"sourcesContent":["import { initAllAutocomplete as initAllAutocompleteImp } from '~/src/client/javascripts/autocomplete.js'\nimport { initDebounceClick as initDebounceClickImp } from '~/src/client/javascripts/debounce-click.js'\nimport { initFileUpload as initFileUploadImp } from '~/src/client/javascripts/file-upload.js'\nimport { initAllGovuk as initAllGovukImp } from '~/src/client/javascripts/govuk.js'\nimport { initPreviewCloseLink as initPreviewCloseLinkImp } from '~/src/client/javascripts/preview-close-link.js'\nexport * from '~/src/client/javascripts/maps.js'\n\nexport const initAllGovuk = initAllGovukImp\nexport const initAllAutocomplete = initAllAutocompleteImp\nexport const initDebounceClick = initDebounceClickImp\nexport const initFileUpload = initFileUploadImp\nexport const initPreviewCloseLink = initPreviewCloseLinkImp\n\n/**\n * Initialise all clientside components (but not maps as this will be an opt-in for now given the additional UMD assets that are required)\n */\nexport function initAll() {\n initAllGovuk()\n initAllAutocomplete()\n initDebounceClick()\n initFileUpload()\n initPreviewCloseLink()\n}\n"],"mappings":"AAAA,SAASA,mBAAmB,IAAIC,sBAAsB;AACtD,SAASC,iBAAiB,IAAIC,oBAAoB;AAClD,SAASC,cAAc,IAAIC,iBAAiB;AAC5C,SAASC,YAAY,IAAIC,eAAe;AACxC,SAASC,oBAAoB,IAAIC,uBAAuB;AACxD;AAEA,OAAO,MAAMH,YAAY,GAAGC,eAAe;AAC3C,OAAO,MAAMP,mBAAmB,GAAGC,sBAAsB;AACzD,OAAO,MAAMC,iBAAiB,GAAGC,oBAAoB;AACrD,OAAO,MAAMC,cAAc,GAAGC,iBAAiB;AAC/C,OAAO,MAAMG,oBAAoB,GAAGC,uBAAuB;;AAE3D;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CAAA,EAAG;EACxBJ,YAAY,CAAC,CAAC;EACdN,mBAAmB,CAAC,CAAC;EACrBE,iBAAiB,CAAC,CAAC;EACnBE,cAAc,CAAC,CAAC;EAChBI,oBAAoB,CAAC,CAAC;AACxB","ignoreList":[]}
@@ -1,26 +1,24 @@
1
1
  export function sssiEnglandRequestTransformer(url: string, options: TransformRequestOptions): any;
2
2
  export function sssiWalesRequestTransformer(url: string, options: TransformRequestOptions): any;
3
3
  export function sssiScotlandRequestTransformer(url: string, options: TransformRequestOptions): any;
4
- declare namespace _default {
5
- let datasets: {
6
- id: string;
7
- label: string;
8
- dynamicGeoJSON: {
9
- url: string;
10
- idProperty: string;
11
- transformRequest: typeof sssiEnglandRequestTransformer;
12
- };
13
- minZoom: number;
14
- style: {
15
- stroke: string;
16
- fillPattern: string;
17
- fillPatternForegroundColor: string;
18
- fillPatternBackgroundColor: string;
19
- };
20
- showInKey: boolean;
21
- showInMenu: boolean;
22
- }[];
23
- }
4
+ declare const _default: {
5
+ id: string;
6
+ label: string;
7
+ dynamicGeoJSON: {
8
+ url: string;
9
+ idProperty: string;
10
+ transformRequest: typeof sssiEnglandRequestTransformer;
11
+ };
12
+ minZoom: number;
13
+ style: {
14
+ stroke: string;
15
+ fillPattern: string;
16
+ fillPatternForegroundColor: string;
17
+ fillPatternBackgroundColor: string;
18
+ };
19
+ showInKey: boolean;
20
+ showInMenu: boolean;
21
+ }[];
24
22
  export default _default;
25
23
  export type TransformRequestOptions = {
26
24
  /**
@@ -47,45 +47,43 @@ export function sssiScotlandRequestTransformer(url, {
47
47
  url: uri.toString()
48
48
  };
49
49
  }
50
- export default {
51
- datasets: [{
52
- id: 'sssi-england',
53
- label: 'Sites of Special Scientific Interest',
54
- dynamicGeoJSON: {
55
- url: englandWFS,
56
- idProperty: 'ref_code',
57
- transformRequest: sssiEnglandRequestTransformer
58
- },
59
- minZoom,
60
- style,
61
- showInKey: true,
62
- showInMenu: false
63
- }, {
64
- id: 'sssi-wales',
65
- label: 'SSSI Wales',
66
- dynamicGeoJSON: {
67
- url: walesWFS,
68
- idProperty: 'id',
69
- transformRequest: sssiWalesRequestTransformer
70
- },
71
- minZoom,
72
- style,
73
- showInKey: false,
74
- showInMenu: false
75
- }, {
76
- id: 'sssi-scotland',
77
- label: 'SSSI Scotland',
78
- dynamicGeoJSON: {
79
- url: scotlandWFS,
80
- idProperty: 'OBJECTID',
81
- transformRequest: sssiScotlandRequestTransformer
82
- },
83
- minZoom,
84
- style,
85
- showInKey: false,
86
- showInMenu: false
87
- }]
88
- };
50
+ export default [{
51
+ id: 'sssi-england',
52
+ label: 'Sites of Special Scientific Interest',
53
+ dynamicGeoJSON: {
54
+ url: englandWFS,
55
+ idProperty: 'ref_code',
56
+ transformRequest: sssiEnglandRequestTransformer
57
+ },
58
+ minZoom,
59
+ style,
60
+ showInKey: true,
61
+ showInMenu: false
62
+ }, {
63
+ id: 'sssi-wales',
64
+ label: 'SSSI Wales',
65
+ dynamicGeoJSON: {
66
+ url: walesWFS,
67
+ idProperty: 'id',
68
+ transformRequest: sssiWalesRequestTransformer
69
+ },
70
+ minZoom,
71
+ style,
72
+ showInKey: false,
73
+ showInMenu: false
74
+ }, {
75
+ id: 'sssi-scotland',
76
+ label: 'SSSI Scotland',
77
+ dynamicGeoJSON: {
78
+ url: scotlandWFS,
79
+ idProperty: 'OBJECTID',
80
+ transformRequest: sssiScotlandRequestTransformer
81
+ },
82
+ minZoom,
83
+ style,
84
+ showInKey: false,
85
+ showInMenu: false
86
+ }];
89
87
 
90
88
  /**
91
89
  * @typedef {object} TransformRequestOptions
@@ -1 +1 @@
1
- {"version":3,"file":"sssi-dataset.js","names":["style","stroke","fillPattern","fillPatternForegroundColor","fillPatternBackgroundColor","minZoom","englandWFS","walesWFS","scotlandWFS","sssiEnglandRequestTransformer","url","bbox","uri","URL","searchParams","set","join","toString","sssiWalesRequestTransformer","sssiScotlandRequestTransformer","datasets","id","label","dynamicGeoJSON","idProperty","transformRequest","showInKey","showInMenu"],"sources":["../../../src/client/javascripts/sssi-dataset.js"],"sourcesContent":["const style = {\n stroke: '#00897B',\n fillPattern: 'diagonal-cross-hatch',\n fillPatternForegroundColor: '#00897B',\n fillPatternBackgroundColor: 'transparent'\n}\nconst minZoom = 12\n\nconst englandWFS =\n 'https://environment.data.gov.uk/geoservices/datasets/ba8dc201-66ef-4983-9d46-7378af21027e/ogc/features/v1/collections/Sites_of_Special_Scientific_Interest_England/items?f=json'\nconst walesWFS =\n 'https://datamap.gov.wales/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typeNames=inspire-nrw:NRW_SSSI&outputFormat=application/json&srsName=EPSG:4326'\nconst scotlandWFS =\n 'https://services1.arcgis.com/LM9GyVFsughzHdbO/ArcGIS/rest/services/Sites_of_Special_Scientific_Interest/FeatureServer/0/query?f=geojson&where=1%3D1&geometryType=esriGeometryEnvelope&inSR=4326&spatialRel=esriSpatialRelIntersects&returnGeometry=true&outFields=*'\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiEnglandRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('bbox', bbox.join(','))\n\n return {\n url: uri.toString()\n }\n}\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiWalesRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('bbox', `${bbox.join(',')},EPSG:4326`)\n\n return {\n url: uri.toString()\n }\n}\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiScotlandRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('geometry', bbox.join(','))\n\n return {\n url: uri.toString()\n }\n}\n\nexport default {\n datasets: [\n {\n id: 'sssi-england',\n label: 'Sites of Special Scientific Interest',\n dynamicGeoJSON: {\n url: englandWFS,\n idProperty: 'ref_code',\n transformRequest: sssiEnglandRequestTransformer\n },\n minZoom,\n style,\n showInKey: true,\n showInMenu: false\n },\n {\n id: 'sssi-wales',\n label: 'SSSI Wales',\n dynamicGeoJSON: {\n url: walesWFS,\n idProperty: 'id',\n transformRequest: sssiWalesRequestTransformer\n },\n minZoom,\n style,\n showInKey: false,\n showInMenu: false\n },\n {\n id: 'sssi-scotland',\n label: 'SSSI Scotland',\n dynamicGeoJSON: {\n url: scotlandWFS,\n idProperty: 'OBJECTID',\n transformRequest: sssiScotlandRequestTransformer\n },\n minZoom,\n style,\n showInKey: false,\n showInMenu: false\n }\n ]\n}\n\n/**\n * @typedef {object} TransformRequestOptions\n * @property {string[]} bbox - the bounding box coordinates\n */\n\n/**\n * Transforms the request URL with bounding box parameters\n * @callback TransformRequestArgs\n * @param {string} url - the request URL\n * @param {TransformRequestOptions} options - the bounding box coordinates\n */\n"],"mappings":"AAAA,MAAMA,KAAK,GAAG;EACZC,MAAM,EAAE,SAAS;EACjBC,WAAW,EAAE,sBAAsB;EACnCC,0BAA0B,EAAE,SAAS;EACrCC,0BAA0B,EAAE;AAC9B,CAAC;AACD,MAAMC,OAAO,GAAG,EAAE;AAElB,MAAMC,UAAU,GACd,iLAAiL;AACnL,MAAMC,QAAQ,GACZ,qKAAqK;AACvK,MAAMC,WAAW,GACf,qQAAqQ;;AAEvQ;AACA;AACA;AACA,OAAO,SAASC,6BAA6BA,CAACC,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EAC3D,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,MAAM,EAAEJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;EAE5C,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASC,2BAA2BA,CAACR,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EACzD,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,MAAM,EAAE,GAAGJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;EAE3D,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASE,8BAA8BA,CAACT,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EAC5D,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,UAAU,EAAEJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;EAEhD,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;AAEA,eAAe;EACbG,QAAQ,EAAE,CACR;IACEC,EAAE,EAAE,cAAc;IAClBC,KAAK,EAAE,sCAAsC;IAC7CC,cAAc,EAAE;MACdb,GAAG,EAAEJ,UAAU;MACfkB,UAAU,EAAE,UAAU;MACtBC,gBAAgB,EAAEhB;IACpB,CAAC;IACDJ,OAAO;IACPL,KAAK;IACL0B,SAAS,EAAE,IAAI;IACfC,UAAU,EAAE;EACd,CAAC,EACD;IACEN,EAAE,EAAE,YAAY;IAChBC,KAAK,EAAE,YAAY;IACnBC,cAAc,EAAE;MACdb,GAAG,EAAEH,QAAQ;MACbiB,UAAU,EAAE,IAAI;MAChBC,gBAAgB,EAAEP;IACpB,CAAC;IACDb,OAAO;IACPL,KAAK;IACL0B,SAAS,EAAE,KAAK;IAChBC,UAAU,EAAE;EACd,CAAC,EACD;IACEN,EAAE,EAAE,eAAe;IACnBC,KAAK,EAAE,eAAe;IACtBC,cAAc,EAAE;MACdb,GAAG,EAAEF,WAAW;MAChBgB,UAAU,EAAE,UAAU;MACtBC,gBAAgB,EAAEN;IACpB,CAAC;IACDd,OAAO;IACPL,KAAK;IACL0B,SAAS,EAAE,KAAK;IAChBC,UAAU,EAAE;EACd,CAAC;AAEL,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"sssi-dataset.js","names":["style","stroke","fillPattern","fillPatternForegroundColor","fillPatternBackgroundColor","minZoom","englandWFS","walesWFS","scotlandWFS","sssiEnglandRequestTransformer","url","bbox","uri","URL","searchParams","set","join","toString","sssiWalesRequestTransformer","sssiScotlandRequestTransformer","id","label","dynamicGeoJSON","idProperty","transformRequest","showInKey","showInMenu"],"sources":["../../../src/client/javascripts/sssi-dataset.js"],"sourcesContent":["const style = {\n stroke: '#00897B',\n fillPattern: 'diagonal-cross-hatch',\n fillPatternForegroundColor: '#00897B',\n fillPatternBackgroundColor: 'transparent'\n}\nconst minZoom = 12\n\nconst englandWFS =\n 'https://environment.data.gov.uk/geoservices/datasets/ba8dc201-66ef-4983-9d46-7378af21027e/ogc/features/v1/collections/Sites_of_Special_Scientific_Interest_England/items?f=json'\nconst walesWFS =\n 'https://datamap.gov.wales/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typeNames=inspire-nrw:NRW_SSSI&outputFormat=application/json&srsName=EPSG:4326'\nconst scotlandWFS =\n 'https://services1.arcgis.com/LM9GyVFsughzHdbO/ArcGIS/rest/services/Sites_of_Special_Scientific_Interest/FeatureServer/0/query?f=geojson&where=1%3D1&geometryType=esriGeometryEnvelope&inSR=4326&spatialRel=esriSpatialRelIntersects&returnGeometry=true&outFields=*'\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiEnglandRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('bbox', bbox.join(','))\n\n return {\n url: uri.toString()\n }\n}\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiWalesRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('bbox', `${bbox.join(',')},EPSG:4326`)\n\n return {\n url: uri.toString()\n }\n}\n\n/**\n * @type {TransformRequestArgs}\n */\nexport function sssiScotlandRequestTransformer(url, { bbox }) {\n const uri = new URL(url)\n uri.searchParams.set('geometry', bbox.join(','))\n\n return {\n url: uri.toString()\n }\n}\n\nexport default [\n {\n id: 'sssi-england',\n label: 'Sites of Special Scientific Interest',\n dynamicGeoJSON: {\n url: englandWFS,\n idProperty: 'ref_code',\n transformRequest: sssiEnglandRequestTransformer\n },\n minZoom,\n style,\n showInKey: true,\n showInMenu: false\n },\n {\n id: 'sssi-wales',\n label: 'SSSI Wales',\n dynamicGeoJSON: {\n url: walesWFS,\n idProperty: 'id',\n transformRequest: sssiWalesRequestTransformer\n },\n minZoom,\n style,\n showInKey: false,\n showInMenu: false\n },\n {\n id: 'sssi-scotland',\n label: 'SSSI Scotland',\n dynamicGeoJSON: {\n url: scotlandWFS,\n idProperty: 'OBJECTID',\n transformRequest: sssiScotlandRequestTransformer\n },\n minZoom,\n style,\n showInKey: false,\n showInMenu: false\n }\n]\n\n/**\n * @typedef {object} TransformRequestOptions\n * @property {string[]} bbox - the bounding box coordinates\n */\n\n/**\n * Transforms the request URL with bounding box parameters\n * @callback TransformRequestArgs\n * @param {string} url - the request URL\n * @param {TransformRequestOptions} options - the bounding box coordinates\n */\n"],"mappings":"AAAA,MAAMA,KAAK,GAAG;EACZC,MAAM,EAAE,SAAS;EACjBC,WAAW,EAAE,sBAAsB;EACnCC,0BAA0B,EAAE,SAAS;EACrCC,0BAA0B,EAAE;AAC9B,CAAC;AACD,MAAMC,OAAO,GAAG,EAAE;AAElB,MAAMC,UAAU,GACd,iLAAiL;AACnL,MAAMC,QAAQ,GACZ,qKAAqK;AACvK,MAAMC,WAAW,GACf,qQAAqQ;;AAEvQ;AACA;AACA;AACA,OAAO,SAASC,6BAA6BA,CAACC,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EAC3D,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,MAAM,EAAEJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;EAE5C,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASC,2BAA2BA,CAACR,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EACzD,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,MAAM,EAAE,GAAGJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;EAE3D,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASE,8BAA8BA,CAACT,GAAG,EAAE;EAAEC;AAAK,CAAC,EAAE;EAC5D,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;EACxBE,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,UAAU,EAAEJ,IAAI,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;EAEhD,OAAO;IACLN,GAAG,EAAEE,GAAG,CAACK,QAAQ,CAAC;EACpB,CAAC;AACH;AAEA,eAAe,CACb;EACEG,EAAE,EAAE,cAAc;EAClBC,KAAK,EAAE,sCAAsC;EAC7CC,cAAc,EAAE;IACdZ,GAAG,EAAEJ,UAAU;IACfiB,UAAU,EAAE,UAAU;IACtBC,gBAAgB,EAAEf;EACpB,CAAC;EACDJ,OAAO;EACPL,KAAK;EACLyB,SAAS,EAAE,IAAI;EACfC,UAAU,EAAE;AACd,CAAC,EACD;EACEN,EAAE,EAAE,YAAY;EAChBC,KAAK,EAAE,YAAY;EACnBC,cAAc,EAAE;IACdZ,GAAG,EAAEH,QAAQ;IACbgB,UAAU,EAAE,IAAI;IAChBC,gBAAgB,EAAEN;EACpB,CAAC;EACDb,OAAO;EACPL,KAAK;EACLyB,SAAS,EAAE,KAAK;EAChBC,UAAU,EAAE;AACd,CAAC,EACD;EACEN,EAAE,EAAE,eAAe;EACnBC,KAAK,EAAE,eAAe;EACtBC,cAAc,EAAE;IACdZ,GAAG,EAAEF,WAAW;IAChBe,UAAU,EAAE,UAAU;IACtBC,gBAAgB,EAAEL;EACpB,CAAC;EACDd,OAAO;EACPL,KAAK;EACLyB,SAAS,EAAE,KAAK;EAChBC,UAAU,EAAE;AACd,CAAC,CACF;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ @use "@defra/interactive-map/css" as core;
2
+ @use "@defra/interactive-map/plugins/map-styles/css" as mapStyles;
3
+ @use "@defra/interactive-map/plugins/search/css" as search;
4
+ @use "@defra/interactive-map/plugins/scale-bar/css" as scaleBar;
@@ -3,11 +3,7 @@
3
3
  @use "prose";
4
4
  @use "summary-list";
5
5
  @use "location-fields";
6
-
7
- @use "@defra/interactive-map/css" as core;
8
- @use "@defra/interactive-map/plugins/map-styles/css" as mapStyles;
9
- @use "@defra/interactive-map/plugins/search/css" as search;
10
- @use "@defra/interactive-map/plugins/scale-bar/css" as scaleBar;
6
+ @use "maps";
11
7
 
12
8
  // Use default GDS Transport font for autocomplete
13
9
  .autocomplete__hint,
@@ -5,3 +5,5 @@ export const EXTERNAL_STATE_PAYLOAD: "EXTERNAL_STATE_PAYLOAD";
5
5
  export const EXTERNAL_STATE_APPENDAGE: "EXTERNAL_STATE_APPENDAGE";
6
6
  export const COMPONENT_STATE_ERROR: "COMPONENT_STATE_ERROR";
7
7
  export const PAYMENT_EXPIRED_NOTIFICATION: "PAYMENT_EXPIRED_NOTIFICATION";
8
+ export const EN_GB: "en-GB";
9
+ export const CY: "cy";
@@ -5,4 +5,6 @@ export const EXTERNAL_STATE_PAYLOAD = 'EXTERNAL_STATE_PAYLOAD';
5
5
  export const EXTERNAL_STATE_APPENDAGE = 'EXTERNAL_STATE_APPENDAGE';
6
6
  export const COMPONENT_STATE_ERROR = 'COMPONENT_STATE_ERROR';
7
7
  export const PAYMENT_EXPIRED_NOTIFICATION = 'PAYMENT_EXPIRED_NOTIFICATION';
8
+ export const EN_GB = 'en-GB'; // English language
9
+ export const CY = 'cy'; // Welsh language
8
10
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["FORM_VERSION_METADATA_KEY","PREVIEW_PATH_PREFIX","FORM_PREFIX","EXTERNAL_STATE_PAYLOAD","EXTERNAL_STATE_APPENDAGE","COMPONENT_STATE_ERROR","PAYMENT_EXPIRED_NOTIFICATION"],"sources":["../../src/server/constants.js"],"sourcesContent":["export const FORM_VERSION_METADATA_KEY = '$$__formVersion'\nexport const PREVIEW_PATH_PREFIX = '/preview'\nexport const FORM_PREFIX = ''\nexport const EXTERNAL_STATE_PAYLOAD = 'EXTERNAL_STATE_PAYLOAD'\nexport const EXTERNAL_STATE_APPENDAGE = 'EXTERNAL_STATE_APPENDAGE'\nexport const COMPONENT_STATE_ERROR = 'COMPONENT_STATE_ERROR'\nexport const PAYMENT_EXPIRED_NOTIFICATION = 'PAYMENT_EXPIRED_NOTIFICATION'\n"],"mappings":"AAAA,OAAO,MAAMA,yBAAyB,GAAG,iBAAiB;AAC1D,OAAO,MAAMC,mBAAmB,GAAG,UAAU;AAC7C,OAAO,MAAMC,WAAW,GAAG,EAAE;AAC7B,OAAO,MAAMC,sBAAsB,GAAG,wBAAwB;AAC9D,OAAO,MAAMC,wBAAwB,GAAG,0BAA0B;AAClE,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAC5D,OAAO,MAAMC,4BAA4B,GAAG,8BAA8B","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["FORM_VERSION_METADATA_KEY","PREVIEW_PATH_PREFIX","FORM_PREFIX","EXTERNAL_STATE_PAYLOAD","EXTERNAL_STATE_APPENDAGE","COMPONENT_STATE_ERROR","PAYMENT_EXPIRED_NOTIFICATION","EN_GB","CY"],"sources":["../../src/server/constants.js"],"sourcesContent":["export const FORM_VERSION_METADATA_KEY = '$$__formVersion'\nexport const PREVIEW_PATH_PREFIX = '/preview'\nexport const FORM_PREFIX = ''\nexport const EXTERNAL_STATE_PAYLOAD = 'EXTERNAL_STATE_PAYLOAD'\nexport const EXTERNAL_STATE_APPENDAGE = 'EXTERNAL_STATE_APPENDAGE'\nexport const COMPONENT_STATE_ERROR = 'COMPONENT_STATE_ERROR'\nexport const PAYMENT_EXPIRED_NOTIFICATION = 'PAYMENT_EXPIRED_NOTIFICATION'\nexport const EN_GB = 'en-GB' // English language\nexport const CY = 'cy' // Welsh language\n"],"mappings":"AAAA,OAAO,MAAMA,yBAAyB,GAAG,iBAAiB;AAC1D,OAAO,MAAMC,mBAAmB,GAAG,UAAU;AAC7C,OAAO,MAAMC,WAAW,GAAG,EAAE;AAC7B,OAAO,MAAMC,sBAAsB,GAAG,wBAAwB;AAC9D,OAAO,MAAMC,wBAAwB,GAAG,0BAA0B;AAClE,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAC5D,OAAO,MAAMC,4BAA4B,GAAG,8BAA8B;AAC1E,OAAO,MAAMC,KAAK,GAAG,OAAO,EAAC;AAC7B,OAAO,MAAMC,EAAE,GAAG,IAAI,EAAC","ignoreList":[]}
@@ -1,6 +1,8 @@
1
1
  import { type AutocompleteFieldComponent } from '@defra/forms-model';
2
+ import { type LanguageMessages } from 'joi';
2
3
  import { SelectField } from '../../../../server/plugins/engine/components/SelectField.js';
3
4
  import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
5
+ import { type Translator } from '../../../../server/plugins/engine/types/index.js';
4
6
  export declare class AutocompleteField extends SelectField {
5
7
  options: AutocompleteFieldComponent['options'];
6
8
  constructor(def: AutocompleteFieldComponent, props: ConstructorParameters<typeof SelectField>[1]);
@@ -15,7 +17,7 @@ export declare class AutocompleteField extends SelectField {
15
17
  };
16
18
  id: string;
17
19
  name: string;
18
- value: import("../types.js").FormValue;
20
+ value: import("../../../../server/plugins/engine/types/index.js").FormValue;
19
21
  type?: string;
20
22
  hint?: {
21
23
  id?: string;
@@ -25,7 +27,7 @@ export declare class AutocompleteField extends SelectField {
25
27
  suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
26
28
  classes?: string;
27
29
  condition?: string;
28
- errors?: import("../types.js").FormSubmissionError[];
30
+ errors?: import("../../../../server/plugins/engine/types/index.js").FormSubmissionError[];
29
31
  errorMessage?: {
30
32
  text: string;
31
33
  };
@@ -50,7 +52,11 @@ export declare class AutocompleteField extends SelectField {
50
52
  components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
51
53
  upload?: {
52
54
  count: number;
53
- summaryList: import("../types.js").SummaryList;
55
+ summaryList: import("../../../../server/plugins/engine/types/index.js").SummaryList;
56
+ uploadingLabel?: string;
54
57
  };
55
58
  };
59
+ getValidationMessagesOverride(translator: Translator): {
60
+ [x: string]: LanguageMessages;
61
+ };
56
62
  }
@@ -1,4 +1,5 @@
1
1
  import { SelectField } from "./SelectField.js";
2
+ import { buildValidationMessages } from "../i18n/buildValidationMessages.js";
2
3
  import { messageTemplate } from "../pageControllers/validationOptions.js";
3
4
  export class AutocompleteField extends SelectField {
4
5
  constructor(def, props) {
@@ -33,5 +34,16 @@ export class AutocompleteField extends SelectField {
33
34
  formGroup
34
35
  };
35
36
  }
37
+ getValidationMessagesOverride(translator) {
38
+ const {
39
+ t
40
+ } = translator;
41
+ return {
42
+ [this.name]: {
43
+ 'any.required': buildValidationMessages(t).objectRequired,
44
+ 'any.only': buildValidationMessages(t).objectRequired
45
+ }
46
+ };
47
+ }
36
48
  }
37
49
  //# sourceMappingURL=AutocompleteField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteField.js","names":["SelectField","messageTemplate","AutocompleteField","constructor","def","props","options","formSchema","required","messages","customValidationMessages","getViewModel","context","viewModel","formGroup","attributes"],"sources":["../../../../../src/server/plugins/engine/components/AutocompleteField.ts"],"sourcesContent":["import { type AutocompleteFieldComponent } from '@defra/forms-model'\n\nimport { SelectField } from '~/src/server/plugins/engine/components/SelectField.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\n\nexport class AutocompleteField extends SelectField {\n declare options: AutocompleteFieldComponent['options']\n\n constructor(\n def: AutocompleteFieldComponent,\n props: ConstructorParameters<typeof SelectField>[1]\n ) {\n super(def, props)\n\n const { options } = def\n let { formSchema } = this\n\n if (options.required !== false) {\n const messages = options.customValidationMessages\n\n formSchema = formSchema.messages({\n 'any.only':\n messages?.['any.only'] ?? (messageTemplate.required as string),\n 'any.required':\n messages?.['any.required'] ?? (messageTemplate.required as string)\n })\n }\n\n this.options = options\n this.formSchema = formSchema\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n let { formGroup } = viewModel\n\n formGroup ??= {}\n formGroup.attributes = {\n 'data-module': 'govuk-accessible-autocomplete'\n }\n\n return {\n ...viewModel,\n formGroup\n }\n }\n}\n"],"mappings":"AAEA,SAASA,WAAW;AAEpB,SAASC,eAAe;AAExB,OAAO,MAAMC,iBAAiB,SAASF,WAAW,CAAC;EAGjDG,WAAWA,CACTC,GAA+B,EAC/BC,KAAmD,EACnD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAQ,CAAC,GAAGF,GAAG;IACvB,IAAI;MAAEG;IAAW,CAAC,GAAG,IAAI;IAEzB,IAAID,OAAO,CAACE,QAAQ,KAAK,KAAK,EAAE;MAC9B,MAAMC,QAAQ,GAAGH,OAAO,CAACI,wBAAwB;MAEjDH,UAAU,GAAGA,UAAU,CAACE,QAAQ,CAAC;QAC/B,UAAU,EACRA,QAAQ,GAAG,UAAU,CAAC,IAAKR,eAAe,CAACO,QAAmB;QAChE,cAAc,EACZC,QAAQ,GAAG,cAAc,CAAC,IAAKR,eAAe,CAACO;MACnD,CAAC,CAAC;IACJ;IAEA,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAI,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAMC,SAAS,GAAG,KAAK,CAACF,YAAY,CAACC,OAAO,CAAC;IAC7C,IAAI;MAAEE;IAAU,CAAC,GAAGD,SAAS;IAE7BC,SAAS,KAAK,CAAC,CAAC;IAChBA,SAAS,CAACC,UAAU,GAAG;MACrB,aAAa,EAAE;IACjB,CAAC;IAED,OAAO;MACL,GAAGF,SAAS;MACZC;IACF,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"AutocompleteField.js","names":["SelectField","buildValidationMessages","messageTemplate","AutocompleteField","constructor","def","props","options","formSchema","required","messages","customValidationMessages","getViewModel","context","viewModel","formGroup","attributes","getValidationMessagesOverride","translator","t","name","objectRequired"],"sources":["../../../../../src/server/plugins/engine/components/AutocompleteField.ts"],"sourcesContent":["import { type AutocompleteFieldComponent } from '@defra/forms-model'\nimport { type LanguageMessages } from 'joi'\n\nimport { SelectField } from '~/src/server/plugins/engine/components/SelectField.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type Translator } from '~/src/server/plugins/engine/types/index.js'\n\nexport class AutocompleteField extends SelectField {\n declare options: AutocompleteFieldComponent['options']\n\n constructor(\n def: AutocompleteFieldComponent,\n props: ConstructorParameters<typeof SelectField>[1]\n ) {\n super(def, props)\n\n const { options } = def\n let { formSchema } = this\n\n if (options.required !== false) {\n const messages = options.customValidationMessages\n\n formSchema = formSchema.messages({\n 'any.only':\n messages?.['any.only'] ?? (messageTemplate.required as string),\n 'any.required':\n messages?.['any.required'] ?? (messageTemplate.required as string)\n })\n }\n\n this.options = options\n this.formSchema = formSchema\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n let { formGroup } = viewModel\n\n formGroup ??= {}\n formGroup.attributes = {\n 'data-module': 'govuk-accessible-autocomplete'\n }\n\n return {\n ...viewModel,\n formGroup\n }\n }\n\n getValidationMessagesOverride(translator: Translator) {\n const { t } = translator\n return {\n [this.name]: {\n 'any.required': buildValidationMessages(t).objectRequired,\n 'any.only': buildValidationMessages(t).objectRequired\n } as LanguageMessages\n }\n }\n}\n"],"mappings":"AAGA,SAASA,WAAW;AAEpB,SAASC,uBAAuB;AAChC,SAASC,eAAe;AAGxB,OAAO,MAAMC,iBAAiB,SAASH,WAAW,CAAC;EAGjDI,WAAWA,CACTC,GAA+B,EAC/BC,KAAmD,EACnD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAQ,CAAC,GAAGF,GAAG;IACvB,IAAI;MAAEG;IAAW,CAAC,GAAG,IAAI;IAEzB,IAAID,OAAO,CAACE,QAAQ,KAAK,KAAK,EAAE;MAC9B,MAAMC,QAAQ,GAAGH,OAAO,CAACI,wBAAwB;MAEjDH,UAAU,GAAGA,UAAU,CAACE,QAAQ,CAAC;QAC/B,UAAU,EACRA,QAAQ,GAAG,UAAU,CAAC,IAAKR,eAAe,CAACO,QAAmB;QAChE,cAAc,EACZC,QAAQ,GAAG,cAAc,CAAC,IAAKR,eAAe,CAACO;MACnD,CAAC,CAAC;IACJ;IAEA,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAI,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAMC,SAAS,GAAG,KAAK,CAACF,YAAY,CAACC,OAAO,CAAC;IAC7C,IAAI;MAAEE;IAAU,CAAC,GAAGD,SAAS;IAE7BC,SAAS,KAAK,CAAC,CAAC;IAChBA,SAAS,CAACC,UAAU,GAAG;MACrB,aAAa,EAAE;IACjB,CAAC;IAED,OAAO;MACL,GAAGF,SAAS;MACZC;IACF,CAAC;EACH;EAEAE,6BAA6BA,CAACC,UAAsB,EAAE;IACpD,MAAM;MAAEC;IAAE,CAAC,GAAGD,UAAU;IACxB,OAAO;MACL,CAAC,IAAI,CAACE,IAAI,GAAG;QACX,cAAc,EAAEnB,uBAAuB,CAACkB,CAAC,CAAC,CAACE,cAAc;QACzD,UAAU,EAAEpB,uBAAuB,CAACkB,CAAC,CAAC,CAACE;MACzC;IACF,CAAC;EACH;AACF","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { type CheckboxesFieldComponent, type Item } from '@defra/forms-model';
2
- import { type ArraySchema } from 'joi';
2
+ import joi, { type ArraySchema } from 'joi';
3
3
  import { SelectionControlField } from '../../../../server/plugins/engine/components/SelectionControlField.js';
4
4
  import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
5
5
  import { type ErrorMessageTemplateList, type FormState, type FormStateValue, type FormSubmissionState } from '../../../../server/plugins/engine/types.js';
@@ -15,6 +15,9 @@ export declare class CheckboxesField extends SelectionControlField {
15
15
  getContextValueFromFormValue(values: (string | number | boolean)[] | undefined): (string | number | boolean)[];
16
16
  getDisplayStringFromState(state: FormSubmissionState, translator: Translator): string;
17
17
  getContextValueFromState(state: FormSubmissionState): (string | number | boolean)[];
18
+ getValidationMessagesOverride(translator: Translator): {
19
+ [x: string]: joi.LanguageMessages;
20
+ };
18
21
  /**
19
22
  * For error preview page that shows all possible errors on a component
20
23
  */
@@ -1,6 +1,7 @@
1
1
  import joi from 'joi';
2
2
  import { isFormValue } from "./FormComponent.js";
3
3
  import { SelectionControlField } from "./SelectionControlField.js";
4
+ import { buildValidationMessages } from "../i18n/buildValidationMessages.js";
4
5
  import { messageTemplate } from "../pageControllers/validationOptions.js";
5
6
  export class CheckboxesField extends SelectionControlField {
6
7
  constructor(def, props) {
@@ -83,6 +84,18 @@ export class CheckboxesField extends SelectionControlField {
83
84
  const values = this.getFormValueFromState(state);
84
85
  return this.getContextValueFromFormValue(values);
85
86
  }
87
+ getValidationMessagesOverride(translator) {
88
+ const {
89
+ t
90
+ } = translator;
91
+ return {
92
+ [this.name]: {
93
+ 'array.min': buildValidationMessages(t).arrayMin,
94
+ 'array.max': buildValidationMessages(t).arrayMax,
95
+ 'array.length': buildValidationMessages(t).arrayLength
96
+ }
97
+ };
98
+ }
86
99
 
87
100
  /**
88
101
  * For error preview page that shows all possible errors on a component
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxesField.js","names":["joi","isFormValue","SelectionControlField","messageTemplate","CheckboxesField","constructor","def","props","listType","type","options","schema","formSchema","array","itemsSchema","valid","values","label","items","single","required","messages","arrayMin","arrayMax","arrayLength","optional","length","min","max","default","stateSchema","allow","getFormValueFromState","state","name","getFormValue","selected","filter","item","includes","value","map","undefined","isValue","getDisplayStringFromFormValue","translator","tListItem","text","join","getContextValueFromFormValue","getDisplayStringFromState","getContextValueFromState","getAllPossibleErrors","parentErrors","advancedSettingsErrors","template","Array","isArray","every"],"sources":["../../../../../src/server/plugins/engine/components/CheckboxesField.ts"],"sourcesContent":["import { type CheckboxesFieldComponent, type Item } from '@defra/forms-model'\nimport joi, { type ArraySchema } from 'joi'\n\nimport { isFormValue } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'\nimport { type QuestionPageController } from '~/src/server/plugins/engine/pageControllers/QuestionPageController.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormState,\n type FormStateValue,\n type FormSubmissionState\n} from '~/src/server/plugins/engine/types.js'\n\nexport class CheckboxesField extends SelectionControlField {\n declare options: CheckboxesFieldComponent['options']\n declare schema: CheckboxesFieldComponent['schema']\n declare formSchema: ArraySchema<string> | ArraySchema<number>\n declare stateSchema: ArraySchema<string> | ArraySchema<number>\n\n constructor(\n def: CheckboxesFieldComponent,\n props: ConstructorParameters<typeof SelectionControlField>[1]\n ) {\n super(def, props)\n\n const { listType: type } = this\n const { options, schema } = def\n\n let formSchema =\n type === 'string' ? joi.array<string>() : joi.array<number>()\n\n const itemsSchema = joi[type]()\n .valid(...this.values)\n .label(this.label)\n\n formSchema = formSchema\n .items(itemsSchema)\n .single()\n .label(this.label)\n .required()\n .messages({\n 'array.min': messageTemplate.arrayMin,\n 'array.max': messageTemplate.arrayMax,\n 'array.length': messageTemplate.arrayLength\n })\n\n if (options.required === false) {\n formSchema = formSchema.optional()\n }\n\n if (typeof schema?.length === 'number') {\n formSchema = formSchema.length(schema.length)\n } else {\n if (typeof schema?.min === 'number') {\n formSchema = formSchema.min(schema.min)\n }\n\n if (typeof schema?.max === 'number') {\n formSchema = formSchema.max(schema.max)\n }\n }\n\n this.formSchema = formSchema.default([])\n this.stateSchema = formSchema.default(null).allow(null)\n this.options = options\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const { items, name } = this\n\n // State checkbox values\n const values = this.getFormValue(state[name]) ?? []\n\n // Map (or discard) state values to item values\n const selected = items\n .filter((item) => values.includes(item.value))\n .map((item) => item.value)\n\n return selected.length ? selected : undefined\n }\n\n getFormValue(value?: FormStateValue | FormState) {\n return this.isValue(value) ? value : undefined\n }\n\n getDisplayStringFromFormValue(\n selected: (string | number | boolean)[] | undefined,\n translator: Translator\n ) {\n const { items } = this\n\n if (!selected) {\n return ''\n }\n\n return items\n .filter((item) => selected.includes(item.value))\n .map((item) => translator.tListItem(item, 'text') || item.text)\n .join(', ')\n }\n\n getContextValueFromFormValue(\n values: (string | number | boolean)[] | undefined\n ): (string | number | boolean)[] {\n /**\n * For evaluation context purposes, optional {@link CheckboxesField}\n * with an undefined value (i.e. nothing selected) should default to [].\n * This way conditions are not evaluated against `undefined` which throws errors.\n * Currently these errors are caught and the evaluation returns default `false`.\n * @see {@link QuestionPageController.getNextPath} for `undefined` return value\n * @see {@link FormModel.makeCondition} for try/catch block with default `false`\n * For negative conditions this is a problem because E.g.\n * The condition: 'selectedchecks' does not contain 'someval'\n * should return true IF 'selectedchecks' is undefined, not throw and return false.\n */\n return values ?? []\n }\n\n getDisplayStringFromState(\n state: FormSubmissionState,\n translator: Translator\n ) {\n const selected = this.getFormValueFromState(state) ?? []\n return this.getDisplayStringFromFormValue(selected, translator)\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const values = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(values)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return CheckboxesField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n const parentErrors = SelectionControlField.getAllPossibleErrors()\n\n return {\n ...parentErrors,\n advancedSettingsErrors: [\n ...parentErrors.advancedSettingsErrors,\n { type: 'array.min', template: messageTemplate.arrayMin },\n { type: 'array.max', template: messageTemplate.arrayMax },\n { type: 'array.length', template: messageTemplate.arrayLength }\n ]\n }\n }\n\n isValue(value?: FormStateValue | FormState): value is Item['value'][] {\n if (!Array.isArray(value)) {\n return false\n }\n\n // Skip checks when empty\n if (!value.length) {\n return true\n }\n\n return value.every(isFormValue)\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CheckboxesField.js","names":["joi","isFormValue","SelectionControlField","buildValidationMessages","messageTemplate","CheckboxesField","constructor","def","props","listType","type","options","schema","formSchema","array","itemsSchema","valid","values","label","items","single","required","messages","arrayMin","arrayMax","arrayLength","optional","length","min","max","default","stateSchema","allow","getFormValueFromState","state","name","getFormValue","selected","filter","item","includes","value","map","undefined","isValue","getDisplayStringFromFormValue","translator","tListItem","text","join","getContextValueFromFormValue","getDisplayStringFromState","getContextValueFromState","getValidationMessagesOverride","t","getAllPossibleErrors","parentErrors","advancedSettingsErrors","template","Array","isArray","every"],"sources":["../../../../../src/server/plugins/engine/components/CheckboxesField.ts"],"sourcesContent":["import { type CheckboxesFieldComponent, type Item } from '@defra/forms-model'\nimport joi, { type ArraySchema, type LanguageMessages } from 'joi'\n\nimport { isFormValue } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'\nimport { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'\nimport { type QuestionPageController } from '~/src/server/plugins/engine/pageControllers/QuestionPageController.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormState,\n type FormStateValue,\n type FormSubmissionState\n} from '~/src/server/plugins/engine/types.js'\n\nexport class CheckboxesField extends SelectionControlField {\n declare options: CheckboxesFieldComponent['options']\n declare schema: CheckboxesFieldComponent['schema']\n declare formSchema: ArraySchema<string> | ArraySchema<number>\n declare stateSchema: ArraySchema<string> | ArraySchema<number>\n\n constructor(\n def: CheckboxesFieldComponent,\n props: ConstructorParameters<typeof SelectionControlField>[1]\n ) {\n super(def, props)\n\n const { listType: type } = this\n const { options, schema } = def\n\n let formSchema =\n type === 'string' ? joi.array<string>() : joi.array<number>()\n\n const itemsSchema = joi[type]()\n .valid(...this.values)\n .label(this.label)\n\n formSchema = formSchema\n .items(itemsSchema)\n .single()\n .label(this.label)\n .required()\n .messages({\n 'array.min': messageTemplate.arrayMin,\n 'array.max': messageTemplate.arrayMax,\n 'array.length': messageTemplate.arrayLength\n })\n\n if (options.required === false) {\n formSchema = formSchema.optional()\n }\n\n if (typeof schema?.length === 'number') {\n formSchema = formSchema.length(schema.length)\n } else {\n if (typeof schema?.min === 'number') {\n formSchema = formSchema.min(schema.min)\n }\n\n if (typeof schema?.max === 'number') {\n formSchema = formSchema.max(schema.max)\n }\n }\n\n this.formSchema = formSchema.default([])\n this.stateSchema = formSchema.default(null).allow(null)\n this.options = options\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const { items, name } = this\n\n // State checkbox values\n const values = this.getFormValue(state[name]) ?? []\n\n // Map (or discard) state values to item values\n const selected = items\n .filter((item) => values.includes(item.value))\n .map((item) => item.value)\n\n return selected.length ? selected : undefined\n }\n\n getFormValue(value?: FormStateValue | FormState) {\n return this.isValue(value) ? value : undefined\n }\n\n getDisplayStringFromFormValue(\n selected: (string | number | boolean)[] | undefined,\n translator: Translator\n ) {\n const { items } = this\n\n if (!selected) {\n return ''\n }\n\n return items\n .filter((item) => selected.includes(item.value))\n .map((item) => translator.tListItem(item, 'text') || item.text)\n .join(', ')\n }\n\n getContextValueFromFormValue(\n values: (string | number | boolean)[] | undefined\n ): (string | number | boolean)[] {\n /**\n * For evaluation context purposes, optional {@link CheckboxesField}\n * with an undefined value (i.e. nothing selected) should default to [].\n * This way conditions are not evaluated against `undefined` which throws errors.\n * Currently these errors are caught and the evaluation returns default `false`.\n * @see {@link QuestionPageController.getNextPath} for `undefined` return value\n * @see {@link FormModel.makeCondition} for try/catch block with default `false`\n * For negative conditions this is a problem because E.g.\n * The condition: 'selectedchecks' does not contain 'someval'\n * should return true IF 'selectedchecks' is undefined, not throw and return false.\n */\n return values ?? []\n }\n\n getDisplayStringFromState(\n state: FormSubmissionState,\n translator: Translator\n ) {\n const selected = this.getFormValueFromState(state) ?? []\n return this.getDisplayStringFromFormValue(selected, translator)\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const values = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(values)\n }\n\n getValidationMessagesOverride(translator: Translator) {\n const { t } = translator\n return {\n [this.name]: {\n 'array.min': buildValidationMessages(t).arrayMin,\n 'array.max': buildValidationMessages(t).arrayMax,\n 'array.length': buildValidationMessages(t).arrayLength\n } as LanguageMessages\n }\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return CheckboxesField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n const parentErrors = SelectionControlField.getAllPossibleErrors()\n\n return {\n ...parentErrors,\n advancedSettingsErrors: [\n ...parentErrors.advancedSettingsErrors,\n { type: 'array.min', template: messageTemplate.arrayMin },\n { type: 'array.max', template: messageTemplate.arrayMax },\n { type: 'array.length', template: messageTemplate.arrayLength }\n ]\n }\n }\n\n isValue(value?: FormStateValue | FormState): value is Item['value'][] {\n if (!Array.isArray(value)) {\n return false\n }\n\n // Skip checks when empty\n if (!value.length) {\n return true\n }\n\n return value.every(isFormValue)\n }\n}\n"],"mappings":"AACA,OAAOA,GAAG,MAAmD,KAAK;AAElE,SAASC,WAAW;AACpB,SAASC,qBAAqB;AAC9B,SAASC,uBAAuB;AAIhC,SAASC,eAAe;AAQxB,OAAO,MAAMC,eAAe,SAASH,qBAAqB,CAAC;EAMzDI,WAAWA,CACTC,GAA6B,EAC7BC,KAA6D,EAC7D;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC,QAAQ,EAAEC;IAAK,CAAC,GAAG,IAAI;IAC/B,MAAM;MAAEC,OAAO;MAAEC;IAAO,CAAC,GAAGL,GAAG;IAE/B,IAAIM,UAAU,GACZH,IAAI,KAAK,QAAQ,GAAGV,GAAG,CAACc,KAAK,CAAS,CAAC,GAAGd,GAAG,CAACc,KAAK,CAAS,CAAC;IAE/D,MAAMC,WAAW,GAAGf,GAAG,CAACU,IAAI,CAAC,CAAC,CAAC,CAC5BM,KAAK,CAAC,GAAG,IAAI,CAACC,MAAM,CAAC,CACrBC,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC;IAEpBL,UAAU,GAAGA,UAAU,CACpBM,KAAK,CAACJ,WAAW,CAAC,CAClBK,MAAM,CAAC,CAAC,CACRF,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC,CACjBG,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC;MACR,WAAW,EAAElB,eAAe,CAACmB,QAAQ;MACrC,WAAW,EAAEnB,eAAe,CAACoB,QAAQ;MACrC,cAAc,EAAEpB,eAAe,CAACqB;IAClC,CAAC,CAAC;IAEJ,IAAId,OAAO,CAACU,QAAQ,KAAK,KAAK,EAAE;MAC9BR,UAAU,GAAGA,UAAU,CAACa,QAAQ,CAAC,CAAC;IACpC;IAEA,IAAI,OAAOd,MAAM,EAAEe,MAAM,KAAK,QAAQ,EAAE;MACtCd,UAAU,GAAGA,UAAU,CAACc,MAAM,CAACf,MAAM,CAACe,MAAM,CAAC;IAC/C,CAAC,MAAM;MACL,IAAI,OAAOf,MAAM,EAAEgB,GAAG,KAAK,QAAQ,EAAE;QACnCf,UAAU,GAAGA,UAAU,CAACe,GAAG,CAAChB,MAAM,CAACgB,GAAG,CAAC;MACzC;MAEA,IAAI,OAAOhB,MAAM,EAAEiB,GAAG,KAAK,QAAQ,EAAE;QACnChB,UAAU,GAAGA,UAAU,CAACgB,GAAG,CAACjB,MAAM,CAACiB,GAAG,CAAC;MACzC;IACF;IAEA,IAAI,CAAChB,UAAU,GAAGA,UAAU,CAACiB,OAAO,CAAC,EAAE,CAAC;IACxC,IAAI,CAACC,WAAW,GAAGlB,UAAU,CAACiB,OAAO,CAAC,IAAI,CAAC,CAACE,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,CAACrB,OAAO,GAAGA,OAAO;EACxB;EAEAsB,qBAAqBA,CAACC,KAA0B,EAAE;IAChD,MAAM;MAAEf,KAAK;MAAEgB;IAAK,CAAC,GAAG,IAAI;;IAE5B;IACA,MAAMlB,MAAM,GAAG,IAAI,CAACmB,YAAY,CAACF,KAAK,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE;;IAEnD;IACA,MAAME,QAAQ,GAAGlB,KAAK,CACnBmB,MAAM,CAAEC,IAAI,IAAKtB,MAAM,CAACuB,QAAQ,CAACD,IAAI,CAACE,KAAK,CAAC,CAAC,CAC7CC,GAAG,CAAEH,IAAI,IAAKA,IAAI,CAACE,KAAK,CAAC;IAE5B,OAAOJ,QAAQ,CAACV,MAAM,GAAGU,QAAQ,GAAGM,SAAS;EAC/C;EAEAP,YAAYA,CAACK,KAAkC,EAAE;IAC/C,OAAO,IAAI,CAACG,OAAO,CAACH,KAAK,CAAC,GAAGA,KAAK,GAAGE,SAAS;EAChD;EAEAE,6BAA6BA,CAC3BR,QAAmD,EACnDS,UAAsB,EACtB;IACA,MAAM;MAAE3B;IAAM,CAAC,GAAG,IAAI;IAEtB,IAAI,CAACkB,QAAQ,EAAE;MACb,OAAO,EAAE;IACX;IAEA,OAAOlB,KAAK,CACTmB,MAAM,CAAEC,IAAI,IAAKF,QAAQ,CAACG,QAAQ,CAACD,IAAI,CAACE,KAAK,CAAC,CAAC,CAC/CC,GAAG,CAAEH,IAAI,IAAKO,UAAU,CAACC,SAAS,CAACR,IAAI,EAAE,MAAM,CAAC,IAAIA,IAAI,CAACS,IAAI,CAAC,CAC9DC,IAAI,CAAC,IAAI,CAAC;EACf;EAEAC,4BAA4BA,CAC1BjC,MAAiD,EAClB;IAC/B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI,OAAOA,MAAM,IAAI,EAAE;EACrB;EAEAkC,yBAAyBA,CACvBjB,KAA0B,EAC1BY,UAAsB,EACtB;IACA,MAAMT,QAAQ,GAAG,IAAI,CAACJ,qBAAqB,CAACC,KAAK,CAAC,IAAI,EAAE;IACxD,OAAO,IAAI,CAACW,6BAA6B,CAACR,QAAQ,EAAES,UAAU,CAAC;EACjE;EAEAM,wBAAwBA,CAAClB,KAA0B,EAAE;IACnD,MAAMjB,MAAM,GAAG,IAAI,CAACgB,qBAAqB,CAACC,KAAK,CAAC;IAEhD,OAAO,IAAI,CAACgB,4BAA4B,CAACjC,MAAM,CAAC;EAClD;EAEAoC,6BAA6BA,CAACP,UAAsB,EAAE;IACpD,MAAM;MAAEQ;IAAE,CAAC,GAAGR,UAAU;IACxB,OAAO;MACL,CAAC,IAAI,CAACX,IAAI,GAAG;QACX,WAAW,EAAEhC,uBAAuB,CAACmD,CAAC,CAAC,CAAC/B,QAAQ;QAChD,WAAW,EAAEpB,uBAAuB,CAACmD,CAAC,CAAC,CAAC9B,QAAQ;QAChD,cAAc,EAAErB,uBAAuB,CAACmD,CAAC,CAAC,CAAC7B;MAC7C;IACF,CAAC;EACH;;EAEA;AACF;AACA;EACE8B,oBAAoBA,CAAA,EAA6B;IAC/C,OAAOlD,eAAe,CAACkD,oBAAoB,CAAC,CAAC;EAC/C;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,MAAMC,YAAY,GAAGtD,qBAAqB,CAACqD,oBAAoB,CAAC,CAAC;IAEjE,OAAO;MACL,GAAGC,YAAY;MACfC,sBAAsB,EAAE,CACtB,GAAGD,YAAY,CAACC,sBAAsB,EACtC;QAAE/C,IAAI,EAAE,WAAW;QAAEgD,QAAQ,EAAEtD,eAAe,CAACmB;MAAS,CAAC,EACzD;QAAEb,IAAI,EAAE,WAAW;QAAEgD,QAAQ,EAAEtD,eAAe,CAACoB;MAAS,CAAC,EACzD;QAAEd,IAAI,EAAE,cAAc;QAAEgD,QAAQ,EAAEtD,eAAe,CAACqB;MAAY,CAAC;IAEnE,CAAC;EACH;EAEAmB,OAAOA,CAACH,KAAkC,EAA4B;IACpE,IAAI,CAACkB,KAAK,CAACC,OAAO,CAACnB,KAAK,CAAC,EAAE;MACzB,OAAO,KAAK;IACd;;IAEA;IACA,IAAI,CAACA,KAAK,CAACd,MAAM,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,OAAOc,KAAK,CAACoB,KAAK,CAAC5D,WAAW,CAAC;EACjC;AACF","ignoreList":[]}
@@ -21,6 +21,7 @@ export declare class ComponentBase {
21
21
  }>['options'];
22
22
  isFormComponent: boolean;
23
23
  model: FormModel;
24
+ def: ComponentDef;
24
25
  /** joi schemas based on a component defined in the form JSON. This validates a user's answer and is generated from {@link ComponentDef} */
25
26
  formSchema: ComponentSchema;
26
27
  stateSchema: ComponentSchema;