@c15t/react 2.0.4 → 2.2.0-canary-20260727202135

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 (332) hide show
  1. package/AGENTS.md +155 -0
  2. package/README.md +29 -14
  3. package/client/components/integrations.js +3 -0
  4. package/dist/components/consent-banner/atoms/overlay.cjs +1 -1
  5. package/dist/components/consent-banner/atoms/root.cjs +1 -1
  6. package/dist/components/consent-banner/components.cjs +1 -1
  7. package/dist/components/consent-banner/consent-banner.cjs +1 -1
  8. package/dist/components/consent-banner/error-boundary.cjs +1 -1
  9. package/dist/components/consent-banner/index.cjs +1 -1
  10. package/dist/components/consent-banner/policy-actions.cjs +1 -1
  11. package/dist/components/consent-dialog/atoms/card.cjs +1 -1
  12. package/dist/components/consent-dialog/atoms/overlay.cjs +1 -1
  13. package/dist/components/consent-dialog/atoms/root.cjs +1 -1
  14. package/dist/components/consent-dialog/consent-dialog.cjs +1 -1
  15. package/dist/components/consent-dialog/index.cjs +1 -1
  16. package/dist/components/consent-dialog-link/index.cjs +1 -1
  17. package/dist/components/consent-dialog-trigger/atoms/button.cjs +1 -1
  18. package/dist/components/consent-dialog-trigger/atoms/button.js +1 -1
  19. package/dist/components/consent-dialog-trigger/atoms/icon.cjs +1 -1
  20. package/dist/components/consent-dialog-trigger/atoms/root.cjs +1 -1
  21. package/dist/components/consent-dialog-trigger/atoms/text.cjs +1 -1
  22. package/dist/components/consent-dialog-trigger/atoms/toolbar.cjs +1 -0
  23. package/dist/components/consent-dialog-trigger/atoms/toolbar.js +1 -0
  24. package/dist/components/consent-dialog-trigger/consent-dialog-trigger-toolbar.cjs +1 -0
  25. package/dist/components/consent-dialog-trigger/consent-dialog-trigger-toolbar.js +1 -0
  26. package/dist/components/consent-dialog-trigger/consent-dialog-trigger.cjs +1 -1
  27. package/dist/components/consent-dialog-trigger/index.cjs +1 -1
  28. package/dist/components/consent-dialog-trigger/index.js +1 -1
  29. package/dist/components/consent-dialog-trigger/use-draggable.cjs +1 -1
  30. package/dist/components/consent-preferences-link/consent-preferences-link.cjs +1 -1
  31. package/dist/components/consent-preferences-link/index.cjs +1 -1
  32. package/dist/components/consent-widget/atoms/accordion.cjs +1 -1
  33. package/dist/components/consent-widget/atoms/button.cjs +1 -1
  34. package/dist/components/consent-widget/atoms/footer.cjs +1 -1
  35. package/dist/components/consent-widget/atoms/root.cjs +1 -1
  36. package/dist/components/consent-widget/consent-widget.cjs +1 -1
  37. package/dist/components/consent-widget/index.cjs +1 -1
  38. package/dist/components/consent-widget/policy-actions.cjs +1 -1
  39. package/dist/components/frame/atoms.cjs +1 -1
  40. package/dist/components/frame/atoms.js +1 -1
  41. package/dist/components/frame/frame.cjs +1 -1
  42. package/dist/components/frame/index.cjs +1 -1
  43. package/dist/components/iab-consent-banner/atoms/button-group.cjs +1 -1
  44. package/dist/components/iab-consent-banner/atoms/card.cjs +1 -1
  45. package/dist/components/iab-consent-banner/atoms/description.cjs +1 -1
  46. package/dist/components/iab-consent-banner/atoms/footer.cjs +1 -1
  47. package/dist/components/iab-consent-banner/atoms/header.cjs +1 -1
  48. package/dist/components/iab-consent-banner/atoms/overlay.cjs +1 -1
  49. package/dist/components/iab-consent-banner/atoms/root.cjs +1 -1
  50. package/dist/components/iab-consent-banner/atoms/title.cjs +1 -1
  51. package/dist/components/iab-consent-banner/iab-consent-banner.cjs +1 -1
  52. package/dist/components/iab-consent-banner/iab-consent-banner.js +1 -1
  53. package/dist/components/iab-consent-banner/index.cjs +1 -1
  54. package/dist/components/iab-consent-dialog/atoms/card.cjs +1 -1
  55. package/dist/components/iab-consent-dialog/atoms/content.cjs +1 -1
  56. package/dist/components/iab-consent-dialog/atoms/footer.cjs +1 -1
  57. package/dist/components/iab-consent-dialog/atoms/header.cjs +1 -1
  58. package/dist/components/iab-consent-dialog/atoms/overlay.cjs +1 -1
  59. package/dist/components/iab-consent-dialog/atoms/purpose-item.cjs +1 -1
  60. package/dist/components/iab-consent-dialog/atoms/root.cjs +1 -1
  61. package/dist/components/iab-consent-dialog/atoms/stack-item.cjs +1 -1
  62. package/dist/components/iab-consent-dialog/atoms/tabs.cjs +1 -1
  63. package/dist/components/iab-consent-dialog/atoms/vendor-list.cjs +1 -1
  64. package/dist/components/iab-consent-dialog/hooks/use-gvl-data.cjs +1 -1
  65. package/dist/components/iab-consent-dialog/iab-consent-dialog.cjs +1 -1
  66. package/dist/components/iab-consent-dialog/index.cjs +1 -1
  67. package/dist/components/iab-consent-dialog/use-iab-translations.cjs +1 -1
  68. package/dist/components/integrations/google-map.cjs +1 -0
  69. package/dist/components/integrations/google-map.js +1 -0
  70. package/dist/components/integrations/index.cjs +1 -0
  71. package/dist/components/integrations/index.js +1 -0
  72. package/dist/components/integrations/shared.cjs +1 -0
  73. package/dist/components/integrations/shared.js +1 -0
  74. package/dist/components/integrations/youtube-embed.cjs +1 -0
  75. package/dist/components/integrations/youtube-embed.js +1 -0
  76. package/dist/components/shared/libs/recursive-clone-children.cjs +1 -1
  77. package/dist/components/shared/libs/slot.cjs +1 -1
  78. package/dist/components/shared/libs/use-controllable-state.cjs +1 -1
  79. package/dist/components/shared/policy-actions.cjs +1 -1
  80. package/dist/components/shared/primitives/box.cjs +1 -1
  81. package/dist/components/shared/primitives/button.cjs +1 -1
  82. package/dist/components/shared/primitives/button.js +1 -1
  83. package/dist/components/shared/primitives/legal-links/index.cjs +1 -1
  84. package/dist/components/shared/primitives/legal-links/index.js +1 -1
  85. package/dist/components/shared/ui/accordion/accordion.cjs +1 -1
  86. package/dist/components/shared/ui/accordion/index.cjs +1 -1
  87. package/dist/components/shared/ui/animated-collapse/animated-collapse.cjs +1 -1
  88. package/dist/components/shared/ui/animated-collapse/index.cjs +1 -1
  89. package/dist/components/shared/ui/branding.cjs +1 -1
  90. package/dist/components/shared/ui/button/button.cjs +1 -1
  91. package/dist/components/shared/ui/button/index.cjs +1 -1
  92. package/dist/components/shared/ui/collapsible/collapsible.cjs +1 -1
  93. package/dist/components/shared/ui/collapsible/index.cjs +1 -1
  94. package/dist/components/shared/ui/dialog/dialog.cjs +1 -1
  95. package/dist/components/shared/ui/dialog/index.cjs +1 -1
  96. package/dist/components/shared/ui/icon.cjs +1 -1
  97. package/dist/components/shared/ui/logo.cjs +1 -1
  98. package/dist/components/shared/ui/preference-item/index.cjs +1 -1
  99. package/dist/components/shared/ui/preference-item/preference-item.cjs +1 -1
  100. package/dist/components/shared/ui/switch/index.cjs +1 -1
  101. package/dist/components/shared/ui/switch/switch.cjs +1 -1
  102. package/dist/components/shared/ui/tabs/index.cjs +1 -1
  103. package/dist/components/shared/ui/tabs/tabs.cjs +1 -1
  104. package/dist/context/consent-manager-context.cjs +1 -1
  105. package/dist/context/consent-tracking-context.cjs +1 -1
  106. package/dist/context/theme-context.cjs +1 -1
  107. package/dist/headless.cjs +1 -1
  108. package/dist/headless.js +1 -1
  109. package/dist/hooks/index.cjs +1 -1
  110. package/dist/hooks/index.js +1 -1
  111. package/dist/hooks/use-color-scheme.cjs +1 -1
  112. package/dist/hooks/use-component-config.cjs +1 -1
  113. package/dist/hooks/use-consent-dialog-trigger.cjs +1 -1
  114. package/dist/hooks/use-consent-manager.cjs +1 -1
  115. package/dist/hooks/use-consent-script.cjs +1 -0
  116. package/dist/hooks/use-consent-script.js +1 -0
  117. package/dist/hooks/use-focus-trap.cjs +1 -1
  118. package/dist/hooks/use-headless-consent-ui.cjs +1 -1
  119. package/dist/hooks/use-headless-iab-consent-ui.cjs +1 -1
  120. package/dist/hooks/use-reduced-motion.cjs +1 -1
  121. package/dist/hooks/use-scroll-lock.cjs +1 -1
  122. package/dist/hooks/use-ssr-status.cjs +1 -1
  123. package/dist/hooks/use-styles.cjs +1 -1
  124. package/dist/hooks/use-text-direction.cjs +1 -1
  125. package/dist/hooks/use-theme.cjs +1 -1
  126. package/dist/hooks/use-translations.cjs +1 -1
  127. package/dist/iab.cjs +1 -1
  128. package/dist/index.cjs +1 -1
  129. package/dist/index.js +1 -1
  130. package/dist/primitives/accordion.cjs +1 -1
  131. package/dist/primitives/button.cjs +1 -1
  132. package/dist/primitives/collapsible.cjs +1 -1
  133. package/dist/primitives/dialog.cjs +1 -1
  134. package/dist/primitives/preference-item.cjs +1 -1
  135. package/dist/primitives/switch.cjs +1 -1
  136. package/dist/primitives/tabs.cjs +1 -1
  137. package/dist/primitives.cjs +1 -1
  138. package/dist/providers/consent-manager-provider.cjs +1 -1
  139. package/dist/server/fetch-ssr-data.cjs +1 -1
  140. package/dist/server/fetch-ssr-data.js +1 -1
  141. package/dist/server/headers.cjs +1 -1
  142. package/dist/server/headers.js +1 -1
  143. package/dist/server/index.cjs +1 -1
  144. package/dist/server/init-cache-key.cjs +1 -1
  145. package/dist/server/normalize-url.cjs +1 -1
  146. package/dist/styles.tw3.css +1 -1
  147. package/dist/types/theme/index.cjs +1 -1
  148. package/dist/types/theme/style-types.cjs +1 -1
  149. package/dist/utils/cn.cjs +1 -1
  150. package/dist/utils/merge-styles.cjs +1 -1
  151. package/dist/utils/test-helpers.cjs +1 -1
  152. package/dist/utils/theme-utils.cjs +1 -1
  153. package/dist/version.cjs +1 -1
  154. package/dist/version.js +1 -1
  155. package/dist-types/components/consent-banner/components.d.ts +2 -2
  156. package/dist-types/components/consent-banner/policy-actions.d.ts +1 -1
  157. package/dist-types/components/consent-dialog/atoms/card.d.ts +5 -5
  158. package/dist-types/components/consent-dialog-trigger/atoms/toolbar.d.ts +22 -0
  159. package/dist-types/components/consent-dialog-trigger/consent-dialog-trigger-toolbar.d.ts +35 -0
  160. package/dist-types/components/consent-dialog-trigger/index.d.ts +2 -1
  161. package/dist-types/components/consent-dialog-trigger/types.d.ts +111 -6
  162. package/dist-types/components/consent-widget/atoms/accordion.d.ts +4 -4
  163. package/dist-types/components/consent-widget/consent-widget.d.ts +1 -1
  164. package/dist-types/components/consent-widget/policy-actions.d.ts +1 -1
  165. package/dist-types/components/integrations/google-map.d.ts +82 -0
  166. package/dist-types/components/integrations/index.d.ts +2 -0
  167. package/dist-types/components/integrations/shared.d.ts +12 -0
  168. package/dist-types/components/integrations/youtube-embed.d.ts +95 -0
  169. package/dist-types/components/shared/policy-actions.d.ts +1 -1
  170. package/dist-types/components/shared/primitives/button.d.ts +36 -2
  171. package/dist-types/components/shared/primitives/legal-links/index.d.ts +1 -1
  172. package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
  173. package/dist-types/components/shared/ui/branding.d.ts +3 -3
  174. package/dist-types/components/shared/ui/button/button.d.ts +1 -1
  175. package/dist-types/components/shared/ui/dialog/dialog.d.ts +1 -1
  176. package/dist-types/components/shared/ui/logo.d.ts +8 -8
  177. package/dist-types/headless.d.ts +1 -0
  178. package/dist-types/hooks/index.d.ts +1 -0
  179. package/dist-types/hooks/use-consent-script.d.ts +80 -0
  180. package/dist-types/index.d.ts +3 -1
  181. package/dist-types/providers/consent-manager-provider.d.ts +1 -1
  182. package/dist-types/server/headers.d.ts +1 -1
  183. package/dist-types/utils/theme-utils.d.ts +1 -1
  184. package/dist-types/version.d.ts +1 -1
  185. package/docs/README.md +155 -76
  186. package/docs/{building-headless-components.md → frameworks/react/building-headless-components.md} +3 -1
  187. package/docs/{callbacks.md → frameworks/react/callbacks.md} +3 -1
  188. package/docs/{components → frameworks/react/components}/consent-banner.md +10 -21
  189. package/docs/{components → frameworks/react/components}/consent-dialog-link.md +8 -5
  190. package/docs/frameworks/react/components/consent-dialog-trigger.md +202 -0
  191. package/docs/{components → frameworks/react/components}/consent-dialog.md +7 -15
  192. package/docs/frameworks/react/components/consent-manager-provider.md +228 -0
  193. package/docs/{components → frameworks/react/components}/consent-widget.md +8 -6
  194. package/docs/{components → frameworks/react/components}/dev-tools.md +9 -6
  195. package/docs/{components → frameworks/react/components}/frame.md +8 -9
  196. package/docs/{concepts → frameworks/react/concepts}/client-modes.md +4 -2
  197. package/docs/{concepts → frameworks/react/concepts}/consent-categories.md +1 -0
  198. package/docs/{concepts → frameworks/react/concepts}/consent-models.md +1 -0
  199. package/docs/{concepts → frameworks/react/concepts}/cookie-management.md +3 -3
  200. package/docs/{concepts → frameworks/react/concepts}/glossary.md +1 -0
  201. package/docs/{concepts → frameworks/react/concepts}/initialization-flow.md +1 -0
  202. package/docs/{concepts → frameworks/react/concepts}/policy-packs.md +1 -0
  203. package/docs/{headless.md → frameworks/react/headless.md} +3 -1
  204. package/docs/{hooks → frameworks/react/hooks}/use-color-scheme.md +1 -0
  205. package/docs/{hooks → frameworks/react/hooks}/use-consent-manager/checking-consent.md +3 -1
  206. package/docs/{hooks → frameworks/react/hooks}/use-consent-manager/location-info.md +3 -1
  207. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +172 -0
  208. package/docs/{hooks → frameworks/react/hooks}/use-consent-manager/setting-consent.md +3 -1
  209. package/docs/{hooks → frameworks/react/hooks}/use-draggable.md +3 -1
  210. package/docs/{hooks → frameworks/react/hooks}/use-focus-trap.md +1 -0
  211. package/docs/{hooks → frameworks/react/hooks}/use-reduced-motion.md +3 -1
  212. package/docs/{hooks → frameworks/react/hooks}/use-ssr-status.md +6 -5
  213. package/docs/{hooks → frameworks/react/hooks}/use-text-direction.md +1 -0
  214. package/docs/frameworks/react/hooks/use-translations.md +55 -0
  215. package/docs/{iab → frameworks/react/iab}/consent-banner.md +9 -12
  216. package/docs/{iab → frameworks/react/iab}/consent-dialog.md +9 -14
  217. package/docs/{iab → frameworks/react/iab}/overview.md +4 -2
  218. package/docs/{iab → frameworks/react/iab}/use-gvl-data.md +3 -2
  219. package/docs/{iframe-blocking.md → frameworks/react/iframe-blocking.md} +8 -9
  220. package/docs/{internationalization.md → frameworks/react/internationalization.md} +13 -3
  221. package/docs/{network-blocker.md → frameworks/react/network-blocker.md} +13 -51
  222. package/docs/{optimization.md → frameworks/react/optimization.md} +3 -2
  223. package/docs/{policy-packs.md → frameworks/react/policy-packs.md} +3 -1
  224. package/docs/{quickstart.md → frameworks/react/quickstart.md} +26 -42
  225. package/docs/frameworks/react/script-loader.md +553 -0
  226. package/docs/{server-side.md → frameworks/react/server-side.md} +9 -4
  227. package/docs/{styling → frameworks/react/styling}/classnames.md +3 -1
  228. package/docs/{styling → frameworks/react/styling}/color-scheme.md +3 -1
  229. package/docs/frameworks/react/styling/css-variables.md +53 -0
  230. package/docs/frameworks/react/styling/overview.md +302 -0
  231. package/docs/frameworks/react/styling/slots.md +94 -0
  232. package/docs/{styling → frameworks/react/styling}/tailwind.md +3 -1
  233. package/docs/frameworks/react/styling/tokens.md +156 -0
  234. package/docs/{troubleshooting.md → frameworks/react/troubleshooting.md} +3 -1
  235. package/docs/integrations/adobe-analytics.md +160 -0
  236. package/docs/integrations/ahrefs-analytics.md +157 -0
  237. package/docs/integrations/amplitude.md +230 -0
  238. package/docs/integrations/building-integrations.md +15 -181
  239. package/docs/integrations/clearbit.md +130 -0
  240. package/docs/integrations/cloudflare-web-analytics.md +126 -0
  241. package/docs/integrations/crisp.md +140 -0
  242. package/docs/integrations/databuddy.md +152 -150
  243. package/docs/integrations/fathom-analytics.md +150 -0
  244. package/docs/integrations/google-maps.md +263 -0
  245. package/docs/integrations/google-tag-manager.md +102 -101
  246. package/docs/integrations/google-tag.md +104 -92
  247. package/docs/integrations/heap.md +219 -0
  248. package/docs/integrations/hightouch.md +199 -0
  249. package/docs/integrations/hotjar.md +143 -0
  250. package/docs/integrations/intercom.md +144 -0
  251. package/docs/integrations/linkedin-insights.md +142 -90
  252. package/docs/integrations/logrocket.md +175 -0
  253. package/docs/integrations/matomo-analytics.md +171 -0
  254. package/docs/integrations/meta-pixel.md +379 -309
  255. package/docs/integrations/microsoft-clarity.md +173 -0
  256. package/docs/integrations/microsoft-uet.md +135 -91
  257. package/docs/integrations/mixpanel-analytics.md +130 -0
  258. package/docs/integrations/overview.md +119 -75
  259. package/docs/integrations/pirsch.md +142 -0
  260. package/docs/integrations/plausible-analytics.md +154 -0
  261. package/docs/integrations/posthog.md +186 -127
  262. package/docs/integrations/promptwatch.md +121 -0
  263. package/docs/integrations/reddit-pixel.md +241 -0
  264. package/docs/integrations/rudderstack.md +271 -0
  265. package/docs/integrations/rybbit-analytics.md +143 -0
  266. package/docs/integrations/segment.md +146 -0
  267. package/docs/integrations/snapchat-pixel.md +163 -0
  268. package/docs/integrations/tiktok-pixel.md +101 -91
  269. package/docs/integrations/umami-analytics.md +148 -0
  270. package/docs/integrations/vercel-analytics.md +141 -0
  271. package/docs/integrations/x-pixel.md +123 -109
  272. package/docs/integrations/youtube.md +193 -0
  273. package/docs/shared/concepts/client-modes.md +103 -0
  274. package/docs/shared/concepts/consent-categories.md +41 -0
  275. package/docs/shared/concepts/consent-models.md +72 -0
  276. package/docs/shared/concepts/cookie-management.md +88 -0
  277. package/docs/shared/concepts/glossary.md +24 -0
  278. package/docs/shared/concepts/initialization-flow.md +105 -0
  279. package/docs/shared/concepts/policy-packs.md +225 -0
  280. package/docs/shared/react/components/consent-banner.md +242 -0
  281. package/docs/shared/react/components/consent-dialog-link.md +45 -0
  282. package/docs/shared/react/components/consent-dialog-trigger.md +185 -0
  283. package/docs/shared/react/components/consent-dialog.md +119 -0
  284. package/docs/shared/react/components/consent-manager-provider.md +183 -0
  285. package/docs/shared/react/components/consent-widget.md +121 -0
  286. package/docs/shared/react/components/dev-tools.md +81 -0
  287. package/docs/shared/react/components/frame.md +52 -0
  288. package/docs/shared/react/guides/building-headless-components.md +110 -0
  289. package/docs/shared/react/guides/callbacks.md +89 -0
  290. package/docs/shared/react/guides/headless.md +31 -0
  291. package/docs/shared/react/guides/iframe-blocking.md +65 -0
  292. package/docs/shared/react/guides/internationalization.md +123 -0
  293. package/docs/shared/react/guides/network-blocker.md +72 -0
  294. package/docs/shared/react/guides/optimization.md +44 -0
  295. package/docs/shared/react/guides/policy-packs.md +173 -0
  296. package/docs/shared/react/guides/script-loader.md +309 -0
  297. package/docs/shared/react/hooks/use-color-scheme.md +31 -0
  298. package/docs/shared/react/hooks/use-consent-manager/checking-consent.md +95 -0
  299. package/docs/shared/react/hooks/use-consent-manager/location-info.md +96 -0
  300. package/docs/shared/react/hooks/use-consent-manager/overview.md +74 -0
  301. package/docs/shared/react/hooks/use-consent-manager/setting-consent.md +93 -0
  302. package/docs/shared/react/hooks/use-draggable.md +30 -0
  303. package/docs/shared/react/hooks/use-focus-trap.md +20 -0
  304. package/docs/shared/react/hooks/use-reduced-motion.md +33 -0
  305. package/docs/shared/react/hooks/use-ssr-status.md +16 -0
  306. package/docs/shared/react/hooks/use-text-direction.md +38 -0
  307. package/docs/shared/react/hooks/use-translations.md +15 -0
  308. package/docs/shared/react/iab/consent-banner.md +60 -0
  309. package/docs/shared/react/iab/consent-dialog.md +76 -0
  310. package/docs/shared/react/iab/overview.md +80 -0
  311. package/docs/shared/react/iab/use-gvl-data.md +21 -0
  312. package/docs/shared/react/styling/classnames.md +93 -0
  313. package/docs/shared/react/styling/color-scheme.md +35 -0
  314. package/docs/shared/react/styling/css-variables.md +53 -0
  315. package/docs/shared/react/styling/overview.md +261 -0
  316. package/docs/shared/react/styling/slots.md +93 -0
  317. package/docs/shared/react/styling/stylesheet-entrypoint.md +8 -0
  318. package/docs/shared/react/styling/tailwind.md +88 -0
  319. package/docs/shared/react/styling/tokens.md +155 -0
  320. package/docs/shared/troubleshooting.md +82 -0
  321. package/package.json +23 -12
  322. package/readme.json +12 -7
  323. package/docs/ai-agents.md +0 -111
  324. package/docs/components/consent-dialog-trigger.md +0 -103
  325. package/docs/components/consent-manager-provider.md +0 -425
  326. package/docs/hooks/use-consent-manager/overview.md +0 -420
  327. package/docs/hooks/use-translations.md +0 -118
  328. package/docs/script-loader.md +0 -321
  329. package/docs/styling/css-variables.md +0 -92
  330. package/docs/styling/overview.md +0 -460
  331. package/docs/styling/slots.md +0 -128
  332. package/docs/styling/tokens.md +0 -216
