govuk_publishing_components 32.1.0 → 35.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/app/assets/config/govuk_publishing_components_manifest.js +75 -1
  4. data/app/assets/images/govuk_publishing_components/icon-search.svg +3 -0
  5. data/app/assets/images/govuk_publishing_components/youtube-play-icon.png +0 -0
  6. data/app/assets/images/govuk_publishing_components/youtube-play-icon.svg +4 -0
  7. data/app/assets/javascripts/component_guide/accessibility-test.js +0 -1
  8. data/app/assets/javascripts/govuk_publishing_components/analytics/auto-scroll-tracker.js +2 -1
  9. data/app/assets/javascripts/govuk_publishing_components/analytics/linked-domains.js +135 -0
  10. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-auto-tracker.js +49 -0
  11. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +341 -27
  12. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-ecommerce-tracker.js +17 -92
  13. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-event-tracker.js +11 -23
  14. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-form-tracker.js +121 -0
  15. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +86 -305
  16. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-page-views.js +13 -6
  17. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-schemas.js +31 -1
  18. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-smart-answer-results-tracker.js +57 -0
  19. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-specialist-link-tracker.js +131 -0
  20. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/init-ga4.js +9 -4
  21. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/pii-remover.js +4 -2
  22. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +4 -0
  23. data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +12 -1
  24. data/app/assets/javascripts/govuk_publishing_components/components/cookie-banner.js +2 -2
  25. data/app/assets/javascripts/govuk_publishing_components/components/image-card.js +19 -0
  26. data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js +2 -81
  27. data/app/assets/javascripts/govuk_publishing_components/components/single-page-notification-button.js +24 -8
  28. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +23 -1
  29. data/app/assets/javascripts/govuk_publishing_components/dependencies.js +13 -0
  30. data/app/assets/javascripts/govuk_publishing_components/lib/govspeak/youtube-link-enhancement.js +3 -2
  31. data/app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js +1 -0
  32. data/app/assets/javascripts/govuk_publishing_components/load-analytics.js +116 -0
  33. data/app/assets/javascripts/govuk_publishing_components/modules.js +7 -2
  34. data/app/assets/javascripts/govuk_publishing_components/vendor/lux/lux-reporter.js +140 -191
  35. data/app/assets/stylesheets/govuk_publishing_components/_individual_component_support.scss +10 -0
  36. data/app/assets/stylesheets/govuk_publishing_components/components/_accordion.scss +29 -0
  37. data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +2 -0
  38. data/app/assets/stylesheets/govuk_publishing_components/components/_attachment.scss +2 -0
  39. data/app/assets/stylesheets/govuk_publishing_components/components/_back-link.scss +1 -0
  40. data/app/assets/stylesheets/govuk_publishing_components/components/_big-number.scss +4 -5
  41. data/app/assets/stylesheets/govuk_publishing_components/components/_breadcrumbs.scss +1 -0
  42. data/app/assets/stylesheets/govuk_publishing_components/components/_button.scss +12 -0
  43. data/app/assets/stylesheets/govuk_publishing_components/components/_cards.scss +20 -0
  44. data/app/assets/stylesheets/govuk_publishing_components/components/_character-count.scss +1 -0
  45. data/app/assets/stylesheets/govuk_publishing_components/components/_checkboxes.scss +1 -0
  46. data/app/assets/stylesheets/govuk_publishing_components/components/_contents-list.scss +21 -0
  47. data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-guidance.scss +2 -0
  48. data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-sidebar.scss +2 -0
  49. data/app/assets/stylesheets/govuk_publishing_components/components/_cookie-banner.scss +7 -0
  50. data/app/assets/stylesheets/govuk_publishing_components/components/_date-input.scss +1 -0
  51. data/app/assets/stylesheets/govuk_publishing_components/components/_details.scss +1 -0
  52. data/app/assets/stylesheets/govuk_publishing_components/components/_devolved-nations.scss +2 -0
  53. data/app/assets/stylesheets/govuk_publishing_components/components/_document-list.scss +8 -0
  54. data/app/assets/stylesheets/govuk_publishing_components/components/_emergency-banner.scss +8 -0
  55. data/app/assets/stylesheets/govuk_publishing_components/components/_error-alert.scss +2 -0
  56. data/app/assets/stylesheets/govuk_publishing_components/components/_error-message.scss +1 -0
  57. data/app/assets/stylesheets/govuk_publishing_components/components/_error-summary.scss +1 -0
  58. data/app/assets/stylesheets/govuk_publishing_components/components/_feedback.scss +17 -19
  59. data/app/assets/stylesheets/govuk_publishing_components/components/_fieldset.scss +1 -0
  60. data/app/assets/stylesheets/govuk_publishing_components/components/_file-upload.scss +1 -0
  61. data/app/assets/stylesheets/govuk_publishing_components/components/_govspeak-html-publication.scss +10 -0
  62. data/app/assets/stylesheets/govuk_publishing_components/components/_govspeak.scss +85 -0
  63. data/app/assets/stylesheets/govuk_publishing_components/components/_heading.scss +2 -0
  64. data/app/assets/stylesheets/govuk_publishing_components/components/_hint.scss +1 -0
  65. data/app/assets/stylesheets/govuk_publishing_components/components/_image-card.scss +85 -6
  66. data/app/assets/stylesheets/govuk_publishing_components/components/_input.scss +6 -6
  67. data/app/assets/stylesheets/govuk_publishing_components/components/_inset-text.scss +1 -0
  68. data/app/assets/stylesheets/govuk_publishing_components/components/_intervention.scss +2 -0
  69. data/app/assets/stylesheets/govuk_publishing_components/components/_inverse-header.scss +2 -0
  70. data/app/assets/stylesheets/govuk_publishing_components/components/_label.scss +1 -0
  71. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-footer.scss +1 -0
  72. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-for-public.scss +2 -0
  73. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +253 -483
  74. data/app/assets/stylesheets/govuk_publishing_components/components/_lead-paragraph.scss +2 -0
  75. data/app/assets/stylesheets/govuk_publishing_components/components/_metadata.scss +2 -0
  76. data/app/assets/stylesheets/govuk_publishing_components/components/_modal-dialogue.scss +2 -0
  77. data/app/assets/stylesheets/govuk_publishing_components/components/_notice.scss +1 -0
  78. data/app/assets/stylesheets/govuk_publishing_components/components/_organisation-logo.scss +2 -0
  79. data/app/assets/stylesheets/govuk_publishing_components/components/_panel.scss +1 -0
  80. data/app/assets/stylesheets/govuk_publishing_components/components/_phase-banner.scss +1 -0
  81. data/app/assets/stylesheets/govuk_publishing_components/components/_previous-and-next-navigation.scss +1 -0
  82. data/app/assets/stylesheets/govuk_publishing_components/components/_print-link.scss +2 -0
  83. data/app/assets/stylesheets/govuk_publishing_components/components/_radio.scss +1 -0
  84. data/app/assets/stylesheets/govuk_publishing_components/components/_related-navigation.scss +2 -0
  85. data/app/assets/stylesheets/govuk_publishing_components/components/_reorderable-list.scss +2 -0
  86. data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +2 -7
  87. data/app/assets/stylesheets/govuk_publishing_components/components/_select.scss +1 -0
  88. data/app/assets/stylesheets/govuk_publishing_components/components/_share-links.scss +2 -0
  89. data/app/assets/stylesheets/govuk_publishing_components/components/_show-password.scss +2 -0
  90. data/app/assets/stylesheets/govuk_publishing_components/components/_signup-link.scss +2 -0
  91. data/app/assets/stylesheets/govuk_publishing_components/components/_single-page-notification-button.scss +2 -0
  92. data/app/assets/stylesheets/govuk_publishing_components/components/_skip-link.scss +1 -0
  93. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss +17 -0
  94. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-related.scss +2 -0
  95. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss +8 -0
  96. data/app/assets/stylesheets/govuk_publishing_components/components/_subscription-links.scss +2 -1
  97. data/app/assets/stylesheets/govuk_publishing_components/components/_success-alert.scss +1 -0
  98. data/app/assets/stylesheets/govuk_publishing_components/components/_summary-list.scss +1 -0
  99. data/app/assets/stylesheets/govuk_publishing_components/components/_table.scss +1 -0
  100. data/app/assets/stylesheets/govuk_publishing_components/components/_tabs.scss +1 -0
  101. data/app/assets/stylesheets/govuk_publishing_components/components/_textarea.scss +17 -0
  102. data/app/assets/stylesheets/govuk_publishing_components/components/_title.scss +12 -0
  103. data/app/assets/stylesheets/govuk_publishing_components/components/_translation-nav.scss +2 -0
  104. data/app/assets/stylesheets/govuk_publishing_components/components/_warning-text.scss +1 -0
  105. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_steps.scss +26 -9
  106. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_tables.scss +12 -0
  107. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_brand-colours.scss +2 -2
  108. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_contents-list-helper.scss +0 -1
  109. data/app/controllers/govuk_publishing_components/application_controller.rb +0 -13
  110. data/app/controllers/govuk_publishing_components/audit_controller.rb +1 -1
  111. data/app/controllers/govuk_publishing_components/component_guide_controller.rb +6 -9
  112. data/app/models/govuk_publishing_components/audit_applications.rb +10 -19
  113. data/app/models/govuk_publishing_components/audit_comparer.rb +29 -24
  114. data/app/models/govuk_publishing_components/audit_components.rb +157 -82
  115. data/app/models/govuk_publishing_components/component_doc.rb +14 -0
  116. data/app/models/govuk_publishing_components/component_wrapper_helper_options.rb +15 -0
  117. data/app/views/govuk_publishing_components/audit/_applications.html.erb +3 -3
  118. data/app/views/govuk_publishing_components/audit/_component_contents.html.erb +47 -39
  119. data/app/views/govuk_publishing_components/audit/_components.html.erb +47 -2
  120. data/app/views/govuk_publishing_components/component_guide/_application_stylesheet.html.erb +0 -3
  121. data/app/views/govuk_publishing_components/component_guide/index.html.erb +0 -7
  122. data/app/views/govuk_publishing_components/component_guide/show.html.erb +21 -6
  123. data/app/views/govuk_publishing_components/components/_accordion.html.erb +30 -36
  124. data/app/views/govuk_publishing_components/components/_action_link.html.erb +7 -2
  125. data/app/views/govuk_publishing_components/components/_attachment.html.erb +2 -0
  126. data/app/views/govuk_publishing_components/components/_attachment_link.html.erb +2 -0
  127. data/app/views/govuk_publishing_components/components/_back_link.html.erb +2 -0
  128. data/app/views/govuk_publishing_components/components/_big_number.html.erb +3 -1
  129. data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +8 -2
  130. data/app/views/govuk_publishing_components/components/_button.html.erb +2 -0
  131. data/app/views/govuk_publishing_components/components/_cards.html.erb +6 -4
  132. data/app/views/govuk_publishing_components/components/_character_count.html.erb +2 -0
  133. data/app/views/govuk_publishing_components/components/_checkboxes.html.erb +6 -2
  134. data/app/views/govuk_publishing_components/components/_contents_list.html.erb +11 -15
  135. data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +7 -4
  136. data/app/views/govuk_publishing_components/components/_contextual_footer.html.erb +2 -0
  137. data/app/views/govuk_publishing_components/components/_contextual_guidance.html.erb +2 -0
  138. data/app/views/govuk_publishing_components/components/_contextual_sidebar.html.erb +13 -6
  139. data/app/views/govuk_publishing_components/components/_cookie_banner.html.erb +12 -6
  140. data/app/views/govuk_publishing_components/components/_date_input.html.erb +2 -0
  141. data/app/views/govuk_publishing_components/components/_details.html.erb +5 -1
  142. data/app/views/govuk_publishing_components/components/_devolved_nations.html.erb +2 -0
  143. data/app/views/govuk_publishing_components/components/_document_list.html.erb +3 -0
  144. data/app/views/govuk_publishing_components/components/_emergency_banner.html.erb +2 -0
  145. data/app/views/govuk_publishing_components/components/_error_alert.html.erb +2 -0
  146. data/app/views/govuk_publishing_components/components/_error_message.html.erb +4 -1
  147. data/app/views/govuk_publishing_components/components/_error_summary.html.erb +29 -26
  148. data/app/views/govuk_publishing_components/components/_feedback.html.erb +2 -0
  149. data/app/views/govuk_publishing_components/components/_fieldset.html.erb +2 -0
  150. data/app/views/govuk_publishing_components/components/_file_upload.html.erb +2 -0
  151. data/app/views/govuk_publishing_components/components/_google_tag_manager_script.html.erb +2 -2
  152. data/app/views/govuk_publishing_components/components/_govspeak.html.erb +1 -0
  153. data/app/views/govuk_publishing_components/components/_govspeak_html_publication.html.erb +2 -0
  154. data/app/views/govuk_publishing_components/components/_heading.html.erb +2 -0
  155. data/app/views/govuk_publishing_components/components/_hint.html.erb +4 -1
  156. data/app/views/govuk_publishing_components/components/_image_card.html.erb +17 -12
  157. data/app/views/govuk_publishing_components/components/_input.html.erb +10 -2
  158. data/app/views/govuk_publishing_components/components/_inset_text.html.erb +2 -0
  159. data/app/views/govuk_publishing_components/components/_intervention.html.erb +2 -0
  160. data/app/views/govuk_publishing_components/components/_inverse_header.html.erb +2 -0
  161. data/app/views/govuk_publishing_components/components/_label.html.erb +7 -3
  162. data/app/views/govuk_publishing_components/components/_layout_footer.html.erb +2 -0
  163. data/app/views/govuk_publishing_components/components/_layout_for_admin.html.erb +8 -5
  164. data/app/views/govuk_publishing_components/components/_layout_for_public.html.erb +8 -3
  165. data/app/views/govuk_publishing_components/components/_layout_header.html.erb +2 -0
  166. data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +238 -267
  167. data/app/views/govuk_publishing_components/components/_lead_paragraph.html.erb +2 -0
  168. data/app/views/govuk_publishing_components/components/_metadata.html.erb +2 -0
  169. data/app/views/govuk_publishing_components/components/_modal_dialogue.html.erb +2 -0
  170. data/app/views/govuk_publishing_components/components/_notice.html.erb +2 -0
  171. data/app/views/govuk_publishing_components/components/_organisation_logo.html.erb +2 -0
  172. data/app/views/govuk_publishing_components/components/_panel.html.erb +2 -0
  173. data/app/views/govuk_publishing_components/components/_phase_banner.html.erb +3 -1
  174. data/app/views/govuk_publishing_components/components/_previous_and_next_navigation.html.erb +6 -1
  175. data/app/views/govuk_publishing_components/components/_print_link.html.erb +2 -0
  176. data/app/views/govuk_publishing_components/components/_radio.html.erb +2 -0
  177. data/app/views/govuk_publishing_components/components/_related_navigation.html.erb +16 -6
  178. data/app/views/govuk_publishing_components/components/_reorderable_list.html.erb +2 -0
  179. data/app/views/govuk_publishing_components/components/_search.html.erb +2 -0
  180. data/app/views/govuk_publishing_components/components/_select.html.erb +2 -0
  181. data/app/views/govuk_publishing_components/components/_share_links.html.erb +13 -13
  182. data/app/views/govuk_publishing_components/components/_show_password.html.erb +2 -0
  183. data/app/views/govuk_publishing_components/components/_signup_link.html.erb +2 -0
  184. data/app/views/govuk_publishing_components/components/_single_page_notification_button.html.erb +8 -2
  185. data/app/views/govuk_publishing_components/components/_skip_link.html.erb +2 -0
  186. data/app/views/govuk_publishing_components/components/_step_by_step_nav.html.erb +8 -1
  187. data/app/views/govuk_publishing_components/components/_step_by_step_nav_header.html.erb +12 -2
  188. data/app/views/govuk_publishing_components/components/_step_by_step_nav_related.html.erb +21 -8
  189. data/app/views/govuk_publishing_components/components/_subscription_links.html.erb +3 -1
  190. data/app/views/govuk_publishing_components/components/_success_alert.html.erb +2 -0
  191. data/app/views/govuk_publishing_components/components/_summary_list.html.erb +2 -0
  192. data/app/views/govuk_publishing_components/components/_table.html.erb +3 -1
  193. data/app/views/govuk_publishing_components/components/_tabs.html.erb +22 -2
  194. data/app/views/govuk_publishing_components/components/_textarea.html.erb +12 -2
  195. data/app/views/govuk_publishing_components/components/_title.html.erb +2 -0
  196. data/app/views/govuk_publishing_components/components/_translation_nav.html.erb +2 -0
  197. data/app/views/govuk_publishing_components/components/_warning_text.html.erb +2 -0
  198. data/app/views/govuk_publishing_components/components/contextual_sidebar/_ukraine_cta.html.erb +16 -6
  199. data/app/views/govuk_publishing_components/components/docs/accordion.yml +16 -3
  200. data/app/views/govuk_publishing_components/components/docs/action_link.yml +1 -0
  201. data/app/views/govuk_publishing_components/components/docs/breadcrumbs.yml +2 -1
  202. data/app/views/govuk_publishing_components/components/docs/button.yml +10 -0
  203. data/app/views/govuk_publishing_components/components/docs/cards.yml +1 -0
  204. data/app/views/govuk_publishing_components/components/docs/checkboxes.yml +1 -0
  205. data/app/views/govuk_publishing_components/components/docs/contents_list.yml +1 -12
  206. data/app/views/govuk_publishing_components/components/docs/contextual_breadcrumbs.yml +13 -0
  207. data/app/views/govuk_publishing_components/components/docs/contextual_footer.yml +43 -0
  208. data/app/views/govuk_publishing_components/components/docs/contextual_sidebar.yml +65 -0
  209. data/app/views/govuk_publishing_components/components/docs/details.yml +17 -0
  210. data/app/views/govuk_publishing_components/components/docs/document_list.yml +18 -1
  211. data/app/views/govuk_publishing_components/components/docs/emergency_banner.yml +3 -1
  212. data/app/views/govuk_publishing_components/components/docs/error_message.yml +13 -0
  213. data/app/views/govuk_publishing_components/components/docs/govspeak.yml +22 -1
  214. data/app/views/govuk_publishing_components/components/docs/hint.yml +6 -0
  215. data/app/views/govuk_publishing_components/components/docs/image_card.yml +24 -1
  216. data/app/views/govuk_publishing_components/components/docs/input.yml +32 -0
  217. data/app/views/govuk_publishing_components/components/docs/intervention.yml +2 -1
  218. data/app/views/govuk_publishing_components/components/docs/label.yml +17 -0
  219. data/app/views/govuk_publishing_components/components/docs/layout_header.yml +1 -0
  220. data/app/views/govuk_publishing_components/components/docs/previous_and_next_navigation.yml +2 -0
  221. data/app/views/govuk_publishing_components/components/docs/related_navigation.yml +47 -0
  222. data/app/views/govuk_publishing_components/components/docs/share_links.yml +59 -30
  223. data/app/views/govuk_publishing_components/components/docs/single_page_notification_button.yml +16 -1
  224. data/app/views/govuk_publishing_components/components/docs/step_by_step_nav.yml +54 -0
  225. data/app/views/govuk_publishing_components/components/docs/step_by_step_nav_header.yml +6 -0
  226. data/app/views/govuk_publishing_components/components/docs/step_by_step_nav_related.yml +10 -0
  227. data/app/views/govuk_publishing_components/components/docs/tabs.yml +15 -0
  228. data/app/views/govuk_publishing_components/components/docs/textarea.yml +31 -0
  229. data/app/views/govuk_publishing_components/components/docs/translation_nav.yml +2 -0
  230. data/app/views/govuk_publishing_components/components/feedback/_problem_form.html.erb +3 -3
  231. data/app/views/govuk_publishing_components/components/feedback/_survey_signup_form.html.erb +1 -1
  232. data/app/views/govuk_publishing_components/components/feedback/_yes_no_banner.html.erb +4 -5
  233. data/app/views/govuk_publishing_components/components/metadata/_sentence.html.erb +4 -2
  234. data/app/views/govuk_publishing_components/components/related_navigation/_section.html.erb +36 -16
  235. data/app/views/layouts/govuk_publishing_components/application.html.erb +3 -4
  236. data/config/locales/ar.yml +14 -14
  237. data/config/locales/az.yml +15 -14
  238. data/config/locales/be.yml +14 -14
  239. data/config/locales/bg.yml +14 -14
  240. data/config/locales/bn.yml +14 -14
  241. data/config/locales/cs.yml +14 -14
  242. data/config/locales/cy.yml +14 -14
  243. data/config/locales/da.yml +14 -14
  244. data/config/locales/de.yml +14 -14
  245. data/config/locales/dr.yml +14 -14
  246. data/config/locales/el.yml +14 -14
  247. data/config/locales/en.yml +21 -28
  248. data/config/locales/es-419.yml +14 -14
  249. data/config/locales/es.yml +14 -14
  250. data/config/locales/et.yml +14 -14
  251. data/config/locales/fa.yml +15 -14
  252. data/config/locales/fi.yml +14 -14
  253. data/config/locales/fr.yml +14 -14
  254. data/config/locales/gd.yml +14 -14
  255. data/config/locales/gu.yml +14 -14
  256. data/config/locales/he.yml +14 -14
  257. data/config/locales/hi.yml +14 -14
  258. data/config/locales/hr.yml +14 -14
  259. data/config/locales/hu.yml +14 -14
  260. data/config/locales/hy.yml +14 -14
  261. data/config/locales/id.yml +14 -14
  262. data/config/locales/is.yml +14 -14
  263. data/config/locales/it.yml +14 -14
  264. data/config/locales/ja.yml +14 -14
  265. data/config/locales/ka.yml +14 -14
  266. data/config/locales/kk.yml +14 -14
  267. data/config/locales/ko.yml +14 -14
  268. data/config/locales/lt.yml +14 -14
  269. data/config/locales/lv.yml +14 -14
  270. data/config/locales/ms.yml +14 -14
  271. data/config/locales/mt.yml +14 -14
  272. data/config/locales/nl.yml +14 -14
  273. data/config/locales/no.yml +14 -14
  274. data/config/locales/pa-pk.yml +14 -14
  275. data/config/locales/pa.yml +14 -14
  276. data/config/locales/pl.yml +14 -14
  277. data/config/locales/ps.yml +14 -14
  278. data/config/locales/pt.yml +14 -14
  279. data/config/locales/ro.yml +14 -14
  280. data/config/locales/ru.yml +14 -14
  281. data/config/locales/si.yml +14 -14
  282. data/config/locales/sk.yml +14 -14
  283. data/config/locales/sl.yml +14 -14
  284. data/config/locales/so.yml +14 -14
  285. data/config/locales/sq.yml +14 -14
  286. data/config/locales/sr.yml +14 -14
  287. data/config/locales/sv.yml +14 -14
  288. data/config/locales/sw.yml +14 -14
  289. data/config/locales/ta.yml +14 -14
  290. data/config/locales/th.yml +14 -14
  291. data/config/locales/tk.yml +14 -14
  292. data/config/locales/tr.yml +14 -14
  293. data/config/locales/uk.yml +14 -14
  294. data/config/locales/ur.yml +14 -14
  295. data/config/locales/uz.yml +14 -14
  296. data/config/locales/vi.yml +14 -14
  297. data/config/locales/zh-hk.yml +14 -14
  298. data/config/locales/zh-tw.yml +14 -14
  299. data/config/locales/zh.yml +14 -14
  300. data/lib/govuk_publishing_components/app_helpers/asset_helper.rb +86 -0
  301. data/lib/govuk_publishing_components/config.rb +3 -3
  302. data/lib/govuk_publishing_components/presenters/accordion_helper.rb +38 -0
  303. data/lib/govuk_publishing_components/presenters/breadcrumb_selector.rb +3 -2
  304. data/lib/govuk_publishing_components/presenters/{breadcrumbs.rb → breadcrumbs_helper.rb} +8 -0
  305. data/lib/govuk_publishing_components/presenters/button_helper.rb +9 -2
  306. data/lib/govuk_publishing_components/presenters/component_wrapper_helper.rb +95 -0
  307. data/lib/govuk_publishing_components/presenters/image_card_helper.rb +65 -2
  308. data/lib/govuk_publishing_components/presenters/page_with_step_by_step_navigation.rb +3 -2
  309. data/lib/govuk_publishing_components/presenters/related_navigation_helper.rb +16 -7
  310. data/lib/govuk_publishing_components/presenters/single_page_notification_button_helper.rb +43 -2
  311. data/lib/govuk_publishing_components/presenters/step_by_step_nav_helper.rb +16 -0
  312. data/lib/govuk_publishing_components/railtie.rb +7 -0
  313. data/lib/govuk_publishing_components/version.rb +1 -1
  314. data/lib/govuk_publishing_components.rb +6 -1
  315. data/node_modules/axe-core/README.md +1 -1
  316. data/node_modules/axe-core/axe.d.ts +76 -24
  317. data/node_modules/axe-core/axe.js +9200 -9059
  318. data/node_modules/axe-core/axe.min.js +3 -3
  319. data/node_modules/axe-core/package.json +29 -29
  320. data/node_modules/axe-core/sri-history.json +20 -0
  321. data/node_modules/govuk-frontend/README.md +1 -2
  322. data/node_modules/govuk-frontend/govuk/all.js +4035 -2673
  323. data/node_modules/govuk-frontend/govuk/all.js.map +1 -0
  324. data/node_modules/govuk-frontend/govuk/common/closest-attribute-value.js +71 -0
  325. data/node_modules/govuk-frontend/govuk/common/closest-attribute-value.js.map +1 -0
  326. data/node_modules/govuk-frontend/govuk/common/index.js +180 -0
  327. data/node_modules/govuk-frontend/govuk/common/index.js.map +1 -0
  328. data/node_modules/govuk-frontend/govuk/common/normalise-dataset.js +376 -0
  329. data/node_modules/govuk-frontend/govuk/common/normalise-dataset.js.map +1 -0
  330. data/node_modules/govuk-frontend/govuk/common.js +173 -30
  331. data/node_modules/govuk-frontend/govuk/common.js.map +1 -0
  332. data/node_modules/govuk-frontend/govuk/components/_all.scss +1 -1
  333. data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +23 -4
  334. data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +2116 -983
  335. data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js.map +1 -0
  336. data/node_modules/govuk-frontend/govuk/components/accordion/fixtures.json +54 -22
  337. data/node_modules/govuk-frontend/govuk/components/accordion/macro-options.json +36 -0
  338. data/node_modules/govuk-frontend/govuk/components/accordion/template.njk +8 -2
  339. data/node_modules/govuk-frontend/govuk/components/back-link/_index.scss +19 -19
  340. data/node_modules/govuk-frontend/govuk/components/back-link/fixtures.json +12 -12
  341. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/_index.scss +21 -10
  342. data/node_modules/govuk-frontend/govuk/components/breadcrumbs/fixtures.json +22 -22
  343. data/node_modules/govuk-frontend/govuk/components/button/_index.scss +23 -5
  344. data/node_modules/govuk-frontend/govuk/components/button/button.js +958 -690
  345. data/node_modules/govuk-frontend/govuk/components/button/button.js.map +1 -0
  346. data/node_modules/govuk-frontend/govuk/components/button/fixtures.json +85 -66
  347. data/node_modules/govuk-frontend/govuk/components/button/template.njk +1 -1
  348. data/node_modules/govuk-frontend/govuk/components/character-count/_index.scss +9 -0
  349. data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +2083 -1161
  350. data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js.map +1 -0
  351. data/node_modules/govuk-frontend/govuk/components/character-count/fixtures.json +112 -36
  352. data/node_modules/govuk-frontend/govuk/components/character-count/macro-options.json +42 -0
  353. data/node_modules/govuk-frontend/govuk/components/character-count/template.njk +27 -3
  354. data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +1155 -1119
  355. data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js.map +1 -0
  356. data/node_modules/govuk-frontend/govuk/components/checkboxes/fixtures.json +96 -93
  357. data/node_modules/govuk-frontend/govuk/components/cookie-banner/fixtures.json +46 -46
  358. data/node_modules/govuk-frontend/govuk/components/cookie-banner/template.njk +1 -1
  359. data/node_modules/govuk-frontend/govuk/components/date-input/fixtures.json +50 -50
  360. data/node_modules/govuk-frontend/govuk/components/details/details.js +797 -766
  361. data/node_modules/govuk-frontend/govuk/components/details/details.js.map +1 -0
  362. data/node_modules/govuk-frontend/govuk/components/details/fixtures.json +20 -20
  363. data/node_modules/govuk-frontend/govuk/components/error-message/fixtures.json +20 -20
  364. data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js +1089 -814
  365. data/node_modules/govuk-frontend/govuk/components/error-summary/error-summary.js.map +1 -0
  366. data/node_modules/govuk-frontend/govuk/components/error-summary/fixtures.json +44 -35
  367. data/node_modules/govuk-frontend/govuk/components/error-summary/template.njk +25 -21
  368. data/node_modules/govuk-frontend/govuk/components/fieldset/fixtures.json +51 -39
  369. data/node_modules/govuk-frontend/govuk/components/file-upload/fixtures.json +26 -26
  370. data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +1 -1
  371. data/node_modules/govuk-frontend/govuk/components/footer/fixtures.json +46 -46
  372. data/node_modules/govuk-frontend/govuk/components/footer/macro-options.json +2 -2
  373. data/node_modules/govuk-frontend/govuk/components/header/_index.scss +6 -0
  374. data/node_modules/govuk-frontend/govuk/components/header/fixtures.json +93 -38
  375. data/node_modules/govuk-frontend/govuk/components/header/header.js +646 -992
  376. data/node_modules/govuk-frontend/govuk/components/header/header.js.map +1 -0
  377. data/node_modules/govuk-frontend/govuk/components/header/macro-options.json +8 -2
  378. data/node_modules/govuk-frontend/govuk/components/header/template.njk +4 -2
  379. data/node_modules/govuk-frontend/govuk/components/hint/fixtures.json +12 -12
  380. data/node_modules/govuk-frontend/govuk/components/input/fixtures.json +80 -80
  381. data/node_modules/govuk-frontend/govuk/components/inset-text/fixtures.json +12 -12
  382. data/node_modules/govuk-frontend/govuk/components/label/fixtures.json +34 -34
  383. data/node_modules/govuk-frontend/govuk/components/notification-banner/fixtures.json +56 -46
  384. data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js +790 -532
  385. data/node_modules/govuk-frontend/govuk/components/notification-banner/notification-banner.js.map +1 -0
  386. data/node_modules/govuk-frontend/govuk/components/notification-banner/template.njk +1 -1
  387. data/node_modules/govuk-frontend/govuk/components/pagination/_index.scss +10 -7
  388. data/node_modules/govuk-frontend/govuk/components/pagination/fixtures.json +94 -26
  389. data/node_modules/govuk-frontend/govuk/components/pagination/template.njk +1 -1
  390. data/node_modules/govuk-frontend/govuk/components/panel/fixtures.json +18 -18
  391. data/node_modules/govuk-frontend/govuk/components/phase-banner/fixtures.json +14 -14
  392. data/node_modules/govuk-frontend/govuk/components/phase-banner/macro-options.json +1 -1
  393. data/node_modules/govuk-frontend/govuk/components/radios/fixtures.json +94 -91
  394. data/node_modules/govuk-frontend/govuk/components/radios/radios.js +1110 -1079
  395. data/node_modules/govuk-frontend/govuk/components/radios/radios.js.map +1 -0
  396. data/node_modules/govuk-frontend/govuk/components/select/fixtures.json +32 -32
  397. data/node_modules/govuk-frontend/govuk/components/skip-link/fixtures.json +22 -20
  398. data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js +1017 -1008
  399. data/node_modules/govuk-frontend/govuk/components/skip-link/skip-link.js.map +1 -0
  400. data/node_modules/govuk-frontend/govuk/components/summary-list/_index.scss +107 -0
  401. data/node_modules/govuk-frontend/govuk/components/summary-list/fixtures.json +345 -50
  402. data/node_modules/govuk-frontend/govuk/components/summary-list/macro-options.json +110 -0
  403. data/node_modules/govuk-frontend/govuk/components/summary-list/template.njk +72 -28
  404. data/node_modules/govuk-frontend/govuk/components/table/_index.scss +1 -1
  405. data/node_modules/govuk-frontend/govuk/components/table/fixtures.json +40 -40
  406. data/node_modules/govuk-frontend/govuk/components/tabs/fixtures.json +29 -29
  407. data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js +1389 -1233
  408. data/node_modules/govuk-frontend/govuk/components/tabs/tabs.js.map +1 -0
  409. data/node_modules/govuk-frontend/govuk/components/tag/fixtures.json +28 -28
  410. data/node_modules/govuk-frontend/govuk/components/textarea/fixtures.json +34 -34
  411. data/node_modules/govuk-frontend/govuk/components/warning-text/fixtures.json +14 -14
  412. data/node_modules/govuk-frontend/govuk/core/_section-break.scss +1 -1
  413. data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +2 -2
  414. data/node_modules/govuk-frontend/govuk/helpers/_focused.scss +5 -0
  415. data/node_modules/govuk-frontend/govuk/helpers/_links.scss +6 -6
  416. data/node_modules/govuk-frontend/govuk/i18n.js +389 -0
  417. data/node_modules/govuk-frontend/govuk/i18n.js.map +1 -0
  418. data/node_modules/govuk-frontend/govuk/macros/i18n.njk +15 -0
  419. data/node_modules/govuk-frontend/govuk/settings/_all.scss +1 -0
  420. data/node_modules/govuk-frontend/govuk/settings/_colours-palette.scss +12 -0
  421. data/node_modules/govuk-frontend/govuk/settings/_compatibility.scss +26 -0
  422. data/node_modules/govuk-frontend/govuk/settings/_measurements.scss +5 -5
  423. data/node_modules/govuk-frontend/govuk/settings/_typography-font.scss +23 -0
  424. data/node_modules/govuk-frontend/govuk/settings/_typography-responsive.scss +12 -0
  425. data/node_modules/govuk-frontend/govuk/settings/_warnings.scss +53 -0
  426. data/node_modules/govuk-frontend/govuk/tools/_compatibility.scss +20 -6
  427. data/node_modules/govuk-frontend/govuk/vendor/polyfills/DOMTokenList.js +242 -241
  428. data/node_modules/govuk-frontend/govuk/vendor/polyfills/DOMTokenList.js.map +1 -0
  429. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Date/now.js +22 -0
  430. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Date/now.js.map +1 -0
  431. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Document.js +17 -16
  432. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Document.js.map +1 -0
  433. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/classList.js +547 -546
  434. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/classList.js.map +1 -0
  435. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/closest.js +37 -36
  436. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/closest.js.map +1 -0
  437. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/dataset.js +301 -0
  438. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/dataset.js.map +1 -0
  439. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/matches.js +21 -20
  440. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/matches.js.map +1 -0
  441. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/nextElementSibling.js +198 -197
  442. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/nextElementSibling.js.map +1 -0
  443. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/previousElementSibling.js +198 -197
  444. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element/prototype/previousElementSibling.js.map +1 -0
  445. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element.js +106 -105
  446. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Element.js.map +1 -0
  447. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Event.js +400 -399
  448. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Event.js.map +1 -0
  449. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Function/prototype/bind.js +239 -238
  450. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Function/prototype/bind.js.map +1 -0
  451. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Object/defineProperty.js +72 -71
  452. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Object/defineProperty.js.map +1 -0
  453. data/node_modules/govuk-frontend/govuk/vendor/polyfills/String/prototype/trim.js +22 -0
  454. data/node_modules/govuk-frontend/govuk/vendor/polyfills/String/prototype/trim.js.map +1 -0
  455. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Window.js +17 -16
  456. data/node_modules/govuk-frontend/govuk/vendor/polyfills/Window.js.map +1 -0
  457. data/node_modules/govuk-frontend/govuk-esm/all.mjs +52 -29
  458. data/node_modules/govuk-frontend/govuk-esm/common/closest-attribute-value.mjs +15 -0
  459. data/node_modules/govuk-frontend/govuk-esm/common/index.mjs +166 -0
  460. data/node_modules/govuk-frontend/govuk-esm/common/normalise-dataset.mjs +60 -0
  461. data/node_modules/govuk-frontend/govuk-esm/common.mjs +6 -28
  462. data/node_modules/govuk-frontend/govuk-esm/components/accordion/accordion.mjs +238 -85
  463. data/node_modules/govuk-frontend/govuk-esm/components/button/button.mjs +73 -34
  464. data/node_modules/govuk-frontend/govuk-esm/components/character-count/character-count.mjs +329 -124
  465. data/node_modules/govuk-frontend/govuk-esm/components/checkboxes/checkboxes.mjs +32 -20
  466. data/node_modules/govuk-frontend/govuk-esm/components/details/details.mjs +41 -20
  467. data/node_modules/govuk-frontend/govuk-esm/components/error-summary/error-summary.mjs +60 -14
  468. data/node_modules/govuk-frontend/govuk-esm/components/header/header.mjs +9 -2
  469. data/node_modules/govuk-frontend/govuk-esm/components/notification-banner/notification-banner.mjs +33 -4
  470. data/node_modules/govuk-frontend/govuk-esm/components/radios/radios.mjs +18 -11
  471. data/node_modules/govuk-frontend/govuk-esm/components/skip-link/skip-link.mjs +15 -7
  472. data/node_modules/govuk-frontend/govuk-esm/components/tabs/tabs.mjs +171 -38
  473. data/node_modules/govuk-frontend/govuk-esm/i18n.mjs +378 -0
  474. data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Date/now.mjs +13 -0
  475. data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/Element/prototype/dataset.mjs +68 -0
  476. data/node_modules/govuk-frontend/govuk-esm/vendor/polyfills/String/prototype/trim.mjs +13 -0
  477. data/node_modules/govuk-frontend/govuk-prototype-kit/init.js +7 -0
  478. data/node_modules/govuk-frontend/govuk-prototype-kit/init.scss +12 -0
  479. data/node_modules/govuk-frontend/govuk-prototype-kit.config.json +138 -7
  480. data/node_modules/govuk-frontend/package.json +1 -1
  481. metadata +70 -19
  482. data/app/assets/stylesheets/component_guide/print.scss +0 -1
  483. data/app/assets/stylesheets/govuk_publishing_components/_all_components_print.scss +0 -18
  484. data/app/assets/stylesheets/govuk_publishing_components/components/print/_accordion.scss +0 -28
  485. data/app/assets/stylesheets/govuk_publishing_components/components/print/_button.scss +0 -8
  486. data/app/assets/stylesheets/govuk_publishing_components/components/print/_cards.scss +0 -4
  487. data/app/assets/stylesheets/govuk_publishing_components/components/print/_contents-list.scss +0 -19
  488. data/app/assets/stylesheets/govuk_publishing_components/components/print/_emergency-banner.scss +0 -3
  489. data/app/assets/stylesheets/govuk_publishing_components/components/print/_govspeak-html-publication.scss +0 -5
  490. data/app/assets/stylesheets/govuk_publishing_components/components/print/_govspeak.scss +0 -80
  491. data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-super-navigation-header.scss +0 -3
  492. data/app/assets/stylesheets/govuk_publishing_components/components/print/_organisation-logo.scss +0 -7
  493. data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav-header.scss +0 -7
  494. data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav.scss +0 -116
  495. data/app/assets/stylesheets/govuk_publishing_components/components/print/_textarea.scss +0 -13
  496. data/app/assets/stylesheets/govuk_publishing_components/components/print/_title.scss +0 -7
