defra_ruby_template 5.4.0 → 5.11.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 (428) hide show
  1. checksums.yaml +4 -4
  2. data/app/views/layouts/defra_ruby_template.html.erb +43 -23
  3. data/lib/defra_ruby_template/version.rb +1 -1
  4. data/lib/defra_ruby_template.rb +3 -8
  5. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +882 -492
  6. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js.map +1 -1
  7. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +877 -492
  8. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs.map +1 -1
  9. data/node_modules/govuk-frontend/dist/govuk/all.mjs +5 -0
  10. data/node_modules/govuk-frontend/dist/govuk/all.mjs.map +1 -1
  11. data/node_modules/govuk-frontend/dist/govuk/all.scss +6 -0
  12. data/node_modules/govuk-frontend/dist/govuk/all.scss.map +1 -1
  13. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.svg +1 -0
  14. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/favicon.ico +0 -0
  15. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/favicon.svg +1 -0
  16. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-crest.svg +1 -0
  17. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-180.png +0 -0
  18. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-192.png +0 -0
  19. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-512.png +0 -0
  20. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-icon-mask.svg +1 -0
  21. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/images/govuk-opengraph-image.png +0 -0
  22. data/node_modules/govuk-frontend/dist/govuk/assets/rebrand/manifest.json +39 -0
  23. data/node_modules/govuk-frontend/dist/govuk/common/closest-attribute-value.mjs.map +1 -1
  24. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs +169 -0
  25. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs.map +1 -0
  26. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +1 -1
  27. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +20 -83
  28. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs.map +1 -1
  29. data/node_modules/govuk-frontend/dist/govuk/component.mjs +60 -0
  30. data/node_modules/govuk-frontend/dist/govuk/component.mjs.map +1 -0
  31. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss +1 -0
  32. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss.map +1 -1
  33. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_index.scss +35 -31
  34. data/node_modules/govuk-frontend/dist/govuk/components/accordion/_index.scss.map +1 -1
  35. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +296 -195
  36. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js.map +1 -1
  37. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +295 -194
  38. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs.map +1 -1
  39. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +88 -110
  40. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs.map +1 -1
  41. data/node_modules/govuk-frontend/dist/govuk/components/accordion/fixtures.json +16 -3
  42. data/node_modules/govuk-frontend/dist/govuk/components/back-link/fixtures.json +25 -15
  43. data/node_modules/govuk-frontend/dist/govuk/components/back-link/template-with-custom-link.html +1 -0
  44. data/node_modules/govuk-frontend/dist/govuk/components/back-link/template.njk +2 -2
  45. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/fixtures.json +53 -15
  46. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/macro-options.json +6 -0
  47. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-default.html +2 -2
  48. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-inverse.html +2 -2
  49. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-collapse-on-mobile.html +2 -2
  50. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-last-breadcrumb-as-current-page.html +2 -2
  51. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-multiple-levels.html +2 -2
  52. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-with-one-level.html +2 -2
  53. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template-without-the-home-section.html +2 -2
  54. data/node_modules/govuk-frontend/dist/govuk/components/breadcrumbs/template.njk +2 -2
  55. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +217 -106
  56. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js.map +1 -1
  57. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +216 -105
  58. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs.map +1 -1
  59. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +9 -22
  60. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs.map +1 -1
  61. data/node_modules/govuk-frontend/dist/govuk/components/button/fixtures.json +38 -0
  62. data/node_modules/govuk-frontend/dist/govuk/components/button/macro-options.json +2 -1
  63. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_index.scss +12 -4
  64. data/node_modules/govuk-frontend/dist/govuk/components/character-count/_index.scss.map +1 -1
  65. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +256 -145
  66. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js.map +1 -1
  67. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +255 -144
  68. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs.map +1 -1
  69. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +29 -34
  70. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs.map +1 -1
  71. data/node_modules/govuk-frontend/dist/govuk/components/character-count/fixtures.json +80 -1
  72. data/node_modules/govuk-frontend/dist/govuk/components/character-count/macro-options.json +6 -6
  73. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template-with-error.html +12 -0
  74. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template-with-hint-and-error.html +15 -0
  75. data/node_modules/govuk-frontend/dist/govuk/components/character-count/template.njk +5 -4
  76. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_index.scss +6 -1
  77. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/_index.scss.map +1 -1
  78. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +96 -50
  79. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js.map +1 -1
  80. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +95 -49
  81. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs.map +1 -1
  82. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +9 -18
  83. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs.map +1 -1
  84. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/fixtures.json +88 -1
  85. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/template-small-with-divider-and-none.html +34 -0
  86. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_index.scss +23 -14
  87. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/_index.scss.map +1 -1
  88. data/node_modules/govuk-frontend/dist/govuk/components/cookie-banner/fixtures.json +23 -0
  89. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_index.scss +2 -2
  90. data/node_modules/govuk-frontend/dist/govuk/components/date-input/_index.scss.map +1 -1
  91. data/node_modules/govuk-frontend/dist/govuk/components/date-input/fixtures.json +27 -0
  92. data/node_modules/govuk-frontend/dist/govuk/components/date-input/macro-options.json +2 -2
  93. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +7 -2
  94. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss.map +1 -1
  95. data/node_modules/govuk-frontend/dist/govuk/components/details/fixtures.json +10 -0
  96. data/node_modules/govuk-frontend/dist/govuk/components/error-message/fixtures.json +9 -0
  97. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_index.scss +4 -0
  98. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/_index.scss.map +1 -1
  99. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +238 -127
  100. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js.map +1 -1
  101. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +237 -126
  102. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs.map +1 -1
  103. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +10 -22
  104. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs.map +1 -1
  105. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/fixtures.json +19 -0
  106. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +218 -107
  107. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js.map +1 -1
  108. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +217 -106
  109. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs.map +1 -1
  110. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +10 -22
  111. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs.map +1 -1
  112. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/fixtures.json +4 -0
  113. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_index.scss +3 -5
  114. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/_index.scss.map +1 -1
  115. data/node_modules/govuk-frontend/dist/govuk/components/fieldset/fixtures.json +18 -0
  116. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_index.scss +175 -9
  117. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/_index.scss.map +1 -1
  118. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.js +744 -0
  119. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.js.map +1 -0
  120. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.mjs +736 -0
  121. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.bundle.mjs.map +1 -0
  122. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.mjs +257 -0
  123. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/file-upload.mjs.map +1 -0
  124. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/fixtures.json +220 -16
  125. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/macro-options.json +52 -3
  126. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-direct-media-capture.html +6 -0
  127. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-image-files-only.html +6 -0
  128. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-allows-multiple-files.html +6 -0
  129. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-disabled.html +6 -0
  130. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced-disabled.html +13 -0
  131. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced-with-error-message-and-hint.html +16 -0
  132. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-enhanced.html +10 -0
  133. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-translated.html +10 -0
  134. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template.njk +42 -5
  135. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss +61 -19
  136. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss.map +1 -1
  137. data/node_modules/govuk-frontend/dist/govuk/components/footer/fixtures.json +34 -0
  138. data/node_modules/govuk-frontend/dist/govuk/components/footer/macro-options.json +6 -0
  139. data/node_modules/govuk-frontend/dist/govuk/components/footer/template.njk +10 -0
  140. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss +223 -21
  141. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss.map +1 -1
  142. data/node_modules/govuk-frontend/dist/govuk/components/header/fixtures.json +78 -32
  143. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +90 -43
  144. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js.map +1 -1
  145. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +89 -42
  146. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs.map +1 -1
  147. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +10 -18
  148. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs.map +1 -1
  149. data/node_modules/govuk-frontend/dist/govuk/components/header/macro-options.json +31 -12
  150. data/node_modules/govuk-frontend/dist/govuk/components/header/template-default.html +20 -12
  151. data/node_modules/govuk-frontend/dist/govuk/components/header/template-full-width-with-navigation.html +21 -15
  152. data/node_modules/govuk-frontend/dist/govuk/components/header/template-full-width.html +21 -15
  153. data/node_modules/govuk-frontend/dist/govuk/components/header/template-navigation-item-with-html.html +20 -12
  154. data/node_modules/govuk-frontend/dist/govuk/components/header/template-navigation-item-with-text-without-link.html +20 -12
  155. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-menu-button-label.html +20 -12
  156. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-menu-button-text.html +20 -12
  157. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-custom-navigation-label.html +20 -12
  158. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-full-width-border.html +30 -0
  159. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-large-navigation.html +20 -12
  160. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-navigation.html +20 -12
  161. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-product-name.html +21 -15
  162. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name-and-navigation.html +20 -12
  163. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name-but-no-service-url.html +20 -12
  164. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-service-name.html +20 -12
  165. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-st-edwards-crown.html +10 -12
  166. data/node_modules/govuk-frontend/dist/govuk/components/header/template.njk +11 -41
  167. data/node_modules/govuk-frontend/dist/govuk/components/hint/fixtures.json +6 -0
  168. data/node_modules/govuk-frontend/dist/govuk/components/input/_index.scss +7 -4
  169. data/node_modules/govuk-frontend/dist/govuk/components/input/_index.scss.map +1 -1
  170. data/node_modules/govuk-frontend/dist/govuk/components/input/fixtures.json +97 -27
  171. data/node_modules/govuk-frontend/dist/govuk/components/input/macro-options.json +6 -6
  172. data/node_modules/govuk-frontend/dist/govuk/components/input/template-default.html +2 -2
  173. data/node_modules/govuk-frontend/dist/govuk/components/input/template-disabled.html +6 -0
  174. data/node_modules/govuk-frontend/dist/govuk/components/input/template-with-error-and-hint.html +12 -0
  175. data/node_modules/govuk-frontend/dist/govuk/components/input/template-with-error-message.html +2 -5
  176. data/node_modules/govuk-frontend/dist/govuk/components/input/template.njk +5 -4
  177. data/node_modules/govuk-frontend/dist/govuk/components/inset-text/fixtures.json +6 -0
  178. data/node_modules/govuk-frontend/dist/govuk/components/label/fixtures.json +17 -0
  179. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_index.scss +3 -2
  180. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/_index.scss.map +1 -1
  181. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/fixtures.json +24 -0
  182. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +238 -127
  183. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js.map +1 -1
  184. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +237 -126
  185. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs.map +1 -1
  186. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +10 -22
  187. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs.map +1 -1
  188. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_index.scss +24 -37
  189. data/node_modules/govuk-frontend/dist/govuk/components/pagination/_index.scss.map +1 -1
  190. data/node_modules/govuk-frontend/dist/govuk/components/pagination/fixtures.json +15 -0
  191. data/node_modules/govuk-frontend/dist/govuk/components/pagination/macro-options.json +4 -4
  192. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss +13 -9
  193. data/node_modules/govuk-frontend/dist/govuk/components/panel/_index.scss.map +1 -1
  194. data/node_modules/govuk-frontend/dist/govuk/components/panel/fixtures.json +9 -0
  195. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss +12 -9
  196. data/node_modules/govuk-frontend/dist/govuk/components/password-input/_index.scss.map +1 -1
  197. data/node_modules/govuk-frontend/dist/govuk/components/password-input/fixtures.json +27 -2
  198. data/node_modules/govuk-frontend/dist/govuk/components/password-input/macro-options.json +3 -3
  199. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +220 -110
  200. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js.map +1 -1
  201. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +219 -109
  202. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs.map +1 -1
  203. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +12 -25
  204. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs.map +1 -1
  205. data/node_modules/govuk-frontend/dist/govuk/components/password-input/template-default.html +3 -3
  206. data/node_modules/govuk-frontend/dist/govuk/components/password-input/template.njk +4 -2
  207. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_index.scss +0 -8
  208. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/_index.scss.map +1 -1
  209. data/node_modules/govuk-frontend/dist/govuk/components/phase-banner/fixtures.json +7 -0
  210. data/node_modules/govuk-frontend/dist/govuk/components/radios/_index.scss +7 -5
  211. data/node_modules/govuk-frontend/dist/govuk/components/radios/_index.scss.map +1 -1
  212. data/node_modules/govuk-frontend/dist/govuk/components/radios/fixtures.json +51 -5
  213. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +96 -50
  214. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js.map +1 -1
  215. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +95 -49
  216. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs.map +1 -1
  217. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +9 -18
  218. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs.map +1 -1
  219. data/node_modules/govuk-frontend/dist/govuk/components/radios/template-small-with-a-divider.html +1 -1
  220. data/node_modules/govuk-frontend/dist/govuk/components/radios/template-with-a-divider.html +1 -1
  221. data/node_modules/govuk-frontend/dist/govuk/components/select/_index.scss +5 -5
  222. data/node_modules/govuk-frontend/dist/govuk/components/select/_index.scss.map +1 -1
  223. data/node_modules/govuk-frontend/dist/govuk/components/select/fixtures.json +43 -9
  224. data/node_modules/govuk-frontend/dist/govuk/components/select/macro-options.json +2 -2
  225. data/node_modules/govuk-frontend/dist/govuk/components/select/template-id.html +7 -0
  226. data/node_modules/govuk-frontend/dist/govuk/components/select/template.njk +6 -4
  227. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/README.md +15 -0
  228. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +187 -0
  229. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss.map +1 -0
  230. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
  231. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss.map +1 -0
  232. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/fixtures.json +515 -0
  233. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro-options.json +138 -0
  234. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro.njk +3 -0
  235. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +229 -0
  236. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js.map +1 -0
  237. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +221 -0
  238. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs.map +1 -0
  239. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
  240. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs.map +1 -0
  241. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-default.html +57 -0
  242. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-html-navigation-items.html +49 -0
  243. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-large-navigation.html +153 -0
  244. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-long-service-name.html +20 -0
  245. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-a-current-item.html +58 -0
  246. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-an-active-item.html +58 -0
  247. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-non-link-navigation-items.html +49 -0
  248. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-link.html +20 -0
  249. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name-and-navigation.html +63 -0
  250. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name.html +18 -0
  251. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template.njk +103 -0
  252. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_index.scss +6 -4
  253. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/_index.scss.map +1 -1
  254. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/fixtures.json +9 -0
  255. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +95 -48
  256. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js.map +1 -1
  257. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +94 -47
  258. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs.map +1 -1
  259. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +15 -23
  260. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs.map +1 -1
  261. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_index.scss +14 -22
  262. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/_index.scss.map +1 -1
  263. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/fixtures.json +174 -1
  264. data/node_modules/govuk-frontend/dist/govuk/components/summary-list/template-as-a-summary-card-extreme.html +106 -0
  265. data/node_modules/govuk-frontend/dist/govuk/components/table/fixtures.json +22 -1
  266. data/node_modules/govuk-frontend/dist/govuk/components/tabs/fixtures.json +15 -1
  267. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +95 -53
  268. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js.map +1 -1
  269. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +94 -52
  270. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs.map +1 -1
  271. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +15 -28
  272. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs.map +1 -1
  273. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss +11 -8
  274. data/node_modules/govuk-frontend/dist/govuk/components/tag/_index.scss.map +1 -1
  275. data/node_modules/govuk-frontend/dist/govuk/components/tag/fixtures.json +14 -0
  276. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss +12 -10
  277. data/node_modules/govuk-frontend/dist/govuk/components/task-list/_index.scss.map +1 -1
  278. data/node_modules/govuk-frontend/dist/govuk/components/task-list/fixtures.json +44 -0
  279. data/node_modules/govuk-frontend/dist/govuk/components/task-list/template-with-empty-values.html +27 -0
  280. data/node_modules/govuk-frontend/dist/govuk/components/task-list/template.njk +1 -1
  281. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_index.scss +3 -3
  282. data/node_modules/govuk-frontend/dist/govuk/components/textarea/_index.scss.map +1 -1
  283. data/node_modules/govuk-frontend/dist/govuk/components/textarea/fixtures.json +32 -1
  284. data/node_modules/govuk-frontend/dist/govuk/components/textarea/macro-options.json +3 -3
  285. data/node_modules/govuk-frontend/dist/govuk/components/textarea/template.njk +6 -4
  286. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss +6 -5
  287. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss.map +1 -1
  288. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/fixtures.json +8 -0
  289. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +1 -1
  290. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss.map +1 -1
  291. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +16 -3
  292. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs.map +1 -1
  293. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css +2 -2
  294. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css.map +1 -1
  295. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -1
  296. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js.map +1 -1
  297. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss +55 -8
  298. data/node_modules/govuk-frontend/dist/govuk/helpers/_colour.scss.map +1 -1
  299. data/node_modules/govuk-frontend/dist/govuk/helpers/_focused.scss +14 -4
  300. data/node_modules/govuk-frontend/dist/govuk/helpers/_focused.scss.map +1 -1
  301. data/node_modules/govuk-frontend/dist/govuk/helpers/_grid.scss +1 -1
  302. data/node_modules/govuk-frontend/dist/govuk/helpers/_grid.scss.map +1 -1
  303. data/node_modules/govuk-frontend/dist/govuk/helpers/_links.scss +2 -2
  304. data/node_modules/govuk-frontend/dist/govuk/helpers/_links.scss.map +1 -1
  305. data/node_modules/govuk-frontend/dist/govuk/helpers/_shape-arrow.scss +1 -1
  306. data/node_modules/govuk-frontend/dist/govuk/helpers/_shape-arrow.scss.map +1 -1
  307. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss +18 -1
  308. data/node_modules/govuk-frontend/dist/govuk/helpers/_typography.scss.map +1 -1
  309. data/node_modules/govuk-frontend/dist/govuk/helpers/_visually-hidden.scss +30 -62
  310. data/node_modules/govuk-frontend/dist/govuk/helpers/_visually-hidden.scss.map +1 -1
  311. data/node_modules/govuk-frontend/dist/govuk/i18n.mjs.map +1 -1
  312. data/node_modules/govuk-frontend/dist/govuk/init.mjs +90 -24
  313. data/node_modules/govuk-frontend/dist/govuk/init.mjs.map +1 -1
  314. data/node_modules/govuk-frontend/dist/govuk/macros/logo.njk +78 -0
  315. data/node_modules/govuk-frontend/dist/govuk/objects/_template.scss +5 -1
  316. data/node_modules/govuk-frontend/dist/govuk/objects/_template.scss.map +1 -1
  317. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss +5 -1
  318. data/node_modules/govuk-frontend/dist/govuk/overrides/_typography.scss.map +1 -1
  319. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-applied.scss +39 -1
  320. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-applied.scss.map +1 -1
  321. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +244 -10
  322. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss.map +1 -1
  323. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +5 -10
  324. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss.map +1 -1
  325. data/node_modules/govuk-frontend/dist/govuk/template.njk +20 -9
  326. data/node_modules/govuk-frontend/dist/govuk/tools/_index.scss +1 -0
  327. data/node_modules/govuk-frontend/dist/govuk/tools/_index.scss.map +1 -1
  328. data/node_modules/govuk-frontend/dist/govuk/tools/_rebrand.scss +65 -0
  329. data/node_modules/govuk-frontend/dist/govuk/tools/_rebrand.scss.map +1 -0
  330. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/functions.js +25 -0
  331. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.scss +1 -1
  332. data/node_modules/govuk-frontend/dist/govuk-prototype-kit/init.scss.map +1 -1
  333. data/node_modules/govuk-frontend/govuk-prototype-kit.config.json +8 -1
  334. data/node_modules/govuk-frontend/package.json +16 -16
  335. data/spec/spec_helper.rb +98 -0
  336. data/spec/tasks/assets_spec.rb +53 -0
  337. data/vendor/assets/assets/fonts/bold-affa96571d-v2.woff +0 -0
  338. data/vendor/assets/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
  339. data/vendor/assets/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
  340. data/vendor/assets/assets/fonts/light-f591b13f7d-v2.woff +0 -0
  341. data/vendor/assets/assets/images/favicon.ico +0 -0
  342. data/vendor/assets/assets/images/favicon.svg +1 -0
  343. data/vendor/assets/assets/images/govuk-crest.svg +1 -0
  344. data/vendor/assets/assets/images/govuk-icon-180.png +0 -0
  345. data/vendor/assets/assets/images/govuk-icon-192.png +0 -0
  346. data/vendor/assets/assets/images/govuk-icon-512.png +0 -0
  347. data/vendor/assets/assets/images/govuk-icon-mask.svg +1 -0
  348. data/vendor/assets/assets/images/govuk-opengraph-image.png +0 -0
  349. data/vendor/assets/assets/manifest.json +39 -0
  350. data/vendor/assets/assets/rebrand/images/favicon.ico +0 -0
  351. data/vendor/assets/assets/rebrand/images/favicon.svg +1 -0
  352. data/vendor/assets/assets/rebrand/images/govuk-crest.svg +1 -0
  353. data/vendor/assets/assets/rebrand/images/govuk-icon-180.png +0 -0
  354. data/vendor/assets/assets/rebrand/images/govuk-icon-192.png +0 -0
  355. data/vendor/assets/assets/rebrand/images/govuk-icon-512.png +0 -0
  356. data/vendor/assets/assets/rebrand/images/govuk-icon-mask.svg +1 -0
  357. data/vendor/assets/assets/rebrand/images/govuk-opengraph-image.png +0 -0
  358. data/vendor/assets/assets/rebrand/manifest.json +39 -0
  359. data/vendor/assets/images/govuk-crest.svg +1 -0
  360. data/vendor/assets/javascripts/defra_ruby_template.js +882 -492
  361. data/vendor/assets/stylesheets/all.scss +6 -0
  362. data/vendor/assets/stylesheets/components/_index.scss +1 -0
  363. data/vendor/assets/stylesheets/components/accordion/_index.scss +35 -31
  364. data/vendor/assets/stylesheets/components/character-count/_index.scss +12 -4
  365. data/vendor/assets/stylesheets/components/checkboxes/_index.scss +6 -1
  366. data/vendor/assets/stylesheets/components/cookie-banner/_index.scss +23 -14
  367. data/vendor/assets/stylesheets/components/date-input/_index.scss +2 -2
  368. data/vendor/assets/stylesheets/components/details/_index.scss +7 -2
  369. data/vendor/assets/stylesheets/components/error-summary/_index.scss +4 -0
  370. data/vendor/assets/stylesheets/components/fieldset/_index.scss +3 -5
  371. data/vendor/assets/stylesheets/components/file-upload/_index.scss +175 -9
  372. data/vendor/assets/stylesheets/components/footer/_index.scss +61 -19
  373. data/vendor/assets/stylesheets/components/header/_index.scss +223 -21
  374. data/vendor/assets/stylesheets/components/input/_index.scss +7 -4
  375. data/vendor/assets/stylesheets/components/notification-banner/_index.scss +3 -2
  376. data/vendor/assets/stylesheets/components/pagination/_index.scss +24 -37
  377. data/vendor/assets/stylesheets/components/panel/_index.scss +13 -9
  378. data/vendor/assets/stylesheets/components/password-input/_index.scss +12 -9
  379. data/vendor/assets/stylesheets/components/phase-banner/_index.scss +0 -8
  380. data/vendor/assets/stylesheets/components/radios/_index.scss +7 -5
  381. data/vendor/assets/stylesheets/components/select/_index.scss +5 -5
  382. data/vendor/assets/stylesheets/components/service-navigation/_index.scss +187 -0
  383. data/vendor/assets/stylesheets/components/service-navigation/_service-navigation.scss +4 -0
  384. data/vendor/assets/stylesheets/components/skip-link/_index.scss +6 -4
  385. data/vendor/assets/stylesheets/components/summary-list/_index.scss +14 -22
  386. data/vendor/assets/stylesheets/components/tag/_index.scss +11 -8
  387. data/vendor/assets/stylesheets/components/task-list/_index.scss +12 -10
  388. data/vendor/assets/stylesheets/components/textarea/_index.scss +3 -3
  389. data/vendor/assets/stylesheets/components/warning-text/_index.scss +6 -5
  390. data/vendor/assets/stylesheets/core/_govuk-frontend-properties.scss +1 -1
  391. data/vendor/assets/stylesheets/defra_ruby_template.scss +6 -0
  392. data/vendor/assets/stylesheets/govuk-frontend.min.css +2 -2
  393. data/vendor/assets/stylesheets/helpers/_colour.scss +55 -8
  394. data/vendor/assets/stylesheets/helpers/_focused.scss +14 -4
  395. data/vendor/assets/stylesheets/helpers/_grid.scss +1 -1
  396. data/vendor/assets/stylesheets/helpers/_links.scss +2 -2
  397. data/vendor/assets/stylesheets/helpers/_shape-arrow.scss +1 -1
  398. data/vendor/assets/stylesheets/helpers/_typography.scss +18 -1
  399. data/vendor/assets/stylesheets/helpers/_visually-hidden.scss +30 -62
  400. data/vendor/assets/stylesheets/objects/_template.scss +5 -1
  401. data/vendor/assets/stylesheets/overrides/_typography.scss +5 -1
  402. data/vendor/assets/stylesheets/settings/_colours-applied.scss +39 -1
  403. data/vendor/assets/stylesheets/settings/_colours-organisations.scss +244 -10
  404. data/vendor/assets/stylesheets/settings/_typography-responsive.scss +5 -10
  405. data/vendor/assets/stylesheets/tools/_index.scss +1 -0
  406. data/vendor/assets/stylesheets/tools/_rebrand.scss +65 -0
  407. metadata +100 -24
  408. data/.github/dependabot.yml +0 -14
  409. data/.github/workflows/ci.yml +0 -31
  410. data/.gitignore +0 -8
  411. data/.rspec +0 -1
  412. data/.rubocop.yml +0 -3
  413. data/.ruby-version +0 -1
  414. data/Gemfile +0 -9
  415. data/Gemfile.lock +0 -58
  416. data/defra_ruby_template.gemspec +0 -35
  417. data/node_modules/.package-lock.json +0 -16
  418. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest-2x.png +0 -0
  419. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.png +0 -0
  420. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +0 -18
  421. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs.map +0 -1
  422. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +0 -31
  423. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs.map +0 -1
  424. data/node_modules/govuk-frontend/dist/govuk/components/file-upload/template-with-value.html +0 -6
  425. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +0 -16
  426. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs.map +0 -1
  427. data/package-lock.json +0 -24
  428. data/package.json +0 -29
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/govuk/common/index.mjs"],"sourcesContent":["import { normaliseString } from './normalise-string.mjs'\n\n/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @internal\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\nexport function mergeConfigs(...configObjects) {\n // Start with an empty object as our base\n /** @type {{ [key: string]: unknown }} */\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (isObject(option) && isObject(override)) {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = mergeConfigs(option, override)\n } else {\n // Apply override\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n}\n\n/**\n * Extracts keys starting with a particular namespace from dataset ('data-*')\n * object, removing the namespace in the process, normalising all values\n *\n * @internal\n * @param {{ schema: Schema }} Component - Component class\n * @param {DOMStringMap} dataset - The object to extract key-value pairs from\n * @param {string} namespace - The namespace to filter keys with\n * @returns {ObjectNested | undefined} Nested object with dot-separated key namespace removed\n */\nexport function extractConfigByNamespace(Component, dataset, namespace) {\n const property = Component.schema.properties[namespace]\n\n // Only extract configs for object schema properties\n if (property?.type !== 'object') {\n return\n }\n\n // Add default empty config\n const newObject = {\n [namespace]: /** @type {ObjectNested} */ ({})\n }\n\n for (const [key, value] of Object.entries(dataset)) {\n /** @type {ObjectNested | ObjectNested[NestedKey]} */\n let current = newObject\n\n // Split the key into parts, using . as our namespace separator\n const keyParts = key.split('.')\n\n /**\n * Create new level per part\n *\n * e.g. 'i18n.textareaDescription.other' becomes\n * `{ i18n: { textareaDescription: { other } } }`\n */\n for (const [index, name] of keyParts.entries()) {\n if (typeof current === 'object') {\n // Drop down to nested object until the last part\n if (index < keyParts.length - 1) {\n // New nested object (optionally) replaces existing value\n if (!isObject(current[name])) {\n current[name] = {}\n }\n\n // Drop down into new or existing nested object\n current = current[name]\n } else if (key !== namespace) {\n // Normalised value (optionally) replaces existing value\n current[name] = normaliseString(value)\n }\n }\n }\n }\n\n return newObject[namespace]\n}\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @internal\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Validate component config by schema\n *\n * Follows limited examples in JSON schema for wider support in future\n *\n * {@link https://ajv.js.org/json-schema.html#compound-keywords}\n * {@link https://ajv.js.org/packages/ajv-errors.html#single-message}\n *\n * @internal\n * @param {Schema} schema - Config schema\n * @param {{ [key: string]: unknown }} config - Component config\n * @returns {string[]} List of validation errors\n */\nexport function validateConfig(schema, config) {\n const validationErrors = []\n\n // Check errors for each schema\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = []\n\n // Check errors for each schema condition\n if (Array.isArray(conditions)) {\n for (const { required, errorMessage } of conditions) {\n if (!required.every((key) => !!config[key])) {\n errors.push(errorMessage) // Missing config key value\n }\n }\n\n // Check one condition passes or add errors\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors)\n }\n }\n }\n\n return validationErrors\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an object\n */\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n * @property {SchemaCondition[]} [anyOf] - List of schema conditions\n */\n\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n\n/**\n * Schema condition for component config\n *\n * @typedef {object} SchemaCondition\n * @property {string[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n\n/**\n * @internal\n * @typedef {keyof ObjectNested} NestedKey\n * @typedef {{ [key: string]: string | boolean | number | ObjectNested | undefined }} ObjectNested\n */\n"],"names":["mergeConfigs","configObjects","formattedConfigObject","configObject","key","Object","keys","option","override","isObject","extractConfigByNamespace","Component","dataset","namespace","property","schema","properties","type","newObject","value","entries","current","keyParts","split","index","name","length","normaliseString","getFragmentFromUrl","url","includes","undefined","pop","getBreakpoint","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isSupported","$scope","body","classList","contains","validateConfig","config","validationErrors","conditions","errors","Array","isArray","required","errorMessage","every","push"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/govuk/common/index.mjs"],"sourcesContent":["/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\n}\n\n/**\n * Checks if component is already initialised\n *\n * @internal\n * @param {Element} $root - HTML element to be checked\n * @param {string} moduleName - name of component module\n * @returns {boolean} Whether component is already initialised\n */\nexport function isInitialised($root, moduleName) {\n return (\n $root instanceof HTMLElement &&\n $root.hasAttribute(`data-${moduleName}-init`)\n )\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @template {Partial<Record<keyof ObjectType, unknown>>} [ObjectType=ObjectNested]\n * @param {unknown | ObjectType} option - Option to check\n * @returns {option is ObjectType} Whether the option is an object\n */\nexport function isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Format error message\n *\n * @internal\n * @param {ComponentWithModuleName} Component - Component that threw the error\n * @param {string} message - Error message\n * @returns {string} - Formatted error message\n */\nexport function formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`\n}\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\n/* eslint-enable jsdoc/valid-types */\n\n/**\n * @import { ObjectNested } from './configuration.mjs'\n */\n"],"names":["getFragmentFromUrl","url","includes","undefined","split","pop","getBreakpoint","name","property","value","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message"],"mappings":"AAkBO,SAASA,kBAAkBA,CAACC,GAAG,EAAE;AACtC,EAAA,IAAI,CAACA,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtB,IAAA,OAAOC,SAAS;AAClB;EAEA,OAAOF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE;AAC7B;AASO,SAASC,aAAaA,CAACC,IAAI,EAAE;AAClC,EAAA,MAAMC,QAAQ,GAAG,CAA+BD,4BAAAA,EAAAA,IAAI,CAAE,CAAA;AAGtD,EAAA,MAAME,KAAK,GAAGC,MAAM,CACjBC,gBAAgB,CAACC,QAAQ,CAACC,eAAe,CAAC,CAC1CC,gBAAgB,CAACN,QAAQ,CAAC;EAE7B,OAAO;IACLA,QAAQ;IACRC,KAAK,EAAEA,KAAK,IAAIN;GACjB;AACH;AAeO,SAASY,QAAQA,CAACC,QAAQ,EAAEC,OAAO,GAAG,EAAE,EAAE;AAAA,EAAA,IAAAC,qBAAA;AAC/C,EAAA,MAAMC,WAAW,GAAGH,QAAQ,CAACI,YAAY,CAAC,UAAU,CAAC;EAErD,IAAI,CAACD,WAAW,EAAE;AAChBH,IAAAA,QAAQ,CAACK,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AACzC;EAKA,SAASC,OAAOA,GAAG;AACjBN,IAAAA,QAAQ,CAACO,gBAAgB,CAAC,MAAM,EAAEC,MAAM,EAAE;AAAEC,MAAAA,IAAI,EAAE;AAAK,KAAC,CAAC;AAC3D;EAKA,SAASD,MAAMA,GAAG;AAAA,IAAA,IAAAE,eAAA;IAChB,CAAAA,eAAA,GAAAT,OAAO,CAACO,MAAM,KAAdE,IAAAA,IAAAA,eAAA,CAAgBC,IAAI,CAACX,QAAQ,CAAC;IAE9B,IAAI,CAACG,WAAW,EAAE;AAChBH,MAAAA,QAAQ,CAACY,eAAe,CAAC,UAAU,CAAC;AACtC;AACF;AAGAZ,EAAAA,QAAQ,CAACO,gBAAgB,CAAC,OAAO,EAAED,OAAO,EAAE;AAAEG,IAAAA,IAAI,EAAE;AAAK,GAAC,CAAC;EAG3D,CAAAP,qBAAA,GAAAD,OAAO,CAACY,aAAa,KAArBX,IAAAA,IAAAA,qBAAA,CAAuBS,IAAI,CAACX,QAAQ,CAAC;EACrCA,QAAQ,CAACc,KAAK,EAAE;AAClB;AAUO,SAASC,aAAaA,CAACC,KAAK,EAAEC,UAAU,EAAE;EAC/C,OACED,KAAK,YAAYE,WAAW,IAC5BF,KAAK,CAACG,YAAY,CAAC,CAAA,KAAA,EAAQF,UAAU,CAAA,KAAA,CAAO,CAAC;AAEjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAACC,MAAM,GAAGzB,QAAQ,CAAC0B,IAAI,EAAE;EAClD,IAAI,CAACD,MAAM,EAAE;AACX,IAAA,OAAO,KAAK;AACd;AAEA,EAAA,OAAOA,MAAM,CAACE,SAAS,CAACC,QAAQ,CAAC,0BAA0B,CAAC;AAC9D;AASA,SAASC,OAAOA,CAACC,MAAM,EAAE;AACvB,EAAA,OAAOC,KAAK,CAACF,OAAO,CAACC,MAAM,CAAC;AAC9B;AAUO,SAASE,QAAQA,CAACF,MAAM,EAAE;AAC/B,EAAA,OAAO,CAAC,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM,CAAC;AACnE;AAUO,SAASG,kBAAkBA,CAACC,SAAS,EAAEC,OAAO,EAAE;AACrD,EAAA,OAAO,GAAGD,SAAS,CAACb,UAAU,CAAA,EAAA,EAAKc,OAAO,CAAE,CAAA;AAC9C;AAQA;AACA;AACA;AACA;AAIA;AACA;AACA;;;;"}
@@ -0,0 +1,60 @@
1
+ import { isInitialised, isSupported } from './common/index.mjs';
2
+ import { InitError, ElementError, SupportError } from './errors/index.mjs';
3
+
4
+ class Component {
5
+ /**
6
+ * Returns the root element of the component
7
+ *
8
+ * @protected
9
+ * @returns {RootElementType} - the root element of component
10
+ */
11
+ get $root() {
12
+ return this._$root;
13
+ }
14
+ constructor($root) {
15
+ this._$root = void 0;
16
+ const childConstructor = this.constructor;
17
+ if (typeof childConstructor.moduleName !== 'string') {
18
+ throw new InitError(`\`moduleName\` not defined in component`);
19
+ }
20
+ if (!($root instanceof childConstructor.elementType)) {
21
+ throw new ElementError({
22
+ element: $root,
23
+ component: childConstructor,
24
+ identifier: 'Root element (`$root`)',
25
+ expectedType: childConstructor.elementType.name
26
+ });
27
+ } else {
28
+ this._$root = $root;
29
+ }
30
+ childConstructor.checkSupport();
31
+ this.checkInitialised();
32
+ const moduleName = childConstructor.moduleName;
33
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
34
+ }
35
+ checkInitialised() {
36
+ const constructor = this.constructor;
37
+ const moduleName = constructor.moduleName;
38
+ if (moduleName && isInitialised(this.$root, moduleName)) {
39
+ throw new InitError(constructor);
40
+ }
41
+ }
42
+ static checkSupport() {
43
+ if (!isSupported()) {
44
+ throw new SupportError();
45
+ }
46
+ }
47
+ }
48
+
49
+ /**
50
+ * @typedef ChildClass
51
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
52
+ */
53
+
54
+ /**
55
+ * @typedef {typeof Component & ChildClass} ChildClassConstructor
56
+ */
57
+ Component.elementType = HTMLElement;
58
+
59
+ export { Component };
60
+ //# sourceMappingURL=component.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.mjs","sources":["../../src/govuk/component.mjs"],"sourcesContent":["import { isInitialised, isSupported } from './common/index.mjs'\nimport { ElementError, InitError, SupportError } from './errors/index.mjs'\n\n/**\n * Base Component class\n *\n * Centralises the behaviours shared by our components\n *\n * @virtual\n * @template {Element} [RootElementType=HTMLElement]\n */\nexport class Component {\n /**\n * @type {typeof Element}\n */\n static elementType = HTMLElement\n\n // allows Typescript user to work around the lack of types\n // in GOVUKFrontend package, Typescript is not aware of $root\n // in components that extend GOVUKFrontendComponent\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {RootElementType} - the root element of component\n */\n get $root() {\n return this._$root\n }\n\n /**\n * @protected\n * @type {RootElementType}\n */\n _$root\n\n /**\n * Constructs a new component, validating that GOV.UK Frontend is supported\n *\n * @internal\n * @param {Element | null} [$root] - HTML element to use for component\n */\n constructor($root) {\n const childConstructor = /** @type {ChildClassConstructor} */ (\n this.constructor\n )\n\n // TypeScript does not enforce that inheriting classes will define a `moduleName`\n // (even if we add a `@virtual` `static moduleName` property to this class).\n // While we trust users to do this correctly, we do a little check to provide them\n // a helpful error message.\n //\n // After this, we'll be sure that `childConstructor` has a `moduleName`\n // as expected of the `ChildClassConstructor` we've cast `this.constructor` to.\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`)\n }\n\n if (!($root instanceof childConstructor.elementType)) {\n throw new ElementError({\n element: $root,\n component: childConstructor,\n identifier: 'Root element (`$root`)',\n expectedType: childConstructor.elementType.name\n })\n } else {\n this._$root = /** @type {RootElementType} */ ($root)\n }\n\n childConstructor.checkSupport()\n\n this.checkInitialised()\n\n const moduleName = childConstructor.moduleName\n\n this.$root.setAttribute(`data-${moduleName}-init`, '')\n }\n\n /**\n * Validates whether component is already initialised\n *\n * @private\n * @throws {InitError} when component is already initialised\n */\n checkInitialised() {\n const constructor = /** @type {ChildClassConstructor} */ (this.constructor)\n const moduleName = constructor.moduleName\n\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor)\n }\n }\n\n /**\n * Validates whether components are supported\n *\n * @throws {SupportError} when the components are not supported\n */\n static checkSupport() {\n if (!isSupported()) {\n throw new SupportError()\n }\n }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\n"],"names":["Component","$root","_$root","constructor","childConstructor","moduleName","InitError","elementType","ElementError","element","component","identifier","expectedType","name","checkSupport","checkInitialised","setAttribute","isInitialised","isSupported","SupportError","HTMLElement"],"mappings":";;;AAWO,MAAMA,SAAS,CAAC;AASrB;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,KAAKA,GAAG;IACV,OAAO,IAAI,CAACC,MAAM;AACpB;EAcAC,WAAWA,CAACF,KAAK,EAAE;AAAA,IAAA,IAAA,CARnBC,MAAM,GAAA,MAAA;AASJ,IAAA,MAAME,gBAAgB,GACpB,IAAI,CAACD,WACN;AASD,IAAA,IAAI,OAAOC,gBAAgB,CAACC,UAAU,KAAK,QAAQ,EAAE;AACnD,MAAA,MAAM,IAAIC,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC;AAChE;AAEA,IAAA,IAAI,EAAEL,KAAK,YAAYG,gBAAgB,CAACG,WAAW,CAAC,EAAE;MACpD,MAAM,IAAIC,YAAY,CAAC;AACrBC,QAAAA,OAAO,EAAER,KAAK;AACdS,QAAAA,SAAS,EAAEN,gBAAgB;AAC3BO,QAAAA,UAAU,EAAE,wBAAwB;AACpCC,QAAAA,YAAY,EAAER,gBAAgB,CAACG,WAAW,CAACM;AAC7C,OAAC,CAAC;AACJ,KAAC,MAAM;MACL,IAAI,CAACX,MAAM,GAAmCD,KAAM;AACtD;IAEAG,gBAAgB,CAACU,YAAY,EAAE;IAE/B,IAAI,CAACC,gBAAgB,EAAE;AAEvB,IAAA,MAAMV,UAAU,GAAGD,gBAAgB,CAACC,UAAU;IAE9C,IAAI,CAACJ,KAAK,CAACe,YAAY,CAAC,QAAQX,UAAU,CAAA,KAAA,CAAO,EAAE,EAAE,CAAC;AACxD;AAQAU,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,MAAMZ,WAAW,GAAyC,IAAI,CAACA,WAAY;AAC3E,IAAA,MAAME,UAAU,GAAGF,WAAW,CAACE,UAAU;IAEzC,IAAIA,UAAU,IAAIY,aAAa,CAAC,IAAI,CAAChB,KAAK,EAAEI,UAAU,CAAC,EAAE;AACvD,MAAA,MAAM,IAAIC,SAAS,CAACH,WAAW,CAAC;AAClC;AACF;EAOA,OAAOW,YAAYA,GAAG;AACpB,IAAA,IAAI,CAACI,WAAW,EAAE,EAAE;MAClB,MAAM,IAAIC,YAAY,EAAE;AAC1B;AACF;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArGanB,SAAS,CAIbO,WAAW,GAAGa,WAAW;;;;"}
@@ -27,6 +27,7 @@
27
27
  @import "phase-banner/index";
28
28
  @import "radios/index";
29
29
  @import "select/index";
30
+ @import "service-navigation/index";
30
31
  @import "skip-link/index";
31
32
  @import "summary-list/index";
32
33
  @import "table/index";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/govuk/components/_index.scss"],"names":[],"mappings":"AAAA,iBAAiB;;AAEjB,yBAAyB;AACzB,yBAAyB;AACzB,2BAA2B;AAC3B,sBAAsB;AACtB,+BAA+B;AAC/B,0BAA0B;AAC1B,6BAA6B;AAC7B,0BAA0B;AAC1B,uBAAuB;AACvB,6BAA6B;AAC7B,6BAA6B;AAC7B,8BAA8B;AAC9B,wBAAwB;AACxB,2BAA2B;AAC3B,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,qBAAqB;AACrB,0BAA0B;AAC1B,qBAAqB;AACrB,mCAAmC;AACnC,0BAA0B;AAC1B,qBAAqB;AACrB,8BAA8B;AAC9B,4BAA4B;AAC5B,sBAAsB;AACtB,sBAAsB;AACtB,yBAAyB;AACzB,4BAA4B;AAC5B,qBAAqB;AACrB,oBAAoB;AACpB,mBAAmB;AACnB,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B","file":"_index.scss","sourcesContent":["@import \"../base\";\n\n@import \"accordion/index\";\n@import \"back-link/index\";\n@import \"breadcrumbs/index\";\n@import \"button/index\";\n@import \"character-count/index\";\n@import \"checkboxes/index\";\n@import \"cookie-banner/index\";\n@import \"date-input/index\";\n@import \"details/index\";\n@import \"error-message/index\";\n@import \"error-summary/index\";\n@import \"exit-this-page/index\";\n@import \"fieldset/index\";\n@import \"file-upload/index\";\n@import \"footer/index\";\n@import \"header/index\";\n@import \"hint/index\";\n@import \"input/index\";\n@import \"inset-text/index\";\n@import \"label/index\";\n@import \"notification-banner/index\";\n@import \"pagination/index\";\n@import \"panel/index\";\n@import \"password-input/index\";\n@import \"phase-banner/index\";\n@import \"radios/index\";\n@import \"select/index\";\n@import \"skip-link/index\";\n@import \"summary-list/index\";\n@import \"table/index\";\n@import \"tabs/index\";\n@import \"tag/index\";\n@import \"task-list/index\";\n@import \"textarea/index\";\n@import \"warning-text/index\";\n"]}
