@c15t/react 2.2.0 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/AGENTS.md +88 -141
  2. package/README.md +2 -2
  3. package/dist/aggregate-components.js +2 -0
  4. package/dist/chunk-warming.js +1 -0
  5. package/dist/component-hooks/use-headless-consent-ui.js +2 -0
  6. package/dist/component-hooks/use-headless-iab-consent-ui.js +2 -0
  7. package/dist/component-hooks/use-manager.js +2 -0
  8. package/dist/component-hooks/use-panel-trigger.js +2 -0
  9. package/dist/component-hooks/use-translations.js +2 -0
  10. package/dist/components/consent-preferences-link/consent-preferences-link.js +2 -1
  11. package/dist/components/consent-preferences-link/index.js +1 -0
  12. package/dist/components/frame/atoms.js +1 -1
  13. package/dist/components/frame/frame.js +2 -1
  14. package/dist/components/frame/index.js +2 -1
  15. package/dist/components/iab-panel/atoms/card.js +2 -0
  16. package/dist/components/iab-panel/atoms/content.js +2 -0
  17. package/dist/components/iab-panel/atoms/footer.js +2 -0
  18. package/dist/components/iab-panel/atoms/header.js +2 -0
  19. package/dist/components/iab-panel/atoms/overlay.js +2 -0
  20. package/dist/components/iab-panel/atoms/purpose-item.js +2 -0
  21. package/dist/components/iab-panel/atoms/root.js +2 -0
  22. package/dist/components/iab-panel/atoms/stack-item.js +2 -0
  23. package/dist/components/iab-panel/atoms/tabs.js +2 -0
  24. package/dist/components/iab-panel/atoms/vendor-list.js +2 -0
  25. package/dist/components/iab-panel/hooks/use-display-model.js +2 -0
  26. package/dist/components/iab-panel/hooks/use-gvl-data.js +2 -0
  27. package/dist/components/iab-panel/iab-panel.js +2 -0
  28. package/dist/components/iab-panel/index.js +2 -0
  29. package/dist/components/iab-panel/use-iab-translations.js +1 -0
  30. package/dist/components/iab-prompt/atoms/button-group.js +2 -0
  31. package/dist/components/iab-prompt/atoms/card.js +2 -0
  32. package/dist/components/iab-prompt/atoms/description.js +2 -0
  33. package/dist/components/iab-prompt/atoms/footer.js +2 -0
  34. package/dist/components/iab-prompt/atoms/header.js +2 -0
  35. package/dist/components/iab-prompt/atoms/overlay.js +2 -0
  36. package/dist/components/iab-prompt/atoms/root.js +2 -0
  37. package/dist/components/iab-prompt/atoms/title.js +2 -0
  38. package/dist/components/iab-prompt/iab-prompt.js +2 -0
  39. package/dist/components/iab-prompt/index.js +2 -0
  40. package/dist/components/panel/atoms/card.js +2 -0
  41. package/dist/components/panel/atoms/overlay.js +1 -0
  42. package/dist/components/panel/atoms/root.js +2 -0
  43. package/dist/components/panel/index.js +2 -0
  44. package/dist/components/panel/panel.js +2 -0
  45. package/dist/components/{consent-dialog-link → panel-link}/index.js +1 -0
  46. package/dist/components/panel-trigger/atoms/button.js +2 -0
  47. package/dist/components/panel-trigger/atoms/icon.js +2 -0
  48. package/dist/components/panel-trigger/atoms/root.js +2 -0
  49. package/dist/components/panel-trigger/atoms/text.js +2 -0
  50. package/dist/components/panel-trigger/atoms/toolbar.js +2 -0
  51. package/dist/components/panel-trigger/index.js +2 -0
  52. package/dist/components/panel-trigger/panel-trigger-toolbar.js +2 -0
  53. package/dist/components/panel-trigger/panel-trigger.js +2 -0
  54. package/dist/components/panel-trigger/use-draggable.js +2 -0
  55. package/dist/components/preferences/atoms/accordion.js +1 -0
  56. package/dist/components/preferences/atoms/button.js +1 -0
  57. package/dist/components/preferences/atoms/footer.js +1 -0
  58. package/dist/components/preferences/atoms/root.js +2 -0
  59. package/dist/components/preferences/index.js +2 -0
  60. package/dist/components/preferences/policy-actions.js +2 -0
  61. package/dist/components/preferences/preferences.js +2 -0
  62. package/dist/components/prompt/atoms/overlay.js +1 -0
  63. package/dist/components/prompt/atoms/root.js +2 -0
  64. package/dist/components/prompt/components.js +1 -0
  65. package/dist/components/prompt/error-boundary.js +2 -0
  66. package/dist/components/prompt/index.js +2 -0
  67. package/dist/components/prompt/policy-actions.js +2 -0
  68. package/dist/components/prompt/prompt.js +2 -0
  69. package/dist/components/prompt/resolve-banner-primary-actions.js +1 -0
  70. package/dist/components/prompt/surface-context.js +2 -0
  71. package/dist/components/prompt/use-banner-copy.js +2 -0
  72. package/dist/components/shared/libs/recursive-clone-children.js +1 -1
  73. package/dist/components/shared/libs/slot.js +1 -1
  74. package/dist/components/shared/libs/use-controllable-state.js +1 -1
  75. package/dist/components/shared/policy-actions.js +2 -1
  76. package/dist/components/shared/primitives/box.js +2 -1
  77. package/dist/components/shared/primitives/button.js +1 -1
  78. package/dist/components/shared/primitives/legal-links/index.js +1 -1
  79. package/dist/components/shared/ui/accordion/accordion.js +2 -1
  80. package/dist/components/shared/ui/animated-collapse/animated-collapse.js +2 -1
  81. package/dist/components/shared/ui/branding.js +1 -1
  82. package/dist/components/shared/ui/button/button.js +1 -1
  83. package/dist/components/shared/ui/collapsible/collapsible.js +2 -1
  84. package/dist/components/shared/ui/dialog/dialog.js +2 -1
  85. package/dist/components/shared/ui/icon.js +1 -1
  86. package/dist/components/shared/ui/logo.js +1 -1
  87. package/dist/components/shared/ui/preference-item/preference-item.js +2 -1
  88. package/dist/components/shared/ui/switch/switch.js +1 -1
  89. package/dist/components/shared/ui/tabs/tabs.js +2 -1
  90. package/dist/context/consent-tracking-context.js +1 -0
  91. package/dist/context/iab-context-value.js +1 -0
  92. package/dist/context/index.js +1 -0
  93. package/dist/context/theme-context.js +2 -1
  94. package/dist/context.js +1 -0
  95. package/dist/devtools.js +2 -0
  96. package/dist/draft.js +2 -0
  97. package/dist/external-iab-context.js +2 -0
  98. package/dist/frame.js +2 -0
  99. package/dist/headless.js +1 -1
  100. package/dist/hooks/use-color-scheme.js +2 -1
  101. package/dist/hooks/use-component-config.js +2 -1
  102. package/dist/hooks/use-focus-trap.js +2 -1
  103. package/dist/hooks/use-headless-iab-consent-ui.js +2 -1
  104. package/dist/hooks/use-iab-manager.js +2 -0
  105. package/dist/hooks/use-is-hydrated.js +2 -0
  106. package/dist/hooks/use-reduced-motion.js +2 -1
  107. package/dist/hooks/use-scroll-lock.js +2 -1
  108. package/dist/hooks/use-text-direction.js +2 -1
  109. package/dist/hooks/use-theme.js +2 -1
  110. package/dist/hooks.js +1 -0
  111. package/dist/iab/styles.css +1 -1
  112. package/dist/iab/styles.tw3.css +133 -19
  113. package/dist/iab-context.js +2 -0
  114. package/dist/iab.js +1 -1
  115. package/dist/index.js +1 -1
  116. package/dist/module-hooks/iframe-blocker.js +2 -0
  117. package/dist/module-hooks/network-blocker.js +2 -0
  118. package/dist/module-hooks/persistence.js +2 -0
  119. package/dist/module-hooks/script-loader.js +2 -0
  120. package/dist/module-hooks/shared.js +2 -0
  121. package/dist/module-hooks.js +2 -0
  122. package/dist/panel-link.js +2 -0
  123. package/dist/panel-trigger.js +2 -0
  124. package/dist/panel.js +2 -0
  125. package/dist/preferences.js +2 -0
  126. package/dist/primitives.js +1 -1
  127. package/dist/prompt.js +2 -0
  128. package/dist/provider.js +2 -0
  129. package/dist/server/fetch-ssr-data.js +1 -1
  130. package/dist/server/headers.js +1 -1
  131. package/dist/server/init-cache-key.js +1 -1
  132. package/dist/server/normalize-url.js +1 -1
  133. package/dist/styles.css +1 -1
  134. package/dist/styles.tw3.css +173 -29
  135. package/dist/theme-provider.js +2 -0
  136. package/dist/transports/offline.js +1 -0
  137. package/dist/types/index.js +1 -0
  138. package/dist/types/theme/index.js +1 -1
  139. package/dist/types/theme/style-types.js +1 -1
  140. package/dist/ui-config-context.js +2 -0
  141. package/dist/ui-save.js +1 -0
  142. package/dist/utils/cn.js +1 -1
  143. package/dist/utils/default-translation-config.js +1 -0
  144. package/dist/utils/index.js +1 -0
  145. package/dist/utils/merge-slot-props.js +1 -0
  146. package/dist/utils/merge-styles.js +1 -1
  147. package/dist/utils/theme-utils.js +1 -1
  148. package/dist/version.js +1 -1
  149. package/dist-types/aggregate-components.d.ts +4 -0
  150. package/dist-types/chunk-warming.d.ts +19 -0
  151. package/dist-types/component-hooks/use-headless-consent-ui.d.ts +68 -0
  152. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +22 -0
  153. package/dist-types/component-hooks/use-manager.d.ts +40 -0
  154. package/dist-types/component-hooks/use-panel-trigger.d.ts +20 -0
  155. package/dist-types/component-hooks/use-translations.d.ts +2 -0
  156. package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
  157. package/dist-types/components/frame/atoms.d.ts +5 -5
  158. package/dist-types/components/frame/types.d.ts +3 -2
  159. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/card.d.ts +2 -1
  160. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/content.d.ts +1 -1
  161. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/footer.d.ts +1 -1
  162. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/header.d.ts +1 -1
  163. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/overlay.d.ts +1 -1
  164. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/purpose-item.d.ts +7 -1
  165. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/root.d.ts +3 -2
  166. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/stack-item.d.ts +1 -1
  167. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/tabs.d.ts +1 -1
  168. package/dist-types/components/{iab-consent-dialog → iab-panel}/atoms/vendor-list.d.ts +2 -3
  169. package/dist-types/components/iab-panel/hooks/use-display-model.d.ts +18 -0
  170. package/dist-types/components/iab-panel/hooks/use-gvl-data.d.ts +17 -0
  171. package/dist-types/components/{iab-consent-dialog/iab-consent-dialog.d.ts → iab-panel/iab-panel.d.ts} +10 -3
  172. package/dist-types/components/{iab-consent-dialog → iab-panel}/index.d.ts +3 -2
  173. package/dist-types/components/iab-panel/types.d.ts +1 -0
  174. package/dist-types/components/{iab-consent-dialog → iab-panel}/use-iab-translations.d.ts +3 -1
  175. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/button-group.d.ts +1 -1
  176. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/card.d.ts +2 -1
  177. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/description.d.ts +1 -1
  178. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/footer.d.ts +2 -1
  179. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/header.d.ts +2 -1
  180. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/overlay.d.ts +1 -1
  181. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/root.d.ts +3 -2
  182. package/dist-types/components/{iab-consent-banner → iab-prompt}/atoms/title.d.ts +1 -1
  183. package/dist-types/components/{iab-consent-banner/iab-consent-banner.d.ts → iab-prompt/iab-prompt.d.ts} +10 -4
  184. package/dist-types/components/{iab-consent-banner → iab-prompt}/index.d.ts +1 -1
  185. package/dist-types/components/{consent-dialog → panel}/atoms/card.d.ts +15 -15
  186. package/dist-types/components/{consent-dialog → panel}/atoms/overlay.d.ts +24 -8
  187. package/dist-types/components/{consent-dialog → panel}/atoms/root.d.ts +4 -3
  188. package/dist-types/components/{consent-dialog → panel}/index.d.ts +13 -8
  189. package/dist-types/components/{consent-dialog/consent-dialog.d.ts → panel/panel.d.ts} +6 -5
  190. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/atoms/button.d.ts +2 -1
  191. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/atoms/icon.d.ts +1 -16
  192. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/atoms/root.d.ts +11 -23
  193. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/atoms/text.d.ts +0 -11
  194. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/atoms/toolbar.d.ts +15 -4
  195. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/index.d.ts +2 -2
  196. package/dist-types/components/{consent-dialog-trigger/consent-dialog-trigger-toolbar.d.ts → panel-trigger/panel-trigger-toolbar.d.ts} +0 -23
  197. package/dist-types/components/{consent-dialog-trigger/consent-dialog-trigger.d.ts → panel-trigger/panel-trigger.d.ts} +8 -4
  198. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/types.d.ts +16 -7
  199. package/dist-types/components/{consent-dialog-trigger → panel-trigger}/use-draggable.d.ts +2 -9
  200. package/dist-types/components/{consent-widget → preferences}/atoms/accordion.d.ts +5 -5
  201. package/dist-types/components/{consent-widget → preferences}/atoms/footer.d.ts +3 -3
  202. package/dist-types/components/{consent-widget → preferences}/atoms/root.d.ts +1 -1
  203. package/dist-types/components/{consent-widget → preferences}/index.d.ts +11 -9
  204. package/dist-types/components/preferences/policy-actions.d.ts +10 -0
  205. package/dist-types/components/{consent-banner → prompt}/atoms/overlay.d.ts +1 -1
  206. package/dist-types/components/prompt/atoms/root.d.ts +78 -0
  207. package/dist-types/components/{consent-banner → prompt}/components.d.ts +99 -14
  208. package/dist-types/components/{consent-banner → prompt}/error-boundary.d.ts +3 -1
  209. package/dist-types/components/{consent-banner → prompt}/index.d.ts +18 -10
  210. package/dist-types/components/prompt/policy-actions.d.ts +12 -0
  211. package/dist-types/components/{consent-banner/consent-banner.d.ts → prompt/prompt.d.ts} +36 -10
  212. package/dist-types/components/prompt/resolve-banner-primary-actions.d.ts +14 -0
  213. package/dist-types/components/prompt/surface-context.d.ts +45 -0
  214. package/dist-types/components/prompt/use-banner-copy.d.ts +16 -0
  215. package/dist-types/components/shared/libs/polymorphic.d.ts +2 -2
  216. package/dist-types/components/shared/libs/recursive-clone-children.d.ts +2 -2
  217. package/dist-types/components/shared/libs/slot.d.ts +1 -1
  218. package/dist-types/components/shared/libs/use-controllable-state.d.ts +1 -1
  219. package/dist-types/components/shared/policy-actions.d.ts +8 -3
  220. package/dist-types/components/shared/primitives/box.d.ts +3 -1
  221. package/dist-types/components/shared/primitives/button.d.ts +4 -37
  222. package/dist-types/components/shared/primitives/button.types.d.ts +3 -1
  223. package/dist-types/components/shared/primitives/legal-links/index.d.ts +7 -11
  224. package/dist-types/components/shared/ui/accordion/accordion.d.ts +45 -12
  225. package/dist-types/components/shared/ui/accordion/accordion.types.d.ts +1 -1
  226. package/dist-types/components/shared/ui/animated-collapse/animated-collapse.d.ts +1 -1
  227. package/dist-types/components/shared/ui/branding.d.ts +12 -12
  228. package/dist-types/components/shared/ui/button/button.d.ts +19 -25
  229. package/dist-types/components/shared/ui/button/button.types.d.ts +2 -2
  230. package/dist-types/components/shared/ui/collapsible/collapsible.d.ts +18 -1
  231. package/dist-types/components/shared/ui/dialog/dialog.d.ts +6 -6
  232. package/dist-types/components/shared/ui/icon.d.ts +1 -1
  233. package/dist-types/components/shared/ui/logo.d.ts +0 -21
  234. package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +46 -2
  235. package/dist-types/components/shared/ui/switch/switch.d.ts +19 -8
  236. package/dist-types/components/shared/ui/tabs/tabs.d.ts +19 -2
  237. package/dist-types/context/iab-context-value.d.ts +37 -0
  238. package/dist-types/context/index.d.ts +3 -0
  239. package/dist-types/context/theme-context.d.ts +2 -2
  240. package/dist-types/context.d.ts +17 -0
  241. package/dist-types/devtools.d.ts +54 -0
  242. package/dist-types/draft.d.ts +31 -0
  243. package/dist-types/external-iab-context.d.ts +29 -0
  244. package/dist-types/frame.d.ts +1 -0
  245. package/dist-types/headless.d.ts +12 -8
  246. package/dist-types/hooks/use-color-scheme.d.ts +1 -1
  247. package/dist-types/hooks/use-component-config.d.ts +2 -2
  248. package/dist-types/hooks/use-focus-trap.d.ts +2 -2
  249. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +7 -8
  250. package/dist-types/hooks/use-iab-manager.d.ts +52 -0
  251. package/dist-types/hooks/use-is-hydrated.d.ts +8 -0
  252. package/dist-types/hooks/use-reduced-motion.d.ts +1 -1
  253. package/dist-types/hooks/use-scroll-lock.d.ts +1 -1
  254. package/dist-types/hooks/use-text-direction.d.ts +1 -1
  255. package/dist-types/hooks/use-theme.d.ts +2 -1
  256. package/dist-types/hooks.d.ts +148 -0
  257. package/dist-types/iab-context.d.ts +28 -0
  258. package/dist-types/iab.d.ts +14 -8
  259. package/dist-types/index.d.ts +61 -22
  260. package/dist-types/module-hooks/iframe-blocker.d.ts +6 -0
  261. package/dist-types/module-hooks/network-blocker.d.ts +9 -0
  262. package/dist-types/module-hooks/persistence.d.ts +4 -0
  263. package/dist-types/module-hooks/script-loader.d.ts +6 -0
  264. package/dist-types/module-hooks/shared.d.ts +2 -0
  265. package/dist-types/module-hooks.d.ts +4 -0
  266. package/dist-types/panel-link.d.ts +1 -0
  267. package/dist-types/panel-trigger.d.ts +1 -0
  268. package/dist-types/panel.d.ts +1 -0
  269. package/dist-types/preferences.d.ts +1 -0
  270. package/dist-types/prompt.d.ts +1 -0
  271. package/dist-types/provider.d.ts +144 -0
  272. package/dist-types/server/fetch-ssr-data.d.ts +2 -2
  273. package/dist-types/server/headers.d.ts +3 -3
  274. package/dist-types/server/init-cache-key.d.ts +3 -3
  275. package/dist-types/server/normalize-url.d.ts +2 -2
  276. package/dist-types/server/types.d.ts +1 -1
  277. package/dist-types/theme-provider.d.ts +10 -0
  278. package/dist-types/transports/offline.d.ts +18 -0
  279. package/dist-types/types/index.d.ts +3 -0
  280. package/dist-types/types/manager.d.ts +15 -0
  281. package/dist-types/types/slots.d.ts +5 -0
  282. package/dist-types/types/theme/index.d.ts +0 -1
  283. package/dist-types/types/theme/style-types.d.ts +3 -9
  284. package/dist-types/ui-config-context.d.ts +9 -0
  285. package/dist-types/ui-save.d.ts +5 -0
  286. package/dist-types/utils/cn.d.ts +1 -1
  287. package/dist-types/utils/default-translation-config.d.ts +6 -0
  288. package/dist-types/utils/index.d.ts +4 -0
  289. package/dist-types/utils/merge-slot-props.d.ts +14 -0
  290. package/dist-types/utils/merge-styles.d.ts +1 -1
  291. package/dist-types/utils/theme-utils.d.ts +2 -2
  292. package/dist-types/version.d.ts +1 -1
  293. package/docs/README.md +88 -141
  294. package/docs/assets/v3/brand-bar.png +0 -0
  295. package/docs/assets/v3/brand-card.png +0 -0
  296. package/docs/assets/v3/choice-wall.png +0 -0
  297. package/docs/assets/v3/mobile-card.png +0 -0
  298. package/docs/assets/v3/preferences.png +0 -0
  299. package/docs/customization/overview.md +45 -0
  300. package/docs/customization/recipes.md +79 -0
  301. package/docs/customization/slots.md +55 -0
  302. package/docs/customization/tokens.md +76 -0
  303. package/docs/customization/translations.md +49 -0
  304. package/docs/frameworks/react/components/consent-banner.md +219 -202
  305. package/docs/frameworks/react/components/consent-dialog-link.md +88 -35
  306. package/docs/frameworks/react/components/consent-dialog-trigger.md +74 -134
  307. package/docs/frameworks/react/components/consent-dialog.md +170 -135
  308. package/docs/frameworks/react/components/consent-manager-provider.md +41 -249
  309. package/docs/frameworks/react/components/consent-widget.md +154 -118
  310. package/docs/frameworks/react/components/dev-tools.md +198 -33
  311. package/docs/frameworks/react/components/frame.md +120 -42
  312. package/docs/frameworks/react/concepts/consent-categories.md +24 -89
  313. package/docs/frameworks/react/concepts/policy-presets.md +123 -0
  314. package/docs/frameworks/react/headless.md +91 -185
  315. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +39 -153
  316. package/docs/frameworks/react/iab/overview.md +33 -108
  317. package/docs/frameworks/react/quickstart.md +116 -112
  318. package/docs/frameworks/react/script-loader.md +35 -535
  319. package/docs/frameworks/react/styling/overview.md +160 -255
  320. package/docs/frameworks/react/troubleshooting.md +47 -119
  321. package/docs/guides/consent-state.md +60 -0
  322. package/docs/guides/data-fetching.md +163 -0
  323. package/docs/guides/deployment-modes.md +63 -0
  324. package/docs/guides/troubleshooting.md +68 -0
  325. package/docs/guides/verify-consent.md +62 -0
  326. package/docs/integrations/adobe-analytics.md +239 -105
  327. package/docs/integrations/ahrefs-analytics.md +238 -104
  328. package/docs/integrations/amplitude.md +219 -157
  329. package/docs/integrations/building-integrations.md +32 -224
  330. package/docs/integrations/clearbit.md +247 -86
  331. package/docs/integrations/cloudflare-web-analytics.md +250 -84
  332. package/docs/integrations/crisp.md +251 -97
  333. package/docs/integrations/databuddy.md +259 -153
  334. package/docs/integrations/fathom-analytics.md +239 -96
  335. package/docs/integrations/google-maps.md +328 -207
  336. package/docs/integrations/google-tag-manager.md +248 -96
  337. package/docs/integrations/google-tag.md +261 -90
  338. package/docs/integrations/heap.md +222 -149
  339. package/docs/integrations/hightouch.md +225 -131
  340. package/docs/integrations/hotjar.md +239 -90
  341. package/docs/integrations/intercom.md +239 -98
  342. package/docs/integrations/linkedin-insights.md +243 -113
  343. package/docs/integrations/logrocket.md +241 -123
  344. package/docs/integrations/matomo-analytics.md +256 -111
  345. package/docs/integrations/meta-pixel.md +197 -324
  346. package/docs/integrations/microsoft-clarity.md +233 -114
  347. package/docs/integrations/microsoft-uet.md +245 -110
  348. package/docs/integrations/mixpanel-analytics.md +252 -87
  349. package/docs/integrations/openai-pixel.md +441 -0
  350. package/docs/integrations/overview.md +95 -133
  351. package/docs/integrations/pirsch.md +249 -96
  352. package/docs/integrations/plausible-analytics.md +241 -100
  353. package/docs/integrations/posthog.md +353 -214
  354. package/docs/integrations/promptwatch.md +251 -81
  355. package/docs/integrations/reddit-pixel.md +226 -173
  356. package/docs/integrations/rudderstack.md +244 -187
  357. package/docs/integrations/rybbit-analytics.md +244 -91
  358. package/docs/integrations/segment.md +238 -92
  359. package/docs/integrations/snapchat-pixel.md +240 -110
  360. package/docs/integrations/tiktok-pixel.md +249 -81
  361. package/docs/integrations/umami-analytics.md +242 -95
  362. package/docs/integrations/vercel-analytics.md +242 -90
  363. package/docs/integrations/x-pixel.md +238 -104
  364. package/docs/integrations/youtube.md +354 -142
  365. package/docs/upgrade-v3.md +334 -0
  366. package/iab/styles.css +1 -1
  367. package/iab/styles.tw3.css +1 -1
  368. package/package.json +187 -102
  369. package/readme.json +1 -1
  370. package/src/iab/styles.css +1 -1
  371. package/src/iab/styles.tw3.css +1 -1
  372. package/src/styles.css +1 -1
  373. package/src/styles.tw3.css +1 -1
  374. package/styles.css +1 -1
  375. package/styles.tw3.css +1 -1
  376. package/client/components/consent-banner.js +0 -4
  377. package/client/components/consent-dialog-link.js +0 -3
  378. package/client/components/consent-dialog-trigger.js +0 -3
  379. package/client/components/consent-dialog.js +0 -4
  380. package/client/components/consent-widget.js +0 -4
  381. package/client/components/frame.js +0 -3
  382. package/client/components/integrations.js +0 -3
  383. package/dist/components/consent-banner/atoms/overlay.cjs +0 -1
  384. package/dist/components/consent-banner/atoms/overlay.js +0 -1
  385. package/dist/components/consent-banner/atoms/root.cjs +0 -1
  386. package/dist/components/consent-banner/atoms/root.js +0 -1
  387. package/dist/components/consent-banner/components.cjs +0 -1
  388. package/dist/components/consent-banner/components.js +0 -1
  389. package/dist/components/consent-banner/consent-banner.cjs +0 -1
  390. package/dist/components/consent-banner/consent-banner.js +0 -1
  391. package/dist/components/consent-banner/error-boundary.cjs +0 -1
  392. package/dist/components/consent-banner/error-boundary.js +0 -1
  393. package/dist/components/consent-banner/index.cjs +0 -1
  394. package/dist/components/consent-banner/index.js +0 -1
  395. package/dist/components/consent-banner/policy-actions.cjs +0 -1
  396. package/dist/components/consent-banner/policy-actions.js +0 -1
  397. package/dist/components/consent-dialog/atoms/card.cjs +0 -1
  398. package/dist/components/consent-dialog/atoms/card.js +0 -1
  399. package/dist/components/consent-dialog/atoms/overlay.cjs +0 -1
  400. package/dist/components/consent-dialog/atoms/overlay.js +0 -1
  401. package/dist/components/consent-dialog/atoms/root.cjs +0 -1
  402. package/dist/components/consent-dialog/atoms/root.js +0 -1
  403. package/dist/components/consent-dialog/consent-dialog.cjs +0 -1
  404. package/dist/components/consent-dialog/consent-dialog.js +0 -1
  405. package/dist/components/consent-dialog/index.cjs +0 -1
  406. package/dist/components/consent-dialog/index.js +0 -1
  407. package/dist/components/consent-dialog-link/index.cjs +0 -1
  408. package/dist/components/consent-dialog-trigger/atoms/button.cjs +0 -1
  409. package/dist/components/consent-dialog-trigger/atoms/button.js +0 -1
  410. package/dist/components/consent-dialog-trigger/atoms/icon.cjs +0 -1
  411. package/dist/components/consent-dialog-trigger/atoms/icon.js +0 -1
  412. package/dist/components/consent-dialog-trigger/atoms/root.cjs +0 -1
  413. package/dist/components/consent-dialog-trigger/atoms/root.js +0 -1
  414. package/dist/components/consent-dialog-trigger/atoms/text.cjs +0 -1
  415. package/dist/components/consent-dialog-trigger/atoms/text.js +0 -1
  416. package/dist/components/consent-dialog-trigger/atoms/toolbar.cjs +0 -1
  417. package/dist/components/consent-dialog-trigger/atoms/toolbar.js +0 -1
  418. package/dist/components/consent-dialog-trigger/consent-dialog-trigger-toolbar.cjs +0 -1
  419. package/dist/components/consent-dialog-trigger/consent-dialog-trigger-toolbar.js +0 -1
  420. package/dist/components/consent-dialog-trigger/consent-dialog-trigger.cjs +0 -1
  421. package/dist/components/consent-dialog-trigger/consent-dialog-trigger.js +0 -1
  422. package/dist/components/consent-dialog-trigger/index.cjs +0 -1
  423. package/dist/components/consent-dialog-trigger/index.js +0 -1
  424. package/dist/components/consent-dialog-trigger/types.cjs +0 -1
  425. package/dist/components/consent-dialog-trigger/use-draggable.cjs +0 -1
  426. package/dist/components/consent-dialog-trigger/use-draggable.js +0 -1
  427. package/dist/components/consent-preferences-link/consent-preferences-link.cjs +0 -1
  428. package/dist/components/consent-preferences-link/index.cjs +0 -1
  429. package/dist/components/consent-widget/atoms/accordion.cjs +0 -1
  430. package/dist/components/consent-widget/atoms/accordion.js +0 -1
  431. package/dist/components/consent-widget/atoms/button.cjs +0 -1
  432. package/dist/components/consent-widget/atoms/button.js +0 -1
  433. package/dist/components/consent-widget/atoms/footer.cjs +0 -1
  434. package/dist/components/consent-widget/atoms/footer.js +0 -1
  435. package/dist/components/consent-widget/atoms/root.cjs +0 -1
  436. package/dist/components/consent-widget/atoms/root.js +0 -1
  437. package/dist/components/consent-widget/consent-widget.cjs +0 -1
  438. package/dist/components/consent-widget/consent-widget.js +0 -1
  439. package/dist/components/consent-widget/index.cjs +0 -1
  440. package/dist/components/consent-widget/index.js +0 -1
  441. package/dist/components/consent-widget/policy-actions.cjs +0 -1
  442. package/dist/components/consent-widget/policy-actions.js +0 -1
  443. package/dist/components/consent-widget/types.cjs +0 -1
  444. package/dist/components/frame/atoms.cjs +0 -1
  445. package/dist/components/frame/frame.cjs +0 -1
  446. package/dist/components/frame/index.cjs +0 -1
  447. package/dist/components/frame/types.cjs +0 -1
  448. package/dist/components/iab-consent-banner/atoms/button-group.cjs +0 -1
  449. package/dist/components/iab-consent-banner/atoms/button-group.js +0 -1
  450. package/dist/components/iab-consent-banner/atoms/card.cjs +0 -1
  451. package/dist/components/iab-consent-banner/atoms/card.js +0 -1
  452. package/dist/components/iab-consent-banner/atoms/description.cjs +0 -1
  453. package/dist/components/iab-consent-banner/atoms/description.js +0 -1
  454. package/dist/components/iab-consent-banner/atoms/footer.cjs +0 -1
  455. package/dist/components/iab-consent-banner/atoms/footer.js +0 -1
  456. package/dist/components/iab-consent-banner/atoms/header.cjs +0 -1
  457. package/dist/components/iab-consent-banner/atoms/header.js +0 -1
  458. package/dist/components/iab-consent-banner/atoms/overlay.cjs +0 -1
  459. package/dist/components/iab-consent-banner/atoms/overlay.js +0 -1
  460. package/dist/components/iab-consent-banner/atoms/root.cjs +0 -1
  461. package/dist/components/iab-consent-banner/atoms/root.js +0 -1
  462. package/dist/components/iab-consent-banner/atoms/title.cjs +0 -1
  463. package/dist/components/iab-consent-banner/atoms/title.js +0 -1
  464. package/dist/components/iab-consent-banner/iab-consent-banner.cjs +0 -1
  465. package/dist/components/iab-consent-banner/iab-consent-banner.js +0 -1
  466. package/dist/components/iab-consent-banner/index.cjs +0 -1
  467. package/dist/components/iab-consent-banner/index.js +0 -1
  468. package/dist/components/iab-consent-dialog/atoms/card.cjs +0 -1
  469. package/dist/components/iab-consent-dialog/atoms/card.js +0 -1
  470. package/dist/components/iab-consent-dialog/atoms/content.cjs +0 -1
  471. package/dist/components/iab-consent-dialog/atoms/content.js +0 -1
  472. package/dist/components/iab-consent-dialog/atoms/footer.cjs +0 -1
  473. package/dist/components/iab-consent-dialog/atoms/footer.js +0 -1
  474. package/dist/components/iab-consent-dialog/atoms/header.cjs +0 -1
  475. package/dist/components/iab-consent-dialog/atoms/header.js +0 -1
  476. package/dist/components/iab-consent-dialog/atoms/overlay.cjs +0 -1
  477. package/dist/components/iab-consent-dialog/atoms/overlay.js +0 -1
  478. package/dist/components/iab-consent-dialog/atoms/purpose-item.cjs +0 -1
  479. package/dist/components/iab-consent-dialog/atoms/purpose-item.js +0 -1
  480. package/dist/components/iab-consent-dialog/atoms/root.cjs +0 -1
  481. package/dist/components/iab-consent-dialog/atoms/root.js +0 -1
  482. package/dist/components/iab-consent-dialog/atoms/stack-item.cjs +0 -1
  483. package/dist/components/iab-consent-dialog/atoms/stack-item.js +0 -1
  484. package/dist/components/iab-consent-dialog/atoms/tabs.cjs +0 -1
  485. package/dist/components/iab-consent-dialog/atoms/tabs.js +0 -1
  486. package/dist/components/iab-consent-dialog/atoms/vendor-list.cjs +0 -1
  487. package/dist/components/iab-consent-dialog/atoms/vendor-list.js +0 -1
  488. package/dist/components/iab-consent-dialog/hooks/use-gvl-data.cjs +0 -1
  489. package/dist/components/iab-consent-dialog/hooks/use-gvl-data.js +0 -1
  490. package/dist/components/iab-consent-dialog/iab-consent-dialog.cjs +0 -1
  491. package/dist/components/iab-consent-dialog/iab-consent-dialog.js +0 -1
  492. package/dist/components/iab-consent-dialog/index.cjs +0 -1
  493. package/dist/components/iab-consent-dialog/index.js +0 -1
  494. package/dist/components/iab-consent-dialog/types.cjs +0 -1
  495. package/dist/components/iab-consent-dialog/use-iab-translations.cjs +0 -1
  496. package/dist/components/iab-consent-dialog/use-iab-translations.js +0 -1
  497. package/dist/components/integrations/google-map.cjs +0 -1
  498. package/dist/components/integrations/google-map.js +0 -1
  499. package/dist/components/integrations/index.cjs +0 -1
  500. package/dist/components/integrations/index.js +0 -1
  501. package/dist/components/integrations/shared.cjs +0 -1
  502. package/dist/components/integrations/shared.js +0 -1
  503. package/dist/components/integrations/youtube-embed.cjs +0 -1
  504. package/dist/components/integrations/youtube-embed.js +0 -1
  505. package/dist/components/shared/libs/polymorphic.cjs +0 -1
  506. package/dist/components/shared/libs/recursive-clone-children.cjs +0 -1
  507. package/dist/components/shared/libs/slot.cjs +0 -1
  508. package/dist/components/shared/libs/use-controllable-state.cjs +0 -1
  509. package/dist/components/shared/policy-actions.cjs +0 -1
  510. package/dist/components/shared/primitives/box.cjs +0 -1
  511. package/dist/components/shared/primitives/button.cjs +0 -1
  512. package/dist/components/shared/primitives/button.types.cjs +0 -1
  513. package/dist/components/shared/primitives/legal-links/index.cjs +0 -1
  514. package/dist/components/shared/ui/accordion/accordion.cjs +0 -1
  515. package/dist/components/shared/ui/accordion/accordion.types.cjs +0 -1
  516. package/dist/components/shared/ui/accordion/index.cjs +0 -1
  517. package/dist/components/shared/ui/animated-collapse/animated-collapse.cjs +0 -1
  518. package/dist/components/shared/ui/animated-collapse/index.cjs +0 -1
  519. package/dist/components/shared/ui/branding.cjs +0 -1
  520. package/dist/components/shared/ui/button/button.cjs +0 -1
  521. package/dist/components/shared/ui/button/button.types.cjs +0 -1
  522. package/dist/components/shared/ui/button/index.cjs +0 -1
  523. package/dist/components/shared/ui/collapsible/collapsible.cjs +0 -1
  524. package/dist/components/shared/ui/collapsible/index.cjs +0 -1
  525. package/dist/components/shared/ui/dialog/dialog.cjs +0 -1
  526. package/dist/components/shared/ui/dialog/index.cjs +0 -1
  527. package/dist/components/shared/ui/icon.cjs +0 -1
  528. package/dist/components/shared/ui/logo.cjs +0 -1
  529. package/dist/components/shared/ui/preference-item/index.cjs +0 -1
  530. package/dist/components/shared/ui/preference-item/preference-item.cjs +0 -1
  531. package/dist/components/shared/ui/switch/index.cjs +0 -1
  532. package/dist/components/shared/ui/switch/switch.cjs +0 -1
  533. package/dist/components/shared/ui/switch/switch.types.cjs +0 -1
  534. package/dist/components/shared/ui/tabs/index.cjs +0 -1
  535. package/dist/components/shared/ui/tabs/tabs.cjs +0 -1
  536. package/dist/context/consent-manager-context.cjs +0 -1
  537. package/dist/context/consent-manager-context.js +0 -1
  538. package/dist/context/consent-tracking-context.cjs +0 -1
  539. package/dist/context/theme-context.cjs +0 -1
  540. package/dist/headless.cjs +0 -1
  541. package/dist/hooks/index.cjs +0 -1
  542. package/dist/hooks/index.js +0 -1
  543. package/dist/hooks/use-color-scheme.cjs +0 -1
  544. package/dist/hooks/use-component-config.cjs +0 -1
  545. package/dist/hooks/use-consent-dialog-trigger.cjs +0 -1
  546. package/dist/hooks/use-consent-dialog-trigger.js +0 -1
  547. package/dist/hooks/use-consent-manager.cjs +0 -1
  548. package/dist/hooks/use-consent-manager.js +0 -1
  549. package/dist/hooks/use-consent-script.cjs +0 -1
  550. package/dist/hooks/use-consent-script.js +0 -1
  551. package/dist/hooks/use-focus-trap.cjs +0 -1
  552. package/dist/hooks/use-headless-consent-ui.cjs +0 -1
  553. package/dist/hooks/use-headless-consent-ui.js +0 -1
  554. package/dist/hooks/use-headless-iab-consent-ui.cjs +0 -1
  555. package/dist/hooks/use-reduced-motion.cjs +0 -1
  556. package/dist/hooks/use-scroll-lock.cjs +0 -1
  557. package/dist/hooks/use-ssr-status.cjs +0 -1
  558. package/dist/hooks/use-ssr-status.js +0 -1
  559. package/dist/hooks/use-styles.cjs +0 -1
  560. package/dist/hooks/use-styles.js +0 -1
  561. package/dist/hooks/use-text-direction.cjs +0 -1
  562. package/dist/hooks/use-theme.cjs +0 -1
  563. package/dist/hooks/use-translations.cjs +0 -1
  564. package/dist/hooks/use-translations.js +0 -1
  565. package/dist/iab.cjs +0 -1
  566. package/dist/index.cjs +0 -1
  567. package/dist/primitives/accordion.cjs +0 -1
  568. package/dist/primitives/button.cjs +0 -1
  569. package/dist/primitives/collapsible.cjs +0 -1
  570. package/dist/primitives/dialog.cjs +0 -1
  571. package/dist/primitives/preference-item.cjs +0 -1
  572. package/dist/primitives/switch.cjs +0 -1
  573. package/dist/primitives/tabs.cjs +0 -1
  574. package/dist/primitives.cjs +0 -1
  575. package/dist/providers/consent-manager-provider.cjs +0 -1
  576. package/dist/providers/consent-manager-provider.js +0 -1
  577. package/dist/server/fetch-ssr-data.cjs +0 -1
  578. package/dist/server/headers.cjs +0 -1
  579. package/dist/server/index.cjs +0 -1
  580. package/dist/server/init-cache-key.cjs +0 -1
  581. package/dist/server/normalize-url.cjs +0 -1
  582. package/dist/server/types.cjs +0 -1
  583. package/dist/types/consent-manager.cjs +0 -1
  584. package/dist/types/theme/index.cjs +0 -1
  585. package/dist/types/theme/style-keys.cjs +0 -1
  586. package/dist/types/theme/style-types.cjs +0 -1
  587. package/dist/utils/cn.cjs +0 -1
  588. package/dist/utils/merge-styles.cjs +0 -1
  589. package/dist/utils/test-helpers.cjs +0 -1
  590. package/dist/utils/test-helpers.js +0 -1
  591. package/dist/utils/theme-utils.cjs +0 -1
  592. package/dist/version.cjs +0 -1
  593. package/dist-types/components/consent-banner/atoms/root.d.ts +0 -126
  594. package/dist-types/components/consent-banner/policy-actions.d.ts +0 -11
  595. package/dist-types/components/consent-widget/policy-actions.d.ts +0 -11
  596. package/dist-types/components/iab-consent-dialog/hooks/use-gvl-data.d.ts +0 -27
  597. package/dist-types/components/iab-consent-dialog/types.d.ts +0 -72
  598. package/dist-types/components/integrations/google-map.d.ts +0 -82
  599. package/dist-types/components/integrations/index.d.ts +0 -2
  600. package/dist-types/components/integrations/shared.d.ts +0 -12
  601. package/dist-types/components/integrations/youtube-embed.d.ts +0 -95
  602. package/dist-types/context/consent-manager-context.d.ts +0 -31
  603. package/dist-types/hooks/index.d.ts +0 -12
  604. package/dist-types/hooks/use-consent-dialog-trigger.d.ts +0 -10
  605. package/dist-types/hooks/use-consent-manager.d.ts +0 -27
  606. package/dist-types/hooks/use-consent-script.d.ts +0 -80
  607. package/dist-types/hooks/use-headless-consent-ui.d.ts +0 -46
  608. package/dist-types/hooks/use-ssr-status.d.ts +0 -57
  609. package/dist-types/hooks/use-styles.d.ts +0 -21
  610. package/dist-types/hooks/use-translations.d.ts +0 -28
  611. package/dist-types/providers/consent-manager-provider.d.ts +0 -40
  612. package/dist-types/types/consent-manager.d.ts +0 -39
  613. package/dist-types/types/theme/style-keys.d.ts +0 -1
  614. package/dist-types/utils/test-helpers.d.ts +0 -31
  615. package/docs/frameworks/react/building-headless-components.md +0 -370
  616. package/docs/frameworks/react/callbacks.md +0 -186
  617. package/docs/frameworks/react/concepts/client-modes.md +0 -177
  618. package/docs/frameworks/react/concepts/consent-models.md +0 -113
  619. package/docs/frameworks/react/concepts/cookie-management.md +0 -122
  620. package/docs/frameworks/react/concepts/glossary.md +0 -24
  621. package/docs/frameworks/react/concepts/initialization-flow.md +0 -149
  622. package/docs/frameworks/react/concepts/policy-packs.md +0 -228
  623. package/docs/frameworks/react/hooks/use-color-scheme.md +0 -41
  624. package/docs/frameworks/react/hooks/use-consent-manager/checking-consent.md +0 -96
  625. package/docs/frameworks/react/hooks/use-consent-manager/location-info.md +0 -97
  626. package/docs/frameworks/react/hooks/use-consent-manager/setting-consent.md +0 -94
  627. package/docs/frameworks/react/hooks/use-draggable.md +0 -59
  628. package/docs/frameworks/react/hooks/use-focus-trap.md +0 -42
  629. package/docs/frameworks/react/hooks/use-reduced-motion.md +0 -37
  630. package/docs/frameworks/react/hooks/use-ssr-status.md +0 -32
  631. package/docs/frameworks/react/hooks/use-text-direction.md +0 -50
  632. package/docs/frameworks/react/hooks/use-translations.md +0 -55
  633. package/docs/frameworks/react/iab/consent-banner.md +0 -91
  634. package/docs/frameworks/react/iab/consent-dialog.md +0 -129
  635. package/docs/frameworks/react/iab/use-gvl-data.md +0 -21
  636. package/docs/frameworks/react/iframe-blocking.md +0 -106
  637. package/docs/frameworks/react/internationalization.md +0 -207
  638. package/docs/frameworks/react/network-blocker.md +0 -140
  639. package/docs/frameworks/react/optimization.md +0 -148
  640. package/docs/frameworks/react/policy-packs.md +0 -242
  641. package/docs/frameworks/react/server-side.md +0 -158
  642. package/docs/frameworks/react/styling/classnames.md +0 -94
  643. package/docs/frameworks/react/styling/color-scheme.md +0 -84
  644. package/docs/frameworks/react/styling/css-variables.md +0 -53
  645. package/docs/frameworks/react/styling/slots.md +0 -94
  646. package/docs/frameworks/react/styling/tailwind.md +0 -119
  647. package/docs/frameworks/react/styling/tokens.md +0 -156
  648. package/docs/shared/concepts/client-modes.md +0 -103
  649. package/docs/shared/concepts/consent-categories.md +0 -41
  650. package/docs/shared/concepts/consent-models.md +0 -72
  651. package/docs/shared/concepts/cookie-management.md +0 -88
  652. package/docs/shared/concepts/glossary.md +0 -24
  653. package/docs/shared/concepts/initialization-flow.md +0 -105
  654. package/docs/shared/concepts/policy-packs.md +0 -225
  655. package/docs/shared/react/components/consent-banner.md +0 -242
  656. package/docs/shared/react/components/consent-dialog-link.md +0 -45
  657. package/docs/shared/react/components/consent-dialog-trigger.md +0 -185
  658. package/docs/shared/react/components/consent-dialog.md +0 -119
  659. package/docs/shared/react/components/consent-manager-provider.md +0 -225
  660. package/docs/shared/react/components/consent-widget.md +0 -121
  661. package/docs/shared/react/components/dev-tools.md +0 -81
  662. package/docs/shared/react/components/frame.md +0 -52
  663. package/docs/shared/react/guides/building-headless-components.md +0 -110
  664. package/docs/shared/react/guides/callbacks.md +0 -89
  665. package/docs/shared/react/guides/headless.md +0 -31
  666. package/docs/shared/react/guides/iframe-blocking.md +0 -65
  667. package/docs/shared/react/guides/internationalization.md +0 -123
  668. package/docs/shared/react/guides/network-blocker.md +0 -72
  669. package/docs/shared/react/guides/optimization.md +0 -44
  670. package/docs/shared/react/guides/policy-packs.md +0 -173
  671. package/docs/shared/react/guides/script-loader.md +0 -311
  672. package/docs/shared/react/hooks/use-color-scheme.md +0 -31
  673. package/docs/shared/react/hooks/use-consent-manager/checking-consent.md +0 -95
  674. package/docs/shared/react/hooks/use-consent-manager/location-info.md +0 -96
  675. package/docs/shared/react/hooks/use-consent-manager/overview.md +0 -74
  676. package/docs/shared/react/hooks/use-consent-manager/setting-consent.md +0 -93
  677. package/docs/shared/react/hooks/use-draggable.md +0 -30
  678. package/docs/shared/react/hooks/use-focus-trap.md +0 -20
  679. package/docs/shared/react/hooks/use-reduced-motion.md +0 -33
  680. package/docs/shared/react/hooks/use-ssr-status.md +0 -16
  681. package/docs/shared/react/hooks/use-text-direction.md +0 -38
  682. package/docs/shared/react/hooks/use-translations.md +0 -15
  683. package/docs/shared/react/iab/consent-banner.md +0 -60
  684. package/docs/shared/react/iab/consent-dialog.md +0 -76
  685. package/docs/shared/react/iab/overview.md +0 -80
  686. package/docs/shared/react/iab/use-gvl-data.md +0 -21
  687. package/docs/shared/react/styling/classnames.md +0 -93
  688. package/docs/shared/react/styling/color-scheme.md +0 -35
  689. package/docs/shared/react/styling/css-variables.md +0 -53
  690. package/docs/shared/react/styling/overview.md +0 -261
  691. package/docs/shared/react/styling/slots.md +0 -93
  692. package/docs/shared/react/styling/stylesheet-entrypoint.md +0 -8
  693. package/docs/shared/react/styling/tailwind.md +0 -88
  694. package/docs/shared/react/styling/tokens.md +0 -155
  695. package/docs/shared/troubleshooting.md +0 -82
  696. /package/dist/components/{consent-dialog-trigger → iab-panel}/types.js +0 -0
  697. /package/dist/components/{consent-widget → panel-trigger}/types.js +0 -0
  698. /package/dist/components/{iab-consent-dialog → preferences}/types.js +0 -0
  699. /package/dist/types/{consent-manager.js → manager.js} +0 -0
  700. /package/dist/types/{theme/style-keys.js → slots.js} +0 -0
  701. /package/dist-types/components/{consent-dialog-link → panel-link}/index.d.ts +0 -0
  702. /package/dist-types/components/{consent-widget → preferences}/atoms/button.d.ts +0 -0
  703. /package/dist-types/components/{consent-widget/consent-widget.d.ts → preferences/preferences.d.ts} +0 -0
  704. /package/dist-types/components/{consent-widget → preferences}/types.d.ts +0 -0
