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,594 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.GOVUKFrontend = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ function closestAttributeValue($element, attributeName) {
8
+ const $closestElementWithAttribute = $element.closest(`[${attributeName}]`);
9
+ return $closestElementWithAttribute ? $closestElementWithAttribute.getAttribute(attributeName) : null;
10
+ }
11
+
12
+ function normaliseString(value, property) {
13
+ const trimmedValue = value ? value.trim() : '';
14
+ let output;
15
+ let outputType = property == null ? void 0 : property.type;
16
+ if (!outputType) {
17
+ if (['true', 'false'].includes(trimmedValue)) {
18
+ outputType = 'boolean';
19
+ }
20
+ if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
21
+ outputType = 'number';
22
+ }
23
+ }
24
+ switch (outputType) {
25
+ case 'boolean':
26
+ output = trimmedValue === 'true';
27
+ break;
28
+ case 'number':
29
+ output = Number(trimmedValue);
30
+ break;
31
+ default:
32
+ output = value;
33
+ }
34
+ return output;
35
+ }
36
+
37
+ /**
38
+ * @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
39
+ */
40
+
41
+ function mergeConfigs(...configObjects) {
42
+ const formattedConfigObject = {};
43
+ for (const configObject of configObjects) {
44
+ for (const key of Object.keys(configObject)) {
45
+ const option = formattedConfigObject[key];
46
+ const override = configObject[key];
47
+ if (isObject(option) && isObject(override)) {
48
+ formattedConfigObject[key] = mergeConfigs(option, override);
49
+ } else {
50
+ formattedConfigObject[key] = override;
51
+ }
52
+ }
53
+ }
54
+ return formattedConfigObject;
55
+ }
56
+ function extractConfigByNamespace(Component, dataset, namespace) {
57
+ const property = Component.schema.properties[namespace];
58
+ if ((property == null ? void 0 : property.type) !== 'object') {
59
+ return;
60
+ }
61
+ const newObject = {
62
+ [namespace]: ({})
63
+ };
64
+ for (const [key, value] of Object.entries(dataset)) {
65
+ let current = newObject;
66
+ const keyParts = key.split('.');
67
+ for (const [index, name] of keyParts.entries()) {
68
+ if (typeof current === 'object') {
69
+ if (index < keyParts.length - 1) {
70
+ if (!isObject(current[name])) {
71
+ current[name] = {};
72
+ }
73
+ current = current[name];
74
+ } else if (key !== namespace) {
75
+ current[name] = normaliseString(value);
76
+ }
77
+ }
78
+ }
79
+ }
80
+ return newObject[namespace];
81
+ }
82
+ function isInitialised($root, moduleName) {
83
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
84
+ }
85
+
86
+ /**
87
+ * Checks if GOV.UK Frontend is supported on this page
88
+ *
89
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
90
+ * won't be supported.
91
+ *
92
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
93
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
94
+ */
95
+ function isSupported($scope = document.body) {
96
+ if (!$scope) {
97
+ return false;
98
+ }
99
+ return $scope.classList.contains('govuk-frontend-supported');
100
+ }
101
+ function isArray(option) {
102
+ return Array.isArray(option);
103
+ }
104
+ function isObject(option) {
105
+ return !!option && typeof option === 'object' && !isArray(option);
106
+ }
107
+ function formatErrorMessage(Component, message) {
108
+ return `${Component.moduleName}: ${message}`;
109
+ }
110
+
111
+ /**
112
+ * Schema for component config
113
+ *
114
+ * @typedef {object} Schema
115
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
116
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
117
+ */
118
+
119
+ /**
120
+ * Schema property for component config
121
+ *
122
+ * @typedef {object} SchemaProperty
123
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
124
+ */
125
+
126
+ /**
127
+ * Schema condition for component config
128
+ *
129
+ * @typedef {object} SchemaCondition
130
+ * @property {string[]} required - List of required config fields
131
+ * @property {string} errorMessage - Error message when required config fields not provided
132
+ */
133
+ /**
134
+ * @typedef ComponentWithModuleName
135
+ * @property {string} moduleName - Name of the component
136
+ */
137
+
138
+ function normaliseDataset(Component, dataset) {
139
+ const out = {};
140
+ for (const [field, property] of Object.entries(Component.schema.properties)) {
141
+ if (field in dataset) {
142
+ out[field] = normaliseString(dataset[field], property);
143
+ }
144
+ if ((property == null ? void 0 : property.type) === 'object') {
145
+ out[field] = extractConfigByNamespace(Component, dataset, field);
146
+ }
147
+ }
148
+ return out;
149
+ }
150
+
151
+ class GOVUKFrontendError extends Error {
152
+ constructor(...args) {
153
+ super(...args);
154
+ this.name = 'GOVUKFrontendError';
155
+ }
156
+ }
157
+ class SupportError extends GOVUKFrontendError {
158
+ /**
159
+ * Checks if GOV.UK Frontend is supported on this page
160
+ *
161
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
162
+ */
163
+ constructor($scope = document.body) {
164
+ 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';
165
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
166
+ this.name = 'SupportError';
167
+ }
168
+ }
169
+ class ElementError extends GOVUKFrontendError {
170
+ constructor(messageOrOptions) {
171
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
172
+ if (typeof messageOrOptions === 'object') {
173
+ const {
174
+ component,
175
+ identifier,
176
+ element,
177
+ expectedType
178
+ } = messageOrOptions;
179
+ message = identifier;
180
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
181
+ message = formatErrorMessage(component, message);
182
+ }
183
+ super(message);
184
+ this.name = 'ElementError';
185
+ }
186
+ }
187
+ class InitError extends GOVUKFrontendError {
188
+ constructor(componentOrMessage) {
189
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
190
+ super(message);
191
+ this.name = 'InitError';
192
+ }
193
+ }
194
+ /**
195
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
196
+ */
197
+
198
+ class GOVUKFrontendComponent {
199
+ /**
200
+ * Returns the root element of the component
201
+ *
202
+ * @protected
203
+ * @returns {RootElementType} - the root element of component
204
+ */
205
+ get $root() {
206
+ return this._$root;
207
+ }
208
+ constructor($root) {
209
+ this._$root = void 0;
210
+ const childConstructor = this.constructor;
211
+ if (typeof childConstructor.moduleName !== 'string') {
212
+ throw new InitError(`\`moduleName\` not defined in component`);
213
+ }
214
+ if (!($root instanceof childConstructor.elementType)) {
215
+ throw new ElementError({
216
+ element: $root,
217
+ component: childConstructor,
218
+ identifier: 'Root element (`$root`)',
219
+ expectedType: childConstructor.elementType.name
220
+ });
221
+ } else {
222
+ this._$root = $root;
223
+ }
224
+ childConstructor.checkSupport();
225
+ this.checkInitialised();
226
+ const moduleName = childConstructor.moduleName;
227
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
228
+ }
229
+ checkInitialised() {
230
+ const constructor = this.constructor;
231
+ const moduleName = constructor.moduleName;
232
+ if (moduleName && isInitialised(this.$root, moduleName)) {
233
+ throw new InitError(constructor);
234
+ }
235
+ }
236
+ static checkSupport() {
237
+ if (!isSupported()) {
238
+ throw new SupportError();
239
+ }
240
+ }
241
+ }
242
+
243
+ /**
244
+ * @typedef ChildClass
245
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
246
+ */
247
+
248
+ /**
249
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
250
+ */
251
+ GOVUKFrontendComponent.elementType = HTMLElement;
252
+
253
+ class I18n {
254
+ constructor(translations = {}, config = {}) {
255
+ var _config$locale;
256
+ this.translations = void 0;
257
+ this.locale = void 0;
258
+ this.translations = translations;
259
+ this.locale = (_config$locale = config.locale) != null ? _config$locale : document.documentElement.lang || 'en';
260
+ }
261
+ t(lookupKey, options) {
262
+ if (!lookupKey) {
263
+ throw new Error('i18n: lookup key missing');
264
+ }
265
+ let translation = this.translations[lookupKey];
266
+ if (typeof (options == null ? void 0 : options.count) === 'number' && typeof translation === 'object') {
267
+ const translationPluralForm = translation[this.getPluralSuffix(lookupKey, options.count)];
268
+ if (translationPluralForm) {
269
+ translation = translationPluralForm;
270
+ }
271
+ }
272
+ if (typeof translation === 'string') {
273
+ if (translation.match(/%{(.\S+)}/)) {
274
+ if (!options) {
275
+ throw new Error('i18n: cannot replace placeholders in string if no option data provided');
276
+ }
277
+ return this.replacePlaceholders(translation, options);
278
+ }
279
+ return translation;
280
+ }
281
+ return lookupKey;
282
+ }
283
+ replacePlaceholders(translationString, options) {
284
+ const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length ? new Intl.NumberFormat(this.locale) : undefined;
285
+ return translationString.replace(/%{(.\S+)}/g, function (placeholderWithBraces, placeholderKey) {
286
+ if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {
287
+ const placeholderValue = options[placeholderKey];
288
+ if (placeholderValue === false || typeof placeholderValue !== 'number' && typeof placeholderValue !== 'string') {
289
+ return '';
290
+ }
291
+ if (typeof placeholderValue === 'number') {
292
+ return formatter ? formatter.format(placeholderValue) : `${placeholderValue}`;
293
+ }
294
+ return placeholderValue;
295
+ }
296
+ throw new Error(`i18n: no data found to replace ${placeholderWithBraces} placeholder in string`);
297
+ });
298
+ }
299
+ hasIntlPluralRulesSupport() {
300
+ return Boolean('PluralRules' in window.Intl && Intl.PluralRules.supportedLocalesOf(this.locale).length);
301
+ }
302
+ getPluralSuffix(lookupKey, count) {
303
+ count = Number(count);
304
+ if (!isFinite(count)) {
305
+ return 'other';
306
+ }
307
+ const translation = this.translations[lookupKey];
308
+ const preferredForm = this.hasIntlPluralRulesSupport() ? new Intl.PluralRules(this.locale).select(count) : this.selectPluralFormUsingFallbackRules(count);
309
+ if (typeof translation === 'object') {
310
+ if (preferredForm in translation) {
311
+ return preferredForm;
312
+ } else if ('other' in translation) {
313
+ console.warn(`i18n: Missing plural form ".${preferredForm}" for "${this.locale}" locale. Falling back to ".other".`);
314
+ return 'other';
315
+ }
316
+ }
317
+ throw new Error(`i18n: Plural form ".other" is required for "${this.locale}" locale`);
318
+ }
319
+ selectPluralFormUsingFallbackRules(count) {
320
+ count = Math.abs(Math.floor(count));
321
+ const ruleset = this.getPluralRulesForLocale();
322
+ if (ruleset) {
323
+ return I18n.pluralRules[ruleset](count);
324
+ }
325
+ return 'other';
326
+ }
327
+ getPluralRulesForLocale() {
328
+ const localeShort = this.locale.split('-')[0];
329
+ for (const pluralRule in I18n.pluralRulesMap) {
330
+ const languages = I18n.pluralRulesMap[pluralRule];
331
+ if (languages.includes(this.locale) || languages.includes(localeShort)) {
332
+ return pluralRule;
333
+ }
334
+ }
335
+ }
336
+ }
337
+ I18n.pluralRulesMap = {
338
+ arabic: ['ar'],
339
+ chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],
340
+ french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],
341
+ 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'],
342
+ irish: ['ga'],
343
+ russian: ['ru', 'uk'],
344
+ scottish: ['gd'],
345
+ spanish: ['pt-PT', 'it', 'es'],
346
+ welsh: ['cy']
347
+ };
348
+ I18n.pluralRules = {
349
+ arabic(n) {
350
+ if (n === 0) {
351
+ return 'zero';
352
+ }
353
+ if (n === 1) {
354
+ return 'one';
355
+ }
356
+ if (n === 2) {
357
+ return 'two';
358
+ }
359
+ if (n % 100 >= 3 && n % 100 <= 10) {
360
+ return 'few';
361
+ }
362
+ if (n % 100 >= 11 && n % 100 <= 99) {
363
+ return 'many';
364
+ }
365
+ return 'other';
366
+ },
367
+ chinese() {
368
+ return 'other';
369
+ },
370
+ french(n) {
371
+ return n === 0 || n === 1 ? 'one' : 'other';
372
+ },
373
+ german(n) {
374
+ return n === 1 ? 'one' : 'other';
375
+ },
376
+ irish(n) {
377
+ if (n === 1) {
378
+ return 'one';
379
+ }
380
+ if (n === 2) {
381
+ return 'two';
382
+ }
383
+ if (n >= 3 && n <= 6) {
384
+ return 'few';
385
+ }
386
+ if (n >= 7 && n <= 10) {
387
+ return 'many';
388
+ }
389
+ return 'other';
390
+ },
391
+ russian(n) {
392
+ const lastTwo = n % 100;
393
+ const last = lastTwo % 10;
394
+ if (last === 1 && lastTwo !== 11) {
395
+ return 'one';
396
+ }
397
+ if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {
398
+ return 'few';
399
+ }
400
+ if (last === 0 || last >= 5 && last <= 9 || lastTwo >= 11 && lastTwo <= 14) {
401
+ return 'many';
402
+ }
403
+ return 'other';
404
+ },
405
+ scottish(n) {
406
+ if (n === 1 || n === 11) {
407
+ return 'one';
408
+ }
409
+ if (n === 2 || n === 12) {
410
+ return 'two';
411
+ }
412
+ if (n >= 3 && n <= 10 || n >= 13 && n <= 19) {
413
+ return 'few';
414
+ }
415
+ return 'other';
416
+ },
417
+ spanish(n) {
418
+ if (n === 1) {
419
+ return 'one';
420
+ }
421
+ if (n % 1000000 === 0 && n !== 0) {
422
+ return 'many';
423
+ }
424
+ return 'other';
425
+ },
426
+ welsh(n) {
427
+ if (n === 0) {
428
+ return 'zero';
429
+ }
430
+ if (n === 1) {
431
+ return 'one';
432
+ }
433
+ if (n === 2) {
434
+ return 'two';
435
+ }
436
+ if (n === 3) {
437
+ return 'few';
438
+ }
439
+ if (n === 6) {
440
+ return 'many';
441
+ }
442
+ return 'other';
443
+ }
444
+ };
445
+
446
+ /**
447
+ * Password input component
448
+ *
449
+ * @preserve
450
+ */
451
+ class PasswordInput extends GOVUKFrontendComponent {
452
+ /**
453
+ * @param {Element | null} $root - HTML element to use for password input
454
+ * @param {PasswordInputConfig} [config] - Password input config
455
+ */
456
+ constructor($root, config = {}) {
457
+ super($root);
458
+ this.config = void 0;
459
+ this.i18n = void 0;
460
+ this.$input = void 0;
461
+ this.$showHideButton = void 0;
462
+ this.$screenReaderStatusMessage = void 0;
463
+ const $input = this.$root.querySelector('.govuk-js-password-input-input');
464
+ if (!($input instanceof HTMLInputElement)) {
465
+ throw new ElementError({
466
+ component: PasswordInput,
467
+ element: $input,
468
+ expectedType: 'HTMLInputElement',
469
+ identifier: 'Form field (`.govuk-js-password-input-input`)'
470
+ });
471
+ }
472
+ if ($input.type !== 'password') {
473
+ throw new ElementError('Password input: Form field (`.govuk-js-password-input-input`) must be of type `password`.');
474
+ }
475
+ const $showHideButton = this.$root.querySelector('.govuk-js-password-input-toggle');
476
+ if (!($showHideButton instanceof HTMLButtonElement)) {
477
+ throw new ElementError({
478
+ component: PasswordInput,
479
+ element: $showHideButton,
480
+ expectedType: 'HTMLButtonElement',
481
+ identifier: 'Button (`.govuk-js-password-input-toggle`)'
482
+ });
483
+ }
484
+ if ($showHideButton.type !== 'button') {
485
+ throw new ElementError('Password input: Button (`.govuk-js-password-input-toggle`) must be of type `button`.');
486
+ }
487
+ this.$input = $input;
488
+ this.$showHideButton = $showHideButton;
489
+ this.config = mergeConfigs(PasswordInput.defaults, config, normaliseDataset(PasswordInput, this.$root.dataset));
490
+ this.i18n = new I18n(this.config.i18n, {
491
+ locale: closestAttributeValue(this.$root, 'lang')
492
+ });
493
+ this.$showHideButton.removeAttribute('hidden');
494
+ const $screenReaderStatusMessage = document.createElement('div');
495
+ $screenReaderStatusMessage.className = 'govuk-password-input__sr-status govuk-visually-hidden';
496
+ $screenReaderStatusMessage.setAttribute('aria-live', 'polite');
497
+ this.$screenReaderStatusMessage = $screenReaderStatusMessage;
498
+ this.$input.insertAdjacentElement('afterend', $screenReaderStatusMessage);
499
+ this.$showHideButton.addEventListener('click', this.toggle.bind(this));
500
+ if (this.$input.form) {
501
+ this.$input.form.addEventListener('submit', () => this.hide());
502
+ }
503
+ window.addEventListener('pageshow', event => {
504
+ if (event.persisted && this.$input.type !== 'password') {
505
+ this.hide();
506
+ }
507
+ });
508
+ this.hide();
509
+ }
510
+ toggle(event) {
511
+ event.preventDefault();
512
+ if (this.$input.type === 'password') {
513
+ this.show();
514
+ return;
515
+ }
516
+ this.hide();
517
+ }
518
+ show() {
519
+ this.setType('text');
520
+ }
521
+ hide() {
522
+ this.setType('password');
523
+ }
524
+ setType(type) {
525
+ if (type === this.$input.type) {
526
+ return;
527
+ }
528
+ this.$input.setAttribute('type', type);
529
+ const isHidden = type === 'password';
530
+ const prefixButton = isHidden ? 'show' : 'hide';
531
+ const prefixStatus = isHidden ? 'passwordHidden' : 'passwordShown';
532
+ this.$showHideButton.innerText = this.i18n.t(`${prefixButton}Password`);
533
+ this.$showHideButton.setAttribute('aria-label', this.i18n.t(`${prefixButton}PasswordAriaLabel`));
534
+ this.$screenReaderStatusMessage.innerText = this.i18n.t(`${prefixStatus}Announcement`);
535
+ }
536
+ }
537
+
538
+ /**
539
+ * Password input config
540
+ *
541
+ * @typedef {object} PasswordInputConfig
542
+ * @property {PasswordInputTranslations} [i18n=PasswordInput.defaults.i18n] - Password input translations
543
+ */
544
+
545
+ /**
546
+ * Password input translations
547
+ *
548
+ * @see {@link PasswordInput.defaults.i18n}
549
+ * @typedef {object} PasswordInputTranslations
550
+ *
551
+ * Messages displayed to the user indicating the state of the show/hide toggle.
552
+ * @property {string} [showPassword] - Visible text of the button when the
553
+ * password is currently hidden. Plain text only.
554
+ * @property {string} [hidePassword] - Visible text of the button when the
555
+ * password is currently visible. Plain text only.
556
+ * @property {string} [showPasswordAriaLabel] - aria-label of the button when
557
+ * the password is currently hidden. Plain text only.
558
+ * @property {string} [hidePasswordAriaLabel] - aria-label of the button when
559
+ * the password is currently visible. Plain text only.
560
+ * @property {string} [passwordShownAnnouncement] - Screen reader
561
+ * announcement to make when the password has just become visible.
562
+ * Plain text only.
563
+ * @property {string} [passwordHiddenAnnouncement] - Screen reader
564
+ * announcement to make when the password has just been hidden.
565
+ * Plain text only.
566
+ */
567
+
568
+ /**
569
+ * @typedef {import('../../common/index.mjs').Schema} Schema
570
+ * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms
571
+ */
572
+ PasswordInput.moduleName = 'govuk-password-input';
573
+ PasswordInput.defaults = Object.freeze({
574
+ i18n: {
575
+ showPassword: 'Show',
576
+ hidePassword: 'Hide',
577
+ showPasswordAriaLabel: 'Show password',
578
+ hidePasswordAriaLabel: 'Hide password',
579
+ passwordShownAnnouncement: 'Your password is visible',
580
+ passwordHiddenAnnouncement: 'Your password is hidden'
581
+ }
582
+ });
583
+ PasswordInput.schema = Object.freeze({
584
+ properties: {
585
+ i18n: {
586
+ type: 'object'
587
+ }
588
+ }
589
+ });
590
+
591
+ exports.PasswordInput = PasswordInput;
592
+
593
+ }));
594
+ //# sourceMappingURL=password-input.bundle.js.map