defra_ruby_template 5.4.0 → 5.11.0

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 (428) hide show
  1. checksums.yaml +4 -4
  2. data/app/views/layouts/defra_ruby_template.html.erb +43 -23
  3. data/lib/defra_ruby_template/version.rb +1 -1
  4. data/lib/defra_ruby_template.rb +3 -8
  5. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +882 -492
  6. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js.map +1 -1
  7. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +877 -492
  8. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs.map +1 -1
  9. data/node_modules/govuk-frontend/dist/govuk/all.mjs +5 -0
  10. data/node_modules/govuk-frontend/dist/govuk/all.mjs.map +1 -1
  11. data/node_modules/govuk-frontend/dist/govuk/all.scss +6 -0
  12. data/node_modules/govuk-frontend/dist/govuk/all.scss.map +1 -1
  13. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.svg +1 -0
  14. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/favicon.ico +0 -0
  15. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/favicon.svg +1 -0
  16. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-crest.svg +1 -0
  17. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-180.png +0 -0
  18. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-192.png +0 -0
  19. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-512.png +0 -0
  20. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-mask.svg +1 -0
  21. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-opengraph-image.png +0 -0
  22. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/manifest.json +39 -0
  23. data/node_modules/govuk-frontend/dist/govuk/common/closest-attribute-value.mjs.map +1 -1
  24. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs +169 -0
  25. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs.map +1 -0
  26. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +1 -1
  27. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +20 -83
  28. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs.map +1 -1
  29. data/node_modules/govuk-frontend/dist/govuk/component.mjs +60 -0
  30. data/node_modules/govuk-frontend/dist/govuk/component.mjs.map +1 -0
  31. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss +1 -0
  32. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss.map +1 -1
  33. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_index.scss +35 -31
  34. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_index.scss.map +1 -1
  35. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +296 -195
  36. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js.map +1 -1
  37. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +295 -194
  38. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs.map +1 -1
  39. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +88 -110
  40. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs.map +1 -1
  41. data/node_modules/govuk-frontend/dist/govuk/components/accordion/fixtures.json +16 -3
  42. data/node_modules/govuk-frontend/dist/govuk/components/back-link/fixtures.json +25 -15
  43. data/node_modules/govuk-frontend/dist/govuk/components/back-link/template-with-custom-link.html +1 -0
  44. data/node_modules/govuk-frontend/dist/govuk/components/back-link/template.njk +2 -2
  45. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/fixtures.json +53 -15
  46. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/macro-options.json +6 -0
  47. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-default.html +2 -2
  48. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-inverse.html +2 -2
  49. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-collapse-on-mobile.html +2 -2
  50. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-last-breadcrumb-as-current-page.html +2 -2
  51. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-multiple-levels.html +2 -2
  52. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-one-level.html +2 -2
  53. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-without-the-home-section.html +2 -2
  54. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template.njk +2 -2
  55. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +217 -106
  56. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js.map +1 -1
  57. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +216 -105
  58. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs.map +1 -1
  59. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +9 -22
  60. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs.map +1 -1
  61. data/node_modules/govuk-frontend/dist/govuk/components/button/fixtures.json +38 -0
  62. data/node_modules/govuk-frontend/dist/govuk/components/button/macro-options.json +2 -1
  63. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_index.scss +12 -4
  64. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_index.scss.map +1 -1
  65. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +256 -145
  66. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js.map +1 -1
  67. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +255 -144
  68. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs.map +1 -1
  69. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +29 -34
  70. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs.map +1 -1
  71. data/node_modules/govuk-frontend/dist/govuk/components/character-count/fixtures.json +80 -1
  72. data/node_modules/govuk-frontend/dist/govuk/components/character-count/macro-options.json +6 -6
  73. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template-with-error.html +12 -0
  74. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template-with-hint-and-error.html +15 -0
  75. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template.njk +5 -4
  76. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_index.scss +6 -1
  77. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_index.scss.map +1 -1
  78. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +96 -50
  79. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js.map +1 -1
  80. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +95 -49
  81. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs.map +1 -1
  82. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +9 -18
  83. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs.map +1 -1
  84. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/fixtures.json +88 -1
  85. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/template-small-with-divider-and-none.html +34 -0
  86. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_index.scss +23 -14
  87. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_index.scss.map +1 -1
  88. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/fixtures.json +23 -0
  89. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_index.scss +2 -2
  90. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_index.scss.map +1 -1
  91. data/node_modules/govuk-frontend/dist/govuk/components/date-input/fixtures.json +27 -0
  92. data/node_modules/govuk-frontend/dist/govuk/components/date-input/macro-options.json +2 -2
  93. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +7 -2
  94. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss.map +1 -1
  95. data/node_modules/govuk-frontend/dist/govuk/components/details/fixtures.json +10 -0
  96. data/node_modules/govuk-frontend/dist/govuk/components/error-message/fixtures.json +9 -0
  97. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_index.scss +4 -0
  98. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_index.scss.map +1 -1
  99. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +238 -127
  100. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js.map +1 -1
  101. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +237 -126
  102. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs.map +1 -1
  103. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +10 -22
  104. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs.map +1 -1
  105. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/fixtures.json +19 -0
  106. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +218 -107
  107. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js.map +1 -1
  108. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +217 -106
  109. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs.map +1 -1
  110. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +10 -22
  111. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs.map +1 -1
  112. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/fixtures.json +4 -0
  113. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_index.scss +3 -5
  114. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_index.scss.map +1 -1
  115. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/fixtures.json +18 -0
  116. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_index.scss +175 -9
  117. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_index.scss.map +1 -1
  118. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.js +744 -0
  119. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.js.map +1 -0
  120. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.mjs +736 -0
  121. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.mjs.map +1 -0
  122. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.mjs +257 -0
  123. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.mjs.map +1 -0
  124. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/fixtures.json +220 -16
  125. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/macro-options.json +52 -3
  126. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-direct-media-capture.html +6 -0
  127. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-image-files-only.html +6 -0
  128. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-multiple-files.html +6 -0
  129. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-disabled.html +6 -0
  130. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced-disabled.html +13 -0
  131. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced-with-error-message-and-hint.html +16 -0
  132. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced.html +10 -0
  133. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-translated.html +10 -0
  134. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template.njk +42 -5
  135. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss +61 -19
  136. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss.map +1 -1
  137. data/node_modules/govuk-frontend/dist/govuk/components/footer/fixtures.json +34 -0
  138. data/node_modules/govuk-frontend/dist/govuk/components/footer/macro-options.json +6 -0
  139. data/node_modules/govuk-frontend/dist/govuk/components/footer/template.njk +10 -0
  140. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss +223 -21
  141. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss.map +1 -1
  142. data/node_modules/govuk-frontend/dist/govuk/components/header/fixtures.json +78 -32
  143. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +90 -43
  144. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js.map +1 -1
  145. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +89 -42
  146. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs.map +1 -1
  147. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +10 -18
  148. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs.map +1 -1
  149. data/node_modules/govuk-frontend/dist/govuk/components/header/macro-options.json +31 -12
  150. data/node_modules/govuk-frontend/dist/govuk/components/header/template-default.html +20 -12
  151. data/node_modules/govuk-frontend/dist/govuk/components/header/template-full-width-with-navigation.html +21 -15
  152. data/node_modules/govuk-frontend/dist/govuk/components/header/template-full-width.html +21 -15
  153. data/node_modules/govuk-frontend/dist/govuk/components/header/template-navigation-item-with-html.html +20 -12
  154. data/node_modules/govuk-frontend/dist/govuk/components/header/template-navigation-item-with-text-without-link.html +20 -12
  155. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-menu-button-label.html +20 -12
  156. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-menu-button-text.html +20 -12
  157. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-navigation-label.html +20 -12
  158. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-full-width-border.html +30 -0
  159. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-large-navigation.html +20 -12
  160. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-navigation.html +20 -12
  161. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-product-name.html +21 -15
  162. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name-and-navigation.html +20 -12
  163. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name-but-no-service-url.html +20 -12
  164. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name.html +20 -12
  165. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-st-edwards-crown.html +10 -12
  166. data/node_modules/govuk-frontend/dist/govuk/components/header/template.njk +11 -41
  167. data/node_modules/govuk-frontend/dist/govuk/components/hint/fixtures.json +6 -0
  168. data/node_modules/govuk-frontend/dist/govuk/components/input/_index.scss +7 -4
  169. data/node_modules/govuk-frontend/dist/govuk/components/input/_index.scss.map +1 -1
  170. data/node_modules/govuk-frontend/dist/govuk/components/input/fixtures.json +97 -27
  171. data/node_modules/govuk-frontend/dist/govuk/components/input/macro-options.json +6 -6
  172. data/node_modules/govuk-frontend/dist/govuk/components/input/template-default.html +2 -2
  173. data/node_modules/govuk-frontend/dist/govuk/components/input/template-disabled.html +6 -0
  174. data/node_modules/govuk-frontend/dist/govuk/components/input/template-with-error-and-hint.html +12 -0
  175. data/node_modules/govuk-frontend/dist/govuk/components/input/template-with-error-message.html +2 -5
  176. data/node_modules/govuk-frontend/dist/govuk/components/input/template.njk +5 -4
  177. data/node_modules/govuk-frontend/dist/govuk/components/inset-text/fixtures.json +6 -0
  178. data/node_modules/govuk-frontend/dist/govuk/components/label/fixtures.json +17 -0
  179. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_index.scss +3 -2
  180. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_index.scss.map +1 -1
  181. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/fixtures.json +24 -0
  182. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +238 -127
  183. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js.map +1 -1
  184. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +237 -126
  185. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs.map +1 -1
  186. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +10 -22
  187. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs.map +1 -1
  188. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_index.scss +24 -37
  189. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_index.scss.map +1 -1
  190. data/node_modules/govuk-frontend/dist/govuk/components/pagination/fixtures.json +15 -0
  191. data/node_modules/govuk-frontend/dist/govuk/components/pagination/macro-options.json +4 -4
  192. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss +13 -9
  193. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss.map +1 -1
  194. data/node_modules/govuk-frontend/dist/govuk/components/panel/fixtures.json +9 -0
  195. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss +12 -9
  196. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss.map +1 -1
  197. data/node_modules/govuk-frontend/dist/govuk/components/password-input/fixtures.json +27 -2
  198. data/node_modules/govuk-frontend/dist/govuk/components/password-input/macro-options.json +3 -3
  199. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +220 -110
  200. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js.map +1 -1
  201. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +219 -109
  202. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs.map +1 -1
  203. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +12 -25
  204. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs.map +1 -1
  205. data/node_modules/govuk-frontend/dist/govuk/components/password-input/template-default.html +3 -3
  206. data/node_modules/govuk-frontend/dist/govuk/components/password-input/template.njk +4 -2
  207. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_index.scss +0 -8
  208. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_index.scss.map +1 -1
  209. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/fixtures.json +7 -0
  210. data/node_modules/govuk-frontend/dist/govuk/components/radios/_index.scss +7 -5
  211. data/node_modules/govuk-frontend/dist/govuk/components/radios/_index.scss.map +1 -1
  212. data/node_modules/govuk-frontend/dist/govuk/components/radios/fixtures.json +51 -5
  213. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +96 -50
  214. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js.map +1 -1
  215. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +95 -49
  216. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs.map +1 -1
  217. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +9 -18
  218. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs.map +1 -1
  219. data/node_modules/govuk-frontend/dist/govuk/components/radios/template-small-with-a-divider.html +1 -1
  220. data/node_modules/govuk-frontend/dist/govuk/components/radios/template-with-a-divider.html +1 -1
  221. data/node_modules/govuk-frontend/dist/govuk/components/select/_index.scss +5 -5
  222. data/node_modules/govuk-frontend/dist/govuk/components/select/_index.scss.map +1 -1
  223. data/node_modules/govuk-frontend/dist/govuk/components/select/fixtures.json +43 -9
  224. data/node_modules/govuk-frontend/dist/govuk/components/select/macro-options.json +2 -2
  225. data/node_modules/govuk-frontend/dist/govuk/components/select/template-id.html +7 -0
  226. data/node_modules/govuk-frontend/dist/govuk/components/select/template.njk +6 -4
  227. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/README.md +15 -0
  228. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +187 -0
  229. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss.map +1 -0
  230. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
  231. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss.map +1 -0
  232. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/fixtures.json +515 -0
  233. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro-options.json +138 -0
  234. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro.njk +3 -0
  235. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +229 -0
  236. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js.map +1 -0
  237. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +221 -0
  238. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs.map +1 -0
  239. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
  240. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs.map +1 -0
  241. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-default.html +57 -0
  242. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-html-navigation-items.html +49 -0
  243. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-large-navigation.html +153 -0
  244. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-long-service-name.html +20 -0
  245. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-a-current-item.html +58 -0
  246. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-an-active-item.html +58 -0
  247. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-non-link-navigation-items.html +49 -0
  248. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-link.html +20 -0
  249. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name-and-navigation.html +63 -0
  250. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name.html +18 -0
  251. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template.njk +103 -0
  252. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_index.scss +6 -4
  253. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_index.scss.map +1 -1
  254. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/fixtures.json +9 -0
  255. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +95 -48
  256. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js.map +1 -1
  257. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +94 -47
  258. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs.map +1 -1
  259. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +15 -23
  260. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs.map +1 -1
  261. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_index.scss +14 -22
  262. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_index.scss.map +1 -1
  263. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/fixtures.json +174 -1
  264. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/template-as-a-summary-card-extreme.html +106 -0
  265. data/node_modules/govuk-frontend/dist/govuk/components/table/fixtures.json +22 -1
  266. data/node_modules/govuk-frontend/dist/govuk/components/tabs/fixtures.json +15 -1
  267. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +95 -53
  268. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js.map +1 -1
  269. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +94 -52
  270. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs.map +1 -1
  271. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +15 -28
  272. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs.map +1 -1
  273. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss +11 -8
  274. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss.map +1 -1
  275. data/node_modules/govuk-frontend/dist/govuk/components/tag/fixtures.json +14 -0
  276. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss +12 -10
  277. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss.map +1 -1
  278. data/node_modules/govuk-frontend/dist/govuk/components/task-list/fixtures.json +44 -0
  279. data/node_modules/govuk-frontend/dist/govuk/components/task-list/template-with-empty-values.html +27 -0
  280. data/node_modules/govuk-frontend/dist/govuk/components/task-list/template.njk +1 -1
  281. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_index.scss +3 -3
  282. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_index.scss.map +1 -1
  283. data/node_modules/govuk-frontend/dist/govuk/components/textarea/fixtures.json +32 -1
  284. data/node_modules/govuk-frontend/dist/govuk/components/textarea/macro-options.json +3 -3
  285. data/node_modules/govuk-frontend/dist/govuk/components/textarea/template.njk +6 -4
  286. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss +6 -5
  287. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss.map +1 -1
  288. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/fixtures.json +8 -0
  289. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +1 -1
  290. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss.map +1 -1
  291. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +16 -3
  292. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs.map +1 -1
  293. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css +2 -2
  294. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css.map +1 -1
  295. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -1
  296. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js.map +1 -1
  297. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss +55 -8
  298. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss.map +1 -1
  299. data/node_modules/govuk-frontend/dist/govuk/helpers/_focused.scss +14 -4
  300. data/node_modules/govuk-frontend/dist/govuk/helpers/_focused.scss.map +1 -1
  301. data/node_modules/govuk-frontend/dist/govuk/helpers/_grid.scss +1 -1
  302. data/node_modules/govuk-frontend/dist/govuk/helpers/_grid.scss.map +1 -1
  303. data/node_modules/govuk-frontend/dist/govuk/helpers/_links.scss +2 -2
  304. data/node_modules/govuk-frontend/dist/govuk/helpers/_links.scss.map +1 -1
  305. data/node_modules/govuk-frontend/dist/govuk/helpers/_shape-arrow.scss +1 -1
  306. data/node_modules/govuk-frontend/dist/govuk/helpers/_shape-arrow.scss.map +1 -1
  307. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss +18 -1
  308. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss.map +1 -1
  309. data/node_modules/govuk-frontend/dist/govuk/helpers/_visually-hidden.scss +30 -62
  310. data/node_modules/govuk-frontend/dist/govuk/helpers/_visually-hidden.scss.map +1 -1
  311. data/node_modules/govuk-frontend/dist/govuk/i18n.mjs.map +1 -1
  312. data/node_modules/govuk-frontend/dist/govuk/init.mjs +90 -24
  313. data/node_modules/govuk-frontend/dist/govuk/init.mjs.map +1 -1
  314. data/node_modules/govuk-frontend/dist/govuk/macros/logo.njk +78 -0
  315. data/node_modules/govuk-frontend/dist/govuk/objects/_template.scss +5 -1
  316. data/node_modules/govuk-frontend/dist/govuk/objects/_template.scss.map +1 -1
  317. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss +5 -1
  318. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss.map +1 -1
  319. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-applied.scss +39 -1
  320. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-applied.scss.map +1 -1
  321. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +244 -10
  322. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss.map +1 -1
  323. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +5 -10
  324. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss.map +1 -1
  325. data/node_modules/govuk-frontend/dist/govuk/template.njk +20 -9
  326. data/node_modules/govuk-frontend/dist/govuk/tools/_index.scss +1 -0
  327. data/node_modules/govuk-frontend/dist/govuk/tools/_index.scss.map +1 -1
  328. data/node_modules/govuk-frontend/dist/govuk/tools/_rebrand.scss +65 -0
  329. data/node_modules/govuk-frontend/dist/govuk/tools/_rebrand.scss.map +1 -0
  330. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/functions.js +25 -0
  331. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.scss +1 -1
  332. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.scss.map +1 -1
  333. data/node_modules/govuk-frontend/govuk-prototype-kit.config.json +8 -1
  334. data/node_modules/govuk-frontend/package.json +16 -16
  335. data/spec/spec_helper.rb +98 -0
  336. data/spec/tasks/assets_spec.rb +53 -0
  337. data/vendor/assets/assets/fonts/bold-affa96571d-v2.woff +0 -0
  338. data/vendor/assets/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  339. data/vendor/assets/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  340. data/vendor/assets/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  341. data/vendor/assets/assets/images/favicon.ico +0 -0
  342. data/vendor/assets/assets/images/favicon.svg +1 -0
  343. data/vendor/assets/assets/images/govuk-crest.svg +1 -0
  344. data/vendor/assets/assets/images/govuk-icon-180.png +0 -0
  345. data/vendor/assets/assets/images/govuk-icon-192.png +0 -0
  346. data/vendor/assets/assets/images/govuk-icon-512.png +0 -0
  347. data/vendor/assets/assets/images/govuk-icon-mask.svg +1 -0
  348. data/vendor/assets/assets/images/govuk-opengraph-image.png +0 -0
  349. data/vendor/assets/assets/manifest.json +39 -0
  350. data/vendor/assets/assets/rebrand/images/favicon.ico +0 -0
  351. data/vendor/assets/assets/rebrand/images/favicon.svg +1 -0
  352. data/vendor/assets/assets/rebrand/images/govuk-crest.svg +1 -0
  353. data/vendor/assets/assets/rebrand/images/govuk-icon-180.png +0 -0
  354. data/vendor/assets/assets/rebrand/images/govuk-icon-192.png +0 -0
  355. data/vendor/assets/assets/rebrand/images/govuk-icon-512.png +0 -0
  356. data/vendor/assets/assets/rebrand/images/govuk-icon-mask.svg +1 -0
  357. data/vendor/assets/assets/rebrand/images/govuk-opengraph-image.png +0 -0
  358. data/vendor/assets/assets/rebrand/manifest.json +39 -0
  359. data/vendor/assets/images/govuk-crest.svg +1 -0
  360. data/vendor/assets/javascripts/defra_ruby_template.js +882 -492
  361. data/vendor/assets/stylesheets/all.scss +6 -0
  362. data/vendor/assets/stylesheets/components/_index.scss +1 -0
  363. data/vendor/assets/stylesheets/components/accordion/_index.scss +35 -31
  364. data/vendor/assets/stylesheets/components/character-count/_index.scss +12 -4
  365. data/vendor/assets/stylesheets/components/checkboxes/_index.scss +6 -1
  366. data/vendor/assets/stylesheets/components/cookie-banner/_index.scss +23 -14
  367. data/vendor/assets/stylesheets/components/date-input/_index.scss +2 -2
  368. data/vendor/assets/stylesheets/components/details/_index.scss +7 -2
  369. data/vendor/assets/stylesheets/components/error-summary/_index.scss +4 -0
  370. data/vendor/assets/stylesheets/components/fieldset/_index.scss +3 -5
  371. data/vendor/assets/stylesheets/components/file-upload/_index.scss +175 -9
  372. data/vendor/assets/stylesheets/components/footer/_index.scss +61 -19
  373. data/vendor/assets/stylesheets/components/header/_index.scss +223 -21
  374. data/vendor/assets/stylesheets/components/input/_index.scss +7 -4
  375. data/vendor/assets/stylesheets/components/notification-banner/_index.scss +3 -2
  376. data/vendor/assets/stylesheets/components/pagination/_index.scss +24 -37
  377. data/vendor/assets/stylesheets/components/panel/_index.scss +13 -9
  378. data/vendor/assets/stylesheets/components/password-input/_index.scss +12 -9
  379. data/vendor/assets/stylesheets/components/phase-banner/_index.scss +0 -8
  380. data/vendor/assets/stylesheets/components/radios/_index.scss +7 -5
  381. data/vendor/assets/stylesheets/components/select/_index.scss +5 -5
  382. data/vendor/assets/stylesheets/components/service-navigation/_index.scss +187 -0
  383. data/vendor/assets/stylesheets/components/service-navigation/_service-navigation.scss +4 -0
  384. data/vendor/assets/stylesheets/components/skip-link/_index.scss +6 -4
  385. data/vendor/assets/stylesheets/components/summary-list/_index.scss +14 -22
  386. data/vendor/assets/stylesheets/components/tag/_index.scss +11 -8
  387. data/vendor/assets/stylesheets/components/task-list/_index.scss +12 -10
  388. data/vendor/assets/stylesheets/components/textarea/_index.scss +3 -3
  389. data/vendor/assets/stylesheets/components/warning-text/_index.scss +6 -5
  390. data/vendor/assets/stylesheets/core/_govuk-frontend-properties.scss +1 -1
  391. data/vendor/assets/stylesheets/defra_ruby_template.scss +6 -0
  392. data/vendor/assets/stylesheets/govuk-frontend.min.css +2 -2
  393. data/vendor/assets/stylesheets/helpers/_colour.scss +55 -8
  394. data/vendor/assets/stylesheets/helpers/_focused.scss +14 -4
  395. data/vendor/assets/stylesheets/helpers/_grid.scss +1 -1
  396. data/vendor/assets/stylesheets/helpers/_links.scss +2 -2
  397. data/vendor/assets/stylesheets/helpers/_shape-arrow.scss +1 -1
  398. data/vendor/assets/stylesheets/helpers/_typography.scss +18 -1
  399. data/vendor/assets/stylesheets/helpers/_visually-hidden.scss +30 -62
  400. data/vendor/assets/stylesheets/objects/_template.scss +5 -1
  401. data/vendor/assets/stylesheets/overrides/_typography.scss +5 -1
  402. data/vendor/assets/stylesheets/settings/_colours-applied.scss +39 -1
  403. data/vendor/assets/stylesheets/settings/_colours-organisations.scss +244 -10
  404. data/vendor/assets/stylesheets/settings/_typography-responsive.scss +5 -10
  405. data/vendor/assets/stylesheets/tools/_index.scss +1 -0
  406. data/vendor/assets/stylesheets/tools/_rebrand.scss +65 -0
  407. metadata +100 -24
  408. data/.github/dependabot.yml +0 -14
  409. data/.github/workflows/ci.yml +0 -31
  410. data/.gitignore +0 -8
  411. data/.rspec +0 -1
  412. data/.rubocop.yml +0 -3
  413. data/.ruby-version +0 -1
  414. data/Gemfile +0 -9
  415. data/Gemfile.lock +0 -58
  416. data/defra_ruby_template.gemspec +0 -35
  417. data/node_modules/.package-lock.json +0 -16
  418. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest-2x.png +0 -0
  419. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.png +0 -0
  420. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +0 -18
  421. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs.map +0 -1
  422. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +0 -31
  423. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs.map +0 -1
  424. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-with-value.html +0 -6
  425. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +0 -16
  426. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs.map +0 -1
  427. data/package-lock.json +0 -24
  428. data/package.json +0 -29