@@ -1,302 +1,207 @@
1
1
  ---
2
- title: Styling Overview
3
- description: Customize every aspect of c15t's consent components using design
4
- tokens, component slots, and CSS variables.
2
+ title: Styling
3
+ description: Import the React stylesheet and theme c15t components with tokens,
4
+ slots, and class names on ConsentProvider.
5
5
  group: frameworks
6
6
  ---
7
- c15t's theming system gives you multiple levels of control, but most customization should stay inside the pre-built components.
8
7
 
9
- Start with the lowest-power tool that solves the problem:
8
+ ## Stylesheet
10
9
 
11
- 1. **Pre-built component APIs** — provider options and component props such as `layout`, `direction`, `primaryButton`, `legalLinks`, and `theme.consentActions`
12
- 2. **Design tokens** — global colors, typography, spacing, radius, shadows, and motion
13
- 3. **Slots** — targeted styling for specific parts such as the banner card, footer, or title
14
- 4. **CSS variables or className-level overrides** — when you need to integrate with external CSS systems
15
- 5. **Compound components** — when you must rearrange markup while still using c15t primitives
16
- 6. **`noStyle`** — when you want c15t structure but you need to own all visual styling
17
- 7. **Headless** — when you want fully custom markup and behavior
18
-
19
- Keep styling and escalation as separate decisions:
20
-
21
- * If you are still using the stock banner, dialog, or widget, stay with props, tokens, and slots.
22
- * Escalate to compound components, `noStyle`, or headless only when the structure or behavior itself must change.
23
-
24
- ## Styling Approaches
25
-
26
- |Approach|Control|Use When|
27
- |--|--|--|
28
- |**Component and provider APIs**|High|Reordering actions, changing button emphasis, configuring links, hiding branding, changing copy via `i18n`|
29
- |**Tokens**|High|Changing global colors, typography, spacing, radius, shadows, or motion|
30
- |**Slots**|Medium|Targeting specific component parts (for example `consentBannerFooter` or `consentDialogCard`)|
31
- |**CSS variables / className**|Medium|Integrating with an existing stylesheet or utility classes after tokens and slots|
32
- |**Compound components**|Structure|Rearranging existing c15t primitives without going fully custom|
33
- |**noStyle**|Full visuals|Keeping c15t structure but replacing all visual defaults|
34
- |**Headless**|Full|Replacing both markup and behavior|
35
-
36
- ## Quick Start
37
-
38
- Use the `Theme` type for TypeScript autocomplete and validation:
39
-
40
- ```tsx
41
- import { type ReactNode } from 'react';
42
- import { type Theme, ConsentManagerProvider } from '@c15t/react';
43
-
44
- const theme = {
45
- colors: {
46
- primary: '#6366f1',
47
- primaryHover: '#4f46e5',
48
- surface: '#ffffff',
49
- text: '#1f2937',
50
- textMuted: '#6b7280',
51
- },
52
- radius: {
53
- md: '0.75rem',
54
- lg: '1rem',
55
- },
56
- spacing: {
57
- md: '1.25rem',
58
- },
59
- } satisfies Theme;
60
-
61
- export function ConsentManager({ children }: { children: ReactNode }) {
62
- return (
63
- <ConsentManagerProvider
64
- options={{
65
- mode: 'hosted',
66
- backendURL: 'https://your-instance.c15t.dev',
67
- theme,
68
- }}
69
- >
70
- {children}
71
- </ConsentManagerProvider>
72
- );
73
- }
74
- ```
75
-
76
- ## Styling Inside Pre-Built Components
77
-
78
- Start here before you consider compound components or headless mode.
79
-
80
- ### 1. Provider and component configuration
81
-
82
- Use the stock APIs first:
83
-
84
- * `layout`, `direction`, and `primaryButton` for banner action arrangement
85
- * `legalLinks` for link visibility
86
- * `hideBranding` and `showTrigger` for dialog and widget behavior
87
- * `theme.consentActions` for stock banner and dialog button treatment
88
- * `i18n` on `ConsentManagerProvider` for copy changes
10
+ Import the stylesheet once, next to your global CSS, in the entry module that
11
+ renders `ConsentProvider`:
89
12
 
