@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
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: DevTools
3
- description: A development tool for inspecting consent state, geolocation,
4
- loaded scripts, and consent events in real time.
3
+ description: Inspect consent state, location, loaded scripts and consent events
4
+ in a React app during development with the c15t DevTools panel.
5
5
  group: frameworks
6
6
  ---
7
7
 
@@ -12,42 +12,44 @@ group: frameworks
12
12
 
13
13
  ## Installation
14
14
 
15
- No extra package is required for a framework adapter. The adapter and its
16
- engine are included with the `c15t` package and the dedicated
17
- `@c15t/svelte` adapter. Install `@c15t/dev-tools` directly only
18
- when you need the imperative `createDevTools({ kernel })` API.
15
+ No extra package is required. The React adapter and its engine are included
16
+ with the `c15t` package. Install `@c15t/dev-tools` directly only when you
17
+ need the imperative `createDevTools({ kernel })` API.
19
18
 
20
- ## Usage
19
+ ## Render DevTools in development builds
21
20
 
22
- This example uses Vite's `import.meta.env.DEV` build-time flag. For another
23
- bundler, use its development flag instead. For example, webpack projects can
24
- use a configured `process.env.NODE_ENV === 'development'` replacement;
25
- `process` is not a browser global.
21
+ Render `DevTools` inside `ConsentProvider`. This example loads it only in
22
+ development with Vite's `import.meta.env.DEV` flag, so production bundles never
23
+ download it. For another bundler, use its development flag instead; for
24
+ example, webpack projects can use a configured
25
+ `process.env.NODE_ENV === 'development'` replacement, since `process` is not a
26
+ browser global.
26
27
 
27
- ```tsx
28
- import { lazy, Suspense, type ReactNode } from 'react';
29
- import { ConsentProvider, hosted } from 'c15t/react';
30
-
31
- const DevTools =
32
- import.meta.env.DEV
33
- ? lazy(() =>
34
- import('c15t/react/devtools').then(({ DevTools }) => ({ default: DevTools })),
35
- )
36
- : () => null;
28
+ ```tsx title="src/consent-devtools.tsx"
29
+ import { lazy, Suspense } from 'react';
37
30
 
