@c15t/react 2.2.1 → 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,140 +0,0 @@
1
- ---
2
- title: Network Blocker
3
- description: Block outgoing network requests to third-party domains until the
4
- user grants consent for the appropriate category.
5
- group: frameworks
6
- ---
7
- The network blocker intercepts outgoing `fetch` and `XMLHttpRequest` calls and blocks them based on consent state and domain rules. This catches tracking requests that happen outside of script loading - for example, beacon calls, API requests to analytics endpoints, or pixel fires from already-loaded scripts.
8
-
9
- ## Configuration
10
-
11
- Add `networkBlocker` to your provider options:
12
-
13
- ```tsx
14
- import { type ReactNode } from 'react';
15
- import { ConsentManagerProvider } from '@c15t/react';
16
-
17
- export function ConsentManager({ children }: { children: ReactNode }) {
18
- return (
19
- <ConsentManagerProvider
20
- options={{
21
- mode: 'hosted',
22
- backendURL: 'https://your-instance.c15t.dev',
23
- networkBlocker: {
24
- rules: [
25
- {
26
- id: 'google-analytics',
27
- domain: 'google-analytics.com',
28
- category: 'measurement',
29
- },
30
- {
31
- id: 'facebook-pixel',
32
- domain: 'facebook.com',
33
- pathIncludes: '/tr',
34
- category: 'marketing',
35
- },
36
- {
37
- id: 'analytics-post',
38
- domain: 'analytics.example.com',
39
- methods: ['POST'],
40
- category: 'measurement',
41
- },
42
- ],
43
- },
44
- }}
45
- >
46
- {children}
47
- </ConsentManagerProvider>
48
- );
49
- }
50
- ```
51
-
52
- ## Rule Matching
53
-
54
- Rules match requests using three criteria:
55
-
56
- ### Domain matching
57
-
58
- The `domain` field matches the request hostname. Subdomains are automatically included - a rule for `google-analytics.com` also matches `www.google-analytics.com` and `stats.google-analytics.com`.
59
-
60
- ### Path matching
61
-
62
- The optional `pathIncludes` field requires the request URL path to contain the specified substring. This lets you target specific endpoints without blocking the entire domain.
63
-
64
- ### Method matching
65
-
66
- The optional `methods` array restricts the rule to specific HTTP methods. If omitted, the rule applies to all methods.
67
-
68
- ## Consent Conditions
69
-
70
- Like the script loader, `category` accepts a `HasCondition`:
71
-
72
- ```tsx
73
- // Simple
74
- { category: 'measurement' }
75
-
76
- // Must have both
77
- { category: { and: ['measurement', 'marketing'] } }
78
-
79
- // Must have either
80
- { category: { or: ['measurement', 'marketing'] } }
81
- ```
82
-
83
- ## Monitoring Blocked Requests
84
-
85
- ### Console logging
86
-
87
- Blocked requests are logged to the console by default. Disable with `logBlockedRequests: false`.
88
-
89
- ### Callback
90
-
91
- Use `onRequestBlocked` to handle blocked requests programmatically:
92
-
93
- ```tsx
94
- networkBlocker: {
95
- rules: [...],
96
- onRequestBlocked: ({ method, url, rule }) => {
97
- console.log(`Blocked ${method} ${url} (rule: ${rule?.id})`);
98
- },
99
- }
100
- ```
101
-
102
- ## Runtime Updates
103
-
104
- Update the network blocker configuration at runtime:
105
-
106
- ```tsx
107
- import { useConsentManager } from '@c15t/react';
108
-
109
- function NetworkBlockerManager() {
110
- const { setNetworkBlocker } = useConsentManager();
111
-
112
- const addRule = () => {
113
- setNetworkBlocker({
114
- rules: [
115
- {
116
- id: 'new-tracker',
117
- domain: 'tracker.example.com',
118
- category: 'marketing',
119
- },
120
- ],
121
- });
122
- };
123
- }
124
- ```
125
-
126
- ## API Reference
127
-
128
- |Property|Value|
129
- |:--|:--|
130
- |Type Name|\`NetworkBlockerRule\`|
131
- |Source Path|\`./packages/core/src/libs/network-blocker/types.ts\`|
132
-
133
- \*ExtractedTypeTable: Could not extract "NetworkBlockerRule" from "./packages/core/src/libs/network-blocker/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
134
-
135
- |Property|Value|
136
- |:--|:--|
137
- |Type Name|\`NetworkBlockerConfig\`|
138
- |Source Path|\`./packages/core/src/libs/network-blocker/types.ts\`|
139
-
140
- \*ExtractedTypeTable: Could not extract "NetworkBlockerConfig" from "./packages/core/src/libs/network-blocker/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,148 +0,0 @@
1
- ---
2
- title: Optimization
3
- description: Improve c15t startup performance in React with prefetching, proxy
4
- rewrites, and rendering tradeoffs.
5
- group: frameworks
6
- ---
7
- Use this guide when you care about banner visibility speed, route static-ness, and reducing backend round-trip cost.
8
-
9
- ## Start Here
10
-
11
- Apply the optimizations in this order:
12
-
13
- |Situation|Use|Why|Tradeoff|
14
- |--|--|--|--|
15
- |Any production app using hosted mode|Same-origin `/api/c15t` proxy|Lowers browser startup overhead and keeps the backend origin out of client config|Requires framework or platform proxy setup|
16
- |Banner speed matters on cold loads|`buildPrefetchScript()`|Starts `/init` before your app hydrates|Still a browser-side fetch, not SSR|
17
- |Your app navigates client-side|Keep the provider mounted at the app root|Avoids remounting and re-running init work|Requires provider placement discipline|
18
- |You cannot proxy and must stay cross-origin|`<link rel="preconnect">`|Starts DNS/TLS work earlier|Smaller gain than same-origin proxying|
19
- |You are using Next.js and want SSR or static-route-specific guidance|Next.js optimization docs|Covers `C15tPrefetch`, `fetchInitialData()`, and rendering tradeoffs|Next-specific|
20
-
21
- > ℹ️ **Info:**
22
- > Treat same-origin proxying as the baseline optimization. The others are situational layers you add when startup timing or route behavior justifies them.
23
-
24
- ## 1) Prefer Same-Origin Proxy
25
-
26
- Proxy c15t requests through your app server so the browser calls your own origin instead of a third-party domain.
27
-
28
- How you configure this depends on your framework — Vite has `server.proxy`, Remix has resource routes, and most deployment platforms support rewrite rules.
29
-
30
- Then use:
31
-
32
- ```tsx
33
- <ConsentManagerProvider options={{ backendURL: '/api/c15t', mode: 'hosted' }}>
34
- ```
35
-
36
- Why this helps:
37
-
38
- * Same-origin requests avoid extra DNS/TLS setup in many deployments
39
- * Ad blockers are less likely to block your init endpoint
40
- * You can change backend infrastructure without touching client code
41
-
42
- If you can only do one optimization, do this one first.
43
-
44
- ## 2) Prefetch Init Data Early
45
-
46
- Use `buildPrefetchScript()` from the `c15t` core package to start the `/init` request before your app hydrates. Inject the script as early as possible in your HTML `<head>`.
47
-
48
- In production benchmarks with a same-origin rewrite, prefetching strategies show measurable improvement over client-only init:
49
-
50
- |Strategy|Scripts loaded|Data request starts|Banner visible|
51
- |--|--|--|--|
52
- |Client-only (no prefetch)|baseline|baseline|baseline|
53
- |Browser prefetch|\~1.3x faster|\~2.6x earlier|\~1.25x faster|
54
- |Server prefetch|\~2x faster|before page loads|\~1.9x faster|
55
-
56
- Use this when:
57
-
58
- * The app is client-rendered
59
- * You want a faster first banner without introducing SSR complexity
60
- * You control the HTML template or document `<head>`
61
-
62
- ### Inline Script Prefetch
63
-
64
- ```tsx
65
- import { buildPrefetchScript } from 'c15t';
66
-
67
- const prefetchScript = buildPrefetchScript({
68
- backendURL: '/api/c15t',
69
- });
70
-
71
- // In your HTML template or root component:
72
- <head>
73
- <script dangerouslySetInnerHTML={{ __html: prefetchScript }} />
74
- </head>
75
- ```
76
-
77
- Then initialize your provider normally. Matching prefetched data is consumed automatically by the runtime during first store initialization:
78
-
79
- ```tsx
80
- import {
81
- ConsentManagerProvider,
82
- ConsentBanner,
83
- ConsentDialog,
84
- } from '@c15t/react';
85
-
86
- export default function App({ children }: { children: React.ReactNode }) {
87
- return (
88
- <ConsentManagerProvider
89
- options={{
90
- mode: 'hosted',
91
- backendURL: '/api/c15t',
92
- }}
93
- >
94
- <ConsentBanner />
95
- <ConsentDialog />
96
- {children}
97
- </ConsentManagerProvider>
98
- );
99
- }
100
- ```
101
-
102
- > ℹ️ **Info:**
103
- > If overrides.gpc conflicts with the browser's ambient GPC signal, the prefetched entry is not reused and c15t falls back to a normal client /init.
104
-
105
- ## Keep The Provider Mounted Across Navigation
106
-
107
- Mount the consent provider at the app root so route transitions do not remount it.
108
-
109
- Why this helps:
110
-
111
- * Avoids re-running init work on client-side navigation
112
- * Prevents extra callback churn from remount cycles
113
- * Keeps banner/dialog state stable between route transitions
114
-
115
- Mount `ConsentManagerProvider` as high in the tree as possible so route transitions do not recreate it.
116
-
117
- ## Animation Performance
118
-
119
- The default motion tokens are tuned for speed-first product UI:
120
-
121
- |Token|Duration|Used for|
122
- |--|--|--|
123
- |`fast`|80ms|Banner slide + overlay, card scale, button hover, widget entry/exit|
124
- |`normal`|150ms|Accordion, switch toggle|
125
- |`slow`|200ms|Dialog trigger snap, tab indicator|
126
-
127
- These defaults follow the principle that product UI should be fast and purposeful — animations exist for spatial continuity, not decoration. In benchmarks, animation duration contributes a constant floor to "data fetched → banner visible" timing. The default tokens sit at the lower end of standard UI ranges (80-200ms) to minimize that floor.
128
-
129
- To customize motion durations and easing, see [Styling](/docs/frameworks/react/styling/overview).
130
-
131
- ## Reduce Network Overhead
132
-
133
- If your browser must call a cross-origin backend URL directly, add `preconnect` so the browser can warm up the connection earlier. This is a fallback optimization when same-origin proxying is not possible.
134
-
135
- If you must use a cross-origin backend URL, add preconnect so the browser starts DNS/TLS early:
136
-
137
- ```tsx
138
- <head>
139
- <link rel="preconnect" href="https://your-instance.c15t.dev" crossOrigin="" />
140
- </head>
141
- ```
142
-
143
- ## Next.js-Specific SSR And Static Routes
144
-
145
- This page is intentionally React-generic. If you are using Next.js and need SSR or static-route-specific guidance:
146
-
147
- * See [Next.js Optimization](/docs/frameworks/next/optimization) for the static-vs-dynamic decision guide
148
- * See [Next.js Server-Side Data Fetching](/docs/frameworks/next/server-side) for `fetchInitialData()`
@@ -1,242 +0,0 @@
1
- ---
2
- title: Policy Packs
3
- description: Configure regional consent policies in React — hosted mode,
4
- presets, and offline fallback.
5
- group: frameworks
6
- ---
7
- Policy packs configure how c15t handles regional consent — which model (opt-in, opt-out, none), which categories, and what UI to show. The backend resolves the right policy automatically based on the visitor's location.
8
-
9
- **For most apps, you just need a `ConsentManagerProvider` pointing at your backend with presets configured there.** The frontend receives the resolved policy via the `/init` response — no client-side policy config required.
10
-
11
- When a backend isn't available — local development, static previews, Storybook, automated tests, or as a resilience fallback during a temporary outage — you can pass policies directly to the provider via `offlinePolicy.policyPacks` and c15t resolves them locally.
12
-
13
- > ℹ️ **Info:**
14
- > For QA and testing, use the c15t DevTools to simulate different regions and policy responses against your real backend, rather than switching to offline mode.
15
-
16
- ## Hosted Mode (Recommended)
17
-
18
- When using inth.com or a self-hosted backend, the provider connects automatically. No policy configuration is needed on the frontend:
19
-
20
- ```tsx
21
- <ConsentManagerProvider
22
- options={{
23
- backendURL: 'https://your-instance.c15t.dev',
24
- }}
25
- >
26
- <ConsentBanner />
27
- <ConsentDialog />
28
- {children}
29
- </ConsentManagerProvider>
30
- ```
31
-
32
- The backend resolves the correct policy based on the visitor's geo data and returns it in the `/init` response. Configure your presets on the backend side.
33
-
34
- ## Offline Presets (Development and Fallback)
35
-
36
- Use offline presets mainly for local development, Storybook, deterministic tests, or temporary backend outages:
37
-
38
- ```tsx
39
- import { policyPackPresets } from '@c15t/react';
40
-
41
- offlinePolicy: {
42
- i18n: {
43
- defaultProfile: 'default',
44
- messages: {
45
- default: {
46
- translations: {
47
- en: { cookieBanner: { title: 'Privacy choices' } },
48
- },
49
- },
50
- eu: {
51
- fallbackLanguage: 'en',
52
- translations: {
53
- en: { cookieBanner: { title: 'EU GDPR Consent' } },
54
- fr: { cookieBanner: { title: 'Consentement RGPD' } },
55
- de: { cookieBanner: { title: 'GDPR-Einwilligung' } },
56
- },
57
- },
58
- },
59
- },
60
- policyPacks: [
61
- {
62
- ...policyPackPresets.europeOptIn(),
63
- i18n: { messageProfile: 'eu' },
64
- },
65
- policyPackPresets.californiaOptOut(),
66
- policyPackPresets.worldNoBanner(),
67
- ],
68
- }
69
- ```
70
-
71
- Available presets:
72
-
73
- |Preset|Model|Matches|
74
- |--|--|--|
75
- |`europeOptIn()`|`opt-in`|EEA + UK countries + geo fallback|
76
- |`europeIab()`|`iab`|EEA + UK countries + geo fallback (TCF 2.3)|
77
- |`californiaOptOut()`|`opt-out`|US-CA region|
78
- |`quebecOptIn()`|`opt-in`|CA-QC region|
79
- |`worldNoBanner()`|`none`|default fallback|
80
-
81
- ## React Example (Hosted)
82
-
83
- Point the provider at your backend — policy resolution happens server-side:
84
-
85
- ```tsx
86
- import type { ReactNode } from 'react';
87
- import {
88
- ConsentBanner,
89
- ConsentDialog,
90
- ConsentManagerProvider,
91
- } from '@c15t/react';
92
-
93
- export function ConsentManager({ children }: { children: ReactNode }) {
94
- return (
95
- <ConsentManagerProvider
96
- options={{
97
- backendURL: 'https://your-instance.c15t.dev',
98
- }}
99
- >
100
- <ConsentBanner />
101
- <ConsentDialog />
102
- {children}
103
- </ConsentManagerProvider>
104
- );
105
- }
106
- ```
107
-
108
- ## Offline / Fallback
109
-
110
- For local development, previews, automated tests, or when the backend is temporarily unreachable, pass policies directly:
111
-
112
- ```tsx
113
- import type { ReactNode } from 'react';
114
- import {
115
- ConsentBanner,
116
- ConsentDialog,
117
- ConsentManagerProvider,
118
- policyPackPresets,
119
- } from '@c15t/react';
120
-
121
- export function ConsentManager({ children }: { children: ReactNode }) {
122
- return (
123
- <ConsentManagerProvider
124
- options={{
125
- mode: 'offline',
126
- offlinePolicy: {
127
- policyPacks: [
128
- policyPackPresets.europeOptIn(),
129
- policyPackPresets.californiaOptOut(),
130
- policyPackPresets.worldNoBanner(),
131
- ],
132
- },
133
- overrides: {
134
- country: 'DE', // Preview as a German visitor
135
- },
136
- }}
137
- >
138
- <ConsentBanner />
139
- <ConsentDialog />
140
- {children}
141
- </ConsentManagerProvider>
142
- );
143
- }
144
- ```
145
-
146
- ## Provider Shape
147
-
148
- Configure packs through `offlinePolicy.policyPacks`. Add `offlinePolicy.i18n`
149
- when you want local previews or fallback behavior to mirror hosted policy-profile language behavior:
150
-
151
- ```tsx
152
- <ConsentManagerProvider
153
- options={{
154
- mode: 'offline',
155
- offlinePolicy: {
156
- i18n: {
157
- defaultProfile: 'default',
158
- messages: {
159
- default: {
160
- translations: {
161
- en: { cookieBanner: { title: 'Privacy choices' } },
162
- },
163
- },
164
- qc: {
165
- fallbackLanguage: 'fr',
166
- translations: {
167
- en: { cookieBanner: { title: 'Quebec Privacy Settings' } },
168
- fr: { cookieBanner: { title: 'Paramètres de confidentialité du Québec' } },
169
- },
170
- },
171
- },
172
- },
173
- policyPacks: [
174
- {
175
- id: 'qc_opt_in',
176
- match: { regions: [{ country: 'CA', region: 'QC' }] },
177
- i18n: { messageProfile: 'qc' },
178
- consent: { model: 'opt-in', expiryDays: 365 },
179
- ui: { mode: 'banner' },
180
- },
181
- {
182
- id: 'default',
183
- match: { isDefault: true },
184
- consent: { model: 'none' },
185
- ui: { mode: 'none' },
186
- },
187
- ],
188
- },
189
- overrides: { country: 'CA', region: 'QC' },
190
- }}
191
- >
192
- ```
193
-
194
- With that setup, offline mode resolves language the same way as hosted mode:
195
-
196
- * the active policy profile defines the allowed language set
197
- * each profile can define its own `fallbackLanguage`
198
- * built-in translations only fill missing keys for the selected language
199
-
200
- ## Fallback Behavior
201
-
202
- |Configuration|Result|
203
- |--|--|
204
- |`offlinePolicy.policyPacks` omitted|Synthetic opt-in fallback banner (also used for hosted network fallback)|
205
- |`offlinePolicy: { policyPacks: [] }`|Explicit no-banner mode|
206
- |Non-empty pack, no match, no default|Explicit no-banner mode|
207
-
208
- Omitting the option gives you a safe opt-in default for local development and outage scenarios. Providing it tells c15t you want deterministic preview or fallback behavior exactly as configured.
209
-
210
- ## QA and Debugging
211
-
212
- The best way to test regional consent behavior is with the [c15t DevTools](/docs/frameworks/react/dev-tools). The DevTools Policy panel lets you simulate different countries, regions, and GPC signals against your real backend — no code changes needed.
213
-
214
- For deeper inspection:
215
-
216
- * Read `policy` and `policyDecision` from `useConsentManager()` to see the resolved config
217
- * Open the DevTools Policy panel to inspect matcher resolution and fingerprints
218
- * Compare your frontend preview with the backend `/init` response before shipping
219
-
220
- If you need fully deterministic resolution without a backend during testing or preview work (for example, in automated tests or Storybook), pair `offlinePolicy.policyPacks` with `overrides`:
221
-
222
- ```tsx
223
- options={{
224
- mode: 'offline',
225
- offlinePolicy: {
226
- policyPacks: [
227
- policyPackPresets.europeOptIn(),
228
- policyPackPresets.californiaOptOut(),
229
- policyPackPresets.worldNoBanner(),
230
- ],
231
- },
232
- overrides: {
233
- country: 'US',
234
- region: 'CA',
235
- language: 'en-US',
236
- gpc: true, // Simulate Global Privacy Control
237
- },
238
- }}
239
- ```
240
-
241
- > ℹ️ **Info:**
242
- > For the full concept model (matchers, scope modes, re-prompting), see Policy Packs concepts. For backend setup, see the self-host guide.
@@ -1,158 +0,0 @@
1
- ---
2
- title: Server-Side Utilities
3
- description: Fetch consent data on the server for SSR hydration — eliminate the
4
- loading flash and improve performance.
5
- group: frameworks
6
- ---
7
- The `@c15t/react/server` module provides utilities for fetching consent data on the server before rendering. This enables SSR hydration — consent state is available immediately on page load without a client-side fetch, eliminating the consent banner flash.
8
-
9
- > ℹ️ **Info:**
10
- > SSR hydration is part of the initialization flow. When SSR data is available, the client skips the API fetch entirely.
11
-
12
- ```ts
13
- import {
14
- fetchSSRData,
15
- extractRelevantHeaders,
16
- normalizeBackendURL,
17
- validateBackendURL,
18
- } from '@c15t/react/server';
19
- ```
20
-
21
- > ℹ️ **Info:**
22
- > If you're using Next.js, the @c15t/nextjs package wraps these utilities with automatic header resolution. See the Next.js docs for framework-specific usage.
23
-
24
- ## fetchSSRData
25
-
26
- The primary function for fetching consent data on the server. It calls the c15t backend's `/init` endpoint with the user's request headers and returns the initial consent data.
27
-
28
- ```ts
29
- import { fetchSSRData } from '@c15t/react/server';
30
-
31
- // In your server handler / page loader
32
- const ssrData = await fetchSSRData({
33
- backendURL: 'https://your-instance.c15t.dev',
34
- headers: request.headers,
35
- debug: true,
36
- });
37
- ```
38
-
39
- ### Options
40
-
41
- |Property|Value|
42
- |:--|:--|
43
- |Type Name|\`FetchSSRDataOptions\`|
44
- |Source Path|\`./packages/react/src/server/types.ts\`|
45
-
46
- \*ExtractedTypeTable: Could not extract "FetchSSRDataOptions" from "./packages/react/src/server/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
47
-
48
- ### Return Value
49
-
50
- Returns `SSRInitialData | undefined`. The data includes the init response (jurisdiction, translations, consent model) and GVL data when IAB is configured.
51
-
52
- ### Passing SSR Data to the Provider
53
-
54
- Pass the result as a Promise to the provider's `ssrData` option:
55
-
56
- ```tsx
57
- import { type ReactNode } from 'react';
58
- import { ConsentManagerProvider, ConsentBanner, ConsentDialog } from '@c15t/react';
59
- import { fetchSSRData } from '@c15t/react/server';
60
-
61
- // Server component or page loader
62
- async function getSSRData(headers: Headers) {
63
- return fetchSSRData({
64
- backendURL: 'https://your-instance.c15t.dev',
65
- headers,
66
- });
67
- }
68
-
69
- export default function ConsentManager({
70
- children,
71
- ssrData,
72
- }: {
73
- children: ReactNode;
74
- ssrData: Promise<any>;
75
- }) {
76
- return (
77
- <ConsentManagerProvider
78
- options={{
79
- mode: 'hosted',
80
- backendURL: 'https://your-instance.c15t.dev',
81
- ssrData,
82
- }}
83
- >
84
- <ConsentBanner />
85
- <ConsentDialog />
86
- {children}
87
- </ConsentManagerProvider>
88
- );
89
- }
90
- ```
91
-
92
- ## extractRelevantHeaders
93
-
94
- Extracts geo-location and forwarding headers from the incoming request. Supports headers from Cloudflare, Vercel, AWS CloudFront, and generic proxies.
95
-
96
- ```ts
97
- import { extractRelevantHeaders } from '@c15t/react/server';
98
-
99
- const relevant = extractRelevantHeaders(request.headers);
100
- // Returns: { 'cf-ipcountry': 'DE', 'accept-language': 'de-DE', ... }
101
- ```
102
-
103
- ### Recognized Headers
104
-
105
- |Header|Source|Contains|
106
- |--|--|--|
107
- |`cf-ipcountry`|Cloudflare|Country code|
108
- |`x-vercel-ip-country`|Vercel|Country code|
109
- |`x-amz-cf-ipcountry`|AWS CloudFront|Country code|
110
- |`x-vercel-ip-country-region`|Vercel|Region code|
111
- |`accept-language`|Browser|Language preference|
112
- |`x-forwarded-host`|Proxy|Original host|
113
- |`x-forwarded-for`|Proxy|Client IP|
114
-
115
- ## normalizeBackendURL
116
-
117
- Resolves a backend URL to an absolute URL. Absolute URLs are returned as-is. Relative URLs (starting with `/`) are resolved using the request's `Host` or `Referer` headers.
118
-
119
- ```ts
120
- import { normalizeBackendURL } from '@c15t/react/server';
121
-
122
- // Absolute — returned as-is
123
- normalizeBackendURL('https://api.example.com/', headers);
124
- // → 'https://api.example.com'
125
-
126
- // Relative — resolved from headers
127
- normalizeBackendURL('/api/consent', headers);
128
- // → 'https://example.com/api/consent'
129
- ```
130
-
131
- ## validateBackendURL
132
-
133
- Validates and normalizes a URL without resolving relative paths. Useful for configuration validation.
134
-
135
- ```ts
136
- import { validateBackendURL } from '@c15t/react/server';
137
-
138
- validateBackendURL('https://api.example.com/');
139
- // → { isAbsolute: true, normalizedURL: 'https://api.example.com' }
140
-
141
- validateBackendURL('/api/consent/');
142
- // → { isAbsolute: false, normalizedURL: '/api/consent' }
143
- ```
144
-
145
- ## Debugging SSR
146
-
147
- Use the [useSSRStatus](/docs/frameworks/react/hooks/use-ssr-status) hook on the client to verify SSR data was consumed:
148
-
149
- ```tsx
150
- import { useSSRStatus } from '@c15t/react';
151
-
152
- function DebugSSR() {
153
- const { ssrDataUsed, ssrSkippedReason } = useSSRStatus();
154
-
155
- if (ssrDataUsed) return <span>SSR hydration successful</span>;
156
- return <span>SSR skipped: {ssrSkippedReason ?? 'unknown'}</span>;
157
- }
158
- ```