90
13
  ```tsx
91
- <ConsentBanner layout={['customize', ['reject', 'accept']]} primaryButton="accept" />
14
+ import 'c15t/react/styles.css';
92
15
  ```
93
16
 
94
- ### 2. Design tokens
95
-
96
- Set global values for colors, typography, spacing, radius, shadows, and motion:
97
-
98
- ```tsx
99
- options={{ theme: { colors: { primary: '#6366f1' } } }}
17
+ Every rule lives in `@layer components`, so unlayered utilities from Tailwind
18
+ v4 and atomic classes from StyleX override it without specificity tricks.
19
+ Tailwind v3 treats `@layer components` as its own directive, so import the
20
+ Tailwind 3 build from your Tailwind entry instead, between the `components`
21
+ and `utilities` directives:
22
+
23
+ ```css
24
+ @tailwind base;
25
+ @tailwind components;
26
+ @import 'c15t/react/styles.tw3.css';
27
+ @tailwind utilities;
100
28
  ```
101
29
 
102
- Use tokens first when the change is semantic:
30
+ ## Tokens
103
31
 
104
- * Banner card background -> `theme.colors.surface`
105
- * Banner footer background -> `theme.colors.surfaceHover`
106
- * Shared copy color -> `theme.colors.text` and `theme.colors.textMuted`
107
- * Primary-filled surfaces such as stock branding tags and filled actions -> `theme.colors.primary` with `theme.colors.textOnPrimary` as the matching foreground override
32
+ The provider snippets below are partial configuration examples. Apply them to
33
+ your existing `ConsentProvider` from `c15t/react`, keeping its `mode`, children
34
+ and other options.
108
35
 
109
- ```tsx
110
- options={{
111
- theme: {
112
- colors: {
113
- surface: '#ffffff',
114
- surfaceHover: '#f6f3ee',
115
- },
116
- },
117
- }}
118
- ```
119
-
120
- If you set `theme.colors.primary` but omit `theme.colors.textOnPrimary`, c15t derives a readable foreground automatically. Add `textOnPrimary` only when you need to force a specific branded foreground color.
121
-
122
- ### 3. Component slots
123
-
124
- Target specific component parts via the `slots` object:
36
+ Colors, radii, shadows, typography, and motion come from `--c15t-*` custom
37
+ properties. Set them on the provider through `theme`, or override the
38
+ variables directly in your CSS.
125
39
 
126
40
  ```tsx
