@c15t/react 3.0.0-alpha.9 → 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 +7 -9
- 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/shared/primitives/button.js +1 -1
- package/dist/components/shared/surface-styles.js +1 -1
- package/dist/consent-gate.js +1 -1
- package/dist/context/index.js +1 -1
- package/dist/devtools.js +1 -1
- package/dist/iab/styles.tw3.css +2 -2
- 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/surface-styles.d.ts +26 -2
- 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/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 +3 -3
- package/dist-types/transports/hosted.d.ts +36 -0
- package/dist-types/transports/manifest.d.ts +48 -0
- package/dist-types/version.d.ts +1 -1
- package/docs/README.md +7 -9
- package/docs/concepts/choose-your-setup.md +45 -10
- package/docs/concepts/consent-categories.md +1 -1
- package/docs/concepts/consent-state.md +5 -2
- package/docs/concepts/data-fetching.md +100 -42
- 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/recipes.md +4 -4
- package/docs/customization/slots.md +25 -25
- package/docs/customization/stylesheets.md +12 -14
- package/docs/customization/tailwind.md +17 -11
- package/docs/customization/tokens.md +36 -7
- package/docs/frameworks/react/components/consent-banner.md +14 -10
- package/docs/frameworks/react/components/consent-dialog.md +14 -10
- package/docs/frameworks/react/components/consent-provider.md +51 -44
- package/docs/frameworks/react/components.md +14 -10
- package/docs/frameworks/react/content-security-policy.md +21 -12
- package/docs/frameworks/react/hooks.md +2 -2
- package/docs/frameworks/react/iab.md +20 -2
- package/docs/frameworks/react/quickstart.md +63 -97
- package/docs/frameworks/react/rendering.md +168 -94
- package/docs/frameworks/react/scripts.md +19 -28
- package/docs/frameworks/react/troubleshooting.md +57 -25
- package/docs/frameworks/react/upgrade-v3.md +110 -62
- package/docs/guides/banner-experiments.md +21 -6
- package/docs/guides/troubleshooting.md +89 -25
- 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,34 @@ title: OpenAI Pixel
|
|
|
3
3
|
description: Load the ChatGPT Ads Measurement Pixel only after marketing consent
|
|
4
4
|
with the c15t openaiPixel helper, guard oaiq conversion calls, and check it in
|
|
5
5
|
DevTools.
|
|
6
|
+
seoTitle: OpenAI Pixel cookie consent with c15t
|
|
7
|
+
seoDescription: Load the OpenAI ChatGPT Ads Measurement Pixel only after
|
|
8
|
+
marketing consent. The c15t openaiPixel helper sends oaiq consent signals for
|
|
9
|
+
you.
|
|
6
10
|
icon: chatgpt
|
|
7
11
|
group: integrations
|
|
8
12
|
---
|
|
9
13
|
|
|
14
|
+
The c15t `openaiPixel` helper keeps the OpenAI ChatGPT Ads Measurement Pixel off
|
|
15
|
+
the page until `marketing` has consent. Until then, c15t does not define the
|
|
16
|
+
`oaiq` queue. When `marketing` has consent, the helper queues
|
|
17
|
+
`oaiq('consent', false)`, `init`, and `oaiq('consent', true)` before the SDK
|
|
18
|
+
loads. If the visitor withdraws consent, the helper calls
|
|
19
|
+
`oaiq('consent', false)`. The SDK stays on the page. By default, c15t also
|
|
20
|
+
reloads the page.
|
|
21
|
+
|
|
10
22
|
## Configure the OpenAI Pixel
|
|
11
23
|
|
|
12
24
|
Copy the pixel ID from the conversions tab in OpenAI Ads Manager. Remove the
|
|
13
25
|
standalone OpenAI installation snippet, because the helper creates the `oaiq`
|
|
14
26
|
queue and initializes the pixel itself.
|
|
15
27
|
|
|
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
|
|
28
|
+
| Package manager | Command |
|
|
29
|
+
| :-------------- | :------------------------------- |
|
|
30
|
+
| npm | `npm install @c15t/integrations` |
|
|
31
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
32
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
33
|
+
| bun | `bun add @c15t/integrations` |
|
|
22
34
|
|
|
23
35
|
```ts title="src/consent-scripts.ts"
|
|
24
36
|
import { openaiPixel } from '@c15t/integrations/openai-pixel';
|
|
@@ -33,51 +45,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
33
45
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
34
46
|
|
|
35
47
|
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
|
|
48
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
49
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
50
|
+
second file.
|
|
38
51
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
39
52
|
point for your framework below. These are edits to that provider, not a second
|
|
40
53
|
provider.
|
|
41
54
|
|
|
42
55
|
**Next.js**
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import { ConsentRoot } from 'c15t/next';
|
|
48
|
-
import { scripts } from './consent-scripts';
|
|
49
|
-
```
|
|
57
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
58
|
+
`next.config.ts`:
|
|
50
59
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
```ts title="c15t.config.ts"
|
|
61
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
62
|
+
import { scripts } from './src/consent-scripts';
|
|
54
63
|
|
|
55
|
-
|
|
56
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
57
|
-
{children}
|
|
58
|
-
</ConsentRoot>
|
|
64
|
+
export default defineConsentConfig({ scripts });
|
|
59
65
|
```
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
68
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
69
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
70
|
+
read the same file. See
|
|
64
71
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
65
72
|
|
|
66
73
|
**TanStack Start**
|
|
67
74
|
|
|
68
75
|
Import the configuration into your root route and pass it to the existing
|
|
69
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
70
|
-
|
|
76
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
77
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
71
78
|
|
|
72
79
|
```tsx title="src/routes/__root.tsx"
|
|
73
80
|
import { scripts } from '../consent-scripts';
|
|
74
81
|
|
|
75
|
-
<ConsentRoot
|
|
76
|
-
state={consent}
|
|
77
|
-
backendURL={backendURL}
|
|
78
|
-
initRoute={false}
|
|
79
|
-
scripts={scripts}
|
|
80
|
-
>
|
|
82
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
81
83
|
```
|
|
82
84
|
|
|
83
85
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -96,8 +98,8 @@ import { scripts } from './consent-scripts';
|
|
|
96
98
|
<ConsentProvider options={{ mode, scripts }}>
|
|
97
99
|
```
|
|
98
100
|
|
|
99
|
-
`mode` is the `
|
|
100
|
-
|
|
101
|
+
`mode` is the `manifest()` value from the
|
|
102
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
101
103
|
dialog and preferences link inside the provider. See
|
|
102
104
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
103
105
|
|
|
@@ -126,15 +128,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
126
128
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
127
129
|
|
|
128
130
|
```ts title="src/main.ts"
|
|
131
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
129
132
|
import { scripts } from './consent-scripts';
|
|
130
133
|
|
|
131
134
|
app.use(c15tVue, {
|
|
132
|
-
|
|
135
|
+
mode: manifest(),
|
|
133
136
|
scripts,
|
|
134
137
|
});
|
|
135
138
|
```
|
|
136
139
|
|
|
137
|
-
Keep your existing
|
|
140
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
138
141
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
139
142
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
140
143
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -142,12 +145,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
142
145
|
**Astro**
|
|
143
146
|
|
|
144
147
|
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.
|
|
148
|
+
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
149
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
150
|
+
If the module already exports scripts, combine the two arrays.
|
|
149
151
|
|
|
150
|
-
```ts title="src/
|
|
152
|
+
```ts title="src/c15t.client.ts"
|
|
151
153
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
152
154
|
import { scripts } from './consent-scripts';
|
|
153
155
|
|
|
@@ -167,15 +169,13 @@ pass them as a top-level prop:
|
|
|
167
169
|
|
|
168
170
|
```svelte title="src/App.svelte"
|
|
169
171
|
<script lang="ts">
|
|
170
|
-
import {
|
|
172
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
171
173
|
import { scripts } from './consent-scripts';
|
|
172
|
-
|
|
173
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
174
174
|
</script>
|
|
175
175
|
|
|
176
|
-
<
|
|
176
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
177
177
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
178
|
-
</
|
|
178
|
+
</ConsentProvider>
|
|
179
179
|
```
|
|
180
180
|
|
|
181
181
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -183,22 +183,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
183
183
|
|
|
184
184
|
**SvelteKit**
|
|
185
185
|
|
|
186
|
-
Add the scripts to the existing root layout
|
|
187
|
-
and
|
|
186
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
187
|
+
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
188
188
|
|
|
189
189
|
```svelte title="src/routes/+layout.svelte"
|
|
190
190
|
<script lang="ts">
|
|
191
|
-
import {
|
|
191
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
192
192
|
import { scripts } from '../consent-scripts';
|
|
193
193
|
|
|
194
194
|
let { children, data } = $props();
|
|
195
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
196
195
|
</script>
|
|
197
196
|
|
|
198
|
-
<
|
|
197
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
199
198
|
{@render children()}
|
|
200
199
|
<!-- Keep your consent UI and preferences link here. -->
|
|
201
|
-
</
|
|
200
|
+
</ConsentRoot>
|
|
202
201
|
```
|
|
203
202
|
|
|
204
203
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -225,20 +224,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
225
224
|
|
|
226
225
|
**JavaScript**
|
|
227
226
|
|
|
228
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
229
|
-
URL:
|
|
227
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
230
228
|
|
|
231
229
|
```ts
|
|
232
|
-
import { init } from '@c15t/browser';
|
|
230
|
+
import { init, manifest } from '@c15t/browser';
|
|
233
231
|
import { scripts } from './consent-scripts';
|
|
234
232
|
|
|
235
233
|
const consent = init({
|
|
236
|
-
|
|
234
|
+
mode: manifest(),
|
|
237
235
|
scripts,
|
|
238
236
|
});
|
|
239
237
|
```
|
|
240
238
|
|
|
241
|
-
Keep the
|
|
239
|
+
Keep the mode from your quickstart. With
|
|
242
240
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
243
241
|
A kernel you create yourself needs a loader from
|
|
244
242
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -248,7 +246,7 @@ A kernel you create yourself needs a loader from
|
|
|
248
246
|
|
|
249
247
|
| Option | Default | Behavior |
|
|
250
248
|
| ----------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
251
|
-
| `pixelId` | Required | Pixel ID passed to `oaiq('init', ...)`. The helper trims it. Empty or whitespace-only values
|
|
249
|
+
| `pixelId` | Required | Pixel ID passed to `oaiq('init', ...)`. The helper trims it. Empty or whitespace-only values log an error and the script does not load. |
|
|
252
250
|
| `debug` | `false` | Logs SDK activity, including queued and dropped events, to the browser console. |
|
|
253
251
|
| `user` | None | User matching fields passed to `init`: `email_sha256`, `phone_number_sha256`, `external_id_sha256`, `first_name_sha256`, `last_name_sha256`, `country`, `city`, `region` and `postal_code`. |
|
|
254
252
|
| `scriptSrc` | `https://bzrcdn.openai.com/sdk/oaiq.min.js` | SDK URL override. A blank value falls back to the default. |
|
|
@@ -337,8 +335,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
337
335
|
cookies the vendor already set; see
|
|
338
336
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
339
337
|
|
|
340
|
-
The helper
|
|
341
|
-
|
|
338
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
339
|
+
turn it off inside an allowed category. See
|
|
342
340
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
343
341
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
344
342
|
expiry and hosting checks.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
title: Integrations
|
|
3
3
|
description: Find all c15t integrations for analytics, tag managers,
|
|
4
4
|
advertising, email and SMS, chat and embedded content.
|
|
5
|
+
seoTitle: Cookie consent integrations for analytics and ads | c15t
|
|
6
|
+
seoDescription: Connect analytics, ad pixels, chat widgets and embeds to your
|
|
7
|
+
cookie banner. c15t has helpers for Google Tag Manager, Meta Pixel, PostHog,
|
|
8
|
+
Segment and Hotjar.
|
|
5
9
|
group: integrations
|
|
6
10
|
---
|
|
7
11
|
|
|
@@ -12,12 +16,12 @@ register with your c15t provider. Importing a helper installs nothing on its
|
|
|
12
16
|
own. Set up consent with your [framework quickstart](https://c15t.com/docs/frameworks) first,
|
|
13
17
|
then follow the vendor guide.
|
|
14
18
|
|
|
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
|
|
19
|
+
| Package manager | Command |
|
|
20
|
+
| :-------------- | :------------------------------- |
|
|
21
|
+
| npm | `npm install @c15t/integrations` |
|
|
22
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
23
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
24
|
+
| bun | `bun add @c15t/integrations` |
|
|
21
25
|
|
|
22
26
|
`@c15t/integrations` is a separate package. Keep importing c15t itself from `c15t`,
|
|
23
27
|
for example `c15t/react` or `c15t/next`.
|
|
@@ -40,41 +44,42 @@ kernel to control its DOM lifecycle. Embeds do not require `@c15t/integrations`.
|
|
|
40
44
|
|
|
41
45
|
## Tag managers
|
|
42
46
|
|
|
43
|
-
| Integration | Helper | Category
|
|
44
|
-
| --------------------------------------------- | ------------------ |
|
|
45
|
-
| [Cloudflare Zaraz](./cloudflare-zaraz.md) | `cloudflareZaraz` | `necessary`
|
|
46
|
-
| [Google Tag Manager](./google-tag-manager.md) | `googleTagManager` | `necessary` | Always loads
|
|
47
|
+
| Integration | Helper | Category | Loading behavior |
|
|
48
|
+
| --------------------------------------------- | ------------------ | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| [Cloudflare Zaraz](./cloudflare-zaraz.md) | `cloudflareZaraz` | `necessary` | Always runs; syncs purposes, Zaraz runs the tools |
|
|
50
|
+
| [Google Tag Manager](./google-tag-manager.md) | `googleTagManager` | `necessary`; `measurement` or `marketing` when gated | Always loads and signals Google consent by default; `loadMode: 'after-consent'` waits for permission |
|
|
47
51
|
|
|
48
52
|
## Analytics
|
|
49
53
|
|
|
50
|
-
| Integration | Helper | Category | Loading behavior
|
|
51
|
-
| --------------------------------------------------------- | ------------------------ | ----------------------------------------------- |
|
|
52
|
-
| [Google Tag](./google-tag.md) | `gtag` | `measurement` or `marketing` | Always loads
|
|
53
|
-
| [Ahrefs Analytics](./ahrefs-analytics.md) | `ahrefsAnalytics` | `measurement` | Waits for effective permission
|
|
54
|
-
| [Adobe Analytics](./adobe-analytics.md) | `adobeAnalytics` | `measurement` | Waits for effective permission
|
|
55
|
-
| [Amplitude](./amplitude.md) | `amplitude` | `measurement` | Waits for effective permission; opts the SDK out on revocation
|
|
56
|
-
| [Cloudflare Web Analytics](./cloudflare-web-analytics.md) | `cloudflareWebAnalytics` | `measurement` | Waits for effective permission
|
|
57
|
-
| [Clearbit](./clearbit.md) | `clearbit` | `marketing` | Waits for effective permission
|
|
58
|
-
| [Microsoft Clarity](./microsoft-clarity.md) | `clarity` | `measurement` | Gated initially; keeps the SDK and signals storage consent
|
|
59
|
-
| [Databuddy](./databuddy.md) | `databuddy` | `measurement` | Always loads; switches the SDK's disabled flag
|
|
60
|
-
| [Fathom Analytics](./fathom-analytics.md) | `fathomAnalytics` | `measurement` | Waits for effective permission
|
|
61
|
-
| [Heap](./heap.md) | `heap` | `measurement` | Waits for effective permission
|
|
62
|
-
| [Matomo Analytics](./matomo-analytics.md) | `matomoAnalytics` | `measurement` | Gated by default; optional consent mode
|
|
63
|
-
| [Mixpanel](./mixpanel-analytics.md) | `mixpanelAnalytics` | `measurement` | Always loads; calls opt-in and opt-out APIs
|
|
64
|
-
| [OneDollarStats](./one-dollar-stats.md) | `oneDollarStats` | `measurement` | Waits for effective permission
|
|
65
|
-
| [Hotjar](./hotjar.md) | `hotjar` | `measurement` | Waits for effective permission
|
|
66
|
-
| [Hightouch](./hightouch.md) | `hightouch` | `measurement` | Waits for effective permission
|
|
67
|
-
| [LogRocket](./logrocket.md) | `logRocket` | `measurement` | Waits for effective permission
|
|
68
|
-
| [Plausible Analytics](./plausible-analytics.md) | `plausibleAnalytics` | `measurement` | Waits for effective permission
|
|
69
|
-
| [PostHog](./posthog.md) | `posthog` | `measurement` | Configurable; defaults to always loading and calling opt-in and opt-out APIs
|
|
70
|
-
| [Promptwatch](./promptwatch.md) | `promptwatch` | `measurement` | Waits for effective permission
|
|
71
|
-
| [Pirsch](./pirsch.md) | `pirsch` | `measurement` | Waits for effective permission
|
|
72
|
-
| [RudderStack](./rudderstack.md) | `rudderstack` | `measurement` | Gated by default; optional destination consent mode
|
|
73
|
-
| [Segment](./segment.md) | `segment` | `measurement` | Waits for effective permission
|
|
74
|
-
| [Sentry](./sentry.md) | `sentry` | `necessary`; Replay and user data `measurement` | Configurable; defaults to always loading and loads Replay after permission
|
|
75
|
-
| [Rybbit Analytics](./rybbit-analytics.md) | `rybbitAnalytics` | `measurement` | Waits for effective permission
|
|
76
|
-
| [Umami Analytics](./umami-analytics.md) | `umamiAnalytics` | `measurement` | Waits for effective permission
|
|
77
|
-
| [Vercel Analytics](./vercel-analytics.md) | `vercelAnalytics` | `measurement` | Waits for effective permission
|
|
54
|
+
| Integration | Helper | Category | Loading behavior |
|
|
55
|
+
| --------------------------------------------------------- | ------------------------ | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| [Google Tag](./google-tag.md) | `gtag` | `measurement` or `marketing` | Always loads and signals Google consent by default; `loadMode: 'after-consent'` waits for permission |
|
|
57
|
+
| [Ahrefs Analytics](./ahrefs-analytics.md) | `ahrefsAnalytics` | `measurement` | Waits for effective permission |
|
|
58
|
+
| [Adobe Analytics](./adobe-analytics.md) | `adobeAnalytics` | `measurement` | Waits for effective permission |
|
|
59
|
+
| [Amplitude](./amplitude.md) | `amplitude` | `measurement` | Waits for effective permission; opts the SDK out on revocation |
|
|
60
|
+
| [Cloudflare Web Analytics](./cloudflare-web-analytics.md) | `cloudflareWebAnalytics` | `measurement` | Waits for effective permission |
|
|
61
|
+
| [Clearbit](./clearbit.md) | `clearbit` | `marketing` | Waits for effective permission |
|
|
62
|
+
| [Microsoft Clarity](./microsoft-clarity.md) | `clarity` | `measurement` | Gated initially; keeps the SDK and signals storage consent |
|
|
63
|
+
| [Databuddy](./databuddy.md) | `databuddy` | `measurement` | Always loads; switches the SDK's disabled flag |
|
|
64
|
+
| [Fathom Analytics](./fathom-analytics.md) | `fathomAnalytics` | `measurement` | Waits for effective permission |
|
|
65
|
+
| [Heap](./heap.md) | `heap` | `measurement` | Waits for effective permission |
|
|
66
|
+
| [Matomo Analytics](./matomo-analytics.md) | `matomoAnalytics` | `measurement` | Gated by default; optional consent mode |
|
|
67
|
+
| [Mixpanel](./mixpanel-analytics.md) | `mixpanelAnalytics` | `measurement` | Always loads; calls opt-in and opt-out APIs |
|
|
68
|
+
| [OneDollarStats](./one-dollar-stats.md) | `oneDollarStats` | `measurement` | Waits for effective permission |
|
|
69
|
+
| [Hotjar](./hotjar.md) | `hotjar` | `measurement` | Waits for effective permission |
|
|
70
|
+
| [Hightouch](./hightouch.md) | `hightouch` | `measurement` | Waits for effective permission |
|
|
71
|
+
| [LogRocket](./logrocket.md) | `logRocket` | `measurement` | Waits for effective permission |
|
|
72
|
+
| [Plausible Analytics](./plausible-analytics.md) | `plausibleAnalytics` | `measurement` | Waits for effective permission |
|
|
73
|
+
| [PostHog](./posthog.md) | `posthog` | `measurement` | Configurable; defaults to always loading and calling opt-in and opt-out APIs |
|
|
74
|
+
| [Promptwatch](./promptwatch.md) | `promptwatch` | `measurement` | Waits for effective permission |
|
|
75
|
+
| [Pirsch](./pirsch.md) | `pirsch` | `measurement` | Waits for effective permission |
|
|
76
|
+
| [RudderStack](./rudderstack.md) | `rudderstack` | `measurement` | Gated by default; optional destination consent mode |
|
|
77
|
+
| [Segment](./segment.md) | `segment` | `measurement` | Waits for effective permission |
|
|
78
|
+
| [Sentry](./sentry.md) | `sentry` | `necessary`; Replay and user data `measurement` | Configurable; defaults to always loading and loads Replay after permission |
|
|
79
|
+
| [Rybbit Analytics](./rybbit-analytics.md) | `rybbitAnalytics` | `measurement` | Waits for effective permission |
|
|
80
|
+
| [Umami Analytics](./umami-analytics.md) | `umamiAnalytics` | `measurement` | Waits for effective permission |
|
|
81
|
+
| [Vercel Analytics](./vercel-analytics.md) | `vercelAnalytics` | `measurement` | Waits for effective permission |
|
|
82
|
+
| [Vercel Speed Insights](./vercel-speed-insights.md) | `vercelSpeedInsights` | `measurement` | Waits for effective permission; drops reports after revocation |
|
|
78
83
|
|
|
79
84
|
## Chat and support
|
|
80
85
|
|
|
@@ -111,16 +116,28 @@ manager entry before adding its helper. c15t cannot gate a copy it did not
|
|
|
111
116
|
load. Tag managers and data pipelines such as Segment can load further
|
|
112
117
|
destinations, which need consent settings of their own.
|
|
113
118
|
|
|
119
|
+
Framework packages are loaders too. To move their vendors to c15t, see
|
|
120
|
+
[migrate from `@next/third-parties`](https://c15t.com/docs/frameworks/next/scripts#migrate-from-nextthird-parties)
|
|
121
|
+
for Next.js, and
|
|
122
|
+
[migrate from `@nuxt/scripts`](https://c15t.com/docs/frameworks/nuxt/scripts#migrate-from-nuxtscripts)
|
|
123
|
+
or [migrate from `nuxt-gtag`](https://c15t.com/docs/frameworks/nuxt/scripts#migrate-from-nuxt-gtag)
|
|
124
|
+
for Nuxt.
|
|
125
|
+
|
|
114
126
|
When a visitor turns off a category they had allowed, c15t reloads the page so
|
|
115
127
|
that code which already ran stops. Each vendor guide lists what its helper does
|
|
116
128
|
on revocation and how to check it.
|
|
117
129
|
|
|
118
130
|
## Vendor switches and cookie cleanup
|
|
119
131
|
|
|
120
|
-
Every helper sets a `vendor` slug
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
Every helper sets a `vendor` slug and the vendor's name and privacy policy, so
|
|
133
|
+
the preference dialog lists the vendor with its own switch. A visitor can allow
|
|
134
|
+
a category and still switch one vendor off. c15t then does not load that
|
|
135
|
+
vendor's script. Helpers that load on every page, such as Google Tag Manager,
|
|
136
|
+
Microsoft UET and Mixpanel, still load and send the vendor a denied signal
|
|
137
|
+
instead. The dialog lists `necessary` helpers without a switch. Declare
|
|
138
|
+
a vendor with the same slug to replace its name and links, for example when you
|
|
139
|
+
self-host Matomo or PostHog. Gating also leaves behind the cookies a vendor
|
|
140
|
+
already wrote; `clearOnRevocation` deletes them when their category is denied. Each framework documents both in its Scripts
|
|
124
141
|
and embeds group:
|
|
125
142
|
|
|
126
143
|
| Framework | Vendor consent | Clear on revocation |
|