@nationalarchives/frontend 0.1.41 → 0.1.43

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 (214) hide show
  1. package/nationalarchives/all.css +1 -1
  2. package/nationalarchives/all.css.map +1 -1
  3. package/nationalarchives/all.js +1 -1
  4. package/nationalarchives/all.js.map +1 -1
  5. package/nationalarchives/all.mjs +18 -0
  6. package/nationalarchives/analytics.js +2 -0
  7. package/nationalarchives/analytics.js.map +1 -0
  8. package/nationalarchives/analytics.mjs +281 -0
  9. package/nationalarchives/components/_index.scss +3 -1
  10. package/nationalarchives/components/breadcrumbs/analytics.js +17 -0
  11. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  12. package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +3 -1
  13. package/nationalarchives/components/breadcrumbs/fixtures.json +69 -6
  14. package/nationalarchives/components/breadcrumbs/macro-options.json +12 -6
  15. package/nationalarchives/components/breadcrumbs/template.njk +12 -4
  16. package/nationalarchives/components/button/_index.scss +1 -0
  17. package/nationalarchives/components/button/button-group.stories.js +122 -0
  18. package/nationalarchives/components/button/button.css +1 -1
  19. package/nationalarchives/components/button/button.css.map +1 -1
  20. package/nationalarchives/components/button/button.scss +5 -8
  21. package/nationalarchives/components/button/button.stories.js +36 -38
  22. package/nationalarchives/components/button/fixtures.json +5 -10
  23. package/nationalarchives/components/button/template.njk +11 -10
  24. package/nationalarchives/components/card/card.css +1 -1
  25. package/nationalarchives/components/card/card.css.map +1 -1
  26. package/nationalarchives/components/card/card.scss +6 -0
  27. package/nationalarchives/components/card/card.stories.js +11 -0
  28. package/nationalarchives/components/card/fixtures.json +17 -34
  29. package/nationalarchives/components/checkboxes/analytics.js +25 -0
  30. package/nationalarchives/components/checkboxes/checkboxes.css +1 -1
  31. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  32. package/nationalarchives/components/checkboxes/checkboxes.njk +12 -0
  33. package/nationalarchives/components/checkboxes/checkboxes.scss +1 -0
  34. package/nationalarchives/components/checkboxes/fixtures.json +6 -12
  35. package/nationalarchives/components/checkboxes/template.njk +10 -7
  36. package/nationalarchives/components/compound-filters/compound-filters.css +1 -1
  37. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  38. package/nationalarchives/components/compound-filters/compound-filters.scss +2 -0
  39. package/nationalarchives/components/compound-filters/fixtures.json +1 -2
  40. package/nationalarchives/components/compound-filters/template.njk +1 -1
  41. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  42. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  43. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  44. package/nationalarchives/components/cookie-banner/fixtures.json +10 -20
  45. package/nationalarchives/components/date-input/date-input.css +1 -1
  46. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  47. package/nationalarchives/components/date-input/fixtures.json +5 -10
  48. package/nationalarchives/components/date-input/template.njk +9 -9
  49. package/nationalarchives/components/date-search/date-search.css +1 -1
  50. package/nationalarchives/components/date-search/date-search.css.map +1 -1
  51. package/nationalarchives/components/date-search/date-search.njk +7 -0
  52. package/nationalarchives/components/date-search/fixtures.json +6 -12
  53. package/nationalarchives/components/date-search/template.njk +6 -7
  54. package/nationalarchives/components/error-summary/_index.scss +1 -0
  55. package/nationalarchives/components/error-summary/error-summary.css +1 -0
  56. package/nationalarchives/components/error-summary/error-summary.css.map +1 -0
  57. package/nationalarchives/components/error-summary/error-summary.js +2 -0
  58. package/nationalarchives/components/error-summary/error-summary.js.map +1 -0
  59. package/nationalarchives/components/error-summary/error-summary.mjs +51 -0
  60. package/nationalarchives/components/error-summary/error-summary.scss +39 -0
  61. package/nationalarchives/components/error-summary/error-summary.stories.js +59 -0
  62. package/nationalarchives/components/error-summary/fixtures.json +24 -0
  63. package/nationalarchives/components/error-summary/macro-options.json +52 -0
  64. package/nationalarchives/components/error-summary/macro.njk +3 -0
  65. package/nationalarchives/components/error-summary/template.njk +15 -0
  66. package/nationalarchives/components/featured-records/featured-records.css +1 -1
  67. package/nationalarchives/components/featured-records/featured-records.css.map +1 -1
  68. package/nationalarchives/components/featured-records/featured-records.scss +1 -1
  69. package/nationalarchives/components/featured-records/fixtures.json +2 -4
  70. package/nationalarchives/components/footer/analytics.js +97 -0
  71. package/nationalarchives/components/footer/fixtures.json +8 -15
  72. package/nationalarchives/components/footer/footer.css +1 -1
  73. package/nationalarchives/components/footer/footer.css.map +1 -1
  74. package/nationalarchives/components/footer/footer.scss +4 -2
  75. package/nationalarchives/components/footer/footer.stories.js +5 -11
  76. package/nationalarchives/components/footer/template.njk +13 -10
  77. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  78. package/nationalarchives/components/global-header/analytics.js +57 -0
  79. package/nationalarchives/components/global-header/fixtures.json +1 -2
  80. package/nationalarchives/components/global-header/global-header.css +1 -1
  81. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  82. package/nationalarchives/components/global-header/global-header.js +1 -1
  83. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  84. package/nationalarchives/components/global-header/global-header.mjs +40 -79
  85. package/nationalarchives/components/global-header/global-header.scss +9 -6
  86. package/nationalarchives/components/global-header/global-header.stories.js +32 -20
  87. package/nationalarchives/components/global-header/macro-options.json +12 -0
  88. package/nationalarchives/components/global-header/template.njk +7 -7
  89. package/nationalarchives/components/grid/fixtures.json +13 -26
  90. package/nationalarchives/components/grid/grid.css +1 -1
  91. package/nationalarchives/components/grid/grid.css.map +1 -1
  92. package/nationalarchives/components/grid/grid.scss +0 -1
  93. package/nationalarchives/components/header/analytics.js +18 -0
  94. package/nationalarchives/components/header/fixtures.json +1 -2
  95. package/nationalarchives/components/header/header.css +1 -1
  96. package/nationalarchives/components/header/header.css.map +1 -1
  97. package/nationalarchives/components/header/header.js +1 -1
  98. package/nationalarchives/components/header/header.js.map +1 -1
  99. package/nationalarchives/components/header/header.mjs +32 -41
  100. package/nationalarchives/components/header/header.scss +3 -2
  101. package/nationalarchives/components/header/macro-options.json +6 -0
  102. package/nationalarchives/components/header/template.njk +6 -6
  103. package/nationalarchives/components/hero/analytics.js +26 -0
  104. package/nationalarchives/components/hero/fixtures.json +12 -24
  105. package/nationalarchives/components/hero/hero.css +1 -1
  106. package/nationalarchives/components/hero/hero.css.map +1 -1
  107. package/nationalarchives/components/hero/hero.scss +1 -1
  108. package/nationalarchives/components/index-grid/fixtures.json +8 -16
  109. package/nationalarchives/components/index-grid/index-grid.css +1 -1
  110. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  111. package/nationalarchives/components/message/fixtures.json +1 -2
  112. package/nationalarchives/components/message/message.css +1 -1
  113. package/nationalarchives/components/message/message.css.map +1 -1
  114. package/nationalarchives/components/message/message.scss +2 -3
  115. package/nationalarchives/components/message/phase-banner.stories.js +1 -1
  116. package/nationalarchives/components/pagination/fixtures.json +1 -2
  117. package/nationalarchives/components/pagination/macro-options.json +6 -0
  118. package/nationalarchives/components/pagination/pagination.stories.js +44 -0
  119. package/nationalarchives/components/pagination/template.njk +4 -1
  120. package/nationalarchives/components/phase-banner/fixtures.json +4 -8
  121. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  122. package/nationalarchives/components/picture/analytics.js +30 -0
  123. package/nationalarchives/components/picture/fixtures.json +5 -10
  124. package/nationalarchives/components/picture/picture.css.map +1 -1
  125. package/nationalarchives/components/quick-filters/_index.scss +1 -0
  126. package/nationalarchives/components/quick-filters/fixtures.json +51 -0
  127. package/nationalarchives/components/{filters → quick-filters}/macro-options.json +2 -2
  128. package/nationalarchives/components/quick-filters/macro.njk +3 -0
  129. package/nationalarchives/components/quick-filters/quick-filters.css +1 -0
  130. package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -0
  131. package/nationalarchives/components/{filters/filters.scss → quick-filters/quick-filters.scss} +10 -8
  132. package/nationalarchives/components/{filters/filters.stories.js → quick-filters/quick-filters.stories.js} +2 -2
  133. package/nationalarchives/components/quick-filters/template.njk +8 -0
  134. package/nationalarchives/components/radios/analytics.js +25 -0
  135. package/nationalarchives/components/radios/fixtures.json +6 -12
  136. package/nationalarchives/components/radios/radios.css +1 -1
  137. package/nationalarchives/components/radios/radios.css.map +1 -1
  138. package/nationalarchives/components/radios/radios.njk +12 -0
  139. package/nationalarchives/components/radios/template.njk +6 -13
  140. package/nationalarchives/components/search-field/analytics.js +22 -0
  141. package/nationalarchives/components/search-field/fixtures.json +3 -6
  142. package/nationalarchives/components/search-field/search-field.css +1 -1
  143. package/nationalarchives/components/search-field/search-field.css.map +1 -1
  144. package/nationalarchives/components/search-field/search-field.scss +7 -2
  145. package/nationalarchives/components/search-field/template.njk +4 -4
  146. package/nationalarchives/components/search-filters/_index.scss +1 -0
  147. package/nationalarchives/components/search-filters/fixtures.json +16 -0
  148. package/nationalarchives/components/search-filters/macro-options.json +39 -0
  149. package/nationalarchives/components/search-filters/macro.njk +3 -0
  150. package/nationalarchives/components/search-filters/search-filters.css +1 -0
  151. package/nationalarchives/components/search-filters/search-filters.css.map +1 -0
  152. package/nationalarchives/components/search-filters/search-filters.js +2 -0
  153. package/nationalarchives/components/search-filters/search-filters.js.map +1 -0
  154. package/nationalarchives/components/search-filters/search-filters.mjs +67 -0
  155. package/nationalarchives/components/search-filters/search-filters.scss +163 -0
  156. package/nationalarchives/components/search-filters/search-filters.stories.js +207 -0
  157. package/nationalarchives/components/search-filters/template.njk +107 -0
  158. package/nationalarchives/components/select/fixtures.json +6 -12
  159. package/nationalarchives/components/select/select.css +1 -1
  160. package/nationalarchives/components/select/select.css.map +1 -1
  161. package/nationalarchives/components/select/select.scss +1 -1
  162. package/nationalarchives/components/select/template.njk +4 -4
  163. package/nationalarchives/components/sensitive-image/fixtures.json +3 -6
  164. package/nationalarchives/components/skip-link/fixtures.json +1 -2
  165. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  166. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  167. package/nationalarchives/components/skip-link/skip-link.scss +1 -1
  168. package/nationalarchives/components/tabs/fixtures.json +1 -2
  169. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  170. package/nationalarchives/components/text-input/analytics.js +23 -0
  171. package/nationalarchives/components/text-input/fixtures.json +6 -12
  172. package/nationalarchives/components/text-input/template.njk +6 -10
  173. package/nationalarchives/components/text-input/text-input.css +1 -1
  174. package/nationalarchives/components/text-input/text-input.css.map +1 -1
  175. package/nationalarchives/components/text-input/text-input.njk +10 -0
  176. package/nationalarchives/components/text-input/text-input.scss +1 -1
  177. package/nationalarchives/components/textarea/analytics.js +23 -0
  178. package/nationalarchives/components/textarea/fixtures.json +6 -12
  179. package/nationalarchives/components/textarea/template.njk +5 -5
  180. package/nationalarchives/components/textarea/textarea.css +1 -1
  181. package/nationalarchives/components/textarea/textarea.css.map +1 -1
  182. package/nationalarchives/components/textarea/textarea.scss +1 -1
  183. package/nationalarchives/global-header-package.css +1 -1
  184. package/nationalarchives/global-header-package.css.map +1 -1
  185. package/nationalarchives/global-header-package.scss +4 -6
  186. package/nationalarchives/lib/analytics-helpers.mjs +68 -0
  187. package/nationalarchives/lib/cookies.mjs +59 -35
  188. package/nationalarchives/prototype-kit.css +1 -1
  189. package/nationalarchives/prototype-kit.css.map +1 -1
  190. package/nationalarchives/stories/utilities/colour-schemes/colour-themes.stories.js +49 -22
  191. package/nationalarchives/stories/utilities/forms/forms.mdx +6 -6
  192. package/nationalarchives/stories/utilities/tables/tables.stories.js +30 -28
  193. package/nationalarchives/tests/analytics.test.js +11 -0
  194. package/nationalarchives/tests/cookies.test.js +21 -0
  195. package/nationalarchives/tests/uuid.test.js +0 -6
  196. package/nationalarchives/tools/_a11y.scss +11 -2
  197. package/nationalarchives/tools/_colour.scss +47 -14
  198. package/nationalarchives/utilities/_a11y.scss +4 -0
  199. package/nationalarchives/utilities/_forms.scss +7 -1
  200. package/nationalarchives/utilities/_global.scss +3 -1
  201. package/nationalarchives/utilities/_reset.scss +5 -2
  202. package/nationalarchives/utilities/_tables.scss +23 -6
  203. package/nationalarchives/utilities/_typography.scss +5 -21
  204. package/nationalarchives/variables/_a11y.scss +2 -0
  205. package/nationalarchives/variables/_colour.scss +2 -0
  206. package/nationalarchives/variables/_forms.scss +1 -1
  207. package/nationalarchives/variables/_index.scss +1 -0
  208. package/package.json +2 -2
  209. package/nationalarchives/components/filters/_index.scss +0 -1
  210. package/nationalarchives/components/filters/filters.css +0 -1
  211. package/nationalarchives/components/filters/filters.css.map +0 -1
  212. package/nationalarchives/components/filters/fixtures.json +0 -51
  213. package/nationalarchives/components/filters/macro.njk +0 -3
  214. package/nationalarchives/components/filters/template.njk +0 -8