1
+ {"version":3,"sources":["../../../src/govuk/components/_index.scss"],"names":[],"mappings":"AAAA,iBAAiB;;AAEjB,yBAAyB;AACzB,yBAAyB;AACzB,2BAA2B;AAC3B,sBAAsB;AACtB,+BAA+B;AAC/B,0BAA0B;AAC1B,6BAA6B;AAC7B,0BAA0B;AAC1B,uBAAuB;AACvB,6BAA6B;AAC7B,6BAA6B;AAC7B,8BAA8B;AAC9B,wBAAwB;AACxB,2BAA2B;AAC3B,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,qBAAqB;AACrB,0BAA0B;AAC1B,qBAAqB;AACrB,mCAAmC;AACnC,0BAA0B;AAC1B,qBAAqB;AACrB,8BAA8B;AAC9B,4BAA4B;AAC5B,sBAAsB;AACtB,sBAAsB;AACtB,kCAAkC;AAClC,yBAAyB;AACzB,4BAA4B;AAC5B,qBAAqB;AACrB,oBAAoB;AACpB,mBAAmB;AACnB,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B","file":"_index.scss","sourcesContent":["@import \"../base\";\n\n@import \"accordion/index\";\n@import \"back-link/index\";\n@import \"breadcrumbs/index\";\n@import \"button/index\";\n@import \"character-count/index\";\n@import \"checkboxes/index\";\n@import \"cookie-banner/index\";\n@import \"date-input/index\";\n@import \"details/index\";\n@import \"error-message/index\";\n@import \"error-summary/index\";\n@import \"exit-this-page/index\";\n@import \"fieldset/index\";\n@import \"file-upload/index\";\n@import \"footer/index\";\n@import \"header/index\";\n@import \"hint/index\";\n@import \"input/index\";\n@import \"inset-text/index\";\n@import \"label/index\";\n@import \"notification-banner/index\";\n@import \"pagination/index\";\n@import \"panel/index\";\n@import \"password-input/index\";\n@import \"phase-banner/index\";\n@import \"radios/index\";\n@import \"select/index\";\n@import \"service-navigation/index\";\n@import \"skip-link/index\";\n@import \"summary-list/index\";\n@import \"table/index\";\n@import \"tabs/index\";\n@import \"tag/index\";\n@import \"task-list/index\";\n@import \"textarea/index\";\n@import \"warning-text/index\";\n"]}
@@ -102,9 +102,9 @@
102
102
  &:hover {
103
103
  color: $govuk-accordion-base-colour;
104
104
  background: $govuk-accordion-hover-colour;
105
- // The GOV.UK Design System focus state adds a box-shadow to the top and bottom of the
106
- // button. We add a grey box-shadow on hover too, to make the height of the hover state
107
- // match the height of the focus state.
105
+ // The focus state adds a box-shadow to the top and bottom of the
106
+ // button. We add a grey box-shadow on hover too, to make the height of
107
+ // the hover state match the height of the focus state.
108
108
  box-shadow:
109
109
  0 -2px $govuk-accordion-hover-colour,
110
110
  0 4px $govuk-accordion-hover-colour;
@@ -147,7 +147,7 @@
147
147
 
148
148
  position: relative;
149
149
 
150
- // Set size using rems to make the icon scale with text if user resizes text in their browser
150
+ // Set size using rems so icon scales with text
151
151
  width: govuk-px-to-rem(20px);
152
152
  height: govuk-px-to-rem(20px);
153
153
 
@@ -184,14 +184,15 @@
184
184
  .govuk-accordion__section-button {
185
185
  width: 100%;
186
186
 
187
- padding: govuk-spacing(2) 0 0 0;
187
+ padding: govuk-spacing(2) 0 0;
188
188
 
189
189
  border: 0;
190
190
 
191
191
  border-top: $govuk-accordion-bottom-border-width solid $govuk-border-colour;
192
192
 
193
- // Visually separate the section from the one underneath when user changes colours in their
194
- // browser. See https://github.com/alphagov/govuk-frontend/issues/2321#issuecomment-924201488
193
+ // Visually separate the section from the one underneath when user changes
194
+ // colours in their browser. See
195
+ // https://github.com/alphagov/govuk-frontend/issues/2321#issuecomment-924201488
195
196
  border-bottom: govuk-spacing(2) solid transparent;
196
197
 
197
198
  color: $govuk-text-colour;
@@ -230,8 +231,8 @@
230
231
  }
231
232
 
232
233
  &:focus {
233
- // Remove default focus border around button as
234
- // styling is being applied to inner text elements that receive focus
234
+ // Remove default focus border around button as styling is being applied
235
+ // to inner text elements that receive focus
235
236
  outline: 0;
236
237
 
237
238
  .govuk-accordion__section-heading-text-focus,
@@ -257,9 +258,10 @@
257
258
  }
258
259
  }
