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
@@ -1,12 +1,14 @@
1
1
  ---
2
2
  zh:
3
3
  common:
4
+ hide: 隐藏
5
+ show: 显示
6
+ toggle_less: 显示更少
7
+ toggle_more: "%{show} %{number}更多"
4
8
  translations: 翻译
5
9
  components:
6
10
  accordion:
7
- hide: 隐藏
8
11
  hide_all: 隐藏所有小节
9
- show: 显示
10
12
  show_all: 显示所有小节
11
13
  this_section_visually_hidden: " 本小节"
12
14
  article_schema:
@@ -37,8 +39,12 @@ zh:
37
39
  buttons:
38
40
  accept_cookies: 接受额外cookies
39
41
  reject_cookies: 拒绝额外cookies
40
- confirmation_message_html: 您可以随时 %{link}。
41
- confirmation_message_link: 更改您的cookie设置
42
+ view_cookies:
43
+ confirmation_message:
44
+ accepted:
45
+ html: 您可以随时 %{link}。
46
+ link: 更改您的cookie设置
47
+ rejected:
42
48
  hide: 隐藏此消息
43
49
  text:
44
50
  - 我们使用一些基本的cookie以使本网站运作。
@@ -107,7 +113,10 @@ zh:
107
113
  menu_toggle_label:
108
114
  hide:
109
115
  show:
110
- navigation_links:
116
+ navigation_link:
117
+ href:
118
+ label:
119
+ navigation_links_columns:
111
120
  navigation_menu_heading:
112
121
  navigation_search_heading:
113
122
  navigation_search_subheading:
@@ -121,8 +130,6 @@ zh:
121
130
  part_of: 一部分
122
131
  published: 已发布
123
132
  see_all_updates: 查看全部更新
124
- toggle_less: 显示更少
125
- toggle_more: "+ %{number}更多"
126
133
  modal_dialogue:
127
134
  close_modal: 关闭模态对话
128
135
  notice:
@@ -154,13 +161,6 @@ zh:
154
161
  statistical_data_sets: 统计数据集
155
162
  topical_events: 局部事件
156
163
  topics: 探索本主题
157
- transition:
158
- hub_page_link_path: "/transition-check/questions"
159
- hub_page_link_text: 获得个性化的操作列表
160
- hub_page_title: 英国脱欧检查程序
161
- link_path: "/brexit"
162
- link_text: 检查您需要做的事情
163
- title: 英国脱欧
164
164
  ukraine:
165
165
  links:
166
166
  title:
