@c15t/react 2.0.0-rc.4 → 2.0.0-rc.5

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 (343) hide show
  1. package/dist/components/consent-banner/atoms/root.cjs +1 -1
  2. package/dist/components/consent-banner/atoms/root.js +1 -1
  3. package/dist/components/consent-banner/consent-banner.cjs +1 -1
  4. package/dist/components/consent-banner/consent-banner.js +1 -1
  5. package/dist/components/consent-dialog/atoms/root.cjs +1 -1
  6. package/dist/components/consent-dialog/atoms/root.js +1 -1
  7. package/dist/components/consent-dialog/consent-dialog.cjs +1 -1
  8. package/dist/components/consent-dialog/consent-dialog.js +1 -1
  9. package/dist/components/consent-dialog-trigger/atoms/root.cjs +1 -1
  10. package/dist/components/consent-dialog-trigger/atoms/root.js +1 -1
  11. package/dist/components/consent-widget/atoms/button.cjs +1 -1
  12. package/dist/components/consent-widget/atoms/button.js +1 -1
  13. package/dist/components/consent-widget/consent-widget.cjs +1 -1
  14. package/dist/components/consent-widget/consent-widget.js +1 -1
  15. package/dist/components/frame/frame.cjs +1 -1
  16. package/dist/components/frame/frame.js +1 -1
  17. package/dist/components/iab-consent-banner/atoms/root.cjs +1 -1
  18. package/dist/components/iab-consent-banner/atoms/root.js +1 -1
  19. package/dist/components/iab-consent-banner/iab-consent-banner.cjs +1 -1
  20. package/dist/components/iab-consent-banner/iab-consent-banner.js +1 -1
  21. package/dist/components/iab-consent-dialog/atoms/footer.cjs +1 -1
  22. package/dist/components/iab-consent-dialog/atoms/footer.js +1 -1
  23. package/dist/components/iab-consent-dialog/atoms/root.cjs +1 -1
  24. package/dist/components/iab-consent-dialog/atoms/root.js +1 -1
  25. package/dist/components/iab-consent-dialog/iab-consent-dialog.cjs +1 -1
  26. package/dist/components/iab-consent-dialog/iab-consent-dialog.js +1 -1
  27. package/dist/components/shared/libs/policy-actions.cjs +1 -0
  28. package/dist/components/shared/libs/policy-actions.js +1 -0
  29. package/dist/components/shared/primitives/button.cjs +1 -1
  30. package/dist/components/shared/primitives/button.js +1 -1
  31. package/dist/headless.cjs +1 -1
  32. package/dist/headless.js +1 -1
  33. package/dist/hooks/index.cjs +1 -1
  34. package/dist/hooks/index.js +1 -1
  35. package/dist/hooks/use-consent-dialog-trigger.cjs +1 -0
  36. package/dist/hooks/use-consent-dialog-trigger.js +1 -0
  37. package/dist/hooks/use-consent-manager.cjs +1 -1
  38. package/dist/hooks/use-consent-manager.js +1 -1
  39. package/dist/hooks/use-headless-consent-ui.cjs +1 -0
  40. package/dist/hooks/use-headless-consent-ui.js +1 -0
  41. package/dist/hooks/use-headless-iab-consent-ui.cjs +1 -0
  42. package/dist/hooks/use-headless-iab-consent-ui.js +1 -0
  43. package/dist/index.cjs +1 -1
  44. package/dist/index.js +1 -1
  45. package/dist/providers/consent-manager-provider.cjs +1 -1
  46. package/dist/providers/consent-manager-provider.js +1 -1
  47. package/dist/server/fetch-ssr-data.cjs +1 -1
  48. package/dist/server/fetch-ssr-data.js +1 -1
  49. package/dist/server/headers.cjs +1 -1
  50. package/dist/server/headers.js +1 -1
  51. package/dist/server/index.cjs +1 -1
  52. package/dist/server/index.js +1 -1
  53. package/dist/server/init-cache-key.cjs +1 -0
  54. package/dist/server/init-cache-key.js +1 -0
  55. package/dist/version.cjs +1 -1
  56. package/dist/version.js +1 -1
  57. package/{dist → dist-types}/components/consent-banner/atoms/overlay.d.ts +0 -1
  58. package/{dist → dist-types}/components/consent-banner/atoms/root.d.ts +1 -2
  59. package/{dist → dist-types}/components/consent-banner/components.d.ts +0 -1
  60. package/{dist → dist-types}/components/consent-banner/consent-banner.d.ts +8 -7
  61. package/{dist → dist-types}/components/consent-banner/error-boundary.d.ts +0 -1
  62. package/{dist → dist-types}/components/consent-banner/index.d.ts +0 -1
  63. package/{dist → dist-types}/components/consent-dialog/atoms/card.d.ts +0 -1
  64. package/{dist → dist-types}/components/consent-dialog/atoms/overlay.d.ts +0 -1
  65. package/{dist → dist-types}/components/consent-dialog/atoms/root.d.ts +1 -2
  66. package/{dist → dist-types}/components/consent-dialog/consent-dialog.d.ts +1 -2
  67. package/{dist → dist-types}/components/consent-dialog/index.d.ts +0 -1
  68. package/{dist → dist-types}/components/consent-dialog-link/index.d.ts +0 -1
  69. package/{dist → dist-types}/components/consent-dialog-trigger/atoms/button.d.ts +0 -1
  70. package/{dist → dist-types}/components/consent-dialog-trigger/atoms/icon.d.ts +0 -1
  71. package/{dist → dist-types}/components/consent-dialog-trigger/atoms/root.d.ts +0 -1
  72. package/{dist → dist-types}/components/consent-dialog-trigger/atoms/text.d.ts +0 -1
  73. package/{dist → dist-types}/components/consent-dialog-trigger/consent-dialog-trigger.d.ts +0 -1
  74. package/{dist → dist-types}/components/consent-dialog-trigger/index.d.ts +0 -1
  75. package/{dist → dist-types}/components/consent-dialog-trigger/types.d.ts +1 -2
  76. package/{dist → dist-types}/components/consent-dialog-trigger/use-draggable.d.ts +1 -2
  77. package/{dist → dist-types}/components/consent-preferences-link/consent-preferences-link.d.ts +0 -1
  78. package/{dist → dist-types}/components/consent-preferences-link/index.d.ts +0 -1
  79. package/{dist → dist-types}/components/consent-widget/atoms/accordion.d.ts +0 -1
  80. package/{dist → dist-types}/components/consent-widget/atoms/button.d.ts +0 -1
  81. package/{dist → dist-types}/components/consent-widget/atoms/footer.d.ts +0 -1
  82. package/{dist → dist-types}/components/consent-widget/atoms/root.d.ts +0 -1
  83. package/{dist → dist-types}/components/consent-widget/consent-widget.d.ts +0 -1
  84. package/{dist → dist-types}/components/consent-widget/index.d.ts +0 -1
  85. package/{dist → dist-types}/components/consent-widget/types.d.ts +0 -1
  86. package/{dist → dist-types}/components/frame/atoms.d.ts +1 -2
  87. package/{dist → dist-types}/components/frame/frame.d.ts +0 -1
  88. package/{dist → dist-types}/components/frame/index.d.ts +0 -1
  89. package/{dist → dist-types}/components/frame/types.d.ts +1 -2
  90. package/{dist → dist-types}/components/iab-consent-banner/atoms/button-group.d.ts +0 -1
  91. package/{dist → dist-types}/components/iab-consent-banner/atoms/card.d.ts +0 -1
  92. package/{dist → dist-types}/components/iab-consent-banner/atoms/description.d.ts +0 -1
  93. package/{dist → dist-types}/components/iab-consent-banner/atoms/footer.d.ts +0 -1
  94. package/{dist → dist-types}/components/iab-consent-banner/atoms/header.d.ts +0 -1
  95. package/{dist → dist-types}/components/iab-consent-banner/atoms/overlay.d.ts +0 -1
  96. package/{dist → dist-types}/components/iab-consent-banner/atoms/root.d.ts +1 -2
  97. package/{dist → dist-types}/components/iab-consent-banner/atoms/title.d.ts +0 -1
  98. package/{dist → dist-types}/components/iab-consent-banner/iab-consent-banner.d.ts +1 -2
  99. package/{dist → dist-types}/components/iab-consent-banner/index.d.ts +0 -1
  100. package/{dist → dist-types}/components/iab-consent-dialog/atoms/card.d.ts +0 -1
  101. package/{dist → dist-types}/components/iab-consent-dialog/atoms/content.d.ts +0 -1
  102. package/{dist → dist-types}/components/iab-consent-dialog/atoms/footer.d.ts +0 -1
  103. package/{dist → dist-types}/components/iab-consent-dialog/atoms/header.d.ts +0 -1
  104. package/{dist → dist-types}/components/iab-consent-dialog/atoms/overlay.d.ts +0 -1
  105. package/{dist → dist-types}/components/iab-consent-dialog/atoms/purpose-item.d.ts +0 -1
  106. package/{dist → dist-types}/components/iab-consent-dialog/atoms/root.d.ts +1 -2
  107. package/{dist → dist-types}/components/iab-consent-dialog/atoms/stack-item.d.ts +0 -1
  108. package/{dist → dist-types}/components/iab-consent-dialog/atoms/tabs.d.ts +0 -1
  109. package/{dist → dist-types}/components/iab-consent-dialog/atoms/vendor-list.d.ts +1 -2
  110. package/{dist → dist-types}/components/iab-consent-dialog/hooks/use-gvl-data.d.ts +0 -1
  111. package/{dist → dist-types}/components/iab-consent-dialog/iab-consent-dialog.d.ts +1 -2
  112. package/{dist → dist-types}/components/iab-consent-dialog/index.d.ts +0 -1
  113. package/{dist → dist-types}/components/iab-consent-dialog/types.d.ts +0 -1
  114. package/{dist → dist-types}/components/iab-consent-dialog/use-iab-translations.d.ts +0 -1
  115. package/dist-types/components/shared/libs/policy-actions.d.ts +26 -0
  116. package/{dist → dist-types}/components/shared/libs/polymorphic.d.ts +0 -1
  117. package/{dist → dist-types}/components/shared/libs/recursive-clone-children.d.ts +0 -1
  118. package/{dist → dist-types}/components/shared/primitives/box.d.ts +0 -1
  119. package/{dist → dist-types}/components/shared/primitives/button.d.ts +5 -2
  120. package/{dist → dist-types}/components/shared/primitives/button.types.d.ts +17 -1
  121. package/{dist → dist-types}/components/shared/primitives/legal-links/index.d.ts +1 -2
  122. package/{dist → dist-types}/components/shared/ui/accordion/accordion.d.ts +1 -2
  123. package/{dist → dist-types}/components/shared/ui/accordion/accordion.types.d.ts +1 -2
  124. package/{dist → dist-types}/components/shared/ui/accordion/index.d.ts +0 -1
  125. package/{dist → dist-types}/components/shared/ui/animated-collapse/animated-collapse.d.ts +0 -1
  126. package/{dist → dist-types}/components/shared/ui/animated-collapse/index.d.ts +0 -1
  127. package/{dist → dist-types}/components/shared/ui/button/button.d.ts +1 -2
  128. package/{dist → dist-types}/components/shared/ui/button/button.types.d.ts +0 -1
  129. package/{dist → dist-types}/components/shared/ui/button/index.d.ts +0 -1
  130. package/{dist → dist-types}/components/shared/ui/icon.d.ts +0 -1
  131. package/{dist → dist-types}/components/shared/ui/logo.d.ts +0 -1
  132. package/{dist → dist-types}/components/shared/ui/switch/index.d.ts +0 -1
  133. package/{dist → dist-types}/components/shared/ui/switch/switch.d.ts +1 -2
  134. package/{dist → dist-types}/components/shared/ui/switch/switch.types.d.ts +1 -2
  135. package/{dist → dist-types}/context/consent-manager-context.d.ts +1 -2
  136. package/{dist → dist-types}/context/consent-tracking-context.d.ts +0 -1
  137. package/{dist → dist-types}/context/theme-context.d.ts +0 -1
  138. package/dist-types/headless.d.ts +10 -0
  139. package/{dist → dist-types}/hooks/index.d.ts +3 -1
  140. package/{dist → dist-types}/hooks/use-color-scheme.d.ts +0 -1
  141. package/{dist → dist-types}/hooks/use-component-config.d.ts +1 -2
  142. package/dist-types/hooks/use-consent-dialog-trigger.d.ts +10 -0
  143. package/{dist → dist-types}/hooks/use-consent-manager.d.ts +1 -2
  144. package/{dist → dist-types}/hooks/use-focus-trap.d.ts +0 -1
  145. package/dist-types/hooks/use-headless-consent-ui.d.ts +46 -0
  146. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +41 -0
  147. package/{dist → dist-types}/hooks/use-reduced-motion.d.ts +0 -1
  148. package/{dist → dist-types}/hooks/use-scroll-lock.d.ts +0 -1
  149. package/{dist → dist-types}/hooks/use-ssr-status.d.ts +0 -1
  150. package/{dist → dist-types}/hooks/use-styles.d.ts +0 -1
  151. package/{dist → dist-types}/hooks/use-text-direction.d.ts +0 -1
  152. package/{dist → dist-types}/hooks/use-theme.d.ts +0 -1
  153. package/{dist → dist-types}/hooks/use-translations.d.ts +1 -2
  154. package/{dist → dist-types}/index.d.ts +5 -3
  155. package/{dist → dist-types}/providers/consent-manager-provider.d.ts +0 -1
  156. package/{dist → dist-types}/server/fetch-ssr-data.d.ts +1 -2
  157. package/{dist → dist-types}/server/headers.d.ts +2 -2
  158. package/{dist → dist-types}/server/index.d.ts +1 -1
  159. package/dist-types/server/init-cache-key.d.ts +21 -0
  160. package/{dist → dist-types}/server/normalize-url.d.ts +0 -1
  161. package/{dist → dist-types}/server/types.d.ts +1 -2
  162. package/{dist → dist-types}/types/consent-manager.d.ts +8 -2
  163. package/{dist → dist-types}/types/theme/index.d.ts +0 -1
  164. package/dist-types/types/theme/style-keys.d.ts +1 -0
  165. package/{dist → dist-types}/types/theme/style-types.d.ts +4 -3
  166. package/{dist → dist-types}/utils/cn.d.ts +1 -2
  167. package/{dist → dist-types}/utils/merge-styles.d.ts +0 -1
  168. package/{dist → dist-types}/utils/test-helpers.d.ts +0 -1
  169. package/{dist → dist-types}/utils/theme-utils.d.ts +1 -2
  170. package/dist-types/version.d.ts +1 -0
  171. package/docs/README.md +76 -0
  172. package/docs/building-headless-components.md +245 -0
  173. package/docs/callbacks.md +117 -0
  174. package/docs/components/consent-banner.md +174 -0
  175. package/docs/components/consent-dialog-link.md +59 -0
  176. package/docs/components/consent-dialog-trigger.md +103 -0
  177. package/docs/components/consent-dialog.md +137 -0
  178. package/docs/components/consent-manager-provider.md +422 -0
  179. package/docs/components/consent-widget.md +78 -0
  180. package/docs/components/dev-tools.md +63 -0
  181. package/docs/components/frame.md +73 -0
  182. package/docs/concepts/client-modes.md +163 -0
  183. package/docs/concepts/consent-categories.md +97 -0
  184. package/docs/concepts/consent-models.md +112 -0
  185. package/docs/concepts/cookie-management.md +122 -0
  186. package/docs/concepts/glossary.md +23 -0
  187. package/docs/concepts/initialization-flow.md +141 -0
  188. package/docs/concepts/policy-packs.md +227 -0
  189. package/docs/headless.md +184 -0
  190. package/docs/hooks/use-color-scheme.md +40 -0
  191. package/docs/hooks/use-consent-manager/checking-consent.md +94 -0
  192. package/docs/hooks/use-consent-manager/location-info.md +95 -0
  193. package/docs/hooks/use-consent-manager/overview.md +390 -0
  194. package/docs/hooks/use-consent-manager/setting-consent.md +92 -0
  195. package/docs/hooks/use-draggable.md +57 -0
  196. package/docs/hooks/use-focus-trap.md +41 -0
  197. package/docs/hooks/use-reduced-motion.md +35 -0
  198. package/docs/hooks/use-ssr-status.md +31 -0
  199. package/docs/hooks/use-text-direction.md +49 -0
  200. package/docs/hooks/use-translations.md +116 -0
  201. package/docs/iab/consent-banner.md +95 -0
  202. package/docs/iab/consent-dialog.md +135 -0
  203. package/docs/iab/overview.md +119 -0
  204. package/docs/iab/use-gvl-data.md +208 -0
  205. package/docs/iframe-blocking.md +107 -0
  206. package/docs/integrations/databuddy.md +186 -0
  207. package/docs/integrations/google-tag-manager.md +153 -0
  208. package/docs/integrations/google-tag.md +149 -0
  209. package/docs/integrations/linkedin-insights.md +109 -0
  210. package/docs/integrations/meta-pixel.md +342 -0
  211. package/docs/integrations/microsoft-uet.md +112 -0
  212. package/docs/integrations/overview.md +89 -0
  213. package/docs/integrations/posthog.md +177 -0
  214. package/docs/integrations/tiktok-pixel.md +113 -0
  215. package/docs/integrations/x-pixel.md +143 -0
  216. package/docs/internationalization.md +197 -0
  217. package/docs/network-blocker.md +178 -0
  218. package/docs/optimization.md +117 -0
  219. package/docs/policy-packs.md +240 -0
  220. package/docs/quickstart.md +136 -0
  221. package/docs/script-loader.md +300 -0
  222. package/docs/server-side.md +153 -0
  223. package/docs/styling/classnames.md +84 -0
  224. package/docs/styling/color-scheme.md +82 -0
  225. package/docs/styling/css-variables.md +92 -0
  226. package/docs/styling/overview.md +315 -0
  227. package/docs/styling/slots.md +93 -0
  228. package/docs/styling/tailwind.md +86 -0
  229. package/docs/styling/tokens.md +214 -0
  230. package/docs/troubleshooting.md +137 -0
  231. package/package.json +28 -24
  232. package/dist/components/consent-banner/atoms/overlay.d.ts.map +0 -1
  233. package/dist/components/consent-banner/atoms/root.d.ts.map +0 -1
  234. package/dist/components/consent-banner/components.d.ts.map +0 -1
  235. package/dist/components/consent-banner/consent-banner.d.ts.map +0 -1
  236. package/dist/components/consent-banner/error-boundary.d.ts.map +0 -1
  237. package/dist/components/consent-banner/index.d.ts.map +0 -1
  238. package/dist/components/consent-dialog/atoms/card.d.ts.map +0 -1
  239. package/dist/components/consent-dialog/atoms/overlay.d.ts.map +0 -1
  240. package/dist/components/consent-dialog/atoms/root.d.ts.map +0 -1
  241. package/dist/components/consent-dialog/consent-dialog.d.ts.map +0 -1
  242. package/dist/components/consent-dialog/index.d.ts.map +0 -1
  243. package/dist/components/consent-dialog-link/index.d.ts.map +0 -1
  244. package/dist/components/consent-dialog-trigger/atoms/button.d.ts.map +0 -1
  245. package/dist/components/consent-dialog-trigger/atoms/icon.d.ts.map +0 -1
  246. package/dist/components/consent-dialog-trigger/atoms/root.d.ts.map +0 -1
  247. package/dist/components/consent-dialog-trigger/atoms/text.d.ts.map +0 -1
  248. package/dist/components/consent-dialog-trigger/consent-dialog-trigger.d.ts.map +0 -1
  249. package/dist/components/consent-dialog-trigger/index.d.ts.map +0 -1
  250. package/dist/components/consent-dialog-trigger/types.d.ts.map +0 -1
  251. package/dist/components/consent-dialog-trigger/use-draggable.d.ts.map +0 -1
  252. package/dist/components/consent-preferences-link/consent-preferences-link.d.ts.map +0 -1
  253. package/dist/components/consent-preferences-link/index.d.ts.map +0 -1
  254. package/dist/components/consent-widget/atoms/accordion.d.ts.map +0 -1
  255. package/dist/components/consent-widget/atoms/button.d.ts.map +0 -1
  256. package/dist/components/consent-widget/atoms/footer.d.ts.map +0 -1
  257. package/dist/components/consent-widget/atoms/root.d.ts.map +0 -1
  258. package/dist/components/consent-widget/consent-widget.d.ts.map +0 -1
  259. package/dist/components/consent-widget/index.d.ts.map +0 -1
  260. package/dist/components/consent-widget/types.d.ts.map +0 -1
  261. package/dist/components/frame/atoms.d.ts.map +0 -1
  262. package/dist/components/frame/frame.d.ts.map +0 -1
  263. package/dist/components/frame/index.d.ts.map +0 -1
  264. package/dist/components/frame/types.d.ts.map +0 -1
  265. package/dist/components/iab-consent-banner/atoms/button-group.d.ts.map +0 -1
  266. package/dist/components/iab-consent-banner/atoms/card.d.ts.map +0 -1
  267. package/dist/components/iab-consent-banner/atoms/description.d.ts.map +0 -1
  268. package/dist/components/iab-consent-banner/atoms/footer.d.ts.map +0 -1
  269. package/dist/components/iab-consent-banner/atoms/header.d.ts.map +0 -1
  270. package/dist/components/iab-consent-banner/atoms/overlay.d.ts.map +0 -1
  271. package/dist/components/iab-consent-banner/atoms/root.d.ts.map +0 -1
  272. package/dist/components/iab-consent-banner/atoms/title.d.ts.map +0 -1
  273. package/dist/components/iab-consent-banner/iab-consent-banner.d.ts.map +0 -1
  274. package/dist/components/iab-consent-banner/index.d.ts.map +0 -1
  275. package/dist/components/iab-consent-dialog/atoms/card.d.ts.map +0 -1
  276. package/dist/components/iab-consent-dialog/atoms/content.d.ts.map +0 -1
  277. package/dist/components/iab-consent-dialog/atoms/footer.d.ts.map +0 -1
  278. package/dist/components/iab-consent-dialog/atoms/header.d.ts.map +0 -1
  279. package/dist/components/iab-consent-dialog/atoms/overlay.d.ts.map +0 -1
  280. package/dist/components/iab-consent-dialog/atoms/purpose-item.d.ts.map +0 -1
  281. package/dist/components/iab-consent-dialog/atoms/root.d.ts.map +0 -1
  282. package/dist/components/iab-consent-dialog/atoms/stack-item.d.ts.map +0 -1
  283. package/dist/components/iab-consent-dialog/atoms/tabs.d.ts.map +0 -1
  284. package/dist/components/iab-consent-dialog/atoms/vendor-list.d.ts.map +0 -1
  285. package/dist/components/iab-consent-dialog/hooks/use-gvl-data.d.ts.map +0 -1
  286. package/dist/components/iab-consent-dialog/iab-consent-dialog.d.ts.map +0 -1
  287. package/dist/components/iab-consent-dialog/index.d.ts.map +0 -1
  288. package/dist/components/iab-consent-dialog/types.d.ts.map +0 -1
  289. package/dist/components/iab-consent-dialog/use-iab-translations.d.ts.map +0 -1
  290. package/dist/components/shared/libs/polymorphic.d.ts.map +0 -1
  291. package/dist/components/shared/libs/recursive-clone-children.d.ts.map +0 -1
  292. package/dist/components/shared/primitives/box.d.ts.map +0 -1
  293. package/dist/components/shared/primitives/button.d.ts.map +0 -1
  294. package/dist/components/shared/primitives/button.types.d.ts.map +0 -1
  295. package/dist/components/shared/primitives/legal-links/index.d.ts.map +0 -1
  296. package/dist/components/shared/ui/accordion/accordion.d.ts.map +0 -1
  297. package/dist/components/shared/ui/accordion/accordion.types.d.ts.map +0 -1
  298. package/dist/components/shared/ui/accordion/index.d.ts.map +0 -1
  299. package/dist/components/shared/ui/animated-collapse/animated-collapse.d.ts.map +0 -1
  300. package/dist/components/shared/ui/animated-collapse/index.d.ts.map +0 -1
  301. package/dist/components/shared/ui/button/button.d.ts.map +0 -1
  302. package/dist/components/shared/ui/button/button.types.d.ts.map +0 -1
  303. package/dist/components/shared/ui/button/index.d.ts.map +0 -1
  304. package/dist/components/shared/ui/icon.d.ts.map +0 -1
  305. package/dist/components/shared/ui/logo.d.ts.map +0 -1
  306. package/dist/components/shared/ui/switch/index.d.ts.map +0 -1
  307. package/dist/components/shared/ui/switch/switch.d.ts.map +0 -1
  308. package/dist/components/shared/ui/switch/switch.types.d.ts.map +0 -1
  309. package/dist/context/consent-manager-context.d.ts.map +0 -1
  310. package/dist/context/consent-tracking-context.d.ts.map +0 -1
  311. package/dist/context/theme-context.d.ts.map +0 -1
  312. package/dist/headless.d.ts +0 -8
  313. package/dist/headless.d.ts.map +0 -1
  314. package/dist/hooks/index.d.ts.map +0 -1
  315. package/dist/hooks/use-color-scheme.d.ts.map +0 -1
  316. package/dist/hooks/use-component-config.d.ts.map +0 -1
  317. package/dist/hooks/use-consent-manager.d.ts.map +0 -1
  318. package/dist/hooks/use-focus-trap.d.ts.map +0 -1
  319. package/dist/hooks/use-reduced-motion.d.ts.map +0 -1
  320. package/dist/hooks/use-scroll-lock.d.ts.map +0 -1
  321. package/dist/hooks/use-ssr-status.d.ts.map +0 -1
  322. package/dist/hooks/use-styles.d.ts.map +0 -1
  323. package/dist/hooks/use-text-direction.d.ts.map +0 -1
  324. package/dist/hooks/use-theme.d.ts.map +0 -1
  325. package/dist/hooks/use-translations.d.ts.map +0 -1
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/providers/consent-manager-provider.d.ts.map +0 -1
  328. package/dist/server/fetch-ssr-data.d.ts.map +0 -1
  329. package/dist/server/headers.d.ts.map +0 -1
  330. package/dist/server/index.d.ts.map +0 -1
  331. package/dist/server/normalize-url.d.ts.map +0 -1
  332. package/dist/server/types.d.ts.map +0 -1
  333. package/dist/types/consent-manager.d.ts.map +0 -1
  334. package/dist/types/theme/index.d.ts.map +0 -1
  335. package/dist/types/theme/style-keys.d.ts +0 -2
  336. package/dist/types/theme/style-keys.d.ts.map +0 -1
  337. package/dist/types/theme/style-types.d.ts.map +0 -1
  338. package/dist/utils/cn.d.ts.map +0 -1
  339. package/dist/utils/merge-styles.d.ts.map +0 -1
  340. package/dist/utils/test-helpers.d.ts.map +0 -1
  341. package/dist/utils/theme-utils.d.ts.map +0 -1
  342. package/dist/version.d.ts +0 -2
  343. package/dist/version.d.ts.map +0 -1
