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

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 (347) hide show
  1. package/.public/assets-manifest.json +3 -5
  2. package/.public/javascripts/im-core.min.js +2 -0
  3. package/.public/javascripts/im-core.min.js.map +1 -0
  4. package/.public/javascripts/shared.min.js +1 -1
  5. package/.public/javascripts/shared.min.js.map +1 -1
  6. package/.public/javascripts/vendor/@defra.min.js +1 -1
  7. package/.public/javascripts/vendor/@defra.min.js.map +1 -1
  8. package/.public/stylesheets/application.min.css +1 -1
  9. package/.public/stylesheets/application.min.css.map +1 -1
  10. package/.server/client/javascripts/geospatial-map.js +8 -6
  11. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  12. package/.server/client/javascripts/location-map.js +8 -1
  13. package/.server/client/javascripts/location-map.js.map +1 -1
  14. package/.server/client/javascripts/map.d.ts +6 -0
  15. package/.server/client/javascripts/map.js +10 -0
  16. package/.server/client/javascripts/map.js.map +1 -1
  17. package/.server/client/javascripts/sssi-dataset.d.ts +34 -0
  18. package/.server/client/javascripts/sssi-dataset.js +101 -0
  19. package/.server/client/javascripts/sssi-dataset.js.map +1 -0
  20. package/.server/client/stylesheets/shared.scss +0 -2
  21. package/.server/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
  22. package/.server/server/forms/simple-form.yaml +106 -3
  23. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +11 -11
  24. package/.server/server/plugins/engine/components/AutocompleteField.js +2 -2
  25. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  26. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +3 -2
  27. package/.server/server/plugins/engine/components/CheckboxesField.js +4 -9
  28. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  29. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -7
  30. package/.server/server/plugins/engine/components/ComponentCollection.js +106 -51
  31. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  32. package/.server/server/plugins/engine/components/DatePartsField.d.ts +8 -6
  33. package/.server/server/plugins/engine/components/DatePartsField.js +27 -9
  34. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  35. package/.server/server/plugins/engine/components/DeclarationField.d.ts +13 -11
  36. package/.server/server/plugins/engine/components/DeclarationField.js +31 -9
  37. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  38. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +8 -5
  39. package/.server/server/plugins/engine/components/EastingNorthingField.js +42 -22
  40. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  41. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +11 -14
  42. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -2
  43. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  44. package/.server/server/plugins/engine/components/FileUploadField.d.ts +14 -12
  45. package/.server/server/plugins/engine/components/FileUploadField.js +22 -12
  46. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  47. package/.server/server/plugins/engine/components/FormComponent.d.ts +21 -12
  48. package/.server/server/plugins/engine/components/FormComponent.js +33 -14
  49. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  50. package/.server/server/plugins/engine/components/GeospatialField.d.ts +15 -12
  51. package/.server/server/plugins/engine/components/GeospatialField.js +21 -13
  52. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  53. package/.server/server/plugins/engine/components/LatLongField.d.ts +8 -5
  54. package/.server/server/plugins/engine/components/LatLongField.js +32 -20
  55. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  56. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +7 -6
  57. package/.server/server/plugins/engine/components/ListFormComponent.js +19 -7
  58. package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
  59. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +17 -16
  60. package/.server/server/plugins/engine/components/LocationFieldBase.js +2 -2
  61. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  62. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +8 -3
  63. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +14 -3
  64. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  65. package/.server/server/plugins/engine/components/Markdown.d.ts +8 -7
  66. package/.server/server/plugins/engine/components/Markdown.js +5 -2
  67. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  68. package/.server/server/plugins/engine/components/MonthYearField.d.ts +9 -7
  69. package/.server/server/plugins/engine/components/MonthYearField.js +26 -8
  70. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  71. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +10 -9
  72. package/.server/server/plugins/engine/components/MultilineTextField.js +2 -2
  73. package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
  74. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  75. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +14 -6
  76. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  77. package/.server/server/plugins/engine/components/NumberField.d.ts +10 -9
  78. package/.server/server/plugins/engine/components/NumberField.js +2 -2
  79. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  80. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
  81. package/.server/server/plugins/engine/components/OsGridRefField.js +14 -6
  82. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  83. package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -10
  84. package/.server/server/plugins/engine/components/PaymentField.js +21 -8
  85. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  86. package/.server/server/plugins/engine/components/SelectField.d.ts +11 -11
  87. package/.server/server/plugins/engine/components/SelectField.js +2 -2
  88. package/.server/server/plugins/engine/components/SelectField.js.map +1 -1
  89. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +4 -4
  90. package/.server/server/plugins/engine/components/SelectionControlField.js +2 -2
  91. package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
  92. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +10 -9
  93. package/.server/server/plugins/engine/components/TelephoneNumberField.js +2 -2
  94. package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
  95. package/.server/server/plugins/engine/components/UkAddressField.d.ts +12 -10
  96. package/.server/server/plugins/engine/components/UkAddressField.js +29 -17
  97. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  98. package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -0
  99. package/.server/server/plugins/engine/components/YesNoField.js +9 -0
  100. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  101. package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -2
  102. package/.server/server/plugins/engine/components/helpers/components.js +11 -8
  103. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  104. package/.server/server/plugins/engine/components/types.d.ts +8 -1
  105. package/.server/server/plugins/engine/components/types.js.map +1 -1
  106. package/.server/server/plugins/engine/configureEnginePlugin.js +8 -1
  107. package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
  108. package/.server/server/plugins/engine/form-context.d.ts +1 -0
  109. package/.server/server/plugins/engine/form-context.js +4 -2
  110. package/.server/server/plugins/engine/form-context.js.map +1 -1
  111. package/.server/server/plugins/engine/helpers.d.ts +1 -1
  112. package/.server/server/plugins/engine/helpers.js +8 -13
  113. package/.server/server/plugins/engine/helpers.js.map +1 -1
  114. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +39 -0
  115. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +50 -0
  116. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -0
  117. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +5 -0
  118. package/.server/server/plugins/engine/i18n/createFormTranslator.js +18 -0
  119. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -0
  120. package/.server/server/plugins/engine/i18n/createTranslator.d.ts +9 -0
  121. package/.server/server/plugins/engine/i18n/createTranslator.js +51 -0
  122. package/.server/server/plugins/engine/i18n/createTranslator.js.map +1 -0
  123. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +5 -0
  124. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +57 -0
  125. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -0
  126. package/.server/server/plugins/engine/i18n/index.d.ts +18 -0
  127. package/.server/server/plugins/engine/i18n/index.js +71 -0
  128. package/.server/server/plugins/engine/i18n/index.js.map +1 -0
  129. package/.server/server/plugins/engine/i18n/translations/cy.json +271 -0
  130. package/.server/server/plugins/engine/i18n/translations/en-GB.json +271 -0
  131. package/.server/server/plugins/engine/i18n/types.d.ts +41 -0
  132. package/.server/server/plugins/engine/i18n/types.js +2 -0
  133. package/.server/server/plugins/engine/i18n/types.js.map +1 -0
  134. package/.server/server/plugins/engine/index.js +3 -2
  135. package/.server/server/plugins/engine/index.js.map +1 -1
  136. package/.server/server/plugins/engine/models/FormModel.d.ts +9 -1
  137. package/.server/server/plugins/engine/models/FormModel.js +44 -18
  138. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  139. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +5 -2
  140. package/.server/server/plugins/engine/models/SummaryViewModel.js +44 -18
  141. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  142. package/.server/server/plugins/engine/options.js +2 -1
  143. package/.server/server/plugins/engine/options.js.map +1 -1
  144. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +4 -0
  145. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  146. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  147. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  148. package/.server/server/plugins/engine/outputFormatters/machine/v1.js +7 -6
  149. package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
  150. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +2 -1
  151. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +6 -3
  152. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  153. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +3 -1
  154. package/.server/server/plugins/engine/pageControllers/PageController.js +11 -1
  155. package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
  156. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +4 -2
  157. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +52 -21
  158. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  159. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +3 -2
  160. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +63 -26
  161. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  162. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +3 -1
  163. package/.server/server/plugins/engine/pageControllers/StartPageController.js +2 -2
  164. package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
  165. package/.server/server/plugins/engine/pageControllers/StatusPageController.js +12 -2
  166. package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
  167. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +4 -3
  168. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +44 -28
  169. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  170. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.d.ts +2 -0
  171. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js +24 -0
  172. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js.map +1 -0
  173. package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
  174. package/.server/server/plugins/engine/pageControllers/errors.js +3 -2
  175. package/.server/server/plugins/engine/pageControllers/errors.js.map +1 -1
  176. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +3 -2
  177. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +4 -4
  178. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  179. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +7 -3
  180. package/.server/server/plugins/engine/pageControllers/validationOptions.js +34 -33
  181. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  182. package/.server/server/plugins/engine/plugin.js +2 -0
  183. package/.server/server/plugins/engine/plugin.js.map +1 -1
  184. package/.server/server/plugins/engine/routes/index.js +4 -1
  185. package/.server/server/plugins/engine/routes/index.js.map +1 -1
  186. package/.server/server/plugins/engine/routes/questions.js +5 -2
  187. package/.server/server/plugins/engine/routes/questions.js.map +1 -1
  188. package/.server/server/plugins/engine/types/index.d.ts +1 -0
  189. package/.server/server/plugins/engine/types/index.js.map +1 -1
  190. package/.server/server/plugins/engine/types/schema.js +1 -0
  191. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  192. package/.server/server/plugins/engine/types.d.ts +12 -1
  193. package/.server/server/plugins/engine/types.js.map +1 -1
  194. package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
  195. package/.server/server/plugins/engine/views/components/fileuploadfield.html +3 -3
  196. package/.server/server/plugins/engine/views/components/geospatialfield.html +4 -1
  197. package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
  198. package/.server/server/plugins/engine/views/components/osgridreffield.html +1 -1
  199. package/.server/server/plugins/engine/views/components/paymentfield.html +8 -8
  200. package/.server/server/plugins/engine/views/components/ukaddressfield.html +4 -4
  201. package/.server/server/plugins/engine/views/confirmation.html +4 -4
  202. package/.server/server/plugins/engine/views/exit.html +4 -4
  203. package/.server/server/plugins/engine/views/file-upload.html +3 -3
  204. package/.server/server/plugins/engine/views/index.html +3 -3
  205. package/.server/server/plugins/engine/views/item-delete.html +1 -1
  206. package/.server/server/plugins/engine/views/partials/form.html +3 -3
  207. package/.server/server/plugins/engine/views/partials/preview-banner.html +4 -4
  208. package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
  209. package/.server/server/plugins/engine/views/repeat-list-summary.html +4 -4
  210. package/.server/server/plugins/engine/views/summary.html +14 -7
  211. package/.server/server/plugins/map/routes/index.js +1 -1
  212. package/.server/server/plugins/map/routes/index.js.map +1 -1
  213. package/.server/server/plugins/map/types.d.ts +1 -25
  214. package/.server/server/plugins/map/types.js +1 -16
  215. package/.server/server/plugins/map/types.js.map +1 -1
  216. package/.server/server/plugins/nunjucks/enviroment.test.js +10 -0
  217. package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
  218. package/.server/server/plugins/nunjucks/environment.d.ts +8 -0
  219. package/.server/server/plugins/nunjucks/environment.js +13 -0
  220. package/.server/server/plugins/nunjucks/environment.js.map +1 -1
  221. package/.server/server/plugins/nunjucks/filters/answer.js +9 -1
  222. package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
  223. package/.server/server/plugins/nunjucks/filters/answer.test.js +13 -2
  224. package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
  225. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  226. package/.server/server/plugins/postcode-lookup/models/index.d.ts +24 -19
  227. package/.server/server/plugins/postcode-lookup/models/index.js +83 -76
  228. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  229. package/.server/server/plugins/postcode-lookup/routes/index.js +7 -13
  230. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  231. package/.server/server/plugins/postcode-lookup/types.d.ts +1 -0
  232. package/.server/server/plugins/postcode-lookup/types.js +1 -0
  233. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  234. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  235. package/.server/server/types.d.ts +2 -1
  236. package/.server/server/types.js.map +1 -1
  237. package/.server/server/utils/utils.d.ts +5 -0
  238. package/.server/server/utils/utils.js +16 -0
  239. package/.server/server/utils/utils.js.map +1 -1
  240. package/.server/typings/hapi/index.d.js.map +1 -1
  241. package/package.json +5 -4
  242. package/src/client/javascripts/geospatial-map.js +10 -6
  243. package/src/client/javascripts/location-map.js +11 -0
  244. package/src/client/javascripts/map.js +10 -0
  245. package/src/client/javascripts/sssi-dataset.js +106 -0
  246. package/src/client/stylesheets/shared.scss +0 -2
  247. package/src/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
  248. package/src/server/forms/simple-form.yaml +106 -3
  249. package/src/server/plugins/engine/components/AutocompleteField.ts +3 -6
  250. package/src/server/plugins/engine/components/CheckboxesField.ts +12 -11
  251. package/src/server/plugins/engine/components/ComponentCollection.ts +143 -61
  252. package/src/server/plugins/engine/components/DatePartsField.ts +33 -11
  253. package/src/server/plugins/engine/components/DeclarationField.ts +37 -14
  254. package/src/server/plugins/engine/components/EastingNorthingField.ts +83 -22
  255. package/src/server/plugins/engine/components/EmailAddressField.ts +4 -7
  256. package/src/server/plugins/engine/components/FileUploadField.ts +28 -22
  257. package/src/server/plugins/engine/components/FormComponent.ts +49 -12
  258. package/src/server/plugins/engine/components/GeospatialField.ts +38 -21
  259. package/src/server/plugins/engine/components/LatLongField.ts +52 -21
  260. package/src/server/plugins/engine/components/ListFormComponent.ts +26 -10
  261. package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -8
  262. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +24 -4
  263. package/src/server/plugins/engine/components/Markdown.ts +7 -3
  264. package/src/server/plugins/engine/components/MonthYearField.ts +32 -10
  265. package/src/server/plugins/engine/components/MultilineTextField.ts +5 -8
  266. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +25 -11
  267. package/src/server/plugins/engine/components/NumberField.ts +3 -4
  268. package/src/server/plugins/engine/components/OsGridRefField.ts +25 -9
  269. package/src/server/plugins/engine/components/PaymentField.ts +22 -12
  270. package/src/server/plugins/engine/components/SelectField.ts +3 -6
  271. package/src/server/plugins/engine/components/SelectionControlField.ts +7 -8
  272. package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -7
  273. package/src/server/plugins/engine/components/UkAddressField.ts +33 -18
  274. package/src/server/plugins/engine/components/YesNoField.ts +10 -0
  275. package/src/server/plugins/engine/components/helpers/components.ts +13 -6
  276. package/src/server/plugins/engine/components/types.ts +9 -0
  277. package/src/server/plugins/engine/configureEnginePlugin.ts +12 -1
  278. package/src/server/plugins/engine/form-context.ts +8 -2
  279. package/src/server/plugins/engine/helpers.ts +10 -18
  280. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +69 -0
  281. package/src/server/plugins/engine/i18n/createFormTranslator.ts +33 -0
  282. package/src/server/plugins/engine/i18n/createTranslator.ts +61 -0
  283. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +61 -0
  284. package/src/server/plugins/engine/i18n/index.ts +80 -0
  285. package/src/server/plugins/engine/i18n/translations/cy.json +271 -0
  286. package/src/server/plugins/engine/i18n/translations/en-GB.json +271 -0
  287. package/src/server/plugins/engine/i18n/types.ts +62 -0
  288. package/src/server/plugins/engine/index.ts +4 -2
  289. package/src/server/plugins/engine/models/FormModel.ts +59 -23
  290. package/src/server/plugins/engine/models/SummaryViewModel.ts +68 -25
  291. package/src/server/plugins/engine/options.js +2 -1
  292. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +5 -0
  293. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -3
  294. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +9 -8
  295. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +7 -3
  296. package/src/server/plugins/engine/pageControllers/PageController.ts +12 -1
  297. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +53 -21
  298. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +66 -29
  299. package/src/server/plugins/engine/pageControllers/StartPageController.ts +7 -2
  300. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +10 -2
  301. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +48 -22
  302. package/src/server/plugins/engine/pageControllers/__stubs__/translator.ts +28 -0
  303. package/src/server/plugins/engine/pageControllers/errors.ts +4 -2
  304. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +11 -4
  305. package/src/server/plugins/engine/pageControllers/validationOptions.ts +43 -53
  306. package/src/server/plugins/engine/plugin.ts +2 -0
  307. package/src/server/plugins/engine/routes/index.ts +9 -1
  308. package/src/server/plugins/engine/routes/questions.ts +5 -1
  309. package/src/server/plugins/engine/types/index.ts +5 -0
  310. package/src/server/plugins/engine/types/schema.ts +1 -0
  311. package/src/server/plugins/engine/types.ts +10 -0
  312. package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
  313. package/src/server/plugins/engine/views/components/fileuploadfield.html +3 -3
  314. package/src/server/plugins/engine/views/components/geospatialfield.html +4 -1
  315. package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
  316. package/src/server/plugins/engine/views/components/osgridreffield.html +1 -1
  317. package/src/server/plugins/engine/views/components/paymentfield.html +8 -8
  318. package/src/server/plugins/engine/views/components/ukaddressfield.html +4 -4
  319. package/src/server/plugins/engine/views/confirmation.html +4 -4
  320. package/src/server/plugins/engine/views/exit.html +4 -4
  321. package/src/server/plugins/engine/views/file-upload.html +3 -3
  322. package/src/server/plugins/engine/views/index.html +3 -3
  323. package/src/server/plugins/engine/views/item-delete.html +1 -1
  324. package/src/server/plugins/engine/views/partials/form.html +3 -3
  325. package/src/server/plugins/engine/views/partials/preview-banner.html +4 -4
  326. package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
  327. package/src/server/plugins/engine/views/repeat-list-summary.html +4 -4
  328. package/src/server/plugins/engine/views/summary.html +14 -7
  329. package/src/server/plugins/map/routes/index.js +1 -1
  330. package/src/server/plugins/map/types.js +1 -16
  331. package/src/server/plugins/nunjucks/environment.js +14 -0
  332. package/src/server/plugins/nunjucks/filters/answer.js +12 -1
  333. package/src/server/plugins/postcode-lookup/models/index.js +144 -87
  334. package/src/server/plugins/postcode-lookup/routes/index.js +13 -16
  335. package/src/server/plugins/postcode-lookup/types.js +1 -0
  336. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  337. package/src/server/types.ts +2 -0
  338. package/src/server/utils/utils.js +14 -0
  339. package/src/typings/hapi/index.d.ts +1 -0
  340. package/.public/javascripts/im-search-plugin.min.js +0 -2
  341. package/.public/javascripts/im-search-plugin.min.js.map +0 -1
  342. package/.public/javascripts/vendor/preact.min.js +0 -2
  343. package/.public/javascripts/vendor/preact.min.js.map +0 -1
  344. package/.server/server/plugins/engine/components/constants.d.ts +0 -1
  345. package/.server/server/plugins/engine/components/constants.js +0 -2
  346. package/.server/server/plugins/engine/components/constants.js.map +0 -1
  347. package/src/server/plugins/engine/components/constants.ts +0 -1
