@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,22 +3,30 @@ title: Umami Analytics
|
|
|
3
3
|
description: Load the Umami Analytics tracker only after measurement consent
|
|
4
4
|
with the c15t umamiAnalytics helper, point it at a self-hosted instance, and
|
|
5
5
|
check it in DevTools.
|
|
6
|
+
seoTitle: Umami Analytics cookie consent with c15t
|
|
7
|
+
seoDescription: Load the Umami tracker only with measurement consent. Set it up
|
|
8
|
+
with the c15t umamiAnalytics helper and check it in DevTools.
|
|
6
9
|
icon: umami-analytics
|
|
7
10
|
group: integrations
|
|
8
11
|
---
|
|
9
12
|
|
|
13
|
+
The c15t `umamiAnalytics` helper keeps the Umami tracker off the page until
|
|
14
|
+
`measurement` has consent. The helper sends no consent signal to Umami. If the
|
|
15
|
+
visitor withdraws consent, c15t removes the script element. By default, c15t
|
|
16
|
+
also reloads the page.
|
|
17
|
+
|
|
10
18
|
## Configure Umami Analytics
|
|
11
19
|
|
|
12
20
|
Copy the website ID from your Umami tracking code. The helper passes it to the
|
|
13
21
|
script as `data-website-id`. For a self-hosted Umami instance, set `scriptUrl`
|
|
14
22
|
to your instance's tracker script.
|
|
15
23
|
|
|
16
|
-
| Package manager | Command
|
|
17
|
-
| :-------------- |
|
|
18
|
-
| npm | `npm install @c15t/integrations
|
|
19
|
-
| pnpm | `pnpm add @c15t/integrations
|
|
20
|
-
| yarn | `yarn add @c15t/integrations
|
|
21
|
-
| bun | `bun add @c15t/integrations
|
|
24
|
+
| Package manager | Command |
|
|
25
|
+
| :-------------- | :------------------------------- |
|
|
26
|
+
| npm | `npm install @c15t/integrations` |
|
|
27
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
28
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
29
|
+
| bun | `bun add @c15t/integrations` |
|
|
22
30
|
|
|
23
31
|
```ts title="src/consent-scripts.ts"
|
|
24
32
|
import { umamiAnalytics } from '@c15t/integrations/umami-analytics';
|
|
@@ -33,51 +41,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
33
41
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
34
42
|
|
|
35
43
|
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
36
|
-
quickstart already
|
|
37
|
-
Next.js guide, add the helper to that array instead of creating a
|
|
44
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
45
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
46
|
+
second file.
|
|
38
47
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
39
48
|
point for your framework below. These are edits to that provider, not a second
|
|
40
49
|
provider.
|
|
41
50
|
|
|
42
51
|
**Next.js**
|
|
43
52
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import { ConsentRoot } from 'c15t/next';
|
|
48
|
-
import { scripts } from './consent-scripts';
|
|
49
|
-
```
|
|
53
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
54
|
+
`next.config.ts`:
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
```ts title="c15t.config.ts"
|
|
57
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
58
|
+
import { scripts } from './src/consent-scripts';
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
57
|
-
{children}
|
|
58
|
-
</ConsentRoot>
|
|
60
|
+
export default defineConsentConfig({ scripts });
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
64
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
65
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
66
|
+
read the same file. See
|
|
64
67
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
65
68
|
|
|
66
69
|
**TanStack Start**
|
|
67
70
|
|
|
68
71
|
Import the configuration into your root route and pass it to the existing
|
|
69
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
70
|
-
|
|
72
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
73
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
71
74
|
|
|
72
75
|
```tsx title="src/routes/__root.tsx"
|
|
73
76
|
import { scripts } from '../consent-scripts';
|
|
74
77
|
|
|
75
|
-
<ConsentRoot
|
|
76
|
-
state={consent}
|
|
77
|
-
backendURL={backendURL}
|
|
78
|
-
initRoute={false}
|
|
79
|
-
scripts={scripts}
|
|
80
|
-
>
|
|
78
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
81
79
|
```
|
|
82
80
|
|
|
83
81
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -96,8 +94,8 @@ import { scripts } from './consent-scripts';
|
|
|
96
94
|
<ConsentProvider options={{ mode, scripts }}>
|
|
97
95
|
```
|
|
98
96
|
|
|
99
|
-
`mode` is the `
|
|
100
|
-
|
|
97
|
+
`mode` is the `manifest()` value from the
|
|
98
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
101
99
|
dialog and preferences link inside the provider. See
|
|
102
100
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
103
101
|
|
|
@@ -126,15 +124,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
126
124
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
127
125
|
|
|
128
126
|
```ts title="src/main.ts"
|
|
127
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
129
128
|
import { scripts } from './consent-scripts';
|
|
130
129
|
|
|
131
130
|
app.use(c15tVue, {
|
|
132
|
-
|
|
131
|
+
mode: manifest(),
|
|
133
132
|
scripts,
|
|
134
133
|
});
|
|
135
134
|
```
|
|
136
135
|
|
|
137
|
-
Keep your existing
|
|
136
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
138
137
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
139
138
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
140
139
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -142,12 +141,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
142
141
|
**Astro**
|
|
143
142
|
|
|
144
143
|
Add the scripts to the client entrypoint from the
|
|
145
|
-
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart),
|
|
146
|
-
integration
|
|
147
|
-
|
|
148
|
-
already exports scripts, combine the two arrays.
|
|
144
|
+
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
145
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
146
|
+
If the module already exports scripts, combine the two arrays.
|
|
149
147
|
|
|
150
|
-
```ts title="src/
|
|
148
|
+
```ts title="src/c15t.client.ts"
|
|
151
149
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
152
150
|
import { scripts } from './consent-scripts';
|
|
153
151
|
|
|
@@ -167,15 +165,13 @@ pass them as a top-level prop:
|
|
|
167
165
|
|
|
168
166
|
```svelte title="src/App.svelte"
|
|
169
167
|
<script lang="ts">
|
|
170
|
-
import {
|
|
168
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
171
169
|
import { scripts } from './consent-scripts';
|
|
172
|
-
|
|
173
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
174
170
|
</script>
|
|
175
171
|
|
|
176
|
-
<
|
|
172
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
177
173
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
178
|
-
</
|
|
174
|
+
</ConsentProvider>
|
|
179
175
|
```
|
|
180
176
|
|
|
181
177
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -183,22 +179,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
183
179
|
|
|
184
180
|
**SvelteKit**
|
|
185
181
|
|
|
186
|
-
Add the scripts to the existing root layout
|
|
187
|
-
and
|
|
182
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
183
|
+
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
188
184
|
|
|
189
185
|
```svelte title="src/routes/+layout.svelte"
|
|
190
186
|
<script lang="ts">
|
|
191
|
-
import {
|
|
187
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
192
188
|
import { scripts } from '../consent-scripts';
|
|
193
189
|
|
|
194
190
|
let { children, data } = $props();
|
|
195
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
196
191
|
</script>
|
|
197
192
|
|
|
198
|
-
<
|
|
193
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
199
194
|
{@render children()}
|
|
200
195
|
<!-- Keep your consent UI and preferences link here. -->
|
|
201
|
-
</
|
|
196
|
+
</ConsentRoot>
|
|
202
197
|
```
|
|
203
198
|
|
|
204
199
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -225,20 +220,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
225
220
|
|
|
226
221
|
**JavaScript**
|
|
227
222
|
|
|
228
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
229
|
-
URL:
|
|
223
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
230
224
|
|
|
231
225
|
```ts
|
|
232
|
-
import { init } from '@c15t/browser';
|
|
226
|
+
import { init, manifest } from '@c15t/browser';
|
|
233
227
|
import { scripts } from './consent-scripts';
|
|
234
228
|
|
|
235
229
|
const consent = init({
|
|
236
|
-
|
|
230
|
+
mode: manifest(),
|
|
237
231
|
scripts,
|
|
238
232
|
});
|
|
239
233
|
```
|
|
240
234
|
|
|
241
|
-
Keep the
|
|
235
|
+
Keep the mode from your quickstart. With
|
|
242
236
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
243
237
|
A kernel you create yourself needs a loader from
|
|
244
238
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -248,7 +242,7 @@ A kernel you create yourself needs a loader from
|
|
|
248
242
|
|
|
249
243
|
| Option | Default | Behavior |
|
|
250
244
|
| ------------ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
251
|
-
| `websiteId` | Required | Set as `data-website-id`. Empty or whitespace-only values
|
|
245
|
+
| `websiteId` | Required | Set as `data-website-id`. Empty or whitespace-only values log an error and the script does not load. |
|
|
252
246
|
| `hostUrl` | None | Host that receives events, set as `data-host-url`. |
|
|
253
247
|
| `autoTrack` | None | `false` sets `data-auto-track="false"` and stops automatic tracking. |
|
|
254
248
|
| `domains` | None | Domains to track, set as `data-domains`. Pass a comma-separated string or an array; the helper joins an array with commas. |
|
|
@@ -293,8 +287,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
293
287
|
cookies the vendor already set; see
|
|
294
288
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
295
289
|
|
|
296
|
-
The helper
|
|
297
|
-
|
|
290
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
291
|
+
turn it off inside an allowed category. See
|
|
298
292
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
299
293
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
300
294
|
expiry and hosting checks.
|
|
@@ -3,22 +3,30 @@ title: Vercel Analytics
|
|
|
3
3
|
description: Load the Vercel Web Analytics script only after measurement consent
|
|
4
4
|
with the c15t vercelAnalytics helper, choose the debug script, and check it in
|
|
5
5
|
DevTools.
|
|
6
|
+
seoTitle: Vercel Analytics cookie consent with c15t
|
|
7
|
+
seoDescription: Load Vercel Web Analytics only with measurement consent. Set it
|
|
8
|
+
up with the c15t vercelAnalytics helper and check it in DevTools.
|
|
6
9
|
icon: vercel-analytics
|
|
7
10
|
group: integrations
|
|
8
11
|
---
|
|
9
12
|
|
|
13
|
+
The c15t `vercelAnalytics` helper keeps Vercel Web Analytics off the page until
|
|
14
|
+
`measurement` has consent. Until then, c15t does not define `window.va`. The
|
|
15
|
+
helper sends no consent signal to Vercel. If the visitor withdraws consent, c15t
|
|
16
|
+
removes the script element. By default, c15t also reloads the page.
|
|
17
|
+
|
|
10
18
|
## Configure Vercel Analytics
|
|
11
19
|
|
|
12
20
|
Enable Web Analytics for the project in Vercel. Remove the `Analytics`
|
|
13
21
|
component or `inject()` call from `@vercel/analytics` so c15t loads the
|
|
14
22
|
script once.
|
|
15
23
|
|
|
16
|
-
| Package manager | Command
|
|
17
|
-
| :-------------- |
|
|
18
|
-
| npm | `npm install @c15t/integrations
|
|
19
|
-
| pnpm | `pnpm add @c15t/integrations
|
|
20
|
-
| yarn | `yarn add @c15t/integrations
|
|
21
|
-
| bun | `bun add @c15t/integrations
|
|
24
|
+
| Package manager | Command |
|
|
25
|
+
| :-------------- | :------------------------------- |
|
|
26
|
+
| npm | `npm install @c15t/integrations` |
|
|
27
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
28
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
29
|
+
| bun | `bun add @c15t/integrations` |
|
|
22
30
|
|
|
23
31
|
```ts title="src/consent-scripts.ts"
|
|
24
32
|
import { vercelAnalytics } from '@c15t/integrations/vercel-analytics';
|
|
@@ -33,51 +41,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
33
41
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
34
42
|
|
|
35
43
|
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
36
|
-
quickstart already
|
|
37
|
-
Next.js guide, add the helper to that array instead of creating a
|
|
44
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
45
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
46
|
+
second file.
|
|
38
47
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
39
48
|
point for your framework below. These are edits to that provider, not a second
|
|
40
49
|
provider.
|
|
41
50
|
|
|
42
51
|
**Next.js**
|
|
43
52
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import { ConsentRoot } from 'c15t/next';
|
|
48
|
-
import { scripts } from './consent-scripts';
|
|
49
|
-
```
|
|
53
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
54
|
+
`next.config.ts`:
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
```ts title="c15t.config.ts"
|
|
57
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
58
|
+
import { scripts } from './src/consent-scripts';
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
57
|
-
{children}
|
|
58
|
-
</ConsentRoot>
|
|
60
|
+
export default defineConsentConfig({ scripts });
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
64
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
65
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
66
|
+
read the same file. See
|
|
64
67
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
65
68
|
|
|
66
69
|
**TanStack Start**
|
|
67
70
|
|
|
68
71
|
Import the configuration into your root route and pass it to the existing
|
|
69
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
70
|
-
|
|
72
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
73
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
71
74
|
|
|
72
75
|
```tsx title="src/routes/__root.tsx"
|
|
73
76
|
import { scripts } from '../consent-scripts';
|
|
74
77
|
|
|
75
|
-
<ConsentRoot
|
|
76
|
-
state={consent}
|
|
77
|
-
backendURL={backendURL}
|
|
78
|
-
initRoute={false}
|
|
79
|
-
scripts={scripts}
|
|
80
|
-
>
|
|
78
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
81
79
|
```
|
|
82
80
|
|
|
83
81
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -96,8 +94,8 @@ import { scripts } from './consent-scripts';
|
|
|
96
94
|
<ConsentProvider options={{ mode, scripts }}>
|
|
97
95
|
```
|
|
98
96
|
|
|
99
|
-
`mode` is the `
|
|
100
|
-
|
|
97
|
+
`mode` is the `manifest()` value from the
|
|
98
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
101
99
|
dialog and preferences link inside the provider. See
|
|
102
100
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
103
101
|
|
|
@@ -126,15 +124,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
126
124
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
127
125
|
|
|
128
126
|
```ts title="src/main.ts"
|
|
127
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
129
128
|
import { scripts } from './consent-scripts';
|
|
130
129
|
|
|
131
130
|
app.use(c15tVue, {
|
|
132
|
-
|
|
131
|
+
mode: manifest(),
|
|
133
132
|
scripts,
|
|
134
133
|
});
|
|
135
134
|
```
|
|
136
135
|
|
|
137
|
-
Keep your existing
|
|
136
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
138
137
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
139
138
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
140
139
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -142,12 +141,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
142
141
|
**Astro**
|
|
143
142
|
|
|
144
143
|
Add the scripts to the client entrypoint from the
|
|
145
|
-
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart),
|
|
146
|
-
integration
|
|
147
|
-
|
|
148
|
-
already exports scripts, combine the two arrays.
|
|
144
|
+
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
145
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
146
|
+
If the module already exports scripts, combine the two arrays.
|
|
149
147
|
|
|
150
|
-
```ts title="src/
|
|
148
|
+
```ts title="src/c15t.client.ts"
|
|
151
149
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
152
150
|
import { scripts } from './consent-scripts';
|
|
153
151
|
|
|
@@ -167,15 +165,13 @@ pass them as a top-level prop:
|
|
|
167
165
|
|
|
168
166
|
```svelte title="src/App.svelte"
|
|
169
167
|
<script lang="ts">
|
|
170
|
-
import {
|
|
168
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
171
169
|
import { scripts } from './consent-scripts';
|
|
172
|
-
|
|
173
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
174
170
|
</script>
|
|
175
171
|
|
|
176
|
-
<
|
|
172
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
177
173
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
178
|
-
</
|
|
174
|
+
</ConsentProvider>
|
|
179
175
|
```
|
|
180
176
|
|
|
181
177
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -183,22 +179,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
183
179
|
|
|
184
180
|
**SvelteKit**
|
|
185
181
|
|
|
186
|
-
Add the scripts to the existing root layout
|
|
187
|
-
and
|
|
182
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
183
|
+
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
188
184
|
|
|
189
185
|
```svelte title="src/routes/+layout.svelte"
|
|
190
186
|
<script lang="ts">
|
|
191
|
-
import {
|
|
187
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
192
188
|
import { scripts } from '../consent-scripts';
|
|
193
189
|
|
|
194
190
|
let { children, data } = $props();
|
|
195
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
196
191
|
</script>
|
|
197
192
|
|
|
198
|
-
<
|
|
193
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
199
194
|
{@render children()}
|
|
200
195
|
<!-- Keep your consent UI and preferences link here. -->
|
|
201
|
-
</
|
|
196
|
+
</ConsentRoot>
|
|
202
197
|
```
|
|
203
198
|
|
|
204
199
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -225,20 +220,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
225
220
|
|
|
226
221
|
**JavaScript**
|
|
227
222
|
|
|
228
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
229
|
-
URL:
|
|
223
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
230
224
|
|
|
231
225
|
```ts
|
|
232
|
-
import { init } from '@c15t/browser';
|
|
226
|
+
import { init, manifest } from '@c15t/browser';
|
|
233
227
|
import { scripts } from './consent-scripts';
|
|
234
228
|
|
|
235
229
|
const consent = init({
|
|
236
|
-
|
|
230
|
+
mode: manifest(),
|
|
237
231
|
scripts,
|
|
238
232
|
});
|
|
239
233
|
```
|
|
240
234
|
|
|
241
|
-
Keep the
|
|
235
|
+
Keep the mode from your quickstart. With
|
|
242
236
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
243
237
|
A kernel you create yourself needs a loader from
|
|
244
238
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -295,8 +289,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
295
289
|
cookies the vendor already set; see
|
|
296
290
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
297
291
|
|
|
298
|
-
The helper
|
|
299
|
-
|
|
292
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
293
|
+
turn it off inside an allowed category. See
|
|
300
294
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
301
295
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
302
296
|
expiry and hosting checks.
|