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
@@ -7,7 +7,7 @@
7
7
  /// @type Colour
8
8
  /// @access public
9
9
 
10
- $govuk-button-background-colour: govuk-colour("green", $legacy: #00823b) !default;
10
+ $govuk-button-background-colour: govuk-colour("green") !default;
11
11
 
12
12
  /// Button component text colour
13
13
  ///
@@ -16,6 +16,20 @@ $govuk-button-background-colour: govuk-colour("green", $legacy: #00823b) !defaul
16
16
 
17
17
  $govuk-button-text-colour: govuk-colour("white") !default;
18
18
 
19
+ /// Inverted button component background colour
20
+ ///
21
+ /// @type Colour
22
+ /// @access public
23
+
24
+ $govuk-inverse-button-background-colour: govuk-colour("white") !default;
25
+
26
+ /// Inverted button component text colour
27
+ ///
28
+ /// @type Colour
29
+ /// @access public
30
+
31
+ $govuk-inverse-button-text-colour: $govuk-brand-colour !default;
32
+
19
33
  @include govuk-exports("govuk/component/button") {
20
34
  $govuk-button-colour: $govuk-button-background-colour;
21
35
  $govuk-button-text-colour: $govuk-button-text-colour;
@@ -23,7 +37,7 @@ $govuk-button-text-colour: govuk-colour("white") !default;
23
37
  $govuk-button-shadow-colour: govuk-shade($govuk-button-colour, 60%);
24
38
 
25
39
  // Secondary button variables
26
- $govuk-secondary-button-colour: govuk-colour("light-grey", $legacy: "grey-3");
40
+ $govuk-secondary-button-colour: govuk-colour("light-grey");
27
41
  $govuk-secondary-button-text-colour: govuk-colour("black");
28
42
  $govuk-secondary-button-hover-colour: govuk-shade($govuk-secondary-button-colour, 10%);
29
43
  $govuk-secondary-button-shadow-colour: govuk-shade($govuk-secondary-button-colour, 40%);
@@ -35,8 +49,8 @@ $govuk-button-text-colour: govuk-colour("white") !default;
35
49
  $govuk-warning-button-shadow-colour: govuk-shade($govuk-warning-button-colour, 60%);
36
50
 
37
51
  // Inverse button variables
38
- $govuk-inverse-button-colour: govuk-colour("white");
39
- $govuk-inverse-button-text-colour: govuk-colour("blue");
52
+ $govuk-inverse-button-colour: $govuk-inverse-button-background-colour;
53
+ $govuk-inverse-button-text-colour: $govuk-inverse-button-text-colour;
40
54
  $govuk-inverse-button-hover-colour: govuk-tint($govuk-inverse-button-text-colour, 90%);
41
55
  $govuk-inverse-button-shadow-colour: govuk-shade($govuk-inverse-button-text-colour, 30%);
42
56
 
@@ -56,7 +70,8 @@ $govuk-button-text-colour: govuk-colour("white") !default;
56
70
  margin-right: 0;
57
71
  margin-left: 0;
58
72
  @include govuk-responsive-margin(6, "bottom", $adjustment: $button-shadow-size); // s2
59
- padding: (govuk-spacing(2) - $govuk-border-width-form-element) govuk-spacing(2) (govuk-spacing(2) - $govuk-border-width-form-element - ($button-shadow-size / 2)); // s1
73
+ padding: (govuk-spacing(2) - $govuk-border-width-form-element) govuk-spacing(2)
74
+ (govuk-spacing(2) - $govuk-border-width-form-element - ($button-shadow-size / 2)); // s1
60
75
  border: $govuk-border-width-form-element solid transparent;
61
76
  border-radius: 0;
62
77
  color: $govuk-button-text-colour;
@@ -67,10 +82,6 @@ $govuk-button-text-colour: govuk-colour("white") !default;
67
82
  cursor: pointer;
68
83
  -webkit-appearance: none;
69
84
 
70
- @include _govuk-if-ie8 {
71
- border-bottom: $button-shadow-size solid $govuk-button-shadow-colour;
72
- }
73
-
74
85
  @include govuk-media-query($from: tablet) {
75
86
  width: auto;
76
87
  }
@@ -97,40 +108,14 @@ $govuk-button-text-colour: govuk-colour("white") !default;
97
108
  &:active {
98
109
  // Bump the button down so it looks like its being pressed in
99
110
  top: $button-shadow-size;
100
-
101
- @include _govuk-if-ie8 {
102
- border-bottom-width: 0;
103
- }
104
111
  }
105
112
 
106
113
  &:focus {
107
114
  border-color: $govuk-focus-colour;
108
- // When colours are overridden, for example when users have a dark mode,
109
- // backgrounds and box-shadows disappear, so we need to ensure there's a
110
- // transparent outline which will be set to a visible colour.
111
- // Since Internet Explorer 8 does not support box-shadow, we want to force the user-agent outlines
112
- @include _govuk-not-ie8 {
113
- outline: $govuk-focus-width solid transparent;
114
- }
115
- // Since Internet Explorer does not support `:not()` we set a clearer focus style to match user-agent outlines.
116
- @include _govuk-if-ie8 {
117
- color: $govuk-focus-text-colour;
118
- background-color: $govuk-focus-colour;
119
- }
115
+ outline: $govuk-focus-width solid transparent;
120
116
  box-shadow: inset 0 0 0 1px $govuk-focus-colour;
121
117
  }
122
118
 
123
- // alphagov/govuk_template includes a specific a:link:focus selector
124
- // designed to make unvisited links a slightly darker blue when focussed, so
125
- // we need to override the text colour for that combination of selectors so
126
- // so that unvisited links styled as buttons do not end up with dark blue
127
- // text when focussed.
128
- @include _govuk-compatibility(govuk_template) {
129
- &:link:focus {
130
- color: $govuk-button-text-colour;
131
- }
132
- }
133
-
134
119
  &:focus:not(:active):not(:hover) {
135
120
  border-color: $govuk-focus-colour;
136
121
  color: $govuk-focus-text-colour;
@@ -143,7 +128,7 @@ $govuk-button-text-colour: govuk-colour("white") !default;
143
128
 
144
129
  // Use a pseudo element to expand the click target area to include the
145
130
  // button's shadow as well, in case users try to click it.
146
- &:before {
131
+ &::before {
147
132
  content: "";
148
133
  display: block;
149
134
 
@@ -167,17 +152,13 @@ $govuk-button-text-colour: govuk-colour("white") !default;
167
152
  // the click event is still fired.
168
153
  //
169
154
  // 🎉
170
- &:active:before {
155
+ &:active::before {
171
156
  top: -($govuk-border-width-form-element + $button-shadow-size);
172
157
  }
173
158
  }
174
159
 
175
- // @deprecated Disabling buttons using the .govuk-button--disabled class is
176
- // deprecated and will be removed in the next major version.
177
- .govuk-button--disabled,
178
- .govuk-button[disabled="disabled"],
179
160
  .govuk-button[disabled] {
180
- opacity: (.5);
161
+ opacity: (0.5);
181
162
 
182
163
  &:hover {
183
164
  background-color: $govuk-button-colour;
@@ -187,9 +168,6 @@ $govuk-button-text-colour: govuk-colour("white") !default;
187
168
  &:active {
188
169
  top: 0;
189
170
  box-shadow: 0 $button-shadow-size 0 $govuk-button-shadow-colour; // s0
190
- @include _govuk-if-ie8 {
191
- border-bottom: $button-shadow-size solid $govuk-button-shadow-colour; // s0
192
- }
193
171
  }
194
172
  }
195
173
 
@@ -205,17 +183,6 @@ $govuk-button-text-colour: govuk-colour("white") !default;
205
183
  color: $govuk-secondary-button-text-colour;
206
184
  }
207
185
 
208
- // alphagov/govuk_template includes a specific a:link:focus selector
209
- // designed to make unvisited links a slightly darker blue when focussed, so
210
- // we need to override the text colour for that combination of selectors so
211
- // so that unvisited links styled as buttons do not end up with dark blue
212
- // text when focussed.
213
- @include _govuk-compatibility(govuk_template) {
214
- &:link:focus {
215
- color: $govuk-secondary-button-text-colour;
216
- }
217
- }
218
-
219
186
  &:hover {
220
187
  background-color: $govuk-secondary-button-hover-colour;
221
188
 
@@ -237,17 +204,6 @@ $govuk-button-text-colour: govuk-colour("white") !default;
237
204
  color: $govuk-warning-button-text-colour;
238
205
  }
239
206
 
240
- // alphagov/govuk_template includes a specific a:link:focus selector
241
- // designed to make unvisited links a slightly darker blue when focussed, so
242
- // we need to override the text colour for that combination of selectors so
243
- // so that unvisited links styled as buttons do not end up with dark blue
244
- // text when focussed.
245
- @include _govuk-compatibility(govuk_template) {
246
- &:link:focus {
247
- color: $govuk-warning-button-text-colour;
248
- }
249
- }
250
-
251
207
  &:hover {
252
208
  background-color: $govuk-warning-button-hover-colour;
253
209
 
@@ -269,17 +225,6 @@ $govuk-button-text-colour: govuk-colour("white") !default;
269
225
  color: $govuk-inverse-button-text-colour;
270
226
  }
271
227
 
272
- // alphagov/govuk_template includes a specific a:link:focus selector
273
- // designed to make unvisited links a slightly darker blue when focussed, so
274
- // we need to override the text colour for that combination of selectors so
275
- // so that unvisited links styled as buttons do not end up with dark blue
276
- // text when focussed.
277
- @include _govuk-compatibility(govuk_template) {
278
- &:link:focus {
279
- color: $govuk-inverse-button-text-colour;
280
- }
281
- }
282
-
283
228
  &:hover {
284
229
  background-color: $govuk-inverse-button-hover-colour;
285
230
 
@@ -291,16 +236,12 @@ $govuk-button-text-colour: govuk-colour("white") !default;
291
236
 
292
237
  .govuk-button--start {
293
238
  @include govuk-typography-weight-bold;
294
- @include govuk-typography-responsive($size: 24, $override-line-height: 1);
295
-
296
- display: -ms-inline-flexbox;
239
+ @include govuk-font-size($size: 24, $line-height: 1);
297
240
 
298
241
  display: inline-flex;
299
242
  min-height: auto;
300
243
 
301
- -ms-flex-pack: center;
302
-
303
- justify-content: center;
244
+ justify-content: center;
304
245
  }
305
246
 
306
247
  .govuk-button__start-icon {
@@ -310,26 +251,12 @@ $govuk-button-text-colour: govuk-colour("white") !default;
310
251
  margin-left: govuk-spacing(2);
311
252
  }
312
253
  vertical-align: middle;
313
- -ms-flex-negative: 0;
314
- flex-shrink: 0;
315
- -ms-flex-item-align: center;
316
- align-self: center;
254
+ flex-shrink: 0;
255
+ align-self: center;
317
256
  // Work around SVGs not inheriting color from parent in forced color mode
318
257
  // (https://github.com/w3c/csswg-drafts/issues/6310)
319
258
  forced-color-adjust: auto;
320
259
  }
321
-
322
- @if $govuk-use-legacy-font {
323
- // Begin adjustments for font baseline offset when using v1 of nta
324
- $offset: 2;
325
-
326
- .govuk-button {
327
- padding-top: (govuk-spacing(2) - $govuk-border-width-form-element - ($button-shadow-size / 2) + $offset); // s1
328
- padding-bottom: (govuk-spacing(2) - $govuk-border-width-form-element - ($button-shadow-size / 2) - $offset + 1); // s1
329
- }
330
-
331
- .govuk-button__start-icon {
332
- margin-top: -3px;
333
- }
334
- }
335
260
  }
261
+
262
+ /*# sourceMappingURL=_index.scss.map */
@@ -0,0 +1,318 @@
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 isInitialised($root, moduleName) {
78
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
79
+ }
80
+
81
+ /**
82
+ * Checks if GOV.UK Frontend is supported on this page
83
+ *
84
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
85
+ * won't be supported.
86
+ *
87
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
88
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
89
+ */
90
+ function isSupported($scope = document.body) {
91
+ if (!$scope) {
92
+ return false;
93
+ }
94
+ return $scope.classList.contains('govuk-frontend-supported');
95
+ }
96
+ function isArray(option) {
97
+ return Array.isArray(option);
98
+ }
99
+ function isObject(option) {
100
+ return !!option && typeof option === 'object' && !isArray(option);
101
+ }
102
+ function formatErrorMessage(Component, message) {
103
+ return `${Component.moduleName}: ${message}`;
104
+ }
105
+
106
+ /**
107
+ * Schema for component config
108
+ *
109
+ * @typedef {object} Schema
110
+ * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties
111
+ * @property {SchemaCondition[]} [anyOf] - List of schema conditions
112
+ */
113
+
114
+ /**
115
+ * Schema property for component config
116
+ *
117
+ * @typedef {object} SchemaProperty
118
+ * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type
119
+ */
120
+
121
+ /**
122
+ * Schema condition for component config
123
+ *
124
+ * @typedef {object} SchemaCondition
125
+ * @property {string[]} required - List of required config fields
126
+ * @property {string} errorMessage - Error message when required config fields not provided
127
+ */
128
+ /**
129
+ * @typedef ComponentWithModuleName
130
+ * @property {string} moduleName - Name of the component
131
+ */
132
+
133
+ function normaliseDataset(Component, dataset) {
134
+ const out = {};
135
+ for (const [field, property] of Object.entries(Component.schema.properties)) {
136
+ if (field in dataset) {
137
+ out[field] = normaliseString(dataset[field], property);
138
+ }
139
+ if ((property == null ? void 0 : property.type) === 'object') {
140
+ out[field] = extractConfigByNamespace(Component, dataset, field);
141
+ }
142
+ }
143
+ return out;
144
+ }
145
+
146
+ class GOVUKFrontendError extends Error {
147
+ constructor(...args) {
148
+ super(...args);
149
+ this.name = 'GOVUKFrontendError';
150
+ }
151
+ }
152
+ class SupportError extends GOVUKFrontendError {
153
+ /**
154
+ * Checks if GOV.UK Frontend is supported on this page
155
+ *
156
+ * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support
157
+ */
158
+ constructor($scope = document.body) {
159
+ 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';
160
+ super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type="module">`');
161
+ this.name = 'SupportError';
162
+ }
163
+ }
164
+ class ElementError extends GOVUKFrontendError {
165
+ constructor(messageOrOptions) {
166
+ let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
167
+ if (typeof messageOrOptions === 'object') {
168
+ const {
169
+ component,
170
+ identifier,
171
+ element,
172
+ expectedType
173
+ } = messageOrOptions;
174
+ message = identifier;
175
+ message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
176
+ message = formatErrorMessage(component, message);
177
+ }
178
+ super(message);
179
+ this.name = 'ElementError';
180
+ }
181
+ }
182
+ class InitError extends GOVUKFrontendError {
183
+ constructor(componentOrMessage) {
184
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
185
+ super(message);
186
+ this.name = 'InitError';
187
+ }
188
+ }
189
+ /**
190
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
191
+ */
192
+
193
+ class GOVUKFrontendComponent {
194
+ /**
195
+ * Returns the root element of the component
196
+ *
197
+ * @protected
198
+ * @returns {RootElementType} - the root element of component
199
+ */
200
+ get $root() {
201
+ return this._$root;
202
+ }
203
+ constructor($root) {
204
+ this._$root = void 0;
205
+ const childConstructor = this.constructor;
206
+ if (typeof childConstructor.moduleName !== 'string') {
207
+ throw new InitError(`\`moduleName\` not defined in component`);
208
+ }
209
+ if (!($root instanceof childConstructor.elementType)) {
210
+ throw new ElementError({
211
+ element: $root,
212
+ component: childConstructor,
213
+ identifier: 'Root element (`$root`)',
214
+ expectedType: childConstructor.elementType.name
215
+ });
216
+ } else {
217
+ this._$root = $root;
218
+ }
219
+ childConstructor.checkSupport();
220
+ this.checkInitialised();
221
+ const moduleName = childConstructor.moduleName;
222
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
223
+ }
224
+ checkInitialised() {
225
+ const constructor = this.constructor;
226
+ const moduleName = constructor.moduleName;
227
+ if (moduleName && isInitialised(this.$root, moduleName)) {
228
+ throw new InitError(constructor);
229
+ }
230
+ }
231
+ static checkSupport() {
232
+ if (!isSupported()) {
233
+ throw new SupportError();
234
+ }
235
+ }
236
+ }
237
+
238
+ /**
239
+ * @typedef ChildClass
240
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
241
+ */
242
+
243
+ /**
244
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
245
+ */
246
+ GOVUKFrontendComponent.elementType = HTMLElement;
247
+
248
+ const DEBOUNCE_TIMEOUT_IN_SECONDS = 1;
249
+
250
+ /**
251
+ * JavaScript enhancements for the Button component
252
+ *
253
+ * @preserve
254
+ */
255
+ class Button extends GOVUKFrontendComponent {
256
+ /**
257
+ * @param {Element | null} $root - HTML element to use for button
258
+ * @param {ButtonConfig} [config] - Button config
259
+ */
260
+ constructor($root, config = {}) {
261
+ super($root);
262
+ this.config = void 0;
263
+ this.debounceFormSubmitTimer = null;
264
+ this.config = mergeConfigs(Button.defaults, config, normaliseDataset(Button, this.$root.dataset));
265
+ this.$root.addEventListener('keydown', event => this.handleKeyDown(event));
266
+ this.$root.addEventListener('click', event => this.debounce(event));
267
+ }
268
+ handleKeyDown(event) {
269
+ const $target = event.target;
270
+ if (event.key !== ' ') {
271
+ return;
272
+ }
273
+ if ($target instanceof HTMLElement && $target.getAttribute('role') === 'button') {
274
+ event.preventDefault();
275
+ $target.click();
276
+ }
277
+ }
278
+ debounce(event) {
279
+ if (!this.config.preventDoubleClick) {
280
+ return;
281
+ }
282
+ if (this.debounceFormSubmitTimer) {
283
+ event.preventDefault();
284
+ return false;
285
+ }
286
+ this.debounceFormSubmitTimer = window.setTimeout(() => {
287
+ this.debounceFormSubmitTimer = null;
288
+ }, DEBOUNCE_TIMEOUT_IN_SECONDS * 1000);
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Button config
294
+ *
295
+ * @typedef {object} ButtonConfig
296
+ * @property {boolean} [preventDoubleClick=false] - Prevent accidental double
297
+ * clicks on submit buttons from submitting forms multiple times.
298
+ */
299
+
300
+ /**
301
+ * @typedef {import('../../common/index.mjs').Schema} Schema
302
+ */
303
+ Button.moduleName = 'govuk-button';
304
+ Button.defaults = Object.freeze({
305
+ preventDoubleClick: false
306
+ });
307
+ Button.schema = Object.freeze({
308
+ properties: {
309
+ preventDoubleClick: {
310
+ type: 'boolean'
311
+ }
312
+ }
313
+ });
314
+
315
+ exports.Button = Button;
316
+
317
+ }));
318
+ //# sourceMappingURL=button.bundle.js.map