38
- export function ConsentManager({ children }: { children: ReactNode }) {
39
- return (
40
- <ConsentProvider options={{ mode: hosted({ url: 'https://your-instance.c15t.dev' }) }}>
41
- {children}
42
- <Suspense fallback={null}>
43
- <DevTools />
44
- </Suspense>
45
- </ConsentProvider>
46
- );
31
+ const DevTools = import.meta.env.DEV
32
+ ? lazy(() =>
33
+ import('c15t/react/devtools').then(({ DevTools }) => ({
34
+ default: DevTools,
35
+ }))
36
+ )
37
+ : null;
38
+
39
+ export function ConsentDevTools() {
40
+ return DevTools ? (
41
+ <Suspense fallback={null}>
42
+ <DevTools />
43
+ </Suspense>
44
+ ) : null;
47
45
  }
48
46
  ```
49
47
 
50
- Import the adapter from `c15t/react/devtools` when you use the umbrella package, or `c15t/react/devtools` when you install the React package directly. `@c15t/dev-tools` exports the imperative engine, not the React component.
48
+ Render `<ConsentDevTools />` inside the provider from your
49
+ [quickstart](../quickstart.md), next to the banner. Import the
50
+ component from `c15t/react/devtools` when you installed the `c15t` package, or
51
+ from `@c15t/react/devtools` when you installed `@c15t/react` directly.
52
+ `@c15t/dev-tools` exports the imperative engine, not the React component.
51
53
 
52
54
  If the CLI cannot identify your bundler's development flag, it generates
53
55
  `const DevTools = false` with a setup comment. Replace `false` with your
@@ -69,14 +71,39 @@ DevTools disabled instead of assuming browser globals or loading it in productio
69
71
  `position` accepts any corner: `top-left`, `top-right`, `bottom-left`, or
70
72
  `bottom-right`. Set `defaultOpen` to open the initial panel and `defaultTab`
71
73
  to choose that panel. `maxEvents` limits captured kernel and script events.
72
- Set `disabled` to prevent mounting without removing the component.
74
+ Set `disabled` to prevent mounting without removing the component. The
75
+ panel renders inside a shadow root by default, so page CSS does not reach
76
+ it. `shadow={false}` mounts it in the light DOM with its stylesheet in
77
+ `<head>`.
78
+
79
+ ## Open DevTools from the consent trigger
80
+
81
+ While `ConsentDialogTriggerToolbar` or the ready-made `ConsentDialogTrigger`
82
+ is visible, the trigger shows a DevTools button and DevTools hides its own
83
+ floating launcher, so one control occupies the corner. The button sits at the
84
+ end of the toolbar farthest from its corner. The panel opens just past the
85
+ toolbar, aligned with its outer edge, and follows it when a visitor drags the
86
+ toolbar to another corner. `position` applies again once no trigger is
87
+ visible.
88
+
89
+ `ConsentDialogTrigger` becomes a two-button toolbar while DevTools is
90
+ mounted. A trigger composed from `ConsentDialogTrigger.Root` keeps its own
91
+ markup, and DevTools keeps its floating launcher beside it.
92
+
93
+ DevTools brings its launcher back whenever no trigger is visible, for example
94
+ while `showWhen="after-prompt"` waits for a choice. A production build that
95
+ loads DevTools only in development shows no DevTools button in the trigger.
96
+
97
+ With the imperative engine, call `devTools.dock({ position, inline, block })`
98
+ to hide the launcher and anchor the panel `inline` and `block` pixels from the
99
+ viewport edges of `position`'s corner. Call `devTools.dock(null)` to restore
100
+ the launcher.
73
101
 
74
102
  ## Panels
75
103
 
76
104
  Accept and reject apply only to categories displayed by the provider, leaving
77
- hidden consent values unchanged. `necessary` always remains enabled. Svelte
78
- and Vue adapters use their provider's displayed categories; the kernel and
79
- React adapter use the current policy categories by default.
105
+ hidden consent values unchanged. `necessary` always remains enabled. The
106
+ React adapter uses the current policy categories by default.
80
107
 
81
108
  For an imperative integration with a narrower UI, pass
82
109
  `getConsentCategories: () => ['necessary', 'measurement']` to
@@ -91,7 +118,7 @@ explicit scope or policy categories, bulk saves cover all known categories.
91
118
  | ------------ | -------------------------------------------------------------------------------------------- |
92
119
  | **Consents** | Inspect and save categories, accept all, or reject optional categories |
93
120
  | **Scripts** | Configured scripts, loading status, search, and external page resources |
94
- | **Location** | Detected jurisdiction, country, region, and consent model |
121
+ | **Location** | Resolved country and region, and location overrides |
95
122
  | **Policy** | Resolved policy and UI configuration |
96
123
  | **IAB** | Edit vendors, purposes, legitimate interests, and special features; save and copy TC strings |
97
124
  | **Events** | Timeline of consent changes, kernel events, and script lifecycle events |
@@ -168,55 +195,6 @@ For custom inspection tools, `getIABControls(kernel)` and
168
195
  The getter returns undefined before module initialization and after disposal.
169
196
  A snapshot without an attached IAB module is read-only in DevTools.
170
197
 
171
- ## Vue and Svelte
172
-
173
- Vue imports `ConsentDevTools` from `c15t/vue/devtools`.
174
- Render it in the app where the c15t plugin provides
175
- the kernel. In Nuxt, the configured c15t module provides that context.
176
-
177
- ```vue
178
- <script setup lang="ts">
179
- import { defineAsyncComponent } from 'vue';
180
-
181
- const DevTools = import.meta.env.DEV
182
- ? defineAsyncComponent(() => import('c15t/vue/devtools'))
183
- : null;
184
- </script>
185
-
186
- <template>
187
- <DevTools v-if="DevTools" position="bottom-right" />
188
- </template>
189
- ```
190
-
191
- In Nuxt, use `import.meta.dev` instead of `import.meta.env.DEV`.
192
- Svelte imports the adapter from `@c15t/svelte/devtools` and renders it
193
- inside `ConsentManagerProvider`.
194
-
195
- ```svelte
196
- <script lang="ts">
197
- import { ConsentManagerProvider, offline } from '@c15t/svelte';
198
-
199
- const devTools = import.meta.env.DEV
200
- ? import('@c15t/svelte/devtools')
201
- : null;
202
- </script>
203
-
204
- <ConsentManagerProvider options={{ mode: offline() }}>
205
- {#if devTools}
206
- {#await devTools then { ConsentDevTools }}
207
- <ConsentDevTools position="bottom-right" />
208
- {/await}
209
- {/if}
210
- </ConsentManagerProvider>
211
- ```
212
-
213
- Both adapters accept `position`, `defaultOpen`, `defaultTab`, `maxEvents`,
214
- `shadow` (`false` renders into the page instead of a shadow root),
215
- and `getConsentCategories`. Changing these presentation options recreates
216
- the panel and clears its event history. They do not accept React's `disabled`
217
- prop; conditionally render them instead. Unmounting removes the panel and
218
- subscriptions without changing consent.
219
-
220
198
  ## TanStack Devtools
221
199
 
222
200
  Each embedded panel owns its event history and subscriptions. Unmounting it
@@ -257,6 +235,19 @@ export function AppDevtools() {
257
235
 
258
236
  In a Next.js app, import `c15tDevtools` from `c15t/next/devtools` instead. Scoped installs use `@c15t/react/devtools` and `@c15t/nextjs/devtools`.
259
237
 
238
+ The c15t panel follows the TanStack Devtools light or dark theme, not your app's consent theme. If you write the plugin entry yourself, use a render function and pass the theme to `C15tTanStackDevtoolsPanel`:
239
+
240
+ ```tsx
241
+ import { C15tTanStackDevtoolsPanel } from 'c15t/react/devtools';
242
+
243
+ const c15tPlugin = {
244
+ name: 'Consent',
245
+ render: (_element: HTMLElement, { theme }: { theme: 'light' | 'dark' }) => (
246
+ <C15tTanStackDevtoolsPanel theme={theme} />
247
+ ),
248
+ };
249
+ ```
250
+
260
251
  ## Props
261
252
 
262
253
  | Property | Type | Description | Default | Required |
@@ -0,0 +1,113 @@
1
+ ---
2
+ title: Components
3
+ description: Every c15t component a React app imports from c15t/react, what each
4
+ renders, where each one mounts, and which to start with.
5
+ group: frameworks
6
+ ---
7
+
8
+ ## Component reference
9
+
10
+ `c15t/react` exports the provider, the consent UI and the hooks from one
11
+ import path. Every component except `ConsentProvider` and `ConsentTheme`
12
+ reads the runtime the provider creates, so render them inside
13
+ `ConsentProvider`.
14
+
15
+ | Component | Renders | Reference |
16
+ | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
17
+ | `ConsentProvider` | The consent runtime, which loads the policy, stores the choice and loads scripts. No markup of its own | [ConsentProvider](./components/consent-provider.md) |
18
+ | `ConsentBanner` | The banner, when the visitor's policy asks for one | [ConsentBanner](./components/consent-banner.md) |
19
+ | `ConsentDialog` | The preference center as a modal | [ConsentDialog](./components/consent-dialog.md) |
20
+ | `ConsentWidget` | The preference center inline in a page, for a privacy route | [ConsentWidget](./components/consent-widget.md) |
21
+ | `ConsentDialogLink` | An unstyled button that opens the dialog, for your footer | [ConsentDialogLink](./components/consent-dialog-link.md) |
22
+ | `ConsentDialogTrigger` | A floating, draggable button that opens the dialog. `ConsentDialogTriggerToolbar` adds your own actions beside it | [ConsentDialogTrigger](./components/consent-dialog-trigger.md) |
23
+ | `ConsentGate` | Its children while a category is allowed, a placeholder otherwise | [ConsentGate](./components/consent-gate.md) |
24
+ | `ConsentTheme` | A `<style>` element with your theme tokens | [Customize](./customize.md) |
25
+ | `DevTools` from `c15t/react/devtools` | A development panel for consent state, scripts and events | [DevTools](./components/dev-tools.md) |
26
+
27
+ Mount one `ConsentProvider` at the root of the app and keep it mounted across
28
+ client navigation. The provider reads `mode` and its module options once,
29
+ when it mounts.
30
+
31
+ ## Start with the provider, banner and dialog
32
+
33
+ Most apps start with four components. `ConsentProvider` holds the runtime,
34
+ `ConsentBanner` and `ConsentDialog` ask for a choice, and a
35
+ `ConsentDialogLink` lets visitors reopen their preferences. The [quickstart](./quickstart.md) puts them in
36
+ one file:
37
+
38
+ ```tsx title="src/consent.tsx"
39
+ import { posthog } from '@c15t/integrations/posthog';
40
+ import {
41
+ ConsentBanner,
42
+ ConsentDialog,
43
+ ConsentDialogLink,
44
+ ConsentProvider,
45
+ hosted,
46
+ } from 'c15t/react';
47
+ import type { ReactNode } from 'react';
48
+
49
+ const options = {
50
+ // Asks VITE_C15T_BACKEND_URL for each visitor's policy.
51
+ mode: hosted(),
52
+ scripts: [
53
+ posthog({
54
+ id: 'phc_your_project_key',
55
+ initOptions: { cookieless_mode: 'never' },
56
+ loadMode: 'after-consent',
57
+ }),
58
+ ],
59
+ };
60
+
61
+ export const Consent = ({ children }: { children: ReactNode }) => (
62
+ <ConsentProvider options={options}>
63
+ {children}
64
+ <ConsentBanner />
65
+ <ConsentDialog />
66
+ <footer>
67
+ <ConsentDialogLink>Privacy settings</ConsentDialogLink>
68
+ </footer>
69
+ </ConsentProvider>
70
+ );
71
+ ```
72
+
73
+ Add `ConsentWidget`, `ConsentDialogTrigger` or `ConsentGate` later, where a
74
+ page needs them. Keep `ConsentDialog` mounted even when you add a widget,
75
+ because the banner's Customize button and every dialog link open it.
76
+
77
+ ## Server-rendered React apps
78
+
79
+ React Router framework mode, Remix and other server-rendered React apps use the
80
+ same components. `ConsentProvider` renders on the server without touching
81
+ browser APIs, and the banner mounts after hydration, once the browser has
82
+ resolved the policy. [Rendering](./rendering.md#react-router-remix-and-other-server-rendered-apps)
83
+ explains the trade-off.
84
+
85
+ ## IAB TCF components
86
+
87
+ Import `IABProvider`, `IABConsentBanner` and `IABConsentDialog` from
88
+ `c15t/react/iab`, render them inside `ConsentProvider` next to
89
+ `ConsentBanner` and `ConsentDialog`, and load `c15t/react/styles.css` and
90
+ `c15t/react/iab/styles.css` with `styles: false`. The stock banner and dialog stay closed
91
+ under an IAB policy. See
92
+ [IAB TCF](./iab.md).
93
+
94
+ ## Other entry points
95
+
96
+ | Import | Exports | Use |
97
+ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------- |
98
+ | `c15t/react/consent-banner`, `c15t/react/consent-dialog`, `c15t/react/consent-widget`, `c15t/react/consent-dialog-link`, `c15t/react/consent-dialog-trigger`, `c15t/react/consent-gate` | One component each | A module that needs one component without the rest of the adapter |
99
+ | `c15t/react/headless` | Headless hooks | Your own banner and dialog markup. See [headless](./headless.md) |
100
+ | `c15t/react/server` | `fetchSSRData` and its helpers | Resolve `/init` in a server loader. See [rendering](./rendering.md#skip-the-browsers-first-init-request) |
101
+ | `c15t/react/devtools` | `DevTools` | Development only |
102
+
103
+ ## Check the components
104
+
105
+ Load the app in a private window under a policy that asks for a choice:
106
+
107
+ 1. The banner shows, and DevTools Network has no requests to your vendors'
108
+ hosts.
109
+ 2. Click the footer's `ConsentDialogLink`. The dialog opens with every optional
110
+ category off.
111
+ 3. Allow one category and save. Its vendor requests appear, and a
112
+ `ConsentGate` for that category mounts its children.
113
+ 4. Reload. The banner stays closed, and the link still reopens the dialog.