govuk_publishing_components 35.19.0 → 35.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/govuk_publishing_components/icon-close.svg +1 -0
  3. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +2 -0
  4. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +8 -2
  5. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-print-intent-tracker.js +24 -0
  6. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-scroll-tracker.js +4 -5
  7. data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +1 -0
  8. data/app/assets/javascripts/govuk_publishing_components/components/accordion.js +1 -1
  9. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +3 -5
  10. data/app/assets/javascripts/govuk_publishing_components/vendor/lux/lux-reporter.js +21 -31
  11. data/app/assets/stylesheets/govuk_publishing_components/components/_image-card.scss +31 -8
  12. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +94 -23
  13. data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +13 -0
  14. data/app/views/govuk_publishing_components/components/_accordion.html.erb +9 -13
  15. data/app/views/govuk_publishing_components/components/_contents_list.html.erb +2 -6
  16. data/app/views/govuk_publishing_components/components/_intervention.html.erb +1 -1
  17. data/app/views/govuk_publishing_components/components/_layout_footer.html.erb +6 -10
  18. data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +43 -32
  19. data/app/views/govuk_publishing_components/components/_search.html.erb +2 -0
  20. data/app/views/govuk_publishing_components/components/_share_links.html.erb +2 -6
  21. data/app/views/govuk_publishing_components/components/_step_by_step_nav.html.erb +2 -4
  22. data/app/views/govuk_publishing_components/components/_step_by_step_nav_header.html.erb +10 -1
  23. data/app/views/govuk_publishing_components/components/_step_by_step_nav_related.html.erb +4 -8
  24. data/app/views/govuk_publishing_components/components/_tabs.html.erb +2 -4
  25. data/app/views/govuk_publishing_components/components/contextual_sidebar/_ukraine_cta.html.erb +4 -6
  26. data/app/views/govuk_publishing_components/components/docs/image_card.yml +2 -2
  27. data/app/views/govuk_publishing_components/components/docs/search.yml +5 -0
  28. data/app/views/govuk_publishing_components/components/related_navigation/_section.html.erb +6 -8
  29. data/lib/govuk_publishing_components/presenters/breadcrumbs_helper.rb +1 -3
  30. data/lib/govuk_publishing_components/presenters/layout_footer_helper.rb +3 -5
  31. data/lib/govuk_publishing_components/version.rb +1 -1
  32. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6d8b36d61c9301cb5d969679a14c93b6b43914a3a734d05e4ae5702b0fb0f79
4
- data.tar.gz: 49e458e28c81c1368445b4e9948aa31614ec2a506f9f989083780a0ce6de885d
3
+ metadata.gz: '096ada32d1ecced73348563a12eaa51f1f722c75f11791baba32d24de329b4ad'
4
+ data.tar.gz: 7c905c2babbe3a999a4a44d2441506b5b38b48edbb78593a9b9212b55549d8da
5
5
  SHA512:
6
- metadata.gz: 107aa5aee8b2c2c8268342683df0405cc071ada39032d723fd21299a0af1abc6bec4bb5fb7d89879775780bccc32d27b1ac9eb375e28cda218d0016b8cb843d1
7
- data.tar.gz: 994233cc78dcaa2ce4a604f3cb2d3be54582bfcfa40b6df323929a808d8d7d56e30e6c1403422a71968d399e27dc6141534f49af06f5713198db721b91d461a1
6
+ metadata.gz: 7bca767187c1d88419a6c36c90a6cfb763773ef81cd1106bf24f2298142bf7f247ca293c05a4bc9c76fe567f326ff36a7cbb7986bc671995512c22b4f2f67461
7
+ data.tar.gz: 715869ba54a39828637ded7125d39462716247acec55b3c71507975fbcbb567a01dfd2ab152a2fe19fac3044ca4c7c0e0b1ea56c9dca6b074ac440abdf4c3e28
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none"><path fill="#0B0C0C" d="M2 15.435 15.435 2l2.121 2.121L4.121 17.556z"/><path fill="#0B0C0C" d="M15.436 17.557 2 4.122l2.12-2.121 13.436 13.435z"/></svg>
@@ -325,6 +325,7 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
325
325
  var target = data.event.target
326
326
  ecommerceSchema.search_results.ecommerce.items.push({
327
327
  item_id: target.getAttribute('data-ga4-ecommerce-path'),
328
+ item_content_id: target.getAttribute('data-ga4-ecommerce-content-id') || undefined,
328
329
  item_name: target.textContent,
329
330
  item_list_name: listTitle,
330
331
  index: window.GOVUK.analyticsGa4.core.ecommerceHelperFunctions.getIndex(target, startPosition)
@@ -351,6 +352,7 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
351
352
 
352
353
  ecommerceSchema.search_results.ecommerce.items.push({
353
354
  item_id: path,
355
+ item_content_id: item.getAttribute('data-ga4-ecommerce-content-id') || undefined,
354
356
  item_list_name: listTitle,
355
357
  index: window.GOVUK.analyticsGa4.core.ecommerceHelperFunctions.getIndex(item, startPosition)
356
358
  })
@@ -95,6 +95,14 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
95
95
  data.external = trackFunctions.isExternalLink(data.url) ? 'true' : 'false'
96
96
  data.index = this.setIndex(data.index, event.target)
97
97
 
98
+ // flatten the attributes in index into the main data
99
+ if (data.index) {
100
+ for (var prop in data.index) {
101
+ data[prop] = data.index[prop]
102
+ }
103
+ delete data.index
104
+ }
105
+
98
106
  if (data.type === 'smart answer' && data.action === 'change response') {
99
107
  data.section = this.PIIRemover.stripPIIWithOverride(data.section, true, true)
100
108
  }
@@ -117,7 +125,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
117
125
  if (target.getAttribute('data-ga4-index')) {
118
126
  try {
119
127
  var indexLink = JSON.parse(target.getAttribute('data-ga4-index'))
120
-
121
128
  // Check whether the index object already exists on a parent element, as is the case with tracking accordion links.
122
129
  // If true, combine data-ga4-index with the index object. Otherwise, just return indexLink
123
130
  index = index ? window.GOVUK.extendObject(index, indexLink) : indexLink
@@ -126,7 +133,6 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
126
133
  return
127
134
  }
128
135
  }
129
-
130
136
  return index
131
137
  }
132
138
 
@@ -0,0 +1,24 @@
1
+ window.GOVUK = window.GOVUK || {}
2
+ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {}
3
+ window.GOVUK.analyticsGa4.analyticsModules = window.GOVUK.analyticsGa4.analyticsModules || {};
4
+
5
+ (function (analyticsModules) {
6
+ 'use strict'
7
+
8
+ var Ga4PrintIntentTracker = {
9
+ init: function () {
10
+ window.addEventListener('beforeprint', function () {
11
+ var data = {
12
+ event_name: 'print_page',
13
+ type: 'print page',
14
+ method: 'browser print'
15
+ }
16
+ var schema = new window.GOVUK.analyticsGa4.Schemas()
17
+ schema = schema.mergeProperties(data, 'event_data')
18
+ window.GOVUK.analyticsGa4.core.sendData(schema)
19
+ })
20
+ }
21
+ }
22
+
23
+ analyticsModules.Ga4PrintIntentTracker = Ga4PrintIntentTracker
24
+ })(window.GOVUK.analyticsGa4.analyticsModules)
@@ -118,7 +118,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
118
118
  // following will be undefined if tracking percentages
119
119
  data.text = node.eventData.text
120
120
  data.section = node.eventData.text
121
- data.index = node.eventData.index
121
+ data.index_section = node.eventData.index_section
122
+ data.index_section_count = node.eventData.index_section_count
122
123
  // following will be undefined if tracking headings
123
124
  data.percent_scrolled = node.eventData.percent_scrolled
124
125
 
@@ -165,10 +166,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
165
166
  eventData: {
166
167
  type: type,
167
168
  text: heading.textContent.replace(/\s+/g, ' ').trim(),
168
- index: {
169
- index_section: i + 1,
170
- index_section_count: totalHeadings
171
- }
169
+ index_section: i + 1,
170
+ index_section_count: totalHeadings
172
171
  }
173
172
  })