259
260
 
260
- // Remove the transparent border when the section is expanded to make it clear that the heading
261
- // relates to the content below. Adjust padding to maintain the height of the element.
262
- // See https://github.com/alphagov/govuk-frontend/pull/2257#issuecomment-951920798
261
+ // Remove the transparent border when the section is expanded to make it
262
+ // clear that the heading relates to the content below. Adjust padding to
263
+ // maintain the height of the element. See
264
+ // https://github.com/alphagov/govuk-frontend/pull/2257#issuecomment-951920798
263
265
  .govuk-accordion__section--expanded .govuk-accordion__section-button {
264
266
  padding-bottom: govuk-spacing(3);
265
267
  border-bottom: 0;
@@ -269,8 +271,8 @@
269
271
  }
270
272
  }
271
273
 
272
- // As Chevron icon is vertically aligned it overlaps with the focus state bottom border
273
- // Styling adds some spacing
274
+ // As Chevron icon is vertically aligned it overlaps with the focus state
275
+ // bottom border – this adds some spacing
274
276
  .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {
275
277
  padding-bottom: 3px;
276
278
 
@@ -299,9 +301,9 @@
299
301
  color: $govuk-link-colour;
300
302
  }
301
303
 
302
- // Add space between the icon and text.
303
- // Avoid applying spacing directly to the icon as the use of `transform` will change the
304
- // placement of any margins.
304
+ // Add space between the icon and text. Avoid applying spacing directly to
305
+ // the icon as the use of `transform` will change the placement of any
306
+ // margins.
305
307
  .govuk-accordion__show-all-text,