@@ -0,0 +1,86 @@
1
+ module GovukPublishingComponents
2
+ module AppHelpers
3
+ module AssetHelper
4
+ # This is a list of all the components that have stylesheets - so a new
5
+ # component needs to be added to this list rather than being laboriously
6
+ # added and removed from every single rendering application.
7
+ COMPONENT_CSS_PATHS = Dir.glob("#{GovukPublishingComponents::Config.gem_directory}/app/assets/stylesheets/govuk_publishing_components/components/_*.scss").map { |path|
8
+ filename = path.split("/").last
9
+ component_name = filename.sub("_", "").sub(".scss", "")
10
+ "govuk_publishing_components/components/_#{component_name}.css"
11
+ }.freeze
12
+
13
+ # This list includes components already included in Static; taken from
14
+ # https://github.com/alphagov/static/blob/198a598682df40ce4a2c3c286c06244297c18cf0/app/assets/stylesheets/application.scss
15
+
16
+ # This is used to dedupe stylesheets.
17
+ STATIC_STYLESHEET_LIST = %w[
18
+ govuk_publishing_components/components/_breadcrumbs.css
19
+ govuk_publishing_components/components/_button.css
20
+ govuk_publishing_components/components/_error-message.css
21
+ govuk_publishing_components/components/_heading.css
22
+ govuk_publishing_components/components/_hint.css
23
+ govuk_publishing_components/components/_input.css
24
+ govuk_publishing_components/components/_label.css
25
+ govuk_publishing_components/components/_search.css
26
+ govuk_publishing_components/components/_skip-link.css
27
+ govuk_publishing_components/components/_textarea.css
28
+ govuk_publishing_components/components/_title.css
29
+
30
+ govuk_publishing_components/components/_cookie-banner.css
31
+ govuk_publishing_components/components/_feedback.css
32
+ govuk_publishing_components/components/_layout-footer.css
33
+ govuk_publishing_components/components/_layout-for-public.css
34
+ govuk_publishing_components/components/_layout-header.css
35
+ govuk_publishing_components/components/_layout-super-navigation-header.css
36
+ ].freeze
37
+
38
+ def add_stylesheet_path(component_path)
39
+ unless is_already_used?(component_path)
40
+ all_component_stylesheets_being_used << component_path
41
+ end
42
+ end
43
+
44
+ # Used to add a component that exists in the gem to the list
45
+ def add_gem_component_stylesheet(gem_component)
46
+ add_stylesheet_path("govuk_publishing_components/components/_#{gem_component}.css")
47
+ end
48
+
49
+ # Used to add a component that exists in the application to the list
50
+ def add_app_component_stylesheet(app_component)
51
+ add_stylesheet_path("components/_#{app_component}.css")
52
+ end
53
+
54
+ # Some applications have view-specific stylesheets - use this method
55
+ # to add them to the list
56
+ def add_view_stylesheet(view_component)
57
+ add_stylesheet_path("views/_#{view_component}.css")
58
+ end
59
+
60
+ def all_component_stylesheets_being_used
61
+ @all_component_stylesheets_being_used ||= []
62
+ end
63
+
64
+ def render_component_stylesheets
65
+ list_of_stylesheets = all_component_stylesheets_being_used.map do |component|
66
+ stylesheet_link_tag(component, integrity: false)
67
+ end
68
+ raw(list_of_stylesheets.join(""))
69
+ end
70
+
71
+ def get_component_css_paths
72
+ COMPONENT_CSS_PATHS
73
+ end
74
+
75
+ private
76
+
77
+ def is_already_used?(component)
78
+ if GovukPublishingComponents::Config.exclude_css_from_static
79
+ all_component_stylesheets_being_used.include?(component) || STATIC_STYLESHEET_LIST.include?(component)
80
+ else
81
+ all_component_stylesheets_being_used.include?(component)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -12,12 +12,12 @@ module GovukPublishingComponents
12
12
  mattr_accessor :application_stylesheet
13
13
  self.application_stylesheet = "application"
14
14
 
15
- mattr_accessor :application_print_stylesheet
16
- self.application_print_stylesheet = "print"
17
-
18
15
  mattr_accessor :application_javascript
19
16
  self.application_javascript = "application"
20
17
 
18
+ mattr_accessor :exclude_css_from_static
19
+ self.exclude_css_from_static = true
20
+
21
21
  def self.component_directory_name
22
22
  APP_COMPONENT_DIRECTORY
23
23
  end
@@ -0,0 +1,38 @@
1
+ module GovukPublishingComponents
2
+ module Presenters
3
+ class AccordionHelper
4
+ def initialise; end
5
+
6
+ def translations
7
+ {
8
+ show_text: "common.show",
9
+ hide_text: "common.hide",
10
+ show_all_text: "components.accordion.show_all",
11
+ hide_all_text: "components.accordion.hide_all",
12
+ this_section_visually_hidden: "components.accordion.this_section_visually_hidden",
13
+ }
14
+ end
15
+
16
+ def apply_translations
17
+ shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new({})
18
+ locales = {}
19
+ data_attributes = {}
20
+
21
+ translations.each do |key, translation|
22
+ locales[key] = shared_helper.t_locale(translation)
23
+ data_attributes[key] = I18n.translate(translation)
24
+ end
25
+
26
+ unique_locales = locales.values.uniq
27
+
28
+ if unique_locales.length > 1
29
+ data_attributes[:locale] = locales
30
+ elsif unique_locales[0] != I18n.locale
31
+ data_attributes[:locale] = unique_locales[0]
32
+ end
33
+
34
+ data_attributes
35
+ end
36
+ end
37
+ end
38
+ end
@@ -3,10 +3,11 @@ module GovukPublishingComponents
3
3
  class BreadcrumbSelector