@@ -0,0 +1,202 @@
1
+ ---
2
+ title: ConsentDialogTrigger
3
+ description: A floating, draggable button that lets users re-open the consent
4
+ dialog at any time.
5
+ group: frameworks
6
+ ---
7
+ `ConsentDialogTrigger` is a floating button that opens the consent dialog when clicked. Users can drag it to any corner of the screen, and the position persists across sessions. Use it to give users a persistent way to manage their privacy settings.
8
+
9
+ ## Basic Usage
10
+
11
+ Use standalone or via the `showTrigger` prop on `ConsentDialog`:
12
+
13
+ ```tsx
14
+ import { ConsentDialogTrigger } from '@c15t/react';
15
+
16
+ // Standalone
17
+ <ConsentDialogTrigger />
18
+
19
+ // Via ConsentDialog
20
+ <ConsentDialog showTrigger />
21
+ ```
22
+
23
+ For inline footer links (instead of a floating button), use [`ConsentDialogLink`](/docs/frameworks/react/components/consent-dialog-link).
24
+
25
+ ## Icon Options
26
+
27
+ ```tsx
28
+ {/* Built-in icons */}
29
+ <ConsentDialogTrigger icon="branding" /> {/* c15t logo (default) */}
30
+ <ConsentDialogTrigger icon="fingerprint" /> {/* Privacy icon */}
31
+ <ConsentDialogTrigger icon="settings" /> {/* Gear icon */}
32
+
33
+ {/* Custom icon */}
34
+ <ConsentDialogTrigger icon={<MyCustomIcon />} />
35
+ ```
36
+
37
+ ## Configurable Toolbar
38
+
39
+ Use the separate `ConsentDialogTriggerToolbar` when you want to place app-owned controls beside the privacy trigger. It always renders exactly one built-in action that opens consent preferences, so `actions` only contains controls your app owns.
40
+
41
+ ```tsx
42
+ <ConsentDialogTriggerToolbar
43
+ ariaLabel="Site controls"
44
+ actions={[
45
+ {
46
+ id: 'theme',
47
+ label: isDark ? 'Switch to light theme' : 'Switch to dark theme',
48
+ icon: isDark ? <SunIcon /> : <MoonIcon />,
49
+ pressed: isDark,
50
+ onSelect: toggleColorScheme,
51
+ },
52
+ {
53
+ id: 'support',
54
+ label: 'Open support chat',
55
+ icon: <ChatIcon />,
56
+ onSelect: openSupportChat,
57
+ },
58
+ ]}
59
+ preferences={{
60
+ icon: 'fingerprint',
61
+ label: 'Manage privacy settings',
62
+ }}
63
+ />
64
+ ```
65
+
66
+ Each custom action requires a stable `id`, accessible `label`, `icon`, and `onSelect` callback. Use `pressed` for toggle actions and `disabled` for unavailable actions. Your app remains responsible for state, integrations, and changing the icon or label. The preferences action automatically moves to the edge nearest the toolbar's snapped corner while custom actions keep their configured order.
67
+
68
+ Toolbars are horizontal by default. Set `orientation="vertical"` to stack the actions and enable Up/Down arrow-key navigation:
69
+
70
+ ```tsx
71
+ <ConsentDialogTriggerToolbar
72
+ orientation="vertical"
73
+ actions={toolbarActions}
74
+ />
75
+ ```
76
+
77
+ ### Toolbar Styling
78
+
79
+ The toolbar follows the standard styling precedence: internal CSS module styles, provider theme slots, then direct component overrides. Use `className` and `style` on the toolbar, or on an individual action, and use `noStyle` for a fully custom implementation.
80
+
81
+ ```tsx
82
+ <ConsentManagerProvider
83
+ options={{
84
+ theme: {
85
+ slots: {
86
+ consentDialogTriggerToolbar: 'my-toolbar',
87
+ consentDialogTriggerToolbarItem: 'my-toolbar-item',
88
+ consentDialogTriggerToolbarIcon: 'my-toolbar-icon',
89
+ },
90
+ },
91
+ }}
92
+ >
93
+ <ConsentDialogTriggerToolbar
94
+ className="fixed-toolbar"
95
+ style={{ '--cdtt-offset': '24px' }}
96
+ actions={[
97
+ {
98
+ id: 'support',
99
+ label: 'Open support chat',
100
+ icon: <ChatIcon />,
101
+ onSelect: openSupportChat,
102
+ className: 'support-action',
103
+ },
104
+ ]}
105
+ />
106
+ </ConsentManagerProvider>
107
+ ```
108
+
109
+ Available toolbar theme slots are `consentDialogTriggerToolbar`, `consentDialogTriggerToolbarItem`, and `consentDialogTriggerToolbarIcon`.
110
+
111
+ With `noStyle`, use `data-corner`, `data-dragging`, and `data-snapping` on the toolbar to style its current position and interaction state.
112
+
113
+ ## Visibility
114
+
115
+ Control when the trigger is visible:
116
+
117
+ ```tsx
118
+ {/* Always visible (default) */}
119
+ <ConsentDialogTrigger showWhen="always" />
120
+
121
+ {/* Only after user has made a consent choice */}
122
+ <ConsentDialogTrigger showWhen="after-consent" />
123
+
124
+ {/* Hidden (control visibility programmatically) */}
125
+ <ConsentDialogTrigger showWhen="never" />
126
+ ```
127
+
128
+ ## Position
129
+
130
+ Set the default corner and control persistence:
131
+
132
+ ```tsx
133
+ <ConsentDialogTrigger
134
+ defaultPosition="bottom-left"
135
+ persistPosition={true} // Remembers user's drag position
136
+ onPositionChange={(position) => console.log('Moved to:', position)}
137
+ />
138
+ ```
139
+
140
+ ## Size
141
+
142
+ ```tsx
143
+ <ConsentDialogTrigger size="sm" /> {/* Small */}
144
+ <ConsentDialogTrigger size="md" /> {/* Medium (default) */}
145
+ <ConsentDialogTrigger size="lg" /> {/* Large */}
146
+ ```
147
+
148
+ ## Compound Components
149
+
150
+ Build fully custom trigger layouts using sub-components:
151
+
152
+ ```tsx
153
+ <ConsentDialogTrigger.Root defaultPosition="bottom-right">
154
+ <ConsentDialogTrigger.Button size="md">
155
+ <ConsentDialogTrigger.Icon icon="settings" />
156
+ <ConsentDialogTrigger.Text>Privacy</ConsentDialogTrigger.Text>
157
+ </ConsentDialogTrigger.Button>
158
+ </ConsentDialogTrigger.Root>
159
+ ```
160
+
161
+ * `ConsentDialogTrigger.Root` — Portal wrapper with drag handling and position persistence
162
+ * `ConsentDialogTrigger.Button` — Draggable button element with size variants
163
+ * `ConsentDialogTrigger.Icon` — Icon display (branding, fingerprint, settings, or custom)
164
+ * `ConsentDialogTrigger.Text` — Optional text label
165
+
166
+ ## Props
167
+
168
+ ### ConsentDialogTrigger
169
+
170
+ |Property|Value|
171
+ |:--|:--|
172
+ |Type Name|\`ConsentDialogTriggerProps\`|
173
+ |Source Path|\`./packages/react/src/components/consent-dialog-trigger/types.ts\`|
174
+
175
+ \*ExtractedTypeTable: Could not extract "ConsentDialogTriggerProps" from "./packages/react/src/components/consent-dialog-trigger/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
176
+
177
+ ### ConsentDialogTriggerToolbar
178
+
179
+ |Property|Value|
180
+ |:--|:--|
181
+ |Type Name|\`ConsentDialogTriggerToolbarProps\`|
182
+ |Source Path|\`./packages/react/src/components/consent-dialog-trigger/types.ts\`|
183
+
184
+ \*ExtractedTypeTable: Could not extract "ConsentDialogTriggerToolbarProps" from "./packages/react/src/components/consent-dialog-trigger/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
185
+
186
+ ### Toolbar Actions
187
+
188
+ |Property|Value|
189
+ |:--|:--|
190
+ |Type Name|\`ConsentDialogTriggerToolbarAction\`|
191
+ |Source Path|\`./packages/react/src/components/consent-dialog-trigger/types.ts\`|
192
+
193
+ \*ExtractedTypeTable: Could not extract "ConsentDialogTriggerToolbarAction" from "./packages/react/src/components/consent-dialog-trigger/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
194
+
195
+ ### Preferences Action
196
+
197
+ |Property|Value|
198
+ |:--|:--|
199
+ |Type Name|\`ConsentDialogTriggerToolbarPreferences\`|
200
+ |Source Path|\`./packages/react/src/components/consent-dialog-trigger/types.ts\`|
201
+
202
+ \*ExtractedTypeTable: Could not extract "ConsentDialogTriggerToolbarPreferences" from "./packages/react/src/components/consent-dialog-trigger/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: ConsentDialog
3
3
  description: A modal dialog where users can toggle individual consent categories.
4
+ group: frameworks
4
5
  ---
5
6
  `ConsentDialog` is a modal that shows toggles for each consent category. In **opt-in jurisdictions**, it typically opens when users click "Customize" on `ConsentBanner`. It can also be controlled programmatically for use on settings pages regardless of jurisdiction.
6
7
 
@@ -160,18 +161,9 @@ If the stock dialog structure still works, prefer tokens, slots, and provider co
160
161
 
161
162
  ## Props
162
163
 
163
- ### ConsentDialogProps
164
-
165
- |Property|Type|Description|Default|Required|
166
- |:--|:--|:--|:--|:--:|
167
- |theme|undefined|Theme configuration override (deprecated)|-|Optional|
168
- |disableAnimation|boolean \|undefined|Disables all animations when true|-|Optional|
169
- |noStyle|boolean \|undefined|Removes default styles when true|-|Optional|
170
- |scrollLock|boolean \|undefined|Locks the scroll when true|-|Optional|
171
- |trapFocus|boolean \|undefined|Traps keyboard focus within a dialog when true|-|Optional|
172
- |open|boolean \|undefined|Control the open state. If omitted the dialog follows \`useConsentManager().activeUI === 'dialog'\`.|-|Optional|
173
- |legalLinks|(keyof LegalLinksTranslations)\[] \|null \|undefined|Controls which legal links to display. Options: \`undefined\` (default): Shows all available legal links; \`null\`: Explicitly hides all legal links; Array of keys: Shows only the specified legal links|-|Optional|
174
- |hideBranding|boolean \|undefined|Controls whether to hide the branding in the dialog footer.|-|Optional|
175
- |showTrigger|ConsentDialogTriggerProps \|undefined|Show a floating trigger button to resurface the consent dialog. Useful for allowing users to re-open the dialog after dismissing. Options: \`true\` - Show trigger with default settings; \`false\` - Hide trigger (default); \`ConsentDialogTriggerProps\` - Show trigger with custom props|false|Optional|
176
- |models|Model \|undefined|Which consent models this dialog responds to.|\['opt-in', 'opt-out']|Optional|
177
- |uiSource|string \|undefined|Override the UI source identifier sent with consent API calls.|'dialog'|Optional|
164
+ |Property|Value|
165
+ |:--|:--|
166
+ |Type Name|\`ConsentDialogProps\`|
167
+ |Source Path|\`./packages/react/src/components/consent-dialog/consent-dialog.tsx\`|
168
+
169
+ \*ExtractedTypeTable: Could not extract "ConsentDialogProps" from "./packages/react/src/components/consent-dialog/consent-dialog.tsx" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -0,0 +1,228 @@
1
+ ---
2
+ title: ConsentManagerProvider
3
+ description: The root provider component that initializes the consent system and
4
+ makes consent state available to all child components.
5
+ group: frameworks
6
+ ---
7
+ `ConsentManagerProvider` is the root component for the c15t consent system. It initializes the consent store, detects the user's jurisdiction, resolves translations, and provides consent state to all child components via React context.
8
+
9
+ Every other c15t component and hook must be rendered inside this provider.
10
+
11
+ ## Basic Usage
12
+
13
+ ```tsx
14
+ import { type ReactNode } from 'react';
15
+ import { ConsentManagerProvider, ConsentBanner, ConsentDialog } from '@c15t/react';
16
+
17
+ export default function ConsentManager({ children }: { children: ReactNode }) {
18
+ return (
19
+ <ConsentManagerProvider
20
+ options={{
21
+ mode: 'hosted',
22
+ backendURL: 'https://your-instance.c15t.dev',
23
+ consentCategories: ['necessary', 'measurement', 'marketing'],
24
+ }}
25
+ >
26
+ <ConsentBanner />
27
+ <ConsentDialog />
28
+ {children}
29
+ </ConsentManagerProvider>
30
+ );
31
+ }
32
+ ```
33
+
34
+ ## Options Reference
35
+
36
+ |Property|Value|
37
+ |:--|:--|
38
+ |Type Name|\`CommonInlineStoreOptions\`|
39
+ |Source Path|\`./packages/ui/src/theme/options.ts\`|
40
+
41
+ \*ExtractedTypeTable: Could not extract "CommonInlineStoreOptions" from "./packages/ui/src/theme/options.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
42
+
43
+ |Property|Value|
44
+ |:--|:--|
45
+ |Type Name|\`ConsentManagerContentOptions\`|
46
+ |Source Path|\`./packages/ui/src/theme/options.ts\`|
47
+
48
+ \*ExtractedTypeTable: Could not extract "ConsentManagerContentOptions" from "./packages/ui/src/theme/options.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
49
+
50
+ |Property|Value|
51
+ |:--|:--|
52
+ |Type Name|\`UIOptions\`|
53
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
54
+
55
+ \*ExtractedTypeTable: Could not extract "UIOptions" from "./packages/ui/src/theme/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
56
+
57
+ ## Mode: hosted vs offline
58
+
59
+ ```tsx
60
+ // Hosted mode — persists to hosted backend
61
+ <ConsentManagerProvider
62
+ options={{
63
+ mode: 'hosted',
64
+ backendURL: 'https://your-instance.c15t.dev',
65
+ }}
66
+ >
67
+
68
+ // Offline mode — local cookie storage only
69
+ <ConsentManagerProvider
70
+ options={{
71
+ mode: 'offline',
72
+ }}
73
+ >
74
+ ```
75
+
76
+ See [Client Modes](/docs/frameworks/react/concepts/client-modes) for a detailed comparison.
77
+
78
+ ## Legal Links
79
+
80
+ `legalLinks` defines the URLs shown in consent UI text (banner, dialog, and widget where applicable).
81
+ Configure only the links you want to expose.
82
+
83
+ ```tsx
84
+ <ConsentManagerProvider
85
+ options={{
86
+ backendURL: 'https://your-instance.c15t.dev',
87
+ legalLinks: {
88
+ privacyPolicy: {
89
+ href: '/privacy',
90
+ target: '_self',
91
+ },
92
+ cookiePolicy: {
93
+ href: '/cookies',
94
+ target: '_self',
95
+ },
96
+ termsOfService: {
97
+ href: 'https://example.com/terms',
98
+ target: '_blank',
99
+ rel: 'noopener noreferrer',
100
+ label: 'Terms of Service',
101
+ },
102
+ },
103
+ }}
104
+ >
105
+ ```
106
+
107
+ Notes:
108
+
109
+ * Omitting a key (for example `termsOfService`) hides that link.
110
+ * `label` overrides the translated text for that single link.
111
+ * Use `_self` for internal pages and `_blank` + `rel="noopener noreferrer"` for external pages.
112
+ * Control which of the configured links render in each component via the component's `legalLinks` prop.
113
+
114
+ ## Overrides
115
+
116
+ `overrides` lets you force location/language signals instead of browser or network detection.
117
+ This is useful for QA, local development, and preview environments.
118
+
119
+ ```tsx
120
+ <ConsentManagerProvider
121
+ options={{
122
+ backendURL: 'https://your-instance.c15t.dev',
123
+ overrides: {
124
+ country: 'DE',
125
+ region: 'BY',
126
+ language: 'de-DE',
127
+ },
128
+ }}
129
+ >
130
+ ```
131
+
132
+ You can also override Global Privacy Control (GPC) behavior during testing:
133
+
134
+ ```tsx
135
+ <ConsentManagerProvider
136
+ options={{
137
+ backendURL: 'https://your-instance.c15t.dev',
138
+ overrides: {
139
+ gpc: true,
140
+ },
141
+ }}
142
+ >
143
+ ```
144
+
145
+ > ⚠️ **Warning:**
146
+ > Treat overrides as an environment/testing tool. Avoid hard-coding production overrides unless that behavior is intentional for your deployment.
147
+
148
+ ## Policy Packs
149
+
150
+ In hosted mode (recommended), the backend resolves the correct policy automatically — no frontend policy config needed:
151
+
152
+ ```tsx
153
+ <ConsentManagerProvider
154
+ options={{
155
+ backendURL: 'https://your-instance.c15t.dev',
156
+ }}
157
+ >
158
+ ```
159
+
160
+ ### Fallback: Offline Policies
161
+
162
+ When no backend is available, `ConsentManagerProvider` accepts `offlinePolicy.policyPacks` for local policy resolution during development, testing, previews, or temporary backend outages:
163
+
164
+ ```tsx
165
+ <ConsentManagerProvider
166
+ options={{
167
+ mode: 'offline',
168
+ offlinePolicy: {
169
+ i18n: {
170
+ defaultProfile: 'default',
171
+ messages: {
172
+ default: {
173
+ translations: {
174
+ en: { cookieBanner: { title: 'Privacy choices' } },
175
+ },
176
+ },
177
+ qc: {
178
+ fallbackLanguage: 'fr',
179
+ translations: {
180
+ en: { cookieBanner: { title: 'Quebec Privacy Settings' } },
181
+ fr: { cookieBanner: { title: 'Paramètres de confidentialité du Québec' } },
182
+ },
183
+ },
184
+ },
185
+ },
186
+ policyPacks: [
187
+ {
188
+ id: 'qc_opt_in',
189
+ match: { regions: [{ country: 'CA', region: 'QC' }] },
190
+ i18n: { messageProfile: 'qc' },
191
+ consent: { model: 'opt-in', expiryDays: 365 },
192
+ ui: { mode: 'banner' },
193
+ },
194
+ {
195
+ id: 'default_world',
196
+ match: { isDefault: true },
197
+ consent: { model: 'none' },
198
+ ui: { mode: 'none' },
199
+ },
200
+ ],
201
+ },
202
+ overrides: {
203
+ country: 'CA',
204
+ region: 'QC',
205
+ },
206
+ }}
207
+ >
208
+ ```
209
+
210
+ Notes:
211
+
212
+ * `offlinePolicy` is only used in `offline` mode.
213
+ * Treat offline policies as a development/testing tool or resilience fallback, not the primary production source of truth.
214
+ * `offlinePolicy.i18n` lets offline mode mirror hosted `messageProfile` and profile-local `fallbackLanguage` behavior.
215
+ * Omitting `offlinePolicy.policyPacks` uses the built-in synthetic opt-in fallback banner. Hosted network fallback uses the same opt-in banner.
216
+ * `offlinePolicy: { policyPacks: [] }` is explicit no-banner mode.
217
+ * In hosted mode, backend `policyPacks` remain the source of truth — frontend offline policies never override a live backend decision.
218
+
219
+ Read the full guide at [Policy Packs](/docs/frameworks/react/policy-packs) and the conceptual model at [Policy Packs Concept](/docs/frameworks/react/concepts/policy-packs).
220
+
221
+ ## Props
222
+
223
+ |Property|Value|
224
+ |:--|:--|
225
+ |Type Name|\`ConsentManagerProviderProps\`|
226
+ |Source Path|\`./packages/react/src/types/consent-manager.ts\`|
227
+
228
+ \*ExtractedTypeTable: Could not extract "ConsentManagerProviderProps" from "./packages/react/src/types/consent-manager.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: ConsentWidget
3
- description: An inline consent management widget for embedding in settings or privacy pages. Shows category toggles with accordion layout.
3
+ description: An inline consent management widget for embedding in settings or
4
+ privacy pages. Shows category toggles with accordion layout.
5
+ group: frameworks
4
6
  ---
5
7
  `ConsentWidget` is a standalone, inline consent management widget. Unlike `ConsentDialog` (which is a modal), the widget embeds directly in your page layout - ideal for privacy settings pages, account preferences, or any page where users should be able to manage consent without a modal overlay.
6
8
 
@@ -128,9 +130,9 @@ If the stock widget structure is already correct, stay with tokens and slots ins
128
130
 
129
131
  ## Props
130
132
 
131
- ### ConsentWidgetProps
133
+ |Property|Value|
134
+ |:--|:--|
135
+ |Type Name|\`ConsentWidgetProps\`|
136
+ |Source Path|\`./packages/react/src/components/consent-widget/types.ts\`|
132
137
 
133
- |Property|Type|Description|Default|Required|
134
- |:--|:--|:--|:--|:--:|
135
- |hideBranding|boolean \|undefined|Controls whether to hide the branding in the widget footer.|-|Optional|
136
- |legalLinks|(keyof LegalLinksTranslations)\[] \|null \|undefined|Controls which legal links to display in the widget footer.|-|Optional|
138
+ \*ExtractedTypeTable: Could not extract "ConsentWidgetProps" from "./packages/react/src/components/consent-widget/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,10 +1,12 @@
1
1
  ---
2
2
  title: DevTools
3
- description: A development tool for inspecting consent state, geolocation, loaded scripts, and consent events in real time.
3
+ description: A development tool for inspecting consent state, geolocation,
4
+ loaded scripts, and consent events in real time.
5
+ group: frameworks
4
6
  ---
5
7
  `DevTools` is a floating panel that shows the internal state of the consent manager. Use it during development to inspect consent values, geolocation results, loaded scripts, and debug consent flows. Also exported as `C15TDevTools` if you need to avoid naming conflicts with other devtools.
6
8
 
7
- > ℹ️ **Info:**
9
+ > ⚠️ **Warning:**
8
10
  > DevTools should only be included in development builds. The component renders nothing to the React tree - it injects directly into document.body.
9
11
 
10
12
  ## Installation
@@ -89,8 +91,9 @@ export function AppDevtools() {
89
91
 
90
92
  ## Props
91
93
 
92
- ### C15TDevToolsProps
94
+ |Property|Value|
95
+ |:--|:--|
96
+ |Type Name|\`C15TDevToolsProps\`|
97
+ |Source Path|\`./packages/dev-tools/src/react.ts\`|
93
98
 
94
- |Property|Type|Description|Default|Required|
95
- |:--|:--|:--|:--|:--:|
96
- |disabled|boolean \|undefined|Whether the DevTools should be disabled Useful for production builds|false|Optional|
99
+ \*ExtractedTypeTable: Could not extract "C15TDevToolsProps" from "./packages/dev-tools/src/react.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Frame
3
- description: A consent-gated content wrapper - children only mount when the required consent category is granted.
3
+ description: A consent-gated content wrapper - children only mount when the
4
+ required consent category is granted.
5
+ group: frameworks
4
6
  ---
5
7
  `Frame` conditionally renders its children based on consent state. When consent for the specified category is not granted, a placeholder is shown instead. Children are not mounted at all until consent is given, preventing any network requests or script execution.
6
8
 
@@ -62,12 +64,9 @@ When `Frame` mounts, it automatically adds its `category` to the active `consent
62
64
 
