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
@@ -2,65 +2,132 @@ module GovukPublishingComponents
2
2
  class AuditComponents
3
3
  attr_reader :data
4
4
 
5
- def initialize(path, simple)
6
- @data = {
7
- gem_found: false,
8
- }
9
- @data = compile_data(path, simple) if Dir.exist?(path)
10
- end
11
-
12
- private
13
-
14
- def compile_data(path, simple)
15
- # simple is used to reduce effort (and therefore page load time) required
16
- # when loading auditing summary on the main component guide page
17
- @simple = simple
18
-
5
+ def initialize(path)
19
6
  # paths to key file locations
20
7
  @templates_path = "app/views/govuk_publishing_components/components"
21
8
  @stylesheets_path = "app/assets/stylesheets/govuk_publishing_components/components"
22
9
  @print_stylesheets_path = "app/assets/stylesheets/govuk_publishing_components/components/print"
23
10
  @javascripts_path = "app/assets/javascripts/govuk_publishing_components/components"
24
11
  @tests_path = "spec/components"
25
- @js_tests_path = "spec/javascripts/components"
12
+ @javascript_tests_path = "spec/javascripts/components"
26
13
  @helpers_path = "lib/govuk_publishing_components/presenters"
27
14
 
28
- # get all files in key file locations
29
- templates = Dir["#{path}/#{@templates_path}/*.erb"]
30
- stylesheets = Dir["#{path}/#{@stylesheets_path}/*.scss"]
31
- print_stylesheets = Dir["#{path}/#{@print_stylesheets_path}/*.scss"]
32
- javascripts = Dir["#{path}/#{@javascripts_path}/*.js"]
33
- tests = Dir["#{path}/#{@tests_path}/*.rb"]
34
- js_tests = Dir["#{path}/#{@js_tests_path}/*.js"]
35
- helpers = Dir["#{path}/#{@helpers_path}/*_helper.rb"]
36
-
15
+ @all_templates = Dir["#{path}/#{@templates_path}/*.erb"].sort
37
16
  @templates_full_path = "#{path}/#{@templates_path}/"
38
17
 
39
- # find the cleaned names of components in key file locations
40
- # i.e. will show that 'component name' has a stylesheet
41
- # standardised like this to be used later for easier comparison
42
- @components = clean_files(templates, [path, @templates_path].join("/"))
43
- @component_stylesheets = clean_files(stylesheets, [path, @stylesheets_path].join("/"))
44
- @component_print_stylesheets = clean_files(print_stylesheets, [path, @print_stylesheets_path].join("/"))
45
- @component_javascripts = clean_files(javascripts, [path, @javascripts_path].join("/"))
46
- @component_tests = clean_files(tests, [path, @tests_path].join("/"))
47
- @component_js_tests = clean_files(js_tests, [path, @js_tests_path].join("/"))
48
- @component_helpers = clean_files(helpers, [path, @helpers_path].join("/"))
18
+ @component_numbers = {
19
+ template: 0,
20
+ stylesheet: 0,
21
+ print_stylesheet: 0,
22
+ javascript: 0,
23
+ test: 0,
24
+ javascript_test: 0,
25
+ helper: 0,
26
+ }
27
+
28
+ @data = {
29
+ gem_found: false,
30
+ }
31
+ @data = compile_data(path) if Dir.exist?(path)
32
+ end
33
+
34
+ private
35
+
36
+ def compile_data(path)
37
+ component_file_details = get_component_file_details(path)
38
+ helper_usage = get_helper_usage(component_file_details)
39
+
40
+ # remove the template file reference as not needed
41
+ component_file_details.map { |detail| detail.delete(:template_file) }
49
42
 
50
43
  {
51
44
  gem_found: true,
52
- component_code: @components,
53
- component_stylesheets: @component_stylesheets,
54
- component_print_stylesheets: @component_print_stylesheets,
55
- component_javascripts: @component_javascripts,
56
- component_tests: @component_tests,
57
- component_js_tests: @component_js_tests,
58
- component_helpers: @component_helpers,
59
- components_containing_components: find_all_partials_in(templates),
60
- component_listing: list_all_component_details,
45
+ component_code: clean_files(@all_templates, @templates_full_path).sort,
46
+ components_containing_components: find_all_partials_in(@all_templates),
47
+ component_file_details: component_file_details,
48
+ component_numbers: @component_numbers,
49
+ helper_usage: helper_usage,
61
50
  }
