@c15t/react 3.0.0-alpha.8 → 3.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.
- package/AGENTS.md +10 -12
- package/README.md +41 -70
- package/SKILL.md +1 -1
- package/dist/aggregate-components.js +1 -1
- package/dist/components/consent-gate/atoms.js +1 -1
- package/dist/components/consent-gate/frame.js +2 -0
- package/dist/components/consent-gate/index.js +1 -1
- package/dist/components/iab-panel/atoms/root.js +1 -1
- package/dist/components/iab-panel/iab-panel.js +1 -1
- package/dist/components/iab-prompt/atoms/root.js +1 -1
- package/dist/components/iab-prompt/iab-prompt.js +1 -1
- package/dist/components/panel/atoms/root.js +1 -1
- package/dist/components/panel-trigger/atoms/root.js +1 -1
- package/dist/components/panel-trigger/panel-trigger.js +1 -1
- package/dist/components/panel-trigger/toolbar-loader.js +2 -0
- package/dist/components/preferences/atoms/root.js +1 -1
- package/dist/components/prompt/atoms/early-tap-script.js +2 -0
- package/dist/components/prompt/atoms/root.js +1 -1
- package/dist/components/prompt/prompt.js +1 -1
- package/dist/components/shared/dialog-sheets.js +1 -0
- package/dist/components/shared/first-paint-sheets.js +1 -0
- package/dist/components/shared/iab-dialog-sheets.js +1 -0
- package/dist/components/shared/iab-first-paint-sheets.js +1 -0
- package/dist/components/shared/primitives/button.js +1 -1
- package/dist/components/shared/surface-styles.js +2 -0
- package/dist/consent-gate.js +1 -1
- package/dist/context/index.js +1 -1
- package/dist/devtools.js +1 -1
- package/dist/hooks/use-iab-policy-guard.js +1 -0
- package/dist/iab/styles.tw3.css +2 -2
- package/dist/iab-context.js +1 -1
- package/dist/iab-dialog-deferred.js +2 -0
- package/dist/iab.js +1 -1
- package/dist/index-parts/consent-gate.js +1 -1
- package/dist/index-parts/core.js +1 -1
- package/dist/index-parts/frame.js +1 -0
- package/dist/index-parts/hosted.js +1 -0
- package/dist/index-parts/offline.js +1 -0
- package/dist/index-parts/presets.js +1 -0
- package/dist/index.js +1 -1
- package/dist/modes.js +1 -0
- package/dist/panel-link.js +1 -1
- package/dist/panel-trigger.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/styles.tw3.css +2 -2
- package/dist/transports/hosted.js +1 -0
- package/dist/transports/manifest.js +1 -0
- package/dist/utils/deferred-module.js +1 -1
- package/dist/version.js +1 -1
- package/dist-types/chunk-warming.d.ts +7 -6
- package/dist-types/components/consent-gate/frame.d.ts +19 -0
- package/dist-types/components/consent-gate/index.d.ts +3 -19
- package/dist-types/components/iab-prompt/iab-prompt.d.ts +1 -1
- package/dist-types/components/panel/index.d.ts +1 -1
- package/dist-types/components/panel-trigger/toolbar-loader.d.ts +34 -0
- package/dist-types/components/preferences/index.d.ts +1 -1
- package/dist-types/components/prompt/atoms/early-tap-script.d.ts +17 -0
- package/dist-types/components/prompt/index.d.ts +1 -1
- package/dist-types/components/shared/dialog-sheets.d.ts +9 -0
- package/dist-types/components/shared/first-paint-sheets.d.ts +8 -0
- package/dist-types/components/shared/iab-dialog-sheets.d.ts +3 -0
- package/dist-types/components/shared/iab-first-paint-sheets.d.ts +3 -0
- package/dist-types/components/shared/surface-styles.d.ts +60 -0
- package/dist-types/consent-gate.d.ts +1 -1
- package/dist-types/context/index.d.ts +3 -3
- package/dist-types/context.d.ts +2 -0
- package/dist-types/gpp.d.ts +1 -1
- package/dist-types/hooks/use-iab-policy-guard.d.ts +35 -0
- package/dist-types/iab-dialog-deferred.d.ts +36 -0
- package/dist-types/iab.d.ts +3 -2
- package/dist-types/index-parts/consent-gate.d.ts +1 -1
- package/dist-types/index-parts/core.d.ts +1 -2
- package/dist-types/index-parts/frame.d.ts +7 -0
- package/dist-types/index-parts/hosted.d.ts +7 -0
- package/dist-types/index-parts/offline.d.ts +7 -0
- package/dist-types/index-parts/presets.d.ts +7 -0
- package/dist-types/index.d.ts +5 -1
- package/dist-types/modes.d.ts +26 -0
- package/dist-types/panel-link.d.ts +1 -1
- package/dist-types/panel-trigger.d.ts +1 -1
- package/dist-types/provider.d.ts +22 -4
- package/dist-types/transports/hosted.d.ts +36 -0
- package/dist-types/transports/manifest.d.ts +48 -0
- package/dist-types/ui-config-context.d.ts +4 -0
- package/dist-types/version.d.ts +1 -1
- package/docs/README.md +10 -12
- package/docs/concepts/choose-your-setup.md +45 -8
- package/docs/concepts/consent-categories.md +1 -1
- package/docs/concepts/consent-state.md +5 -2
- package/docs/concepts/data-fetching.md +100 -40
- package/docs/concepts/modes.md +281 -0
- package/docs/customization/dark-mode.md +1 -1
- package/docs/customization/motion.md +2 -2
- package/docs/customization/overview.md +3 -2
- package/docs/customization/recipes.md +4 -4
- package/docs/customization/slots.md +25 -25
- package/docs/customization/stylesheets.md +161 -50
- package/docs/customization/tailwind.md +71 -50
- package/docs/customization/tokens.md +42 -13
- package/docs/frameworks/react/components/consent-banner.md +14 -12
- package/docs/frameworks/react/components/consent-dialog.md +15 -13
- package/docs/frameworks/react/components/consent-provider.md +51 -46
- package/docs/frameworks/react/components.md +16 -13
- package/docs/frameworks/react/compose.md +3 -3
- package/docs/frameworks/react/content-security-policy.md +35 -12
- package/docs/frameworks/react/customize.md +21 -13
- package/docs/frameworks/react/hooks.md +2 -2
- package/docs/frameworks/react/iab.md +56 -6
- package/docs/frameworks/react/quickstart.md +65 -99
- package/docs/frameworks/react/rendering.md +170 -94
- package/docs/frameworks/react/scripts.md +19 -30
- package/docs/frameworks/react/troubleshooting.md +100 -32
- package/docs/frameworks/react/upgrade-v3.md +133 -79
- package/docs/frameworks/react/vendor-consent.md +19 -7
- package/docs/guides/banner-experiments.md +21 -8
- package/docs/guides/troubleshooting.md +90 -26
- package/docs/guides/verify-consent.md +23 -8
- package/docs/integrations/adobe-analytics.md +60 -64
- package/docs/integrations/ahrefs-analytics.md +58 -63
- package/docs/integrations/amplitude.md +60 -64
- package/docs/integrations/clearbit.md +59 -63
- package/docs/integrations/cloudflare-web-analytics.md +56 -60
- package/docs/integrations/cloudflare-zaraz.md +55 -57
- package/docs/integrations/crisp.md +64 -69
- package/docs/integrations/databuddy.md +62 -64
- package/docs/integrations/fathom-analytics.md +56 -60
- package/docs/integrations/front-chat.md +56 -60
- package/docs/integrations/google-maps.md +25 -13
- package/docs/integrations/google-tag-manager.md +153 -77
- package/docs/integrations/google-tag.md +134 -78
- package/docs/integrations/heap.md +56 -60
- package/docs/integrations/hightouch.md +55 -60
- package/docs/integrations/hotjar.md +60 -64
- package/docs/integrations/intercom.md +55 -60
- package/docs/integrations/klaviyo.md +65 -66
- package/docs/integrations/linkedin-insights.md +58 -63
- package/docs/integrations/logrocket.md +55 -60
- package/docs/integrations/matomo-analytics.md +58 -60
- package/docs/integrations/meta-pixel.md +56 -60
- package/docs/integrations/microsoft-clarity.md +57 -60
- package/docs/integrations/microsoft-uet.md +58 -61
- package/docs/integrations/mixpanel-analytics.md +73 -75
- package/docs/integrations/one-dollar-stats.md +53 -59
- package/docs/integrations/openai-pixel.md +58 -60
- package/docs/integrations/overview.md +59 -42
- package/docs/integrations/pinterest-tag.md +56 -60
- package/docs/integrations/pirsch.md +54 -60
- package/docs/integrations/plausible-analytics.md +55 -60
- package/docs/integrations/posthog.md +56 -60
- package/docs/integrations/promptwatch.md +57 -63
- package/docs/integrations/reddit-pixel.md +57 -60
- package/docs/integrations/rudderstack.md +65 -67
- package/docs/integrations/rybbit-analytics.md +70 -75
- package/docs/integrations/segment.md +56 -60
- package/docs/integrations/sentry.md +65 -60
- package/docs/integrations/snapchat-pixel.md +54 -60
- package/docs/integrations/tiktok-pixel.md +59 -63
- package/docs/integrations/umami-analytics.md +54 -60
- package/docs/integrations/vercel-analytics.md +53 -59
- package/docs/integrations/vercel-speed-insights.md +317 -0
- package/docs/integrations/x-pixel.md +57 -63
- package/docs/integrations/youtube.md +25 -13
- package/package.json +18 -8
- package/docs/upgrade-v3.md +0 -429
|
@@ -3,21 +3,31 @@ title: Front Chat
|
|
|
3
3
|
description: Load the Front Chat widget only after functionality consent with
|
|
4
4
|
the c15t frontChat helper, forward CSP nonces, clear the session on revocation
|
|
5
5
|
and check it in DevTools.
|
|
6
|
+
seoTitle: Front Chat cookie consent with c15t
|
|
7
|
+
seoDescription: Show Front Chat only with functionality consent. You can also
|
|
8
|
+
clear the Front session when a visitor withdraws consent, with the c15t
|
|
9
|
+
frontChat helper.
|
|
6
10
|
icon: front-chat
|
|
7
11
|
group: integrations
|
|
8
12
|
---
|
|
9
13
|
|
|
14
|
+
The c15t `frontChat` helper keeps the Front Chat bundle off the page until
|
|
15
|
+
`functionality` has consent. After the bundle loads, the helper calls
|
|
16
|
+
`FrontChat('init')` with your chat ID. If the visitor withdraws consent, c15t
|
|
17
|
+
reloads the page by default. To ask Front to clear the chat session, call
|
|
18
|
+
`shutdownFrontChat()` from `onBeforeConsentRevocationReload`.
|
|
19
|
+
|
|
10
20
|
## Configure Front Chat
|
|
11
21
|
|
|
12
22
|
Copy the `chatId` from the widget snippet in your Front Chat channel's
|
|
13
23
|
**Installation** tab.
|
|
14
24
|
|
|
15
|
-
| Package manager | Command
|
|
16
|
-
| :-------------- |
|
|
17
|
-
| npm | `npm install @c15t/integrations
|
|
18
|
-
| pnpm | `pnpm add @c15t/integrations
|
|
19
|
-
| yarn | `yarn add @c15t/integrations
|
|
20
|
-
| bun | `bun add @c15t/integrations
|
|
25
|
+
| Package manager | Command |
|
|
26
|
+
| :-------------- | :------------------------------- |
|
|
27
|
+
| npm | `npm install @c15t/integrations` |
|
|
28
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
29
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
30
|
+
| bun | `bun add @c15t/integrations` |
|
|
21
31
|
|
|
22
32
|
```ts title="src/consent-scripts.ts"
|
|
23
33
|
import { frontChat } from '@c15t/integrations/front-chat';
|
|
@@ -32,51 +42,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
32
42
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
33
43
|
|
|
34
44
|
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
35
|
-
quickstart already
|
|
36
|
-
Next.js guide, add the helper to that array instead of creating a
|
|
45
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
46
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
47
|
+
second file.
|
|
37
48
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
38
49
|
point for your framework below. These are edits to that provider, not a second
|
|
39
50
|
provider.
|
|
40
51
|
|
|
41
52
|
**Next.js**
|
|
42
53
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```ts
|
|
46
|
-
import { ConsentRoot } from 'c15t/next';
|
|
47
|
-
import { scripts } from './consent-scripts';
|
|
48
|
-
```
|
|
54
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
55
|
+
`next.config.ts`:
|
|
49
56
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
```ts title="c15t.config.ts"
|
|
58
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
59
|
+
import { scripts } from './src/consent-scripts';
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
56
|
-
{children}
|
|
57
|
-
</ConsentRoot>
|
|
61
|
+
export default defineConsentConfig({ scripts });
|
|
58
62
|
```
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
65
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
66
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
67
|
+
read the same file. See
|
|
63
68
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
64
69
|
|
|
65
70
|
**TanStack Start**
|
|
66
71
|
|
|
67
72
|
Import the configuration into your root route and pass it to the existing
|
|
68
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
69
|
-
|
|
73
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
74
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
70
75
|
|
|
71
76
|
```tsx title="src/routes/__root.tsx"
|
|
72
77
|
import { scripts } from '../consent-scripts';
|
|
73
78
|
|
|
74
|
-
<ConsentRoot
|
|
75
|
-
state={consent}
|
|
76
|
-
backendURL={backendURL}
|
|
77
|
-
initRoute={false}
|
|
78
|
-
scripts={scripts}
|
|
79
|
-
>
|
|
79
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -95,8 +95,8 @@ import { scripts } from './consent-scripts';
|
|
|
95
95
|
<ConsentProvider options={{ mode, scripts }}>
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
`mode` is the `
|
|
99
|
-
|
|
98
|
+
`mode` is the `manifest()` value from the
|
|
99
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
100
100
|
dialog and preferences link inside the provider. See
|
|
101
101
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
102
102
|
|
|
@@ -125,15 +125,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
125
125
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
126
126
|
|
|
127
127
|
```ts title="src/main.ts"
|
|
128
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
128
129
|
import { scripts } from './consent-scripts';
|
|
129
130
|
|
|
130
131
|
app.use(c15tVue, {
|
|
131
|
-
|
|
132
|
+
mode: manifest(),
|
|
132
133
|
scripts,
|
|
133
134
|
});
|
|
134
135
|
```
|
|
135
136
|
|
|
136
|
-
Keep your existing
|
|
137
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
137
138
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
138
139
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
139
140
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -141,12 +142,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
141
142
|
**Astro**
|
|
142
143
|
|
|
143
144
|
Add the scripts to the client entrypoint from the
|
|
144
|
-
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart),
|
|
145
|
-
integration
|
|
146
|
-
|
|
147
|
-
already exports scripts, combine the two arrays.
|
|
145
|
+
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
146
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
147
|
+
If the module already exports scripts, combine the two arrays.
|
|
148
148
|
|
|
149
|
-
```ts title="src/
|
|
149
|
+
```ts title="src/c15t.client.ts"
|
|
150
150
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
151
151
|
import { scripts } from './consent-scripts';
|
|
152
152
|
|
|
@@ -166,15 +166,13 @@ pass them as a top-level prop:
|
|
|
166
166
|
|
|
167
167
|
```svelte title="src/App.svelte"
|
|
168
168
|
<script lang="ts">
|
|
169
|
-
import {
|
|
169
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
170
170
|
import { scripts } from './consent-scripts';
|
|
171
|
-
|
|
172
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
173
171
|
</script>
|
|
174
172
|
|
|
175
|
-
<
|
|
173
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
176
174
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
177
|
-
</
|
|
175
|
+
</ConsentProvider>
|
|
178
176
|
```
|
|
179
177
|
|
|
180
178
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -182,22 +180,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
182
180
|
|
|
183
181
|
**SvelteKit**
|
|
184
182
|
|
|
185
|
-
Add the scripts to the existing root layout
|
|
186
|
-
and
|
|
183
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
184
|
+
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
187
185
|
|
|
188
186
|
```svelte title="src/routes/+layout.svelte"
|
|
189
187
|
<script lang="ts">
|
|
190
|
-
import {
|
|
188
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
191
189
|
import { scripts } from '../consent-scripts';
|
|
192
190
|
|
|
193
191
|
let { children, data } = $props();
|
|
194
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
195
192
|
</script>
|
|
196
193
|
|
|
197
|
-
<
|
|
194
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
198
195
|
{@render children()}
|
|
199
196
|
<!-- Keep your consent UI and preferences link here. -->
|
|
200
|
-
</
|
|
197
|
+
</ConsentRoot>
|
|
201
198
|
```
|
|
202
199
|
|
|
203
200
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -224,20 +221,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
224
221
|
|
|
225
222
|
**JavaScript**
|
|
226
223
|
|
|
227
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
228
|
-
URL:
|
|
224
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
229
225
|
|
|
230
226
|
```ts
|
|
231
|
-
import { init } from '@c15t/browser';
|
|
227
|
+
import { init, manifest } from '@c15t/browser';
|
|
232
228
|
import { scripts } from './consent-scripts';
|
|
233
229
|
|
|
234
230
|
const consent = init({
|
|
235
|
-
|
|
231
|
+
mode: manifest(),
|
|
236
232
|
scripts,
|
|
237
233
|
});
|
|
238
234
|
```
|
|
239
235
|
|
|
240
|
-
Keep the
|
|
236
|
+
Keep the mode from your quickstart. With
|
|
241
237
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
242
238
|
A kernel you create yourself needs a loader from
|
|
243
239
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -247,7 +243,7 @@ A kernel you create yourself needs a loader from
|
|
|
247
243
|
|
|
248
244
|
| Option | Default | Behavior |
|
|
249
245
|
| -------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
250
|
-
| `chatId` | Required | Public chat ID passed to `FrontChat('init')`. Surrounding whitespace is trimmed
|
|
246
|
+
| `chatId` | Required | Public chat ID passed to `FrontChat('init')`. Surrounding whitespace is trimmed. An empty value logs an error and the script does not load. |
|
|
251
247
|
| `useDefaultLauncher` | `true` | Shows Front's launcher. With `false`, open the widget from your own launcher through Front's [SDK](https://dev.frontapp.com/docs/chat-sdk-reference). |
|
|
252
248
|
| `nonce` | None | CSP nonce for the loader and Front's generated scripts. A loader nonce from your consent provider is forwarded to `init` too. |
|
|
253
249
|
| `scriptSrc` | `https://chat-assets.frontapp.com/v1/chat.bundle.js` | Loader URL override. A proxy here does not proxy the widget's other requests. |
|
|
@@ -315,8 +311,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
315
311
|
cookies the vendor already set; see
|
|
316
312
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
317
313
|
|
|
318
|
-
The helper
|
|
319
|
-
|
|
314
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
315
|
+
turn it off inside an allowed category. See
|
|
320
316
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
321
317
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
322
318
|
expiry and hosting checks.
|
|
@@ -3,10 +3,22 @@ title: Google Maps
|
|
|
3
3
|
description: Gate a Google Maps iframe embed with c15t v3 so the map loads only
|
|
4
4
|
after the visitor allows its consent category, in Next.js, TanStack Start,
|
|
5
5
|
React, Nuxt, Vue, Astro, Svelte, SvelteKit, HTML or JavaScript.
|
|
6
|
+
seoTitle: Google Maps embed cookie consent with c15t
|
|
7
|
+
seoDescription: Show Google Maps embeds only with consent. c15t loads the map
|
|
8
|
+
iframe only when its category has consent, in Next.js, React, Vue, Svelte,
|
|
9
|
+
Astro and HTML.
|
|
6
10
|
icon: google-maps
|
|
7
11
|
group: integrations
|
|
8
12
|
---
|
|
9
13
|
|
|
14
|
+
c15t has no Google Maps helper. This guide puts a Google Maps iframe inside each
|
|
15
|
+
framework's `ConsentGate`, or uses `data-category` with the HTML script tag. The
|
|
16
|
+
example uses the `functionality` category, but you can choose a different
|
|
17
|
+
category. Until that category has consent, the page has no iframe that loads a
|
|
18
|
+
Google Maps URL, so the browser does not connect to Google. If the visitor
|
|
19
|
+
withdraws consent, `ConsentGate` removes the iframe. With `data-category`, c15t
|
|
20
|
+
moves the URL from `src` to `data-src`.
|
|
21
|
+
|
|
10
22
|
## Configure the map
|
|
11
23
|
|
|
12
24
|
Copy the map's iframe embed URL. Choose the category matching its use in your
|
|
@@ -111,7 +123,7 @@ on revocation. Keep your existing consent styles and preferences dialog.
|
|
|
111
123
|
|
|
112
124
|
**Nuxt**
|
|
113
125
|
|
|
114
|
-
The Nuxt module registers `ConsentGate` and `
|
|
126
|
+
The Nuxt module registers `ConsentGate` and `ConsentDialogLink`, so
|
|
115
127
|
this component imports only the embed configuration.
|
|
116
128
|
|
|
117
129
|
```vue title="app/components/ConsentEmbed.vue"
|
|
@@ -130,7 +142,7 @@ import { embedCategory, embedURL, embedTitle, embedAspectRatio } from '../../src
|
|
|
130
142
|
/>
|
|
131
143
|
<template #placeholder>
|
|
132
144
|
<p>Allow {{ embedCategory }} to load this content.</p>
|
|
133
|
-
<
|
|
145
|
+
<ConsentDialogLink>Open privacy settings</ConsentDialogLink>
|
|
134
146
|
</template>
|
|
135
147
|
</ConsentGate>
|
|
136
148
|
</template>
|
|
@@ -146,8 +158,7 @@ Render this component inside the app that installed the c15t Vue plugin.
|
|
|
146
158
|
|
|
147
159
|
```vue title="src/ConsentEmbed.vue"
|
|
148
160
|
<script setup lang="ts">
|
|
149
|
-
import ConsentGate from 'c15t/vue/
|
|
150
|
-
import ConsentPreferencesLink from 'c15t/vue/runtime/components/consent-preferences-link.vue';
|
|
161
|
+
import { ConsentDialogLink, ConsentGate } from 'c15t/vue/vue-plugin';
|
|
151
162
|
import { embedCategory, embedURL, embedTitle, embedAspectRatio } from './embed-config';
|
|
152
163
|
</script>
|
|
153
164
|
|
|
@@ -162,7 +173,7 @@ import { embedCategory, embedURL, embedTitle, embedAspectRatio } from './embed-c
|
|
|
162
173
|
/>
|
|
163
174
|
<template #placeholder>
|
|
164
175
|
<p>Allow {{ embedCategory }} to load this content.</p>
|
|
165
|
-
<
|
|
176
|
+
<ConsentDialogLink>Open privacy settings</ConsentDialogLink>
|
|
166
177
|
</template>
|
|
167
178
|
</ConsentGate>
|
|
168
179
|
</template>
|
|
@@ -223,7 +234,7 @@ runtime for this embed.
|
|
|
223
234
|
|
|
224
235
|
**Svelte**
|
|
225
236
|
|
|
226
|
-
Render this component inside the existing `
|
|
237
|
+
Render this component inside the existing `ConsentProvider`.
|
|
227
238
|
The provider from your quickstart supplies its consent state.
|
|
228
239
|
|
|
229
240
|
```svelte title="src/ConsentEmbed.svelte"
|
|
@@ -252,8 +263,8 @@ iframe.
|
|
|
252
263
|
|
|
253
264
|
**SvelteKit**
|
|
254
265
|
|
|
255
|
-
Render this component inside the existing `
|
|
256
|
-
Keep the SvelteKit root
|
|
266
|
+
Render this component inside the existing `ConsentRoot`.
|
|
267
|
+
Keep the SvelteKit root and its server-resolved state unchanged.
|
|
257
268
|
|
|
258
269
|
```svelte title="src/lib/ConsentEmbed.svelte"
|
|
259
270
|
<script lang="ts">
|
|
@@ -282,14 +293,15 @@ iframe.
|
|
|
282
293
|
**HTML**
|
|
283
294
|
|
|
284
295
|
The c15t script tag gates iframes that name a category. Put the embed's URL
|
|
285
|
-
in `data-src` instead of `src
|
|
286
|
-
|
|
296
|
+
in `data-src` instead of `src`. Replace `EMBED_URL`, `EMBED_CATEGORY` and
|
|
297
|
+
`EMBED_TITLE` with `embedURL`, `embedCategory` and `embedTitle` from the
|
|
298
|
+
configuration on this page:
|
|
287
299
|
|
|
288
300
|
```html
|
|
289
301
|
<iframe
|
|
290
|
-
data-src="
|
|
291
|
-
data-category="
|
|
292
|
-
title="
|
|
302
|
+
data-src="EMBED_URL"
|
|
303
|
+
data-category="EMBED_CATEGORY"
|
|
304
|
+
title="EMBED_TITLE"
|
|
293
305
|
loading="lazy"
|
|
294
306
|
allowfullscreen
|
|
295
307
|
></iframe>
|