4
4
  attr_reader :content_item, :request, :prioritise_taxon_breadcrumbs
5
5
 
6
- def initialize(content_item, request, prioritise_taxon_breadcrumbs)
6
+ def initialize(content_item, request, prioritise_taxon_breadcrumbs, ga4_tracking)
7
7
  @content_item = content_item
8
8
  @request = request
9
9
  @prioritise_taxon_breadcrumbs = prioritise_taxon_breadcrumbs
10
+ @ga4_tracking = ga4_tracking
10
11
  end
11
12
 
12
13
  def breadcrumbs
@@ -37,7 +38,7 @@ module GovukPublishingComponents
37
38
  elsif navigation.content_tagged_to_current_step_by_step?
38
39
  {
39
40
  step_by_step: true,
40
- breadcrumbs: navigation.step_nav_helper.header,
41
+ breadcrumbs: navigation.step_nav_helper.header(@ga4_tracking),
41
42
  }
42
43
  elsif navigation.content_is_tagged_to_a_live_taxon? && prioritise_taxon_breadcrumbs
43
44
  {
@@ -58,6 +58,14 @@ module GovukPublishingComponents
58
58
  dimension28: breadcrumbs_length.to_s,
59
59
  dimension29: crumb[:title],
60
60
  },
61
+ ga4_link: {
62
+ event_name: "navigation",
63
+ type: "breadcrumbs",
64
+ index: {
65
+ index_link: index.to_s,
66
+ },
67
+ index_total: breadcrumbs_length.to_s,
68
+ },
61
69
  }
62
70
 
63
71
  is_homepage = crumb[:url] == "/"
@@ -23,7 +23,9 @@ module GovukPublishingComponents
23
23
  :name,
24
24
  :value,
25
25
  :classes,
26
- :aria_label
26
+ :aria_label,
27
+ :aria_controls,
28
+ :aria_describedby
27
29
 
28
30
  def initialize(local_assigns)
29
31
  @href = local_assigns[:href]
@@ -36,7 +38,8 @@ module GovukPublishingComponents
36
38
  @info_text_classes << margin_class
37
39
  end
38
40
  @rel = local_assigns[:rel]
39
- @data_attributes = local_assigns[:data_attributes]
41
+ @data_attributes = local_assigns[:data_attributes]&.symbolize_keys || {}
42
+ @data_attributes[:module] = "govuk-button #{data_attributes[:module]}".strip if link?
40
43
  @margin_bottom = local_assigns[:margin_bottom]
41
44
  @inline_layout = local_assigns[:inline_layout]
42
45
  @target = local_assigns[:target]
@@ -52,6 +55,8 @@ module GovukPublishingComponents
52
55
  @aria_label = local_assigns[:aria_label]
53
56
  @info_text_id = "info-text-id-#{SecureRandom.hex(4)}"
54
57
  @button_id = "button-id-#{SecureRandom.hex(4)}"
58
+ @aria_controls = local_assigns[:aria_controls]
59
+ @aria_describedby = local_assigns[:aria_describedby]
55
60
  end
56
61
 
57
62
  def link?
@@ -90,6 +95,8 @@ module GovukPublishingComponents
90
95
  options[:name] = name if name.present? && value.present?
91
96
  options[:value] = value if name.present? && value.present?
92
97
  options[:aria] = { label: aria_label } if aria_label
98
+ options[:aria][:controls] = aria_controls if aria_controls
99
+ options[:aria][:describedby] = aria_describedby if aria_describedby
93
100
  options[:draggable] = false if link?
94
101
  options
95
102
  end
