@c15t/react 3.0.0-alpha.2 → 3.0.0-alpha.4
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 +91 -67
- 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 -1
- package/dist/components/consent-gate/consent-gate.js +1 -1
- 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/stack-item.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/index.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/preferences/atoms/accordion.js +1 -1
- package/dist/components/preferences/atoms/root.js +1 -1
- package/dist/components/preferences/atoms/vendor-list.js +1 -1
- package/dist/components/preferences/index.js +1 -1
- 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/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/ui/accordion/accordion.js +1 -1
- package/dist/components/shared/ui/collapsible/collapsible.js +1 -1
- 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/components/shared/ui/switch/switch.js +1 -1
- package/dist/components/shared/ui/tabs/tabs.js +1 -1
- package/dist/consent-theme.js +1 -0
- package/dist/context/consent-tracking-context.js +1 -1
- package/dist/devtools.js +1 -1
- package/dist/draft.js +1 -1
- package/dist/external-iab-context.js +1 -1
- package/dist/headless.js +1 -1
- package/dist/hooks/use-committed-ref.js +2 -0
- package/dist/hooks/use-focus-trap.js +1 -1
- package/dist/hooks.js +1 -1
- package/dist/iab/styles.tw3.css +5 -45
- package/dist/iab-context.js +1 -1
- package/dist/index.js +1 -1
- package/dist/kernel-selector.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.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 +16 -61
- package/dist/transports/offline.js +1 -1
- package/dist/ui-save.js +1 -1
- package/dist/utils/deferred-module.js +1 -1
- 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/chunk-warming.d.ts +41 -8
- package/dist-types/component-hooks/use-headless-consent-ui.d.ts +1 -1
- package/dist-types/component-hooks/use-headless-iab-consent-ui.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 +4 -1
- package/dist-types/components/iab-panel/atoms/stack-item.d.ts +6 -1
- package/dist-types/components/iab-panel/iab-panel.d.ts +2 -2
- package/dist-types/components/iab-panel/index.d.ts +6 -2
- package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
- package/dist-types/components/iab-prompt/iab-prompt.d.ts +2 -2
- package/dist-types/components/iab-prompt/index.d.ts +2 -2
- package/dist-types/components/panel/atoms/card.d.ts +1 -0
- package/dist-types/components/panel/index.d.ts +1 -0
- package/dist-types/components/panel/panel.d.ts +1 -1
- package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +20 -0
- package/dist-types/components/preferences/index.d.ts +1 -0
- package/dist-types/components/prompt/components.d.ts +6 -0
- package/dist-types/components/shared/libs/compose-refs.d.ts +20 -0
- package/dist-types/components/shared/ui/accordion/accordion.d.ts +1 -0
- package/dist-types/components/shared/ui/collapsible/collapsible.d.ts +1 -0
- 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/preference-item.d.ts +14 -0
- package/dist-types/components/shared/ui/switch/switch.d.ts +1 -0
- package/dist-types/components/shared/ui/tabs/tabs.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/theme-context.d.ts +2 -2
- package/dist-types/context.d.ts +6 -0
- package/dist-types/devtools.d.ts +13 -2
- package/dist-types/draft.d.ts +50 -7
- package/dist-types/headless.d.ts +0 -1
- 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.d.ts +56 -13
- package/dist-types/iab.d.ts +1 -1
- package/dist-types/index.d.ts +4 -3
- package/dist-types/kernel-selector.d.ts +66 -0
- package/dist-types/module-hooks/iframe-blocker.d.ts +27 -0
- 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/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/provider.d.ts +62 -12
- package/dist-types/server/headers.d.ts +14 -4
- package/dist-types/server/normalize-url.d.ts +14 -7
- package/dist-types/server/types.d.ts +12 -1
- package/dist-types/transports/offline.d.ts +7 -16
- package/dist-types/ui-config-context.d.ts +9 -1
- package/dist-types/ui-save.d.ts +21 -1
- package/dist-types/utils/deferred-module.d.ts +3 -1
- package/dist-types/utils/merge-slot-props.d.ts +15 -1
- package/dist-types/utils/theme-utils.d.ts +17 -2
- package/dist-types/version.d.ts +1 -1
- package/docs/README.md +91 -67
- 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 +87 -0
- package/docs/{frameworks/react/concepts → concepts}/consent-categories.md +30 -8
- package/docs/concepts/consent-state.md +357 -0
- package/docs/{guides → concepts}/data-fetching.md +31 -27
- package/docs/concepts/how-consent-works.md +123 -0
- package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +7 -59
- package/docs/customization/class-names.md +202 -0
- package/docs/customization/dark-mode.md +157 -0
- package/docs/customization/motion.md +119 -0
- package/docs/customization/overview.md +67 -33
- package/docs/customization/recipes.md +839 -47
- package/docs/customization/slots.md +216 -35
- package/docs/customization/stylesheets.md +147 -0
- package/docs/customization/tailwind.md +842 -0
- package/docs/customization/tokens.md +166 -36
- package/docs/customization/translations.md +61 -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 +42 -28
- package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
- package/docs/frameworks/react/components/consent-dialog-trigger.md +81 -76
- package/docs/frameworks/react/components/consent-dialog.md +100 -55
- package/docs/frameworks/react/components/consent-gate.md +45 -24
- package/docs/frameworks/react/components/consent-provider.md +126 -0
- package/docs/frameworks/react/components/consent-widget.md +32 -20
- package/docs/frameworks/react/components/dev-tools.md +52 -84
- package/docs/frameworks/react/components.md +105 -0
- package/docs/frameworks/react/compose.md +354 -0
- package/docs/frameworks/react/content-security-policy.md +126 -0
- package/docs/frameworks/react/customize.md +250 -0
- package/docs/frameworks/react/embeds.md +89 -0
- package/docs/frameworks/react/hooks.md +65 -0
- package/docs/frameworks/react/iab.md +222 -0
- package/docs/frameworks/react/network-blocker.md +140 -0
- package/docs/frameworks/react/quickstart.md +139 -101
- package/docs/frameworks/react/rendering.md +128 -0
- package/docs/frameworks/react/scripts.md +115 -0
- package/docs/frameworks/react/translations.md +155 -0
- package/docs/frameworks/react/troubleshooting.md +92 -47
- package/docs/frameworks/react/vendor-consent.md +170 -0
- package/docs/guides/banner-experiments.md +654 -0
- package/docs/guides/troubleshooting.md +120 -47
- package/docs/guides/verify-consent.md +81 -49
- package/docs/integrations/adobe-analytics.md +168 -160
- package/docs/integrations/ahrefs-analytics.md +153 -155
- package/docs/integrations/amplitude.md +163 -157
- package/docs/integrations/building-integrations.md +136 -37
- package/docs/integrations/clearbit.md +155 -155
- package/docs/integrations/cloudflare-web-analytics.md +157 -157
- package/docs/integrations/cloudflare-zaraz.md +210 -262
- package/docs/integrations/crisp.md +165 -159
- package/docs/integrations/databuddy.md +158 -174
- package/docs/integrations/fathom-analytics.md +159 -157
- package/docs/integrations/front-chat.md +322 -0
- package/docs/integrations/google-maps.md +119 -84
- package/docs/integrations/google-tag-manager.md +179 -164
- package/docs/integrations/google-tag.md +164 -161
- package/docs/integrations/heap.md +164 -156
- package/docs/integrations/hightouch.md +162 -158
- package/docs/integrations/hotjar.md +160 -156
- package/docs/integrations/intercom.md +184 -154
- package/docs/integrations/klaviyo.md +486 -0
- package/docs/integrations/linkedin-insights.md +175 -151
- package/docs/integrations/logrocket.md +161 -157
- package/docs/integrations/matomo-analytics.md +189 -179
- package/docs/integrations/meta-pixel.md +189 -151
- package/docs/integrations/microsoft-clarity.md +164 -156
- package/docs/integrations/microsoft-uet.md +149 -155
- package/docs/integrations/mixpanel-analytics.md +156 -161
- package/docs/integrations/one-dollar-stats.md +306 -0
- package/docs/integrations/openai-pixel.md +205 -302
- package/docs/integrations/overview.md +143 -83
- package/docs/integrations/pinterest-tag.md +329 -0
- package/docs/integrations/pirsch.md +170 -160
- package/docs/integrations/plausible-analytics.md +173 -159
- package/docs/integrations/posthog.md +227 -242
- package/docs/integrations/promptwatch.md +155 -155
- package/docs/integrations/reddit-pixel.md +186 -158
- package/docs/integrations/rudderstack.md +202 -187
- package/docs/integrations/rybbit-analytics.md +172 -161
- package/docs/integrations/segment.md +183 -155
- package/docs/integrations/snapchat-pixel.md +187 -157
- package/docs/integrations/tiktok-pixel.md +172 -151
- package/docs/integrations/umami-analytics.md +164 -159
- package/docs/integrations/vercel-analytics.md +167 -158
- package/docs/integrations/x-pixel.md +177 -151
- package/docs/integrations/youtube.md +122 -87
- package/docs/upgrade-v3.md +490 -354
- package/package.json +15 -9
- package/dist/component-hooks/use-manager.js +0 -2
- package/dist-types/component-hooks/use-manager.d.ts +0 -45
- 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 -75
- 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/deployment-modes.md +0 -75
- package/docs/integrations/clear-on-revocation.md +0 -167
- package/docs/integrations/granular-consent.md +0 -208
|
@@ -1,45 +1,79 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Customize
|
|
3
|
-
description:
|
|
4
|
-
|
|
2
|
+
title: Customize the interface
|
|
3
|
+
description: Change c15t's consent banner and dialog one step at a time, from a
|
|
4
|
+
prop to your own markup, and find where each step lives in your framework.
|
|
5
5
|
group: customization
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Climb the ladder one step at a time
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
| Banner shape or location | Presentation or banner props | Keeps policy actions and built-in layout behavior |
|
|
13
|
-
| Brand colors, radius, typography, spacing | Theme tokens | Changes related component parts together |
|
|
14
|
-
| One card, footer, title or button group | Component slots | Targets existing markup |
|
|
15
|
-
| Labels, descriptions or language | i18n configuration | Keeps banner and preferences copy consistent |
|
|
16
|
-
| A different component structure | Compound components where available | Retains the component behavior while changing markup |
|
|
17
|
-
| Your own interaction and markup | Headless APIs | You own rendering, focus behavior and policy action coverage |
|
|
10
|
+
Each step keeps everything the step below it gives you. Stop at the first one
|
|
11
|
+
that makes the change you need:
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
1. **Props and presentation.** Pick a shape, a position, button order or
|
|
14
|
+
blocking. c15t keeps its markup, styles and behavior.
|
|
15
|
+
2. **Theme tokens.** Change colors, type, radius, spacing, shadows and motion
|
|
16
|
+
everywhere at once. Dark mode is a second set of tokens.
|
|
17
|
+
3. **Parts and classes.** Add a class or inline style to one part of one
|
|
18
|
+
component, such as the banner card. Tailwind, CSS Modules and CSS-in-JS
|
|
19
|
+
classes go here.
|
|
20
|
+
4. **Compose.** Rebuild a component from c15t's parts, in your own layout, while
|
|
21
|
+
c15t still renders the actions the policy requires.
|
|
22
|
+
5. **Headless.** Render your own markup from c15t's state and actions. You own
|
|
23
|
+
the layout, focus handling and labels.
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Most brand work needs tokens and a few part classes. See
|
|
26
|
+
[banner designs](./recipes.md) for five banners built at
|
|
27
|
+
different steps, with screenshots and tested code.
|
|
28
|
+
|
|
29
|
+
## Where each step lives in your framework
|
|
30
|
+
|
|
31
|
+
| Framework | Props and presentation | Tokens | Parts and classes | Compose | Headless |
|
|
32
|
+
| -------------- | --------------------------------------------- | ----------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
|
|
33
|
+
| Next.js | `ConsentBanner` props, `options.presentation` | `ConsentTheme` in a Server Component | `options.components`, `className` | [Compose](https://c15t.com/docs/frameworks/next/compose) | [Headless](https://c15t.com/docs/frameworks/next/headless) |
|
|
34
|
+
| TanStack Start | `ConsentBanner` props, `options.presentation` | `ConsentTheme` in the root route | `options.components`, `className` | [Compose](https://c15t.com/docs/frameworks/tanstack-start/compose) | [Headless](https://c15t.com/docs/frameworks/tanstack-start/headless) |
|
|
35
|
+
| React | `ConsentBanner` props, `presentation` | `ConsentTheme`, or CSS variables | `components`, `className` | [Compose](../frameworks/react/compose.md) | [Headless](../frameworks/react/headless.md) |
|
|
36
|
+
| Nuxt | `presentation` in `nuxt.config.ts` | `tokens` or `theme` in the module options | `components`, `class` | None | [Headless](https://c15t.com/docs/frameworks/nuxt/headless) |
|
|
37
|
+
| Vue | `presentation` in the `c15tVue` options | `tokens` or `theme` in the plugin options | `components`, `class` | None | [Headless](https://c15t.com/docs/frameworks/vue/headless) |
|
|
38
|
+
| Astro | `presentation` in the integration options | `theme` in the integration options | `theme.slots`, `class` on `ConsentBanner` | None | None |
|
|
39
|
+
| Svelte | `ConsentBanner` props, `presentation` | CSS variables, or `generateThemeCSS()` | `theme.slots`, `class` on `ConsentBanner` | [Primitives](https://c15t.com/docs/frameworks/svelte/components/primitives) | [Headless](https://c15t.com/docs/frameworks/svelte/headless) |
|
|
40
|
+
| SvelteKit | `ConsentBanner` props, `presentation` | `generateThemeCSS()` in a server load | `theme.slots`, `class` on `ConsentBanner` | [Primitives](https://c15t.com/docs/frameworks/sveltekit/components/primitives) | [Headless](https://c15t.com/docs/frameworks/sveltekit/headless) |
|
|
41
|
+
| HTML | `presentation.prompt` in `config` | `ui.theme` | `ui.theme.slots`, `::part()`, `ui.css` | None | [Headless](https://c15t.com/docs/frameworks/html/headless) |
|
|
42
|
+
| JavaScript | `presentation.prompt` in `init()` | `ui.theme` | `ui.theme.slots`, `::part()`, `ui.css` | None | [Headless](https://c15t.com/docs/frameworks/javascript/headless) |
|
|
24
43
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
44
|
+
Configuration shapes differ between frameworks. React's
|
|
45
|
+
`components.banner.card`, Vue's `components.banner.card` with `class`, and the
|
|
46
|
+
`consentBannerCard` key in `theme.slots` target the same part through
|
|
47
|
+
different APIs. Check your framework's customize page before you move a
|
|
48
|
+
configuration from one framework to another.
|
|
49
|
+
|
|
50
|
+
## Keep behavior and appearance separate
|
|
28
51
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
layout can be restored by the policy renderer.
|
|
52
|
+
Presentation controls the prompt's shape, position and blocking. The policy
|
|
53
|
+
controls which actions and rights the visitor gets. Changing colors or button
|
|
54
|
+
order does not change a saved choice or the policy's scope.
|
|
33
55
|
|
|
34
|
-
|
|
56
|
+
A choice wall always blocks. A notice never blocks and does not become a wall
|
|
57
|
+
because you asked for `variant: 'wall'`. The preference dialog stays centered,
|
|
58
|
+
whatever position the banner has. If a custom layout leaves out an action the
|
|
59
|
+
policy requires, c15t puts it back.
|
|
35
60
|
|
|
36
|
-
|
|
37
|
-
options. Vue and Nuxt expose their own shared configuration, including CSS
|
|
38
|
-
`tokens` and component slots. Svelte accepts its provider options and theme
|
|
39
|
-
contract. Astro serializes integration options and uses the selected adapter for
|
|
40
|
-
dialogs. Do not move a configuration object between frameworks without checking
|
|
41
|
-
the target types.
|
|
61
|
+
## Read the rest of this section
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
[
|
|
45
|
-
|
|
63
|
+
* [Banner designs](./recipes.md): five designs with tested code.
|
|
64
|
+
* [Theme tokens](./tokens.md): every `--c15t-*` variable and
|
|
65
|
+
its theme key.
|
|
66
|
+
* [Dark mode](./dark-mode.md): `colorScheme`, dark tokens and a
|
|
67
|
+
dark first paint.
|
|
68
|
+
* [Motion and animation](./motion.md): duration and easing
|
|
69
|
+
tokens, `disableAnimation` and reduced motion.
|
|
70
|
+
* [Stylesheets and CSS layers](./stylesheets.md): which file to
|
|
71
|
+
load, when the dialog's CSS loads, and how to run without c15t's styles.
|
|
72
|
+
* [Component parts](./slots.md): every part, its keys in each
|
|
73
|
+
framework, and the `data-*` attributes to select on.
|
|
74
|
+
* [Class names and CSS-in-JS](./class-names.md): CSS Modules,
|
|
75
|
+
vanilla-extract, StyleX and Emotion on c15t's parts.
|
|
76
|
+
* [Tailwind CSS](./tailwind.md): Tailwind 4 and 3 in every
|
|
77
|
+
framework.
|
|
78
|
+
* [Copy and translations](./translations.md): labels,
|
|
79
|
+
languages and right-to-left text.
|