174
173
  }
@@ -3,6 +3,7 @@
3
3
  //= require ./analytics-ga4/ga4-schemas
4
4
  //= require ./analytics-ga4/pii-remover
5
5
  //= require ./analytics-ga4/ga4-page-views
6
+ //= require ./analytics-ga4/ga4-print-intent-tracker
6
7
  //= require ./analytics-ga4/ga4-specialist-link-tracker
7
8
  //= require ./analytics-ga4/ga4-link-tracker
8
9
  //= require ./analytics-ga4/ga4-event-tracker
@@ -62,7 +62,7 @@ window.GOVUK.Modules.GovukAccordion = window.GOVUKFrontend.Accordion;
62
62
  var isGa4Enabled = dataModule ? dataModule.indexOf('ga4-event-tracker') !== -1 : false
63
63
  if (isGa4Enabled) {
64
64
  var indexTotal = this.$module.querySelectorAll('.govuk-accordion__section').length
65
- var showAllAttributesGa4 = { event_name: 'select_content', type: 'accordion', index: { index_section: 0, index_section_count: indexTotal } }
65
+ var showAllAttributesGa4 = { event_name: 'select_content', type: 'accordion', index_section: 0, index_section_count: indexTotal }
66
66
  showAll = this.$module.querySelector(this.showAllControls)
67
67
  showAll.setAttribute('data-ga4-event', JSON.stringify(showAllAttributesGa4))
68
68
  }
@@ -84,7 +84,7 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
84
84
 
85
85
  // if GA4 is enabled, set attributes on 'show all sections' for tracking using ga4-event-tracker
86
86
  if (this.$module.isGa4Enabled) {
87
- var showAllAttributesGa4 = { event_name: 'select_content', type: 'step by step', index: { index_section: 0, index_section_count: this.$module.totalSteps } }
87
+ var showAllAttributesGa4 = { event_name: 'select_content', type: 'step by step', index_section: 0, index_section_count: this.$module.totalSteps }
88
88
  this.$module.showOrHideAllButton.setAttribute('data-ga4-event', JSON.stringify(showAllAttributesGa4))
89
89
  }
90
90
  }
@@ -196,10 +196,8 @@ window.GOVUK.Modules = window.GOVUK.Modules || {};
196
196
  event_name: 'select_content',
197
197
  type: 'step by step',
198
198
  text: titleText.trim(),
199
- index: {
200
- index_section: i + 1,
201
- index_section_count: this.$module.totalSteps
202
- },
199
+ index_section: i + 1,
200
+ index_section_count: this.$module.totalSteps,
203
201
  index_total: thisel.querySelectorAll('a').length
204
202
  }
205
203
 