@@ -0,0 +1,95 @@
1
+ module GovukPublishingComponents
2
+ module Presenters
3
+ class ComponentWrapperHelper
4
+ def initialize(options)
5
+ @options = options
6
+
7
+ check_id_is_valid(@options[:id]) if @options.include?(:id)
8
+ check_classes_are_valid(@options[:classes]) if @options.include?(:classes)
9
+ check_aria_is_valid(@options[:aria]) if @options.include?(:aria)
10
+ check_role_is_valid(@options[:role]) if @options.include?(:role)
11
+ end
12
+
13
+ def all_attributes
14
+ attributes = {}
15
+
16
+ attributes[:id] = @options[:id] if @options[:id]
17
+ attributes[:data] = @options[:data_attributes] if @options[:data_attributes]
18
+ attributes[:aria] = @options[:aria] if @options[:aria]
19
+ attributes[:class] = @options[:classes] if @options[:classes]
20
+ attributes[:role] = @options[:role] if @options[:role]
21
+
22
+ attributes
23
+ end
24
+
25
+ def set_id(id)
26
+ check_id_is_valid(id)
27
+ @options[:id] = id
28
+ end
29
+
30
+ def add_class(classes)
31
+ check_classes_are_valid(classes)
32
+ extend_string(:classes, classes)
33
+ end
34
+
35
+ def add_data_attribute(attributes)
36
+ extend_object(:data_attributes, attributes)
37
+ end
38
+
39
+ def add_aria_attribute(attributes)
40
+ check_aria_is_valid(attributes)
41
+ extend_object(:aria, attributes)
42
+ end
43
+
44
+ def add_role(role)
45
+ check_role_is_valid(role)
46
+ extend_string(:role, role)
47
+ end
48
+
49
+ private
50
+
51
+ def check_id_is_valid(id)
52
+ raise(ArgumentError, "Id cannot start with a number or contain whitespace and can only contain letters, digits, `_` and `-`") unless /^[a-zA-Z][\w:-]*$/.match?(id)
53
+ end
54
+
55
+ def check_classes_are_valid(classes)
56
+ classes = classes.split(" ")
57
+ unless classes.all? { |c| c.start_with?("js-", "gem-c-", "govuk-", "brand--") }
58
+ raise(ArgumentError, "Passed classes must be prefixed with `js-`")
59
+ end
60
+ end
61
+
62
+ def check_aria_is_valid(attributes)
63
+ arias = %w[activedescendant atomic autocomplete busy checked colcount colindex colspan controls current describedby description details disabled dropeffect errormessage expanded flowto grabbed haspopup hidden invalid keyshortcuts label labelledby level live modal multiline multiselectable orientation owns placeholder posinset pressed readonly relevant required roledescription rowcount rowindex rowspan selected setsize sort valuemax valuemin valuenow valuetext]
64
+
65
+ unless attributes.all? { |key, _value| arias.include? key.to_s }
66
+ raise(ArgumentError, "Aria attribute is not recognised")
67
+ end
68
+ end
69
+
70
+ def check_role_is_valid(role)
71
+ roles = %w[alert alertdialog application article associationlist associationlistitemkey associationlistitemvalue banner blockquote caption cell code columnheader combobox complementary contentinfo definition deletion dialog directory document emphasis feed figure form group heading img insertion list listitem log main marquee math menu menubar meter navigation none note paragraph presentation region row rowgroup rowheader scrollbar search searchbox separator separator slider spinbutton status strong subscript superscript switch tab table tablist tabpanel term time timer toolbar tooltip tree treegrid treeitem]
72
+ role = role.split(" ") # can have more than one role
73
+ unless role.all? { |r| roles.include? r }
74
+ raise(ArgumentError, "Role attribute is not recognised")
75
+ end
76
+ end
77
+
78
+ def extend_string(option, string)
79
+ ((@options[option] ||= "") << " #{string}").strip!
80
+ end
81
+
82
+ def extend_object(option, object)
83
+ @options[option] ||= {}
84
+ object.each_key do |key|
85
+ @options[option][key] =
86
+ if @options[option].key?(key)
87
+ "#{@options[option][key]} #{object[key]}"
88
+ else
89
+ object[key]
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -4,14 +4,15 @@ module GovukPublishingComponents
4
4
  include ActionView::Helpers