62
51
  end
63
52
 
53
+ def get_component_file_details(path)
54
+ component_templates = clean_files(@all_templates, @templates_full_path).sort
55
+ details = []
56
+ component_templates.each do |component|
57
+ component_detail = {
58
+ name: component,
59
+ link: get_component_link(component),
60
+ }
61
+ file_details = [
62
+ {
63
+ type: "template",
64
+ file: "#{[path, @templates_path].join('/')}/_#{component.gsub(' ', '_')}.html.erb",
65
+ },
66
+ {
67
+ type: "stylesheet",
68
+ file: "#{[path, @stylesheets_path].join('/')}/_#{component.gsub(' ', '-')}.scss",
69
+ },
70
+ {
71
+ type: "print_stylesheet",
72
+ file: "#{[path, @stylesheets_path].join('/')}/_#{component.gsub(' ', '-')}.scss",
73
+ },
74
+ {
75
+ type: "javascript",
76
+ file: "#{[path, @javascripts_path].join('/')}/#{component.gsub(' ', '-')}.js",
77
+ },
78
+ {
79
+ type: "test",
80
+ file: "#{[path, @tests_path].join('/')}/#{component.gsub(' ', '_')}_spec.rb",
81
+ },
82
+ {
83
+ type: "javascript_test",
84
+ file: "#{[path, @javascript_tests_path].join('/')}/#{component.gsub(' ', '-')}-spec.js",
85
+ },
86
+ {
87
+ type: "helper",
88
+ file: "#{[path, @helpers_path].join('/')}/#{component.gsub(' ', '_')}_helper.rb",
89
+ },
90
+ ]
91
+ file_details.each do |detail|
92
+ component_detail = component_detail.merge(get_component_asset_detail(detail, component))
93
+ end
94
+
95
+ details << component_detail
96
+ end
97
+
98
+ details
99
+ end
100
+
101
+ def get_component_asset_detail(detail, component)
102
+ details = {}
103
+ type = detail[:type]
104
+ file = detail[:file]
105
+ details["#{type}_exists".to_sym] = false
106
+ # save the location of the template to later grep for helper use
107
+ details["#{type}_file".to_sym] = file if type == "template"
108
+ if File.file?(file)
109
+ # we don't have separate print stylesheets anymore
110
+ # so check the main stylesheet for print styles
111
+ if type == "print_stylesheet"
112
+ unless File.foreach(file).grep(/(media-type: print)/).empty?
113
+ details["#{type}_exists".to_sym] = true
114
+ @component_numbers[type.to_sym] += 1
115
+ end
116
+ else
117
+ @component_numbers[type.to_sym] += 1
118
+ details["#{type}_exists".to_sym] = true
119
+ details["#{type}_lines".to_sym] = count_lines_in(file)
120
+ details["#{type}_link".to_sym] = get_asset_link(type, component)
121
+ end
122
+ end
123
+
124
+ details
125
+ end
126
+
127
+ def count_lines_in(file)
128
+ File.read(file).each_line.count
129
+ end
130
+
64
131
  def clean_files(files, replace)
65
132
  files.map { |file| clean_file_name(file.gsub(replace, "")) }.sort
66
133
  end
@@ -91,8 +158,6 @@ module GovukPublishingComponents
91
158
  end
92
159
 
93
160
  def find_all_partials_in(templates)
94
- return [] if @simple
95
-
96
161
  components = []
97
162
 
98
163
  templates.each do |template|
@@ -144,55 +209,65 @@ module GovukPublishingComponents
144
209
  end
145
210
  end
146
211
 