127
- options={{
128
- theme: {
129
- slots: {
130
- consentBannerCard: 'rounded-[28px] shadow-xl',
131
- consentBannerFooter: 'border-t border-black/10',
132
- consentBannerTitle: 'tracking-tight',
133
- },
134
- },
135
- }}
41
+ import { ConsentProvider, defineTheme } from 'c15t/react';
42
+
43
+ const theme = defineTheme({
44
+ colors: { primary: '#2f6f4e' },
45
+ radius: { lg: '4px' },
46
+ consentActions: {
47
+ primary: { variant: 'primary', mode: 'filled' },
48
+ dismiss: { variant: 'neutral', mode: 'stroke' },
49
+ },
50
+ });
51
+
52
+ <ConsentProvider options={{ mode, theme }} />;
136
53
  ```
137
54
 
138
- Use slots when the component part is right but the local styling needs adjustment.
139
-
140
- ### 4. CSS variables and className-level overrides
141
-
142
- Override `--c15t-*` custom properties in your stylesheet or attach classes through slots when your app styling is driven externally.
55
+ `consentActions` decides how each action role looks: `default` applies to
56
+ every button, `primary` to whichever actions the policy or your props mark
57
+ primary, and `accept`, `reject`, `customize`, and `dismiss` to one role each.
58
+ Per-action keys win over `primary`, which wins over `default`.
143
59
 
144
- Reach for this after tokens and slots, not before.
60
+ Banner sizing has its own variables. Override them in CSS when a variant
61
+ needs a different footprint:
145
62
 
146
- ```tsx
147
- options={{
148
- theme: {
149
- slots: {
150
- consentBannerFooter: 'bg-[var(--banner-footer)]',
151
- },
152
- },
153
- }}
154
- ```
63
+ | Variable | Default | Applies to |
64
+ | ----------------------------------- | ------- | ---------------- |
65
+ | `--consent-banner-max-width` | `440px` | `floating` cards |
66
+ | `--consent-banner-widget-max-width` | `20rem` | `widget` chips |
67
+ | `--consent-banner-wall-max-width` | `30rem` | `wall` cards |
155
68
 
156
- ## Escalating Beyond Pre-Built Components
69
+ ## Colors by consent model
157
70
 
158
- Only move up this ladder when the lower rung cannot satisfy the request.
71
+ The primary action can change while the brand color stays the same. Set
72
+ `consentActions.primary` once, then select `primaryButton` per policy as
73
+ shown in [ConsentBanner](../components/consent-banner.md#per-policy-buttons).
159
74
 
160
- ### 5. Compound components
75
+ To give opt-in and opt-out banners different colors, scope the tokens to
76
+ the root's attributes. Include hover and foreground colors when overriding
77
+ CSS tokens directly:
161
78
 
162
- Use compound components when you need to rearrange existing c15t primitives:
79
+ ```css
80
+ [data-prompt][data-model='opt-in'] {
81
+ --c15t-primary: #2f6f4e;
82
+ --c15t-primary-hover: #24563c;
83
+ --c15t-text-on-primary: #fff;
84
+ }
163
85
 