5
5
  include ActionView::Context
6
6
 
7
- attr_reader :href, :href_data_attributes, :extra_details, :large, :extra_details_no_indent, :heading_text, :metadata, :lang, :image_loading
7
+ attr_reader :href_data_attributes, :extra_details, :extra_details_no_indent, :heading_text, :metadata, :lang, :image_loading, :youtube_video_id, :image_src
8
8
 
9
- def initialize(local_assigns)
9
+ def initialize(local_assigns, brand_helper)
10
10
  @href = local_assigns[:href]
11
11
  @href_data_attributes = local_assigns[:href_data_attributes]
12
12
  @extra_details = local_assigns[:extra_details] || []
13
13
  @image_src = local_assigns[:image_src]
14
14
  @image_alt = local_assigns[:image_alt] || ""
15
+ @youtube_video_alt = local_assigns[:youtube_video_alt]
15
16
  @image_loading = local_assigns[:image_loading] || "auto"
16
17
  @srcset = local_assigns[:srcset] || nil
17
18
  @sizes = local_assigns[:sizes] || nil
@@ -23,6 +24,22 @@ module GovukPublishingComponents
23
24
  @extra_details_no_indent = local_assigns[:extra_details_no_indent]
24
25
  @metadata = local_assigns[:metadata]
25
26
  @lang = local_assigns[:lang]
27
+ @youtube_video_id = local_assigns[:youtube_video_id] || nil
28
+
29
+ @brand_helper = brand_helper
30
+ end
31
+
32
+ def href
33
+ return youtube_href if @youtube_video_id
34
+
35
+ @href
36
+ end
37
+
38
+ def large
39
+ # if youtube video, we don't want to use
40
+ # the small variant, large will be always
41
+ # true if a youtube_video_id is supplied
42
+ @youtube_video_id || @large
26
43
  end
27
44
 
28
45
  def is_tracking?
@@ -36,6 +53,12 @@ module GovukPublishingComponents
36
53
  false
37
54
  end
38
55
 
56
+ def media
57
+ return youtube_link if @youtube_video_id
58
+
59
+ image
60
+ end
61
+
39
62
  def image
40
63
  if @image_src
41
64
  content_tag(:figure, class: "gem-c-image-card__image-wrapper") do
@@ -75,6 +98,46 @@ module GovukPublishingComponents
75
98
  def description
76
99
  content_tag(:div, @description, class: "gem-c-image-card__description") if @description
77
100
  end
101
+
102
+ def youtube_href
103
+ "https://www.youtube.com/watch?v=#{@youtube_video_id}"
104
+ end
105
+
106
+ def youtube_thumbnail_url
107
+ "https://img.youtube.com/vi/#{@youtube_video_id}/maxresdefault.jpg"
108
+ end
109
+
110
+ def youtube_thumbnail
111
+ thumbnail = content_tag(:div, class: "gem-c-image-card__youtube-thumbnail-image-container") do
112
+ image_tag(
113
+ youtube_thumbnail_url,
114
+ class: "gem-c-image-card__image gem-c-image-card__youtube-thumbnail-image",
115
+ alt: "",
116
+ loading: @image_loading,
117
+ )
118
+ end
119
+ thumbnail + content_tag(:figcaption, @youtube_video_alt, class: "gem-c-image-card__youtube-thumbnail-container-text govuk-link #{@brand_helper.color_class}")
120
+ end
121
+
122
+ def youtube_link
123
+ content_tag(
124
+ :figure,
125
+ class: "gem-c-image-card__image-wrapper gem-c-image-card__image-wrapper--youtube-embed",
126
+ ) do
127
+ content_tag(:div) do
128
+ link_to(
129
+ href,
130
+ {
131
+ class: "govuk-body govuk-link gem-c-image-card__youtube-thumbnail-container js-youtube-card-embed",
132
+ "data-youtube-player-analytics": true,
133
+ "data-youtube-player-analytics-category": "EmbeddedYoutube",
134
+ },
135
+ ) do
136
+ youtube_thumbnail
137
+ end
138
+ end
139
+ end
140
+ end
78
141
  end
