govuk_tech_docs 3.5.0 → 4.1.0

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