@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
|
@@ -2,21 +2,31 @@
|
|
|
2
2
|
title: Clearbit
|
|
3
3
|
description: Load the Clearbit enrichment tag only after marketing consent with
|
|
4
4
|
the c15t clearbit helper, and check it in DevTools.
|
|
5
|
+
seoTitle: Clearbit cookie consent with c15t
|
|
6
|
+
seoDescription: Load Clearbit only with marketing consent, because Clearbit
|
|
7
|
+
identifies visitors and their companies. Set it up with the c15t clearbit
|
|
8
|
+
helper.
|
|
5
9
|
icon: clearbit
|
|
6
10
|
group: integrations
|
|
7
11
|
---
|
|
8
12
|
|
|
13
|
+
The c15t `clearbit` helper keeps the Clearbit tag, `tags.js`, off the page until
|
|
14
|
+
`marketing` has consent. The category is `marketing`, not `measurement`, because
|
|
15
|
+
Clearbit identifies visitors and their companies. The helper sends no consent
|
|
16
|
+
signal to Clearbit. If the visitor withdraws consent, c15t removes the script
|
|
17
|
+
element. By default, c15t also reloads the page.
|
|
18
|
+
|
|
9
19
|
## Configure Clearbit
|
|
10
20
|
|
|
11
21
|
Use the publishable key from your Clearbit tag installation. Do not put a
|
|
12
22
|
secret Clearbit API key in browser code.
|
|
13
23
|
|
|
14
|
-
| Package manager | Command
|
|
15
|
-
| :-------------- |
|
|
16
|
-
| npm | `npm install @c15t/integrations
|
|
17
|
-
| pnpm | `pnpm add @c15t/integrations
|
|
18
|
-
| yarn | `yarn add @c15t/integrations
|
|
19
|
-
| 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` |
|
|
20
30
|
|
|
21
31
|
```ts title="src/consent-scripts.ts"
|
|
22
32
|
import { clearbit } from '@c15t/integrations/clearbit';
|
|
@@ -31,51 +41,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
31
41
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
32
42
|
|
|
33
43
|
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
34
|
-
quickstart already
|
|
35
|
-
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.
|
|
36
47
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
37
48
|
point for your framework below. These are edits to that provider, not a second
|
|
38
49
|
provider.
|
|
39
50
|
|
|
40
51
|
**Next.js**
|
|
41
52
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
import { ConsentRoot } from 'c15t/next';
|
|
46
|
-
import { scripts } from './consent-scripts';
|
|
47
|
-
```
|
|
53
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
54
|
+
`next.config.ts`:
|
|
48
55
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
```ts title="c15t.config.ts"
|
|
57
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
58
|
+
import { scripts } from './src/consent-scripts';
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
55
|
-
{children}
|
|
56
|
-
</ConsentRoot>
|
|
60
|
+
export default defineConsentConfig({ scripts });
|
|
57
61
|
```
|
|
58
62
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
62
67
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
63
68
|
|
|
64
69
|
**TanStack Start**
|
|
65
70
|
|
|
66
71
|
Import the configuration into your root route and pass it to the existing
|
|
67
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
68
|
-
|
|
72
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
73
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
69
74
|
|
|
70
75
|
```tsx title="src/routes/__root.tsx"
|
|
71
76
|
import { scripts } from '../consent-scripts';
|
|
72
77
|
|
|
73
|
-
<ConsentRoot
|
|
74
|
-
state={consent}
|
|
75
|
-
backendURL={backendURL}
|
|
76
|
-
initRoute={false}
|
|
77
|
-
scripts={scripts}
|
|
78
|
-
>
|
|
78
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -94,8 +94,8 @@ import { scripts } from './consent-scripts';
|
|
|
94
94
|
<ConsentProvider options={{ mode, scripts }}>
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
`mode` is the `
|
|
98
|
-
|
|
97
|
+
`mode` is the `manifest()` value from the
|
|
98
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
99
99
|
dialog and preferences link inside the provider. See
|
|
100
100
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
101
101
|
|
|
@@ -124,15 +124,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
124
124
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
125
125
|
|
|
126
126
|
```ts title="src/main.ts"
|
|
127
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
127
128
|
import { scripts } from './consent-scripts';
|
|
128
129
|
|
|
129
130
|
app.use(c15tVue, {
|
|
130
|
-
|
|
131
|
+
mode: manifest(),
|
|
131
132
|
scripts,
|
|
132
133
|
});
|
|
133
134
|
```
|
|
134
135
|
|
|
135
|
-
Keep your existing
|
|
136
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
136
137
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
137
138
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
138
139
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -140,12 +141,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
140
141
|
**Astro**
|
|
141
142
|
|
|
142
143
|
Add the scripts to the client entrypoint from the
|
|
143
|
-
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart),
|
|
144
|
-
integration
|
|
145
|
-
|
|
146
|
-
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.
|
|
147
147
|
|
|
148
|
-
```ts title="src/
|
|
148
|
+
```ts title="src/c15t.client.ts"
|
|
149
149
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
150
150
|
import { scripts } from './consent-scripts';
|
|
151
151
|
|
|
@@ -165,15 +165,13 @@ pass them as a top-level prop:
|
|
|
165
165
|
|
|
166
166
|
```svelte title="src/App.svelte"
|
|
167
167
|
<script lang="ts">
|
|
168
|
-
import {
|
|
168
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
169
169
|
import { scripts } from './consent-scripts';
|
|
170
|
-
|
|
171
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
172
170
|
</script>
|
|
173
171
|
|
|
174
|
-
<
|
|
172
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
175
173
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
176
|
-
</
|
|
174
|
+
</ConsentProvider>
|
|
177
175
|
```
|
|
178
176
|
|
|
179
177
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -181,22 +179,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
181
179
|
|
|
182
180
|
**SvelteKit**
|
|
183
181
|
|
|
184
|
-
Add the scripts to the existing root layout
|
|
185
|
-
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).
|
|
186
184
|
|
|
187
185
|
```svelte title="src/routes/+layout.svelte"
|
|
188
186
|
<script lang="ts">
|
|
189
|
-
import {
|
|
187
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
190
188
|
import { scripts } from '../consent-scripts';
|
|
191
189
|
|
|
192
190
|
let { children, data } = $props();
|
|
193
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
194
191
|
</script>
|
|
195
192
|
|
|
196
|
-
<
|
|
193
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
197
194
|
{@render children()}
|
|
198
195
|
<!-- Keep your consent UI and preferences link here. -->
|
|
199
|
-
</
|
|
196
|
+
</ConsentRoot>
|
|
200
197
|
```
|
|
201
198
|
|
|
202
199
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -223,20 +220,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
223
220
|
|
|
224
221
|
**JavaScript**
|
|
225
222
|
|
|
226
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
227
|
-
URL:
|
|
223
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
228
224
|
|
|
229
225
|
```ts
|
|
230
|
-
import { init } from '@c15t/browser';
|
|
226
|
+
import { init, manifest } from '@c15t/browser';
|
|
231
227
|
import { scripts } from './consent-scripts';
|
|
232
228
|
|
|
233
229
|
const consent = init({
|
|
234
|
-
|
|
230
|
+
mode: manifest(),
|
|
235
231
|
scripts,
|
|
236
232
|
});
|
|
237
233
|
```
|
|
238
234
|
|
|
239
|
-
Keep the
|
|
235
|
+
Keep the mode from your quickstart. With
|
|
240
236
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
241
237
|
A kernel you create yourself needs a loader from
|
|
242
238
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -244,10 +240,10 @@ A kernel you create yourself needs a loader from
|
|
|
244
240
|
|
|
245
241
|
## Options
|
|
246
242
|
|
|
247
|
-
| Option | Default | Behavior
|
|
248
|
-
| ---------------- | ------------------------------------------------------------- |
|
|
249
|
-
| `publishableKey` | Required | Publishable key. The helper trims it and URL-encodes it into the default loader URL. Empty or non-string values
|
|
250
|
-
| `scriptUrl` | `https://tag.clearbitscripts.com/v1/<publishableKey>/tags.js` | Loader URL override. A blank value falls back to the default.
|
|
243
|
+
| Option | Default | Behavior |
|
|
244
|
+
| ---------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
245
|
+
| `publishableKey` | Required | Publishable key. The helper trims it and URL-encodes it into the default loader URL. Empty or non-string values log an error and the script does not load. |
|
|
246
|
+
| `scriptUrl` | `https://tag.clearbitscripts.com/v1/<publishableKey>/tags.js` | Loader URL override. A blank value falls back to the default. |
|
|
251
247
|
|
|
252
248
|
## Loading and revocation
|
|
253
249
|
|
|
@@ -284,8 +280,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
284
280
|
cookies the vendor already set; see
|
|
285
281
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
286
282
|
|
|
287
|
-
The helper
|
|
288
|
-
|
|
283
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
284
|
+
turn it off inside an allowed category. See
|
|
289
285
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
290
286
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
291
287
|
expiry and hosting checks.
|
|
@@ -2,22 +2,32 @@
|
|
|
2
2
|
title: Cloudflare Web Analytics
|
|
3
3
|
description: Load the Cloudflare Web Analytics beacon only after measurement
|
|
4
4
|
consent with the c15t cloudflareWebAnalytics helper, and check it in DevTools.
|
|
5
|
+
seoTitle: Cloudflare Web Analytics cookie consent with c15t
|
|
6
|
+
seoDescription: Load the Cloudflare Web Analytics beacon only with measurement
|
|
7
|
+
consent. Set it up with the c15t cloudflareWebAnalytics helper.
|
|
5
8
|
icon: cloudflare-web-analytics
|
|
6
9
|
group: integrations
|
|
7
10
|
---
|
|
8
11
|
|
|
12
|
+
The c15t `cloudflareWebAnalytics` helper keeps the Cloudflare Web Analytics
|
|
13
|
+
beacon, `beacon.min.js`, off the page until `measurement` has consent.
|
|
14
|
+
Cloudflare says that the beacon sets no cookies, but c15t still waits for
|
|
15
|
+
consent. The helper sends no consent signal to Cloudflare. If the visitor
|
|
16
|
+
withdraws consent, c15t removes the script element. By default, c15t also
|
|
17
|
+
reloads the page.
|
|
18
|
+
|
|
9
19
|
## Configure Cloudflare Web Analytics
|
|
10
20
|
|
|
11
21
|
Copy the beacon token from the Web Analytics installation snippet. If
|
|
12
22
|
Cloudflare adds the beacon to this site automatically, turn that off so the
|
|
13
23
|
page has one beacon and c15t controls it.
|
|
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 { cloudflareWebAnalytics } from '@c15t/integrations/cloudflare-web-analytics';
|
|
@@ -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
|
-
| `token` | Required | Beacon token, written into the `data-cf-beacon` attribute. The helper trims it. Empty values
|
|
246
|
+
| `token` | Required | Beacon token, written into the `data-cf-beacon` attribute. The helper trims it. Empty values log an error and the script does not load. |
|
|
251
247
|
| `spa` | `true` | Written into `data-cf-beacon`. Turns on Cloudflare's route tracking for single-page apps. Set `false` for a site with only full page loads. |
|
|
252
248
|
| `scriptUrl` | `https://static.cloudflareinsights.com/beacon.min.js` | Loader URL override. |
|
|
253
249
|
|
|
@@ -285,8 +281,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
285
281
|
cookies the vendor already set; see
|
|
286
282
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
287
283
|
|
|
288
|
-
The helper
|
|
289
|
-
|
|
284
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
285
|
+
turn it off inside an allowed category. See
|
|
290
286
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
291
287
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
292
288
|
expiry and hosting checks.
|