@@ -366,11 +366,9 @@
366
366
  if (!entry.hadRecentInput) {
367
367
  var firstEntry = sessionEntries[0];
368
368
  var latestEntry = sessionEntries[sessionEntries.length - 1];
369
- if (sessionEntries.length &&
370
- (entry.startTime - latestEntry.startTime >= 1000 ||
371
- entry.startTime - firstEntry.startTime >= 5000)) {
372
- sessionValue = entry.value;
373
- sessionEntries = [entry];
369
+ if (sessionEntries.length && (entry.startTime - latestEntry.startTime >= 1000 || entry.startTime - firstEntry.startTime >= 5000)) {
370
+ sessionValue = entry.value;
371
+ sessionEntries = [entry];
374
372
  }
375
373
  else {
376
374
  sessionValue += entry.value;
@@ -445,7 +443,8 @@
445
443
 
446
444
  var ALL_ENTRIES = [];
447
445
  function observe(type, callback, options) {
448
- if (typeof PerformanceObserver === "function" && PerformanceObserver.supportedEntryTypes.includes(type)) {
446
+ if (typeof PerformanceObserver === "function" &&
447
+ PerformanceObserver.supportedEntryTypes.includes(type)) {
449
448
  var po = new PerformanceObserver(function (list) {
450
449
  list.getEntries().forEach(function (entry) { return callback(entry); });
451
450
  });
@@ -547,7 +546,7 @@
547
546
  // -------------------------------------------------------------------------
548
547
  /// End
549
548
  // -------------------------------------------------------------------------
550
- var SCRIPT_VERSION = "311";
549
+ var SCRIPT_VERSION = "312";
551
550
  var logger = new Logger();
552
551
  var globalConfig = fromObject(LUX);
553
552
  logger.logEvent(LogEvent.EvaluationStart, [SCRIPT_VERSION]);
@@ -695,7 +694,7 @@
695
694
  // Record the FIRST input delay.
696
695
  function recordDelay(delay) {
697
696
  if (!gFirstInputDelay) {
698
- gFirstInputDelay = delay;
697
+ gFirstInputDelay = floor(delay);
699
698
  // remove event listeners
700
699
  gaEventTypes.forEach(function (eventType) {
701
700
  removeEventListener(eventType, onInput, ghListenerOptions);
@@ -1265,10 +1264,7 @@
1265
1264
  var num = 0;
1266
1265
  for (var i = 0, len = aElems.length; i < len; i++) {
1267
1266
  var e = aElems[i];
1268
- if (e.src &&
1269
- !e.async &&
1270
- !e.defer &&
1271
- 0 !== (e.compareDocumentPosition(lastViewportElem) & 4)) {
1267
+ if (e.src && !e.async && !e.defer && 0 !== (e.compareDocumentPosition(lastViewportElem) & 4)) {
1272
1268
  // If the script has a SRC and async is false and it occurs BEFORE the last viewport element,
1273
1269
  // then increment the counter.
1274
1270
  num++;
@@ -1498,8 +1494,6 @@
1498
1494
  }
1499
1495
  return getHighPercentileINP();
1500
1496
  }
1501
- // function simplified for our use, original would get the customerid from the script src URL
1502
- // but we set it inside the code in this file, so this function just returns that
1503
1497
  function getCustomerId() {
1504
1498
  return LUX.customerid || "";
1505
1499
  }
@@ -1609,12 +1603,7 @@
1609
1603
  var vw = document.documentElement.clientWidth;
1610
1604
  // Return true if the top-left corner is in the viewport and it has width & height.
1611
1605
  var lt = findPos(e);
1612
- return (lt[0] >= 0 &&
1613
- lt[1] >= 0 &&
1614
- lt[0] < vw &&
1615
- lt[1] < vh &&
1616
- e.offsetWidth > 0 &&
1617
- e.offsetHeight > 0);
1606
+ return (lt[0] >= 0 && lt[1] >= 0 && lt[0] < vw && lt[1] < vh && e.offsetWidth > 0 && e.offsetHeight > 0);
1618
1607
  }
1619
1608
  // Return an array containing the top & left coordinates of the element.
1620
1609
  // from http://www.quirksmode.org/js/findpos.html
@@ -1838,7 +1827,7 @@
1838
1827
  !gSyncId ||
1839
1828
  !_sample() || // OUTSIDE the sampled range
1840
1829
  !gbLuxSent // LUX has NOT been sent yet, so wait to include it there
1841
- ) {
1830
+ ) {
1842
1831
  return;
1843
1832
  }
1844
1833
  var sCustomerData = valuesToString(getUpdatedCustomData());
@@ -2083,6 +2072,14 @@
2083
2072
  // Set "LUX.auto=false" to disable send results automatically and
2084
2073
  // instead you must call LUX.send() explicitly.
2085
2074
  if (globalConfig.auto) {
2075
+ var sendBeaconWhenVisible_1 = function () {
2076
+ if (globalConfig.trackHiddenPages) {
2077
+ _sendLux();
2078
+ }
2079
+ else {
2080
+ onVisible(_sendLux);
2081
+ }
2082
+ };
2086
2083
  var sendBeaconAfterMinimumMeasureTime_1 = function () {
2087
2084
  var elapsedTime = _now();
2088
2085
  var timeRemaining = globalConfig.minMeasureTime - elapsedTime;
@@ -2093,12 +2090,12 @@
2093
2090
  ]);
2094
2091
  if (document.readyState === "complete") {
2095
2092
  // If onload has already passed, send the beacon now.
2096
- _sendLux();
2093
+ sendBeaconWhenVisible_1();
2097
2094
  }
2098
2095
  else {
2099
2096
  // Ow, send the beacon slightly after window.onload.
2100
2097
  addListener("load", function () {
2101
- setTimeout(_sendLux, 200);
2098
+ setTimeout(sendBeaconWhenVisible_1, 200);
2102
2099
  });
2103
2100
  }
2104
2101
  }
@@ -2107,14 +2104,7 @@
2107
2104
  setTimeout(sendBeaconAfterMinimumMeasureTime_1, timeRemaining);
2108
2105
  }
2109
2106
  };
2110
- if (globalConfig.trackHiddenPages) {
2111
- // The trackHiddenPages config forces the beacon to be sent even when the page is not visible.
2112
- sendBeaconAfterMinimumMeasureTime_1();
2113
- }
2114
- else {
2115
- // Otherwise we only send the beacon when the page is visible.
2116
- onVisible(sendBeaconAfterMinimumMeasureTime_1);
2117
- }
2107
+ sendBeaconAfterMinimumMeasureTime_1();
2118
2108
  }
2119
2109
  // When newBeaconOnPageShow = true, we initiate a new page view whenever a page is restored from
2120
2110
  // bfcache. Since we have no "onload" event to hook into after a bfcache restore, we rely on the
@@ -41,13 +41,6 @@
41
41
  }
42
42
  }
43
43
 
44
- @include govuk-media-query($from: tablet) {
45
- .gem-c-image-card.gem-c-image-card--two-thirds {
46
- margin: 0 (- govuk-spacing(3)) govuk-spacing(6) (- govuk-spacing(3));
47
- display: block;
48
- }
49
- }
50
-
51
44
  @include govuk-media-query($from: mobile, $until: tablet) {
52
45
  .gem-c-image-card {
53
46
  margin: 0 (- govuk-spacing(3)) govuk-spacing(6) (- govuk-spacing(3));
@@ -77,7 +70,6 @@
77
70
 
78
71
  .gem-c-image-card__text-wrapper.gem-c-image-card__text-wrapper--two-thirds {
79
72
  @include govuk-grid-column($width: two-thirds, $float: right, $at: tablet);
80
- padding-left: 0;
81
73
  }
82
74
  }
83
75
 
@@ -91,6 +83,37 @@
91
83
  border-bottom: none;
92
84
  }
93
85
 
86
+ .gem-c-image-card.gem-c-image-card--two-thirds {
87
+ // Change default flex-direction from column-reverse
88
+ // so that the image and text appear in the same row,
89
+ // with the image to the left
90
+ flex-direction: row-reverse;
91
+ -ms-flex-direction: row-reverse;
92
+ // Wrap flex items onto a new line and ensure
93
+ // that items are aligned correctly
94
+ flex-wrap: wrap-reverse;
95
+ -ms-flex-wrap: wrap-reverse;
96
+ justify-content: flex-end;
97
+ align-items: flex-end;
98
+ }
99
+
100
+ .gem-c-image-card__image-wrapper.gem-c-image-card__image-wrapper--one-third {
101
+ // The first two values set flex-grow and flex-basis to 0
102
+ // This ensures that the flex item does not grow or shrink
103
+ // The the last value, sets flex-basis to 95px
104
+ // padding-left is set to 15px and the image used is 80px wide
105
+ flex: 0 0 95px;
106
+ padding-right: 0;
107
+ }
108
+
109
+ .gem-c-image-card__text-wrapper.gem-c-image-card__text-wrapper--two-thirds {
110
+ // The first two values set flex-grow and flex-basis to 1
111
+ // This allows the flex item contain the image card text to grow or shrink
112
+ // The last value, sets flex-basis to 70%
113
+ // If the width of the flex-item shrinks below 70%, it will wrap onto a new line
114
+ flex: 1 1 70%;
115
+ }
116
+
94
117
  .gem-c-image-card__title {
95
118
  margin: 0;
96
119
  }
@@ -8,7 +8,7 @@ $search-width-or-height: $black-bar-height;
8
8
  $pseudo-underline-height: 3px;
9
9
  $button-pipe-colour: darken(govuk-colour("mid-grey"), 20%);
10
10
 
11
- $large-navbar-height: 86px;
11
+ $large-navbar-height: 72px;
12
12
 
13
13
  $pale-blue-colour: #d2e2f1;
14
14
 
@@ -630,6 +630,12 @@ $after-button-padding-left: govuk-spacing(4);
630
630
  color: govuk-colour("white");
631
631
  }
632
632
 
633
+ &:focus-visible {
634
+ &.gem-c-layout-super-navigation-header__search-toggle-button--blue-background {
635
+ border-bottom: $pseudo-underline-height solid govuk-colour("black");
636
+ }
637
+ }
638
+
633
639
  @include govuk-media-query($from: "desktop") {
634
640
  border: 0;
635
641
  margin: 0;
@@ -654,15 +660,21 @@ $after-button-padding-left: govuk-spacing(4);
654
660
 
655
661
  // stylelint-disable max-nesting-depth
656
662
  @include focus-not-focus-visible {
657
- border-bottom: none;
663
+ border-bottom: $pseudo-underline-height solid $govuk-brand-colour;
664
+
665
+ &:hover {
666
+ border-bottom: $pseudo-underline-height solid govuk-colour("white");
667
+ }
658
668
  }
659
669
  // stylelint-enable max-nesting-depth
660
670
  }
661
671
 
662
672
  &:focus-visible {
663
673
  &.gem-c-layout-super-navigation-header__search-toggle-button--blue-background {
674
+ color: govuk-colour("black");
675
+
664
676
  &:hover {
665
- border-bottom: $pseudo-underline-height solid $govuk-focus-colour;
677
+ border-bottom: $pseudo-underline-height solid govuk-colour("black");
666
678
  color: govuk-colour("black");
667
679
  }
668
680
  }
@@ -679,9 +691,14 @@ $after-button-padding-left: govuk-spacing(4);
679
691
  &.gem-c-layout-super-navigation-header__open-button {
680
692
  &.gem-c-layout-super-navigation-header__search-toggle-button--blue-background {
681
693
  &:hover {
682
- border-bottom: $pseudo-underline-height solid govuk-colour("white");
694
+ border-bottom: $pseudo-underline-height solid govuk-colour("light-grey");
683
695
  color: govuk-colour("white");
684
696
  }
697
+
698
+ &:focus-visible {
699
+ border-bottom: $pseudo-underline-height solid govuk-colour("black");
700
+ color: govuk-colour("black");
701
+ }
685
702
  }
686
703
 
687
704
  @include focus-and-focus-visible {
@@ -704,6 +721,10 @@ $after-button-padding-left: govuk-spacing(4);
704
721
  border-bottom-color: govuk-colour("light-grey");
705
722
  color: govuk-colour("light-grey");
706
723
  outline: 1px solid govuk-colour("light-grey"); // overlap the border of the nav menu so it won't appear when menu open
724
+
725
+ &:hover {
726
+ border-bottom: $pseudo-underline-height solid govuk-colour("light-grey");
727
+ }
707
728
  }
708
729
  }
709
730
  }
@@ -726,7 +747,7 @@ $after-button-padding-left: govuk-spacing(4);
726
747
  }
727
748
 
728
749
  .gem-c-layout-super-navigation-header__search-container {
729
- padding-bottom: govuk-spacing(3);
750
+ padding-bottom: govuk-spacing(7);
730
751
  }
731
752
 
732
753
  // Dropdown menu.
@@ -740,7 +761,23 @@ $after-button-padding-left: govuk-spacing(4);
740
761
  padding-top: govuk-spacing(6);
741
762
 
742
763
  @include govuk-media-query($from: "desktop") {
743
- padding-top: govuk-spacing(5);
764
+ padding-top: govuk-spacing(8);
765
+ }
766
+ }
767
+
768
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar {
769
+ @include govuk-media-query($until: "desktop") {
770
+ .gem-c-layout-super-navigation-header__search-items {
771
+ margin: 0 24px;
772
+ }
773
+ }
774
+ }
775
+
776
+ @include govuk-media-query($until: "tablet") {
777
+ // padding to make it the same as the padding for the redesign of the homepage
778
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar .gem-c-layout-super-navigation-header__column--services-and-information,
779
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar .gem-c-layout-super-navigation-header__column--government-activity {
780
+ padding: 0 24px;
744
781
  }
745
782
  }
