@c15t/react 3.0.0-alpha.1 → 3.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/AGENTS.md +96 -70
  2. package/README.md +21 -17
  3. package/SKILL.md +34 -0
  4. package/dist/aggregate-components.js +1 -1
  5. package/dist/chunk-warming.js +1 -1
  6. package/dist/component-hooks/use-headless-consent-ui.js +1 -1
  7. package/dist/component-hooks/use-headless-iab-consent-ui.js +1 -1
  8. package/dist/component-hooks/use-panel-trigger.js +1 -1
  9. package/dist/components/consent-gate/atoms.js +1 -0
  10. package/dist/components/consent-gate/consent-gate.js +2 -0
  11. package/dist/components/consent-gate/frame.js +2 -0
  12. package/dist/components/consent-gate/index.js +2 -0
  13. package/dist/components/consent-preferences-link/consent-preferences-link.js +1 -1
  14. package/dist/components/iab-panel/atoms/card.js +1 -1
  15. package/dist/components/iab-panel/atoms/feature-item.js +2 -0
  16. package/dist/components/iab-panel/atoms/header.js +1 -1
  17. package/dist/components/iab-panel/atoms/purpose-item.js +1 -1
  18. package/dist/components/iab-panel/atoms/root.js +1 -1
  19. package/dist/components/iab-panel/atoms/stack-item.js +1 -1
  20. package/dist/components/iab-panel/atoms/vendor-list.js +1 -1
  21. package/dist/components/iab-panel/hooks/use-gvl-data.js +1 -1
  22. package/dist/components/iab-panel/iab-panel.js +1 -1
  23. package/dist/components/iab-panel/index.js +1 -1
  24. package/dist/components/iab-prompt/atoms/overlay.js +1 -1
  25. package/dist/components/iab-prompt/atoms/root.js +1 -1
  26. package/dist/components/panel/atoms/card.js +1 -1
  27. package/dist/components/panel/atoms/overlay.js +1 -1
  28. package/dist/components/panel/atoms/root.js +1 -1
  29. package/dist/components/panel/panel.js +1 -1
  30. package/dist/components/panel-trigger/atoms/button.js +1 -1
  31. package/dist/components/panel-trigger/atoms/icon.js +1 -1
  32. package/dist/components/panel-trigger/atoms/root.js +1 -1
  33. package/dist/components/panel-trigger/atoms/toolbar.js +1 -1
  34. package/dist/components/panel-trigger/atoms/trigger-icons.js +1 -0
  35. package/dist/components/panel-trigger/panel-trigger-toolbar.js +1 -1
  36. package/dist/components/panel-trigger/panel-trigger.js +1 -1
  37. package/dist/components/preferences/atoms/accordion.js +1 -1
  38. package/dist/components/preferences/atoms/root.js +1 -1
  39. package/dist/components/preferences/atoms/vendor-list.js +1 -0
  40. package/dist/components/preferences/index.js +1 -1
  41. package/dist/components/prompt/atoms/early-tap-script.js +2 -0
  42. package/dist/components/prompt/atoms/overlay.js +1 -1
  43. package/dist/components/prompt/atoms/root.js +1 -1
  44. package/dist/components/prompt/components.js +1 -1
  45. package/dist/components/prompt/policy-actions.js +1 -1
  46. package/dist/components/prompt/prompt.js +1 -1
  47. package/dist/components/shared/dialog-sheets.js +1 -0
  48. package/dist/components/shared/first-paint-sheets.js +1 -0
  49. package/dist/components/shared/iab-dialog-sheets.js +1 -0
  50. package/dist/components/shared/iab-first-paint-sheets.js +1 -0
  51. package/dist/components/shared/libs/compose-refs.js +1 -0
  52. package/dist/components/shared/libs/slot.js +1 -1
  53. package/dist/components/shared/primitives/button.js +1 -1
  54. package/dist/components/shared/primitives/legal-links/index.js +1 -1
  55. package/dist/components/shared/streamed-surface.js +2 -0
  56. package/dist/components/shared/surface-styles.js +2 -0
  57. package/dist/components/shared/ui/dialog/dialog.js +1 -1
  58. package/dist/components/shared/ui/icon.js +1 -1
  59. package/dist/components/shared/ui/logo.js +1 -1
  60. package/dist/components/shared/ui/preference-item/preference-item.js +1 -1
  61. package/dist/consent-gate.js +2 -0
  62. package/dist/consent-theme.js +1 -0
  63. package/dist/context/consent-tracking-context.js +1 -1
  64. package/dist/context/index.js +1 -1
  65. package/dist/context.js +1 -1
  66. package/dist/devtools-launcher.js +2 -0
  67. package/dist/devtools.js +1 -1
  68. package/dist/draft-context.js +2 -0
  69. package/dist/draft.js +1 -1
  70. package/dist/external-iab-context.js +1 -1
  71. package/dist/gpp.js +2 -0
  72. package/dist/headless.js +1 -1
  73. package/dist/hooks/use-color-scheme.js +1 -1
  74. package/dist/hooks/use-committed-ref.js +2 -0
  75. package/dist/hooks/use-focus-trap.js +1 -1
  76. package/dist/hooks/use-headless-iab-consent-ui.js +1 -1
  77. package/dist/hooks/use-iab-policy-guard.js +1 -0
  78. package/dist/hooks/use-late-entry.js +2 -0
  79. package/dist/hooks.js +1 -1
  80. package/dist/iab/styles.tw3.css +5 -45
  81. package/dist/iab-context.js +1 -1
  82. package/dist/index-parts/consent-banner.js +1 -0
  83. package/dist/index-parts/consent-dialog-link.js +1 -0
  84. package/dist/index-parts/consent-dialog-trigger.js +1 -0
  85. package/dist/index-parts/consent-dialog.js +1 -0
  86. package/dist/index-parts/consent-gate.js +1 -0
  87. package/dist/index-parts/core.js +1 -0
  88. package/dist/index-parts/draft.js +1 -0
  89. package/dist/index-parts/frame.js +1 -0
  90. package/dist/index-parts/hooks.js +1 -0
  91. package/dist/index-parts/hosted.js +1 -0
  92. package/dist/index-parts/module-hooks.js +1 -0
  93. package/dist/index-parts/offline.js +1 -0
  94. package/dist/index-parts/presets.js +1 -0
  95. package/dist/index-parts/provider.js +1 -0
  96. package/dist/index-parts/theme.js +1 -0
  97. package/dist/index-parts/translations.js +1 -0
  98. package/dist/index.js +1 -1
  99. package/dist/kernel-selector.js +1 -0
  100. package/dist/modes.js +1 -0
  101. package/dist/module-hooks/iframe-blocker.js +1 -1
  102. package/dist/module-hooks/network-blocker.js +1 -1
  103. package/dist/module-hooks/network-hold.js +2 -0
  104. package/dist/module-hooks/persistence.js +1 -1
  105. package/dist/panel-link.js +1 -1
  106. package/dist/panel-trigger.js +1 -1
  107. package/dist/panel.js +1 -1
  108. package/dist/postcss-tailwind3.js +1 -0
  109. package/dist/preferences.js +1 -2
  110. package/dist/provider.js +1 -1
  111. package/dist/server/fetch-ssr-data.js +1 -1
  112. package/dist/server/headers.js +1 -1
  113. package/dist/server/normalize-url.js +1 -1
  114. package/dist/styles.tw3.css +33 -51
  115. package/dist/transports/hosted.js +1 -0
  116. package/dist/transports/manifest.js +1 -0
  117. package/dist/transports/offline.js +1 -1
  118. package/dist/utils/deferred-module.js +2 -0
  119. package/dist/utils/merge-slot-props.js +1 -1
  120. package/dist/utils/theme-utils.js +1 -1
  121. package/dist/version.js +1 -1
  122. package/dist-types/aggregate-components.d.ts +2 -2
  123. package/dist-types/chunk-warming.d.ts +45 -8
  124. package/dist-types/component-hooks/use-headless-consent-ui.d.ts +5 -5
  125. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +2 -2
  126. package/dist-types/components/consent-gate/atoms.d.ts +11 -0
  127. package/dist-types/components/consent-gate/consent-gate.d.ts +2 -0
  128. package/dist-types/components/consent-gate/frame.d.ts +19 -0
  129. package/dist-types/components/consent-gate/index.d.ts +25 -0
  130. package/dist-types/components/{frame → consent-gate}/types.d.ts +7 -7
  131. package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
  132. package/dist-types/components/consent-preferences-link/index.d.ts +1 -1
  133. package/dist-types/components/iab-panel/atoms/feature-item.d.ts +28 -0
  134. package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +5 -2
  135. package/dist-types/components/iab-panel/atoms/stack-item.d.ts +7 -2
  136. package/dist-types/components/iab-panel/atoms/vendor-list.d.ts +1 -1
  137. package/dist-types/components/iab-panel/iab-panel.d.ts +3 -3
  138. package/dist-types/components/iab-panel/index.d.ts +29 -26
  139. package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
  140. package/dist-types/components/iab-prompt/iab-prompt.d.ts +3 -3
  141. package/dist-types/components/iab-prompt/index.d.ts +19 -19
  142. package/dist-types/components/panel/atoms/card.d.ts +5 -4
  143. package/dist-types/components/panel/atoms/overlay.d.ts +1 -1
  144. package/dist-types/components/panel/index.d.ts +8 -8
  145. package/dist-types/components/panel/panel.d.ts +3 -3
  146. package/dist-types/components/panel-link/index.d.ts +1 -1
  147. package/dist-types/components/panel-trigger/atoms/button.d.ts +1 -1
  148. package/dist-types/components/panel-trigger/atoms/icon.d.ts +1 -1
  149. package/dist-types/components/panel-trigger/atoms/root.d.ts +2 -2
  150. package/dist-types/components/panel-trigger/atoms/toolbar.d.ts +2 -2
  151. package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +25 -0
  152. package/dist-types/components/panel-trigger/index.d.ts +4 -4
  153. package/dist-types/components/panel-trigger/panel-trigger-toolbar.d.ts +1 -1
  154. package/dist-types/components/panel-trigger/panel-trigger.d.ts +9 -17
  155. package/dist-types/components/panel-trigger/types.d.ts +1 -1
  156. package/dist-types/components/preferences/atoms/accordion.d.ts +6 -4
  157. package/dist-types/components/preferences/atoms/button.d.ts +1 -1
  158. package/dist-types/components/preferences/atoms/footer.d.ts +1 -1
  159. package/dist-types/components/preferences/atoms/root.d.ts +1 -1
  160. package/dist-types/components/preferences/atoms/vendor-list.d.ts +23 -0
  161. package/dist-types/components/preferences/index.d.ts +14 -12
  162. package/dist-types/components/preferences/policy-actions.d.ts +2 -2
  163. package/dist-types/components/preferences/preferences.d.ts +1 -1
  164. package/dist-types/components/preferences/types.d.ts +1 -1
  165. package/dist-types/components/prompt/atoms/early-tap-script.d.ts +17 -0
  166. package/dist-types/components/prompt/atoms/root.d.ts +4 -0
  167. package/dist-types/components/prompt/components.d.ts +9 -3
  168. package/dist-types/components/prompt/index.d.ts +12 -12
  169. package/dist-types/components/prompt/policy-actions.d.ts +2 -2
  170. package/dist-types/components/prompt/prompt.d.ts +5 -1
  171. package/dist-types/components/shared/dialog-sheets.d.ts +9 -0
  172. package/dist-types/components/shared/first-paint-sheets.d.ts +8 -0
  173. package/dist-types/components/shared/iab-dialog-sheets.d.ts +3 -0
  174. package/dist-types/components/shared/iab-first-paint-sheets.d.ts +3 -0
  175. package/dist-types/components/shared/libs/compose-refs.d.ts +20 -0
  176. package/dist-types/components/shared/policy-actions.d.ts +2 -2
  177. package/dist-types/components/shared/primitives/box.d.ts +1 -1
  178. package/dist-types/components/shared/primitives/button.d.ts +2 -2
  179. package/dist-types/components/shared/primitives/button.types.d.ts +1 -1
  180. package/dist-types/components/shared/streamed-surface.d.ts +23 -0
  181. package/dist-types/components/shared/surface-styles.d.ts +36 -0
  182. package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
  183. package/dist-types/components/shared/ui/accordion/index.d.ts +2 -2
  184. package/dist-types/components/shared/ui/animated-collapse/index.d.ts +2 -2
  185. package/dist-types/components/shared/ui/branding.d.ts +1 -1
  186. package/dist-types/components/shared/ui/button/button.d.ts +1 -1
  187. package/dist-types/components/shared/ui/button/index.d.ts +2 -2
  188. package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -1
  189. package/dist-types/components/shared/ui/dialog/index.d.ts +1 -1
  190. package/dist-types/components/shared/ui/icon.d.ts +2 -1
  191. package/dist-types/components/shared/ui/logo.d.ts +0 -10
  192. package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -1
  193. package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +13 -0
  194. package/dist-types/components/shared/ui/switch/index.d.ts +2 -2
  195. package/dist-types/components/shared/ui/switch/switch.d.ts +1 -1
  196. package/dist-types/components/shared/ui/tabs/index.d.ts +1 -1
  197. package/dist-types/consent-gate.d.ts +1 -0
  198. package/dist-types/consent-theme.d.ts +38 -0
  199. package/dist-types/context/consent-tracking-context.d.ts +10 -0
  200. package/dist-types/context/index.d.ts +3 -3
  201. package/dist-types/context/theme-context.d.ts +3 -3
  202. package/dist-types/context.d.ts +25 -1
  203. package/dist-types/devtools-launcher.d.ts +29 -0
  204. package/dist-types/devtools.d.ts +13 -2
  205. package/dist-types/draft-context.d.ts +31 -0
  206. package/dist-types/draft.d.ts +81 -9
  207. package/dist-types/gpp.d.ts +27 -0
  208. package/dist-types/headless.d.ts +6 -7
  209. package/dist-types/hooks/use-committed-ref.d.ts +24 -0
  210. package/dist-types/hooks/use-focus-trap.d.ts +3 -1
  211. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +1 -1
  212. package/dist-types/hooks/use-iab-manager.d.ts +5 -5
  213. package/dist-types/hooks/use-iab-policy-guard.d.ts +35 -0
  214. package/dist-types/hooks/use-late-entry.d.ts +14 -0
  215. package/dist-types/hooks/use-theme.d.ts +1 -1
  216. package/dist-types/hooks.d.ts +106 -11
  217. package/dist-types/iab.d.ts +7 -7
  218. package/dist-types/index-parts/consent-banner.d.ts +7 -0
  219. package/dist-types/index-parts/consent-dialog-link.d.ts +7 -0
  220. package/dist-types/index-parts/consent-dialog-trigger.d.ts +7 -0
  221. package/dist-types/index-parts/consent-dialog.d.ts +7 -0
  222. package/dist-types/index-parts/consent-gate.d.ts +7 -0
  223. package/dist-types/index-parts/core.d.ts +7 -0
  224. package/dist-types/index-parts/draft.d.ts +7 -0
  225. package/dist-types/index-parts/frame.d.ts +7 -0
  226. package/dist-types/index-parts/hooks.d.ts +7 -0
  227. package/dist-types/index-parts/hosted.d.ts +7 -0
  228. package/dist-types/index-parts/module-hooks.d.ts +7 -0
  229. package/dist-types/index-parts/offline.d.ts +7 -0
  230. package/dist-types/index-parts/presets.d.ts +7 -0
  231. package/dist-types/index-parts/provider.d.ts +7 -0
  232. package/dist-types/index-parts/theme.d.ts +8 -0
  233. package/dist-types/index-parts/translations.d.ts +7 -0
  234. package/dist-types/index.d.ts +32 -28
  235. package/dist-types/kernel-selector.d.ts +68 -0
  236. package/dist-types/modes.d.ts +26 -0
  237. package/dist-types/module-hooks/iframe-blocker.d.ts +33 -1
  238. package/dist-types/module-hooks/network-blocker.d.ts +23 -0
  239. package/dist-types/module-hooks/network-hold.d.ts +47 -0
  240. package/dist-types/module-hooks.d.ts +4 -4
  241. package/dist-types/panel-link.d.ts +1 -1
  242. package/dist-types/panel-trigger.d.ts +1 -1
  243. package/dist-types/panel.d.ts +13 -1
  244. package/dist-types/postcss-tailwind3.d.ts +21 -0
  245. package/dist-types/preferences.d.ts +12 -1
  246. package/dist-types/primitives/accordion.d.ts +1 -1
  247. package/dist-types/primitives/button.d.ts +1 -1
  248. package/dist-types/primitives/collapsible.d.ts +1 -1
  249. package/dist-types/primitives/dialog.d.ts +1 -1
  250. package/dist-types/primitives/preference-item.d.ts +1 -1
  251. package/dist-types/primitives/switch.d.ts +1 -1
  252. package/dist-types/primitives/tabs.d.ts +1 -1
  253. package/dist-types/primitives.d.ts +7 -7
  254. package/dist-types/prompt.d.ts +1 -1
  255. package/dist-types/provider.d.ts +169 -28
  256. package/dist-types/server/fetch-ssr-data.d.ts +1 -1
  257. package/dist-types/server/headers.d.ts +14 -4
  258. package/dist-types/server/index.d.ts +5 -5
  259. package/dist-types/server/normalize-url.d.ts +14 -7
  260. package/dist-types/server/types.d.ts +12 -1
  261. package/dist-types/theme-provider.d.ts +2 -2
  262. package/dist-types/transports/hosted.d.ts +36 -0
  263. package/dist-types/transports/manifest.d.ts +48 -0
  264. package/dist-types/transports/offline.d.ts +7 -16
  265. package/dist-types/types/index.d.ts +3 -3
  266. package/dist-types/types/manager.d.ts +1 -1
  267. package/dist-types/types/theme/index.d.ts +1 -1
  268. package/dist-types/ui-config-context.d.ts +14 -2
  269. package/dist-types/utils/deferred-module.d.ts +13 -0
  270. package/dist-types/utils/index.d.ts +4 -4
  271. package/dist-types/utils/merge-slot-props.d.ts +17 -3
  272. package/dist-types/utils/merge-styles.d.ts +1 -1
  273. package/dist-types/utils/theme-utils.d.ts +18 -3
  274. package/dist-types/version.d.ts +1 -1
  275. package/docs/README.md +96 -70
  276. package/docs/assets/v3/bottom-bar.png +0 -0
  277. package/docs/assets/v3/brand-card.png +0 -0
  278. package/docs/assets/v3/brand-preferences.png +0 -0
  279. package/docs/assets/v3/choice-wall.png +0 -0
  280. package/docs/assets/v3/headless-bar-html.png +0 -0
  281. package/docs/assets/v3/headless-bar-mobile.png +0 -0
  282. package/docs/assets/v3/headless-bar.png +0 -0
  283. package/docs/assets/v3/slim-bar.png +0 -0
  284. package/docs/concepts/choose-your-setup.md +138 -0
  285. package/docs/concepts/consent-categories.md +84 -0
  286. package/docs/concepts/consent-state.md +421 -0
  287. package/docs/concepts/data-fetching.md +270 -0
  288. package/docs/concepts/how-consent-works.md +123 -0
  289. package/docs/concepts/modes.md +278 -0
  290. package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +8 -60
  291. package/docs/customization/class-names.md +202 -0
  292. package/docs/customization/dark-mode.md +157 -0
  293. package/docs/customization/motion.md +128 -0
  294. package/docs/customization/overview.md +68 -33
  295. package/docs/customization/recipes.md +838 -47
  296. package/docs/customization/slots.md +217 -35
  297. package/docs/customization/stylesheets.md +248 -0
  298. package/docs/customization/tailwind.md +863 -0
  299. package/docs/customization/tokens.md +167 -36
  300. package/docs/customization/translations.md +87 -3
  301. package/docs/frameworks/react/callbacks.md +118 -0
  302. package/docs/frameworks/react/clear-on-revocation.md +106 -0
  303. package/docs/frameworks/react/components/consent-banner.md +48 -27
  304. package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
  305. package/docs/frameworks/react/components/consent-dialog-trigger.md +86 -76
  306. package/docs/frameworks/react/components/consent-dialog.md +111 -58
  307. package/docs/frameworks/react/components/{frame.md → consent-gate.md} +70 -49
  308. package/docs/frameworks/react/components/consent-provider.md +140 -0
  309. package/docs/frameworks/react/components/consent-widget.md +69 -24
  310. package/docs/frameworks/react/components/dev-tools.md +76 -85
  311. package/docs/frameworks/react/components.md +113 -0
  312. package/docs/frameworks/react/compose.md +354 -0
  313. package/docs/frameworks/react/content-security-policy.md +143 -0
  314. package/docs/frameworks/react/customize.md +258 -0
  315. package/docs/frameworks/react/embeds.md +89 -0
  316. package/docs/frameworks/react/gpp.md +163 -0
  317. package/docs/frameworks/react/headless.md +4 -4
  318. package/docs/frameworks/react/hooks.md +70 -0
  319. package/docs/frameworks/react/iab.md +259 -0
  320. package/docs/frameworks/react/network-blocker.md +140 -0
  321. package/docs/frameworks/react/quickstart.md +220 -102
  322. package/docs/frameworks/react/rendering.md +263 -0
  323. package/docs/frameworks/react/scripts.md +114 -0
  324. package/docs/frameworks/react/translations.md +155 -0
  325. package/docs/frameworks/react/troubleshooting.md +188 -61
  326. package/docs/frameworks/react/upgrade-v3.md +651 -0
  327. package/docs/frameworks/react/vendor-consent.md +188 -0
  328. package/docs/guides/banner-experiments.md +672 -0
  329. package/docs/guides/troubleshooting.md +192 -54
  330. package/docs/guides/verify-consent.md +96 -49
  331. package/docs/integrations/adobe-analytics.md +177 -183
  332. package/docs/integrations/ahrefs-analytics.md +162 -178
  333. package/docs/integrations/amplitude.md +172 -180
  334. package/docs/integrations/building-integrations.md +137 -33
  335. package/docs/integrations/clearbit.md +164 -178
  336. package/docs/integrations/cloudflare-web-analytics.md +166 -180
  337. package/docs/integrations/cloudflare-zaraz.md +333 -0
  338. package/docs/integrations/crisp.md +174 -182
  339. package/docs/integrations/databuddy.md +167 -197
  340. package/docs/integrations/fathom-analytics.md +168 -180
  341. package/docs/integrations/front-chat.md +308 -0
  342. package/docs/integrations/google-maps.md +142 -108
  343. package/docs/integrations/google-tag-manager.md +258 -185
  344. package/docs/integrations/google-tag.md +226 -182
  345. package/docs/integrations/heap.md +173 -179
  346. package/docs/integrations/hightouch.md +171 -181
  347. package/docs/integrations/hotjar.md +169 -179
  348. package/docs/integrations/intercom.md +193 -177
  349. package/docs/integrations/klaviyo.md +473 -0
  350. package/docs/integrations/linkedin-insights.md +184 -174
  351. package/docs/integrations/logrocket.md +170 -180
  352. package/docs/integrations/matomo-analytics.md +198 -202
  353. package/docs/integrations/meta-pixel.md +198 -174
  354. package/docs/integrations/microsoft-clarity.md +173 -179
  355. package/docs/integrations/microsoft-uet.md +158 -178
  356. package/docs/integrations/mixpanel-analytics.md +165 -184
  357. package/docs/integrations/one-dollar-stats.md +292 -0
  358. package/docs/integrations/openai-pixel.md +214 -325
  359. package/docs/integrations/overview.md +152 -83
  360. package/docs/integrations/pinterest-tag.md +315 -0
  361. package/docs/integrations/pirsch.md +179 -183
  362. package/docs/integrations/plausible-analytics.md +182 -182
  363. package/docs/integrations/posthog.md +323 -264
  364. package/docs/integrations/promptwatch.md +164 -178
  365. package/docs/integrations/reddit-pixel.md +195 -181
  366. package/docs/integrations/rudderstack.md +211 -210
  367. package/docs/integrations/rybbit-analytics.md +181 -184
  368. package/docs/integrations/segment.md +192 -178
  369. package/docs/integrations/sentry.md +402 -0
  370. package/docs/integrations/snapchat-pixel.md +196 -180
  371. package/docs/integrations/tiktok-pixel.md +181 -174
  372. package/docs/integrations/umami-analytics.md +173 -182
  373. package/docs/integrations/vercel-analytics.md +176 -181
  374. package/docs/integrations/x-pixel.md +186 -174
  375. package/docs/integrations/youtube.md +150 -111
  376. package/package.json +48 -17
  377. package/dist/component-hooks/use-manager.js +0 -2
  378. package/dist/components/frame/atoms.js +0 -1
  379. package/dist/components/frame/frame.js +0 -2
  380. package/dist/components/frame/index.js +0 -2
  381. package/dist/frame.js +0 -2
  382. package/dist/ui-save.js +0 -1
  383. package/dist-types/component-hooks/use-manager.d.ts +0 -40
  384. package/dist-types/components/frame/atoms.d.ts +0 -11
  385. package/dist-types/components/frame/frame.d.ts +0 -2
  386. package/dist-types/components/frame/index.d.ts +0 -24
  387. package/dist-types/frame.d.ts +0 -1
  388. package/dist-types/ui-save.d.ts +0 -5
  389. package/docs/assets/v3/brand-bar.png +0 -0
  390. package/docs/assets/v3/mobile-card.png +0 -0
  391. package/docs/assets/v3/preferences.png +0 -0
  392. package/docs/frameworks/react/components/consent-manager-provider.md +0 -71
  393. package/docs/frameworks/react/concepts/consent-categories.md +0 -33
  394. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +0 -58
  395. package/docs/frameworks/react/iab/overview.md +0 -53
  396. package/docs/frameworks/react/script-loader.md +0 -63
  397. package/docs/frameworks/react/styling/overview.md +0 -217
  398. package/docs/guides/consent-state.md +0 -60
  399. package/docs/guides/data-fetching.md +0 -163
  400. package/docs/guides/deployment-modes.md +0 -63
  401. package/docs/integrations/clear-on-revocation.md +0 -167
  402. package/docs/upgrade-v3.md +0 -334
  403. package/readme.json +0 -48
  404. package/src/iab/styles.css +0 -11
  405. package/src/styles.css +0 -10
  406. /package/dist/components/{frame → consent-gate}/types.js +0 -0
