@defra/forms-engine-plugin 5.0.0-alpha.2 → 5.0.0-alpha.21

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 (346) hide show
  1. package/.public/javascripts/application.min.js +1 -1
  2. package/.public/javascripts/application.min.js.LICENSE.txt +7 -0
  3. package/.public/javascripts/application.min.js.map +1 -1
  4. package/.public/javascripts/shared.min.js +1 -1
  5. package/.public/javascripts/shared.min.js.LICENSE.txt +7 -0
  6. package/.public/javascripts/shared.min.js.map +1 -1
  7. package/.public/stylesheets/application.min.css.map +1 -1
  8. package/.server/client/javascripts/file-upload.js +6 -3
  9. package/.server/client/javascripts/file-upload.js.map +1 -1
  10. package/.server/client/javascripts/geospatial-map.d.ts +153 -5
  11. package/.server/client/javascripts/geospatial-map.js +157 -77
  12. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  13. package/.server/client/javascripts/govuk.js +2 -1
  14. package/.server/client/javascripts/govuk.js.map +1 -1
  15. package/.server/client/javascripts/location-map.d.ts +44 -0
  16. package/.server/client/javascripts/location-map.js +54 -5
  17. package/.server/client/javascripts/location-map.js.map +1 -1
  18. package/.server/client/javascripts/map-constants.d.ts +3 -0
  19. package/.server/client/javascripts/map-constants.js +4 -0
  20. package/.server/client/javascripts/map-constants.js.map +1 -0
  21. package/.server/client/javascripts/map.d.ts +10 -0
  22. package/.server/client/javascripts/map.js +42 -0
  23. package/.server/client/javascripts/map.js.map +1 -1
  24. package/.server/client/javascripts/maps.d.ts +5 -0
  25. package/.server/client/javascripts/maps.js +6 -0
  26. package/.server/client/javascripts/maps.js.map +1 -0
  27. package/.server/client/javascripts/shared.d.ts +1 -4
  28. package/.server/client/javascripts/shared.js +1 -4
  29. package/.server/client/javascripts/shared.js.map +1 -1
  30. package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
  31. package/.server/client/javascripts/sssi-dataset.js +37 -39
  32. package/.server/client/javascripts/sssi-dataset.js.map +1 -1
  33. package/.server/client/stylesheets/maps.scss +4 -0
  34. package/.server/client/stylesheets/shared.scss +1 -5
  35. package/.server/server/constants.d.ts +2 -0
  36. package/.server/server/constants.js +2 -0
  37. package/.server/server/constants.js.map +1 -1
  38. package/.server/server/plugins/engine/__stubs__/definitions.d.ts +29 -0
  39. package/.server/server/plugins/engine/__stubs__/definitions.js +125 -0
  40. package/.server/server/plugins/engine/__stubs__/definitions.js.map +1 -0
  41. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
  42. package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
  43. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  44. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +21 -0
  45. package/.server/server/plugins/engine/components/CheckboxesField.js +30 -5
  46. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  47. package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
  48. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  49. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  50. package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
  51. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  52. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  53. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  54. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  55. package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
  56. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  57. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  58. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  59. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +33 -2
  60. package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
  61. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  62. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  63. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  64. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  65. package/.server/server/plugins/engine/components/FileUploadField.d.ts +21 -0
  66. package/.server/server/plugins/engine/components/FileUploadField.js +35 -3
  67. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  68. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  69. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  70. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  71. package/.server/server/plugins/engine/components/GeospatialField.d.ts +23 -0
  72. package/.server/server/plugins/engine/components/GeospatialField.js +33 -9
  73. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  74. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  75. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  76. package/.server/server/plugins/engine/components/LatLongField.d.ts +32 -2
  77. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  78. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  79. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  80. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
  81. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  82. package/.server/server/plugins/engine/components/LocationFieldBase.js +25 -6
  83. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  84. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +12 -3
  85. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +21 -13
  86. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  87. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  88. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  89. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  90. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  91. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  92. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  93. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  94. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  95. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  96. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  97. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  98. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  99. package/.server/server/plugins/engine/components/NumberField.js +16 -0
  100. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  101. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +103 -1
  102. package/.server/server/plugins/engine/components/OsGridRefField.js +13 -3
  103. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  104. package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
  105. package/.server/server/plugins/engine/components/PaymentField.js +17 -6
  106. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  107. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  108. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  109. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  110. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  111. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  112. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  113. package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
  114. package/.server/server/plugins/engine/components/YesNoField.js +17 -8
  115. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  116. package/.server/server/plugins/engine/components/helpers/components.js +3 -3
  117. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  118. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +8 -1
  119. package/.server/server/plugins/engine/components/helpers/geospatial.js +56 -15
  120. package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
  121. package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
  122. package/.server/server/plugins/engine/components/helpers/index.js +13 -1
  123. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  124. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  125. package/.server/server/plugins/engine/components/types.js.map +1 -1
  126. package/.server/server/plugins/engine/errors.d.ts +49 -0
  127. package/.server/server/plugins/engine/errors.js +75 -0
  128. package/.server/server/plugins/engine/errors.js.map +1 -0
  129. package/.server/server/plugins/engine/form-availability.d.ts +3 -2
  130. package/.server/server/plugins/engine/form-availability.js +3 -2
  131. package/.server/server/plugins/engine/form-availability.js.map +1 -1
  132. package/.server/server/plugins/engine/form-context.js +2 -2
  133. package/.server/server/plugins/engine/form-context.js.map +1 -1
  134. package/.server/server/plugins/engine/helpers.d.ts +22 -2
  135. package/.server/server/plugins/engine/helpers.js +44 -5
  136. package/.server/server/plugins/engine/helpers.js.map +1 -1
  137. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +4 -1
  138. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +31 -7
  139. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  140. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  141. package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
  142. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  143. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  144. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  145. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  146. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  147. package/.server/server/plugins/engine/i18n/form.js +35 -0
  148. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  149. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  150. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  151. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  152. package/.server/server/plugins/engine/i18n/translations/cy.json +192 -9
  153. package/.server/server/plugins/engine/i18n/translations/en-GB.json +125 -7
  154. package/.server/server/plugins/engine/i18n/types.d.ts +3 -0
  155. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  156. package/.server/server/plugins/engine/index.d.ts +4 -0
  157. package/.server/server/plugins/engine/index.js +4 -0
  158. package/.server/server/plugins/engine/index.js.map +1 -1
  159. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  160. package/.server/server/plugins/engine/models/FormModel.js +35 -23
  161. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  162. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  163. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  164. package/.server/server/plugins/engine/models/types.d.ts +28 -1
  165. package/.server/server/plugins/engine/models/types.js.map +1 -1
  166. package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
  167. package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
  168. package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
  169. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +14 -6
  170. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  171. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  172. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  173. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  174. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  175. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  176. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
  177. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
  178. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  179. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  180. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
  181. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  182. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  183. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  184. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  185. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  186. package/.server/server/plugins/engine/pageControllers/helpers/pages.js +2 -1
  187. package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
  188. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +35 -2
  189. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +100 -3
  190. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  191. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
  192. package/.server/server/plugins/engine/pageControllers/validationOptions.js +24 -3
  193. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  194. package/.server/server/plugins/engine/types/enums.d.ts +3 -3
  195. package/.server/server/plugins/engine/types/enums.js +5 -4
  196. package/.server/server/plugins/engine/types/enums.js.map +1 -1
  197. package/.server/server/plugins/engine/types/schema.js +10 -3
  198. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  199. package/.server/server/plugins/engine/types.d.ts +18 -2
  200. package/.server/server/plugins/engine/types.js.map +1 -1
  201. package/.server/server/plugins/engine/unavailable-response.js +5 -2
  202. package/.server/server/plugins/engine/unavailable-response.js.map +1 -1
  203. package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
  204. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  205. package/.server/server/plugins/engine/views/components/geospatialfield.html +1 -0
  206. package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  207. package/.server/server/plugins/engine/views/components/osgridreffield.html +4 -1
  208. package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
  209. package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  210. package/.server/server/plugins/engine/views/file-upload.html +1 -1
  211. package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
  212. package/.server/server/plugins/engine/views/unavailable.html +14 -11
  213. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  214. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  215. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  216. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  217. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  218. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  219. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  220. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  221. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  222. package/.server/server/plugins/payment/helper.d.ts +11 -1
  223. package/.server/server/plugins/payment/helper.js +18 -2
  224. package/.server/server/plugins/payment/helper.js.map +1 -1
  225. package/.server/server/plugins/payment/helper.test.js +2 -1
  226. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  227. package/.server/server/plugins/payment/service.d.ts +2 -1
  228. package/.server/server/plugins/payment/service.js +5 -2
  229. package/.server/server/plugins/payment/service.js.map +1 -1
  230. package/.server/server/plugins/payment/service.test.js +7 -3
  231. package/.server/server/plugins/payment/service.test.js.map +1 -1
  232. package/.server/server/plugins/payment/types.d.ts +4 -0
  233. package/.server/server/plugins/payment/types.js +1 -0
  234. package/.server/server/plugins/payment/types.js.map +1 -1
  235. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  236. package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
  237. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  238. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  239. package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
  240. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  241. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  242. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  243. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  244. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  245. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  246. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  247. package/.server/server/utils/type-utils.d.ts +1 -2
  248. package/.server/server/utils/type-utils.js +0 -3
  249. package/.server/server/utils/type-utils.js.map +1 -1
  250. package/.server/server/utils/utils.d.ts +6 -0
  251. package/.server/server/utils/utils.js +18 -1
  252. package/.server/server/utils/utils.js.map +1 -1
  253. package/.server/server/utils/utils.test.js +21 -1
  254. package/.server/server/utils/utils.test.js.map +1 -1
  255. package/package.json +20 -5
  256. package/src/client/javascripts/file-upload.js +11 -3
  257. package/src/client/javascripts/geospatial-map.js +176 -81
  258. package/src/client/javascripts/govuk.js +2 -0
  259. package/src/client/javascripts/location-map.js +60 -4
  260. package/src/client/javascripts/map-constants.js +3 -0
  261. package/src/client/javascripts/map.js +47 -0
  262. package/src/client/javascripts/maps.js +5 -0
  263. package/src/client/javascripts/shared.js +1 -4
  264. package/src/client/javascripts/sssi-dataset.js +39 -41
  265. package/src/client/stylesheets/maps.scss +4 -0
  266. package/src/client/stylesheets/shared.scss +1 -5
  267. package/src/server/constants.js +2 -0
  268. package/src/server/plugins/engine/__stubs__/definitions.ts +155 -0
  269. package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
  270. package/src/server/plugins/engine/components/CheckboxesField.ts +38 -5
  271. package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
  272. package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
  273. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  274. package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
  275. package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
  276. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  277. package/src/server/plugins/engine/components/FileUploadField.ts +44 -3
  278. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  279. package/src/server/plugins/engine/components/GeospatialField.ts +47 -9
  280. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  281. package/src/server/plugins/engine/components/LocationFieldBase.ts +30 -7
  282. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +28 -14
  283. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  284. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  285. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  286. package/src/server/plugins/engine/components/NumberField.ts +21 -1
  287. package/src/server/plugins/engine/components/OsGridRefField.ts +22 -3
  288. package/src/server/plugins/engine/components/PaymentField.ts +15 -5
  289. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  290. package/src/server/plugins/engine/components/YesNoField.ts +17 -9
  291. package/src/server/plugins/engine/components/helpers/components.ts +3 -3
  292. package/src/server/plugins/engine/components/helpers/geospatial.ts +84 -21
  293. package/src/server/plugins/engine/components/helpers/index.ts +19 -0
  294. package/src/server/plugins/engine/components/types.ts +1 -0
  295. package/src/server/plugins/engine/errors.ts +78 -0
  296. package/src/server/plugins/engine/form-availability.ts +8 -2
  297. package/src/server/plugins/engine/form-context.ts +4 -2
  298. package/src/server/plugins/engine/helpers.ts +52 -5
  299. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +16 -8
  300. package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
  301. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  302. package/src/server/plugins/engine/i18n/form.ts +54 -0
  303. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  304. package/src/server/plugins/engine/i18n/translations/cy.json +192 -9
  305. package/src/server/plugins/engine/i18n/translations/en-GB.json +125 -7
  306. package/src/server/plugins/engine/i18n/types.ts +3 -0
  307. package/src/server/plugins/engine/index.ts +7 -0
  308. package/src/server/plugins/engine/models/FormModel.ts +46 -23
  309. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  310. package/src/server/plugins/engine/models/types.ts +31 -0
  311. package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
  312. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +18 -7
  313. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  314. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  315. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
  316. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
  317. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  318. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  319. package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -1
  320. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +143 -4
  321. package/src/server/plugins/engine/pageControllers/validationOptions.ts +29 -4
  322. package/src/server/plugins/engine/types/enums.ts +4 -3
  323. package/src/server/plugins/engine/types/schema.ts +17 -4
  324. package/src/server/plugins/engine/types.ts +19 -1
  325. package/src/server/plugins/engine/unavailable-response.ts +6 -2
  326. package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
  327. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  328. package/src/server/plugins/engine/views/components/geospatialfield.html +1 -0
  329. package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  330. package/src/server/plugins/engine/views/components/osgridreffield.html +4 -1
  331. package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
  332. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  333. package/src/server/plugins/engine/views/file-upload.html +1 -1
  334. package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
  335. package/src/server/plugins/engine/views/unavailable.html +14 -11
  336. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  337. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  338. package/src/server/plugins/payment/helper.js +22 -2
  339. package/src/server/plugins/payment/service.js +6 -2
  340. package/src/server/plugins/payment/types.js +1 -0
  341. package/src/server/plugins/postcode-lookup/models/index.js +75 -43
  342. package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
  343. package/src/server/plugins/postcode-lookup/types.js +6 -1
  344. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  345. package/src/server/utils/type-utils.ts +1 -11
  346. package/src/server/utils/utils.js +19 -1
