@nationalarchives/frontend 0.1.24-prerelease → 0.1.26-prerelease

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 (213) hide show
  1. package/README.md +22 -0
  2. package/govuk-prototype-kit.config.json +4 -12
  3. package/nationalarchives/all.css +2 -2
  4. package/nationalarchives/all.css.map +1 -1
  5. package/nationalarchives/all.js +1 -1
  6. package/nationalarchives/all.js.map +1 -1
  7. package/nationalarchives/all.mjs +0 -11
  8. package/nationalarchives/components/_index.scss +8 -0
  9. package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
  10. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  11. package/nationalarchives/components/breadcrumbs/breadcrumbs.js +1 -1
  12. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
  13. package/nationalarchives/components/breadcrumbs/breadcrumbs.mjs +1 -1
  14. package/nationalarchives/components/breadcrumbs/breadcrumbs.scss +1 -1
  15. package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +1 -1
  16. package/nationalarchives/components/button/_button-group.scss +4 -0
  17. package/nationalarchives/components/button/button.css +1 -1
  18. package/nationalarchives/components/button/button.css.map +1 -1
  19. package/nationalarchives/components/button/button.scss +89 -26
  20. package/nationalarchives/components/button/button.stories.js +52 -5
  21. package/nationalarchives/components/button/macro-options.json +18 -0
  22. package/nationalarchives/components/button/template.njk +15 -6
  23. package/nationalarchives/components/card/card.css +1 -1
  24. package/nationalarchives/components/card/card.css.map +1 -1
  25. package/nationalarchives/components/card/card.scss +7 -37
  26. package/nationalarchives/components/card/card.stories.js +6 -78
  27. package/nationalarchives/components/card/fixtures.json +17 -17
  28. package/nationalarchives/components/card/macro-options.json +41 -17
  29. package/nationalarchives/components/card/template.njk +51 -48
  30. package/nationalarchives/components/checkboxes/_index.scss +1 -0
  31. package/nationalarchives/components/checkboxes/checkboxes.css +1 -0
  32. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -0
  33. package/nationalarchives/components/checkboxes/checkboxes.scss +143 -0
  34. package/nationalarchives/components/checkboxes/checkboxes.stories.js +238 -0
  35. package/nationalarchives/components/checkboxes/fixtures.json +4 -0
  36. package/nationalarchives/components/checkboxes/macro-options.json +102 -0
  37. package/nationalarchives/components/checkboxes/macro.njk +3 -0
  38. package/nationalarchives/components/checkboxes/template.njk +35 -0
  39. package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
  40. package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
  41. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  42. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  43. package/nationalarchives/components/cookie-banner/cookie-banner.mjs +19 -16
  44. package/nationalarchives/components/cookie-banner/cookie-banner.stories.js +103 -42
  45. package/nationalarchives/components/cookie-banner/fixtures.json +54 -8
  46. package/nationalarchives/components/cookie-banner/macro-options.json +19 -1
  47. package/nationalarchives/components/cookie-banner/template.njk +1 -1
  48. package/nationalarchives/components/date-input/_index.scss +1 -0
  49. package/nationalarchives/components/date-input/date-input.css +1 -0
  50. package/nationalarchives/components/date-input/date-input.css.map +1 -0
  51. package/nationalarchives/components/date-input/date-input.scss +48 -0
  52. package/nationalarchives/components/date-input/date-input.stories.js +116 -0
  53. package/nationalarchives/components/date-input/fixtures.json +4 -0
  54. package/nationalarchives/components/date-input/macro-options.json +96 -0
  55. package/nationalarchives/components/date-input/macro.njk +3 -0
  56. package/nationalarchives/components/date-input/template.njk +45 -0
  57. package/nationalarchives/components/date-search/_index.scss +1 -0
  58. package/nationalarchives/components/date-search/date-search.css +1 -0
  59. package/nationalarchives/components/date-search/date-search.css.map +1 -0
  60. package/nationalarchives/components/date-search/date-search.scss +27 -0
  61. package/nationalarchives/components/date-search/date-search.stories.js +121 -0
  62. package/nationalarchives/components/date-search/fixtures.json +4 -0
  63. package/nationalarchives/components/date-search/macro-options.json +94 -0
  64. package/nationalarchives/components/date-search/macro.njk +3 -0
  65. package/nationalarchives/components/date-search/template.njk +27 -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/filters/filters.css +1 -1
  69. package/nationalarchives/components/filters/filters.css.map +1 -1
  70. package/nationalarchives/components/filters/filters.scss +0 -8
  71. package/nationalarchives/components/filters/template.njk +2 -2
  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 +3 -5
  75. package/nationalarchives/components/footer/footer.stories.js +1 -1
  76. package/nationalarchives/components/footer/template.njk +13 -9
  77. package/nationalarchives/components/gallery/gallery.css +1 -1
  78. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  79. package/nationalarchives/components/gallery/gallery.scss +0 -11
  80. package/nationalarchives/components/gallery/gallery.stories.js +8 -10
  81. package/nationalarchives/components/gallery/template.njk +1 -1
  82. package/nationalarchives/components/grid/grid.css +1 -1
  83. package/nationalarchives/components/grid/grid.css.map +1 -1
  84. package/nationalarchives/components/grid/grid.scss +12 -0
  85. package/nationalarchives/components/grid/grid.stories.js +12 -0
  86. package/nationalarchives/components/header/header.css +1 -1
  87. package/nationalarchives/components/header/header.css.map +1 -1
  88. package/nationalarchives/components/header/header.scss +36 -41
  89. package/nationalarchives/components/header/header.stories.js +0 -41
  90. package/nationalarchives/components/header/template.njk +3 -3
  91. package/nationalarchives/components/hero/hero.css +1 -1
  92. package/nationalarchives/components/hero/hero.css.map +1 -1
  93. package/nationalarchives/components/hero/hero.scss +3 -7
  94. package/nationalarchives/components/hero/hero.stories.js +6 -0
  95. package/nationalarchives/components/index-grid/fixtures.json +324 -1
  96. package/nationalarchives/components/index-grid/index-grid.css +1 -1
  97. package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
  98. package/nationalarchives/components/index-grid/index-grid.scss +13 -10
  99. package/nationalarchives/components/index-grid/index-grid.stories.js +27 -14
  100. package/nationalarchives/components/index-grid/macro-options.json +34 -29
  101. package/nationalarchives/components/index-grid/template.njk +13 -8
  102. package/nationalarchives/components/message/message.css +1 -1
  103. package/nationalarchives/components/message/message.css.map +1 -1
  104. package/nationalarchives/components/message/message.scss +1 -6
  105. package/nationalarchives/components/message/template.njk +1 -1
  106. package/nationalarchives/components/pagination/macro-options.json +6 -0
  107. package/nationalarchives/components/pagination/pagination.css +1 -1
  108. package/nationalarchives/components/pagination/pagination.css.map +1 -1
  109. package/nationalarchives/components/pagination/pagination.scss +4 -0
  110. package/nationalarchives/components/pagination/pagination.stories.js +63 -2
  111. package/nationalarchives/components/pagination/template.njk +39 -17
  112. package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
  113. package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
  114. package/nationalarchives/components/phase-banner/phase-banner.scss +2 -3
  115. package/nationalarchives/components/picture/picture.css +1 -1
  116. package/nationalarchives/components/picture/picture.css.map +1 -1
  117. package/nationalarchives/components/picture/picture.js.map +1 -1
  118. package/nationalarchives/components/picture/picture.mjs +0 -4
  119. package/nationalarchives/components/picture/picture.scss +1 -1
  120. package/nationalarchives/components/picture/template.njk +1 -1
  121. package/nationalarchives/components/radios/_index.scss +1 -0
  122. package/nationalarchives/components/radios/fixtures.json +4 -0
  123. package/nationalarchives/components/radios/macro-options.json +102 -0
  124. package/nationalarchives/components/radios/macro.njk +3 -0
  125. package/nationalarchives/components/radios/radios.css +1 -0
  126. package/nationalarchives/components/radios/radios.css.map +1 -0
  127. package/nationalarchives/components/radios/radios.scss +131 -0
  128. package/nationalarchives/components/radios/radios.stories.js +241 -0
  129. package/nationalarchives/components/radios/template.njk +35 -0
  130. package/nationalarchives/components/search-field/_index.scss +1 -0
  131. package/nationalarchives/components/search-field/fixtures.json +4 -0
  132. package/nationalarchives/components/search-field/macro-options.json +68 -0
  133. package/nationalarchives/components/search-field/macro.njk +3 -0
  134. package/nationalarchives/components/search-field/search-field.css +1 -0
  135. package/nationalarchives/components/search-field/search-field.css.map +1 -0
  136. package/nationalarchives/components/search-field/search-field.scss +32 -0
  137. package/nationalarchives/components/search-field/search-field.stories.js +88 -0
  138. package/nationalarchives/components/search-field/template.njk +32 -0
  139. package/nationalarchives/components/select/_index.scss +1 -0
  140. package/nationalarchives/components/select/fixtures.json +4 -0
  141. package/nationalarchives/components/select/macro-options.json +114 -0
  142. package/nationalarchives/components/select/macro.njk +3 -0
  143. package/nationalarchives/components/select/select.css +1 -0
  144. package/nationalarchives/components/select/select.css.map +1 -0
  145. package/nationalarchives/components/select/select.scss +51 -0
  146. package/nationalarchives/components/select/select.stories.js +194 -0
  147. package/nationalarchives/components/select/template.njk +29 -0
  148. package/nationalarchives/components/sensitive-image/sensitive-image.css +1 -1
  149. package/nationalarchives/components/sensitive-image/sensitive-image.css.map +1 -1
  150. package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +3 -0
  151. package/nationalarchives/components/sensitive-image/template.njk +1 -1
  152. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  153. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  154. package/nationalarchives/components/skip-link/skip-link.stories.js +4 -1
  155. package/nationalarchives/components/skip-link/template.njk +1 -1
  156. package/nationalarchives/components/tabs/tabs.css +1 -1
  157. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  158. package/nationalarchives/components/tabs/tabs.js +1 -1
  159. package/nationalarchives/components/tabs/tabs.js.map +1 -1
  160. package/nationalarchives/components/tabs/tabs.mjs +1 -1
  161. package/nationalarchives/components/tabs/tabs.scss +11 -1
  162. package/nationalarchives/components/tabs/tabs.stories.js +6 -3
  163. package/nationalarchives/components/tabs/template.njk +1 -1
  164. package/nationalarchives/components/text-input/_index.scss +1 -0
  165. package/nationalarchives/components/text-input/fixtures.json +4 -0
  166. package/nationalarchives/components/text-input/macro-options.json +118 -0
  167. package/nationalarchives/components/text-input/macro.njk +3 -0
  168. package/nationalarchives/components/text-input/template.njk +30 -0
  169. package/nationalarchives/components/text-input/text-input.css +1 -0
  170. package/nationalarchives/components/text-input/text-input.css.map +1 -0
  171. package/nationalarchives/components/text-input/text-input.scss +44 -0
  172. package/nationalarchives/components/text-input/text-input.stories.js +188 -0
  173. package/nationalarchives/components/textarea/_index.scss +1 -0
  174. package/nationalarchives/components/textarea/fixtures.json +4 -0
  175. package/nationalarchives/components/textarea/macro-options.json +106 -0
  176. package/nationalarchives/components/textarea/macro.njk +3 -0
  177. package/nationalarchives/components/textarea/template.njk +27 -0
  178. package/nationalarchives/components/textarea/textarea.css +1 -0
  179. package/nationalarchives/components/textarea/textarea.css.map +1 -0
  180. package/nationalarchives/components/textarea/textarea.scss +45 -0
  181. package/nationalarchives/components/textarea/textarea.stories.js +127 -0
  182. package/nationalarchives/lib/cookies.mjs +172 -63
  183. package/nationalarchives/prototype-kit.css +2 -2
  184. package/nationalarchives/prototype-kit.css.map +1 -1
  185. package/nationalarchives/prototype-kit.scss +0 -8
  186. package/nationalarchives/stories/utilities/colour-schemes/colour-schemes.stories.js +449 -91
  187. package/nationalarchives/stories/utilities/forms/forms.mdx +117 -0
  188. package/nationalarchives/stories/utilities/overrides/overrides.stories.js +1 -0
  189. package/nationalarchives/stories/utilities/tables/tables.mdx +8 -0
  190. package/nationalarchives/stories/utilities/tables/tables.stories.js +45 -0
  191. package/nationalarchives/stories/utilities/typography/heading-groups.stories.js +59 -19
  192. package/nationalarchives/stories/utilities/typography/typography.stories.js +0 -6
  193. package/nationalarchives/templates/layouts/_generic.njk +1 -1
  194. package/nationalarchives/templates/layouts/_prototype-kit.njk +2 -0
  195. package/nationalarchives/tests/cookies.test.js +427 -0
  196. package/nationalarchives/tests/uuid.test.js +17 -0
  197. package/nationalarchives/tools/_colour.scss +50 -27
  198. package/nationalarchives/tools/_typography.scss +0 -1
  199. package/nationalarchives/utilities/_a11y.scss +6 -2
  200. package/nationalarchives/utilities/_colour.scss +10 -6
  201. package/nationalarchives/utilities/_debug.scss +3 -4
  202. package/nationalarchives/utilities/_forms.scss +93 -0
  203. package/nationalarchives/utilities/_index.scss +2 -0
  204. package/nationalarchives/utilities/_lists.scss +6 -1
  205. package/nationalarchives/utilities/_overrides.scss +1 -1
  206. package/nationalarchives/utilities/_tables.scss +86 -0
  207. package/nationalarchives/utilities/_typography.scss +71 -77
  208. package/nationalarchives/variables/_colour.scss +15 -10
  209. package/nationalarchives/variables/_forms.scss +2 -0
  210. package/nationalarchives/variables/_index.scss +1 -0
  211. package/nationalarchives/variables/_typography.scss +2 -2
  212. package/package.json +19 -19
  213. package/nationalarchives/stories/utilities/overrides/overrides.mdx +0 -53