746
783
 
@@ -814,6 +851,11 @@ $after-button-padding-left: govuk-spacing(4);
814
851
  }
815
852
  }
816
853
 
854
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar .gem-c-layout-super-navigation-header__navigation-second-item-link {
855
+ font-size: 19px;
856
+ font-size: govuk-px-to-rem(19px);
857
+ }
858
+
817
859
  .gem-c-layout-super-navigation-header__navigation-second-item-link--with-description {
818
860
  font-size: 16px;
819
861
  font-size: govuk-px-to-rem(16px);
@@ -825,16 +867,27 @@ $after-button-padding-left: govuk-spacing(4);
825
867
  }
826
868
  }
827
869
 
828
- .gem-c-layout-super-navigation-header__navigation-second-item-description {
829
- @include govuk-typography-common;
830
- font-size: 16px;
831
- font-size: govuk-px-to-rem(16px);
832
- font-weight: normal;
833
- margin: govuk-spacing(1) 0 0 0;
870
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button--large-navbar {
871
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
872
+ padding-left: 26px;
873
+ padding-right: 26px;
874
+ }
875
+ }
876
+
877
+ .gem-c-layout-super-navigation-header__search-toggle-button--large-navbar {
878
+ padding-left: 24px;
879
+ padding-right: 24px;
880
+ width: 68px;
881
+ }
882
+
883
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar .gem-c-layout-super-navigation-header__navigation-second-item-description {
884
+ font-size: 19px;
885
+ font-size: govuk-px-to-rem(19px);
886
+ margin-top: govuk-spacing(2);
834
887
  }
835
888
 
836
889
  .gem-c-layout-super-navigation-header__search-form {
837
- padding: govuk-spacing(2) 0 govuk-spacing(6) 0;
890
+ padding: 0 0 govuk-spacing(8) 0;
838
891
  }