147
- def list_all_component_details
148
- return [] if @simple
149
-
150
- all_component_information = []
151
-
152
- @components.each do |component|
153
- all_component_information << {
154
- name: component,
155
- link: get_component_link(component),
156
- stylesheet: check_component_has("stylesheet", component),
157
- print_stylesheet: check_component_has("print_stylesheet", component),
158
- javascript: check_component_has("javascript", component),
159
- tests: check_component_has("test", component),
160
- js_tests: check_component_has("js_test", component),
161
- helper: check_component_has("helper", component),
162
- }
163
- end
164
-
165
- all_component_information
166
- end
167
-
168
- def check_component_has(a_thing, component)
169
- look_in = @component_stylesheets if a_thing == "stylesheet"
170
- look_in = @component_print_stylesheets if a_thing == "print_stylesheet"
171
- look_in = @component_javascripts if a_thing == "javascript"
172
- look_in = @component_tests if a_thing == "test"
173
- look_in = @component_js_tests if a_thing == "js_test"
174
- look_in = @component_helpers if a_thing == "helper"
175
-
176
- if look_in.include?(component)
177
- return get_asset_link(a_thing, component)
178
- end
179
-
180
- false
181
- end
182
-
183
212
  def get_asset_link(a_thing, component)
184
213
  url = "https://github.com/alphagov"
185
214
  repo = "govuk_publishing_components"
186
215
  blob = "blob/main"
187
216
  link = nil
217
+ link = "#{url}/#{repo}/#{blob}/#{@templates_path}/_#{component.gsub(' ', '_')}.html.erb" if a_thing == "template"
188
218
  link = "#{url}/#{repo}/#{blob}/#{@stylesheets_path}/_#{component.gsub(' ', '-')}.scss" if a_thing == "stylesheet"
189
219
  link = "#{url}/#{repo}/#{blob}/#{@print_stylesheets_path}/_#{component.gsub(' ', '-')}.scss" if a_thing == "print_stylesheet"
190
220
  link = "#{url}/#{repo}/#{blob}/#{@javascripts_path}/#{component.gsub(' ', '-')}.js" if a_thing == "javascript"
191
221
  link = "#{url}/#{repo}/#{blob}/#{@tests_path}/#{component.gsub(' ', '_')}_spec.rb" if a_thing == "test"
192
- link = "#{url}/#{repo}/#{blob}/#{@js_tests_path}/#{component.gsub(' ', '-')}-spec.js" if a_thing == "js_test"
222
+ link = "#{url}/#{repo}/#{blob}/#{@javascript_tests_path}/#{component.gsub(' ', '-')}-spec.js" if a_thing == "javascript_test"
193
223
  link = "#{url}/#{repo}/#{blob}/#{@helpers_path}/#{component.gsub(' ', '_')}_helper.rb" if a_thing == "helper"
194
224
 
195
225
  link
196
226
  end
227
+
228
+ def get_helper_usage(components)
229
+ helpers = [
230
+ {
231
+ name: "Brand helper",
232
+ link: "lib/govuk_publishing_components/app_helpers/brand_helper.rb",
233
+ match: /(GovukPublishingComponents::AppHelpers::BrandHelper.new)/,
234
+ used_by: [],
235
+ },
236
+ {
237
+ name: "Component wrapper helper",
238
+ link: "lib/govuk_publishing_components/presenters/component_wrapper_helper.rb",
239
+ match: /(GovukPublishingComponents::Presenters::ComponentWrapperHelper.new)/,
240
+ used_by: [],
241
+ },
242
+ {
243
+ name: "Heading helper",
244
+ link: "lib/govuk_publishing_components/presenters/heading_helper.rb",
245
+ match: /(GovukPublishingComponents::Presenters::HeadingHelper.new)/,
246
+ used_by: [],
247
+ },
248
+ {
249
+ name: "Shared helper",
250
+ link: "lib/govuk_publishing_components/presenters/shared_helper.rb",
251
+ match: /(GovukPublishingComponents::Presenters::SharedHelper.new)/,
252
+ used_by: [],
253
+ },
254
+ ]
255
+
256
+ components.each do |component|
257
+ file = component[:template_file]
258
+ next unless File.file?(file)
259
+
260
+ helpers.each do |helper|
261
+ next unless File.foreach(file).grep(helper[:match]).present?
262
+
263
+ helper[:used_by] << {
264
+ name: component[:name],
265
+ link: component[:template_file].split("/components/")[1],
266
+ }
267
+ end
268
+ end
269
+
270
+ helpers
271
+ end
197
272
  end
