govuk_publishing_components 41.0.0 → 41.1.1

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/vendor/lux/lux-reporter.js +192 -171
  3. data/app/assets/stylesheets/component_guide/application.scss +10 -11
  4. data/app/assets/stylesheets/govuk_publishing_components/components/_accordion.scss +1 -1
  5. data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +2 -3
  6. data/app/assets/stylesheets/govuk_publishing_components/components/_attachment.scss +3 -3
  7. data/app/assets/stylesheets/govuk_publishing_components/components/_big-number.scss +1 -1
  8. data/app/assets/stylesheets/govuk_publishing_components/components/_button.scss +2 -2
  9. data/app/assets/stylesheets/govuk_publishing_components/components/_cards.scss +60 -23
  10. data/app/assets/stylesheets/govuk_publishing_components/components/_contents-list.scss +3 -3
  11. data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-guidance.scss +1 -3
  12. data/app/assets/stylesheets/govuk_publishing_components/components/_contextual-sidebar.scss +2 -1
  13. data/app/assets/stylesheets/govuk_publishing_components/components/_cross-service-header.scss +19 -19
  14. data/app/assets/stylesheets/govuk_publishing_components/components/_document-list.scss +14 -10
  15. data/app/assets/stylesheets/govuk_publishing_components/components/_emergency-banner.scss +3 -3
  16. data/app/assets/stylesheets/govuk_publishing_components/components/_error-alert.scss +2 -2
  17. data/app/assets/stylesheets/govuk_publishing_components/components/_error-summary.scss +1 -1
  18. data/app/assets/stylesheets/govuk_publishing_components/components/_feedback.scss +8 -8
  19. data/app/assets/stylesheets/govuk_publishing_components/components/_image-card.scss +16 -10
  20. data/app/assets/stylesheets/govuk_publishing_components/components/_intervention.scss +2 -2
  21. data/app/assets/stylesheets/govuk_publishing_components/components/_inverse-header.scss +2 -2
  22. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +33 -35
  23. data/app/assets/stylesheets/govuk_publishing_components/components/_lead-paragraph.scss +3 -3
  24. data/app/assets/stylesheets/govuk_publishing_components/components/_metadata.scss +1 -1
  25. data/app/assets/stylesheets/govuk_publishing_components/components/_notice.scss +1 -1
  26. data/app/assets/stylesheets/govuk_publishing_components/components/_option-select.scss +3 -3
  27. data/app/assets/stylesheets/govuk_publishing_components/components/_organisation-logo.scss +13 -3
  28. data/app/assets/stylesheets/govuk_publishing_components/components/_panel.scss +1 -1
  29. data/app/assets/stylesheets/govuk_publishing_components/components/_related-navigation.scss +6 -6
  30. data/app/assets/stylesheets/govuk_publishing_components/components/_reorderable-list.scss +2 -3
  31. data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +4 -3
  32. data/app/assets/stylesheets/govuk_publishing_components/components/_share-links.scss +2 -3
  33. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss +3 -4
  34. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-related.scss +3 -3
  35. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss +10 -10
  36. data/app/assets/stylesheets/govuk_publishing_components/components/_subscription-links.scss +1 -1
  37. data/app/assets/stylesheets/govuk_publishing_components/components/_table.scss +1 -1
  38. data/app/assets/stylesheets/govuk_publishing_components/components/_translation-nav.scss +3 -3
  39. data/app/assets/stylesheets/govuk_publishing_components/components/_warning-text.scss +1 -1
  40. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_attachment.scss +5 -4
  41. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_contact.scss +1 -1
  42. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_highlight-answer.scss +2 -2
  43. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_stat-headline.scss +2 -2
  44. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_tables.scss +1 -1
  45. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_warning-callout.scss +1 -1
  46. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_markdown-typography.scss +5 -5
  47. data/app/views/govuk_publishing_components/components/_cards.html.erb +11 -3
  48. data/app/views/govuk_publishing_components/components/docs/cards.yml +40 -29
  49. data/lib/govuk_publishing_components/version.rb +1 -1
  50. data/node_modules/axe-core/axe.d.ts +18 -5
  51. data/node_modules/axe-core/axe.js +757 -716
  52. data/node_modules/axe-core/axe.min.js +2 -2
  53. data/node_modules/axe-core/locales/_template.json +101 -96
  54. data/node_modules/axe-core/locales/de.json +12 -5
  55. data/node_modules/axe-core/locales/ja.json +15 -7
  56. data/node_modules/axe-core/package.json +14 -10
  57. data/node_modules/axe-core/sri-history.json +4 -0
  58. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9ecd6d3b0b215006949226c1b78eb7b68f775b34e12e79fef923da49e96310d