839
892
 
840
893
  // Popular links.
@@ -854,6 +907,11 @@ $after-button-padding-left: govuk-spacing(4);
854
907
  }
855
908
  }
856
909
 
910
+ .gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar .gem-c-layout-super-navigation-header__popular-link {
911
+ font-size: 19px;
912
+ font-size: govuk-px-to-rem(19px);
913
+ }
914
+
857
915
  .gem-c-layout-super-navigation-header__width-container {
858
916
  @include govuk-media-query($until: "desktop") {
859
917
  margin: 0;
@@ -894,12 +952,12 @@ $after-button-padding-left: govuk-spacing(4);
894
952
  }
895
953
 
896
954
  .gem-c-layout-super-navigation-header__logotype-crown--large-navbar {
897
- height: 36px;
898
- width: 49px;
955
+ height: 32px;
956
+ width: 44px;
899
957
  }
900
958
 
901
959
  .gem-c-header__link--large-navbar:focus {
902
- box-shadow: 0 -4px 0 18px $govuk-focus-colour;
960
+ box-shadow: 0 -6px 0 12px $govuk-focus-colour;
903
961
  border-bottom: $govuk-focus-width solid govuk-colour("black");
904
962
  padding-bottom: 10px;
905
963
  }
@@ -909,17 +967,14 @@ $after-button-padding-left: govuk-spacing(4);
909
967
  }
910
968
 
911
969
  .gem-c-layout-super-navigation-header__header-logo--large-navbar {
912
- height: 35px;
913
- padding-bottom: govuk-spacing(5);
914
- padding-top: govuk-spacing(5);
970
+ height: 32px;
971
+ padding-bottom: govuk-spacing(4);
972
+ padding-top: govuk-spacing(4);
915
973
  }
916
974
 
917
975
  .gem-c-layout-super-navigation-header__search-toggle-button--large-navbar {
918
976
  height: $large-navbar-height;
919
- }
920
-
921
- // to stop the search icon moving on hover
922
- .gem-c-layout-super-navigation-header__search-toggle-button--large-navbar:hover {
977
+ // to stop the search icon moving on hover
923
978
  padding-bottom: 12px;
924
979
  }
925
980
 
@@ -931,3 +986,19 @@ $after-button-padding-left: govuk-spacing(4);
931
986
  height: $large-navbar-height;
932
987
  }
933
988
  }
989
+
990
+ @include govuk-media-query($until: tablet) {
991
+ .gem-c-layout-super-navigation-header__popular-links-heading--large-navbar {
992
+ font-size: 24px;
993
+ font-size: govuk-px-to-rem(24px);
994
+ }
995
+
996
+ // can't disable responsive styling because using override classes
997
+ // from govuk-frontend which are all responsive so have to supply
998
+ // custom class to the label of the search component to turn off
999
+ // the responsive font size
1000
+ .gem-c-layout-super-navigation-header__search-label--large-navbar {
1001
+ font-size: 24px;
1002
+ font-size: govuk-px-to-rem(24px);
1003
+ }
1004
+ }
@@ -91,6 +91,19 @@ $large-input-size: 50px;
91
91
  &:focus {
92
92
  @include gem-c-search-input-focus;
93
93
  }
94
+
95
+ // Note: this is a non-standard CSS feature and will not do anything in Firefox. https://bugzilla.mozilla.org/show_bug.cgi?id=1417753
96
+ &::-webkit-search-cancel-button {
97
+ -webkit-appearance: none;
98
+ background-image: image-url("govuk_publishing_components/icon-close.svg");
99
+ background-position: center;
100
+ background-repeat: no-repeat;
101
+ cursor: pointer;
102
+ height: 20px;
103
+ margin-left: 0;
104
+ margin-right: 0;
105
+ width: 20px;
106
+ }
94
107
  }
95
108
 
96
109
  @mixin icon-positioning($container-size) {
@@ -46,14 +46,12 @@
46
46
  event_name: "select_content",
47
47
  type: "accordion",
48
48
  text: heading_text,
49
- index: {
50
- index_section: index,
51
- index_section_count: items.length,
52
- },
49
+ index_section: index,
50
+ index_section_count: items.length,
53
51
  }.to_json
54
52
 
55
- # These attributes have been created separately from the item[:data_attributes]
56
- # object in order to keep them from colliding with GA4 event tracking and UA
53
+ # These attributes have been created separately from the item[:data_attributes]
54
+ # object in order to keep them from colliding with GA4 event tracking and UA
57
55
  # tracking attributes
58
56
  ga4_link_data_attributes = {}
59
57
  ga4_link_data_attributes[:module] = "ga4-link-tracker"
@@ -63,10 +61,8 @@
63
61
  event_name: "navigation",
64
62
  type: "accordion",
65
63
  section: heading_text,
66
- index: {
67
- index_section: index,
68
- index_section_count: (items.length),
69
- }
64
+ index_section: index,
65
+ index_section_count: (items.length),
70
66
  }.to_json
71
67
  end
72
68
 
@@ -94,9 +90,9 @@
94
90
  <%= tag.div(item[:summary][:text], id: "#{id}-summary-#{index}", class: summary_classes) if item[:summary].present? %>
95
91
  <% end %>
96
92
  <%= tag.div(
97
- item[:content][:html],
98
- id: "#{id}-content-#{index}",
99
- class: "govuk-accordion__section-content",
93
+ item[:content][:html],
94
+ id: "#{id}-content-#{index}",
95
+ class: "govuk-accordion__section-content",
100
96
  'aria-labelledby': "#{id}-heading-#{index}",
101
97
  data: ga4_link_data_attributes
102
98
  ) %>
@@ -44,9 +44,7 @@
44
44
  <% link_text = format_numbers ? cl_helper.wrap_numbers_with_spans(contents_item[:text]) : contents_item[:text]
45
45
  if ga4_tracking
46
46
  ga4_data[:event_name] = cl_helper.get_ga4_event_name(contents_item[:href]) if contents_item[:href]
47
- ga4_data[:index] = {
48
- "index_link": index_link,
49
- }
47
+ ga4_data[:index_link] = index_link
50
48
  end
51
49
  %>
52
50
  <%= link_to_if !contents_item[:active], link_text, contents_item[:href],
@@ -69,9 +67,7 @@
69
67
  <%
70
68
  if ga4_tracking
71
69
  ga4_data[:event_name] = cl_helper.get_ga4_event_name(nested_contents_item[:href]) if nested_contents_item[:href]
72
- ga4_data[:index] = {
73
- "index_link": index_link,
74
- }
70
+ ga4_data[:index_link] = index_link
75
71
  end
