govuk_tech_docs 3.4.5 → 4.0.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 (327) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/publish.yaml +8 -4
  3. data/.github/workflows/test.yaml +11 -4
  4. data/.rubocop.yml +1 -1
  5. data/CHANGELOG.md +22 -1
  6. data/example/.ruby-version +1 -1
  7. data/example/source/javascripts/govuk_frontend.js +1 -0
  8. data/govuk_tech_docs.gemspec +17 -11
  9. data/lib/assets/javascripts/_modules/page-expiry.js +2 -2
  10. data/lib/assets/javascripts/_modules/table-of-contents.js +48 -2
  11. data/lib/assets/javascripts/govuk_frontend_all.js +3 -0
  12. data/lib/assets/javascripts/govuk_tech_docs.js +0 -2
  13. data/lib/assets/stylesheets/_govuk_tech_docs.scss +4 -10
  14. data/lib/assets/stylesheets/modules/_page-review.scss +0 -2
  15. data/lib/assets/stylesheets/modules/_search.scss +0 -4
  16. data/lib/govuk_tech_docs/meta_tags.rb +1 -1
  17. data/lib/govuk_tech_docs/redirects.rb +1 -1
  18. data/lib/govuk_tech_docs/table_of_contents/heading_tree_builder.rb +1 -1
  19. data/lib/govuk_tech_docs/table_of_contents/helpers.rb +2 -2
  20. data/lib/govuk_tech_docs/tech_docs_html_renderer.rb +6 -2
  21. data/lib/govuk_tech_docs/version.rb +1 -1
  22. data/lib/govuk_tech_docs.rb +20 -3
  23. data/lib/source/layouts/_header.erb +8 -12
  24. data/lib/source/layouts/_page_review.erb +1 -1
  25. data/lib/source/layouts/_search.erb +2 -2
  26. data/lib/source/layouts/core.erb +8 -2
  27. data/lib/source/stylesheets/manifest.css +1 -1
  28. data/node_modules/govuk-frontend/dist/govuk/_base.scss +5 -0
  29. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +2554 -0
  30. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +2529 -0
  31. data/node_modules/govuk-frontend/dist/govuk/all.mjs +18 -0
  32. data/node_modules/govuk-frontend/dist/govuk/all.scss +3 -0
  33. data/node_modules/govuk-frontend/dist/govuk/assets/images/favicon.svg +1 -0
  34. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.svg +1 -0
  35. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-180.png +0 -0
  36. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-192.png +0 -0
  37. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-512.png +0 -0
  38. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-icon-mask.svg +1 -0
  39. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-opengraph-image.png +0 -0
  40. data/node_modules/govuk-frontend/dist/govuk/common/closest-attribute-value.mjs +7 -0
  41. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +4 -0
  42. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +159 -0
  43. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +18 -0
  44. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +31 -0
  45. data/node_modules/govuk-frontend/dist/govuk/components/_all.scss +10 -0
  46. data/node_modules/govuk-frontend/{govuk/components/_all.scss → dist/govuk/components/_index.scss} +8 -3
  47. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_accordion.scss +4 -0
  48. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/accordion/_index.scss +55 -77
  49. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +785 -0
  50. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +777 -0
  51. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +349 -0
  52. data/node_modules/govuk-frontend/dist/govuk/components/back-link/_back-link.scss +4 -0
  53. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/back-link/_index.scss +12 -36
  54. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/_breadcrumbs.scss +4 -0
  55. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/breadcrumbs/_index.scss +11 -36
  56. data/node_modules/govuk-frontend/dist/govuk/components/button/_button.scss +4 -0
  57. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/button/_index.scss +30 -103
  58. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +318 -0
  59. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +310 -0
  60. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +73 -0
  61. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_character-count.scss +4 -0
  62. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/character-count/_index.scss +8 -6
  63. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +761 -0
  64. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +753 -0
  65. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +295 -0
  66. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_checkboxes.scss +4 -0
  67. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/checkboxes/_index.scss +108 -132
  68. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +268 -0
  69. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +260 -0
  70. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +111 -0
  71. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_cookie-banner.scss +4 -0
  72. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/cookie-banner/_index.scss +19 -15
  73. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_date-input.scss +4 -0
  74. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/date-input/_index.scss +3 -2
  75. data/node_modules/govuk-frontend/dist/govuk/components/details/_details.scss +4 -0
  76. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +139 -0
  77. data/node_modules/govuk-frontend/dist/govuk/components/error-message/_error-message.scss +4 -0
  78. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-message/_index.scss +2 -0
  79. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_error-summary.scss +4 -0
  80. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-summary/_index.scss +19 -6
  81. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +378 -0
  82. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +370 -0
  83. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +103 -0
  84. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/_exit-this-page.scss +4 -0
  85. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/exit-this-page/_index.scss +5 -10
  86. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +662 -0
  87. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +654 -0
  88. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +226 -0
  89. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_fieldset.scss +4 -0
  90. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/fieldset/_index.scss +20 -15
  91. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_file-upload.scss +4 -0
  92. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/file-upload/_index.scss +11 -15
  93. data/node_modules/govuk-frontend/dist/govuk/components/footer/_footer.scss +4 -0
  94. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/footer/_index.scss +25 -68
  95. data/node_modules/govuk-frontend/dist/govuk/components/header/_header.scss +4 -0
  96. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/header/_index.scss +84 -79
  97. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +252 -0
  98. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +244 -0
  99. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +88 -0
  100. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_hint.scss +2 -0
  101. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_index.scss +3 -0
  102. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_index.scss +24 -49
  103. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_input.scss +2 -0
  104. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/inset-text/_index.scss +2 -0
  105. data/node_modules/govuk-frontend/dist/govuk/components/inset-text/_inset-text.scss +4 -0
  106. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_index.scss +12 -7
  107. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_label.scss +2 -0
  108. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/notification-banner/_index.scss +11 -7
  109. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_notification-banner.scss +4 -0
  110. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +320 -0
  111. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +312 -0
  112. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +51 -0
  113. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/pagination/_index.scss +36 -55
  114. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_pagination.scss +4 -0
  115. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss +58 -0
  116. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/panel/_panel.scss +2 -0
  117. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss +57 -0
  118. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_password-input.scss +4 -0
  119. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +594 -0
  120. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +586 -0
  121. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +154 -0
  122. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/phase-banner/_index.scss +10 -1
  123. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_phase-banner.scss +4 -0
  124. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/radios/_index.scss +92 -113
  125. data/node_modules/govuk-frontend/dist/govuk/components/radios/_radios.scss +4 -0
  126. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +245 -0
  127. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +237 -0
  128. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +88 -0
  129. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/select/_index.scss +9 -16
  130. data/node_modules/govuk-frontend/dist/govuk/components/select/_select.scss +4 -0
  131. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +168 -0
  132. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
  133. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +249 -0
  134. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +241 -0
  135. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
  136. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/skip-link/_index.scss +10 -5
  137. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_skip-link.scss +4 -0
  138. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +244 -0
  139. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +236 -0
  140. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +58 -0
  141. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/summary-list/_index.scss +22 -20
  142. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_summary-list.scss +4 -0
  143. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_index.scss +21 -17
  144. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_table.scss +2 -0
  145. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_index.scss +13 -9
  146. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_tabs.scss +2 -0
  147. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +453 -0
  148. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +445 -0
  149. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +283 -0
  150. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss +97 -0
  151. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tag/_tag.scss +2 -0
  152. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss +79 -0
  153. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_task-list.scss +4 -0
  154. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/textarea/_index.scss +6 -10
  155. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_textarea.scss +4 -0
  156. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/warning-text/_index.scss +13 -13
  157. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_warning-text.scss +4 -0
  158. data/node_modules/govuk-frontend/dist/govuk/core/_all.scss +10 -0
  159. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_global-styles.scss +2 -1
  160. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +12 -0
  161. data/node_modules/govuk-frontend/{govuk/core/_all.scss → dist/govuk/core/_index.scss} +3 -1
  162. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_links.scss +8 -1
  163. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_lists.scss +2 -1
  164. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_section-break.scss +2 -7
  165. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_typography.scss +8 -5
  166. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +57 -0
  167. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +60 -0
  168. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -0
  169. data/node_modules/govuk-frontend/dist/govuk/helpers/_all.scss +10 -0
  170. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_clearfix.scss +3 -1
  171. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss +127 -0
  172. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_device-pixels.scss +4 -3
  173. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_focused.scss +22 -6
  174. data/node_modules/govuk-frontend/dist/govuk/helpers/_font-faces.scss +41 -0
  175. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_grid.scss +3 -1
  176. data/node_modules/govuk-frontend/{govuk/helpers/_all.scss → dist/govuk/helpers/_index.scss} +2 -0
  177. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_links.scss +38 -76
  178. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_media-queries.scss +3 -12
  179. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_shape-arrow.scss +3 -1
  180. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_spacing.scss +12 -10
  181. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss +288 -0
  182. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_visually-hidden.scss +39 -50
  183. data/node_modules/govuk-frontend/dist/govuk/i18n.mjs +195 -0
  184. data/node_modules/govuk-frontend/dist/govuk/index.scss +11 -0
  185. data/node_modules/govuk-frontend/dist/govuk/init.mjs +162 -0
  186. data/node_modules/govuk-frontend/dist/govuk/objects/_all.scss +10 -0
  187. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_button-group.scss +7 -12
  188. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_form-group.scss +2 -0
  189. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_grid.scss +4 -2
  190. data/node_modules/govuk-frontend/{govuk/objects/_all.scss → dist/govuk/objects/_index.scss} +2 -0
  191. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_main-wrapper.scss +2 -0
  192. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_template.scss +2 -1
  193. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_width-container.scss +2 -9
  194. data/node_modules/govuk-frontend/dist/govuk/overrides/_all.scss +9 -0
  195. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_display.scss +2 -0
  196. data/node_modules/govuk-frontend/{govuk/overrides/_all.scss → dist/govuk/overrides/_index.scss} +2 -0
  197. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_spacing.scss +3 -19
  198. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_text-align.scss +2 -0
  199. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss +42 -0
  200. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_width.scss +2 -0
  201. data/node_modules/govuk-frontend/dist/govuk/settings/_all.scss +10 -0
  202. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_assets.scss +2 -0
  203. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_colours-applied.scss +9 -7
  204. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +378 -0
  205. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-palette.scss +37 -0
  206. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_global-styles.scss +2 -0
  207. data/node_modules/govuk-frontend/{govuk/settings/_all.scss → dist/govuk/settings/_index.scss} +2 -3
  208. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_links.scss +3 -20
  209. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_measurements.scss +18 -6
  210. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_media-queries.scss +5 -3
  211. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_spacing.scss +2 -0
  212. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-font.scss +52 -0
  213. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +322 -0
  214. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_warnings.scss +33 -8
  215. data/node_modules/govuk-frontend/dist/govuk/tools/_all.scss +10 -0
  216. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_exports.scss +2 -0
  217. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_font-url.scss +3 -0
  218. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_image-url.scss +3 -0
  219. data/node_modules/govuk-frontend/{govuk/tools/_all.scss → dist/govuk/tools/_index.scss} +2 -2
  220. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-em.scss +2 -0
  221. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-rem.scss +2 -0
  222. data/node_modules/govuk-frontend/dist/govuk/utilities/_all.scss +10 -0
  223. data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_clearfix.scss +2 -0
  224. data/node_modules/govuk-frontend/{govuk/utilities/_all.scss → dist/govuk/utilities/_index.scss} +2 -0
  225. data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_visually-hidden.scss +2 -0
  226. data/node_modules/govuk-frontend/{govuk → dist/govuk}/vendor/_sass-mq.scss +3 -1
  227. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.js +15 -0
  228. data/node_modules/govuk-frontend/{govuk-prototype-kit → dist/govuk-prototype-kit}/init.scss +3 -2
  229. data/package-lock.json +37 -37
  230. data/package.json +6 -1
  231. metadata +316 -206
  232. data/node_modules/govuk-frontend/govuk/_base.scss +0 -3
  233. data/node_modules/govuk-frontend/govuk/all-ie8.scss +0 -14
  234. data/node_modules/govuk-frontend/govuk/all.js +0 -5172
  235. data/node_modules/govuk-frontend/govuk/all.scss +0 -9
  236. data/node_modules/govuk-frontend/govuk/assets/images/favicon.ico +0 -0
  237. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-152x152.png +0 -0
  238. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-167x167.png +0 -0
  239. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-180x180.png +0 -0
  240. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon.png +0 -0
  241. data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest-2x.png +0 -0
  242. data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest.png +0 -0
  243. data/node_modules/govuk-frontend/govuk/assets/images/govuk-logotype-crown.png +0 -0
  244. data/node_modules/govuk-frontend/govuk/assets/images/govuk-mask-icon.svg +0 -7
  245. data/node_modules/govuk-frontend/govuk/assets/images/govuk-opengraph-image.png +0 -0
  246. data/node_modules/govuk-frontend/govuk/common/closest-attribute-value.js +0 -75
  247. data/node_modules/govuk-frontend/govuk/common/govuk-frontend-version.js +0 -17
  248. data/node_modules/govuk-frontend/govuk/common/index.js +0 -192
  249. data/node_modules/govuk-frontend/govuk/common/normalise-dataset.js +0 -386
  250. data/node_modules/govuk-frontend/govuk/common.js +0 -194
  251. data/node_modules/govuk-frontend/govuk/components/accordion/_accordion.scss +0 -2
  252. data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +0 -2386
  253. data/node_modules/govuk-frontend/govuk/components/back-link/_back-link.scss +0 -2
  254. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_breadcrumbs.scss +0 -2
  255. data/node_modules/govuk-frontend/govuk/components/button/_button.scss +0 -2
  256. data/node_modules/govuk-frontend/govuk/components/button/button.js +0 -1027
  257. data/node_modules/govuk-frontend/govuk/components/character-count/_character-count.scss +0 -2
  258. data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +0 -2281
  259. data/node_modules/govuk-frontend/govuk/components/checkboxes/_checkboxes.scss +0 -2
  260. data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +0 -1277
  261. data/node_modules/govuk-frontend/govuk/components/cookie-banner/_cookie-banner.scss +0 -2
  262. data/node_modules/govuk-frontend/govuk/components/date-input/_date-input.scss +0 -2
  263. data/node_modules/govuk-frontend/govuk/components/details/_details.scss +0 -2
  264. data/node_modules/govuk-frontend/govuk/components/details/_index.scss +0 -88
  265. data/node_modules/govuk-frontend/govuk/components/details/details.js +0 -873
  266. data/node_modules/govuk-frontend/govuk/components/error-message/_error-message.scss +0 -2
  267. data/node_modules/govuk-frontend/govuk/components/error-summary/_error-summary.scss +0 -2
  268. data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js +0 -1189
  269. data/node_modules/govuk-frontend/govuk/components/exit-this-page/_exit-this-page.scss +0 -2
  270. data/node_modules/govuk-frontend/govuk/components/exit-this-page/exit-this-page.js +0 -2120
  271. data/node_modules/govuk-frontend/govuk/components/fieldset/_fieldset.scss +0 -2
  272. data/node_modules/govuk-frontend/govuk/components/file-upload/_file-upload.scss +0 -2
  273. data/node_modules/govuk-frontend/govuk/components/footer/_footer.scss +0 -2
  274. data/node_modules/govuk-frontend/govuk/components/header/_header.scss +0 -2
  275. data/node_modules/govuk-frontend/govuk/components/header/header.js +0 -794
  276. data/node_modules/govuk-frontend/govuk/components/inset-text/_inset-text.scss +0 -2
  277. data/node_modules/govuk-frontend/govuk/components/notification-banner/_notification-banner.scss +0 -2
  278. data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js +0 -843
  279. data/node_modules/govuk-frontend/govuk/components/pagination/_pagination.scss +0 -2
  280. data/node_modules/govuk-frontend/govuk/components/panel/_index.scss +0 -56
  281. data/node_modules/govuk-frontend/govuk/components/phase-banner/_phase-banner.scss +0 -2
  282. data/node_modules/govuk-frontend/govuk/components/radios/_radios.scss +0 -2
  283. data/node_modules/govuk-frontend/govuk/components/radios/radios.js +0 -1222
  284. data/node_modules/govuk-frontend/govuk/components/select/_select.scss +0 -2
  285. data/node_modules/govuk-frontend/govuk/components/skip-link/_skip-link.scss +0 -2
  286. data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js +0 -1145
  287. data/node_modules/govuk-frontend/govuk/components/summary-list/_summary-list.scss +0 -2
  288. data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js +0 -1621
  289. data/node_modules/govuk-frontend/govuk/components/tag/_index.scss +0 -81
  290. data/node_modules/govuk-frontend/govuk/components/textarea/_textarea.scss +0 -2
  291. data/node_modules/govuk-frontend/govuk/components/warning-text/_warning-text.scss +0 -2
  292. data/node_modules/govuk-frontend/govuk/core/_govuk-frontend-version.scss +0 -5
  293. data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +0 -98
  294. data/node_modules/govuk-frontend/govuk/helpers/_font-faces.scss +0 -41
  295. data/node_modules/govuk-frontend/govuk/helpers/_typography.scss +0 -214
  296. data/node_modules/govuk-frontend/govuk/i18n.js +0 -397
  297. data/node_modules/govuk-frontend/govuk/overrides/_typography.scss +0 -21
  298. data/node_modules/govuk-frontend/govuk/settings/_colours-organisations.scss +0 -146
  299. data/node_modules/govuk-frontend/govuk/settings/_colours-palette.scss +0 -120
  300. data/node_modules/govuk-frontend/govuk/settings/_compatibility.scss +0 -100
  301. data/node_modules/govuk-frontend/govuk/settings/_ie8.scss +0 -34
  302. data/node_modules/govuk-frontend/govuk/settings/_typography-font-families.scss +0 -32
  303. data/node_modules/govuk-frontend/govuk/settings/_typography-font.scss +0 -112
  304. data/node_modules/govuk-frontend/govuk/settings/_typography-responsive.scss +0 -195
  305. data/node_modules/govuk-frontend/govuk/tools/_compatibility.scss +0 -50
  306. data/node_modules/govuk-frontend/govuk/tools/_ie8.scss +0 -87
  307. data/node_modules/govuk-frontend/govuk/vendor/polyfills/DOMTokenList.js +0 -274
  308. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Date/now.js +0 -23
  309. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Document.js +0 -36
  310. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/classList.js +0 -597
  311. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/closest.js +0 -58
  312. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/dataset.js +0 -307
  313. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/matches.js +0 -33
  314. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/nextElementSibling.js +0 -261
  315. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/previousElementSibling.js +0 -261
  316. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element.js +0 -151
  317. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Event.js +0 -512
  318. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Function/prototype/bind.js +0 -256
  319. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Object/defineProperty.js +0 -96
  320. data/node_modules/govuk-frontend/govuk/vendor/polyfills/String/prototype/trim.js +0 -23
  321. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Window.js +0 -30
  322. data/node_modules/govuk-frontend/govuk-prototype-kit/init.js +0 -8
  323. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-affa96571d-v2.woff +0 -0
  324. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  325. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  326. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  327. /data/{lib/source → node_modules/govuk-frontend/dist/govuk/assets/images}/favicon.ico +0 -0
