@defra/forms-engine-plugin 5.0.0-alpha.3 → 5.0.0-alpha.31

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 (406) hide show
  1. package/.public/37c964ca545c240f010a.mjs +2 -0
  2. package/.public/37c964ca545c240f010a.mjs.LICENSE.txt +4 -0
  3. package/.public/assets-manifest.json +3 -0
  4. package/.public/javascripts/application.min.js +1 -1
  5. package/.public/javascripts/application.min.js.LICENSE.txt +7 -0
  6. package/.public/javascripts/application.min.js.map +1 -1
  7. package/.public/javascripts/shared.min.js +1 -1
  8. package/.public/javascripts/shared.min.js.LICENSE.txt +9 -0
  9. package/.public/javascripts/shared.min.js.map +1 -1
  10. package/.public/javascripts/vendor/@defra.min.js +1 -1
  11. package/.public/javascripts/vendor/@defra.min.js.map +1 -1
  12. package/.public/javascripts/vendor/maplibre-gl.min.js +1 -1
  13. package/.public/javascripts/vendor/maplibre-gl.min.js.LICENSE.txt +3 -3
  14. package/.public/javascripts/vendor/maplibre-gl.min.js.map +1 -1
  15. package/.public/stylesheets/application.min.css +1 -1
  16. package/.public/stylesheets/application.min.css.map +1 -1
  17. package/.server/client/javascripts/file-upload.js +6 -3
  18. package/.server/client/javascripts/file-upload.js.map +1 -1
  19. package/.server/client/javascripts/geospatial-map.d.ts +159 -5
  20. package/.server/client/javascripts/geospatial-map.js +161 -81
  21. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  22. package/.server/client/javascripts/geospatial-map.test.js +152 -0
  23. package/.server/client/javascripts/geospatial-map.test.js.map +1 -0
  24. package/.server/client/javascripts/govuk.js +2 -1
  25. package/.server/client/javascripts/govuk.js.map +1 -1
  26. package/.server/client/javascripts/location-map.d.ts +44 -0
  27. package/.server/client/javascripts/location-map.js +55 -6
  28. package/.server/client/javascripts/location-map.js.map +1 -1
  29. package/.server/client/javascripts/map-constants.d.ts +3 -0
  30. package/.server/client/javascripts/map-constants.js +4 -0
  31. package/.server/client/javascripts/map-constants.js.map +1 -0
  32. package/.server/client/javascripts/map.d.ts +17 -4
  33. package/.server/client/javascripts/map.js +59 -6
  34. package/.server/client/javascripts/map.js.map +1 -1
  35. package/.server/client/javascripts/maps.d.ts +5 -0
  36. package/.server/client/javascripts/maps.js +6 -0
  37. package/.server/client/javascripts/maps.js.map +1 -0
  38. package/.server/client/javascripts/shared.d.ts +1 -4
  39. package/.server/client/javascripts/shared.js +1 -4
  40. package/.server/client/javascripts/shared.js.map +1 -1
  41. package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
  42. package/.server/client/javascripts/sssi-dataset.js +37 -39
  43. package/.server/client/javascripts/sssi-dataset.js.map +1 -1
  44. package/.server/client/stylesheets/maps.scss +4 -0
  45. package/.server/client/stylesheets/shared.scss +1 -5
  46. package/.server/server/constants.d.ts +2 -0
  47. package/.server/server/constants.js +2 -0
  48. package/.server/server/constants.js.map +1 -1
  49. package/.server/server/forms/components.json +8 -0
  50. package/.server/server/forms/register-as-a-unicorn-breeder.yaml +4 -0
  51. package/.server/server/plugins/engine/__stubs__/definitions.d.ts +29 -0
  52. package/.server/server/plugins/engine/__stubs__/definitions.js +125 -0
  53. package/.server/server/plugins/engine/__stubs__/definitions.js.map +1 -0
  54. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +8 -3
  55. package/.server/server/plugins/engine/components/AutocompleteField.js +17 -0
  56. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  57. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +23 -2
  58. package/.server/server/plugins/engine/components/CheckboxesField.js +30 -5
  59. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  60. package/.server/server/plugins/engine/components/ComponentBase.d.ts +2 -1
  61. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  62. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  63. package/.server/server/plugins/engine/components/ComponentCollection.js +12 -7
  64. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  65. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  66. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  67. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  68. package/.server/server/plugins/engine/components/DeclarationField.d.ts +6 -3
  69. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  70. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  71. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  72. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +33 -2
  73. package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
  74. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  75. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  76. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  77. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  78. package/.server/server/plugins/engine/components/FileUploadField.d.ts +23 -2
  79. package/.server/server/plugins/engine/components/FileUploadField.js +35 -3
  80. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  81. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  82. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  83. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  84. package/.server/server/plugins/engine/components/GeospatialField.d.ts +23 -0
  85. package/.server/server/plugins/engine/components/GeospatialField.js +33 -9
  86. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  87. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  88. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  89. package/.server/server/plugins/engine/components/LatLongField.d.ts +32 -2
  90. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  91. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  92. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  93. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +3 -2
  94. package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
  95. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  96. package/.server/server/plugins/engine/components/LocationFieldBase.js +31 -7
  97. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  98. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +12 -3
  99. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +21 -13
  100. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  101. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  102. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  103. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  104. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  105. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  106. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  107. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  108. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  109. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  110. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  111. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  112. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  113. package/.server/server/plugins/engine/components/NumberField.js +22 -0
  114. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  115. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +103 -1
  116. package/.server/server/plugins/engine/components/OsGridRefField.js +13 -3
  117. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  118. package/.server/server/plugins/engine/components/PaymentField.d.ts +2 -0
  119. package/.server/server/plugins/engine/components/PaymentField.js +9 -5
  120. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  121. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  122. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  123. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  124. package/.server/server/plugins/engine/components/TrackingField.d.ts +21 -0
  125. package/.server/server/plugins/engine/components/TrackingField.js +46 -0
  126. package/.server/server/plugins/engine/components/TrackingField.js.map +1 -0
  127. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  128. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  129. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  130. package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -2
  131. package/.server/server/plugins/engine/components/YesNoField.js +22 -8
  132. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  133. package/.server/server/plugins/engine/components/helpers/components.d.ts +1 -1
  134. package/.server/server/plugins/engine/components/helpers/components.js +6 -3
  135. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  136. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +8 -1
  137. package/.server/server/plugins/engine/components/helpers/geospatial.js +58 -17
  138. package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
  139. package/.server/server/plugins/engine/components/helpers/index.d.ts +21 -1
  140. package/.server/server/plugins/engine/components/helpers/index.js +45 -1
  141. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  142. package/.server/server/plugins/engine/components/index.d.ts +1 -0
  143. package/.server/server/plugins/engine/components/index.js +1 -0
  144. package/.server/server/plugins/engine/components/index.js.map +1 -1
  145. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  146. package/.server/server/plugins/engine/components/types.js.map +1 -1
  147. package/.server/server/plugins/engine/errors.d.ts +49 -0
  148. package/.server/server/plugins/engine/errors.js +75 -0
  149. package/.server/server/plugins/engine/errors.js.map +1 -0
  150. package/.server/server/plugins/engine/form-availability.d.ts +3 -2
  151. package/.server/server/plugins/engine/form-availability.js +3 -2
  152. package/.server/server/plugins/engine/form-availability.js.map +1 -1
  153. package/.server/server/plugins/engine/form-context.js +2 -2
  154. package/.server/server/plugins/engine/form-context.js.map +1 -1
  155. package/.server/server/plugins/engine/helpers.d.ts +23 -2
  156. package/.server/server/plugins/engine/helpers.js +44 -5
  157. package/.server/server/plugins/engine/helpers.js.map +1 -1
  158. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +4 -1
  159. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +31 -7
  160. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  161. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  162. package/.server/server/plugins/engine/i18n/createFormTranslator.js +27 -5
  163. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  164. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  165. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  166. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  167. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  168. package/.server/server/plugins/engine/i18n/form.js +35 -0
  169. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  170. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  171. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  172. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  173. package/.server/server/plugins/engine/i18n/translations/cy.json +176 -7
  174. package/.server/server/plugins/engine/i18n/translations/en-GB.json +110 -6
  175. package/.server/server/plugins/engine/i18n/types.d.ts +2 -0
  176. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  177. package/.server/server/plugins/engine/index.d.ts +4 -0
  178. package/.server/server/plugins/engine/index.js +4 -0
  179. package/.server/server/plugins/engine/index.js.map +1 -1
  180. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  181. package/.server/server/plugins/engine/models/FormModel.js +35 -23
  182. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  183. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  184. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  185. package/.server/server/plugins/engine/models/types.d.ts +28 -1
  186. package/.server/server/plugins/engine/models/types.js.map +1 -1
  187. package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
  188. package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
  189. package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
  190. package/.server/server/plugins/engine/options.js +2 -1
  191. package/.server/server/plugins/engine/options.js.map +1 -1
  192. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +14 -6
  193. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  194. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  195. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  196. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  197. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  198. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  199. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
  200. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
  201. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  202. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  203. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +2 -2
  204. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  205. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  206. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  207. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  208. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  209. package/.server/server/plugins/engine/pageControllers/helpers/pages.js +2 -1
  210. package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
  211. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +35 -2
  212. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +100 -3
  213. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  214. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
  215. package/.server/server/plugins/engine/pageControllers/validationOptions.js +24 -3
  216. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  217. package/.server/server/plugins/engine/plugin.js +3 -0
  218. package/.server/server/plugins/engine/plugin.js.map +1 -1
  219. package/.server/server/plugins/engine/referenceNumbers.d.ts +1 -0
  220. package/.server/server/plugins/engine/referenceNumbers.js +1 -0
  221. package/.server/server/plugins/engine/referenceNumbers.js.map +1 -1
  222. package/.server/server/plugins/engine/routes/index.js +9 -4
  223. package/.server/server/plugins/engine/routes/index.js.map +1 -1
  224. package/.server/server/plugins/engine/types/enums.d.ts +3 -3
  225. package/.server/server/plugins/engine/types/enums.js +5 -4
  226. package/.server/server/plugins/engine/types/enums.js.map +1 -1
  227. package/.server/server/plugins/engine/types/schema.js +15 -4
  228. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  229. package/.server/server/plugins/engine/types.d.ts +24 -2
  230. package/.server/server/plugins/engine/types.js.map +1 -1
  231. package/.server/server/plugins/engine/unavailable-response.js +5 -2
  232. package/.server/server/plugins/engine/unavailable-response.js.map +1 -1
  233. package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
  234. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  235. package/.server/server/plugins/engine/views/components/geospatialfield.html +1 -0
  236. package/.server/server/plugins/engine/views/components/osgridreffield.html +4 -1
  237. package/.server/server/plugins/engine/views/components/trackingfield.html +3 -0
  238. package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  239. package/.server/server/plugins/engine/views/file-upload.html +1 -1
  240. package/.server/server/plugins/engine/views/summary.html +1 -0
  241. package/.server/server/plugins/engine/views/unavailable.html +14 -11
  242. package/.server/server/plugins/map/routes/index.d.ts +4 -0
  243. package/.server/server/plugins/map/routes/index.js +12 -4
  244. package/.server/server/plugins/map/routes/index.js.map +1 -1
  245. package/.server/server/plugins/map/routes/index.test.js +7 -0
  246. package/.server/server/plugins/map/routes/index.test.js.map +1 -0
  247. package/.server/server/plugins/map/routes/vts/README.md +38 -0
  248. package/.server/server/plugins/map/routes/vts/countries-5dp.geojson +4 -0
  249. package/.server/server/plugins/map/routes/vts/countries.geojson +10 -39283
  250. package/.server/server/plugins/map/types.d.ts +24 -2
  251. package/.server/server/plugins/map/types.js +9 -2
  252. package/.server/server/plugins/map/types.js.map +1 -1
  253. package/.server/server/plugins/nunjucks/enviroment.test.js +11 -4
  254. package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
  255. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  256. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  257. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  258. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  259. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  260. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  261. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  262. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  263. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  264. package/.server/server/plugins/payment/helper.d.ts +11 -1
  265. package/.server/server/plugins/payment/helper.js +18 -2
  266. package/.server/server/plugins/payment/helper.js.map +1 -1
  267. package/.server/server/plugins/payment/helper.test.js +2 -1
  268. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  269. package/.server/server/plugins/payment/service.d.ts +2 -1
  270. package/.server/server/plugins/payment/service.js +5 -2
  271. package/.server/server/plugins/payment/service.js.map +1 -1
  272. package/.server/server/plugins/payment/service.test.js +7 -3
  273. package/.server/server/plugins/payment/service.test.js.map +1 -1
  274. package/.server/server/plugins/payment/types.d.ts +4 -0
  275. package/.server/server/plugins/payment/types.js +1 -0
  276. package/.server/server/plugins/payment/types.js.map +1 -1
  277. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  278. package/.server/server/plugins/postcode-lookup/models/index.js +103 -36
  279. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  280. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  281. package/.server/server/plugins/postcode-lookup/routes/index.js +64 -18
  282. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  283. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  284. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  285. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  286. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  287. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  288. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  289. package/.server/server/utils/type-utils.d.ts +1 -2
  290. package/.server/server/utils/type-utils.js +0 -3
  291. package/.server/server/utils/type-utils.js.map +1 -1
  292. package/.server/server/utils/utils.d.ts +6 -0
  293. package/.server/server/utils/utils.js +18 -1
  294. package/.server/server/utils/utils.js.map +1 -1
  295. package/.server/server/utils/utils.test.js +21 -1
  296. package/.server/server/utils/utils.test.js.map +1 -1
  297. package/.server/typings/geodesy/index.d.js +2 -0
  298. package/.server/typings/geodesy/index.d.js.map +1 -0
  299. package/.server/typings/hapi/index.d.js.map +1 -1
  300. package/package.json +24 -9
  301. package/src/client/javascripts/file-upload.js +11 -3
  302. package/src/client/javascripts/geospatial-map.js +181 -86
  303. package/src/client/javascripts/govuk.js +2 -0
  304. package/src/client/javascripts/location-map.js +62 -6
  305. package/src/client/javascripts/map-constants.js +3 -0
  306. package/src/client/javascripts/map.js +66 -9
  307. package/src/client/javascripts/maps.js +5 -0
  308. package/src/client/javascripts/shared.js +1 -4
  309. package/src/client/javascripts/sssi-dataset.js +39 -41
  310. package/src/client/stylesheets/maps.scss +4 -0
  311. package/src/client/stylesheets/shared.scss +1 -5
  312. package/src/server/constants.js +2 -0
  313. package/src/server/forms/components.json +8 -0
  314. package/src/server/forms/register-as-a-unicorn-breeder.yaml +4 -0
  315. package/src/server/plugins/engine/__stubs__/definitions.ts +155 -0
  316. package/src/server/plugins/engine/components/AutocompleteField.ts +20 -0
  317. package/src/server/plugins/engine/components/CheckboxesField.ts +41 -8
  318. package/src/server/plugins/engine/components/ComponentBase.ts +6 -4
  319. package/src/server/plugins/engine/components/ComponentCollection.ts +17 -15
  320. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  321. package/src/server/plugins/engine/components/DeclarationField.ts +10 -10
  322. package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
  323. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  324. package/src/server/plugins/engine/components/FileUploadField.ts +46 -5
  325. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  326. package/src/server/plugins/engine/components/GeospatialField.ts +47 -9
  327. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  328. package/src/server/plugins/engine/components/ListFormComponent.ts +4 -4
  329. package/src/server/plugins/engine/components/LocationFieldBase.ts +41 -8
  330. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +28 -14
  331. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  332. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  333. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  334. package/src/server/plugins/engine/components/NumberField.ts +24 -0
  335. package/src/server/plugins/engine/components/OsGridRefField.ts +22 -3
  336. package/src/server/plugins/engine/components/PaymentField.ts +9 -4
  337. package/src/server/plugins/engine/components/TrackingField.ts +64 -0
  338. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  339. package/src/server/plugins/engine/components/YesNoField.ts +27 -9
  340. package/src/server/plugins/engine/components/helpers/components.ts +8 -3
  341. package/src/server/plugins/engine/components/helpers/geospatial.ts +87 -24
  342. package/src/server/plugins/engine/components/helpers/index.ts +64 -1
  343. package/src/server/plugins/engine/components/index.ts +1 -0
  344. package/src/server/plugins/engine/components/types.ts +1 -0
  345. package/src/server/plugins/engine/errors.ts +78 -0
  346. package/src/server/plugins/engine/form-availability.ts +8 -2
  347. package/src/server/plugins/engine/form-context.ts +4 -2
  348. package/src/server/plugins/engine/helpers.ts +52 -5
  349. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +16 -8
  350. package/src/server/plugins/engine/i18n/createFormTranslator.ts +43 -12
  351. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  352. package/src/server/plugins/engine/i18n/form.ts +54 -0
  353. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  354. package/src/server/plugins/engine/i18n/translations/cy.json +176 -7
  355. package/src/server/plugins/engine/i18n/translations/en-GB.json +110 -6
  356. package/src/server/plugins/engine/i18n/types.ts +2 -0
  357. package/src/server/plugins/engine/index.ts +7 -0
  358. package/src/server/plugins/engine/models/FormModel.ts +46 -23
  359. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  360. package/src/server/plugins/engine/models/types.ts +31 -0
  361. package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
  362. package/src/server/plugins/engine/options.js +2 -1
  363. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +18 -7
  364. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  365. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  366. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
  367. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +2 -2
  368. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  369. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  370. package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -1
  371. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +143 -4
  372. package/src/server/plugins/engine/pageControllers/validationOptions.ts +29 -4
  373. package/src/server/plugins/engine/plugin.ts +6 -0
  374. package/src/server/plugins/engine/referenceNumbers.ts +2 -0
  375. package/src/server/plugins/engine/routes/index.ts +9 -3
  376. package/src/server/plugins/engine/types/enums.ts +4 -3
  377. package/src/server/plugins/engine/types/schema.ts +22 -5
  378. package/src/server/plugins/engine/types.ts +28 -1
  379. package/src/server/plugins/engine/unavailable-response.ts +6 -2
  380. package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
  381. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  382. package/src/server/plugins/engine/views/components/geospatialfield.html +1 -0
  383. package/src/server/plugins/engine/views/components/osgridreffield.html +4 -1
  384. package/src/server/plugins/engine/views/components/trackingfield.html +3 -0
  385. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  386. package/src/server/plugins/engine/views/file-upload.html +1 -1
  387. package/src/server/plugins/engine/views/summary.html +1 -0
  388. package/src/server/plugins/engine/views/unavailable.html +14 -11
  389. package/src/server/plugins/map/routes/index.js +29 -4
  390. package/src/server/plugins/map/routes/vts/README.md +38 -0
  391. package/src/server/plugins/map/routes/vts/countries-5dp.geojson +4 -0
  392. package/src/server/plugins/map/routes/vts/countries.geojson +10 -39283
  393. package/src/server/plugins/map/types.js +9 -2
  394. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  395. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  396. package/src/server/plugins/payment/helper.js +22 -2
  397. package/src/server/plugins/payment/service.js +6 -2
  398. package/src/server/plugins/payment/types.js +1 -0
  399. package/src/server/plugins/postcode-lookup/models/index.js +91 -46
  400. package/src/server/plugins/postcode-lookup/routes/index.js +96 -24
  401. package/src/server/plugins/postcode-lookup/types.js +6 -1
  402. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  403. package/src/server/utils/type-utils.ts +1 -11
  404. package/src/server/utils/utils.js +19 -1
  405. package/src/typings/geodesy/index.d.ts +18 -0
  406. package/src/typings/hapi/index.d.ts +2 -0
