@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
|
@@ -2,22 +2,34 @@
|
|
|
2
2
|
title: Matomo Analytics
|
|
3
3
|
description: Load Matomo after measurement consent with the c15t matomoAnalytics
|
|
4
4
|
helper, or use Matomo's own consent mode, and check each mode in DevTools.
|
|
5
|
+
seoTitle: Matomo cookie consent with c15t
|
|
6
|
+
seoDescription: Load Matomo only after measurement consent, or load it on every
|
|
7
|
+
page and use the Matomo consent API. Set it up with the c15t matomoAnalytics
|
|
8
|
+
helper.
|
|
5
9
|
icon: matomo
|
|
6
10
|
group: integrations
|
|
7
11
|
---
|
|
8
12
|
|
|
13
|
+
By default, the c15t `matomoAnalytics` helper keeps Matomo off the page until
|
|
14
|
+
`measurement` has consent. In this mode, the helper sends no consent signal to
|
|
15
|
+
Matomo. With `defaultConsent`, the helper loads `matomo.js` on every page,
|
|
16
|
+
before the visitor chooses. The helper then uses the Matomo consent API. It
|
|
17
|
+
calls `requireConsent` while `measurement` has no consent, `setConsentGiven`
|
|
18
|
+
while it has consent, and `forgetConsentGiven` after the visitor withdraws
|
|
19
|
+
consent.
|
|
20
|
+
|
|
9
21
|
## Configure Matomo Analytics
|
|
10
22
|
|
|
11
23
|
Copy the site ID and your Matomo URL from the Matomo tracking code. For Matomo
|
|
12
24
|
Cloud, pass `cloudId`, for example `'your-site.matomo.cloud'`, instead of
|
|
13
25
|
`matomoUrl`.
|
|
14
26
|
|
|
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
|
|
27
|
+
| Package manager | Command |
|
|
28
|
+
| :-------------- | :------------------------------- |
|
|
29
|
+
| npm | `npm install @c15t/integrations` |
|
|
30
|
+
| pnpm | `pnpm add @c15t/integrations` |
|
|
31
|
+
| yarn | `yarn add @c15t/integrations` |
|
|
32
|
+
| bun | `bun add @c15t/integrations` |
|
|
21
33
|
|
|
22
34
|
```ts title="src/consent-scripts.ts"
|
|
23
35
|
import { matomoAnalytics } from '@c15t/integrations/matomo-analytics';
|
|
@@ -34,51 +46,41 @@ endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
|
34
46
|
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
35
47
|
|
|
36
48
|
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
37
|
-
quickstart already
|
|
38
|
-
Next.js guide, add the helper to that array instead of creating a
|
|
49
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
50
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
51
|
+
second file.
|
|
39
52
|
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
40
53
|
point for your framework below. These are edits to that provider, not a second
|
|
41
54
|
provider.
|
|
42
55
|
|
|
43
56
|
**Next.js**
|
|
44
57
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
import { ConsentRoot } from 'c15t/next';
|
|
49
|
-
import { scripts } from './consent-scripts';
|
|
50
|
-
```
|
|
58
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
59
|
+
`next.config.ts`:
|
|
51
60
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
```ts title="c15t.config.ts"
|
|
62
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
63
|
+
import { scripts } from './src/consent-scripts';
|
|
55
64
|
|
|
56
|
-
|
|
57
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
58
|
-
{children}
|
|
59
|
-
</ConsentRoot>
|
|
65
|
+
export default defineConsentConfig({ scripts });
|
|
60
66
|
```
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
68
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
69
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
70
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
71
|
+
read the same file. See
|
|
65
72
|
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts).
|
|
66
73
|
|
|
67
74
|
**TanStack Start**
|
|
68
75
|
|
|
69
76
|
Import the configuration into your root route and pass it to the existing
|
|
70
|
-
`ConsentRoot` as a top-level prop. Keep the loader
|
|
71
|
-
|
|
77
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
78
|
+
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
72
79
|
|
|
73
80
|
```tsx title="src/routes/__root.tsx"
|
|
74
81
|
import { scripts } from '../consent-scripts';
|
|
75
82
|
|
|
76
|
-
<ConsentRoot
|
|
77
|
-
state={consent}
|
|
78
|
-
backendURL={backendURL}
|
|
79
|
-
initRoute={false}
|
|
80
|
-
scripts={scripts}
|
|
81
|
-
>
|
|
83
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
82
84
|
```
|
|
83
85
|
|
|
84
86
|
Import vendor helpers in the root route module, not in a server function.
|
|
@@ -97,8 +99,8 @@ import { scripts } from './consent-scripts';
|
|
|
97
99
|
<ConsentProvider options={{ mode, scripts }}>
|
|
98
100
|
```
|
|
99
101
|
|
|
100
|
-
`mode` is the `
|
|
101
|
-
|
|
102
|
+
`mode` is the `manifest()` value from the
|
|
103
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
102
104
|
dialog and preferences link inside the provider. See
|
|
103
105
|
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
104
106
|
|
|
@@ -127,15 +129,16 @@ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
|
127
129
|
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
128
130
|
|
|
129
131
|
```ts title="src/main.ts"
|
|
132
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
130
133
|
import { scripts } from './consent-scripts';
|
|
131
134
|
|
|
132
135
|
app.use(c15tVue, {
|
|
133
|
-
|
|
136
|
+
mode: manifest(),
|
|
134
137
|
scripts,
|
|
135
138
|
});
|
|
136
139
|
```
|
|
137
140
|
|
|
138
|
-
Keep your existing
|
|
141
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
139
142
|
script loader when the app mounts, after it has applied the visitor's stored
|
|
140
143
|
choice. Do not also call `createScriptLoader` from a component. See
|
|
141
144
|
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts).
|
|
@@ -143,12 +146,11 @@ choice. Do not also call `createScriptLoader` from a component. See
|
|
|
143
146
|
**Astro**
|
|
144
147
|
|
|
145
148
|
Add the scripts to the client entrypoint from the
|
|
146
|
-
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart),
|
|
147
|
-
integration
|
|
148
|
-
|
|
149
|
-
already exports scripts, combine the two arrays.
|
|
149
|
+
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
150
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
151
|
+
If the module already exports scripts, combine the two arrays.
|
|
150
152
|
|
|
151
|
-
```ts title="src/
|
|
153
|
+
```ts title="src/c15t.client.ts"
|
|
152
154
|
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
153
155
|
import { scripts } from './consent-scripts';
|
|
154
156
|
|
|
@@ -168,15 +170,13 @@ pass them as a top-level prop:
|
|
|
168
170
|
|
|
169
171
|
```svelte title="src/App.svelte"
|
|
170
172
|
<script lang="ts">
|
|
171
|
-
import {
|
|
173
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
172
174
|
import { scripts } from './consent-scripts';
|
|
173
|
-
|
|
174
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
175
175
|
</script>
|
|
176
176
|
|
|
177
|
-
<
|
|
177
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
178
178
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
179
|
-
</
|
|
179
|
+
</ConsentProvider>
|
|
180
180
|
```
|
|
181
181
|
|
|
182
182
|
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
@@ -184,22 +184,21 @@ The provider owns the loader and disposes it on unmount.
|
|
|
184
184
|
|
|
185
185
|
**SvelteKit**
|
|
186
186
|
|
|
187
|
-
Add the scripts to the existing root layout
|
|
188
|
-
and
|
|
187
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
188
|
+
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
189
189
|
|
|
190
190
|
```svelte title="src/routes/+layout.svelte"
|
|
191
191
|
<script lang="ts">
|
|
192
|
-
import {
|
|
192
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
193
193
|
import { scripts } from '../consent-scripts';
|
|
194
194
|
|
|
195
195
|
let { children, data } = $props();
|
|
196
|
-
const mode = hosted({ url: 'https://your-project.inth.app' });
|
|
197
196
|
</script>
|
|
198
197
|
|
|
199
|
-
<
|
|
198
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
200
199
|
{@render children()}
|
|
201
200
|
<!-- Keep your consent UI and preferences link here. -->
|
|
202
|
-
</
|
|
201
|
+
</ConsentRoot>
|
|
203
202
|
```
|
|
204
203
|
|
|
205
204
|
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
@@ -226,20 +225,19 @@ to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/sc
|
|
|
226
225
|
|
|
227
226
|
**JavaScript**
|
|
228
227
|
|
|
229
|
-
Pass the scripts to `init()` from `@c15t/browser`, next to your
|
|
230
|
-
URL:
|
|
228
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
231
229
|
|
|
232
230
|
```ts
|
|
233
|
-
import { init } from '@c15t/browser';
|
|
231
|
+
import { init, manifest } from '@c15t/browser';
|
|
234
232
|
import { scripts } from './consent-scripts';
|
|
235
233
|
|
|
236
234
|
const consent = init({
|
|
237
|
-
|
|
235
|
+
mode: manifest(),
|
|
238
236
|
scripts,
|
|
239
237
|
});
|
|
240
238
|
```
|
|
241
239
|
|
|
242
|
-
Keep the
|
|
240
|
+
Keep the mode from your quickstart. With
|
|
243
241
|
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
244
242
|
A kernel you create yourself needs a loader from
|
|
245
243
|
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
@@ -252,7 +250,7 @@ A kernel you create yourself needs a loader from
|
|
|
252
250
|
| `matomoUrl` | None | Self-hosted Matomo base URL. The helper loads `<matomoUrl>/matomo.js` and sends hits to `<matomoUrl>/matomo.php`. |
|
|
253
251
|
| `cloudId` | None | Matomo Cloud ID, used when `matomoUrl` is not set. A value ending in `.matomo.cloud` becomes `https://<cloudId>`. Any other value becomes `https://cdn.matomo.cloud/<cloudId>`. |
|
|
254
252
|
| `trackerUrl` | `matomo.php` on the Matomo origin | Tracker endpoint override. |
|
|
255
|
-
| `scriptUrl` | `matomo.js` on the Matomo origin | Loader URL override. Without `matomoUrl` or `cloudId`, set both `trackerUrl` and `scriptUrl`, or the helper
|
|
253
|
+
| `scriptUrl` | `matomo.js` on the Matomo origin | Loader URL override. Without `matomoUrl` or `cloudId`, set both `trackerUrl` and `scriptUrl`, or the helper logs an error and the script does not load. |
|
|
256
254
|
| `siteId` | `1` | Site ID queued with `setSiteId`. |
|
|
257
255
|
| `trackPageView` | `true` | Queues `trackPageView`. The table below shows when. |
|
|
258
256
|
| `enableLinkTracking` | `false` | Queues `enableLinkTracking`. |
|
|
@@ -304,8 +302,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
304
302
|
cookies the vendor already set; see
|
|
305
303
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
306
304
|
|
|
307
|
-
The helper
|
|
308
|
-
|
|
305
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
306
|
+
turn it off inside an allowed category. See
|
|
309
307
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
310
308
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
311
309
|
expiry and hosting checks.
|
|
@@ -2,22 +2,32 @@
|
|
|
2
2
|
title: Meta Pixel
|
|
3
3
|
description: Load the Meta Pixel only after marketing consent with the c15t
|
|
4
4
|
metaPixel helper, guard fbq event calls, and check it in DevTools.
|
|
5
|
+
seoTitle: Meta Pixel cookie consent with c15t
|
|
6
|
+
seoDescription: Load the Meta Pixel only with marketing consent. The c15t
|
|
7
|
+
metaPixel helper sends fbq consent grant and revoke signals for you.
|
|
5
8
|
icon: meta
|
|
6
9
|
group: integrations
|
|
7
10
|
---
|
|
8
11
|
|
|
12
|
+
The c15t `metaPixel` helper keeps the Meta Pixel off the page until `marketing`
|
|
13
|
+
has consent. Until then, c15t does not define `fbq`. When `marketing` has
|
|
14
|
+
consent, the helper queues `fbq('consent', 'grant')` before `init` and the page
|
|
15
|
+
view. If the visitor withdraws consent, the helper calls
|
|
16
|
+
`fbq('consent', 'revoke')`. The script stays on the page. By default, c15t also
|
|
17
|
+
reloads the page.
|
|
18
|
+
|
|
9
19
|
## Configure the Meta Pixel
|
|
10
20
|
|
|
11
21
|
Copy the pixel ID from Meta Events Manager. Remove the original pixel snippet,
|
|
12
22
|
its `<noscript>` tracking image and any tag-manager entry that loads the same
|
|
13
23
|
pixel.
|
|
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 { metaPixel } from '@c15t/integrations/meta-pixel';
|
|
@@ -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
|
-
| `pixelId` | Required | Pixel ID passed to `fbq('init', ...)`. The helper trims it. Empty or whitespace-only values
|
|
246
|
+
| `pixelId` | Required | Pixel ID passed to `fbq('init', ...)`. The helper trims it. Empty or whitespace-only values log an error and the script does not load. |
|
|
251
247
|
| `initOptions` | None | Object passed as the third argument to `fbq('init', ...)`. |
|
|
252
248
|
| `trackPageView` | `true` | Queues `fbq('track', 'PageView')` after `init`. Set `false` to send page views yourself. |
|
|
253
249
|
| `dataProcessingOptions` | None | `{ options, country?, state? }`. Queues `fbq('dataProcessingOptions', ...)` before `init`, for example `{ options: ['LDU'], country: 1, state: 1000 }` for Limited Data Use in California. |
|
|
@@ -316,8 +312,8 @@ permission before each of your own event calls. The reload does not delete
|
|
|
316
312
|
cookies the vendor already set; see
|
|
317
313
|
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
318
314
|
|
|
319
|
-
The helper
|
|
320
|
-
|
|
315
|
+
The helper lists its vendor by name in the preference dialog, so a visitor can
|
|
316
|
+
turn it off inside an allowed category. See
|
|
321
317
|
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
322
318
|
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
323
319
|
expiry and hosting checks.
|