@@ -0,0 +1,736 @@
1
+ function closestAttributeValue($element, attributeName) {
2
+ const $closestElementWithAttribute = $element.closest(`[${attributeName}]`);
3
+ return $closestElementWithAttribute ? $closestElementWithAttribute.getAttribute(attributeName) : null;
4
+ }
5
+
6
+ function isInitialised($root, moduleName) {
7
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
8
+ }
9
+
10
+ /**
11
+ * Checks if GOV.UK Frontend is supported on this page
12
+ *
13
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
14
+ * won't be supported.
15
+ *
16
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
17
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
18
+ */
19
+ function isSupported($scope = document.body) {
20
+ if (!$scope) {
21
+ return false;
22
+ }
23
+ return $scope.classList.contains('govuk-frontend-supported');
24
+ }
25
+ function isArray(option) {
26
+ return Array.isArray(option);
27
+ }
28
+ function isObject(option) {
29
+ return !!option && typeof option === 'object' && !isArray(option);
30
+ }
31
+ function formatErrorMessage(Component, message) {
32
+ return `${Component.moduleName}: ${message}`;
33
+ }
34
+ /**
35
+ * @typedef ComponentWithModuleName
36
+ * @property {string} moduleName - Name of the component
37
+ */
38
+ /**
39
+ * @import { ObjectNested } from './configuration.mjs'
40
+ */
41
+
42
+ class GOVUKFrontendError extends Error {
43
+ constructor(...args) {
44
+ super(...args);
45
+ this.name = 'GOVUKFrontendError';
46
+ }
47
+ }
48
+ class SupportError extends GOVUKFrontendError {
49
+ /**
50
+ * Checks if GOV.UK Frontend is supported on this page
51
+ *
52
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
53
+ */
54
+ constructor($scope = document.body) {
55
+ const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class="govuk-frontend-supported">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';
56
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
57
+ this.name = 'SupportError';
58
+ }
59
+ }
60
+ class ConfigError extends GOVUKFrontendError {
61
+ constructor(...args) {
62
+ super(...args);
63
+ this.name = 'ConfigError';
64
+ }
65
+ }
66
+ class ElementError extends GOVUKFrontendError {
67
+ constructor(messageOrOptions) {
68
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
69
+ if (typeof messageOrOptions === 'object') {
70
+ const {
71
+ component,
72
+ identifier,
73
+ element,
74
+ expectedType
75
+ } = messageOrOptions;
76
+ message = identifier;
77
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
78
+ message = formatErrorMessage(component, message);
79
+ }
80
+ super(message);
81
+ this.name = 'ElementError';
82
+ }
83
+ }
84
+ class InitError extends GOVUKFrontendError {
85
+ constructor(componentOrMessage) {
86
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
87
+ super(message);
88
+ this.name = 'InitError';
89
+ }
90
+ }
91
+ /**
92
+ * @import { ComponentWithModuleName } from '../common/index.mjs'
93
+ */
94
+
95
+ class Component {
96
+ /**
97
+ * Returns the root element of the component
98
+ *
99
+ * @protected
100
+ * @returns {RootElementType} - the root element of component
101
+ */
102
+ get $root() {
103
+ return this._$root;
104
+ }
105
+ constructor($root) {
106
+ this._$root = void 0;
107
+ const childConstructor = this.constructor;
108
+ if (typeof childConstructor.moduleName !== 'string') {
109
+ throw new InitError(`\`moduleName\` not defined in component`);
110
+ }
111
+ if (!($root instanceof childConstructor.elementType)) {
112
+ throw new ElementError({
113
+ element: $root,
114
+ component: childConstructor,
115
+ identifier: 'Root element (`$root`)',
116
+ expectedType: childConstructor.elementType.name
117
+ });
118
+ } else {
119
+ this._$root = $root;
120
+ }
121
+ childConstructor.checkSupport();
122
+ this.checkInitialised();
123
+ const moduleName = childConstructor.moduleName;
124
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
125
+ }
126
+ checkInitialised() {
127
+ const constructor = this.constructor;
128
+ const moduleName = constructor.moduleName;
129
+ if (moduleName && isInitialised(this.$root, moduleName)) {
130
+ throw new InitError(constructor);
131
+ }
132
+ }
133
+ static checkSupport() {
134
+ if (!isSupported()) {
135
+ throw new SupportError();
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * @typedef ChildClass
142
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
143
+ */
144
+
145
+ /**
146
+ * @typedef {typeof Component & ChildClass} ChildClassConstructor
147
+ */
148
+ Component.elementType = HTMLElement;
149
+
150
+ const configOverride = Symbol.for('configOverride');
151
+ class ConfigurableComponent extends Component {
152
+ [configOverride](param) {
153
+ return {};
154
+ }
155
+
156
+ /**
157
+ * Returns the root element of the component
158
+ *
159
+ * @protected
160
+ * @returns {ConfigurationType} - the root element of component
161
+ */
162
+ get config() {
163
+ return this._config;
164
+ }
165
+ constructor($root, config) {
166
+ super($root);
167
+ this._config = void 0;
168
+ const childConstructor = this.constructor;
169
+ if (!isObject(childConstructor.defaults)) {
170
+ throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));
171
+ }
172
+ const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);
173
+ this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);
174
+ }
175
+ }
176
+ function normaliseString(value, property) {
177
+ const trimmedValue = value ? value.trim() : '';
178
+ let output;
179
+ let outputType = property == null ? void 0 : property.type;
180
+ if (!outputType) {
181
+ if (['true', 'false'].includes(trimmedValue)) {
182
+ outputType = 'boolean';
183
+ }
184
+ if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
185
+ outputType = 'number';
186
+ }
187
+ }
188
+ switch (outputType) {
189
+ case 'boolean':
190
+ output = trimmedValue === 'true';
191
+ break;
192
+ case 'number':
193
+ output = Number(trimmedValue);
194
+ break;
195
+ default:
196
+ output = value;
197
+ }
198
+ return output;
199
+ }
200
+ function normaliseDataset(Component, dataset) {
201
+ if (!isObject(Component.schema)) {
202
+ throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));
203
+ }
204
+ const out = {};
205
+ const entries = Object.entries(Component.schema.properties);
206
+ for (const entry of entries) {
207
+ const [namespace, property] = entry;
208
+ const field = namespace.toString();
209
+ if (field in dataset) {
210
+ out[field] = normaliseString(dataset[field], property);
211
+ }
212
+ if ((property == null ? void 0 : property.type) === 'object') {
213
+ out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);
214
+ }
215
+ }
216
+ return out;
217
+ }
218
+ function mergeConfigs(...configObjects) {
219
+ const formattedConfigObject = {};
220
+ for (const configObject of configObjects) {
221
+ for (const key of Object.keys(configObject)) {
222
+ const option = formattedConfigObject[key];
223
+ const override = configObject[key];
224
+ if (isObject(option) && isObject(override)) {
225
+ formattedConfigObject[key] = mergeConfigs(option, override);
226
+ } else {
227
+ formattedConfigObject[key] = override;
228
+ }
229
+ }
230
+ }
231
+ return formattedConfigObject;
232
+ }
233
+ function extractConfigByNamespace(schema, dataset, namespace) {
234
+ const property = schema.properties[namespace];
235
+ if ((property == null ? void 0 : property.type) !== 'object') {
236
+ return;
237
+ }
238
+ const newObject = {
239
+ [namespace]: {}
240
+ };
241
+ for (const [key, value] of Object.entries(dataset)) {
242
+ let current = newObject;
243
+ const keyParts = key.split('.');
244
+ for (const [index, name] of keyParts.entries()) {
245
+ if (isObject(current)) {
246
+ if (index < keyParts.length - 1) {
247
+ if (!isObject(current[name])) {
248
+ current[name] = {};
249
+ }
250
+ current = current[name];
251
+ } else if (key !== namespace) {
252
+ current[name] = normaliseString(value);
253
+ }
254
+ }
255
+ }
256
+ }
257
+ return newObject[namespace];
258
+ }
259
+ /**
260
+ * Schema for component config
261
+ *
262
+ * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType
263
+ * @typedef {object} Schema
264
+ * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties
265
+ * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions
266
+ */
267
+ /**
268
+ * Schema property for component config
269
+ *
270
+ * @typedef {object} SchemaProperty
271
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
272
+ */
273
+ /**
274
+ * Schema condition for component config
275
+ *
276
+ * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType
277
+ * @typedef {object} SchemaCondition
278
+ * @property {(keyof ConfigurationType)[]} required - List of required config fields
279
+ * @property {string} errorMessage - Error message when required config fields not provided
280
+ */
281
+ /**
282
+ * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]
283
+ * @typedef ChildClass
284
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
285
+ * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration
286
+ * @property {ConfigurationType} [defaults] - The default values of the configuration of the component
287
+ */
288
+ /**
289
+ * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]
290
+ * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>
291
+ */
292
+
293
+ class I18n {
294
+ constructor(translations = {}, config = {}) {
295
+ var _config$locale;
296
+ this.translations = void 0;
297
+ this.locale = void 0;
298
+ this.translations = translations;
299
+ this.locale = (_config$locale = config.locale) != null ? _config$locale : document.documentElement.lang || 'en';
300
+ }
301
+ t(lookupKey, options) {
302
+ if (!lookupKey) {
303
+ throw new Error('i18n: lookup key missing');
304
+ }
305
+ let translation = this.translations[lookupKey];
306
+ if (typeof (options == null ? void 0 : options.count) === 'number' && typeof translation === 'object') {
307
+ const translationPluralForm = translation[this.getPluralSuffix(lookupKey, options.count)];
308
+ if (translationPluralForm) {
309
+ translation = translationPluralForm;
310
+ }
311
+ }
312
+ if (typeof translation === 'string') {
313
+ if (translation.match(/%{(.\S+)}/)) {
314
+ if (!options) {
315
+ throw new Error('i18n: cannot replace placeholders in string if no option data provided');
316
+ }
317
+ return this.replacePlaceholders(translation, options);
318
+ }
319
+ return translation;
320
+ }
321
+ return lookupKey;
322
+ }
323
+ replacePlaceholders(translationString, options) {
324
+ const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length ? new Intl.NumberFormat(this.locale) : undefined;
325
+ return translationString.replace(/%{(.\S+)}/g, function (placeholderWithBraces, placeholderKey) {
326
+ if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {
327
+ const placeholderValue = options[placeholderKey];
328
+ if (placeholderValue === false || typeof placeholderValue !== 'number' && typeof placeholderValue !== 'string') {
329
+ return '';
330
+ }
331
+ if (typeof placeholderValue === 'number') {
332
+ return formatter ? formatter.format(placeholderValue) : `${placeholderValue}`;
333
+ }
334
+ return placeholderValue;
335
+ }
336
+ throw new Error(`i18n: no data found to replace ${placeholderWithBraces} placeholder in string`);
337
+ });
338
+ }
339
+ hasIntlPluralRulesSupport() {
340
+ return Boolean('PluralRules' in window.Intl && Intl.PluralRules.supportedLocalesOf(this.locale).length);
341
+ }
342
+ getPluralSuffix(lookupKey, count) {
343
+ count = Number(count);
344
+ if (!isFinite(count)) {
345
+ return 'other';
346
+ }
347
+ const translation = this.translations[lookupKey];
348
+ const preferredForm = this.hasIntlPluralRulesSupport() ? new Intl.PluralRules(this.locale).select(count) : this.selectPluralFormUsingFallbackRules(count);
349
+ if (typeof translation === 'object') {
350
+ if (preferredForm in translation) {
351
+ return preferredForm;
352
+ } else if ('other' in translation) {
353
+ console.warn(`i18n: Missing plural form ".${preferredForm}" for "${this.locale}" locale. Falling back to ".other".`);
354
+ return 'other';
355
+ }
356
+ }
357
+ throw new Error(`i18n: Plural form ".other" is required for "${this.locale}" locale`);
358
+ }
359
+ selectPluralFormUsingFallbackRules(count) {
360
+ count = Math.abs(Math.floor(count));
361
+ const ruleset = this.getPluralRulesForLocale();
362
+ if (ruleset) {
363
+ return I18n.pluralRules[ruleset](count);
364
+ }
365
+ return 'other';
366
+ }
367
+ getPluralRulesForLocale() {
368
+ const localeShort = this.locale.split('-')[0];
369
+ for (const pluralRule in I18n.pluralRulesMap) {
370
+ const languages = I18n.pluralRulesMap[pluralRule];
371
+ if (languages.includes(this.locale) || languages.includes(localeShort)) {
372
+ return pluralRule;
373
+ }
374
+ }
375
+ }
376
+ }
377
+ I18n.pluralRulesMap = {
378
+ arabic: ['ar'],
379
+ chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],
380
+ french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],
381
+ german: ['af', 'sq', 'az', 'eu', 'bg', 'ca', 'da', 'nl', 'en', 'et', 'fi', 'ka', 'de', 'el', 'hu', 'lb', 'no', 'so', 'sw', 'sv', 'ta', 'te', 'tr', 'ur'],
382
+ irish: ['ga'],
383
+ russian: ['ru', 'uk'],
384
+ scottish: ['gd'],
385
+ spanish: ['pt-PT', 'it', 'es'],
386
+ welsh: ['cy']
387
+ };
388
+ I18n.pluralRules = {
389
+ arabic(n) {
390
+ if (n === 0) {
391
+ return 'zero';
392
+ }
393
+ if (n === 1) {
394
+ return 'one';
395
+ }
396
+ if (n === 2) {
397
+ return 'two';
398
+ }
399
+ if (n % 100 >= 3 && n % 100 <= 10) {
400
+ return 'few';
401
+ }
402
+ if (n % 100 >= 11 && n % 100 <= 99) {
403
+ return 'many';
404
+ }
405
+ return 'other';
406
+ },
407
+ chinese() {
408
+ return 'other';
409
+ },
410
+ french(n) {
411
+ return n === 0 || n === 1 ? 'one' : 'other';
412
+ },
413
+ german(n) {
414
+ return n === 1 ? 'one' : 'other';
415
+ },
416
+ irish(n) {
417
+ if (n === 1) {
418
+ return 'one';
419
+ }
420
+ if (n === 2) {
421
+ return 'two';
422
+ }
423
+ if (n >= 3 && n <= 6) {
424
+ return 'few';
425
+ }
426
+ if (n >= 7 && n <= 10) {
427
+ return 'many';
428
+ }
429
+ return 'other';
430
+ },
431
+ russian(n) {
432
+ const lastTwo = n % 100;
433
+ const last = lastTwo % 10;
434
+ if (last === 1 && lastTwo !== 11) {
435
+ return 'one';
436
+ }
437
+ if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {
438
+ return 'few';
439
+ }
440
+ if (last === 0 || last >= 5 && last <= 9 || lastTwo >= 11 && lastTwo <= 14) {
441
+ return 'many';
442
+ }
443
+ return 'other';
444
+ },
445
+ scottish(n) {
446
+ if (n === 1 || n === 11) {
447
+ return 'one';
448
+ }
449
+ if (n === 2 || n === 12) {
450
+ return 'two';
451
+ }
452
+ if (n >= 3 && n <= 10 || n >= 13 && n <= 19) {
453
+ return 'few';
454
+ }
455
+ return 'other';
456
+ },
457
+ spanish(n) {
458
+ if (n === 1) {
459
+ return 'one';
460
+ }
461
+ if (n % 1000000 === 0 && n !== 0) {
462
+ return 'many';
463
+ }
464
+ return 'other';
465
+ },
466
+ welsh(n) {
467
+ if (n === 0) {
468
+ return 'zero';
469
+ }
470
+ if (n === 1) {
471
+ return 'one';
472
+ }
473
+ if (n === 2) {
474
+ return 'two';
475
+ }
476
+ if (n === 3) {
477
+ return 'few';
478
+ }
479
+ if (n === 6) {
480
+ return 'many';
481
+ }
482
+ return 'other';
483
+ }
484
+ };
485
+
486
+ /**
487
+ * File upload component
488
+ *
489
+ * @preserve
490
+ * @augments ConfigurableComponent<FileUploadConfig>
491
+ */
492
+ class FileUpload extends ConfigurableComponent {
493
+ /**
494
+ * @param {Element | null} $root - File input element
495
+ * @param {FileUploadConfig} [config] - File Upload config
496
+ */
497
+ constructor($root, config = {}) {
498
+ super($root, config);
499
+ this.$input = void 0;
500
+ this.$button = void 0;
501
+ this.$status = void 0;
502
+ this.i18n = void 0;
503
+ this.id = void 0;
504
+ this.$announcements = void 0;
505
+ this.enteredAnotherElement = void 0;
506
+ const $input = this.$root.querySelector('input');
507
+ if ($input === null) {
508
+ throw new ElementError({
509
+ component: FileUpload,
510
+ identifier: 'File inputs (`<input type="file">`)'
511
+ });
512
+ }
513
+ if ($input.type !== 'file') {
514
+ throw new ElementError(formatErrorMessage(FileUpload, 'File input (`<input type="file">`) attribute (`type`) is not `file`'));
515
+ }
516
+ this.$input = $input;
517
+ this.$input.setAttribute('hidden', 'true');
518
+ if (!this.$input.id) {
519
+ throw new ElementError({
520
+ component: FileUpload,
521
+ identifier: 'File input (`<input type="file">`) attribute (`id`)'
522
+ });
523
+ }
524
+ this.id = this.$input.id;
525
+ this.i18n = new I18n(this.config.i18n, {
526
+ locale: closestAttributeValue(this.$root, 'lang')
527
+ });
528
+ const $label = this.findLabel();
529
+ if (!$label.id) {
530
+ $label.id = `${this.id}-label`;
531
+ }
532
+ this.$input.id = `${this.id}-input`;
533
+ const $button = document.createElement('button');
534
+ $button.classList.add('govuk-file-upload-button');
535
+ $button.type = 'button';
536
+ $button.id = this.id;
537
+ $button.classList.add('govuk-file-upload-button--empty');
538
+ const ariaDescribedBy = this.$input.getAttribute('aria-describedby');
539
+ if (ariaDescribedBy) {
540
+ $button.setAttribute('aria-describedby', ariaDescribedBy);
541
+ }
542
+ const $status = document.createElement('span');
543
+ $status.className = 'govuk-body govuk-file-upload-button__status';
544
+ $status.setAttribute('aria-live', 'polite');
545
+ $status.innerText = this.i18n.t('noFileChosen');
546
+ $button.appendChild($status);
547
+ const commaSpan = document.createElement('span');
548
+ commaSpan.className = 'govuk-visually-hidden';
549
+ commaSpan.innerText = ', ';
550
+ commaSpan.id = `${this.id}-comma`;
551
+ $button.appendChild(commaSpan);
552
+ const containerSpan = document.createElement('span');
553
+ containerSpan.className = 'govuk-file-upload-button__pseudo-button-container';
554
+ const buttonSpan = document.createElement('span');
555
+ buttonSpan.className = 'govuk-button govuk-button--secondary govuk-file-upload-button__pseudo-button';
556
+ buttonSpan.innerText = this.i18n.t('chooseFilesButton');
557
+ containerSpan.appendChild(buttonSpan);
558
+ containerSpan.insertAdjacentText('beforeend', ' ');
559
+ const instructionSpan = document.createElement('span');
560
+ instructionSpan.className = 'govuk-body govuk-file-upload-button__instruction';
561
+ instructionSpan.innerText = this.i18n.t('dropInstruction');
562
+ containerSpan.appendChild(instructionSpan);
563
+ $button.appendChild(containerSpan);
564
+ $button.setAttribute('aria-labelledby', `${$label.id} ${commaSpan.id} ${$button.id}`);
565
+ $button.addEventListener('click', this.onClick.bind(this));
566
+ $button.addEventListener('dragover', event => {
567
+ event.preventDefault();
568
+ });
569
+ this.$root.insertAdjacentElement('afterbegin', $button);
570
+ this.$input.setAttribute('tabindex', '-1');
571
+ this.$input.setAttribute('aria-hidden', 'true');
572
+ this.$button = $button;
573
+ this.$status = $status;
574
+ this.$input.addEventListener('change', this.onChange.bind(this));
575
+ this.updateDisabledState();
576
+ this.observeDisabledState();
577
+ this.$announcements = document.createElement('span');
578
+ this.$announcements.classList.add('govuk-file-upload-announcements');
579
+ this.$announcements.classList.add('govuk-visually-hidden');
580
+ this.$announcements.setAttribute('aria-live', 'assertive');
581
+ this.$root.insertAdjacentElement('afterend', this.$announcements);
582
+ this.$button.addEventListener('drop', this.onDrop.bind(this));
583
+ document.addEventListener('dragenter', this.updateDropzoneVisibility.bind(this));
584
+ document.addEventListener('dragenter', () => {
585
+ this.enteredAnotherElement = true;
586
+ });
587
+ document.addEventListener('dragleave', () => {
588
+ if (!this.enteredAnotherElement && !this.$button.disabled) {
589
+ this.hideDraggingState();
590
+ this.$announcements.innerText = this.i18n.t('leftDropZone');
591
+ }
592
+ this.enteredAnotherElement = false;
593
+ });
594
+ }
595
+ updateDropzoneVisibility(event) {
596
+ if (this.$button.disabled) return;
597
+ if (event.target instanceof Node) {
598
+ if (this.$root.contains(event.target)) {
599
+ if (event.dataTransfer && isContainingFiles(event.dataTransfer)) {
600
+ if (!this.$button.classList.contains('govuk-file-upload-button--dragging')) {
601
+ this.showDraggingState();
602
+ this.$announcements.innerText = this.i18n.t('enteredDropZone');
603
+ }
604
+ }
605
+ } else {
606
+ if (this.$button.classList.contains('govuk-file-upload-button--dragging')) {
607
+ this.hideDraggingState();
608
+ this.$announcements.innerText = this.i18n.t('leftDropZone');
609
+ }
610
+ }
611
+ }
612
+ }
613
+ showDraggingState() {
614
+ this.$button.classList.add('govuk-file-upload-button--dragging');
615
+ }
616
+ hideDraggingState() {
617
+ this.$button.classList.remove('govuk-file-upload-button--dragging');
618
+ }
619
+ onDrop(event) {
620
+ event.preventDefault();
621
+ if (event.dataTransfer && isContainingFiles(event.dataTransfer)) {
622
+ this.$input.files = event.dataTransfer.files;
623
+ this.$input.dispatchEvent(new CustomEvent('change'));
624
+ this.hideDraggingState();
625
+ }
626
+ }
627
+ onChange() {
628
+ const fileCount = this.$input.files.length;
629
+ if (fileCount === 0) {
630
+ this.$status.innerText = this.i18n.t('noFileChosen');
631
+ this.$button.classList.add('govuk-file-upload-button--empty');
632
+ } else {
633
+ if (fileCount === 1) {
634
+ this.$status.innerText = this.$input.files[0].name;
635
+ } else {
636
+ this.$status.innerText = this.i18n.t('multipleFilesChosen', {
637
+ count: fileCount
638
+ });
639
+ }
640
+ this.$button.classList.remove('govuk-file-upload-button--empty');
641
+ }
642
+ }
643
+ findLabel() {
644
+ const $label = document.querySelector(`label[for="${this.$input.id}"]`);
645
+ if (!$label) {
646
+ throw new ElementError({
647
+ component: FileUpload,
648
+ identifier: `Field label (\`<label for=${this.$input.id}>\`)`
649
+ });
650
+ }
651
+ return $label;
652
+ }
653
+ onClick() {
654
+ this.$input.click();
655
+ }
656
+ observeDisabledState() {
657
+ const observer = new MutationObserver(mutationList => {
658
+ for (const mutation of mutationList) {
659
+ if (mutation.type === 'attributes' && mutation.attributeName === 'disabled') {
660
+ this.updateDisabledState();
661
+ }
662
+ }
663
+ });
664
+ observer.observe(this.$input, {
665
+ attributes: true
666
+ });
667
+ }
668
+ updateDisabledState() {
669
+ this.$button.disabled = this.$input.disabled;
670
+ this.$root.classList.toggle('govuk-drop-zone--disabled', this.$button.disabled);
671
+ }
672
+ }
673
+ FileUpload.moduleName = 'govuk-file-upload';
674
+ FileUpload.defaults = Object.freeze({
675
+ i18n: {
676
+ chooseFilesButton: 'Choose file',
677
+ dropInstruction: 'or drop file',
678
+ noFileChosen: 'No file chosen',
679
+ multipleFilesChosen: {
680
+ one: '%{count} file chosen',
681
+ other: '%{count} files chosen'
682
+ },
683
+ enteredDropZone: 'Entered drop zone',
684
+ leftDropZone: 'Left drop zone'
685
+ }
686
+ });
687
+ FileUpload.schema = Object.freeze({
688
+ properties: {
689
+ i18n: {
690
+ type: 'object'
691
+ }
692
+ }
693
+ });
694
+ function isContainingFiles(dataTransfer) {
695
+ const hasNoTypesInfo = dataTransfer.types.length === 0;
696
+ const isDraggingFiles = dataTransfer.types.some(type => type === 'Files');
697
+ return hasNoTypesInfo || isDraggingFiles;
698
+ }
699
+
700
+ /**
701
+ * @typedef {HTMLInputElement & {files: FileList}} HTMLFileInputElement
702
+ */
703
+
704
+ /**
705
+ * File upload config
706
+ *
707
+ * @see {@link FileUpload.defaults}
708
+ * @typedef {object} FileUploadConfig
709
+ * @property {FileUploadTranslations} [i18n=FileUpload.defaults.i18n] - File upload translations
710
+ */
711
+
712
+ /**
713
+ * File upload translations
714
+ *
715
+ * @see {@link FileUpload.defaults.i18n}
716
+ * @typedef {object} FileUploadTranslations
717
+ *
718
+ * Messages used by the component
719
+ * @property {string} [chooseFile] - The text of the button that opens the file picker
720
+ * @property {string} [dropInstruction] - The text informing users they can drop files
721
+ * @property {TranslationPluralForms} [multipleFilesChosen] - The text displayed when multiple files
722
+ * have been chosen by the user
723
+ * @property {string} [noFileChosen] - The text to displayed when no file has been chosen by the user
724
+ * @property {string} [enteredDropZone] - The text announced by assistive technology
725
+ * when user drags files and enters the drop zone
726
+ * @property {string} [leftDropZone] - The text announced by assistive technology
727
+ * when user drags files and leaves the drop zone without dropping
728
+ */
729
+
730
+ /**
731
+ * @import { Schema } from '../../common/configuration.mjs'
732
+ * @import { TranslationPluralForms } from '../../i18n.mjs'
733
+ */
734
+
735
+ export { FileUpload };
736
+ //# sourceMappingURL=file-upload.bundle.mjs.map