@@ -0,0 +1,184 @@
1
+ ---
2
+ title: Headless Mode
3
+ description: Build fully custom consent UI using only hooks - no pre-built components required.
4
+ ---
5
+ 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
+
7
+ There are three levels of customization:
8
+
9
+ 1. **Props** - Use pre-built components with custom text and configuration
10
+ 2. **noStyle** - Use pre-built components with their structure but strip all styles
11
+ 3. **Headless** - Use only hooks and build the entire UI yourself
12
+
13
+ ## When to Go Headless
14
+
15
+ Go headless when:
16
+
17
+ * Your design system requires complete control over markup
18
+ * You need a consent flow that doesn't fit the banner/dialog pattern
19
+ * You want to embed consent choices inline rather than as overlays
20
+
21
+ Use `noStyle` instead when:
22
+
23
+ * The component structure works but the styling doesn't
24
+ * You want to apply your own CSS/Tailwind without fighting defaults
25
+
26
+ > ℹ️ **Info:**
27
+ > Need a policy-aware implementation guide? See Building Headless Components.
28
+
29
+ ## Full Example: Custom Consent Banner
30
+
31
+ ```tsx
32
+ import { useConsentManager, useTranslations } from '@c15t/react';
33
+
34
+ function CustomConsentBanner() {
35
+ const {
36
+ activeUI,
37
+ consents,
38
+ consentCategories,
39
+ consentTypes,
40
+ saveConsents,
41
+ setSelectedConsent,
42
+ selectedConsents,
43
+ } = useConsentManager();
44
+ const translations = useTranslations();
45
+
46
+ if (activeUI !== 'banner') return null;
47
+
48
+ const displayedTypes = consentTypes.filter(
49
+ (t) => consentCategories.includes(t.name) && t.display
50
+ );
51
+
52
+ return (
53
+ <div className="fixed bottom-0 inset-x-0 bg-white border-t p-6 shadow-lg z-50">
54
+ <h2 className="text-lg font-semibold">
55
+ {translations.cookieBanner.title}
56
+ </h2>
57
+ <p className="text-sm text-gray-600 mt-1">
58
+ {translations.cookieBanner.description}
59
+ </p>
60
+
61
+ <div className="mt-4 space-y-3">
62
+ {displayedTypes.map((type) => (
63
+ <label key={type.name} className="flex items-center gap-3">
64
+ <input
65
+ type="checkbox"
66
+ checked={selectedConsents[type.name] ?? consents[type.name] ?? false}
67
+ disabled={type.disabled}
68
+ onChange={(e) => setSelectedConsent(type.name, e.target.checked)}
69
+ />
70
+ <div>
71
+ <span className="font-medium">
72
+ {translations.consentTypes[type.name]?.title ?? type.name}
73
+ </span>
74
+ <p className="text-xs text-gray-500">{type.description}</p>
75
+ </div>
76
+ </label>
77
+ ))}
78
+ </div>
79
+
80
+ <div className="mt-4 flex gap-3">
81
+ <button
82
+ onClick={() => saveConsents('necessary')}
83
+ className="px-4 py-2 border rounded"
84
+ >
85
+ {translations.common.rejectAll}
86
+ </button>
87
+ <button
88
+ onClick={() => saveConsents('custom')}
89
+ className="px-4 py-2 border rounded"
90
+ >
91
+ {translations.common.save}
92
+ </button>
93
+ <button
94
+ onClick={() => saveConsents('all')}
95
+ className="px-4 py-2 bg-blue-600 text-white rounded"
96
+ >
97
+ {translations.common.acceptAll}
98
+ </button>
99
+ </div>
100
+ </div>
101
+ );
102
+ }
103
+ ```
104
+
105
+ ## Usage with Provider
106
+
107
+ The headless UI still needs a `ConsentManagerProvider`:
108
+
109
+ ```tsx
110
+ import { type ReactNode } from 'react';
111
+ import { ConsentManagerProvider } from '@c15t/react';
112
+
113
+ export function ConsentManager({ children }: { children: ReactNode }) {
114
+ return (
115
+ <ConsentManagerProvider
116
+ options={{
117
+ mode: 'hosted',
118
+ backendURL: 'https://your-instance.c15t.dev',
119
+ consentCategories: ['necessary', 'measurement', 'marketing'],
120
+ }}
121
+ >
122
+ <CustomConsentBanner />
123
+ {children}
124
+ </ConsentManagerProvider>
125
+ );
126
+ }
127
+ ```
128
+
129
+ ## Custom Dialog
130
+
131
+ Build a custom consent dialog for detailed category management:
132
+
133
+ ```tsx
134
+ import { useConsentManager, useTranslations } from '@c15t/react';
135
+
136
+ function CustomConsentDialog() {
137
+ const {
138
+ activeUI,
139
+ setActiveUI,
140
+ consentTypes,
141
+ consentCategories,
142
+ selectedConsents,
143
+ consents,
144
+ setSelectedConsent,
145
+ saveConsents,
146
+ has,
147
+ } = useConsentManager();
148
+ const translations = useTranslations();
149
+
150
+ if (activeUI !== 'dialog') return null;
151
+
152
+ return (
153
+ <div className="fixed inset-0 z-50 flex items-center justify-center">
154
+ <div className="absolute inset-0 bg-black/50" onClick={() => setActiveUI('none')} />
155
+ <div className="relative bg-white rounded-xl p-6 max-w-md w-full">
156
+ <h2 className="text-lg font-semibold">{translations.consentManagerDialog.title}</h2>
157
+
158
+ {consentTypes
159
+ .filter((t) => consentCategories.includes(t.name))
160
+ .map((type) => (
161
+ <div key={type.name} className="flex items-center justify-between py-3 border-b">
162
+ <div>
163
+ <p className="font-medium">{translations.consentTypes[type.name]?.title}</p>
164
+ <p className="text-sm text-gray-500">{type.description}</p>
165
+ </div>
166
+ <input
167
+ type="checkbox"
168
+ checked={selectedConsents[type.name] ?? consents[type.name] ?? false}
169
+ disabled={type.disabled}
170
+ onChange={(e) => setSelectedConsent(type.name, e.target.checked)}
171
+ />
172
+ </div>
173
+ ))}
174
+
175
+ <div className="mt-4 flex justify-end gap-2">
176
+ <button onClick={() => saveConsents('necessary')}>Reject</button>
177
+ <button onClick={() => saveConsents('custom')}>Save</button>
178
+ <button onClick={() => saveConsents('all')}>Accept All</button>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ );
183
+ }
184
+ ```
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: useColorScheme
3
+ description: Manage light/dark mode preferences for consent components.
4
+ ---
5
+ `useColorScheme()` manages the color scheme preference for c15t components. It sets up the appropriate CSS class and media query listeners.
6
+
7
+ ```tsx
8
+ import { useColorScheme } from '@c15t/react';
9
+
10
+ function ThemeManager() {
11
+ useColorScheme('system'); // Follow system preference
12
+ }
13
+ ```
14
+
15
+ ## Parameters
16
+
17
+ |Value|Behavior|
18
+ |--|--|
19
+ |`'light'`|Force light mode|
20
+ |`'dark'`|Force dark mode|
21
+ |`'system'`|Follow `prefers-color-scheme` media query|
22
+ |`null`|Disable - c15t won't manage color scheme|
23
+ |`undefined`|No-op|
24
+
25
+ ## Provider-Level Configuration
26
+
27
+ You can also set the color scheme on the provider without using this hook:
28
+
29
+ ```tsx
30
+ <ConsentManagerProvider
31
+ options={{
32
+ colorScheme: 'system',
33
+ // ...
34
+ }}
35
+ >
36
+ ```
37
+
38
+ ## System Preference Detection
39
+
40
+ When set to `'system'`, the hook listens for changes to the `prefers-color-scheme` media query and updates automatically when the user changes their OS theme.
@@ -0,0 +1,94 @@
1
+ ---
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().
4
+ ---
5
+ ## has(condition)
6
+
7
+ The `has()` method evaluates whether the current consent state satisfies a condition. It supports simple category checks and complex logical expressions.
8
+
9
+ ### Simple Check
10
+
11
+ ```tsx
12
+ const { has } = useConsentManager();
13
+
14
+ if (has('measurement')) {
15
+ // User has granted measurement consent
16
+ }
17
+ ```
18
+
19
+ ### AND Logic
20
+
21
+ All conditions must be true:
22
+
23
+ ```tsx
24
+ has({ and: ['measurement', 'marketing'] })
25
+ // true only if BOTH measurement AND marketing are granted
26
+ ```
27
+
28
+ ### OR Logic
29
+
30
+ At least one condition must be true:
31
+
32
+ ```tsx
33
+ has({ or: ['measurement', 'marketing'] })
34
+ // true if EITHER measurement OR marketing is granted
35
+ ```
36
+
37
+ ### NOT Logic
38
+
39
+ Negates a condition:
40
+
41
+ ```tsx
42
+ has({ not: 'marketing' })
43
+ // true if marketing consent is NOT granted
44
+ ```
45
+
46
+ ### Nested Conditions
47
+
48
+ Combine operators for complex logic:
49
+
50
+ ```tsx
51
+ has({
52
+ and: [
53
+ 'necessary',
54
+ { or: ['measurement', 'marketing'] },
55
+ { not: 'functionality' },
56
+ ],
57
+ })
58
+ // true if: necessary AND (measurement OR marketing) AND NOT functionality
59
+ ```
60
+
61
+ ### HasCondition Type
62
+
63
+ ```ts
64
+ type HasCondition<CategoryType> =
65
+ | CategoryType // "measurement"
66
+ | { and: HasCondition[] | HasCondition } // { and: ["a", "b"] }
67
+ | { or: HasCondition[] | HasCondition } // { or: ["a", "b"] }
68
+ | { not: HasCondition } // { not: "a" }
69
+ ```
70
+
71
+ ## hasConsented()
72
+
73
+ Returns `true` if the user has made any consent choice (accepted, rejected, or customized). Returns `false` if no consent has been recorded yet.
74
+
75
+ ```tsx
76
+ const { hasConsented } = useConsentManager();
77
+
78
+ if (hasConsented()) {
79
+ // User has previously made a consent choice
80
+ } else {
81
+ // First visit — no consent recorded
82
+ }
83
+ ```
84
+
85
+ ## getDisplayedConsents()
86
+
87
+ Returns the consent types that should be displayed in the UI (based on active `consentCategories` and each type's `display` property):
88
+
89
+ ```tsx
90
+ const { getDisplayedConsents } = useConsentManager();
91
+
92
+ const visibleCategories = getDisplayedConsents();
93
+ // Returns ConsentType[] with name, description, defaultValue, etc.
94
+ ```
@@ -0,0 +1,95 @@
1
+ ---
2
+ title: Location Info
3
+ description: Access detected jurisdiction, country, and region. Override geolocation for testing.
4
+ ---
5
+ ## locationInfo
6
+
7
+ The `locationInfo` state contains the user's detected geographic information:
8
+
9
+ ```tsx
10
+ const { locationInfo } = useConsentManager();
11
+
12
+ if (locationInfo) {
13
+ console.log(locationInfo.jurisdiction); // 'GDPR', 'CCPA', etc.
14
+ console.log(locationInfo.countryCode); // 'DE', 'US', etc.
15
+ console.log(locationInfo.regionCode); // 'BY', 'CA', etc.
16
+ }
17
+ ```
18
+
19
+ `locationInfo` is `null` until the backend responds with geolocation data (or in offline mode if no overrides are set).
20
+
21
+ ## Jurisdiction Codes
22
+
23
+ |Code|Region|Consent Model|
24
+ |--|--|--|
25
+ |`GDPR`|European Union|opt-in|
26
+ |`UK_GDPR`|United Kingdom|opt-in|
27
+ |`CH`|Switzerland|opt-in|
28
+ |`BR`|Brazil (LGPD)|opt-in|
29
+ |`APPI`|Japan|opt-in|
30
+ |`PIPA`|South Korea|opt-in|
31
+ |`PIPEDA`|Canada (excl. Quebec)|opt-out|
32
+ |`QC_LAW25`|Quebec, Canada|opt-in|
33
+ |`CCPA`|California, USA|opt-out|
34
+ |`AU`|Australia|opt-out|
35
+ |`NONE`|No jurisdiction|null model|
36
+
37
+ ## setOverrides()
38
+
39
+ Override detected values for testing or manual configuration. This triggers a re-fetch of consent banner data with the new values:
40
+
41
+ ```tsx
42
+ const { setOverrides } = useConsentManager();
43
+
44
+ // Override country (triggers jurisdiction detection)
45
+ await setOverrides({ country: 'DE' });
46
+
47
+ // Override language
48
+ await setOverrides({ language: 'de' });
49
+
50
+ // Override both
51
+ await setOverrides({ country: 'US', region: 'CA', language: 'es' });
52
+ ```
53
+
54
+ ## setLocationInfo()
55
+
56
+ Directly set location info without triggering a re-fetch:
57
+
58
+ ```tsx
59
+ const { setLocationInfo } = useConsentManager();
60
+
61
+ setLocationInfo({
62
+ jurisdiction: 'GDPR',
63
+ countryCode: 'DE',
64
+ regionCode: 'BY',
65
+ });
66
+ ```
67
+
68
+ ## Testing Different Jurisdictions
69
+
70
+ A development-only component for testing consent behavior across jurisdictions:
71
+
72
+ ```tsx
73
+ function JurisdictionTester() {
74
+ const { setOverrides, model, locationInfo } = useConsentManager();
75
+
76
+ const testCases = [
77
+ { label: 'GDPR', country: 'DE' },
78
+ { label: 'CCPA', country: 'US', region: 'CA' },
79
+ { label: 'PIPEDA', country: 'CA', region: undefined },
80
+ { label: 'QC_LAW25', country: 'CA', region: 'QC' },
81
+ { label: 'NONE', country: 'US', region: 'TX' },
82
+ ];
83
+
84
+ return (
85
+ <div>
86
+ <p>Current: {locationInfo?.jurisdiction ?? 'none'} → model: {model}</p>
87
+ {testCases.map((tc) => (
88
+ <button key={tc.label} onClick={() => setOverrides({ country: tc.country, region: tc.region })}>
89
+ Test as {tc.label}
90
+ </button>
91
+ ))}
92
+ </div>
93
+ );
94
+ }
95
+ ```