76
72
  %>
77
73
  <%= link_to_if !nested_contents_item[:active], nested_contents_item[:text], nested_contents_item[:href],
@@ -34,7 +34,7 @@
34
34
 
35
35
  ga4_tracking ||= false
36
36
  suggestion_data_attributes[:module] = "#{suggestion_data_attributes[:module]} ga4-link-tracker".strip if ga4_tracking
37
- suggestion_data_attributes[:ga4_link] = { event_name: "navigation", type: "intervention", section: suggestion_text, index: 1, index_total: 1 }.to_json if ga4_tracking
37
+ suggestion_data_attributes[:ga4_link] = { event_name: "navigation", type: "intervention", section: suggestion_text, index_link: 1, index_total: 1 }.to_json if ga4_tracking
38
38
  data_attributes[:ga4_intervention_banner] = "" if ga4_tracking # Added to the parent element for the GA4 pageview object to use
39
39
 
40
40
  suggestion_tag_options = {
@@ -107,11 +107,9 @@
107
107
  data-ga4-link="<%= {
108
108
  "event_name": "navigation",
109
109
  "section": "Licence",
110
- "index": {
111
- "index_section": layout_footer_helper.ga4_ogl_link_index_section.to_s,
112
- "index_link": "1",
113
- "index_section_count": layout_footer_helper.ga4_index_section_count.to_s,
114
- },
110
+ "index_section": layout_footer_helper.ga4_ogl_link_index_section.to_s,
111
+ "index_link": "1",
112
+ "index_section_count": layout_footer_helper.ga4_index_section_count.to_s,
115
113
  "text": "Open Government Licence v3.0",
116
114
  "index_total": "1",
117
115
  "type": "footer",
@@ -132,11 +130,9 @@
132
130
  data-ga4-link="<%= {
133
131
  "event_name": "navigation",
134
132
  "section": "Copyright",
135
- "index": {
136
- "index_section": layout_footer_helper.ga4_copyright_link_index_section.to_s,
137
- "index_link": "1",
138
- "index_section_count": layout_footer_helper.ga4_index_section_count.to_s,
139
- },
133
+ "index_section": layout_footer_helper.ga4_copyright_link_index_section.to_s,
134
+ "index_link": "1",
135
+ "index_section_count": layout_footer_helper.ga4_index_section_count.to_s,
140
136
  "text": "© Crown copyright",
141
137
  "index_total": "1",
142
138
  "type": "footer",
@@ -65,7 +65,11 @@
65
65
  button_container_classes = %w(gem-c-layout-super-navigation-header__button-container)
66
66
  button_container_classes << "gem-c-layout-super-navigation-header__button-container--large-navbar" if large_navbar
67
67
 
68
+ dropdown_menu_classes = %w(gem-c-layout-super-navigation-header__navigation-dropdown-menu)
69
+ dropdown_menu_classes << "gem-c-layout-super-navigation-header__navigation-dropdown-menu--large-navbar" if large_navbar
68
70
 
71
+ popular_links_heading_classes = %w(govuk-heading-m)
72
+ popular_links_heading_classes << "gem-c-layout-super-navigation-header__popular-links-heading--large-navbar" if large_navbar
69
73
  %>
70
74
  <%= content_tag("header",
71
75
  {
@@ -96,11 +100,9 @@
96
100
  "external": "false",
97
101
  "text": "GOV.UK",
98
102
  "section": "Logo",
99
- "index": {
100
- "index_link": 1,
101
- "index_section": 0,
102
- "index_section_count": 2,
103
- },
103
+ "index_link": 1,
104
+ "index_section": 0,
105
+ "index_section_count": 2,
104
106
  "index_total": 1
105
107
  }.to_json
106
108
  },
@@ -109,6 +111,11 @@
109
111
  label: logo_link_title,
110
112
  }
111
113
  } do %>
114
+ <% if hide_logo_text %>
115
+ <span class="govuk-visually-hidden">
116
+ <%= logo_text %>
117
+ </span>
118
+ <% end %>
112
119
  <span class="govuk-header__logotype">
113
120
  <!--[if gt IE 8]><!-->
114
121
  <%= content_tag(:svg, {
@@ -117,7 +124,7 @@
117
124
  },
118
125
  class: logotype_classes,
119
126
  height: "30",
120
- width: "36",
127
+ width: "36",
121
128
  focusable: "false",
122
129
  viewBox: "0 0 132 97",
123
130
  xmlns: "http://www.w3.org/2000/svg",
@@ -198,10 +205,8 @@
198
205
  event_name: "select_content",
199
206
  type: "header menu bar",
200
207
  text: link[:label],
201
- index: {
202
- index_section: 1,
203
- index_section_count: 2,
204
- },
208
+ index_section: 1,
209
+ index_section_count: 2,
205
210
  section: link[:label]
206
211
  }
207
212
  },
@@ -232,10 +237,8 @@
232
237
  "event_name": "select_content",
233
238
  "type": "header menu bar",
234
239
  "text": "Search",
235
- "index": {
236
- "index_section": 2,
237
- "index_section_count": 2,
238
- },
240
+ "index_section": 2,
241
+ "index_section_count": 2,
239
242
  "section": "Search"
240
243
  }.to_json
241
244
  }"
@@ -276,10 +279,11 @@
276
279
  <% end %>
277
280
  </div>
278
281
 
279
- <div
280
- id="super-navigation-menu-<%= unique_id %>" hidden
281
- class="gem-c-layout-super-navigation-header__navigation-dropdown-menu"
282
- >
282
+ <%= content_tag(:div, {
283
+ id: "super-navigation-menu-#{unique_id}",
284
+ hidden: "",
285
+ class: dropdown_menu_classes,
286
+ }) do %>
283
287
  <div class="govuk-width-container">
284
288
  <div class="govuk-grid-row gem-c-layout-super-navigation-header__navigation-items">
285
289
 
@@ -320,11 +324,9 @@
320
324
  ga4_link: {
321
325
  "event_name": "navigation",
322
326
  "type": "header menu bar",
323
- "index": {
324
- "index_section": column_index + 1,
325
- "index_link": index + 1,
326
- "index_section_count": 4,
327
- },
327
+ "index_section": column_index + 1,
328
+ "index_link": index + 1,
329
+ "index_section_count": 4,
328
330
  "index_total": index_total,
329
331
  "section": column[:label],
330
332
  }
@@ -338,9 +340,13 @@
338
340
  <% end %>
339
341
  </div>
340
342
  </div>
341
- </div>
343
+ <% end %>
342
344
 