164
- ```tsx
165
- <ConsentBanner.Root>
166
- <ConsentBanner.Card>
167
- <ConsentBanner.Header>
168
- <ConsentBanner.Title />
169
- <ConsentBanner.Description />
170
- </ConsentBanner.Header>
171
- <ConsentBanner.Footer>
172
- <ConsentBanner.CustomizeButton />
173
- <ConsentBanner.FooterSubGroup>
174
- <ConsentBanner.RejectButton />
175
- <ConsentBanner.AcceptButton />
176
- </ConsentBanner.FooterSubGroup>
177
- </ConsentBanner.Footer>
178
- </ConsentBanner.Card>
179
- </ConsentBanner.Root>
86
+ [data-prompt][data-model='opt-out'] {
87
+ --c15t-primary: #6b3fa0;
88
+ --c15t-primary-hover: #55327f;
89
+ --c15t-text-on-primary: #fff;
90
+ }
180
91
  ```
181
92
 
182
- ### 6. `noStyle`
93
+ These colors apply to the action marked primary. Button layout and color
94
+ changes do not change the policy or expire a saved choice.
183
95
 
184
- Use `noStyle` only when the c15t structure is still correct but you want to replace all visual defaults:
96
+ ## Slots
185
97
 
186
- ```tsx
187
- <ConsentBanner noStyle />
188
- ```
98
+ Each component part is a slot. A slot accepts any attributes the element
99
+ takes, so the contract is the same whether you write class strings or pass an
100
+ object with `className` and `style`. Set slots on the provider under
101
+ `components`, keyed by component and part.
189
102
 
