@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
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Server-Side Utilities
3
- description: Fetch consent data on the server for SSR hydration — eliminate the loading flash and improve performance.
3
+ description: Fetch consent data on the server for SSR hydration — eliminate the
4
+ loading flash and improve performance.
5
+ group: frameworks
4
6
  ---
5
7
  The `@c15t/react/server` module provides utilities for fetching consent data on the server before rendering. This enables SSR hydration — consent state is available immediately on page load without a client-side fetch, eliminating the consent banner flash.
6
8
 
@@ -36,9 +38,12 @@ const ssrData = await fetchSSRData({
36
38
 
37
39
  ### Options
38
40
 
39
- |Property|Type|Description|Default|Required|
40
- |:--|:--|:--|:--|:--:|
41
- |headers|Headers|Request headers from the framework. These should be the incoming request headers that contain geo-location information (cf-ipcountry, x-vercel-ip-country, etc.)|-|✅ Required|
41
+ |Property|Value|
42
+ |:--|:--|
43
+ |Type Name|\`FetchSSRDataOptions\`|
44
+ |Source Path|\`./packages/react/src/server/types.ts\`|
45
+
46
+ \*ExtractedTypeTable: Could not extract "FetchSSRDataOptions" from "./packages/react/src/server/types.ts" using base path "/home/runner/work/c15t/c15t". Verify the path/name and that the file is included by your tsconfig.\*
42
47
 
43
48
  ### Return Value
44
49
 
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Class Names
3
- description: Style consent components using className props and per-slot className targeting via the theme.
3
+ description: Style consent components using className props and per-slot
4
+ className targeting via the theme.
5
+ group: frameworks
4
6
  ---
5
7
  ## Prefer Slots for Stock Components
6
8
 
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Color Scheme
3
- description: Support light mode, dark mode, and system preference detection in consent components.
3
+ description: Support light mode, dark mode, and system preference detection in
4
+ consent components.
5
+ group: frameworks
4
6
  ---
5
7
  c15t supports light and dark mode through the theme's `colors` and `dark` token groups. The active color scheme is determined by one of three methods:
6
8
 
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: CSS Variables
3
+ description: Reference for all --c15t-* CSS custom properties generated by the theme system.
4
+ group: frameworks
5
+ ---
6
+ Every theme token is converted to a `--c15t-*` CSS custom property at runtime. You can override these variables in your stylesheet without using the JavaScript theme API.
7
+
8
+ ## Variable Reference
9
+
10
+ |Property|Value|
11
+ |:--|:--|
12
+ |Type Name|\`ThemeCSSVariables\`|
13
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
14
+
15
+ \*ExtractedTypeTable: Could not extract "ThemeCSSVariables" 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.\*
16
+
17
+ ## Overriding Variables
18
+
19
+ Override in your stylesheet:
20
+
21
+ ```css
22
+ :root {
23
+ --c15t-primary: #8b5cf6;
24
+ --c15t-surface: #fafafa;
25
+ --c15t-radius-md: 1rem;
26
+ }
27
+
28
+ /* Dark mode overrides */
29
+ .dark,
30
+ .c15t-dark {
31
+ --c15t-primary: #a78bfa;
32
+ --c15t-surface: #18181b;
33
+ --c15t-text: #fafafa;
34
+ }
35
+ ```
36
+
37
+ ## Scoped Overrides
38
+
39
+ Target specific components by scoping variables:
40
+
41
+ ```tsx
42
+ <div className="checkout-consent">
43
+ <ConsentBanner />
44
+ </div>
45
+ ```
46
+
47
+ ```css
48
+ /* Only affect c15t components inside .checkout-consent */
49
+ .checkout-consent {
50
+ --c15t-surface: #f0f9ff;
51
+ --c15t-radius-lg: 1.5rem;
52
+ }
53
+ ```
@@ -0,0 +1,302 @@
1
+ ---
2
+ title: Styling Overview
3
+ description: Customize every aspect of c15t's consent components using design
4
+ tokens, component slots, and CSS variables.
5
+ group: frameworks
6
+ ---
7
+ c15t's theming system gives you multiple levels of control, but most customization should stay inside the pre-built components.
8
+
9
+ Start with the lowest-power tool that solves the problem:
10
+
11
+ 1. **Pre-built component APIs** — provider options and component props such as `layout`, `direction`, `primaryButton`, `legalLinks`, and `theme.consentActions`
12
+ 2. **Design tokens** — global colors, typography, spacing, radius, shadows, and motion
13
+ 3. **Slots** — targeted styling for specific parts such as the banner card, footer, or title
14
+ 4. **CSS variables or className-level overrides** — when you need to integrate with external CSS systems
15
+ 5. **Compound components** — when you must rearrange markup while still using c15t primitives
16
+ 6. **`noStyle`** — when you want c15t structure but you need to own all visual styling
17
+ 7. **Headless** — when you want fully custom markup and behavior
18
+
19
+ Keep styling and escalation as separate decisions:
20
+
21
+ * If you are still using the stock banner, dialog, or widget, stay with props, tokens, and slots.
22
+ * Escalate to compound components, `noStyle`, or headless only when the structure or behavior itself must change.
23
+
24
+ ## Styling Approaches
25
+
26
+ |Approach|Control|Use When|
27
+ |--|--|--|
28
+ |**Component and provider APIs**|High|Reordering actions, changing button emphasis, configuring links, hiding branding, changing copy via `i18n`|
29
+ |**Tokens**|High|Changing global colors, typography, spacing, radius, shadows, or motion|
30
+ |**Slots**|Medium|Targeting specific component parts (for example `consentBannerFooter` or `consentDialogCard`)|
31
+ |**CSS variables / className**|Medium|Integrating with an existing stylesheet or utility classes after tokens and slots|
32
+ |**Compound components**|Structure|Rearranging existing c15t primitives without going fully custom|
33
+ |**noStyle**|Full visuals|Keeping c15t structure but replacing all visual defaults|
34
+ |**Headless**|Full|Replacing both markup and behavior|
35
+
36
+ ## Quick Start
37
+
38
+ Use the `Theme` type for TypeScript autocomplete and validation:
39
+
40
+ ```tsx
41
+ import { type ReactNode } from 'react';
42
+ import { type Theme, ConsentManagerProvider } from '@c15t/react';
43
+
44
+ const theme = {
45
+ colors: {
46
+ primary: '#6366f1',
47
+ primaryHover: '#4f46e5',
48
+ surface: '#ffffff',
49
+ text: '#1f2937',
50
+ textMuted: '#6b7280',
51
+ },
52
+ radius: {
53
+ md: '0.75rem',
54
+ lg: '1rem',
55
+ },
56
+ spacing: {
57
+ md: '1.25rem',
58
+ },
59
+ } satisfies Theme;
60
+
61
+ export function ConsentManager({ children }: { children: ReactNode }) {
62
+ return (
63
+ <ConsentManagerProvider
64
+ options={{
65
+ mode: 'hosted',
66
+ backendURL: 'https://your-instance.c15t.dev',
67
+ theme,
68
+ }}
69
+ >
70
+ {children}
71
+ </ConsentManagerProvider>
72
+ );
73
+ }
74
+ ```
75
+
76
+ ## Styling Inside Pre-Built Components
77
+
78
+ Start here before you consider compound components or headless mode.
79
+
80
+ ### 1. Provider and component configuration
81
+
82
+ Use the stock APIs first:
83
+
84
+ * `layout`, `direction`, and `primaryButton` for banner action arrangement
85
+ * `legalLinks` for link visibility
86
+ * `hideBranding` and `showTrigger` for dialog and widget behavior
87
+ * `theme.consentActions` for stock banner and dialog button treatment
88
+ * `i18n` on `ConsentManagerProvider` for copy changes
89
+
90
+ ```tsx
91
+ <ConsentBanner layout={['customize', ['reject', 'accept']]} primaryButton="accept" />
92
+ ```
93
+
94
+ ### 2. Design tokens
95
+
96
+ Set global values for colors, typography, spacing, radius, shadows, and motion:
97
+
98
+ ```tsx
99
+ options={{ theme: { colors: { primary: '#6366f1' } } }}
100
+ ```
101
+
102
+ Use tokens first when the change is semantic:
103
+
104
+ * Banner card background -> `theme.colors.surface`
105
+ * Banner footer background -> `theme.colors.surfaceHover`
106
+ * Shared copy color -> `theme.colors.text` and `theme.colors.textMuted`
107
+ * Primary-filled surfaces such as stock branding tags and filled actions -> `theme.colors.primary` with `theme.colors.textOnPrimary` as the matching foreground override
108
+
109
+ ```tsx
110
+ options={{
111
+ theme: {
112
+ colors: {
113
+ surface: '#ffffff',
114
+ surfaceHover: '#f6f3ee',
115
+ },
116
+ },
117
+ }}
118
+ ```
119
+
120
+ If you set `theme.colors.primary` but omit `theme.colors.textOnPrimary`, c15t derives a readable foreground automatically. Add `textOnPrimary` only when you need to force a specific branded foreground color.
121
+
122
+ ### 3. Component slots
123
+
124
+ Target specific component parts via the `slots` object:
125
+
126
+ ```tsx
127
+ options={{
128
+ theme: {
129
+ slots: {
130
+ consentBannerCard: 'rounded-[28px] shadow-xl',
131
+ consentBannerFooter: 'border-t border-black/10',
132
+ consentBannerTitle: 'tracking-tight',
133
+ },
134
+ },
135
+ }}
136
+ ```
137
+
138
+ Use slots when the component part is right but the local styling needs adjustment.
139
+
140
+ ### 4. CSS variables and className-level overrides
141
+
142
+ Override `--c15t-*` custom properties in your stylesheet or attach classes through slots when your app styling is driven externally.
143
+
144
+ Reach for this after tokens and slots, not before.
145
+
146
+ ```tsx
147
+ options={{
148
+ theme: {
149
+ slots: {
150
+ consentBannerFooter: 'bg-[var(--banner-footer)]',
151
+ },
152
+ },
153
+ }}
154
+ ```
155
+
156
+ ## Escalating Beyond Pre-Built Components
157
+
158
+ Only move up this ladder when the lower rung cannot satisfy the request.
159
+
160
+ ### 5. Compound components
161
+
162
+ Use compound components when you need to rearrange existing c15t primitives:
163
+
164
+ ```tsx
165
+ <ConsentBanner.Root>
166
+ <ConsentBanner.Card>
167
+ <ConsentBanner.Header>
168
+ <ConsentBanner.Title />
169
+ <ConsentBanner.Description />
170
+ </ConsentBanner.Header>
171
+ <ConsentBanner.Footer>
172
+ <ConsentBanner.CustomizeButton />
173
+ <ConsentBanner.FooterSubGroup>
174
+ <ConsentBanner.RejectButton />
175
+ <ConsentBanner.AcceptButton />
176
+ </ConsentBanner.FooterSubGroup>
177
+ </ConsentBanner.Footer>
178
+ </ConsentBanner.Card>
179
+ </ConsentBanner.Root>
180
+ ```
181
+
182
+ ### 6. `noStyle`
183
+
184
+ Use `noStyle` only when the c15t structure is still correct but you want to replace all visual defaults:
185
+
186
+ ```tsx
187
+ <ConsentBanner noStyle />
188
+ ```
189
+
190
+ ### 7. Headless
191
+
192
+ Go headless only when you are replacing both markup and behavior. For that path, continue to [Headless Mode](../headless).
193
+
194
+ ## Common Styling Tasks
195
+
196
+ ### Change the banner footer background
197
+
198
+ ```tsx
199
+ options={{
200
+ theme: {
201
+ colors: {
202
+ surfaceHover: '#f6f3ee',
203
+ },
204
+ },
205
+ }}
206
+ ```
207
+
208
+ Use `theme.colors.surfaceHover` before trying raw CSS.
209
+
210
+ ### Change the banner card background
211
+
212
+ ```tsx
213
+ options={{
214
+ theme: {
215
+ colors: {
216
+ surface: '#fffdf8',
217
+ },
218
+ },
219
+ }}
220
+ ```
221
+
222
+ Use `theme.colors.surface` before overriding banner CSS variables directly.
223
+
224
+ ### Tweak the banner card, footer, or title styling without changing markup
225
+
226
+ ```tsx
227
+ options={{
228
+ theme: {
229
+ slots: {
230
+ consentBannerCard: 'rounded-[28px] shadow-xl',
231
+ consentBannerFooter: 'border-t border-black/10 px-6',
232
+ consentBannerTitle: 'text-xl tracking-tight',
233
+ },
234
+ },
235
+ }}
236
+ ```
237
+
238
+ ### Change stock consent action button styles semantically
239
+
240
+ ```tsx
241
+ options={{
242
+ theme: {
243
+ consentActions: {
244
+ default: { mode: 'stroke' },
245
+ accept: { variant: 'primary', mode: 'stroke' },
246
+ customize: { variant: 'neutral', mode: 'ghost' },
247
+ },
248
+ },
249
+ }}
250
+ ```
251
+
252
+ Use `theme.consentActions` when you want to change the stock banner/dialog button treatment without rewriting the component layout. Policy packs still control action arrangement and primary-action hints. The theme controls whether those actions render as `stroke`, `filled`, `ghost`, or `lighter`.
253
+
254
+ ### Change banner copy without replacing the component
255
+
256
+ ```tsx
257
+ options={{
258
+ i18n: {
259
+ locale: 'en',
260
+ messages: {
261
+ en: {
262
+ cookieBanner: {
263
+ title: 'We value your privacy',
264
+ description: 'We use cookies to improve the site and measure performance.',
265
+ },
266
+ common: {
267
+ acceptAll: 'Accept all',
268
+ rejectAll: 'Reject all',
269
+ customize: 'Manage preferences',
270
+ },
271
+ },
272
+ },
273
+ },
274
+ }}
275
+ ```
276
+
277
+ ### Enable dark mode safely
278
+
279
+ ```tsx
280
+ options={{
281
+ colorScheme: 'system',
282
+ theme: {
283
+ colors: { surface: '#ffffff', text: '#1f2937' },
284
+ dark: { surface: '#111827', text: '#f9fafb' },
285
+ },
286
+ }}
287
+ ```
288
+
289
+ > ℹ️ **Info:**
290
+ > If a token change does not show up where you expect, check how that component maps tokens to CSS variables before escalating. For example, the stock banner footer background comes from colors.surfaceHover, not a separate footer token.
291
+ >
292
+ > ⚠️ **Warning:**
293
+ > Do not jump to CSS overrides or !important because a token did not appear to work at first glance.noStyle: true removes layout and visual defaults. Treat it as an advanced opt-out, not a normal theming step.Headless mode is for replacing markup and behavior, not for styling-only requests.Use either tokens/slots or raw CSS variable overrides intentionally to avoid conflicting style sources.For dark mode, c15t supports .dark and .c15t-dark.
294
+
295
+ ## API Reference
296
+
297
+ |Property|Value|
298
+ |:--|:--|
299
+ |Type Name|\`Theme\`|
300
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
301
+
302
+ \*ExtractedTypeTable: Could not extract "Theme" 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.\*
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: Component Slots
3
+ description: Target individual component parts with styles using the slot system
4
+ - className strings or inline style objects.
5
+ group: frameworks
6
+ ---
7
+ ## What are Slots?
8
+
9
+ Slots let you target specific parts of consent components with styles. Each component is built from named slots such as `consentBannerTitle` and `consentDialogTag`.
10
+
11
+ Use slots after the stock component APIs and design tokens:
12
+
13
+ * If the change is semantic, prefer tokens first. For example, the stock banner footer background comes from `theme.colors.surfaceHover`.
14
+ * If the component part is correct but you need a local tweak, use a slot.
15
+
16
+ Common banner slot choices:
17
+
18
+ * `consentBannerCard` for card radius, shadow, width, and local background treatment
19
+ * `consentBannerFooter` for spacing, borders, and local footer styling
20
+ * `consentBannerTitle` for title typography
21
+ * `buttonPrimary` and `buttonSecondary` for shared button classes
22
+
23
+ ## Using Slots
24
+
25
+ Pass slot styles in the theme's `slots` object:
26
+
27
+ ```tsx
28
+ const theme = {
29
+ slots: {
30
+ consentBannerFooter: 'border-t border-black/10 px-6',
31
+ consentBannerTitle: 'text-xl font-bold tracking-tight',
32
+
33
+ // Object value = className + inline styles
34
+ consentBannerCard: {
35
+ className: 'rounded-xl shadow-lg',
36
+ style: { maxWidth: '600px' },
37
+ },
38
+ },
39
+ } satisfies Theme;
40
+ ```
41
+
42
+ ## Slot Style Types
43
+
44
+ Each slot accepts either a `string` (treated as className) or a `SlotStyle` object:
45
+
46
+ ```tsx
47
+ // String: treated as className
48
+ consentBannerTitle: 'my-custom-class'
49
+
50
+ // Object: className + style + noStyle
51
+ consentBannerFooter: {
52
+ className: 'border-t border-black/10',
53
+ style: { paddingBlock: '1rem' },
54
+ noStyle: false, // Set true only when you want to remove this slot's default styling
55
+ }
56
+ ```
57
+
58
+ `noStyle` on a slot is an advanced escape hatch. Start with className and style overrides first.
59
+
60
+ ## Example: Style the stock banner without changing markup
61
+
62
+ ```tsx
63
+ const theme = {
64
+ colors: {
65
+ surface: '#fffdf8',
66
+ surfaceHover: '#f6f3ee',
67
+ },
68
+ slots: {
69
+ consentBannerCard: 'rounded-[28px] shadow-xl',
70
+ consentBannerFooter: 'border-t border-black/10 px-6',
71
+ consentBannerTitle: 'tracking-tight',
72
+ },
73
+ } satisfies Theme;
74
+ ```
75
+
76
+ ## Available Slots
77
+
78
+ Use the typed API reference below for the full slot list and descriptions. It stays in sync with the actual component slot surface.
79
+
80
+ ## API Reference
81
+
82
+ |Property|Value|
83
+ |:--|:--|
84
+ |Type Name|\`ComponentSlots\`|
85
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
86
+
87
+ \*ExtractedTypeTable: Could not extract "ComponentSlots" 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.\*
88
+
89
+ |Property|Value|
90
+ |:--|:--|
91
+ |Type Name|\`SlotStyle\`|
92
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
93
+
94
+ \*ExtractedTypeTable: Could not extract "SlotStyle" 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.\*
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Tailwind CSS
3
- description: Use Tailwind CSS utility classes to style consent components via the slot system.
3
+ description: Use Tailwind CSS utility classes to style consent components via
4
+ the slot system.
5
+ group: frameworks
4
6
  ---
5
7
  c15t works with Tailwind CSS out of the box. Use the `slots` theme option to apply Tailwind utility classes to any component part.
6
8
 
@@ -0,0 +1,156 @@
1
+ ---
2
+ title: Design Tokens
3
+ description: The six base token categories that control colors, typography,
4
+ spacing, radius, shadows, and motion, plus optional dark-mode overrides.
5
+ group: frameworks
6
+ ---
7
+ ## Color Tokens
8
+
9
+ Color tokens define the palette for all consent components. Set `colors` for light mode and `dark` for dark mode overrides.
10
+
11
+ When `textOnPrimary` is omitted, c15t derives it automatically from `primary` to keep text readable on primary-filled surfaces such as stock branding tags and buttons. Set `textOnPrimary` explicitly when you need a specific foreground color.
12
+
13
+ ```tsx
14
+ const theme = {
15
+ colors: {
16
+ primary: '#6366f1',
17
+ primaryHover: '#4f46e5',
18
+ surface: '#ffffff',
19
+ surfaceHover: '#f9fafb',
20
+ border: '#e5e7eb',
21
+ borderHover: '#d1d5db',
22
+ text: '#1f2937',
23
+ textMuted: '#6b7280',
24
+ textOnPrimary: '#ffffff',
25
+ overlay: 'rgba(0, 0, 0, 0.5)',
26
+ switchTrack: '#d1d5db',
27
+ switchTrackActive: '#6366f1',
28
+ switchThumb: '#ffffff',
29
+ },
30
+ dark: {
31
+ primary: '#818cf8',
32
+ surface: '#1f2937',
33
+ text: '#f9fafb',
34
+ textMuted: '#9ca3af',
35
+ border: '#374151',
36
+ },
37
+ } satisfies Theme;
38
+ ```
39
+
40
+ |Property|Value|
41
+ |:--|:--|
42
+ |Type Name|\`ColorTokens\`|
43
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
44
+
45
+ \*ExtractedTypeTable: Could not extract "ColorTokens" 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.\*
46
+
47
+ ## Typography Tokens
48
+
49
+ Control font family, sizes, weights, and line heights.
50
+
51
+ ```tsx
52
+ const theme = {
53
+ typography: {
54
+ fontFamily: 'Inter, system-ui, sans-serif',
55
+ fontSize: { sm: '0.875rem', base: '1rem', lg: '1.125rem' },
56
+ fontWeight: { normal: 400, medium: 500, semibold: 600 },
57
+ lineHeight: { tight: '1.25', normal: '1.5', relaxed: '1.75' },
58
+ },
59
+ } satisfies Theme;
60
+ ```
61
+
62
+ |Property|Value|
63
+ |:--|:--|
64
+ |Type Name|\`TypographyTokens\`|
65
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
66
+
67
+ \*ExtractedTypeTable: Could not extract "TypographyTokens" 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.\*
68
+
69
+ ## Spacing Tokens
70
+
71
+ Five-step scale for internal padding, margins, and gaps.
72
+
73
+ ```tsx
74
+ const theme = {
75
+ spacing: {
76
+ xs: '0.25rem', // 4px
77
+ sm: '0.5rem', // 8px
78
+ md: '1rem', // 16px
79
+ lg: '1.5rem', // 24px
80
+ xl: '2rem', // 32px
81
+ },
82
+ } satisfies Theme;
83
+ ```
84
+
85
+ |Property|Value|
86
+ |:--|:--|
87
+ |Type Name|\`SpacingTokens\`|
88
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
89
+
90
+ \*ExtractedTypeTable: Could not extract "SpacingTokens" 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.\*
91
+
92
+ ## Radius Tokens
93
+
94
+ Border radius scale for rounded corners.
95
+
96
+ ```tsx
97
+ const theme = {
98
+ radius: {
99
+ sm: '0.25rem', // 4px
100
+ md: '0.5rem', // 8px
101
+ lg: '0.75rem', // 12px
102
+ full: '9999px', // Pill shape
103
+ },
104
+ } satisfies Theme;
105
+ ```
106
+
107
+ |Property|Value|
108
+ |:--|:--|
109
+ |Type Name|\`RadiusTokens\`|
110
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
111
+
112
+ \*ExtractedTypeTable: Could not extract "RadiusTokens" 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.\*
113
+
114
+ ## Shadow Tokens
115
+
116
+ Box shadow scale for depth and elevation.
117
+
118
+ ```tsx
119
+ const theme = {
120
+ shadows: {
121
+ sm: '0 1px 2px hsla(0, 0%, 0%, 0.05)',
122
+ md: '0 4px 12px hsla(0, 0%, 0%, 0.08)',
123
+ lg: '0 8px 24px hsla(0, 0%, 0%, 0.12)',
124
+ },
125
+ } satisfies Theme;
126
+ ```
127
+
128
+ |Property|Value|
129
+ |:--|:--|
130
+ |Type Name|\`ShadowTokens\`|
131
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
132
+
133
+ \*ExtractedTypeTable: Could not extract "ShadowTokens" 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.\*
134
+
135
+ ## Motion Tokens
136
+
137
+ Animation duration and easing presets.
138
+
139
+ ```tsx
140
+ const theme = {
141
+ motion: {
142
+ duration: { fast: '100ms', normal: '200ms', slow: '300ms' },
143
+ easing: 'cubic-bezier(0.4, 0, 0.2, 1)',
144
+ easingOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
145
+ easingInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',
146
+ easingSpring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
147
+ },
148
+ } satisfies Theme;
149
+ ```
150
+
151
+ |Property|Value|
152
+ |:--|:--|
153
+ |Type Name|\`MotionTokens\`|
154
+ |Source Path|\`./packages/ui/src/theme/types.ts\`|
155
+
156
+ \*ExtractedTypeTable: Could not extract "MotionTokens" 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.\*
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  title: Troubleshooting
3
- description: Solutions for common issues with @c15t/react — provider errors, missing banners, consent persistence, and more.
3
+ description: Solutions for common issues with @c15t/react — provider errors,
4
+ missing banners, consent persistence, and more.
5
+ group: frameworks
4
6
  ---
5
7
  ## "Provider not found" Error
6
8