@nationalarchives/frontend 0.41.0 → 0.42.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 (162) hide show
  1. package/config/.htmlvalidate.json +2 -1
  2. package/nationalarchives/all+analytics.js +1 -1
  3. package/nationalarchives/all+analytics.js.map +1 -1
  4. package/nationalarchives/all+analytics.mjs +5 -3
  5. package/nationalarchives/all.css +1 -1
  6. package/nationalarchives/all.css.map +1 -1
  7. package/nationalarchives/all.js +1 -1
  8. package/nationalarchives/all.js.map +1 -1
  9. package/nationalarchives/all.mjs +44 -30
  10. package/nationalarchives/analytics.js +1 -1
  11. package/nationalarchives/analytics.js.map +1 -1
  12. package/nationalarchives/analytics.mjs +39 -21
  13. package/nationalarchives/components/accordion/accordion.css +1 -1
  14. package/nationalarchives/components/accordion/accordion.css.map +1 -1
  15. package/nationalarchives/components/accordion/accordion.js +1 -1
  16. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  17. package/nationalarchives/components/accordion/accordion.mjs +1 -1
  18. package/nationalarchives/components/back-link/back-link.css.map +1 -1
  19. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  20. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
  21. package/nationalarchives/components/breadcrumbs/breadcrumbs.mjs +2 -1
  22. package/nationalarchives/components/button/button.css +1 -1
  23. package/nationalarchives/components/button/button.css.map +1 -1
  24. package/nationalarchives/components/button/button.scss +2 -1
  25. package/nationalarchives/components/card/card.css +1 -1
  26. package/nationalarchives/components/card/card.css.map +1 -1
  27. package/nationalarchives/components/card/card.scss +4 -4
  28. package/nationalarchives/components/checkboxes/checkboxes.css +1 -1
  29. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  30. package/nationalarchives/components/checkboxes/checkboxes.scss +2 -2
  31. package/nationalarchives/components/checkboxes/fixtures.json +27 -0
  32. package/nationalarchives/components/checkboxes/macro-options.json +6 -0
  33. package/nationalarchives/components/checkboxes/template.njk +2 -2
  34. package/nationalarchives/components/code-block/code-block.css +1 -1
  35. package/nationalarchives/components/code-block/code-block.css.map +1 -1
  36. package/nationalarchives/components/code-block/code-block.js +1 -1
  37. package/nationalarchives/components/code-block/code-block.js.map +1 -1
  38. package/nationalarchives/components/code-block/code-block.mjs +2 -2
  39. package/nationalarchives/components/code-block/code-block.scss +6 -6
  40. package/nationalarchives/components/code-block/fixtures.json +6 -6
  41. package/nationalarchives/components/code-block/macro-options.json +1 -1
  42. package/nationalarchives/components/code-block/template.njk +12 -12
  43. package/nationalarchives/components/compound-filters/compound-filters.css +1 -1
  44. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  45. package/nationalarchives/components/compound-filters/compound-filters.scss +2 -2
  46. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  47. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  48. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  49. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  50. package/nationalarchives/components/date-input/date-input.js +1 -1
  51. package/nationalarchives/components/date-input/date-input.js.map +1 -1
  52. package/nationalarchives/components/date-input/date-input.mjs +5 -2
  53. package/nationalarchives/components/details/analytics.js +1 -1
  54. package/nationalarchives/components/details/details.css.map +1 -1
  55. package/nationalarchives/components/details/macro-options.json +1 -1
  56. package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
  57. package/nationalarchives/components/error-summary/error-summary.js +1 -1
  58. package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
  59. package/nationalarchives/components/error-summary/error-summary.mjs +19 -15
  60. package/nationalarchives/components/fieldset/fieldset.css.map +1 -1
  61. package/nationalarchives/components/file-input/analytics.js +3 -3
  62. package/nationalarchives/components/file-input/file-input.css.map +1 -1
  63. package/nationalarchives/components/file-input/file-input.js +1 -1
  64. package/nationalarchives/components/file-input/file-input.js.map +1 -1
  65. package/nationalarchives/components/file-input/file-input.mjs +33 -17
  66. package/nationalarchives/components/files-list/files-list.css +1 -1
  67. package/nationalarchives/components/files-list/files-list.css.map +1 -1
  68. package/nationalarchives/components/files-list/files-list.scss +8 -8
  69. package/nationalarchives/components/footer/fixtures.json +2 -2
  70. package/nationalarchives/components/footer/footer.css.map +1 -1
  71. package/nationalarchives/components/footer/footer.js +1 -1
  72. package/nationalarchives/components/footer/footer.js.map +1 -1
  73. package/nationalarchives/components/footer/footer.mjs +2 -2
  74. package/nationalarchives/components/footer/template.njk +3 -3
  75. package/nationalarchives/components/gallery/analytics.js +1 -0
  76. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  77. package/nationalarchives/components/gallery/gallery.js +1 -1
  78. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  79. package/nationalarchives/components/gallery/gallery.mjs +16 -4
  80. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  81. package/nationalarchives/components/global-header/global-header.js +1 -1
  82. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  83. package/nationalarchives/components/global-header/global-header.mjs +11 -11
  84. package/nationalarchives/components/global-header/global-header.scss +1 -0
  85. package/nationalarchives/components/header/header.css.map +1 -1
  86. package/nationalarchives/components/header/header.js +1 -1
  87. package/nationalarchives/components/header/header.js.map +1 -1
  88. package/nationalarchives/components/header/header.mjs +11 -11
  89. package/nationalarchives/components/hero/hero.css.map +1 -1
  90. package/nationalarchives/components/index-grid/index-grid.css +1 -1
  91. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  92. package/nationalarchives/components/index-grid/index-grid.scss +3 -3
  93. package/nationalarchives/components/pagination/pagination.css.map +1 -1
  94. package/nationalarchives/components/panel/panel.css.map +1 -1
  95. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  96. package/nationalarchives/components/picture/picture.css.map +1 -1
  97. package/nationalarchives/components/picture/picture.js +1 -1
  98. package/nationalarchives/components/picture/picture.js.map +1 -1
  99. package/nationalarchives/components/picture/picture.mjs +4 -2
  100. package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
  101. package/nationalarchives/components/radios/fixtures.json +27 -0
  102. package/nationalarchives/components/radios/macro-options.json +7 -1
  103. package/nationalarchives/components/radios/radios.css +1 -1
  104. package/nationalarchives/components/radios/radios.css.map +1 -1
  105. package/nationalarchives/components/radios/radios.scss +2 -2
  106. package/nationalarchives/components/radios/template.njk +2 -2
  107. package/nationalarchives/components/search-field/analytics.js +0 -1
  108. package/nationalarchives/components/search-field/search-field.css +1 -1
  109. package/nationalarchives/components/search-field/search-field.css.map +1 -1
  110. package/nationalarchives/components/search-field/search-field.scss +2 -2
  111. package/nationalarchives/components/secondary-navigation/secondary-navigation.css +1 -1
  112. package/nationalarchives/components/secondary-navigation/secondary-navigation.css.map +1 -1
  113. package/nationalarchives/components/secondary-navigation/secondary-navigation.scss +4 -3
  114. package/nationalarchives/components/sidebar/fixtures.json +69 -0
  115. package/nationalarchives/components/sidebar/macro-options.json +7 -0
  116. package/nationalarchives/components/sidebar/sidebar.css +1 -1
  117. package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
  118. package/nationalarchives/components/sidebar/sidebar.js +2 -0
  119. package/nationalarchives/components/sidebar/sidebar.js.map +1 -0
  120. package/nationalarchives/components/sidebar/sidebar.mjs +97 -0
  121. package/nationalarchives/components/sidebar/sidebar.scss +2 -2
  122. package/nationalarchives/components/sidebar/template.njk +1 -1
  123. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  124. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  125. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  126. package/nationalarchives/components/tabs/tabs.js.map +1 -1
  127. package/nationalarchives/components/tabs/tabs.mjs +11 -3
  128. package/nationalarchives/components/text-input/analytics.js +1 -1
  129. package/nationalarchives/components/text-input/fixtures.json +14 -2
  130. package/nationalarchives/components/text-input/template.njk +1 -1
  131. package/nationalarchives/components/textarea/analytics.js +0 -1
  132. package/nationalarchives/components/textarea/textarea.css +1 -1
  133. package/nationalarchives/components/textarea/textarea.css.map +1 -1
  134. package/nationalarchives/components/textarea/textarea.js +1 -1
  135. package/nationalarchives/components/textarea/textarea.js.map +1 -1
  136. package/nationalarchives/components/textarea/textarea.mjs +19 -13
  137. package/nationalarchives/components/textarea/textarea.scss +2 -2
  138. package/nationalarchives/components/warning/warning.css +1 -1
  139. package/nationalarchives/components/warning/warning.css.map +1 -1
  140. package/nationalarchives/components/warning/warning.scss +2 -2
  141. package/nationalarchives/error-page.css +1 -1
  142. package/nationalarchives/error-page.css.map +1 -1
  143. package/nationalarchives/lib/analytics-helpers.mjs +21 -19
  144. package/nationalarchives/lib/cookie-events.mjs +70 -0
  145. package/nationalarchives/lib/cookies.mjs +54 -92
  146. package/nationalarchives/lib/helpers.mjs +7 -13
  147. package/nationalarchives/lib/uuid.mjs +5 -3
  148. package/nationalarchives/prototype-kit.css +1 -1
  149. package/nationalarchives/prototype-kit.css.map +1 -1
  150. package/nationalarchives/templates/fixtures.json +1 -1
  151. package/nationalarchives/templates/layouts/email.njk +2 -2
  152. package/nationalarchives/templates/prototype-kit/plain-with-sidebar.njk +74 -0
  153. package/nationalarchives/templates/prototype-kit/plain.njk +1 -1
  154. package/nationalarchives/tools/_grid.scss +3 -0
  155. package/nationalarchives/tools/_typography.scss +1 -1
  156. package/nationalarchives/utilities/reset/_index.scss +4 -0
  157. package/nationalarchives/utilities/tables/_index.scss +6 -5
  158. package/nationalarchives/utilities/typography/_index.scss +1 -0
  159. package/package.json +18 -22
  160. package/config/.eslintrc.js +0 -25
  161. package/config/stylelint.config.js +0 -244
  162. package/nationalarchives/templates/prototype-kit/index-grid.njk +0 -146
