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,320 @@
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 normaliseString(value, property) {
8
+ const trimmedValue = value ? value.trim() : '';
9
+ let output;
10
+ let outputType = property == null ? void 0 : property.type;
11
+ if (!outputType) {
12
+ if (['true', 'false'].includes(trimmedValue)) {
13
+ outputType = 'boolean';
14
+ }
15
+ if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
16
+ outputType = 'number';
17
+ }
18
+ }
19
+ switch (outputType) {
20
+ case 'boolean':
21
+ output = trimmedValue === 'true';
22
+ break;
23
+ case 'number':
24
+ output = Number(trimmedValue);
25
+ break;
26
+ default:
27
+ output = value;
28
+ }
29
+ return output;
30
+ }
31
+
32
+ /**
33
+ * @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
34
+ */
35
+
36
+ function mergeConfigs(...configObjects) {
37
+ const formattedConfigObject = {};
38
+ for (const configObject of configObjects) {
39
+ for (const key of Object.keys(configObject)) {
40
+ const option = formattedConfigObject[key];
41
+ const override = configObject[key];
42
+ if (isObject(option) && isObject(override)) {
43
+ formattedConfigObject[key] = mergeConfigs(option, override);
44
+ } else {
45
+ formattedConfigObject[key] = override;
46
+ }
47
+ }
48
+ }
49
+ return formattedConfigObject;
50
+ }
51
+ function extractConfigByNamespace(Component, dataset, namespace) {
52
+ const property = Component.schema.properties[namespace];
53
+ if ((property == null ? void 0 : property.type) !== 'object') {
54
+ return;
55
+ }
56
+ const newObject = {
57
+ [namespace]: ({})
58
+ };
59
+ for (const [key, value] of Object.entries(dataset)) {
60
+ let current = newObject;
61
+ const keyParts = key.split('.');
62
+ for (const [index, name] of keyParts.entries()) {
63
+ if (typeof current === 'object') {
64
+ if (index < keyParts.length - 1) {
65
+ if (!isObject(current[name])) {
66
+ current[name] = {};
67
+ }
68
+ current = current[name];
69
+ } else if (key !== namespace) {
70
+ current[name] = normaliseString(value);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ return newObject[namespace];
76
+ }
77
+ function setFocus($element, options = {}) {
78
+ var _options$onBeforeFocu;
79
+ const isFocusable = $element.getAttribute('tabindex');
80
+ if (!isFocusable) {
81
+ $element.setAttribute('tabindex', '-1');
82
+ }
83
+ function onFocus() {
84
+ $element.addEventListener('blur', onBlur, {
85
+ once: true
86
+ });
87
+ }
88
+ function onBlur() {
89
+ var _options$onBlur;
90
+ (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
91
+ if (!isFocusable) {
92
+ $element.removeAttribute('tabindex');
93
+ }
94
+ }
95
+ $element.addEventListener('focus', onFocus, {
96
+ once: true
97
+ });
98
+ (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
99
+ $element.focus();
100
+ }
101
+ function isInitialised($root, moduleName) {
102
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
103
+ }
104
+
105
+ /**
106
+ * Checks if GOV.UK Frontend is supported on this page
107
+ *
108
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
109
+ * won't be supported.
110
+ *
111
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
112
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
113
+ */
114
+ function isSupported($scope = document.body) {
115
+ if (!$scope) {
116
+ return false;
117
+ }
118
+ return $scope.classList.contains('govuk-frontend-supported');
119
+ }
120
+ function isArray(option) {
121
+ return Array.isArray(option);
122
+ }
123
+ function isObject(option) {
124
+ return !!option && typeof option === 'object' && !isArray(option);
125
+ }
126
+ function formatErrorMessage(Component, message) {
127
+ return `${Component.moduleName}: ${message}`;
128
+ }
129
+
130
+ /**
131
+ * Schema for component config
132
+ *
133
+ * @typedef {object} Schema
134
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
135
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
136
+ */
137
+
138
+ /**
139
+ * Schema property for component config
140
+ *
141
+ * @typedef {object} SchemaProperty
142
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
143
+ */
144
+
145
+ /**
146
+ * Schema condition for component config
147
+ *
148
+ * @typedef {object} SchemaCondition
149
+ * @property {string[]} required - List of required config fields
150
+ * @property {string} errorMessage - Error message when required config fields not provided
151
+ */
152
+ /**
153
+ * @typedef ComponentWithModuleName
154
+ * @property {string} moduleName - Name of the component
155
+ */
156
+
157
+ function normaliseDataset(Component, dataset) {
158
+ const out = {};
159
+ for (const [field, property] of Object.entries(Component.schema.properties)) {
160
+ if (field in dataset) {
161
+ out[field] = normaliseString(dataset[field], property);
162
+ }
163
+ if ((property == null ? void 0 : property.type) === 'object') {
164
+ out[field] = extractConfigByNamespace(Component, dataset, field);
165
+ }
166
+ }
167
+ return out;
168
+ }
169
+
170
+ class GOVUKFrontendError extends Error {
171
+ constructor(...args) {
172
+ super(...args);
173
+ this.name = 'GOVUKFrontendError';
174
+ }
175
+ }
176
+ class SupportError extends GOVUKFrontendError {
177
+ /**
178
+ * Checks if GOV.UK Frontend is supported on this page
179
+ *
180
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
181
+ */
182
+ constructor($scope = document.body) {
183
+ 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';
184
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
185
+ this.name = 'SupportError';
186
+ }
187
+ }
188
+ class ElementError extends GOVUKFrontendError {
189
+ constructor(messageOrOptions) {
190
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
191
+ if (typeof messageOrOptions === 'object') {
192
+ const {
193
+ component,
194
+ identifier,
195
+ element,
196
+ expectedType
197
+ } = messageOrOptions;
198
+ message = identifier;
199
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
200
+ message = formatErrorMessage(component, message);
201
+ }
202
+ super(message);
203
+ this.name = 'ElementError';
204
+ }
205
+ }
206
+ class InitError extends GOVUKFrontendError {
207
+ constructor(componentOrMessage) {
208
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
209
+ super(message);
210
+ this.name = 'InitError';
211
+ }
212
+ }
213
+ /**
214
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
215
+ */
216
+
217
+ class GOVUKFrontendComponent {
218
+ /**
219
+ * Returns the root element of the component
220
+ *
221
+ * @protected
222
+ * @returns {RootElementType} - the root element of component
223
+ */
224
+ get $root() {
225
+ return this._$root;
226
+ }
227
+ constructor($root) {
228
+ this._$root = void 0;
229
+ const childConstructor = this.constructor;
230
+ if (typeof childConstructor.moduleName !== 'string') {
231
+ throw new InitError(`\`moduleName\` not defined in component`);
232
+ }
233
+ if (!($root instanceof childConstructor.elementType)) {
234
+ throw new ElementError({
235
+ element: $root,
236
+ component: childConstructor,
237
+ identifier: 'Root element (`$root`)',
238
+ expectedType: childConstructor.elementType.name
239
+ });
240
+ } else {
241
+ this._$root = $root;
242
+ }
243
+ childConstructor.checkSupport();
244
+ this.checkInitialised();
245
+ const moduleName = childConstructor.moduleName;
246
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
247
+ }
248
+ checkInitialised() {
249
+ const constructor = this.constructor;
250
+ const moduleName = constructor.moduleName;
251
+ if (moduleName && isInitialised(this.$root, moduleName)) {
252
+ throw new InitError(constructor);
253
+ }
254
+ }
255
+ static checkSupport() {
256
+ if (!isSupported()) {
257
+ throw new SupportError();
258
+ }
259
+ }
260
+ }
261
+
262
+ /**
263
+ * @typedef ChildClass
264
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
265
+ */
266
+
267
+ /**
268
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
269
+ */
270
+ GOVUKFrontendComponent.elementType = HTMLElement;
271
+
272
+ /**
273
+ * Notification Banner component
274
+ *
275
+ * @preserve
276
+ */
277
+ class NotificationBanner extends GOVUKFrontendComponent {
278
+ /**
279
+ * @param {Element | null} $root - HTML element to use for notification banner
280
+ * @param {NotificationBannerConfig} [config] - Notification banner config
281
+ */
282
+ constructor($root, config = {}) {
283
+ super($root);
284
+ this.config = void 0;
285
+ this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
286
+ if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
287
+ setFocus(this.$root);
288
+ }
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Notification banner config
294
+ *
295
+ * @typedef {object} NotificationBannerConfig
296
+ * @property {boolean} [disableAutoFocus=false] - If set to `true` the
297
+ * notification banner will not be focussed when the page loads. This only
298
+ * applies if the component has a `role` of `alert` – in other cases the
299
+ * component will not be focused on page load, regardless of this option.
300
+ */
301
+
302
+ /**
303
+ * @typedef {import('../../common/index.mjs').Schema} Schema
304
+ */
305
+ NotificationBanner.moduleName = 'govuk-notification-banner';
306
+ NotificationBanner.defaults = Object.freeze({
307
+ disableAutoFocus: false
308
+ });
309
+ NotificationBanner.schema = Object.freeze({
310
+ properties: {
311
+ disableAutoFocus: {
312
+ type: 'boolean'
313
+ }
314
+ }
315
+ });
316
+
317
+ exports.NotificationBanner = NotificationBanner;
318
+
319
+ }));
320
+ //# sourceMappingURL=notification-banner.bundle.js.map
@@ -0,0 +1,312 @@
1
+ function normaliseString(value, property) {
2
+ const trimmedValue = value ? value.trim() : '';
3
+ let output;
4
+ let outputType = property == null ? void 0 : property.type;
5
+ if (!outputType) {
6
+ if (['true', 'false'].includes(trimmedValue)) {
7
+ outputType = 'boolean';
8
+ }
9
+ if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {
10
+ outputType = 'number';
11
+ }
12
+ }
13
+ switch (outputType) {
14
+ case 'boolean':
15
+ output = trimmedValue === 'true';
16
+ break;
17
+ case 'number':
18
+ output = Number(trimmedValue);
19
+ break;
20
+ default:
21
+ output = value;
22
+ }
23
+ return output;
24
+ }
25
+
26
+ /**
27
+ * @typedef {import('./index.mjs').SchemaProperty} SchemaProperty
28
+ */
29
+
30
+ function mergeConfigs(...configObjects) {
31
+ const formattedConfigObject = {};
32
+ for (const configObject of configObjects) {
33
+ for (const key of Object.keys(configObject)) {
34
+ const option = formattedConfigObject[key];
35
+ const override = configObject[key];
36
+ if (isObject(option) && isObject(override)) {
37
+ formattedConfigObject[key] = mergeConfigs(option, override);
38
+ } else {
39
+ formattedConfigObject[key] = override;
40
+ }
41
+ }
42
+ }
43
+ return formattedConfigObject;
44
+ }
45
+ function extractConfigByNamespace(Component, dataset, namespace) {
46
+ const property = Component.schema.properties[namespace];
47
+ if ((property == null ? void 0 : property.type) !== 'object') {
48
+ return;
49
+ }
50
+ const newObject = {
51
+ [namespace]: ({})
52
+ };
53
+ for (const [key, value] of Object.entries(dataset)) {
54
+ let current = newObject;
55
+ const keyParts = key.split('.');
56
+ for (const [index, name] of keyParts.entries()) {
57
+ if (typeof current === 'object') {
58
+ if (index < keyParts.length - 1) {
59
+ if (!isObject(current[name])) {
60
+ current[name] = {};
61
+ }
62
+ current = current[name];
63
+ } else if (key !== namespace) {
64
+ current[name] = normaliseString(value);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ return newObject[namespace];
70
+ }
71
+ function setFocus($element, options = {}) {
72
+ var _options$onBeforeFocu;
73
+ const isFocusable = $element.getAttribute('tabindex');
74
+ if (!isFocusable) {
75
+ $element.setAttribute('tabindex', '-1');
76
+ }
77
+ function onFocus() {
78
+ $element.addEventListener('blur', onBlur, {
79
+ once: true
80
+ });
81
+ }
82
+ function onBlur() {
83
+ var _options$onBlur;
84
+ (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);
85
+ if (!isFocusable) {
86
+ $element.removeAttribute('tabindex');
87
+ }
88
+ }
89
+ $element.addEventListener('focus', onFocus, {
90
+ once: true
91
+ });
92
+ (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
93
+ $element.focus();
94
+ }
95
+ function isInitialised($root, moduleName) {
96
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
97
+ }
98
+
99
+ /**
100
+ * Checks if GOV.UK Frontend is supported on this page
101
+ *
102
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
103
+ * won't be supported.
104
+ *
105
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
106
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
107
+ */
108
+ function isSupported($scope = document.body) {
109
+ if (!$scope) {
110
+ return false;
111
+ }
112
+ return $scope.classList.contains('govuk-frontend-supported');
113
+ }
114
+ function isArray(option) {
115
+ return Array.isArray(option);
116
+ }
117
+ function isObject(option) {
118
+ return !!option && typeof option === 'object' && !isArray(option);
119
+ }
120
+ function formatErrorMessage(Component, message) {
121
+ return `${Component.moduleName}: ${message}`;
122
+ }
123
+
124
+ /**
125
+ * Schema for component config
126
+ *
127
+ * @typedef {object} Schema
128
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
129
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
130
+ */
131
+
132
+ /**
133
+ * Schema property for component config
134
+ *
135
+ * @typedef {object} SchemaProperty
136
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
137
+ */
138
+
139
+ /**
140
+ * Schema condition for component config
141
+ *
142
+ * @typedef {object} SchemaCondition
143
+ * @property {string[]} required - List of required config fields
144
+ * @property {string} errorMessage - Error message when required config fields not provided
145
+ */
146
+ /**
147
+ * @typedef ComponentWithModuleName
148
+ * @property {string} moduleName - Name of the component
149
+ */
150
+
151
+ function normaliseDataset(Component, dataset) {
152
+ const out = {};
153
+ for (const [field, property] of Object.entries(Component.schema.properties)) {
154
+ if (field in dataset) {
155
+ out[field] = normaliseString(dataset[field], property);
156
+ }
157
+ if ((property == null ? void 0 : property.type) === 'object') {
158
+ out[field] = extractConfigByNamespace(Component, dataset, field);
159
+ }
160
+ }
161
+ return out;
162
+ }
163
+
164
+ class GOVUKFrontendError extends Error {
165
+ constructor(...args) {
166
+ super(...args);
167
+ this.name = 'GOVUKFrontendError';
168
+ }
169
+ }
170
+ class SupportError extends GOVUKFrontendError {
171
+ /**
172
+ * Checks if GOV.UK Frontend is supported on this page
173
+ *
174
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
175
+ */
176
+ constructor($scope = document.body) {
177
+ 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';
178
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
179
+ this.name = 'SupportError';
180
+ }
181
+ }
182
+ class ElementError extends GOVUKFrontendError {
183
+ constructor(messageOrOptions) {
184
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
185
+ if (typeof messageOrOptions === 'object') {
186
+ const {
187
+ component,
188
+ identifier,
189
+ element,
190
+ expectedType
191
+ } = messageOrOptions;
192
+ message = identifier;
193
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
194
+ message = formatErrorMessage(component, message);
195
+ }
196
+ super(message);
197
+ this.name = 'ElementError';
198
+ }
199
+ }
200
+ class InitError extends GOVUKFrontendError {
201
+ constructor(componentOrMessage) {
202
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
203
+ super(message);
204
+ this.name = 'InitError';
205
+ }
206
+ }
207
+ /**
208
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
209
+ */
210
+
211
+ class GOVUKFrontendComponent {
212
+ /**
213
+ * Returns the root element of the component
214
+ *
215
+ * @protected
216
+ * @returns {RootElementType} - the root element of component
217
+ */
218
+ get $root() {
219
+ return this._$root;
220
+ }
221
+ constructor($root) {
222
+ this._$root = void 0;
223
+ const childConstructor = this.constructor;
224
+ if (typeof childConstructor.moduleName !== 'string') {
225
+ throw new InitError(`\`moduleName\` not defined in component`);
226
+ }
227
+ if (!($root instanceof childConstructor.elementType)) {
228
+ throw new ElementError({
229
+ element: $root,
230
+ component: childConstructor,
231
+ identifier: 'Root element (`$root`)',
232
+ expectedType: childConstructor.elementType.name
233
+ });
234
+ } else {
235
+ this._$root = $root;
236
+ }
237
+ childConstructor.checkSupport();
238
+ this.checkInitialised();
239
+ const moduleName = childConstructor.moduleName;
240
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
241
+ }
242
+ checkInitialised() {
243
+ const constructor = this.constructor;
244
+ const moduleName = constructor.moduleName;
245
+ if (moduleName && isInitialised(this.$root, moduleName)) {
246
+ throw new InitError(constructor);
247
+ }
248
+ }
249
+ static checkSupport() {
250
+ if (!isSupported()) {
251
+ throw new SupportError();
252
+ }
253
+ }
254
+ }
255
+
256
+ /**
257
+ * @typedef ChildClass
258
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
259
+ */
260
+
261
+ /**
262
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
263
+ */
264
+ GOVUKFrontendComponent.elementType = HTMLElement;
265
+
266
+ /**
267
+ * Notification Banner component
268
+ *
269
+ * @preserve
270
+ */
271
+ class NotificationBanner extends GOVUKFrontendComponent {
272
+ /**
273
+ * @param {Element | null} $root - HTML element to use for notification banner
274
+ * @param {NotificationBannerConfig} [config] - Notification banner config
275
+ */
276
+ constructor($root, config = {}) {
277
+ super($root);
278
+ this.config = void 0;
279
+ this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
280
+ if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
281
+ setFocus(this.$root);
282
+ }
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Notification banner config
288
+ *
289
+ * @typedef {object} NotificationBannerConfig
290
+ * @property {boolean} [disableAutoFocus=false] - If set to `true` the
291
+ * notification banner will not be focussed when the page loads. This only
292
+ * applies if the component has a `role` of `alert` – in other cases the
293
+ * component will not be focused on page load, regardless of this option.
294
+ */
295
+
296
+ /**
297
+ * @typedef {import('../../common/index.mjs').Schema} Schema
298
+ */
299
+ NotificationBanner.moduleName = 'govuk-notification-banner';
300
+ NotificationBanner.defaults = Object.freeze({
301
+ disableAutoFocus: false
302
+ });
303
+ NotificationBanner.schema = Object.freeze({
304
+ properties: {
305
+ disableAutoFocus: {
306
+ type: 'boolean'
307
+ }
308
+ }
309
+ });
310
+
311
+ export { NotificationBanner };
312
+ //# sourceMappingURL=notification-banner.bundle.mjs.map
@@ -0,0 +1,51 @@
1
+ import { mergeConfigs, setFocus } from '../../common/index.mjs';
2
+ import { normaliseDataset } from '../../common/normalise-dataset.mjs';
3
+ import { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs';
4
+
5
+ /**
6
+ * Notification Banner component
7
+ *
8
+ * @preserve
9
+ */
10
+ class NotificationBanner extends GOVUKFrontendComponent {
11
+ /**
12
+ * @param {Element | null} $root - HTML element to use for notification banner
13
+ * @param {NotificationBannerConfig} [config] - Notification banner config
14
+ */
15
+ constructor($root, config = {}) {
16
+ super($root);
17
+ this.config = void 0;
18
+ this.config = mergeConfigs(NotificationBanner.defaults, config, normaliseDataset(NotificationBanner, this.$root.dataset));
19
+ if (this.$root.getAttribute('role') === 'alert' && !this.config.disableAutoFocus) {
20
+ setFocus(this.$root);
21
+ }
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Notification banner config
27
+ *
28
+ * @typedef {object} NotificationBannerConfig
29
+ * @property {boolean} [disableAutoFocus=false] - If set to `true` the
30
+ * notification banner will not be focussed when the page loads. This only
31
+ * applies if the component has a `role` of `alert` – in other cases the
32
+ * component will not be focused on page load, regardless of this option.
33
+ */
34
+
35
+ /**
36
+ * @typedef {import('../../common/index.mjs').Schema} Schema
37
+ */
38
+ NotificationBanner.moduleName = 'govuk-notification-banner';
39
+ NotificationBanner.defaults = Object.freeze({
40
+ disableAutoFocus: false
41
+ });
42
+ NotificationBanner.schema = Object.freeze({
43
+ properties: {
44
+ disableAutoFocus: {
45
+ type: 'boolean'
46
+ }
47
+ }
48
+ });
49
+
50
+ export { NotificationBanner };
51
+ //# sourceMappingURL=notification-banner.mjs.map