190
- ### 7. Headless
103
+ For a full-width notice, use the supported `bar` variant. Inside your existing
104
+ provider, replace the stock banner with:
191
105
 
192
- Go headless only when you are replacing both markup and behavior. For that path, continue to [Headless Mode](../headless).
106
+ ```tsx title="src/regional-banner.tsx"
107
+ import { ConsentBanner, usePolicyRule } from 'c15t/react';
193
108
 
194
- ## Common Styling Tasks
195
-
196
- ### Change the banner footer background
197
-
198
- ```tsx
199
- options={{
200
- theme: {
201
- colors: {
202
- surfaceHover: '#f6f3ee',
203
- },
204
- },
205
- }}
109
+ export function RegionalBanner() {
110
+ const policy = usePolicyRule();
111
+ return <ConsentBanner variant={policy?.prompt === 'notice' ? 'bar' : 'floating'} />;
112
+ }
206
113
  ```
207
114
 
208
- Use `theme.colors.surfaceHover` before trying raw CSS.
209
-
210
- ### Change the banner card background
115
+ To remove the notice card's radius, add these values to the existing
116
+ `options.components.banner` slots. The root owns `data-prompt`, so the card
117
+ uses Tailwind's `group` selector to read it:
211
118
 
212
- ```tsx
213
- options={{
214
- theme: {
215
- colors: {
216
- surface: '#fffdf8',
217
- },
119
+ ```ts
120
+ const bannerSlots = {
121
+ root: { className: 'group' },
122
+ card: { className: 'group-data-[prompt=notice]:rounded-none' },
123
+ rightLink: {
124
+ className: 'underline-offset-4 data-[right=opt-out]:text-red-700',
218
125
  },
219
- }}
220
- ```
221
-
222
- Use `theme.colors.surface` before overriding banner CSS variables directly.
126
+ };
223
127
 
224
- ### Tweak the banner card, footer, or title styling without changing markup
225
-
226
- ```tsx
227
- options={{
228
- theme: {
229
- slots: {
230
- consentBannerCard: 'rounded-[28px] shadow-xl',
231
- consentBannerFooter: 'border-t border-black/10 px-6',
232
- consentBannerTitle: 'text-xl tracking-tight',
233
- },
234
- },
235
- }}
128
+ // In the existing options.components object:
129
+ // banner: bannerSlots
236
130
  ```
237
131
 
238
- ### Change stock consent action button styles semantically
132
+ The root also carries `data-variant`, so you can restyle one shape without
133
+ touching the others. Tailwind, giving a `bar` a brand-colored top edge and
134
+ tighter text:
239
135
 
240
136
  ```tsx
241
- options={{
242
- theme: {
243
- consentActions: {
244
- default: { mode: 'stroke' },
245
- accept: { variant: 'primary', mode: 'stroke' },
246
- customize: { variant: 'neutral', mode: 'ghost' },
247
- },
248
- },
249
- }}
137
+ <ConsentProvider
138
+ options={{
139
+ mode,
140
+ presentation: { prompt: { variant: 'bar' } },
141
+ components: {
142
+ banner: {
143
+ root: { className: 'group' },
144
+ card: {
145
+ className:
146
+ 'group-data-[variant=bar]:border-t-4 group-data-[variant=bar]:border-t-emerald-600',
147
+ },
148
+ },
149
+ description: {
150
+ banner: { className: 'group-data-[variant=bar]:text-xs' },
151
+ },
152
+ },
153
+ }}
154
+ />
250
155
  ```
251
156
 
252
- Use `theme.consentActions` when you want to change the stock banner/dialog button treatment without rewriting the component layout. Policy packs still control action arrangement and primary-action hints. The theme controls whether those actions render as `stroke`, `filled`, `ghost`, or `lighter`.
157
+ `data-variant` sits on the root, so child slots use Tailwind's `group`
158
+ prefix to read it.
253
159
 
254
- ### Change banner copy without replacing the component
160
+ StyleX, spreading the result of `stylex.props()` into a slot:
255
161
 
256
162
  ```tsx
257
- options={{
258
- i18n: {
259
- locale: 'en',
260
- messages: {
261
- en: {
262
- cookieBanner: {
263
- title: 'We value your privacy',
264
- description: 'We use cookies to improve the site and measure performance.',
265
- },
266
- common: {
267
- acceptAll: 'Accept all',
268
- rejectAll: 'Reject all',
269
- customize: 'Manage preferences',
270
- },
271
- },
272
- },
273
- },
274
- }}
163
+ import * as stylex from '@stylexjs/stylex';
164
+
165
+ const styles = stylex.create({
166
+ card: { borderRadius: 0, boxShadow: 'none' },
167
+ rightLink: { textUnderlineOffset: 4, color: 'rgb(185 28 28)' },
168
+ });
169
+
170
+ <ConsentProvider
171
+ options={{
172
+ mode,
173
+ components: {
174
+ banner: {
175
+ card: stylex.props(styles.card),
176
+ rightLink: stylex.props(styles.rightLink),
177
+ },
178
+ },
179
+ }}
180
+ />;
275
181
  ```
276
182
 
277
- ### Enable dark mode safely
278
-
279
- ```tsx
280
- options={{
281
- colorScheme: 'system',
282
- theme: {
283
- colors: { surface: '#ffffff', text: '#1f2937' },
284
- dark: { surface: '#111827', text: '#f9fafb' },
285
- },
286
- }}
287
- ```
288
-
289
- > ℹ️ **Info:**
290
- > If a token change does not show up where you expect, check how that component maps tokens to CSS variables before escalating. For example, the stock banner footer background comes from colors.surfaceHover, not a separate footer token.
291
- >
292
- > ⚠️ **Warning:**
293
- > Do not jump to CSS overrides or !important because a token did not appear to work at first glance.noStyle: true removes layout and visual defaults. Treat it as an advanced opt-out, not a normal theming step.Headless mode is for replacing markup and behavior, not for styling-only requests.Use either tokens/slots or raw CSS variable overrides intentionally to avoid conflicting style sources.For dark mode, c15t supports .dark and .c15t-dark.
294
-
295
- ## API Reference
296
-
297
- |Property|Value|
298
- |:--|:--|
299
- |Type Name|\`Theme\`|
300
- |Source Path|\`./packages/ui/src/theme/types.ts\`|
301
-
302
- \*ExtractedTypeTable: Could not extract "Theme" from "./packages/ui/src/theme/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
183
+ Set `noStyle` on a component to drop the built-in classes from every part and
184
+ keep only what your slots pass. Set `noStyle` in the provider options to do it
185
+ for every component.
186
+
187
+ Banner slot keys under `components.banner`:
188
+
189
+ | Key | Element |
190
+ | ------------- | ----------------------------------------------------------------------------------------------------------------- |
191
+ | `root` | Fixed-position wrapper carrying `data-prompt`, `data-model`, `data-variant`, `data-position`, and `data-blocking` |
192
+ | `cardShell` | Sizes the card and holds the branding tag |
193
+ | `card` | The visible card, carrying `data-state` |
194
+ | `header` | Title and description container |
195
+ | `title` | Heading |
196
+ | `footer` | Action area |
197
+ | `actions` | Group of action groups |
198
+ | `actionGroup` | One group of equally prominent actions |
199
+ | `rights` | Group of right links, rendered before the actions |
200
+ | `rightLink` | One right link, carrying `data-action="right"` and `data-right` |
201
+ | `overlay` | Backdrop shown when the banner blocks the page |
202
+
203
+ Action buttons carry `data-action` and `data-variant`, and right links carry
204
+ `data-action="right"`, so a single rule such as `[data-action='dismiss']` or
205
+ `[data-action='right']` styles one role across every surface. Right links are
206
+ underlined text by default, so the only button on a notice is the primary
207
+ action.
@@ -1,139 +1,67 @@
1
1
  ---
2
- title: Troubleshooting
3
- description: Solutions for common issues with @c15t/react — provider errors,
4
- missing banners, consent persistence, and more.
2
+ title: Troubleshoot React consent
3
+ description: Diagnose policy resolution, early scripts, storage and rendering problems.
5
4
  group: frameworks
6
5
  ---
7
- ## "Provider not found" Error
8
6
 
9
- **Symptom:** `useConsentManager must be used within a ConsentManagerProvider` error.
7
+ ## Why is there no banner?
10
8
 
11
- **Fix:** Ensure the component calling `useConsentManager()` (or any c15t hook) is rendered inside a `ConsentManagerProvider`:
9
+ Inspect `resolution` and `promptRequirement` before changing styles. Pending or
10
+ failed initialization, no matching rule, a valid stored choice and a rule that
11
+ requires no prompt can all produce no banner for different reasons. A missing
12
+ stylesheet can also make rendered controls appear incorrectly.
12
13
 
13
- ```tsx
14
- // Wrong — hook is outside the provider
15
- function App() {
16
- const { consents } = useConsentManager(); // throws
17
- return <ConsentManagerProvider options={...}>...</ConsentManagerProvider>;
18
- }
14
+ Check the backend URL and Network response, then confirm the active policy for
15
+ the visitor's location. Do not solve missing UI by granting every category or
16
+ setting `enabled: false`: disabling the runtime permits optional loading.
19
17
 
20
- // Correct — hook is inside the provider
21
- function App() {
22
- return (
23
- <ConsentManagerProvider options={...}>
24
- <MyComponent /> {/* useConsentManager works here */}
25
- </ConsentManagerProvider>
26
- );
27
- }
28
- ```
18
+ ## Why does the UI disappear with a content blocker?
29
19
 
30
- ## Banner Doesn't Show
20
+ Check the browser Network panel for `ERR_BLOCKED_BY_CLIENT` or a failed dynamic
21
+ import. Older c15t builds used component filenames such as
22
+ `consent-dialog-*.js`, which some cookie-annoyance lists block. Update the c15t
23
+ packages and rebuild the app. Current component modules use neutral filenames;
24
+ public component imports stay the same. This also covers Vite development
25
+ requests used by TanStack Start and other Vite integrations.
31
26
 
32
- **Possible causes:**
27
+ Extensions can separately hide elements with cosmetic filters or block a
28
+ configured backend URL. Check the failed request or hidden element to distinguish
29
+ those cases from a missing component module.
33
30
 
34
- 1. **Opt-out jurisdiction** — In CCPA/opt-out regions, the banner is not shown because tracking is allowed by default. Check `model` from `useConsentManager()` — if it's `'opt-out'`, the banner is intentionally hidden.
31
+ ## Why does analytics run before a choice?
35
32
 
36
- 2. **Consent already given** — If the user has already made a consent choice, the banner won't reappear. Clear cookies or use `resetConsents()` to test again.
33
+ Check effective permission under the selected policy, then find every loader
34
+ for that vendor. Remove unconditional script tags, framework analytics plugins
35
+ and duplicate tag-manager entries. c15t's script registration only controls the
36
+ scripts registered with it.
37
37
 
38
- 3. **`activeUI` is `'none'`** — Something is explicitly setting `activeUI` to `'none'`. Check the DevTools panel for the current consent state.
38
+ Google helpers intentionally load with Consent Mode defaults. A Google request
39
+ is not by itself proof that its storage consent was granted. If your requirement
40
+ is no request at all, do not use an always-loaded helper unchanged.
39
41
 
40
- 4. **Backend not responding** — In `'c15t'` mode, the banner waits for the backend `/init` response. Check the Network tab for failed requests to your `backendURL`.
42
+ ## Why does a choice disappear on reload?
41
43
 
42
- ```tsx
43
- // Debug: check what the consent manager sees
44
- const { activeUI, model, isLoadingConsentInfo } = useConsentManager();
45
- console.log({ activeUI, model, isLoadingConsentInfo });
46
- ```
44
+ Check whether persistence is disabled, browser storage is blocked, the origin
45
+ changed, or the receipt expired or no longer matches the current policy.
46
+ A development example with `persistence: false` deliberately resets on reload.
47
+ Do not "repair" persistence by saving permissions automatically on mount.
47
48
 
48
- ## Consent Not Persisting
49
+ ## Why does hydration differ from server HTML?
49
50
 
50
- **Symptom:** Consent is lost after page reload.
51
+ Use the adapter's request helper and pass the returned configuration unchanged
52
+ to its boundary. Check that server and browser use the same backend and policy
53
+ inputs. A module-level mutable runtime on a server can share one visitor's state
54
+ with another request; create request-owned state instead.
51
55
 
52
- **Possible causes:**
56
+ ## Why does static hosting fail when development works?
53
57
 
54
- 1. **Incognito/private mode** — Some browsers restrict cookie storage in private browsing.
58
+ A static host has no app server for init routes, proxies or server functions.
59
+ Use absolute external consent URLs or an explicitly local policy. Test the
60
+ production output with a static file server, not the framework dev server.
55
61
 
56
- 2. **Cookie settings** — In `'offline'` mode, consent is stored in cookies. Ensure cookies are not being blocked by browser settings or extensions.
62
+ ## Why does customization do nothing?
57
63
 
58
- 3. **Different domains** — Cookies are domain-scoped. If your dev server uses a different domain than production, consent won't carry over.
59
-
60
- 4. **Backend errors** — In `'c15t'` mode, check that the backend is saving consent successfully. Enable `debug: true` in provider options to see detailed logs.
61
-
62
- ## Scripts Not Loading
63
-
64
- **Symptom:** Third-party scripts configured in the `scripts` option don't load after consent is granted.
65
-
66
- **Checklist:**
67
-
68
- 1. **Wrong category name** — The `category` on the script must match one of the `consentCategories` names. For example, `'measurement'` not `'analytics'`.
69
-
70
- 2. **Consent condition not met** — Use `has('measurement')` to verify the category is actually consented.
71
-
72
- 3. **Script error** — Check the browser DevTools Console for script loading errors. The `onError` callback can help debug:
73
-
74
- ```tsx
75
- {
76
- id: 'analytics',
77
- src: 'https://...',
78
- category: 'measurement',
79
- onError: ({ error }) => console.error('Script failed:', error),
80
- }
81
- ```
82
-
83
- 4. **Ad blocker** — Browser extensions may block the script regardless of consent. The `anonymizeId` option (default: `true`) helps avoid pattern-based blocking.
84
-
85
- ## SSR Hydration Mismatch
86
-
87
- **Symptom:** React hydration warnings, consent banner flashes briefly, or consent state differs between server and client.
88
-
89
- **Fixes:**
90
-
91
- 1. **Missing `ssrData`** — Ensure you're passing the SSR data Promise to the provider:
92
-
93
- ```tsx
94
- <ConsentManagerProvider
95
- options={{
96
- mode: 'hosted',
97
- backendURL: '...',
98
- ssrData: fetchSSRData({ backendURL: '...', headers }),
99
- }}
100
- >
101
- ```
102
-
103
- 2. **Stale cache** — If using a CDN or caching layer, ensure the SSR data is fresh per-request and not shared across users.
104
-
105
- 3. **Debug with `useSSRStatus`** — Check if SSR data was actually consumed:
106
-
107
- ```tsx
108
- const { ssrDataUsed, ssrSkippedReason } = useSSRStatus();
109
- ```
110
-
111
- See [Server-Side Utilities](/docs/frameworks/react/server-side) for full SSR setup.
112
-
113
- ## TypeScript Errors
114
-
115
- **Common import issues:**
116
-
117
- ```tsx
118
- // Components and hooks — main entry point
119
- import { ConsentManagerProvider, useConsentManager } from '@c15t/react';
120
-
121
- // Server utilities — separate entry point
122
- import { fetchSSRData } from '@c15t/react/server';
123
-
124
- // Headless (hooks only, no components)
125
- import { useConsentManager } from '@c15t/react/headless';
126
- ```
127
-
128
- If you see type errors after updating, try:
129
-
130
- ```sh
131
- rm -rf node_modules/.cache
132
- bun install
133
- ```
134
-
135
- ## Still Stuck?
136
-
137
- * Enable `debug: true` in provider options for verbose console logging
138
- * Use the [DevTools](/docs/frameworks/react/components/dev-tools) panel to inspect live consent state
139
- * Check the [GitHub issues](https://github.com/c15t/c15t/issues) for known bugs
64
+ Check the imported stylesheet, the correct token or slot, and which element
65
+ carries the state attribute. `data-variant` on a banner root is not a matching
66
+ attribute on its child card. Check cascade layers and the Tailwind version
67
+ before adding specificity. See [customization](../../customization/overview.md).