@@ -1,63 +1,9 @@
1
- window.TNAFrontendCookies = window.TNAFrontendCookies || null;
2
- window.TNAFrontendCookieEvents = window.TNAFrontendCookieEvents || null;
1
+ /* eslint-disable max-lines */
2
+ /* eslint-disable no-console */
3
3
 
4
- export class CookieEventHandler {
5
- events = {};
6
- oneTimeEvents = {};
7
- debug = false;
4
+ import { CookieEventHandler } from "./cookie-events.mjs";
8
5
 
9
- constructor(debug = false) {
10
- this.debug = debug;
11
- if (window.TNAFrontendCookieEvents) {
12
- this.log("Using existing TNAFrontendCookieEvents instance");
13
- return window.TNAFrontendCookieEvents;
14
- }
15
- window.TNAFrontendCookieEvents = this;
16
- }
17
-
18
- log(...args) {
19
- if (this.debug) {
20
- console.log("[TNA Frontend Cookie Events]", ...args);
21
- }
22
- }
23
-
24
- /**
25
- * Add an event listener.
26
- * @param {String} event - The event to add a listener for.
27
- * @param {Function} callback - The callback function to call when the event is triggered.
28
- */
29
- on(event, callback) {
30
- if (!Object.hasOwn(this.events, event)) {
31
- this.events[event] = [];
32
- }
33
- this.events[event] = [...this.events[event], callback];
34
- }
35
-
36
- once(event, callback) {
37
- if (!Object.hasOwn(this.oneTimeEvents, event)) {
38
- this.oneTimeEvents[event] = [];
39
- }
40
- this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];
41
- }
42
-
43
- /** @protected */
44
- trigger(event, data = {}) {
45
- if (Object.hasOwn(this.events, event)) {
46
- this.log(`Triggering event: ${event}`, data);
47
- this.events[event].forEach((eventToTrigger) =>
48
- eventToTrigger.call(this, data),
49
- );
50
- }
51
- if (Object.hasOwn(this.oneTimeEvents, event)) {
52
- this.log(`Triggering one-time event: ${event}`, data);
53
- for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {
54
- const eventToTrigger = this.oneTimeEvents[event][i];
55
- eventToTrigger.call(this, data);
56
- this.oneTimeEvents[event].splice(i, 1);
57
- }
58
- }
59
- }
60
- }
6
+ window.TNAFrontendCookies ||= null;
61
7
 