@@ -1,3 +1,35 @@
1
+ export class CookieEventHandler {
2
+ events = {};
3
+
4
+ constructor() {
5
+ if (CookieEventHandler._instance) {
6
+ return CookieEventHandler._instance;
7
+ }
8
+ CookieEventHandler._instance = this;
9
+ }
10
+
11
+ /**
12
+ * 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.
15
+ */
16
+ on(event, callback) {
17
+ if (!Object.prototype.hasOwnProperty.call(this.events, event)) {
18
+ this.events[event] = [];
19
+ }
20
+ this.events[event] = [...this.events[event], callback];
21
+ }
22
+
23
+ /** @protected */
24
+ trigger(event, data = {}) {
25
+ if (Object.prototype.hasOwnProperty.call(this.events, event)) {
26
+ this.events[event].forEach((eventToTrigger) =>
27
+ eventToTrigger.call(this, data),
28
+ );
29
+ }
30
+ }
31
+ }
32
+
1
33
  /**
2
34
  * Class to handle cookies.
3
35
  * @class Cookies
@@ -6,49 +38,73 @@
6
38
  */
7
39
  export default class Cookies {
8
40
  /** @protected */
9
- #policies = {};
41
+ extraPolicies = [];
42
+ /** @protected */
43
+ domain = "";
44
+ /** @protected */
45
+ path = "";
46
+ /** @protected */
47
+ secure = true;
48
+ /** @protected */
49
+ policiesKey = "";
10
50
 
11
51
  /**
12
52
  * Create a cookie handler.
13
- * @param {string[]} [policies=usage,settings] - The cookie policies to manage.
14
- * @param {string} [cookiesPolicyKey=cookies_policy] - The name of the cookie.
15
- */
16
- constructor(
17
- policies = ["usage", "settings"],
18
- cookiesPolicyKey = "cookies_policy",
19
- ) {
20
- this.cookiesPolicyKey = cookiesPolicyKey;
21
- policies.forEach((policy) => {
22
- this.#policies[policy.toLowerCase()] = false;
23
- });
24
- this.#policies.essential = true;
25
- }
26
-
27
- get policies() {
28
- return this.exists(this.cookiesPolicyKey)
29
- ? (this.#policies = {
30
- ...this.#policies,
31
- ...this.allPolicies,
32
- })
33
- : this.#policies;
53
+ * @param {string[]} [extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.
54
+ * @param {string} [options.domain=""] - The domain to register the cookie with.
55
+ * @param {string} [options.path=""] - The domain to register the cookie with.
56
+ * @param {string} [options.secure=true] - Only set cookie in HTTPS environments.
57
+ * @param {string} [options.policiesKey=cookies_policy] - The name of the cookie.
58
+ */
59
+ constructor(extraPolicies = [], options = {}) {
60
+ const {
61
+ domain = "",
62
+ path = "/",
63
+ secure = true,
64
+ policiesKey = "cookies_policy",
65
+ } = options;
66
+ this.extraPolicies = extraPolicies;
67
+ this.domain = domain;
68
+ this.path = path;
69
+ this.secure = secure;
70
+ this.policiesKey = policiesKey;
71
+ this.events = new CookieEventHandler();
72
+ this.init();
34
73
  }
35
74
 
36
- set policies(newPolicyValues) {
37
- this.#policies = newPolicyValues;
75
+ /** @protected */
76
+ init() {
77
+ this.savePolicies({
78
+ ...Object.fromEntries(
79
+ this.extraPolicies.map((k) => [k.toLowerCase(), false]),
80
+ ),
81
+ usage: false,
82
+ settings: false,
83
+ ...this.policies,
84
+ essential: true,
85
+ });
38
86
  }
39
87
 
40
- /** @protected */
41
- #deserialise(cookieString) {
88
+ get all() {
42
89
  const deserialised = {};
43
- cookieString.split(";").forEach((cookie) => {
44
- const parts = cookie.trim().split("=");
45
- deserialised[parts[0]] = parts[1];
46
- });
90
+ document.cookie
91
+ .split("; ")
92
+ .filter((x) => x)
93
+ .forEach((cookie) => {
94
+ const parts = cookie.trim().split("=");
95
+ if (parts[0]) {
96
+ deserialised[parts[0]] = parts[1];
97
+ }
98
+ });
47
99
  return deserialised;
48
100
  }
49
101
 
50
- get all() {
51
- return this.#deserialise(document.cookie);
102
+ get policies() {
103
+ try {
104
+ return JSON.parse(this.get(this.policiesKey) || "{}");
105
+ } catch (e) {
106
+ return {};
107
+ }
52
108
  }
53
109
 
54
110
  /**
@@ -87,16 +143,37 @@ export default class Cookies {
87
143
  * @param {number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.
88
144
  * @param {string} [options.path=/] - The path to register the cookie for.
89
145
  * @param {string} [options.sameSite=Lax] - The sameSite attribute.
146
+ * @param {string} [options.domain=this.domain] - The domain to register the cookie with.
147
+ * @param {string} [options.path=this.path] - The path to register the cookie with.
148
+ * @param {string} [options.secure=this.secure] - Only set cookie in HTTPS environments.
90
149
  */
91
150
  set(key, value, options = {}) {
92
151
  const {
93
152
  maxAge = 60 * 60 * 24 * 365,
94
- path = "/",
95
153
  sameSite = "Lax",
154
+ domain = this.domain,
155
+ path = this.path,
156
+ secure = this.secure,
96
157
  } = options;
97
- document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(
158
+ if (!key) {
159
+ return;
160
+ }
161
+ const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${
162
+ domain ? ` domain=${domain}; ` : ""
163
+ } samesite=${sameSite}; path=${path}; max-age=${maxAge}${
164
+ secure ? "; secure" : ""
165
+ }`;
166
+ document.cookie = cookie;
167
+ this.events.trigger("setCookie", {
168
+ key,
98
169
  value,
99
- )}; SameSite=${sameSite}; path=${path}; max-age=${maxAge}; Secure`;
170
+ maxAge,
171
+ path,
172
+ sameSite,
173
+ domain,
174
+ secure,
175
+ cookie,
176
+ });
100
177
  }
101
178
 
102
179
  /**
@@ -104,12 +181,20 @@ export default class Cookies {
104
181
  * @param {string} key - The cookie name.
105
182
  * @param {string} [path=/] - The path to the cookie is registered on.
106
183
  */
107
- delete(key, path = "/") {
108
- this.set(key, "", 0, path);
184
+ delete(key, path = "/", domain = null) {
185
+ const options = { maxAge: -1, path, domain: domain || undefined };
186
+ this.set(key, "", options);
187
+ this.events.trigger("deleteCookie", { key, ...options });
109
188
  }
110
189
 
111
- get allPolicies() {
112
- return JSON.parse(this.get(this.cookiesPolicyKey) || "{}");
190
+ /**
191
+ * Delete all cookies.
192
+ */
193
+ deleteAll(path = "/", domain = null) {
194
+ Object.keys(this.all).forEach((cookie) => {
195
+ this.delete(cookie, path, domain);
196
+ });
197
+ this.events.trigger("deleteAllCookies", { path, domain });
113
198
  }
114
199
 
115
200
  /**
@@ -117,8 +202,9 @@ export default class Cookies {
117
202
  * @param {string} policy - The name of the policy.
118
203
  */
119
204
  acceptPolicy(policy) {
120
- this.#setPolicy(policy, true);
121
- this.savePolicies();
205
+ this.setPolicy(policy, true);
206
+ this.events.trigger("acceptPolicy", policy);
207
+ this.events.trigger("changePolicy", { [policy]: true });
122
208
  }
123
209
 
124
210
  /**
@@ -126,47 +212,61 @@ export default class Cookies {
126
212
  * @param {string} policy - The name of the policy.
127
213
  */
128
214
  rejectPolicy(policy) {
215
+ this.setPolicy(policy, false);
216
+ this.events.trigger("rejectPolicy", policy);
217
+ this.events.trigger("changePolicy", { [policy]: false });
218
+ }
219
+
220
+ /**
221
+ * Set a policy.
222
+ * @param {string} policy - The name of the policy.
223
+ * @param {boolean} accepted - Whether the policy is accepted or not.
224
+ */
225
+ setPolicy(policy, accepted) {
129
226
  if (policy === "essential") {
130
227
  return;
131
228
  }
132
- this.#setPolicy(policy, false);
133
- this.savePolicies();
134
- }
135
-
136
- /** @protected */
137
- #setPolicy(policy, accepted) {
138
- this.policies = {
229
+ this.savePolicies({
139
230
  ...this.policies,
140
231
  [policy]: accepted,
141
232
  essential: true,
142
- };
143
- }
144
-
145
- /**
146
- * Commit the policy preferences to the browser.
147
- */
148
- savePolicies() {
149
- this.set(this.cookiesPolicyKey, JSON.stringify(this.policies));
233
+ });
234
+ this.events.trigger("changePolicy", { [policy]: accepted });
150
235
  }
151
236
 
152
237
  /**
153
238
  * Accept all the cookie policies.
154
239
  */
155
240
  acceptAllPolicies() {
156
- Object.keys(this.policies).forEach((policy) =>
157
- this.#setPolicy(policy, true),
241
+ const allPolicies = Object.fromEntries(
242
+ Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),
158
243
  );
159
- this.savePolicies();
244
+ this.savePolicies(allPolicies);
245
+ this.events.trigger("acceptAllPolicies");
246
+ this.events.trigger("changePolicy", allPolicies);
160
247
  }
161
248
 
162
249
  /**
163
250
  * Reject all the cookie policies.
164
251
  */
165
252
  rejectAllPolicies() {
166
- Object.keys(this.policies).forEach((policy) =>
167
- this.#setPolicy(policy, false),
168
- );
169
- this.savePolicies();
253
+ const allPolicies = {
254
+ ...Object.fromEntries(
255
+ Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),
256
+ ),
257
+ essential: true,
258
+ };
259
+ this.savePolicies(allPolicies);
260
+ this.events.trigger("rejectAllPolicies");
261
+ this.events.trigger("changePolicy", allPolicies);
262
+ }
263
+
264
+ /**
265
+ * Commit policy preferences to the browser.
266
+ * @param {object} policies - The policies to commit.
267
+ */
268
+ savePolicies(policies) {
269
+ this.set(this.policiesKey, JSON.stringify(policies));
170
270
  }
171
271
 
172
272
  /**
@@ -179,4 +279,13 @@ export default class Cookies {
179
279
  ? this.policies[policy] === true
180
280
  : null;
181
281
  }
282
+
283
+ /**
284
+ * Add an event listener.
285
+ * @param {string} event - The event to add a listener for.
286
+ * @param {function} callback - The callback function to call when the event is triggered.
287
+ */
288
+ on(event, callback) {
289
+ this.events.on(event, callback);
290
+ }
182
291
  }