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,85 @@
1
+ import { getBreakpoint } from '../../common/index.mjs';
2
+ import { ElementError } from '../../errors/index.mjs';
3
+ import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
4
+
5
+ /**
6
+ * Service Navigation component
7
+ *
8
+ * @preserve
9
+ */
10
+ class ServiceNavigation extends GOVUKFrontendComponent {
11
+ /**
12
+ * @param {Element | null} $root - HTML element to use for header
13
+ */
14
+ constructor($root) {
15
+ super($root);
16
+ this.$menuButton = void 0;
17
+ this.$menu = void 0;
18
+ this.menuIsOpen = false;
19
+ this.mql = null;
20
+ const $menuButton = this.$root.querySelector('.govuk-js-service-navigation-toggle');
21
+ if (!$menuButton) {
22
+ return this;
23
+ }
24
+ const menuId = $menuButton.getAttribute('aria-controls');
25
+ if (!menuId) {
26
+ throw new ElementError({
27
+ component: ServiceNavigation,
28
+ identifier: 'Navigation button (`<button class="govuk-js-service-navigation-toggle">`) attribute (`aria-controls`)'
29
+ });
30
+ }
31
+ const $menu = document.getElementById(menuId);
32
+ if (!$menu) {
33
+ throw new ElementError({
34
+ component: ServiceNavigation,
35
+ element: $menu,
36
+ identifier: `Navigation (\`<ul id="${menuId}">\`)`
37
+ });
38
+ }
39
+ this.$menu = $menu;
40
+ this.$menuButton = $menuButton;
41
+ this.setupResponsiveChecks();
42
+ this.$menuButton.addEventListener('click', () => this.handleMenuButtonClick());
43
+ }
44
+ setupResponsiveChecks() {
45
+ const breakpoint = getBreakpoint('tablet');
46
+ if (!breakpoint.value) {
47
+ throw new ElementError({
48
+ component: ServiceNavigation,
49
+ identifier: `CSS custom property (\`${breakpoint.property}\`) on pseudo-class \`:root\``
50
+ });
51
+ }
52
+ this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`);
53
+ if ('addEventListener' in this.mql) {
54
+ this.mql.addEventListener('change', () => this.checkMode());
55
+ } else {
56
+ this.mql.addListener(() => this.checkMode());
57
+ }
58
+ this.checkMode();
59
+ }
60
+ checkMode() {
61
+ if (!this.mql || !this.$menu || !this.$menuButton) {
62
+ return;
63
+ }
64
+ if (this.mql.matches) {
65
+ this.$menu.removeAttribute('hidden');
66
+ this.$menuButton.setAttribute('hidden', '');
67
+ } else {
68
+ this.$menuButton.removeAttribute('hidden');
69
+ this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString());
70
+ if (this.menuIsOpen) {
71
+ this.$menu.removeAttribute('hidden');
72
+ } else {
73
+ this.$menu.setAttribute('hidden', '');
74
+ }
75
+ }
76
+ }
77
+ handleMenuButtonClick() {
78
+ this.menuIsOpen = !this.menuIsOpen;
79
+ this.checkMode();
80
+ }
81
+ }
82
+ ServiceNavigation.moduleName = 'govuk-service-navigation';
83
+
84
+ export { ServiceNavigation };
85
+ //# sourceMappingURL=service-navigation.mjs.map
@@ -4,7 +4,7 @@
4
4
  @include govuk-typography-common;
5
5
  @include govuk-link-decoration;
6
6
  @include govuk-link-style-text;
7
- @include govuk-typography-responsive($size: 16);
7
+ @include govuk-font-size($size: 16);
8
8
 
9
9
  display: block;
10
10
  padding: govuk-spacing(2) govuk-spacing(3);
@@ -27,6 +27,7 @@
27
27
 
28
28
  // Undo unwanted changes when global styles are enabled
29
29
  @if $govuk-global-styles {
30
+ @include govuk-link-decoration;
30
31
  box-shadow: none;
31
32
  }
32
33
  }
@@ -34,14 +35,18 @@
34
35
 
35
36
  .govuk-skip-link-focused-element {
36
37
  &:focus {
37
- // Remove the native visible focus indicator when the element is programmatically focused.
38
+ // Remove the native visible focus indicator when the element is
39
+ // programmatically focused.
38
40
  //
39
- // We set the focus on the linked element (this is usually the <main> element) when the skip
40
- // link is activated to improve screen reader announcements. However, we remove the visible
41
- // focus indicator from the linked element because the user cannot interact with it.
41
+ // We set the focus on the linked element (this is usually the <main>
42
+ // element) when the skip link is activated to improve screen reader
43
+ // announcements. However, we remove the visible focus indicator from the
44
+ // linked element because the user cannot interact with it.
42
45
  //
43
46
  // A related discussion: https://github.com/w3c/wcag/issues/1001
44
47
  outline: none;
45
48
  }
46
49
  }
47
50
  }
51
+
52
+ /*# sourceMappingURL=_index.scss.map */
@@ -0,0 +1,4 @@
1
+ @import "../../base";
2
+ @import "./index";
3
+
4
+ /*# sourceMappingURL=_skip-link.scss.map */
@@ -0,0 +1,244 @@
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 getFragmentFromUrl(url) {
8
+ if (!url.includes('#')) {
9
+ return undefined;
10
+ }
11
+ return url.split('#').pop();
12
+ }
13
+ function setFocus($element, options = {}) {
14
+ var _options$onBeforeFocu;
15
+ const isFocusable = $element.getAttribute('tabindex');
16
+ if (!isFocusable) {
17
+ $element.setAttribute('tabindex', '-1');
18
+ }
19
+ function onFocus() {
20
+ $element.addEventListener('blur', onBlur, {
21
+ once: true
22
+ });
23
+ }
24
+ function onBlur() {
25
+ var _options$onBlur;
26
+ (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
27
+ if (!isFocusable) {
28
+ $element.removeAttribute('tabindex');
29
+ }
30
+ }
31
+ $element.addEventListener('focus', onFocus, {
32
+ once: true
33
+ });
34
+ (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
35
+ $element.focus();
36
+ }
37
+ function isInitialised($root, moduleName) {
38
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
39
+ }
40
+
41
+ /**
42
+ * Checks if GOV.UK Frontend is supported on this page
43
+ *
44
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
45
+ * won't be supported.
46
+ *
47
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
48
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
49
+ */
50
+ function isSupported($scope = document.body) {
51
+ if (!$scope) {
52
+ return false;
53
+ }
54
+ return $scope.classList.contains('govuk-frontend-supported');
55
+ }
56
+ function formatErrorMessage(Component, message) {
57
+ return `${Component.moduleName}: ${message}`;
58
+ }
59
+
60
+ /**
61
+ * Schema for component config
62
+ *
63
+ * @typedef {object} Schema
64
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
65
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
66
+ */
67
+
68
+ /**
69
+ * Schema property for component config
70
+ *
71
+ * @typedef {object} SchemaProperty
72
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
73
+ */
74
+
75
+ /**
76
+ * Schema condition for component config
77
+ *
78
+ * @typedef {object} SchemaCondition
79
+ * @property {string[]} required - List of required config fields
80
+ * @property {string} errorMessage - Error message when required config fields not provided
81
+ */
82
+ /**
83
+ * @typedef ComponentWithModuleName
84
+ * @property {string} moduleName - Name of the component
85
+ */
86
+
87
+ class GOVUKFrontendError extends Error {
88
+ constructor(...args) {
89
+ super(...args);
90
+ this.name = 'GOVUKFrontendError';
91
+ }
92
+ }
93
+ class SupportError extends GOVUKFrontendError {
94
+ /**
95
+ * Checks if GOV.UK Frontend is supported on this page
96
+ *
97
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
98
+ */
99
+ constructor($scope = document.body) {
100
+ 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';
101
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
102
+ this.name = 'SupportError';
103
+ }
104
+ }
105
+ class ElementError extends GOVUKFrontendError {
106
+ constructor(messageOrOptions) {
107
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
108
+ if (typeof messageOrOptions === 'object') {
109
+ const {
110
+ component,
111
+ identifier,
112
+ element,
113
+ expectedType
114
+ } = messageOrOptions;
115
+ message = identifier;
116
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
117
+ message = formatErrorMessage(component, message);
118
+ }
119
+ super(message);
120
+ this.name = 'ElementError';
121
+ }
122
+ }
123
+ class InitError extends GOVUKFrontendError {
124
+ constructor(componentOrMessage) {
125
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
126
+ super(message);
127
+ this.name = 'InitError';
128
+ }
129
+ }
130
+ /**
131
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
132
+ */
133
+
134
+ class GOVUKFrontendComponent {
135
+ /**
136
+ * Returns the root element of the component
137
+ *
138
+ * @protected
139
+ * @returns {RootElementType} - the root element of component
140
+ */
141
+ get $root() {
142
+ return this._$root;
143
+ }
144
+ constructor($root) {
145
+ this._$root = void 0;
146
+ const childConstructor = this.constructor;
147
+ if (typeof childConstructor.moduleName !== 'string') {
148
+ throw new InitError(`\`moduleName\` not defined in component`);
149
+ }
150
+ if (!($root instanceof childConstructor.elementType)) {
151
+ throw new ElementError({
152
+ element: $root,
153
+ component: childConstructor,
154
+ identifier: 'Root element (`$root`)',
155
+ expectedType: childConstructor.elementType.name
156
+ });
157
+ } else {
158
+ this._$root = $root;
159
+ }
160
+ childConstructor.checkSupport();
161
+ this.checkInitialised();
162
+ const moduleName = childConstructor.moduleName;
163
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
164
+ }
165
+ checkInitialised() {
166
+ const constructor = this.constructor;
167
+ const moduleName = constructor.moduleName;
168
+ if (moduleName && isInitialised(this.$root, moduleName)) {
169
+ throw new InitError(constructor);
170
+ }
171
+ }
172
+ static checkSupport() {
173
+ if (!isSupported()) {
174
+ throw new SupportError();
175
+ }
176
+ }
177
+ }
178
+
179
+ /**
180
+ * @typedef ChildClass
181
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
182
+ */
183
+
184
+ /**
185
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
186
+ */
187
+ GOVUKFrontendComponent.elementType = HTMLElement;
188
+
189
+ /**
190
+ * Skip link component
191
+ *
192
+ * @preserve
193
+ * @augments GOVUKFrontendComponent<HTMLAnchorElement>
194
+ */
195
+ class SkipLink extends GOVUKFrontendComponent {
196
+ /**
197
+ * @param {Element | null} $root - HTML element to use for skip link
198
+ * @throws {ElementError} when $root is not set or the wrong type
199
+ * @throws {ElementError} when $root.hash does not contain a hash
200
+ * @throws {ElementError} when the linked element is missing or the wrong type
201
+ */
202
+ constructor($root) {
203
+ var _this$$root$getAttrib;
204
+ super($root);
205
+ const hash = this.$root.hash;
206
+ const href = (_this$$root$getAttrib = this.$root.getAttribute('href')) != null ? _this$$root$getAttrib : '';
207
+ let url;
208
+ try {
209
+ url = new window.URL(this.$root.href);
210
+ } catch (error) {
211
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) is invalid`);
212
+ }
213
+ if (url.origin !== window.location.origin || url.pathname !== window.location.pathname) {
214
+ return;
215
+ }
216
+ const linkedElementId = getFragmentFromUrl(hash);
217
+ if (!linkedElementId) {
218
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) has no hash fragment`);
219
+ }
220
+ const $linkedElement = document.getElementById(linkedElementId);
221
+ if (!$linkedElement) {
222
+ throw new ElementError({
223
+ component: SkipLink,
224
+ element: $linkedElement,
225
+ identifier: `Target content (\`id="${linkedElementId}"\`)`
226
+ });
227
+ }
228
+ this.$root.addEventListener('click', () => setFocus($linkedElement, {
229
+ onBeforeFocus() {
230
+ $linkedElement.classList.add('govuk-skip-link-focused-element');
231
+ },
232
+ onBlur() {
233
+ $linkedElement.classList.remove('govuk-skip-link-focused-element');
234
+ }
235
+ }));
236
+ }
237
+ }
238
+ SkipLink.elementType = HTMLAnchorElement;
239
+ SkipLink.moduleName = 'govuk-skip-link';
240
+
241
+ exports.SkipLink = SkipLink;
242
+
243
+ }));
244
+ //# sourceMappingURL=skip-link.bundle.js.map
@@ -0,0 +1,236 @@
1
+ function getFragmentFromUrl(url) {
2
+ if (!url.includes('#')) {
3
+ return undefined;
4
+ }
5
+ return url.split('#').pop();
6
+ }
7
+ function setFocus($element, options = {}) {
8
+ var _options$onBeforeFocu;
9
+ const isFocusable = $element.getAttribute('tabindex');
10
+ if (!isFocusable) {
11
+ $element.setAttribute('tabindex', '-1');
12
+ }
13
+ function onFocus() {
14
+ $element.addEventListener('blur', onBlur, {
15
+ once: true
16
+ });
17
+ }
18
+ function onBlur() {
19
+ var _options$onBlur;
20
+ (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
21
+ if (!isFocusable) {
22
+ $element.removeAttribute('tabindex');
23
+ }
24
+ }
25
+ $element.addEventListener('focus', onFocus, {
26
+ once: true
27
+ });
28
+ (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
29
+ $element.focus();
30
+ }
31
+ function isInitialised($root, moduleName) {
32
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
33
+ }
34
+
35
+ /**
36
+ * Checks if GOV.UK Frontend is supported on this page
37
+ *
38
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
39
+ * won't be supported.
40
+ *
41
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
42
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
43
+ */
44
+ function isSupported($scope = document.body) {
45
+ if (!$scope) {
46
+ return false;
47
+ }
48
+ return $scope.classList.contains('govuk-frontend-supported');
49
+ }
50
+ function formatErrorMessage(Component, message) {
51
+ return `${Component.moduleName}: ${message}`;
52
+ }
53
+
54
+ /**
55
+ * Schema for component config
56
+ *
57
+ * @typedef {object} Schema
58
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
59
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
60
+ */
61
+
62
+ /**
63
+ * Schema property for component config
64
+ *
65
+ * @typedef {object} SchemaProperty
66
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
67
+ */
68
+
69
+ /**
70
+ * Schema condition for component config
71
+ *
72
+ * @typedef {object} SchemaCondition
73
+ * @property {string[]} required - List of required config fields
74
+ * @property {string} errorMessage - Error message when required config fields not provided
75
+ */
76
+ /**
77
+ * @typedef ComponentWithModuleName
78
+ * @property {string} moduleName - Name of the component
79
+ */
80
+
81
+ class GOVUKFrontendError extends Error {
82
+ constructor(...args) {
83
+ super(...args);
84
+ this.name = 'GOVUKFrontendError';
85
+ }
86
+ }
87
+ class SupportError extends GOVUKFrontendError {
88
+ /**
89
+ * Checks if GOV.UK Frontend is supported on this page
90
+ *
91
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
92
+ */
93
+ constructor($scope = document.body) {
94
+ 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';
95
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
96
+ this.name = 'SupportError';
97
+ }
98
+ }
99
+ class ElementError extends GOVUKFrontendError {
100
+ constructor(messageOrOptions) {
101
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
102
+ if (typeof messageOrOptions === 'object') {
103
+ const {
104
+ component,
105
+ identifier,
106
+ element,
107
+ expectedType
108
+ } = messageOrOptions;
109
+ message = identifier;
110
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
111
+ message = formatErrorMessage(component, message);
112
+ }
113
+ super(message);
114
+ this.name = 'ElementError';
115
+ }
116
+ }
117
+ class InitError extends GOVUKFrontendError {
118
+ constructor(componentOrMessage) {
119
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
120
+ super(message);
121
+ this.name = 'InitError';
122
+ }
123
+ }
124
+ /**
125
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
126
+ */
127
+
128
+ class GOVUKFrontendComponent {
129
+ /**
130
+ * Returns the root element of the component
131
+ *
132
+ * @protected
133
+ * @returns {RootElementType} - the root element of component
134
+ */
135
+ get $root() {
136
+ return this._$root;
137
+ }
138
+ constructor($root) {
139
+ this._$root = void 0;
140
+ const childConstructor = this.constructor;
141
+ if (typeof childConstructor.moduleName !== 'string') {
142
+ throw new InitError(`\`moduleName\` not defined in component`);
143
+ }
144
+ if (!($root instanceof childConstructor.elementType)) {
145
+ throw new ElementError({
146
+ element: $root,
147
+ component: childConstructor,
148
+ identifier: 'Root element (`$root`)',
149
+ expectedType: childConstructor.elementType.name
150
+ });
151
+ } else {
152
+ this._$root = $root;
153
+ }
154
+ childConstructor.checkSupport();
155
+ this.checkInitialised();
156
+ const moduleName = childConstructor.moduleName;
157
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
158
+ }
159
+ checkInitialised() {
160
+ const constructor = this.constructor;
161
+ const moduleName = constructor.moduleName;
162
+ if (moduleName && isInitialised(this.$root, moduleName)) {
163
+ throw new InitError(constructor);
164
+ }
165
+ }
166
+ static checkSupport() {
167
+ if (!isSupported()) {
168
+ throw new SupportError();
169
+ }
170
+ }
171
+ }
172
+
173
+ /**
174
+ * @typedef ChildClass
175
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
176
+ */
177
+
178
+ /**
179
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
180
+ */
181
+ GOVUKFrontendComponent.elementType = HTMLElement;
182
+
183
+ /**
184
+ * Skip link component
185
+ *
186
+ * @preserve
187
+ * @augments GOVUKFrontendComponent<HTMLAnchorElement>
188
+ */
189
+ class SkipLink extends GOVUKFrontendComponent {
190
+ /**
191
+ * @param {Element | null} $root - HTML element to use for skip link
192
+ * @throws {ElementError} when $root is not set or the wrong type
193
+ * @throws {ElementError} when $root.hash does not contain a hash
194
+ * @throws {ElementError} when the linked element is missing or the wrong type
195
+ */
196
+ constructor($root) {
197
+ var _this$$root$getAttrib;
198
+ super($root);
199
+ const hash = this.$root.hash;
200
+ const href = (_this$$root$getAttrib = this.$root.getAttribute('href')) != null ? _this$$root$getAttrib : '';
201
+ let url;
202
+ try {
203
+ url = new window.URL(this.$root.href);
204
+ } catch (error) {
205
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) is invalid`);
206
+ }
207
+ if (url.origin !== window.location.origin || url.pathname !== window.location.pathname) {
208
+ return;
209
+ }
210
+ const linkedElementId = getFragmentFromUrl(hash);
211
+ if (!linkedElementId) {
212
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) has no hash fragment`);
213
+ }
214
+ const $linkedElement = document.getElementById(linkedElementId);
215
+ if (!$linkedElement) {
216
+ throw new ElementError({
217
+ component: SkipLink,
218
+ element: $linkedElement,
219
+ identifier: `Target content (\`id="${linkedElementId}"\`)`
220
+ });
221
+ }
222
+ this.$root.addEventListener('click', () => setFocus($linkedElement, {
223
+ onBeforeFocus() {
224
+ $linkedElement.classList.add('govuk-skip-link-focused-element');
225
+ },
226
+ onBlur() {
227
+ $linkedElement.classList.remove('govuk-skip-link-focused-element');
228
+ }
229
+ }));
230
+ }
231
+ }
232
+ SkipLink.elementType = HTMLAnchorElement;
233
+ SkipLink.moduleName = 'govuk-skip-link';
234
+
235
+ export { SkipLink };
236
+ //# sourceMappingURL=skip-link.bundle.mjs.map
@@ -0,0 +1,58 @@
1
+ import { getFragmentFromUrl, setFocus } from '../../common/index.mjs';
2
+ import { ElementError } from '../../errors/index.mjs';
3
+ import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
4
+
5
+ /**
6
+ * Skip link component
7
+ *
8
+ * @preserve
9
+ * @augments GOVUKFrontendComponent<HTMLAnchorElement>
10
+ */
11
+ class SkipLink extends GOVUKFrontendComponent {
12
+ /**
13
+ * @param {Element | null} $root - HTML element to use for skip link
14
+ * @throws {ElementError} when $root is not set or the wrong type
15
+ * @throws {ElementError} when $root.hash does not contain a hash
16
+ * @throws {ElementError} when the linked element is missing or the wrong type
17
+ */
18
+ constructor($root) {
19
+ var _this$$root$getAttrib;
20
+ super($root);
21
+ const hash = this.$root.hash;
22
+ const href = (_this$$root$getAttrib = this.$root.getAttribute('href')) != null ? _this$$root$getAttrib : '';
23
+ let url;
24
+ try {
25
+ url = new window.URL(this.$root.href);
26
+ } catch (error) {
27
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) is invalid`);
28
+ }
29
+ if (url.origin !== window.location.origin || url.pathname !== window.location.pathname) {
30
+ return;
31
+ }
32
+ const linkedElementId = getFragmentFromUrl(hash);
33
+ if (!linkedElementId) {
34
+ throw new ElementError(`Skip link: Target link (\`href="${href}"\`) has no hash fragment`);
35
+ }
36
+ const $linkedElement = document.getElementById(linkedElementId);
37
+ if (!$linkedElement) {
38
+ throw new ElementError({
39
+ component: SkipLink,
40
+ element: $linkedElement,
41
+ identifier: `Target content (\`id="${linkedElementId}"\`)`
42
+ });
43
+ }
44
+ this.$root.addEventListener('click', () => setFocus($linkedElement, {
45
+ onBeforeFocus() {
46
+ $linkedElement.classList.add('govuk-skip-link-focused-element');
47
+ },
48
+ onBlur() {
49
+ $linkedElement.classList.remove('govuk-skip-link-focused-element');
50
+ }
51
+ }));
52
+ }
53
+ }
54
+ SkipLink.elementType = HTMLAnchorElement;
55
+ SkipLink.moduleName = 'govuk-skip-link';
56
+
57
+ export { SkipLink };
58
+ //# sourceMappingURL=skip-link.mjs.map