62
8
  const tnaCookiePolicies = ["usage", "settings", "marketing", "essential"];
63
9
 
@@ -106,39 +52,42 @@ export default class Cookies {
106
52
  noInit = false,
107
53
  } = options;
108
54
  if (!newInstance && window.TNAFrontendCookies) {
55
+ /* eslint-disable-next-line no-constructor-return */
109
56
  return window.TNAFrontendCookies;
110
57
  }
111
- if (defaultDomain === undefined) {
58
+ if (defaultDomain) {
59
+ this.defaultDomain = defaultDomain;
60
+ } else {
112
61
  this.defaultDomain =
113
62
  document.documentElement.dataset.tnaCookiesDomain ||
114
63
  window.location.hostname;
115
- } else {
116
- this.defaultDomain = defaultDomain;
117
64
  }
118
- if (defaultPath === undefined) {
119
- this.defaultPath = document.documentElement.dataset.tnaCookiesPath || "/";
120
- } else {
65
+ if (defaultPath) {
121
66
  this.defaultPath = defaultPath;
67
+ } else {
68
+ this.defaultPath = document.documentElement.dataset.tnaCookiesPath || "/";
122
69
  }
123
- if (secure === undefined) {
70
+ if (secure) {
71
+ this.secure = secure;
72
+ } else {
124
73
  this.secure =
125
74
  document.documentElement.dataset.tnaCookiesInsecure !== "true";
126
- } else {
127
- this.secure = secure;
128
75
  }
129
- if (policiesKey === undefined) {
76
+ if (policiesKey) {
77
+ this.policiesKey = policiesKey;
78
+ } else {
130
79
  this.policiesKey =
131
80
  document.documentElement.dataset.tnaCookiesPoliciesKey ||
132
81
  "cookies_policy";
133
- } else {
134
- this.policiesKey = policiesKey;
135
82
  }
136
- if (defaultAge === undefined) {
137
- this.defaultAge =
138
- parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||
139
- 31536000; // 365 days;
140
- } else {
83
+ if (defaultAge) {
141
84
  this.defaultAge = defaultAge;
85
+ } else {
86
+ /* eslint-disable-next-line no-magic-numbers */
87
+ const secondsInAYear = 365 * 24 * 60 * 60;
88
+ this.defaultAge =
89
+ parseInt(document.documentElement.dataset.tnaCookiesDefaultAge, 10) ||
90
+ secondsInAYear;
142
91
  }
143
92
  this.events = new CookieEventHandler(this.debug);
144
93
  this.policiesCorrectOnInit =
@@ -173,7 +122,7 @@ export default class Cookies {
173
122
  .filter((policy) => tnaCookiePolicies.includes(policy))
174
123
  .map((policy) => [policy, existingPolicies[policy]]),
175
124
  );
176
- if (Object.keys(filteredExistingPolicies).length > 0) {
125
+ if (Object.keys(filteredExistingPolicies).length) {
177
126
  this.log("Filtered existing policies:", filteredExistingPolicies);
178
127
  }
179
128
  this.savePolicies({
@@ -197,15 +146,17 @@ export default class Cookies {
197
146
  }
198
147
 
199
148
  /** @protected */
149
+ /* eslint-disable-next-line class-methods-use-this */
200
150
  get all() {
201
151
  const deserialised = {};
202
152
  document.cookie
203
153
  .split("; ")
204
- .filter((x) => x)
154
+ .filter((cookie) => cookie.trim() !== "")
205
155
  .forEach((cookie) => {
206
156
  const parts = cookie.trim().split("=");
207
- if (parts[0]) {
208
- deserialised[parts[0]] = parts[1];
157
+ const [key, value] = parts;
158
+ if (key) {
159
+ deserialised[key] = decodeURIComponent(value || "");
209
160
  }
210
161
  });
211
162
  return deserialised;
@@ -215,7 +166,8 @@ export default class Cookies {
215
166
  get policies() {
216
167
  try {
217
168
  return JSON.parse(this.get(this.policiesKey) || "{}");
218
- } catch (e) {
169
+ // eslint-disable-next-line no-unused-vars
170
+ } catch (error) {
219
171
  return {};
220
172
  }
221
173
  }
@@ -236,16 +188,19 @@ export default class Cookies {
236
188
  * @returns
237
189
  */
238
190
  hasValue(key, value) {
239
- return this.get(key) == value;
191
+ return this.get(key) === value;
240
192
  }
241
193
 
242
194
  /**
243
195
  * Get a cookie.
244
196
  * @param {String} key - The cookie name.
245
- * @returns {String|Number|Boolean}
197
+ * @returns {String|Number|Boolean|null}
246
198
  */
247
199
  get(key) {
248
- return this.exists(key) ? decodeURIComponent(this.all[key]) : null;
200
+ if (this.exists(key)) {
201
+ return decodeURIComponent(this.all[key]);
202
+ }
203
+ return null;
249
204
  }
250
205
 
251
206
  /**
@@ -273,9 +228,15 @@ export default class Cookies {
273
228
  if (!key) {
274
229
  return;
275
230
  }
276
- const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : ""}${
277
- secure ? "; secure" : ""
278
- }`;
231
+ let secureString = "";
232
+ if (secure) {
233
+ secureString = "; secure";
234
+ }
235
+ let sessionString = "";
236
+ if (!session) {
237
+ sessionString = `; max-age=${maxAge}`;
238
+ }
239
+ const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${sessionString}${secureString}`;
279
240
  document.cookie = cookie;
280
241
  this.log("Set cookie:", {
281
242
  key,
@@ -307,7 +268,7 @@ export default class Cookies {
307
268
  * @param {String} [path=/] - The path to the cookie is registered on.
308
269
  */
309
270
  delete(key, path = "/", domain = this.defaultDomain) {
310
- const options = { maxAge: -1, path, domain: domain || undefined };
271
+ const options = { maxAge: -1, path, domain: domain || this.defaultDomain };
311
272
  this.set(key, "", options);
312
273
  this.log("Deleted cookie:", { key, path, domain, ...options });
313
274
  this.events.trigger("deleteCookie", { key, ...options });
@@ -371,7 +332,7 @@ export default class Cookies {
371
332
  acceptAllPolicies() {
372
333
  this.log("Accepting all policies");
373
334
  const allPolicies = Object.fromEntries(
374
- Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),
335
+ Object.keys(this.policies).map((key) => [key.toLowerCase(), true]),
375
336
  );
376
337
  this.savePolicies(allPolicies);
377
338
  this.events.trigger("acceptAllPolicies");
@@ -385,7 +346,7 @@ export default class Cookies {
385
346
  this.log("Rejecting all policies");
386
347
  const allPolicies = {
387
348
  ...Object.fromEntries(
388
- Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),
349
+ Object.keys(this.policies).map((key) => [key.toLowerCase(), false]),
389
350
  ),
390
351
  essential: true,
391
352
  };
@@ -409,9 +370,10 @@ export default class Cookies {
409
370
  * @returns {Boolean}
410
371
  */
411
372
  isPolicyAccepted(policy) {
412
- return Object.hasOwn(this.policies, policy)
413
- ? this.policies[policy] === true
414
- : null;
373
+ if (Object.hasOwn(this.policies, policy)) {
374
+ return this.policies[policy] === true;
375
+ }
376
+ return null;
415
377
  }
416
378
 
417
379
  /**
@@ -7,10 +7,10 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
7
7
  throw new Error("No datetime provided");
8
8
  }
9
9
  const isDateTime =
10
- /^\d{4}(-\d{2}){2}(T| )\d{2}(:\d{2}){1,2}(\.\d+)?(Z|((\+|-)\d{2}:\d{2}))?$/.test(
10
+ /^\d{4}(?:-\d{2}){2}(?:T| )\d{2}(?::\d{2}){1,2}(?:\.\d+)?(?:Z|(?:[+-]\d{2}:\d{2}))?$/u.test(
11
11
  datetime,
12
12
  );
13
- const isDate = /^\d{4}(-\d{2}){2}$/.test(datetime);
13
+ const isDate = /^\d{4}(?:-\d{2}){2}$/u.test(datetime);
14
14
  if (!isDateTime && !isDate) {
15
15
  throw new Error("Invalid datetime provided");
16
16
  }
@@ -23,7 +23,6 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
23
23
  const dayString = date.toLocaleDateString("en-GB", {
24
24
  weekday: "long",
25
25
  });
26
-
27
26
  const dateString = date.toLocaleDateString("en-GB", {
28
27
  day: "numeric",
29
28
  month: "long",
@@ -43,9 +42,8 @@ export const iso8601ToPrettyDatetime = (dateStr) => {
43
42
  });
44
43
  }
45
44
  return `${dayString} ${dateString}, ${timeString}`;
46
- } else {
47
- return `${dayString} ${dateString}`;
48
45
  }
46
+ return `${dayString} ${dateString}`;
49
47
  };
50
48
 
51
49
  /*
@@ -91,20 +89,16 @@ export const updateTimeElement = ($el) => {
91
89
  $el.setAttribute("title", $el.textContent);
92
90
  $el.textContent = prettyDatetime;
93
91
  }
94
- } catch (e) {
92
+ // eslint-disable-next-line no-unused-vars
93
+ } catch (error) {
95
94
  // Do nothing if the datetime is invalid or not provided
96
95
  }
97
96
  };
98
97
 
99
98
  export const checkTableForScroll = ($tableWrapper) => {
100
- const isUninitialised = !(
101
- $tableWrapper.dataset.tableScrollInitialised === "true"
102
- );
103
99
  const $caption = $tableWrapper.querySelector("caption");
104
- if (isUninitialised) {
105
- if (!$caption) {
106
- console.warn("Missing <caption> element on table", $tableWrapper);
107
- } else if (!$caption.id) {
100
+ if (!($tableWrapper.dataset.tableScrollInitialised === "true")) {
101
+ if ($caption && !$caption.id) {
108
102
  $caption.id = `table-caption-${uuidv4()}`;
109
103
  }
110
104
  $tableWrapper.dataset.tableScrollInitialised = "true";
@@ -1,8 +1,10 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ /* eslint-disable no-bitwise */
1
3
  const uuidv4 = () =>
2
- ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
4
+ ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>
3
5
  (
4
- c ^
5
- (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
6
+ char ^
7
+ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))
6
8
  ).toString(16),
7
9
  );
8
10