@consent.software/catalog 1.6.0 → 2.0.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 (30) hide show
  1. package/dist_bundle/bundle.js +632 -401
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/consentsoftware-cookieconsent.d.ts +4 -20
  5. package/dist_ts_web/elements/consentsoftware-cookieconsent.js +267 -303
  6. package/dist_ts_web/elements/consentsoftware-header.d.ts +3 -4
  7. package/dist_ts_web/elements/consentsoftware-header.js +89 -38
  8. package/dist_ts_web/elements/consentsoftware-mainselection.d.ts +6 -7
  9. package/dist_ts_web/elements/consentsoftware-mainselection.js +126 -54
  10. package/dist_ts_web/elements/consentsoftware-tabs.d.ts +4 -5
  11. package/dist_ts_web/elements/consentsoftware-tabs.js +109 -62
  12. package/dist_ts_web/elements/consentsoftware-toggle.d.ts +11 -9
  13. package/dist_ts_web/elements/consentsoftware-toggle.js +262 -214
  14. package/dist_ts_web/elements/shared.d.ts +35 -1
  15. package/dist_ts_web/elements/shared.js +36 -2
  16. package/dist_ts_web/pages/page1.d.ts +1 -1
  17. package/dist_ts_web/pages/page1.js +2 -2
  18. package/dist_watch/bundle.js +10228 -4196
  19. package/dist_watch/bundle.js.map +4 -4
  20. package/package.json +9 -9
  21. package/readme.md +149 -80
  22. package/ts_web/00_commitinfo_data.ts +1 -1
  23. package/ts_web/elements/consentsoftware-cookieconsent.ts +150 -218
  24. package/ts_web/elements/consentsoftware-header.ts +40 -23
  25. package/ts_web/elements/consentsoftware-mainselection.ts +63 -33
  26. package/ts_web/elements/consentsoftware-tabs.ts +51 -37
  27. package/ts_web/elements/consentsoftware-toggle.ts +123 -107
  28. package/ts_web/elements/shared.ts +38 -2
  29. package/ts_web/pages/page1.ts +1 -1
  30. package/ts_web/tsconfig.json +4 -4
@@ -1,237 +1,222 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
9
34
  };
10
- import * as shared from './shared.js';
11
- import { LitElement, html, css } from 'lit';
12
- import { customElement } from 'lit/decorators.js';
13
- import { property } from 'lit/decorators/property.js';
35
+ import { cssManager, colors } from './shared.js';
36
+ import { DeesElement, customElement, html, css, property, } from '@design.estate/dees-element';
14
37
  import * as csInterfaces from '@consent.software/interfaces';
15
38
  import * as csWebclient from '@consent.software/webclient';
16
39
  import { delayFor } from '@push.rocks/smartdelay';