343
- <div id="super-search-menu" hidden class="gem-c-layout-super-navigation-header__navigation-dropdown-menu">
345
+ <%= content_tag(:div, {
346
+ id: "super-search-menu",
347
+ hidden: "",
348
+ class: dropdown_menu_classes,
349
+ }) do %>
344
350
  <div class="govuk-width-container gem-c-layout-super-navigation-header__search-container gem-c-layout-super-navigation-header__search-items">
345
351
  <h3 class="govuk-visually-hidden">
346
352
  <%= navigation_search_subheading %>
@@ -353,6 +359,7 @@
353
359
  data-module="ga4-form-tracker"
354
360
  data-ga4-form='{ "event_name": "search", "type": "header menu bar", "section": "Search GOV.UK", "action": "search", "url": "/search/all" }'
355
361
  data-ga4-form-include-text
362
+ data-ga4-form-no-answer-undefined
356
363
  action="/search"
357
364
  method="get"
358
365
  role="search"
@@ -362,7 +369,9 @@
362
369
  inline_label: false,
363
370
  label_size: "m",
364
371
  label_text: search_text,
372
+ label_custom_class: "gem-c-layout-super-navigation-header__search-label--large-navbar",
365
373
  size: "large",
374
+ margin_bottom: 0,
366
375
  data_attributes: {
367
376
  track_category: "headerClicked",
368
377
  track_action: "searchSubmitted",
@@ -376,7 +385,11 @@
376
385
  </div>
377
386
  <div class="govuk-grid-row">
378
387
  <div class="govuk-grid-column-full">
379
- <h3 class="govuk-heading-m"><%= popular_links_heading %></h3>
388
+ <%= content_tag(:h3, {
389
+ class: popular_links_heading_classes
390
+ }) do %>
391
+ <%= popular_links_heading %>
392
+ <% end %>
380
393
  <ul class="govuk-list">
381
394
  <% index_total = popular_links.length %>
382
395
  <% popular_links.each_with_index do | popular_link, index | %>
@@ -395,11 +408,9 @@
395
408
  ga4_link: {
396
409
  "event_name": "navigation",
397
410
  "type": "header menu bar",
398
- "index": {
399
- "index_section": 4,
400
- "index_link": index + 1,
401
- "index_section_count": 4,
402
- },
411
+ "index_section": 4,
412
+ "index_link": index + 1,
413
+ "index_section_count": 4,
403
414
  "index_total": index_total,
404
415
  "section": popular_links_heading,
405
416
  }
@@ -411,7 +422,7 @@
411
422
  </div>
412
423
  </div>
413
424
  </div>
414
- </div>
425
+ <% end %>
415
426
  </nav>
416
427
  </div>
417
428
  <% end %>
@@ -11,6 +11,7 @@
11
11
  label_margin_bottom ||= nil
12
12
  label_size ||= nil
13
13
  label_text ||= t("components.search_box.label")
14
+ label_custom_class ||= nil
14
15
  name ||= "q"
15
16
  homepage ||= false
16
17
  no_border ||= false
@@ -42,6 +43,7 @@
42
43
  label_classes << "gem-c-search__label"
43
44
  end
44
45
  label_classes << "govuk-!-margin-bottom-#{label_margin_bottom}" if [*1..9].include?(label_margin_bottom) and local_assigns.include?(:inline_label)
46
+ label_classes << label_custom_class if label_custom_class
45
47
 
46
48
  tag_label = capture do
47
49
  tag.label(for: id, class: label_classes) do
@@ -54,9 +54,7 @@
54
54
  ga4_link_data = {
55
55
  'event_name': 'navigation',
56
56
  'type': 'share page',
57
- 'index': {
58
- 'index_link': index + 1,
59
- },
57
+ 'index_link': index + 1,
60
58
  'index_total': links.length,
61
59
  'text': link[:icon],
62
60
  }
@@ -65,9 +63,7 @@
65
63
  ga4_link_data = {
66
64
  'event_name': 'navigation',
67
65
  'type': 'follow us',
68
- 'index': {
69
- 'index_link': index + 1,
70
- },
66
+ 'index_link': index + 1,
71
67
  'index_total': links.length
72
68
  }
73
69
  end
@@ -84,10 +84,8 @@
84
84
  "ga4-link": {
85
85
  "event_name": "navigation",
86
86
  "type": "step by step",
87
- "index": {
88
- "index_section": step_index + 1,
89
- "index_section_count": steps.length
90
- },
87
+ "index_section": step_index + 1,
88
+ "index_section_count": steps.length,
91
89
  "section": step[:title]
92
90
  }.to_json
93
91
  }
@@ -26,6 +26,15 @@
26
26
  tracking_options ||= ({ dimension96: tracking_id }).to_json
27
27
  end
28
28
 
29
+ if ga4_tracking
30
+ ga4_data = {
31
+ event_name: "navigation",
32
+ type: "super breadcrumb",
33
+ index_link: "1",
34
+ index_total: "1",
35
+ }.to_json
36
+ end
37
+
29
38
  shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
30
39
  classes = %w[gem-c-step-nav-header]
31
40
  classes << shared_helper.get_margin_bottom if local_assigns[:margin_bottom]
@@ -44,7 +53,7 @@
44
53
  data-track-action="<%= tracking_action %>"
45
54
  data-track-label="<%= tracking_label %>"
46
55
  <% if ga4_tracking %>
47
- data-ga4-link='{"event_name":"navigation", "type":"super breadcrumb", "index":{"index_link": "1"}, "index_total":"1"}'
56
+ data-ga4-link='<%= ga4_data %>'
48
57
  <% end %>
49
58
  <% if tracking_dimension_enabled %>
50
59
  data-track-dimension="<%= tracking_dimension %>"
@@ -23,13 +23,11 @@
23
23
  data-track-dimension="<%= links[0][:text] %>"
24
24
  data-track-dimension-index="29"
25
25
  data-track-options='{"dimension96" : "<%= links[0][:tracking_id] %>" }'
26
- <% if ga4_tracking
26
+ <% if ga4_tracking
27
27
  ga4_attributes = {
28
28
  event_name: "navigation",
29
29
  type: "part of",
30
- index:{
31
- "index_link": "1"
32
- },
30
+ "index_link": "1",
33
31
  index_total: "1",
34
32
  section: pretitle,
35
33
  }.to_json
@@ -53,13 +51,11 @@
53
51
  data-track-dimension="<%= link[:text] %>"
54
52
  data-track-dimension-index="29"
55
53
  data-track-options='{"dimension96" : "<%= link[:tracking_id] %>" }'