198
273
  end
@@ -32,6 +32,12 @@ module GovukPublishingComponents
32
32
  "#{component[:accessibility_criteria]}\n#{shared_accessibility_criteria.join("\n")}"
33
33
  end
34
34
 
35
+ def component_wrapper_options
36
+ if uses_component_wrapper_helper?
37
+ ComponentWrapperHelperOptions.description
38
+ end
39
+ end
40
+
35
41
  def example
36
42
  examples.first
37
43
  end
@@ -48,6 +54,10 @@ module GovukPublishingComponents
48
54
  component[:display_preview].nil? ? true : component[:display_preview]
49
55
  end
50
56
 
57
+ def uses_component_wrapper_helper?
58
+ component[:uses_component_wrapper_helper]
59
+ end
60
+
51
61
  def html_body
52
62
  markdown_to_html(body) if body.present?
53
63
  end
@@ -56,6 +66,10 @@ module GovukPublishingComponents
56
66
  markdown_to_html(accessibility_criteria) if accessibility_criteria.present?
57
67
  end
58
68
 
69
+ def html_component_wrapper_options
70
+ markdown_to_html(component_wrapper_options) if component_wrapper_options.present?
71
+ end
72
+
59
73
  def partial_path
60
74
  if source == "gem"
61
75
  "govuk_publishing_components/components/#{id}"