@@ -1,5 +1,5 @@
1
1
  // @use "variables/assets";
2
- @use "variables/grid" with (
2
+ @use "variables/grid" as gridVars with (
3
3
  $largest-container-width: 1270px,
4
4
  $gutter-width: 30px,
5
5
  $gutter-width-tiny: 15px
@@ -9,7 +9,10 @@
9
9
  @use "tools/colour";
10
10
  @use "tools/typography";
11
11
 
12
+ @use "utilities/colour" as colourUtils;
13
+
12
14
  @use "components/global-header";
15
+ @use "components/grid";
13
16
  @use "components/footer";
14
17
 
15
18
  .tna-template {
@@ -94,8 +97,3 @@
94
97
  }
95
98
  }
96
99
  }
97
-
98
- // $fa-font-path: assets.$fa-font-path;
99
- // @import "lib/font-awesome/fontawesome";
100
- // @import "lib/font-awesome/solid";
101
- // @import "lib/font-awesome/brands";
@@ -0,0 +1,68 @@
1
+ const getXPathTo = ($element) => {
2
+ if ($element.id !== "") {
3
+ return 'id("' + $element.id + '")';
4
+ }
5
+ if ($element === document.body) {
6
+ return $element.tagName;
7
+ }
8
+ let ix = 0;
9
+ const siblings = $element.parentNode.childNodes;
10
+ for (let i = 0; i < siblings.length; i++) {
11
+ const sibling = siblings[i];
12
+ if (sibling === $element)
13
+ return (
14
+ getXPathTo($element.parentNode) +
15
+ "/" +
16
+ $element.tagName +
17
+ "[" +
18
+ (ix + 1) +
19
+ "]"
20
+ );
21
+ if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) ix++;
22
+ }
23
+ };
24
+
25
+ const includesAny = (arr, values) => values.some((v) => arr.includes(v));
26
+
27
+ const getClosestHeading = ($element) => {
28
+ let heading = "";
29
+ let $search = $element;
30
+ do {
31
+ while ($search.previousElementSibling) {
32
+ $search = $search.previousElementSibling;
33
+ if (
34
+ ["h1", "h2", "h3", "h4", "h5", "h6"].includes($search.tagName) ||
35
+ ($search.classList.length &&
36
+ includesAny(Array.from($search.classList), [
37
+ "tna-heading-xl",
38
+ "tna-heading-l",
39
+ "tna-heading-m",
40
+ "tna-heading-s",
41
+ ]))
42
+ ) {
43
+ heading = $search.innerText;
44
+ break;
45
+ }
46
+ }
47
+ $search = $search.parentElement;
48
+ } while ($search.parentElement && !heading);
49
+ return heading;
50
+ };
51
+
52
+ const valueGetters = {
53
+ text: ($el) => $el.innerText,
54
+ html: ($el) => $el.innerHTML,
55
+ value: ($el) => $el.value,
56
+ index: ($el, $scope, event, index) => index,
57
+ checked: ($el) => ($el.checked ? "checked" : "unchecked"),
58
+ expanded: ($el) => {
59
+ const expanded = $el.getAttribute("aria-expanded");
60
+ if (expanded === null) {
61
+ return null;
62
+ }
63
+ return expanded.toString() === "true" ? "opened" : "closed";
64
+ },
65
+ closestHeading: ($el) => getClosestHeading($el),
66
+ };
67
+
68
+ export { getXPathTo, getClosestHeading, valueGetters };
@@ -1,5 +1,6 @@
1
1
  export class CookieEventHandler {
2
2
  events = {};
3
+ oneTimeEvents = {};
3
4
 
4
5
  constructor() {
5
6
  if (CookieEventHandler._instance) {
@@ -10,23 +11,37 @@ export class CookieEventHandler {
10
11
 
11
12
  /**
12
13
  * Add an event listener.
13
- * @param {string} event - The event to add a listener for.
14
- * @param {function} callback - The callback function to call when the event is triggered.
14
+ * @param {String} event - The event to add a listener for.
15
+ * @param {Function} callback - The callback function to call when the event is triggered.
15
16
  */
16
17
  on(event, callback) {
17
- if (!Object.prototype.hasOwnProperty.call(this.events, event)) {
18
+ if (!Object.hasOwn(this.events, event)) {
18
19
  this.events[event] = [];
19
20
  }
20
21
  this.events[event] = [...this.events[event], callback];
21
22
  }
22
23
 
24
+ once(event, callback) {
25
+ if (!Object.hasOwn(this.oneTimeEvents, event)) {
26
+ this.oneTimeEvents[event] = [];
27
+ }
28
+ this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];
29
+ }
30
+
23
31
  /** @protected */
24
32
  trigger(event, data = {}) {
25
- if (Object.prototype.hasOwnProperty.call(this.events, event)) {
33
+ if (Object.hasOwn(this.events, event)) {
26
34
  this.events[event].forEach((eventToTrigger) =>
27
35
  eventToTrigger.call(this, data),
28
36
  );
29
37
  }
38
+ if (Object.hasOwn(this.oneTimeEvents, event)) {
39
+ for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {
40
+ const eventToTrigger = this.oneTimeEvents[event][i];
41
+ eventToTrigger.call(this, data);
42
+ this.oneTimeEvents[event].splice(i, 1);
43
+ }
44
+ }
30
45
  }
31
46
  }
32
47
 
@@ -52,11 +67,11 @@ export default class Cookies {
52
67
 
53
68
  /**
54
69
  * Create a cookie handler.
55
- * @param {string} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.
56
- * @param {string} [options.domain=""] - The domain to register the cookie with.
57
- * @param {string} [options.path=""] - The domain to register the cookie with.
58
- * @param {string} [options.secure=true] - Only set cookie in HTTPS environments.
59
- * @param {string} [options.policiesKey=cookies_policy] - The name of the cookie.
70
+ * @param {String} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.
71
+ * @param {String} [options.domain=""] - The domain to register the cookie with.
72
+ * @param {String} [options.path=""] - The domain to register the cookie with.
73
+ * @param {String} [options.secure=true] - Only set cookie in HTTPS environments.
74
+ * @param {String} [options.policiesKey=cookies_policy] - The name of the cookie.
60
75
  */
61
76
  constructor(options = {}) {
62
77
  const {
@@ -112,17 +127,17 @@ export default class Cookies {
112
127
 
113
128
  /**
114
129
  * Check to see whether a cookie exists or not.
115
- * @param {string} key - The cookie name.
116
- * @returns {boolean}
130
+ * @param {String} key - The cookie name.
131
+ * @returns {Boolean}
117
132
  */
118
133
  exists(key) {
119
- return Object.prototype.hasOwnProperty.call(this.all, key);
134
+ return Object.hasOwn(this.all, key);
120
135
  }
121
136
 
122
137
  /**
123
138
  * Check to see whether a cookie has a particular value.
124
- * @param {string} key - The cookie name.
125
- * @param {string|number|boolean} value - The value to check against.
139
+ * @param {String} key - The cookie name.
140
+ * @param {String|Number|Boolean} value - The value to check against.
126
141
  * @returns
127
142
  */
128
143
  hasValue(key, value) {
@@ -131,8 +146,8 @@ export default class Cookies {
131
146
 
132
147
  /**
133
148
  * Get a cookie.
134
- * @param {string} key - The cookie name.
135
- * @returns {string|number|boolean}
149
+ * @param {String} key - The cookie name.
150
+ * @returns {String|Number|Boolean}
136
151
  */
137
152
  get(key) {
138
153
  return this.exists(key) ? decodeURIComponent(this.all[key]) : null;
@@ -140,15 +155,15 @@ export default class Cookies {
140
155
 
141
156
  /**
142
157
  * Set a cookie.
143
- * @param {string} key - The cookie name.
144
- * @param {string|number|boolean} value - The cookie value.
158
+ * @param {String} key - The cookie name.
159
+ * @param {String|Number|Boolean} value - The cookie value.
145
160
  * @param {Object} options
146
- * @param {number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.
147
- * @param {string} [options.path=/] - The path to register the cookie for.
148
- * @param {string} [options.sameSite=Lax] - The sameSite attribute.
149
- * @param {string} [options.domain=this.domain] - The domain to register the cookie with.
150
- * @param {string} [options.path=this.path] - The path to register the cookie with.
151
- * @param {string} [options.secure=this.secure] - Only set cookie in HTTPS environments.
161
+ * @param {Number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.
162
+ * @param {String} [options.path=/] - The path to register the cookie for.
163
+ * @param {String} [options.sameSite=Lax] - The sameSite attribute.
164
+ * @param {String} [options.domain=this.domain] - The domain to register the cookie with.
165
+ * @param {String} [options.path=this.path] - The path to register the cookie with.
166
+ * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.
152
167
  */
153
168
  set(key, value, options = {}) {
154
169
  const {
@@ -181,8 +196,8 @@ export default class Cookies {
181
196
 
182
197
  /**
183
198
  * Delete a cookie.
184
- * @param {string} key - The cookie name.
185
- * @param {string} [path=/] - The path to the cookie is registered on.
199
+ * @param {String} key - The cookie name.
200
+ * @param {String} [path=/] - The path to the cookie is registered on.
186
201
  */
187
202
  delete(key, path = "/", domain = null) {
188
203
  const options = { maxAge: -1, path, domain: domain || undefined };
@@ -202,7 +217,7 @@ export default class Cookies {
202
217
 
203
218
  /**
204
219
  * Accept a policy.
205
- * @param {string} policy - The name of the policy.
220
+ * @param {String} policy - The name of the policy.
206
221
  */
207
222
  acceptPolicy(policy) {
208
223
  this.setPolicy(policy, true);
@@ -212,7 +227,7 @@ export default class Cookies {
212
227
 
213
228
  /**
214
229
  * Reject a policy.
215
- * @param {string} policy - The name of the policy.
230
+ * @param {String} policy - The name of the policy.
216
231
  */
217
232
  rejectPolicy(policy) {
218
233
  this.setPolicy(policy, false);
@@ -222,8 +237,8 @@ export default class Cookies {
222
237
 
223
238
  /**
224
239
  * Set a policy.
225
- * @param {string} policy - The name of the policy.
226
- * @param {boolean} accepted - Whether the policy is accepted or not.
240
+ * @param {String} policy - The name of the policy.
241
+ * @param {Boolean} accepted - Whether the policy is accepted or not.
227
242
  */
228
243
  setPolicy(policy, accepted) {
229
244
  if (policy === "essential") {
@@ -274,21 +289,30 @@ export default class Cookies {
274
289
 
275
290
  /**
276
291
  * Get the acceptance status of a policy.
277
- * @param {string} policy - The name of the policy.
278
- * @returns {boolean}
292
+ * @param {String} policy - The name of the policy.
293
+ * @returns {Boolean}
279
294
  */
280
295
  isPolicyAccepted(policy) {
281
- return Object.prototype.hasOwnProperty.call(this.policies, policy)
296
+ return Object.hasOwn(this.policies, policy)
282
297
  ? this.policies[policy] === true
283
298
  : null;
284
299
  }
285
300
 
286
301
  /**
287
302
  * Add an event listener.
288
- * @param {string} event - The event to add a listener for.
289
- * @param {function} callback - The callback function to call when the event is triggered.
303
+ * @param {String} event - The event to add a listener for.
304
+ * @param {Function} callback - The callback function to call when the event is triggered.
290
305
  */
291
306
  on(event, callback) {
292
307
  this.events.on(event, callback);
293
308
  }
309
+
310
+ /**
311
+ * Add a one-time event listener.
312
+ * @param {String} event - The event to add a listener for.
313
+ * @param {Function} callback - The callback function to call when the event is triggered.
314
+ */
315
+ once(event, callback) {
316
+ this.events.once(event, callback);
317
+ }
294
318
  }