79
142
  end
80
143
  end
@@ -77,17 +77,18 @@ module GovukPublishingComponents
77
77
  if show_sidebar?
78
78
  @sidebar ||= current_step_nav.content.tap do |sb|
79
79
  configure_for_sidebar(sb)
80
- sb.merge!(small: true, heading_level: 3, tracking_id: current_step_nav.content_id)
80
+ sb.merge!(small: true, heading_level: 3, tracking_id: current_step_nav.content_id, ga4_tracking: @query_parameters[:ga4_tracking])
81
81
  end
82
82
  end
83
83
  end
84
84
 
85
- def header
85
+ def header(ga4_tracking)
86
86
  if show_header?
87
87
  {
88
88
  title: current_step_nav.title,
89
89
  path: current_step_nav.base_path,
90
90
  tracking_id: current_step_nav.content_id,
91
+ ga4_tracking: ga4_tracking,
91
92
  }
92
93
  else
93
94
  {}
@@ -53,18 +53,27 @@ module GovukPublishingComponents
53
53
  end
54
54
  end
55
55
 
56
- def construct_section_heading(section_title)
57
- unless section_title == "related_items"
56
+ def construct_section_text(section, underscores_to_spaces)
57
+ unless section == "related_items"
58
+ defaults = [I18n.t("components.related_navigation.#{section}")]
59
+ defaults << section.tr("_", " ") if underscores_to_spaces
60
+
58
61
  I18n.t(
59
- "components.related_#{@context}_navigation." + section_title,
60
- default: [
61
- I18n.t("components.related_navigation.#{section_title}"),
62
- section_title.tr("_", " "),
63
- ],
62
+ "components.related_#{@context}_navigation.#{section}",
63
+ default: defaults,
64
64
  )
65
65
  end
66
66
  end
67
67
 
68
+ def construct_ga4_section_text(section)
69
+ # Force English so we can still understand what is being tracked if translated.
70
+ underscores_to_spaces = true
71
+ underscores_to_spaces = false if section == "related_content"
72
+ I18n.with_locale(:en) do
73
+ construct_section_text(section, underscores_to_spaces)
74
+ end
75
+ end
76
+
68
77
  def section_css_class(css_class, section_title, link: {}, link_is_inline: false)
69
78
  css_classes = [css_class]
70
79
  css_classes << "#{css_class}--#{@context}" unless @context.nil?
@@ -1,7 +1,7 @@
1
1
  module GovukPublishingComponents
2
2
  module Presenters
3
3
  class SinglePageNotificationButtonHelper
4
- attr_reader :already_subscribed, :data_attributes, :base_path, :js_enhancement, :button_type, :button_location, :classes
4
+ attr_reader :already_subscribed, :data_attributes, :base_path, :js_enhancement, :button_type, :button_location, :classes, :skip_account
5
5
 
6
6
  def initialize(local_assigns)
7
7
  @local_assigns = local_assigns
@@ -13,6 +13,9 @@ module GovukPublishingComponents
13
13
  @button_type = @local_assigns[:already_subscribed] ? "Unsubscribe" : "Subscribe"
14
14
  @classes = %w[gem-c-single-page-notification-button]
15
15
  @classes << "js-personalisation-enhancement" if js_enhancement
16
+ @button_text_subscribe = custom_button_text_is_valid? ? custom_subscribe_text : default_subscribe_text
17
+ @button_text_unsubscribe = custom_button_text_is_valid? ? custom_unsubscribe_text : default_unsubscribe_text
18
+ @skip_account = @local_assigns[:skip_account] || nil
16
19
  end
17
20
 
18
21
  def data