@@ -0,0 +1,80 @@
1
+ import { getErrorMessage } from '@defra/forms-model'
2
+ import i18next, { createInstance } from 'i18next'
3
+
4
+ import { logger } from '../../../common/helpers/logging/logger.js'
5
+ import cy from './translations/cy.json' with { type: 'json' }
6
+ import enGB from './translations/en-GB.json' with { type: 'json' }
7
+ import { type FormDefinitionTranslations } from './types.js'
8
+
9
+ type BaseTranslations = FormDefinitionTranslations[string]
10
+
11
+ i18next
12
+ .init({
13
+ resources: {
14
+ 'en-GB': { translation: enGB },
15
+ cy: { translation: cy }
16
+ },
17
+ fallbackLng: 'en-GB',
18
+ interpolation: {
19
+ prefix: '[[',
20
+ suffix: ']]',
21
+ escapeValue: false
22
+ }
23
+ })
24
+ .catch((err: unknown) => {
25
+ logger.error(`Fatal init for translator i18next: ${getErrorMessage(err)}`)
26
+ })
27
+
28
+ /**
29
+ * Generic translation utility function
30
+ * @param key - key for lookup
31
+ * @param language - language requested
32
+ * @param options
33
+ * @returns {string}
34
+ */
35
+ export function t(
36
+ key: string,
37
+ language: string,
38
+ options?: Record<string, unknown>
39
+ ): string {
40
+ return i18next.t(key, { lng: language, ...options })
41
+ }
42
+
43
+ /**
44
+ * Creates an instance of i18next with base (boilerplate) translation files loaded (en-GB.json and cy.json),
45
+ * and appropriate namespaces for loading of form-specific translations later
46
+ * @param formEnGb
47
+ * @returns
48
+ */
49
+ export function createFormI18nInstance(formEnGb: BaseTranslations) {
50
+ const instance = createInstance()
51
+
52
+ instance
53
+ .init({
54
+ resources: {
55
+ 'en-GB': {
56
+ plugin: enGB,
57
+ form: formEnGb
58
+ },
59
+ cy: {
60
+ plugin: cy
61
+ }
62
+ },
63
+ fallbackLng: 'en-GB',
64
+ ns: ['plugin', 'form'],
65
+ defaultNS: 'plugin',
66
+ interpolation: {
67
+ prefix: '[[',
68
+ suffix: ']]',
69
+ escapeValue: false
70
+ }
71
+ })
72
+ .catch((err: unknown) => {
73
+ // init with inline resources completes synchronously — unreachable
74
+ logger.error(
75
+ `Fatal init for translator instance: ${getErrorMessage(err)}`
76
+ )
77
+ })
78
+
79
+ return instance
80
+ }
@@ -0,0 +1,271 @@
1
+ {
2
+ "validation": {
3
+ "required": "Nodwch {{lowerFirst(#label)}}",
4
+ "selectRequired": "Dewiswch {{lowerFirst(#label)}}",
5
+ "pattern": "Nodwch {{lowerFirst(#label)}} dilys",
6
+ "format": "Nodwch {{lowerFirst(#label)}} yn y fformat cywir",
7
+ "objectRequired": "Nodwch {{#label}}",
8
+ "objectMissing": "Rhaid i {{#title}} gynnwys {{lowerFirst(#label)}}",
9
+ "max": "Rhaid i {{#label}} fod yn {{#limit}} o nodau neu lai",
10
+ "min": "Rhaid i {{#label}} fod yn {{#limit}} o nodau neu fwy",
11
+ "minMax": "Rhaid i {{#label}} fod rhwng {{#min}} a {{#max}} o nodau",
12
+ "number": "Rhaid i {{#label}} fod yn rhif",
13
+ "numberPrecision": "Rhaid i {{#label}} beidio â chael mwy na {{#limit}} lle degol",
14
+ "numberInteger": "Rhaid i {{#label}} fod yn rhif cyfan",
15
+ "numberMin": "Rhaid i {{#label}} fod yn {{#limit}} neu uwch",
16
+ "numberMax": "Rhaid i {{#label}} fod yn {{#limit}} neu is",
17
+ "maxWords": "Rhaid i {{#label}} fod yn {{#limit}} o eiriau neu lai"
18
+ },
19
+
20
+ "errors": {
21
+ "title": "Mae problem",
22
+ "optionsMismatch": "Mae'r opsiynau'n wahanol oherwydd i chi newid ateb blaenorol"
23
+ },
24
+
25
+ "common": {
26
+ "optional": "(dewisol)",
27
+ "warningIconFallback": "Rhybudd",
28
+ "back": "Yn ôl",
29
+ "continue": "Parhau",
30
+ "saveAndExit": "Cadw a gadael",
31
+ "draft": "ddrafft",
32
+ "live": "fyw"
33
+ },
34
+
35
+ "pages": {
36
+ "question": {
37
+ "paymentCancelledBannerTitle": "Pwysig",
38
+ "paymentCancelledTitle": "Mae eich taliad wedi'i ganslo",
39
+ "paymentCancelledBody": "Cafodd eich manylion talu eu dileu oherwydd bod y ffurflen yn anweithredol am 5 diwrnod.",
40
+ "paymentCancelledAction": "Ychwanegwch eich manylion talu eto.",
41
+ "backToAddAnother": "Ewch yn ôl i ychwanegu un arall",
42
+ "backToCheckAnswers": "Ewch yn ôl i wirio'ch atebion",
43
+ "startNow": "Dechrau nawr"
44
+ },
45
+
46
+ "summary": {
47
+ "title": "Gwiriwch eich atebion cyn anfon eich ffurflen",
48
+ "change": "Newid",
49
+ "notProvided": "Heb ei ddarparu",
50
+ "declaration": "Datganiad",
51
+ "acceptAndSubmit": "Derbyn a chyflwyno",
52
+ "payAndSubmit": "Talu a chyflwyno",
53
+ "submit": "Cyflwyno",
54
+ "saveAndExit": "Cadw a gadael",
55
+ "paymentSuccessBannerTitle": "Llwyddiant",
56
+ "paymentSuccessTitle": "Mae gennym eich manylion talu",
57
+ "paymentSuccessBody": "Mae eich taliad ar ddal. Byddwn yn codi tâl arnoch pan fyddwch yn cyflwyno'r ffurflen.",
58
+ "paymentDetailsTitle": "Manylion talu",
59
+ "paymentFor": "Taliad am",
60
+ "totalAmount": "Cyfanswm",
61
+ "reference": "Cyfeirnod",
62
+ "dateOfPayment": "Dyddiad talu",
63
+ "submissionFailed": "Roedd problem ac ni chyflwynwyd eich ffurflen. Ceisiwch gyflwyno'r ffurflen eto",
64
+ "submissionFailedContactSuffix": " neu gallwch [[contactUsLink]] a dyfynnu'ch cyfeirnod i drefnu ad-daliad",
65
+ "contactUsLinkText": "cysylltu â ni (yn agor mewn tab newydd)",
66
+ "confirmationEmail": "E-bost cadarnhad (dewisol)",
67
+ "confirmationEmailHint": "Rhowch eich cyfeiriad e-bost i dderbyn e-bost cadarnhau a chopi o'ch atebion"
68
+ },
69
+
70
+ "repeater": {
71
+ "removeAnswer": "Ydych chi'n siŵr eich bod am dynnu'r ateb hwn?",
72
+ "remove": "Tynnu",
73
+ "cancel": "Canslo",
74
+ "lastItemCannotBeRemoved": "Ni ellir tynnu eitem olaf y rhestr",
75
+ "itemToRemoveNotFound": "Ni chanfuwyd eitem y rhestr i'w thynnu",
76
+ "continue": "Parhau",
77
+ "addAnother": "Ychwanegu un arall",
78
+ "saveAndExit": "Cadw a gadael",
79
+ "change": "Newid",
80
+ "notProvided": "Heb ei ddarparu",
81
+ "visuallyHiddenItem": "eitem [[index]]",
82
+ "pageTitle_one": "Rydych wedi ychwanegu [[count]] ateb",
83
+ "pageTitle_other": "Rydych wedi ychwanegu [[count]] ateb",
84
+ "tooMany_one": "Dim ond hyd at [[count]] ateb y gallwch ei ychwanegu",
85
+ "tooMany_other": "Dim ond hyd at [[count]] ateb y gallwch eu hychwanegu",
86
+ "tooFew_one": "Rhaid i chi ychwanegu o leiaf [[count]] ateb",
87
+ "tooFew_other": "Rhaid i chi ychwanegu o leiaf [[count]] ateb"
88
+ },
89
+
90
+ "fileUpload": {
91
+ "upload": "Uwchlwytho ffeil",
92
+ "maxFilesReached": "Rydych wedi cyrraedd nifer uchaf y ffeiliau. Tynnwch ffeil i uwchlwytho rhagor."
93
+ },
94
+
95
+ "exit": {
96
+ "defaultTitle": "Mae eich cynnydd wedi'i gadw",
97
+ "whatHappensNext": "Beth sy'n digwydd nesaf",
98
+ "body": "Mae cynnydd eich ffurflen wedi'i gadw. Gallwch ddychwelyd i gwblhau eich cais ar unrhyw adeg gan ddefnyddio'r ddolen a ddarperir.",
99
+ "returnToApplication": "Dychwelyd i'r cais"
100
+ },
101
+
102
+ "confirmation": {
103
+ "formSubmitted": "Ffurflen wedi'i chyflwyno",
104
+ "whatHappensNext": "Beth sy'n digwydd nesaf",
105
+ "referenceNumber": "Eich cyfeirnod",
106
+ "feedbackLink": "Beth yw eich barn am y gwasanaeth hwn? (yn cymryd 30 eiliad)"
107
+ },
108
+
109
+ "preview": {
110
+ "warnMissingNotificationEmail": {
111
+ "body": "Os hoffech dderbyn e-bost prawf, [[link]] yr hoffech i gyflwyniadau ffurflen fynd iddo.",
112
+ "linkText": "nodwch y cyfeiriad e-bost (yn agor mewn tab newydd)"
113
+ },
114
+ "bannerForce": "Rhagolwg o ffurflen [[previewMode]] yw hon. Peidiwch â rhoi gwybodaeth bersonol.",
115
+ "bannerText": "Dyma ragolwg o dudalen ffurflen [[previewMode]] rydych chi'n ei golygu.",
116
+ "previousPages": "Mae'n dibynnu ar atebion o dudalennau cynharach yn y ffurflen. Yn y fersiwn fyw, bydd angen i ddefnyddwyr gwblhau'r cwestiynau hynny yn gyntaf."
117
+ }
118
+ },
119
+
120
+ "postcodeLookup": {
121
+ "postcodeLabel": "Cod post",
122
+ "postcodeHint": "Er enghraifft, AA3 1AB",
123
+ "buildingNameLabel": "Enw neu rif yr adeilad (dewisol)",
124
+ "buildingNameHint": "Er enghraifft, 15 neu Bryn Melyn",
125
+ "selectAddress": "Dewiswch gyfeiriad",
126
+ "addressLine1Label": "Llinell cyfeiriad 1",
127
+ "addressLine2Label": "Llinell cyfeiriad 2 (dewisol)",
128
+ "townLabel": "Tref neu ddinas",
129
+ "countyLabel": "Sir (dewisol)",
130
+ "findAddress": "Dod o hyd i gyfeiriad",
131
+ "enterManually": "nodwch gyfeiriad â llaw",
132
+ "searchAgain": "Chwilio eto",
133
+ "useThisAddress": "Defnyddio'r cyfeiriad hwn",
134
+ "findAnAddressInstead": "dod o hyd i gyfeiriad yn lle hynny",
135
+ "noAddressFoundTitle": "Ni chanfuwyd cyfeiriad",
136
+ "noAddressFoundBody": "Ni allem ddod o hyd i gyfeiriad cyfatebol",
137
+ "addressFound_one": "Canfuwyd [[count]] cyfeiriad ar gyfer",
138
+ "addressFound_other": "Canfuwyd [[count]] cyfeiriad ar gyfer",
139
+ "validation": {
140
+ "invalidPostcode": "Nodwch god post dilys neu nodwch gyfeiriad â llaw",
141
+ "requiredPostcode": "Nodwch god post",
142
+ "selectAddress": "Dewiswch gyfeiriad",
143
+ "requiredAddressLine1": "Nodwch linell cyfeiriad 1",
144
+ "requiredTown": "Nodwch dref neu ddinas",
145
+ "invalidManualPostcode": "Nodwch god post dilys",
146
+ "requiredManualPostcode": "Nodwch god post"
147
+ }
148
+ },
149
+
150
+ "components": {
151
+ "dateField": {
152
+ "day": "Diwrnod",
153
+ "month": "Mis",
154
+ "year": "Blwyddyn",
155
+ "validation": {
156
+ "dateFormat": "Rhaid i {{#title}} fod yn ddyddiad go iawn",
157
+ "dateMin": "Rhaid i {{#title}} fod yr un fath â neu ar ôl {{#limit}}",
158
+ "dateMax": "Rhaid i {{#title}} fod yr un fath â neu cyn {{#limit}}"
159
+ }
160
+ },
161
+
162
+ "monthYearField": {
163
+ "month": "Mis",
164
+ "year": "Blwyddyn"
165
+ },
166
+
167
+ "addressField": {
168
+ "uprn": "UPRN",
169
+ "line1": "Llinell cyfeiriad 1",
170
+ "line2": "Llinell cyfeiriad 2",
171
+ "town": "Tref neu ddinas",
172
+ "county": "Sir",
173
+ "postcode": "Cod post",
174
+ "enterAddress": "Nodwch [[shortDescription]]",
175
+ "findAddress": "Dod o hyd i gyfeiriad",
176
+ "selectedAddress": "Cyfeiriad a ddewiswyd:",
177
+ "useDifferentAddress": "Defnyddio cyfeiriad gwahanol",
178
+ "enterManually": "nodwch gyfeiriad â llaw"
179
+ },
180
+
181
+ "latLongField": {
182
+ "latitude": "Lledred",
183
+ "longitude": "Hydred",
184
+ "latitudeRequired": "Nodwch ledred",
185
+ "longitudeRequired": "Nodwch hydred",
186
+ "precision": "Rhaid i {{#label}} beidio â chael mwy na 7 lle degol",
187
+ "notANumber": "Rhaid i {{#label}} fod yn rif dilys",
188
+ "latitudeBase": "Nodwch ledred dilys ar gyfer [[fieldLabel]] fel 51.519450",
189
+ "longitudeBase": "Nodwch hydred dilys ar gyfer [[fieldLabel]] fel -0.127758",
190
+ "latitudeRange": "Rhaid i ledred [[fieldLabel]] fod rhwng [[min]] a [[max]]",
191
+ "longitudeRange": "Rhaid i hydred [[fieldLabel]] fod rhwng [[min]] a [[max]]"
192
+ },
193
+
194
+ "eastingNorthingField": {
195
+ "easting": "Dwyreiniannau",
196
+ "northing": "Gogleddiannau",
197
+ "eastingRequired": "Nodwch ddwyreiniannau",
198
+ "northingRequired": "Nodwch ogleddiannau",
199
+ "eastingDigits": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng 1 a 6 digid",
200
+ "northingDigits": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng 1 a 7 digid",
201
+ "eastingRange": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng [[min]] a [[max]]",
202
+ "northingRange": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng [[min]] a [[max]]"
203
+ },
204
+
205
+ "nationalGridField": {
206
+ "required": "Nodwch {{lowerFirst(#title)}}",
207
+ "pattern": "Nodwch rif maes Grid Cenedlaethol dilys ar gyfer {{lowerFirst(#title)}} fel NG 1234 5678",
208
+ "howToFind": "Sut i ddod o hyd i fanylion lleoliad"
209
+ },
210
+
211
+ "osGridRefField": {
212
+ "required": "Nodwch {{lowerFirst(#title)}}",
213
+ "pattern": "Nodwch gyfeirnod grid AO dilys ar gyfer {{lowerFirst(#title)}} fel TQ123456",
214
+ "howToFind": "Sut i ddod o hyd i fanylion lleoliad"
215
+ },
216
+
217
+ "locationFieldBase": {
218
+ "howToFind": "Sut i ddod o hyd i fanylion lleoliad"
219
+ },
220
+
221
+ "yesNoField": {
222
+ "yes": "Ie",
223
+ "no": "Na",
224
+ "validation": {
225
+ "selectYesNoRequired": "{{#label}} - dewiswch ie neu na"
226
+ }
227
+ },
228
+
229
+ "declarationField": {
230
+ "defaultLabel": "Rwy'n deall ac yn cytuno",
231
+ "defaultConfirmationLabel": "Rwy'n cadarnhau fy mod yn deall ac yn derbyn y datganiad hwn",
232
+ "notProvided": "Heb ei ddarparu",
233
+ "validation": {
234
+ "declarationRequired": "Rhaid i chi gadarnhau eich bod yn deall ac yn cytuno â'r {{lowerFirst(#label)}} i barhau"
235
+ }
236
+ },
237
+
238
+ "geospatialField": {
239
+ "added_one": "Ychwanegwyd [[count]] lleoliad",
240
+ "added_other": "Ychwanegwyd [[count]] lleoliad",
241
+ "validation": {
242
+ "descriptionRequired": "Rhowch ddisgrifiad ar gyfer lleoliad [[count]]",
243
+ "wrongCountry": "Rhaid i leoliad [[count]] fod y tu mewn i [[country]]"
244
+ }
245
+ },
246
+
247
+ "paymentField": {
248
+ "detailsRequired": "Angen manylion talu",
249
+ "pendingTransaction": "Mae'n bosibl y gwelwch drafodiad ar y gweill yn eich cyfrif banc ond dim ond pan fyddwch yn cyflwyno'r ffurflen y codir tâl arnoch.",
250
+ "addPaymentDetails": "Ychwanegu manylion talu",
251
+ "cannotTakePayment": "Mae problem ac ni allwn dderbyn taliad. Cysylltwch â ni (manylion yn nhroedyn y ffurflen hon) neu cadwch eich cynnydd a dychwelyd at y ffurflen yn ddiweddarach.",
252
+ "testApiKey": "Ychwanegwch allwedd API prawf ddilys cyn i chi allu rhagolwg y daith talu.",
253
+ "completePayment": "Cwblhewch y taliad i barhau",
254
+ "paymentExpired": "Mae awdurdodiad eich taliad wedi dod i ben. Ychwanegwch eich manylion talu eto.",
255
+ "submissionFailed": "Roedd problem ac ni chyflwynwyd eich ffurflen. Ceisiwch gyflwyno'r ffurflen eto.",
256
+ "canSubmitAfterPayment": "Gallwch gyflwyno'r ffurflen ar ôl i chi ychwanegu eich manylion talu.",
257
+ "preAuthorisedTitle": "Rydych eisoes wedi awdurdodi taliad ar gyfer y ffurflen hon",
258
+ "preAuthorisedBody": "Parhewch i gyflwyno'r ffurflen. Ni chodir tâl arnoch ddwywaith.",
259
+ "totalAmountLabel": "Cyfanswm:",
260
+ "paymentAmountMismatch": "Mae swm y taliad a rhaganrhuddhawyd rywsut yn wahanol i'r hyn a ofynnwyd amdano. Ceisiwch ychwanegu manylion talu eto."
261
+ },
262
+
263
+ "fileUploadField": {
264
+ "uploaded": "Wedi'i uwchlwytho",
265
+ "uploadFailed": "Roedd problem gyda'ch ffeiliau a uwchlwythwyd. Uwchlwythwch nhw eto cyn cyflwyno'r ffurflen.",
266
+ "uploadedFilesHeading": "Ffeiliau a uwchlwythwyd",
267
+ "filesCount_one": "Uwchlwythwyd [[count]] ffeil",
268
+ "filesCount_other": "Uwchlwythwyd [[count]] ffeil"
269
+ }
270
+ }
271
+ }
@@ -0,0 +1,271 @@
1
+ {
2
+ "validation": {
3
+ "required": "Enter {{lowerFirst(#label)}}",
4
+ "selectRequired": "Select {{lowerFirst(#label)}}",
5
+ "pattern": "Enter a valid {{lowerFirst(#label)}}",
6
+ "format": "Enter {{lowerFirst(#label)}} in the correct format",
7
+ "objectRequired": "Enter {{#label}}",
8
+ "objectMissing": "{{#title}} must include a {{lowerFirst(#label)}}",
9
+ "max": "{{#label}} must be {{#limit}} characters or less",
10
+ "min": "{{#label}} must be {{#limit}} characters or more",
11
+ "minMax": "{{#label}} must be between {{#min}} and {{#max}} characters",
12
+ "number": "{{#label}} must be a number",
13
+ "numberPrecision": "{{#label}} must have {{#limit}} or fewer decimal places",
14
+ "numberInteger": "{{#label}} must be a whole number",
15
+ "numberMin": "{{#label}} must be {{#limit}} or higher",
16
+ "numberMax": "{{#label}} must be {{#limit}} or lower",
17
+ "maxWords": "{{#label}} must be {{#limit}} words or fewer"
18
+ },
19
+
20
+ "errors": {
21
+ "title": "There is a problem",
22
+ "optionsMismatch": "Options are different because you changed a previous answer"
23
+ },
24
+
25
+ "common": {
26
+ "optional": "(optional)",
27
+ "warningIconFallback": "Warning",
28
+ "back": "Back",
29
+ "continue": "Continue",
30
+ "saveAndExit": "Save and exit",
31
+ "draft": "draft",
32
+ "live": "live"
33
+ },
34
+
35
+ "pages": {
36
+ "question": {
37
+ "paymentCancelledBannerTitle": "Important",
38
+ "paymentCancelledTitle": "Your payment has been cancelled",
39
+ "paymentCancelledBody": "Your payment details were deleted because the form was inactive for 5 days.",
40
+ "paymentCancelledAction": "Add your payment details again.",
41
+ "backToAddAnother": "Go back to add another",
42
+ "backToCheckAnswers": "Go back to check answers",
43
+ "startNow": "Start now"
44
+ },
45
+
46
+ "summary": {
47
+ "title": "Check your answers before sending your form",
48
+ "change": "Change",
49
+ "notProvided": "Not provided",
50
+ "declaration": "Declaration",
51
+ "acceptAndSubmit": "Accept and submit",
52
+ "payAndSubmit": "Pay and submit",
53
+ "submit": "Submit",
54
+ "saveAndExit": "Save and exit",
55
+ "paymentSuccessBannerTitle": "Success",
56
+ "paymentSuccessTitle": "We have your payment details",
57
+ "paymentSuccessBody": "Your payment is on hold. We will charge you when you submit the form.",
58
+ "paymentDetailsTitle": "Payment details",
59
+ "paymentFor": "Payment for",
60
+ "totalAmount": "Total amount",
61
+ "reference": "Reference",
62
+ "dateOfPayment": "Date of payment",
63
+ "submissionFailed": "There was a problem and your form was not submitted. Try submitting the form again",
64
+ "submissionFailedContactSuffix": " or you can [[contactUsLink]] and quote your reference number to arrange a refund",
65
+ "contactUsLinkText": "contact us (opens in new tab)",
66
+ "confirmationEmail": "Confirmation email (optional)",
67
+ "confirmationEmailHint": "Enter your email address to receive a confirmation email and a copy of your answers"
68
+ },
69
+
70
+ "repeater": {
71
+ "removeAnswer": "Are you sure you want to remove this answer?",
72
+ "remove": "Remove",
73
+ "cancel": "Cancel",
74
+ "lastItemCannotBeRemoved": "Last list item cannot be removed",
75
+ "itemToRemoveNotFound": "List item to remove not found",
76
+ "continue": "Continue",
77
+ "addAnother": "Add another",
78
+ "saveAndExit": "Save and exit",
79
+ "change": "Change",
80
+ "notProvided": "Not provided",
81
+ "visuallyHiddenItem": "item [[index]]",
82
+ "pageTitle_one": "You have added [[count]] answer",
83
+ "pageTitle_other": "You have added [[count]] answers",
84
+ "tooMany_one": "You can only add up to [[count]] answer",
85
+ "tooMany_other": "You can only add up to [[count]] answers",
86
+ "tooFew_one": "You must add at least [[count]] answer",
87
+ "tooFew_other": "You must add at least [[count]] answers"
88
+ },
89
+
90
+ "fileUpload": {
91
+ "upload": "Upload file",
92
+ "maxFilesReached": "You have reached the maximum number of files. Please remove a file to upload more."
93
+ },
94
+
95
+ "exit": {
96
+ "defaultTitle": "Your progress has been saved",
97
+ "whatHappensNext": "What happens next",
98
+ "body": "Your form progress has been saved. You can return to complete your application at any time using the link provided.",
99
+ "returnToApplication": "Return to application"
100
+ },
101
+
102
+ "confirmation": {
103
+ "formSubmitted": "Form submitted",
104
+ "whatHappensNext": "What happens next",
105
+ "referenceNumber": "Your reference number",
106
+ "feedbackLink": "What do you think of this service? (takes 30 seconds)"
107
+ },
108
+
109
+ "preview": {
110
+ "warnMissingNotificationEmail": {
111
+ "body": "If you want to receive a test email, [[link]] you want form submissions to go to.",
112
+ "linkText": "enter the email address (opens in new tab)"
113
+ },
114
+ "bannerForce": "This is a preview of a [[previewMode]] form. Do not enter personal information.",
115
+ "bannerText": "This is a preview of a [[previewMode]] form page you are editing.",
116
+ "previousPages": "It depends on answers from earlier pages in the form. In the live version, users will need to complete those questions first."
117
+ }
118
+ },
119
+
120
+ "postcodeLookup": {
121
+ "postcodeLabel": "Postcode",
122
+ "postcodeHint": "For example, AA3 1AB",
123
+ "buildingNameLabel": "Building name or number (optional)",
124
+ "buildingNameHint": "For example, 15 or Prospect Cottage",
125
+ "selectAddress": "Select an address",
126
+ "addressLine1Label": "Address line 1",
127
+ "addressLine2Label": "Address line 2 (optional)",
128
+ "townLabel": "Town or city",
129
+ "countyLabel": "County (optional)",
130
+ "findAddress": "Find address",
131
+ "enterManually": "enter address manually",
132
+ "searchAgain": "Search again",
133
+ "useThisAddress": "Use this address",
134
+ "findAnAddressInstead": "find an address instead",
135
+ "noAddressFoundTitle": "No address found",
136
+ "noAddressFoundBody": "We could not find an address that matches",
137
+ "addressFound_one": "[[count]] address found for",
138
+ "addressFound_other": "[[count]] addresses found for",
139
+ "validation": {
140
+ "invalidPostcode": "Enter a valid postcode or enter an address manually",
141
+ "requiredPostcode": "Enter a postcode",
142
+ "selectAddress": "Select an address",
143
+ "requiredAddressLine1": "Enter address line 1",
144
+ "requiredTown": "Enter town or city",
145
+ "invalidManualPostcode": "Enter a valid postcode",
146
+ "requiredManualPostcode": "Enter postcode"
147
+ }
148
+ },
149
+
150
+ "components": {
151
+ "dateField": {
152
+ "day": "Day",
153
+ "month": "Month",
154
+ "year": "Year",
155
+ "validation": {
156
+ "dateFormat": "{{#title}} must be a real date",
157
+ "dateMin": "{{#title}} must be the same as or after {{#limit}}",
158
+ "dateMax": "{{#title}} must be the same as or before {{#limit}}"
159
+ }
160
+ },
161
+
162
+ "monthYearField": {
163
+ "month": "Month",
164
+ "year": "Year"
165
+ },
166
+
167
+ "addressField": {
168
+ "uprn": "UPRN",
169
+ "line1": "Address line 1",
170
+ "line2": "Address line 2",
171
+ "town": "Town or city",
172
+ "county": "County",
173
+ "postcode": "Postcode",
174
+ "enterAddress": "Enter [[shortDescription]]",
175
+ "findAddress": "Find an address",
176
+ "selectedAddress": "Selected address:",
177
+ "useDifferentAddress": "Use a different address",
178
+ "enterManually": "enter address manually"
179
+ },
180
+
181
+ "latLongField": {
182
+ "latitude": "Latitude",
183
+ "longitude": "Longitude",
184
+ "latitudeRequired": "Enter latitude",
185
+ "longitudeRequired": "Enter longitude",
186
+ "precision": "{{#label}} must have no more than 7 decimal places",
187
+ "notANumber": "{{#label}} must be a valid number",
188
+ "latitudeBase": "Enter a valid latitude for [[fieldLabel]] like 51.519450",
189
+ "longitudeBase": "Enter a valid longitude for [[fieldLabel]] like -0.127758",
190
+ "latitudeRange": "Latitude for [[fieldLabel]] must be between [[min]] and [[max]]",
191
+ "longitudeRange": "Longitude for [[fieldLabel]] must be between [[min]] and [[max]]"
192
+ },
193
+
194
+ "eastingNorthingField": {
195
+ "easting": "Easting",
196
+ "northing": "Northing",
197
+ "eastingRequired": "Enter easting",
198
+ "northingRequired": "Enter northing",
199
+ "eastingDigits": "{{#label}} for [[fieldLabel]] must be between 1 and 6 digits",
200
+ "northingDigits": "{{#label}} for [[fieldLabel]] must be between 1 and 7 digits",
201
+ "eastingRange": "{{#label}} for [[fieldLabel]] must be between [[min]] and [[max]]",
202
+ "northingRange": "{{#label}} for [[fieldLabel]] must be between [[min]] and [[max]]"
203
+ },
204
+
205
+ "nationalGridField": {
206
+ "required": "Enter {{lowerFirst(#title)}}",
207
+ "pattern": "Enter a valid National Grid field number for {{lowerFirst(#title)}} like NG 1234 5678",
208
+ "howToFind": "How to find location details"
209
+ },
210
+
211
+ "osGridRefField": {
212
+ "required": "Enter {{lowerFirst(#title)}}",
213
+ "pattern": "Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456",
214
+ "howToFind": "How to find location details"
215
+ },
216
+
217
+ "locationFieldBase": {
218
+ "howToFind": "How to find location details"
219
+ },
220
+
221
+ "yesNoField": {
222
+ "yes": "Yes",
223
+ "no": "No",
224
+ "validation": {
225
+ "selectYesNoRequired": "{{#label}} - select yes or no"
226
+ }
227
+ },
228
+
229
+ "declarationField": {
230
+ "defaultLabel": "I understand and agree",
231
+ "defaultConfirmationLabel": "I confirm that I understand and accept this declaration",
232
+ "notProvided": "Not provided",
233
+ "validation": {
234
+ "declarationRequired": "You must confirm you understand and agree with the {{lowerFirst(#label)}} to continue"
235
+ }
236
+ },
237
+
238
+ "geospatialField": {
239
+ "added_one": "Added [[count]] location",
240
+ "added_other": "Added [[count]] locations",
241
+ "validation": {
242
+ "descriptionRequired": "Enter description for location [[count]]",
243
+ "wrongCountry": "Location [[count]] must be within [[country]]"
244
+ }
245
+ },
246
+
247
+ "paymentField": {
248
+ "detailsRequired": "Payment details required",
249
+ "pendingTransaction": "You may see a pending transaction in your bank account but you will only be charged when you submit the form.",
250
+ "addPaymentDetails": "Add payment details",
251
+ "cannotTakePayment": "There is a problem and we cannot take a payment. Contact us (details in the footer of this form) or save your progress and return to the form later.",
252
+ "testApiKey": "Add a valid test API key before you can preview the payment journey.",
253
+ "completePayment": "Complete the payment to continue",
254
+ "paymentExpired": "Your payment authorisation has expired. Please add your payment details again.",
255
+ "submissionFailed": "There was a problem and your form was not submitted. Try submitting the form again.",
256
+ "canSubmitAfterPayment": "You can submit the form after you have added your payment details.",
257
+ "preAuthorisedTitle": "You have already authorised a payment for this form",
258
+ "preAuthorisedBody": "Continue to submit the form. You will not be charged twice.",
259
+ "totalAmountLabel": "Total amount:",
260
+ "paymentAmountMismatch": "The pre-authorised payment amount is somehow different from that requested. Try adding payment details again."
261
+ },
262
+
263
+ "fileUploadField": {
264
+ "uploaded": "Uploaded",
265
+ "uploadFailed": "There was a problem with your uploaded files. Re-upload them before submitting the form again.",
266
+ "uploadedFilesHeading": "Uploaded files",
267
+ "filesCount_one": "[[count]] file uploaded",
268
+ "filesCount_other": "[[count]] files uploaded"
269
+ }
270
+ }
271
+ }