@@ -43,6 +43,10 @@ export type CreatePaymentRequest = {
43
43
  * - URL to redirect the user to after payment
44
44
  */
45
45
  return_url: string;
46
+ /**
47
+ * - the desired language for translations
48
+ */
49
+ language: string;
46
50
  /**
47
51
  * - Whether to delay capturing the payment
48
52
  */
@@ -18,6 +18,7 @@
18
18
  * @property {string} reference - Unique reference for the payment
19
19
  * @property {string} description - Human-readable description of the payment
20
20
  * @property {string} return_url - URL to redirect the user to after payment
21
+ * @property {string} language - the desired language for translations
21
22
  * @property {boolean} [delayed_capture] - Whether to delay capturing the payment
22
23
  * @property {{ formId: string, slug: string }} [metadata] - Additional metadata for the payment
23
24
  * @property {string} [email] - Email to prepopulate on GOV.UK Pay (max 254 chars)
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/payment/types.js"],"sourcesContent":["/**\n * @typedef {object} PaymentResponseState\n * @property {'created' | 'started' | 'submitted' | 'capturable' | 'success' | 'failed' | 'cancelled' | 'error'} status - Current status of the payment\n * @property {boolean} finished - Whether the payment process has completed\n * @property {string} [message] - Human-readable message about the payment state\n * @property {string} [code] - Error or status code for the payment state\n */\n\n/**\n * @typedef {object} PaymentLink\n * @property {string} href - URL of the linked resource\n * @property {string} method - HTTP method to use for the link\n */\n\n/**\n * @typedef {object} CreatePaymentRequest\n * @property {number} amount - Payment amount in pence\n * @property {string} reference - Unique reference for the payment\n * @property {string} description - Human-readable description of the payment\n * @property {string} return_url - URL to redirect the user to after payment\n * @property {boolean} [delayed_capture] - Whether to delay capturing the payment\n * @property {{ formId: string, slug: string }} [metadata] - Additional metadata for the payment\n * @property {string} [email] - Email to prepopulate on GOV.UK Pay (max 254 chars)\n */\n\n/**\n * @typedef {object} CreatePaymentResponse\n * @property {string} payment_id - Unique identifier for the created payment\n * @property {PaymentResponseState} state - Current state of the payment\n * @property {{ next_url: PaymentLink }} _links - HATEOAS links for the payment\n */\n\n/**\n * Base response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint\n * @typedef {object} GetPaymentResponseBase\n * @property {PaymentResponseState} state - Current state of the payment\n * @property {{ self: PaymentLink, next_url?: PaymentLink }} _links - HATEOAS links for the payment\n * @property {string} [email] - The paying user's email address\n */\n\n/**\n * Response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint - not underscore in property name\n * @typedef {object} GetPaymentApiResponsePaymentProp\n * @property {string} payment_id - Unique identifier for the payment\n * @property {number} amount - amount of the payment\n */\n\n/**\n * Response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint\n * @typedef {GetPaymentResponseBase & GetPaymentApiResponsePaymentProp} GetPaymentApiResponse\n */\n\n/**\n * Response returned from getPaymentStatus - subtley different from GetPaymentApiResponse\n * @typedef {object} GetPaymentResponsePaymentProp\n * @property {string} paymentId - Unique identifier for the payment - note no underscore in property name\n * @property {number} amount - amount of the payment\n */\n\n/**\n * Response returned from getPaymentStatus - subtley different from GetPaymentApiResponse\n * @typedef {GetPaymentResponseBase & GetPaymentResponsePaymentProp} GetPaymentResponse\n */\n\n/**\n * Payment session data stored when dispatching to GOV.UK Pay\n * @typedef {object} PaymentSessionData\n * @property {string} uuid - unique identifier for this payment attempt\n * @property {string} formId - id of the form\n * @property {string} reference - form reference number\n * @property {number} amount - amount in pounds\n * @property {string} description - payment description\n * @property {string} paymentId - GOV.UK Pay payment ID\n * @property {string} componentName - name of the PaymentField component\n * @property {string} returnUrl - URL to redirect to after successful payment\n * @property {string} failureUrl - URL to redirect to after failed/cancelled payment\n * @property {boolean} isLivePayment - whether the payment is using live API key\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/payment/types.js"],"sourcesContent":["/**\n * @typedef {object} PaymentResponseState\n * @property {'created' | 'started' | 'submitted' | 'capturable' | 'success' | 'failed' | 'cancelled' | 'error'} status - Current status of the payment\n * @property {boolean} finished - Whether the payment process has completed\n * @property {string} [message] - Human-readable message about the payment state\n * @property {string} [code] - Error or status code for the payment state\n */\n\n/**\n * @typedef {object} PaymentLink\n * @property {string} href - URL of the linked resource\n * @property {string} method - HTTP method to use for the link\n */\n\n/**\n * @typedef {object} CreatePaymentRequest\n * @property {number} amount - Payment amount in pence\n * @property {string} reference - Unique reference for the payment\n * @property {string} description - Human-readable description of the payment\n * @property {string} return_url - URL to redirect the user to after payment\n * @property {string} language - the desired language for translations\n * @property {boolean} [delayed_capture] - Whether to delay capturing the payment\n * @property {{ formId: string, slug: string }} [metadata] - Additional metadata for the payment\n * @property {string} [email] - Email to prepopulate on GOV.UK Pay (max 254 chars)\n */\n\n/**\n * @typedef {object} CreatePaymentResponse\n * @property {string} payment_id - Unique identifier for the created payment\n * @property {PaymentResponseState} state - Current state of the payment\n * @property {{ next_url: PaymentLink }} _links - HATEOAS links for the payment\n */\n\n/**\n * Base response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint\n * @typedef {object} GetPaymentResponseBase\n * @property {PaymentResponseState} state - Current state of the payment\n * @property {{ self: PaymentLink, next_url?: PaymentLink }} _links - HATEOAS links for the payment\n * @property {string} [email] - The paying user's email address\n */\n\n/**\n * Response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint - not underscore in property name\n * @typedef {object} GetPaymentApiResponsePaymentProp\n * @property {string} payment_id - Unique identifier for the payment\n * @property {number} amount - amount of the payment\n */\n\n/**\n * Response from GOV.UK Pay GET /v1/payments/{PAYMENT_ID} endpoint\n * @typedef {GetPaymentResponseBase & GetPaymentApiResponsePaymentProp} GetPaymentApiResponse\n */\n\n/**\n * Response returned from getPaymentStatus - subtley different from GetPaymentApiResponse\n * @typedef {object} GetPaymentResponsePaymentProp\n * @property {string} paymentId - Unique identifier for the payment - note no underscore in property name\n * @property {number} amount - amount of the payment\n */\n\n/**\n * Response returned from getPaymentStatus - subtley different from GetPaymentApiResponse\n * @typedef {GetPaymentResponseBase & GetPaymentResponsePaymentProp} GetPaymentResponse\n */\n\n/**\n * Payment session data stored when dispatching to GOV.UK Pay\n * @typedef {object} PaymentSessionData\n * @property {string} uuid - unique identifier for this payment attempt\n * @property {string} formId - id of the form\n * @property {string} reference - form reference number\n * @property {number} amount - amount in pounds\n * @property {string} description - payment description\n * @property {string} paymentId - GOV.UK Pay payment ID\n * @property {string} componentName - name of the PaymentField component\n * @property {string} returnUrl - URL to redirect to after successful payment\n * @property {string} failureUrl - URL to redirect to after failed/cancelled payment\n * @property {boolean} isLivePayment - whether the payment is using live API key\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -19,17 +19,86 @@ export function createManualPayloadSchema(language?: string): Joi.ObjectSchema<P
19
19
  /**
20
20
  * The postcode lookup details form view model
21
21
  * @param {PostcodeLookupSessionData} data
22
+ * @param {Translator} translator
22
23
  * @param {PostcodeLookupDetailsData} [payload]
23
24
  * @param {Error} [err]
24
25
  */
25
- export function detailsViewModel(data: PostcodeLookupSessionData, payload?: PostcodeLookupDetailsData, err?: Error): {
26
+ export function detailsViewModel(data: PostcodeLookupSessionData, translator: Translator, payload?: PostcodeLookupDetailsData, err?: Error): {
27
+ languages: {
28
+ name: string;
29
+ code: string;
30
+ }[];
26
31
  step: string;
27
32
  showTitle: boolean;
28
33
  name: string;
29
34
  serviceUrl: string;
30
35
  pageTitle: string;
36
+ hint: "" | {
37
+ text: string;
38
+ } | undefined;
39
+ backLink: {
40
+ href: string;
41
+ text: string;
42
+ };
43
+ errors: {
44
+ text: string;
45
+ href: string;
46
+ }[] | undefined;
47
+ fields: {
48
+ postcodeQuery: {
49
+ id: string;
50
+ name: string;
51
+ label: {
52
+ text: string;
53
+ };
54
+ hint: {
55
+ text: string;
56
+ };
57
+ value: string | undefined;
58
+ errorMessage: {
59
+ text: string;
60
+ } | undefined;
61
+ };
62
+ buildingNameQuery: {
63
+ id: string;
64
+ name: string;
65
+ label: {
66
+ text: string;
67
+ };
68
+ hint: {
69
+ text: string;
70
+ };
71
+ value: string | undefined;
72
+ errorMessage: {
73
+ text: string;
74
+ } | undefined;
75
+ };
76
+ };
77
+ buttons: {
78
+ continueButton: {
79
+ text: string;
80
+ classes: string;
81
+ };
82
+ manualLink: {
83
+ text: string;
84
+ href: string;
85
+ };
86
+ };
87
+ t: (key: string, opts?: Record<string, unknown>) => string;
88
+ language: string;
89
+ } | {
90
+ languages?: undefined;
91
+ step: string;
92
+ showTitle: boolean;
93
+ name: string;
94
+ serviceUrl: string;
95
+ pageTitle: string;
96
+ hint: "" | {
97
+ text: string;
98
+ } | undefined;
31
99
  backLink: {
32
100
  href: string;
101
+ text: string;
33
102
  };
34
103
  errors: {
35
104
  text: string;
@@ -75,17 +144,93 @@ export function detailsViewModel(data: PostcodeLookupSessionData, payload?: Post
75
144
  href: string;
76
145
  };
77
146
  };
147
+ t: (key: string, opts?: Record<string, unknown>) => string;
148
+ language: string;
78
149
  };
79
150
  /**
80
151
  * The postcode lookup select form view model
81
152
  * @param {{ session: PostcodeLookupSessionData, apiKey: string }} data
153
+ * @param {Translator} translator
82
154
  * @param {PostcodeLookupSelectPayload} [payload]
83
155
  * @param {Error} [err]
84
156
  */
85
157
  export function selectViewModel(data: {
86
158
  session: PostcodeLookupSessionData;
87
159
  apiKey: string;
88
- }, payload?: PostcodeLookupSelectPayload, err?: Error): Promise<{
160
+ }, translator: Translator, payload?: PostcodeLookupSelectPayload, err?: Error): Promise<{
161
+ languages: {
162
+ name: string;
163
+ code: string;
164
+ }[];
165
+ step: string;
166
+ showTitle: boolean;
167
+ name: string;
168
+ serviceUrl: string;
169
+ pageTitle: string;
170
+ backLink: {
171
+ href: string;
172
+ text: string;
173
+ };
174
+ errors: {
175
+ text: string;
176
+ href: string;
177
+ }[] | undefined;
178
+ searchAgainLink: {
179
+ text: string;
180
+ href: string;
181
+ };
182
+ fields: {
183
+ postcodeQuery: {
184
+ id: string;
185
+ name: string;
186
+ type: string;
187
+ value: string;
188
+ };
189
+ buildingNameQuery: {
190
+ id: string;
191
+ name: string;
192
+ type: string;
193
+ value: string;
194
+ };
195
+ uprn: {
196
+ id: string;
197
+ name: string;
198
+ label: {
199
+ text: string;
200
+ } | undefined;
201
+ value: string | undefined;
202
+ errorMessage: {
203
+ text: string;
204
+ } | undefined;
205
+ items: {
206
+ text: string;
207
+ value: string;
208
+ }[] | undefined;
209
+ type: string | undefined;
210
+ };
211
+ };
212
+ details: PostcodeLookupDetailsData;
213
+ addressCount: number;
214
+ singleAddress: Address | undefined;
215
+ hasAddresses: boolean;
216
+ hasMultipleAddresses: boolean;
217
+ addressesFoundText: string | undefined;
218
+ noAddressFoundText: string | undefined;
219
+ buttons: {
220
+ continueButton: {
221
+ href: string | undefined;
222
+ text: string;
223
+ classes: string;
224
+ };
225
+ manualLink: {
226
+ text: string;
227
+ href: string;
228
+ };
229
+ };
230
+ t: (key: string, opts?: Record<string, unknown>) => string;
231
+ language: string;
232
+ } | {
233
+ languages?: undefined;
89
234
  step: string;
90
235
  showTitle: boolean;
91
236
  name: string;
@@ -93,6 +238,7 @@ export function selectViewModel(data: {
93
238
  pageTitle: string;
94
239
  backLink: {
95
240
  href: string;
241
+ text: string;
96
242
  };
97
243
  errors: {
98
244
  text: string;
@@ -150,14 +296,110 @@ export function selectViewModel(data: {
150
296
  href: string;
151
297
  };
152
298
  };
299
+ t: (key: string, opts?: Record<string, unknown>) => string;
300
+ language: string;
153
301
  }>;
154
302
  /**
155
303
  * The postcode lookup manual form view model
156
304
  * @param {PostcodeLookupSessionData} data
305
+ * @param {Translator} translator
157
306
  * @param {PostcodeLookupManualPayload} [payload]
158
307
  * @param {Error} [err]
159
308
  */
160
- export function manualViewModel(data: PostcodeLookupSessionData, payload?: PostcodeLookupManualPayload, err?: Error): {
309
+ export function manualViewModel(data: PostcodeLookupSessionData, translator: Translator, payload?: PostcodeLookupManualPayload, err?: Error): {
310
+ languages: {
311
+ name: string;
312
+ code: string;
313
+ }[];
314
+ step: string;
315
+ showTitle: boolean;
316
+ name: string;
317
+ serviceUrl: string;
318
+ pageTitle: string;
319
+ backLink: {
320
+ href: string;
321
+ text: string;
322
+ };
323
+ errors: {
324
+ text: string;
325
+ href: string;
326
+ }[] | undefined;
327
+ hint: "" | {
328
+ text: string;
329
+ } | undefined;
330
+ fields: {
331
+ addressLine1: {
332
+ id: string;
333
+ name: string;
334
+ label: {
335
+ text: string;
336
+ };
337
+ value: string | undefined;
338
+ errorMessage: {
339
+ text: string;
340
+ } | undefined;
341
+ };
342
+ addressLine2: {
343
+ id: string;
344
+ name: string;
345
+ label: {
346
+ text: string;
347
+ };
348
+ value: string | undefined;
349
+ errorMessage: {
350
+ text: string;
351
+ } | undefined;
352
+ };
353
+ town: {
354
+ id: string;
355
+ name: string;
356
+ label: {
357
+ text: string;
358
+ };
359
+ classes: string;
360
+ value: string | undefined;
361
+ errorMessage: {
362
+ text: string;
363
+ } | undefined;
364
+ };
365
+ county: {
366
+ id: string;
367
+ name: string;
368
+ label: {
369
+ text: string;
370
+ };
371
+ value: string | undefined;
372
+ errorMessage: {
373
+ text: string;
374
+ } | undefined;
375
+ };
376
+ postcode: {
377
+ id: string;
378
+ name: string;
379
+ label: {
380
+ text: string;
381
+ };
382
+ classes: string;
383
+ value: string | undefined;
384
+ errorMessage: {
385
+ text: string;
386
+ } | undefined;
387
+ };
388
+ };
389
+ buttons: {
390
+ continueButton: {
391
+ text: string;
392
+ classes: string;
393
+ };
394
+ detailsLink: {
395
+ text: string;
396
+ href: string;
397
+ };
398
+ };
399
+ t: (key: string, opts?: Record<string, unknown>) => string;
400
+ language: string;
401
+ } | {
402
+ languages?: undefined;
161
403
  step: string;
162
404
  showTitle: boolean;
163
405
  name: string;
@@ -165,6 +407,7 @@ export function manualViewModel(data: PostcodeLookupSessionData, payload?: Postc
165
407
  pageTitle: string;
166
408
  backLink: {
167
409
  href: string;
410
+ text: string;
168
411
  };
169
412
  errors: {
170
413
  text: string;
@@ -242,6 +485,8 @@ export function manualViewModel(data: PostcodeLookupSessionData, payload?: Postc
242
485
  href: string;
243
486
  };
244
487
  };
488
+ t: (key: string, opts?: Record<string, unknown>) => string;
489
+ language: string;
245
490
  };
246
491
  export namespace steps {
247
492
  let details: string;
@@ -256,5 +501,6 @@ import Joi from 'joi';
256
501
  import type { PostcodeLookupSelectPayload } from '../../../../server/plugins/postcode-lookup/types.js';
257
502
  import type { PostcodeLookupManualPayload } from '../../../../server/plugins/postcode-lookup/types.js';
258
503
  import type { PostcodeLookupSessionData } from '../../../../server/plugins/postcode-lookup/types.js';
504
+ import type { Translator } from '../../../../server/plugins/engine/i18n/types.js';
259
505
  import type { PostcodeLookupDetailsData } from '../../../../server/plugins/postcode-lookup/types.js';
260
506
  import type { Address } from '../../../../server/plugins/postcode-lookup/types.js';
@@ -13,6 +13,7 @@ const townFieldName = 'town';
13
13
  const countyFieldName = 'county';
14
14
  const postcodeFieldName = 'postcode';
15
15
  const GOVUK_MARGIN_RIGHT_1 = 'govuk-!-margin-right-1';
16
+ const COMMON_BACK = 'common.back';
16
17
  export const steps = {
17
18
  // Step 1: Postcode/building name input
18
19
  details: 'details',
@@ -268,6 +269,19 @@ function getManualFields(payload, line1Error, line2Error, townError, countyError
268
269
  };
269
270
  }
270
271
  export const stepSchema = Joi.string().valid(...Object.keys(steps)).required();
272
+
273
+ /**
274
+ * Joi object schema factories typed with their payload, as JavaScript files
275
+ * cannot pass type arguments to `Joi.object<T>()`
276
+ */
277
+ /** @type {() => ObjectSchema<PostcodeLookupDetailsPayload>} */
278
+ const detailsObjectSchema = Joi.object.bind(Joi);
279
+
280
+ /** @type {() => ObjectSchema<PostcodeLookupSelectPayload>} */
281
+ const selectObjectSchema = Joi.object.bind(Joi);
282
+
283
+ /** @type {() => ObjectSchema<PostcodeLookupManualPayload>} */
284
+ const manualObjectSchema = Joi.object.bind(Joi);
271
285
  const sharedPayloadSchemaKeys = {
272
286
  crumb: crumbSchema,
273
287
  step: stepSchema
@@ -279,7 +293,7 @@ const sharedPayloadSchemaKeys = {
279
293
  * @returns {ObjectSchema<PostcodeLookupDetailsPayload>}
280
294
  */
281
295
  export function createDetailsPayloadSchema(language = 'en-GB') {
282
- return Joi.object().keys({
296
+ return detailsObjectSchema().keys({
283
297
  ...sharedPayloadSchemaKeys,
284
298
  [postcodeQueryFieldName]: Joi.string().pattern(/^[a-zA-Z]{1,2}\d[a-zA-Z\d]?\s?\d[a-zA-Z]{2}$/).trim().required().messages({
285
299
  'string.pattern.base': i18nT('postcodeLookup.validation.invalidPostcode', language),
@@ -295,7 +309,7 @@ export function createDetailsPayloadSchema(language = 'en-GB') {
295
309
  * @returns {ObjectSchema<PostcodeLookupSelectPayload>}
296
310
  */
297
311
  export function createSelectPayloadSchema(language = 'en-GB') {
298
- return Joi.object().keys({
312
+ return selectObjectSchema().keys({
299
313
  ...sharedPayloadSchemaKeys,
300
314
  [uprnFieldName]: Joi.string().required().messages({
301
315
  '*': i18nT('postcodeLookup.validation.selectAddress', language)
@@ -309,7 +323,7 @@ export function createSelectPayloadSchema(language = 'en-GB') {
309
323
  * @returns {ObjectSchema<PostcodeLookupManualPayload>}
310
324
  */
311
325
  export function createManualPayloadSchema(language = 'en-GB') {
312
- return Joi.object().keys({
326
+ return manualObjectSchema().keys({
313
327
  ...sharedPayloadSchemaKeys,
314
328
  [line1FieldName]: Joi.string().trim().required().messages({
315
329
  '*': i18nT('postcodeLookup.validation.requiredAddressLine1', language)
@@ -338,56 +352,77 @@ function getHref(step) {
338
352
  /**
339
353
  * The postcode lookup details form view model
340
354
  * @param {PostcodeLookupSessionData} data
355
+ * @param {Translator} translator
341
356
  * @param {PostcodeLookupDetailsData} [payload]
342
357
  * @param {Error} [err]
343
358
  */
344
- export function detailsViewModel(data, payload, err) {
359
+ export function detailsViewModel(data, translator, payload, err) {
345
360
  const {
346
- componentTitle: pageTitle,
347
- formName,
361
+ componentId,
362
+ componentHint,
348
363
  sourceUrl,
349
- language = 'en-GB'
364
+ languages
350
365
  } = data.initial;
366
+ const {
367
+ t,
368
+ tComponent,
369
+ tForm
370
+ } = translator;
371
+ const component = /** @type {ComponentDef} */{
372
+ id: componentId
373
+ };
351
374
  const backLink = {
352
- href: sourceUrl
375
+ href: sourceUrl,
376
+ text: t(COMMON_BACK)
353
377
  };
354
378
  const {
355
379
  errors,
356
380
  postcodeQueryError,
357
381
  buildingNameQueryError
358
382
  } = buildErrors(err);
359
- const fields = getDetailsFields(payload ?? data.details, postcodeQueryError, buildingNameQueryError, language);
383
+ const fields = getDetailsFields(payload ?? data.details, postcodeQueryError, buildingNameQueryError, translator.language);
384
+ const hint = componentHint && {
385
+ text: tComponent(component, 'hint')
386
+ };
360
387
  const continueButton = {
361
- text: i18nT('postcodeLookup.findAddress', language),
388
+ text: t('postcodeLookup.findAddress'),
362
389
  classes: GOVUK_MARGIN_RIGHT_1
363
390
  };
364
391
  const manualLink = {
365
- text: i18nT('postcodeLookup.enterManually', language),
392
+ text: t('postcodeLookup.enterManually'),
366
393
  href: getHref(steps.manual)
367
394
  };
395
+ const selector = languages?.length ? {
396
+ languages
397
+ } : {};
368
398
  return {
369
399
  step: steps.details,
370
400
  showTitle: true,
371
- name: formName,
401
+ name: tForm('title'),
372
402
  serviceUrl: sourceUrl,
373
- pageTitle,
403
+ pageTitle: tComponent(component, 'title'),
404
+ hint,
374
405
  backLink,
375
406
  errors,
376
407
  fields,
377
408
  buttons: {
378
409
  continueButton,
379
410
  manualLink
380
- }
411
+ },
412
+ t,
413
+ language: translator.language,
414
+ ...selector
381
415
  };
382
416
  }
383
417
 
384
418
  /**
385
419
  * The postcode lookup select form view model
386
420
  * @param {{ session: PostcodeLookupSessionData, apiKey: string }} data
421
+ * @param {Translator} translator
387
422
  * @param {PostcodeLookupSelectPayload} [payload]
388
423
  * @param {Error} [err]
389
424
  */
390
- export async function selectViewModel(data, payload, err) {
425
+ export async function selectViewModel(data, translator, payload, err) {
391
426
  const {
392
427
  session,
393
428
  apiKey
@@ -400,7 +435,12 @@ export async function selectViewModel(data, payload, err) {
400
435
  postcodeQuery,
401
436
  buildingNameQuery
402
437
  } = details;
403
- const language = initial.language ?? 'en-GB';
438
+ const {
439
+ language,
440
+ t,
441
+ tComponent,
442
+ tForm
443
+ } = translator;
404
444
  const {
405
445
  hasAddresses,
406
446
  hasMultipleAddresses,
@@ -408,39 +448,45 @@ export async function selectViewModel(data, payload, err) {
408
448
  addresses,
409
449
  addressCount
410
450
  } = await getAddresses(postcodeQuery, buildingNameQuery, apiKey);
411
- const title = hasAddresses ? initial.componentTitle : i18nT('postcodeLookup.noAddressFoundTitle', language);
451
+ const title = hasAddresses ? tComponent(/** @type {ComponentDef} */{
452
+ id: initial.componentId
453
+ }, 'title') : t('postcodeLookup.noAddressFoundTitle');
412
454
  const formPath = initial.sourceUrl;
413
455
  const href = getHref();
414
456
  const backLink = {
415
- href
457
+ href,
458
+ text: t(COMMON_BACK)
416
459
  };
417
460
  const {
418
461
  errors,
419
462
  uprnError
420
463
  } = buildErrors(err);
421
464
  const fields = getSelectFields(details, hasMultipleAddresses, singleAddress, payload, uprnError, addresses, language);
422
- const searchAgainText = i18nT('postcodeLookup.searchAgain', language);
465
+ const searchAgainText = t('postcodeLookup.searchAgain');
423
466
  const searchAgainLink = {
424
467
  text: searchAgainText,
425
468
  href
426
469
  };
427
470
  const continueButton = {
428
471
  href: hasAddresses ? undefined : href,
429
- text: hasAddresses ? i18nT('postcodeLookup.useThisAddress', language) : searchAgainText,
472
+ text: hasAddresses ? t('postcodeLookup.useThisAddress') : searchAgainText,
430
473
  classes: GOVUK_MARGIN_RIGHT_1
431
474
  };
432
475
  const manualLink = {
433
- text: i18nT('postcodeLookup.enterManually', language),
476
+ text: t('postcodeLookup.enterManually'),
434
477
  href: `${href}?step=${steps.manual}`
435
478
  };
436
- const addressesFoundText = hasAddresses ? i18nT('postcodeLookup.addressFound', language, {
479
+ const addressesFoundText = hasAddresses ? t('postcodeLookup.addressFound', {
437
480
  count: addressCount
438
481
  }) : undefined;
439
- const noAddressFoundText = !hasAddresses ? i18nT('postcodeLookup.noAddressFoundBody', language) : undefined;
482
+ const noAddressFoundText = !hasAddresses ? t('postcodeLookup.noAddressFoundBody') : undefined;
483
+ const selector = initial.languages?.length ? {
484
+ languages: initial.languages
485
+ } : {};
440
486
  return {
441
487
  step: steps.select,
442
488
  showTitle: true,
443
- name: title,
489
+ name: tForm('title'),
444
490
  serviceUrl: formPath,
445
491
  pageTitle: title,
446
492
  backLink,
@@ -457,27 +503,40 @@ export async function selectViewModel(data, payload, err) {
457
503
  buttons: {
458
504
  continueButton,
459
505
  manualLink
460
- }
506
+ },
507
+ t,
508
+ language,
509
+ ...selector
461
510
  };
462
511
  }
463
512
 
464
513
  /**
465
514
  * The postcode lookup manual form view model
466
515
  * @param {PostcodeLookupSessionData} data
516
+ * @param {Translator} translator
467
517
  * @param {PostcodeLookupManualPayload} [payload]
468
518
  * @param {Error} [err]
469
519
  */
470
- export function manualViewModel(data, payload, err) {
520
+ export function manualViewModel(data, translator, payload, err) {
471
521
  const {
472
- componentTitle,
522
+ componentId,
473
523
  sourceUrl,
474
524
  componentHint,
475
- language = 'en-GB'
525
+ languages
476
526
  } = data.initial;
477
527
  const formPath = sourceUrl;
478
528
  const href = getHref();
529
+ const {
530
+ t,
531
+ tComponent,
532
+ tForm
533
+ } = translator;
534
+ const component = /** @type {ComponentDef} */{
535
+ id: componentId
536
+ };
479
537
  const backLink = {
480
- href
538
+ href,
539
+ text: t(COMMON_BACK)
481
540
  };
482
541
  const {
483
542
  errors,
@@ -488,23 +547,26 @@ export function manualViewModel(data, payload, err) {
488
547
  postcodeError
489
548
  } = buildErrors(err);
490
549
  const hint = componentHint && {
491
- text: componentHint
550
+ text: tComponent(component, 'hint')
492
551
  };
493
- const fields = getManualFields(payload, line1Error, line2Error, townError, countyError, postcodeError, language);
552
+ const fields = getManualFields(payload, line1Error, line2Error, townError, countyError, postcodeError, translator.language);
494
553
  const continueButton = {
495
- text: i18nT('postcodeLookup.useThisAddress', language),
554
+ text: t('postcodeLookup.useThisAddress'),
496
555
  classes: GOVUK_MARGIN_RIGHT_1
497
556
  };
498
557
  const detailsLink = {
499
- text: i18nT('postcodeLookup.findAnAddressInstead', language),
558
+ text: t('postcodeLookup.findAnAddressInstead'),
500
559
  href
501
560
  };
561
+ const selector = languages?.length ? {
562
+ languages
563
+ } : {};
502
564
  return {
503
565
  step: steps.manual,
504
566
  showTitle: true,
505
- name: componentTitle,
567
+ name: tForm('title'),
506
568
  serviceUrl: formPath,
507
- pageTitle: componentTitle,
569
+ pageTitle: tComponent(component, 'title'),
508
570
  backLink,
509
571
  errors,
510
572
  hint,
@@ -512,7 +574,10 @@ export function manualViewModel(data, payload, err) {
512
574
  buttons: {
513
575
  continueButton,
514
576
  detailsLink
515
- }
577
+ },
578
+ t,
579
+ language: translator.language,
580
+ ...selector
516
581
  };
517
582
  }
518
583
 
@@ -520,6 +585,8 @@ export function manualViewModel(data, payload, err) {
520
585
 
521
586
  /**
522
587
  * @import { ObjectSchema, ValidationErrorItem } from 'joi'
588
+ * @import { ComponentDef } from '@defra/forms-model'
523
589
  * @import { Address, PostcodeLookupDetailsData, PostcodeLookupDetailsPayload, PostcodeLookupManualPayload, PostcodeLookupSelectPayload, PostcodeLookupSessionData } from '../../../../server/plugins/postcode-lookup/types.js'
590
+ * @import { Translator } from '../../../../server/plugins/engine/i18n/types.js'
524
591
  */
525
592
  //# sourceMappingURL=index.js.map