@@ -24,6 +27,8 @@ module GovukPublishingComponents
24
27
  @data_attributes[:track_category] = "Single-page-notification-button"
25
28
  # This attribute is passed through to the personalisation API to ensure when a new button is returned from the API, it has the same button_location
26
29
  @data_attributes[:button_location] = button_location
30
+ @data_attributes[:button_text_subscribe] = @button_text_subscribe
31
+ @data_attributes[:button_text_unsubscribe] = @button_text_unsubscribe
27
32
  @data_attributes
28
33
  end
29
34
 
@@ -32,7 +37,43 @@ module GovukPublishingComponents
32
37
  end
33
38
 
34
39
  def button_text
35
- @already_subscribed ? I18n.t("components.single_page_notification_button.unsubscribe_text") : I18n.t("components.single_page_notification_button.subscribe_text")
40
+ @already_subscribed ? @button_text_unsubscribe : @button_text_subscribe
41
+ end
42
+
43
+ def custom_button_text_is_valid?
44
+ custom_subscribe_text.present? && custom_unsubscribe_text.present?
45
+ end
46
+
47
+ def custom_subscribe_text
48
+ @local_assigns.dig(:button_text, :subscribe)
49
+ end
50
+
51
+ def custom_unsubscribe_text
52
+ @local_assigns.dig(:button_text, :unsubscribe)
53
+ end
54
+
55
+ def default_subscribe_text
56
+ I18n.t("components.single_page_notification_button.subscribe_text")
57
+ end
58
+
59
+ def default_unsubscribe_text
60
+ I18n.t("components.single_page_notification_button.unsubscribe_text")
61
+ end
62
+
63
+ def form_action
64
+ @skip_account ? email_alert_frontend_endpoint_no_account : email_alert_frontend_endpoint_enforce_account
65
+ end
66
+
67
+ def email_alert_frontend_endpoint_enforce_account
68
+ "/email/subscriptions/single-page/new"
69
+ end
70
+
71
+ def email_alert_frontend_endpoint_no_account
72
+ "/email-signup"
73
+ end
74
+
75
+ def skip_account_param
76
+ "single_page_subscription"
36
77
  end
37
78
  end
38
79
  end
@@ -46,6 +46,7 @@ module GovukPublishingComponents
46
46
  :li,
47
47
  class: "gem-c-step-nav__list-item js-list-item #{link_active(contents[:active])}",
48
48
  ) do
49
+ @options[:ga4_index_total] = element[:contents].length if @options[:ga4_tracking]
49
50
  create_list_item_content(contents)
50
51
  end,
51
52
  )
@@ -64,11 +65,26 @@ module GovukPublishingComponents
64
65
  concat create_context(link[:context])
65
66
  end
66
67
 
68
+ ga4_link_data ||= nil
69
+ if @options[:ga4_tracking]
70
+ ga4_link_data = {
71
+ "event_name": "navigation",
72
+ "type": "step by step",
73
+ "index": {
74
+ "index_section": (@options[:step_index] + 1).to_s,
75
+ "index_link": @link_index.to_s,
76
+ },
77
+ "index_total": @options[:ga4_index_total].to_s,
78
+ "section": @options[:step_title],
79
+ }.to_json
80
+ end
81
+
67
82
  link_to(
68
83
  href,
69
84
  rel: ("external" if href.start_with?("http")),
70
85
  data: {
71
86
  position: "#{@options[:step_index] + 1}.#{@link_index}",
87
+ ga4_link: ga4_link_data,
72
88
  },
73
89
  class: "gem-c-step-nav__link js-link",
74
90
  ) do
@@ -0,0 +1,7 @@
1
+ module GovukPublishingComponents
2
+ class Railtie < Rails::Railtie
3
+ initializer "govuk_publishing_components.view_helpers" do
4
+ ActiveSupport.on_load(:action_view) { include GovukPublishingComponents::AppHelpers::AssetHelper }
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "32.1.0".freeze
2
+ VERSION = "35.0.0".freeze
3
3
  end