306
308
  .govuk-accordion__section-toggle-text {
307
309
  margin-left: govuk-spacing(1);
@@ -310,23 +312,25 @@
310
312
 
311
313
  // Background colour adjustment when user changes colours in Firefox
312
314
  //
313
- // When user changes colours in Firefox, text colour inside <button> is always black
314
- // (regardless of the custom colours the user has set). This is fine when the text in the
315
- // button is not nested inside another element because when user changes colours in Firefox,
316
- // the immediate background colour of buttons is always white (again, regardless of user's
317
- // custom colours).
315
+ // When user changes colours in Firefox, text colour inside <button> is
316
+ // always black (regardless of the custom colours the user has set). This is
317
+ // fine when the text in the button is not nested inside another element
318
+ // because when user changes colours in Firefox, the immediate background
319
+ // colour of buttons is always white (again, regardless of user's custom
320
+ // colours).
318
321
  //
319
- // However, when the text inside <button> is wrapped inside another element AND that element
320
- // sets a background colour, the text colour is still black but the background of that nested
321
- // element gets the user's custom background colour. When the custom background is a lighter
322
- // hue, the contrast might be sufficient. But if the user's custom background colour is a
323
- // darker colour, the contrast with the text might not be sufficient.
322
+ // However, when the text inside <button> is wrapped inside another element
323
+ // AND that element sets a background colour, the text colour is still black
324
+ // but the background of that nested element gets the user's custom
325
+ // background colour. When the custom background is a lighter hue, the
326
+ // contrast might be sufficient. But if the user's custom background colour
327
+ // is a darker colour, the contrast with the text might not be sufficient.
324
328
  //
325
- // To ensure sufficient contrast, override the background colour set by the focus state on the
326
- // nested elements to be transparent.
329
+ // To ensure sufficient contrast, override the background colour set by the
330
+ // focus state on the nested elements to be transparent.
327
331
  //
328
- // Also override the background colour of the Show/Hide chevrons which set a background colour
329
- // on hover.
332
+ // Also override the background colour of the Show/Hide chevrons which set a
333
+ // background colour on hover.
330
334
  @media screen and (forced-colors: active) {
331
335
  .govuk-accordion__show-all:hover,
332
336
  .govuk-accordion__section-button:hover {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/govuk/components/accordion/_index.scss"],"names":[],"mappings":"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","file":"_index.scss","sourcesContent":["@include govuk-exports(\"govuk/component/accordion\") {\n $govuk-accordion-base-colour: govuk-colour(\"black\");\n $govuk-accordion-hover-colour: govuk-colour(\"light-grey\");\n $govuk-accordion-icon-focus-colour: $govuk-focus-colour;\n $govuk-accordion-bottom-border-width: 1px;\n\n .govuk-accordion {\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-accordion__section {\n padding-top: govuk-spacing(3);\n }\n\n .govuk-accordion__section-heading {\n // Override browser defaults to ensure consistent element height\n margin-top: 0;\n margin-bottom: 0;\n\n padding-top: govuk-spacing(3);\n padding-bottom: govuk-spacing(3);\n }\n\n .govuk-accordion__section-button {\n @include govuk-font($size: 24, $weight: bold);\n @include govuk-text-colour;\n\n display: block;\n margin-bottom: 0;\n padding-top: govuk-spacing(3);\n }\n\n // Remove the bottom margin from the last item inside the content\n .govuk-accordion__section-content > :last-child {\n margin-bottom: 0;\n }\n\n // GOV.UK Frontend JavaScript enabled\n .govuk-frontend-supported {\n .govuk-accordion {\n // Border at the bottom of the whole accordion\n border-bottom: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n }\n\n .govuk-accordion__section {\n padding-top: 0;\n }\n\n // Hide the body of collapsed sections by default for browsers that lack\n // support for `content-visibility` paired with [hidden=until-found]\n .govuk-accordion__section-content {\n display: none;\n\n @include govuk-responsive-padding(3, \"top\");\n @include govuk-responsive-padding(8, \"bottom\");\n }\n\n // Hide the body of collapsed sections using `content-visibility` to enable\n // page search within [hidden=until-found] regions where browser supported\n .govuk-accordion__section-content[hidden] {\n @supports (content-visibility: hidden) {\n content-visibility: hidden;\n display: inherit;\n }\n\n // Hide the padding of collapsed sections\n padding-top: 0;\n padding-bottom: 0;\n }\n\n // Show the body of expanded sections\n .govuk-accordion__section--expanded .govuk-accordion__section-content {\n display: block;\n }\n\n .govuk-accordion__show-all {\n @include govuk-font($size: 19);\n position: relative;\n z-index: 1;\n\n margin-bottom: 9px;\n padding: govuk-spacing(1) 2px govuk-spacing(1) 0;\n\n border-width: 0;\n\n color: $govuk-link-colour;\n background: none;\n\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: 14px;\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n // The GOV.UK Design System focus state adds a box-shadow to the top and bottom of the\n // button. We add a grey box-shadow on hover too, to make the height of the hover state\n // match the height of the focus state.\n box-shadow:\n 0 -2px $govuk-accordion-hover-colour,\n 0 4px $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n @include govuk-focused-text;\n\n .govuk-accordion-nav__chevron {\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n }\n\n .govuk-accordion__section-heading {\n padding: 0;\n }\n\n // Create Chevron icon aligned with text\n .govuk-accordion-nav__chevron {\n box-sizing: border-box;\n display: inline-block;\n\n position: relative;\n\n // Set size using rems to make the icon scale with text if user resizes text in their browser\n width: govuk-px-to-rem(20px);\n height: govuk-px-to-rem(20px);\n\n border: govuk-px-to-rem(1px) solid;\n border-radius: 50%;\n\n vertical-align: middle;\n\n // Create inner chevron arrow\n &::after {\n content: \"\";\n box-sizing: border-box;\n display: block;\n\n position: absolute;\n bottom: govuk-px-to-rem(5px);\n left: govuk-px-to-rem(6px);\n\n width: govuk-px-to-rem(6px);\n height: govuk-px-to-rem(6px);\n\n transform: rotate(-45deg);\n\n border-top: govuk-px-to-rem(2px) solid;\n border-right: govuk-px-to-rem(2px) solid;\n }\n }\n\n // Rotate icon to create \"Down\" version\n .govuk-accordion-nav__chevron--down {\n transform: rotate(180deg);\n }\n\n .govuk-accordion__section-button {\n width: 100%;\n\n padding: govuk-spacing(2) 0 0 0;\n\n border: 0;\n\n border-top: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n\n // Visually separate the section from the one underneath when user changes colours in their\n // browser. See https://github.com/alphagov/govuk-frontend/issues/2321#issuecomment-924201488\n border-bottom: govuk-spacing(2) solid transparent;\n\n color: $govuk-text-colour;\n background: none;\n\n text-align: left;\n // Section headers have a pointer cursor as an additional affordance\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(2);\n }\n\n &:active {\n color: $govuk-link-active-colour;\n background: none;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n // Remove default focus border around button as\n // styling is being applied to inner text elements that receive focus\n outline: 0;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n @include govuk-focused-text;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n }\n\n // Remove the transparent border when the section is expanded to make it clear that the heading\n // relates to the content below. Adjust padding to maintain the height of the element.\n // See https://github.com/alphagov/govuk-frontend/pull/2257#issuecomment-951920798\n .govuk-accordion__section--expanded .govuk-accordion__section-button {\n padding-bottom: govuk-spacing(3);\n border-bottom: 0;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(4);\n }\n }\n\n // As Chevron icon is vertically aligned it overlaps with the focus state bottom border\n // Styling adds some spacing\n .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n padding-bottom: 3px;\n\n @include govuk-media-query($from: desktop) {\n padding-bottom: 2px;\n }\n }\n\n .govuk-accordion__section-toggle,\n .govuk-accordion__section-heading-text,\n .govuk-accordion__section-summary {\n display: block;\n margin-bottom: 13px;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n display: inline;\n }\n }\n\n // Add toggle link with Chevron icon on left.\n .govuk-accordion__section-toggle {\n @include govuk-font-size($size: 19);\n @include govuk-typography-weight-regular;\n color: $govuk-link-colour;\n }\n\n // Add space between the icon and text.\n // Avoid applying spacing directly to the icon as the use of `transform` will change the\n // placement of any margins.\n .govuk-accordion__show-all-text,\n .govuk-accordion__section-toggle-text {\n margin-left: govuk-spacing(1);\n vertical-align: middle;\n }\n\n // Background colour adjustment when user changes colours in Firefox\n //\n // When user changes colours in Firefox, text colour inside <button> is always black\n // (regardless of the custom colours the user has set). This is fine when the text in the\n // button is not nested inside another element because when user changes colours in Firefox,\n // the immediate background colour of buttons is always white (again, regardless of user's\n // custom colours).\n //\n // However, when the text inside <button> is wrapped inside another element AND that element\n // sets a background colour, the text colour is still black but the background of that nested\n // element gets the user's custom background colour. When the custom background is a lighter\n // hue, the contrast might be sufficient. But if the user's custom background colour is a\n // darker colour, the contrast with the text might not be sufficient.\n //\n // To ensure sufficient contrast, override the background colour set by the focus state on the\n // nested elements to be transparent.\n //\n // Also override the background colour of the Show/Hide chevrons which set a background colour\n // on hover.\n @media screen and (forced-colors: active) {\n .govuk-accordion__show-all:hover,\n .govuk-accordion__section-button:hover {\n .govuk-accordion-nav__chevron {\n background-color: transparent;\n }\n }\n\n .govuk-accordion__show-all:focus,\n .govuk-accordion__section-button:focus {\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus,\n .govuk-accordion-nav__chevron {\n background: transparent;\n background-color: transparent;\n }\n }\n }\n\n // For devices that can't hover such as touch devices,\n // remove hover state as it can be stuck in that state (iOS).\n @media (hover: none) {\n .govuk-accordion__section-header:hover {\n border-top-color: $govuk-border-colour;\n\n box-shadow: inset 0 3px 0 0 $govuk-link-colour;\n\n .govuk-accordion__section-button {\n border-top-color: $govuk-border-colour;\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/govuk/components/accordion/_index.scss"],"names":[],"mappings":"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","file":"_index.scss","sourcesContent":["@include govuk-exports(\"govuk/component/accordion\") {\n $govuk-accordion-base-colour: govuk-colour(\"black\");\n $govuk-accordion-hover-colour: govuk-colour(\"light-grey\");\n $govuk-accordion-icon-focus-colour: $govuk-focus-colour;\n $govuk-accordion-bottom-border-width: 1px;\n\n .govuk-accordion {\n @include govuk-responsive-margin(6, \"bottom\");\n }\n\n .govuk-accordion__section {\n padding-top: govuk-spacing(3);\n }\n\n .govuk-accordion__section-heading {\n // Override browser defaults to ensure consistent element height\n margin-top: 0;\n margin-bottom: 0;\n\n padding-top: govuk-spacing(3);\n padding-bottom: govuk-spacing(3);\n }\n\n .govuk-accordion__section-button {\n @include govuk-font($size: 24, $weight: bold);\n @include govuk-text-colour;\n\n display: block;\n margin-bottom: 0;\n padding-top: govuk-spacing(3);\n }\n\n // Remove the bottom margin from the last item inside the content\n .govuk-accordion__section-content > :last-child {\n margin-bottom: 0;\n }\n\n // GOV.UK Frontend JavaScript enabled\n .govuk-frontend-supported {\n .govuk-accordion {\n // Border at the bottom of the whole accordion\n border-bottom: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n }\n\n .govuk-accordion__section {\n padding-top: 0;\n }\n\n // Hide the body of collapsed sections by default for browsers that lack\n // support for `content-visibility` paired with [hidden=until-found]\n .govuk-accordion__section-content {\n display: none;\n\n @include govuk-responsive-padding(3, \"top\");\n @include govuk-responsive-padding(8, \"bottom\");\n }\n\n // Hide the body of collapsed sections using `content-visibility` to enable\n // page search within [hidden=until-found] regions where browser supported\n .govuk-accordion__section-content[hidden] {\n @supports (content-visibility: hidden) {\n content-visibility: hidden;\n display: inherit;\n }\n\n // Hide the padding of collapsed sections\n padding-top: 0;\n padding-bottom: 0;\n }\n\n // Show the body of expanded sections\n .govuk-accordion__section--expanded .govuk-accordion__section-content {\n display: block;\n }\n\n .govuk-accordion__show-all {\n @include govuk-font($size: 19);\n position: relative;\n z-index: 1;\n\n margin-bottom: 9px;\n padding: govuk-spacing(1) 2px govuk-spacing(1) 0;\n\n border-width: 0;\n\n color: $govuk-link-colour;\n background: none;\n\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n margin-bottom: 14px;\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n // The focus state adds a box-shadow to the top and bottom of the\n // button. We add a grey box-shadow on hover too, to make the height of\n // the hover state match the height of the focus state.\n box-shadow:\n 0 -2px $govuk-accordion-hover-colour,\n 0 4px $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n @include govuk-focused-text;\n\n .govuk-accordion-nav__chevron {\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n }\n\n .govuk-accordion__section-heading {\n padding: 0;\n }\n\n // Create Chevron icon aligned with text\n .govuk-accordion-nav__chevron {\n box-sizing: border-box;\n display: inline-block;\n\n position: relative;\n\n // Set size using rems so icon scales with text\n width: govuk-px-to-rem(20px);\n height: govuk-px-to-rem(20px);\n\n border: govuk-px-to-rem(1px) solid;\n border-radius: 50%;\n\n vertical-align: middle;\n\n // Create inner chevron arrow\n &::after {\n content: \"\";\n box-sizing: border-box;\n display: block;\n\n position: absolute;\n bottom: govuk-px-to-rem(5px);\n left: govuk-px-to-rem(6px);\n\n width: govuk-px-to-rem(6px);\n height: govuk-px-to-rem(6px);\n\n transform: rotate(-45deg);\n\n border-top: govuk-px-to-rem(2px) solid;\n border-right: govuk-px-to-rem(2px) solid;\n }\n }\n\n // Rotate icon to create \"Down\" version\n .govuk-accordion-nav__chevron--down {\n transform: rotate(180deg);\n }\n\n .govuk-accordion__section-button {\n width: 100%;\n\n padding: govuk-spacing(2) 0 0;\n\n border: 0;\n\n border-top: $govuk-accordion-bottom-border-width solid $govuk-border-colour;\n\n // Visually separate the section from the one underneath when user changes\n // colours in their browser. See\n // https://github.com/alphagov/govuk-frontend/issues/2321#issuecomment-924201488\n border-bottom: govuk-spacing(2) solid transparent;\n\n color: $govuk-text-colour;\n background: none;\n\n text-align: left;\n // Section headers have a pointer cursor as an additional affordance\n cursor: pointer;\n -webkit-appearance: none;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(2);\n }\n\n &:active {\n color: $govuk-link-active-colour;\n background: none;\n }\n\n &:hover {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-hover-colour;\n\n .govuk-accordion__section-toggle-text {\n color: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-hover-colour;\n }\n }\n\n &:focus {\n // Remove default focus border around button as styling is being applied\n // to inner text elements that receive focus\n outline: 0;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n @include govuk-focused-text;\n }\n\n .govuk-accordion-nav__chevron {\n color: $govuk-accordion-base-colour;\n background: $govuk-accordion-base-colour;\n }\n\n .govuk-accordion-nav__chevron::after {\n color: $govuk-accordion-icon-focus-colour;\n }\n }\n\n // Remove default button focus outline in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n }\n\n // Remove the transparent border when the section is expanded to make it\n // clear that the heading relates to the content below. Adjust padding to\n // maintain the height of the element. See\n // https://github.com/alphagov/govuk-frontend/pull/2257#issuecomment-951920798\n .govuk-accordion__section--expanded .govuk-accordion__section-button {\n padding-bottom: govuk-spacing(3);\n border-bottom: 0;\n\n @include govuk-media-query($from: tablet) {\n padding-bottom: govuk-spacing(4);\n }\n }\n\n // As Chevron icon is vertically aligned it overlaps with the focus state\n // bottom border – this adds some spacing\n .govuk-accordion__section-button:focus .govuk-accordion__section-toggle-focus {\n padding-bottom: 3px;\n\n @include govuk-media-query($from: desktop) {\n padding-bottom: 2px;\n }\n }\n\n .govuk-accordion__section-toggle,\n .govuk-accordion__section-heading-text,\n .govuk-accordion__section-summary {\n display: block;\n margin-bottom: 13px;\n\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus {\n display: inline;\n }\n }\n\n // Add toggle link with Chevron icon on left.\n .govuk-accordion__section-toggle {\n @include govuk-font-size($size: 19);\n @include govuk-typography-weight-regular;\n color: $govuk-link-colour;\n }\n\n // Add space between the icon and text. Avoid applying spacing directly to\n // the icon as the use of `transform` will change the placement of any\n // margins.\n .govuk-accordion__show-all-text,\n .govuk-accordion__section-toggle-text {\n margin-left: govuk-spacing(1);\n vertical-align: middle;\n }\n\n // Background colour adjustment when user changes colours in Firefox\n //\n // When user changes colours in Firefox, text colour inside <button> is\n // always black (regardless of the custom colours the user has set). This is\n // fine when the text in the button is not nested inside another element\n // because when user changes colours in Firefox, the immediate background\n // colour of buttons is always white (again, regardless of user's custom\n // colours).\n //\n // However, when the text inside <button> is wrapped inside another element\n // AND that element sets a background colour, the text colour is still black\n // but the background of that nested element gets the user's custom\n // background colour. When the custom background is a lighter hue, the\n // contrast might be sufficient. But if the user's custom background colour\n // is a darker colour, the contrast with the text might not be sufficient.\n //\n // To ensure sufficient contrast, override the background colour set by the\n // focus state on the nested elements to be transparent.\n //\n // Also override the background colour of the Show/Hide chevrons which set a\n // background colour on hover.\n @media screen and (forced-colors: active) {\n .govuk-accordion__show-all:hover,\n .govuk-accordion__section-button:hover {\n .govuk-accordion-nav__chevron {\n background-color: transparent;\n }\n }\n\n .govuk-accordion__show-all:focus,\n .govuk-accordion__section-button:focus {\n .govuk-accordion__section-heading-text-focus,\n .govuk-accordion__section-summary-focus,\n .govuk-accordion__section-toggle-focus,\n .govuk-accordion-nav__chevron {\n background: transparent;\n background-color: transparent;\n }\n }\n }\n\n // For devices that can't hover such as touch devices,\n // remove hover state as it can be stuck in that state (iOS).\n @media (hover: none) {\n .govuk-accordion__section-header:hover {\n border-top-color: $govuk-border-colour;\n\n box-shadow: inset 0 3px 0 0 $govuk-link-colour;\n\n .govuk-accordion__section-button {\n border-top-color: $govuk-border-colour;\n }\n }\n }\n }\n}\n"]}