4
- data.tar.gz: 362a4fa295d01bcbd8a56690236160c9058776e7ec5d730b11dadfe5c5da32b3
3
+ metadata.gz: 463dd1a5275229c7459f757f67fd4df12a59df147f952e709e830b55f6aed9ba
4
+ data.tar.gz: f376cd0d430fc8c96de335bc19242add6d5f6e7a25fa6034631f881b23215cc3
5
5
  SHA512:
6
- metadata.gz: 6bcbbd412cd4247af43891bc0f41b1d1c1484f6a7dcc4a9bd59f507cdcb7bb64c70aab383ad9ea3538ad7007828bd2e9b900b9840de3cb2d8d97c34822db933c
7
- data.tar.gz: 247e5643e44d4dd298f684afafe8a1aee2f57340b6fa51099a996d2df99ae0aaaba2853ce4137e80cad1184c071c28f9342efd2d2aea3bb3dabad78f0c45eaa7
6
+ metadata.gz: 0de3c1a2a5c84e20c5d931c9717c239fa61cce5c6bb263addf36d3bc7e1f2afb559fbe9c228aab89a7602097a747945df4e4fbebd1fd18035c44e392832bfa51
7
+ data.tar.gz: 74fb27acd937298a191a24b380f9079312c6b8da732990987e885385758c2f34c2e11481da8760f4ded003bcf8bb3ee5f924a8be3d21f43043dd24c62122ec07
@@ -22,6 +22,140 @@
22
22
  (function () {
23
23
  'use strict';
24
24
 
25
+ function floor(x) {
26
+ return Math.floor(x);
27
+ }
28
+ var max = Math.max;
29
+ var round = Math.round;
30
+ /**
31
+ * Clamp a number so that it is never less than 0
32
+ */
33
+ function clamp(x) {
34
+ return max(0, x);
35
+ }
36
+ function sortNumeric(a, b) {
37
+ return a - b;
38
+ }
39
+
40
+ function now() {
41
+ return Date.now ? Date.now() : +new Date();
42
+ }
43
+
44
+ var scriptStartTime = now();
45
+
46
+ var _a;
47
+ // If the various performance APIs aren't available, we export an empty object to
48
+ // prevent having to make regular typeof checks.
49
+ var performance = window.performance || {};
50
+ var timing = performance.timing || {
51
+ activationStart: 0,
52
+ // If performance.timing isn't available, we attempt to polyfill the navigationStart value.
53
+ // Our first attempt is from LUX.ns, which is the time that the snippet execution began. If this
54
+ // is not available, we fall back to the time that the current script execution began.
55
+ navigationStart: ((_a = window.LUX) === null || _a === void 0 ? void 0 : _a.ns) || scriptStartTime,
56
+ };
57
+ function navigationType() {
58
+ if (performance.navigation && typeof performance.navigation.type !== "undefined") {
59
+ return performance.navigation.type;
60
+ }
61
+ return "";
62
+ }
63
+ function getNavigationEntry() {
64
+ var navEntries = getEntriesByType("navigation");
65
+ if (navEntries.length) {
66
+ var nativeEntry = navEntries[0];
67
+ var entry_1 = {
68
+ navigationStart: 0,
69
+ activationStart: 0,
70
+ };
71
+ for (var key in nativeEntry) {
72
+ entry_1[key] = nativeEntry[key];
73
+ }
74
+ return entry_1;
75
+ }
76
+ var navType = navigationType();
77
+ var entry = {
78
+ navigationStart: 0,
79
+ activationStart: 0,
80
+ startTime: 0,
81
+ type: navType == 2 ? "back_forward" : navType === 1 ? "reload" : "navigate",
82
+ };
83
+ if (true) {
84
+ for (var key in timing) {
85
+ if (typeof timing[key] === "number" && key !== "navigationStart") {
86
+ entry[key] = floor(timing[key] - timing.navigationStart);
87
+ }
88
+ }
89
+ }
90
+ return entry;
91
+ }
92
+ /**
93
+ * Simple wrapper around performance.getEntriesByType to provide fallbacks for
94
+ * legacy browsers, and work around edge cases where undefined is returned instead
95
+ * of an empty PerformanceEntryList.
96
+ */
97
+ function getEntriesByType(type) {
98
+ if (typeof performance.getEntriesByType === "function") {
99
+ var entries = performance.getEntriesByType(type);
100
+ if (entries && entries.length) {
101
+ return entries;
102
+ }
103
+ }
104
+ return [];
105
+ }
106
+ /**
107
+ * Simple wrapper around performance.getEntriesByName to provide fallbacks for
108
+ * legacy browsers, and work around edge cases where undefined is returned instead
109
+ * of an empty PerformanceEntryList.
110
+ */
111
+ function getEntriesByName(type) {
112
+ if (typeof performance.getEntriesByName === "function") {
113
+ var entries = performance.getEntriesByName(type);
114
+ if (entries && entries.length) {
115
+ return entries;
116
+ }
117
+ }
118
+ return [];
119
+ }
120
+
121
+ function isVisible() {
122
+ if (document.visibilityState) {
123
+ return document.visibilityState === "visible";
124
+ }
125
+ // For browsers that don't support document.visibilityState, we assume the page is visible.
126
+ return true;
127
+ }
128
+ function onVisible(cb) {
129
+ afterPrerender(function () {
130
+ if (isVisible()) {
131
+ cb();
132
+ }
133
+ else {
134
+ var onVisibleCallback_1 = function () {
135
+ if (isVisible()) {
136
+ cb();
137
+ removeEventListener("visibilitychange", onVisibleCallback_1);
138
+ }
139
+ };
140
+ addEventListener("visibilitychange", onVisibleCallback_1, true);
141
+ }
142
+ });
143
+ }
144
+ function afterPrerender(cb) {
145
+ if (document.prerendering) {
146
+ document.addEventListener("prerenderingchange", cb, true);
147
+ }
148
+ else {
149
+ cb();
150
+ }
151
+ }
152
+ function wasPrerendered() {
153
+ return document.prerendering || getNavigationEntry().activationStart > 0;
154
+ }
155
+ function wasRedirected() {
156
+ return getNavigationEntry().redirectCount > 0 || timing.redirectEnd > 0;
157
+ }
158
+
25
159
  var Flags = {
26
160
  InitCalled: 1 << 0,
27
161
  NavTimingNotSupported: 1 << 1,
@@ -64,10 +198,6 @@
64
198
  }
65
199
  }
66
200
 
67
- function now() {
68
- return Date.now ? Date.now() : +new Date();
69
- }
70
-
71
201
  var LogEvent = {
72
202
  // Internal events
73
203
  EvaluationStart: 1,
@@ -136,98 +266,6 @@
136
266
  var END_MARK = "LUX_end";
137
267
  var BOOLEAN_TRUE = "true";
138
268
 
139
- function floor(x) {
140
- return Math.floor(x);
141
- }
142
- var max = Math.max;
143
- var round = Math.round;
144
- /**
145
- * Clamp a number so that it is never less than 0
146
- */
147
- function clamp(x) {
148
- return max(0, x);
149
- }
150
- function sortNumeric(a, b) {
151
- return a - b;
152
- }
153
-
154
- var scriptStartTime = now();
155
-
156
- var _a;
157
- // If the various performance APIs aren't available, we export an empty object to
158
- // prevent having to make regular typeof checks.
159
- var performance = window.performance || {};
160
- var timing = performance.timing || {
161
- activationStart: 0,
162
- // If performance.timing isn't available, we attempt to polyfill the navigationStart value.
163
- // Our first attempt is from LUX.ns, which is the time that the snippet execution began. If this
164
- // is not available, we fall back to the time that the current script execution began.
165
- navigationStart: ((_a = window.LUX) === null || _a === void 0 ? void 0 : _a.ns) || scriptStartTime,
166
- };
167
- function navigationType() {
168
- if (performance.navigation && typeof performance.navigation.type !== "undefined") {
169
- return performance.navigation.type;
170
- }
171
- return "";
172
- }
173
- function getNavigationEntry() {
174
- var navEntries = getEntriesByType("navigation");
175
- if (navEntries.length) {
176
- var nativeEntry = navEntries[0];
177
- var entry_1 = {
178
- navigationStart: 0,
179
- activationStart: 0,
180
- };
181
- for (var key in nativeEntry) {
182
- entry_1[key] = nativeEntry[key];
183
- }
184
- return entry_1;
185
- }
186
- var navType = navigationType();
187
- var entry = {
188
- navigationStart: 0,
189
- activationStart: 0,
190
- startTime: 0,
191
- type: navType == 2 ? "back_forward" : navType === 1 ? "reload" : "navigate",
192
- };
193
- if (true) {
194
- for (var key in timing) {
195
- if (typeof timing[key] === "number" && key !== "navigationStart") {
196
- entry[key] = floor(timing[key] - timing.navigationStart);
197
- }
198
- }
199
- }
200
- return entry;
201
- }
202
- /**
203
- * Simple wrapper around performance.getEntriesByType to provide fallbacks for
204
- * legacy browsers, and work around edge cases where undefined is returned instead
205
- * of an empty PerformanceEntryList.
206
- */
207
- function getEntriesByType(type) {
208
- if (typeof performance.getEntriesByType === "function") {
209
- var entries = performance.getEntriesByType(type);
210
- if (entries && entries.length) {
211
- return entries;
212
- }
213
- }
214
- return [];
215
- }
216
- /**
217
- * Simple wrapper around performance.getEntriesByName to provide fallbacks for
218
- * legacy browsers, and work around edge cases where undefined is returned instead
219
- * of an empty PerformanceEntryList.
220
- */
221
- function getEntriesByName(type) {
222
- if (typeof performance.getEntriesByName === "function") {
223
- var entries = performance.getEntriesByName(type);
224
- if (entries && entries.length) {
225
- return entries;
226
- }
227
- }
228
- return [];
229
- }
230
-
231
269
  /**
232
270
  * Milliseconds since navigationStart representing when the page was restored from the bfcache
233
271
  */
@@ -283,7 +321,7 @@
283
321
  return str;
284
322
  }
285
323
 
286
- var VERSION = "4.0.23";
324
+ var VERSION = "4.0.25";
287
325
  /**
288
326
  * Returns the version of the script as a float to be stored in legacy systems that do not support
289
327
  * string versions.
@@ -303,6 +341,13 @@
303
341
  };
304
342
  var sendBeacon = "sendBeacon" in navigator ? navigator.sendBeacon.bind(navigator) : sendBeaconFallback;
305
343
  /**
344
+ * Some values should only be reported if they are non-zero. The exception to this is when the page
345
+ * was prerendered or restored from BF cache
346
+ */
347
+ function shouldReportValue(value) {
348
+ return value > 0 || getPageRestoreTime() || wasPrerendered();
349
+ }
350
+ /**
306
351
  * Fit an array of user timing delimited strings into a URL and return both the entries that fit and
307
352
  * the remaining entries that didn't fit.
308
353
  */
@@ -338,7 +383,7 @@
338
383
  _this.logger.logEvent(LogEvent.PostBeaconTimeoutReached);
339
384
  _this.stopRecording();
340
385
  _this.send();
341
- }, this.config.maxMeasureTime);
386
+ }, this.config.maxMeasureTime - msSincePageInit());
342
387
  addListener("securitypolicyviolation", function (e) {
343
388
  if (e.disposition !== "report" && e.blockedURI === _this.config.beaconUrlV2 && "URL" in self) {
344
389
  // Some websites might have CSP rules that allow the GET beacon, but not the POST beacon.
@@ -541,44 +586,6 @@
541
586
  return encodeURIComponent(strings.join(","));
542
587
  }
543
588
 
544
- function isVisible() {
545
- if (document.visibilityState) {
546
- return document.visibilityState === "visible";
547
- }
548
- // For browsers that don't support document.visibilityState, we assume the page is visible.
549
- return true;
550
- }
551
- function onVisible(cb) {
552
- afterPrerender(function () {
553
- if (isVisible()) {
554
- cb();
555
- }
556
- else {
557
- var onVisibleCallback_1 = function () {
558
- if (isVisible()) {
559
- cb();
560
- removeEventListener("visibilitychange", onVisibleCallback_1);
561
- }
562
- };
563
- addEventListener("visibilitychange", onVisibleCallback_1, true);
564
- }
565
- });
566
- }
567
- function afterPrerender(cb) {
568
- if (document.prerendering) {
569
- document.addEventListener("prerenderingchange", cb, true);
570
- }
571
- else {
572
- cb();
573
- }
574
- }
575
- function wasPrerendered() {
576
- return document.prerendering || getNavigationEntry().activationStart > 0;
577
- }
578
- function wasRedirected() {
579
- return getNavigationEntry().redirectCount > 0 || timing.redirectEnd > 0;
580
- }
581
-
582
589
  function getClosestScTrackAttribute(el) {
583
590
  var _a;
584
591
  if (el.hasAttribute("data-sctrack")) {
@@ -603,7 +610,8 @@
603
610
  function getNodeSelector(node, selector) {
604
611
  if (selector === void 0) { selector = ""; }
605
612
  try {
606
- if (selector && (node.nodeType === 9 || selector.length > MAX_SELECTOR_LENGTH || !node.parentNode)) {
613
+ if (selector &&
614
+ (node.nodeType === 9 || selector.length > MAX_SELECTOR_LENGTH || !node.parentNode)) {
607
615
  // Final selector.
608
616
  return selector;
609
617
  }
@@ -659,27 +667,27 @@
659
667
  elementSelector: getNodeSelector(source.node),
660
668
  elementType: source.node.nodeName,
661
669
  }); })
662
- : [];
670
+ : [];
663
671
  if (sessionEntries.length &&
664
672
  (entry.startTime - latestEntry.startTime >= 1000 ||
665
673
  entry.startTime - firstEntry.startTime >= 5000)) {
666
- sessionValue = entry.value;
667
- sessionEntries = [entry];
668
- sessionAttributions = sources;
669
- largestEntry = entry;
670
- }
671
- else {
672
- sessionValue += entry.value;
673
- sessionEntries.push(entry);
674
- sessionAttributions = sessionAttributions.concat(sources);
675
- if (!largestEntry || entry.value > largestEntry.value) {
674
+ sessionValue = entry.value;
675
+ sessionEntries = [entry];
676
+ sessionAttributions = sources;
676
677
  largestEntry = entry;
677
678
  }
678
- }
679
- maximumSessionValue = max(maximumSessionValue, sessionValue);
679
+ else {
680
+ sessionValue += entry.value;
681
+ sessionEntries.push(entry);
682
+ sessionAttributions = sessionAttributions.concat(sources);
683
+ if (!largestEntry || entry.value > largestEntry.value) {
684
+ largestEntry = entry;
685
+ }
686
+ }
687
+ maximumSessionValue = max(maximumSessionValue, sessionValue);
680
688
  }
681
689
  }
682
- function reset$1() {
690
+ function reset$2() {
683
691
  sessionValue = 0;
684
692
  sessionEntries = [];
685
693
  maximumSessionValue = 0;
@@ -711,7 +719,7 @@
711
719
  var slowestEntriesMap = {};
712
720
  // The total number of interactions recorded on the page
713
721
  var interactionCountEstimate = 0;
714
- function reset() {
722
+ function reset$1() {
715
723
  interactionCountEstimate = 0;
716
724
  slowestEntries = [];
717
725
  slowestEntriesMap = {};
@@ -808,6 +816,9 @@
808
816
  lcpEntry = entry;
809
817
  }
810
818
  }
819
+ function reset() {
820
+ lcpEntry = undefined;
821
+ }
811
822
  function getData() {
812
823
  if (!lcpEntry) {
813
824
  return undefined;
@@ -831,8 +842,14 @@
831
842
  };
832
843
  }
833
844
  }
845
+ var value = processTimeMetric(lcpEntry.startTime);
846
+ if (!shouldReportValue(value)) {
847
+ // It's possible the LCP entry we have occurred before the current page was initialised. In
848
+ // this case, we don't want to report the LCP value.
849
+ return undefined;
850
+ }
834
851
  return {
835
- value: processTimeMetric(lcpEntry.startTime),
852
+ value: value,
836
853
  subParts: subParts,
837
854
  attribution: lcpEntry.element
838
855
  ? {
@@ -846,7 +863,7 @@
846
863
  var ALL_ENTRIES = [];
847
864
  function observe(type, callback, options) {
848
865
  if (typeof PerformanceObserver === "function" &&
849
- PerformanceObserver.supportedEntryTypes.includes(type)) {
866
+ PerformanceObserver.supportedEntryTypes.includes(type)) {
850
867
  var po = new PerformanceObserver(function (list) {
851
868
  list.getEntries().forEach(function (entry) { return callback(entry); });
852
869
  });
@@ -1011,6 +1028,9 @@
1011
1028
  var gUid = refreshUniqueId(gSyncId); // cookie for this session ("Unique ID")
1012
1029
  var gCustomDataTimeout; // setTimeout timer for sending a Custom data beacon after onload
1013
1030
  var gMaxMeasureTimeout; // setTimeout timer for sending the beacon after a maximum measurement time
1031
+ // Storing the customer ID in a local variable makes it possible to run multiple instances of lux.js
1032
+ // on the same page.
1033
+ var _thisCustomerId = LUX.customerid;
1014
1034
  var initPostBeacon = function () {
1015
1035
  return new Beacon({
1016
1036
  config: globalConfig,
@@ -1031,7 +1051,6 @@
1031
1051
  };
1032
1052
  try {
1033
1053
  observe("longtask", processAndLogEntry);
1034
- observe("largest-contentful-paint", processAndLogEntry);
1035
1054
  observe("element", processAndLogEntry);
1036
1055
  observe("paint", processAndLogEntry);
1037
1056
  observe("largest-contentful-paint", function (entry) {
@@ -1083,13 +1102,6 @@
1083
1102
  catch (e) {
1084
1103
  logger.logEvent(LogEvent.PerformanceObserverError, [e]);
1085
1104
  }
1086
- /**
1087
- * Some values should only be reported if they are non-zero. The exception to this is when the page
1088
- * was prerendered or restored from BF cache
1089
- */
1090
- var shouldReportValue = function (value) {
1091
- return value > 0 || getPageRestoreTime() || wasPrerendered();
1092
- };
1093
1105
  if (_sample()) {
1094
1106
  logger.logEvent(LogEvent.SessionIsSampled, [globalConfig.samplerate]);
1095
1107
  }
@@ -1263,8 +1275,8 @@
1263
1275
  var endTime = typeof endMarkName === "number" ? endMarkName : msSincePageInit();
1264
1276
  var throwError = function (missingMark) {
1265
1277
  throw new DOMException("Failed to execute 'measure' on 'Performance': The mark '" +
1266
- missingMark +
1267
- "' does not exist");
1278
+ missingMark +
1279
+ "' does not exist");
1268
1280
  };
1269
1281
  if (typeof startMarkName === "string") {
1270
1282
  var startMark = _getMark(startMarkName);
@@ -1531,7 +1543,7 @@
1531
1543
  // Track how long it took lux.js to load via Resource Timing.
1532
1544
  function selfLoading() {
1533
1545
  var sLuxjs = "";
1534
- if (performance.getEntriesByName) {
1546
+ if (gbFirstPV && performance.getEntriesByName) {
1535
1547
  // Get the lux script URL (including querystring params).
1536
1548
  var aResources = performance.getEntriesByName(thisScript.src);
1537
1549
  if (aResources && aResources.length) {
@@ -1568,6 +1580,8 @@
1568
1580
  "";
1569
1581
  }
1570
1582
  }
1583
+ // How long data was collected before the beacon was sent
1584
+ sLuxjs += "m" + msSincePageInit();
1571
1585
  return sLuxjs;
1572
1586
  }
1573
1587
  // _clearIx
@@ -1632,6 +1646,11 @@
1632
1646
  _mark(START_MARK);
1633
1647
  }
1634
1648
  logger.logEvent(LogEvent.InitCalled);
1649
+ // This is an edge case where LUX.auto = true but LUX.init() has been called. In this case, the
1650
+ // POST beacon will not be sent automatically, so we need to send it here.
1651
+ if (globalConfig.auto && !beacon.isSent) {
1652
+ beacon.send();
1653
+ }
1635
1654
  // Clear all interactions from the previous "page".
1636
1655
  _clearIx();
1637
1656
  // Since we actively disable IX handlers, we re-add them each time.
@@ -1644,8 +1663,9 @@
1644
1663
  gbFirstPV = 0;
1645
1664
  gSyncId = createSyncId();
1646
1665
  gUid = refreshUniqueId(gSyncId);
1647
- reset$1();
1648
1666
  reset();
1667
+ reset$2();
1668
+ reset$1();
1649
1669
  nErrors = 0;
1650
1670
  gFirstInputDelay = undefined;
1651
1671
  beacon = initPostBeacon();
@@ -1676,9 +1696,9 @@
1676
1696
  !e.async &&
1677
1697
  !e.defer &&
1678
1698
  0 !== (e.compareDocumentPosition(lastViewportElem) & 4)) {
1679
- // If the script has a SRC and async is false and it occurs BEFORE the last viewport element,
1680
- // then increment the counter.
1681
- num++;
1699
+ // If the script has a SRC and async is false and it occurs BEFORE the last viewport element,
1700
+ // then increment the counter.
1701
+ num++;
1682
1702
  }
1683
1703
  }
1684
1704
  return num;
@@ -1697,7 +1717,7 @@
1697
1717
  "style" === e.as ||
1698
1718
  (typeof e.onload === "function" && e.media === "all")) ;
1699
1719
  else {
1700
- nBlocking++;
1720
+ nBlocking++;
1701
1721
  }
1702
1722
  }
1703
1723
  }
@@ -2167,7 +2187,8 @@
2167
2187
  var metricsQueryString =
2168
2188
  // only send Nav Timing and lux.js metrics on initial pageload (not for SPA page views)
2169
2189
  (gbNavSent ? "" : "&NT=" + getNavTiming()) +
2170
- (gbFirstPV ? "&LJS=" + sLuxjs : "") +
2190
+ "&LJS=" +
2191
+ sLuxjs +
2171
2192
  // Page Stats
2172
2193
  "&PS=ns" +
2173
2194
  numScripts() +
@@ -13,8 +13,8 @@ $gem-guide-border-width: 1px;
13
13
  @extend %govuk-list--bullet;
14
14
 
15
15
  li {
16
- @include govuk-font($size: 19);
17
16
  margin-bottom: $govuk-gutter-half;
17
+ @include govuk-font($size: 19);
18
18
  }
19
19
 
20
20
  p {
@@ -44,28 +44,28 @@ $gem-guide-border-width: 1px;
44
44
  }
45
45
 
46
46
  .component-violation {
47
- @include govuk-text-colour;
48
47
  border: 3px solid $govuk-error-colour;
49
48
  margin: 0 0 $govuk-gutter;
50
49
  padding: $govuk-gutter $govuk-gutter;
50
+ @include govuk-text-colour;
51
51
 
52
52
  .component-violation__title {
53
- @include govuk-font($size: 24, $weight: bold);
54
53
  margin: 0;
54
+ @include govuk-font($size: 24, $weight: bold);
55
55
  }
56
56
 
57
57
  .component-violation__link {
58
58
  display: block;
59
- @include govuk-font($size: 19, $weight: bold);
60
59
  color: $govuk-error-colour;
61
60
  margin: $govuk-gutter-half 0;
61
+ @include govuk-font($size: 19, $weight: bold);
62
62
  }
63
63
  }
64
64
 
65
65
  .component-doc-h2 {
66
+ margin: ($govuk-gutter * 1.5) 0 $govuk-gutter;
66
67
  @include govuk-text-colour;
67
68
  @include govuk-font($size: 27, $weight: bold);
68
- margin: ($govuk-gutter * 1.5) 0 $govuk-gutter;
69
69
 
70
70
  small {
71
71
  @include govuk-font($size: 16, $weight: bold);
@@ -73,8 +73,8 @@ $gem-guide-border-width: 1px;
73
73
  }
74
74
 
75
75
  .component-doc-h3 {
76
- @include govuk-text-colour;
77
76
  margin: $govuk-gutter 0 $govuk-gutter-half;
77
+ @include govuk-text-colour;
78
78
  @include govuk-font($size: 19, $weight: bold);
79
79
  }
80
80
 
@@ -149,9 +149,9 @@ $gem-guide-border-width: 1px;
149
149
 
150
150
  .component-guide-preview--violation,
151
151
  .component-guide-preview--warning {
152
- @include govuk-text-colour;
153
152
  margin-top: -$gem-guide-border-width;
154
153
 
154
+ @include govuk-text-colour;
155
155
  @include govuk-font($size: 19);
156
156
 
157
157
  &:empty {
@@ -185,13 +185,12 @@ $gem-guide-border-width: 1px;
185
185
  }
186
186
 
187
187
  &::before {
188
- @include govuk-font($size: 16);
189
188
  content: attr(data-content);
190
189
  position: absolute;
191
190
  top: 0;
192
191
  left: 0;
193
192
  padding: .2105em .7894em;
194
- font-weight: bold;
193
+ @include govuk-font($size: 16, $weight: bold);
195
194
  }
196
195
  }
197
196
 
@@ -217,9 +216,9 @@ $gem-guide-border-width: 1px;
217
216
  margin: 0 0 $govuk-gutter * 1.5;
218
217
 
219
218
  .example-title {
219
+ margin: $govuk-gutter-half 0;
220
220
  @include govuk-text-colour;
221
221
  @include govuk-font($size: 24, $weight: bold);
222
- margin: $govuk-gutter-half 0;
223
222
  }
224
223
 
225
224
  .example-title small {
@@ -508,8 +507,8 @@ $code-delete-bg: #fadddd;
508
507
 
509
508
  .component__application-name {
510
509
  display: block;
511
- @include govuk-font($size: 16);
512
510
  font-weight: normal;
511
+ @include govuk-font($size: 16);
513
512
  }
514
513
 
515
514
  .component__count {
@@ -31,7 +31,7 @@
31
31
  // Change the summary subheading size.
32
32
  .govuk-accordion__section-summary {
33
33
  @include govuk-typography-common;
34
- @include govuk-typography-responsive($size: 16, $important: true);
34
+ @include govuk-font-size($size: 16, $important: true);
35
35
  }
36
36
 
37
37
  // Hide the unusable "Show all" and "Show" sections.
@@ -26,9 +26,9 @@
26
26
  }
27
27
 
28
28
  .gem-c-action-link__link-wrapper {
29
- @include govuk-font(19, $weight: bold, $line-height: 1.3);
30
29
  display: table-cell;
31
30
  vertical-align: middle;
31
+ @include govuk-font(19, $weight: bold, $line-height: 1.3);
32
32
  }
33
33
 
34
34
  .gem-c-action-link__link {
@@ -73,10 +73,9 @@
73
73
  }
74
74
 
75
75
  .gem-c-action-link__subtext {
76
- @include govuk-font(19);
77
76
  display: block;
78
- font-weight: normal;
79
77
  color: inherit;
78
+ @include govuk-font(19);
80
79
 
81
80
  @include govuk-media-query($from: tablet) {
82
81
  position: relative;
@@ -10,9 +10,9 @@ $thumbnail-shadow-width: 0 2px 2px;
10
10
  $thumbnail-icon-border-colour: govuk-colour("mid-grey");
11
11
 
12
12
  .gem-c-attachment {
13
+ position: relative;
13
14
  @include govuk-font(19);
14
15
  @include govuk-clearfix;
15
- position: relative;
16
16
 
17
17
  .govuk-details {
18
18
  margin: govuk-spacing(3) 0;
@@ -51,8 +51,8 @@ $thumbnail-icon-border-colour: govuk-colour("mid-grey");
51
51
  }
52
52
 
53
53
  .gem-c-attachment__title {
54
- @include govuk-font($size: 27);
55
54
  margin: 0 0 govuk-spacing(3);
55
+ @include govuk-font($size: 27);
56
56
  }
57
57
 
58
58
  .gem-c-attachment__link {
@@ -60,9 +60,9 @@ $thumbnail-icon-border-colour: govuk-colour("mid-grey");
60
60
  }
61
61
 
62
62
  .gem-c-attachment__metadata {
63
- @include govuk-font($size: 19);
64
63
  margin: 0 0 govuk-spacing(3);
65
64
  color: $govuk-secondary-text-colour;
65
+ @include govuk-font($size: 19);
66
66
 
67
67
  &:last-of-type {
68
68
  margin-bottom: 0;