@@ -0,0 +1,586 @@
1
+ function closestAttributeValue($element, attributeName) {
2
+ const $closestElementWithAttribute = $element.closest(`[${attributeName}]`);
3
+ return $closestElementWithAttribute ? $closestElementWithAttribute.getAttribute(attributeName) : null;
4
+ }
5
+
6
+ function normaliseString(value, property) {
7
+ const trimmedValue = value ? value.trim() : '';
8
+ let output;
9
+ let outputType = property == null ? void 0 : property.type;
10
+ if (!outputType) {
11
+ if (['true', 'false'].includes(trimmedValue)) {
12
+ outputType = 'boolean';
13
+ }
14
+ if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
15
+ outputType = 'number';
16
+ }
17
+ }
18
+ switch (outputType) {
19
+ case 'boolean':
20
+ output = trimmedValue === 'true';
21
+ break;
22
+ case 'number':
23
+ output = Number(trimmedValue);
24
+ break;
25
+ default:
26
+ output = value;
27
+ }
28
+ return output;
29
+ }
30
+
31
+ /**
32
+ * @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
33
+ */
34
+
35
+ function mergeConfigs(...configObjects) {
36
+ const formattedConfigObject = {};
37
+ for (const configObject of configObjects) {
38
+ for (const key of Object.keys(configObject)) {
39
+ const option = formattedConfigObject[key];
40
+ const override = configObject[key];
41
+ if (isObject(option) && isObject(override)) {
42
+ formattedConfigObject[key] = mergeConfigs(option, override);
43
+ } else {
44
+ formattedConfigObject[key] = override;
45
+ }
46
+ }
47
+ }
48
+ return formattedConfigObject;
49
+ }
50
+ function extractConfigByNamespace(Component, dataset, namespace) {
51
+ const property = Component.schema.properties[namespace];
52
+ if ((property == null ? void 0 : property.type) !== 'object') {
53
+ return;
54
+ }
55
+ const newObject = {
56
+ [namespace]: ({})
57
+ };
58
+ for (const [key, value] of Object.entries(dataset)) {
59
+ let current = newObject;
60
+ const keyParts = key.split('.');
61
+ for (const [index, name] of keyParts.entries()) {
62
+ if (typeof current === 'object') {
63
+ if (index < keyParts.length - 1) {
64
+ if (!isObject(current[name])) {
65
+ current[name] = {};
66
+ }
67
+ current = current[name];
68
+ } else if (key !== namespace) {
69
+ current[name] = normaliseString(value);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ return newObject[namespace];
75
+ }
76
+ function isInitialised($root, moduleName) {
77
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
78
+ }
79
+
80
+ /**
81
+ * Checks if GOV.UK Frontend is supported on this page
82
+ *
83
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
84
+ * won't be supported.
85
+ *
86
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
87
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
88
+ */
89
+ function isSupported($scope = document.body) {
90
+ if (!$scope) {
91
+ return false;
92
+ }
93
+ return $scope.classList.contains('govuk-frontend-supported');
94
+ }
95
+ function isArray(option) {
96
+ return Array.isArray(option);
97
+ }
98
+ function isObject(option) {
99
+ return !!option && typeof option === 'object' && !isArray(option);
100
+ }
101
+ function formatErrorMessage(Component, message) {
102
+ return `${Component.moduleName}: ${message}`;
103
+ }
104
+
105
+ /**
106
+ * Schema for component config
107
+ *
108
+ * @typedef {object} Schema
109
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
110
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
111
+ */
112
+
113
+ /**
114
+ * Schema property for component config
115
+ *
116
+ * @typedef {object} SchemaProperty
117
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
118
+ */
119
+
120
+ /**
121
+ * Schema condition for component config
122
+ *
123
+ * @typedef {object} SchemaCondition
124
+ * @property {string[]} required - List of required config fields
125
+ * @property {string} errorMessage - Error message when required config fields not provided
126
+ */
127
+ /**
128
+ * @typedef ComponentWithModuleName
129
+ * @property {string} moduleName - Name of the component
130
+ */
131
+
132
+ function normaliseDataset(Component, dataset) {
133
+ const out = {};
134
+ for (const [field, property] of Object.entries(Component.schema.properties)) {
135
+ if (field in dataset) {
136
+ out[field] = normaliseString(dataset[field], property);
137
+ }
138
+ if ((property == null ? void 0 : property.type) === 'object') {
139
+ out[field] = extractConfigByNamespace(Component, dataset, field);
140
+ }
141
+ }
142
+ return out;
143
+ }
144
+
145
+ class GOVUKFrontendError extends Error {
146
+ constructor(...args) {
147
+ super(...args);
148
+ this.name = 'GOVUKFrontendError';
149
+ }
150
+ }
151
+ class SupportError extends GOVUKFrontendError {
152
+ /**
153
+ * Checks if GOV.UK Frontend is supported on this page
154
+ *
155
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
156
+ */
157
+ constructor($scope = document.body) {
158
+ 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';
159
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
160
+ this.name = 'SupportError';
161
+ }
162
+ }
163
+ class ElementError extends GOVUKFrontendError {
164
+ constructor(messageOrOptions) {
165
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
166
+ if (typeof messageOrOptions === 'object') {
167
+ const {
168
+ component,
169
+ identifier,
170
+ element,
171
+ expectedType
172
+ } = messageOrOptions;
173
+ message = identifier;
174
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
175
+ message = formatErrorMessage(component, message);
176
+ }
177
+ super(message);
178
+ this.name = 'ElementError';
179
+ }
180
+ }
181
+ class InitError extends GOVUKFrontendError {
182
+ constructor(componentOrMessage) {
183
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
184
+ super(message);
185
+ this.name = 'InitError';
186
+ }
187
+ }
188
+ /**
189
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
190
+ */
191
+
192
+ class GOVUKFrontendComponent {
193
+ /**
194
+ * Returns the root element of the component
195
+ *
196
+ * @protected
197
+ * @returns {RootElementType} - the root element of component
198
+ */
199
+ get $root() {
200
+ return this._$root;
201
+ }
202
+ constructor($root) {
203
+ this._$root = void 0;
204
+ const childConstructor = this.constructor;
205
+ if (typeof childConstructor.moduleName !== 'string') {
206
+ throw new InitError(`\`moduleName\` not defined in component`);
207
+ }
208
+ if (!($root instanceof childConstructor.elementType)) {
209
+ throw new ElementError({
210
+ element: $root,
211
+ component: childConstructor,
212
+ identifier: 'Root element (`$root`)',
213
+ expectedType: childConstructor.elementType.name
214
+ });
215
+ } else {
216
+ this._$root = $root;
217
+ }
218
+ childConstructor.checkSupport();
219
+ this.checkInitialised();
220
+ const moduleName = childConstructor.moduleName;
221
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
222
+ }
223
+ checkInitialised() {
224
+ const constructor = this.constructor;
225
+ const moduleName = constructor.moduleName;
226
+ if (moduleName && isInitialised(this.$root, moduleName)) {
227
+ throw new InitError(constructor);
228
+ }
229
+ }
230
+ static checkSupport() {
231
+ if (!isSupported()) {
232
+ throw new SupportError();
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * @typedef ChildClass
239
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
240
+ */
241
+
242
+ /**
243
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
244
+ */
245
+ GOVUKFrontendComponent.elementType = HTMLElement;
246
+
247
+ class I18n {
248
+ constructor(translations = {}, config = {}) {
249
+ var _config$locale;
250
+ this.translations = void 0;
251
+ this.locale = void 0;
252
+ this.translations = translations;
253
+ this.locale = (_config$locale = config.locale) != null ? _config$locale : document.documentElement.lang || 'en';
254
+ }
255
+ t(lookupKey, options) {
256
+ if (!lookupKey) {
257
+ throw new Error('i18n: lookup key missing');
258
+ }
259
+ let translation = this.translations[lookupKey];
260
+ if (typeof (options == null ? void 0 : options.count) === 'number' && typeof translation === 'object') {
261
+ const translationPluralForm = translation[this.getPluralSuffix(lookupKey, options.count)];
262
+ if (translationPluralForm) {
263
+ translation = translationPluralForm;
264
+ }
265
+ }
266
+ if (typeof translation === 'string') {
267
+ if (translation.match(/%{(.\S+)}/)) {
268
+ if (!options) {
269
+ throw new Error('i18n: cannot replace placeholders in string if no option data provided');
270
+ }
271
+ return this.replacePlaceholders(translation, options);
272
+ }
273
+ return translation;
274
+ }
275
+ return lookupKey;
276
+ }
277
+ replacePlaceholders(translationString, options) {
278
+ const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length ? new Intl.NumberFormat(this.locale) : undefined;
279
+ return translationString.replace(/%{(.\S+)}/g, function (placeholderWithBraces, placeholderKey) {
280
+ if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {
281
+ const placeholderValue = options[placeholderKey];
282
+ if (placeholderValue === false || typeof placeholderValue !== 'number' && typeof placeholderValue !== 'string') {
283
+ return '';
284
+ }
285
+ if (typeof placeholderValue === 'number') {
286
+ return formatter ? formatter.format(placeholderValue) : `${placeholderValue}`;
287
+ }
288
+ return placeholderValue;
289
+ }
290
+ throw new Error(`i18n: no data found to replace ${placeholderWithBraces} placeholder in string`);
291
+ });
292
+ }
293
+ hasIntlPluralRulesSupport() {
294
+ return Boolean('PluralRules' in window.Intl && Intl.PluralRules.supportedLocalesOf(this.locale).length);
295
+ }
296
+ getPluralSuffix(lookupKey, count) {
297
+ count = Number(count);
298
+ if (!isFinite(count)) {
299
+ return 'other';
300
+ }
301
+ const translation = this.translations[lookupKey];
302
+ const preferredForm = this.hasIntlPluralRulesSupport() ? new Intl.PluralRules(this.locale).select(count) : this.selectPluralFormUsingFallbackRules(count);
303
+ if (typeof translation === 'object') {
304
+ if (preferredForm in translation) {
305
+ return preferredForm;
306
+ } else if ('other' in translation) {
307
+ console.warn(`i18n: Missing plural form ".${preferredForm}" for "${this.locale}" locale. Falling back to ".other".`);
308
+ return 'other';
309
+ }
310
+ }
311
+ throw new Error(`i18n: Plural form ".other" is required for "${this.locale}" locale`);
312
+ }
313
+ selectPluralFormUsingFallbackRules(count) {
314
+ count = Math.abs(Math.floor(count));
315
+ const ruleset = this.getPluralRulesForLocale();
316
+ if (ruleset) {
317
+ return I18n.pluralRules[ruleset](count);
318
+ }
319
+ return 'other';
320
+ }
321
+ getPluralRulesForLocale() {
322
+ const localeShort = this.locale.split('-')[0];
323
+ for (const pluralRule in I18n.pluralRulesMap) {
324
+ const languages = I18n.pluralRulesMap[pluralRule];
325
+ if (languages.includes(this.locale) || languages.includes(localeShort)) {
326
+ return pluralRule;
327
+ }
328
+ }
329
+ }
330
+ }
331
+ I18n.pluralRulesMap = {
332
+ arabic: ['ar'],
333
+ chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],
334
+ french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],
335
+ 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'],
336
+ irish: ['ga'],
337
+ russian: ['ru', 'uk'],
338
+ scottish: ['gd'],
339
+ spanish: ['pt-PT', 'it', 'es'],
340
+ welsh: ['cy']
341
+ };
342
+ I18n.pluralRules = {
343
+ arabic(n) {
344
+ if (n === 0) {
345
+ return 'zero';
346
+ }
347
+ if (n === 1) {
348
+ return 'one';
349
+ }
350
+ if (n === 2) {
351
+ return 'two';
352
+ }
353
+ if (n % 100 >= 3 && n % 100 <= 10) {
354
+ return 'few';
355
+ }
356
+ if (n % 100 >= 11 && n % 100 <= 99) {
357
+ return 'many';
358
+ }
359
+ return 'other';
360
+ },
361
+ chinese() {
362
+ return 'other';
363
+ },
364
+ french(n) {
365
+ return n === 0 || n === 1 ? 'one' : 'other';
366
+ },
367
+ german(n) {
368
+ return n === 1 ? 'one' : 'other';
369
+ },
370
+ irish(n) {
371
+ if (n === 1) {
372
+ return 'one';
373
+ }
374
+ if (n === 2) {
375
+ return 'two';
376
+ }
377
+ if (n >= 3 && n <= 6) {
378
+ return 'few';
379
+ }
380
+ if (n >= 7 && n <= 10) {
381
+ return 'many';
382
+ }
383
+ return 'other';
384
+ },
385
+ russian(n) {
386
+ const lastTwo = n % 100;
387
+ const last = lastTwo % 10;
388
+ if (last === 1 && lastTwo !== 11) {
389
+ return 'one';
390
+ }
391
+ if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {
392
+ return 'few';
393
+ }
394
+ if (last === 0 || last >= 5 && last <= 9 || lastTwo >= 11 && lastTwo <= 14) {
395
+ return 'many';
396
+ }
397
+ return 'other';
398
+ },
399
+ scottish(n) {
400
+ if (n === 1 || n === 11) {
401
+ return 'one';
402
+ }
403
+ if (n === 2 || n === 12) {
404
+ return 'two';
405
+ }
406
+ if (n >= 3 && n <= 10 || n >= 13 && n <= 19) {
407
+ return 'few';
408
+ }
409
+ return 'other';
410
+ },
411
+ spanish(n) {
412
+ if (n === 1) {
413
+ return 'one';
414
+ }
415
+ if (n % 1000000 === 0 && n !== 0) {
416
+ return 'many';
417
+ }
418
+ return 'other';
419
+ },
420
+ welsh(n) {
421
+ if (n === 0) {
422
+ return 'zero';
423
+ }
424
+ if (n === 1) {
425
+ return 'one';
426
+ }
427
+ if (n === 2) {
428
+ return 'two';
429
+ }
430
+ if (n === 3) {
431
+ return 'few';
432
+ }
433
+ if (n === 6) {
434
+ return 'many';
435
+ }
436
+ return 'other';
437
+ }
438
+ };
439
+
440
+ /**
441
+ * Password input component
442
+ *
443
+ * @preserve
444
+ */
445
+ class PasswordInput extends GOVUKFrontendComponent {
446
+ /**
447
+ * @param {Element | null} $root - HTML element to use for password input
448
+ * @param {PasswordInputConfig} [config] - Password input config
449
+ */
450
+ constructor($root, config = {}) {
451
+ super($root);
452
+ this.config = void 0;
453
+ this.i18n = void 0;
454
+ this.$input = void 0;
455
+ this.$showHideButton = void 0;
456
+ this.$screenReaderStatusMessage = void 0;
457
+ const $input = this.$root.querySelector('.govuk-js-password-input-input');
458
+ if (!($input instanceof HTMLInputElement)) {
459
+ throw new ElementError({
460
+ component: PasswordInput,
461
+ element: $input,
462
+ expectedType: 'HTMLInputElement',
463
+ identifier: 'Form field (`.govuk-js-password-input-input`)'
464
+ });
465
+ }
466
+ if ($input.type !== 'password') {
467
+ throw new ElementError('Password input: Form field (`.govuk-js-password-input-input`) must be of type `password`.');
468
+ }
469
+ const $showHideButton = this.$root.querySelector('.govuk-js-password-input-toggle');
470
+ if (!($showHideButton instanceof HTMLButtonElement)) {
471
+ throw new ElementError({
472
+ component: PasswordInput,
473
+ element: $showHideButton,
474
+ expectedType: 'HTMLButtonElement',
475
+ identifier: 'Button (`.govuk-js-password-input-toggle`)'
476
+ });
477
+ }
478
+ if ($showHideButton.type !== 'button') {
479
+ throw new ElementError('Password input: Button (`.govuk-js-password-input-toggle`) must be of type `button`.');
480
+ }
481
+ this.$input = $input;
482
+ this.$showHideButton = $showHideButton;
483
+ this.config = mergeConfigs(PasswordInput.defaults, config, normaliseDataset(PasswordInput, this.$root.dataset));
484
+ this.i18n = new I18n(this.config.i18n, {
485
+ locale: closestAttributeValue(this.$root, 'lang')
486
+ });
487
+ this.$showHideButton.removeAttribute('hidden');
488
+ const $screenReaderStatusMessage = document.createElement('div');
489
+ $screenReaderStatusMessage.className = 'govuk-password-input__sr-status govuk-visually-hidden';
490
+ $screenReaderStatusMessage.setAttribute('aria-live', 'polite');
491
+ this.$screenReaderStatusMessage = $screenReaderStatusMessage;
492
+ this.$input.insertAdjacentElement('afterend', $screenReaderStatusMessage);
493
+ this.$showHideButton.addEventListener('click', this.toggle.bind(this));
494
+ if (this.$input.form) {
495
+ this.$input.form.addEventListener('submit', () => this.hide());
496
+ }
497
+ window.addEventListener('pageshow', event => {
498
+ if (event.persisted && this.$input.type !== 'password') {
499
+ this.hide();
500
+ }
501
+ });
502
+ this.hide();
503
+ }
504
+ toggle(event) {
505
+ event.preventDefault();
506
+ if (this.$input.type === 'password') {
507
+ this.show();
508
+ return;
509
+ }
510
+ this.hide();
511
+ }
512
+ show() {
513
+ this.setType('text');
514
+ }
515
+ hide() {
516
+ this.setType('password');
517
+ }
518
+ setType(type) {
519
+ if (type === this.$input.type) {
520
+ return;
521
+ }
522
+ this.$input.setAttribute('type', type);
523
+ const isHidden = type === 'password';
524
+ const prefixButton = isHidden ? 'show' : 'hide';
525
+ const prefixStatus = isHidden ? 'passwordHidden' : 'passwordShown';
526
+ this.$showHideButton.innerText = this.i18n.t(`${prefixButton}Password`);
527
+ this.$showHideButton.setAttribute('aria-label', this.i18n.t(`${prefixButton}PasswordAriaLabel`));
528
+ this.$screenReaderStatusMessage.innerText = this.i18n.t(`${prefixStatus}Announcement`);
529
+ }
530
+ }
531
+
532
+ /**
533
+ * Password input config
534
+ *
535
+ * @typedef {object} PasswordInputConfig
536
+ * @property {PasswordInputTranslations} [i18n=PasswordInput.defaults.i18n] - Password input translations
537
+ */
538
+
539
+ /**
540
+ * Password input translations
541
+ *
542
+ * @see {@link PasswordInput.defaults.i18n}
543
+ * @typedef {object} PasswordInputTranslations
544
+ *
545
+ * Messages displayed to the user indicating the state of the show/hide toggle.
546
+ * @property {string} [showPassword] - Visible text of the button when the
547
+ * password is currently hidden. Plain text only.
548
+ * @property {string} [hidePassword] - Visible text of the button when the
549
+ * password is currently visible. Plain text only.
550
+ * @property {string} [showPasswordAriaLabel] - aria-label of the button when
551
+ * the password is currently hidden. Plain text only.
552
+ * @property {string} [hidePasswordAriaLabel] - aria-label of the button when
553
+ * the password is currently visible. Plain text only.
554
+ * @property {string} [passwordShownAnnouncement] - Screen reader
555
+ * announcement to make when the password has just become visible.
556
+ * Plain text only.
557
+ * @property {string} [passwordHiddenAnnouncement] - Screen reader
558
+ * announcement to make when the password has just been hidden.
559
+ * Plain text only.
560
+ */
561
+
562
+ /**
563
+ * @typedef {import('../../common/index.mjs').Schema} Schema
564
+ * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms
565
+ */
566
+ PasswordInput.moduleName = 'govuk-password-input';
567
+ PasswordInput.defaults = Object.freeze({
568
+ i18n: {
569
+ showPassword: 'Show',
570
+ hidePassword: 'Hide',
571
+ showPasswordAriaLabel: 'Show password',
572
+ hidePasswordAriaLabel: 'Hide password',
573
+ passwordShownAnnouncement: 'Your password is visible',
574
+ passwordHiddenAnnouncement: 'Your password is hidden'
575
+ }
576
+ });
577
+ PasswordInput.schema = Object.freeze({
578
+ properties: {
579
+ i18n: {
580
+ type: 'object'
581
+ }
582
+ }
583
+ });
584
+
585
+ export { PasswordInput };
586
+ //# sourceMappingURL=password-input.bundle.mjs.map