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

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 (413) hide show
  1. package/AGENTS.md +97 -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/iab-prompt/iab-prompt.js +1 -1
  27. package/dist/components/panel/atoms/card.js +1 -1
  28. package/dist/components/panel/atoms/overlay.js +1 -1
  29. package/dist/components/panel/atoms/root.js +1 -1
  30. package/dist/components/panel/panel.js +1 -1
  31. package/dist/components/panel-trigger/atoms/button.js +1 -1
  32. package/dist/components/panel-trigger/atoms/icon.js +1 -1
  33. package/dist/components/panel-trigger/atoms/root.js +1 -1
  34. package/dist/components/panel-trigger/atoms/toolbar.js +1 -1
  35. package/dist/components/panel-trigger/atoms/trigger-icons.js +1 -0
  36. package/dist/components/panel-trigger/panel-trigger-toolbar.js +1 -1
  37. package/dist/components/panel-trigger/panel-trigger.js +1 -1
  38. package/dist/components/panel-trigger/toolbar-loader.js +2 -0
  39. package/dist/components/preferences/atoms/accordion.js +1 -1
  40. package/dist/components/preferences/atoms/root.js +1 -1
  41. package/dist/components/preferences/atoms/vendor-list.js +1 -0
  42. package/dist/components/preferences/index.js +1 -1
  43. package/dist/components/prompt/atoms/early-tap-script.js +2 -0
  44. package/dist/components/prompt/atoms/overlay.js +1 -1
  45. package/dist/components/prompt/atoms/root.js +1 -1
  46. package/dist/components/prompt/components.js +1 -1
  47. package/dist/components/prompt/policy-actions.js +1 -1
  48. package/dist/components/prompt/prompt.js +1 -1
  49. package/dist/components/shared/dialog-sheets.js +1 -0
  50. package/dist/components/shared/first-paint-sheets.js +1 -0
  51. package/dist/components/shared/iab-dialog-sheets.js +1 -0
  52. package/dist/components/shared/iab-first-paint-sheets.js +1 -0
  53. package/dist/components/shared/libs/compose-refs.js +1 -0
  54. package/dist/components/shared/libs/slot.js +1 -1
  55. package/dist/components/shared/primitives/button.js +1 -1
  56. package/dist/components/shared/primitives/legal-links/index.js +1 -1
  57. package/dist/components/shared/streamed-surface.js +2 -0
  58. package/dist/components/shared/surface-styles.js +2 -0
  59. package/dist/components/shared/ui/dialog/dialog.js +1 -1
  60. package/dist/components/shared/ui/icon.js +1 -1
  61. package/dist/components/shared/ui/logo.js +1 -1
  62. package/dist/components/shared/ui/preference-item/preference-item.js +1 -1
  63. package/dist/consent-gate.js +2 -0
  64. package/dist/consent-theme.js +1 -0
  65. package/dist/context/consent-tracking-context.js +1 -1
  66. package/dist/context/index.js +1 -1
  67. package/dist/context.js +1 -1
  68. package/dist/devtools-launcher.js +2 -0
  69. package/dist/devtools.js +1 -1
  70. package/dist/draft-context.js +2 -0
  71. package/dist/draft.js +1 -1
  72. package/dist/external-iab-context.js +1 -1
  73. package/dist/gpp.js +2 -0
  74. package/dist/headless.js +1 -1
  75. package/dist/hooks/use-color-scheme.js +1 -1
  76. package/dist/hooks/use-committed-ref.js +2 -0
  77. package/dist/hooks/use-focus-trap.js +1 -1
  78. package/dist/hooks/use-headless-iab-consent-ui.js +1 -1
  79. package/dist/hooks/use-iab-policy-guard.js +1 -0
  80. package/dist/hooks/use-late-entry.js +2 -0
  81. package/dist/hooks.js +1 -1
  82. package/dist/iab/styles.tw3.css +5 -45
  83. package/dist/iab-context.js +1 -1
  84. package/dist/iab-dialog-deferred.js +2 -0
  85. package/dist/iab.js +1 -1
  86. package/dist/index-parts/consent-banner.js +1 -0
  87. package/dist/index-parts/consent-dialog-link.js +1 -0
  88. package/dist/index-parts/consent-dialog-trigger.js +1 -0
  89. package/dist/index-parts/consent-dialog.js +1 -0
  90. package/dist/index-parts/consent-gate.js +1 -0
  91. package/dist/index-parts/core.js +1 -0
  92. package/dist/index-parts/draft.js +1 -0
  93. package/dist/index-parts/frame.js +1 -0
  94. package/dist/index-parts/hooks.js +1 -0
  95. package/dist/index-parts/hosted.js +1 -0
  96. package/dist/index-parts/module-hooks.js +1 -0
  97. package/dist/index-parts/offline.js +1 -0
  98. package/dist/index-parts/presets.js +1 -0
  99. package/dist/index-parts/provider.js +1 -0
  100. package/dist/index-parts/theme.js +1 -0
  101. package/dist/index-parts/translations.js +1 -0
  102. package/dist/index.js +1 -1
  103. package/dist/kernel-selector.js +1 -0
  104. package/dist/modes.js +1 -0
  105. package/dist/module-hooks/iframe-blocker.js +1 -1
  106. package/dist/module-hooks/network-blocker.js +1 -1
  107. package/dist/module-hooks/network-hold.js +2 -0
  108. package/dist/module-hooks/persistence.js +1 -1
  109. package/dist/panel-link.js +1 -1
  110. package/dist/panel-trigger.js +1 -1
  111. package/dist/panel.js +1 -1
  112. package/dist/postcss-tailwind3.js +1 -0
  113. package/dist/preferences.js +1 -2
  114. package/dist/provider.js +1 -1
  115. package/dist/server/fetch-ssr-data.js +1 -1
  116. package/dist/server/headers.js +1 -1
  117. package/dist/server/normalize-url.js +1 -1
  118. package/dist/styles.tw3.css +33 -51
  119. package/dist/transports/hosted.js +1 -0
  120. package/dist/transports/manifest.js +1 -0
  121. package/dist/transports/offline.js +1 -1
  122. package/dist/utils/deferred-module.js +2 -0
  123. package/dist/utils/merge-slot-props.js +1 -1
  124. package/dist/utils/theme-utils.js +1 -1
  125. package/dist/version.js +1 -1
  126. package/dist-types/aggregate-components.d.ts +2 -2
  127. package/dist-types/chunk-warming.d.ts +42 -8
  128. package/dist-types/component-hooks/use-headless-consent-ui.d.ts +5 -5
  129. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +2 -2
  130. package/dist-types/components/consent-gate/atoms.d.ts +11 -0
  131. package/dist-types/components/consent-gate/consent-gate.d.ts +2 -0
  132. package/dist-types/components/consent-gate/frame.d.ts +19 -0
  133. package/dist-types/components/consent-gate/index.d.ts +25 -0
  134. package/dist-types/components/{frame → consent-gate}/types.d.ts +7 -7
  135. package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
  136. package/dist-types/components/consent-preferences-link/index.d.ts +1 -1
  137. package/dist-types/components/iab-panel/atoms/feature-item.d.ts +28 -0
  138. package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +5 -2
  139. package/dist-types/components/iab-panel/atoms/stack-item.d.ts +7 -2
  140. package/dist-types/components/iab-panel/atoms/vendor-list.d.ts +1 -1
  141. package/dist-types/components/iab-panel/iab-panel.d.ts +3 -3
  142. package/dist-types/components/iab-panel/index.d.ts +29 -26
  143. package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
  144. package/dist-types/components/iab-prompt/iab-prompt.d.ts +3 -3
  145. package/dist-types/components/iab-prompt/index.d.ts +19 -19
  146. package/dist-types/components/panel/atoms/card.d.ts +5 -4
  147. package/dist-types/components/panel/atoms/overlay.d.ts +1 -1
  148. package/dist-types/components/panel/index.d.ts +8 -8
  149. package/dist-types/components/panel/panel.d.ts +3 -3
  150. package/dist-types/components/panel-link/index.d.ts +1 -1
  151. package/dist-types/components/panel-trigger/atoms/button.d.ts +1 -1
  152. package/dist-types/components/panel-trigger/atoms/icon.d.ts +1 -1
  153. package/dist-types/components/panel-trigger/atoms/root.d.ts +2 -2
  154. package/dist-types/components/panel-trigger/atoms/toolbar.d.ts +2 -2
  155. package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +25 -0
  156. package/dist-types/components/panel-trigger/index.d.ts +4 -4
  157. package/dist-types/components/panel-trigger/panel-trigger-toolbar.d.ts +1 -1
  158. package/dist-types/components/panel-trigger/panel-trigger.d.ts +9 -17
  159. package/dist-types/components/panel-trigger/toolbar-loader.d.ts +34 -0
  160. package/dist-types/components/panel-trigger/types.d.ts +1 -1
  161. package/dist-types/components/preferences/atoms/accordion.d.ts +6 -4
  162. package/dist-types/components/preferences/atoms/button.d.ts +1 -1
  163. package/dist-types/components/preferences/atoms/footer.d.ts +1 -1
  164. package/dist-types/components/preferences/atoms/root.d.ts +1 -1
  165. package/dist-types/components/preferences/atoms/vendor-list.d.ts +23 -0
  166. package/dist-types/components/preferences/index.d.ts +14 -12
  167. package/dist-types/components/preferences/policy-actions.d.ts +2 -2
  168. package/dist-types/components/preferences/preferences.d.ts +1 -1
  169. package/dist-types/components/preferences/types.d.ts +1 -1
  170. package/dist-types/components/prompt/atoms/early-tap-script.d.ts +17 -0
  171. package/dist-types/components/prompt/atoms/root.d.ts +4 -0
  172. package/dist-types/components/prompt/components.d.ts +9 -3
  173. package/dist-types/components/prompt/index.d.ts +12 -12
  174. package/dist-types/components/prompt/policy-actions.d.ts +2 -2
  175. package/dist-types/components/prompt/prompt.d.ts +5 -1
  176. package/dist-types/components/shared/dialog-sheets.d.ts +9 -0
  177. package/dist-types/components/shared/first-paint-sheets.d.ts +8 -0
  178. package/dist-types/components/shared/iab-dialog-sheets.d.ts +3 -0
  179. package/dist-types/components/shared/iab-first-paint-sheets.d.ts +3 -0
  180. package/dist-types/components/shared/libs/compose-refs.d.ts +20 -0
  181. package/dist-types/components/shared/policy-actions.d.ts +2 -2
  182. package/dist-types/components/shared/primitives/box.d.ts +1 -1
  183. package/dist-types/components/shared/primitives/button.d.ts +2 -2
  184. package/dist-types/components/shared/primitives/button.types.d.ts +1 -1
  185. package/dist-types/components/shared/streamed-surface.d.ts +23 -0
  186. package/dist-types/components/shared/surface-styles.d.ts +60 -0
  187. package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
  188. package/dist-types/components/shared/ui/accordion/index.d.ts +2 -2
  189. package/dist-types/components/shared/ui/animated-collapse/index.d.ts +2 -2
  190. package/dist-types/components/shared/ui/branding.d.ts +1 -1
  191. package/dist-types/components/shared/ui/button/button.d.ts +1 -1
  192. package/dist-types/components/shared/ui/button/index.d.ts +2 -2
  193. package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -1
  194. package/dist-types/components/shared/ui/dialog/index.d.ts +1 -1
  195. package/dist-types/components/shared/ui/icon.d.ts +2 -1
  196. package/dist-types/components/shared/ui/logo.d.ts +0 -10
  197. package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -1
  198. package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +13 -0
  199. package/dist-types/components/shared/ui/switch/index.d.ts +2 -2
  200. package/dist-types/components/shared/ui/switch/switch.d.ts +1 -1
  201. package/dist-types/components/shared/ui/tabs/index.d.ts +1 -1
  202. package/dist-types/consent-gate.d.ts +1 -0
  203. package/dist-types/consent-theme.d.ts +38 -0
  204. package/dist-types/context/consent-tracking-context.d.ts +10 -0
  205. package/dist-types/context/index.d.ts +3 -3
  206. package/dist-types/context/theme-context.d.ts +3 -3
  207. package/dist-types/context.d.ts +25 -1
  208. package/dist-types/devtools-launcher.d.ts +29 -0
  209. package/dist-types/devtools.d.ts +13 -2
  210. package/dist-types/draft-context.d.ts +31 -0
  211. package/dist-types/draft.d.ts +81 -9
  212. package/dist-types/gpp.d.ts +27 -0
  213. package/dist-types/headless.d.ts +6 -7
  214. package/dist-types/hooks/use-committed-ref.d.ts +24 -0
  215. package/dist-types/hooks/use-focus-trap.d.ts +3 -1
  216. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +1 -1
  217. package/dist-types/hooks/use-iab-manager.d.ts +5 -5
  218. package/dist-types/hooks/use-iab-policy-guard.d.ts +35 -0
  219. package/dist-types/hooks/use-late-entry.d.ts +14 -0
  220. package/dist-types/hooks/use-theme.d.ts +1 -1
  221. package/dist-types/hooks.d.ts +106 -11
  222. package/dist-types/iab-dialog-deferred.d.ts +36 -0
  223. package/dist-types/iab.d.ts +8 -7
  224. package/dist-types/index-parts/consent-banner.d.ts +7 -0
  225. package/dist-types/index-parts/consent-dialog-link.d.ts +7 -0
  226. package/dist-types/index-parts/consent-dialog-trigger.d.ts +7 -0
  227. package/dist-types/index-parts/consent-dialog.d.ts +7 -0
  228. package/dist-types/index-parts/consent-gate.d.ts +7 -0
  229. package/dist-types/index-parts/core.d.ts +7 -0
  230. package/dist-types/index-parts/draft.d.ts +7 -0
  231. package/dist-types/index-parts/frame.d.ts +7 -0
  232. package/dist-types/index-parts/hooks.d.ts +7 -0
  233. package/dist-types/index-parts/hosted.d.ts +7 -0
  234. package/dist-types/index-parts/module-hooks.d.ts +7 -0
  235. package/dist-types/index-parts/offline.d.ts +7 -0
  236. package/dist-types/index-parts/presets.d.ts +7 -0
  237. package/dist-types/index-parts/provider.d.ts +7 -0
  238. package/dist-types/index-parts/theme.d.ts +8 -0
  239. package/dist-types/index-parts/translations.d.ts +7 -0
  240. package/dist-types/index.d.ts +32 -28
  241. package/dist-types/kernel-selector.d.ts +68 -0
  242. package/dist-types/modes.d.ts +26 -0
  243. package/dist-types/module-hooks/iframe-blocker.d.ts +33 -1
  244. package/dist-types/module-hooks/network-blocker.d.ts +23 -0
  245. package/dist-types/module-hooks/network-hold.d.ts +47 -0
  246. package/dist-types/module-hooks.d.ts +4 -4
  247. package/dist-types/panel-link.d.ts +1 -1
  248. package/dist-types/panel-trigger.d.ts +1 -1
  249. package/dist-types/panel.d.ts +13 -1
  250. package/dist-types/postcss-tailwind3.d.ts +21 -0
  251. package/dist-types/preferences.d.ts +12 -1
  252. package/dist-types/primitives/accordion.d.ts +1 -1
  253. package/dist-types/primitives/button.d.ts +1 -1
  254. package/dist-types/primitives/collapsible.d.ts +1 -1
  255. package/dist-types/primitives/dialog.d.ts +1 -1
  256. package/dist-types/primitives/preference-item.d.ts +1 -1
  257. package/dist-types/primitives/switch.d.ts +1 -1
  258. package/dist-types/primitives/tabs.d.ts +1 -1
  259. package/dist-types/primitives.d.ts +7 -7
  260. package/dist-types/prompt.d.ts +1 -1
  261. package/dist-types/provider.d.ts +169 -28
  262. package/dist-types/server/fetch-ssr-data.d.ts +1 -1
  263. package/dist-types/server/headers.d.ts +14 -4
  264. package/dist-types/server/index.d.ts +5 -5
  265. package/dist-types/server/normalize-url.d.ts +14 -7
  266. package/dist-types/server/types.d.ts +12 -1
  267. package/dist-types/theme-provider.d.ts +2 -2
  268. package/dist-types/transports/hosted.d.ts +36 -0
  269. package/dist-types/transports/manifest.d.ts +48 -0
  270. package/dist-types/transports/offline.d.ts +7 -16
  271. package/dist-types/types/index.d.ts +3 -3
  272. package/dist-types/types/manager.d.ts +1 -1
  273. package/dist-types/types/theme/index.d.ts +1 -1
  274. package/dist-types/ui-config-context.d.ts +14 -2
  275. package/dist-types/utils/deferred-module.d.ts +13 -0
  276. package/dist-types/utils/index.d.ts +4 -4
  277. package/dist-types/utils/merge-slot-props.d.ts +17 -3
  278. package/dist-types/utils/merge-styles.d.ts +1 -1
  279. package/dist-types/utils/theme-utils.d.ts +18 -3
  280. package/dist-types/version.d.ts +1 -1
  281. package/docs/README.md +97 -70
  282. package/docs/assets/v3/bottom-bar.png +0 -0
  283. package/docs/assets/v3/brand-card.png +0 -0
  284. package/docs/assets/v3/brand-preferences.png +0 -0
  285. package/docs/assets/v3/choice-wall.png +0 -0
  286. package/docs/assets/v3/headless-bar-html.png +0 -0
  287. package/docs/assets/v3/headless-bar-mobile.png +0 -0
  288. package/docs/assets/v3/headless-bar.png +0 -0
  289. package/docs/assets/v3/slim-bar.png +0 -0
  290. package/docs/concepts/choose-your-setup.md +141 -0
  291. package/docs/concepts/consent-categories.md +84 -0
  292. package/docs/concepts/consent-state.md +421 -0
  293. package/docs/concepts/data-fetching.md +284 -0
  294. package/docs/concepts/how-consent-works.md +123 -0
  295. package/docs/concepts/modes.md +281 -0
  296. package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +8 -60
  297. package/docs/customization/class-names.md +202 -0
  298. package/docs/customization/dark-mode.md +157 -0
  299. package/docs/customization/motion.md +128 -0
  300. package/docs/customization/overview.md +68 -33
  301. package/docs/customization/recipes.md +838 -47
  302. package/docs/customization/slots.md +217 -35
  303. package/docs/customization/stylesheets.md +248 -0
  304. package/docs/customization/tailwind.md +863 -0
  305. package/docs/customization/tokens.md +167 -36
  306. package/docs/customization/translations.md +87 -3
  307. package/docs/frameworks/react/callbacks.md +118 -0
  308. package/docs/frameworks/react/clear-on-revocation.md +106 -0
  309. package/docs/frameworks/react/components/consent-banner.md +48 -27
  310. package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
  311. package/docs/frameworks/react/components/consent-dialog-trigger.md +86 -76
  312. package/docs/frameworks/react/components/consent-dialog.md +111 -58
  313. package/docs/frameworks/react/components/{frame.md → consent-gate.md} +70 -49
  314. package/docs/frameworks/react/components/consent-provider.md +143 -0
  315. package/docs/frameworks/react/components/consent-widget.md +69 -24
  316. package/docs/frameworks/react/components/dev-tools.md +76 -85
  317. package/docs/frameworks/react/components.md +113 -0
  318. package/docs/frameworks/react/compose.md +354 -0
  319. package/docs/frameworks/react/content-security-policy.md +149 -0
  320. package/docs/frameworks/react/customize.md +258 -0
  321. package/docs/frameworks/react/embeds.md +89 -0
  322. package/docs/frameworks/react/gpp.md +163 -0
  323. package/docs/frameworks/react/headless.md +4 -4
  324. package/docs/frameworks/react/hooks.md +70 -0
  325. package/docs/frameworks/react/iab.md +278 -0
  326. package/docs/frameworks/react/network-blocker.md +140 -0
  327. package/docs/frameworks/react/quickstart.md +171 -107
  328. package/docs/frameworks/react/rendering.md +285 -0
  329. package/docs/frameworks/react/scripts.md +114 -0
  330. package/docs/frameworks/react/translations.md +155 -0
  331. package/docs/frameworks/react/troubleshooting.md +189 -61
  332. package/docs/frameworks/react/upgrade-v3.md +652 -0
  333. package/docs/frameworks/react/vendor-consent.md +188 -0
  334. package/docs/guides/banner-experiments.md +688 -0
  335. package/docs/guides/troubleshooting.md +192 -54
  336. package/docs/guides/verify-consent.md +96 -49
  337. package/docs/integrations/adobe-analytics.md +177 -183
  338. package/docs/integrations/ahrefs-analytics.md +162 -178
  339. package/docs/integrations/amplitude.md +172 -180
  340. package/docs/integrations/building-integrations.md +137 -33
  341. package/docs/integrations/clearbit.md +164 -178
  342. package/docs/integrations/cloudflare-web-analytics.md +166 -180
  343. package/docs/integrations/cloudflare-zaraz.md +333 -0
  344. package/docs/integrations/crisp.md +174 -182
  345. package/docs/integrations/databuddy.md +167 -197
  346. package/docs/integrations/fathom-analytics.md +168 -180
  347. package/docs/integrations/front-chat.md +308 -0
  348. package/docs/integrations/google-maps.md +142 -108
  349. package/docs/integrations/google-tag-manager.md +258 -185
  350. package/docs/integrations/google-tag.md +226 -182
  351. package/docs/integrations/heap.md +173 -179
  352. package/docs/integrations/hightouch.md +171 -181
  353. package/docs/integrations/hotjar.md +169 -179
  354. package/docs/integrations/intercom.md +193 -177
  355. package/docs/integrations/klaviyo.md +473 -0
  356. package/docs/integrations/linkedin-insights.md +184 -174
  357. package/docs/integrations/logrocket.md +170 -180
  358. package/docs/integrations/matomo-analytics.md +198 -202
  359. package/docs/integrations/meta-pixel.md +198 -174
  360. package/docs/integrations/microsoft-clarity.md +173 -179
  361. package/docs/integrations/microsoft-uet.md +158 -178
  362. package/docs/integrations/mixpanel-analytics.md +165 -184
  363. package/docs/integrations/one-dollar-stats.md +292 -0
  364. package/docs/integrations/openai-pixel.md +214 -325
  365. package/docs/integrations/overview.md +153 -83
  366. package/docs/integrations/pinterest-tag.md +315 -0
  367. package/docs/integrations/pirsch.md +179 -183
  368. package/docs/integrations/plausible-analytics.md +182 -182
  369. package/docs/integrations/posthog.md +323 -264
  370. package/docs/integrations/promptwatch.md +164 -178
  371. package/docs/integrations/reddit-pixel.md +195 -181
  372. package/docs/integrations/rudderstack.md +211 -210
  373. package/docs/integrations/rybbit-analytics.md +181 -184
  374. package/docs/integrations/segment.md +192 -178
  375. package/docs/integrations/sentry.md +402 -0
  376. package/docs/integrations/snapchat-pixel.md +196 -180
  377. package/docs/integrations/tiktok-pixel.md +181 -174
  378. package/docs/integrations/umami-analytics.md +173 -182
  379. package/docs/integrations/vercel-analytics.md +176 -181
  380. package/docs/integrations/vercel-speed-insights.md +306 -0
  381. package/docs/integrations/x-pixel.md +186 -174
  382. package/docs/integrations/youtube.md +150 -111
  383. package/package.json +48 -17
  384. package/dist/component-hooks/use-manager.js +0 -2
  385. package/dist/components/frame/atoms.js +0 -1
  386. package/dist/components/frame/frame.js +0 -2
  387. package/dist/components/frame/index.js +0 -2
  388. package/dist/frame.js +0 -2
  389. package/dist/ui-save.js +0 -1
  390. package/dist-types/component-hooks/use-manager.d.ts +0 -40
  391. package/dist-types/components/frame/atoms.d.ts +0 -11
  392. package/dist-types/components/frame/frame.d.ts +0 -2
  393. package/dist-types/components/frame/index.d.ts +0 -24
  394. package/dist-types/frame.d.ts +0 -1
  395. package/dist-types/ui-save.d.ts +0 -5
  396. package/docs/assets/v3/brand-bar.png +0 -0
  397. package/docs/assets/v3/mobile-card.png +0 -0
  398. package/docs/assets/v3/preferences.png +0 -0
  399. package/docs/frameworks/react/components/consent-manager-provider.md +0 -71
  400. package/docs/frameworks/react/concepts/consent-categories.md +0 -33
  401. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +0 -58
  402. package/docs/frameworks/react/iab/overview.md +0 -53
  403. package/docs/frameworks/react/script-loader.md +0 -63
  404. package/docs/frameworks/react/styling/overview.md +0 -217
  405. package/docs/guides/consent-state.md +0 -60
  406. package/docs/guides/data-fetching.md +0 -163
  407. package/docs/guides/deployment-modes.md +0 -63
  408. package/docs/integrations/clear-on-revocation.md +0 -167
  409. package/docs/upgrade-v3.md +0 -334
  410. package/readme.json +0 -48
  411. package/src/iab/styles.css +0 -11
  412. package/src/styles.css +0 -10
  413. /package/dist/components/{frame → consent-gate}/types.js +0 -0