@@ -16,7 +16,9 @@ const opts = {
16
16
  * because Joi cannot resolve custom functions from a plain string.
17
17
  * Plain strings with only built-in tokens ({{#label}}, {{#limit}}) work without wrapping.
18
18
  */
19
- export function buildValidationMessages(t: (key: string) => string) {
19
+ export function buildValidationMessages(
20
+ t: (key: string, options?: Record<string, unknown>) => string
21
+ ) {
20
22
  return {
21
23
  // Expressions — contain lowerFirst custom function
22
24
  required: joi.expression(t('validation.required'), opts) as JoiExpression,
@@ -56,13 +58,19 @@ export function buildValidationMessages(t: (key: string) => string) {
56
58
  dateMin: t('components.dateField.validation.dateMin'),
57
59
  dateMax: t('components.dateField.validation.dateMax'),
58
60
 
59
- unicode: 'validation.unicode',
60
- arrayMin: 'validation.array.min',
61
- arrayMax: 'validation.array.max',
62
- arrayLength: 'validation.array.length',
63
- featuresMin: 'validation.features.min',
64
- featuresMax: 'validation.features.max',
65
- featuresLength: 'validation.features.length'
61
+ unicode: t('validation.unicode'),
62
+ // These generic templates are shared across fields with differing limits, so a
63
+ // fixed singular count is used here — components needing accurate singular/plural
64
+ // text (e.g. FileUploadField) build their own per-instance messages instead.
65
+ arrayMin: t('validation.arrayMin', { count: 1 }),
66
+ arrayMax: t('validation.arrayMax', { count: 1 }),
67
+ arrayLength: t('validation.arrayLength', { count: 1 }),
68
+ featuresMin: t('validation.featuresMin', { count: 1 }),
69
+ featuresMax: t('validation.featuresMax', { count: 1 }),
70
+ featuresLength: t('validation.featuresLength', { count: 1 }),
71
+ filesMin: t('validation.filesMin', { count: 1 }),
72
+ filesMax: t('validation.filesMax', { count: 1 }),
73
+ filesLength: t('validation.filesLength', { count: 1 })
66
74
  }
67
75
  }
68
76
 
@@ -1,26 +1,40 @@
1
- import { type FormDefinition } from '@defra/forms-model'
1
+ import {
2
+ yesNoListNoItemId,
3
+ yesNoListYesItemId,
4
+ type FormDefinition,
5
+ type FormMetadata
6
+ } from '@defra/forms-model'
2
7
  import { type i18n } from 'i18next'
3
8
 
9
+ import { CY } from '../../../constants.js'
4
10
  import { createTranslator } from './createTranslator.js'
5
11
  import { extractBaseTranslations } from './extractBaseTranslations.js'
6
12
  import { createFormI18nInstance } from './index.js'
7
- import {
8
- type FormDefinitionTranslations,
9
- type Translator
10
- } from './types.js'
13
+ import { type FormDefinitionTranslations } from './types.js'
11
14
 
12
15
  export function createFormTranslator(
13
- def: FormDefinition,
16
+ metadata: FormMetadata,
17
+ definition: FormDefinition | undefined,
14
18
  language: string
15
- ): Translator {
16
- const baseTranslations = extractBaseTranslations(def)
19
+ ) {
20
+ const baseTranslations = extractBaseTranslations(definition)
17
21
  const i18nInstance = createFormI18nInstance(baseTranslations)
18
- loadFormTranslations(def, i18nInstance)
22
+ loadFormTranslations(definition, i18nInstance)
23
+ extractMetadataBaseTranslations(metadata, i18nInstance)
24
+
25
+ const translator = createTranslator(i18nInstance, language)
19
26
 
20
- return createTranslator(i18nInstance, language)
27
+ return translator
21
28
  }
22
29
 
23
- export function loadFormTranslations(def: FormDefinition, i18nInstance: i18n) {
30
+ export function loadFormTranslations(
31
+ def: FormDefinition | undefined,
32
+ i18nInstance: i18n
33
+ ) {
34
+ if (!def) {
35
+ return
36
+ }
37
+
24
38
  const formTranslations = def.metadata?.translations as
25
39
  | FormDefinitionTranslations
26
40
  | undefined
@@ -28,6 +42,43 @@ export function loadFormTranslations(def: FormDefinition, i18nInstance: i18n) {
28
42
  if (formTranslations) {
29
43
  for (const [lng, resources] of Object.entries(formTranslations)) {
30
44
  i18nInstance.addResourceBundle(lng, 'form', resources, true, true)
45
+
46
+ // Temporary workaround - until we develop a better solution
47
+ if (lng === CY) {
48
+ i18nInstance.addResource(
49
+ lng,
50
+ 'form',
51
+ `listItems.${yesNoListYesItemId}.text`,
52
+ 'Ie'
53
+ )
54
+ i18nInstance.addResource(
55
+ lng,
56
+ 'form',
57
+ `listItems.${yesNoListNoItemId}.text`,
58
+ 'Nage'
59
+ )
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ export function extractMetadataBaseTranslations(
66
+ metadata: FormMetadata | undefined,
67
+ i18nInstance: i18n
68
+ ) {
69
+ if (metadata) {
70
+ const translations = {
71
+ 'form.title': metadata.title,
72
+ 'form.contact.email.address': metadata.contact?.email?.address ?? '',
73
+ 'form.contact.email.responseTime':
74
+ metadata.contact?.email?.responseTime ?? '',
75
+ 'form.contact.online.url': metadata.contact?.online?.url ?? '',
76
+ 'form.contact.online.text': metadata.contact?.online?.text ?? '',
77
+ 'form.contact.phone': metadata.contact?.phone ?? '',
78
+ 'form.submissionGuidance': metadata.submissionGuidance ?? '',
79
+ 'form.privacyNoticeText': metadata.privacyNoticeText ?? '',
80
+ 'form.privacyNoticeUrl': metadata.privacyNoticeUrl ?? ''
31
81
  }
82
+ i18nInstance.addResourceBundle('en-GB', 'form', translations, true, true)
32
83
  }
33
84
  }
@@ -7,13 +7,19 @@ import { type FormDefinitionTranslations } from './types.js'
7
7
 
8
8
  type BaseTranslations = FormDefinitionTranslations[string]
9
9
 
10
- export function extractBaseTranslations(def: FormDefinition): BaseTranslations {
10
+ export function extractBaseTranslations(
11
+ def: FormDefinition | undefined
12
+ ): BaseTranslations {
11
13
  const pages: BaseTranslations['pages'] = {}
12
14
  const components: BaseTranslations['components'] = {}
13
15
  const sections: BaseTranslations['sections'] = {}
14
16
  const listItems: BaseTranslations['listItems'] = {}
15
17
  const form: BaseTranslations['form'] = {}
16
18
 
19
+ if (!def) {
20
+ return { pages, components, sections, listItems, form }
21
+ }
22
+
17
23
  for (const page of def.pages) {
18
24
  if (page.id && page.title) {
19
25
  pages[page.id] = { title: page.title }
@@ -0,0 +1,54 @@
1
+ import { type FormMetadata, type FormStatus } from '@defra/forms-model'
2
+ import Boom from '@hapi/boom'
3
+ import { LRUCache } from 'lru-cache'
4
+
5
+ import { getPluginOptions } from '../helpers.js'
6
+ import { createFormTranslator } from './createFormTranslator.js'
7
+ import { type Translator } from './types.js'
8
+ import { type AnyFormRequest } from '../types.js'
9
+
10
+ const cache = new LRUCache({
11
+ max: 100,
12
+ ttl: 1000 * 60 * 15 // 15 minutes
13
+ })
14
+
15
+ /**
16
+ * Get translator for plugin, for the current form's metadata (as well as the plugin-specific boilerplate).
17
+ * This is an async call so we can read the form definition inside this call.
18
+ * See docs/features/multi-language.md for the language and translation flow overview.
19
+ * @param {AnyFormRequest} request
20
+ * @param {FormMetadata} metadata - the metadata of the form
21
+ * @param {FormStatus} status - the form status to use when retrieving the definition
22
+ * @param {string} language - the language to use for the translator
23
+ */
24
+ export async function getCachedPluginTranslator(
25
+ request: AnyFormRequest,
26
+ metadata: FormMetadata,
27
+ status: FormStatus,
28
+ language: string
29
+ ) {
30
+ const key = `${metadata.id}-${status}-${language}-plugin-meta`
31
+
32
+ if (cache.has(key)) {
33
+ return cache.get(key) as unknown as Translator
34
+ }
35
+
36
+ const { services } = getPluginOptions(request.server)
37
+
38
+ const definition = await services?.formsService.getFormDefinition(
39
+ metadata.id,
40
+ status
41
+ )
42
+
43
+ if (!definition) {
44
+ throw Boom.notFound(
45
+ `FormDefinition not found for form ${metadata.id} and status ${status}`
46
+ )
47
+ }
48
+
49
+ const translator = createFormTranslator(metadata, definition, language)
50
+
51
+ cache.set(key, translator)
52
+
53
+ return translator
54
+ }
@@ -0,0 +1,19 @@
1
+ import { type FormDefinition } from '@defra/forms-model'
2
+
3
+ /**
4
+ * Return a list of available languages.
5
+ * Empty array if only English, or an array of English and Welsh if translations have been defined.
6
+ * @param {FormDefinition} def
7
+ */
8
+ export function getAvailableLanguages(
9
+ def: FormDefinition
10
+ ): { name: string; code: string }[] {
11
+ // @ts-expect-error - dynamic property
12
+ if (def.metadata?.translations?.cy) {
13
+ return [
14
+ { name: 'English', code: 'en-GB' },
15
+ { name: 'Cymraeg', code: 'cy' }
16
+ ]
17
+ }
18
+ return []
19
+ }
@@ -14,7 +14,63 @@
14
14
  "numberInteger": "Rhaid i {{#label}} fod yn rhif cyfan",
15
15
  "numberMin": "Rhaid i {{#label}} fod yn {{#limit}} neu uwch",
16
16
  "numberMax": "Rhaid i {{#label}} fod yn {{#limit}} neu is",
17
- "maxWords": "Rhaid i {{#label}} fod yn {{#limit}} o eiriau neu lai"
17
+ "maxWords": "Rhaid i {{#label}} fod yn {{#limit}} o eiriau neu lai",
18
+ "unicode": "Mae {{#label}} yn cynnwys nodau annilys, er enghraifft, dashes hirion",
19
+ "arrayMin_zero": "Dewiswch o leiaf 1 opsiwn o'r rhestr",
20
+ "arrayMin_one": "Dewiswch o leiaf {{#limit}} opsiwn o'r rhestr",
21
+ "arrayMin_two": "Dewiswch o leiaf ddau opsiwn o'r rhestr",
22
+ "arrayMin_few": "Dewiswch o leiaf {{#limit}} opsiwn o'r rhestr",
23
+ "arrayMin_many": "Dewiswch o leiaf {{#limit}} opsiwn o'r rhestr",
24
+ "arrayMin_other": "Dewiswch o leiaf {{#limit}} opsiwn o'r rhestr",
25
+ "arrayMax_zero": "Dim ond {{#limit}} opsiynau y gellir eu dewis o'r rhestr",
26
+ "arrayMax_one": "Dim ond {{#limit}} opsiwn y gellir ei ddewis o'r rhestr",
27
+ "arrayMax_two": "Dim ond dwy opsiwn y gellir eu dewis o'r rhestr",
28
+ "arrayMax_few": "Dim ond {{#limit}} opsiwn y gellir eu dewis o'r rhestr",
29
+ "arrayMax_many": "Dim ond {{#limit}} opsiwn y gellir eu dewis o'r rhestr",
30
+ "arrayMax_other": "Dim ond {{#limit}} opsiwn y gellir eu dewis o'r rhestr",
31
+ "arrayLength_zero": "Dewiswch 0 opsiwn yn unig o'r rhestr",
32
+ "arrayLength_one": "Dewiswch un opsiwn yn unig o'r rhestr",
33
+ "arrayLength_two": "Dewiswch {{#limit}} opsiwn yn unig o'r rhestr",
34
+ "arrayLength_few": "Dewiswch {{#limit}} opsiwn yn unig o'r rhestr",
35
+ "arrayLength_many": "Dewiswch {{#limit}} opsiwn yn unig o'r rhestr",
36
+ "arrayLength_other": "Dewiswch {{#limit}} opsiwn yn unig o'r rhestr",
37
+
38
+ "featuresMin_zero": "Diffiniwch o leiaf {{#limit}} nodwedd",
39
+ "featuresMin_one": "Diffiniwch o leiaf un nodwedd",
40
+ "featuresMin_two": "Diffiniwch o leiaf {{#limit}} nodwedd",
41
+ "featuresMin_few": "Diffiniwch o leiaf {{#limit}} nodwedd",
42
+ "featuresMin_many": "Diffiniwch o leiaf {{#limit}} nodwedd",
43
+ "featuresMin_other": "Diffiniwch o leiaf {{#limit}} nodwedd",
44
+ "featuresMax_zero": "Dim ond {{#limit}} nodwedd y gellir eu diffinio",
45
+ "featuresMax_one": "Dim ond {{#limit}} nodwedd y gellir ei diffinio",
46
+ "featuresMax_two": "Dim ond {{#limit}} nodwedd y gellir eu diffinio",
47
+ "featuresMax_few": "Dim ond {{#limit}} nodwedd y gellir eu diffinio",
48
+ "featuresMax_many": "Dim ond {{#limit}} nodwedd y gellir eu diffinio",
49
+ "featuresMax_other": "Dim ond {{#limit}} nodwedd y gellir eu diffinio",
50
+ "featuresLength_zero": "Diffiniwch yn union {{#limit}} nodwedd",
51
+ "featuresLength_one": "Diffiniwch un nodwedd yn union",
52
+ "featuresLength_two": "Diffiniwch nodweddion {{#limit}} yn union",
53
+ "featuresLength_few": "Diffiniwch nodweddion {{#limit}} yn union",
54
+ "featuresLength_many": "Diffiniwch nodweddion {{#limit}} yn union",
55
+ "featuresLength_other": "Diffiniwch nodweddion {{#limit}} yn union",
56
+ "filesMin_zero": "Rhaid i chi uwchlwytho {{#limit}} ffeil neu fwy",
57
+ "filesMin_one": "Rhaid i chi uwchlwytho un ffeil neu fwy",
58
+ "filesMin_two": "Rhaid i chi uwchlwytho {{#limit}} o ffeiliau neu fwy",
59
+ "filesMin_few": "Rhaid i chi uwchlwytho {{#limit}} o ffeiliau neu fwy",
60
+ "filesMin_many": "Rhaid i chi uwchlwytho {{#limit}} o ffeiliau neu fwy",
61
+ "filesMin_other": "Rhaid i chi uwchlwytho {{#limit}} o ffeiliau neu fwy",
62
+ "filesMax_zero": "Dim ond {{#limit}} ffeil neu lai y gallwch eu huwchlwytho",
63
+ "filesMax_one": "Dim ond un ffeil neu lai y gallwch ei huwchlwytho",
64
+ "filesMax_two": "Dim ond {{#limit}} o ffeiliau neu lai y gallwch eu huwchlwytho",
65
+ "filesMax_few": "Dim ond {{#limit}} o ffeiliau neu lai y gallwch eu huwchlwytho",
66
+ "filesMax_many": "Dim ond {{#limit}} o ffeiliau neu lai y gallwch eu huwchlwytho",
67
+ "filesMax_other": "Dim ond {{#limit}} o ffeiliau neu lai y gallwch eu huwchlwytho",
68
+ "filesLength_zero": "Rhaid i chi uwchlwytho union {{#limit}} ffeil",
69
+ "filesLength_one": "Rhaid i chi uwchlwytho union un ffeil",
70
+ "filesLength_two": "Rhaid i chi uwchlwytho'n union {{#limit}} o ffeiliau",
71
+ "filesLength_few": "Rhaid i chi uwchlwytho'n union {{#limit}} o ffeiliau",
72
+ "filesLength_many": "Rhaid i chi uwchlwytho'n union {{#limit}} o ffeiliau",
73
+ "filesLength_other": "Rhaid i chi uwchlwytho'n union {{#limit}} o ffeiliau"
18
74
  },
19
75
 
20
76
  "errors": {
@@ -29,7 +85,14 @@
29
85
  "continue": "Parhau",
30
86
  "saveAndExit": "Cadw a gadael",
31
87
  "draft": "ddrafft",
32
- "live": "fyw"
88
+ "live": "fyw",
89
+ "or": "neu",
90
+ "and": "a",
91
+ "england": "Lloegr",
92
+ "wales": "Cymru",
93
+ "northern-ireland": "Gogledd Iwerddon",
94
+ "scotland": "Yr Alban",
95
+ "sendFeedback": "Anfon adborth"
33
96
  },
34
97
 
35
98
  "pages": {
@@ -60,6 +123,12 @@
60
123
  "totalAmount": "Cyfanswm",
61
124
  "reference": "Cyfeirnod",
62
125
  "dateOfPayment": "Dyddiad talu",
126
+ "fileUpload_zero": "Ni uwchlwythwyd unrhyw ffeiliau",
127
+ "fileUpload_one": "Uwchlwythwyd [[count]] ffeil",
128
+ "fileUpload_two": "Uwchlwythwyd dwy feil",
129
+ "fileUpload_few": "Uwchlwythwyd [[count]] ffeil",
130
+ "fileUpload_many": "Uwchlwythwyd [[count]] o ffeiliau",
131
+ "fileUpload_other": "Uwchlwythwyd [[count]] ffeil",
63
132
  "submissionFailed": "Roedd problem ac ni chyflwynwyd eich ffurflen. Ceisiwch gyflwyno'r ffurflen eto",
64
133
  "submissionFailedContactSuffix": " neu gallwch [[contactUsLink]] a dyfynnu'ch cyfeirnod i drefnu ad-daliad",
65
134
  "contactUsLinkText": "cysylltu â ni (yn agor mewn tab newydd)",
@@ -79,17 +148,40 @@
79
148
  "change": "Newid",
80
149
  "notProvided": "Heb ei ddarparu",
81
150
  "visuallyHiddenItem": "eitem [[index]]",
151
+ "pageTitle_zero": "Nid ydych wedi ychwanegu unrhyw atebion",
82
152
  "pageTitle_one": "Rydych wedi ychwanegu [[count]] ateb",
153
+ "pageTitle_two": "Rydych wedi ychwanegu dau ateb",
154
+ "pageTitle_few": "Rydych wedi ychwanegu [[count]] ateb",
155
+ "pageTitle_many": "Rydych wedi ychwanegu [[count]] o atebion",
83
156
  "pageTitle_other": "Rydych wedi ychwanegu [[count]] ateb",
157
+ "tooMany_zero": "Ni allwch ychwanegu unrhyw atebion",
84
158
  "tooMany_one": "Dim ond hyd at [[count]] ateb y gallwch ei ychwanegu",
159
+ "tooMany_two": "Dim ond hyd at ddau gateb y gallwch eu hychwanegu",
160
+ "tooMany_few": "Dim ond hyd at [[count]] ateb y gallwch eu hychwanegu",
161
+ "tooMany_many": "Dim ond hyd at [[count]] o atebion y gallwch eu hychwanegu",
85
162
  "tooMany_other": "Dim ond hyd at [[count]] ateb y gallwch eu hychwanegu",
163
+ "tooFew_zero": "Rhaid i chi ychwanegu atebion",
86
164
  "tooFew_one": "Rhaid i chi ychwanegu o leiaf [[count]] ateb",
165
+ "tooFew_two": "Rhaid i chi ychwanegu o leiaf ddau gateb",
166
+ "tooFew_few": "Rhaid i chi ychwanegu o leiaf [[count]] ateb",
167
+ "tooFew_many": "Rhaid i chi ychwanegu o leiaf [[count]] o atebion",
87
168
  "tooFew_other": "Rhaid i chi ychwanegu o leiaf [[count]] ateb"
88
169
  },
89
170
 
90
171
  "fileUpload": {
91
172
  "upload": "Uwchlwytho ffeil",
92
- "maxFilesReached": "Rydych wedi cyrraedd nifer uchaf y ffeiliau. Tynnwch ffeil i uwchlwytho rhagor."
173
+ "maxFilesReached": "Rydych wedi cyrraedd nifer uchaf y ffeiliau. Tynnwch ffeil i uwchlwytho rhagor.",
174
+ "remove": "Tynnu",
175
+ "removeFileTitle": "Ydych chi'n siŵr eich bod chi eisiau dileu'r ffeil hon?",
176
+ "removeFileBody": "Ni allwch adfer ffeiliau a dynnwyd.",
177
+ "removeFileButton": "Dileu ffeil",
178
+ "cancel": "Canslo",
179
+ "FILE_VIRUS": "Mae'r ffeil a ddewiswyd yn cynnwys firws",
180
+ "FILE_EMPTY": "Mae'r ffeil a ddewiswyd yn wag",
181
+ "FILE_TOO_LARGE": "Rhaid i'r ffeil a ddewiswyd fod yn llai na [[maxFileSizeFormatted]]",
182
+ "FILE_INVALID_TYPE": "Rhaid i'r ffeil a ddewiswyd fod yn [[fileExtensions]]",
183
+ "FILE_UPLOAD_FAILED": "Ni ellid uwchlwytho'r ffeil a ddewiswyd - rhowch gynnig arall arni",
184
+ "FILE_ERROR_UNKNOWN": "Gwall anhysbys"
93
185
  },
94
186
 
95
187
  "exit": {
@@ -111,9 +203,20 @@
111
203
  "body": "Os hoffech dderbyn e-bost prawf, [[link]] yr hoffech i gyflwyniadau ffurflen fynd iddo.",
112
204
  "linkText": "nodwch y cyfeiriad e-bost (yn agor mewn tab newydd)"
113
205
  },
206
+ "bannerTitle": "Pwysig",
114
207
  "bannerForce": "Rhagolwg o ffurflen [[previewMode]] yw hon. Peidiwch â rhoi gwybodaeth bersonol.",
115
208
  "bannerText": "Dyma ragolwg o dudalen ffurflen [[previewMode]] rydych chi'n ei golygu.",
116
209
  "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."
210
+ },
211
+
212
+ "formUnavailable": {
213
+ "title": "Mae'n ddrwg gennyf, nid yw'r ffurflen hon ar gael",
214
+ "subHeading": "Nid yw '[[formTitle]]' ar gael mwyach.",
215
+ "contactDetailsHeading": "Manylion cyswllt ar gyfer [[organisationName]]",
216
+ "telephone": "Ffôn",
217
+ "callCharges": "Dysgwch am gostau galwadau",
218
+ "email": "E-bost",
219
+ "onlineContactForm": "Ffurflen gyswllt ar-lein"
117
220
  }
118
221
  },
119
222
 
@@ -134,7 +237,11 @@
134
237
  "findAnAddressInstead": "dod o hyd i gyfeiriad yn lle hynny",
135
238
  "noAddressFoundTitle": "Ni chanfuwyd cyfeiriad",
136
239
  "noAddressFoundBody": "Ni allem ddod o hyd i gyfeiriad cyfatebol",
240
+ "addressFound_zero": "Ni chanfuwyd unrhyw gyfeiriadau ar gyfer",
137
241
  "addressFound_one": "Canfuwyd [[count]] cyfeiriad ar gyfer",
242
+ "addressFound_two": "Canfuwyd dau gyfeiriad ar gyfer",
243
+ "addressFound_few": "Canfuwyd [[count]] chyfeiriad ar gyfer",
244
+ "addressFound_many": "Canfuwyd [[count]] o gyfeiriadau ar gyfer",
138
245
  "addressFound_other": "Canfuwyd [[count]] cyfeiriad ar gyfer",
139
246
  "validation": {
140
247
  "invalidPostcode": "Nodwch god post dilys neu nodwch gyfeiriad â llaw",
@@ -199,7 +306,8 @@
199
306
  "eastingDigits": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng 1 a 6 digid",
200
307
  "northingDigits": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng 1 a 7 digid",
201
308
  "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]]"
309
+ "northingRange": "Rhaid i {{#label}} ar gyfer [[fieldLabel]] fod rhwng [[min]] a [[max]]",
310
+ "wrongCountry": "Rhaid i leoliad fod y tu mewn i [[country]]"
203
311
  },
204
312
 
205
313
  "nationalGridField": {
@@ -215,14 +323,23 @@
215
323
  },
216
324
 
217
325
  "locationFieldBase": {
218
- "howToFind": "Sut i ddod o hyd i fanylion lleoliad"
326
+ "howToFind": "Sut i ddod o hyd i fanylion lleoliad",
327
+ "map": {
328
+ "helpPanel": {
329
+ "label": "Sut i ddefnyddio'r map hwn",
330
+ "point1": "Chwilio am sir, lle neu god post",
331
+ "point2": "Defnyddiwch yr eiconau + a - i chwyddo i mewn ac allan",
332
+ "point3": "Defnyddiwch lyfliwr neu allweddlon i ganolbwyntio'r pwynt yn y lleoliad",
333
+ "point4": "Cliciwch i ychwanegu'r lleoliad i'r map"
334
+ }
335
+ }
219
336
  },
220
337
 
221
338
  "yesNoField": {
222
339
  "yes": "Ie",
223
- "no": "Na",
340
+ "no": "Nage",
224
341
  "validation": {
225
- "selectYesNoRequired": "{{#label}} - dewiswch ie neu na"
342
+ "selectYesNoRequired": "{{#label}} - dewiswch ie neu nage"
226
343
  }
227
344
  },
228
345
 
@@ -236,8 +353,53 @@
236
353
  },
237
354
 
238
355
  "geospatialField": {
356
+ "added_zero": "Ni ychwanegwyd unrhyw leoliadau",
239
357
  "added_one": "Ychwanegwyd [[count]] lleoliad",
358
+ "added_two": "Ychwanegwyd dau leoliad",
359
+ "added_few": "Ychwanegwyd [[count]] lleoliad",
360
+ "added_many": "Ychwanegwyd [[count]] o leoliadau",
240
361
  "added_other": "Ychwanegwyd [[count]] lleoliad",
362
+ "map": {
363
+ "helpPanel": {
364
+ "label": "Sut i ddefnyddio'r map hwn",
365
+ "ledeIntro": "Gallwch ychwanegu",
366
+ "ledeOutro": "i'r map.",
367
+ "lineText": "llinell",
368
+ "shapeText": "siâp",
369
+ "lineOrShapeText": "llinell neu siâp",
370
+ "typesPhrasePoint": "pwyntiau",
371
+ "typesPhraseLine": "lliniau",
372
+ "typesPhraseShape": "siâpiau",
373
+ "typesPhraseOr": "neu",
374
+ "point1": "Chwilio am sir, lle neu god post",
375
+ "point2": "Defnyddiwch yr eiconau + a - i chwyddo i mewn ac allan",
376
+ "point3": "Cliciwch ddwywaith, neu dewiswch 'Wedi gorffen', pan fyddwch wedi",
377
+ "point4": "Rhowch enw i'r lleoliad"
378
+ },
379
+ "typeDescriptions": {
380
+ "point": "Pwynt",
381
+ "line": "Llinell",
382
+ "polygon": "Siâp"
383
+ },
384
+ "buttons": {
385
+ "point": "Ychwanegu pwynt",
386
+ "line": "Ychwanegu llinell",
387
+ "polygon": "Ychwanegu siâp"
388
+ },
389
+ "itemLabel1": "Lleoliad",
390
+ "itemLabel2": "disgrifiad",
391
+ "itemUpdateLink": "Diweddaru",
392
+ "itemDeleteLink": "Dileu",
393
+ "itemFocusLink": "Dangos",
394
+ "itemVisuallyHidden": "lleoliad",
395
+ "details": {
396
+ "summary": "Cyfesurynnau",
397
+ "type": "Math",
398
+ "centroidGridReference": "Canol cyfeirnod grid",
399
+ "firstPointGridReference": "Cyfeirnod grid y pwynt cyntaf",
400
+ "detailedCoordinates": "Cyfesurynnau manwl"
401
+ }
402
+ },
241
403
  "validation": {
242
404
  "descriptionRequired": "Rhowch ddisgrifiad ar gyfer lleoliad [[count]]",
243
405
  "wrongCountry": "Rhaid i leoliad [[count]] fod y tu mewn i [[country]]"
@@ -245,7 +407,7 @@
245
407
  },
246
408
 
247
409
  "paymentField": {
248
- "detailsRequired": "Angen manylion talu",
410
+ "detailsRequired": "Angen talu",
249
411
  "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
412
  "addPaymentDetails": "Ychwanegu manylion talu",
251
413
  "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.",
@@ -261,11 +423,32 @@
261
423
  },
262
424
 
263
425
  "fileUploadField": {
426
+ "uploading": "Yn uwchlwytho…",
264
427
  "uploaded": "Wedi'i uwchlwytho",
265
428
  "uploadFailed": "Roedd problem gyda'ch ffeiliau a uwchlwythwyd. Uwchlwythwch nhw eto cyn cyflwyno'r ffurflen.",
266
429
  "uploadedFilesHeading": "Ffeiliau a uwchlwythwyd",
430
+ "filesCount_zero": "Uwchlwythwyd [[count]] o ffeiliau",
267
431
  "filesCount_one": "Uwchlwythwyd [[count]] ffeil",
268
- "filesCount_other": "Uwchlwythwyd [[count]] ffeil"
432
+ "filesCount_two": "Uwchlwythwyd [[count]] ffeil",
433
+ "filesCount_few": "Uwchlwythwyd [[count]] ffeil",
434
+ "filesCount_many": "Uwchlwythwyd [[count]] o ffeiliau",
435
+ "filesCount_other": "Uwchlwythwyd [[count]] ffeil",
436
+ "chooseFile": "Dewiswch ffeil",
437
+ "dropFile": "neu ollwng ffeil",
438
+ "noFileChosen": "Dim ffeil wedi'i dewis"
439
+ },
440
+
441
+ "characterCount": {
442
+ "_comment": "Note the use of %{count} instead of [[count]]. This is because we are passing to the govuk template, not passing to Joi",
443
+ "underLimit": {
444
+ "one": "Mae gennych %{count} nod ar ôl",
445
+ "other": "Mae gennych %{count} nod ar ôl"
446
+ },
447
+ "atLimit": "Mae gennych 0 nod ar ôl",
448
+ "overLimit": {
449
+ "one": "Mae gennych %{count} nod yn ormod",
450
+ "other": "Mae gennych %{count} nod yn ormod"
451
+ }
269
452
  }
270
453
  }
271
454
  }