@@ -38,8 +38,13 @@
38
38
  if (typeof GOVUK.Modules[moduleName] === 'function' && !started) {
39
39
  // Vanilla JavaScript GOV.UK Modules and GOV.UK Frontend Modules
40
40
  if (GOVUK.Modules[moduleName].prototype.init) {
41
- new GOVUK.Modules[moduleName](element).init()
42
- element.setAttribute('data-' + moduleNames[j] + '-module-started', true)
41
+ try {
42
+ new GOVUK.Modules[moduleName](element).init()
43
+ element.setAttribute('data-' + moduleNames[j] + '-module-started', true)
44
+ } catch (e) {
45
+ // if there's a problem with the module, catch the error to allow other modules to start
46
+ console.error('Error starting ' + moduleName + ' component JS: ' + e.message, window.location)
47
+ }
43
48
  }
44
49
  }
45
50
  }
@@ -38,6 +38,8 @@
38
38
  errorBeaconUrl: getProperty(obj, "errorBeaconUrl", "https://lux.speedcurve.com/error/"),
39
39
  jspagelabel: getProperty(obj, "jspagelabel", undefined),
40
40
  label: getProperty(obj, "label", undefined),
41
+ maxBeaconUrlLength: getProperty(obj, "maxBeaconUrlLength", 8190),
42
+ maxBeaconUTEntries: getProperty(obj, "maxBeaconUTEntries", 20),
41
43
  maxErrors: getProperty(obj, "maxErrors", 5),