@@ -0,0 +1,402 @@
1
+ ---
2
+ title: Sentry
3
+ description: Configure Sentry's CDN or your own SDK with consent for error
4
+ monitoring, Session Replay and user data.
5
+ icon: sentry
6
+ group: integrations
7
+ ---
8
+
9
+ ## Configure Sentry
10
+
11
+ Remove any existing Sentry Loader Script or CDN tags, then add this configuration.
12
+ Errors run before consent by default; Replay and SDK data collection wait for
13
+ `measurement`.
14
+
15
+ | Package manager | Command |
16
+ | :-------------- | :------------------------------------- |
17
+ | npm | `npm install @c15t/integrations@alpha` |
18
+ | pnpm | `pnpm add @c15t/integrations@alpha` |
19
+ | yarn | `yarn add @c15t/integrations@alpha` |
20
+ | bun | `bun add @c15t/integrations@alpha` |
21
+
22
+ ```ts title="src/consent-scripts.ts"
23
+ import { sentry } from '@c15t/integrations/sentry';
24
+
25
+ export const scripts = [
26
+ sentry({
27
+ dsn: 'https://your-key@o0.ingest.sentry.io/0',
28
+ initOptions: {
29
+ release: 'my-app@1.0.0',
30
+ replaysOnErrorSampleRate: 1,
31
+ replaysSessionSampleRate: 0.1,
32
+ tracesSampleRate: 0.1,
33
+ },
34
+ }),
35
+ ];
36
+ ```
37
+
38
+ The default SDK is 11.4.0 with subresource integrity: `bundle.min.js`, or
39
+ `bundle.tracing.min.js` when traces are sampled. `replay.min.js` loads after
40
+ consent when a Replay sample rate is above 0.
41
+
42
+ ## Register the scripts
43
+
44
+ Complete your [framework quickstart](https://v3.c15t.com/docs/frameworks) first. Keep its Inth
45
+ endpoint, policy, styles and consent UI. Remove the vendor's original script,
46
+ SDK initializer or tag-manager entry, so the vendor loads only through c15t.
47
+
48
+ The vendor pages put the helper in `src/consent-scripts.ts`. If your framework
49
+ quickstart already has a `scripts` array, such as the one in `c15t.config.ts`
50
+ in the Next.js guide, add the helper to that array instead of creating a
51
+ second file.
52
+ The `scripts` export is a configuration, not an initializer. Add it to the c15t provider you already have, at the registration
53
+ point for your framework below. These are edits to that provider, not a second
54
+ provider.
55
+
56
+ **Next.js**
57
+
58
+ Add the configuration to `scripts` in `c15t.config.ts`, next to
59
+ `next.config.ts`:
60
+
61
+ ```ts title="c15t.config.ts"
62
+ import { defineConsentConfig } from 'c15t/next';
63
+ import { scripts } from './src/consent-scripts';
64
+
65
+ export default defineConsentConfig({ scripts });
66
+ ```
67
+
68
+ Keep the rest of your config, such as `mode` and `routePrefix`, in the
69
+ same call. `ConsentRoot` reads the config in the browser, so the layout
70
+ keeps passing only `state`. App Router, Pages Router and static export all
71
+ read the same file. See
72
+ [Next.js scripts and embeds](https://v3.c15t.com/docs/frameworks/next/scripts).
73
+
74
+ **TanStack Start**
75
+
76
+ Import the configuration into your root route and pass it to the existing
77
+ `ConsentRoot` as a top-level prop. Keep the loader from the
78
+ [TanStack Start quickstart](https://v3.c15t.com/docs/frameworks/tanstack-start/quickstart):
79
+
80
+ ```tsx title="src/routes/__root.tsx"
81
+ import { scripts } from '../consent-scripts';
82
+
83
+ <ConsentRoot state={consent} scripts={scripts}>
84
+ ```
85
+
86
+ Import vendor helpers in the root route module, not in a server function.
87
+ A server function's return value must be serializable, and script
88
+ configurations carry callbacks. See
89
+ [TanStack Start scripts](https://v3.c15t.com/docs/frameworks/tanstack-start/scripts).
90
+
91
+ **React**
92
+
93
+ Add the configuration to the existing `ConsentProvider` options, next to
94
+ `mode`:
95
+
96
+ ```tsx title="src/consent.tsx"
97
+ import { scripts } from './consent-scripts';
98
+
99
+ <ConsentProvider options={{ mode, scripts }}>
100
+ ```
101
+
102
+ `mode` is the `manifest()` value from the
103
+ [React quickstart](../frameworks/react/quickstart.md). Keep the banner,
104
+ dialog and preferences link inside the provider. See
105
+ [React scripts and embeds](../frameworks/react/scripts.md).
106
+
107
+ **Nuxt**
108
+
109
+ Register the scripts under the `c15t` key in `app/app.config.ts`. Adjust the
110
+ relative import to where you created `consent-scripts.ts`:
111
+
112
+ ```ts title="app/app.config.ts"
113
+ import { scripts } from '../src/consent-scripts';
114
+
115
+ export default defineAppConfig({
116
+ c15t: { scripts },
117
+ });
118
+ ```
119
+
120
+ The Nuxt module merges this over its options in `nuxt.config.ts` and starts
121
+ one script loader in the browser after hydration, once it has applied the
122
+ visitor's stored choice and privacy signals. Keep `scripts` out of
123
+ `nuxt.config.ts`, which reaches the browser as JSON and drops the vendor
124
+ callbacks. Write the vendor IDs into `consent-scripts.ts`. See
125
+ [Nuxt scripts and embeds](https://v3.c15t.com/docs/frameworks/nuxt/scripts).
126
+
127
+ **Vue**
128
+
129
+ Pass the scripts to the existing `c15tVue` plugin call in `src/main.ts`:
130
+
131
+ ```ts title="src/main.ts"
132
+ import { c15tVue, manifest } from 'c15t/vue/vue-plugin';
133
+ import { scripts } from './consent-scripts';
134
+
135
+ app.use(c15tVue, {
136
+ mode: manifest(),
137
+ scripts,
138
+ });
139
+ ```
140
+
141
+ Keep your existing `mode` and other options. The plugin starts one
142
+ script loader when the app mounts, after it has applied the visitor's stored
143
+ choice. Do not also call `createScriptLoader` from a component. See
144
+ [Vue scripts and embeds](https://v3.c15t.com/docs/frameworks/vue/scripts).
145
+
146
+ **Astro**
147
+
148
+ Add the scripts to the client entrypoint from the
149
+ [Astro quickstart](https://v3.c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`,
150
+ which the integration finds on its own. Keep `astro.config.mjs` as it is.
151
+ If the module already exports scripts, combine the two arrays.
152
+
153
+ ```ts title="src/c15t.client.ts"
154
+ import type { C15tClientOptionsExtension } from 'c15t/astro';
155
+ import { scripts } from './consent-scripts';
156
+
157
+ export default { scripts } satisfies C15tClientOptionsExtension;
158
+ ```
159
+
160
+ Vendor helpers contain callbacks, and the integration options in
161
+ `astro.config.mjs` are serialized into the page, so do not put helpers in
162
+ the integration's `scripts` option. The integration passes the client
163
+ entrypoint to the one runtime every page shares, including across
164
+ `ClientRouter` navigation.
165
+
166
+ **Svelte**
167
+
168
+ Import the scripts in the component that owns your existing provider and
169
+ pass them as a top-level prop:
170
+
171
+ ```svelte title="src/App.svelte"
172
+ <script lang="ts">
173
+ import { ConsentProvider, manifest } from '@c15t/svelte';
174
+ import { scripts } from './consent-scripts';
175
+ </script>
176
+
177
+ <ConsentProvider mode={manifest()} {scripts}>
178
+ <!-- Keep your application, consent UI and preferences link here. -->
179
+ </ConsentProvider>
180
+ ```
181
+
182
+ Retain the styles and consent UI from the [Svelte quickstart](https://v3.c15t.com/docs/frameworks/svelte/quickstart).
183
+ The provider owns the loader and disposes it on unmount.
184
+
185
+ **SvelteKit**
186
+
187
+ Add the scripts to the existing `ConsentRoot` in the root layout. Keep the
188
+ handle and the layout load from the [SvelteKit quickstart](https://v3.c15t.com/docs/frameworks/sveltekit/quickstart).
189
+
190
+ ```svelte title="src/routes/+layout.svelte"
191
+ <script lang="ts">
192
+ import { ConsentRoot } from '@c15t/svelte';
193
+ import { scripts } from '../consent-scripts';
194
+
195
+ let { children, data } = $props();
196
+ </script>
197
+
198
+ <ConsentRoot state={data.consent} {scripts}>
199
+ {@render children()}
200
+ <!-- Keep your consent UI and preferences link here. -->
201
+ </ConsentRoot>
202
+ ```
203
+
204
+ Import vendor helpers in the layout component, not in `+layout.server.ts`:
205
+ a server load cannot send functions to the browser. Prerendered, static and
206
+ SPA-mode pages use the same `scripts` prop. If you pass an externally owned
207
+ `runtime` to the provider, register scripts when creating that runtime instead.
208
+
209
+ **HTML**
210
+
211
+ The helpers in `@c15t/integrations` are ES modules that need a bundler. On a
212
+ page that loads the c15t script tag, paste the vendor's own snippet instead
213
+ and keep it inert until its category is allowed:
214
+
215
+ ```html
216
+ <script type="text/plain" data-c15t-category="measurement">
217
+ // The vendor's snippet, unchanged
218
+ </script>
219
+ ```
220
+
221
+ Use the category this guide names for the vendor. c15t runs the snippet
222
+ once that category is allowed, and reloads the page when the visitor
223
+ withdraws it. Helper options on this page, such as `loadMode`, do not apply
224
+ to a pasted snippet. See [HTML scripts](https://v3.c15t.com/docs/frameworks/html/scripts).
225
+
226
+ **JavaScript**
227
+
228
+ Pass the scripts to `init()` from `@c15t/browser`, next to your mode:
229
+
230
+ ```ts
231
+ import { init, manifest } from '@c15t/browser';
232
+ import { scripts } from './consent-scripts';
233
+
234
+ const consent = init({
235
+ mode: manifest(),
236
+ scripts,
237
+ });
238
+ ```
239
+
240
+ Keep the mode from your quickstart. With
241
+ `createConsentRuntime` from `c15t/runtime`, pass `scripts` to it instead.
242
+ A kernel you create yourself needs a loader from
243
+ `c15t/modules/script-loader`. Attach one loader per kernel. See
244
+ [JavaScript scripts](https://v3.c15t.com/docs/frameworks/javascript/scripts).
245
+
246
+ ## Use your own Sentry SDK
247
+
248
+ For `@sentry/*` 10.67.0 or later, pass your SDK's functions instead of `dsn`.
249
+ Keep Replay in a separate module so it can load after consent:
250
+
251
+ ```ts title="src/sentry-replay.ts"
252
+ import { replayIntegration } from '@sentry/browser';
253
+
254
+ export const createReplay = () =>
255
+ replayIntegration({ maskAllText: true, blockAllMedia: true });
256
+ ```
257
+
258
+ In `src/consent-scripts.ts`, replace the CDN configuration with:
259
+
260
+ ```ts
261
+ import { getClient, init, setUser } from '@sentry/browser';
262
+
263
+ sentry({
264
+ getClient,
265
+ init,
266
+ setUser,
267
+ initOptions: {
268
+ dsn: 'https://your-key@o0.ingest.sentry.io/0',
269
+ replaysSessionSampleRate: 0.1,
270
+ replaysOnErrorSampleRate: 1,
271
+ },
272
+ replay: {
273
+ load: () => import('./sentry-replay').then((m) => m.createReplay()),
274
+ },
275
+ });
276
+ ```
277
+
278
+ Passing `init` protects startup captures before other SDK integrations run.
279
+ Custom initializers must forward the supplied options to `Sentry.init`, including
280
+ after a dynamic import. Avoid initialization as an import side effect.
281
+
282
+ Use named imports from the same Sentry package throughout your app. Next.js and
283
+ Vite split dynamically imported Replay into its own chunk; esbuild and Bun keep
284
+ it in the main bundle. A main-bundle `Sentry.replayIntegration` reference through
285
+ `import * as Sentry` also prevents the split.
286
+
287
+ ### If Sentry already initializes independently
288
+
289
+ c15t applies filters once it finds the client; it cannot retract earlier data.
290
+ For startup protection, disable collection and remove event users in your own
291
+ `Sentry.init` call. With SDK 10.67, omit `queues`:
292
+
293
+ ```ts
294
+ // Include these options in your app's Sentry.init call.
295
+ maxBreadcrumbs: 0,
296
+ dataCollection: {
297
+ userInfo: false,
298
+ cookies: false,
299
+ httpHeaders: { request: false, response: false },
300
+ httpBodies: [],
301
+ urlQueryParams: false,
302
+ graphQL: { document: false, variables: false },
303
+ genAI: { inputs: false, outputs: false },
304
+ databaseQueryData: false,
305
+ queues: false,
306
+ stackFrameVariables: false,
307
+ frameContextLines: 0,
308
+ },
309
+ beforeSend(event) {
310
+ delete event.user;
311
+ delete event.request;
312
+ return event;
313
+ },
314
+ ```
315
+
316
+ These settings keep collection and event users disabled after consent too.
317
+ To restore event users, check effective c15t permission in `beforeSend`. Wait
318
+ until the adapter is registered before assigning scope users or capturing logs
319
+ and metrics.
320
+
321
+ ## Options
322
+
323
+ | Option | Default | Behavior |
324
+ | ----------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
325
+ | `dsn` | Required to load Sentry | Your project's DSN. c15t loads the SDK and calls `Sentry.init`. A blank DSN logs an error and the script does not load. |
326
+ | `initOptions` | `{}` | Passed to `Sentry.init` with c15t's consent integration first. CDN `integrations` callbacks can access `window.Sentry`. |
327
+ | `version` | `'11.4.0'` | SDK version to load. Another version loads without subresource integrity. |
328
+ | `tracing` | `true` when traces are sampled | Loads the tracing bundle and adds `browserTracingIntegration()`. |
329
+ | `replay` | Loads CDN Replay when sampled | CDN: `{ category, options }` or `false`. SDK: `{ category, load }`. |
330
+ | `getClient` | Required for your own SDK | Your SDK's `getClient`. Supports initialization after c15t starts. |
331
+ | `setUser` | None | `setUser` from your Sentry SDK. Called with `null` while user data is not allowed. Required with `pii.user`. |
332
+ | `init` | None | Your SDK's `init`, called once when `loadMode` allows. Required for SDK mode with `'after-consent'`. |
333
+ | `replay.load` | None | With your own SDK, returns a new `replayIntegration()`. Called once, the first time Replay is allowed. |
334
+ | `loadMode` | `'always'` | When error monitoring runs. See the table below. |
335
+ | `replay.category` | `'measurement'` | Consent condition for Replay. `pii.category` must also be allowed. |
336
+ | `pii.category` | `'measurement'` | Consent condition for SDK data collection and user data. `'necessary'` permits it while the Sentry vendor is enabled. |
337
+ | `pii.user` | None | Returns the user to set when user data becomes allowed. |
338
+ | `onError` | Report to an available Sentry client | Receives CDN and Replay lifecycle failures. Set it to report CDN download failures before Sentry exists. |
339
+
340
+ Replay's category is registered only with an SDK `replay.load` function or
341
+ enabled CDN Replay with a positive sample rate.
342
+
343
+ ## Loading and revocation
344
+
345
+ | `loadMode` | When Sentry runs | On withdrawal without a reload |
346
+ | ----------------- | ----------------------------------- | ----------------------------------------------------------- |
347
+ | `'always'` | On every page, before consent | Replay stops; errors keep reaching Sentry without user data |
348
+ | `'after-consent'` | Only while `measurement` is allowed | Sentry stops sending anything |
349
+
350
+ Replay needs both `replay.category` and `pii.category`, because recordings
351
+ include page URLs with queries and fragments. Keep Replay out of `Sentry.init`:
352
+ `replaysOnErrorSampleRate` can buffer recordings before consent. On denial or
353
+ final removal, c15t stops Replay without flushing, discards queued uploads and
354
+ blocks restarts. Data already sent stays in Sentry; a later grant preserves
355
+ the original sampling decision.
356
+
357
+ While PII is denied, c15t disables supported `dataCollection` settings and IP
358
+ inference. Before sending, it removes user fields, feedback contact details,
359
+ visitor identifiers in sessions, request data and URL queries/fragments from
360
+ supported events, spans, logs, metrics and breadcrumbs, including retained
361
+ breadcrumbs. A grant restores your resolved collection settings and allowlists.
362
+ Tracing itself is not gated. Custom messages, tags, extras, attachments and
363
+ URL paths remain diagnostics, so keep sensitive values out of them.
364
+
365
+ The vendor slug is `sentry`. Turning it off denies Replay and PII, plus errors
366
+ in `'after-consent'` mode. See [vendor consent](./overview.md#vendor-switches-and-cookie-cleanup).
367
+
368
+ ### Shared clients and configuration changes
369
+
370
+ Keep callback functions stable across renders. Equal options and callbacks
371
+ reuse the SDK bundle and active recording. Changed CDN options initialize a
372
+ client with the new DSN and settings, while reusing the page's single Replay
373
+ recorder. Its original Replay options and sampling decision last until reload.
374
+
375
+ Every active configuration targeting one client must allow each feature;
376
+ removing a loader releases its restriction and preserves surviving loaders and
377
+ downloads. Final removal denies PII and stops Replay, and also disables errors
378
+ in `'after-consent'` mode. An app-initiated `Sentry.close()` stays closed after
379
+ a grant. Separate clients have separate permissions.
380
+
381
+ ## Content security policy
382
+
383
+ Allow `worker-src blob:` for Replay and your ingest or tunnel endpoint in
384
+ `connect-src`. CDN mode also needs `https://browser.sentry-cdn.com` in
385
+ `script-src`. The loader or provider's `nonce` applies to both CDN bundles;
386
+ a per-script nonce overrides it.
387
+
388
+ ## Verify Sentry
389
+
390
+ Test in a private window with an opt-in policy and
391
+ `replaysSessionSampleRate: 1`. Filter DevTools Network by `sentry`.
392
+
393
+ 1. Load the page. `bundle.min.js` loads and errors reach Sentry, without `user`.
394
+ No `replay.min.js` or `replay_recording` request is sent. With
395
+ `loadMode: 'after-consent'`, nothing loads.
396
+ 2. Allow measurement. Without a reload, Replay loads and `replay_recording`
397
+ requests start.
398
+ 3. Turn measurement off and save. c15t reloads the page, and no replay request
399
+ follows.
400
+
401
+ See the [consent verification guide](../guides/verify-consent.md) for
402
+ navigation, expiry and hosting checks.