63
65
  ## Props
64
66
 
65
- ### FrameProps
67
+ |Property|Value|
68
+ |:--|:--|
69
+ |Type Name|\`FrameProps\`|
70
+ |Source Path|\`./packages/react/src/components/frame/types.ts\`|
66
71
 
67
- |Property|Type|Description|Default|Required|
68
- |:--|:--|:--|:--|:--:|
69
- |children|ReactNode|Content rendered when consent is granted. Children are not mounted until consent is given, preventing unnecessary network requests.|-|✅ Required|
70
- |category|AllConsentNames|Consent category required to render children.|-|✅ Required|
71
- |placeholder|ReactNode|A custom placeholder component to display when consent is not met. If not provided, a default placeholder will be displayed.|-|Optional|
72
- |noStyle|boolean \|undefined|When true, removes all default styling from the component|false|Optional|
73
- |theme|any|Custom theme to override default styles while maintaining structure and accessibility. Merges with defaults. Ignored when \`noStyle=\{true}\`.|undefined|Optional|
72
+ \*ExtractedTypeTable: Could not extract "FrameProps" from "./packages/react/src/components/frame/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Client Modes
3
- description: Choose how c15t connects to its backend - full hosted integration, offline-only, or bring your own backend.
3
+ description: Choose how c15t connects to its backend - full hosted integration,
4
+ offline-only, or bring your own backend.
5
+ group: frameworks
4
6
  ---
5
7
  c15t supports three client modes that determine how consent data is stored and synchronized. Choose the mode that matches your infrastructure:
6
8
 
@@ -8,7 +10,7 @@ c15t supports three client modes that determine how consent data is stored and s
8
10
  * **Offline mode** - Browser-only storage with no network requests. Best for local development, demos, static deployments, or controlled fallback scenarios.
9
11
  * **Custom mode** - Bring your own backend with custom endpoint handlers
10
12
 
11
- > ℹ️ **Info:**
13
+ > ⚠️ **Warning:**
12
14
  > If you need durable consent records, server-side enforcement, or automatic jurisdiction detection, use hosted mode. Offline mode cannot provide those guarantees because consent lives only in the browser.
13
15
 
14
16
  <span id="c15t-mode" />
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Consent Categories
3
3
  description: How c15t organizes tracking technologies into five consent categories.
4
+ group: frameworks
4
5
  ---
5
6
  c15t organizes tracking technologies into five consent categories that align with GDPR and ePrivacy Directive requirements. Rather than asking users to approve or deny individual cookies or scripts, each category groups related tracking purposes together so users can make meaningful, informed choices about how their data is used.
6
7
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Consent Models
3
3
  description: How c15t determines consent behavior based on legal jurisdiction.
4
+ group: frameworks
4
5
  ---
5
6
  c15t supports four consent models that control how consent defaults, banner visibility, and category gating behave:
6
7
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Cookie Management
3
3
  description: How c15t manages cookies through script, iframe, and network gating
4
- lastModified: 2026-02-10
4
+ group: frameworks
5
5
  ---
6
6
  Cookie management is the most commonly misunderstood part of consent. A critical distinction: **c15t does not manage all cookies on your site.** It controls what scripts, iframes, and network requests are allowed to load - and those third-party resources are what set most cookies.
7
7
 
@@ -23,7 +23,7 @@ YouTube embeds, social media widgets, and other iframes can set cookies via thei
23
23
  **4. Network requests**
24
24
  Server responses can include `Set-Cookie` headers. If your page makes requests to third-party APIs or CDNs, those responses may set cookies. c15t's network blocker can intercept `fetch` and `XMLHttpRequest` calls to prevent these requests from happening without consent.
25
25
 
26
- > ℹ️ **Info:**
26
+ > ⚠️ **Warning:**
27
27
  > Don't list these cookies in your banner. The cookie names above (\_ga, \_gid, \_fbp, \_fbc) are implementation details — they matter for developers understanding how tracking works, but they should not be exposed to end users in your consent UI. Users don't know what \_ga means, and listing it doesn't help them make an informed choice. Instead, use purpose-based consent categories like "measurement" or "marketing" that communicate why data is collected, not how it is stored.
28
28
 
29
29
  ## Why Revoking Consent Requires a Page Reload
@@ -76,7 +76,7 @@ function ConsentManager({ children }: { children: ReactNode }) {
76
76
  > ℹ️ **Info:**
77
77
  > The reload and deferred sync are part of the broader initialization flow. See Initialization Flow for the full sequence.
78
78
  >
79
- > ℹ️ **Info:**
79
+ > ⚠️ **Warning:**
80
80
  > Setting reloadOnConsentRevoked: false means previously-loaded scripts will continue running after consent is revoked. Only disable this if you have a specific strategy for handling script cleanup.
81
81
 
82
82
  ## The Revocation Flow
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Glossary
3
3
  description: Key terms used throughout the c15t documentation.
4
+ group: frameworks
4
5
  ---
5
6
  ### Core Terms
6
7
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Initialization Flow
3
3
  description: What happens from provider mount to first render — the full consent lifecycle.
4
+ group: frameworks
4
5
  ---
5
6
  When the consent provider mounts, it creates a cached consent runtime, reads any stored consent from the browser, fetches the resolved policy from the backend (or uses SSR/offline data), and decides whether to show the banner. This entire sequence completes before the first meaningful consent-aware render.
6
7
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: Policy Packs
3
3
  description: How c15t resolves regional consent policies and what a policy pack controls.
4
+ group: frameworks
4
5
  ---
5
6
  Different countries need different consent experiences. Policy packs let you define those rules once — c15t picks the right one automatically based on where the visitor is.
6
7
 
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Headless Mode
3
- description: Build fully custom consent UI using only hooks - no pre-built components required.
3
+ description: Build fully custom consent UI using only hooks - no pre-built
4
+ components required.
5
+ group: frameworks
4
6
  ---
5
7
  c15t's headless mode means using the hooks (`useConsentManager`, `useTranslations`, etc.) without any pre-built UI components. This gives you complete control over the consent experience.
6
8
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: useColorScheme
3
3
  description: Manage light/dark mode preferences for consent components.
4
+ group: frameworks
4
5
  ---
5
6
  `useColorScheme()` manages the color scheme preference for c15t components. It sets up the appropriate CSS class and media query listeners.
6
7
 
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Checking Consent
3
- description: Use has() for flexible consent checks with AND, OR, and NOT logic. Check if any consent exists with hasConsented().
3
+ description: Use has() for flexible consent checks with AND, OR, and NOT logic.
4
+ Check if any consent exists with hasConsented().
5
+ group: frameworks
4
6
  ---
5
7
  ## has(condition)
6
8