17
- let ConsentsoftwareCookieconsent = class ConsentsoftwareCookieconsent extends LitElement {
18
- static { this.demo = () => html `<consentsoftware-cookieconsent></consentsoftware-cookieconsent>`; }
19
- /**
20
- * Define component styles with CSS variables that adjust based on theme.
21
- * The default variables serve as baseline for the light theme.
22
- * Theme-specific overrides modify these for dark mode.
23
- */
24
- static { this.styles = css `
25
- :host {
26
- font-family: ${shared.fontStack};
27
- user-select: none;
28
- /* Default variables for Light Theme */
29
- --text-color: #333;
30
- --background-color: #eeeeee;
31
- --accent-color: #333333;
32
- --button-bg: #ffffff;
33
- --button-hover-bg: #f2f2f2;
34
- --icon-color: #4496f5;
35
- --link-color: #333;
36
- --padding-sides: 16px;
37
- /* Additional variables for modal and info container styling */
38
- --info-bg: rgba(0, 0, 0, 0.1);
39
- --info-text: rgba(255, 255, 255, 0.5);
40
- --modal-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.2);
41
- }
40
+ let ConsentsoftwareCookieconsent = (() => {
41
+ let _classDecorators = [customElement('consentsoftware-cookieconsent')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ var ConsentsoftwareCookieconsent = class extends _classSuper {
47
+ static { _classThis = this; }
48
+ static {
49
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
50
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
51
+ ConsentsoftwareCookieconsent = _classThis = _classDescriptor.value;
52
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
53
+ }
54
+ static demo = () => html `<consentsoftware-cookieconsent></consentsoftware-cookieconsent>`;
55
+ csWebclientInstance = new csWebclient.CsWebclient();
56
+ csWebclientRan = false;
57
+ static styles = [
58
+ cssManager.defaultStyles,
59
+ css `
60
+ :host {
61
+ font-size: 14px;
62
+ user-select: none;
63
+ }
42
64
 
43
- /* Dark Theme Overrides:
44
- When theme attribute is 'dark', override variables accordingly. */
45
- :host([theme='dark']) {
46
- --text-color: #fff;
47
- --background-color: #111;
48
- --accent-color: #333333;
49
- --button-bg: #252525;
50
- --button-hover-bg: #222222;
51
- --icon-color: #4496f5;
52
- --link-color: #fff;
53
- --info-bg: rgba(0, 0, 0, 0.1);
54
- --info-text: rgba(255, 255, 255, 0.5);
55
- --modal-box-shadow: 0px 0px 8px rgba(255, 255, 255, 0.6);
56
- }
65
+ .pageOverlay {
66
+ position: fixed;
67
+ inset: 0;
68
+ display: grid;
69
+ align-items: center;
70
+ justify-content: center;
71
+ z-index: 1000;
72
+ background: rgba(0, 0, 0, 0);
73
+ backdrop-filter: blur(0px);
74
+ transition: all 0.2s ease-out;
75
+ }
57
76
 
58
- /* Light Theme Overrides:
59
- Explicit light theme settings, currently matching defaults.
60
- Can be customized independently if desired. */
61
- :host([theme='light']) {
62
- --text-color: #333;
63
- --background-color: #eeeeee;
64
- --accent-color: #333333;
65
- --button-bg: #ffffff;
66
- --button-hover-bg: #f2f2f2;
67
- --icon-color: #4496f5;
68
- --link-color: #333;
69
- --info-bg: rgba(0, 0, 0, 0.1);
70
- --info-text: rgba(0, 0, 0, 0.5);
71
- --modal-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.2);
72
- }
77
+ .pageOverlay.shake {
78
+ background: rgba(0, 0, 0, 0.6) !important;
79
+ }
73
80
 
74
- /* Overlay covering the page behind the modal */
75
- .pageOverlay {
76
- position: fixed;
77
- top: 0;
78
- bottom: 0;
79
- right: 0;
80
- left: 0;
81
- display: grid;
82
- align-items: center;
83
- justify-content: center;
84
- z-index: 1000; /* Ensures the overlay is on top of other elements */
85
- background: rgba(255, 255, 255, 0);
86
- backdrop-filter: blur(0px);
87
- transition: all 0.2s;
88
- }
81
+ .modalBox {
82
+ display: block;
83
+ color: ${cssManager.bdTheme(colors.light.foreground, colors.dark.foreground)};
84
+ background: ${cssManager.bdTheme(colors.light.background, colors.dark.background)};
85
+ box-shadow:
86
+ 0 0 0 1px ${cssManager.bdTheme(colors.light.border, colors.dark.border)},
87
+ 0 16px 70px ${cssManager.bdTheme('rgba(0, 0, 0, 0.15)', 'rgba(0, 0, 0, 0.35)')};
88
+ position: relative;
89
+ border-radius: 8px;
90
+ max-width: 520px;
91
+ min-width: 320px;
92
+ box-sizing: border-box;
93
+ overflow: hidden;
94
+ will-change: transform;
95
+ transition: all 0.2s ease-out;
96
+ transform: scale(0.96);
97
+ opacity: 0;
98
+ }
89
99
 
90
- /* Shake animation for overlay when clicked */
91
- .pageOverlay.shake {
92
- background: rgba(0, 0, 0, 0.5) !important;
93
- }
100
+ @media (max-width: 560px) {
101
+ .modalBox {
102
+ max-width: 100%;
103
+ min-width: 100%;
104
+ height: 100vh;
105
+ border-radius: 0;
106
+ }
107
+ }
94
108
 
95
- /* Modal box styling using theme variables for colors and shadows */
96
- .modalBox {
97
- display: block;
98
- color: var(--text-color);
99
- background: var(--background-color);
100
- box-shadow: var(--modal-box-shadow);
101
- position: relative;
102
- border: 1px dotted rgba(255, 255, 255, 0.1);
103
- border-top: 1px solid var(--accent-color);
104
- border-radius: 16px;
105
- max-width: 1100px;
106
- min-width: calc(100vw / 3);
107
- box-sizing: border-box;
108
- overflow: hidden;
109
- will-change: transform;
110
- transition: all 0.3s;
111
- transform: scale(0.95);
112
- opacity: 0;
113
- }
109
+ .modalBox.shake {
110
+ animation: shake 120ms 2 linear;
111
+ }
114
112
 
115
- /* Media query for mobile devices: stack buttons vertically */
116
- @media (max-width: 600px) {
117
- .modalBox {
118
- height: 100vh;
119
- box-shadow: none;
120
- border-radius: 0px;
113
+ @keyframes shake {
114
+ 0% { transform: translateX(3px); }
115
+ 50% { transform: translateX(-3px); }
116
+ 100% { transform: translateX(0); }
121
117
  }
122
- }
123
118
 
124
- /* Shake animation for modal box */
125
- .modalBox.shake {
126
- animation: shake 150ms 2 linear;
127
- }
119
+ :host([show='false']) { display: none; }
120
+ :host([show='true']) { display: block; }
128
121
 
129
- @keyframes shake {
130
- 0% {
131
- transform: translate(3px, 0);
122
+ .content {
123
+ margin: auto;
132
124
  }
133
- 50% {
134
- transform: translate(-3px, 0);
125
+
126
+ .text-container {
127
+ padding: 12px 16px;
128
+ font-size: 0.9em;
129
+ line-height: 1.5;
130
+ color: ${cssManager.bdTheme(colors.light.mutedForeground, colors.dark.mutedForeground)};
135
131
  }
136
- 100% {
137
- transform: translate(0, 0);
132
+
133
+ .text-container a {
134
+ color: ${cssManager.bdTheme(colors.light.foreground, colors.dark.foreground)};
135
+ text-decoration: underline;
136
+ text-underline-offset: 2px;
138
137
  }
139
- }
140
138
 
141
- /* Toggle display based on [show] attribute */
142
- :host([show='false']) {
143
- display: none;
144
- }
145
- :host([show='true']) {
146
- display: block;
147
- }
139
+ .text-container a:hover {
140
+ opacity: 0.8;
141
+ }
148
142
 
149
- .content {
150
- margin: auto;
151
- }
143
+ .button-container {
144
+ padding: 12px 16px 16px;
145
+ display: grid;
146
+ grid-template-columns: repeat(3, 1fr);
147
+ gap: 8px;
148
+ }
152
149
 
153
- .text-container {
154
- padding-left: var(--padding-sides);
155
- padding-right: var(--padding-sides);
156
- display: grid;
157
- grid-template-columns: auto;
158
- }
150
+ @media (max-width: 560px) {
151
+ .button-container {
152
+ grid-template-columns: 1fr;
153
+ }
154
+ }
159
155
 
160
- .text-container a {
161
- color: var(--link-color);
162
- text-decoration: none;
163
- }
156
+ .consent-button {
157
+ border-radius: 6px;
158
+ background: ${cssManager.bdTheme(colors.light.secondary, colors.dark.secondary)};
159
+ border: 1px solid ${cssManager.bdTheme(colors.light.border, colors.dark.border)};
160
+ padding: 8px 16px;
161
+ font-size: 0.85em;
162
+ font-weight: 500;
163
+ text-align: center;
164
+ cursor: pointer;
165
+ transition: all 0.15s ease;
166
+ color: ${cssManager.bdTheme(colors.light.secondaryForeground, colors.dark.secondaryForeground)};
167
+ }
164
168
 
165
- .button-container {
166
- padding: var(--padding-sides);
167
- display: grid;
168
- grid-template-columns: repeat(3, 1fr);
169
- gap: 16px;
170
- }
169
+ .consent-button:hover {
170
+ background: ${cssManager.bdTheme(colors.light.accent, colors.dark.accent)};
171
+ border-color: ${cssManager.bdTheme(colors.light.ring, colors.dark.ring)};
172
+ }
171
173
 
172
- /* Media query for mobile devices: stack buttons vertically */
173
- @media (max-width: 600px) {
174
- .button-container {
175
- grid-template-columns: 1fr;
174
+ .consent-button:last-child {
175
+ background: ${cssManager.bdTheme(colors.light.primary, colors.dark.primary)};
176
+ color: ${cssManager.bdTheme(colors.light.primaryForeground, colors.dark.primaryForeground)};
177
+ border-color: ${cssManager.bdTheme(colors.light.primary, colors.dark.primary)};
176
178
  }
177
- }
178
179
 
179
- /* Consent button styling using theme variables */
180
- .consent-button {
181
- border-radius: 3px;
182
- background: var(--button-bg);
183
- box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);
184
- padding: 10px;
185
- line-height: 30px;
186
- text-align: center;
187
- cursor: pointer;
188
- transition: all 0.2s;
189
- }
180
+ .consent-button:last-child:hover {
181
+ opacity: 0.9;
182
+ }
190
183
 
191
- .consent-button:hover {
192
- background: var(--button-hover-bg);
193
- }
184
+ .info-container {
185
+ text-align: center;
186
+ padding: 10px 16px;
187
+ background: ${cssManager.bdTheme(colors.light.muted, colors.dark.muted)};
188
+ border-top: 1px solid ${cssManager.bdTheme(colors.light.border, colors.dark.border)};
189
+ font-size: 0.75em;
190
+ color: ${cssManager.bdTheme(colors.light.mutedForeground, colors.dark.mutedForeground)};
191
+ }
194
192
 
195
- /* Use theme variables for info container background and text */
196
- .info-container {
197
- text-align: center;
198
- line-height: 3em;
199
- background: var(--info-bg);
200
- border-top: 1px dotted rgba(255, 255, 255, 0.1);
201
- font-size: 0.8em;
202
- color: var(--info-text);
203
- }
193
+ .info-container a {
194
+ color: ${cssManager.bdTheme(colors.light.foreground, colors.dark.foreground)};
195
+ text-decoration: none;
196
+ }
204
197
 
205
- .info-container a {
206
- text-decoration: underline;
207
- color: var(--link-color);
208
- transition: color 0.2s;
209
- }
210
- .info-container a:hover {
211
- color: #ffffff;
212
- }
213
- `; }
214
- constructor() {
215
- super();
216
- this.csWebclientInstance = new csWebclient.CsWebclient();
217
- this.csWebclientRan = false;
218
- // Reflects the current theme ('light' or 'dark')
219
- this.theme = 'light';
220
- // Initially hide the consent banner until needed
221
- this.setAttribute('show', 'false');
222
- }
223
- render() {
224
- return html `
198
+ .info-container a:hover {
199
+ text-decoration: underline;
200
+ }
201
+ `,
202
+ ];
203
+ constructor() {
204
+ super();
205
+ // Initially hide the consent banner until needed
206
+ this.setAttribute('show', 'false');
207
+ }
208
+ render() {
209
+ return html `
225
210
  <div class="pageOverlay" @click=${this.pageOverlayClick}>
226
211
  <div class="modalBox">
227
212
  <div class="content">
228
213
  <consentsoftware-header></consentsoftware-header>
229
214
  <consentsoftware-tabs></consentsoftware-tabs>
230
- <div class="text-container" style="padding: 16px;">
215
+ <div class="text-container">
231
216
  <div class="toptext">
232
- This page uses cookies. Please review our
217
+ We use cookies to enhance your experience. Review our
233
218
  <a href="https://lossless.gmbh/cookie" target="_blank">cookie policy</a>
234
- and choose which cookie level you are willing to accept.
219
+ and select your preferences.
235
220
  </div>
236
221
  </div>
237
222
  <consentsoftware-mainselection></consentsoftware-mainselection>
@@ -263,115 +248,94 @@ let ConsentsoftwareCookieconsent = class ConsentsoftwareCookieconsent extends Li
263
248
  </div>
264
249
  </div>
265
250
  `;
266
- }
267
- /**
268
- * Lifecycle method called when the element is connected to the DOM.
269
- * It sets up the theme and displays the consent banner if no cookie levels are set.
270
- */
271
- async connectedCallback() {
272
- super.connectedCallback();
273
- this.updateTheme(); // Initialize theme based on system preference
274
- const cookieLevel = await this.csWebclientInstance.getCookieLevels();
275
- if (!cookieLevel) {
276
- // Show consent banner if cookie levels haven't been set yet
277
- this.setAttribute('show', 'true');
278
- requestAnimationFrame(async () => {
279
- await this.updated();
280
- const pageOverlay = this.shadowRoot?.querySelector('.pageOverlay');
281
- if (pageOverlay) {
282
- // Apply dark overlay styling when modal appears
283
- pageOverlay.style.background = 'rgba(0,0,0, 0.5)';
284
- pageOverlay.style.backdropFilter = 'blur(20px)';
285
- }
286
- const modalBox = this.shadowRoot?.querySelector('.modalBox');
287
- if (modalBox) {
288
- // Animate modal box appearance
289
- modalBox.style.transform = `scale(1)`;
290
- modalBox.style.opacity = '1';
291
- }
292
- });
293
- }
294
- else {
295
- // Hide banner if cookie levels are already set
296
- this.setAttribute('show', 'false');
297
251
  }
298
- }
299
- async firstUpdated() {
300
- // Placeholder for any logic needed after first render
301
- }
302
- /**
303
- * Called after updates. Logs banner height and runs consent scripts if necessary.
304
- */
305
- async updated() {
306
- console.log(`The height of the cookie banner is ${this.shadowRoot?.host?.clientHeight}px`);
307
- const acceptedCookieLevels = await this.csWebclientInstance.getCookieLevels();
308
- if (!this.csWebclientRan && acceptedCookieLevels) {
309
- this.csWebclientRan = true;
310
- await this.csWebclientInstance.getAndRunConsentTuples();
311
- }
312
- }
313
- /**
314
- * Handles consent button clicks, sets cookie levels, and hides the banner.
315
- * Uses theme variables for styling transitions.
316
- */
317
- async handleConsentButtonClick(event, levelsArg) {
318
- console.log(`Set level to ${levelsArg}`);
319
- const pageOverlay = this.shadowRoot?.querySelector('.pageOverlay');
320
- if (pageOverlay) {
321
- // Fade out overlay effect using inline styles for transition
322
- pageOverlay.style.background = 'rgba(255,255,255, 0)';
323
- pageOverlay.style.backdropFilter = 'blur(0px)';
252
+ /**
253
+ * Lifecycle method called when the element is connected to the DOM.
254
+ * Displays the consent banner if no cookie levels are set.
255
+ */
256
+ async connectedCallback() {
257
+ await super.connectedCallback();
258
+ const cookieLevel = await this.csWebclientInstance.getCookieLevels();
259
+ if (!cookieLevel) {
260
+ // Show consent banner if cookie levels haven't been set yet
261
+ this.setAttribute('show', 'true');
262
+ requestAnimationFrame(async () => {
263
+ await this.updateComplete;
264
+ const pageOverlay = this.shadowRoot?.querySelector('.pageOverlay');
265
+ if (pageOverlay) {
266
+ // Apply subtle backdrop blur when modal appears
267
+ pageOverlay.style.background = 'rgba(0,0,0, 0.6)';
268
+ pageOverlay.style.backdropFilter = 'blur(4px)';
269
+ }
270
+ const modalBox = this.shadowRoot?.querySelector('.modalBox');
271
+ if (modalBox) {
272
+ // Animate modal box appearance
273
+ modalBox.style.transform = `scale(1)`;
274
+ modalBox.style.opacity = '1';
275
+ }
276
+ });
277
+ }
278
+ else {
279
+ // Hide banner if cookie levels are already set
280
+ this.setAttribute('show', 'false');
281
+ }
324
282
  }
325
- const modalBox = this.shadowRoot?.querySelector('.modalBox');
326
- if (modalBox) {
327
- // Scale down and fade out modal box before hiding
328
- modalBox.style.transform = `scale(0.95)`;
329
- modalBox.style.opacity = '0';
283
+ async firstUpdated() {
284
+ // Run consent scripts if levels are already set
285
+ const acceptedCookieLevels = await this.csWebclientInstance.getCookieLevels();
286
+ if (!this.csWebclientRan && acceptedCookieLevels) {
287
+ this.csWebclientRan = true;
288
+ await this.csWebclientInstance.getAndRunConsentTuples();
289
+ }
330
290
  }
331
- // Save user consent preferences
332
- await this.csWebclientInstance.setCookieLevels(levelsArg);
333
- await delayFor(300);
334
- this.setAttribute('show', 'false'); // Hide the consent banner
335
- this.updated(); // Trigger any post-consent actions
336
- }
337
- /**
338
- * Handles clicks on the page overlay. If clicked outside the modal,
339
- * triggers a shake animation as feedback.
340
- */
341
- async pageOverlayClick(e) {
342
- if (e.target === e.currentTarget) {
291
+ /**
292
+ * Handles consent button clicks, sets cookie levels, and hides the banner.
293
+ */
294
+ async handleConsentButtonClick(event, levelsArg) {
295
+ console.log(`Set level to ${levelsArg}`);
343
296
  const pageOverlay = this.shadowRoot?.querySelector('.pageOverlay');
297
+ if (pageOverlay) {
298
+ pageOverlay.style.background = 'rgba(0,0,0, 0)';
299
+ pageOverlay.style.backdropFilter = 'blur(0px)';
300
+ }
344
301
  const modalBox = this.shadowRoot?.querySelector('.modalBox');
345
- if (pageOverlay && modalBox) {
346
- pageOverlay.classList.add('shake');
347
- modalBox.classList.add('shake');
348
- await delayFor(2000);
349
- pageOverlay.classList.remove('shake');
350
- modalBox.classList.remove('shake');
302
+ if (modalBox) {
303
+ // Scale down and fade out modal box before hiding
304
+ modalBox.style.transform = `scale(0.95)`;
305
+ modalBox.style.opacity = '0';
306
+ }
307
+ // Save user consent preferences
308
+ await this.csWebclientInstance.setCookieLevels(levelsArg);
309
+ await delayFor(300);
310
+ this.setAttribute('show', 'false'); // Hide the consent banner
311
+ // Run consent scripts
312
+ if (!this.csWebclientRan) {
313
+ this.csWebclientRan = true;
314
+ await this.csWebclientInstance.getAndRunConsentTuples();
351
315
  }
352
316
  }
353
- }
354
- /**
355
- * Dynamically switches the theme between light and dark.
356
- * Listens for system theme changes to update the component's theme.
357
- */
358
- updateTheme() {
359
- // Check the initial system preference for dark mode
360
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
361
- this.theme = prefersDark ? 'dark' : 'light';
362
- // Listen for changes in the system color scheme preference
363
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
364
- this.theme = e.matches ? 'dark' : 'light';
365
- });
366
- }
367
- };
368
- __decorate([
369
- property({ type: String, reflect: true }),
370
- __metadata("design:type", String)
371
- ], ConsentsoftwareCookieconsent.prototype, "theme", void 0);
372
- ConsentsoftwareCookieconsent = __decorate([
373
- customElement('consentsoftware-cookieconsent'),
374
- __metadata("design:paramtypes", [])
375
- ], ConsentsoftwareCookieconsent);
317
+ /**
318
+ * Handles clicks on the page overlay. If clicked outside the modal,
319
+ * triggers a shake animation as feedback.
320
+ */
321
+ async pageOverlayClick(e) {
322
+ if (e.target === e.currentTarget) {
323
+ const pageOverlay = this.shadowRoot?.querySelector('.pageOverlay');
324
+ const modalBox = this.shadowRoot?.querySelector('.modalBox');
325
+ if (pageOverlay && modalBox) {
326
+ pageOverlay.classList.add('shake');
327
+ modalBox.classList.add('shake');
328
+ await delayFor(2000);
329
+ pageOverlay.classList.remove('shake');
330
+ modalBox.classList.remove('shake');
331
+ }
332
+ }
333
+ }
334
+ static {
335
+ __runInitializers(_classThis, _classExtraInitializers);
336
+ }
337
+ };
338
+ return ConsentsoftwareCookieconsent = _classThis;
339
+ })();
376
340
  export { ConsentsoftwareCookieconsent };
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHNvZnR3YXJlLWNvb2tpZWNvbnNlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvY29uc2VudHNvZnR3YXJlLWNvb2tpZWNvbnNlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUF1QixNQUFNLEtBQUssQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRELE9BQU8sS0FBSyxZQUFZLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTM0MsSUFBTSw0QkFBNEIsR0FBbEMsTUFBTSw0QkFBNkIsU0FBUSxVQUFVO2FBQzVDLFNBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUEsaUVBQWlFLEFBQTlFLENBQStFO0lBU2pHOzs7O09BSUc7YUFDVyxXQUFNLEdBQUcsR0FBRyxDQUFBOztxQkFFUCxNQUFNLENBQUMsU0FBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJMbEMsQUE3TG1CLENBNkxsQjtJQUVGO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUE1TUgsd0JBQW1CLEdBQUcsSUFBSSxXQUFX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
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHNvZnR3YXJlLWNvb2tpZWNvbnNlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvY29uc2VudHNvZnR3YXJlLWNvb2tpZWNvbnNlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpELE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLElBQUksRUFDSixHQUFHLEVBRUgsUUFBUSxHQUNULE1BQU0sNkJBQTZCLENBQUM7QUFFckMsT0FBTyxLQUFLLFlBQVksTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEtBQUssV0FBVyxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztJQVNyQyw0QkFBNEI7NEJBRHhDLGFBQWEsQ0FBQywrQkFBK0IsQ0FBQzs7OztzQkFDRyxXQUFXOzRDQUFuQixTQUFRLFdBQVc7Ozs7WUFBN0QsNktBd1NDOzs7O1FBdlNRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBLGlFQUFpRSxDQUFDO1FBRTFGLG1CQUFtQixHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixVQUFVLENBQUMsYUFBYTtZQUN4QixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQkF3QlUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztzQkFDOUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVB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