56
- <% if ga4_tracking
54
+ <% if ga4_tracking
57
55
  ga4_attributes = {
58
56
  event_name: "navigation",
59
57
  type: "part of",
60
- index:{
61
- "index_link": (index + 1).to_s
62
- },
58
+ index_link: (index + 1).to_s,
63
59
  index_total: (links.length).to_s,
64
60
  section: pretitle,
65
61
  }.to_json
@@ -34,10 +34,8 @@
34
34
  event_name: "select_content",
35
35
  type: "tabs",
36
36
  text: tab[:label],
37
- index: {
38
- index_section: index + 1,
39
- index_section_count: tabs.length,
40
- },
37
+ index_section: index + 1,
38
+ index_section_count: tabs.length,
41
39
  }
42
40
  ga4_attributes[:event_name] = "navigation" if as_links
43
41
  tab[:tab_data_attributes][:ga4_link] = ga4_attributes if as_links
@@ -1,4 +1,4 @@
1
- <%
1
+ <%
2
2
  shared_helper = GovukPublishingComponents::Presenters::SharedHelper.new(local_assigns)
3
3
  title = t("components.related_navigation.ukraine.title")
4
4
  lang = shared_helper.t_locale("components.related_navigation.ukraine.title")
@@ -15,11 +15,9 @@
15
15
  ga4_attributes = {
16
16
  event_name: "navigation",
17
17
  type: "related content",
18
- index: {
19
- index_section: "#{ga4_tracking_counts.index_section_count}",
20
- index_link: "#{index + 1}",
21
- index_section_count: "#{ga4_tracking_counts.index_section_count}",
22
- },
18
+ index_section: "#{ga4_tracking_counts.index_section_count}",
19
+ index_link: "#{index + 1}",
20
+ index_section_count: "#{ga4_tracking_counts.index_section_count}",
23
21
  index_total: "#{index_total}",
24
22
  section: title,
25
23
  } if ga4_tracking
@@ -205,8 +205,8 @@ examples:
205
205
  <div class="govuk-!-width-full">
206
206
  <%= component %>
207
207
  </div>
208
- two_thirds_column:
209
- description: This variant is used for the featured section on the homepage, the aspect ratio used is 1:1
208
+ two_thirds:
209
+ description: This variant is used for the featured section on the homepage. The aspect ratio used is 1:1 and the width of the image is constrained to 80px wide.
210
210
  data:
211
211
  two_thirds: true
212
212
  href: "/still-not-a-page"
@@ -108,3 +108,8 @@ examples:
108
108
  data:
109
109
  label_margin_bottom: 9
110
110
  inline_label: false
111
+ with_custom_label_class:
112
+ description: |
113
+ Allows adding a custom class to the label of the component.
114
+ data:
115
+ label_custom_class: "govuk-heading-xl"
@@ -24,7 +24,7 @@
24
24
  <% end %>
25
25
 
26
26
  <ul class="gem-c-related-navigation__link-list">
27
- <%
27
+ <%
28
28
  constructed_link_array = []
29
29
  section_link_limit = related_nav_helper.calculate_section_link_limit(links)
30
30
  index_total = links.length
@@ -35,11 +35,9 @@
35
35
  ga4_attributes = {
36
36
  event_name: "navigation",
37
37
  type: ga4_type,
38
- index: {
39
- index_section: "#{section_index}",
40
- index_link: "#{index}",
41
- index_section_count: "#{section_count}",
42
- },
38
+ index_section: "#{section_index}",
39
+ index_link: "#{index}",
40
+ index_section_count: "#{section_count}",
43
41
  index_total: "#{index_total}",
44
42
  section: ga4_heading_text,
45
43
  } if ga4_tracking
@@ -70,7 +68,7 @@
70
68
 
71
69
  <% if links.length > section_link_limit %>
72
70
  <%
73
- classes = "gem-c-related-navigation__link toggle-wrap"
71
+ classes = "gem-c-related-navigation__link toggle-wrap"
74
72
  data_attributes_li = { module: "ga4-event-tracker" } if ga4_tracking
75
73
  data_attributes_link = {
76
74
  controls: "toggle_#{section_title}",
@@ -83,7 +81,7 @@
83
81
  <%= link_to("#", class: "gem-c-related-navigation__toggle", data: data_attributes_link) do %>
84
82
  <%= t("common.toggle_more",
85
83
  show: t('common.show'),
86
- number: related_nav_helper.remaining_link_count(links)) %>
84
+ number: related_nav_helper.remaining_link_count(links)) %>
87
85
  <% end %>
88
86
  <% end %>
89
87
 
@@ -61,9 +61,7 @@ module GovukPublishingComponents
61
61
  ga4_link: {
62
62
  event_name: "navigation",
63
63
  type: "breadcrumb",
64
- index: {
65
- index_link: index.to_s,
66
- },
64
+ index_link: index.to_s,
67
65
  index_total: breadcrumbs_length.to_s,
68
66
  },
69
67
  }
@@ -23,11 +23,9 @@ module GovukPublishingComponents
23
23
  {
24
24
  "event_name": "navigation",
25
25
  "type": "footer",
26
- "index": {
27
- "index_link": (index_link + 1).to_s,
28
- "index_section": (index_section + 1).to_s,
29
- "index_section_count": @ga4_index_section_count.to_s,
30
- },
26
+ "index_link": (index_link + 1).to_s,
27
+ "index_section": (index_section + 1).to_s,
28
+ "index_section_count": @ga4_index_section_count.to_s,
31
29
  "index_total": index_total.to_s,
32
30
  "section": section,
33
31
  }
@@ -1,3 +1,3 @@
1
1
  module GovukPublishingComponents
2
- VERSION = "35.19.0".freeze
2
+ VERSION = "35.20.1".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_publishing_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 35.19.0
4
+ version: 35.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-18 00:00:00.000000000 Z
11
+ date: 2023-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_app_config
@@ -418,6 +418,7 @@ files:
418
418
  - app/assets/images/govuk_publishing_components/govuk-schema-placeholder-16x9.png
419
419
  - app/assets/images/govuk_publishing_components/govuk-schema-placeholder-1x1.png
420
420
  - app/assets/images/govuk_publishing_components/govuk-schema-placeholder-4x3.png
421
+ - app/assets/images/govuk_publishing_components/icon-close.svg
421
422
  - app/assets/images/govuk_publishing_components/icon-file-download.svg
422
423
  - app/assets/images/govuk_publishing_components/icon-important.svg
423
424
  - app/assets/images/govuk_publishing_components/icon-print-2x.png
@@ -450,6 +451,7 @@ files:
450
451
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-form-tracker.js
451
452
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js
452
453
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-page-views.js
454
+ - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-print-intent-tracker.js
453
455
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-schemas.js
454
456
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-scroll-tracker.js
455
457
  - app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-smart-answer-results-tracker.js