@@ -0,0 +1,15 @@
1
+ module GovukPublishingComponents
2
+ module ComponentWrapperHelperOptions
3
+ def self.description
4
+ "
5
+ This component uses the component wrapper helper. It accepts the following options and applies them to the parent element of the component. See the [component wrapper helper documentation](https://github.com/alphagov/govuk_publishing_components/blob/main/docs/component-wrapper-helper.md) for more detail.
6
+
7
+ - `id` - accepts a string for the element ID attribute
8
+ - `data_attributes` - accepts a hash of data attributes
9
+ - `aria` - accepts a hash of aria attributes
10
+ - `classes` - accepts a space separated string of classes, these should not be used for styling and must be prefixed with `js-`
11
+ - `role` - accepts a space separated string of roles
12
+ "
13
+ end
14
+ end
15
+ end
@@ -12,7 +12,7 @@
12
12
  <%= render "govuk_publishing_components/components/details", {
13
13
  title: "How to use this information"
14
14
  } do %>
15
- <p class="govuk-body">This page shows information about component use on GOV.UK. This information has been cross referenced with the components in the gem to produce warnings where e.g. a print stylesheet for a component exists but has not been included in an application.</p>
15
+ <p class="govuk-body">This page shows information about component use on GOV.UK. This information has been cross referenced with the components in the gem to produce warnings where e.g. JavaScript for a component exists but has not been included in an application.</p>
16
16
  <p class="govuk-body">Warnings should be investigated, although there may be a reason why the application has been configured as it is. Note that 'code' can refer to templates or ruby code.</p>
17
17
  <% end %>
18
18
 
@@ -62,11 +62,11 @@
62
62
  <% application[:summary].each do |item| %>
63
63
  <div class="govuk-summary-list__row">
64
64
  <dt class="govuk-summary-list__key">
65
- <%= item[:name] %>
65
+ <%= item[:name] %> (<%= item[:value].length %>)
66
66
  </dt>
67
67
  <dd class="govuk-summary-list__value">
68
68
  <% if item[:value].length > 0 %>
69
- <%= item[:value] %>
69
+ <%= item[:value].join(", ") %>
70
70
  <% else %>
71
71
  None
72
72
  <% end %>
@@ -1,78 +1,86 @@
1
- <%
2
- total_components = components.length
3
- components_with_stylesheet = 0
4
- components_with_print_stylesheet = 0
5
- components_with_javascript = 0
6
- components_with_test = 0
7
- components_with_javascript_test = 0
8
- components_with_helper = 0
9
-
10
- components.each do |component|
11
- components_with_stylesheet += 1 if component[:stylesheet]
12
- components_with_print_stylesheet += 1 if component[:print_stylesheet]
13
- components_with_javascript += 1 if component[:javascript]
14
- components_with_test += 1 if component[:tests]
15
- components_with_javascript_test += 1 if component[:js_tests]
16
- components_with_helper += 1 if component[:helper]
17
- end
18
- %>
19
1
  <table class="govuk-table">
20
2
  <thead class="govuk-table__head">
21
3
  <tr class="govuk-table__row">
22
- <th scope="col" class="govuk-table__header sticky-table-header">Component (<%= total_components %>)</th>
23
- <th scope="col" class="govuk-table__header sticky-table-header">CSS (<%= components_with_stylesheet %>)</th>
24
- <th scope="col" class="govuk-table__header sticky-table-header">Print CSS (<%= components_with_print_stylesheet %>)</th>
25
- <th scope="col" class="govuk-table__header sticky-table-header">JS (<%= components_with_javascript %>)</th>
26
- <th scope="col" class="govuk-table__header sticky-table-header">Test (<%= components_with_test %>)</th>
27
- <th scope="col" class="govuk-table__header sticky-table-header">JS test (<%= components_with_javascript_test %>)</th>
28
- <th scope="col" class="govuk-table__header sticky-table-header">Helper (<%= components_with_helper %>)</th>
4
+ <th scope="col" class="govuk-table__header sticky-table-header">Component</th>
5
+ <th scope="col" class="govuk-table__header sticky-table-header">Template (<%= @components[:component_numbers][:template] %>)</th>
6
+ <th scope="col" class="govuk-table__header sticky-table-header">CSS (<%= @components[:component_numbers][:stylesheet] %>)</th>
7
+ <th scope="col" class="govuk-table__header sticky-table-header">Print styles (<%= @components[:component_numbers][:print_stylesheet] %>)</th>
8
+ <th scope="col" class="govuk-table__header sticky-table-header">JS (<%= @components[:component_numbers][:javascript] %>)</th>
9
+ <th scope="col" class="govuk-table__header sticky-table-header">Test (<%= @components[:component_numbers][:test] %>)</th>
10
+ <th scope="col" class="govuk-table__header sticky-table-header">JS test (<%= @components[:component_numbers][:javascript_test] %>)</th>
11
+ <th scope="col" class="govuk-table__header sticky-table-header">Helper (<%= @components[:component_numbers][:helper] %>)</th>
29
12
  </tr>
30
13
  </thead>
31
14
  <tbody class="govuk-table__body">
32
- <% components.each do |component| %>
15
+ <% @components[:component_file_details].each do |component| %>
33
16
  <tr class="govuk-table__row">
34
17
  <th scope="row" class="govuk-table__header">
35
- <a href="<%= component[:link] %>" class="govuk-link"><%= component[:name] %></a>
18
+ <a href="<%= component[:link] %>" class="govuk-link">
19
+ <%= component[:name] %>
20
+ </a>
36
21
  </th>
37
22
  <td class="govuk-table__cell">
38
- <% if component[:stylesheet] %>
23
+ <% if component[:template_exists] %>
39
24
  <strong class="govuk-tag govuk-tag--green">
40
- <a href="<%= component[:stylesheet] %>" class="govuk-link">Yes</a>
25
+ <a href="<%= component[:template_link] %>" class="govuk-link">
26
+ <%= component[:template_lines] %>
27
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> template</span>
28
+ </a>
41
29
  </strong>
42
30
  <% end %>
43
31
  </td>
44
32
  <td class="govuk-table__cell">
45
- <% if component[:print_stylesheet] %>
33
+ <% if component[:stylesheet_exists] %>
46
34
  <strong class="govuk-tag govuk-tag--green">
47
- <a href="<%= component[:print_stylesheet] %>" class="govuk-link">Yes</a>
35
+ <a href="<%= component[:stylesheet_link] %>" class="govuk-link">
36
+ <%= component[:stylesheet_lines] %>
37
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> stylesheet</span>
38
+ </a>
48
39
  </strong>
49
40
  <% end %>
50
41
  </td>
51
42
  <td class="govuk-table__cell">
52
- <% if component[:javascript] %>
43
+ <% if component[:print_stylesheet_exists] %>
44
+ <strong class="govuk-tag govuk-tag--green">Yes</strong>
45
+ <% end %>
46
+ </td>
47
+ <td class="govuk-table__cell">
48
+ <% if component[:javascript_exists] %>
53
49
  <strong class="govuk-tag govuk-tag--green">
54
- <a href="<%= component[:javascript] %>" class="govuk-link">Yes</a>
50
+ <a href="<%= component[:javascript_link] %>" class="govuk-link">
51
+ <%= component[:javascript_lines] %>
52
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> javascript</span>
53
+ </a>
55
54
  </strong>
56
55
  <% end %>
57
56
  </td>
58
57
  <td class="govuk-table__cell">
59
- <% if component[:tests] %>
58
+ <% if component[:test_exists] %>
60
59
  <strong class="govuk-tag govuk-tag--green">
61
- <a href="<%= component[:tests] %>" class="govuk-link">Yes</a>
60
+ <a href="<%= component[:test_link] %>" class="govuk-link">
61
+ <%= component[:test_lines] %>
62
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> test</span>
63
+ </a>
62
64
  </strong>
63
65
  <% end %>
64
66
  </td>
65
67
  <td class="govuk-table__cell">
66
- <% if component[:js_tests] %>
68
+ <% if component[:javascript_test_exists] %>
67
69
  <strong class="govuk-tag govuk-tag--green">
68
- <a href="<%= component[:js_tests] %>" class="govuk-link">Yes</a>
70
+ <a href="<%= component[:javascript_test_link] %>" class="govuk-link">
71
+ <%= component[:javascript_test_lines] %>
72
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> javascript test</span>
73
+ </a>
69
74
  </strong>
70
75
  <% end %>
71
76
  </td>
72
77
  <td class="govuk-table__cell">
73
- <% if component[:helper] %>
78
+ <% if component[:helper_exists] %>
74
79
  <strong class="govuk-tag govuk-tag--green">
75
- <a href="<%= component[:helper] %>" class="govuk-link">Yes</a>
80
+ <a href="<%= component[:helper_link] %>" class="govuk-link">
81
+ <%= component[:helper_lines] %>
82
+ <span class="govuk-visually-hidden">lines of code in <%= component[:name] %> helper</span>
83
+ </a>
76
84
  </strong>
77
85
  <% end %>
78
86
  </td>
@@ -10,7 +10,7 @@
10
10
  <% component_items = [] %>
11
11
 
12
12
  <% component_files = capture do %>
13
- <%= render partial: "component_contents", locals: { components: @components[:component_listing] } %>
13
+ <%= render partial: "component_contents" %>
14
14
  <% end %>
15
15
 
16
16
  <%
@@ -63,9 +63,54 @@
63
63
  items: component_items
64
64
  %>
65
65
 
66
+ <% helpers_by_component = capture do %>
67
+ <dl class="govuk-summary-list">
68
+ <% @components[:helper_usage].each do |helper| %>
69
+ <div class="govuk-summary-list__row">
70
+ <dt class="govuk-summary-list__key">
71
+ <a href="https://github.com/alphagov/govuk_publishing_components/blob/main/<%= helper[:link] %>" class="govuk-link"><%= helper[:name] %></a>
72
+ </dt>
73
+ <dd class="govuk-summary-list__value">
74
+ <details class="govuk-details" data-module="govuk-details">
75
+ <summary class="govuk-details__summary">
76
+ <span class="govuk-details__summary-text">
77
+ Used by <%= helper[:used_by].length %> components
78
+ </span>
79
+ </summary>
80
+ <div class="govuk-details__text">
81
+ <ul class="govuk-list govuk-list--bullet">
82
+ <% helper[:used_by].each do |component| %>
83
+ <% github_link = 'https://github.com/alphagov/govuk_publishing_components/tree/main/app/views/govuk_publishing_components/components/' %>
84
+ <li>
85
+ <a href="<%= github_link %><%= component[:link] %>" class="govuk-link"><%= component[:name] %></a>
86
+ </li>
87
+ <% end %>
88
+ </ul>
89
+ </div>
90
+ </details>
91
+ </dd>
92
+ </div>
93
+ <% end %>
94
+ </dl>
95
+ <% end %>
96
+
97
+ <%
98
+ component_items << {
99
+ heading: {
100
+ text: "Helpers by component",
101
+ },
102
+ summary: {
103
+ text: "Shows which components use common helpers",
104
+ },
105
+ content: {
106
+ html: helpers_by_component
107
+ },
108
+ }
109
+ %>
110
+
66
111
  <%= render 'items_in_applications',
67
112
  heading: 'Helpers by application',
68
- summary: 'Shows any applications that use helper classes from the components gem',
113
+ summary: 'Shows any applications that use helpers from the components gem',
69
114
  content: @components[:helpers_used_by_applications],
70
115
  items: component_items
71
116
  %>
@@ -1,4 +1 @@
1
1
  <%= stylesheet_link_tag "#{GovukPublishingComponents::Config.application_stylesheet}" %>
2
- <% if GovukPublishingComponents::Config.application_print_stylesheet %>
3
- <%= stylesheet_link_tag "#{GovukPublishingComponents::Config.application_print_stylesheet}", media: "print" %>
4
- <% end %>
@@ -28,13 +28,6 @@
28
28
  name: "main-sass",
29
29
  value: @components_in_use_sass
30
30
  } %>