@@ -0,0 +1,333 @@
1
+ ---
2
+ title: Cloudflare Zaraz
3
+ description: Sync c15t permissions to Cloudflare Zaraz purposes with the c15t
4
+ cloudflareZaraz bridge, which runs on every page without loading a script, and
5
+ check the tools it controls.
6
+ icon: cloudflare-web-analytics
7
+ group: integrations
8
+ ---
9
+
10
+ ## Configure Cloudflare Zaraz
11
+
12
+ `cloudflareZaraz` connects c15t to an existing Zaraz installation. It inserts
13
+ no script and configures no tools. Zaraz loads the tools; c15t decides which
14
+ purposes they may use. In the Zaraz dashboard:
15
+
16
+ 1. Enable Consent Management and create purposes for the c15t categories you
17
+ use.
18
+ 2. Assign a purpose to every tool that needs permission. Zaraz runs a tool
19
+ without a purpose regardless of consent.
20
+ 3. Turn off automatic display of the Zaraz consent modal. c15t owns the UI.
21
+ 4. Turn off **Automatic Pageview Tracking**, and automatic SPA pageviews too if
22
+ your app sends them itself.
23
+ 5. Copy the purpose IDs, not the purpose names, into the mapping below.
24
+
25
+ Zaraz keeps its own consent cookie. An automatic pageview can run with a grant
26
+ from a previous visit before c15t applies the current permissions. With
27
+ automatic pageviews off, send the first pageview from `onReady`, which runs
28
+ after the first synchronization. DOM-ready, timer and click triggers you add in
29
+ Zaraz can still run before the bridge starts; audit them. Cloudflare documents
30
+ [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/)
31
+ and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/).
32
+
33
+ | Package manager | Command |
34
+ | :-------------- | :------------------------------------- |
35
+ | npm | `npm install @c15t/integrations@alpha` |
36
+ | pnpm | `pnpm add @c15t/integrations@alpha` |
37
+ | yarn | `yarn add @c15t/integrations@alpha` |
38
+ | bun | `bun add @c15t/integrations@alpha` |
39
+
40
+ ```ts title="src/consent-scripts.ts"
41
+ import { cloudflareZaraz } from '@c15t/integrations/cloudflare-zaraz';
42
+
43
+ // Zaraz provides this global after its loader runs.
44
+ declare const zaraz: { track: (event: string) => void };
45
+
46
+ export const scripts = [
47
+ cloudflareZaraz({
48
+ purposes: {
49
+ measurement: ['your-measurement-purpose-id'],
50
+ marketing: ['your-marketing-purpose-id'],
51
+ },
52
+ onReady: () => {
53
+ zaraz.track('Pageview');
54
+ },
55
+ }),
56
+ ];
57
+ ```
58
+
59
+ Register one bridge per app. Keep Zaraz's own loader and its dashboard tools
60
+ when you follow the registration steps below; remove only standalone loaders
61
+ for tools that Zaraz already runs, including a separate `@c15t/integrations` helper
62
+ for the same tool. If Zaraz auto-injection is off, load
63
+ [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/)
64
+ once.
65
+
66
+ ## Register the scripts
67
+
68
+ Complete your [framework quickstart](https://v3.c15t.com/docs/frameworks) first. Keep its Inth
69
+ endpoint, policy, styles and consent UI. Remove the vendor's original script,
70
+ SDK initializer or tag-manager entry, so the vendor loads only through c15t.
71
+
72
+ The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
73
+ quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
74
+ in the Next.js guide, add the helper to that array instead of creating a
75
+ second file.
76
+ The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
77
+ point for your framework below. These are edits to that provider, not a second
78
+ provider.
79
+
80
+ **Next.js**
81
+
82
+ Add the configuration to `scripts` in `c15t.config.ts`, next to
83
+ `next.config.ts`:
84
+
85
+ ```ts title="c15t.config.ts"
86
+ import { defineConsentConfig } from 'c15t/next';
87
+ import { scripts } from './src/consent-scripts';
88
+
89
+ export default defineConsentConfig({ scripts });
90
+ ```
91
+
92
+ Keep the rest of your config, such as `mode` and `routePrefix`, in the
93
+ same call. `ConsentRoot` reads the config in the browser, so the layout
94
+ keeps passing only `state`. App Router, Pages Router and static export all
95
+ read the same file. See
96
+ [Next.js scripts and embeds](https://v3.c15t.com/docs/frameworks/next/scripts).
97
+
98
+ **TanStack Start**
99
+
100
+ Import the configuration into your root route and pass it to the existing
101
+ `ConsentRoot` as a top-level prop. Keep the loader from the
102
+ [TanStack Start quickstart](https://v3.c15t.com/docs/frameworks/tanstack-start/quickstart):
103
+
104
+ ```tsx title="src/routes/__root.tsx"
105
+ import { scripts } from '../consent-scripts';
106
+
107
+ <ConsentRoot state={consent} scripts={scripts}>
108
+ ```
109
+
110
+ Import vendor helpers in the root route module, not in a server function.
111
+ A server function's return value must be serializable, and script
112
+ configurations carry callbacks. See
113
+ [TanStack Start scripts](https://v3.c15t.com/docs/frameworks/tanstack-start/scripts).
114
+
115
+ **React**
116
+
117
+ Add the configuration to the existing `ConsentProvider` options, next to
118
+ `mode`:
119
+
120
+ ```tsx title="src/consent.tsx"
121
+ import { scripts } from './consent-scripts';
122
+
123
+ <ConsentProvider options={{ mode, scripts }}>
124
+ ```
125
+
126
+ `mode` is the `manifest()` value from the
127
+ [React quickstart](../frameworks/react/quickstart.md). Keep the banner,
128
+ dialog and preferences link inside the provider. See
129
+ [React scripts and embeds](../frameworks/react/scripts.md).
130
+
131
+ **Nuxt**
132
+
133
+ Register the scripts under the `c15t` key in `app/app.config.ts`. Adjust the
134
+ relative import to where you created `consent-scripts.ts`:
135
+
136
+ ```ts title="app/app.config.ts"
137
+ import { scripts } from '../src/consent-scripts';
138
+
139
+ export default defineAppConfig({
140
+ c15t: { scripts },
141
+ });
142
+ ```
143
+
144
+ The Nuxt module merges this over its options in `nuxt.config.ts` and starts
145
+ one script loader in the browser after hydration, once it has applied the
146
+ visitor's stored choice and privacy signals. Keep `scripts` out of
147
+ `nuxt.config.ts`, which reaches the browser as JSON and drops the vendor
148
+ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
149
+ [Nuxt scripts and embeds](https://v3.c15t.com/docs/frameworks/nuxt/scripts).
150
+
151
+ **Vue**
152
+
153
+ Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
154
+
155
+ ```ts title="src/main.ts"
156
+ import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
157
+ import { scripts } from './consent-scripts';
158
+
159
+ app.use(c15tVue, {
160
+ mode: manifest(),
161
+ scripts,
162
+ });
163
+ ```
164
+
165
+ Keep your existing `mode` and other options. The plugin starts one
166
+ script loader when the app mounts, after it has applied the visitor's stored
167
+ choice. Do not also call `createScriptLoader` from a component. See
168
+ [Vue scripts and embeds](https://v3.c15t.com/docs/frameworks/vue/scripts).
169
+
170
+ **Astro**
171
+
172
+ Add the scripts to the client entrypoint from the
173
+ [Astro quickstart](https://v3.c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
174
+ which the integration finds on its own. Keep `astro.config.mjs` as it is.
175
+ If the module already exports scripts, combine the two arrays.
176
+
177
+ ```ts title="src/c15t.client.ts"
178
+ import type { C15tClientOptionsExtension } from 'c15t/astro';
179
+ import { scripts } from './consent-scripts';
180
+
181
+ export default { scripts } satisfies C15tClientOptionsExtension;
182
+ ```
183
+
184
+ Vendor helpers contain callbacks, and the integration options in
185
+ `astro.config.mjs` are serialized into the page, so do not put helpers in
186
+ the integration's `scripts` option. The integration passes the client
187
+ entrypoint to the one runtime every page shares, including across
188
+ `ClientRouter` navigation.
189
+
190
+ **Svelte**
191
+
192
+ Import the scripts in the component that owns your existing provider and
193
+ pass them as a top-level prop:
194
+
195
+ ```svelte title="src/App.svelte"
196
+ <script lang="ts">
197
+ import { ConsentProvider, manifest } from '@c15t/svelte';
198
+ import { scripts } from './consent-scripts';
199
+ </script>
200
+
201
+ <ConsentProvider mode={manifest()} {scripts}>
202
+ <!-- Keep your application, consent UI and preferences link here. -->
203
+ </ConsentProvider>
204
+ ```
205
+
206
+ Retain the styles and consent UI from the [Svelte quickstart](https://v3.c15t.com/docs/frameworks/svelte/quickstart).
207
+ The provider owns the loader and disposes it on unmount.
208
+
209
+ **SvelteKit**
210
+
211
+ Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
212
+ handle and the layout load from the [SvelteKit quickstart](https://v3.c15t.com/docs/frameworks/sveltekit/quickstart).
213
+
214
+ ```svelte title="src/routes/+layout.svelte"
215
+ <script lang="ts">
216
+ import { ConsentRoot } from '@c15t/svelte';
217
+ import { scripts } from '../consent-scripts';
218
+
219
+ let { children, data } = $props();
220
+ </script>
221
+
222
+ <ConsentRoot state={data.consent} {scripts}>
223
+ {@render children()}
224
+ <!-- Keep your consent UI and preferences link here. -->
225
+ </ConsentRoot>
226
+ ```
227
+
228
+ Import vendor helpers in the layout component, not in `+layout.server.ts`:
229
+ a server load cannot send functions to the browser. Prerendered, static and
230
+ SPA-mode pages use the same `scripts` prop. If you pass an externally owned
231
+ `runtime` to the provider, register scripts when creating that runtime instead.
232
+
233
+ **HTML**
234
+
235
+ The helpers in `@c15t/integrations` are ES modules that need a bundler. On a
236
+ page that loads the c15t script tag, paste the vendor's own snippet instead
237
+ and keep it inert until its category is allowed:
238
+
239
+ ```html
240
+ <script type="text/plain" data-c15t-category="measurement">
241
+ // The vendor's snippet, unchanged
242
+ </script>
243
+ ```
244
+
245
+ Use the category this guide names for the vendor. c15t runs the snippet
246
+ once that category is allowed, and reloads the page when the visitor
247
+ withdraws it. Helper options on this page, such as `loadMode`, do not apply
248
+ to a pasted snippet. See [HTML scripts](https://v3.c15t.com/docs/frameworks/html/scripts).
249
+
250
+ **JavaScript**
251
+
252
+ Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
253
+
254
+ ```ts
255
+ import { init, manifest } from '@c15t/browser';
256
+ import { scripts } from './consent-scripts';
257
+
258
+ const consent = init({
259
+ mode: manifest(),
260
+ scripts,
261
+ });
262
+ ```
263
+
264
+ Keep the mode from your quickstart. With
265
+ `createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
266
+ A kernel you create yourself needs a loader from
267
+ `c15t/modules/script-loader`. Attach one loader per kernel. See
268
+ [JavaScript scripts](https://v3.c15t.com/docs/frameworks/javascript/scripts).
269
+
270
+ ## Options
271
+
272
+ | Option | Default | Behavior |
273
+ | ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
274
+ | `purposes` | Required | Maps c15t categories to Zaraz purpose IDs. A category can list several IDs. An empty mapping, a blank ID, an ID with surrounding whitespace or an ID mapped twice throws. |
275
+ | `hideBuiltInModal` | `true` | Hides the Zaraz modal if it is visible. Also turn off auto-display in Zaraz. |
276
+ | `sendQueuedEvents` | `true` | Calls `zaraz.consent.sendQueuedEvents()` after a purpose changes from denied to allowed. Set `false` to discard pageviews Zaraz queued before consent. |
277
+ | `onReady` | None | Runs once after the first successful synchronization, even when every purpose is denied. |
278
+ | `onError` | None | Receives synchronization errors. |
279
+
280
+ ## Loading and revocation
281
+
282
+ `cloudflareZaraz` returns a callback-only script with the `necessary` category
283
+ and `alwaysLoad`, so the bridge runs for every visitor. That does not make the
284
+ tools behind it necessary. Control each tool through its Zaraz purpose.
285
+
286
+ The bridge's vendor slug is `cloudflare-zaraz`. Declare a vendor with that
287
+ `id` to give visitors a switch for Zaraz in the preference dialog. While a
288
+ visitor has it switched off, the bridge denies every purpose mapped to an
289
+ optional category, whatever the categories allow. See
290
+ [vendor consent for your framework](./overview.md#vendor-switches-and-cookie-cleanup).
291
+
292
+ When the Zaraz consent API is ready, the bridge reads `zaraz.consent.getAll()`
293
+ and sets each returned purpose to `true` only if its mapped category is
294
+ allowed in c15t's effective permissions, which include policy restrictions.
295
+ Purposes you did not map are set to `false`. If the API is not ready,
296
+ the bridge waits for the `zarazConsentAPIReady` event and applies the latest
297
+ permissions; it does not poll. On each consent change it calls
298
+ `zaraz.consent.set()` only when a value differs, then replays queued events
299
+ for newly allowed purposes. Revocation sets purposes to `false` and replays
300
+ nothing. Zaraz returns only purposes attached to enabled tools, so a mapped ID
301
+ missing from `getAll()` gets no grant.
302
+
303
+ If a Zaraz call throws, `onReady` waits and the bridge retries on the next
304
+ consent change or readiness event. Without `onError`, the error reaches the
305
+ script loader's debug events, or the browser's error handler for readiness
306
+ events. A failed revocation can leave the previous Zaraz grant in place, and a
307
+ retried replay can send a queued event twice. Disposing the loader detaches the
308
+ bridge but does not revoke purposes or stop tools that already ran. The bridge
309
+ maps categories to purposes only; it does not translate IAB TCF choices.
310
+
311
+ ## Verify Cloudflare Zaraz
312
+
313
+ Test with isolated destinations. `getAll()` shows what the bridge set, but only
314
+ a tool's own requests show whether it respected that.
315
+
316
+ 1. In a private window with an opt-in policy, load the page. The bridge adds
317
+ no script element. `zaraz.consent.getAll()` returns `false` for every
318
+ purpose, the Zaraz modal stays hidden, and no purpose-gated tool sends a
319
+ request.
320
+ 2. Click Reject, then reload. Every purpose is still `false`.
321
+ 3. Open Privacy settings and allow measurement. Without a reload, the
322
+ measurement purposes become `true`, the queued pageview replays and
323
+ measurement tools send requests. Marketing tools stay silent.
324
+ 4. Turn measurement off again and save. c15t reloads the page, and the new
325
+ page starts with every purpose `false`.
326
+ 5. In the console, call `zaraz.consent.set()` to grant a purpose that c15t
327
+ denies, then reload. The bridge sets it back to `false` before `onReady`
328
+ runs.
329
+
330
+ [Cloudflare Web Analytics](./cloudflare-web-analytics.md) is a
331
+ separate product with its own helper. See the
332
+ [consent verification guide](../guides/verify-consent.md) for navigation and
333
+ hosting checks.