@c15t/react 3.0.0-alpha.0 → 3.0.0-alpha.10

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 (405) hide show
  1. package/AGENTS.md +96 -69
  2. package/README.md +21 -17
  3. package/SKILL.md +34 -0
  4. package/dist/aggregate-components.js +1 -1
  5. package/dist/chunk-warming.js +1 -1
  6. package/dist/component-hooks/use-headless-consent-ui.js +1 -1
  7. package/dist/component-hooks/use-headless-iab-consent-ui.js +1 -1
  8. package/dist/component-hooks/use-panel-trigger.js +1 -1
  9. package/dist/components/consent-gate/atoms.js +1 -0
  10. package/dist/components/consent-gate/consent-gate.js +2 -0
  11. package/dist/components/consent-gate/frame.js +2 -0
  12. package/dist/components/consent-gate/index.js +2 -0
  13. package/dist/components/consent-preferences-link/consent-preferences-link.js +1 -1
  14. package/dist/components/iab-panel/atoms/card.js +1 -1
  15. package/dist/components/iab-panel/atoms/feature-item.js +2 -0
  16. package/dist/components/iab-panel/atoms/header.js +1 -1
  17. package/dist/components/iab-panel/atoms/purpose-item.js +1 -1
  18. package/dist/components/iab-panel/atoms/root.js +1 -1
  19. package/dist/components/iab-panel/atoms/stack-item.js +1 -1
  20. package/dist/components/iab-panel/atoms/vendor-list.js +1 -1
  21. package/dist/components/iab-panel/hooks/use-gvl-data.js +1 -1
  22. package/dist/components/iab-panel/iab-panel.js +1 -1
  23. package/dist/components/iab-panel/index.js +1 -1
  24. package/dist/components/iab-prompt/atoms/overlay.js +1 -1
  25. package/dist/components/iab-prompt/atoms/root.js +1 -1
  26. package/dist/components/panel/atoms/card.js +1 -1
  27. package/dist/components/panel/atoms/overlay.js +1 -1
  28. package/dist/components/panel/atoms/root.js +1 -1
  29. package/dist/components/panel/panel.js +1 -1
  30. package/dist/components/panel-trigger/atoms/button.js +1 -1
  31. package/dist/components/panel-trigger/atoms/icon.js +1 -1
  32. package/dist/components/panel-trigger/atoms/root.js +1 -1
  33. package/dist/components/panel-trigger/atoms/toolbar.js +1 -1
  34. package/dist/components/panel-trigger/atoms/trigger-icons.js +1 -0
  35. package/dist/components/panel-trigger/panel-trigger-toolbar.js +1 -1
  36. package/dist/components/panel-trigger/panel-trigger.js +1 -1
  37. package/dist/components/preferences/atoms/accordion.js +1 -1
  38. package/dist/components/preferences/atoms/root.js +1 -1
  39. package/dist/components/preferences/atoms/vendor-list.js +1 -0
  40. package/dist/components/preferences/index.js +1 -1
  41. package/dist/components/prompt/atoms/early-tap-script.js +2 -0
  42. package/dist/components/prompt/atoms/overlay.js +1 -1
  43. package/dist/components/prompt/atoms/root.js +1 -1
  44. package/dist/components/prompt/components.js +1 -1
  45. package/dist/components/prompt/policy-actions.js +1 -1
  46. package/dist/components/prompt/prompt.js +1 -1
  47. package/dist/components/shared/dialog-sheets.js +1 -0
  48. package/dist/components/shared/first-paint-sheets.js +1 -0
  49. package/dist/components/shared/iab-dialog-sheets.js +1 -0
  50. package/dist/components/shared/iab-first-paint-sheets.js +1 -0
  51. package/dist/components/shared/libs/compose-refs.js +1 -0
  52. package/dist/components/shared/libs/slot.js +1 -1
  53. package/dist/components/shared/primitives/button.js +1 -1
  54. package/dist/components/shared/primitives/legal-links/index.js +1 -1
  55. package/dist/components/shared/streamed-surface.js +2 -0
  56. package/dist/components/shared/surface-styles.js +2 -0
  57. package/dist/components/shared/ui/dialog/dialog.js +1 -1
  58. package/dist/components/shared/ui/icon.js +1 -1
  59. package/dist/components/shared/ui/logo.js +1 -1
  60. package/dist/components/shared/ui/preference-item/preference-item.js +1 -1
  61. package/dist/consent-gate.js +2 -0
  62. package/dist/consent-theme.js +1 -0
  63. package/dist/context/consent-tracking-context.js +1 -1
  64. package/dist/context/index.js +1 -1
  65. package/dist/context.js +1 -1
  66. package/dist/devtools-launcher.js +2 -0
  67. package/dist/devtools.js +1 -1
  68. package/dist/draft-context.js +2 -0
  69. package/dist/draft.js +1 -1
  70. package/dist/external-iab-context.js +1 -1
  71. package/dist/gpp.js +2 -0
  72. package/dist/headless.js +1 -1
  73. package/dist/hooks/use-color-scheme.js +1 -1
  74. package/dist/hooks/use-committed-ref.js +2 -0
  75. package/dist/hooks/use-focus-trap.js +1 -1
  76. package/dist/hooks/use-headless-iab-consent-ui.js +1 -1
  77. package/dist/hooks/use-iab-policy-guard.js +1 -0
  78. package/dist/hooks/use-late-entry.js +2 -0
  79. package/dist/hooks.js +1 -1
  80. package/dist/iab/styles.tw3.css +5 -151
  81. package/dist/iab-context.js +1 -1
  82. package/dist/index-parts/consent-banner.js +1 -0
  83. package/dist/index-parts/consent-dialog-link.js +1 -0
  84. package/dist/index-parts/consent-dialog-trigger.js +1 -0
  85. package/dist/index-parts/consent-dialog.js +1 -0
  86. package/dist/index-parts/consent-gate.js +1 -0
  87. package/dist/index-parts/core.js +1 -0
  88. package/dist/index-parts/draft.js +1 -0
  89. package/dist/index-parts/frame.js +1 -0
  90. package/dist/index-parts/hooks.js +1 -0
  91. package/dist/index-parts/hosted.js +1 -0
  92. package/dist/index-parts/module-hooks.js +1 -0
  93. package/dist/index-parts/offline.js +1 -0
  94. package/dist/index-parts/presets.js +1 -0
  95. package/dist/index-parts/provider.js +1 -0
  96. package/dist/index-parts/theme.js +1 -0
  97. package/dist/index-parts/translations.js +1 -0
  98. package/dist/index.js +1 -1
  99. package/dist/kernel-selector.js +1 -0
  100. package/dist/modes.js +1 -0
  101. package/dist/module-hooks/iframe-blocker.js +1 -1
  102. package/dist/module-hooks/network-blocker.js +1 -1
  103. package/dist/module-hooks/network-hold.js +2 -0
  104. package/dist/module-hooks/persistence.js +1 -1
  105. package/dist/panel-link.js +1 -1
  106. package/dist/panel-trigger.js +1 -1
  107. package/dist/panel.js +1 -1
  108. package/dist/postcss-tailwind3.js +1 -0
  109. package/dist/preferences.js +1 -2
  110. package/dist/provider.js +1 -1
  111. package/dist/server/fetch-ssr-data.js +1 -1
  112. package/dist/server/headers.js +1 -1
  113. package/dist/server/normalize-url.js +1 -1
  114. package/dist/styles.tw3.css +35 -159
  115. package/dist/transports/hosted.js +1 -0
  116. package/dist/transports/manifest.js +1 -0
  117. package/dist/transports/offline.js +1 -1
  118. package/dist/utils/deferred-module.js +2 -0
  119. package/dist/utils/merge-slot-props.js +1 -1
  120. package/dist/utils/theme-utils.js +1 -1
  121. package/dist/version.js +1 -1
  122. package/dist-types/aggregate-components.d.ts +2 -2
  123. package/dist-types/chunk-warming.d.ts +45 -8
  124. package/dist-types/component-hooks/use-headless-consent-ui.d.ts +5 -5
  125. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +2 -2
  126. package/dist-types/components/consent-gate/atoms.d.ts +11 -0
  127. package/dist-types/components/consent-gate/consent-gate.d.ts +2 -0
  128. package/dist-types/components/consent-gate/frame.d.ts +19 -0
  129. package/dist-types/components/consent-gate/index.d.ts +25 -0
  130. package/dist-types/components/{frame → consent-gate}/types.d.ts +7 -7
  131. package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
  132. package/dist-types/components/consent-preferences-link/index.d.ts +1 -1
  133. package/dist-types/components/iab-panel/atoms/feature-item.d.ts +28 -0
  134. package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +5 -2
  135. package/dist-types/components/iab-panel/atoms/stack-item.d.ts +7 -2
  136. package/dist-types/components/iab-panel/atoms/vendor-list.d.ts +1 -1
  137. package/dist-types/components/iab-panel/iab-panel.d.ts +3 -3
  138. package/dist-types/components/iab-panel/index.d.ts +29 -26
  139. package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
  140. package/dist-types/components/iab-prompt/iab-prompt.d.ts +3 -3
  141. package/dist-types/components/iab-prompt/index.d.ts +19 -19
  142. package/dist-types/components/panel/atoms/card.d.ts +5 -4
  143. package/dist-types/components/panel/atoms/overlay.d.ts +1 -1
  144. package/dist-types/components/panel/index.d.ts +8 -8
  145. package/dist-types/components/panel/panel.d.ts +3 -3
  146. package/dist-types/components/panel-link/index.d.ts +1 -1
  147. package/dist-types/components/panel-trigger/atoms/button.d.ts +1 -1
  148. package/dist-types/components/panel-trigger/atoms/icon.d.ts +1 -1
  149. package/dist-types/components/panel-trigger/atoms/root.d.ts +2 -2
  150. package/dist-types/components/panel-trigger/atoms/toolbar.d.ts +2 -2
  151. package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +25 -0
  152. package/dist-types/components/panel-trigger/index.d.ts +4 -4
  153. package/dist-types/components/panel-trigger/panel-trigger-toolbar.d.ts +1 -1
  154. package/dist-types/components/panel-trigger/panel-trigger.d.ts +9 -17
  155. package/dist-types/components/panel-trigger/types.d.ts +1 -1
  156. package/dist-types/components/preferences/atoms/accordion.d.ts +6 -4
  157. package/dist-types/components/preferences/atoms/button.d.ts +1 -1
  158. package/dist-types/components/preferences/atoms/footer.d.ts +1 -1
  159. package/dist-types/components/preferences/atoms/root.d.ts +1 -1
  160. package/dist-types/components/preferences/atoms/vendor-list.d.ts +23 -0
  161. package/dist-types/components/preferences/index.d.ts +14 -12
  162. package/dist-types/components/preferences/policy-actions.d.ts +2 -2
  163. package/dist-types/components/preferences/preferences.d.ts +1 -1
  164. package/dist-types/components/preferences/types.d.ts +1 -1
  165. package/dist-types/components/prompt/atoms/early-tap-script.d.ts +17 -0
  166. package/dist-types/components/prompt/atoms/root.d.ts +4 -0
  167. package/dist-types/components/prompt/components.d.ts +9 -3
  168. package/dist-types/components/prompt/index.d.ts +12 -12
  169. package/dist-types/components/prompt/policy-actions.d.ts +2 -2
  170. package/dist-types/components/prompt/prompt.d.ts +5 -1
  171. package/dist-types/components/shared/dialog-sheets.d.ts +9 -0
  172. package/dist-types/components/shared/first-paint-sheets.d.ts +8 -0
  173. package/dist-types/components/shared/iab-dialog-sheets.d.ts +3 -0
  174. package/dist-types/components/shared/iab-first-paint-sheets.d.ts +3 -0
  175. package/dist-types/components/shared/libs/compose-refs.d.ts +20 -0
  176. package/dist-types/components/shared/policy-actions.d.ts +2 -2
  177. package/dist-types/components/shared/primitives/box.d.ts +1 -1
  178. package/dist-types/components/shared/primitives/button.d.ts +2 -2
  179. package/dist-types/components/shared/primitives/button.types.d.ts +1 -1
  180. package/dist-types/components/shared/streamed-surface.d.ts +23 -0
  181. package/dist-types/components/shared/surface-styles.d.ts +36 -0
  182. package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
  183. package/dist-types/components/shared/ui/accordion/index.d.ts +2 -2
  184. package/dist-types/components/shared/ui/animated-collapse/index.d.ts +2 -2
  185. package/dist-types/components/shared/ui/branding.d.ts +1 -1
  186. package/dist-types/components/shared/ui/button/button.d.ts +1 -1
  187. package/dist-types/components/shared/ui/button/index.d.ts +2 -2
  188. package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -1
  189. package/dist-types/components/shared/ui/dialog/index.d.ts +1 -1
  190. package/dist-types/components/shared/ui/icon.d.ts +2 -1
  191. package/dist-types/components/shared/ui/logo.d.ts +0 -10
  192. package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -1
  193. package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +13 -0
  194. package/dist-types/components/shared/ui/switch/index.d.ts +2 -2
  195. package/dist-types/components/shared/ui/switch/switch.d.ts +1 -1
  196. package/dist-types/components/shared/ui/tabs/index.d.ts +1 -1
  197. package/dist-types/consent-gate.d.ts +1 -0
  198. package/dist-types/consent-theme.d.ts +38 -0
  199. package/dist-types/context/consent-tracking-context.d.ts +10 -0
  200. package/dist-types/context/index.d.ts +3 -3
  201. package/dist-types/context/theme-context.d.ts +3 -3
  202. package/dist-types/context.d.ts +25 -1
  203. package/dist-types/devtools-launcher.d.ts +29 -0
  204. package/dist-types/devtools.d.ts +13 -2
  205. package/dist-types/draft-context.d.ts +31 -0
  206. package/dist-types/draft.d.ts +81 -9
  207. package/dist-types/gpp.d.ts +27 -0
  208. package/dist-types/headless.d.ts +6 -7
  209. package/dist-types/hooks/use-committed-ref.d.ts +24 -0
  210. package/dist-types/hooks/use-focus-trap.d.ts +3 -1
  211. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +1 -1
  212. package/dist-types/hooks/use-iab-manager.d.ts +5 -5
  213. package/dist-types/hooks/use-iab-policy-guard.d.ts +35 -0
  214. package/dist-types/hooks/use-late-entry.d.ts +14 -0
  215. package/dist-types/hooks/use-theme.d.ts +1 -1
  216. package/dist-types/hooks.d.ts +106 -11
  217. package/dist-types/iab.d.ts +7 -7
  218. package/dist-types/index-parts/consent-banner.d.ts +7 -0
  219. package/dist-types/index-parts/consent-dialog-link.d.ts +7 -0
  220. package/dist-types/index-parts/consent-dialog-trigger.d.ts +7 -0
  221. package/dist-types/index-parts/consent-dialog.d.ts +7 -0
  222. package/dist-types/index-parts/consent-gate.d.ts +7 -0
  223. package/dist-types/index-parts/core.d.ts +7 -0
  224. package/dist-types/index-parts/draft.d.ts +7 -0
  225. package/dist-types/index-parts/frame.d.ts +7 -0
  226. package/dist-types/index-parts/hooks.d.ts +7 -0
  227. package/dist-types/index-parts/hosted.d.ts +7 -0
  228. package/dist-types/index-parts/module-hooks.d.ts +7 -0
  229. package/dist-types/index-parts/offline.d.ts +7 -0
  230. package/dist-types/index-parts/presets.d.ts +7 -0
  231. package/dist-types/index-parts/provider.d.ts +7 -0
  232. package/dist-types/index-parts/theme.d.ts +8 -0
  233. package/dist-types/index-parts/translations.d.ts +7 -0
  234. package/dist-types/index.d.ts +32 -28
  235. package/dist-types/kernel-selector.d.ts +68 -0
  236. package/dist-types/modes.d.ts +26 -0
  237. package/dist-types/module-hooks/iframe-blocker.d.ts +33 -1
  238. package/dist-types/module-hooks/network-blocker.d.ts +23 -0
  239. package/dist-types/module-hooks/network-hold.d.ts +47 -0
  240. package/dist-types/module-hooks.d.ts +4 -4
  241. package/dist-types/panel-link.d.ts +1 -1
  242. package/dist-types/panel-trigger.d.ts +1 -1
  243. package/dist-types/panel.d.ts +13 -1
  244. package/dist-types/postcss-tailwind3.d.ts +21 -0
  245. package/dist-types/preferences.d.ts +12 -1
  246. package/dist-types/primitives/accordion.d.ts +1 -1
  247. package/dist-types/primitives/button.d.ts +1 -1
  248. package/dist-types/primitives/collapsible.d.ts +1 -1
  249. package/dist-types/primitives/dialog.d.ts +1 -1
  250. package/dist-types/primitives/preference-item.d.ts +1 -1
  251. package/dist-types/primitives/switch.d.ts +1 -1
  252. package/dist-types/primitives/tabs.d.ts +1 -1
  253. package/dist-types/primitives.d.ts +7 -7
  254. package/dist-types/prompt.d.ts +1 -1
  255. package/dist-types/provider.d.ts +174 -28
  256. package/dist-types/server/fetch-ssr-data.d.ts +1 -1
  257. package/dist-types/server/headers.d.ts +14 -4
  258. package/dist-types/server/index.d.ts +5 -5
  259. package/dist-types/server/normalize-url.d.ts +14 -7
  260. package/dist-types/server/types.d.ts +12 -1
  261. package/dist-types/theme-provider.d.ts +2 -2
  262. package/dist-types/transports/hosted.d.ts +36 -0
  263. package/dist-types/transports/manifest.d.ts +48 -0
  264. package/dist-types/transports/offline.d.ts +7 -16
  265. package/dist-types/types/index.d.ts +3 -3
  266. package/dist-types/types/manager.d.ts +1 -1
  267. package/dist-types/types/theme/index.d.ts +1 -1
  268. package/dist-types/ui-config-context.d.ts +14 -2
  269. package/dist-types/utils/deferred-module.d.ts +13 -0
  270. package/dist-types/utils/index.d.ts +4 -4
  271. package/dist-types/utils/merge-slot-props.d.ts +17 -3
  272. package/dist-types/utils/merge-styles.d.ts +1 -1
  273. package/dist-types/utils/theme-utils.d.ts +18 -3
  274. package/dist-types/version.d.ts +1 -1
  275. package/docs/README.md +96 -69
  276. package/docs/assets/v3/bottom-bar.png +0 -0
  277. package/docs/assets/v3/brand-card.png +0 -0
  278. package/docs/assets/v3/brand-preferences.png +0 -0
  279. package/docs/assets/v3/choice-wall.png +0 -0
  280. package/docs/assets/v3/headless-bar-html.png +0 -0
  281. package/docs/assets/v3/headless-bar-mobile.png +0 -0
  282. package/docs/assets/v3/headless-bar.png +0 -0
  283. package/docs/assets/v3/slim-bar.png +0 -0
  284. package/docs/concepts/choose-your-setup.md +138 -0
  285. package/docs/concepts/consent-categories.md +84 -0
  286. package/docs/concepts/consent-state.md +421 -0
  287. package/docs/concepts/data-fetching.md +270 -0
  288. package/docs/concepts/how-consent-works.md +123 -0
  289. package/docs/concepts/modes.md +278 -0
  290. package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +8 -60
  291. package/docs/customization/class-names.md +202 -0
  292. package/docs/customization/dark-mode.md +157 -0
  293. package/docs/customization/motion.md +128 -0
  294. package/docs/customization/overview.md +68 -33
  295. package/docs/customization/recipes.md +838 -47
  296. package/docs/customization/slots.md +217 -35
  297. package/docs/customization/stylesheets.md +248 -0
  298. package/docs/customization/tailwind.md +863 -0
  299. package/docs/customization/tokens.md +167 -36
  300. package/docs/customization/translations.md +87 -3
  301. package/docs/frameworks/react/callbacks.md +118 -0
  302. package/docs/frameworks/react/clear-on-revocation.md +106 -0
  303. package/docs/frameworks/react/components/consent-banner.md +48 -27
  304. package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
  305. package/docs/frameworks/react/components/consent-dialog-trigger.md +86 -76
  306. package/docs/frameworks/react/components/consent-dialog.md +111 -58
  307. package/docs/frameworks/react/components/{frame.md → consent-gate.md} +70 -49
  308. package/docs/frameworks/react/components/consent-provider.md +140 -0
  309. package/docs/frameworks/react/components/consent-widget.md +69 -24
  310. package/docs/frameworks/react/components/dev-tools.md +76 -85
  311. package/docs/frameworks/react/components.md +113 -0
  312. package/docs/frameworks/react/compose.md +354 -0
  313. package/docs/frameworks/react/content-security-policy.md +143 -0
  314. package/docs/frameworks/react/customize.md +258 -0
  315. package/docs/frameworks/react/embeds.md +89 -0
  316. package/docs/frameworks/react/gpp.md +163 -0
  317. package/docs/frameworks/react/headless.md +4 -4
  318. package/docs/frameworks/react/hooks.md +70 -0
  319. package/docs/frameworks/react/iab.md +259 -0
  320. package/docs/frameworks/react/network-blocker.md +140 -0
  321. package/docs/frameworks/react/quickstart.md +220 -102
  322. package/docs/frameworks/react/rendering.md +263 -0
  323. package/docs/frameworks/react/scripts.md +114 -0
  324. package/docs/frameworks/react/translations.md +155 -0
  325. package/docs/frameworks/react/troubleshooting.md +188 -61
  326. package/docs/frameworks/react/upgrade-v3.md +651 -0
  327. package/docs/frameworks/react/vendor-consent.md +188 -0
  328. package/docs/guides/banner-experiments.md +672 -0
  329. package/docs/guides/troubleshooting.md +192 -54
  330. package/docs/guides/verify-consent.md +96 -49
  331. package/docs/integrations/adobe-analytics.md +177 -183
  332. package/docs/integrations/ahrefs-analytics.md +162 -178
  333. package/docs/integrations/amplitude.md +172 -180
  334. package/docs/integrations/building-integrations.md +137 -33
  335. package/docs/integrations/clearbit.md +164 -178
  336. package/docs/integrations/cloudflare-web-analytics.md +166 -180
  337. package/docs/integrations/cloudflare-zaraz.md +333 -0
  338. package/docs/integrations/crisp.md +174 -182
  339. package/docs/integrations/databuddy.md +167 -197
  340. package/docs/integrations/fathom-analytics.md +168 -180
  341. package/docs/integrations/front-chat.md +308 -0
  342. package/docs/integrations/google-maps.md +142 -108
  343. package/docs/integrations/google-tag-manager.md +258 -185
  344. package/docs/integrations/google-tag.md +226 -182
  345. package/docs/integrations/heap.md +173 -179
  346. package/docs/integrations/hightouch.md +171 -181
  347. package/docs/integrations/hotjar.md +169 -179
  348. package/docs/integrations/intercom.md +193 -177
  349. package/docs/integrations/klaviyo.md +473 -0
  350. package/docs/integrations/linkedin-insights.md +184 -174
  351. package/docs/integrations/logrocket.md +170 -180
  352. package/docs/integrations/matomo-analytics.md +198 -202
  353. package/docs/integrations/meta-pixel.md +198 -174
  354. package/docs/integrations/microsoft-clarity.md +173 -179
  355. package/docs/integrations/microsoft-uet.md +158 -178
  356. package/docs/integrations/mixpanel-analytics.md +165 -184
  357. package/docs/integrations/one-dollar-stats.md +292 -0
  358. package/docs/integrations/openai-pixel.md +214 -325
  359. package/docs/integrations/overview.md +152 -83
  360. package/docs/integrations/pinterest-tag.md +315 -0
  361. package/docs/integrations/pirsch.md +179 -183
  362. package/docs/integrations/plausible-analytics.md +182 -182
  363. package/docs/integrations/posthog.md +323 -264
  364. package/docs/integrations/promptwatch.md +164 -178
  365. package/docs/integrations/reddit-pixel.md +195 -181
  366. package/docs/integrations/rudderstack.md +211 -210
  367. package/docs/integrations/rybbit-analytics.md +181 -184
  368. package/docs/integrations/segment.md +192 -178
  369. package/docs/integrations/sentry.md +402 -0
  370. package/docs/integrations/snapchat-pixel.md +196 -180
  371. package/docs/integrations/tiktok-pixel.md +181 -174
  372. package/docs/integrations/umami-analytics.md +173 -182
  373. package/docs/integrations/vercel-analytics.md +176 -181
  374. package/docs/integrations/x-pixel.md +186 -174
  375. package/docs/integrations/youtube.md +150 -111
  376. package/package.json +48 -17
  377. package/dist/component-hooks/use-manager.js +0 -2
  378. package/dist/components/frame/atoms.js +0 -1
  379. package/dist/components/frame/frame.js +0 -2
  380. package/dist/components/frame/index.js +0 -2
  381. package/dist/frame.js +0 -2
  382. package/dist/ui-save.js +0 -1
  383. package/dist-types/component-hooks/use-manager.d.ts +0 -40
  384. package/dist-types/components/frame/atoms.d.ts +0 -11
  385. package/dist-types/components/frame/frame.d.ts +0 -2
  386. package/dist-types/components/frame/index.d.ts +0 -24
  387. package/dist-types/frame.d.ts +0 -1
  388. package/dist-types/ui-save.d.ts +0 -5
  389. package/docs/assets/v3/brand-bar.png +0 -0
  390. package/docs/assets/v3/mobile-card.png +0 -0
  391. package/docs/assets/v3/preferences.png +0 -0
  392. package/docs/frameworks/react/components/consent-manager-provider.md +0 -62
  393. package/docs/frameworks/react/concepts/consent-categories.md +0 -33
  394. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +0 -58
  395. package/docs/frameworks/react/iab/overview.md +0 -53
  396. package/docs/frameworks/react/script-loader.md +0 -55
  397. package/docs/frameworks/react/styling/overview.md +0 -207
  398. package/docs/guides/consent-state.md +0 -60
  399. package/docs/guides/data-fetching.md +0 -163
  400. package/docs/guides/deployment-modes.md +0 -63
  401. package/docs/upgrade-v3.md +0 -334
  402. package/readme.json +0 -48
  403. package/src/iab/styles.css +0 -11
  404. package/src/styles.css +0 -10
  405. /package/dist/components/{frame → consent-gate}/types.js +0 -0
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/consent-actions";import o from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,useRef as s}from"react";import{useHeadlessConsentUI as a}from"../../component-hooks/use-headless-consent-ui.js";import{useTranslations as i}from"../../component-hooks/use-translations.js";import{Slot as l}from"../shared/libs/slot.js";import{usePolicyRule as c,useSetActiveUI as d}from"../../hooks.js";import{useFocusTrap as m}from"../../hooks/use-focus-trap.js";import{useTheme as p}from"../../hooks/use-theme.js";import{useUIConfig as u}from"../../ui-config-context.js";import{getSlotProps as b,mergeSlotProps as h}from"../../utils/merge-slot-props.js";import{Box as f}from"../shared/primitives/box.js";import{ConsentButton as C}from"../shared/primitives/button.js";import{InlineLegalLinks as B}from"../shared/primitives/legal-links/index.js";import{useConsentBannerSurface as g}from"./surface-context.js";import{useBannerCopy as y}from"./use-banner-copy.js";let j={"opt-out":"Do not sell or share my data",preferences:"Manage preferences"},N=r(({children:t,...n},r)=>{let{title:s}=y();return e(f,{ref:r,baseClassName:o.title,"data-testid":"consent-banner-title",slotKey:"banner.title",...n,asChild:!0,children:e("h2",{children:t??s})})});N.displayName="ConsentBannerTitle";let k=r(({children:n,legalLinks:r,asChild:s,className:a,style:i,noStyle:c,...d},m)=>{let{description:b}=y(),{components:f}=u(),{noStyle:C}=p(),g="banner",j=h(f?.description?.[g],{baseClassName:o.description,className:a,"data-context":g,"data-testid":"consent-banner-description",noStyle:c??C,style:i,...d});return s?e(l,{ref:m,...j,children:n??b}):t("div",{ref:m,...j,children:[n??b,e(B,{links:r,context:"banner",testIdPrefix:"consent-banner-legal-link"})]})});k.displayName="ConsentBannerDescription";let x=r(({children:t,className:n,style:r,...s},a)=>{let{components:i}=u(),{noStyle:l}=p(),c=h(i?.banner?.actions,{baseClassName:n,noStyle:l,style:r,...s});return e(f,{ref:a,baseClassName:o.footer,"data-testid":"consent-banner-footer",slotKey:"banner.footer",...c,children:t})});x.displayName="ConsentBannerFooter";let R=r(({children:t,...n},r)=>{let{blocking:a}=g(),{title:i}=y(),l=s(null),c=r||l;return m(a,c),e(f,{ref:c,tabIndex:-1,baseClassName:o.card,"data-testid":"consent-banner-card",slotKey:"banner.card","aria-label":n["aria-label"]||i,"aria-modal":a?"true":void 0,role:a?"dialog":"region",...n,children:t})});R.displayName="ConsentBannerCard";let S=r(({children:t,...n},r)=>e(f,{ref:r,baseClassName:o.header,"data-testid":"consent-banner-header",slotKey:"banner.header",...n,children:t}));S.displayName="ConsentBannerHeader";let v=r(({children:t,...o},r)=>e(f,{ref:r,baseClassName:n.actionGroup,"data-testid":"consent-banner-footer-sub-group",slotKey:"banner.actionGroup",...o,children:t}));v.displayName="ConsentBannerFooterSubGroup";let D=r(({children:t,...n},o)=>{let{common:r}=i();return e(C,{ref:o,action:"reject-consent","data-testid":"consent-banner-reject-button",closeConsentBanner:!0,...n,children:t??r.rejectAll})});D.displayName="ConsentBannerRejectButton";let A=r(({children:t,...n},o)=>{let{common:r}=i();return e(C,{ref:o,action:"open-consent-dialog","data-testid":"consent-banner-customize-button",...n,children:t??r.customize})});A.displayName="ConsentBannerCustomizeButton";let F=r(({children:t,...n},o)=>{let{common:r}=i(),{noStyle:s}=p();return e(C,{ref:o,action:"accept-consent","data-testid":"consent-banner-accept-button",closeConsentBanner:!0,noStyle:s,...n,children:t??r.acceptAll})});F.displayName="ConsentBannerAcceptButton";let K=r(({children:t,...n},o)=>{let{common:r}=i(),{noStyle:s}=p();return e(C,{ref:o,action:"dismiss-notice",consentAction:"dismiss","data-action":"dismiss","data-testid":"consent-banner-dismiss-button",noStyle:s,...n,children:t??r.acknowledge??r.dismiss})});K.displayName="ConsentBannerDismissButton";let z=r(({right:t,children:n,asChild:r,className:s,style:a,noStyle:m,onClick:f,...C},B)=>{let{rights:g}=i(),y=c(),{components:N}=u(),{noStyle:k}=p(),x=d(),R=("opt-out"===t?g?.optOut:g?.preferences)??j[t];return e(r?l:"button",{ref:B,type:r?void 0:"button",...h(b(N,"banner.rightLink"),{baseClassName:o.rightLink,className:s,noStyle:m??k,style:a}),"data-action":"right","data-right":t,"data-c15t-rights":y.rights.join(" "),"data-testid":`consent-banner-right-link-${t}`,onClick:e=>{f?.(e),e.defaultPrevented||x("dialog")},...C,children:n??R})});z.displayName="ConsentBannerRightLink";let G=r(({rights:t,children:n,...r},s)=>{let{banner:i}=a(),l=(t??i.preferenceControls).filter(e=>"disclosure"!==e);return void 0===n&&0===l.length?null:e(f,{ref:s,baseClassName:o.rights,"data-testid":"consent-banner-rights",slotKey:"banner.rights",...r,children:n??l.map(t=>e(z,{right:t},t))})});G.displayName="ConsentBannerRights";let L=N,H=k,T=x,I=v,P=R,w=S,M=D,O=A,$=F,q=K,E=G,J=z;export{$ as AcceptButton,P as Card,F as ConsentBannerAcceptButton,R as ConsentBannerCard,A as ConsentBannerCustomizeButton,k as ConsentBannerDescription,K as ConsentBannerDismissButton,x as ConsentBannerFooter,v as ConsentBannerFooterSubGroup,S as ConsentBannerHeader,D as ConsentBannerRejectButton,z as ConsentBannerRightLink,G as ConsentBannerRights,N as ConsentBannerTitle,O as CustomizeButton,H as Description,q as DismissButton,T as Footer,I as FooterSubGroup,w as Header,M as RejectButton,J as RightLink,E as Rights,L as Title};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/consent-actions";import o from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,isValidElement as s,useRef as a}from"react";import{useHeadlessConsentUI as i}from"../../component-hooks/use-headless-consent-ui.js";import{useTranslations as l}from"../../component-hooks/use-translations.js";import{useComposedRefs as c}from"../shared/libs/compose-refs.js";import{Slot as d}from"../shared/libs/slot.js";import{usePolicyRule as m,useSetActiveUI as p}from"../../hooks.js";import{useFocusTrap as u}from"../../hooks/use-focus-trap.js";import{useTheme as b}from"../../hooks/use-theme.js";import{useUIConfig as h}from"../../ui-config-context.js";import{getSlotProps as f,mergeSlotProps as C}from"../../utils/merge-slot-props.js";import{Box as B}from"../shared/primitives/box.js";import{ConsentButton as g}from"../shared/primitives/button.js";import{InlineLegalLinks as y}from"../shared/primitives/legal-links/index.js";import{useConsentBannerSurface as j}from"./surface-context.js";import{useBannerCopy as N}from"./use-banner-copy.js";let k={"opt-out":"Do not sell or share my data",preferences:"Manage preferences"},x=r(({children:t,asChild:n,...r},a)=>{let{title:i}=N();return e(B,{ref:a,baseClassName:o.title,"data-testid":"consent-banner-title",slotKey:"banner.title",...r,asChild:!0,children:n&&s(t)?t:e("h2",{children:t??i})})});x.displayName="ConsentBannerTitle";let A=r(({children:n,legalLinks:r,asChild:a,className:i,style:l,noStyle:c,...m},p)=>{let{description:u}=N(),{components:f}=h(),{noStyle:B}=b(),g="banner",j=C(f?.description?.[g],{baseClassName:o.description,className:i,"data-context":g,"data-testid":"consent-banner-description",noStyle:c??B,style:l,...m});return a&&s(n)?e(d,{ref:p,...j,children:n}):t("div",{ref:p,...j,children:[n??u,e(y,{links:r,context:"banner",testIdPrefix:"consent-banner-legal-link"})]})});A.displayName="ConsentBannerDescription";let R=r(({children:t,className:n,style:r,...s},a)=>{let{components:i}=h(),{noStyle:l}=b(),c=C(i?.banner?.actions,{baseClassName:n,noStyle:l,style:r,...s});return e(B,{ref:a,baseClassName:o.footer,"data-testid":"consent-banner-footer",slotKey:"banner.footer",...c,children:t})});R.displayName="ConsentBannerFooter";let S=r(({children:t,...n},r)=>{let{blocking:s}=j(),{title:i}=N(),l=a(null),d=c(l,r);return u(s,l),e(B,{ref:d,tabIndex:-1,baseClassName:o.card,"data-testid":"consent-banner-card",slotKey:"banner.card","aria-label":n["aria-label"]||i,"aria-modal":s?"true":void 0,role:s?"dialog":"region",...n,children:t})});S.displayName="ConsentBannerCard";let v=r(({children:t,...n},r)=>e(B,{ref:r,baseClassName:o.header,"data-testid":"consent-banner-header",slotKey:"banner.header",...n,children:t}));v.displayName="ConsentBannerHeader";let D=r(({children:t,...o},r)=>e(B,{ref:r,baseClassName:n.actionGroup,"data-testid":"consent-banner-footer-sub-group",slotKey:"banner.actionGroup",...o,children:t}));D.displayName="ConsentBannerFooterSubGroup";let z=r(({children:t,...n},o)=>{let{common:r}=l();return e(g,{ref:o,action:"reject-consent",consentAction:"reject","data-testid":"consent-banner-reject-button",closeConsentBanner:!0,...n,children:t??r.rejectAll})});z.displayName="ConsentBannerRejectButton";let F=r(({children:t,...n},o)=>{let{common:r}=l();return e(g,{ref:o,action:"open-consent-dialog",consentAction:"customize","data-testid":"consent-banner-customize-button",...n,children:t??r.customize})});F.displayName="ConsentBannerCustomizeButton";let K=r(({children:t,...n},o)=>{let{common:r}=l(),{noStyle:s}=b();return e(g,{ref:o,action:"accept-consent",consentAction:"accept","data-testid":"consent-banner-accept-button",closeConsentBanner:!0,noStyle:s,...n,children:t??r.acceptAll})});K.displayName="ConsentBannerAcceptButton";let G=r(({children:t,...n},o)=>{let{common:r}=l(),{noStyle:s}=b();return e(g,{ref:o,action:"dismiss-notice",consentAction:"dismiss","data-action":"dismiss","data-testid":"consent-banner-dismiss-button",noStyle:s,...n,children:t??r.acknowledge??r.dismiss})});G.displayName="ConsentBannerDismissButton";let L=r(({right:t,children:n,asChild:r,className:s,style:a,noStyle:i,onClick:c,...u},B)=>{let{rights:g}=l(),y=m(),{components:j}=h(),{noStyle:N}=b(),x=p(),A=("opt-out"===t?g?.optOut:g?.preferences)??k[t];return e(r?d:"button",{ref:B,type:r?void 0:"button",...C(f(j,"banner.rightLink"),{baseClassName:o.rightLink,className:s,noStyle:i??N,style:a}),"data-action":"right","data-right":t,"data-c15t-rights":y.rights.join(" "),"data-testid":`consent-banner-right-link-${t}`,onClick:e=>{c?.(e),e.defaultPrevented||x("dialog")},...u,children:n??A})});L.displayName="ConsentBannerRightLink";let H=r(({rights:t,children:n,...r},s)=>{let{banner:a}=i(),l=(t??a.preferenceControls).filter(e=>"disclosure"!==e);return void 0===n&&0===l.length?null:e(B,{ref:s,baseClassName:o.rights,"data-testid":"consent-banner-rights",slotKey:"banner.rights",...r,children:n??l.map(t=>e(L,{right:t},t))})});H.displayName="ConsentBannerRights";let T=x,I=A,P=R,w=D,M=S,O=v,$=z,q=F,E=K,J=G,Q=H,U=L;export{E as AcceptButton,M as Card,K as ConsentBannerAcceptButton,S as ConsentBannerCard,F as ConsentBannerCustomizeButton,A as ConsentBannerDescription,G as ConsentBannerDismissButton,R as ConsentBannerFooter,D as ConsentBannerFooterSubGroup,v as ConsentBannerHeader,z as ConsentBannerRejectButton,L as ConsentBannerRightLink,H as ConsentBannerRights,x as ConsentBannerTitle,q as CustomizeButton,I as Description,J as DismissButton,P as Footer,w as FooterSubGroup,O as Header,$ as RejectButton,U as RightLink,Q as Rights,T as Title};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as t}from"react/jsx-runtime";import{useHeadlessConsentUI as n}from"../../component-hooks/use-headless-consent-ui.js";import{warmDialogChunk as e}from"../../chunk-warming.js";import{PolicyActionsRenderer as o}from"../shared/policy-actions.js";import{ConsentBannerAcceptButton as r,ConsentBannerCustomizeButton as s,ConsentBannerDismissButton as c,ConsentBannerFooter as i,ConsentBannerFooterSubGroup as a,ConsentBannerRejectButton as m,ConsentBannerRights as u}from"./components.js";import{resolveBannerPrimaryActions as d}from"./resolve-banner-primary-actions.js";let p=function(n,o){let{key:i,consentAction:a,...u}=o;switch(n){case"accept":return t(r,{consentAction:a,"data-testid":"consent-banner-accept-button",...u},i);case"reject":return t(m,{consentAction:a,"data-testid":"consent-banner-reject-button",...u},i);case"customize":return t(s,{consentAction:a,"data-testid":"consent-banner-customize-button",onPointerEnter:e,onFocus:e,...u},i);case"dismiss":return t(c,{consentAction:a,"data-testid":"consent-banner-dismiss-button",...u},i);case"save":return null;default:throw Error(`Unhandled consent banner action: ${n}`)}},l=({children:e,renderAction:r})=>{let{banner:s}=n();return t(o,{state:{...s,primaryActions:[...d(s.primaryActions,s.orderedActions)]},leading:void 0===e?t(u,{rights:s.preferenceControls}):e,Footer:i,FooterSubGroup:a,classNames:{},renderAction:r,renderDefaultAction:p})},b=l;export{l as ConsentBannerPolicyActions,b as PolicyActions};
2
+ import{jsx as t}from"react/jsx-runtime";import{useHeadlessConsentUI as n}from"../../component-hooks/use-headless-consent-ui.js";import{PolicyActionsRenderer as e}from"../shared/policy-actions.js";import{ConsentBannerAcceptButton as o,ConsentBannerCustomizeButton as r,ConsentBannerDismissButton as s,ConsentBannerFooter as c,ConsentBannerFooterSubGroup as i,ConsentBannerRejectButton as a,ConsentBannerRights as d}from"./components.js";import{resolveBannerPrimaryActions as m}from"./resolve-banner-primary-actions.js";let u=function(n,e){let{key:c,consentAction:i,...d}=e;switch(n){case"accept":return t(o,{consentAction:i,"data-testid":"consent-banner-accept-button",...d},c);case"reject":return t(a,{consentAction:i,"data-testid":"consent-banner-reject-button",...d},c);case"customize":return t(r,{consentAction:i,"data-testid":"consent-banner-customize-button",...d},c);case"dismiss":return t(s,{consentAction:i,"data-testid":"consent-banner-dismiss-button",...d},c);case"save":return null;default:throw Error(`Unhandled consent banner action: ${n}`)}},l=({children:o,renderAction:r})=>{let{banner:s}=n();return t(e,{state:{...s,primaryActions:[...m(s.primaryActions,s.orderedActions)]},leading:void 0===o?t(d,{rights:s.preferenceControls}):o,Footer:c,FooterSubGroup:i,classNames:{},renderAction:r,renderDefaultAction:u})},p=l;export{l as ConsentBannerPolicyActions,p as PolicyActions};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as t,jsxs as n}from"react/jsx-runtime";import e from"@c15t/ui/styles/components/consent-actions";import r from"@c15t/ui/styles/components/consent-banner";import{Fragment as o}from"react";import{useHeadlessConsentUI as i}from"../../component-hooks/use-headless-consent-ui.js";import{Box as a}from"../shared/primitives/box.js";import{BrandingLink as s}from"../shared/ui/branding.js";import{useComponentConfig as c}from"../../hooks/use-component-config.js";import{ConsentBannerRoot as l}from"./atoms/root.js";import{ConsentBannerAcceptButton as d,ConsentBannerCard as m,ConsentBannerCustomizeButton as p,ConsentBannerDescription as u,ConsentBannerDismissButton as h,ConsentBannerFooter as b,ConsentBannerFooterSubGroup as f,ConsentBannerHeader as y,ConsentBannerRejectButton as g,ConsentBannerRights as j,ConsentBannerTitle as A}from"./components.js";import{ErrorBoundary as k}from"./error-boundary.js";import{resolveBannerPrimaryActions as v}from"./resolve-banner-primary-actions.js";let N=({noStyle:N,disableAnimation:S,scrollLock:w,trapFocus:C,title:L,description:x,rejectButtonText:z,customizeButtonText:F,acceptButtonText:P,dismissButtonText:B,legalLinks:$,hideBranding:G=!1,layout:E,direction:K,primaryButton:R,models:U,uiSource:q,variant:D,position:H,blocking:I})=>{let{banner:J}=i({prompt:{blocking:I,direction:K,layout:E,position:H,primaryActions:"string"==typeof R?[R]:R,scrollLock:w,trapFocus:C,variant:D}}),M=c({disableAnimation:S,noStyle:N,scrollLock:J.scrollLock,trapFocus:J.trapFocus}),{orderedActions:O}=J,Q=new Set(O),T=v(J.primaryActions,O),V=J.actionGroups,W=J.direction,{shouldFillActions:X}=J,Y=(n,e)=>{if(!Q.has(n))return null;let r=T.includes(n);switch(n){case"reject":return t(g,{consentAction:"reject",isPrimary:r,className:e,"data-action":"reject","data-testid":"consent-banner-reject-button",children:z});case"accept":return t(d,{consentAction:"accept",isPrimary:r,className:e,"data-action":"accept","data-testid":"consent-banner-accept-button",children:P});case"customize":return t(p,{consentAction:"customize",isPrimary:r,className:e,"data-action":"customize","data-testid":"consent-banner-customize-button",children:F});case"dismiss":return t(h,{consentAction:"dismiss",isPrimary:r,className:e,"data-action":"dismiss","data-testid":"consent-banner-dismiss-button",children:B});case"save":return null;default:throw Error(`Unhandled consent banner button type: ${n}`)}};return t(k,{fallback:t("div",{children:"Something went wrong with the Consent Banner."}),children:t(l,{...M,models:U,uiSource:q,variant:D,position:H,blocking:I,children:n(a,{baseClassName:r.cardShell,slotKey:"banner.cardShell",children:[t(s,{hideBranding:G,variant:"banner-tag",slotContext:"banner","data-testid":"consent-banner-branding"}),n(m,{children:[n(y,{children:[t(A,{children:L}),t(u,{legalLinks:$,children:x})]}),n(b,{className:e.actionRoot,"data-direction":W,"data-fill":!!X||void 0,"data-split":V.length>1&&!X||void 0,children:[t(j,{rights:J.preferenceControls}),V.map((n,r)=>{if(Array.isArray(n)){let i=n.filter(t=>Q.has(t));if(0===i.length)return null;let a=n.join("-");return t(f,{className:e.actionGroup,"data-direction":W,"data-fill":!!X||void 0,children:i.map(n=>t(o,{children:Y(n)},n))},a?`group-${a}`:`group-${r}`)}return Q.has(n)?t(o,{children:Y(n)},n):null})]})]})]})})})};export{N as ConsentBanner};
2
+ import{jsx as t,jsxs as n}from"react/jsx-runtime";import e from"@c15t/ui/styles/components/consent-actions";import r from"@c15t/ui/styles/components/consent-banner";import{Fragment as o}from"react";import{useHeadlessConsentUI as i}from"../../component-hooks/use-headless-consent-ui.js";import{Box as s}from"../shared/primitives/box.js";import{BrandingLink as a}from"../shared/ui/branding.js";import{useComponentConfig as c}from"../../hooks/use-component-config.js";import{useIABPolicyGuard as l}from"../../hooks/use-iab-policy-guard.js";import{StreamedSurface as d}from"../shared/streamed-surface.js";import{ConsentBannerRoot as m}from"./atoms/root.js";import{ConsentBannerAcceptButton as p,ConsentBannerCard as u,ConsentBannerCustomizeButton as h,ConsentBannerDescription as b,ConsentBannerDismissButton as f,ConsentBannerFooter as y,ConsentBannerFooterSubGroup as g,ConsentBannerHeader as j,ConsentBannerRejectButton as k,ConsentBannerRights as A,ConsentBannerTitle as v}from"./components.js";import{ErrorBoundary as N}from"./error-boundary.js";import{resolveBannerPrimaryActions as S}from"./resolve-banner-primary-actions.js";let w=({noStyle:d,disableAnimation:w,scrollLock:C,trapFocus:L,title:x,description:z,rejectButtonText:F,customizeButtonText:P,acceptButtonText:B,dismissButtonText:$,legalLinks:G,hideBranding:E=!1,layout:K,direction:R,primaryButton:U,models:q,uiSource:D,variant:H,position:I,blocking:J})=>{l();let{banner:M}=i({prompt:{blocking:J,direction:R,layout:K,position:I,primaryActions:"string"==typeof U?[U]:U,scrollLock:C,trapFocus:L,variant:H}}),O=c({disableAnimation:w,noStyle:d,scrollLock:M.scrollLock,trapFocus:M.trapFocus}),{orderedActions:Q}=M,T=new Set(Q),V=S(M.primaryActions,Q),W=M.actionGroups,X=M.direction,{shouldFillActions:Y}=M,Z=(n,e)=>{if(!T.has(n))return null;let r=V.includes(n);switch(n){case"reject":return t(k,{consentAction:"reject",isPrimary:r,className:e,"data-action":"reject","data-testid":"consent-banner-reject-button",children:F});case"accept":return t(p,{consentAction:"accept",isPrimary:r,className:e,"data-action":"accept","data-testid":"consent-banner-accept-button",children:B});case"customize":return t(h,{consentAction:"customize",isPrimary:r,className:e,"data-action":"customize","data-testid":"consent-banner-customize-button",children:P});case"dismiss":return t(f,{consentAction:"dismiss",isPrimary:r,className:e,"data-action":"dismiss","data-testid":"consent-banner-dismiss-button",children:$});case"save":return null;default:throw Error(`Unhandled consent banner button type: ${n}`)}};return t(N,{fallback:t("div",{children:"Something went wrong with the Consent Banner."}),children:t(m,{...O,models:q,uiSource:D,variant:H,position:I,blocking:J,children:n(s,{baseClassName:r.cardShell,slotKey:"banner.cardShell",children:[t(a,{hideBranding:E,variant:"banner-tag",slotContext:"banner","data-testid":"consent-banner-branding"}),n(u,{children:[n(j,{children:[t(v,{children:x}),t(b,{legalLinks:G,children:z})]}),n(y,{className:e.actionRoot,"data-direction":X,"data-fill":!!Y||void 0,"data-split":W.length>1&&!Y||void 0,children:[t(A,{rights:M.preferenceControls}),W.map((n,r)=>{if(Array.isArray(n)){let i=n.filter(t=>T.has(t));if(0===i.length)return null;let s=n.join("-");return t(g,{className:e.actionGroup,"data-direction":X,"data-fill":!!Y||void 0,children:i.map(n=>t(o,{children:Z(n)},n))},s?`group-${s}`:`group-${r}`)}return T.has(n)?t(o,{children:Z(n)},n):null})]})]})]})})})},C=n=>t(d,{children:t(w,{...n})});export{C as ConsentBanner};
@@ -0,0 +1 @@
1
+ import*as t from"@c15t/ui/styles/sheets/dialog";import*as s from"@c15t/ui/styles/sheets/first-paint";let e=[s,t];export{e as DIALOG_SHEETS};
@@ -0,0 +1 @@
1
+ import*as t from"@c15t/ui/styles/sheets/first-paint";let s=[t];export{s as FIRST_PAINT_SHEETS};
@@ -0,0 +1 @@
1
+ import*as s from"@c15t/ui/styles/sheets/dialog";import*as t from"@c15t/ui/styles/sheets/iab-dialog";import{IAB_FIRST_PAINT_SHEETS as i}from"./iab-first-paint-sheets.js";let e=[...i,s,t];export{e as IAB_DIALOG_SHEETS};
@@ -0,0 +1 @@
1
+ import*as t from"@c15t/ui/styles/sheets/iab-first-paint";import{FIRST_PAINT_SHEETS as s}from"./first-paint-sheets.js";let i=[...s,t];export{i as IAB_FIRST_PAINT_SHEETS};
@@ -0,0 +1 @@
1
+ import{useMemo as e}from"react";let o=function(...e){return o=>{for(let s of e){if("function"==typeof s){s(o);continue}s&&"current"in s&&(s.current=o)}}},s=function(s,r){return e(()=>o(s,r),[s,r])};export{o as composeRefs,s as useComposedRefs};
@@ -1 +1 @@
1
- import{createElement as e,forwardRef as t,isValidElement as r}from"react";let n=function(e,t){return"function"!=typeof e?t:"function"!=typeof t?e:r=>{t(r),e(r)}},o=function(e,t){let r=Object.getOwnPropertyDescriptor(e,t)?.get;return"function"==typeof r&&!0===r.isReactWarning},f=t(({children:t,...f},i)=>{if(!r(t))return null;let c=t.props,l=o(t.props,"ref")?t.ref:o(t,"ref")?t.props.ref:t.props.ref??t.ref,p={...f,...c,className:[f.className,c.className].filter(Boolean).join(" "),ref:function(...e){return t=>{for(let r of e){if("function"==typeof r){r(t);continue}r&&"current"in r&&(r.current=t)}}}(i,l),style:{...f.style,...c.style}};for(let[e,t]of Object.entries(f))/^on[A-Z]/u.test(e)&&(p[e]=n(t,c[e]));return e(t.type,{key:t.key??void 0,...p})});f.displayName="Slot";export{f as Slot};
1
+ import{createElement as e,forwardRef as t,isValidElement as r}from"react";import{composeRefs as o}from"./compose-refs.js";let f=function(e,t){return"function"!=typeof e?t:"function"!=typeof t?e:r=>{t(r),e(r)}},n=function(e,t){let r=Object.getOwnPropertyDescriptor(e,t)?.get;return"function"==typeof r&&!0===r.isReactWarning},s=t(({children:t,...s},p)=>{if(!r(t))return null;let l=t.props,i=n(t.props,"ref")?t.ref:n(t,"ref")?t.props.ref:t.props.ref??t.ref,c={...s,...l,className:[s.className,l.className].filter(Boolean).join(" "),ref:o(p,i),style:{...s.style,...l.style}};for(let[e,t]of Object.entries(s))/^on[A-Z]/u.test(e)&&(c[e]=f(t,l[e]));return e(t.type,{key:t.key??void 0,...c})});s.displayName="Slot";export{s as Slot};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{forwardRef as e,useCallback as o}from"react";import{useConsentSaveAction as r}from"../../../draft.js";import{useDismissNotice as n,useSetActiveUI as a}from"../../../hooks.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as s}from"../../../ui-config-context.js";import{getSlotProps as c,mergeSlotProps as m}from"../../../utils/merge-slot-props.js";import{Slot as d}from"../libs/slot.js";import*as l from"../ui/button/index.js";let u=["primary","secondary","neutral","consentAction","isPrimary","performDefaultAction"],f=function(t){if(t.variant||t.mode)return{mode:t.mode??"stroke",variant:t.variant??"neutral"};let e=t.theme?.consentActions,o=[t.consentAction&&"save"!==t.consentAction?e?.[t.consentAction]:void 0,t.isPrimary?e?.primary:void 0,e?.default,{mode:"stroke",variant:t.isPrimary?"primary":"neutral"}];return{mode:o.find(t=>t?.mode)?.mode??"stroke",variant:o.find(t=>t?.variant)?.variant??"neutral"}},p=e(({asChild:e,className:p,style:v,noStyle:y,action:b,slotKey:j,baseClassName:k,variant:g,mode:h,size:C="small",consentAction:A,isPrimary:x,onClick:N,closeConsentBanner:P=!1,closeConsentDialog:w=!1,performDefaultAction:E=!0,category:q,...B},O)=>{let S=r(),z=a(),D=n(),{noStyle:V,theme:F}=i(),{components:G}=s(),H=f({consentAction:A,isPrimary:x,mode:h,theme:F,variant:g}),I="primary"===H.variant?"button.primary":"button.secondary",J=m(c(G,j??I),{baseClassName:[l.buttonVariants({mode:H.mode,size:C,variant:H.variant}).root(),k],className:p,noStyle:V||y,style:{...v}});if(!q&&"set-consent"===b)throw Error("Category is required for set-consent action");let K=o(t=>{if(N?.(t),t.defaultPrevented)return;let e="accept-consent"===b||"reject-consent"===b||"custom-consent"===b;if((P||w)&&!e&&z("none"),"open-consent-dialog"===b&&z("dialog"),E&&"open-consent-dialog"!==b)switch(b){case"accept-consent":S("all");break;case"reject-consent":S("none");break;case"custom-consent":S();break;case"dismiss-notice":D();break;case"set-consent":if(!q)throw Error("Category is required for set-consent action");S({[q]:!0})}},[P,w,N,S,z,b,q,D,E]),L=Object.fromEntries(Object.entries(B).filter(([t])=>!u.includes(t))),M=!(V||y);return t(e?d:"button",{ref:O,type:e?void 0:"button","data-variant":M?H.variant:void 0,"data-mode":M?H.mode:void 0,"data-size":M?C:void 0,"data-action":A,...J,onClick:K,...L})});p.displayName="ConsentButton";export{p as ConsentButton};
1
+ import{jsx as t}from"react/jsx-runtime";import{EARLY_TAP_OPT_OUT as o}from"@c15t/core/surface-actions";import{forwardRef as e,useCallback as n}from"react";import{useIdleDialogWarming as r,warmDialogChunk as i}from"../../../chunk-warming.js";import{toSaveUISource as s,useConsentTracking as a}from"../../../context/consent-tracking-context.js";import{useConsentSaveAction as c}from"../../../draft-context.js";import{useDismissNotice as m,useSetActiveUI as d}from"../../../hooks.js";import{useTheme as l}from"../../../hooks/use-theme.js";import{useUIConfig as u}from"../../../ui-config-context.js";import{getSlotProps as f,mergeSlotProps as p}from"../../../utils/merge-slot-props.js";import{Slot as v}from"../libs/slot.js";import*as y from"../ui/button/index.js";let j=["primary","secondary","neutral","consentAction","isPrimary","performDefaultAction"],b={"accept-consent":"accept","dismiss-notice":"dismiss","open-consent-dialog":"customize","reject-consent":"reject"},k=function(t){let{action:o,dataAction:e,ownsClick:n,performDefaultAction:r}=t;return!(!n&&(r||"open-consent-dialog"===o)&&b[o]===e)&&(!0===t.asChild||Object.values(b).includes(String(e)))},g=function(t,o){let e;for(let n of o)t in n&&(e=n[t]);return e},C=function(t){if(t.variant||t.mode)return{mode:t.mode??"stroke",variant:t.variant??"neutral"};let o=t.theme?.consentActions,e=[t.consentAction&&"save"!==t.consentAction?o?.[t.consentAction]:void 0,t.isPrimary?o?.primary:void 0,o?.default,{mode:"stroke",variant:t.isPrimary?"primary":"neutral"}];return{mode:e.find(t=>t?.mode)?.mode??"stroke",variant:e.find(t=>t?.variant)?.variant??"neutral"}},h=e(({asChild:e,className:b,style:h,noStyle:x,action:A,slotKey:P,baseClassName:E,variant:w,mode:N,size:S="small",consentAction:F,isPrimary:O,onClick:q,onFocus:z,onPointerEnter:B,closeConsentBanner:D=!1,closeConsentDialog:V=!1,performDefaultAction:G=!0,category:H,...I},J)=>{var K;let L=c(),{uiSource:M}=a(),Q=n(t=>L(t,s(M)),[L,M]),R=d(),T=m(),{noStyle:U,theme:W}=l(),{components:X}=u(),Y=C({consentAction:F,isPrimary:O,mode:N,theme:W,variant:w}),Z="primary"===Y.variant?"button.primary":"button.secondary",$=p(f(X,P??Z),{baseClassName:[y.buttonVariants({mode:Y.mode,size:S,variant:Y.variant}).root(),E],className:b,noStyle:U||x,style:{...h}});if(!H&&"set-consent"===A)throw Error("Category is required for set-consent action");let _=n(t=>{if(q?.(t),t.defaultPrevented)return;let o="accept-consent"===A||"reject-consent"===A||"custom-consent"===A;if((D||V)&&!o&&R("none"),"open-consent-dialog"===A&&R("dialog"),G&&"open-consent-dialog"!==A)switch(A){case"accept-consent":Q("all");break;case"reject-consent":Q("none");break;case"custom-consent":Q();break;case"dismiss-notice":T();break;case"set-consent":if(!H)throw Error("Category is required for set-consent action");Q({[H]:!0})}},[D,V,q,Q,R,A,H,T,G]),tt="open-consent-dialog"===A;r(tt);let to=z??$.onFocus,te=B??$.onPointerEnter,tn=n(t=>{to?.(t),tt&&i()},[to,tt]),tr=n(t=>{te?.(t),tt&&i()},[te,tt]),ti=e?v:"button",ts=Object.fromEntries(Object.entries(I).filter(([t])=>!j.includes(t))),ta=!(U||x),tc={"data-action":F,type:e?void 0:"button"},tm=[tc,$,ts],td=k({action:A,asChild:e,dataAction:g("data-action",tm),ownsClick:void 0!==(K={asChild:e,onClick:q,type:g("type",tm)}).onClick||!0===K.asChild||"submit"===K.type||"reset"===K.type,performDefaultAction:G})?{[o]:"off"}:void 0;return t(ti,{ref:J,"data-variant":ta?Y.variant:void 0,"data-mode":ta?Y.mode:void 0,"data-size":ta?S:void 0,...tc,...$,onClick:_,onFocus:tn,onPointerEnter:tr,...ts,...td})});h.displayName="ConsentButton";export{h as ConsentButton};
@@ -1 +1 @@
1
- import{jsxs as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/legal-links";import{resolveTranslations as l}from"@c15t/ui/utils";import{useContext as n,useMemo as r,useSyncExternalStore as i}from"react";import{KernelContext as s}from"../../../../context.js";import{V3UIConfigContext as o,useUIConfig as a}from"../../../../ui-config-context.js";import{defaultTranslationConfig as u}from"../../../../utils/default-translation-config.js";import{mergeSlotProps as g}from"../../../../utils/merge-slot-props.js";let m=()=>()=>void 0,c=function(){let e=n(s),t=i(e?t=>e.subscribe(t):m,()=>e?.getSnapshot().translations??null,()=>e?.getServerSnapshot().translations??null);return r(()=>t?.translations?t.translations.legalLinks:l({},u).legalLinks,[t])},f=function(e){let t=n(o).legalLinks;return null==e?null:Object.fromEntries(Object.entries(t??{}).filter(([t])=>e.includes(t)))},p=({links:l,context:n,testIdPrefix:r})=>{let i=f(l),s=c(),{components:o}=a(),u=g(o?.["legal-links"]?.root,{}),m=g(o?.link?.[n],{baseClassName:t.legalLink});return i&&0!==Object.keys(i).length?e("span",{...u,children:[" ",Object.entries(i).map(([t,l],n,i)=>l?e("span",{children:[e("a",{href:l.href,target:l.target||"_blank",rel:l.rel||("_blank"===l.target?"noopener noreferrer":void 0),...m,"data-testid":r?`${r}-${t}`:void 0,children:[l.label??s?.[t],n<i.length-1&&","]}),n<i.length-1&&" "]},String(t)):null)]}):null};export{p as InlineLegalLinks,f as useFilteredLegalLinks};
1
+ import{jsxs as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/legal-links";import{resolveTranslations as l}from"@c15t/ui/utils";import{useContext as n,useMemo as r,useSyncExternalStore as i}from"react";import{KernelContext as s}from"../../../../context.js";import{useServerSnapshot as o}from"../../../../kernel-selector.js";import{V3UIConfigContext as a,useUIConfig as m}from"../../../../ui-config-context.js";import{defaultTranslationConfig as u}from"../../../../utils/default-translation-config.js";import{mergeSlotProps as c}from"../../../../utils/merge-slot-props.js";let g=()=>()=>void 0,f=function(){let e=n(s),t=o(e),a=i(e?t=>e.subscribe(t):g,()=>e?.getSnapshot().translations??null,()=>t()?.translations??null);return r(()=>a?.translations?a.translations.legalLinks:l({},u).legalLinks,[a])},p=function(e){let t=n(a).legalLinks;return null==e?null:Object.fromEntries(Object.entries(t??{}).filter(([t])=>e.includes(t)))},k=({links:l,context:n,testIdPrefix:r})=>{let i=p(l),s=f(),{components:o}=m(),a=c(o?.["legal-links"]?.root,{}),u=c(o?.link?.[n],{baseClassName:t.legalLink});return i&&0!==Object.keys(i).length?e("span",{...a,children:[" ",Object.entries(i).map(([t,l],n,i)=>l?e("span",{children:[e("a",{href:l.href,target:l.target||"_blank",rel:l.rel||("_blank"===l.target?"noopener noreferrer":void 0),...u,"data-testid":r?`${r}-${t}`:void 0,children:[l.label??s?.[t],n<i.length-1&&","]}),n<i.length-1&&" "]},String(t)):null)]}):null};export{k as InlineLegalLinks,p as useFilteredLegalLinks};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as e}from"react/jsx-runtime";import{HydrationSnapshotContext as r,StreamedPrefetchContext as t}from"../../context.js";import{useKernel as o}from"../../kernel-selector.js";import*as l from"react";let u="u"<typeof document?l.useEffect:l.useLayoutEffect,n=function(e){if("fulfilled"===e.status)return e.value;throw e},a=function(e){let{use:r}=l;return r?r(e):n(e)},d=({children:l,streamed:n})=>{let d=o(),s=a(n.settled),c=n.snapshotFor(s);return u(()=>{n.adopt(s)},[n,s]),e(r.Provider,{value:c===d.getServerSnapshot()?null:c,children:e(t.Provider,{value:void 0,children:l})})},s=({children:r})=>{let o=(0,l.useContext)(t);return o?e(l.Suspense,{fallback:null,children:e(d,{streamed:o,children:r})}):r};export{s as StreamedSurface,n as readRecorded};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as e}from"react/jsx-runtime";import{useContext as t,version as r}from"react";import{GlobalThemeContext as n}from"../../context/theme-context.js";import{useUIConfig as o}from"../../ui-config-context.js";let c=Number.parseInt(r,10)>=19,s=({sheets:r,noStyle:s})=>{let{nonce:m,styles:i}=o(),l=t(n);return!1===i||s||l.noStyle?null:r.map(t=>c&&!m?e("style",{href:t.id,precedence:"c15t",children:t.css},t.id):e("style",{"data-c15t-styles":t.id,nonce:m,dangerouslySetInnerHTML:{__html:t.css}},t.id))};export{s as SurfaceStyles};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as t}from"react/jsx-runtime";import{getDataDisabled as e}from"@c15t/ui/primitives/data-state";import{getDialogState as o,isDialogDismissKey as a}from"@c15t/ui/primitives/dialog";import{createContext as l,forwardRef as r,useContext as i,useEffect as n,useId as s,useMemo as d,useRef as u}from"react";import{createPortal as c}from"react-dom";import{Slot as g}from"../../libs/slot.js";import{useControllableState as p}from"../../libs/use-controllable-state.js";import{useFocusTrap as m}from"../../../../hooks/use-focus-trap.js";import{useScrollLock as f}from"../../../../hooks/use-scroll-lock.js";let D=l(null),y=function(){let t=i(D);if(!t)throw Error("Dialog components must be used within DialogRoot");return t},b=({children:e,defaultOpen:o=!1,onOpenChange:a,open:l})=>{let r=s().replace(/:/gu,""),i=u(null),[c,g]=p({defaultValue:o,onChange:a,value:l});n(()=>{if("u">typeof document){if(c){i.current=document.activeElement;return}i.current?.focus()}},[c]);let m=d(()=>({contentId:`c15t-dialog-content-${r}`,descriptionId:`c15t-dialog-description-${r}`,open:c,restoreFocusRef:i,setOpen:g,titleId:`c15t-dialog-title-${r}`}),[c,r,i,g]);return t(D.Provider,{value:m,children:e})},h=r(({asChild:e,children:a,onClick:l,...r},i)=>{let{open:n,setOpen:s}=y();return t(e?g:"button",{"aria-expanded":n,"data-slot":"dialog-trigger","data-state":o(n),onClick:t=>{s(!0),l?.(t)},ref:i,...e?r:{type:"button",...r},children:a})});h.displayName="DialogTrigger";let v=({children:t})=>"u"<typeof document?null:c(t,document.body),C=r(({children:e,onClick:a,...l},r)=>{let{open:i,setOpen:n}=y();return i?t("button",{"aria-label":"Dismiss dialog","data-slot":"dialog-overlay","data-state":o(i),onClick:t=>{n(!1),a?.(t)},ref:r,tabIndex:-1,type:"button",...l,children:e}):null});C.displayName="DialogOverlay";let k=r(({children:e,closeOnOutsideClick:l=!0,initialFocusRef:r,onKeyDown:i,onMouseDown:s,...d},c)=>{let{contentId:g,descriptionId:p,open:D,setOpen:b,titleId:h}=y(),v=u(null);return(m(D,v),f(D),n(()=>{D&&(r?.current?.focus(),r?.current||v.current?.focus())},[r,D]),D)?t("dialog",{"aria-describedby":p,"aria-labelledby":h,"aria-modal":"true","data-slot":"dialog-content","data-state":o(D),id:g,...{onKeyDown:t=>{a(t.key)&&(t.preventDefault(),b(!1)),i?.(t)},onMouseDown:t=>{l&&t.target===t.currentTarget&&b(!1),s?.(t)}},ref:t=>{v.current=t,"function"==typeof c?c(t):c&&(c.current=t)},open:D,tabIndex:-1,...d,children:e}):null});k.displayName="DialogContent";let T=r(({children:e,...o},a)=>{let{titleId:l}=y();return t("h2",{ref:a,id:l,"data-slot":"dialog-title",...o,children:e})});T.displayName="DialogTitle";let N=r((e,o)=>{let{descriptionId:a}=y();return t("p",{ref:o,id:a,"data-slot":"dialog-description",...e})});N.displayName="DialogDescription";let j=r(({asChild:a,children:l,disabled:r,onClick:i,...n},s)=>{let{open:d,setOpen:u}=y();return t(a?g:"button",{"data-disabled":e(r),"data-slot":"dialog-close","data-state":o(d),disabled:r,onClick:t=>{r||u(!1),i?.(t)},ref:s,...a?n:{type:"button",...n},children:l})});j.displayName="DialogClose";export{j as Close,k as Content,N as Description,C as Overlay,v as Portal,b as Root,T as Title,h as Trigger};
2
+ import{jsx as t}from"react/jsx-runtime";import{getDataDisabled as e}from"@c15t/ui/primitives/data-state";import{getDialogState as o,isDialogDismissKey as a}from"@c15t/ui/primitives/dialog";import{firstTabbable as l}from"@c15t/ui/utils/dom";import{createContext as i,forwardRef as r,useContext as n,useEffect as s,useId as d,useMemo as u,useRef as c}from"react";import{createPortal as g}from"react-dom";import{Slot as m}from"../../libs/slot.js";import{useControllableState as p}from"../../libs/use-controllable-state.js";import{useFocusTrap as f}from"../../../../hooks/use-focus-trap.js";import{useScrollLock as b}from"../../../../hooks/use-scroll-lock.js";let D=i(null),y=function(){let t=n(D);if(!t)throw Error("Dialog components must be used within DialogRoot");return t},h=({children:e,defaultOpen:o=!1,onOpenChange:a,open:l})=>{let i=d().replace(/:/gu,""),r=c(null),[n,g]=p({defaultValue:o,onChange:a,value:l});s(()=>{if("u">typeof document){if(n){r.current=document.activeElement;return}r.current?.focus()}},[n]);let m=u(()=>({contentId:`c15t-dialog-content-${i}`,descriptionId:`c15t-dialog-description-${i}`,open:n,restoreFocusRef:r,setOpen:g,titleId:`c15t-dialog-title-${i}`}),[n,i,r,g]);return t(D.Provider,{value:m,children:e})},v=r(({asChild:e,children:a,onClick:l,...i},r)=>{let{open:n,setOpen:s}=y();return t(e?m:"button",{"aria-expanded":n,"data-slot":"dialog-trigger","data-state":o(n),onClick:t=>{s(!0),l?.(t)},ref:r,...e?i:{type:"button",...i},children:a})});v.displayName="DialogTrigger";let C=({children:t})=>"u"<typeof document?null:g(t,document.body),k=r(({children:e,onClick:a,...l},i)=>{let{open:r,setOpen:n}=y();return r?t("button",{"aria-label":"Dismiss dialog","data-slot":"dialog-overlay","data-state":o(r),onClick:t=>{n(!1),a?.(t)},ref:i,tabIndex:-1,type:"button",...l,children:e}):null});k.displayName="DialogOverlay";let T=r(({children:e,closeOnOutsideClick:i=!0,initialFocusRef:r,onKeyDown:n,onMouseDown:d,...u},g)=>{let{contentId:m,descriptionId:p,open:D,setOpen:h,titleId:v}=y(),C=c(null);return(f(D,C,{initialFocus:"first-tabbable"}),b(D),s(()=>{if(D){let t=C.current,e=r?.current??(t?l(t):void 0)??t;e?.focus()}},[r,D]),D)?t("dialog",{"aria-describedby":p,"aria-labelledby":v,"aria-modal":"true","data-slot":"dialog-content","data-state":o(D),id:m,...{onKeyDown:t=>{a(t.key)&&(t.preventDefault(),h(!1)),n?.(t)},onMouseDown:t=>{i&&t.target===t.currentTarget&&h(!1),d?.(t)}},ref:t=>{C.current=t,"function"==typeof g?g(t):g&&(g.current=t)},open:D,tabIndex:-1,...u,children:e}):null});T.displayName="DialogContent";let N=r(({children:e,...o},a)=>{let{titleId:l}=y();return t("h2",{ref:a,id:l,"data-slot":"dialog-title",...o,children:e})});N.displayName="DialogTitle";let j=r((e,o)=>{let{descriptionId:a}=y();return t("p",{ref:o,id:a,"data-slot":"dialog-description",...e})});j.displayName="DialogDescription";let x=r(({asChild:a,children:l,disabled:i,onClick:r,...n},s)=>{let{open:d,setOpen:u}=y();return t(a?m:"button",{"data-disabled":e(i),"data-slot":"dialog-close","data-state":o(d),disabled:i,onClick:t=>{i||u(!1),r?.(t)},ref:s,...a?n:{type:"button",...n},children:l})});x.displayName="DialogClose";export{x as Close,T as Content,j as Description,k as Overlay,C as Portal,h as Root,N as Title,v as Trigger};
@@ -1 +1 @@
1
- import{jsx as r,jsxs as e}from"react/jsx-runtime";import{forwardRef as o}from"react";let t=({title:t,iconPath:n})=>{let i=o((o,i)=>e("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,ref:i,...o,children:[r("title",{children:t}),n]}));return i.displayName=`${t}Icon`,i};export{t as LucideIcon};
1
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{forwardRef as o}from"react";let t=({title:t,iconPath:n})=>{let i=o((o,i)=>r("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,ref:i,...o,children:[t?e("title",{children:t}):null,n]}));return i.displayName=`${t??"Decorative"}Icon`,i};export{t as LucideIcon};
@@ -1 +1 @@
1
- import{jsx as l,jsxs as t}from"react/jsx-runtime";let e=({title:e="c15t",titleId:i="c15t-icon",...a})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 446 445","aria-labelledby":i,...a,children:[l("title",{id:i,children:e}),l("path",{fill:"currentColor",d:"M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"})]}),i=({title:e="INTH",titleId:i="inth-logo",...a})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 88 90",fill:"none","aria-labelledby":i,...a,children:[l("title",{id:i,children:e}),l("path",{fill:"currentColor",d:"M40.9164 0V8.26444H27.6933V26.7966H40.9164V35.0608H6.15594V26.7966H19.3788V8.26444H6.15594V0H40.9164Z"}),l("path",{fill:"currentColor",d:"M72.1149 20.1264V0H80.0343V35.0608H74.2747L54.9798 14.8193V35.0608H47.0604V0H52.964L72.1149 20.1264Z"}),l("path",{fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd",d:"M71.36 41.6H88V89.6H0V41.6H61.12V31.04L71.36 41.6ZM6.15594 48.0891V56.4034H19.1784V83.2H27.4428V56.4034H40.5656V48.0891H6.15594ZM47.0603 48.1391V83.2H55.3247V70.2441H71.7531V83.2H80.0675V48.1391H71.7531V61.9797H55.3247V48.1391H47.0603Z"})]}),a=t=>l(i,{titleId:"inth-full-logo",...t}),n=t=>l(i,{titleId:"inth-icon",...t}),r=({title:e="Privacy",titleId:i="fingerprint-icon",...a})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-labelledby":i,...a,children:[l("title",{id:i,children:e}),l("path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"}),l("path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88"}),l("path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02"}),l("path",{d:"M2 12a10 10 0 0 1 18-6"}),l("path",{d:"M2 16h.01"}),l("path",{d:"M21.8 16c.2-2 .131-5.354 0-6"}),l("path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"}),l("path",{d:"M8.65 22c.21-.66.45-1.32.57-2"}),l("path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2"})]}),o=({title:e="Settings",titleId:i="settings-icon",...a})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-labelledby":i,...a,children:[l("title",{id:i,children:e}),l("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),l("circle",{cx:"12",cy:"12",r:"3"})]});export{e as C15TIconOnly,r as FingerprintIcon,n as InthIconOnly,a as InthLogo,o as SettingsIcon};
1
+ import{jsx as l,jsxs as t}from"react/jsx-runtime";let c=({title:c="c15t",titleId:e="c15t-icon",...i})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 446 445","aria-labelledby":e,...i,children:[l("title",{id:e,children:c}),l("path",{fill:"currentColor",d:"M223.178.313c39.064 0 70.732 31.668 70.732 70.732-.001 39.064-31.668 70.731-70.732 70.731-12.181 0-23.642-3.079-33.649-8.502l-55.689 55.689a70.267 70.267 0 0 1 5.574 13.441h167.531c8.695-29.217 35.762-50.523 67.804-50.523 39.064 0 70.731 31.668 70.731 70.732s-31.668 70.732-70.731 70.732c-32.042 0-59.108-21.306-67.803-50.523H139.413a70.417 70.417 0 0 1-7.888 17.396l54.046 54.046c10.893-6.851 23.786-10.815 37.605-10.815 39.064 0 70.732 31.669 70.732 70.733 0 39.064-31.668 70.731-70.732 70.731s-70.732-31.667-70.732-70.731c0-10.518 2.296-20.499 6.414-29.471l-57.78-57.78c-8.972 4.117-18.952 6.414-29.47 6.414-39.063 0-70.731-31.668-70.732-70.732 0-39.064 31.669-70.732 70.733-70.732 12.18 0 23.642 3.079 33.649 8.502l55.688-55.688c-5.423-10.007-8.502-21.469-8.502-33.65 0-39.064 31.668-70.733 70.732-70.733Zm0 343.555c-16.742 0-30.314 13.572-30.314 30.314 0 16.741 13.572 30.313 30.314 30.313s30.314-13.572 30.314-30.313c0-16.742-13.572-30.314-30.314-30.314ZM71.611 192.299c-16.742 0-30.315 13.572-30.315 30.314s13.573 30.314 30.315 30.314c16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314Zm303.138 0c-16.729 0-30.294 13.551-30.315 30.275l.001.039-.001.038c.021 16.725 13.586 30.276 30.315 30.276 16.741 0 30.313-13.572 30.313-30.314 0-16.741-13.572-30.314-30.313-30.314ZM223.178 40.73c-16.742 0-30.314 13.573-30.314 30.315s13.573 30.313 30.314 30.313c16.742 0 30.313-13.572 30.314-30.313 0-16.742-13.572-30.314-30.314-30.315Z"})]}),e=({title:c="INTH",titleId:e="inth-logo",...i})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 88 90",fill:"none","aria-labelledby":e,...i,children:[l("title",{id:e,children:c}),l("path",{fill:"currentColor",d:"M40.9164 0V8.26444H27.6933V26.7966H40.9164V35.0608H6.15594V26.7966H19.3788V8.26444H6.15594V0H40.9164Z"}),l("path",{fill:"currentColor",d:"M72.1149 20.1264V0H80.0343V35.0608H74.2747L54.9798 14.8193V35.0608H47.0604V0H52.964L72.1149 20.1264Z"}),l("path",{fill:"currentColor",fillRule:"evenodd",clipRule:"evenodd",d:"M71.36 41.6H88V89.6H0V41.6H61.12V31.04L71.36 41.6ZM6.15594 48.0891V56.4034H19.1784V83.2H27.4428V56.4034H40.5656V48.0891H6.15594ZM47.0603 48.1391V83.2H55.3247V70.2441H71.7531V83.2H80.0675V48.1391H71.7531V61.9797H55.3247V48.1391H47.0603Z"})]}),i=t=>l(e,{titleId:"inth-full-logo",...t}),o=t=>l(e,{titleId:"inth-icon",...t});export{c as C15TIconOnly,o as InthIconOnly,i as InthLogo};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import{getDataDisabled as t}from"@c15t/ui/primitives/data-state";import{PREFERENCE_ITEM_INTERNAL_SLOTS as r,PREFERENCE_ITEM_SLOTS as n,getPreferenceItemState as a,togglePreferenceItemValue as o}from"@c15t/ui/primitives/preference-item";import l from"@c15t/ui/styles/components/preference-item";import{createContext as i,forwardRef as s,useContext as c,useId as m,useMemo as d}from"react";import{useControllableState as f}from"../../libs/use-controllable-state.js";import{useTheme as p}from"../../../../hooks/use-theme.js";import{useUIConfig as u}from"../../../../ui-config-context.js";import{getSlotProps as y,mergeSlotProps as g}from"../../../../utils/merge-slot-props.js";let I=()=>({auxiliary:e=>[l.auxiliary,e?.class].filter(Boolean).join(" "),content:e=>[l.content,e?.class].filter(Boolean).join(" "),contentInner:e=>[l.contentInner,e?.class].filter(Boolean).join(" "),contentViewport:e=>[l.contentViewport,e?.class].filter(Boolean).join(" "),control:e=>[l.control,e?.class].filter(Boolean).join(" "),header:e=>[l.header,e?.class].filter(Boolean).join(" "),leading:e=>[l.leading,e?.class].filter(Boolean).join(" "),meta:e=>[l.meta,e?.class].filter(Boolean).join(" "),root:e=>[l.root,e?.class].filter(Boolean).join(" "),title:e=>[l.title,e?.class].filter(Boolean).join(" "),trigger:e=>[l.trigger,e?.class].filter(Boolean).join(" ")}),P=i(null),b=function(){let e=c(P);if(!e)throw Error("PreferenceItem components must be used within PreferenceItemRoot");return e},h=s(({children:r,className:o,defaultOpen:l=!1,disabled:i,noStyle:s,onOpenChange:c,open:b,slotKey:h,...S},j)=>{let{components:C}=u(),{noStyle:N}=p(),v=I(),[x,B]=f({defaultValue:l,onChange:c,value:b}),w=m().replace(/:/gu,""),T=s??N,V=g(y(C,h),{baseClassName:v.root(),className:o,noStyle:T,...S}),R=d(()=>({contentId:`c15t-preference-item-content-${w}`,disabled:i,noStyle:T,open:x,setOpen:B,triggerId:`c15t-preference-item-trigger-${w}`}),[i,T,x,w,B]);return e(P.Provider,{value:R,children:e("div",{...V,ref:j,"data-disabled":t(i),"data-slot":n.root,"data-state":a(x),children:r})})});h.displayName="PreferenceItemRoot";let S=s(({children:r,className:l,noStyle:i,onClick:s,slotKey:c,...m},d)=>{let{components:f}=u(),{noStyle:P}=p(),h=I(),{contentId:S,disabled:j,noStyle:C,open:N,setOpen:v,triggerId:x}=b();return e("button",{...g(y(f,c),{baseClassName:h.trigger(),className:l,noStyle:i??C??P,...m}),ref:d,"aria-controls":S,"aria-disabled":j||void 0,"aria-expanded":N,"data-disabled":t(j),"data-slot":n.trigger,"data-state":a(N),disabled:j,id:x,onClick:e=>{j||v(o(N)),s?.(e)},type:"button",children:r})});S.displayName="PreferenceItemTrigger";let j=function(t,r,n){let a=s(({className:t,noStyle:a,slotKey:o,...l},i)=>{let{components:s}=u(),{noStyle:c}=p(),{noStyle:m}=b(),d=I();return e("div",{...g(y(s,o),{baseClassName:d[n](),className:t,noStyle:a??m??c,...l}),ref:i,"data-slot":r})});return a.displayName=t,a},C=j("PreferenceItemLeading",n.leading,"leading"),N=j("PreferenceItemHeader",n.header,"header"),v=j("PreferenceItemMeta",n.meta,"meta"),x=j("PreferenceItemAuxiliary",n.auxiliary,"auxiliary"),B=j("PreferenceItemControl",n.control,"control"),w=s(({children:t,className:r,noStyle:a,...o},l)=>{let{components:i}=u(),{noStyle:s}=p(),{noStyle:c}=b(),m=I(),{slotKey:d,...f}=o;return e("h3",{...g(y(i,d),{baseClassName:m.title(),className:r,noStyle:a??c??s,...f}),ref:l,"data-slot":n.title,children:t})});w.displayName="PreferenceItemTitle";let T=s(({children:t,className:o,innerClassName:l,innerSlotKey:i,noStyle:s,slotKey:c,viewportClassName:m,viewportSlotKey:d,...f},P)=>{let{components:h}=u(),{noStyle:S}=p(),j=I(),{contentId:C,noStyle:N,open:v,triggerId:x}=b(),B=s??N??S,w=g(y(h,c),{baseClassName:j.content(),className:o,noStyle:B,...f}),T=g(y(h,d),{baseClassName:j.contentViewport(),className:m,noStyle:B}),V=g(y(h,i),{baseClassName:j.contentInner(),className:l,noStyle:B});return e("div",{...w,ref:P,"aria-hidden":!v,"aria-labelledby":x,"data-slot":n.content,"data-state":a(v),id:C,inert:!v,children:e("div",{...T,"data-slot":r.contentViewport,children:e("div",{...V,"data-slot":r.contentInner,children:t})})})});T.displayName="PreferenceItemContent";export{x as Auxiliary,T as Content,B as Control,N as Header,C as Leading,v as Meta,h as Root,w as Title,S as Trigger,I as preferenceItemVariants};
2
+ import{jsx as e}from"react/jsx-runtime";import{getDataDisabled as t}from"@c15t/ui/primitives/data-state";import{PREFERENCE_ITEM_INTERNAL_SLOTS as r,PREFERENCE_ITEM_SLOTS as n,getPreferenceItemState as a,togglePreferenceItemValue as o}from"@c15t/ui/primitives/preference-item";import l from"@c15t/ui/styles/components/preference-item";import{createContext as i,forwardRef as s,useContext as c,useId as m,useMemo as d,useState as f}from"react";import{useControllableState as p}from"../../libs/use-controllable-state.js";import{useTheme as u}from"../../../../hooks/use-theme.js";import{useUIConfig as y}from"../../../../ui-config-context.js";import{getSlotProps as g,mergeSlotProps as I}from"../../../../utils/merge-slot-props.js";let P=()=>({auxiliary:e=>[l.auxiliary,e?.class].filter(Boolean).join(" "),content:e=>[l.content,e?.class].filter(Boolean).join(" "),contentInner:e=>[l.contentInner,e?.class].filter(Boolean).join(" "),contentViewport:e=>[l.contentViewport,e?.class].filter(Boolean).join(" "),control:e=>[l.control,e?.class].filter(Boolean).join(" "),header:e=>[l.header,e?.class].filter(Boolean).join(" "),leading:e=>[l.leading,e?.class].filter(Boolean).join(" "),meta:e=>[l.meta,e?.class].filter(Boolean).join(" "),root:e=>[l.root,e?.class].filter(Boolean).join(" "),title:e=>[l.title,e?.class].filter(Boolean).join(" "),trigger:e=>[l.trigger,e?.class].filter(Boolean).join(" ")}),b=i(null),h=function(){let e=c(b);if(!e)throw Error("PreferenceItem components must be used within PreferenceItemRoot");return e},S=s(({children:r,className:o,defaultOpen:l=!1,disabled:i,noStyle:s,onOpenChange:c,open:f,slotKey:h,...S},j)=>{let{components:C}=y(),{noStyle:N}=u(),v=P(),[x,B]=p({defaultValue:l,onChange:c,value:f}),w=m().replace(/:/gu,""),T=s??N,V=I(g(C,h),{baseClassName:v.root(),className:o,noStyle:T,...S}),R=d(()=>({contentId:`c15t-preference-item-content-${w}`,disabled:i,noStyle:T,open:x,setOpen:B,triggerId:`c15t-preference-item-trigger-${w}`}),[i,T,x,w,B]);return e(b.Provider,{value:R,children:e("div",{...V,ref:j,"data-disabled":t(i),"data-slot":n.root,"data-state":a(x),children:r})})});S.displayName="PreferenceItemRoot";let j=s(({children:r,className:l,noStyle:i,onClick:s,slotKey:c,...m},d)=>{let{components:f}=y(),{noStyle:p}=u(),b=P(),{contentId:S,disabled:j,noStyle:C,open:N,setOpen:v,triggerId:x}=h();return e("button",{...I(g(f,c),{baseClassName:b.trigger(),className:l,noStyle:i??C??p,...m}),ref:d,"aria-controls":S,"aria-disabled":j||void 0,"aria-expanded":N,"data-disabled":t(j),"data-slot":n.trigger,"data-state":a(N),disabled:j,id:x,onClick:e=>{j||v(o(N)),s?.(e)},type:"button",children:r})});j.displayName="PreferenceItemTrigger";let C=function(t,r,n){let a=s(({className:t,noStyle:a,slotKey:o,...l},i)=>{let{components:s}=y(),{noStyle:c}=u(),{noStyle:m}=h(),d=P();return e("div",{...I(g(s,o),{baseClassName:d[n](),className:t,noStyle:a??m??c,...l}),ref:i,"data-slot":r})});return a.displayName=t,a},N=C("PreferenceItemLeading",n.leading,"leading"),v=C("PreferenceItemHeader",n.header,"header"),x=C("PreferenceItemMeta",n.meta,"meta"),B=C("PreferenceItemAuxiliary",n.auxiliary,"auxiliary"),w=C("PreferenceItemControl",n.control,"control"),T=s(({children:t,className:r,noStyle:a,...o},l)=>{let{components:i}=y(),{noStyle:s}=u(),{noStyle:c}=h(),m=P(),{slotKey:d,...f}=o;return e("h3",{...I(g(i,d),{baseClassName:m.title(),className:r,noStyle:a??c??s,...f}),ref:l,"data-slot":n.title,children:t})});T.displayName="PreferenceItemTitle";let V=s(({children:t,className:o,forceMount:l=!1,innerClassName:i,innerSlotKey:s,noStyle:c,slotKey:m,viewportClassName:d,viewportSlotKey:p,...b},S)=>{let{components:j}=y(),{noStyle:C}=u(),N=P(),{contentId:v,noStyle:x,open:B,triggerId:w}=h(),[T,V]=f(B);B&&!T&&V(!0);let R=l||B||T,A=c??x??C,H=I(g(j,m),{baseClassName:N.content(),className:o,noStyle:A,...b}),L=I(g(j,p),{baseClassName:N.contentViewport(),className:d,noStyle:A}),M=I(g(j,s),{baseClassName:N.contentInner(),className:i,noStyle:A});return e("div",{...H,ref:S,"aria-hidden":!B,"aria-labelledby":w,"data-slot":n.content,"data-state":a(B),id:v,inert:!B,children:e("div",{...L,"data-slot":r.contentViewport,children:e("div",{...M,"data-slot":r.contentInner,children:R?t:null})})})});V.displayName="PreferenceItemContent";export{B as Auxiliary,V as Content,w as Control,v as Header,N as Leading,x as Meta,S as Root,T as Title,j as Trigger,P as preferenceItemVariants};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ export{ConsentGate,ConsentGateButton,ConsentGateRoot,ConsentGateTitle,Frame,FrameButton,FrameRoot,FrameTitle}from"./components/consent-gate/index.js";
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{defaultTheme as t,generateThemeCSS as m}from"@c15t/ui/theme";let r=({theme:r,colorScheme:n,nonce:o})=>e("style",{id:"c15t-theme",nonce:o,dangerouslySetInnerHTML:{__html:m(r??t,n)}});export{r as ConsentTheme};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{createContext as t,useContext as e}from"react";let n=t({}),o=()=>e(n);export{n as ConsentTrackingContext,o as useConsentTracking};
2
+ import{createContext as n,useContext as e}from"react";let t=n({}),o=()=>e(t),r=function(n){return"banner"===n||"dialog"===n||"widget"===n||"none"===n?n:void 0};export{t as ConsentTrackingContext,r as toSaveUISource,o as useConsentTracking};
@@ -1 +1 @@
1
- export*from"../context.js";export*from"./consent-tracking-context.js";export*from"./theme-context.js";
1
+ export{HydrationSnapshotContext,KernelContext,ProviderServicesContext,StreamedPrefetchContext}from"../context.js";export{ConsentTrackingContext,toSaveUISource,useConsentTracking}from"./consent-tracking-context.js";export{GlobalThemeContext,LocalThemeContext}from"./theme-context.js";
package/dist/context.js CHANGED
@@ -1 +1 @@
1
- import{createContext as e}from"react";let t=e(null);t.displayName="C15tKernelContext";let l=e(null);export{t as KernelContext,l as ProviderServicesContext};
1
+ import{createContext as e}from"react";let t=e(null);t.displayName="C15tKernelContext";let n=e(null),o=e(void 0),r=e(null);export{r as HydrationSnapshotContext,t as KernelContext,n as ProviderServicesContext,o as StreamedPrefetchContext};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{EMPTY_DEVTOOLS_LAUNCHER_SNAPSHOT as e,claimDevToolsLauncher as o,getDevToolsLauncherSnapshot as l,publishDevToolsLauncher as t,subscribeDevToolsLauncher as r}from"@c15t/ui/utils/devtools-launcher";import{useCallback as n,useContext as u,useId as i,useLayoutEffect as s,useMemo as c,useSyncExternalStore as a}from"react";import{KernelContext as m}from"./context.js";let v=()=>e,h=o=>a(n(e=>o?r(o,e):()=>void 0,[o]),n(()=>o?l(o):e,[o]),v),p=()=>null!==h(u(m)).instance,f=()=>{let e=u(m),l=i(),t=h(e);s(()=>{if(e)return o(e,l)},[e,l]);let r=t.owner===l?t.instance:null,{isOpen:a}=t,v=n(e=>r?.dock(e),[r]),p=n(()=>r?.toggle(),[r]);return c(()=>r?{dock:v,isOpen:a,toggle:p}:null,[r,v,a,p])};export{t as publishDevToolsLauncher,f as useDevToolsLauncher,p as useDevToolsLauncherAvailable};
package/dist/devtools.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import{createDevTools as t}from"@c15t/dev-tools";import{createElement as r,forwardRef as o,useCallback as n,useContext as s,useEffect as l,useLayoutEffect as i,useMemo as u,useRef as c}from"react";import{KernelContext as d,ProviderServicesContext as a}from"./context.js";import{useIsHydrated as f}from"./hooks/use-is-hydrated.js";let v=e=>{if(!e)throw Error("c15t: DevTools must be rendered inside <ConsentProvider> from @c15t/react.");return e},g=(e,t)=>{let r=f(),o=c(e);i(()=>{o.current=e},[e]);let n=r&&!t&&e?JSON.stringify([...new Set(e())].sort()):void 0;return u(()=>{if(void 0===n)return;let e=JSON.parse(n);return()=>o.current?.()??e},[n])},m=(e,t)=>{let r=c({clearRecords:e,getPresentation:t});i(()=>{r.current={clearRecords:e,getPresentation:t}},[e,t]);let o=void 0!==e,n=void 0!==t;return u(()=>({clearRecords:o?()=>r.current.clearRecords?.():void 0,getPresentation:n?()=>r.current.getPresentation?.():void 0}),[o,n])},C=({disabled:e=!1,clearRecords:r,getPresentation:o,defaultOpen:n,defaultTab:i,getConsentCategories:u,maxEvents:c,position:f})=>{let C=s(a),p=m(r??C?.clearRecords,o??C?.getPresentation),D=s(d),P=e?null:v(D),h=g(u??C?.getConsentCategories,e);return l(()=>{if(!P)return;let e=t({...p,defaultOpen:n,defaultTab:i,getConsentCategories:h,kernel:P,maxEvents:c,position:f});return()=>e.destroy()},[n,i,h,p,P,c,f]),null},p=C,D=C,P={height:"100%",minHeight:0,width:"100%"},h=o(function({disabled:r=!1,clearRecords:o,getPresentation:l,defaultTab:u,getConsentCategories:f,maxEvents:C,style:p,...D},h){let y=s(a),T=m(o??y?.clearRecords,l??y?.getPresentation),S=s(d),R=r?null:v(S),j=g(f??y?.getConsentCategories,r),k=c(null),w=n(e=>{k.current=e;let t=((e,t)=>{if("function"==typeof e)return e(t);e&&(e.current=t)})(h,e);if("function"==typeof t)return()=>{k.current=null,t()}},[h]);return i(()=>{let e=k.current;if(!R||!e)return;let r=t({...T,container:e,defaultOpen:!0,defaultTab:u,getConsentCategories:j,kernel:R,maxEvents:C});return r.element?.classList.add("c15t-dev-tools--embedded"),()=>r.destroy()},[u,j,T,R,C]),e("div",{...D,ref:w,style:{...P,...p}})}),y=(e={})=>{let{id:t="c15t",name:o="c15t",defaultOpen:n=!1,...s}=e;return{defaultOpen:n,id:t,name:o,render:r(h,s)}},T=y;export{D as C15TDevTools,C as ConsentDevTools,p as DevTools,y as c15tDevtools,T as c15tDevtoolsPlugin,h as C15tTanStackDevtoolsPanel};
2
+ import{jsx as e}from"react/jsx-runtime";import{createDevTools as t}from"@c15t/dev-tools";import{createElement as r,forwardRef as o,useCallback as n,useContext as s,useEffect as l,useLayoutEffect as i,useMemo as c,useRef as u}from"react";import{KernelContext as d,ProviderServicesContext as a}from"./context.js";import{publishDevToolsLauncher as f}from"./devtools-launcher.js";import{useIsHydrated as m}from"./hooks/use-is-hydrated.js";let v=e=>{if(!e)throw Error("c15t: DevTools must be rendered inside <ConsentProvider> from @c15t/react.");return e},g=(e,t)=>{let r=m(),o=u(e);i(()=>{o.current=e},[e]);let n=r&&!t&&e?JSON.stringify([...new Set(e())].sort()):void 0;return c(()=>{if(void 0===n)return;let e=JSON.parse(n);return()=>o.current?.()??e},[n])},C=(e,t)=>{let r=u({clearRecords:e,getPresentation:t});i(()=>{r.current={clearRecords:e,getPresentation:t}},[e,t]);let o=void 0!==e,n=void 0!==t;return c(()=>({clearRecords:o?()=>r.current.clearRecords?.():void 0,getPresentation:n?()=>r.current.getPresentation?.():void 0}),[o,n])},h=({disabled:e=!1,clearRecords:r,getPresentation:o,defaultOpen:n,defaultTab:i,getConsentCategories:c,maxEvents:u,position:m,shadow:h})=>{let p=s(a),y=C(r??p?.clearRecords,o??p?.getPresentation),D=s(d),P=e?null:v(D),T=g(c??p?.getConsentCategories,e);return l(()=>{if(!P)return;let e=t({...y,defaultOpen:n,defaultTab:i,getConsentCategories:T,kernel:P,maxEvents:u,position:m,shadow:h}),r=f(P,e);return()=>{r(),e.destroy()}},[n,i,T,y,P,u,m,h]),null},p=h,y=h,D={height:"100%",minHeight:0,width:"100%"},P=o(function({disabled:r=!1,clearRecords:o,getPresentation:l,defaultTab:c,getConsentCategories:f,maxEvents:m,style:h,theme:p,...y},P){let T=s(a),S=C(o??T?.clearRecords,l??T?.getPresentation),j=s(d),R=r?null:v(j),k=g(f??T?.getConsentCategories,r),w=u(null),x=n(e=>{w.current=e;let t=((e,t)=>{if("function"==typeof e)return e(t);e&&(e.current=t)})(P,e);if("function"==typeof t)return()=>{w.current=null,t()}},[P]);return i(()=>{let e=w.current;if(!R||!e)return;let r=t({...S,container:e,defaultTab:c,embedded:!0,getConsentCategories:k,kernel:R,maxEvents:m});return()=>r.destroy()},[c,k,S,R,m]),e("div",{...y,ref:x,style:{...D,...p?{"--c15t-dev-tools-color-scheme":p}:void 0,...h}})}),T=(e={})=>{let{id:t="c15t",name:o="c15t",defaultOpen:n=!1,...s}=e;return{defaultOpen:n,id:t,name:o,render:(e,t)=>r(P,{...s,theme:("string"==typeof t?t:t?.theme)??s.theme})}},S=T;export{y as C15TDevTools,h as ConsentDevTools,p as DevTools,T as c15tDevtools,S as c15tDevtoolsPlugin,P as C15tTanStackDevtoolsPanel};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{saveConsentSurface as e}from"@c15t/core/surface-actions";import{createContext as t,useCallback as r,useContext as o}from"react";import{KernelContext as n,ProviderServicesContext as s}from"./context.js";import{useResolvedPresentation as a}from"./hooks.js";import{useCommittedRef as i}from"./hooks/use-committed-ref.js";let u=t(null),f={ok:!1},c=function(){let e=o(n);if(!e)throw Error("Consent drafts require a ConsentProvider.");return e},l=function(e){let t=i(c());return r(()=>t.current===e,[t,e])},d=async function(e,t,r,o){let{createPreferenceDraft:n}=await import("@c15t/core/preference-draft");return n(e,{defaults:t}).save({categories:r,uiSource:o})},m=function(){let t=c(),n=o(s),i=o(u),m=i?.kernel===t?i:null,v=a()?.preferences?.defaults,p=l(t);return r((r,o)=>{if(!p())return Promise.resolve(f);let s=n?.getConsentCategories(),a="all"===r||"none"===r;return e(t,()=>m&&(a||void 0===r)?m.save({categories:s,input:r,uiSource:o}):void 0===r?d(t,v,s,o):t.commands.save(r,{...void 0!==s&&{categories:s},...void 0!==o&&{uiSource:o}}),()=>void 0!==r||!m?.getState().isDirty)},[v,m,p,t,n])};export{u as DraftContext,f as REFUSED,m as useConsentSaveAction,c as useDraftKernel,l as useKernelGuard};
package/dist/draft.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import{createContext as t,useCallback as r,useContext as o,useEffect as i,useMemo as s,useState as n,useSyncExternalStore as a}from"react";import{KernelContext as l,ProviderServicesContext as c}from"./context.js";import{useUIConfig as u}from"./ui-config-context.js";import{saveConsentUI as p}from"./ui-save.js";let f=function(e,t){let r={experience:!1,functionality:!1,marketing:!1,measurement:!1,necessary:!0};for(let o of e.policyRule.scope)r[o]=e.explicitChoice?.categories[o]?.value??t?.[o]??("opt-out"===e.policyRule.model||e.policyRule.preselectedCategories.includes(o));return r},d=function(e,t){let r=0,o=0,i=e.getSnapshot(),s=f(i,t),{fingerprint:n}=i.evaluationPolicy.choice,a={displayedCategories:["necessary",...i.policyRule.scope],isDirty:!1,isStale:!1,values:s},l=new Set,c=e=>{for(let t of(a=e,l))t()},u=()=>{r+=1,s=f(i=e.getSnapshot(),t),({fingerprint:n}=i.evaluationPolicy.choice),c({displayedCategories:["necessary",...i.policyRule.scope],isDirty:!1,isStale:!1,values:s})},p=e=>{let t={...a.values},o=!1;for(let r of a.displayedCategories)"necessary"!==r&&"boolean"==typeof e[r]&&t[r]!==e[r]&&(t[r]=e[r],o=!0);o&&(r+=1,c({...a,isDirty:a.displayedCategories.some(e=>t[e]!==s[e]),values:t}))},d=()=>{let t=e.getSnapshot();if(i.explicitChoice===t.explicitChoice&&i.policyRule===t.policyRule&&i.evaluationPolicy===t.evaluationPolicy)return;let r=n!==t.evaluationPolicy.choice.fingerprint;i=t,a.isDirty?r&&!a.isStale&&c({...a,isStale:!0}):u()};return{acceptAll(){p(Object.fromEntries(a.displayedCategories.map(e=>[e,!0])))},connect:()=>(d(),e.subscribe(d)),getSnapshot:()=>a,rejectAll(){p(Object.fromEntries(a.displayedCategories.map(e=>[e,!1])))},reset:u,async save(t,i,s){if(n!==e.getSnapshot().evaluationPolicy.choice.fingerprint||a.isStale)return c({...a,isStale:!0}),{ok:!1};let l={},p=new Set(i??a.displayedCategories);for(let e of a.displayedCategories)"necessary"!==e&&p.has(e)&&(l[e]=a.values[e]);let f=o+=1,d=e.commands.save(t??l,{categories:i}),y=r,g=await d;return g.ok&&f===o&&r===y&&!a.isStale&&n===e.getSnapshot().evaluationPolicy.choice.fingerprint&&(u(),s?.()),g},set(e,t){p({[e]:t})},subscribe:e=>(l.add(e),()=>{l.delete(e)}),update:p}},y=t(null),g=function(){let e=o(l);if(!e)throw Error("Consent drafts require a ConsentProvider.");return e},v=({children:t,initial:r})=>{let s=g(),a=o(y),{presentation:l}=u(),[c,p]=n(()=>d(s,r??l?.preferences?.defaults)),f=a&&!r?a:c;return i(()=>f.connect(),[f]),e(y.Provider,{value:f,children:t})},C=function(){let e=g(),t=o(y),{presentation:r}=u(),[s,a]=n(()=>d(e,r?.preferences?.defaults)),l=t??s;return i(()=>t?void 0:l.connect(),[t,l]),l},m=function(e){let t=g(),i=o(c);return r(r=>{let o=!1;return p(t,()=>e.save(r,i?.getConsentCategories(),()=>{o=!0}),()=>o)},[t,e,i])},h=function(e){let t=a(e.subscribe,e.getSnapshot,e.getSnapshot);return s(()=>({...t,acceptAll:e.acceptAll,rejectAll:e.rejectAll,reset:e.reset,save:e.save,set:e.set,update:e.update}),[t,e])},S=function(){return m(C())},P=function(){let e=C();return{draft:h(e),save:m(e)}},b=function(){return h(C())};export{v as ConsentDraftProvider,b as useConsentDraft,P as useConsentManagerDraft,S as useConsentSaveAction};
2
+ import{jsx as e}from"react/jsx-runtime";import{createPreferenceDraft as t}from"@c15t/core/preference-draft";import{useContext as r,useEffect as n,useMemo as s,useState as a,useSyncExternalStore as f}from"react";import{DraftContext as o,REFUSED as u,useDraftKernel as l,useKernelGuard as c}from"./draft-context.js";import{useResolvedPresentation as d}from"./hooks.js";let i=function(e,r){let[s,f]=a(()=>({draft:t(e,{defaults:r}),kernel:e}));if(n(()=>{s.draft.setDefaults(r)},[s.draft,r]),s.kernel===e)return s.draft;let o={draft:t(e,{defaults:r}),kernel:e};return f(o),o.draft},p=({children:t,initial:n})=>{let s=l(),a=r(o),f=d(),u=i(s,n??f?.preferences?.defaults),c=a&&!n&&a.kernel===s?a:u;return e(o.Provider,{value:c,children:t})},m=function(){let e=l(),t=r(o),n=i(e,d()?.preferences?.defaults);return t?.kernel===e?t:n},D=function(e){let t=f(e.subscribe,e.getState,e.getState),r=c(e.kernel);return s(()=>{let n=e=>(...t)=>{r()&&e(...t)};return{...t,acceptAll:n(e.acceptAll),rejectAll:n(e.rejectAll),reset:n(e.reset),save:()=>r()?e.save():Promise.resolve(u),set:n(e.set),setVendor:n(e.setVendor),update:n(e.update)}},[e,r,t])},C=function(){return m()},S=function(e,t){let r=()=>t(e.getState());return f(e.subscribe,r,r)},v=function(){return D(m())},j=function(){let{isDirty:e,isStale:t,reset:r,save:n,setVendor:a,vendors:f}=D(m());return s(()=>({isDirty:e,isStale:t,reset:r,save:n,setVendor:a,vendors:f}),[e,t,r,n,a,f])};export{p as ConsentDraftProvider,v as useConsentDraft,S as useConsentDraftSlice,C as useConsentDraftStore,j as useVendorDraft};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as r}from"react/jsx-runtime";import{useMemo as e,useState as t,useSyncExternalStore as o}from"react";import{IABContext as n}from"./context/iab-context-value.js";let i=function(){return null},a=({runtime:a,children:l})=>{let[u,m]=t("purposes"),c=o(r=>a.onIABChange(r),()=>a.iab,i),p=e(()=>({handle:c,setTab:m,tab:u}),[c,u]);return r(n.Provider,{value:p,children:l})};export{a as ExternalIABProvider};
2
+ import{jsx as e}from"react/jsx-runtime";import{useCallback as r,useEffect as t,useMemo as i,useState as o,useSyncExternalStore as n}from"react";import{IABContext as a}from"./context/iab-context-value.js";import{useCommittedRef as c}from"./hooks/use-committed-ref.js";let u=function(){return null},s=({runtime:s,children:l})=>{let[m,d]=o("purposes"),f=n(e=>s.subscribe(e),()=>s.iab,u),p=i(()=>{let e,r,t;return e=!1,r=!1,{actions:t=[],activate:()=>{e=!0,r=!1},deactivate:()=>{e=!1,queueMicrotask(()=>{if(!e)for(let e of(r=!0,t.splice(0)))e.cancel()})},isClosed:()=>r,runtime:s}},[s]),v=c(p);t(()=>{p.activate();let e=()=>{let e=p.runtime.iab;if(e)for(let r of p.actions.splice(0))r.run(e)},r=p.runtime.subscribe(e);return e(),()=>{r(),p.deactivate()}},[p]);let b=r(e=>{let r=new Promise((r,t)=>{let i=()=>t(new DOMException("External IAB provider unmounted or changed runtimes.","AbortError"));if(p.isClosed()||v.current!==p)return void i();let o=async i=>{try{await e(i),r()}catch(e){t(e)}},n=p.runtime.iab;n?o(n):p.actions.push({cancel:i,run:o})});return r.catch(()=>void 0),r},[v,p]),x=i(()=>({handle:f,run:b,setTab:d,tab:m}),[f,b,m]);return e(a.Provider,{value:x,children:l})};export{s as ExternalIABProvider};
package/dist/gpp.js ADDED
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{createGPP as t}from"@c15t/iab/gpp";import{useContext as r,useEffect as e}from"react";import{KernelContext as o}from"./context.js";let n=({cmpId:n,mspaMode:i,optOutCategories:s,tcf:l,usApproach:c,usFallback:p})=>{let m=r(o);if(!m)throw Error("c15t: ConsentGPP must be rendered inside <ConsentProvider> from @c15t/react.");let a=s?.join(",");return e(()=>{let r=null;try{r=t({cmpId:n,kernel:m,mspaMode:i,optOutCategories:a?.split(","),tcf:l,usApproach:c,usFallback:p})}catch(t){console.error("c15t: GPP was not installed.",t)}return()=>r?.dispose()},[a,n,m,i,l,c,p]),null};export{n as ConsentGPP};
package/dist/headless.js CHANGED
@@ -1 +1 @@
1
- export{defaultTranslationConfig,detectBrowserLanguage,mergeTranslationConfigs,prepareTranslationConfig}from"@c15t/core";export{useConsentDialogTrigger}from"./component-hooks/use-panel-trigger.js";export{useConsentManager}from"./component-hooks/use-manager.js";export{useHeadlessConsentUI}from"./component-hooks/use-headless-consent-ui.js";export{useTranslations}from"./component-hooks/use-translations.js";export{useColorScheme}from"./hooks/use-color-scheme.js";export{useFocusTrap}from"./hooks/use-focus-trap.js";
1
+ export{defaultTranslationConfig,detectBrowserLanguage,mergeTranslationConfigs,prepareTranslationConfig}from"@c15t/core";export{useConsentDialogTrigger}from"./component-hooks/use-panel-trigger.js";export{useHeadlessConsentUI}from"./component-hooks/use-headless-consent-ui.js";export{useTranslations}from"./component-hooks/use-translations.js";export{useColorScheme}from"./hooks/use-color-scheme.js";export{useFocusTrap}from"./hooks/use-focus-trap.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{setupColorScheme as e}from"@c15t/ui/utils";import{useEffect as o}from"react";let r=function(r){o(()=>{if(null!==r)return e(r)},[r])};export{r as useColorScheme};
2
+ import{setupColorScheme as e}from"@c15t/ui/utils/color-scheme";import{useEffect as o}from"react";let r=function(r){o(()=>{if(null!==r)return e(r)},[r])};export{r as useColorScheme};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{useInsertionEffect as e,useRef as t}from"react";let r=function(r){let m=t(r);return e(()=>{m.current=r},[r]),m};export{r as useCommittedRef};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{setupFocusTrap as r}from"@c15t/ui/utils/dom";import{useEffect as t}from"react";let u=function(u,o){t(()=>{if(u&&o&&o.current)return r(o.current)},[u,o])};export{u as useFocusTrap};
2
+ import{setupFocusTrap as r}from"@c15t/ui/utils/dom";import{useEffect as t}from"react";let u=function(u,o,e){let c=e?.initialFocus;t(()=>{if(u&&o&&o.current)return r(o.current,{initialFocus:c})},[u,o,c])};export{u as useFocusTrap};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{resolveIABBannerSummary as e}from"@c15t/iab/headless";import{useCallback as r,useMemo as t}from"react";import{useIABConsentManager as n}from"./use-iab-manager.js";let a=function(){let{activeUI:a,model:s,iab:c,policyBanner:{scrollLock:o},policyDialog:{scrollLock:i},setActiveUI:l}=n(),u=!!c?.config.enabled,b=t(()=>e(c),[c]),p=r(e=>{l("banner",e)},[l]),d=r(e=>{e?.tab&&c?.setPreferenceCenterTab(e.tab),l("dialog")},[c,l]),f=r(()=>{d({tab:"purposes"})},[d]),g=r(()=>{d({tab:"vendors"})},[d]),m=r(()=>{l("none")},[l]),L=r(()=>{if(!c)return;c.acceptAll();let e=c.save();return l("none"),e},[c,l]),v=r(()=>{if(!c)return;c.rejectAll();let e=c.save();return l("none"),e},[c,l]),_=r(()=>{if(!c)return;let e=c.save();return l("none"),e},[c,l]),h=r(e=>{switch(e){case"accept":return L();case"reject":return v();case"customize":return f();default:return}},[L,f,v]),j=r(e=>{switch(e){case"accept":return L();case"reject":return v();case"customize":return _();default:return}},[L,v,_]);return{acceptAll:L,activeUI:a,banner:{...b,isVisible:"banner"===a&&"iab"===s&&u,scrollLock:o},closeUI:m,dialog:{activeTab:c?.preferenceCenterTab??"purposes",isLoading:!!(c?.isLoadingGVL||!c?.gvl),isVisible:"dialog"===a&&"iab"===s&&u,scrollLock:i},iab:c,isIABEnabled:u,model:s,openBanner:p,openDialog:d,openPurposesDialog:f,openVendorsDialog:g,performBannerAction:h,performDialogAction:j,rejectAll:v,savePreferences:_}};export{a as useHeadlessIABConsentUI};
2
+ import{saveIABConsentSurface as e}from"@c15t/core/surface-actions";import{resolveIABBannerSummary as r}from"@c15t/iab/headless";import{useCallback as a,useMemo as t}from"react";import{useKernel as c}from"../kernel-selector.js";import{useIABConsentManager as s}from"./use-iab-manager.js";let o=function(){let{activeUI:o,model:n,iab:i,policyBanner:{scrollLock:l},policyDialog:{scrollLock:u},setActiveUI:b}=s(),p=!!i?.config.enabled,d=c(),m=t(()=>r(i),[i]),f=a(e=>{b("banner",e)},[b]),g=a(e=>{e?.tab&&i?.setPreferenceCenterTab(e.tab),b("dialog")},[i,b]),j=a(()=>{g({tab:"purposes"})},[g]),L=a(()=>{g({tab:"vendors"})},[g]),k=a(()=>{b("none")},[b]),_=a(async r=>{i&&("accept"===r?i.acceptAll():"reject"===r&&i.rejectAll(),await e(d,i.save))},[i,d]),h=a(()=>_("accept"),[_]),v=a(()=>_("reject"),[_]),A=a(()=>_(),[_]),C=a(e=>{switch(e){case"accept":return h();case"reject":return v();case"customize":return j();default:return}},[h,j,v]),I=a(e=>{switch(e){case"accept":return h();case"reject":return v();case"customize":return A();default:return}},[h,v,A]);return{acceptAll:h,activeUI:o,banner:{...m,isVisible:"banner"===o&&"iab"===n&&p,scrollLock:l},closeUI:k,dialog:{activeTab:i?.preferenceCenterTab??"purposes",isLoading:!!(i?.isLoadingGVL||!i?.gvl),isVisible:"dialog"===o&&"iab"===n&&p,scrollLock:u},iab:i,isIABEnabled:p,model:n,openBanner:f,openDialog:g,openPurposesDialog:j,openVendorsDialog:L,performBannerAction:C,performDialogAction:I,rejectAll:v,savePreferences:A}};export{o as useHeadlessIABConsentUI};
@@ -0,0 +1 @@
1
+ import{IABUnavailableError as r,policyNeedsIAB as o}from"@c15t/core";import{useContext as i}from"react";import{IABContext as e}from"../context/iab-context-value.js";import{useKernelSelector as a}from"../kernel-selector.js";let t=Symbol.for("c15t.react.iab-provider"),c=function(){globalThis[t]=!0},n=function(){return new r("no <IABProvider> is mounted","Wrap your IAB consent UI in <IABProvider> from '@c15t/react/iab' (or 'c15t/react/iab')")},s=function(){let r=i(e);if(a(o)&&null===r&&!0!==globalThis[t])throw n()};export{c as markIABProviderLoaded,n as missingIABProviderError,s as useIABPolicyGuard};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{isLateEntry as t}from"@c15t/ui/utils/late-entry";import{useState as e}from"react";import{useIsHydrated as r}from"./use-is-hydrated.js";let a=function(a){let l=r(),n=()=>({late:a&&l&&t(),shown:a}),[o,s]=e(n);if(o.shown!==a){let t=n();return s(t),t.late}return o.late};export{a as useLateEntry};
package/dist/hooks.js CHANGED
@@ -1 +1 @@
1
- import{useCallback as e,useContext as s,useSyncExternalStore as n}from"react";import{KernelContext as o}from"./context.js";import{useUIConfig as t}from"./ui-config-context.js";import{invalidateConsentUIAction as u}from"./ui-save.js";let i=function(){let e=s(o);if(!e)throw Error("c15t: no kernel in context. Wrap your app with <ConsentProvider options={...}> from @c15t/react.");return e},r=function(e,s){return e.subscribe(s)},a=function(e){let s=i();return n(e=>r(s,e),()=>e(s.getSnapshot()),()=>e(s.getServerSnapshot()))},c=function(){let e=i();return n(s=>r(e,s),()=>e.getSnapshot(),()=>e.getServerSnapshot())},f=function(e){return a(s=>s.effectivePermissions[e])},l=function(){return a(e=>e.effectivePermissions)},h=function(){return a(e=>e.overrides)},p=function(){return a(e=>e.user)},m=function(){return a(e=>e.location)},k=function(){return a(e=>e.translations)},_=function(){return a(e=>e.branding)},d=function(){return a(e=>"matched"===e.resolution.status)},v=function(){return a(e=>"matched"===e.resolution.status&&("none"!==e.policyRule.prompt||e.policyRule.rights.length>0))},P=function(){return a(e=>"matched"===e.resolution.status?e.model:null)},S=function(){return a(e=>e.activeUI)},g=function(){return a(e=>e.policyRule.scope)},C=function(){return a(e=>e.policyRule.scopeMode)},y=function(){return a(e=>e.iab)},I=function(){return a(e=>e.iab?.enabled??!1)},b=function(e){let s=String(e);return a(e=>e.iab?.vendorConsents[s]??!1)},R=function(e){return a(s=>s.iab?.purposeConsents[e]??!1)},O=function(e){return a(s=>s.iab?.specialFeatureOptIns[e]??!1)},U=function(){return a(e=>e.iab?.tcString??null)},A=function(){return i().set.overrides},D=function(){return i().set.language},x=function(){let s=i();return e(e=>{u(s),s.set.activeUI(e)},[s])},E=function(){return i().commands.save},B=function(){let s=i();return e(e=>s.events.on("permissions:changed",({snapshot:s})=>e(s.effectivePermissions)),[s])},T=function(){return i().commands.identify},M=function(){return i().commands.init},N=function(){return a(e=>e.explicitChoice)},H=function(){return a(e=>e.effectivePermissions)},L=function(){return a(e=>e.promptRequirement)},j=function(){return a(e=>e.noticeDismissal)},q=function(){return a(e=>e.privacySignals)},F=function(){return a(e=>e.optOutDirectives)},w=function(){return a(e=>e.resolution)},V=function(){return a(e=>e.policyRule)},W=function(){return a(e=>e.restrictions)},z=function(){return i().commands.dismissNotice},G={},J={},K=function(){return t().presentation?.prompt??G},Q=function(){return t().presentation?.preferences??J};export{S as useActiveUI,_ as useBranding,f as useConsent,l as useConsents,z as useDismissNotice,H as useEffectivePermissions,N as useExplicitChoice,d as useHasConsentPolicy,v as useHasConsentUI,I as useIABEnabled,y as useIABSnapshot,T as useIdentify,M as useInit,m as useLocation,P as useModel,j as useNoticeDismissal,F as useOptOutDirectives,h as useOverrides,g as usePolicyCategories,w as usePolicyResolution,V as usePolicyRule,C as usePolicyScopeMode,Q as usePreferencesPresentation,q as usePrivacySignals,K as usePromptPresentation,L as usePromptRequirement,R as usePurposeConsent,W as useRestrictions,E as useSaveConsents,x as useSetActiveUI,D as useSetLanguage,A as useSetOverrides,c as useSnapshot,O as useSpecialFeatureOptIn,B as useSubscribeToConsentChanges,U as useTCString,k as useTranslations,p as useUser,b as useVendorConsent};
1
+ import{applyExperimentAssignment as e,applyExperimentTheme as s,isVendorAllowed as o}from"@c15t/core";import{hasConsentPreferences as n,hasConsentUI as t,showConsentSurface as u}from"@c15t/core/surface-actions";import{useCallback as r,useContext as i,useMemo as a,useSyncExternalStore as c}from"react";import{ProviderServicesContext as f}from"./context.js";import{useGateSelector as l,useKernel as h,useKernelSelector as d,useServerSnapshot as m}from"./kernel-selector.js";import{useUIConfig as k}from"./ui-config-context.js";let p=function(){let e=h();return c(s=>e.subscribe(s),()=>e.getSnapshot(),m(e))},_=function(e){return d(s=>s.effectivePermissions[e])},C=function(){return d(e=>e.effectivePermissions)},g=function(){return d(e=>e.overrides)},P=function(){return d(e=>e.user)},v=function(){return d(e=>e.location)},S=function(){return d(e=>e.translations)},y=function(){return d(e=>e.branding)},I=function(){return d(e=>"matched"===e.resolution.status)},R=function(){return d(t)},b=function(){return d(n)},A=function(){return d(e=>"matched"===e.resolution.status?e.model:null)},x=function(){return d(e=>e.activeUI)},U=function(){return d(e=>e.policyRule.scope)},E=function(){return d(e=>e.policyRule.scopeMode)},T=function(){return d(e=>e.iab)},V=function(){return d(e=>e.iab?.enabled??!1)},D=function(e){let s=String(e);return d(e=>e.iab?.vendorConsents[s]??!1)},O=function(e){return d(s=>s.iab?.purposeConsents[e]??!1)},B=function(e){return d(s=>s.iab?.specialFeatureOptIns[e]??!1)},H=function(){return d(e=>e.iab?.tcString??null)},L=[],M=function(){return d(e=>"iab"===e.model?L:e.vendors?.declared??L)},N=function(){return d(e=>e.vendorChoice)},j=function(e){return l((s,n)=>o(s,e,n))},q=function(){return h().set.registerConsentCategories},F=function(){return h().set.overrides},w=function(){let e=h(),s=i(f);return r(o=>{s?s.setLanguage(o):o!==e.getSnapshot().overrides.language&&(e.set.language(o),e.commands.init())},[e,s])},z=function(){let e=h();return r(s=>u(e,s),[e])},G=function(){return h().commands.save},J=function(){let e=h();return r(s=>e.events.on("permissions:changed",({snapshot:e})=>s(e.effectivePermissions)),[e])},K=function(){return h().commands.identify},Q=function(){return h().commands.init},W=function(){return d(e=>e.explicitChoice)},X=function(){return d(e=>e.effectivePermissions)},Y=function(){return d(e=>e.promptRequirement)},Z=function(){return d(e=>e.noticeDismissal)},$=function(){return d(e=>e.privacySignals)},ee=function(){return d(e=>e.resolution)},es=function(){return d(e=>e.policyRule)},eo=function(){return d(e=>e.restrictions)},en=function(){return h().commands.dismissNotice},et=function(){return d(e=>e.experiment)},eu=function(){let{experiment:s,presentation:o}=k(),n=et();return a(()=>e(o,s,n),[o,s,n])},er=function(){let{experiment:e,theme:o}=k(),n=et();return a(()=>s(o,e,n),[o,e,n])},ei={},ea={},ec=function(){return eu()?.prompt??ei},ef=function(){return eu()?.preferences??ea};export{x as useActiveUI,y as useBranding,_ as useConsent,C as useConsents,M as useDeclaredVendors,en as useDismissNotice,X as useEffectivePermissions,et as useExperiment,W as useExplicitChoice,I as useHasConsentPolicy,b as useHasConsentPreferences,R as useHasConsentUI,V as useIABEnabled,T as useIABSnapshot,K as useIdentify,Q as useInit,v as useLocation,A as useModel,Z as useNoticeDismissal,g as useOverrides,U as usePolicyCategories,ee as usePolicyResolution,es as usePolicyRule,E as usePolicyScopeMode,ef as usePreferencesPresentation,$ as usePrivacySignals,ec as usePromptPresentation,Y as usePromptRequirement,O as usePurposeConsent,q as useRegisterConsentCategories,eu as useResolvedPresentation,er as useResolvedTheme,eo as useRestrictions,G as useSaveConsents,z as useSetActiveUI,w as useSetLanguage,F as useSetOverrides,p as useSnapshot,B as useSpecialFeatureOptIn,J as useSubscribeToConsentChanges,H as useTCString,S as useTranslations,P as useUser,j as useVendorAllowed,N as useVendorChoice,D as useVendorConsent};