31
- <%= render "govuk_publishing_components/components/textarea", {
32
- label: {
33
- text: "Add this to your application's print scss file, before your other local imports."
34
- },
35
- name: "print-sass",
36
- value: @components_in_use_print_sass
37
- } %>
38
31
  <%= render "govuk_publishing_components/components/textarea", {
39
32
  label: {
40
33
  text: "Add this to your application's main js file, before your other local imports."
@@ -30,6 +30,17 @@
30
30
 
31
31
  <div class="component-doc__content-list">
32
32
  <%
33
+ other_examples_links = []
34
+ other_examples_links << {
35
+ href: "#standard-options",
36
+ text: "Standard options"
37
+ } if @component_doc.uses_component_wrapper_helper?
38
+ other_examples_links.concat(@component_doc.other_examples.map do | example |
39
+ {
40
+ href: "##{example.id}",
41
+ text: example.name
42
+ }
43
+ end)
33
44
  content_items = [
34
45
  { href: "#how-it-looks", text: "How it looks" },
35
46
  { href: "#how-to-call-this-component", text: "How to call this component" },
@@ -38,12 +49,7 @@
38
49
  ({
39
50
  href: "#other-examples",
40
51
  text: "Other examples",
41
- items: @component_doc.other_examples.map do | example |
42
- {
43
- href: "##{example.id}",
44
- text: example.name
45
- }
46
- end
52
+ items: other_examples_links
47
53
  } if @component_doc.other_examples.any?),
48
54
  ].compact
49
55
  %>
@@ -90,6 +96,15 @@
90
96
  <div class="examples">
91
97
  <h2 class="component-doc-h2" id="other-examples">Other examples</h2>
92
98
 
99
+ <% if @component_doc.uses_component_wrapper_helper? %>
100
+ <div class="component-example" id="standard-options">
101
+ <h3 class="example-title">Standard options</h3>
102
+ <div class="component-markdown">
103
+ <%= raw(@component_doc.html_component_wrapper_options) %>
104
+ </div>
105
+ </div>
106
+ <% end %>
107
+
93
108
  <% @component_doc.other_examples.each do |example| %>
94
109
  <div class="component-example" id="<%= example.id %>">
95
110
  <h3 class="example-title">