govuk_tech_docs 3.4.5 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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