govuk_tech_docs 3.5.0 → 4.1.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 (328) 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 +26 -2
  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 +23 -10
  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/assets/manifest.json +39 -0
  41. data/node_modules/govuk-frontend/dist/govuk/common/closest-attribute-value.mjs +7 -0
  42. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +4 -0
  43. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +159 -0
  44. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +18 -0
  45. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +31 -0
  46. data/node_modules/govuk-frontend/dist/govuk/components/_all.scss +10 -0
  47. data/node_modules/govuk-frontend/{govuk/components/_all.scss → dist/govuk/components/_index.scss} +8 -3
  48. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_accordion.scss +4 -0
  49. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/accordion/_index.scss +55 -77
  50. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +785 -0
  51. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +777 -0
  52. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +349 -0
  53. data/node_modules/govuk-frontend/dist/govuk/components/back-link/_back-link.scss +4 -0
  54. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/back-link/_index.scss +12 -36
  55. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/_breadcrumbs.scss +4 -0
  56. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/breadcrumbs/_index.scss +11 -36
  57. data/node_modules/govuk-frontend/dist/govuk/components/button/_button.scss +4 -0
  58. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/button/_index.scss +30 -103
  59. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +318 -0
  60. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +310 -0
  61. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +73 -0
  62. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_character-count.scss +4 -0
  63. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/character-count/_index.scss +8 -6
  64. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +761 -0
  65. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +753 -0
  66. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +295 -0
  67. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_checkboxes.scss +4 -0
  68. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/checkboxes/_index.scss +108 -132
  69. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +268 -0
  70. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +260 -0
  71. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +111 -0
  72. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_cookie-banner.scss +4 -0
  73. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/cookie-banner/_index.scss +19 -15
  74. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_date-input.scss +4 -0
  75. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/date-input/_index.scss +3 -2
  76. data/node_modules/govuk-frontend/dist/govuk/components/details/_details.scss +4 -0
  77. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +139 -0
  78. data/node_modules/govuk-frontend/dist/govuk/components/error-message/_error-message.scss +4 -0
  79. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-message/_index.scss +2 -0
  80. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_error-summary.scss +4 -0
  81. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/error-summary/_index.scss +19 -6
  82. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +378 -0
  83. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +370 -0
  84. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +103 -0
  85. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/_exit-this-page.scss +4 -0
  86. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/exit-this-page/_index.scss +5 -10
  87. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +662 -0
  88. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +654 -0
  89. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +226 -0
  90. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_fieldset.scss +4 -0
  91. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/fieldset/_index.scss +20 -15
  92. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_file-upload.scss +4 -0
  93. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/file-upload/_index.scss +11 -15
  94. data/node_modules/govuk-frontend/dist/govuk/components/footer/_footer.scss +4 -0
  95. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/footer/_index.scss +25 -68
  96. data/node_modules/govuk-frontend/dist/govuk/components/header/_header.scss +4 -0
  97. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/header/_index.scss +84 -79
  98. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +252 -0
  99. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +244 -0
  100. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +88 -0
  101. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_hint.scss +2 -0
  102. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/hint/_index.scss +3 -0
  103. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_index.scss +24 -49
  104. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/input/_input.scss +2 -0
  105. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/inset-text/_index.scss +2 -0
  106. data/node_modules/govuk-frontend/dist/govuk/components/inset-text/_inset-text.scss +4 -0
  107. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_index.scss +12 -7
  108. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/label/_label.scss +2 -0
  109. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/notification-banner/_index.scss +11 -7
  110. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_notification-banner.scss +4 -0
  111. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +320 -0
  112. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +312 -0
  113. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +51 -0
  114. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/pagination/_index.scss +36 -55
  115. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_pagination.scss +4 -0
  116. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss +58 -0
  117. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/panel/_panel.scss +2 -0
  118. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss +57 -0
  119. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_password-input.scss +4 -0
  120. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +594 -0
  121. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +586 -0
  122. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +154 -0
  123. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/phase-banner/_index.scss +10 -1
  124. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_phase-banner.scss +4 -0
  125. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/radios/_index.scss +92 -113
  126. data/node_modules/govuk-frontend/dist/govuk/components/radios/_radios.scss +4 -0
  127. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +245 -0
  128. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +237 -0
  129. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +88 -0
  130. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/select/_index.scss +9 -16
  131. data/node_modules/govuk-frontend/dist/govuk/components/select/_select.scss +4 -0
  132. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +168 -0
  133. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
  134. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +249 -0
  135. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +241 -0
  136. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
  137. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/skip-link/_index.scss +10 -5
  138. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_skip-link.scss +4 -0
  139. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +244 -0
  140. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +236 -0
  141. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +58 -0
  142. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/summary-list/_index.scss +22 -20
  143. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_summary-list.scss +4 -0
  144. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_index.scss +21 -17
  145. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/table/_table.scss +2 -0
  146. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_index.scss +13 -9
  147. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tabs/_tabs.scss +2 -0
  148. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +453 -0
  149. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +445 -0
  150. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +283 -0
  151. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss +97 -0
  152. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/tag/_tag.scss +2 -0
  153. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss +79 -0
  154. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_task-list.scss +4 -0
  155. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/textarea/_index.scss +6 -10
  156. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_textarea.scss +4 -0
  157. data/node_modules/govuk-frontend/{govuk → dist/govuk}/components/warning-text/_index.scss +13 -13
  158. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_warning-text.scss +4 -0
  159. data/node_modules/govuk-frontend/dist/govuk/core/_all.scss +10 -0
  160. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_global-styles.scss +2 -1
  161. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +12 -0
  162. data/node_modules/govuk-frontend/{govuk/core/_all.scss → dist/govuk/core/_index.scss} +3 -1
  163. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_links.scss +8 -1
  164. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_lists.scss +2 -1
  165. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_section-break.scss +2 -7
  166. data/node_modules/govuk-frontend/{govuk → dist/govuk}/core/_typography.scss +8 -5
  167. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +57 -0
  168. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +60 -0
  169. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -0
  170. data/node_modules/govuk-frontend/dist/govuk/helpers/_all.scss +10 -0
  171. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_clearfix.scss +3 -1
  172. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss +127 -0
  173. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_device-pixels.scss +4 -3
  174. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_focused.scss +22 -6
  175. data/node_modules/govuk-frontend/dist/govuk/helpers/_font-faces.scss +41 -0
  176. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_grid.scss +3 -1
  177. data/node_modules/govuk-frontend/{govuk/helpers/_all.scss → dist/govuk/helpers/_index.scss} +2 -0
  178. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_links.scss +38 -76
  179. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_media-queries.scss +3 -12
  180. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_shape-arrow.scss +3 -1
  181. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_spacing.scss +12 -10
  182. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss +288 -0
  183. data/node_modules/govuk-frontend/{govuk → dist/govuk}/helpers/_visually-hidden.scss +39 -50
  184. data/node_modules/govuk-frontend/dist/govuk/i18n.mjs +195 -0
  185. data/node_modules/govuk-frontend/dist/govuk/index.scss +11 -0
  186. data/node_modules/govuk-frontend/dist/govuk/init.mjs +162 -0
  187. data/node_modules/govuk-frontend/dist/govuk/objects/_all.scss +10 -0
  188. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_button-group.scss +7 -12
  189. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_form-group.scss +2 -0
  190. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_grid.scss +4 -2
  191. data/node_modules/govuk-frontend/{govuk/objects/_all.scss → dist/govuk/objects/_index.scss} +2 -0
  192. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_main-wrapper.scss +2 -0
  193. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_template.scss +2 -1
  194. data/node_modules/govuk-frontend/{govuk → dist/govuk}/objects/_width-container.scss +2 -9
  195. data/node_modules/govuk-frontend/dist/govuk/overrides/_all.scss +9 -0
  196. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_display.scss +2 -0
  197. data/node_modules/govuk-frontend/{govuk/overrides/_all.scss → dist/govuk/overrides/_index.scss} +2 -0
  198. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_spacing.scss +3 -19
  199. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_text-align.scss +2 -0
  200. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss +42 -0
  201. data/node_modules/govuk-frontend/{govuk → dist/govuk}/overrides/_width.scss +2 -0
  202. data/node_modules/govuk-frontend/dist/govuk/settings/_all.scss +10 -0
  203. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_assets.scss +2 -0
  204. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_colours-applied.scss +9 -7
  205. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +378 -0
  206. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-palette.scss +37 -0
  207. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_global-styles.scss +2 -0
  208. data/node_modules/govuk-frontend/{govuk/settings/_all.scss → dist/govuk/settings/_index.scss} +2 -3
  209. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_links.scss +3 -20
  210. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_measurements.scss +18 -6
  211. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_media-queries.scss +5 -3
  212. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_spacing.scss +2 -0
  213. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-font.scss +52 -0
  214. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +322 -0
  215. data/node_modules/govuk-frontend/{govuk → dist/govuk}/settings/_warnings.scss +33 -8
  216. data/node_modules/govuk-frontend/dist/govuk/tools/_all.scss +10 -0
  217. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_exports.scss +2 -0
  218. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_font-url.scss +3 -0
  219. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_image-url.scss +3 -0
  220. data/node_modules/govuk-frontend/{govuk/tools/_all.scss → dist/govuk/tools/_index.scss} +2 -2
  221. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-em.scss +2 -0
  222. data/node_modules/govuk-frontend/{govuk → dist/govuk}/tools/_px-to-rem.scss +2 -0
  223. data/node_modules/govuk-frontend/dist/govuk/utilities/_all.scss +10 -0
  224. data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_clearfix.scss +2 -0
  225. data/node_modules/govuk-frontend/{govuk/utilities/_all.scss → dist/govuk/utilities/_index.scss} +2 -0
  226. data/node_modules/govuk-frontend/{govuk → dist/govuk}/utilities/_visually-hidden.scss +2 -0
  227. data/node_modules/govuk-frontend/{govuk → dist/govuk}/vendor/_sass-mq.scss +3 -1
  228. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.js +15 -0
  229. data/node_modules/govuk-frontend/{govuk-prototype-kit → dist/govuk-prototype-kit}/init.scss +3 -2
  230. data/package-lock.json +37 -37
  231. data/package.json +6 -1
  232. metadata +317 -206
  233. data/node_modules/govuk-frontend/govuk/_base.scss +0 -3
  234. data/node_modules/govuk-frontend/govuk/all-ie8.scss +0 -14
  235. data/node_modules/govuk-frontend/govuk/all.js +0 -5172
  236. data/node_modules/govuk-frontend/govuk/all.scss +0 -9
  237. data/node_modules/govuk-frontend/govuk/assets/images/favicon.ico +0 -0
  238. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-152x152.png +0 -0
  239. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-167x167.png +0 -0
  240. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon-180x180.png +0 -0
  241. data/node_modules/govuk-frontend/govuk/assets/images/govuk-apple-touch-icon.png +0 -0
  242. data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest-2x.png +0 -0
  243. data/node_modules/govuk-frontend/govuk/assets/images/govuk-crest.png +0 -0
  244. data/node_modules/govuk-frontend/govuk/assets/images/govuk-logotype-crown.png +0 -0
  245. data/node_modules/govuk-frontend/govuk/assets/images/govuk-mask-icon.svg +0 -7
  246. data/node_modules/govuk-frontend/govuk/assets/images/govuk-opengraph-image.png +0 -0
  247. data/node_modules/govuk-frontend/govuk/common/closest-attribute-value.js +0 -75
  248. data/node_modules/govuk-frontend/govuk/common/govuk-frontend-version.js +0 -17
  249. data/node_modules/govuk-frontend/govuk/common/index.js +0 -192
  250. data/node_modules/govuk-frontend/govuk/common/normalise-dataset.js +0 -386
  251. data/node_modules/govuk-frontend/govuk/common.js +0 -194
  252. data/node_modules/govuk-frontend/govuk/components/accordion/_accordion.scss +0 -2
  253. data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +0 -2386
  254. data/node_modules/govuk-frontend/govuk/components/back-link/_back-link.scss +0 -2
  255. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_breadcrumbs.scss +0 -2
  256. data/node_modules/govuk-frontend/govuk/components/button/_button.scss +0 -2
  257. data/node_modules/govuk-frontend/govuk/components/button/button.js +0 -1027
  258. data/node_modules/govuk-frontend/govuk/components/character-count/_character-count.scss +0 -2
  259. data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +0 -2281
  260. data/node_modules/govuk-frontend/govuk/components/checkboxes/_checkboxes.scss +0 -2
  261. data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +0 -1277
  262. data/node_modules/govuk-frontend/govuk/components/cookie-banner/_cookie-banner.scss +0 -2
  263. data/node_modules/govuk-frontend/govuk/components/date-input/_date-input.scss +0 -2
  264. data/node_modules/govuk-frontend/govuk/components/details/_details.scss +0 -2
  265. data/node_modules/govuk-frontend/govuk/components/details/_index.scss +0 -88
  266. data/node_modules/govuk-frontend/govuk/components/details/details.js +0 -873
  267. data/node_modules/govuk-frontend/govuk/components/error-message/_error-message.scss +0 -2
  268. data/node_modules/govuk-frontend/govuk/components/error-summary/_error-summary.scss +0 -2
  269. data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js +0 -1189
  270. data/node_modules/govuk-frontend/govuk/components/exit-this-page/_exit-this-page.scss +0 -2
  271. data/node_modules/govuk-frontend/govuk/components/exit-this-page/exit-this-page.js +0 -2120
  272. data/node_modules/govuk-frontend/govuk/components/fieldset/_fieldset.scss +0 -2
  273. data/node_modules/govuk-frontend/govuk/components/file-upload/_file-upload.scss +0 -2
  274. data/node_modules/govuk-frontend/govuk/components/footer/_footer.scss +0 -2
  275. data/node_modules/govuk-frontend/govuk/components/header/_header.scss +0 -2
  276. data/node_modules/govuk-frontend/govuk/components/header/header.js +0 -794
  277. data/node_modules/govuk-frontend/govuk/components/inset-text/_inset-text.scss +0 -2
  278. data/node_modules/govuk-frontend/govuk/components/notification-banner/_notification-banner.scss +0 -2
  279. data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js +0 -843
  280. data/node_modules/govuk-frontend/govuk/components/pagination/_pagination.scss +0 -2
  281. data/node_modules/govuk-frontend/govuk/components/panel/_index.scss +0 -56
  282. data/node_modules/govuk-frontend/govuk/components/phase-banner/_phase-banner.scss +0 -2
  283. data/node_modules/govuk-frontend/govuk/components/radios/_radios.scss +0 -2
  284. data/node_modules/govuk-frontend/govuk/components/radios/radios.js +0 -1222
  285. data/node_modules/govuk-frontend/govuk/components/select/_select.scss +0 -2
  286. data/node_modules/govuk-frontend/govuk/components/skip-link/_skip-link.scss +0 -2
  287. data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js +0 -1145
  288. data/node_modules/govuk-frontend/govuk/components/summary-list/_summary-list.scss +0 -2
  289. data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js +0 -1621
  290. data/node_modules/govuk-frontend/govuk/components/tag/_index.scss +0 -81
  291. data/node_modules/govuk-frontend/govuk/components/textarea/_textarea.scss +0 -2
  292. data/node_modules/govuk-frontend/govuk/components/warning-text/_warning-text.scss +0 -2
  293. data/node_modules/govuk-frontend/govuk/core/_govuk-frontend-version.scss +0 -5
  294. data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +0 -98
  295. data/node_modules/govuk-frontend/govuk/helpers/_font-faces.scss +0 -41
  296. data/node_modules/govuk-frontend/govuk/helpers/_typography.scss +0 -214
  297. data/node_modules/govuk-frontend/govuk/i18n.js +0 -397
  298. data/node_modules/govuk-frontend/govuk/overrides/_typography.scss +0 -21
  299. data/node_modules/govuk-frontend/govuk/settings/_colours-organisations.scss +0 -146
  300. data/node_modules/govuk-frontend/govuk/settings/_colours-palette.scss +0 -120
  301. data/node_modules/govuk-frontend/govuk/settings/_compatibility.scss +0 -100
  302. data/node_modules/govuk-frontend/govuk/settings/_ie8.scss +0 -34
  303. data/node_modules/govuk-frontend/govuk/settings/_typography-font-families.scss +0 -32
  304. data/node_modules/govuk-frontend/govuk/settings/_typography-font.scss +0 -112
  305. data/node_modules/govuk-frontend/govuk/settings/_typography-responsive.scss +0 -195
  306. data/node_modules/govuk-frontend/govuk/tools/_compatibility.scss +0 -50
  307. data/node_modules/govuk-frontend/govuk/tools/_ie8.scss +0 -87
  308. data/node_modules/govuk-frontend/govuk/vendor/polyfills/DOMTokenList.js +0 -274
  309. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Date/now.js +0 -23
  310. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Document.js +0 -36
  311. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/classList.js +0 -597
  312. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/closest.js +0 -58
  313. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/dataset.js +0 -307
  314. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/matches.js +0 -33
  315. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/nextElementSibling.js +0 -261
  316. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/previousElementSibling.js +0 -261
  317. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element.js +0 -151
  318. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Event.js +0 -512
  319. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Function/prototype/bind.js +0 -256
  320. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Object/defineProperty.js +0 -96
  321. data/node_modules/govuk-frontend/govuk/vendor/polyfills/String/prototype/trim.js +0 -23
  322. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Window.js +0 -30
  323. data/node_modules/govuk-frontend/govuk-prototype-kit/init.js +0 -8
  324. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-affa96571d-v2.woff +0 -0
  325. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  326. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  327. /data/node_modules/govuk-frontend/{govuk → dist/govuk}/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  328. /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