@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,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: DevTools
|
|
3
|
-
description:
|
|
4
|
-
|
|
3
|
+
description: Inspect consent state, location, loaded scripts and consent events
|
|
4
|
+
in a React app during development with the c15t DevTools panel.
|
|
5
5
|
group: frameworks
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -12,42 +12,44 @@ group: frameworks
|
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
15
|
-
No extra package is required
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
when you need the imperative `createDevTools({ kernel })` API.
|
|
15
|
+
No extra package is required. The React adapter and its engine are included
|
|
16
|
+
with the `c15t` package. Install `@c15t/dev-tools` directly only when you
|
|
17
|
+
need the imperative `createDevTools({ kernel })` API.
|
|
19
18
|
|
|
20
|
-
##
|
|
19
|
+
## Render DevTools in development builds
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
Render `DevTools` inside `ConsentProvider`. This example loads it only in
|
|
22
|
+
development with Vite's `import.meta.env.DEV` flag, so production bundles never
|
|
23
|
+
download it. For another bundler, use its development flag instead; for
|
|
24
|
+
example, webpack projects can use a configured
|
|
25
|
+
`process.env.NODE_ENV === 'development'` replacement, since `process` is not a
|
|
26
|
+
browser global.
|
|
26
27
|
|
|
27
|
-
```tsx
|
|
28
|
-
import { lazy, Suspense
|
|
29
|
-
import { ConsentProvider, hosted } from 'c15t/react';
|
|
30
|
-
|
|
31
|
-
const DevTools =
|
|
32
|
-
import.meta.env.DEV
|
|
33
|
-
? lazy(() =>
|
|
34
|
-
import('c15t/react/devtools').then(({ DevTools }) => ({ default: DevTools })),
|
|
35
|
-
)
|
|
36
|
-
: () => null;
|
|
28
|
+
```tsx title="src/consent-devtools.tsx"
|
|
29
|
+
import { lazy, Suspense } from 'react';
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
const DevTools = import.meta.env.DEV
|
|
32
|
+
? lazy(() =>
|
|
33
|
+
import('c15t/react/devtools').then(({ DevTools }) => ({
|
|
34
|
+
default: DevTools,
|
|
35
|
+
}))
|
|
36
|
+
)
|
|
37
|
+
: null;
|
|
38
|
+
|
|
39
|
+
export function ConsentDevTools() {
|
|
40
|
+
return DevTools ? (
|
|
41
|
+
<Suspense fallback={null}>
|
|
42
|
+
<DevTools />
|
|
43
|
+
</Suspense>
|
|
44
|
+
) : null;
|
|
47
45
|
}
|
|
48
46
|
```
|
|
49
47
|
|
|
50
|
-
|
|
48
|
+
Render `<ConsentDevTools />` inside the provider from your
|
|
49
|
+
[quickstart](../quickstart.md), next to the banner. Import the
|
|
50
|
+
component from `c15t/react/devtools` when you installed the `c15t` package, or
|
|
51
|
+
from `@c15t/react/devtools` when you installed `@c15t/react` directly.
|
|
52
|
+
`@c15t/dev-tools` exports the imperative engine, not the React component.
|
|
51
53
|
|
|
52
54
|
If the CLI cannot identify your bundler's development flag, it generates
|
|
53
55
|
`const DevTools = false` with a setup comment. Replace `false` with your
|
|
@@ -69,14 +71,39 @@ DevTools disabled instead of assuming browser globals or loading it in productio
|
|
|
69
71
|
`position` accepts any corner: `top-left`, `top-right`, `bottom-left`, or
|
|
70
72
|
`bottom-right`. Set `defaultOpen` to open the initial panel and `defaultTab`
|
|
71
73
|
to choose that panel. `maxEvents` limits captured kernel and script events.
|
|
72
|
-
Set `disabled` to prevent mounting without removing the component.
|
|
74
|
+
Set `disabled` to prevent mounting without removing the component. The
|
|
75
|
+
panel renders inside a shadow root by default, so page CSS does not reach
|
|
76
|
+
it. `shadow={false}` mounts it in the light DOM with its stylesheet in
|
|
77
|
+
`<head>`.
|
|
78
|
+
|
|
79
|
+
## Open DevTools from the consent trigger
|
|
80
|
+
|
|
81
|
+
While `ConsentDialogTriggerToolbar` or the ready-made `ConsentDialogTrigger`
|
|
82
|
+
is visible, the trigger shows a DevTools button and DevTools hides its own
|
|
83
|
+
floating launcher, so one control occupies the corner. The button sits at the
|
|
84
|
+
end of the toolbar farthest from its corner. The panel opens just past the
|
|
85
|
+
toolbar, aligned with its outer edge, and follows it when a visitor drags the
|
|
86
|
+
toolbar to another corner. `position` applies again once no trigger is
|
|
87
|
+
visible.
|
|
88
|
+
|
|
89
|
+
`ConsentDialogTrigger` becomes a two-button toolbar while DevTools is
|
|
90
|
+
mounted. A trigger composed from `ConsentDialogTrigger.Root` keeps its own
|
|
91
|
+
markup, and DevTools keeps its floating launcher beside it.
|
|
92
|
+
|
|
93
|
+
DevTools brings its launcher back whenever no trigger is visible, for example
|
|
94
|
+
while `showWhen="after-prompt"` waits for a choice. A production build that
|
|
95
|
+
loads DevTools only in development shows no DevTools button in the trigger.
|
|
96
|
+
|
|
97
|
+
With the imperative engine, call `devTools.dock({ position, inline, block })`
|
|
98
|
+
to hide the launcher and anchor the panel `inline` and `block` pixels from the
|
|
99
|
+
viewport edges of `position`'s corner. Call `devTools.dock(null)` to restore
|
|
100
|
+
the launcher.
|
|
73
101
|
|
|
74
102
|
## Panels
|
|
75
103
|
|
|
76
104
|
Accept and reject apply only to categories displayed by the provider, leaving
|
|
77
|
-
hidden consent values unchanged. `necessary` always remains enabled.
|
|
78
|
-
|
|
79
|
-
React adapter use the current policy categories by default.
|
|
105
|
+
hidden consent values unchanged. `necessary` always remains enabled. The
|
|
106
|
+
React adapter uses the current policy categories by default.
|
|
80
107
|
|
|
81
108
|
For an imperative integration with a narrower UI, pass
|
|
82
109
|
`getConsentCategories: () => ['necessary', 'measurement']` to
|
|
@@ -91,7 +118,7 @@ explicit scope or policy categories, bulk saves cover all known categories.
|
|
|
91
118
|
| ------------ | -------------------------------------------------------------------------------------------- |
|
|
92
119
|
| **Consents** | Inspect and save categories, accept all, or reject optional categories |
|
|
93
120
|
| **Scripts** | Configured scripts, loading status, search, and external page resources |
|
|
94
|
-
| **Location** |
|
|
121
|
+
| **Location** | Resolved country and region, and location overrides |
|
|
95
122
|
| **Policy** | Resolved policy and UI configuration |
|
|
96
123
|
| **IAB** | Edit vendors, purposes, legitimate interests, and special features; save and copy TC strings |
|
|
97
124
|
| **Events** | Timeline of consent changes, kernel events, and script lifecycle events |
|
|
@@ -168,55 +195,6 @@ For custom inspection tools, `getIABControls(kernel)` and
|
|
|
168
195
|
The getter returns undefined before module initialization and after disposal.
|
|
169
196
|
A snapshot without an attached IAB module is read-only in DevTools.
|
|
170
197
|
|
|
171
|
-
## Vue and Svelte
|
|
172
|
-
|
|
173
|
-
Vue imports `ConsentDevTools` from `c15t/vue/devtools`.
|
|
174
|
-
Render it in the app where the c15t plugin provides
|
|
175
|
-
the kernel. In Nuxt, the configured c15t module provides that context.
|
|
176
|
-
|
|
177
|
-
```vue
|
|
178
|
-
<script setup lang="ts">
|
|
179
|
-
import { defineAsyncComponent } from 'vue';
|
|
180
|
-
|
|
181
|
-
const DevTools = import.meta.env.DEV
|
|
182
|
-
? defineAsyncComponent(() => import('c15t/vue/devtools'))
|
|
183
|
-
: null;
|
|
184
|
-
</script>
|
|
185
|
-
|
|
186
|
-
<template>
|
|
187
|
-
<DevTools v-if="DevTools" position="bottom-right" />
|
|
188
|
-
</template>
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
In Nuxt, use `import.meta.dev` instead of `import.meta.env.DEV`.
|
|
192
|
-
Svelte imports the adapter from `@c15t/svelte/devtools` and renders it
|
|
193
|
-
inside `ConsentManagerProvider`.
|
|
194
|
-
|
|
195
|
-
```svelte
|
|
196
|
-
<script lang="ts">
|
|
197
|
-
import { ConsentManagerProvider, offline } from '@c15t/svelte';
|
|
198
|
-
|
|
199
|
-
const devTools = import.meta.env.DEV
|
|
200
|
-
? import('@c15t/svelte/devtools')
|
|
201
|
-
: null;
|
|
202
|
-
</script>
|
|
203
|
-
|
|
204
|
-
<ConsentManagerProvider options={{ mode: offline() }}>
|
|
205
|
-
{#if devTools}
|
|
206
|
-
{#await devTools then { ConsentDevTools }}
|
|
207
|
-
<ConsentDevTools position="bottom-right" />
|
|
208
|
-
{/await}
|
|
209
|
-
{/if}
|
|
210
|
-
</ConsentManagerProvider>
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Both adapters accept `position`, `defaultOpen`, `defaultTab`, `maxEvents`,
|
|
214
|
-
`shadow` (`false` renders into the page instead of a shadow root),
|
|
215
|
-
and `getConsentCategories`. Changing these presentation options recreates
|
|
216
|
-
the panel and clears its event history. They do not accept React's `disabled`
|
|
217
|
-
prop; conditionally render them instead. Unmounting removes the panel and
|
|
218
|
-
subscriptions without changing consent.
|
|
219
|
-
|
|
220
198
|
## TanStack Devtools
|
|
221
199
|
|
|
222
200
|
Each embedded panel owns its event history and subscriptions. Unmounting it
|
|
@@ -257,6 +235,19 @@ export function AppDevtools() {
|
|
|
257
235
|
|
|
258
236
|
In a Next.js app, import `c15tDevtools` from `c15t/next/devtools` instead. Scoped installs use `@c15t/react/devtools` and `@c15t/nextjs/devtools`.
|
|
259
237
|
|
|
238
|
+
The c15t panel follows the TanStack Devtools light or dark theme, not your app's consent theme. If you write the plugin entry yourself, use a render function and pass the theme to `C15tTanStackDevtoolsPanel`:
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
import { C15tTanStackDevtoolsPanel } from 'c15t/react/devtools';
|
|
242
|
+
|
|
243
|
+
const c15tPlugin = {
|
|
244
|
+
name: 'Consent',
|
|
245
|
+
render: (_element: HTMLElement, { theme }: { theme: 'light' | 'dark' }) => (
|
|
246
|
+
<C15tTanStackDevtoolsPanel theme={theme} />
|
|
247
|
+
),
|
|
248
|
+
};
|
|
249
|
+
```
|
|
250
|
+
|
|
260
251
|
## Props
|
|
261
252
|
|
|
262
253
|
| Property | Type | Description | Default | Required |
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Components
|
|
3
|
+
description: Every c15t component a React app imports from c15t/react, what each
|
|
4
|
+
renders, where each one mounts, and which to start with.
|
|
5
|
+
group: frameworks
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Component reference
|
|
9
|
+
|
|
10
|
+
`c15t/react` exports the provider, the consent UI and the hooks from one
|
|
11
|
+
import path. Every component except `ConsentProvider` and `ConsentTheme`
|
|
12
|
+
reads the runtime the provider creates, so render them inside
|
|
13
|
+
`ConsentProvider`.
|
|
14
|
+
|
|
15
|
+
| Component | Renders | Reference |
|
|
16
|
+
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
17
|
+
| `ConsentProvider` | The consent runtime, which loads the policy, stores the choice and loads scripts. No markup of its own | [ConsentProvider](./components/consent-provider.md) |
|
|
18
|
+
| `ConsentBanner` | The banner, when the visitor's policy asks for one | [ConsentBanner](./components/consent-banner.md) |
|
|
19
|
+
| `ConsentDialog` | The preference center as a modal | [ConsentDialog](./components/consent-dialog.md) |
|
|
20
|
+
| `ConsentWidget` | The preference center inline in a page, for a privacy route | [ConsentWidget](./components/consent-widget.md) |
|
|
21
|
+
| `ConsentDialogLink` | An unstyled button that opens the dialog, for your footer | [ConsentDialogLink](./components/consent-dialog-link.md) |
|
|
22
|
+
| `ConsentDialogTrigger` | A floating, draggable button that opens the dialog. `ConsentDialogTriggerToolbar` adds your own actions beside it | [ConsentDialogTrigger](./components/consent-dialog-trigger.md) |
|
|
23
|
+
| `ConsentGate` | Its children while a category is allowed, a placeholder otherwise | [ConsentGate](./components/consent-gate.md) |
|
|
24
|
+
| `ConsentTheme` | A `<style>` element with your theme tokens | [Customize](./customize.md) |
|
|
25
|
+
| `DevTools` from `c15t/react/devtools` | A development panel for consent state, scripts and events | [DevTools](./components/dev-tools.md) |
|
|
26
|
+
|
|
27
|
+
Mount one `ConsentProvider` at the root of the app and keep it mounted across
|
|
28
|
+
client navigation. The provider reads `mode` and its module options once,
|
|
29
|
+
when it mounts.
|
|
30
|
+
|
|
31
|
+
## Start with the provider, banner and dialog
|
|
32
|
+
|
|
33
|
+
Most apps start with four components. `ConsentProvider` holds the runtime,
|
|
34
|
+
`ConsentBanner` and `ConsentDialog` ask for a choice, and a
|
|
35
|
+
`ConsentDialogLink` lets visitors reopen their preferences. The [quickstart](./quickstart.md) puts them in
|
|
36
|
+
one file:
|
|
37
|
+
|
|
38
|
+
```tsx title="src/consent.tsx"
|
|
39
|
+
import { posthog } from '@c15t/integrations/posthog';
|
|
40
|
+
import {
|
|
41
|
+
ConsentBanner,
|
|
42
|
+
ConsentDialog,
|
|
43
|
+
ConsentDialogLink,
|
|
44
|
+
ConsentProvider,
|
|
45
|
+
manifest,
|
|
46
|
+
} from 'c15t/react';
|
|
47
|
+
import type { ReactNode } from 'react';
|
|
48
|
+
|
|
49
|
+
const options = {
|
|
50
|
+
// The policy the build downloaded from VITE_C15T_BACKEND_URL.
|
|
51
|
+
mode: manifest(),
|
|
52
|
+
scripts: [
|
|
53
|
+
posthog({
|
|
54
|
+
id: 'phc_your_project_key',
|
|
55
|
+
initOptions: { cookieless_mode: 'never' },
|
|
56
|
+
loadMode: 'after-consent',
|
|
57
|
+
}),
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const Consent = ({ children }: { children: ReactNode }) => (
|
|
62
|
+
<ConsentProvider options={options}>
|
|
63
|
+
{children}
|
|
64
|
+
<ConsentBanner />
|
|
65
|
+
<ConsentDialog />
|
|
66
|
+
<footer>
|
|
67
|
+
<ConsentDialogLink>Privacy settings</ConsentDialogLink>
|
|
68
|
+
</footer>
|
|
69
|
+
</ConsentProvider>
|
|
70
|
+
);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Add `ConsentWidget`, `ConsentDialogTrigger` or `ConsentGate` later, where a
|
|
74
|
+
page needs them. Keep `ConsentDialog` mounted even when you add a widget,
|
|
75
|
+
because the banner's Customize button and every dialog link open it.
|
|
76
|
+
|
|
77
|
+
## Server-rendered React apps
|
|
78
|
+
|
|
79
|
+
React Router framework mode, Remix and other server-rendered React apps use the
|
|
80
|
+
same components. `ConsentProvider` renders on the server without touching
|
|
81
|
+
browser APIs, and the banner mounts after hydration, once the browser has
|
|
82
|
+
resolved the policy. [Rendering](./rendering.md#react-router-remix-and-other-server-rendered-apps)
|
|
83
|
+
explains the trade-off.
|
|
84
|
+
|
|
85
|
+
## IAB TCF components
|
|
86
|
+
|
|
87
|
+
Import `IABProvider`, `IABConsentBanner` and `IABConsentDialog` from
|
|
88
|
+
`c15t/react/iab`, render them inside `ConsentProvider` next to
|
|
89
|
+
`ConsentBanner` and `ConsentDialog`, and load `c15t/react/styles.css` and
|
|
90
|
+
`c15t/react/iab/styles.css` with `styles: false`. The stock banner and dialog stay closed
|
|
91
|
+
under an IAB policy. See
|
|
92
|
+
[IAB TCF](./iab.md).
|
|
93
|
+
|
|
94
|
+
## Other entry points
|
|
95
|
+
|
|
96
|
+
| Import | Exports | Use |
|
|
97
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------- |
|
|
98
|
+
| `c15t/react/consent-banner`, `c15t/react/consent-dialog`, `c15t/react/consent-widget`, `c15t/react/consent-dialog-link`, `c15t/react/consent-dialog-trigger`, `c15t/react/consent-gate` | One component each | A module that needs one component without the rest of the adapter |
|
|
99
|
+
| `c15t/react/headless` | Headless hooks | Your own banner and dialog markup. See [headless](./headless.md) |
|
|
100
|
+
| `c15t/react/server` | `fetchSSRData` and its helpers | Resolve `/init` in a server loader. See [rendering](./rendering.md#skip-the-browsers-first-init-request) |
|
|
101
|
+
| `c15t/react/devtools` | `DevTools` | Development only |
|
|
102
|
+
|
|
103
|
+
## Check the components
|
|
104
|
+
|
|
105
|
+
Load the app in a private window under a policy that asks for a choice:
|
|
106
|
+
|
|
107
|
+
1. The banner shows, and DevTools Network has no requests to your vendors'
|
|
108
|
+
hosts.
|
|
109
|
+
2. Click the footer's `ConsentDialogLink`. The dialog opens with every optional
|
|
110
|
+
category off.
|
|
111
|
+
3. Allow one category and save. Its vendor requests appear, and a
|
|
112
|
+
`ConsentGate` for that category mounts its children.
|
|
113
|
+
4. Reload. The banner stays closed, and the link still reopens the dialog.
|