@c15t/react 2.0.0-rc.1 → 2.0.0-rc.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/README.md +12 -3
- package/client/components/consent-banner.js +4 -0
- package/client/components/consent-dialog-link.js +3 -0
- package/client/components/consent-dialog-trigger.js +3 -0
- package/client/components/consent-dialog.js +4 -0
- package/client/components/consent-widget.js +4 -0
- package/client/components/frame.js +3 -0
- package/dist/components/consent-banner/atoms/overlay.cjs +1 -1
- package/dist/components/consent-banner/atoms/overlay.js +1 -1
- package/dist/components/consent-banner/atoms/root.cjs +1 -1
- package/dist/components/consent-banner/atoms/root.js +1 -1
- package/dist/components/consent-banner/components.cjs +1 -1
- package/dist/components/consent-banner/components.js +1 -1
- package/dist/components/consent-banner/consent-banner.cjs +1 -1
- package/dist/components/consent-banner/consent-banner.js +1 -1
- package/dist/components/consent-banner/error-boundary.cjs +1 -1
- package/dist/components/consent-banner/index.cjs +1 -1
- package/dist/components/consent-banner/index.js +1 -1
- package/dist/components/consent-banner/policy-actions.cjs +1 -0
- package/dist/components/consent-banner/policy-actions.js +1 -0
- package/dist/components/consent-dialog/atoms/card.cjs +1 -1
- package/dist/components/consent-dialog/atoms/card.js +1 -1
- package/dist/components/consent-dialog/atoms/overlay.cjs +1 -1
- package/dist/components/consent-dialog/atoms/overlay.js +1 -1
- package/dist/components/consent-dialog/atoms/root.cjs +1 -1
- package/dist/components/consent-dialog/atoms/root.js +1 -1
- package/dist/components/consent-dialog/consent-dialog.cjs +1 -1
- package/dist/components/consent-dialog/consent-dialog.js +1 -1
- package/dist/components/consent-dialog/index.cjs +1 -1
- package/dist/components/consent-dialog/index.js +1 -1
- package/dist/components/consent-dialog-link/index.cjs +1 -0
- package/dist/components/consent-dialog-link/index.js +1 -0
- package/dist/components/consent-dialog-trigger/atoms/button.cjs +1 -1
- package/dist/components/consent-dialog-trigger/atoms/button.js +1 -1
- package/dist/components/consent-dialog-trigger/atoms/icon.cjs +1 -1
- package/dist/components/consent-dialog-trigger/atoms/icon.js +1 -1
- package/dist/components/consent-dialog-trigger/atoms/root.cjs +1 -1
- package/dist/components/consent-dialog-trigger/atoms/root.js +1 -1
- package/dist/components/consent-dialog-trigger/atoms/text.cjs +1 -1
- package/dist/components/consent-dialog-trigger/atoms/text.js +1 -1
- package/dist/components/consent-dialog-trigger/consent-dialog-trigger.cjs +1 -1
- package/dist/components/consent-dialog-trigger/consent-dialog-trigger.js +1 -1
- package/dist/components/consent-dialog-trigger/index.cjs +1 -1
- package/dist/components/consent-dialog-trigger/index.js +1 -1
- package/dist/components/consent-dialog-trigger/types.cjs +1 -1
- package/dist/components/consent-dialog-trigger/use-draggable.cjs +1 -1
- package/dist/components/consent-dialog-trigger/use-draggable.js +1 -1
- package/dist/components/consent-preferences-link/consent-preferences-link.cjs +1 -0
- package/dist/components/consent-preferences-link/consent-preferences-link.js +1 -0
- package/dist/components/consent-preferences-link/index.cjs +1 -0
- package/dist/components/consent-preferences-link/index.js +1 -0
- package/dist/components/consent-widget/atoms/accordion.cjs +1 -1
- package/dist/components/consent-widget/atoms/accordion.js +1 -1
- package/dist/components/consent-widget/atoms/button.cjs +1 -1
- package/dist/components/consent-widget/atoms/button.js +1 -1
- package/dist/components/consent-widget/atoms/footer.cjs +1 -1
- package/dist/components/consent-widget/atoms/footer.js +1 -1
- package/dist/components/consent-widget/atoms/root.cjs +1 -1
- package/dist/components/consent-widget/atoms/root.js +1 -1
- package/dist/components/consent-widget/consent-widget.cjs +1 -1
- package/dist/components/consent-widget/consent-widget.js +1 -1
- package/dist/components/consent-widget/index.cjs +1 -1
- package/dist/components/consent-widget/index.js +1 -1
- package/dist/components/consent-widget/policy-actions.cjs +1 -0
- package/dist/components/consent-widget/policy-actions.js +1 -0
- package/dist/components/consent-widget/types.cjs +1 -1
- package/dist/components/frame/atoms.cjs +1 -1
- package/dist/components/frame/atoms.js +1 -1
- package/dist/components/frame/frame.cjs +1 -1
- package/dist/components/frame/frame.js +1 -1
- package/dist/components/frame/index.cjs +1 -1
- package/dist/components/frame/index.js +1 -1
- package/dist/components/frame/types.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/button-group.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/button-group.js +1 -1
- package/dist/components/iab-consent-banner/atoms/card.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/card.js +1 -1
- package/dist/components/iab-consent-banner/atoms/description.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/description.js +1 -1
- package/dist/components/iab-consent-banner/atoms/footer.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/footer.js +1 -1
- package/dist/components/iab-consent-banner/atoms/header.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/header.js +1 -1
- package/dist/components/iab-consent-banner/atoms/overlay.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/overlay.js +1 -1
- package/dist/components/iab-consent-banner/atoms/root.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/root.js +1 -1
- package/dist/components/iab-consent-banner/atoms/title.cjs +1 -1
- package/dist/components/iab-consent-banner/atoms/title.js +1 -1
- package/dist/components/iab-consent-banner/iab-consent-banner.cjs +1 -1
- package/dist/components/iab-consent-banner/iab-consent-banner.js +1 -1
- package/dist/components/iab-consent-banner/index.cjs +1 -1
- package/dist/components/iab-consent-banner/index.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/card.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/card.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/content.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/content.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/footer.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/footer.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/header.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/header.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/overlay.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/overlay.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/purpose-item.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/purpose-item.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/root.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/root.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/stack-item.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/stack-item.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/tabs.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/tabs.js +1 -1
- package/dist/components/iab-consent-dialog/atoms/vendor-list.cjs +1 -1
- package/dist/components/iab-consent-dialog/atoms/vendor-list.js +1 -1
- package/dist/components/iab-consent-dialog/hooks/use-gvl-data.cjs +1 -1
- package/dist/components/iab-consent-dialog/iab-consent-dialog.cjs +1 -1
- package/dist/components/iab-consent-dialog/iab-consent-dialog.js +1 -1
- package/dist/components/iab-consent-dialog/index.cjs +1 -1
- package/dist/components/iab-consent-dialog/index.js +1 -1
- package/dist/components/iab-consent-dialog/types.cjs +1 -1
- package/dist/components/iab-consent-dialog/use-iab-translations.cjs +1 -1
- package/dist/components/shared/libs/polymorphic.cjs +1 -1
- package/dist/components/shared/libs/recursive-clone-children.cjs +1 -1
- package/dist/components/shared/libs/slot.cjs +1 -0
- package/dist/components/shared/libs/slot.js +1 -0
- package/dist/components/shared/libs/use-controllable-state.cjs +1 -0
- package/dist/components/shared/libs/use-controllable-state.js +1 -0
- package/dist/components/shared/policy-actions.cjs +1 -0
- package/dist/components/shared/policy-actions.js +1 -0
- package/dist/components/shared/primitives/box.cjs +1 -1
- package/dist/components/shared/primitives/box.js +1 -1
- package/dist/components/shared/primitives/button.cjs +1 -1
- package/dist/components/shared/primitives/button.js +1 -1
- package/dist/components/shared/primitives/button.types.cjs +1 -1
- package/dist/components/shared/primitives/legal-links/index.cjs +1 -1
- package/dist/components/shared/primitives/legal-links/index.js +1 -1
- package/dist/components/shared/ui/accordion/accordion.cjs +1 -1
- package/dist/components/shared/ui/accordion/accordion.js +1 -1
- package/dist/components/shared/ui/accordion/accordion.types.cjs +1 -1
- package/dist/components/shared/ui/accordion/index.cjs +1 -1
- package/dist/components/shared/ui/animated-collapse/animated-collapse.cjs +1 -1
- package/dist/components/shared/ui/animated-collapse/index.cjs +1 -1
- package/dist/components/shared/ui/animated-collapse/index.js +1 -1
- package/dist/components/shared/ui/branding.cjs +1 -0
- package/dist/components/shared/ui/branding.js +1 -0
- package/dist/components/shared/ui/button/button.cjs +1 -1
- package/dist/components/shared/ui/button/button.js +1 -1
- package/dist/components/shared/ui/button/button.types.cjs +1 -1
- package/dist/components/shared/ui/button/index.cjs +1 -1
- package/dist/components/shared/ui/collapsible/collapsible.cjs +1 -0
- package/dist/components/shared/ui/collapsible/collapsible.js +1 -0
- package/dist/components/shared/ui/collapsible/index.cjs +1 -0
- package/dist/components/shared/ui/collapsible/index.js +1 -0
- package/dist/components/shared/ui/dialog/dialog.cjs +1 -0
- package/dist/components/shared/ui/dialog/dialog.js +1 -0
- package/dist/components/shared/ui/dialog/index.cjs +1 -0
- package/dist/components/shared/ui/dialog/index.js +1 -0
- package/dist/components/shared/ui/icon.cjs +1 -1
- package/dist/components/shared/ui/logo.cjs +1 -1
- package/dist/components/shared/ui/logo.js +1 -1
- package/dist/components/shared/ui/preference-item/index.cjs +1 -0
- package/dist/components/shared/ui/preference-item/index.js +1 -0
- package/dist/components/shared/ui/preference-item/preference-item.cjs +1 -0
- package/dist/components/shared/ui/preference-item/preference-item.js +1 -0
- package/dist/components/shared/ui/switch/index.cjs +1 -1
- package/dist/components/shared/ui/switch/index.js +1 -1
- package/dist/components/shared/ui/switch/switch.cjs +1 -1
- package/dist/components/shared/ui/switch/switch.js +1 -1
- package/dist/components/shared/ui/switch/switch.types.cjs +1 -1
- package/dist/components/shared/ui/tabs/index.cjs +1 -0
- package/dist/components/shared/ui/tabs/index.js +1 -0
- package/dist/components/shared/ui/tabs/tabs.cjs +1 -0
- package/dist/components/shared/ui/tabs/tabs.js +1 -0
- package/dist/context/consent-manager-context.cjs +1 -1
- package/dist/context/consent-tracking-context.cjs +1 -1
- package/dist/context/theme-context.cjs +1 -1
- package/dist/headless.cjs +1 -1
- package/dist/headless.js +1 -1
- package/dist/hooks/index.cjs +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/use-color-scheme.cjs +1 -1
- package/dist/hooks/use-component-config.cjs +1 -1
- package/dist/hooks/use-consent-dialog-trigger.cjs +1 -0
- package/dist/hooks/use-consent-dialog-trigger.js +1 -0
- package/dist/hooks/use-consent-manager.cjs +1 -1
- package/dist/hooks/use-consent-manager.js +1 -1
- package/dist/hooks/use-focus-trap.cjs +1 -1
- package/dist/hooks/use-focus-trap.js +1 -1
- package/dist/hooks/use-headless-consent-ui.cjs +1 -0
- package/dist/hooks/use-headless-consent-ui.js +1 -0
- package/dist/hooks/use-headless-iab-consent-ui.cjs +1 -0
- package/dist/hooks/use-headless-iab-consent-ui.js +1 -0
- package/dist/hooks/use-reduced-motion.cjs +1 -1
- package/dist/hooks/use-reduced-motion.js +1 -1
- package/dist/hooks/use-scroll-lock.cjs +1 -1
- package/dist/hooks/use-scroll-lock.js +1 -1
- package/dist/hooks/use-ssr-status.cjs +1 -1
- package/dist/hooks/use-styles.cjs +1 -1
- package/dist/hooks/use-text-direction.cjs +1 -1
- package/dist/hooks/use-theme.cjs +1 -1
- package/dist/hooks/use-theme.js +1 -1
- package/dist/hooks/use-translations.cjs +1 -1
- package/dist/iab/styles.css +11 -0
- package/dist/iab/styles.tw3.css +14 -0
- package/dist/iab.cjs +1 -0
- package/dist/iab.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/primitives/accordion.cjs +1 -0
- package/dist/primitives/accordion.js +1 -0
- package/dist/primitives/button.cjs +1 -0
- package/dist/primitives/button.js +1 -0
- package/dist/primitives/collapsible.cjs +1 -0
- package/dist/primitives/collapsible.js +1 -0
- package/dist/primitives/dialog.cjs +1 -0
- package/dist/primitives/dialog.js +1 -0
- package/dist/primitives/preference-item.cjs +1 -0
- package/dist/primitives/preference-item.js +1 -0
- package/dist/primitives/switch.cjs +1 -0
- package/dist/primitives/switch.js +1 -0
- package/dist/primitives/tabs.cjs +1 -0
- package/dist/primitives/tabs.js +1 -0
- package/dist/primitives.cjs +1 -0
- package/dist/primitives.js +1 -0
- package/dist/providers/consent-manager-provider.cjs +1 -1
- package/dist/providers/consent-manager-provider.js +1 -1
- package/dist/server/fetch-ssr-data.cjs +1 -1
- package/dist/server/fetch-ssr-data.js +1 -1
- package/dist/server/headers.cjs +1 -1
- package/dist/server/headers.js +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/init-cache-key.cjs +1 -0
- package/dist/server/init-cache-key.js +1 -0
- package/dist/server/normalize-url.cjs +1 -1
- package/dist/server/types.cjs +1 -1
- package/dist/styles.css +10 -0
- package/dist/styles.tw3.css +13 -0
- package/dist/types/consent-manager.cjs +1 -1
- package/dist/types/theme/index.cjs +1 -1
- package/dist/types/theme/style-keys.cjs +1 -1
- package/dist/types/theme/style-types.cjs +1 -1
- package/dist/utils/cn.cjs +1 -1
- package/dist/utils/merge-styles.cjs +1 -1
- package/dist/utils/test-helpers.cjs +1 -1
- package/dist/utils/test-helpers.js +1 -1
- package/dist/utils/theme-utils.cjs +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/{dist → dist-types}/components/consent-banner/atoms/overlay.d.ts +1 -2
- package/{dist → dist-types}/components/consent-banner/atoms/root.d.ts +44 -14
- package/{dist → dist-types}/components/consent-banner/components.d.ts +4 -5
- package/{dist → dist-types}/components/consent-banner/consent-banner.d.ts +14 -8
- package/{dist → dist-types}/components/consent-banner/error-boundary.d.ts +0 -1
- package/{dist → dist-types}/components/consent-banner/index.d.ts +48 -26
- package/dist-types/components/consent-banner/policy-actions.d.ts +11 -0
- package/{dist → dist-types}/components/consent-dialog/atoms/card.d.ts +14 -8
- package/{dist → dist-types}/components/consent-dialog/atoms/overlay.d.ts +1 -2
- package/{dist → dist-types}/components/consent-dialog/atoms/root.d.ts +1 -2
- package/{dist → dist-types}/components/consent-dialog/consent-dialog.d.ts +2 -3
- package/{dist → dist-types}/components/consent-dialog/index.d.ts +31 -10
- package/dist-types/components/consent-dialog-link/index.d.ts +1 -0
- package/{dist → dist-types}/components/consent-dialog-trigger/atoms/button.d.ts +0 -1
- package/{dist → dist-types}/components/consent-dialog-trigger/atoms/icon.d.ts +1 -2
- package/{dist → dist-types}/components/consent-dialog-trigger/atoms/root.d.ts +0 -1
- package/{dist → dist-types}/components/consent-dialog-trigger/atoms/text.d.ts +0 -1
- package/{dist → dist-types}/components/consent-dialog-trigger/consent-dialog-trigger.d.ts +2 -3
- package/{dist → dist-types}/components/consent-dialog-trigger/index.d.ts +0 -1
- package/{dist → dist-types}/components/consent-dialog-trigger/types.d.ts +2 -3
- package/{dist → dist-types}/components/consent-dialog-trigger/use-draggable.d.ts +1 -2
- package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +15 -0
- package/dist-types/components/consent-preferences-link/index.d.ts +1 -0
- package/dist-types/components/consent-widget/atoms/accordion.d.ts +28 -0
- package/{dist → dist-types}/components/consent-widget/atoms/button.d.ts +1 -2
- package/{dist → dist-types}/components/consent-widget/atoms/footer.d.ts +0 -1
- package/{dist → dist-types}/components/consent-widget/atoms/root.d.ts +1 -7
- package/{dist → dist-types}/components/consent-widget/consent-widget.d.ts +0 -1
- package/{dist → dist-types}/components/consent-widget/index.d.ts +27 -8
- package/dist-types/components/consent-widget/policy-actions.d.ts +11 -0
- package/{dist → dist-types}/components/consent-widget/types.d.ts +2 -3
- package/{dist → dist-types}/components/frame/atoms.d.ts +1 -2
- package/{dist → dist-types}/components/frame/frame.d.ts +0 -1
- package/{dist → dist-types}/components/frame/index.d.ts +1 -2
- package/{dist → dist-types}/components/frame/types.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/button-group.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/card.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/description.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/footer.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/header.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/overlay.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/root.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/atoms/title.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/iab-consent-banner.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-banner/index.d.ts +1 -2
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/card.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/content.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/footer.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/header.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/overlay.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/purpose-item.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/root.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/stack-item.d.ts +0 -1
- package/dist-types/components/iab-consent-dialog/atoms/tabs.d.ts +12 -0
- package/{dist → dist-types}/components/iab-consent-dialog/atoms/vendor-list.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/hooks/use-gvl-data.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/iab-consent-dialog.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/index.d.ts +1 -2
- package/{dist → dist-types}/components/iab-consent-dialog/types.d.ts +0 -1
- package/{dist → dist-types}/components/iab-consent-dialog/use-iab-translations.d.ts +0 -1
- package/{dist → dist-types}/components/shared/libs/polymorphic.d.ts +0 -1
- package/{dist → dist-types}/components/shared/libs/recursive-clone-children.d.ts +0 -1
- package/dist-types/components/shared/libs/slot.d.ts +6 -0
- package/dist-types/components/shared/libs/use-controllable-state.d.ts +7 -0
- package/dist-types/components/shared/policy-actions.d.ts +29 -0
- package/{dist → dist-types}/components/shared/primitives/box.d.ts +0 -1
- package/{dist → dist-types}/components/shared/primitives/button.d.ts +4 -1
- package/{dist → dist-types}/components/shared/primitives/button.types.d.ts +17 -1
- package/{dist → dist-types}/components/shared/primitives/legal-links/index.d.ts +0 -45
- package/{dist → dist-types}/components/shared/ui/accordion/accordion.d.ts +32 -68
- package/{dist → dist-types}/components/shared/ui/accordion/accordion.types.d.ts +0 -1
- package/{dist → dist-types}/components/shared/ui/accordion/index.d.ts +0 -1
- package/{dist → dist-types}/components/shared/ui/animated-collapse/animated-collapse.d.ts +0 -1
- package/{dist → dist-types}/components/shared/ui/animated-collapse/index.d.ts +0 -1
- package/dist-types/components/shared/ui/branding.d.ts +27 -0
- package/{dist → dist-types}/components/shared/ui/button/button.d.ts +2 -3
- package/{dist → dist-types}/components/shared/ui/button/button.types.d.ts +0 -1
- package/{dist → dist-types}/components/shared/ui/button/index.d.ts +0 -1
- package/dist-types/components/shared/ui/collapsible/collapsible.d.ts +20 -0
- package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -0
- package/dist-types/components/shared/ui/dialog/dialog.d.ts +29 -0
- package/dist-types/components/shared/ui/dialog/index.d.ts +1 -0
- package/{dist → dist-types}/components/shared/ui/icon.d.ts +0 -1
- package/{dist → dist-types}/components/shared/ui/logo.d.ts +8 -1
- package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -0
- package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +33 -0
- package/dist-types/components/shared/ui/switch/index.d.ts +2 -0
- package/dist-types/components/shared/ui/switch/switch.d.ts +20 -0
- package/{dist → dist-types}/components/shared/ui/switch/switch.types.d.ts +0 -1
- package/dist-types/components/shared/ui/tabs/index.d.ts +1 -0
- package/dist-types/components/shared/ui/tabs/tabs.d.ts +28 -0
- package/{dist → dist-types}/context/consent-manager-context.d.ts +0 -1
- package/{dist → dist-types}/context/consent-tracking-context.d.ts +0 -1
- package/{dist → dist-types}/context/theme-context.d.ts +0 -1
- package/dist-types/headless.d.ts +9 -0
- package/{dist → dist-types}/hooks/index.d.ts +3 -1
- package/{dist → dist-types}/hooks/use-color-scheme.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-component-config.d.ts +0 -1
- package/dist-types/hooks/use-consent-dialog-trigger.d.ts +10 -0
- package/{dist → dist-types}/hooks/use-consent-manager.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-focus-trap.d.ts +0 -1
- package/dist-types/hooks/use-headless-consent-ui.d.ts +46 -0
- package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +41 -0
- package/{dist → dist-types}/hooks/use-reduced-motion.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-scroll-lock.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-ssr-status.d.ts +2 -2
- package/{dist → dist-types}/hooks/use-styles.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-text-direction.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-theme.d.ts +0 -1
- package/{dist → dist-types}/hooks/use-translations.d.ts +0 -1
- package/dist-types/iab.d.ts +24 -0
- package/{dist → dist-types}/index.d.ts +5 -6
- package/dist-types/primitives/accordion.d.ts +1 -0
- package/dist-types/primitives/button.d.ts +1 -0
- package/dist-types/primitives/collapsible.d.ts +1 -0
- package/dist-types/primitives/dialog.d.ts +1 -0
- package/dist-types/primitives/preference-item.d.ts +1 -0
- package/dist-types/primitives/switch.d.ts +1 -0
- package/dist-types/primitives/tabs.d.ts +1 -0
- package/dist-types/primitives.d.ts +7 -0
- package/{dist → dist-types}/providers/consent-manager-provider.d.ts +0 -1
- package/{dist → dist-types}/server/fetch-ssr-data.d.ts +0 -1
- package/{dist → dist-types}/server/headers.d.ts +2 -2
- package/{dist → dist-types}/server/index.d.ts +1 -1
- package/dist-types/server/init-cache-key.d.ts +21 -0
- package/{dist → dist-types}/server/normalize-url.d.ts +0 -1
- package/{dist → dist-types}/server/types.d.ts +0 -1
- package/{dist → dist-types}/types/consent-manager.d.ts +7 -1
- package/{dist → dist-types}/types/theme/index.d.ts +0 -1
- package/{dist → dist-types}/types/theme/style-keys.d.ts +0 -1
- package/{dist → dist-types}/types/theme/style-types.d.ts +2 -1
- package/{dist → dist-types}/utils/cn.d.ts +0 -1
- package/{dist → dist-types}/utils/merge-styles.d.ts +0 -1
- package/{dist → dist-types}/utils/test-helpers.d.ts +0 -1
- package/{dist → dist-types}/utils/theme-utils.d.ts +1 -2
- package/dist-types/version.d.ts +1 -0
- package/docs/README.md +76 -0
- package/docs/building-headless-components.md +266 -0
- package/docs/callbacks.md +184 -0
- package/docs/components/consent-banner.md +298 -0
- package/docs/components/consent-dialog-link.md +59 -0
- package/docs/components/consent-dialog-trigger.md +103 -0
- package/docs/components/consent-dialog.md +177 -0
- package/docs/components/consent-manager-provider.md +425 -0
- package/docs/components/consent-widget.md +160 -0
- package/docs/components/dev-tools.md +63 -0
- package/docs/components/frame.md +73 -0
- package/docs/concepts/client-modes.md +175 -0
- package/docs/concepts/consent-categories.md +97 -0
- package/docs/concepts/consent-models.md +112 -0
- package/docs/concepts/cookie-management.md +122 -0
- package/docs/concepts/glossary.md +23 -0
- package/docs/concepts/initialization-flow.md +148 -0
- package/docs/concepts/policy-packs.md +227 -0
- package/docs/headless.md +190 -0
- package/docs/hooks/use-color-scheme.md +40 -0
- package/docs/hooks/use-consent-manager/checking-consent.md +94 -0
- package/docs/hooks/use-consent-manager/location-info.md +95 -0
- package/docs/hooks/use-consent-manager/overview.md +420 -0
- package/docs/hooks/use-consent-manager/setting-consent.md +92 -0
- package/docs/hooks/use-draggable.md +57 -0
- package/docs/hooks/use-focus-trap.md +41 -0
- package/docs/hooks/use-reduced-motion.md +35 -0
- package/docs/hooks/use-ssr-status.md +31 -0
- package/docs/hooks/use-text-direction.md +49 -0
- package/docs/hooks/use-translations.md +118 -0
- package/docs/iab/consent-banner.md +92 -0
- package/docs/iab/consent-dialog.md +132 -0
- package/docs/iab/overview.md +125 -0
- package/docs/iab/use-gvl-data.md +208 -0
- package/docs/iframe-blocking.md +107 -0
- package/docs/integrations/building-integrations.md +405 -0
- package/docs/integrations/databuddy.md +203 -0
- package/docs/integrations/google-tag-manager.md +153 -0
- package/docs/integrations/google-tag.md +122 -0
- package/docs/integrations/linkedin-insights.md +109 -0
- package/docs/integrations/meta-pixel.md +342 -0
- package/docs/integrations/microsoft-uet.md +112 -0
- package/docs/integrations/overview.md +105 -0
- package/docs/integrations/posthog.md +199 -0
- package/docs/integrations/tiktok-pixel.md +113 -0
- package/docs/integrations/x-pixel.md +143 -0
- package/docs/internationalization.md +197 -0
- package/docs/network-blocker.md +178 -0
- package/docs/optimization.md +113 -0
- package/docs/policy-packs.md +240 -0
- package/docs/quickstart.md +152 -0
- package/docs/script-loader.md +321 -0
- package/docs/server-side.md +153 -0
- package/docs/styling/classnames.md +92 -0
- package/docs/styling/color-scheme.md +82 -0
- package/docs/styling/css-variables.md +92 -0
- package/docs/styling/overview.md +459 -0
- package/docs/styling/slots.md +127 -0
- package/docs/styling/tailwind.md +113 -0
- package/docs/styling/tokens.md +216 -0
- package/docs/troubleshooting.md +137 -0
- package/iab/styles.css +1 -0
- package/package.json +85 -25
- package/readme.json +6 -0
- package/src/iab/styles.css +11 -0
- package/src/iab/styles.tw3.css +14 -0
- package/src/styles.css +10 -0
- package/src/styles.tw3.css +13 -0
- package/styles.css +1 -0
- package/dist/components/__tests__/active-ui-transitions.e2e.test.cjs +0 -1
- package/dist/components/__tests__/active-ui-transitions.e2e.test.js +0 -1
- package/dist/components/__tests__/consent-flow.e2e.test.cjs +0 -1
- package/dist/components/__tests__/consent-flow.e2e.test.js +0 -1
- package/dist/components/__tests__/models-prop.e2e.test.cjs +0 -1
- package/dist/components/__tests__/models-prop.e2e.test.js +0 -1
- package/dist/components/__tests__/ui-source-tracking.e2e.test.cjs +0 -1
- package/dist/components/__tests__/ui-source-tracking.e2e.test.js +0 -1
- package/dist/components/consent-banner/atoms/overlay.d.ts.map +0 -1
- package/dist/components/consent-banner/atoms/root.d.ts.map +0 -1
- package/dist/components/consent-banner/components.d.ts.map +0 -1
- package/dist/components/consent-banner/consent-banner.d.ts.map +0 -1
- package/dist/components/consent-banner/error-boundary.d.ts.map +0 -1
- package/dist/components/consent-banner/index.d.ts.map +0 -1
- package/dist/components/consent-dialog/atoms/card.d.ts.map +0 -1
- package/dist/components/consent-dialog/atoms/overlay.d.ts.map +0 -1
- package/dist/components/consent-dialog/atoms/root.d.ts.map +0 -1
- package/dist/components/consent-dialog/consent-dialog.d.ts.map +0 -1
- package/dist/components/consent-dialog/index.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/atoms/button.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/atoms/icon.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/atoms/root.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/atoms/text.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/consent-dialog-trigger.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/index.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/types.d.ts.map +0 -1
- package/dist/components/consent-dialog-trigger/use-draggable.d.ts.map +0 -1
- package/dist/components/consent-widget/atoms/accordion.d.ts +0 -46
- package/dist/components/consent-widget/atoms/accordion.d.ts.map +0 -1
- package/dist/components/consent-widget/atoms/button.d.ts.map +0 -1
- package/dist/components/consent-widget/atoms/footer.d.ts.map +0 -1
- package/dist/components/consent-widget/atoms/root.d.ts.map +0 -1
- package/dist/components/consent-widget/consent-widget.d.ts.map +0 -1
- package/dist/components/consent-widget/index.d.ts.map +0 -1
- package/dist/components/consent-widget/types.d.ts.map +0 -1
- package/dist/components/frame/atoms.d.ts.map +0 -1
- package/dist/components/frame/frame.d.ts.map +0 -1
- package/dist/components/frame/index.d.ts.map +0 -1
- package/dist/components/frame/types.d.ts.map +0 -1
- package/dist/components/iab/__tests__/e2e-setup.cjs +0 -1
- package/dist/components/iab/__tests__/e2e-setup.js +0 -1
- package/dist/components/iab/__tests__/fixtures/mock-consent-state.cjs +0 -1
- package/dist/components/iab/__tests__/fixtures/mock-consent-state.d.ts +0 -212
- package/dist/components/iab/__tests__/fixtures/mock-consent-state.d.ts.map +0 -1
- package/dist/components/iab/__tests__/fixtures/mock-consent-state.js +0 -1
- package/dist/components/iab/__tests__/iab-banner.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-banner.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-consent-flow.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-consent-flow.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-events.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-events.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-gvl.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-gvl.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-preference-center.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-preference-center.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-storage.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-storage.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-stub.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-stub.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/iab-tcfapi.e2e.test.cjs +0 -1
- package/dist/components/iab/__tests__/iab-tcfapi.e2e.test.js +0 -1
- package/dist/components/iab/__tests__/msw-handlers.cjs +0 -1
- package/dist/components/iab/__tests__/msw-handlers.js +0 -1
- package/dist/components/iab-consent-banner/__tests__/iab-consent-banner.test.cjs +0 -1
- package/dist/components/iab-consent-banner/__tests__/iab-consent-banner.test.js +0 -1
- package/dist/components/iab-consent-banner/atoms/button-group.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/card.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/description.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/footer.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/header.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/overlay.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/root.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/atoms/title.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/iab-consent-banner.d.ts.map +0 -1
- package/dist/components/iab-consent-banner/index.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/__tests__/legitimate-interest-ui.test.cjs +0 -1
- package/dist/components/iab-consent-dialog/__tests__/legitimate-interest-ui.test.js +0 -1
- package/dist/components/iab-consent-dialog/__tests__/preference-center.test.cjs +0 -1
- package/dist/components/iab-consent-dialog/__tests__/preference-center.test.js +0 -1
- package/dist/components/iab-consent-dialog/__tests__/purposes-tab.test.cjs +0 -1
- package/dist/components/iab-consent-dialog/__tests__/purposes-tab.test.js +0 -1
- package/dist/components/iab-consent-dialog/__tests__/vendors-tab.test.cjs +0 -1
- package/dist/components/iab-consent-dialog/__tests__/vendors-tab.test.js +0 -1
- package/dist/components/iab-consent-dialog/atoms/card.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/content.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/footer.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/header.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/overlay.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/purpose-item.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/root.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/stack-item.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/tabs.d.ts +0 -40
- package/dist/components/iab-consent-dialog/atoms/tabs.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/atoms/vendor-list.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/hooks/use-gvl-data.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/iab-consent-dialog.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/index.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/types.d.ts.map +0 -1
- package/dist/components/iab-consent-dialog/use-iab-translations.d.ts.map +0 -1
- package/dist/components/shared/libs/polymorphic.d.ts.map +0 -1
- package/dist/components/shared/libs/recursive-clone-children.d.ts.map +0 -1
- package/dist/components/shared/primitives/box.d.ts.map +0 -1
- package/dist/components/shared/primitives/button.d.ts.map +0 -1
- package/dist/components/shared/primitives/button.types.d.ts.map +0 -1
- package/dist/components/shared/primitives/legal-links/index.d.ts.map +0 -1
- package/dist/components/shared/ui/__tests__/primitives.test.cjs +0 -1
- package/dist/components/shared/ui/__tests__/primitives.test.js +0 -1
- package/dist/components/shared/ui/accordion/accordion.d.ts.map +0 -1
- package/dist/components/shared/ui/accordion/accordion.types.d.ts.map +0 -1
- package/dist/components/shared/ui/accordion/index.d.ts.map +0 -1
- package/dist/components/shared/ui/animated-collapse/animated-collapse.d.ts.map +0 -1
- package/dist/components/shared/ui/animated-collapse/index.d.ts.map +0 -1
- package/dist/components/shared/ui/button/button.d.ts.map +0 -1
- package/dist/components/shared/ui/button/button.types.d.ts.map +0 -1
- package/dist/components/shared/ui/button/index.d.ts.map +0 -1
- package/dist/components/shared/ui/icon.d.ts.map +0 -1
- package/dist/components/shared/ui/logo.d.ts.map +0 -1
- package/dist/components/shared/ui/switch/index.d.ts +0 -3
- package/dist/components/shared/ui/switch/index.d.ts.map +0 -1
- package/dist/components/shared/ui/switch/switch.d.ts +0 -45
- package/dist/components/shared/ui/switch/switch.d.ts.map +0 -1
- package/dist/components/shared/ui/switch/switch.types.d.ts.map +0 -1
- package/dist/context/consent-manager-context.d.ts.map +0 -1
- package/dist/context/consent-tracking-context.d.ts.map +0 -1
- package/dist/context/theme-context.d.ts.map +0 -1
- package/dist/headless.d.ts +0 -8
- package/dist/headless.d.ts.map +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-cleans-up-system-preference-listener-on-unmount-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-cleans-up-system-preference-listener-on-unmount-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-handles-default-theme-based-on-document-class-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-handles-default-theme-based-on-document-class-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-responds-to-system-preference-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-responds-to-system-preference-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-sets-dark-theme-correctly-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-sets-dark-theme-correctly-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-updates-theme-when-default-theme-changes-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-updates-theme-when-default-theme-changes-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-updates-theme-when-system-preference-changes-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-color-scheme.test.tsx/useColorScheme-updates-theme-when-system-preference-changes-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-consent-manager.test.tsx/useConsentManager-provides-manager-object-when-configured-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-consent-manager.test.tsx/useConsentManager-provides-manager-object-when-configured-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-handles-string-className-correctly-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-handles-string-className-correctly-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-merges-theme-and-component-styles-correctly-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-merges-theme-and-component-styles-correctly-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-should-remove-base-default-styles-but-keep-theme-and-component-classNames-when-noStyle--true-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-should-remove-base-default-styles-but-keep-theme-and-component-classNames-when-noStyle--true-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-should-remove-default-styles-but-keep-custom-classNames-when-theme-object-provides-noStyle--true-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-styles.test.tsx/useStyles-should-remove-default-styles-but-keep-custom-classNames-when-theme-object-provides-noStyle--true-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-theme.test.tsx/useTheme-local-theme-takes-precedence-over-global-theme-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-theme.test.tsx/useTheme-local-theme-takes-precedence-over-global-theme-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-Custom-English-instead-of-English-when-German-is-selected-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-Custom-English-instead-of-English-when-German-is-selected-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-falls-back-to-English-when-selected-language-is-not-available-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-falls-back-to-English-when-selected-language-is-not-available-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-merges-custom-translations-with-defaults-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-merges-custom-translations-with-defaults-1.js +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-returns-English-translations-by-default-1.cjs +0 -1
- package/dist/hooks/__tests__/__screenshots__/use-translations.test.tsx/useTranslations-returns-English-translations-by-default-1.js +0 -1
- package/dist/hooks/__tests__/use-color-scheme.test.cjs +0 -1
- package/dist/hooks/__tests__/use-color-scheme.test.js +0 -1
- package/dist/hooks/__tests__/use-consent-manager.test.cjs +0 -1
- package/dist/hooks/__tests__/use-consent-manager.test.js +0 -1
- package/dist/hooks/__tests__/use-focus-trap.test.cjs +0 -1
- package/dist/hooks/__tests__/use-focus-trap.test.js +0 -1
- package/dist/hooks/__tests__/use-scroll-lock.test.cjs +0 -1
- package/dist/hooks/__tests__/use-scroll-lock.test.js +0 -1
- package/dist/hooks/__tests__/use-styles.test.cjs +0 -1
- package/dist/hooks/__tests__/use-styles.test.js +0 -1
- package/dist/hooks/__tests__/use-theme.test.cjs +0 -1
- package/dist/hooks/__tests__/use-theme.test.js +0 -1
- package/dist/hooks/__tests__/use-translations.test.cjs +0 -1
- package/dist/hooks/__tests__/use-translations.test.js +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/use-color-scheme.d.ts.map +0 -1
- package/dist/hooks/use-component-config.d.ts.map +0 -1
- package/dist/hooks/use-consent-manager.d.ts.map +0 -1
- package/dist/hooks/use-focus-trap.d.ts.map +0 -1
- package/dist/hooks/use-reduced-motion.d.ts.map +0 -1
- package/dist/hooks/use-scroll-lock.d.ts.map +0 -1
- package/dist/hooks/use-ssr-status.d.ts.map +0 -1
- package/dist/hooks/use-styles.d.ts.map +0 -1
- package/dist/hooks/use-text-direction.d.ts.map +0 -1
- package/dist/hooks/use-theme.d.ts.map +0 -1
- package/dist/hooks/use-translations.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mockServiceWorker.js +0 -349
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-make-a-new-request-when-core-options-change-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-make-a-new-request-when-core-options-change-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-not-make-additional-requests-when-props-change-but-core-options-remain-same-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-not-make-additional-requests-when-props-change-but-core-options-remain-same-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-only-make-one-initial-request-for-consent-banner-status-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-basic.test.tsx/ConsentManagerProvider-Basic-Request-Behavior-should-only-make-one-initial-request-for-consent-banner-status-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-handle-rapid-re-renders-without-blocking-children-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-handle-rapid-re-renders-without-blocking-children-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-not-block-SSR-provider-content-when-SSR-provider-wraps-ConsentManager-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-not-block-SSR-provider-content-when-SSR-provider-wraps-ConsentManager-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-render-children-immediately-without-blocking-during-hydration-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-render-children-immediately-without-blocking-during-hydration-1.js +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-use-startTransition-for-non-blocking-state-updates-during-hydration-1.cjs +0 -1
- package/dist/providers/__tests__/__screenshots__/provider-hydration.test.tsx/ConsentManagerProvider-Hydration-Behavior-should-use-startTransition-for-non-blocking-state-updates-during-hydration-1.js +0 -1
- package/dist/providers/__tests__/provider-basic.test.cjs +0 -1
- package/dist/providers/__tests__/provider-basic.test.js +0 -1
- package/dist/providers/__tests__/provider-context.test.cjs +0 -1
- package/dist/providers/__tests__/provider-context.test.js +0 -1
- package/dist/providers/__tests__/provider-errors.test.cjs +0 -1
- package/dist/providers/__tests__/provider-errors.test.js +0 -1
- package/dist/providers/__tests__/provider-hydration.test.cjs +0 -1
- package/dist/providers/__tests__/provider-hydration.test.js +0 -1
- package/dist/providers/__tests__/test-helpers.cjs +0 -1
- package/dist/providers/__tests__/test-helpers.js +0 -1
- package/dist/providers/consent-manager-provider.d.ts.map +0 -1
- package/dist/server/fetch-ssr-data.d.ts.map +0 -1
- package/dist/server/headers.d.ts.map +0 -1
- package/dist/server/headers.test.cjs +0 -1
- package/dist/server/headers.test.d.ts +0 -2
- package/dist/server/headers.test.d.ts.map +0 -1
- package/dist/server/headers.test.js +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/normalize-url.d.ts.map +0 -1
- package/dist/server/normalize-url.test.cjs +0 -1
- package/dist/server/normalize-url.test.d.ts +0 -2
- package/dist/server/normalize-url.test.d.ts.map +0 -1
- package/dist/server/normalize-url.test.js +0 -1
- package/dist/server/types.d.ts.map +0 -1
- package/dist/static/image/ConsentManagerProvider-Basic-Request-Behavior-should-make-a-new-request-when-core-options-change-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Basic-Request-Behavior-should-not-make-additional-requests-when-props-change-but-core-options-remain-same-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Basic-Request-Behavior-should-only-make-one-initial-request-for-consent-banner-status-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Hydration-Behavior-should-handle-rapid-re-renders-without-blocking-children-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Hydration-Behavior-should-not-block-SSR-provider-content-when-SSR-provider-wraps-ConsentManager-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Hydration-Behavior-should-render-children-immediately-without-blocking-during-hydration-1.png +0 -0
- package/dist/static/image/ConsentManagerProvider-Hydration-Behavior-should-use-startTransition-for-non-blocking-state-updates-during-hydration-1.png +0 -0
- package/dist/static/image/useColorScheme-cleans-up-system-preference-listener-on-unmount-1.png +0 -0
- package/dist/static/image/useColorScheme-handles-default-theme-based-on-document-class-1.png +0 -0
- package/dist/static/image/useColorScheme-responds-to-system-preference-1.png +0 -0
- package/dist/static/image/useColorScheme-sets-dark-theme-correctly-1.png +0 -0
- package/dist/static/image/useColorScheme-updates-theme-when-default-theme-changes-1.png +0 -0
- package/dist/static/image/useColorScheme-updates-theme-when-system-preference-changes-1.png +0 -0
- package/dist/static/image/useConsentManager-provides-manager-object-when-configured-1.png +0 -0
- package/dist/static/image/useStyles-handles-string-className-correctly-1.png +0 -0
- package/dist/static/image/useStyles-merges-theme-and-component-styles-correctly-1.png +0 -0
- package/dist/static/image/useStyles-should-remove-base-default-styles-but-keep-theme-and-component-classNames-when-noStyle--true-1.png +0 -0
- package/dist/static/image/useStyles-should-remove-default-styles-but-keep-custom-classNames-when-theme-object-provides-noStyle--true-1.png +0 -0
- package/dist/static/image/useTheme-local-theme-takes-precedence-over-global-theme-1.png +0 -0
- package/dist/static/image/useTranslations-Custom-English-instead-of-English-when-German-is-selected-1.png +0 -0
- package/dist/static/image/useTranslations-falls-back-to-English-when-selected-language-is-not-available-1.png +0 -0
- package/dist/static/image/useTranslations-merges-custom-translations-with-defaults-1.png +0 -0
- package/dist/static/image/useTranslations-returns-English-translations-by-default-1.png +0 -0
- package/dist/test-setup.browser.cjs +0 -1
- package/dist/test-setup.browser.d.ts +0 -8
- package/dist/test-setup.browser.d.ts.map +0 -1
- package/dist/test-setup.browser.js +0 -1
- package/dist/types/consent-manager.d.ts.map +0 -1
- package/dist/types/theme/index.d.ts.map +0 -1
- package/dist/types/theme/style-keys.d.ts.map +0 -1
- package/dist/types/theme/style-types.d.ts.map +0 -1
- package/dist/utils/cn.d.ts.map +0 -1
- package/dist/utils/merge-styles.d.ts.map +0 -1
- package/dist/utils/test-helpers.d.ts.map +0 -1
- package/dist/utils/theme-utils.d.ts.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IAB TCF 2.3 React components and hooks.
|
|
3
|
+
*
|
|
4
|
+
* This subpath export contains all IAB-specific React UI. It is only
|
|
5
|
+
* loaded when explicitly imported from '@c15t/react/iab'.
|
|
6
|
+
*
|
|
7
|
+
* Requires `@c15t/iab` as a peer dependency.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { iab } from '@c15t/iab';
|
|
12
|
+
* import { IABConsentBanner, IABConsentDialog } from '@c15t/react/iab';
|
|
13
|
+
*
|
|
14
|
+
* <ConsentManagerProvider options={{ mode: 'hosted', iab: iab({ cmpId: 28 }) }}>
|
|
15
|
+
* <IABConsentBanner />
|
|
16
|
+
* <IABConsentDialog />
|
|
17
|
+
* </ConsentManagerProvider>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @packageDocumentation
|
|
21
|
+
*/
|
|
22
|
+
export { IABConsentBanner, type IABConsentBannerProps, } from './components/iab-consent-banner';
|
|
23
|
+
export { IABConsentDialog, type IABConsentDialogProps, } from './components/iab-consent-dialog';
|
|
24
|
+
export { type HeadlessIABBannerAction, type HeadlessIABBannerState, type HeadlessIABDialogAction, type HeadlessIABDialogState, type HeadlessIABPreferenceTab, type UseHeadlessIABConsentUIResult, useHeadlessIABConsentUI, } from './hooks/use-headless-iab-consent-ui';
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
export type { AllConsentNames, ConsentManagerInterface, ConsentStoreState, ConsentType, Overrides, Translations, } from 'c15t';
|
|
2
|
-
export { configureConsentManager, defaultTranslationConfig, detectBrowserLanguage, mergeTranslationConfigs, prepareTranslationConfig, } from 'c15t';
|
|
1
|
+
export type { AllConsentNames, ConsentManagerInterface, ConsentStoreState, ConsentType, EuropePolicyMode, Overrides, PolicyPackPresets, Translations, } from 'c15t';
|
|
2
|
+
export { configureConsentManager, defaultTranslationConfig, detectBrowserLanguage, mergeTranslationConfigs, policyPackPresets, prepareTranslationConfig, } from 'c15t';
|
|
3
3
|
export { ConsentBanner, type ConsentBannerProps, } from './components/consent-banner';
|
|
4
4
|
export * from './components/consent-banner/components';
|
|
5
5
|
export { ConsentDialog, type ConsentDialogProps, } from './components/consent-dialog';
|
|
6
|
+
export { ConsentDialogLink, type ConsentDialogLinkProps, } from './components/consent-dialog-link';
|
|
6
7
|
export { ConsentDialogTrigger, type ConsentDialogTriggerCompound, type ConsentDialogTriggerProps, TriggerButton, type TriggerButtonProps, TriggerIcon, type TriggerIconProps, type TriggerIconType, TriggerRoot, type TriggerRootProps, type TriggerSize, TriggerText, type TriggerTextProps, type TriggerVisibility, type UseDraggableOptions, type UseDraggableReturn, useDraggable, useTriggerContext, } from './components/consent-dialog-trigger';
|
|
7
8
|
export { ConsentWidget, type ConsentWidgetProps, } from './components/consent-widget';
|
|
8
9
|
export { Frame, type FrameProps } from './components/frame';
|
|
9
|
-
export { IABConsentBanner, type IABConsentBannerProps, } from './components/iab-consent-banner';
|
|
10
|
-
export { IABConsentDialog, type IABConsentDialogProps, } from './components/iab-consent-dialog';
|
|
11
10
|
export { ConsentButton } from './components/shared/primitives/button';
|
|
12
|
-
export { InlineLegalLinks, LegalLinks, type LegalLinksProps, } from './components/shared/primitives/legal-links';
|
|
13
11
|
export { useColorScheme } from './hooks/use-color-scheme';
|
|
12
|
+
export { type ConsentDialogTriggerVisibility, type UseConsentDialogTriggerOptions, type UseConsentDialogTriggerResult, useConsentDialogTrigger, } from './hooks/use-consent-dialog-trigger';
|
|
14
13
|
export { useConsentManager } from './hooks/use-consent-manager';
|
|
15
14
|
export { useFocusTrap } from './hooks/use-focus-trap';
|
|
15
|
+
export { type HeadlessConsentBannerAction, type HeadlessConsentBannerState, type HeadlessConsentDialogAction, type HeadlessConsentDialogState, type HeadlessConsentSurface, type HeadlessConsentSurfaceAction, type HeadlessConsentSurfaceState, type HeadlessConsentWriteAction, type UseHeadlessConsentUIResult, useHeadlessConsentUI, } from './hooks/use-headless-consent-ui';
|
|
16
16
|
export { useSSRStatus } from './hooks/use-ssr-status';
|
|
17
17
|
export { useTranslations } from './hooks/use-translations';
|
|
18
18
|
export { ConsentManagerProvider } from './providers/consent-manager-provider';
|
|
19
19
|
export type { ConsentManagerOptions, ConsentManagerProviderProps, } from './types/consent-manager';
|
|
20
20
|
export type { ColorTokens, ComponentSlots, MotionTokens, RadiusTokens, ShadowTokens, SlotStyle, SpacingTokens, Theme, TypographyTokens, } from './types/theme';
|
|
21
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/accordion';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/button';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/collapsible';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/dialog';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/preference-item';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/switch';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../components/shared/ui/tabs';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * as Accordion from './components/shared/ui/accordion';
|
|
2
|
+
export * as Button from './components/shared/ui/button';
|
|
3
|
+
export * as Collapsible from './components/shared/ui/collapsible';
|
|
4
|
+
export * as Dialog from './components/shared/ui/dialog';
|
|
5
|
+
export * as PreferenceItem from './components/shared/ui/preference-item';
|
|
6
|
+
export * as Switch from './components/shared/ui/switch';
|
|
7
|
+
export * as Tabs from './components/shared/ui/tabs';
|
|
@@ -38,4 +38,3 @@ export declare function clearConsentRuntimeCache(): void;
|
|
|
38
38
|
* @public
|
|
39
39
|
*/
|
|
40
40
|
export declare function ConsentManagerProvider({ children, options, }: ConsentManagerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
-
//# sourceMappingURL=consent-manager-provider.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const FORWARDED_HEADERS: readonly ["cf-ipcountry", "x-vercel-ip-country", "x-amz-cf-ipcountry", "x-country-code", "x-vercel-ip-country-region", "x-region-code", "accept-language", "user-agent", "x-forwarded-host", "x-forwarded-for", "sec-gpc"];
|
|
1
|
+
declare const FORWARDED_HEADERS: readonly ["cf-ipcountry", "x-vercel-ip-country", "x-amz-cf-ipcountry", "x-country-code", "x-vercel-ip-country-region", "x-region-code", "accept-language", "user-agent", "x-forwarded-host", "x-forwarded-for", "sec-gpc", "purpose", "sec-purpose", "next-router-prefetch", "x-middleware-prefetch"];
|
|
2
2
|
type ForwardedHeader = (typeof FORWARDED_HEADERS)[number] | 'x-c15t-country' | 'x-c15t-region';
|
|
3
3
|
type RelevantHeaders = Partial<Record<ForwardedHeader, string>>;
|
|
4
4
|
/**
|
|
@@ -13,6 +13,7 @@ type RelevantHeaders = Partial<Record<ForwardedHeader, string>>;
|
|
|
13
13
|
* - Country headers (cf-ipcountry, x-vercel-ip-country, etc.)
|
|
14
14
|
* - Region headers (x-vercel-ip-country-region, x-region-code)
|
|
15
15
|
* - Standard headers (accept-language, user-agent, x-forwarded-*)
|
|
16
|
+
* - Prefetch headers (purpose, sec-purpose, next-router-prefetch, x-middleware-prefetch)
|
|
16
17
|
*
|
|
17
18
|
* @param headersList - The Headers object from the incoming request
|
|
18
19
|
* @returns An object containing the relevant headers for consent management
|
|
@@ -29,4 +30,3 @@ type RelevantHeaders = Partial<Record<ForwardedHeader, string>>;
|
|
|
29
30
|
*/
|
|
30
31
|
export declare function extractRelevantHeaders(headersList: Headers): RelevantHeaders;
|
|
31
32
|
export {};
|
|
32
|
-
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export { fetchSSRData } from './fetch-ssr-data';
|
|
28
28
|
export { extractRelevantHeaders } from './headers';
|
|
29
|
+
export { createSSRInitCacheKey } from './init-cache-key';
|
|
29
30
|
export { normalizeBackendURL, validateBackendURL } from './normalize-url';
|
|
30
31
|
export type { FetchSSRDataOptions, FetchSSRDataOptionsBase, FetchSSRDataResult, } from './types';
|
|
31
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Overrides } from 'c15t';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a stable cache key for SSR init responses.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This is framework-agnostic and can be used by wrappers (e.g. Next.js)
|
|
7
|
+
* to align cache key construction with the headers/override semantics used
|
|
8
|
+
* for SSR init fetching.
|
|
9
|
+
*
|
|
10
|
+
* @param normalizedURL - Normalized backend URL for /init
|
|
11
|
+
* @param headers - Request headers
|
|
12
|
+
* @param overrides - Optional location/language overrides
|
|
13
|
+
* @returns A stable JSON string key
|
|
14
|
+
*
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export declare function createSSRInitCacheKey({ normalizedURL, headers, overrides, }: {
|
|
18
|
+
normalizedURL: string;
|
|
19
|
+
headers: Headers;
|
|
20
|
+
overrides?: Overrides;
|
|
21
|
+
}): string;
|
|
@@ -12,6 +12,11 @@ export interface ReactUIOptions extends UIOptions {
|
|
|
12
12
|
* This type composes:
|
|
13
13
|
* - Base framework-agnostic options from {@link BaseConsentManagerOptions}
|
|
14
14
|
* - React-specific UI configuration
|
|
15
|
+
*
|
|
16
|
+
* In offline mode this also includes `offlinePolicy` configuration for
|
|
17
|
+
* local policy previews.
|
|
18
|
+
*
|
|
19
|
+
* @see {@link https://v2.c15t.com/docs/frameworks/react/policy-packs}
|
|
15
20
|
*/
|
|
16
21
|
export type ConsentManagerOptions = BaseConsentManagerOptions & ReactUIOptions;
|
|
17
22
|
/**
|
|
@@ -27,7 +32,8 @@ export interface ConsentManagerProviderProps {
|
|
|
27
32
|
/**
|
|
28
33
|
* Configuration options for the consent manager.
|
|
29
34
|
* This includes core, React, store, and translation settings.
|
|
35
|
+
*
|
|
36
|
+
* @see {@link https://v2.c15t.com/docs/frameworks/react/components/consent-manager-provider}
|
|
30
37
|
*/
|
|
31
38
|
options: ConsentManagerOptions;
|
|
32
39
|
}
|
|
33
|
-
//# sourceMappingURL=consent-manager.d.ts.map
|
|
@@ -33,6 +33,8 @@ export interface ExtendThemeKeys<VariableMap = Record<string, string | number>>
|
|
|
33
33
|
* @public
|
|
34
34
|
*/
|
|
35
35
|
export interface Theme extends Omit<BaseTheme, 'slots'> {
|
|
36
|
+
/** Semantic button styling for consent actions. */
|
|
37
|
+
consentActions?: BaseTheme['consentActions'];
|
|
36
38
|
/** Component-specific style overrides. */
|
|
37
39
|
slots?: BaseTheme['slots'];
|
|
38
40
|
}
|
|
@@ -41,4 +43,3 @@ export interface Theme extends Omit<BaseTheme, 'slots'> {
|
|
|
41
43
|
* @public
|
|
42
44
|
*/
|
|
43
45
|
export declare function defineTheme<ThemeType extends Theme>(theme: ThemeType): ThemeType;
|
|
44
|
-
//# sourceMappingURL=style-types.d.ts.map
|
|
@@ -7,7 +7,7 @@ import type { Theme } from '../types/theme/style-types';
|
|
|
7
7
|
/**
|
|
8
8
|
* Default design tokens for the v2 theme system.
|
|
9
9
|
*/
|
|
10
|
-
export declare const defaultTheme: Required<Omit<Theme, "slots"
|
|
10
|
+
export declare const defaultTheme: Required<Omit<Theme, "slots">>;
|
|
11
11
|
/**
|
|
12
12
|
* Maps theme tokens to CSS variables.
|
|
13
13
|
*/
|
|
@@ -16,4 +16,3 @@ export declare function themeToVars(theme: Theme, isDark?: boolean): ThemeCSSVar
|
|
|
16
16
|
* Generates a CSS string for the theme variables.
|
|
17
17
|
*/
|
|
18
18
|
export declare function generateThemeCSS(theme: Theme): string;
|
|
19
|
-
//# sourceMappingURL=theme-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const version = "2.0.0-rc.10";
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# c15t React Docs
|
|
2
|
+
|
|
3
|
+
React-focused c15t docs for consent UI, hooks, headless flows, and script integrations.
|
|
4
|
+
|
|
5
|
+
If you are changing consent flows, consent UI, script loading, server-side setup, or backend configuration in an app that uses this package, start here before editing code.
|
|
6
|
+
|
|
7
|
+
## Start Here
|
|
8
|
+
|
|
9
|
+
- [Quickstart](./quickstart.md)
|
|
10
|
+
- [Headless](./headless.md)
|
|
11
|
+
- [Building Headless Components](./building-headless-components.md)
|
|
12
|
+
- [Callbacks](./callbacks.md)
|
|
13
|
+
- [Google Tag Manager](./integrations/google-tag-manager.md)
|
|
14
|
+
|
|
15
|
+
## Workflow Rules
|
|
16
|
+
|
|
17
|
+
### Styling
|
|
18
|
+
|
|
19
|
+
Use this when:
|
|
20
|
+
- customizing component appearance
|
|
21
|
+
- adapting c15t components to a design system
|
|
22
|
+
- deciding how far to override the default UI
|
|
23
|
+
|
|
24
|
+
Prefer:
|
|
25
|
+
- Prefer design tokens first.
|
|
26
|
+
- If tokens are not enough, use component slots.
|
|
27
|
+
- Then use CSS variables or `className` for targeted overrides.
|
|
28
|
+
|
|
29
|
+
If that is not enough:
|
|
30
|
+
- Use `noStyle` or a full headless rebuild only when the design system cannot be expressed through the supported styling layers.
|
|
31
|
+
|
|
32
|
+
Avoid:
|
|
33
|
+
- Do not rebuild the consent UI from scratch if tokens, slots, or scoped overrides are sufficient.
|
|
34
|
+
|
|
35
|
+
Read next:
|
|
36
|
+
- [Overview](./styling/overview.md)
|
|
37
|
+
- [Tokens](./styling/tokens.md)
|
|
38
|
+
- [Slots](./styling/slots.md)
|
|
39
|
+
- [Css Variables](./styling/css-variables.md)
|
|
40
|
+
|
|
41
|
+
### Consent UI Customization
|
|
42
|
+
|
|
43
|
+
Use this when:
|
|
44
|
+
- changing banners, dialogs, or preference centers
|
|
45
|
+
- deciding between built-in components and headless APIs
|
|
46
|
+
|
|
47
|
+
Prefer:
|
|
48
|
+
- Prefer the built-in components and their documented customization surfaces first.
|
|
49
|
+
- If the UI requirements diverge significantly, use the headless APIs.
|
|
50
|
+
|
|
51
|
+
Avoid:
|
|
52
|
+
- Do not rebuild the full consent flow if a token, slot, or component override is enough.
|
|
53
|
+
|
|
54
|
+
Read next:
|
|
55
|
+
- [Quickstart](./quickstart.md)
|
|
56
|
+
- [Consent Banner](./components/consent-banner.md)
|
|
57
|
+
- [Headless](./headless.md)
|
|
58
|
+
- [Building Headless Components](./building-headless-components.md)
|
|
59
|
+
|
|
60
|
+
### Scripts & Integrations
|
|
61
|
+
|
|
62
|
+
Use this when:
|
|
63
|
+
- adding third-party scripts in React components or providers
|
|
64
|
+
- wiring analytics or advertising behind consent
|
|
65
|
+
|
|
66
|
+
Prefer:
|
|
67
|
+
- Prefer premade scripts from `@c15t/scripts/*`.
|
|
68
|
+
- Start from the integration docs before implementing custom script wiring in React components.
|
|
69
|
+
|
|
70
|
+
Avoid:
|
|
71
|
+
- Do not duplicate consent-sync logic in React effects when the integration already handles it.
|
|
72
|
+
|
|
73
|
+
Read next:
|
|
74
|
+
- [Script Loader](./script-loader.md)
|
|
75
|
+
- [Google Tag Manager](./integrations/google-tag-manager.md)
|
|
76
|
+
- [Meta Pixel](./integrations/meta-pixel.md)
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Building Headless Components
|
|
3
|
+
description: Build policy-aware custom consent components in React using the headless hooks and policy-pack tooling.
|
|
4
|
+
---
|
|
5
|
+
Building custom consent UI is easier now because c15t exposes multiple layers of policy-aware primitives instead of forcing you to reconstruct banner rules by hand.
|
|
6
|
+
|
|
7
|
+
The layering is:
|
|
8
|
+
|
|
9
|
+
* stock component props for the shortest path
|
|
10
|
+
* `ConsentBanner.PolicyActions` and `ConsentWidget.PolicyActions` for custom structure with policy-aware actions
|
|
11
|
+
* `useHeadlessConsentUI()` for fully manual action rendering and non-standard controls
|
|
12
|
+
|
|
13
|
+
> ⚠️ **Warning:**
|
|
14
|
+
> Headless is the last step in the customization ladder. Use this guide only when pre-built components, tokens, slots, compound components, and noStyle are no longer sufficient.
|
|
15
|
+
|
|
16
|
+
The headless stack underneath that is:
|
|
17
|
+
|
|
18
|
+
* `useHeadlessConsentUI()` for policy-aware banner/dialog actions, ordering, layout, and primary actions hints
|
|
19
|
+
* `@c15t/ui/utils` for the pure policy-action helpers that framework packages build on
|
|
20
|
+
* `useConsentManager()` for runtime state, categories, selected consent state, and policy metadata
|
|
21
|
+
* `useTranslations()` for the resolved copy
|
|
22
|
+
* `offlinePolicy.policyPacks` for offline previews that behave like backend policy resolution
|
|
23
|
+
|
|
24
|
+
The split is intentional: `@c15t/ui` owns pure policy-action resolution, while the framework hooks own visibility, consent mutations, and reactive state.
|
|
25
|
+
|
|
26
|
+
> ℹ️ **Info:**
|
|
27
|
+
> This guide is about building your own components while still respecting resolved policy-pack behavior. For the general headless overview, see Headless Mode.
|
|
28
|
+
|
|
29
|
+
## What the Headless Tooling Gives You
|
|
30
|
+
|
|
31
|
+
The main win is that your custom UI can stay aligned with policy packs without duplicating policy logic in your components.
|
|
32
|
+
|
|
33
|
+
`useHeadlessConsentUI()` already resolves:
|
|
34
|
+
|
|
35
|
+
* which actions are allowed
|
|
36
|
+
* the order those actions should render in
|
|
37
|
+
* grouped actions from policy `layout`
|
|
38
|
+
* layout `direction` (`row` or `column`)
|
|
39
|
+
* the primary actions
|
|
40
|
+
* UI profile and scroll-lock hints
|
|
41
|
+
* whether the banner or dialog should currently be visible
|
|
42
|
+
|
|
43
|
+
That means your component mostly focuses on markup and design-system concerns instead of re-implementing policy interpretation.
|
|
44
|
+
|
|
45
|
+
For most compound-component layouts, start with `ConsentBanner.PolicyActions` or `ConsentWidget.PolicyActions`. They render stock c15t buttons and translations by default, and `renderAction` is only needed when you want to override the action mapping. Reach for manual `actionGroups` mapping when you need action rendering that no longer fits the stock button compounds.
|
|
46
|
+
|
|
47
|
+
> ℹ️ **Info:**
|
|
48
|
+
> For custom layouts built from c15t compound components, prefer ConsentBanner.PolicyActions and ConsentWidget.PolicyActions. The examples below intentionally use manual actionGroups mapping to show the fully headless escape hatch.
|
|
49
|
+
|
|
50
|
+
## Provider Setup for Local Policy Testing
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
import type { ReactNode } from 'react';
|
|
54
|
+
import {
|
|
55
|
+
ConsentManagerProvider,
|
|
56
|
+
policyPackPresets,
|
|
57
|
+
} from '@c15t/react';
|
|
58
|
+
|
|
59
|
+
export function ConsentManager({ children }: { children: ReactNode }) {
|
|
60
|
+
return (
|
|
61
|
+
<ConsentManagerProvider
|
|
62
|
+
options={{
|
|
63
|
+
mode: 'offline',
|
|
64
|
+
offlinePolicy: {
|
|
65
|
+
policyPacks: [
|
|
66
|
+
policyPackPresets.californiaOptOut(),
|
|
67
|
+
policyPackPresets.europeOptIn(),
|
|
68
|
+
policyPackPresets.worldNoBanner(),
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
overrides: {
|
|
72
|
+
country: 'US',
|
|
73
|
+
region: 'CA',
|
|
74
|
+
},
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
{children}
|
|
78
|
+
</ConsentManagerProvider>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Policy-Aware Banner Example
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { useHeadlessConsentUI, useTranslations } from '@c15t/react/headless';
|
|
87
|
+
|
|
88
|
+
export function CustomConsentBanner() {
|
|
89
|
+
const { banner, openDialog, performAction } = useHeadlessConsentUI();
|
|
90
|
+
const translations = useTranslations();
|
|
91
|
+
|
|
92
|
+
if (!banner.isVisible) return null;
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<aside className="rounded-xl border bg-white p-6 shadow-lg">
|
|
96
|
+
<h2 className="text-lg font-semibold">{translations.cookieBanner.title}</h2>
|
|
97
|
+
<p className="mt-2 text-sm text-gray-600">
|
|
98
|
+
{translations.cookieBanner.description}
|
|
99
|
+
</p>
|
|
100
|
+
|
|
101
|
+
<div className="mt-4 space-y-2">
|
|
102
|
+
{banner.actionGroups.map((group, index) => (
|
|
103
|
+
<div key={`${group.join('-')}-${index}`} className="flex gap-2">
|
|
104
|
+
{group.map((action) => (
|
|
105
|
+
<button
|
|
106
|
+
key={action}
|
|
107
|
+
type="button"
|
|
108
|
+
className={banner.primaryActions.includes(action) ? 'btn-primary' : 'btn-secondary'}
|
|
109
|
+
onClick={() => {
|
|
110
|
+
if (action === 'customize') {
|
|
111
|
+
openDialog();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
void performAction(action, { surface: 'banner' });
|
|
115
|
+
}}
|
|
116
|
+
>
|
|
117
|
+
{action === 'accept'
|
|
118
|
+
? translations.common.acceptAll
|
|
119
|
+
: action === 'reject'
|
|
120
|
+
? translations.common.rejectAll
|
|
121
|
+
: translations.common.customize}
|
|
122
|
+
</button>
|
|
123
|
+
))}
|
|
124
|
+
</div>
|
|
125
|
+
))}
|
|
126
|
+
</div>
|
|
127
|
+
</aside>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Category List That Respects the Resolved Policy
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
import {
|
|
136
|
+
useConsentManager,
|
|
137
|
+
useHeadlessConsentUI,
|
|
138
|
+
useTranslations,
|
|
139
|
+
} from '@c15t/react/headless';
|
|
140
|
+
|
|
141
|
+
export function CustomConsentDialog() {
|
|
142
|
+
const { dialog, performDialogAction, saveCustomPreferences } = useHeadlessConsentUI();
|
|
143
|
+
const {
|
|
144
|
+
consentTypes,
|
|
145
|
+
consentCategories,
|
|
146
|
+
consents,
|
|
147
|
+
selectedConsents,
|
|
148
|
+
setSelectedConsent,
|
|
149
|
+
} = useConsentManager();
|
|
150
|
+
const translations = useTranslations();
|
|
151
|
+
|
|
152
|
+
if (!dialog.isVisible) return null;
|
|
153
|
+
|
|
154
|
+
const displayedTypes = consentTypes.filter(
|
|
155
|
+
(type) => type.display && consentCategories.includes(type.name)
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
return (
|
|
159
|
+
<section className="rounded-xl border bg-white p-6 shadow-xl">
|
|
160
|
+
<h2 className="text-lg font-semibold">
|
|
161
|
+
{translations.consentManagerDialog.title}
|
|
162
|
+
</h2>
|
|
163
|
+
|
|
164
|
+
<div className="mt-4 space-y-3">
|
|
165
|
+
{displayedTypes.map((type) => (
|
|
166
|
+
<label key={type.name} className="flex items-start justify-between gap-4">
|
|
167
|
+
<div>
|
|
168
|
+
<p className="font-medium">
|
|
169
|
+
{translations.consentTypes[type.name]?.title ?? type.name}
|
|
170
|
+
</p>
|
|
171
|
+
<p className="text-sm text-gray-600">{type.description}</p>
|
|
172
|
+
</div>
|
|
173
|
+
<input
|
|
174
|
+
type="checkbox"
|
|
175
|
+
checked={selectedConsents[type.name] ?? consents[type.name] ?? false}
|
|
176
|
+
disabled={type.disabled}
|
|
177
|
+
onChange={(event) =>
|
|
178
|
+
setSelectedConsent(type.name, event.target.checked)
|
|
179
|
+
}
|
|
180
|
+
/>
|
|
181
|
+
</label>
|
|
182
|
+
))}
|
|
183
|
+
</div>
|
|
184
|
+
|
|
185
|
+
<div className="mt-4 space-y-2">
|
|
186
|
+
{dialog.actionGroups.map((group, index) => (
|
|
187
|
+
<div key={`${group.join('-')}-${index}`} className="flex gap-2">
|
|
188
|
+
{group.map((action) => (
|
|
189
|
+
<button
|
|
190
|
+
key={action}
|
|
191
|
+
type="button"
|
|
192
|
+
onClick={() => {
|
|
193
|
+
if (action === 'customize') {
|
|
194
|
+
void saveCustomPreferences();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
void performDialogAction(action);
|
|
198
|
+
}}
|
|
199
|
+
>
|
|
200
|
+
{action === 'accept'
|
|
201
|
+
? translations.common.acceptAll
|
|
202
|
+
: action === 'reject'
|
|
203
|
+
? translations.common.rejectAll
|
|
204
|
+
: translations.common.save}
|
|
205
|
+
</button>
|
|
206
|
+
))}
|
|
207
|
+
</div>
|
|
208
|
+
))}
|
|
209
|
+
</div>
|
|
210
|
+
</section>
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## What a Policy-Aware Headless Component Should Respect
|
|
216
|
+
|
|
217
|
+
When you build custom banner or dialog components, make sure they use:
|
|
218
|
+
|
|
219
|
+
* `activeUI` or `banner.isVisible` / `dialog.isVisible` for visibility
|
|
220
|
+
* `allowedActions`, `actionGroups`, and `primaryActions` instead of hard-coding buttons
|
|
221
|
+
* `primaryActions` for visual emphasis
|
|
222
|
+
* `consentCategories` when deciding which category toggles to render
|
|
223
|
+
* `policyDecision` when you want to debug why a specific UI state was chosen
|
|
224
|
+
|
|
225
|
+
If you ignore those values, your custom UI can drift away from the resolved policy pack even though the underlying consent engine is configured correctly.
|
|
226
|
+
|
|
227
|
+
## Test Custom UI Against the Resolved Policy
|
|
228
|
+
|
|
229
|
+
```ts
|
|
230
|
+
import {
|
|
231
|
+
getEffectivePolicy,
|
|
232
|
+
type PolicyUIState,
|
|
233
|
+
validateUIAgainstPolicy,
|
|
234
|
+
} from 'c15t';
|
|
235
|
+
|
|
236
|
+
const policy = getEffectivePolicy(initData);
|
|
237
|
+
|
|
238
|
+
const bannerState: PolicyUIState = {
|
|
239
|
+
mode: 'banner',
|
|
240
|
+
actions: ['accept', 'reject', 'customize'],
|
|
241
|
+
layout: 'split',
|
|
242
|
+
uiProfile: 'compact',
|
|
243
|
+
scrollLock: false,
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const issues = validateUIAgainstPolicy({
|
|
247
|
+
policy,
|
|
248
|
+
state: bannerState,
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
expect(issues).toEqual([]);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Validation and Testing
|
|
255
|
+
|
|
256
|
+
If you are building a reusable headless component library, validate your rendered UI against the resolved runtime policy in tests.
|
|
257
|
+
|
|
258
|
+
The core package exposes:
|
|
259
|
+
|
|
260
|
+
* `getEffectivePolicy(initData)` to read the resolved policy from `/init`
|
|
261
|
+
* `validateUIAgainstPolicy({ policy, state })` to detect mismatches such as wrong actions, layout, or mode
|
|
262
|
+
|
|
263
|
+
This is useful when your design system renders custom button arrangements and you want tests to catch policy drift early.
|
|
264
|
+
|
|
265
|
+
> ℹ️ **Info:**
|
|
266
|
+
> Use this together with Policy Packs when you want to preview multiple regional experiences locally.
|