42
44
  maxMeasureTime: getProperty(obj, "maxMeasureTime", 60000),
43
45
  measureUntil: getProperty(obj, "measureUntil", "onload"),
@@ -133,11 +135,8 @@
133
135
  }
134
136
 
135
137
  /**
136
- * Get the interaction attribution name for an element
137
- *
138
- * @param {HTMLElement} el
139
- * @returns string
140
- */
138
+ * Get the interaction attribution name for an element
139
+ */
141
140
  function interactionAttributionForElement(el) {
142
141
  // Our first preference is to use the data-sctrack attribute from anywhere in the tree
143
142
  var trackId = getClosestScTrackAttribute(el);
@@ -183,10 +182,10 @@
183
182
  // prevent having to make regular typeof checks.
184
183
  var performance = window.performance || {};
185
184
  var timing = performance.timing || {
186
- // If performance.timing isn't available, we attempt to polyfill the navigationStart value.
187
- // Our first attempt is from LUX.ns, which is the time that the snippet execution began. If this
188
- // is not available, we fall back to the time that the current script execution began.
189
- navigationStart: ((_a = window.LUX) === null || _a === void 0 ? void 0 : _a.ns) || scriptStartTime,
185
+ // If performance.timing isn't available, we attempt to polyfill the navigationStart value.
186
+ // Our first attempt is from LUX.ns, which is the time that the snippet execution began. If this
187
+ // is not available, we fall back to the time that the current script execution began.
188
+ navigationStart: ((_a = window.LUX) === null || _a === void 0 ? void 0 : _a.ns) || scriptStartTime,
190
189
  };
191
190
  function msSinceNavigationStart() {
192
191
  if (performance.now) {
@@ -195,10 +194,10 @@
195
194
  return now() - timing.navigationStart;
196
195
  }
197
196
  /**
198
- * Simple wrapper around performance.getEntriesByType to provide fallbacks for
199
- * legacy browsers, and work around edge cases where undefined is returned instead
200
- * of an empty PerformanceEntryList.
201
- */
197
+ * Simple wrapper around performance.getEntriesByType to provide fallbacks for
198
+ * legacy browsers, and work around edge cases where undefined is returned instead
199
+ * of an empty PerformanceEntryList.
200
+ */
202
201
  function getEntriesByType(type) {
203
202
  if (typeof performance.getEntriesByType === "function") {
204
203
  var entries = performance.getEntriesByType(type);
@@ -210,74 +209,92 @@
210
209
  }
211
210
 
212
211
  var Matching = /** @class */ (function () {
213
- function Matching() {
212
+ function Matching() {
213
+ }
214
+ Matching.isMatching = function (pattern, url) {
215
+ var regexp = Matching.createRegexpFromPattern(pattern);
216
+ return url.match(regexp) ? true : false;
217
+ };
218
+ /**
219
+ * Converts string pattern to RegExp object
220
+ * @return RegExp
221
+ */
222
+ Matching.createRegexpFromPattern = function (pattern) {
223
+ var regexp;
224
+ if (pattern == "/") {
225
+ regexp = this.getRegexpForHostnameRoot();
214
226
  }
215
- Matching.isMatching = function (pattern, url) {
216
- var regexp = Matching.createRegexpFromPattern(pattern);
217
- return url.match(regexp) ? true : false;
218
- };
219
- /**
220
- * Converts string pattern to RegExp object
221
- * @return RegExp
222
- */
223
- Matching.createRegexpFromPattern = function (pattern) {
224
- var regexp;
225
- if (pattern == "/") {
226
- regexp = this.getRegexpForHostnameRoot();
227
- }
228
- else if (!pattern.includes(Matching.wildcard)) {
229
- regexp = this.getRegexpForExactString(pattern);
230
- }
231
- else if (pattern.charAt(0) == "/") {
232
- regexp = this.createRegexpFromPathname(pattern);
233
- }
234
- else {
235
- regexp = this.createRegexpFromPathname(pattern, false);
236
- }
237
- return regexp;
238
- };
239
- /**
240
- * Converts URL pathname string pattern to RegExp object
241
- * Multile wildcards (*) are supported
242
- * @return RegExp
243
- */
244
- Matching.createRegexpFromPathname = function (pattern, anyDomain) {
245
- if (anyDomain === void 0) { anyDomain = true; }
246
- pattern = this.escapeStringForRegexp(pattern);
247
- var expression = "^" +
248
- (anyDomain ? Matching.domainExpression : "") +
249
- pattern.replaceAll(Matching.wildcard, ".*?") +
250
- "$";
251
- return new RegExp(expression, "i");
252
- };
253
- /**
254
- * Matches hostname root (e.g. "/", "somedomain.com/", "www.somedomain.co.nz/")
255
- * Trailing slash is mandatory
256
- * @return RegExp
257
- */
258
- Matching.getRegexpForHostnameRoot = function () {
259
- return new RegExp("^" + Matching.domainExpression + "/$", "i");
260
- };
261
- /**
262
- * Matches exact string (no wildcard provided)
263
- * @return RegExp
264
- */
265
- Matching.getRegexpForExactString = function (string) {
266
- return new RegExp("^" + this.escapeStringForRegexp(string) + "/?$", "i");
267
- };
268
- /**
269
- * Escape special symbols in regexp string
270
- * @param string
271
- */
272
- Matching.escapeStringForRegexp = function (string) {
273
- // we don't escape * because it's our own special symbol!
274
- return string.replace(/[-/\\^$+?.()|[\]{}]/g, "\\$&");
275
- };
276
- Matching.wildcard = "*";
277
- Matching.domainExpression = "[a-zA-Z0-9-.]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,}";
278
- return Matching;
227
+ else if (!pattern.includes(Matching.wildcard)) {
228
+ regexp = this.getRegexpForExactString(pattern);
229
+ }
230
+ else {
231
+ regexp = this.createRegexpFromPathname(pattern);
232
+ }
233
+ return regexp;
234
+ };
235
+ /**
236
+ * Converts URL pathname string pattern to RegExp object
237
+ * Multile wildcards (*) are supported
238
+ * @return RegExp
239
+ */
240
+ Matching.createRegexpFromPathname = function (pattern) {
241
+ var anyDomain = pattern.charAt(0) == "/";
242
+ pattern = this.escapeStringForRegexp(pattern);
243
+ var expression = "^" +
244
+ (anyDomain ? Matching.domainExpression : "") +
245
+ pattern.replaceAll(Matching.wildcard, ".*?") +
246
+ "$";
247
+ return new RegExp(expression, "i");
248
+ };
249
+ /**
250
+ * Matches hostname root (e.g. "/", "somedomain.com/", "www.somedomain.co.nz/")
251
+ * Trailing slash is mandatory
252
+ * @return RegExp
253
+ */
254
+ Matching.getRegexpForHostnameRoot = function () {
255
+ return new RegExp("^" + Matching.domainExpression + "/$", "i");
256
+ };
257
+ /**
258
+ * Matches exact string (no wildcard provided)
259
+ * @return RegExp
260
+ */
261
+ Matching.getRegexpForExactString = function (string) {
262
+ var anyDomain = string.charAt(0) == "/";
263
+ return new RegExp("^" +
264
+ (anyDomain ? Matching.domainExpression : "") +
265
+ this.escapeStringForRegexp(string) +
266
+ "/?$", "i");
267
+ };
268
+ /**
269
+ * Escape special symbols in regexp string
270
+ * @param string
271
+ */
272
+ Matching.escapeStringForRegexp = function (string) {
273
+ // we don't escape * because it's our own special symbol!
274
+ return string.replace(/[-/\\^$+?.()|[\]{}]/g, "\\$&");
275
+ };
276
+ Matching.wildcard = "*";
277
+ Matching.domainExpression = "[a-zA-Z0-9-.]{1,61}[a-zA-Z0-9]\\.[a-zA-Z]{2,}";
278
+ return Matching;
279
279
  }());
280
280
 
281
+ /**
282
+ * Fit an array of user timing delimited strings into a URL and return both the entries that fit and
283
+ * the remaining entries that didn't fit.
284
+ */
285
+ function fitUserTimingEntries(utValues, config, url) {
286
+ // Start with the maximum allowed UT entries per beacon
287
+ var beaconUtValues = utValues.slice(0, config.maxBeaconUTEntries);
288
+ var remainingUtValues = utValues.slice(config.maxBeaconUTEntries);
289
+ // Trim UT entries until they fit within the maximum URL length, ensuring at least one UT entry
290
+ // is included.
291
+ while ((url + "&UT=" + beaconUtValues.join(",")).length > config.maxBeaconUrlLength &&
292
+ beaconUtValues.length > 1) {
293
+ remainingUtValues.unshift(beaconUtValues.pop());
294
+ }
295
+ return [beaconUtValues, remainingUtValues];
296
+ }
297
+
281
298
  var LUX = window.LUX || {};
282
299
  var scriptEndTime = scriptStartTime;
283
300
  LUX = (function () {
@@ -290,7 +307,7 @@
290
307
  /// End
291
308
  // -------------------------------------------------------------------------
292
309
 
293
- var SCRIPT_VERSION = "302";
310
+ var SCRIPT_VERSION = "305";
294
311
  var logger = new Logger();
295
312
  var globalConfig = fromObject(LUX);
296
313
  logger.logEvent(LogEvent.EvaluationStart, [SCRIPT_VERSION]);
@@ -384,7 +401,6 @@
384
401
  var gUid = refreshUniqueId(gSyncId); // cookie for this session ("Unique ID")
385
402
  var gCustomerDataTimeout; // setTimeout timer for sending a Customer Data beacon after onload
386
403
  var gMaxMeasureTimeout; // setTimeout timer for sending the beacon after a maximum measurement time
387
- var gMaxQuerystring = 8190; // split the beacon querystring if it gets longer than this
388
404
  if (_sample()) {
389
405
  logger.logEvent(LogEvent.SessionIsSampled, [globalConfig.samplerate]);
390
406
  }
@@ -703,7 +719,7 @@
703
719
  }
704
720
  aUT.push(utParts.join("|"));
705
721
  }
706
- return aUT.join(",");
722
+ return aUT;
707
723
  }
708
724
  // Return a string of Element Timing Metrics formatted for beacon querystring.
709
725
  function elementTimingValues() {
@@ -787,8 +803,8 @@
787
803
  ",x|" +
788
804
  hStats["max"] +
789
805
  (0 === hStats["fci"] ? "" : ",i|" + hStats["fci"]); // only add FCI if it is non-zero
790
- sCPU += "s|" + hCPU[jsType] + sStats + hCPUDetails[jsType];
791
- return sCPU;
806
+ sCPU += "s|" + hCPU[jsType] + sStats + hCPUDetails[jsType];
807
+ return sCPU;
792
808
  }
793
809
  // Return a hash of "stats" about the CPU details incl. count, max, and median.
794
810
  function cpuStats(sDetails) {
@@ -1408,8 +1424,28 @@
1408
1424
  clearTimeout(gMaxMeasureTimeout);
1409
1425
  }
1410
1426
  }
1427
+ function _getBeaconUrl() {
1428
+ var queryParams = [
1429
+ "v=" + SCRIPT_VERSION,
1430
+ "id=" + getCustomerId(),
1431
+ "sid=" + gSyncId,
1432
+ "uid=" + gUid,
1433
+ "l=" + encodeURIComponent(_getPageLabel()),
1434
+ "HN=" + encodeURIComponent(document.location.hostname),
1435
+ "PN=" + encodeURIComponent(document.location.pathname),
1436
+ ];
1437
+ if (gFlags) {
1438
+ queryParams.push("fl=" + gFlags);
1439
+ }
1440
+ var customerData = customerDataValues();
1441
+ if (customerData) {
1442
+ queryParams.push("CD=" + customerData);
1443
+ }
1444
+ return globalConfig.beaconUrl + "?" + queryParams.join("&");
1445
+ }
1411
1446
  // Beacon back the LUX data.
1412
1447
  function _sendLux() {
1448
+ var _a;
1413
1449
  clearMaxMeasureTimeout();
1414
1450
  var customerid = getCustomerId();
1415
1451
  if (!customerid ||
@@ -1427,9 +1463,7 @@
1427
1463
  // with LUX.markLoadTime()
1428
1464
  _markLoadTime();
1429
1465
  }
1430
- var sUT = userTimingValues(); // User Timing data
1431
1466
  var sET = elementTimingValues(); // Element Timing data
1432
- var sCustomerData = customerDataValues(); // customer data
1433
1467
  var sIx = ""; // Interaction Metrics
1434
1468
  if (!gbIxSent) {
1435
1469
  // It is possible for the IX beacon to be sent BEFORE the "main" window.onload LUX beacon.
@@ -1444,21 +1478,10 @@
1444
1478
  }
1445
1479
  // We want ALL beacons to have ALL the data used for query filters (geo, pagelabel, browser, & customerdata).
1446
1480
  // So we create a base URL that has all the necessary information:
1447
- var baseUrl = globalConfig.beaconUrl +
1448
- "?v=" +
1449
- SCRIPT_VERSION +
1450
- "&id=" +
1451
- customerid +
1452
- "&sid=" +
1453
- gSyncId +
1454
- "&uid=" +
1455
- gUid +
1456
- (sCustomerData ? "&CD=" + sCustomerData : "") +
1457
- "&l=" +
1458
- encodeURIComponent(_getPageLabel());
1481
+ var baseUrl = _getBeaconUrl();
1459
1482
  var is = inlineTagSize("script");
1460
1483
  var ic = inlineTagSize("style");
1461
- var querystring =
1484
+ var metricsQueryString =
1462
1485
  // only send Nav Timing and lux.js metrics on initial pageload (not for SPA page views)
1463
1486
  (gbNavSent ? "" : "&NT=" + getNavTiming()) +
1464
1487
  (gbFirstPV ? "&LJS=" + sLuxjs : "") +
@@ -1499,31 +1522,15 @@
1499
1522
  (sIx ? "&IX=" + sIx : "") +
1500
1523
  (typeof gFirstInputDelay !== "undefined" ? "&FID=" + gFirstInputDelay : "") +
1501
1524
  (sCPU ? "&CPU=" + sCPU : "") +
1502
- (gFlags ? "&fl=" + gFlags : "") +
1503
1525
  (sET ? "&ET=" + sET : "") + // element timing
1504
- "&HN=" +
1505
- encodeURIComponent(document.location.hostname) +
1506
- (DCLS !== false ? "&CLS=" + DCLS : "") +
1507
- "&PN=" +
1508
- encodeURIComponent(document.location.pathname);
1509
- // User Timing marks & measures
1510
- var sUT_remainder = "";
1511
- if (sUT) {
1512
- var curLen = baseUrl.length + querystring.length;
1513
- if (curLen + sUT.length <= gMaxQuerystring) {
1514
- // Add all User Timing
1515
- querystring += "&UT=" + sUT;
1516
- }
1517
- else {
1518
- // Only add a substring of User Timing
1519
- var avail_1 = gMaxQuerystring - curLen; // how much room is left in the querystring
1520
- var iComma = sUT.lastIndexOf(",", avail_1); // as many UT tuples as possible
1521
- querystring += "&UT=" + sUT.substring(0, iComma);
1522
- sUT_remainder = sUT.substring(iComma + 1);
1523
- }
1524
- }
1526
+ (DCLS !== false ? "&CLS=" + DCLS : "");
1527
+ // We add the user timing entries last so that we can split them to reduce the URL size if necessary.
1528
+ var utValues = userTimingValues();
1529
+ var _b = fitUserTimingEntries(utValues, globalConfig, baseUrl + metricsQueryString), beaconUtValues = _b[0], remainingUtValues = _b[1];
1525
1530
  // Send the MAIN LUX beacon.
1526
- var mainBeaconUrl = baseUrl + querystring;
1531
+ var mainBeaconUrl = baseUrl +
1532
+ metricsQueryString +
1533
+ (beaconUtValues.length > 0 ? "&UT=" + beaconUtValues.join(",") : "");
1527
1534
  logger.logEvent(LogEvent.MainBeaconSent, [mainBeaconUrl]);
1528
1535
  _sendBeacon(mainBeaconUrl);
1529
1536
  // Set some states.
@@ -1531,34 +1538,9 @@
1531
1538
  gbNavSent = 1;
1532
1539
  gbIxSent = sIx ? 1 : 0;
1533
1540
  // Send other beacons for JUST User Timing.
1534
- var avail = gMaxQuerystring - baseUrl.length;
1535
- while (sUT_remainder) {
1536
- var sUT_cur = "";
1537
- if (sUT_remainder.length <= avail) {
1538
- // We can fit ALL the remaining UT params.
1539
- sUT_cur = sUT_remainder;
1540
- sUT_remainder = "";
1541
- }
1542
- else {
1543
- // We have to take a subset of the remaining UT params.
1544
- var iComma = sUT_remainder.lastIndexOf(",", avail); // as many UT tuples as possible
1545
- if (-1 === iComma) {
1546
- // Trouble: we have SO LITTLE available space we can not fit the first UT tuple.
1547
- // Try it anyway but find it by searching from the front.
1548
- iComma = sUT_remainder.indexOf(",");
1549
- }
1550
- if (-1 === iComma) {
1551
- // The is only one UT tuple left, but it is bigger than the available space.
1552
- // Take the whole tuple even tho it is too big.
1553
- sUT_cur = sUT_remainder;
1554
- sUT_remainder = "";
1555
- }
1556
- else {
1557
- sUT_cur = sUT_remainder.substring(0, iComma);
1558
- sUT_remainder = sUT_remainder.substring(iComma + 1);
1559
- }
1560
- }
1561
- var utBeaconUrl = baseUrl + "&UT=" + sUT_cur;
1541
+ while (remainingUtValues.length) {
1542
+ _a = fitUserTimingEntries(remainingUtValues, globalConfig, baseUrl), beaconUtValues = _a[0], remainingUtValues = _a[1];
1543
+ var utBeaconUrl = baseUrl + "&UT=" + beaconUtValues.join(",");
1562
1544
  logger.logEvent(LogEvent.UserTimingBeaconSent, [utBeaconUrl]);
1563
1545
  _sendBeacon(utBeaconUrl);
1564
1546
  }
@@ -1576,26 +1558,10 @@
1576
1558
  }
1577
1559
  var sIx = ixValues(); // Interaction Metrics
1578
1560
  if (sIx) {
1579
- var sCustomerData = customerDataValues(); // customer data
1580
- var querystring = "?v=" +
1581
- SCRIPT_VERSION +
1582
- "&id=" +
1583
- customerid +
1584
- "&sid=" +
1585
- gSyncId +
1586
- "&uid=" +
1587
- gUid +
1588
- (sCustomerData ? "&CD=" + sCustomerData : "") +
1589
- "&l=" +
1590
- encodeURIComponent(_getPageLabel()) +
1591
- "&IX=" +
1592
- sIx +
1593
- (gFirstInputDelay ? "&FID=" + gFirstInputDelay : "") +
1594
- "&HN=" +
1595
- encodeURIComponent(document.location.hostname) +
1596
- "&PN=" +
1597
- encodeURIComponent(document.location.pathname);
1598
- var beaconUrl = globalConfig.beaconUrl + querystring;
1561
+ var beaconUrl = _getBeaconUrl() +
1562
+ "&IX=" +
1563
+ sIx +
1564
+ (typeof gFirstInputDelay !== "undefined" ? "&FID=" + gFirstInputDelay : "");
1599
1565
  logger.logEvent(LogEvent.InteractionBeaconSent, [beaconUrl]);
1600
1566
  _sendBeacon(beaconUrl);
1601
1567
  gbIxSent = 1;
@@ -1614,23 +1580,7 @@
1614
1580
  }
1615
1581
  var sCustomerData = customerDataValues(); // customer data
1616
1582
  if (sCustomerData) {
1617
- var querystring = "?v=" +
1618
- SCRIPT_VERSION +
1619
- "&id=" +
1620
- customerid +
1621
- "&sid=" +
1622
- gSyncId +
1623
- "&uid=" +
1624
- gUid +
1625
- "&CD=" +
1626
- sCustomerData +
1627
- "&l=" +
1628
- encodeURIComponent(_getPageLabel()) +
1629
- "&HN=" +
1630
- encodeURIComponent(document.location.hostname) +
1631
- "&PN=" +
1632
- encodeURIComponent(document.location.pathname);
1633
- var beaconUrl = globalConfig.beaconUrl + querystring;
1583
+ var beaconUrl = _getBeaconUrl();
1634
1584
  logger.logEvent(LogEvent.CustomDataBeaconSent, [beaconUrl]);
1635
1585
  _sendBeacon(beaconUrl);
1636
1586
  }
@@ -1657,7 +1607,7 @@
1657
1607
  _removeIxHandlers();
1658
1608
  if (typeof ghIx["k"] === "undefined") {
1659
1609
  ghIx["k"] = Math.round(_now());
1660
- if (e && e.target) {
1610
+ if (e && e.target instanceof Element) {
1661
1611
  var trackId = interactionAttributionForElement(e.target);
1662
1612
  if (trackId) {
1663
1613
  ghIx["ki"] = trackId;
@@ -1670,16 +1620,15 @@
1670
1620
  _removeIxHandlers();
1671
1621
  if (typeof ghIx["c"] === "undefined") {
1672
1622
  ghIx["c"] = Math.round(_now());
1673
- var target = null;
1623
+ var target = void 0;
1674
1624
  try {
1675
1625
  // Seeing "Permission denied" errors, so do a simple try-catch.
1676
- if (e && e.target) {
1626
+ if (e && e.target instanceof Element) {
1677
1627
  target = e.target;
1678
1628
  }
1679
1629
  }
1680
1630
  catch (e) {
1681
1631
  logger.logEvent(LogEvent.EventTargetAccessError);
1682
- target = null;
1683
1632
  }
1684
1633
  if (target) {
1685
1634
  if (e.clientX) {
@@ -1687,7 +1636,7 @@
1687
1636
  ghIx["cx"] = e.clientX;
1688
1637
  ghIx["cy"] = e.clientY;
1689
1638
  }
1690
- var trackId = interactionAttributionForElement(e.target);
1639
+ var trackId = interactionAttributionForElement(target);
1691
1640
  if (trackId) {
1692
1641
  ghIx["ci"] = trackId;
1693
1642
  }
@@ -0,0 +1,10 @@
1
+ $govuk-new-link-styles: true;
2
+
3
+ // This flag stops the font from being included in this components's
4
+ // stylesheet - the font is being served by Static across all of GOV.UK, so is
5
+ // not needed here.
6
+ $govuk-include-default-font-face: false;
7
+
8
+ // Each component needs access to the variables, functions, and mixins from
9
+ // GOVUK Frontend.
10
+ @import "govuk_frontend_support";
@@ -1,3 +1,4 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "mixins/prefixed-transform";
2
3
  @import "govuk/components/accordion/accordion";
3
4
 
@@ -5,3 +6,31 @@
5
6
  .gem-c-accordion__show-all > * {
6
7
  pointer-events: none;
7
8
  }
9
+
10
+ // This is in place until a proper fix comes through from GOV.UK Frontend.
11
+ //
12
+ // TODO: Replace with the print styles that will come from GOV.UK Frontend.
13
+
14
+ @include govuk-media-query($media-type: print) {
15
+ // Open all of the accordion sections.
16
+ .govuk-accordion__section-content {
17
+ display: block !important; // stylelint-disable-line declaration-no-important
18
+ }
19
+
20
+ // Change the colour from the blue link colour to black.
21
+ .govuk-accordion__section-button {
22
+ color: govuk-colour("black") !important; // stylelint-disable-line declaration-no-important
23
+ }
24
+
25
+ // Change the summary subheading size.
26
+ .govuk-accordion__section-summary {
27
+ @include govuk-typography-common;
28
+ @include govuk-typography-responsive($size: 16, $important: true);
29
+ }
30
+
31
+ // Hide the unusable "Show all" and "Show" sections.
32
+ .govuk-accordion__show-all,
33
+ .govuk-accordion__section-toggle {
34
+ display: none !important; // stylelint-disable-line declaration-no-important
35
+ }
36
+ }
@@ -1,3 +1,5 @@
1
+ @import "govuk_publishing_components/individual_component_support";
2
+
1
3
  .gem-c-action-link {
2
4
  display: table;
3
5
 
@@ -1,3 +1,5 @@
1
+ @import "govuk_publishing_components/individual_component_support";
2
+
1
3
  $thumbnail-width: 99px;
2
4
  $thumbnail-height: 140px;
3
5
  $thumbnail-border-width: 5px;
@@ -1 +1,2 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "govuk/components/back-link/back-link";
@@ -1,3 +1,5 @@
1
+ @import "govuk_publishing_components/individual_component_support";
2
+
1
3
  .gem-c-big-number {
2
4
  margin-bottom: govuk-spacing(3);
3
5
  @include govuk-text-colour;
@@ -5,12 +7,9 @@
5
7
 
6
8
  .gem-c-big-number__value {
7
9
  @include govuk-font($size: false, $weight: bold);
8
- font-size: 80px;
9
10
  line-height: 1;
10
-
11
- @if $govuk-typography-use-rem {
12
- font-size: govuk-px-to-rem(80px);
13
- }
11
+ font-size: 80px;
12
+ font-size: govuk-px-to-rem(80px);
14
13
  }
15
14
 
16
15
  .gem-c-big-number__label {
@@ -1,3 +1,4 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "govuk/components/breadcrumbs/breadcrumbs";
2
3
 
3
4
  .gem-c-breadcrumbs--inverse .govuk-breadcrumbs__list-item .govuk-breadcrumbs__link {
@@ -1,3 +1,4 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "govuk/components/button/button";
2
3
 
3
4
  // Because govuk-frontend adds a responsive bottom margin by default for each component
@@ -100,3 +101,14 @@
100
101
  content: none;
101
102
  }
102
103
  }
104
+
105
+ @include govuk-media-query($media-type: print) {
106
+ .gem-c-button {
107
+ @include govuk-font(14);
108
+ display: inline-block;
109
+ padding: govuk-spacing(1);
110
+ border: solid 1px govuk-colour("black");
111
+ color: $govuk-text-colour;
112
+ text-decoration: none;
113
+ }
114
+ }
@@ -1,3 +1,4 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "mixins/grid-helper";
2
3
  @import "mixins/prefixed-transform";
3
4
 
@@ -107,3 +108,22 @@
107
108
  .gem-c-cards__description {
108
109
  margin: 0 govuk-spacing(-6) 0 0;
109
110
  }
111
+
112
+ @include govuk-media-query($media-type: print) {
113
+ .gem-c-cards__list {
114
+ display: block;
115
+ }
116
+
117
+ .gem-c-cards__list-item {
118
+ padding-bottom: 0;
119
+ }
120
+
121
+ .gem-c-cards__sub-heading {
122
+ margin-top: govuk-spacing(4);
123
+ margin-bottom: govuk-spacing(1);
124
+ }
125
+
126
+ .gem-c-cards__link:before {
127
+ display: none;
128
+ }
129
+ }
@@ -1 +1,2 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "govuk/components/character-count/character-count";
@@ -1,3 +1,4 @@
1
+ @import "govuk_publishing_components/individual_component_support";
1
2
  @import "govuk/components/checkboxes/checkboxes";
2
3
 
3
4
  .govuk-checkboxes--nested {