@koehler8/cms-ext-compliance 1.0.0-beta.4

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.
@@ -0,0 +1,425 @@
1
+ <template>
2
+ <section class="legal-page section-shell" data-analytics-section="privacy">
3
+ <div class="container legal-page__container">
4
+ <article class="legal-card">
5
+ <header class="legal-card__header">
6
+ <h2 class="legal-card__title">{{ headerTitle }}</h2>
7
+ <span class="legal-divider" aria-hidden="true"></span>
8
+ <p class="legal-card__meta">Last revised: {{ lastUpdated }}</p>
9
+ </header>
10
+ <div class="legal-content">
11
+ <template v-if="hasCustomContent">
12
+ <p v-if="customIntro">{{ customIntro }}</p>
13
+ <div
14
+ v-if="customBody"
15
+ class="legal-rich-text"
16
+ v-html="customBody"
17
+ />
18
+ <section
19
+ v-for="(section, index) in customSections"
20
+ :key="section.id || index"
21
+ class="legal-section"
22
+ >
23
+ <h3 v-if="section.title">{{ section.title }}</h3>
24
+ <p v-if="section.summary">{{ section.summary }}</p>
25
+ <div
26
+ v-if="section.body"
27
+ class="legal-rich-text"
28
+ v-html="section.body"
29
+ />
30
+ <p
31
+ v-for="(paragraph, paragraphIndex) in section.paragraphs"
32
+ :key="`paragraph-${paragraphIndex}`"
33
+ >
34
+ {{ paragraph }}
35
+ </p>
36
+ <ul v-if="section.list.length">
37
+ <li
38
+ v-for="(item, itemIndex) in section.list"
39
+ :key="`item-${itemIndex}`"
40
+ >
41
+ {{ item }}
42
+ </li>
43
+ </ul>
44
+ </section>
45
+ </template>
46
+ <template v-else>
47
+ <p>
48
+ This Privacy Policy constitutes a part of {{siteName}}’s Terms and Conditions (the “Terms”).<br>
49
+ The terms used in this Privacy Policy shall have the same meanings as in the Terms except
50
+ as otherwise provided herein.<br>
51
+ This Privacy Policy explains how {{siteName}} and {{siteName}}’s Operators collect, use,
52
+ process, disclose, share, transfer, and protect personal information obtained through {{siteName}}
53
+ and its partners. The terms “we,” “us,” and “our” refer to {{siteName}} and {{siteName}}’s
54
+ Operators. When we ask for certain personal information from users, it is because we are
55
+ required by applicable laws or government orders to collect such information or it is relevant
56
+ for our specified purposes. Please refer to the separate Cookies Policy for the exact use of
57
+ cookies.<br>
58
+ Please carefully read the full content of this Privacy Policy. When visiting the {{siteName}}
59
+ website, regardless of whether or not you register for or log in, you acknowledge,
60
+ understand, and consent to all articles described in this Privacy Policy. We will not use your
61
+ personal information for any purpose not covered in this Privacy Policy, the Cookies Policy
62
+ or the Terms without prior notification to you and your consent.<br>
63
+ This Privacy Policy has incorporated elements from the General Data Protection Regulation
64
+ (GDPR) as we act in accordance with its personal information processing rules within the
65
+ European Economic Area (EEA). We utilize standard contract clauses, rely on the European
66
+ Commission's adequacy decisions about certain countries, as applicable, and obtain your
67
+ consent for these data transfers to third countries if required by applicable laws.<br>
68
+ <br>
69
+ 1. TYPES OF DATA WE COLLECT<br>
70
+ The types of Personal Data that we collect directly from you or third parties depend on the
71
+ circumstances of collection and the nature of the service requested or transaction
72
+ undertaken. It may include (but is not limited to):<br>
73
+ (a) personal information that links back to an individual, e.g., name, date of birth, and other
74
+ personal identification numbers;<br>
75
+ (b) contact information, e.g., address, phone number and email address, Ethereum wallet
76
+ address;<br>
77
+ (c) technical information, e.g., IP address for API services and logins<br>
78
+ (d) statistical data, e.g., hits to the website.<br>
79
+ <br>
80
+ 2. HOW DO WE COLLECT PERSONAL DATA?<br>
81
+ This Privacy Policy covers any Personal Data provided to us:<br>
82
+ (a) when you engage with our products and services;<br>
83
+ (b) when you create an account with us;<br>
84
+ (c) under any other contractual agreement or arrangement;<br>
85
+ Some of the other ways we may collect Personal Data shall include (but is not limited to):<br>
86
+ (a) communications with you via telephone, letter, fax, and email;<br>
87
+ (b) when you visit our website;<br>
88
+ (c) when you contact us in person;<br>
89
+ (d) when we contact you in person;<br>
90
+ (e) when we collect information about you from third parties (such as the social graphs
91
+ available from social media companies); and other channels including our support helpdesk.<br>
92
+ (f) Possible extrapolation of other information by processing the data.<br>
93
+ <br>
94
+ 3. WHAT OTHER DATA DO WE COLLECT?<br>
95
+ From our website and services, we collect your Personal Data in the following ways:<br>
96
+ (a) IP address We use your IP address to help diagnose problems with our server and to
97
+ administer our website. IP addresses are not linked to personally identifiable information.<br>
98
+ (b) Cookies<br>
99
+ A cookie is an element of data that a website can send to your browser, which may then
100
+ store it on your system. We use cookies in some of our pages to store your preferences and
101
+ record session information. The information that we collect is then used to ensure a more
102
+ personalized service level for our users.<br>
103
+ Please refer to our Cookie Policy for the exact information on how we use cookies.<br>
104
+ <strong>Cookie Consent:</strong> We respect your privacy and have implemented a cookie consent mechanism.
105
+ When you first visit our website, you will be presented with a banner allowing you to accept or decline
106
+ the use of cookies and analytics tracking (including Google Analytics). We will only load
107
+ these tracking scripts if you explicitly accept. You can change your consent preferences at any time
108
+ through our <a href="/cookies">Cookie Policy page</a>.<br>
109
+ Information collected from cookies is used by us to evaluate the effectiveness of our site,
110
+ analyze trends, and manage the platform. The information collected from cookies allows us
111
+ to determine such things as which parts of our site are most visited and difficulties our
112
+ visitors may experience in accessing our site.<br>
113
+ With this knowledge, we can improve the quality of your experience on the platform by
114
+ recognizing and delivering more of the most desired features and information, as well as by
115
+ resolving access difficulties. We may also use cookies and/or a technology known as web
116
+ bugs or clear gifs, which are typically stored in emails to help us confirm your receipt of, and
117
+ response to our emails and to provide you with a more personalized experience when using
118
+ our site, or allow third-party service providers to do this.<br>
119
+ Log in information can potentially be saved in cookies. Therefore it is important that you
120
+ prevent unauthorized access to your password and your computer. If you use a shared
121
+ computer, you should always log out properly and clear the browser for cookies.<br>
122
+ (c) User feedback form<br>
123
+ Our feedback form requires you to give us contact information (e.g. your name and email
124
+ address) so that we can respond to your comments. We use your contact information from
125
+ the registration form to send you information about our company. Your contact information is
126
+ also used to contact you where necessary.<br>
127
+ (d) Site tracking<br>
128
+ We also use third-party service provider(s), to assist us in better understanding the use of
129
+ our site. Our service provider(s) will place cookies on the hard drive of your computer and
130
+ will receive information that we select, for example, how visitors navigate around our site,
131
+ what pages are browsed and general transaction information. Our service provider(s)
132
+ analyzes this information and provides us with aggregate reports. The information and
133
+ analysis provided by our service provider(s) will be used to assist us in better understanding
134
+ our visitors’ interests in our site and how to better serve those interests. The information
135
+ collected by our service provider(s) may be linked to and combined with information that we
136
+ collect about you while you are using the platform. Our service provider(s) is/are
137
+ contractually restricted from using information they receive from our Site other than to assist
138
+ us.<br>
139
+ <br>
140
+ 4. WHAT DO WE USE YOUR PERSONAL DATA FOR?<br>
141
+ We may use your Personal Data for the following “Core Purposes”:<br>
142
+ (a) to enable us to provide our services and perform our services to you;<br>
143
+ (b) to protect the safety and well being of yourself and/or other customers;<br>
144
+ (c) to investigate and respond to claims and inquiries from you;<br>
145
+ (d) for business development purposes such as statistical and marketing analysis, systems
146
+ testing, maintenance and development, customer surveys or to help us in any future
147
+ dealings with you, for example by identifying your requirements and preference;<br>
148
+ (e) to comply with any legal or regulatory requirements; and/ or<br>
149
+ (f) for all other purposes ancillary to any of the purposes stated above. Ancillary to these
150
+ “Core Purposes”, we reserve the right to use your data in the following ways:<br>
151
+ (g) to communicate offers, product, services and information on products and activities;<br>
152
+ (h) marketing/cross-marketing and communicating with you in relation to products and
153
+ services offered by us and our service partners as well as our appointed agents; and/or<br>
154
+ (i) for all other company-related purposes ancillary to any of the purposes stated above.<br>
155
+ <br>
156
+ 5. ACCESSING / CORRECTING / UPDATING YOUR PERSONAL DATA<br>
157
+ Depending on your country of residence and its legislation, you may have the right to
158
+ request from us a copy of your personal data, as well as to delete your personal data, make
159
+ amendments to it or restrict its processing. We will endeavour to provide the information
160
+ back to you as soon as practicable. However, we also reserve the right to validate all
161
+ requests for the authenticity of the request.<br>
162
+ You may be requested to provide us with your personal data, such as KYC documents in
163
+ specific situations to comply with legal and regulatory requirements or in case of a dispute
164
+ between you and {{siteUrl}}. In such cases {{siteUrl}} expects you to provide us
165
+ with such requested information for the further processing and actions.<br>
166
+ We hope to ensure that you are fully aware of the data protection rights that you enjoy.<br>
167
+ Unless otherwise required by law or government orders, each User has the following rights:<br>
168
+ 5.1 Right of Access<br>
169
+ You have the right to access or obtain copies of your personal information. We may charge a
170
+ reasonable fee for providing the access service.<br>
171
+ 5.2 Right to Rectification<br>
172
+ You have the right to correct your personal information that you deem inaccurate. You also
173
+ have the right to ask us to complete the personal information that you deem incomplete
174
+ within a reasonable limit.<br>
175
+ 5.3 Right to Erasure (Right to be Forgotten)<br>
176
+ You have the right to request the erasure of your personal data under certain circumstances.<br>
177
+ 5.4 Right to Restriction of Processing<br>
178
+ Under certain circumstances as required by law or as specifically reminded by us, you have
179
+ the right to request us to restrict the processing of your personal information; however, you
180
+ understand that such restriction of the processing may prevent us from providing you with
181
+ some of {{siteName}}’s services.<br>
182
+ 5.5 Right to Object<br>
183
+ Under certain circumstances as required by law or as specifically reminded by us, you have
184
+ the right to object to the processing of your personal information; however, you understand
185
+ that such objection of the processing may prevent us from providing you with some of {{siteName}}’s services.<br>
186
+ 5.6 Right to Data Portability<br>
187
+ Under certain circumstances as required by law or as specifically reminded by us, you have
188
+ the right to request us to transmit the personal information that we collect to another body, or
189
+ directly to you. We may charge a reasonable fee for providing the transmission service.<br>
190
+ <br>
191
+ 6. WITHDRAWING CONSENT<br>
192
+ Please note that it is obligatory for the Company to process your Personal Data for the Core
193
+ Purpose as stated above, without which some services or features provided by {{siteName}}
194
+ may be affected. If we do not have your consent to process your Personal Data for Ancillary
195
+ Purposes, we will not be able to keep you updated about our future, new and/or enhanced
196
+ services and products.<br>
197
+ Nevertheless, you may stop receiving promotional activities by:<br>
198
+ (a) unsubscribing from the mailing list(s);<br>
199
+ (b) editing the relevant account settings to unsubscribe; or<br>
200
+ (c) sending a request via our Contact Us form on {{siteUrl}}<br>
201
+ <br>
202
+ 7. TO WHOM DO WE DISCLOSE YOUR PERSONAL DATA?<br>
203
+ We will not trade or sell your Personal Data to third parties. Your Personal Data shall only be
204
+ disclosed or transferred to the following third parties appointed or authorised by the
205
+ Company for the fulfilment of the Purpose of: (a) data warehouses; (b) IT service providers;
206
+ (c) data analytics and/or marketing agency; (d) legal bodies as permitted or required by law
207
+ such as in compliance with a warrant or subpoena issued by a court of competent
208
+ jurisdiction; and/or (e) regulatory authorities applicable to you; and/or<br>
209
+ (f) safety and security personnel. In addition to the above, your Personal Data may also be
210
+ disclosed or transferred to any of the Company’s actual and potential assignee, transferee or
211
+ acquirer (including our affiliates and subsidiaries) or our business, assets or group
212
+ companies, or in connection with any corporate restructuring or exercise including our
213
+ restructuring to transfer the business, assets and/or liabilities. We shall take practical steps
214
+ to ensure that their employees, officers, agents, consultants, contractors and other third
215
+ parties mentioned above who are involved in the collection, use and disclosure of your
216
+ Personal Data will observe and adhere to the terms of this Privacy Statement.<br>
217
+ <br>
218
+ 8. HOW LONG WILL WE RETAIN YOUR PERSONAL DATA?<br>
219
+ The Company may store data in global hosting providers with servers across various regions
220
+ and we shall take all reasonable steps to ensure that all Personal Data is destroyed or
221
+ permanently deleted when no longer required for the Purpose of the company, and prepare
222
+ a disposal schedule for inactive data after a 24 month period.<br>
223
+ {{siteName}} implements various security measures to ensure that your personal data is
224
+ stored safely and is not compromised in any way. At the same time, {{siteName}} cannot in
225
+ good faith guarantee that data breach is not possible since no security measure is able to
226
+ provide absolute protection. It is advised for Users to take their own safety measures such
227
+ as 2-Factor Authentication or other measures not provided by {{siteName}}. If you suspect
228
+ that your account information or your personal data has been compromised, you should
229
+ contact {{siteName}}’s Support as soon as possible.<br>
230
+ <br>
231
+ 9. LINKS TO THIRD PARTY WEBSITES<br>
232
+ We may link this website and/or our applications to other companies’ or organizations’
233
+ websites (collectively, “Third Party Sites”). This Privacy Notice does not apply to such Third
234
+ Party Sites as those sites are outside our control. If you access Third Party Sites using the
235
+ links provided, the operators of these sites may collect your personal information. Please
236
+ ensure that you are satisfied with the privacy statements of these Third Party Sites before
237
+ you submit any personal information. We try, as far as we can, to ensure that all third party
238
+ linked sites have equivalent measures for the protection of your personal information, but we
239
+ cannot be held responsible legally or otherwise for the activities, privacy policies or levels of
240
+ privacy compliance of these Third-Party Sites.<br>
241
+ <br>
242
+ 10. ADDITIONAL INFORMATION OR ASSISTANCE
243
+ </p>
244
+ <p>Please note that this Privacy Policy may be amended from time to time in accordance with
245
+ applicable laws and regulations and such variations may be applicable to you. For further
246
+ inquiries or complaints in relation to our handling of your Personal Data or our Privacy Policy
247
+ or if you wish to access, update or amend your Personal Data as mentioned above please
248
+ contact us at: {{supportEmail}}</p>
249
+ </template>
250
+ </div>
251
+ </article>
252
+ </div>
253
+ </section>
254
+ </template>
255
+
256
+ <script setup>
257
+ import { computed, inject, ref } from 'vue';
258
+
259
+ const props = defineProps({
260
+ content: {
261
+ type: Object,
262
+ default: null,
263
+ },
264
+ configKey: {
265
+ type: String,
266
+ default: null,
267
+ },
268
+ });
269
+
270
+ const injectedSiteData = inject('siteData', ref({}));
271
+
272
+ const siteName = computed(() => injectedSiteData.value?.site?.title || '');
273
+ const siteUrl = computed(() => injectedSiteData.value?.site?.url || '');
274
+ const supportEmail = computed(() => injectedSiteData.value?.site?.supportEmail || '');
275
+ const customContent = computed(() =>
276
+ props.content && typeof props.content === 'object' ? props.content : null,
277
+ );
278
+
279
+ const headerTitle = computed(() => {
280
+ if (customContent.value?.title) {
281
+ return customContent.value.title;
282
+ }
283
+ if (siteName.value) {
284
+ return `${siteName.value} - Privacy Policy`;
285
+ }
286
+ return 'Privacy Policy';
287
+ });
288
+
289
+ const lastUpdated = computed(() => customContent.value?.lastUpdated || 'August 2025');
290
+ const customIntro = computed(() =>
291
+ typeof customContent.value?.intro === 'string' ? customContent.value.intro : '',
292
+ );
293
+ const customBody = computed(() =>
294
+ typeof customContent.value?.body === 'string' ? customContent.value.body : '',
295
+ );
296
+
297
+ function normalizeSectionItems(sections) {
298
+ if (!Array.isArray(sections)) return [];
299
+ return sections
300
+ .map((section, index) => {
301
+ if (!section || typeof section !== 'object') return null;
302
+ const paragraphs = Array.isArray(section.paragraphs)
303
+ ? section.paragraphs.filter((text) => typeof text === 'string' && text.trim().length)
304
+ : [];
305
+ const list = Array.isArray(section.list)
306
+ ? section.list.filter((text) => typeof text === 'string' && text.trim().length)
307
+ : [];
308
+ const summary = typeof section.summary === 'string' ? section.summary : null;
309
+ const body = typeof section.body === 'string' ? section.body : null;
310
+ const html = typeof section.html === 'string' ? section.html : null;
311
+ const title = typeof section.title === 'string' ? section.title : '';
312
+ if (!title && !summary && !body && !html && !paragraphs.length && !list.length) {
313
+ return null;
314
+ }
315
+ return {
316
+ id: section.id || title || `section-${index}`,
317
+ title,
318
+ summary,
319
+ body: body || html,
320
+ paragraphs,
321
+ list,
322
+ };
323
+ })
324
+ .filter(Boolean);
325
+ }
326
+
327
+ const customSections = computed(() => normalizeSectionItems(customContent.value?.sections));
328
+ const hasCustomContent = computed(
329
+ () => Boolean(customIntro.value || customBody.value || customSections.value.length),
330
+ );
331
+ </script>
332
+
333
+
334
+
335
+ <style scoped>
336
+ .legal-page {
337
+ background: var(
338
+ --legal-page-bg,
339
+ color-mix(in srgb, var(--brand-bg-900, #04050a) 90%, #020207 10%)
340
+ );
341
+ }
342
+
343
+ .legal-page__container {
344
+ max-width: 920px;
345
+ margin: 0 auto;
346
+ }
347
+
348
+ .legal-card {
349
+ --legal-card-color: var(
350
+ --legal-card-text,
351
+ var(--brand-card-text, var(--ui-text-primary, #1f2a44))
352
+ );
353
+ --legal-card-color-muted: color-mix(in srgb, var(--legal-card-color) 70%, transparent);
354
+ --legal-card-color-subtle: color-mix(in srgb, var(--legal-card-color) 55%, transparent);
355
+ background: var(--legal-card-bg, var(--brand-surface-card-bg, #ffffff));
356
+ color: var(--legal-card-color);
357
+ border-radius: var(--brand-card-radius, 28px);
358
+ border: 1px solid
359
+ color-mix(in srgb, var(--brand-surface-card-border, rgba(78, 105, 155, 0.35)) 80%, transparent);
360
+ box-shadow: var(--legal-card-shadow, 0 35px 70px rgba(4, 6, 15, 0.35));
361
+ padding: clamp(28px, 6vw, 56px);
362
+ }
363
+
364
+ .legal-card__header {
365
+ text-align: center;
366
+ margin-bottom: clamp(20px, 4vw, 36px);
367
+ }
368
+
369
+ .legal-card__title {
370
+ margin: 0;
371
+ font-size: clamp(1.6rem, 4vw, 2.4rem);
372
+ letter-spacing: 0.14em;
373
+ text-transform: uppercase;
374
+ color: var(--legal-card-color, currentColor);
375
+ }
376
+
377
+ .legal-card__meta {
378
+ margin: 14px 0 0;
379
+ font-size: 0.78rem;
380
+ letter-spacing: 0.2em;
381
+ text-transform: uppercase;
382
+ color: var(
383
+ --legal-card-meta-color,
384
+ var(--legal-card-color-subtle, color-mix(in srgb, var(--ui-text-muted, rgba(31, 42, 68, 0.7)) 90%, transparent))
385
+ );
386
+ }
387
+
388
+ .legal-divider {
389
+ display: block;
390
+ width: 72px;
391
+ height: 2px;
392
+ margin: 18px auto 0;
393
+ background: var(
394
+ --legal-divider-color,
395
+ color-mix(in srgb, var(--brand-border-highlight, rgba(79, 108, 240, 0.6)) 90%, transparent)
396
+ );
397
+ border-radius: 999px;
398
+ }
399
+
400
+ .legal-content {
401
+ display: flex;
402
+ flex-direction: column;
403
+ gap: 1rem;
404
+ line-height: 1.7;
405
+ color: inherit;
406
+ }
407
+
408
+ .legal-content p {
409
+ margin: 0;
410
+ }
411
+
412
+ .legal-content strong {
413
+ color: var(--legal-strong-color, var(--legal-card-color));
414
+ }
415
+
416
+ .legal-content ul {
417
+ margin: 0;
418
+ padding-left: 1.2rem;
419
+ line-height: 1.6;
420
+ }
421
+
422
+ .legal-content li + li {
423
+ margin-top: 0.35rem;
424
+ }
425
+ </style>