@c15t/react 3.0.0-alpha.1 → 3.0.0-alpha.10
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 +96 -70
- package/README.md +21 -17
- package/SKILL.md +34 -0
- package/dist/aggregate-components.js +1 -1
- package/dist/chunk-warming.js +1 -1
- package/dist/component-hooks/use-headless-consent-ui.js +1 -1
- package/dist/component-hooks/use-headless-iab-consent-ui.js +1 -1
- package/dist/component-hooks/use-panel-trigger.js +1 -1
- package/dist/components/consent-gate/atoms.js +1 -0
- package/dist/components/consent-gate/consent-gate.js +2 -0
- package/dist/components/consent-gate/frame.js +2 -0
- package/dist/components/consent-gate/index.js +2 -0
- package/dist/components/consent-preferences-link/consent-preferences-link.js +1 -1
- package/dist/components/iab-panel/atoms/card.js +1 -1
- package/dist/components/iab-panel/atoms/feature-item.js +2 -0
- package/dist/components/iab-panel/atoms/header.js +1 -1
- package/dist/components/iab-panel/atoms/purpose-item.js +1 -1
- package/dist/components/iab-panel/atoms/root.js +1 -1
- package/dist/components/iab-panel/atoms/stack-item.js +1 -1
- package/dist/components/iab-panel/atoms/vendor-list.js +1 -1
- package/dist/components/iab-panel/hooks/use-gvl-data.js +1 -1
- package/dist/components/iab-panel/iab-panel.js +1 -1
- package/dist/components/iab-panel/index.js +1 -1
- package/dist/components/iab-prompt/atoms/overlay.js +1 -1
- package/dist/components/iab-prompt/atoms/root.js +1 -1
- package/dist/components/panel/atoms/card.js +1 -1
- package/dist/components/panel/atoms/overlay.js +1 -1
- package/dist/components/panel/atoms/root.js +1 -1
- package/dist/components/panel/panel.js +1 -1
- package/dist/components/panel-trigger/atoms/button.js +1 -1
- package/dist/components/panel-trigger/atoms/icon.js +1 -1
- package/dist/components/panel-trigger/atoms/root.js +1 -1
- package/dist/components/panel-trigger/atoms/toolbar.js +1 -1
- package/dist/components/panel-trigger/atoms/trigger-icons.js +1 -0
- package/dist/components/panel-trigger/panel-trigger-toolbar.js +1 -1
- package/dist/components/panel-trigger/panel-trigger.js +1 -1
- package/dist/components/preferences/atoms/accordion.js +1 -1
- package/dist/components/preferences/atoms/root.js +1 -1
- package/dist/components/preferences/atoms/vendor-list.js +1 -0
- package/dist/components/preferences/index.js +1 -1
- package/dist/components/prompt/atoms/early-tap-script.js +2 -0
- package/dist/components/prompt/atoms/overlay.js +1 -1
- package/dist/components/prompt/atoms/root.js +1 -1
- package/dist/components/prompt/components.js +1 -1
- package/dist/components/prompt/policy-actions.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/libs/compose-refs.js +1 -0
- package/dist/components/shared/libs/slot.js +1 -1
- package/dist/components/shared/primitives/button.js +1 -1
- package/dist/components/shared/primitives/legal-links/index.js +1 -1
- package/dist/components/shared/streamed-surface.js +2 -0
- package/dist/components/shared/surface-styles.js +2 -0
- package/dist/components/shared/ui/dialog/dialog.js +1 -1
- package/dist/components/shared/ui/icon.js +1 -1
- package/dist/components/shared/ui/logo.js +1 -1
- package/dist/components/shared/ui/preference-item/preference-item.js +1 -1
- package/dist/consent-gate.js +2 -0
- package/dist/consent-theme.js +1 -0
- package/dist/context/consent-tracking-context.js +1 -1
- package/dist/context/index.js +1 -1
- package/dist/context.js +1 -1
- package/dist/devtools-launcher.js +2 -0
- package/dist/devtools.js +1 -1
- package/dist/draft-context.js +2 -0
- package/dist/draft.js +1 -1
- package/dist/external-iab-context.js +1 -1
- package/dist/gpp.js +2 -0
- package/dist/headless.js +1 -1
- package/dist/hooks/use-color-scheme.js +1 -1
- package/dist/hooks/use-committed-ref.js +2 -0
- package/dist/hooks/use-focus-trap.js +1 -1
- package/dist/hooks/use-headless-iab-consent-ui.js +1 -1
- package/dist/hooks/use-iab-policy-guard.js +1 -0
- package/dist/hooks/use-late-entry.js +2 -0
- package/dist/hooks.js +1 -1
- package/dist/iab/styles.tw3.css +5 -45
- package/dist/iab-context.js +1 -1
- package/dist/index-parts/consent-banner.js +1 -0
- package/dist/index-parts/consent-dialog-link.js +1 -0
- package/dist/index-parts/consent-dialog-trigger.js +1 -0
- package/dist/index-parts/consent-dialog.js +1 -0
- package/dist/index-parts/consent-gate.js +1 -0
- package/dist/index-parts/core.js +1 -0
- package/dist/index-parts/draft.js +1 -0
- package/dist/index-parts/frame.js +1 -0
- package/dist/index-parts/hooks.js +1 -0
- package/dist/index-parts/hosted.js +1 -0
- package/dist/index-parts/module-hooks.js +1 -0
- package/dist/index-parts/offline.js +1 -0
- package/dist/index-parts/presets.js +1 -0
- package/dist/index-parts/provider.js +1 -0
- package/dist/index-parts/theme.js +1 -0
- package/dist/index-parts/translations.js +1 -0
- package/dist/index.js +1 -1
- package/dist/kernel-selector.js +1 -0
- package/dist/modes.js +1 -0
- package/dist/module-hooks/iframe-blocker.js +1 -1
- package/dist/module-hooks/network-blocker.js +1 -1
- package/dist/module-hooks/network-hold.js +2 -0
- package/dist/module-hooks/persistence.js +1 -1
- package/dist/panel-link.js +1 -1
- package/dist/panel-trigger.js +1 -1
- package/dist/panel.js +1 -1
- package/dist/postcss-tailwind3.js +1 -0
- package/dist/preferences.js +1 -2
- package/dist/provider.js +1 -1
- package/dist/server/fetch-ssr-data.js +1 -1
- package/dist/server/headers.js +1 -1
- package/dist/server/normalize-url.js +1 -1
- package/dist/styles.tw3.css +33 -51
- package/dist/transports/hosted.js +1 -0
- package/dist/transports/manifest.js +1 -0
- package/dist/transports/offline.js +1 -1
- package/dist/utils/deferred-module.js +2 -0
- package/dist/utils/merge-slot-props.js +1 -1
- package/dist/utils/theme-utils.js +1 -1
- package/dist/version.js +1 -1
- package/dist-types/aggregate-components.d.ts +2 -2
- package/dist-types/chunk-warming.d.ts +45 -8
- package/dist-types/component-hooks/use-headless-consent-ui.d.ts +5 -5
- package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +2 -2
- package/dist-types/components/consent-gate/atoms.d.ts +11 -0
- package/dist-types/components/consent-gate/consent-gate.d.ts +2 -0
- package/dist-types/components/consent-gate/frame.d.ts +19 -0
- package/dist-types/components/consent-gate/index.d.ts +25 -0
- package/dist-types/components/{frame → consent-gate}/types.d.ts +7 -7
- package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
- package/dist-types/components/consent-preferences-link/index.d.ts +1 -1
- package/dist-types/components/iab-panel/atoms/feature-item.d.ts +28 -0
- package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +5 -2
- package/dist-types/components/iab-panel/atoms/stack-item.d.ts +7 -2
- package/dist-types/components/iab-panel/atoms/vendor-list.d.ts +1 -1
- package/dist-types/components/iab-panel/iab-panel.d.ts +3 -3
- package/dist-types/components/iab-panel/index.d.ts +29 -26
- package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
- package/dist-types/components/iab-prompt/iab-prompt.d.ts +3 -3
- package/dist-types/components/iab-prompt/index.d.ts +19 -19
- package/dist-types/components/panel/atoms/card.d.ts +5 -4
- package/dist-types/components/panel/atoms/overlay.d.ts +1 -1
- package/dist-types/components/panel/index.d.ts +8 -8
- package/dist-types/components/panel/panel.d.ts +3 -3
- package/dist-types/components/panel-link/index.d.ts +1 -1
- package/dist-types/components/panel-trigger/atoms/button.d.ts +1 -1
- package/dist-types/components/panel-trigger/atoms/icon.d.ts +1 -1
- package/dist-types/components/panel-trigger/atoms/root.d.ts +2 -2
- package/dist-types/components/panel-trigger/atoms/toolbar.d.ts +2 -2
- package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +25 -0
- package/dist-types/components/panel-trigger/index.d.ts +4 -4
- package/dist-types/components/panel-trigger/panel-trigger-toolbar.d.ts +1 -1
- package/dist-types/components/panel-trigger/panel-trigger.d.ts +9 -17
- package/dist-types/components/panel-trigger/types.d.ts +1 -1
- package/dist-types/components/preferences/atoms/accordion.d.ts +6 -4
- package/dist-types/components/preferences/atoms/button.d.ts +1 -1
- package/dist-types/components/preferences/atoms/footer.d.ts +1 -1
- package/dist-types/components/preferences/atoms/root.d.ts +1 -1
- package/dist-types/components/preferences/atoms/vendor-list.d.ts +23 -0
- package/dist-types/components/preferences/index.d.ts +14 -12
- package/dist-types/components/preferences/policy-actions.d.ts +2 -2
- package/dist-types/components/preferences/preferences.d.ts +1 -1
- package/dist-types/components/preferences/types.d.ts +1 -1
- package/dist-types/components/prompt/atoms/early-tap-script.d.ts +17 -0
- package/dist-types/components/prompt/atoms/root.d.ts +4 -0
- package/dist-types/components/prompt/components.d.ts +9 -3
- package/dist-types/components/prompt/index.d.ts +12 -12
- package/dist-types/components/prompt/policy-actions.d.ts +2 -2
- package/dist-types/components/prompt/prompt.d.ts +5 -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/libs/compose-refs.d.ts +20 -0
- package/dist-types/components/shared/policy-actions.d.ts +2 -2
- package/dist-types/components/shared/primitives/box.d.ts +1 -1
- package/dist-types/components/shared/primitives/button.d.ts +2 -2
- package/dist-types/components/shared/primitives/button.types.d.ts +1 -1
- package/dist-types/components/shared/streamed-surface.d.ts +23 -0
- package/dist-types/components/shared/surface-styles.d.ts +36 -0
- package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
- package/dist-types/components/shared/ui/accordion/index.d.ts +2 -2
- package/dist-types/components/shared/ui/animated-collapse/index.d.ts +2 -2
- package/dist-types/components/shared/ui/branding.d.ts +1 -1
- package/dist-types/components/shared/ui/button/button.d.ts +1 -1
- package/dist-types/components/shared/ui/button/index.d.ts +2 -2
- package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -1
- package/dist-types/components/shared/ui/dialog/index.d.ts +1 -1
- package/dist-types/components/shared/ui/icon.d.ts +2 -1
- package/dist-types/components/shared/ui/logo.d.ts +0 -10
- package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -1
- package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +13 -0
- package/dist-types/components/shared/ui/switch/index.d.ts +2 -2
- package/dist-types/components/shared/ui/switch/switch.d.ts +1 -1
- package/dist-types/components/shared/ui/tabs/index.d.ts +1 -1
- package/dist-types/consent-gate.d.ts +1 -0
- package/dist-types/consent-theme.d.ts +38 -0
- package/dist-types/context/consent-tracking-context.d.ts +10 -0
- package/dist-types/context/index.d.ts +3 -3
- package/dist-types/context/theme-context.d.ts +3 -3
- package/dist-types/context.d.ts +25 -1
- package/dist-types/devtools-launcher.d.ts +29 -0
- package/dist-types/devtools.d.ts +13 -2
- package/dist-types/draft-context.d.ts +31 -0
- package/dist-types/draft.d.ts +81 -9
- package/dist-types/gpp.d.ts +27 -0
- package/dist-types/headless.d.ts +6 -7
- package/dist-types/hooks/use-committed-ref.d.ts +24 -0
- package/dist-types/hooks/use-focus-trap.d.ts +3 -1
- package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +1 -1
- package/dist-types/hooks/use-iab-manager.d.ts +5 -5
- package/dist-types/hooks/use-iab-policy-guard.d.ts +35 -0
- package/dist-types/hooks/use-late-entry.d.ts +14 -0
- package/dist-types/hooks/use-theme.d.ts +1 -1
- package/dist-types/hooks.d.ts +106 -11
- package/dist-types/iab.d.ts +7 -7
- package/dist-types/index-parts/consent-banner.d.ts +7 -0
- package/dist-types/index-parts/consent-dialog-link.d.ts +7 -0
- package/dist-types/index-parts/consent-dialog-trigger.d.ts +7 -0
- package/dist-types/index-parts/consent-dialog.d.ts +7 -0
- package/dist-types/index-parts/consent-gate.d.ts +7 -0
- package/dist-types/index-parts/core.d.ts +7 -0
- package/dist-types/index-parts/draft.d.ts +7 -0
- package/dist-types/index-parts/frame.d.ts +7 -0
- package/dist-types/index-parts/hooks.d.ts +7 -0
- package/dist-types/index-parts/hosted.d.ts +7 -0
- package/dist-types/index-parts/module-hooks.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-parts/provider.d.ts +7 -0
- package/dist-types/index-parts/theme.d.ts +8 -0
- package/dist-types/index-parts/translations.d.ts +7 -0
- package/dist-types/index.d.ts +32 -28
- package/dist-types/kernel-selector.d.ts +68 -0
- package/dist-types/modes.d.ts +26 -0
- package/dist-types/module-hooks/iframe-blocker.d.ts +33 -1
- package/dist-types/module-hooks/network-blocker.d.ts +23 -0
- package/dist-types/module-hooks/network-hold.d.ts +47 -0
- package/dist-types/module-hooks.d.ts +4 -4
- package/dist-types/panel-link.d.ts +1 -1
- package/dist-types/panel-trigger.d.ts +1 -1
- package/dist-types/panel.d.ts +13 -1
- package/dist-types/postcss-tailwind3.d.ts +21 -0
- package/dist-types/preferences.d.ts +12 -1
- package/dist-types/primitives/accordion.d.ts +1 -1
- package/dist-types/primitives/button.d.ts +1 -1
- package/dist-types/primitives/collapsible.d.ts +1 -1
- package/dist-types/primitives/dialog.d.ts +1 -1
- package/dist-types/primitives/preference-item.d.ts +1 -1
- package/dist-types/primitives/switch.d.ts +1 -1
- package/dist-types/primitives/tabs.d.ts +1 -1
- package/dist-types/primitives.d.ts +7 -7
- package/dist-types/prompt.d.ts +1 -1
- package/dist-types/provider.d.ts +169 -28
- package/dist-types/server/fetch-ssr-data.d.ts +1 -1
- package/dist-types/server/headers.d.ts +14 -4
- package/dist-types/server/index.d.ts +5 -5
- package/dist-types/server/normalize-url.d.ts +14 -7
- package/dist-types/server/types.d.ts +12 -1
- package/dist-types/theme-provider.d.ts +2 -2
- package/dist-types/transports/hosted.d.ts +36 -0
- package/dist-types/transports/manifest.d.ts +48 -0
- package/dist-types/transports/offline.d.ts +7 -16
- package/dist-types/types/index.d.ts +3 -3
- package/dist-types/types/manager.d.ts +1 -1
- package/dist-types/types/theme/index.d.ts +1 -1
- package/dist-types/ui-config-context.d.ts +14 -2
- package/dist-types/utils/deferred-module.d.ts +13 -0
- package/dist-types/utils/index.d.ts +4 -4
- package/dist-types/utils/merge-slot-props.d.ts +17 -3
- package/dist-types/utils/merge-styles.d.ts +1 -1
- package/dist-types/utils/theme-utils.d.ts +18 -3
- package/dist-types/version.d.ts +1 -1
- package/docs/README.md +96 -70
- package/docs/assets/v3/bottom-bar.png +0 -0
- package/docs/assets/v3/brand-card.png +0 -0
- package/docs/assets/v3/brand-preferences.png +0 -0
- package/docs/assets/v3/choice-wall.png +0 -0
- package/docs/assets/v3/headless-bar-html.png +0 -0
- package/docs/assets/v3/headless-bar-mobile.png +0 -0
- package/docs/assets/v3/headless-bar.png +0 -0
- package/docs/assets/v3/slim-bar.png +0 -0
- package/docs/concepts/choose-your-setup.md +138 -0
- package/docs/concepts/consent-categories.md +84 -0
- package/docs/concepts/consent-state.md +421 -0
- package/docs/concepts/data-fetching.md +270 -0
- package/docs/concepts/how-consent-works.md +123 -0
- package/docs/concepts/modes.md +278 -0
- package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +8 -60
- package/docs/customization/class-names.md +202 -0
- package/docs/customization/dark-mode.md +157 -0
- package/docs/customization/motion.md +128 -0
- package/docs/customization/overview.md +68 -33
- package/docs/customization/recipes.md +838 -47
- package/docs/customization/slots.md +217 -35
- package/docs/customization/stylesheets.md +248 -0
- package/docs/customization/tailwind.md +863 -0
- package/docs/customization/tokens.md +167 -36
- package/docs/customization/translations.md +87 -3
- package/docs/frameworks/react/callbacks.md +118 -0
- package/docs/frameworks/react/clear-on-revocation.md +106 -0
- package/docs/frameworks/react/components/consent-banner.md +48 -27
- package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
- package/docs/frameworks/react/components/consent-dialog-trigger.md +86 -76
- package/docs/frameworks/react/components/consent-dialog.md +111 -58
- package/docs/frameworks/react/components/{frame.md → consent-gate.md} +70 -49
- package/docs/frameworks/react/components/consent-provider.md +140 -0
- package/docs/frameworks/react/components/consent-widget.md +69 -24
- package/docs/frameworks/react/components/dev-tools.md +76 -85
- package/docs/frameworks/react/components.md +113 -0
- package/docs/frameworks/react/compose.md +354 -0
- package/docs/frameworks/react/content-security-policy.md +143 -0
- package/docs/frameworks/react/customize.md +258 -0
- package/docs/frameworks/react/embeds.md +89 -0
- package/docs/frameworks/react/gpp.md +163 -0
- package/docs/frameworks/react/headless.md +4 -4
- package/docs/frameworks/react/hooks.md +70 -0
- package/docs/frameworks/react/iab.md +259 -0
- package/docs/frameworks/react/network-blocker.md +140 -0
- package/docs/frameworks/react/quickstart.md +220 -102
- package/docs/frameworks/react/rendering.md +263 -0
- package/docs/frameworks/react/scripts.md +114 -0
- package/docs/frameworks/react/translations.md +155 -0
- package/docs/frameworks/react/troubleshooting.md +188 -61
- package/docs/frameworks/react/upgrade-v3.md +651 -0
- package/docs/frameworks/react/vendor-consent.md +188 -0
- package/docs/guides/banner-experiments.md +672 -0
- package/docs/guides/troubleshooting.md +192 -54
- package/docs/guides/verify-consent.md +96 -49
- package/docs/integrations/adobe-analytics.md +177 -183
- package/docs/integrations/ahrefs-analytics.md +162 -178
- package/docs/integrations/amplitude.md +172 -180
- package/docs/integrations/building-integrations.md +137 -33
- package/docs/integrations/clearbit.md +164 -178
- package/docs/integrations/cloudflare-web-analytics.md +166 -180
- package/docs/integrations/cloudflare-zaraz.md +333 -0
- package/docs/integrations/crisp.md +174 -182
- package/docs/integrations/databuddy.md +167 -197
- package/docs/integrations/fathom-analytics.md +168 -180
- package/docs/integrations/front-chat.md +308 -0
- package/docs/integrations/google-maps.md +142 -108
- package/docs/integrations/google-tag-manager.md +258 -185
- package/docs/integrations/google-tag.md +226 -182
- package/docs/integrations/heap.md +173 -179
- package/docs/integrations/hightouch.md +171 -181
- package/docs/integrations/hotjar.md +169 -179
- package/docs/integrations/intercom.md +193 -177
- package/docs/integrations/klaviyo.md +473 -0
- package/docs/integrations/linkedin-insights.md +184 -174
- package/docs/integrations/logrocket.md +170 -180
- package/docs/integrations/matomo-analytics.md +198 -202
- package/docs/integrations/meta-pixel.md +198 -174
- package/docs/integrations/microsoft-clarity.md +173 -179
- package/docs/integrations/microsoft-uet.md +158 -178
- package/docs/integrations/mixpanel-analytics.md +165 -184
- package/docs/integrations/one-dollar-stats.md +292 -0
- package/docs/integrations/openai-pixel.md +214 -325
- package/docs/integrations/overview.md +152 -83
- package/docs/integrations/pinterest-tag.md +315 -0
- package/docs/integrations/pirsch.md +179 -183
- package/docs/integrations/plausible-analytics.md +182 -182
- package/docs/integrations/posthog.md +323 -264
- package/docs/integrations/promptwatch.md +164 -178
- package/docs/integrations/reddit-pixel.md +195 -181
- package/docs/integrations/rudderstack.md +211 -210
- package/docs/integrations/rybbit-analytics.md +181 -184
- package/docs/integrations/segment.md +192 -178
- package/docs/integrations/sentry.md +402 -0
- package/docs/integrations/snapchat-pixel.md +196 -180
- package/docs/integrations/tiktok-pixel.md +181 -174
- package/docs/integrations/umami-analytics.md +173 -182
- package/docs/integrations/vercel-analytics.md +176 -181
- package/docs/integrations/x-pixel.md +186 -174
- package/docs/integrations/youtube.md +150 -111
- package/package.json +48 -17
- package/dist/component-hooks/use-manager.js +0 -2
- package/dist/components/frame/atoms.js +0 -1
- package/dist/components/frame/frame.js +0 -2
- package/dist/components/frame/index.js +0 -2
- package/dist/frame.js +0 -2
- package/dist/ui-save.js +0 -1
- package/dist-types/component-hooks/use-manager.d.ts +0 -40
- package/dist-types/components/frame/atoms.d.ts +0 -11
- package/dist-types/components/frame/frame.d.ts +0 -2
- package/dist-types/components/frame/index.d.ts +0 -24
- package/dist-types/frame.d.ts +0 -1
- package/dist-types/ui-save.d.ts +0 -5
- package/docs/assets/v3/brand-bar.png +0 -0
- package/docs/assets/v3/mobile-card.png +0 -0
- package/docs/assets/v3/preferences.png +0 -0
- package/docs/frameworks/react/components/consent-manager-provider.md +0 -71
- package/docs/frameworks/react/concepts/consent-categories.md +0 -33
- package/docs/frameworks/react/hooks/use-consent-manager/overview.md +0 -58
- package/docs/frameworks/react/iab/overview.md +0 -53
- package/docs/frameworks/react/script-loader.md +0 -63
- package/docs/frameworks/react/styling/overview.md +0 -217
- package/docs/guides/consent-state.md +0 -60
- package/docs/guides/data-fetching.md +0 -163
- package/docs/guides/deployment-modes.md +0 -63
- package/docs/integrations/clear-on-revocation.md +0 -167
- package/docs/upgrade-v3.md +0 -334
- package/readme.json +0 -48
- package/src/iab/styles.css +0 -11
- package/src/styles.css +0 -10
- /package/dist/components/{frame → consent-gate}/types.js +0 -0
|
@@ -1,217 +1,154 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Matomo Analytics
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: Load Matomo after measurement consent with the c15t matomoAnalytics
|
|
4
|
+
helper, or use Matomo's own consent mode, and check each mode in DevTools.
|
|
5
|
+
icon: matomo
|
|
5
6
|
group: integrations
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
## Configure Matomo
|
|
9
|
+
## Configure Matomo Analytics
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
Copy the site ID and your Matomo URL from the Matomo tracking code. For Matomo
|
|
12
|
+
Cloud, pass `cloudId`, for example `'your-site.matomo.cloud'`, instead of
|
|
13
|
+
`matomoUrl`.
|
|
12
14
|
|
|
13
|
-
| Package manager | Command
|
|
14
|
-
| :-------------- |
|
|
15
|
-
| npm | `npm install @c15t/
|
|
16
|
-
| pnpm | `pnpm add @c15t/
|
|
17
|
-
| yarn | `yarn add @c15t/
|
|
18
|
-
| bun | `bun add @c15t/
|
|
15
|
+
| Package manager | Command |
|
|
16
|
+
| :-------------- | :------------------------------------- |
|
|
17
|
+
| npm | `npm install @c15t/integrations@alpha` |
|
|
18
|
+
| pnpm | `pnpm add @c15t/integrations@alpha` |
|
|
19
|
+
| yarn | `yarn add @c15t/integrations@alpha` |
|
|
20
|
+
| bun | `bun add @c15t/integrations@alpha` |
|
|
19
21
|
|
|
20
22
|
```ts title="src/consent-scripts.ts"
|
|
21
|
-
import { matomoAnalytics } from '@c15t/
|
|
23
|
+
import { matomoAnalytics } from '@c15t/integrations/matomo-analytics';
|
|
22
24
|
|
|
23
25
|
export const scripts = [
|
|
24
|
-
|
|
25
|
-
siteId: 1,
|
|
26
|
-
matomoUrl: 'https://analytics.example.com',
|
|
27
|
-
}),
|
|
26
|
+
matomoAnalytics({ matomoUrl: 'https://analytics.example.com', siteId: 1 }),
|
|
28
27
|
];
|
|
29
28
|
```
|
|
30
29
|
|
|
31
|
-
Replace the base URL and site ID. For Matomo Cloud, use
|
|
32
|
-
`cloudId: 'your-site.matomo.cloud'` instead of `matomoUrl`.
|
|
33
|
-
|
|
34
30
|
## Register the scripts
|
|
35
31
|
|
|
36
|
-
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth
|
|
32
|
+
Complete your [framework quickstart](https://v3.c15t.com/docs/frameworks) first. Keep its Inth
|
|
37
33
|
endpoint, policy, styles and consent UI. Remove the vendor's original script,
|
|
38
|
-
SDK initializer or tag-manager entry so
|
|
34
|
+
SDK initializer or tag-manager entry, so the vendor loads only through c15t.
|
|
39
35
|
|
|
40
|
-
The
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
|
|
37
|
+
quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
|
|
38
|
+
in the Next.js guide, add the helper to that array instead of creating a
|
|
39
|
+
second file.
|
|
40
|
+
The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
|
|
41
|
+
point for your framework below. These are edits to that provider, not a second
|
|
42
|
+
provider.
|
|
43
43
|
|
|
44
44
|
**Next.js**
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
```ts
|
|
49
|
-
import { ConsentRoot } from 'c15t/next';
|
|
50
|
-
import { scripts } from './consent-scripts';
|
|
51
|
-
```
|
|
46
|
+
Add the configuration to `scripts` in `c15t.config.ts`, next to
|
|
47
|
+
`next.config.ts`:
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
```ts title="c15t.config.ts"
|
|
50
|
+
import { defineConsentConfig } from 'c15t/next';
|
|
51
|
+
import { scripts } from './src/consent-scripts';
|
|
56
52
|
|
|
57
|
-
|
|
58
|
-
<ConsentRoot state={state} config={consentConfig} scripts={scripts}>
|
|
59
|
-
{children}
|
|
60
|
-
</ConsentRoot>
|
|
53
|
+
export default defineConsentConfig({ scripts });
|
|
61
54
|
```
|
|
62
55
|
|
|
63
|
-
|
|
64
|
-
`
|
|
65
|
-
|
|
56
|
+
Keep the rest of your config, such as `mode` and `routePrefix`, in the
|
|
57
|
+
same call. `ConsentRoot` reads the config in the browser, so the layout
|
|
58
|
+
keeps passing only `state`. App Router, Pages Router and static export all
|
|
59
|
+
read the same file. See
|
|
60
|
+
[Next.js scripts and embeds](https://v3.c15t.com/docs/frameworks/next/scripts).
|
|
66
61
|
|
|
67
62
|
**TanStack Start**
|
|
68
63
|
|
|
69
|
-
|
|
70
|
-
`ConsentRoot
|
|
64
|
+
Import the configuration into your root route and pass it to the existing
|
|
65
|
+
`ConsentRoot` as a top-level prop. Keep the loader from the
|
|
66
|
+
[TanStack Start quickstart](https://v3.c15t.com/docs/frameworks/tanstack-start/quickstart):
|
|
71
67
|
|
|
72
|
-
```tsx
|
|
73
|
-
import { Outlet } from '@tanstack/react-router';
|
|
74
|
-
import { ConsentRoot } from 'c15t/tanstack-start';
|
|
68
|
+
```tsx title="src/routes/__root.tsx"
|
|
75
69
|
import { scripts } from '../consent-scripts';
|
|
76
70
|
|
|
77
|
-
|
|
78
|
-
const state = Route.useLoaderData();
|
|
79
|
-
return (
|
|
80
|
-
<ConsentRoot state={state} backendURL={backendURL} initRoute={false} scripts={scripts}>
|
|
81
|
-
<Outlet />
|
|
82
|
-
{/* Keep your consent banner, dialog and preferences link here. */}
|
|
83
|
-
</ConsentRoot>
|
|
84
|
-
);
|
|
85
|
-
}
|
|
71
|
+
<ConsentRoot state={consent} scripts={scripts}>
|
|
86
72
|
```
|
|
87
73
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
instead. Do not return script callbacks from a server function or route loader.
|
|
74
|
+
Import vendor helpers in the root route module, not in a server function.
|
|
75
|
+
A server function's return value must be serializable, and script
|
|
76
|
+
configurations carry callbacks. See
|
|
77
|
+
[TanStack Start scripts](https://v3.c15t.com/docs/frameworks/tanstack-start/scripts).
|
|
93
78
|
|
|
94
79
|
**React**
|
|
95
80
|
|
|
96
|
-
|
|
81
|
+
Add the configuration to the existing `ConsentProvider` options, next to
|
|
82
|
+
`mode`:
|
|
97
83
|
|
|
98
|
-
```
|
|
99
|
-
import { ConsentProvider } from 'c15t/react';
|
|
84
|
+
```tsx title="src/consent.tsx"
|
|
100
85
|
import { scripts } from './consent-scripts';
|
|
101
|
-
```
|
|
102
86
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
```tsx
|
|
106
|
-
<ConsentProvider options={{ ...consentOptions, scripts }}>
|
|
107
|
-
{children}
|
|
108
|
-
</ConsentProvider>
|
|
87
|
+
<ConsentProvider options={{ mode, scripts }}>
|
|
109
88
|
```
|
|
110
89
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
link inside the provider. See
|
|
90
|
+
`mode` is the `manifest()` value from the
|
|
91
|
+
[React quickstart](../frameworks/react/quickstart.md). Keep the banner,
|
|
92
|
+
dialog and preferences link inside the provider. See
|
|
93
|
+
[React scripts and embeds](../frameworks/react/scripts.md).
|
|
114
94
|
|
|
115
95
|
**Nuxt**
|
|
116
96
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
than serialized `nuxt.config.ts` runtime configuration.
|
|
97
|
+
Register the scripts under the `c15t` key in `app/app.config.ts`. Adjust the
|
|
98
|
+
relative import to where you created `consent-scripts.ts`:
|
|
120
99
|
|
|
121
|
-
```
|
|
122
|
-
<script setup lang="ts">
|
|
123
|
-
import { onUnmounted } from 'vue';
|
|
124
|
-
import { createScriptLoader } from 'c15t/modules/script-loader';
|
|
100
|
+
```ts title="app/app.config.ts"
|
|
125
101
|
import { scripts } from '../src/consent-scripts';
|
|
126
102
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
let loader: ReturnType<typeof createScriptLoader> | undefined;
|
|
130
|
-
|
|
131
|
-
const removeMountedHook = nuxtApp.hook('app:mounted', () => {
|
|
132
|
-
loader = createScriptLoader({ kernel, scripts });
|
|
133
|
-
});
|
|
134
|
-
onUnmounted(() => {
|
|
135
|
-
removeMountedHook();
|
|
136
|
-
loader?.dispose();
|
|
103
|
+
export default defineAppConfig({
|
|
104
|
+
c15t: { scripts },
|
|
137
105
|
});
|
|
138
|
-
</script>
|
|
139
|
-
|
|
140
|
-
<template>
|
|
141
|
-
<ConsentRoot />
|
|
142
|
-
<NuxtPage />
|
|
143
|
-
</template>
|
|
144
106
|
```
|
|
145
107
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
108
|
+
The Nuxt module merges this over its options in `nuxt.config.ts` and starts
|
|
109
|
+
one script loader in the browser after hydration, once it has applied the
|
|
110
|
+
visitor's stored choice and privacy signals. Keep `scripts` out of
|
|
111
|
+
`nuxt.config.ts`, which reaches the browser as JSON and drops the vendor
|
|
112
|
+
callbacks. Write the vendor IDs into `consent-scripts.ts`. See
|
|
113
|
+
[Nuxt scripts and embeds](https://v3.c15t.com/docs/frameworks/nuxt/scripts).
|
|
152
114
|
|
|
153
115
|
**Vue**
|
|
154
116
|
|
|
155
|
-
|
|
156
|
-
`App.vue`, whose lifetime covers the application:
|
|
117
|
+
Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
|
|
157
118
|
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
import { onMounted, onUnmounted } from 'vue';
|
|
161
|
-
import { createScriptLoader } from 'c15t/modules/script-loader';
|
|
162
|
-
import { useConsentKernel } from 'c15t/vue/vue-plugin';
|
|
163
|
-
import ConsentRoot from 'c15t/vue/consent-root';
|
|
119
|
+
```ts title="src/main.ts"
|
|
120
|
+
import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
|
|
164
121
|
import { scripts } from './consent-scripts';
|
|
165
122
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
onMounted(() => {
|
|
170
|
-
loader = createScriptLoader({ kernel, scripts });
|
|
123
|
+
app.use(c15tVue, {
|
|
124
|
+
mode: manifest(),
|
|
125
|
+
scripts,
|
|
171
126
|
});
|
|
172
|
-
onUnmounted(() => loader?.dispose());
|
|
173
|
-
</script>
|
|
174
|
-
|
|
175
|
-
<template>
|
|
176
|
-
<ConsentRoot />
|
|
177
|
-
<main>Your application</main>
|
|
178
|
-
</template>
|
|
179
127
|
```
|
|
180
128
|
|
|
181
|
-
Keep your existing
|
|
182
|
-
the
|
|
183
|
-
Do not
|
|
184
|
-
[Vue
|
|
129
|
+
Keep your existing `mode` and other options. The plugin starts one
|
|
130
|
+
script loader when the app mounts, after it has applied the visitor's stored
|
|
131
|
+
choice. Do not also call `createScriptLoader` from a component. See
|
|
132
|
+
[Vue scripts and embeds](https://v3.c15t.com/docs/frameworks/vue/scripts).
|
|
185
133
|
|
|
186
134
|
**Astro**
|
|
187
135
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
```js title="astro.config.mjs"
|
|
193
|
-
import { fileURLToPath } from 'node:url';
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Add this option to the existing `c15t({ ... })` call. Resolve the path from
|
|
197
|
-
the configuration file because Astro injects the import into a virtual module:
|
|
198
|
-
|
|
199
|
-
```js
|
|
200
|
-
clientEntrypoint: fileURLToPath(new URL('./src/c15t.client.ts', import.meta.url)),
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
Export the scripts from that module:
|
|
136
|
+
Add the scripts to the client entrypoint from the
|
|
137
|
+
[Astro quickstart](https://v3.c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
|
|
138
|
+
which the integration finds on its own. Keep `astro.config.mjs` as it is.
|
|
139
|
+
If the module already exports scripts, combine the two arrays.
|
|
204
140
|
|
|
205
141
|
```ts title="src/c15t.client.ts"
|
|
206
|
-
import type { C15tClientOptionsExtension } from '
|
|
142
|
+
import type { C15tClientOptionsExtension } from 'c15t/astro';
|
|
207
143
|
import { scripts } from './consent-scripts';
|
|
208
144
|
|
|
209
145
|
export default { scripts } satisfies C15tClientOptionsExtension;
|
|
210
146
|
```
|
|
211
147
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
148
|
+
Vendor helpers contain callbacks, and the integration options in
|
|
149
|
+
`astro.config.mjs` are serialized into the page, so do not put helpers in
|
|
150
|
+
the integration's `scripts` option. The integration passes the client
|
|
151
|
+
entrypoint to the one runtime every page shares, including across
|
|
215
152
|
`ClientRouter` navigation.
|
|
216
153
|
|
|
217
154
|
**Svelte**
|
|
@@ -221,96 +158,155 @@ pass them as a top-level prop:
|
|
|
221
158
|
|
|
222
159
|
```svelte title="src/App.svelte"
|
|
223
160
|
<script lang="ts">
|
|
224
|
-
import {
|
|
161
|
+
import { ConsentProvider, manifest } from '@c15t/svelte';
|
|
225
162
|
import { scripts } from './consent-scripts';
|
|
226
|
-
|
|
227
|
-
const backendURL = import.meta.env.VITE_C15T_BACKEND_URL;
|
|
228
|
-
if (!backendURL) throw new Error('Set VITE_C15T_BACKEND_URL');
|
|
229
|
-
const mode = hosted({ url: backendURL });
|
|
230
163
|
</script>
|
|
231
164
|
|
|
232
|
-
<
|
|
165
|
+
<ConsentProvider mode={manifest()} {scripts}>
|
|
233
166
|
<!-- Keep your application, consent UI and preferences link here. -->
|
|
234
|
-
</
|
|
167
|
+
</ConsentProvider>
|
|
235
168
|
```
|
|
236
169
|
|
|
237
|
-
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart).
|
|
170
|
+
Retain the styles and consent UI from the [Svelte quickstart](https://v3.c15t.com/docs/frameworks/svelte/quickstart).
|
|
238
171
|
The provider owns the loader and disposes it on unmount.
|
|
239
172
|
|
|
240
173
|
**SvelteKit**
|
|
241
174
|
|
|
242
|
-
Add the scripts to the existing root layout
|
|
243
|
-
and
|
|
175
|
+
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
|
|
176
|
+
handle and the layout load from the [SvelteKit quickstart](https://v3.c15t.com/docs/frameworks/sveltekit/quickstart).
|
|
244
177
|
|
|
245
178
|
```svelte title="src/routes/+layout.svelte"
|
|
246
179
|
<script lang="ts">
|
|
247
|
-
import {
|
|
180
|
+
import { ConsentRoot } from '@c15t/svelte';
|
|
248
181
|
import { scripts } from '../consent-scripts';
|
|
249
182
|
|
|
250
183
|
let { children, data } = $props();
|
|
251
|
-
const mode = hosted({ url: data.backendURL });
|
|
252
184
|
</script>
|
|
253
185
|
|
|
254
|
-
<
|
|
186
|
+
<ConsentRoot state={data.consent} {scripts}>
|
|
255
187
|
{@render children()}
|
|
256
188
|
<!-- Keep your consent UI and preferences link here. -->
|
|
257
|
-
</
|
|
189
|
+
</ConsentRoot>
|
|
258
190
|
```
|
|
259
191
|
|
|
260
|
-
Import vendor helpers in the layout component, not in `+layout.server.ts
|
|
261
|
-
|
|
262
|
-
|
|
192
|
+
Import vendor helpers in the layout component, not in `+layout.server.ts`:
|
|
193
|
+
a server load cannot send functions to the browser. Prerendered, static and
|
|
194
|
+
SPA-mode pages use the same `scripts` prop. If you pass an externally owned
|
|
263
195
|
`runtime` to the provider, register scripts when creating that runtime instead.
|
|
264
196
|
|
|
197
|
+
**HTML**
|
|
198
|
+
|
|
199
|
+
The helpers in `@c15t/integrations` are ES modules that need a bundler. On a
|
|
200
|
+
page that loads the c15t script tag, paste the vendor's own snippet instead
|
|
201
|
+
and keep it inert until its category is allowed:
|
|
202
|
+
|
|
203
|
+
```html
|
|
204
|
+
<script type="text/plain" data-c15t-category="measurement">
|
|
205
|
+
// The vendor's snippet, unchanged
|
|
206
|
+
</script>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Use the category this guide names for the vendor. c15t runs the snippet
|
|
210
|
+
once that category is allowed, and reloads the page when the visitor
|
|
211
|
+
withdraws it. Helper options on this page, such as `loadMode`, do not apply
|
|
212
|
+
to a pasted snippet. See [HTML scripts](https://v3.c15t.com/docs/frameworks/html/scripts).
|
|
213
|
+
|
|
265
214
|
**JavaScript**
|
|
266
215
|
|
|
267
|
-
|
|
268
|
-
`kernel.commands.init()`:
|
|
216
|
+
Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
|
|
269
217
|
|
|
270
218
|
```ts
|
|
271
|
-
import {
|
|
219
|
+
import { init, manifest } from '@c15t/browser';
|
|
272
220
|
import { scripts } from './consent-scripts';
|
|
273
221
|
|
|
274
|
-
const
|
|
222
|
+
const consent = init({
|
|
223
|
+
mode: manifest(),
|
|
224
|
+
scripts,
|
|
225
|
+
});
|
|
275
226
|
```
|
|
276
227
|
|
|
277
|
-
|
|
278
|
-
`
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
## Choose the loading mode
|
|
228
|
+
Keep the mode from your quickstart. With
|
|
229
|
+
`createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
|
|
230
|
+
A kernel you create yourself needs a loader from
|
|
231
|
+
`c15t/modules/script-loader`. Attach one loader per kernel. See
|
|
232
|
+
[JavaScript scripts](https://v3.c15t.com/docs/frameworks/javascript/scripts).
|
|
283
233
|
|
|
284
|
-
|
|
285
|
-
| ---------------- | --------------------------------------- | ------------------------------------------------------------------------ |
|
|
286
|
-
| Omitted | Waits for measurement permission | Removes the script on revocation; no Matomo consent callback |
|
|
287
|
-
| `'required'` | Loads immediately with `requireConsent` | Signals `setConsentGiven` and `forgetConsentGiven`; keeps the SDK loaded |
|
|
288
|
-
| `'given'` | Loads immediately with an initial grant | Signals later changes; keeps the SDK loaded |
|
|
234
|
+
## Options
|
|
289
235
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
236
|
+
| Option | Default | Behavior |
|
|
237
|
+
| -------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
238
|
+
| `matomoUrl` | None | Self-hosted Matomo base URL. The helper loads `<matomoUrl>/matomo.js` and sends hits to `<matomoUrl>/matomo.php`. |
|
|
239
|
+
| `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>`. |
|
|
240
|
+
| `trackerUrl` | `matomo.php` on the Matomo origin | Tracker endpoint override. |
|
|
241
|
+
| `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. |
|
|
242
|
+
| `siteId` | `1` | Site ID queued with `setSiteId`. |
|
|
243
|
+
| `trackPageView` | `true` | Queues `trackPageView`. The table below shows when. |
|
|
244
|
+
| `enableLinkTracking` | `false` | Queues `enableLinkTracking`. |
|
|
245
|
+
| `disableCookies` | `false` | Queues `disableCookies`. It does not change when Matomo loads. |
|
|
246
|
+
| `defaultConsent` | None | `'required'` or `'given'` switches to Matomo consent mode. |
|
|
247
|
+
|
|
248
|
+
## Loading and revocation
|
|
249
|
+
|
|
250
|
+
`matomoAnalytics` uses the `measurement` category. `defaultConsent` picks the
|
|
251
|
+
mode:
|
|
252
|
+
|
|
253
|
+
| `defaultConsent` | Loads | When measurement is allowed | On revocation |
|
|
254
|
+
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------- |
|
|
255
|
+
| Omitted | After measurement is allowed, with `trackPageView` queued | Loads `matomo.js` | Removes the script element and calls no Matomo API |
|
|
256
|
+
| `'required'` | On every page, with `requireConsent` queued | Queues `setConsentGiven` and `trackPageView` | Keeps the script and queues `forgetConsentGiven` |
|
|
257
|
+
| `'given'` | On every page. With measurement allowed as it loads, `setConsentGiven` and `trackPageView` are queued; otherwise `requireConsent` | Queues `setConsentGiven` and `trackPageView` | Keeps the script and queues `forgetConsentGiven` |
|
|
258
|
+
|
|
259
|
+
In both consent modes Matomo holds tracking until `setConsentGiven`, and the
|
|
260
|
+
helper only queues that call for a visitor who has measurement consent. The
|
|
261
|
+
two modes differ for a visitor who already allowed measurement when the page
|
|
262
|
+
loads: `'given'` skips the up-front `requireConsent`. The helper queues
|
|
263
|
+
another `trackPageView` only when measurement changes from denied to allowed,
|
|
264
|
+
so a change to another category, such as allowing marketing, sends no extra
|
|
265
|
+
page view. Matomo separates
|
|
293
266
|
[tracking consent from cookie consent](https://developer.matomo.org/guides/tracking-consent).
|
|
294
267
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
268
|
+
## Verify Matomo Analytics
|
|
269
|
+
|
|
270
|
+
Without `defaultConsent`, allowing measurement loads `matomo.js`, and a
|
|
271
|
+
`matomo.php` request carries the page view.
|
|
272
|
+
|
|
273
|
+
Test in a private window with an opt-in policy. Open DevTools Network, disable
|
|
274
|
+
the cache and filter by the vendor's domain:
|
|
275
|
+
|
|
276
|
+
1. Load the page. No request goes to the vendor before you choose.
|
|
277
|
+
2. Click Reject, then reload. There is still no vendor request.
|
|
278
|
+
3. Open Privacy settings and allow the helper's category. The vendor script
|
|
279
|
+
loads without a page reload.
|
|
280
|
+
4. Turn the category off again and save. c15t reloads the page, and the new
|
|
281
|
+
page makes no vendor request.
|
|
282
|
+
|
|
283
|
+
c15t reloads on revocation because removing a script element does not stop
|
|
284
|
+
code that already ran. The vendor's listeners, timers and queued events stay
|
|
285
|
+
alive until the page unloads. If you set `reloadOnConsentRevoked: false`, stop
|
|
286
|
+
the vendor yourself. Register a callback-only script whose `onConsentChange`
|
|
287
|
+
calls the vendor's opt-out API, as shown in
|
|
288
|
+
[custom integrations](./building-integrations.md), and check the
|
|
289
|
+
permission before each of your own event calls. The reload does not delete
|
|
290
|
+
cookies the vendor already set; see
|
|
291
|
+
[clear on revocation for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
|
|
292
|
+
|
|
293
|
+
The helper sets `vendor` to its script ID, so once you declare that vendor a
|
|
294
|
+
visitor can turn it off inside an allowed category. See
|
|
295
|
+
[vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup). The
|
|
296
|
+
[consent verification guide](../guides/verify-consent.md) covers navigation,
|
|
297
|
+
expiry and hosting checks.
|
|
298
|
+
|
|
299
|
+
With `defaultConsent: 'required'`, Matomo loads before the choice, so test it
|
|
300
|
+
separately in a private window with an opt-in policy:
|
|
301
|
+
|
|
302
|
+
1. Load the page. `matomo.js` loads, and no `matomo.php` request follows.
|
|
303
|
+
2. Open Privacy settings and allow measurement. Without a reload, a
|
|
304
|
+
`matomo.php` request carries the page view.
|
|
305
|
+
3. Turn measurement off and save. c15t reloads the page, and the new page
|
|
306
|
+
loads `matomo.js` without a `matomo.php` request.
|
|
307
|
+
|
|
308
|
+
`'given'` behaves the same in this test. Under an opt-out policy, or after the
|
|
309
|
+
visitor has allowed measurement, both modes send a `matomo.php` page view as
|
|
310
|
+
the page loads. See the
|
|
311
|
+
[consent verification guide](../guides/verify-consent.md) for navigation and
|
|
312
|
+
hosting checks.
|