@c15t/react 3.0.0-alpha.1 → 3.0.0-alpha.2

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 (141) hide show
  1. package/AGENTS.md +3 -1
  2. package/dist/aggregate-components.js +1 -1
  3. package/dist/component-hooks/use-manager.js +1 -1
  4. package/dist/components/consent-gate/atoms.js +1 -0
  5. package/dist/components/consent-gate/consent-gate.js +2 -0
  6. package/dist/components/consent-gate/index.js +2 -0
  7. package/dist/components/preferences/atoms/accordion.js +1 -1
  8. package/dist/components/preferences/atoms/vendor-list.js +1 -0
  9. package/dist/components/preferences/index.js +1 -1
  10. package/dist/consent-gate.js +2 -0
  11. package/dist/draft.js +1 -1
  12. package/dist/external-iab-context.js +1 -1
  13. package/dist/hooks.js +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/provider.js +1 -1
  16. package/dist/styles.tw3.css +6 -3
  17. package/dist/utils/deferred-module.js +2 -0
  18. package/dist/version.js +1 -1
  19. package/dist-types/aggregate-components.d.ts +2 -2
  20. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +1 -1
  21. package/dist-types/component-hooks/use-manager.d.ts +6 -1
  22. package/dist-types/components/consent-gate/atoms.d.ts +11 -0
  23. package/dist-types/components/consent-gate/consent-gate.d.ts +2 -0
  24. package/dist-types/components/consent-gate/index.d.ts +41 -0
  25. package/dist-types/components/{frame → consent-gate}/types.d.ts +7 -7
  26. package/dist-types/components/consent-preferences-link/consent-preferences-link.d.ts +1 -1
  27. package/dist-types/components/consent-preferences-link/index.d.ts +1 -1
  28. package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +1 -1
  29. package/dist-types/components/iab-panel/atoms/stack-item.d.ts +1 -1
  30. package/dist-types/components/iab-panel/atoms/vendor-list.d.ts +1 -1
  31. package/dist-types/components/iab-panel/iab-panel.d.ts +1 -1
  32. package/dist-types/components/iab-panel/index.d.ts +24 -24
  33. package/dist-types/components/iab-prompt/index.d.ts +17 -17
  34. package/dist-types/components/panel/atoms/card.d.ts +4 -4
  35. package/dist-types/components/panel/atoms/overlay.d.ts +1 -1
  36. package/dist-types/components/panel/index.d.ts +7 -7
  37. package/dist-types/components/panel/panel.d.ts +2 -2
  38. package/dist-types/components/panel-link/index.d.ts +1 -1
  39. package/dist-types/components/panel-trigger/atoms/button.d.ts +1 -1
  40. package/dist-types/components/panel-trigger/atoms/icon.d.ts +1 -1
  41. package/dist-types/components/panel-trigger/atoms/root.d.ts +2 -2
  42. package/dist-types/components/panel-trigger/atoms/toolbar.d.ts +2 -2
  43. package/dist-types/components/panel-trigger/index.d.ts +4 -4
  44. package/dist-types/components/panel-trigger/panel-trigger-toolbar.d.ts +1 -1
  45. package/dist-types/components/panel-trigger/panel-trigger.d.ts +9 -9
  46. package/dist-types/components/panel-trigger/types.d.ts +1 -1
  47. package/dist-types/components/preferences/atoms/accordion.d.ts +6 -4
  48. package/dist-types/components/preferences/atoms/button.d.ts +1 -1
  49. package/dist-types/components/preferences/atoms/footer.d.ts +1 -1
  50. package/dist-types/components/preferences/atoms/root.d.ts +1 -1
  51. package/dist-types/components/preferences/atoms/vendor-list.d.ts +23 -0
  52. package/dist-types/components/preferences/index.d.ts +13 -11
  53. package/dist-types/components/preferences/policy-actions.d.ts +2 -2
  54. package/dist-types/components/preferences/preferences.d.ts +1 -1
  55. package/dist-types/components/preferences/types.d.ts +1 -1
  56. package/dist-types/components/prompt/components.d.ts +3 -3
  57. package/dist-types/components/prompt/index.d.ts +11 -11
  58. package/dist-types/components/prompt/policy-actions.d.ts +2 -2
  59. package/dist-types/components/prompt/prompt.d.ts +1 -1
  60. package/dist-types/components/shared/policy-actions.d.ts +2 -2
  61. package/dist-types/components/shared/primitives/box.d.ts +1 -1
  62. package/dist-types/components/shared/primitives/button.d.ts +2 -2
  63. package/dist-types/components/shared/primitives/button.types.d.ts +1 -1
  64. package/dist-types/components/shared/ui/accordion/accordion.d.ts +2 -2
  65. package/dist-types/components/shared/ui/accordion/index.d.ts +2 -2
  66. package/dist-types/components/shared/ui/animated-collapse/index.d.ts +2 -2
  67. package/dist-types/components/shared/ui/branding.d.ts +1 -1
  68. package/dist-types/components/shared/ui/button/button.d.ts +1 -1
  69. package/dist-types/components/shared/ui/button/index.d.ts +2 -2
  70. package/dist-types/components/shared/ui/collapsible/index.d.ts +1 -1
  71. package/dist-types/components/shared/ui/dialog/index.d.ts +1 -1
  72. package/dist-types/components/shared/ui/preference-item/index.d.ts +1 -1
  73. package/dist-types/components/shared/ui/switch/index.d.ts +2 -2
  74. package/dist-types/components/shared/ui/switch/switch.d.ts +1 -1
  75. package/dist-types/components/shared/ui/tabs/index.d.ts +1 -1
  76. package/dist-types/consent-gate.d.ts +1 -0
  77. package/dist-types/context/index.d.ts +3 -3
  78. package/dist-types/context/theme-context.d.ts +1 -1
  79. package/dist-types/draft.d.ts +53 -1
  80. package/dist-types/headless.d.ts +7 -7
  81. package/dist-types/hooks/use-headless-iab-consent-ui.d.ts +1 -1
  82. package/dist-types/hooks/use-iab-manager.d.ts +1 -1
  83. package/dist-types/hooks/use-theme.d.ts +1 -1
  84. package/dist-types/hooks.d.ts +28 -1
  85. package/dist-types/iab.d.ts +5 -5
  86. package/dist-types/index.d.ts +25 -25
  87. package/dist-types/module-hooks.d.ts +4 -4
  88. package/dist-types/panel-link.d.ts +1 -1
  89. package/dist-types/panel-trigger.d.ts +1 -1
  90. package/dist-types/panel.d.ts +1 -1
  91. package/dist-types/preferences.d.ts +1 -1
  92. package/dist-types/primitives/accordion.d.ts +1 -1
  93. package/dist-types/primitives/button.d.ts +1 -1
  94. package/dist-types/primitives/collapsible.d.ts +1 -1
  95. package/dist-types/primitives/dialog.d.ts +1 -1
  96. package/dist-types/primitives/preference-item.d.ts +1 -1
  97. package/dist-types/primitives/switch.d.ts +1 -1
  98. package/dist-types/primitives/tabs.d.ts +1 -1
  99. package/dist-types/primitives.d.ts +7 -7
  100. package/dist-types/prompt.d.ts +1 -1
  101. package/dist-types/provider.d.ts +22 -5
  102. package/dist-types/server/fetch-ssr-data.d.ts +1 -1
  103. package/dist-types/server/index.d.ts +5 -5
  104. package/dist-types/theme-provider.d.ts +2 -2
  105. package/dist-types/types/index.d.ts +3 -3
  106. package/dist-types/types/manager.d.ts +1 -1
  107. package/dist-types/types/theme/index.d.ts +1 -1
  108. package/dist-types/ui-config-context.d.ts +1 -1
  109. package/dist-types/utils/deferred-module.d.ts +11 -0
  110. package/dist-types/utils/index.d.ts +4 -4
  111. package/dist-types/utils/merge-slot-props.d.ts +2 -2
  112. package/dist-types/utils/merge-styles.d.ts +1 -1
  113. package/dist-types/utils/theme-utils.d.ts +1 -1
  114. package/dist-types/version.d.ts +1 -1
  115. package/docs/README.md +3 -1
  116. package/docs/frameworks/react/components/consent-dialog.md +1 -1
  117. package/docs/frameworks/react/components/{frame.md → consent-gate.md} +27 -27
  118. package/docs/frameworks/react/components/consent-manager-provider.md +5 -1
  119. package/docs/frameworks/react/components/consent-widget.md +39 -6
  120. package/docs/frameworks/react/concepts/consent-categories.md +31 -2
  121. package/docs/guides/deployment-modes.md +12 -0
  122. package/docs/integrations/building-integrations.md +5 -0
  123. package/docs/integrations/cloudflare-zaraz.md +399 -0
  124. package/docs/integrations/google-maps.md +20 -20
  125. package/docs/integrations/granular-consent.md +208 -0
  126. package/docs/integrations/overview.md +5 -4
  127. package/docs/integrations/youtube.md +26 -21
  128. package/docs/upgrade-v3.md +47 -0
  129. package/package.json +26 -16
  130. package/dist/components/frame/atoms.js +0 -1
  131. package/dist/components/frame/frame.js +0 -2
  132. package/dist/components/frame/index.js +0 -2
  133. package/dist/frame.js +0 -2
  134. package/dist-types/components/frame/atoms.d.ts +0 -11
  135. package/dist-types/components/frame/frame.d.ts +0 -2
  136. package/dist-types/components/frame/index.d.ts +0 -24
  137. package/dist-types/frame.d.ts +0 -1
  138. package/readme.json +0 -48
  139. package/src/iab/styles.css +0 -11
  140. package/src/styles.css +0 -10
  141. /package/dist/components/{frame → consent-gate}/types.js +0 -0
package/AGENTS.md CHANGED
@@ -25,10 +25,10 @@ These docs describe v3. Start with Inth hosted setup, identify the framework, ro
25
25
  - [ConsentDialog](./docs/frameworks/react/components/consent-dialog.md): Open the c15t preference center as a modal ConsentDialog in a React app, wire its triggers and control blocking, focus and policy gating.
26
26
  - [ConsentDialogLink](./docs/frameworks/react/components/consent-dialog-link.md): Add a ConsentDialogLink to a React footer so visitors reopen the c15t preference center from your own text link, with asChild and rights data.
27
27
  - [ConsentDialogTrigger](./docs/frameworks/react/components/consent-dialog-trigger.md): Floating button and toolbar that reopen the preference center after the first prompt.
28
+ - [ConsentGate](./docs/frameworks/react/components/consent-gate.md): Gate a YouTube or map iframe behind consent with ConsentGate in React, showing a placeholder that opens the preference center until the category is allowed.
28
29
  - [ConsentProvider](./docs/frameworks/react/components/consent-manager-provider.md): Configure the v3 consent runtime and share its state with child components.
29
30
  - [ConsentWidget](./docs/frameworks/react/components/consent-widget.md): Embed the c15t preference center inline with ConsentWidget on a React privacy page, with draft toggles that record a choice only on Save.
30
31
  - [DevTools](./docs/frameworks/react/components/dev-tools.md): A development tool for inspecting consent state, geolocation, loaded scripts, and consent events in real time.
31
- - [Frame](./docs/frameworks/react/components/frame.md): Gate a YouTube or map iframe behind consent with Frame in React, showing a placeholder that opens the preference center until the category is allowed.
32
32
  - [Consent categories](./docs/frameworks/react/concepts/consent-categories.md): Assign optional features to categories and understand how policy scope affects permission.
33
33
  - [Policy presets](./docs/frameworks/react/concepts/policy-presets.md): Understand how policy rules affect React prompts, permissions and persistent privacy controls.
34
34
  - [Headless](./docs/frameworks/react/headless.md): Build a custom consent banner in React with the c15t/react/headless hooks inside your ConsentProvider.
@@ -64,12 +64,14 @@ These docs describe v3. Start with Inth hosted setup, identify the framework, ro
64
64
  - [Clear on revocation](./docs/integrations/clear-on-revocation.md): Remove configured first-party cookies and Web Storage keys when their consent category is denied.
65
65
  - [Clearbit](./docs/integrations/clearbit.md): Configure Clearbit with c15t v3, understand marketing permission and verify loading and revocation.
66
66
  - [Cloudflare Web Analytics](./docs/integrations/cloudflare-web-analytics.md): Configure Cloudflare Web Analytics with c15t v3, understand measurement permission and verify loading and revocation.
67
+ - [Cloudflare Zaraz](./docs/integrations/cloudflare-zaraz.md): Synchronize c15t permissions with Zaraz purposes while Cloudflare manages your tools.
67
68
  - [Crisp](./docs/integrations/crisp.md): Configure Crisp with c15t v3, understand functionality permission and verify loading and revocation.
68
69
  - [Databuddy](./docs/integrations/databuddy.md): Configure Databuddy's initial and updated consent state with c15t v3.
69
70
  - [Fathom Analytics](./docs/integrations/fathom-analytics.md): Configure Fathom Analytics with c15t v3, understand measurement permission and verify loading and revocation.
70
71
  - [Google Maps](./docs/integrations/google-maps.md): Prevent a map iframe from mounting before the required permission.
71
72
  - [Google Tag](./docs/integrations/google-tag.md): Configure gtag with c15t Consent Mode signals and understand its loading behavior.
72
73
  - [Google Tag Manager](./docs/integrations/google-tag-manager.md): Load GTM with c15t consent signals and verify the tags inside your container.
74
+ - [Granular consent](./docs/integrations/granular-consent.md): Let visitors grant a category and still turn one vendor off, without adopting IAB TCF.
73
75
  - [Heap](./docs/integrations/heap.md): Configure Heap with c15t v3, understand measurement permission and verify loading and revocation.
74
76
  - [Hightouch](./docs/integrations/hightouch.md): Configure Hightouch with c15t v3, understand measurement permission and verify loading and revocation.
75
77
  - [Hotjar](./docs/integrations/hotjar.md): Configure Hotjar with c15t v3, understand measurement permission and verify loading and revocation.
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as o}from"react/jsx-runtime";import{Suspense as e,lazy as n}from"react";import{registerDialogChunkWarmer as t}from"./chunk-warming.js";import{useActiveUI as r}from"./hooks.js";let i=function(n){return t=>o(e,{fallback:null,children:o(n,{...t})})},c=function(o){return i(n(async()=>({default:(await import("./components/panel/index.js"))[o]})))};t(()=>{import("./components/panel/index.js")});let a=function(o){return i(n(async()=>({default:(await import("./components/preferences/index.js"))[o]})))},l=c("ConsentDialog"),s=a("ConsentWidget"),d=function(o,e,n){let t={};for(let r of e)Object.defineProperty(o,r,{configurable:!0,enumerable:!0,get:()=>(t[r]??=n(r),t[r])});return o},u=d(e=>{let n=r();return!0===e.open||"dialog"===n||e.showTrigger?o(l,{...e}):null},["Card","Header","HeaderTitle","HeaderDescription","Content","Footer","ConsentCustomizationCard","ConsentDialogFooter","ConsentDialogHeader","ConsentDialogHeaderTitle","ConsentDialogHeaderDescription","ConsentDialogContent","Overlay","Root"],c),m=d(e=>o(s,{...e}),["AccordionTrigger","AccordionTriggerInner","AccordionContent","AccordionArrow","Accordion","Switch","AccordionItems","AccordionItem","Root","AcceptAllButton","CustomizeButton","SaveButton","RejectButton","PolicyActions","Footer","FooterSubGroup"],a);export{u as ConsentDialog,m as ConsentWidget};
2
+ import{jsx as o}from"react/jsx-runtime";import{registerDialogChunkWarmer as e}from"./chunk-warming.js";import{useActiveUI as t}from"./hooks.js";import{createDeferredModule as n}from"./utils/deferred-module.js";let r=n(()=>import("./components/panel/index.js")),i=n(()=>import("./components/preferences/index.js"));e(()=>{r.preload()});let c=r.component(o=>o.ConsentDialog),s=i.component(o=>o.ConsentWidget),l=function(o,e,t){let n={};for(let r of e)Object.defineProperty(o,r,{configurable:!0,enumerable:!0,get:()=>(n[r]??=t(r),n[r])});return o},d=l(e=>{let n=t();return!0===e.open||"dialog"===n||e.showTrigger?o(c,{...e}):null},["Card","Header","HeaderTitle","HeaderDescription","Content","Footer","ConsentCustomizationCard","ConsentDialogFooter","ConsentDialogHeader","ConsentDialogHeaderTitle","ConsentDialogHeaderDescription","ConsentDialogContent","Overlay","Root"],o=>r.component(e=>e[o])),a=l(e=>o(s,{...e}),["AccordionTrigger","AccordionTriggerInner","AccordionContent","AccordionArrow","Accordion","Switch","AccordionItems","AccordionItem","VendorList","Root","AcceptAllButton","CustomizeButton","SaveButton","RejectButton","PolicyActions","Footer","FooterSubGroup"],o=>i.component(e=>e[o]));export{d as ConsentDialog,a as ConsentWidget};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{evaluateConsent as e}from"@c15t/core";import{useCallback as t,useContext as a,useMemo as i}from"react";import{ProviderServicesContext as n}from"../context.js";import{useConsentManagerDraft as s}from"../draft.js";import{useActiveUI as r,useBranding as o,useConsents as l,useModel as p,usePolicyCategories as c,usePolicyScopeMode as u,usePreferencesPresentation as m,usePromptPresentation as d,useSetActiveUI as f,useSnapshot as y,useSubscribeToConsentChanges as g,useTranslations as v}from"../hooks.js";import{defaultTranslationConfig as C}from"../utils/default-translation-config.js";let T={},b=[{defaultValue:!0,description:"Required for basic site functionality",disabled:!0,display:!0,gdprType:1,name:"necessary"},{defaultValue:!1,description:"Enables enhanced features",display:!0,gdprType:2,name:"functionality"},{defaultValue:!1,description:"Analytics and performance measurement",display:!0,gdprType:4,name:"measurement"},{defaultValue:!1,description:"Improves your experience",display:!0,gdprType:3,name:"experience"},{defaultValue:!1,description:"Advertising and marketing",display:!0,gdprType:5,name:"marketing"}],x=function(){let x=y(),D=a(n),h=l(),R=r(),S=o(),V=p(),j=d(),k=c(),q=m(),w=u(),{draft:I,save:A}=s(),M=f(),O=g(),P=v(),_=i(()=>P?{...C,defaultLanguage:P.language,translations:{...C.translations,[P.language]:P.translations}}:C,[P]),B=i(()=>["necessary",...k],[k]),E=i(()=>[...D?.getConsentCategories()??B],[D,B]),L=t(()=>{let e=new Set(E);return b.filter(t=>e.has(t.name)).map(e=>({...e,display:!0}))},[E]),U=t(t=>e({category:t},x),[x]),z=t(e=>{M(e)},[M]),F=t(async(e,t)=>{"custom"===e?await A():await A("all"===e?"all":"none")},[A]),G=t((e,t)=>{E.includes(e)&&I.set(e,t)},[I,E]),H=t(e=>{},[]),J=t(e=>O(e),[O]);return{activeUI:R??"none",branding:S??"c15t",consentCategories:E,consentTypes:L(),consents:h,draftIsStale:I.isStale,effectivePermissions:x.effectivePermissions,explicitChoice:x.explicitChoice,getDisplayedConsents:L,has:U,iab:x.iab,manager:null,model:V??"opt-in",noticeDismissal:x.noticeDismissal,optOutDirectives:x.optOutDirectives,policyBanner:j??T,policyCategories:B,policyDialog:q??T,policyRule:x.policyRule,policyScopeMode:w,privacySignals:x.privacySignals,promptRequirement:x.promptRequirement,resetDraft:I.reset,resolution:x.resolution,restrictions:x.restrictions,saveConsents:F,selectedConsentTypes:I.values,selectedConsents:I.values,setActiveUI:z,setSelectedConsent:G,subscribeToConsentChanges:J,translationConfig:_,updateConsentCategories:H}};export{x as useConsentManager};
2
+ import{evaluateConsent as e,vendorsListedUnder as a}from"@c15t/core";import{useCallback as i,useMemo as t}from"react";import{useConsentManagerDraft as n}from"../draft.js";import{useActiveUI as s,useBranding as r,useConsents as o,useDeclaredVendors as l,useModel as c,usePolicyCategories as p,usePolicyScopeMode as d,usePreferencesPresentation as u,usePromptPresentation as m,useRegisterConsentCategories as y,useSetActiveUI as f,useSnapshot as g,useSubscribeToConsentChanges as v,useTranslations as h}from"../hooks.js";import{defaultTranslationConfig as C}from"../utils/default-translation-config.js";let S={},T=[{defaultValue:!0,description:"Required for basic site functionality",disabled:!0,display:!0,gdprType:1,name:"necessary"},{defaultValue:!1,description:"Enables enhanced features",display:!0,gdprType:2,name:"functionality"},{defaultValue:!1,description:"Analytics and performance measurement",display:!0,gdprType:4,name:"measurement"},{defaultValue:!1,description:"Improves your experience",display:!0,gdprType:3,name:"experience"},{defaultValue:!1,description:"Advertising and marketing",display:!0,gdprType:5,name:"marketing"}],V=function(){let V=g(),b=o(),D=s(),x=r(),R=c(),P=m(),j=p(),k=u(),q=d(),{draft:w,save:I}=n(),A=l(),M=f(),O=v(),_=h(),B=t(()=>_?{...C,defaultLanguage:_.language,translations:{...C.translations,[_.language]:_.translations}}:C,[_]),E=t(()=>["necessary",...j],[j]),L=t(()=>["necessary",...V.evaluationPolicy.choiceScope??j],[V.evaluationPolicy.choiceScope,j]),U=i(()=>{let e=new Set(L);return T.filter(a=>e.has(a.name)).map(e=>({...e,display:!0}))},[L]),z=i(a=>e({category:a},V),[V]),F=i(e=>{M(e)},[M]),G=i(async(e,a)=>{"custom"===e?await I():await I("all"===e?"all":"none")},[I]),H=i((e,a)=>{L.includes(e)&&w.set(e,a)},[w,L]),J=i((e,a)=>{w.setVendor(e,a)},[w]),K=i(e=>a(A,e),[A]),N=y(),Q=i(e=>O(e),[O]);return{activeUI:D??"none",branding:x??"c15t",consentCategories:L,consentTypes:U(),consents:b,draftIsStale:w.isStale,effectivePermissions:V.effectivePermissions,explicitChoice:V.explicitChoice,getDisplayedConsents:U,getDisplayedVendors:K,has:z,iab:V.iab,manager:null,model:R??"opt-in",noticeDismissal:V.noticeDismissal,optOutDirectives:V.optOutDirectives,policyBanner:P??S,policyCategories:E,policyDialog:k??S,policyRule:V.policyRule,policyScopeMode:q,privacySignals:V.privacySignals,promptRequirement:V.promptRequirement,resetDraft:w.reset,resolution:V.resolution,restrictions:V.restrictions,saveConsents:G,selectedConsentTypes:w.values,selectedConsents:w.values,selectedVendors:w.vendors,setActiveUI:F,setSelectedConsent:H,setSelectedVendor:J,subscribeToConsentChanges:Q,translationConfig:B,updateConsentCategories:N,vendorChoice:V.vendorChoice,vendors:A}};export{V as useConsentManager};
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/frame";import{forwardRef as o}from"react";import{useTranslations as a}from"../../component-hooks/use-translations.js";import{Box as r}from"../shared/primitives/box.js";import{ConsentButton as i}from"../shared/primitives/button.js";let s=o(({children:o,...a},i)=>e(r,{ref:i,baseClassName:t.placeholder,"data-testid":"frame-placeholder",...a,children:o})),n=o(({children:o,category:i,...s},n)=>{let{frame:l,consentTypes:m}=a(),p=i&&l?.title?l.title.replace("{category}",m?.[i]?.title??i):void 0;return e(r,{ref:n,baseClassName:t.title,...s,children:o??p})}),l=o(({children:t,category:o,...r},s)=>{let{frame:n,consentTypes:l}=a(),m=l?.[o]?.title??o,p=n?.actionButton?.replace("{category}",m);return e(i,{mode:"stroke",size:"small",variant:"primary",...r,ref:s,action:"open-consent-dialog",category:o,"data-testid":"frame-open-dialog",children:t??p})});s.displayName="ConsentGateRoot",n.displayName="ConsentGateTitle",l.displayName="ConsentGateButton";export{l as ConsentGateButton,s as ConsentGateRoot,n as ConsentGateTitle};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import{forwardRef as r,useEffect as t}from"react";import{useConsentManager as n}from"../../component-hooks/use-manager.js";import{useTranslations as s}from"../../component-hooks/use-translations.js";import{ConsentGateButton as i,ConsentGateRoot as l,ConsentGateTitle as c}from"./atoms.js";let a=({category:r,policyBlocked:t,policyBlockedMessage:n})=>o(l,{children:[e(c,{category:r,children:t?n??"This content is unavailable under your region's consent policy.":void 0}),t?null:e(i,{category:r})]}),m=r(({children:o,category:r,placeholder:i,noStyle:l,className:c,theme:m,...p},d)=>{let{has:y,updateConsentCategories:u,policyCategories:h,policyScopeMode:g}=n(),{frame:f}=s(),k=y(r),j=Array.isArray(h)&&h.length>0&&!h.includes("*")&&!h.includes(r);return t(()=>{u([r])},[r,u]),e("div",{ref:d,className:c,...p,children:k?o:i||e(a,{category:r,policyBlocked:"strict"===g&&j,policyBlockedMessage:f?.policyBlocked})})});m.displayName="ConsentGate";let p=m;export{p as ConsentGate};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{ConsentGate as t}from"./consent-gate.js";import*as e from"./atoms.js";let o=Object.assign(t,{Button:e.ConsentGateButton,Root:e.ConsentGateRoot,Title:e.ConsentGateTitle}),n=o,a=e.ConsentGateRoot,s=e.ConsentGateTitle,C=e.ConsentGateButton;var G=e.ConsentGateButton,r=e.ConsentGateRoot,i=e.ConsentGateTitle;export{G as ConsentGateButton,r as ConsentGateRoot,i as ConsentGateTitle,n as Frame,C as FrameButton,a as FrameRoot,s as FrameTitle,o as ConsentGate};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/accordion";import{createContext as n,forwardRef as i,useCallback as r,useContext as c,useMemo as a}from"react";import{useConsentManager as s}from"../../../component-hooks/use-manager.js";import{useTranslations as d}from"../../../component-hooks/use-translations.js";import{Box as l}from"../../shared/primitives/box.js";import{LucideIcon as m}from"../../shared/ui/icon.js";import{useTheme as g}from"../../../hooks/use-theme.js";import*as h from"../../shared/ui/preference-item/index.js";import*as p from"../../shared/ui/switch/index.js";let u=n(null),y=function(){let e=c(u);if(!e)throw Error("ConsentWidgetAccordion components must be used within ConsentWidgetAccordion");return e},w=i(({children:t,...n},i)=>e(l,{ref:i,baseClassName:o.triggerRow,...n,children:t}));w.displayName="ConsentWidgetAccordionTrigger";let C=h.Trigger,A=h.Content,f=h.Leading,v=p.Root,N=({"data-testid":t,children:n,className:i,noStyle:c,onValueChange:s,style:d,type:m="multiple",value:h,...p})=>{let{noStyle:y}=g(),w=c??y,C=a(()=>Array.isArray(h)?h:h?[h]:[],[h]),A=r((e,t)=>{if("single"===m)return void s?.(t?e:"");let o=t?[...new Set([...C,e])]:C.filter(t=>t!==e);s?.(o)},[s,C,m]),f=a(()=>({noStyle:w,onToggleItem:A,openValues:C}),[w,A,C]);return e(u.Provider,{value:f,children:e(l,{className:i,"data-testid":t??"consent-widget-accordion",noStyle:c,style:d,slotKey:"accordion.root",baseClassName:o.list,...p,children:n})})},S=()=>{let{selectedConsents:n,setSelectedConsent:i,getDisplayedConsents:c,explicitChoice:a,restrictions:l}=s(),g=function(e){if("necessary"===e)return!1;let t=a?.categories[e];return t?.value===!0&&(l[e]?.length??0)>0},{noStyle:p,onToggleItem:u,openValues:N}=y(),S=r((e,t)=>{i(e,t)},[i]),W=function(e){return e.replace(/_/gu," ").replace(/\b\w/gu,e=>e.toUpperCase())},{consentTypes:b}=d();return c().map(i=>{let r;return t(h.Root,{className:p?void 0:o.item,"data-testid":`consent-widget-accordion-item-${i.name}`,noStyle:!0,onOpenChange:e=>u(i.name,e),open:N.includes(i.name),slotKey:"accordion-item.root",children:[t(w,{slotKey:"accordion.triggerRow",children:[t(C,{className:p?void 0:o.trigger,"data-testid":`consent-widget-accordion-trigger-${i.name}`,noStyle:!0,slotKey:"accordion-item.trigger",children:[(r=m({iconPath:N.includes(i.name)?e("path",{d:"M5 12h14"}):e("path",{d:"M5 12h14M12 5v14"}),title:N.includes(i.name)?"Close":"Open"}),e(f,{className:p?void 0:o.arrow,"data-testid":`consent-widget-accordion-arrow-${i.name}`,noStyle:!0,slotKey:"accordion.arrow",children:e(r,{})})),e(h.Header,{noStyle:!0,slotKey:"accordion.header",children:e(h.Title,{className:p?void 0:o.title,noStyle:!0,slotKey:"accordion.title",children:b[i.name]?.title??W(i.name)})})]}),e(h.Control,{className:p?void 0:o.control,noStyle:!0,slotKey:"accordion.control",children:e(v,{"aria-label":b[i.name]?.title??W(i.name),checked:n[i.name],"aria-describedby":g(i.name)?`c15t-restriction-${i.name}`:void 0,onCheckedChange:e=>S(i.name,e),disabled:i.disabled,size:"small","data-testid":`consent-widget-switch-${i.name}`})})]}),g(i.name)?e("output",{className:p?void 0:o.restriction,"data-testid":`consent-widget-restriction-${i.name}`,id:`c15t-restriction-${i.name}`,children:"Your saved choice is restricted by the current privacy settings."}):null,e(A,{className:p?void 0:o.content,"data-testid":`consent-widget-accordion-content-${i.name}`,innerClassName:p?void 0:o.contentInner,innerSlotKey:"accordion.contentInner",slotKey:"accordion-item.content",viewportClassName:p?void 0:o.contentViewport,viewportSlotKey:"accordion.contentViewport",children:b[i.name]?.description??i.description})]},i.name)})},W=i(({className:t,...n},i)=>e(h.Root,{ref:i,className:[o.item,t].filter(Boolean).join(" "),noStyle:!0,...n}));W.displayName="ConsentWidgetAccordionItem";let b=C,K=w,j=A,I=f,$=N,T=v,k=S,x=W;export{$ as Accordion,I as AccordionArrow,j as AccordionContent,x as AccordionItem,k as AccordionItems,K as AccordionTrigger,b as AccordionTriggerInner,N as ConsentWidgetAccordion,f as ConsentWidgetAccordionArrow,A as ConsentWidgetAccordionContent,W as ConsentWidgetAccordionItem,S as ConsentWidgetAccordionItems,w as ConsentWidgetAccordionTrigger,C as ConsentWidgetAccordionTriggerInner,v as ConsentWidgetSwitch,T as Switch};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/accordion";import{createContext as n,forwardRef as i,useCallback as r,useContext as c,useMemo as a}from"react";import{useConsentManager as s}from"../../../component-hooks/use-manager.js";import{useTranslations as d}from"../../../component-hooks/use-translations.js";import{Box as l}from"../../shared/primitives/box.js";import{LucideIcon as m}from"../../shared/ui/icon.js";import{useTheme as g}from"../../../hooks/use-theme.js";import{ConsentWidgetVendorList as h}from"./vendor-list.js";import*as p from"../../shared/ui/preference-item/index.js";import*as u from"../../shared/ui/switch/index.js";let y=n(null),w=function(){let e=c(y);if(!e)throw Error("ConsentWidgetAccordion components must be used within ConsentWidgetAccordion");return e},C=i(({children:t,...n},i)=>e(l,{ref:i,baseClassName:o.triggerRow,...n,children:t}));C.displayName="ConsentWidgetAccordionTrigger";let f=p.Trigger,A=p.Content,v=p.Leading,S=u.Root,N=({"data-testid":t,children:n,className:i,noStyle:c,onValueChange:s,style:d,type:m="multiple",value:h,...p})=>{let{noStyle:u}=g(),w=c??u,C=a(()=>Array.isArray(h)?h:h?[h]:[],[h]),f=r((e,t)=>{if("single"===m)return void s?.(t?e:"");let o=t?[...new Set([...C,e])]:C.filter(t=>t!==e);s?.(o)},[s,C,m]),A=a(()=>({noStyle:w,onToggleItem:f,openValues:C}),[w,f,C]);return e(y.Provider,{value:A,children:e(l,{className:i,"data-testid":t??"consent-widget-accordion",noStyle:c,style:d,slotKey:"accordion.root",baseClassName:o.list,...p,children:n})})},W=()=>{let{selectedConsents:n,setSelectedConsent:i,getDisplayedConsents:c,explicitChoice:a,restrictions:l}=s(),g=function(e){if("necessary"===e)return!1;let t=a?.categories[e];return t?.value===!0&&(l[e]?.length??0)>0},{noStyle:u,onToggleItem:y,openValues:N}=w(),W=r((e,t)=>{i(e,t)},[i]),b=function(e){return e.replace(/_/gu," ").replace(/\b\w/gu,e=>e.toUpperCase())},{consentTypes:K}=d();return c().map(i=>{let r;return t(p.Root,{className:u?void 0:o.item,"data-testid":`consent-widget-accordion-item-${i.name}`,noStyle:!0,onOpenChange:e=>y(i.name,e),open:N.includes(i.name),slotKey:"accordion-item.root",children:[t(C,{slotKey:"accordion.triggerRow",children:[t(f,{className:u?void 0:o.trigger,"data-testid":`consent-widget-accordion-trigger-${i.name}`,noStyle:!0,slotKey:"accordion-item.trigger",children:[(r=m({iconPath:N.includes(i.name)?e("path",{d:"M5 12h14"}):e("path",{d:"M5 12h14M12 5v14"}),title:N.includes(i.name)?"Close":"Open"}),e(v,{className:u?void 0:o.arrow,"data-testid":`consent-widget-accordion-arrow-${i.name}`,noStyle:!0,slotKey:"accordion.arrow",children:e(r,{})})),e(p.Header,{noStyle:!0,slotKey:"accordion.header",children:e(p.Title,{className:u?void 0:o.title,noStyle:!0,slotKey:"accordion.title",children:K[i.name]?.title??b(i.name)})})]}),e(p.Control,{className:u?void 0:o.control,noStyle:!0,slotKey:"accordion.control",children:e(S,{"aria-label":K[i.name]?.title??b(i.name),checked:n[i.name],"aria-describedby":g(i.name)?`c15t-restriction-${i.name}`:void 0,onCheckedChange:e=>W(i.name,e),disabled:i.disabled,size:"small","data-testid":`consent-widget-switch-${i.name}`})})]}),g(i.name)?e("output",{className:u?void 0:o.restriction,"data-testid":`consent-widget-restriction-${i.name}`,id:`c15t-restriction-${i.name}`,children:"Your saved choice is restricted by the current privacy settings."}):null,t(A,{className:u?void 0:o.content,"data-testid":`consent-widget-accordion-content-${i.name}`,innerClassName:u?void 0:o.contentInner,innerSlotKey:"accordion.contentInner",slotKey:"accordion-item.content",viewportClassName:u?void 0:o.contentViewport,viewportSlotKey:"accordion.contentViewport",children:[K[i.name]?.description??i.description,e(h,{category:i.name,noStyle:u})]})]},i.name)})},b=i(({className:t,...n},i)=>e(p.Root,{ref:i,className:[o.item,t].filter(Boolean).join(" "),noStyle:!0,...n}));b.displayName="ConsentWidgetAccordionItem";let K=f,j=C,I=A,$=v,T=N,k=S,x=W,R=b,V=h;export{T as Accordion,$ as AccordionArrow,I as AccordionContent,R as AccordionItem,x as AccordionItems,j as AccordionTrigger,K as AccordionTriggerInner,N as ConsentWidgetAccordion,v as ConsentWidgetAccordionArrow,A as ConsentWidgetAccordionContent,b as ConsentWidgetAccordionItem,W as ConsentWidgetAccordionItems,C as ConsentWidgetAccordionTrigger,f as ConsentWidgetAccordionTriggerInner,S as ConsentWidgetSwitch,h as ConsentWidgetVendorList,k as Switch,V as VendorList};
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/vendor-list";import{useId as o,useState as i}from"react";import{useConsentManager as r}from"../../../component-hooks/use-manager.js";import{useTranslations as l}from"../../../component-hooks/use-translations.js";import{Box as s}from"../../shared/primitives/box.js";import{useTheme as d}from"../../../hooks/use-theme.js";import*as a from"../../shared/ui/preference-item/index.js";import*as c from"../../shared/ui/switch/index.js";let h=({open:n})=>t("svg",{"aria-hidden":"true",fill:"none",focusable:"false",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",viewBox:"0 0 24 24",children:[e("title",{children:n?"Close":"Open"}),n?e("path",{d:"M5 12h14"}):e("path",{d:"M5 12h14M12 5v14"})]}),m={disabledByCategory:"Turn on this category to choose vendors.",privacyPolicy:"Privacy policy",switchLabel:"Allow {vendor}",title:"Vendors ({count})"},y=({category:n,categoryOn:o,checked:r,copy:l,labelId:d,noStyle:m,onCheckedChange:y,styles:p,vendor:v})=>{let[g,u]=i(!1),C=v.name??v.id,b=!0!==v.disabled,f=!!(v.description||v.privacyPolicyUrl);return t(a.Root,{className:p?.item,"data-testid":`consent-widget-vendor-item-${n}-${v.id}`,disabled:!f,noStyle:m,onOpenChange:u,open:g,slotKey:"vendor-list.item",children:[t(s,{noStyle:m,baseClassName:p?.header,slotKey:"vendor-list.header",children:[t(a.Trigger,{className:p?.trigger,"data-testid":`consent-widget-vendor-trigger-${n}-${v.id}`,noStyle:m,slotKey:"vendor-list.trigger",children:[e(a.Leading,{className:p?.arrow,noStyle:m,children:e(h,{open:g})}),e(s,{asChild:!0,noStyle:m,baseClassName:p?.name,slotKey:"vendor-list.name",children:e("span",{"data-testid":`consent-widget-vendor-name-${n}-${v.id}`,id:d,children:C})})]}),b?e(s,{noStyle:m,baseClassName:p?.control,slotKey:"vendor-list.control",children:e(c.Root,{"aria-label":l.switchLabel.replace("{vendor}",C),"aria-describedby":d,checked:r,"data-testid":`consent-widget-vendor-switch-${n}-${v.id}`,disabled:!o,onCheckedChange:y,size:"small"})}):null]}),f?t(a.Content,{className:p?.content,"data-testid":`consent-widget-vendor-content-${n}-${v.id}`,innerClassName:p?.contentInner,noStyle:m,slotKey:"vendor-list.content",children:[v.description?e(s,{asChild:!0,noStyle:m,baseClassName:p?.description,slotKey:"vendor-list.description",children:e("p",{children:v.description})}):null,v.privacyPolicyUrl?e(s,{asChild:!0,noStyle:m,baseClassName:p?.link,slotKey:"vendor-list.link",children:e("a",{href:v.privacyPolicyUrl,rel:"noopener noreferrer",target:"_blank",children:l.privacyPolicy})}):null]}):null]})},p=({category:i,className:a,noStyle:c,...h})=>{let{getDisplayedVendors:p,selectedConsents:v,selectedVendors:g,setSelectedVendor:u}=r(),{consentManagerDialog:C}=l(),{noStyle:b}=d(),f=o(),$=c??b??!1,k=p(i);if(0===k.length)return null;let w={...m,...C.vendors},N=!0===v[i],S=$?void 0:n,K=w.title.replace("{count}",String(k.length));return e(s,{asChild:!0,className:a,"data-testid":`consent-widget-vendor-list-${i}`,noStyle:$,baseClassName:S?.root,slotKey:"vendor-list.root",...h,children:t("section",{"aria-label":K,children:[N?null:e("p",{className:S?.hint,"data-testid":`consent-widget-vendor-hint-${i}`,children:w.disabledByCategory}),k.map(t=>e(y,{category:i,categoryOn:N,checked:g[t.id]??!0,copy:w,labelId:`${f}vendor-${i}-${t.id}`,noStyle:$,onCheckedChange:e=>u(t.id,e),styles:S,vendor:t},t.id))]})})};export{p as ConsentWidgetVendorList};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Accordion as o,AccordionArrow as t,AccordionContent as n,AccordionItem as e,AccordionItems as r,AccordionTrigger as c,AccordionTriggerInner as i,ConsentWidgetAccordion as s,ConsentWidgetAccordionArrow as d,ConsentWidgetAccordionContent as A,ConsentWidgetAccordionItem as g,ConsentWidgetAccordionItems as m,ConsentWidgetAccordionTrigger as C,ConsentWidgetAccordionTriggerInner as u,ConsentWidgetSwitch as W,Switch as p}from"./atoms/accordion.js";import{AcceptAllButton as a,ConsentWidgetAcceptAllButton as l,ConsentWidgetCustomizeButton as B,ConsentWidgetRejectButton as f,ConsentWidgetSaveButton as j,CustomizeButton as I,RejectButton as S,SaveButton as w}from"./atoms/button.js";import{ConsentWidgetFooter as F,ConsentWidgetFooterSubGroup as R,Footer as T,FooterSubGroup as b}from"./atoms/footer.js";import{ConsentWidgetRoot as y,Root as h}from"./atoms/root.js";import{ConsentWidgetPolicyActions as v,PolicyActions as z}from"./policy-actions.js";import{ConsentWidget as G}from"./preferences.js";let P=Object.assign(G,{AcceptAllButton:a,Accordion:o,AccordionArrow:t,AccordionContent:n,AccordionItem:e,AccordionItems:r,AccordionTrigger:c,AccordionTriggerInner:i,CustomizeButton:I,Footer:T,FooterSubGroup:b,PolicyActions:z,RejectButton:S,Root:h,SaveButton:w,Switch:p});export default P;export{a as AcceptAllButton,o as Accordion,t as AccordionArrow,n as AccordionContent,e as AccordionItem,r as AccordionItems,c as AccordionTrigger,i as AccordionTriggerInner,l as ConsentWidgetAcceptAllButton,s as ConsentWidgetAccordion,d as ConsentWidgetAccordionArrow,A as ConsentWidgetAccordionContent,g as ConsentWidgetAccordionItem,m as ConsentWidgetAccordionItems,C as ConsentWidgetAccordionTrigger,u as ConsentWidgetAccordionTriggerInner,B as ConsentWidgetCustomizeButton,F as ConsentWidgetFooter,R as ConsentWidgetFooterSubGroup,v as ConsentWidgetPolicyActions,f as ConsentWidgetRejectButton,y as ConsentWidgetRoot,j as ConsentWidgetSaveButton,W as ConsentWidgetSwitch,I as CustomizeButton,T as Footer,b as FooterSubGroup,z as PolicyActions,S as RejectButton,h as Root,w as SaveButton,p as Switch,P as ConsentWidget};
2
+ import{Accordion as o,AccordionArrow as t,AccordionContent as n,AccordionItem as e,AccordionItems as r,AccordionTrigger as i,AccordionTriggerInner as c,ConsentWidgetAccordion as s,ConsentWidgetAccordionArrow as d,ConsentWidgetAccordionContent as A,ConsentWidgetAccordionItem as g,ConsentWidgetAccordionItems as m,ConsentWidgetAccordionTrigger as C,ConsentWidgetAccordionTriggerInner as u,ConsentWidgetSwitch as W,ConsentWidgetVendorList as p,Switch as a,VendorList as l}from"./atoms/accordion.js";import{AcceptAllButton as B,ConsentWidgetAcceptAllButton as f,ConsentWidgetCustomizeButton as j,ConsentWidgetRejectButton as I,ConsentWidgetSaveButton as S,CustomizeButton as w,RejectButton as F,SaveButton as R}from"./atoms/button.js";import{ConsentWidgetFooter as T,ConsentWidgetFooterSubGroup as b,Footer as y,FooterSubGroup as h}from"./atoms/footer.js";import{ConsentWidgetRoot as v,Root as z}from"./atoms/root.js";import{ConsentWidgetPolicyActions as G,PolicyActions as L}from"./policy-actions.js";import{ConsentWidget as P}from"./preferences.js";let V=Object.assign(P,{AcceptAllButton:B,Accordion:o,AccordionArrow:t,AccordionContent:n,AccordionItem:e,AccordionItems:r,AccordionTrigger:i,AccordionTriggerInner:c,CustomizeButton:w,Footer:y,FooterSubGroup:h,PolicyActions:L,RejectButton:F,Root:z,SaveButton:R,Switch:a,VendorList:l});export default V;export{B as AcceptAllButton,o as Accordion,t as AccordionArrow,n as AccordionContent,e as AccordionItem,r as AccordionItems,i as AccordionTrigger,c as AccordionTriggerInner,f as ConsentWidgetAcceptAllButton,s as ConsentWidgetAccordion,d as ConsentWidgetAccordionArrow,A as ConsentWidgetAccordionContent,g as ConsentWidgetAccordionItem,m as ConsentWidgetAccordionItems,C as ConsentWidgetAccordionTrigger,u as ConsentWidgetAccordionTriggerInner,j as ConsentWidgetCustomizeButton,T as ConsentWidgetFooter,b as ConsentWidgetFooterSubGroup,G as ConsentWidgetPolicyActions,I as ConsentWidgetRejectButton,v as ConsentWidgetRoot,S as ConsentWidgetSaveButton,W as ConsentWidgetSwitch,p as ConsentWidgetVendorList,w as CustomizeButton,y as Footer,h as FooterSubGroup,L as PolicyActions,F as RejectButton,z as Root,R as SaveButton,a as Switch,l as VendorList,V as ConsentWidget};
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ export*from"./components/consent-gate/index.js";
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{deniedVendorIds as t,vendorRenders as o}from"@c15t/core";import{createContext as r,useCallback as n,useContext as i,useEffect as s,useMemo as l,useState as a,useSyncExternalStore as c}from"react";import{KernelContext as u,ProviderServicesContext as d}from"./context.js";import{useUIConfig as f}from"./ui-config-context.js";import{saveConsentUI as p}from"./ui-save.js";let y=function(e,t,o){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:o,writable:!0})},v=function(e){let o={};if("iab"===e.model)return o;let r=t(e)??new Set;for(let t of e.vendors?.declared??[])y(o,t.id,!r.has(t.id));return o},g=function(e){return"iab"===e.model?"":JSON.stringify((e.vendors?.declared??[]).filter(o).map(e=>[e.id,!0===e.disabled,e.category]).sort(([e],[t])=>String(e).localeCompare(String(t))))},m=function(e){let t=new Set;if("iab"===e.model)return t;for(let o of e.vendors?.declared??[])!0!==o.disabled&&t.add(o.id);return t},h=function(e,t){let o=Object.keys(e);return o.length===Object.keys(t).length&&o.every(o=>e[o]===t[o])},C=function(e,t){let o={experience:!1,functionality:!1,marketing:!1,measurement:!1,necessary:!0};for(let r of e.evaluationPolicy.choiceScope??e.policyRule.scope)o[r]=e.explicitChoice?.categories[r]?.value??t?.[r]??("opt-out"===e.policyRule.model||e.policyRule.preselectedCategories.includes(r));return o},S=function(e,t){let o=0,r=0,n=e.getSnapshot(),i=C(n,t),s=v(n),l=m(n),a=g(n),{fingerprint:c}=n.evaluationPolicy.choice,u={displayedCategories:["necessary",...n.evaluationPolicy.choiceScope??n.policyRule.scope],isDirty:!1,isStale:!1,values:i,vendors:s},d=new Set,f=e=>{for(let t of(u=e,d))t()},p=(e,t)=>u.displayedCategories.some(t=>e[t]!==i[t])||!h(t,s),S=()=>{o+=1,i=C(n=e.getSnapshot(),t),s=v(n),l=m(n),a=g(n),({fingerprint:c}=n.evaluationPolicy.choice),f({displayedCategories:["necessary",...n.evaluationPolicy.choiceScope??n.policyRule.scope],isDirty:!1,isStale:!1,values:i,vendors:s})},b=e=>{let t={...u.values},r=!1;for(let o of u.displayedCategories)"necessary"!==o&&"boolean"==typeof e[o]&&t[o]!==e[o]&&(t[o]=e[o],r=!0);r&&(o+=1,f({...u,isDirty:p(t,u.vendors),values:t}))},j=e=>{let t={...u.vendors},r=!1;for(let[o,n]of Object.entries(e))l.has(o)&&"boolean"==typeof n&&t[o]!==n&&(y(t,o,n),r=!0);r&&(o+=1,f({...u,isDirty:p(u.values,t),vendors:t}))},P=()=>{let e={};for(let t of Object.keys(s))y(e,t,!0);return e},D=()=>{let t=e.getSnapshot();if(n.explicitChoice===t.explicitChoice&&n.policyRule===t.policyRule&&n.evaluationPolicy===t.evaluationPolicy&&n.vendors===t.vendors&&n.vendorChoice===t.vendorChoice&&n.model===t.model)return;let o=t.evaluationPolicy.choiceScope??t.policyRule.scope,r=u.displayedCategories.length!==o.length+1||o.some(e=>!u.displayedCategories.includes(e)),i=g(t)!==a,s=c!==t.evaluationPolicy.choice.fingerprint||r||i;n=t,u.isDirty?s&&!u.isStale&&f({...u,isStale:!0}):S()};return{acceptAll(){b(Object.fromEntries(u.displayedCategories.map(e=>[e,!0]))),j(P())},connect:()=>(D(),e.subscribe(D)),getSnapshot:()=>u,rejectAll(){b(Object.fromEntries(u.displayedCategories.map(e=>[e,!1]))),j(P())},reset:S,async save(t,n,i){if(c!==e.getSnapshot().evaluationPolicy.choice.fingerprint||u.isStale)return f({...u,isStale:!0}),{ok:!1};let l={},a=new Set(n??u.displayedCategories);for(let e of u.displayedCategories)"necessary"!==e&&a.has(e)&&(l[e]=u.values[e]);let d=r+=1,p={};if("all"!==t&&"none"!==t)for(let[e,t]of Object.entries(u.vendors))s[e]!==t&&y(p,e,t);let v=e.commands.save(t??l,{categories:n,...Object.keys(p).length>0&&{vendors:p}}),g=o,m=await v;return m.ok&&d===r&&o===g&&!u.isStale&&c===e.getSnapshot().evaluationPolicy.choice.fingerprint&&(S(),i?.()),m},set(e,t){b({[e]:t})},setVendor(e,t){j({[e]:t})},subscribe:e=>(d.add(e),()=>{d.delete(e)}),update:b}},b=r(null),j=function(){let e=i(u);if(!e)throw Error("Consent drafts require a ConsentProvider.");return e},P=({children:t,initial:o})=>{let r=j(),n=i(b),{presentation:l}=f(),[c,u]=a(()=>S(r,o??l?.preferences?.defaults)),d=n&&!o?n:c;return s(()=>d.connect(),[d]),e(b.Provider,{value:d,children:t})},D=function(){let e=j(),t=i(b),{presentation:o}=f(),[r,n]=a(()=>S(e,o?.preferences?.defaults)),l=t??r;return s(()=>t?void 0:l.connect(),[t,l]),l},O=function(e){let t=j(),o=i(d);return n(r=>{let n=!1;return p(t,()=>e.save(r,o?.getConsentCategories(),()=>{n=!0}),()=>n)},[t,e,o])},x=function(e){let t=c(e.subscribe,e.getSnapshot,e.getSnapshot);return l(()=>({...t,acceptAll:e.acceptAll,rejectAll:e.rejectAll,reset:e.reset,save:e.save,set:e.set,setVendor:e.setVendor,update:e.update}),[t,e])},A=function(){return O(D())},R=function(){let e=D();return{draft:x(e),save:O(e)}},k=function(){return x(D())},w=function(){let{isDirty:e,isStale:t,reset:o,save:r,setVendor:n,vendors:i}=x(D());return l(()=>({isDirty:e,isStale:t,reset:o,save:r,setVendor:n,vendors:i}),[e,t,o,r,n,i])};export{P as ConsentDraftProvider,k as useConsentDraft,R as useConsentManagerDraft,A as useConsentSaveAction,w 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 t,useEffect as r,useMemo as i,useState as n,useSyncExternalStore as o}from"react";import{IABContext as a}from"./context/iab-context-value.js";let c=function(){return null},u=({runtime:u,children:l})=>{let[s,m]=n("purposes"),d=o(e=>u.onIABChange(e),()=>u.iab,c),f=i(()=>{let e,t,r;return e=!1,t=!1,{actions:r=[],activate:()=>{e=!0,t=!1},deactivate:()=>{e=!1,queueMicrotask(()=>{if(!e)for(let e of(t=!0,r.splice(0)))e.cancel()})},isClosed:()=>t,runtime:u}},[u]);r(()=>{f.activate();let e=()=>{let e=f.runtime.iab;if(e)for(let t of f.actions.splice(0))t.run(e)},t=f.runtime.onIABChange(e);return e(),()=>{t(),f.deactivate()}},[f]);let p=t(e=>{let t=new Promise((t,r)=>{let i=()=>r(new DOMException("External IAB provider unmounted or changed runtimes.","AbortError"));if(f.isClosed())return void i();let n=async i=>{try{await e(i),t()}catch(e){r(e)}},o=f.runtime.iab;o?n(o):f.actions.push({cancel:i,run:n})});return t.catch(()=>void 0),t},[f]),v=i(()=>({handle:d,run:p,setTab:m,tab:s}),[d,p,s]);return e(a.Provider,{value:v,children:l})};export{u as ExternalIABProvider};
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{evaluateConsent as e,isVendorDenied as s}from"@c15t/core";import{useCallback as o,useContext as n,useSyncExternalStore as t}from"react";import{KernelContext as r}from"./context.js";import{useUIConfig as u}from"./ui-config-context.js";import{invalidateConsentUIAction as i}from"./ui-save.js";let a=function(){let e=n(r);if(!e)throw Error("c15t: no kernel in context. Wrap your app with <ConsentProvider options={...}> from @c15t/react.");return e},c=function(e,s){return e.subscribe(s)},f=function(e){let s=a();return t(e=>c(s,e),()=>e(s.getSnapshot()),()=>e(s.getServerSnapshot()))},l=function(){let e=a();return t(s=>c(e,s),()=>e.getSnapshot(),()=>e.getServerSnapshot())},h=function(e){return f(s=>s.effectivePermissions[e])},p=function(){return f(e=>e.effectivePermissions)},d=function(){return f(e=>e.overrides)},m=function(){return f(e=>e.user)},k=function(){return f(e=>e.location)},_=function(){return f(e=>e.translations)},C=function(){return f(e=>e.branding)},g=function(){return f(e=>"matched"===e.resolution.status)},v=function(){return f(e=>"matched"===e.resolution.status&&("none"!==e.policyRule.prompt||e.policyRule.rights.length>0))},P=function(){return f(e=>"matched"===e.resolution.status?e.model:null)},S=function(){return f(e=>e.activeUI)},y=function(){return f(e=>e.policyRule.scope)},I=function(){return f(e=>e.policyRule.scopeMode)},b=function(){return f(e=>e.iab)},R=function(){return f(e=>e.iab?.enabled??!1)},O=function(e){let s=String(e);return f(e=>e.iab?.vendorConsents[s]??!1)},A=function(e){return f(s=>s.iab?.purposeConsents[e]??!1)},D=function(e){return f(s=>s.iab?.specialFeatureOptIns[e]??!1)},U=function(){return f(e=>e.iab?.tcString??null)},V=[],x=function(){return f(e=>"iab"===e.model?V:e.vendors?.declared??V)},E=function(){return f(e=>e.vendorChoice)},B=function(o){return f(n=>{let t=n.vendors?.declared.find(e=>e.id===o);if(!t)return!0;if("iab"!==n.model&&s(n,o))return!1;try{return e({category:t.category},n)}catch{return!1}})},T=function(){return a().set.registerConsentCategories},M=function(){return a().set.overrides},N=function(){return a().set.language},w=function(){let e=a();return o(s=>{i(e),e.set.activeUI(s)},[e])},H=function(){return a().commands.save},L=function(){let e=a();return o(s=>e.events.on("permissions:changed",({snapshot:e})=>s(e.effectivePermissions)),[e])},j=function(){return a().commands.identify},q=function(){return a().commands.init},F=function(){return f(e=>e.explicitChoice)},W=function(){return f(e=>e.effectivePermissions)},z=function(){return f(e=>e.promptRequirement)},G=function(){return f(e=>e.noticeDismissal)},J=function(){return f(e=>e.privacySignals)},K=function(){return f(e=>e.optOutDirectives)},Q=function(){return f(e=>e.resolution)},X=function(){return f(e=>e.policyRule)},Y=function(){return f(e=>e.restrictions)},Z=function(){return a().commands.dismissNotice},$={},ee={},es=function(){return u().presentation?.prompt??$},eo=function(){return u().presentation?.preferences??ee};export{S as useActiveUI,C as useBranding,h as useConsent,p as useConsents,x as useDeclaredVendors,Z as useDismissNotice,W as useEffectivePermissions,F as useExplicitChoice,g as useHasConsentPolicy,v as useHasConsentUI,R as useIABEnabled,b as useIABSnapshot,j as useIdentify,q as useInit,k as useLocation,P as useModel,G as useNoticeDismissal,K as useOptOutDirectives,d as useOverrides,y as usePolicyCategories,Q as usePolicyResolution,X as usePolicyRule,I as usePolicyScopeMode,eo as usePreferencesPresentation,J as usePrivacySignals,es as usePromptPresentation,z as usePromptRequirement,A as usePurposeConsent,T as useRegisterConsentCategories,Y as useRestrictions,H as useSaveConsents,w as useSetActiveUI,N as useSetLanguage,M as useSetOverrides,l as useSnapshot,D as useSpecialFeatureOptIn,L as useSubscribeToConsentChanges,U as useTCString,_ as useTranslations,m as useUser,B as useVendorAllowed,E as useVendorChoice,O as useVendorConsent};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- export{createConsentKernel,custom,hosted}from"@c15t/core";export{offline}from"./transports/offline.js";export{ConsentDialog,ConsentWidget}from"./aggregate-components.js";export{ConsentBanner,useConsentBannerSurface}from"./components/prompt/index.js";export{ConsentDialogLink}from"./components/panel-link/index.js";export{ConsentDialogTrigger,ConsentDialogTriggerToolbar}from"./components/panel-trigger/index.js";export{Frame}from"./components/frame/index.js";export{ConsentDraftProvider,useConsentDraft}from"./draft.js";export{useConsentManager}from"./component-hooks/use-manager.js";export{useTranslations}from"./component-hooks/use-translations.js";export{useActiveUI,useBranding,useConsent,useConsents,useDismissNotice,useEffectivePermissions,useExplicitChoice,useHasConsentPolicy,useHasConsentUI,useIABEnabled,useIABSnapshot,useIdentify,useInit,useLocation,useModel,useNoticeDismissal,useOptOutDirectives,useOverrides,usePolicyCategories,usePolicyResolution,usePolicyRule,usePolicyScopeMode,usePreferencesPresentation,usePrivacySignals,usePromptPresentation,usePromptRequirement,usePurposeConsent,useRestrictions,useSaveConsents,useSetActiveUI,useSetLanguage,useSetOverrides,useSnapshot,useSpecialFeatureOptIn,useTCString,useUser,useVendorConsent}from"./hooks.js";export{useIframeBlocker,useNetworkBlocker,usePersistence,useScriptLoader}from"./module-hooks.js";export{ConsentProvider}from"./provider.js";export{defineTheme}from"./types/theme/index.js";
1
+ export{createConsentKernel,custom,hosted}from"@c15t/core";export{offline}from"./transports/offline.js";export{ConsentDialog,ConsentWidget}from"./aggregate-components.js";export{ConsentBanner,useConsentBannerSurface}from"./components/prompt/index.js";export{ConsentDialogLink}from"./components/panel-link/index.js";export{ConsentDialogTrigger,ConsentDialogTriggerToolbar}from"./components/panel-trigger/index.js";export{ConsentGate,Frame}from"./components/consent-gate/index.js";export{ConsentDraftProvider,useConsentDraft,useVendorDraft}from"./draft.js";export{useConsentManager}from"./component-hooks/use-manager.js";export{useTranslations}from"./component-hooks/use-translations.js";export{useActiveUI,useBranding,useConsent,useConsents,useDeclaredVendors,useDismissNotice,useEffectivePermissions,useExplicitChoice,useHasConsentPolicy,useHasConsentUI,useIABEnabled,useIABSnapshot,useIdentify,useInit,useLocation,useModel,useNoticeDismissal,useOptOutDirectives,useOverrides,usePolicyCategories,usePolicyResolution,usePolicyRule,usePolicyScopeMode,usePreferencesPresentation,usePrivacySignals,usePromptPresentation,usePromptRequirement,usePurposeConsent,useRestrictions,useSaveConsents,useSetActiveUI,useSetLanguage,useSetOverrides,useSnapshot,useSpecialFeatureOptIn,useTCString,useUser,useVendorAllowed,useVendorChoice,useVendorConsent}from"./hooks.js";export{useIframeBlocker,useNetworkBlocker,usePersistence,useScriptLoader}from"./module-hooks.js";export{ConsentProvider}from"./provider.js";export{defineTheme}from"./types/theme/index.js";
package/dist/provider.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as e,jsx as r,jsxs as n}from"react/jsx-runtime";import{createConsentKernel as t,kernelConfigToInitResponse as i}from"@c15t/core";import{createWindowDebug as o,resolveWindowDebugMode as l}from"@c15t/core/modules/window-debug";import{resolvePolicyRules as c}from"@c15t/schema/types";import{deepMergeTranslations as s}from"@c15t/translations";import{defaultTheme as u,generateThemeCSS as a}from"@c15t/ui/theme";import{Suspense as d,lazy as f,useContext as m,useEffect as p,useMemo as g,useRef as v,useState as h}from"react";import{KernelContext as y,ProviderServicesContext as k}from"./context.js";import{useColorScheme as b}from"./hooks/use-color-scheme.js";import{usePersistence as R}from"./module-hooks/persistence.js";import{V3ThemeProvider as C}from"./theme-provider.js";import{defaultTranslationConfig as S}from"./utils/default-translation-config.js";let P=f(async()=>({default:(await import("./external-iab-context.js")).ExternalIABProvider})),w=c({countryCode:null,regionCode:null,rules:[{id:"disabled",match:{fallback:!0},model:"opt-out",prompt:"none"}]}),O={language:"en",translations:S.translations.en},x=function(e){if(e)return"externalId"in e?e:{externalId:e.id,identityProvider:e.identityProvider}},j=function(e){if(!e?.messages)return;let r=e.locale??S.defaultLanguage??"en",n=S.translations.en,t=e.messages[r]??e.messages.en??n,i=S.translations[r]??n;return{language:r,translations:s(i,t)}},K=function(e){return e.enabled??!0},E=function(e,r){let n=!1;return{...e,async init(t){if(n)return e.init?.(t)??{};n=!0;let i=await r(t);return i.response?i.response:e.init?.(i.context??t)??{}}}},L=function(e){return"function"==typeof e?.then},N=function(e){let{prefetch:r}=e;return!r||L(r)?{}:r},D=function(e){return void 0!==e&&Object.keys(e).length>0},_=function(e){"production"!==globalThis.process?.env?.NODE_ENV&&console.warn("c15t ConsentProvider: prefetch rejected; using transport init.",e)},q=function(e,r,n,t){let i={...r.initialOverrides??{},...n??{}};D(i)&&e.set.overrides(i),r.initialRecords&&e.getRecordsGeneration()===t&&e.hydrate(r.initialRecords)},A=function(e,r,n){var t,o;let{prefetch:l}=r;return L(l)?E(e,(t=Promise.resolve(l),o=r.overrides,async e=>{let r,l=n()?.getRecordsGeneration();try{r=await t??{}}catch(e){return _(e),{}}let c=i(r);if(c){let e={...c.resolvedOverrides??{},...o??{}};return D(e)&&(c.resolvedOverrides=e),{response:c}}let s=n();return s&&q(s,r,o,l),{context:{overrides:{...e.overrides,...r.initialOverrides??{},...o??{}},user:e.user}}})):e},B=function(e){if("function"!=typeof e.mode)throw Error("c15t ConsentProvider: set mode to hosted(), offline(), or custom().");return e.mode},I=function(e){let r=K(e),n=N(e),i=j(e.i18n)??O,o={consentCategories:e.consentCategories,prefetch:n,translations:i},l=B(e)(o),c={current:null},s=A(l,e,()=>c.current),u=t({...n,initialRecords:r?n.initialRecords:void 0,initialPrivacySignals:r?n.initialPrivacySignals:void 0,now:n.now??n.initialRecords?.now??(n.initialRecords?void 0:0),transport:s,initialPolicyResolution:r?n.initialPolicyResolution:w,initialOverrides:{...n.initialOverrides??{},...e.overrides??{}},initialUser:x(e.user)??n.initialUser,initialTranslations:n.initialTranslations??i,initialPolicyPending:n.initialPolicyPending??(r&&!n.initialPolicyResolution)});return c.current=u,u},T=function(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)}catch{return String(e)}},H=function(e,r){let n=v(r);p(()=>{n.current=r},[r]),p(()=>{let r=[e.events.on("choice:recorded",({snapshot:e,confirmed:r,actionAt:t})=>{n.current?.onChoiceRecorded?.({actionAt:t,confirmed:r,snapshot:e})}),e.events.on("permissions:changed",({snapshot:e,previous:r})=>{n.current?.onPermissionsChanged?.({previous:r,snapshot:e})}),e.events.on("command:error",e=>{n.current?.onError?.({error:T(e.error)})})];return()=>{for(let e of r)e()}},[e])},J=function(e,r,n,t){let i=v(n),o=v(null),l=v(null),c=v(null);p(()=>{if(!t)return;let n=x(r.user),i=JSON.stringify(n??null);if(null===o.current){o.current=i;return}o.current!==i&&(o.current=i,n&&(async()=>{try{await e.commands.identify(n)}catch{}})())},[e,r.user,t]),p(()=>{if(!t)return;let i=JSON.stringify(r.overrides??{});if(null===l.current){l.current=i;return}l.current!==i&&(l.current=i,e.set.overrides(r.overrides??{}),n&&e.commands.init())},[n,e,r.overrides,t]),p(()=>{!t||i.current===n||(i.current=n,n||e.set.activeUI("none"))},[n,e,t]),p(()=>{if("production"===globalThis.process?.env?.NODE_ENV)return;let e=JSON.stringify({i18n:r.i18n,mode:r.mode?.kind});if(null===c.current){c.current=e;return}c.current!==e&&(c.current=e,console.warn("c15t ConsentProvider: remount to change mode or i18n."))},[r])},F=({kernel:e,callbacks:r})=>(H(e,r),null),U=({enabled:e,kernel:r,prepared:n})=>{let t=v(!1),i=v(!1);return p(()=>{if(!e){t.current=!1;return}if(!t.current)if(t.current=!0,n){r.hydrate({now:i.current?Date.now():r.getServerSnapshot().evaluatedAt}),i.current=!0;let{gpc:e}=r.getSnapshot().privacySignals;e.detected&&e.active&&r.set.privacySignals({gpc:!0})}else r.commands.init()},[e,r,n]),null},G=[],M=({clearOnRevocation:e,storageConfig:r,nonce:n,options:t,scripts:i=G})=>{let o=m(y),l=v(null),c=v(null),s=v(null),u=v({config:e,storageConfig:r}),[a,d]=h(i.length>0),f=v(i),g=v(t),k=v(n);i.length>0&&!a&&d(!0),p(()=>{u.current={config:e,storageConfig:r},f.current=i,g.current=t,k.current=n},[e,r,n,t,i]),p(()=>{if(!o)return;let e=!1;return(async()=>{if(a){let{createScriptLoader:r}=await import("@c15t/core/modules/script-loader");if(e)return;l.current=r({kernel:o,nonce:k.current,onDebug:g.current?.onDebug,scripts:f.current})}let{config:r}=u.current;if(r){let{createClearOnRevocation:n}=await import("@c15t/core/modules/clear-on-revocation");if(e)return;s.current={config:r,create:n},c.current=n({config:r,kernel:o,storageConfig:u.current.storageConfig})}})(),()=>{e=!0,c.current?.dispose(),c.current=null,s.current=null,l.current?.dispose(),l.current=null}},[o,a]);let b=r?.storageKey;return p(()=>{let e=s.current;o&&e&&(c.current?.dispose(),c.current=e.create({config:e.config,kernel:o,storageConfig:{storageKey:b}}))},[o,b]),p(()=>{l.current?.updateScripts(i)},[i]),null},V=({options:e})=>{let r=m(y),n=v(null),t=v(e);return p(()=>{t.current=e},[e]),p(()=>{if(!r)return;let e=!1;return(async()=>{let{createNetworkBlocker:i}=await import("@c15t/core/modules/network-blocker");if(e)return;let o=t.current;n.current=i({enabled:o.enabled,kernel:r,logBlockedRequests:o.logBlockedRequests,onRequestBlocked:o.onRequestBlocked,rules:o.rules})})(),()=>{e=!0,n.current?.dispose(),n.current=null}},[r]),p(()=>{n.current?.updateRules(e.rules)},[e.rules]),p(()=>{void 0!==e.enabled&&n.current?.setEnabled(e.enabled)},[e.enabled]),null},z=({options:e,clearRef:r})=>{let n=R(e);return p(()=>(r.current=n.clear,()=>{r.current=null}),[n,r]),null},Q=({pkg:e,mode:r})=>(p(()=>{let n=o({mode:r,pkg:e});return()=>n.dispose()},[r,e]),null),W=({kernel:e})=>(p(()=>{let r=window,n=r.c15tKernel;return r.c15tKernel=e,()=>{if(r.c15tKernel===e){if(n){r.c15tKernel=n;return}delete r.c15tKernel}}},[e]),null),X=function(e){if(!1===e.persistence)return!1;let{storageConfig:r}=e,n=!!N(e).initialRecords;return!0===e.persistence||void 0===e.persistence?{skipHydration:n,storageConfig:r}:{...e.persistence,skipHydration:e.persistence.skipHydration??n,storageConfig:e.persistence.storageConfig??r}},Y=t=>{let{children:i}=t,o=t.options??{},c=K(o),[s,f]=h(()=>({clearOnRevocation:o.clearOnRevocation,disabledKernel:t.runtime?void 0:I({...o,enabled:!1}),external:t.runtime,kernel:t.runtime?.kernel??I({...o,enabled:!0})})),{clearOnRevocation:m,external:R}=s,S=c?s.kernel:s.disabledKernel??s.kernel,w=void 0===R,O=v(null),x=g(()=>({clearRecords:()=>{R?R.clearRecords():O.current?O.current():(S.hydrate({choice:null,noticeDismissal:null,optOutDirectives:[],subject:null}),S.events.emit({type:"records:cleared"}))},getConsentCategories:()=>{let{scope:e}=S.getSnapshot().policyRule,r=o.consentCategories;return["necessary",...e.filter(e=>!r?.length||r.includes(e))]},getPresentation:()=>o.presentation}),[S,o.consentCategories,o.presentation,R]),j=X(o),{scripts:E,networkBlocker:L}=o,D=o.__debugPkg??"@c15t/react",_=w?l(o.mode):"hosted";J(s.kernel,o,c,w);let q=v(0);p(()=>{if(!w)return;q.current+=1;let e=q.current;return()=>{queueMicrotask(()=>{q.current===e&&(s.kernel.dispose(),s.disabledKernel?.dispose())})}},[s,w]);let A=o.theme,B=g(()=>a(A??u,o.colorScheme).replace(/</gu,"\\3c "),[A,o.colorScheme]),T=g(()=>({colorScheme:o.colorScheme,disableAnimation:o.disableAnimation,noStyle:o.noStyle,scrollLock:o.scrollLock,theme:A,trapFocus:o.trapFocus}),[A,o.noStyle,o.disableAnimation,o.scrollLock,o.trapFocus,o.colorScheme]),H=g(()=>({components:o.components,legalLinks:o.legalLinks,presentation:o.presentation}),[o.components,o.legalLinks,o.presentation]);b(o.colorScheme);let G=n(e,{children:[w?n(e,{children:[r(F,{kernel:S,callbacks:o.callbacks}),r(Q,{pkg:D,mode:_}),r(W,{kernel:S}),c&&j?r(z,{options:j,clearRef:O}):null,r(U,{enabled:c,prepared:!!N(o).initialPolicyResolution,kernel:S}),E&&E.length>0||c&&m?r(M,{clearOnRevocation:c?m:void 0,storageConfig:j?j.storageConfig:o.storageConfig,nonce:o.nonce,options:o.scriptLoader,scripts:E}):null,c&&L?r(V,{options:L}):null]}):null,R?r(d,{fallback:i,children:r(P,{runtime:R,children:i})}):i]});return r(y.Provider,{value:S,children:r(k.Provider,{value:x,children:n(C,{themeConfig:T,uiConfig:H,children:[r("style",{id:"c15t-theme",nonce:o.nonce,dangerouslySetInnerHTML:{__html:B}}),G]})})})};export{Y as ConsentProvider};
2
+ import{Fragment as e,jsx as r,jsxs as n}from"react/jsx-runtime";import{createConsentKernel as t,declareOwnedVendors as o,extractConsentNamesFromCondition as i,forgetOwnedVendors as l,kernelConfigToInitResponse as s,resolveVendors as c}from"@c15t/core";import{createWindowDebug as u,resolveWindowDebugMode as a}from"@c15t/core/modules/window-debug";import{resolvePolicyRules as d}from"@c15t/schema/types";import{deepMergeTranslations as f}from"@c15t/translations";import{defaultTheme as g,generateThemeCSS as p}from"@c15t/ui/theme";import{useContext as m,useEffect as v,useMemo as h,useRef as y,useState as k}from"react";import{KernelContext as C,ProviderServicesContext as b}from"./context.js";import{ExternalIABProvider as S}from"./external-iab-context.js";import{useColorScheme as w}from"./hooks/use-color-scheme.js";import{useIframeBlocker as R}from"./module-hooks/iframe-blocker.js";import{usePersistence as P}from"./module-hooks/persistence.js";import{V3ThemeProvider as O}from"./theme-provider.js";import{defaultTranslationConfig as x}from"./utils/default-translation-config.js";let j=d({countryCode:null,regionCode:null,rules:[{id:"disabled",match:{fallback:!0},model:"opt-out",prompt:"none"}]}),B={language:"en",translations:x.translations.en},N=function(e){if(e)return"externalId"in e?e:{externalId:e.id,identityProvider:e.identityProvider}},E=function(e){if(!e?.messages)return;let r=e.locale??x.defaultLanguage??"en",n=x.translations.en,t=e.messages[r]??e.messages.en??n,o=x.translations[r]??n;return{language:r,translations:f(o,t)}},K=function(e){return e.enabled??!0},L=function(e,r){let n=!1;return{...e,async init(t){if(n)return e.init?.(t)??{};n=!0;let o=await r(t);return o.response?o.response:e.init?.(o.context??t)??{}}}},D=function(e){return"function"==typeof e?.then},M=function(e){let{prefetch:r}=e;return!r||D(r)?{}:r},_=function(e){return void 0!==e&&Object.keys(e).length>0},T=function(e){"production"!==globalThis.process?.env?.NODE_ENV&&console.warn("c15t ConsentProvider: prefetch rejected; using transport init.",e)},V=function(e,r,n,t){let o={...r.initialOverrides??{},...n??{}};_(o)&&e.set.overrides(o),r.initialRecords&&e.getRecordsGeneration()===t&&e.hydrate(r.initialRecords)},q=function(e,r,n){var t,o;let{prefetch:i}=r;return D(i)?L(e,(t=Promise.resolve(i),o=r.overrides,async e=>{let r,i=n()?.getRecordsGeneration();try{r=await t??{}}catch(e){return T(e),{}}let l=s(r);if(l){let e={...l.resolvedOverrides??{},...o??{}};return _(e)&&(l.resolvedOverrides=e),{response:l}}let c=n();return c&&V(c,r,o,i),{context:{overrides:{...e.overrides,...r.initialOverrides??{},...o??{}},user:e.user}}})):e},J=function(e){if("function"!=typeof e.mode)throw Error("c15t ConsentProvider: set mode to hosted(), offline(), or custom().");return e.mode},A=function(e){"production"!==globalThis.process?.env?.NODE_ENV&&console.warn(e)},H=function(e,r,n){let t=c({config:e.vendors,existing:n.initialVendors?.declared,onWarn:A,owners:r}),o=n.initialVendors?.listVersion??null;return t.length>0||null!==o?{declared:t,listVersion:o}:void 0},I=function(e){let r=K(e),n=M(e),o=E(e.i18n)??B,l={consentCategories:e.consentCategories,prefetch:n,translations:o},s=J(e)(l),c={current:null},u=q(s,e,()=>c.current),a=[...e.scripts??[],...e.networkBlocker?e.networkBlocker.rules??[]:[]],d=H(e,a,n),f=t({...n,consentCategories:e.consentCategories,inferredConsentCategories:[...a.flatMap(e=>i(e.category)),...(d?.declared??[]).flatMap(e=>i(e.category))],initialVendors:d,initialRecords:r?n.initialRecords:void 0,initialPrivacySignals:r?n.initialPrivacySignals:void 0,now:n.now??n.initialRecords?.now??(n.initialRecords?void 0:0),transport:u,initialPolicyResolution:r?n.initialPolicyResolution:j,initialOverrides:{...n.initialOverrides??{},...e.overrides??{}},initialUser:N(e.user)??n.initialUser,initialTranslations:n.initialTranslations??o,initialPolicyPending:n.initialPolicyPending??(r&&!n.initialPolicyResolution)});return c.current=f,f},F=function(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)}catch{return String(e)}},U=function(e,r){let n=y(r);v(()=>{n.current=r},[r]),v(()=>{let r=[e.events.on("init:applied",({snapshot:r})=>{let n=r.vendors?.declared??[];n.length>0&&e.set.registerConsentCategories(n.flatMap(e=>i(e.category)))}),e.events.on("choice:recorded",({snapshot:e,confirmed:r,actionAt:t})=>{n.current?.onChoiceRecorded?.({actionAt:t,confirmed:r,snapshot:e})}),e.events.on("permissions:changed",({snapshot:e,previous:r})=>{n.current?.onPermissionsChanged?.({previous:r,snapshot:e})}),e.events.on("command:error",e=>{n.current?.onError?.({error:F(e.error)})})];return()=>{for(let e of r)e()}},[e])},G=function(e,r,n,t){let s=y(n),u=y(null),a=y(null),d=y(null);v(()=>{if(!t)return;let n=N(r.user),o=JSON.stringify(n??null);if(null===u.current){u.current=o;return}u.current!==o&&(u.current=o,n&&(async()=>{try{await e.commands.identify(n)}catch{}})())},[e,r.user,t]),v(()=>{if(!t)return;let o=JSON.stringify(r.overrides??{});if(null===a.current){a.current=o;return}a.current!==o&&(a.current=o,e.set.overrides(r.overrides??{}),n&&e.commands.init())},[n,e,r.overrides,t]),v(()=>{!t||s.current===n||(s.current=n,n||e.set.activeUI("none"))},[n,e,t]);let f=y(null),g=y(Symbol("consent-provider"));v(()=>{if(!t)return;let n=[...r.scripts??[],...r.networkBlocker?r.networkBlocker.rules??[]:[]],l=JSON.stringify([r.vendors??[],n.map(e=>[e.vendor??null,e.category])]);if(null===f.current){f.current=l,o(e,n,g.current);return}if(f.current===l)return;f.current=l;let s=e.getSnapshot().vendors?.declared??[],u=c({config:r.vendors,existing:s.flatMap(e=>{let r="manifest"===e.source?e:e.shadowed;if(r?.source!=="manifest")return[];let{ownerCategory:n,...t}=r;return[t]}),onWarn:A});e.set.vendors({declared:u},{replaceSource:"config"}),o(e,n,g.current);let a=[...u.flatMap(e=>i(e.category)),...n.flatMap(e=>i(e.category))];a.length>0&&e.set.registerConsentCategories(a)},[e,r.networkBlocker,r.scripts,r.vendors,t]),v(()=>()=>{l(e,g.current),f.current=null},[e]),v(()=>{if("production"===globalThis.process?.env?.NODE_ENV)return;let e=JSON.stringify({i18n:r.i18n,mode:r.mode?.kind});if(null===d.current){d.current=e;return}d.current!==e&&(d.current=e,console.warn("c15t ConsentProvider: remount to change mode or i18n."))},[r])},W=({kernel:e,callbacks:r})=>(U(e,r),null),z=({enabled:e,kernel:r,prepared:n})=>{let t=y(!1),o=y(!1);return v(()=>{if(!e){t.current=!1;return}if(!t.current)if(t.current=!0,n){r.hydrate({now:o.current?Date.now():r.getServerSnapshot().evaluatedAt}),o.current=!0;let{gpc:e}=r.getSnapshot().privacySignals;e.detected&&e.active&&r.set.privacySignals({gpc:!0})}else r.commands.init()},[e,r,n]),null},Q=[],X=({clearOnRevocation:e,storageConfig:r,nonce:n,options:t,scripts:o=Q})=>{let i=m(C),l=y(null),s=y(null),c=y(null),u=y({config:e,storageConfig:r}),[a,d]=k(o.length>0),f=y(o),g=y(t),p=y(n);o.length>0&&!a&&d(!0),v(()=>{u.current={config:e,storageConfig:r},f.current=o,g.current=t,p.current=n},[e,r,n,t,o]),v(()=>{if(!i)return;let e=!1;return(async()=>{if(a){let{createScriptLoader:r}=await import("@c15t/core/modules/script-loader");if(e)return;l.current=r({kernel:i,nonce:p.current,onDebug:g.current?.onDebug,scripts:f.current})}let{config:r}=u.current;if(r){let{createClearOnRevocation:n}=await import("@c15t/core/modules/clear-on-revocation");if(e)return;c.current={config:r,create:n},s.current=n({config:r,kernel:i,storageConfig:u.current.storageConfig})}})(),()=>{e=!0,s.current?.dispose(),s.current=null,c.current=null,l.current?.dispose(),l.current=null}},[i,a]);let h=r?.storageKey;return v(()=>{let e=c.current;i&&e&&(s.current?.dispose(),s.current=e.create({config:e.config,kernel:i,storageConfig:{storageKey:h}}))},[i,h]),v(()=>{l.current?.updateScripts(o)},[o]),null},Y=({options:e})=>(R(e),null),Z=({options:e})=>{let r=m(C),n=y(null),t=y(e);return v(()=>{t.current=e},[e]),v(()=>{if(!r)return;let e=!1;return(async()=>{let{createNetworkBlocker:o}=await import("@c15t/core/modules/network-blocker");if(e)return;let i=t.current;n.current=o({enabled:i.enabled,kernel:r,logBlockedRequests:i.logBlockedRequests,onRequestBlocked:i.onRequestBlocked,rules:i.rules})})(),()=>{e=!0,n.current?.dispose(),n.current=null}},[r]),v(()=>{n.current?.updateRules(e.rules)},[e.rules]),v(()=>{void 0!==e.enabled&&n.current?.setEnabled(e.enabled)},[e.enabled]),null},$=({options:e,clearRef:r})=>{let n=P(e);return v(()=>(r.current=n.clear,()=>{r.current=null}),[n,r]),null},ee=({pkg:e,mode:r})=>(v(()=>{let n=u({mode:r,pkg:e});return()=>n.dispose()},[r,e]),null),er=({kernel:e})=>(v(()=>{let r=window,n=r.c15tKernel;return r.c15tKernel=e,()=>{if(r.c15tKernel===e){if(n){r.c15tKernel=n;return}delete r.c15tKernel}}},[e]),null),en=function(e){if(!1===e.persistence)return!1;let{storageConfig:r}=e,n=!!M(e).initialRecords;return!0===e.persistence||void 0===e.persistence?{skipHydration:n,storageConfig:r}:{...e.persistence,skipHydration:e.persistence.skipHydration??n,storageConfig:e.persistence.storageConfig??r}},et=t=>{let{children:o}=t,i=t.options??{},l=K(i),[s,c]=k(()=>({clearOnRevocation:i.clearOnRevocation,disabledKernel:t.runtime?void 0:I({...i,enabled:!1}),external:t.runtime,kernel:t.runtime?.kernel??I({...i,enabled:!0})})),{clearOnRevocation:u,external:d}=s,f=l?s.kernel:s.disabledKernel??s.kernel,m=void 0===d;v(()=>{(m||void 0!==i.consentCategories)&&f.set.consentCategories(i.consentCategories)},[f,m,i.consentCategories]);let R=y(null),P=h(()=>({clearRecords:()=>{d?d.clearRecords():R.current?R.current():(f.hydrate({choice:null,noticeDismissal:null,optOutDirectives:[],subject:null,vendorChoice:null}),f.events.emit({type:"records:cleared"}))},getConsentCategories:()=>{let e=f.getSnapshot();return["necessary",...e.evaluationPolicy.choiceScope??e.policyRule.scope]},getPresentation:()=>i.presentation}),[f,i.presentation,d]),x=en(i),{scripts:j,networkBlocker:B}=i,N=i.__debugPkg??"@c15t/react",E=m?a(i.mode):"hosted";G(s.kernel,i,l,m);let L=y(0);v(()=>{if(!m)return;L.current+=1;let e=L.current;return()=>{queueMicrotask(()=>{L.current===e&&(s.kernel.dispose(),s.disabledKernel?.dispose())})}},[s,m]);let D=i.theme,_=h(()=>p(D??g,i.colorScheme).replace(/</gu,"\\3c "),[D,i.colorScheme]),T=h(()=>({colorScheme:i.colorScheme,disableAnimation:i.disableAnimation,noStyle:i.noStyle,scrollLock:i.scrollLock,theme:D,trapFocus:i.trapFocus}),[D,i.noStyle,i.disableAnimation,i.scrollLock,i.trapFocus,i.colorScheme]),V=h(()=>({components:i.components,legalLinks:i.legalLinks,presentation:i.presentation}),[i.components,i.legalLinks,i.presentation]);w(i.colorScheme);let q=n(e,{children:[m?n(e,{children:[r(W,{kernel:f,callbacks:i.callbacks}),r(ee,{pkg:N,mode:E}),r(er,{kernel:f}),l&&x?r($,{options:x,clearRef:R}):null,r(z,{enabled:l,prepared:!!M(i).initialPolicyResolution,kernel:f}),j&&j.length>0||l&&u?r(X,{clearOnRevocation:l?u:void 0,storageConfig:x?x.storageConfig:i.storageConfig,nonce:i.nonce,options:i.scriptLoader,scripts:j}):null,l&&!1!==i.iframeBlocker?r(Y,{options:i.iframeBlocker}):null,l&&B?r(Z,{options:B}):null]}):null,d?r(S,{runtime:d,children:o}):o]});return r(C.Provider,{value:f,children:r(b.Provider,{value:P,children:n(O,{themeConfig:T,uiConfig:V,children:[r("style",{id:"c15t-theme",nonce:i.nonce,dangerouslySetInnerHTML:{__html:_}}),q]})})})};export{et as ConsentProvider};
@@ -40,7 +40,7 @@
40
40
  :root, :host{--consent-manager-background-color:var(--c15t-surface);--consent-manager-background-color-dark:var(--c15t-surface);--consent-manager-border-color:var(--c15t-border);--consent-manager-border-color-dark:var(--c15t-border);--consent-manager-text-color:var(--c15t-text);--consent-manager-text-color-dark:var(--c15t-text);--consent-manager-text-muted-color:var(--c15t-text-muted);--consent-manager-text-muted-color-dark:var(--c15t-text-muted);--consent-manager-footer-background-color:transparent;--consent-manager-footer-background-color-dark:transparent;--consent-manager-link-text-color:var(--c15t-text);--consent-manager-link-text-color-dark:var(--c15t-text);--consent-manager-branding-link-color:var(--c15t-primary);--consent-manager-padding:0;--consent-manager-radius:0;--consent-manager-gap:var(--c15t-space-xs);--consent-manager-border-width:0;--consent-manager-max-width:32rem;--consent-manager-z-index:50;--consent-manager-footer-padding:var(--c15t-space-lg) 0 0 0;--consent-manager-title-size:var(--c15t-font-size-sm);--consent-manager-title-line-height:var(--c15t-line-height-tight);--consent-manager-title-tracking:-.006em;--consent-manager-title-weight:var(--c15t-font-weight-semibold);--consent-manager-entry-animation:var(--c15t-enter-animation);--consent-manager-exit-animation:var(--c15t-exit-animation);--consent-manager-font-family:system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--consent-manager-line-height:1.15}
41
41
 
42
42
  /* components/panel vars */
43
- :root, :host{--consent-dialog-font-family:var(--c15t-font-family);--consent-dialog-line-height:var(--c15t-line-height-tight);--consent-dialog-title-font-size:var(--c15t-font-size-sm);--consent-dialog-title-font-weight:var(--c15t-font-weight-semibold);--consent-dialog-title-letter-spacing:-.025em;--consent-dialog-description-font-size:var(--c15t-font-size-base);--consent-dialog-description-font-weight:var(--c15t-font-weight-normal);--consent-dialog-description-line-height:var(--c15t-line-height-normal);--consent-dialog-footer-gap:var(--c15t-space-sm);--consent-dialog-footer-font-size:14px;--consent-dialog-stroke-color:var(--c15t-border);--consent-dialog-stroke-color-dark:var(--c15t-border);--consent-dialog-link-text-color:var(--c15t-text);--consent-dialog-link-text-color-dark:var(--c15t-text);--consent-dialog-border-color:var(--c15t-border);--consent-dialog-border-color-dark:var(--c15t-border);--consent-dialog-background-color:var(--c15t-surface);--consent-dialog-background-color-dark:var(--c15t-surface);--consent-dialog-foreground-color:var(--c15t-text);--consent-dialog-foreground-color-dark:var(--c15t-text);--consent-dialog-muted-color:var(--c15t-text-muted);--consent-dialog-muted-color-dark:var(--c15t-text-muted);--consent-dialog-overlay-background-color:var(--c15t-overlay);--consent-dialog-overlay-background-color-dark:var(--c15t-overlay);--consent-dialog-card-padding:var(--c15t-space-lg);--consent-dialog-card-padding-mobile:var(--c15t-space-md);--consent-dialog-card-gap:var(--c15t-space-xs);--consent-dialog-header-gap:var(--c15t-space-xs);--consent-dialog-content-gap:var(--c15t-space-md);--consent-dialog-footer-padding-y:var(--c15t-space-md);--consent-dialog-card-radius:var(--c15t-radius-lg);--consent-dialog-max-width:28rem;--consent-dialog-height:100%;--consent-dialog-z-index:999999;--consent-dialog-overlay-z-index:999998;--consent-dialog-card-shadow:0 1px 2px 0 #0000000d;--consent-dialog-border-width:1px;--consent-dialog-border-width-hairline:1px;--consent-dialog-border-style:solid;--consent-dialog-animation-duration:var(--c15t-duration-normal);--consent-dialog-animation-timing:ease-out}
43
+ :root, :host{--consent-dialog-font-family:var(--c15t-font-family);--consent-dialog-line-height:var(--c15t-line-height-tight);--consent-dialog-title-font-size:var(--c15t-font-size-sm);--consent-dialog-title-font-weight:var(--c15t-font-weight-semibold);--consent-dialog-title-letter-spacing:-.025em;--consent-dialog-description-font-size:var(--c15t-font-size-base);--consent-dialog-description-font-weight:var(--c15t-font-weight-normal);--consent-dialog-description-line-height:var(--c15t-line-height-normal);--consent-dialog-footer-gap:var(--c15t-space-sm);--consent-dialog-footer-font-size:14px;--consent-dialog-stroke-color:var(--c15t-border);--consent-dialog-stroke-color-dark:var(--c15t-border);--consent-dialog-link-text-color:var(--c15t-text);--consent-dialog-link-text-color-dark:var(--c15t-text);--consent-dialog-border-color:var(--c15t-border);--consent-dialog-border-color-dark:var(--c15t-border);--consent-dialog-background-color:var(--c15t-surface);--consent-dialog-background-color-dark:var(--c15t-surface);--consent-dialog-foreground-color:var(--c15t-text);--consent-dialog-foreground-color-dark:var(--c15t-text);--consent-dialog-muted-color:var(--c15t-text-muted);--consent-dialog-muted-color-dark:var(--c15t-text-muted);--consent-dialog-overlay-background-color:var(--c15t-overlay);--consent-dialog-overlay-background-color-dark:var(--c15t-overlay);--consent-dialog-card-padding:var(--c15t-space-lg);--consent-dialog-card-padding-mobile:var(--c15t-space-md);--consent-dialog-card-gap:var(--c15t-space-xs);--consent-dialog-header-gap:var(--c15t-space-xs);--consent-dialog-content-gap:var(--c15t-space-md);--consent-dialog-footer-padding-y:var(--c15t-space-md);--consent-dialog-card-radius:var(--c15t-radius-lg);--consent-dialog-max-width:28rem;--consent-dialog-height:100%;--consent-dialog-max-height:calc(100dvh - 2 * var(--consent-dialog-card-padding-mobile));--consent-dialog-z-index:999999;--consent-dialog-overlay-z-index:999998;--consent-dialog-card-shadow:0 1px 2px 0 #0000000d;--consent-dialog-border-width:1px;--consent-dialog-border-width-hairline:1px;--consent-dialog-border-style:solid;--consent-dialog-animation-duration:var(--c15t-duration-normal);--consent-dialog-animation-timing:ease-out}
44
44
  @media only screen and (resolution>=192dpi){:root, :host{--consent-dialog-border-width-hairline:.5px}}
45
45
 
46
46
  /* components/prompt vars */
@@ -69,7 +69,7 @@
69
69
  .c15t-ui-root-S5pMJ{gap:1rem;width:100%;display:grid}.c15t-ui-list-BZaPj{background:var(--tabs-list-background);border:1px solid var(--tabs-list-border);border-radius:var(--c15t-radius-md);grid-auto-flow:column;align-items:center;gap:.25rem;width:fit-content;padding:.25rem;display:inline-grid}.c15t-ui-list-vertical-cP2o0{grid-auto-flow:row}.c15t-ui-trigger-U8k4E{border-radius:calc(var(--c15t-radius-md) - .25rem);color:var(--tabs-trigger-color);cursor:pointer;font:inherit;transition:background-color var(--c15t-duration-fast) ease, color var(--c15t-duration-fast) ease;background:0 0;border:0;padding:.625rem .875rem;font-weight:500}.c15t-ui-trigger-U8k4E[data-state=active]{background:var(--tabs-trigger-active-background);color:var(--tabs-trigger-active-color)}.c15t-ui-trigger-U8k4E:focus-visible{outline:2px solid var(--tabs-focus-ring);outline-offset:2px}.c15t-ui-content-Iyncb{color:var(--c15t-text)}
70
70
 
71
71
  /* components/accordion */
72
- .c15t-ui-list-T3EU0:not(.headless){gap:var(--accordion-stack-gap,.75rem);display:grid}.c15t-ui-item-Jgm_X:not(.headless){border:1px solid var(--accordion-border-color,var(--c15t-border));border-radius:var(--accordion-radius,var(--c15t-radius-md));box-shadow:none;background-color:var(--accordion-background-color,var(--c15t-surface));padding:0;display:grid;overflow:visible}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless){border-color:var(--accordion-border-color-dark,var(--c15t-border));background-color:var(--accordion-background-color-dark,var(--c15t-surface))}.c15t-ui-triggerRow-xXdTH:not(.headless){align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));box-sizing:border-box;width:100%;padding:var(--accordion-padding,var(--c15t-space-sm));border-radius:var(--accordion-radius,var(--c15t-radius-md));color:var(--accordion-text-color,var(--c15t-text));transition:background-color var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));background-color:#0000;border:0;grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto;margin:0;display:grid}.c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover,var(--c15t-surface-hover))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless){color:var(--accordion-text-color-dark,var(--c15t-text))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover-dark,var(--c15t-surface-hover))}.c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline:2px solid var(--accordion-focus-ring,#476cff);outline-offset:-2px}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline-color:var(--accordion-focus-ring-dark,#2547d0)}.c15t-ui-trigger-KT5J_:not(.headless):focus-visible{outline:none}.c15t-ui-item-Jgm_X:not(.headless)>.c15t-ui-content-qdPhy{grid-column:1/-1}.c15t-ui-trigger-KT5J_:not(.headless){appearance:none;align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));min-width:0;min-height:calc(var(--accordion-icon-size,1.25rem) + .25rem);font-family:inherit;font-size:var(--accordion-title-size,var(--c15t-font-size-sm));line-height:var(--c15t-line-height-tight);letter-spacing:inherit;font-weight:var(--c15t-font-weight-regular);border-radius:var(--accordion-radius,var(--c15t-radius-md));width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;align-self:stretch;padding:0;display:flex;position:relative}.c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color,#a3a3a3);width:var(--accordion-icon-size,1.25rem);height:var(--accordion-icon-size,1.25rem);transition:transform var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.c15t-ui-arrow-JFKgd:not(.headless) svg{width:100%;height:100%;display:block}.c15t-dark .c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color-dark,#ccc)}.c15t-ui-header-ogZie:not(.headless){flex-direction:column;flex:1;min-width:0;display:flex}.c15t-ui-title-vmC1f:not(.headless){font:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0}.c15t-ui-control-dy7nh:not(.headless){flex-shrink:0;align-self:center;position:relative;top:-1px}.c15t-ui-restriction-bXiI7:not(.headless){padding:0 var(--accordion-row-padding-x,1rem) .75rem;color:var(--accordion-restriction-color,var(--c15t-text-muted));font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);grid-column:1/-1;margin:0;display:block}.c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color,#5c5c5c);letter-spacing:inherit;transition:grid-template-rows var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));grid-template-rows:0fr;padding:0;font-size:.875rem;line-height:1.5;display:grid;overflow:hidden}.c15t-ui-content-qdPhy:not(.headless)[data-state=open]{grid-template-rows:1fr}.c15t-ui-content-qdPhy:not(.headless)[data-state=closed]{pointer-events:none}.c15t-ui-contentViewport-O2Kny:not(.headless){min-height:0;padding-top:0;padding-inline-start:calc(var(--accordion-icon-size,1.25rem) + var(--accordion-gap,var(--c15t-space-xs)));padding-inline-end:var(--accordion-padding,var(--c15t-space-sm));overflow:hidden}.c15t-ui-contentInner-b3ykf:not(.headless){opacity:1;transition:opacity calc(var(--accordion-duration,var(--c15t-duration-normal)) * .35) ease-out;padding-top:0}.c15t-ui-content-qdPhy[data-state=open] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:var(--accordion-padding,var(--c15t-space-sm))}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:0}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentInner-b3ykf:not(.headless){opacity:0}.c15t-dark .c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color-dark,#999)}:is([data-disable-animation] .c15t-ui-content-qdPhy:not(.headless),.disable-animation .c15t-ui-content-qdPhy:not(.headless)),:is([data-disable-animation] .c15t-ui-contentInner-b3ykf:not(.headless),.disable-animation .c15t-ui-contentInner-b3ykf:not(.headless)),:is([data-disable-animation] .c15t-ui-arrow-JFKgd:not(.headless),.disable-animation .c15t-ui-arrow-JFKgd:not(.headless)){transition:none}@media (prefers-reduced-motion:reduce){.c15t-ui-arrow-JFKgd:not(.headless),.c15t-ui-content-qdPhy:not(.headless),.c15t-ui-contentInner-b3ykf:not(.headless){transition:none}}
72
+ .c15t-ui-list-T3EU0:not(.headless){gap:var(--accordion-stack-gap,.75rem);display:grid}.c15t-ui-item-Jgm_X:not(.headless){border:1px solid var(--accordion-border-color,var(--c15t-border));border-radius:var(--accordion-radius,var(--c15t-radius-md));box-shadow:none;background-color:var(--accordion-background-color,var(--c15t-surface));padding:0;display:grid;overflow:visible}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless){border-color:var(--accordion-border-color-dark,var(--c15t-border));background-color:var(--accordion-background-color-dark,var(--c15t-surface))}.c15t-ui-triggerRow-xXdTH:not(.headless){align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));box-sizing:border-box;width:100%;padding:var(--accordion-padding,var(--c15t-space-sm));border-radius:var(--accordion-radius,var(--c15t-radius-md));color:var(--accordion-text-color,var(--c15t-text));transition:background-color var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));background-color:#0000;border:0;grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto;margin:0;display:grid}.c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover,var(--c15t-surface-hover))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless){color:var(--accordion-text-color-dark,var(--c15t-text))}.c15t-dark .c15t-ui-triggerRow-xXdTH:not(.headless):hover{background-color:var(--accordion-background-hover-dark,var(--c15t-surface-hover))}.c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline:2px solid var(--accordion-focus-ring,#476cff);outline-offset:-2px}.c15t-dark .c15t-ui-item-Jgm_X:not(.headless):has(.c15t-ui-trigger-KT5J_:focus-visible){outline-color:var(--accordion-focus-ring-dark,#2547d0)}.c15t-ui-trigger-KT5J_:not(.headless):focus-visible{outline:none}.c15t-ui-item-Jgm_X:not(.headless)>.c15t-ui-content-qdPhy{grid-column:1/-1}.c15t-ui-trigger-KT5J_:not(.headless){appearance:none;align-items:center;gap:var(--accordion-gap,var(--c15t-space-xs));min-width:0;min-height:calc(var(--accordion-icon-size,1.25rem) + .25rem);font-family:inherit;font-size:var(--accordion-title-size,var(--c15t-font-size-sm));line-height:var(--c15t-line-height-tight);letter-spacing:inherit;font-weight:var(--c15t-font-weight-regular);border-radius:var(--accordion-radius,var(--c15t-radius-md));width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;align-self:stretch;padding:0;display:flex;position:relative}.c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color,#a3a3a3);width:var(--accordion-icon-size,1.25rem);height:var(--accordion-icon-size,1.25rem);transition:transform var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.c15t-ui-arrow-JFKgd:not(.headless) svg{width:100%;height:100%;display:block}.c15t-dark .c15t-ui-arrow-JFKgd:not(.headless){color:var(--accordion-arrow-color-dark,#ccc)}.c15t-ui-header-ogZie:not(.headless){flex-direction:column;flex:1;min-width:0;display:flex}.c15t-ui-title-vmC1f:not(.headless){font:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0}.c15t-ui-control-dy7nh:not(.headless){flex-shrink:0;align-self:center;position:relative;top:-1px}.c15t-ui-restriction-bXiI7:not(.headless){padding:0 var(--accordion-row-padding-x,1rem) .75rem;color:var(--accordion-restriction-color,var(--c15t-text-muted));font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);grid-column:1/-1;margin:0;display:block}.c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color,#5c5c5c);letter-spacing:inherit;transition:grid-template-rows var(--accordion-duration,var(--c15t-duration-normal)) var(--accordion-ease,var(--c15t-easing));grid-template-rows:0fr;padding:0;font-size:.875rem;line-height:1.5;display:grid;overflow:hidden}.c15t-ui-content-qdPhy:not(.headless)[data-state=open]{grid-template-rows:1fr}.c15t-ui-content-qdPhy:not(.headless)[data-state=closed]{pointer-events:none}.c15t-ui-contentViewport-O2Kny:not(.headless){min-height:0;padding-top:0;padding-inline:calc(var(--accordion-icon-size,1.25rem) + var(--accordion-gap,var(--c15t-space-xs)));overflow:hidden}.c15t-ui-contentInner-b3ykf:not(.headless){opacity:1;transition:opacity calc(var(--accordion-duration,var(--c15t-duration-normal)) * .35) ease-out;padding-top:0}.c15t-ui-content-qdPhy[data-state=open] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:var(--accordion-padding,var(--c15t-space-sm))}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentViewport-O2Kny:not(.headless){padding-bottom:0}.c15t-ui-content-qdPhy[data-state=closed] .c15t-ui-contentInner-b3ykf:not(.headless){opacity:0}.c15t-dark .c15t-ui-content-qdPhy:not(.headless){color:var(--accordion-content-color-dark,#999)}:is([data-disable-animation] .c15t-ui-content-qdPhy:not(.headless),.disable-animation .c15t-ui-content-qdPhy:not(.headless)),:is([data-disable-animation] .c15t-ui-contentInner-b3ykf:not(.headless),.disable-animation .c15t-ui-contentInner-b3ykf:not(.headless)),:is([data-disable-animation] .c15t-ui-arrow-JFKgd:not(.headless),.disable-animation .c15t-ui-arrow-JFKgd:not(.headless)){transition:none}@media (prefers-reduced-motion:reduce){.c15t-ui-arrow-JFKgd:not(.headless),.c15t-ui-content-qdPhy:not(.headless),.c15t-ui-contentInner-b3ykf:not(.headless){transition:none}}
73
73
 
74
74
  /* components/branding */
75
75
  .c15t-ui-branding-yf52E:not(.headless){justify-content:center;align-items:center;gap:var(--consent-dialog-branding-gap);font-size:var(--consent-dialog-branding-font-size);font-weight:var(--consent-dialog-branding-font-weight);line-height:var(--consent-dialog-branding-line-height);letter-spacing:var(--consent-dialog-branding-letter-spacing);color:var(--consent-dialog-foreground-color);border-radius:.25rem;margin:auto 0;padding:0 .5rem;text-decoration:none;display:flex}.c15t-ui-brandingCopy-ktA4u:not(.headless){white-space:nowrap;align-items:baseline;gap:.25rem;min-width:0;display:inline-flex}.c15t-ui-brandingText-ls0cn:not(.headless){font-weight:var(--c15t-font-weight-medium)}.c15t-ui-brandingBy-CWN3T:not(.headless){font-weight:var(--c15t-font-weight-normal)}.c15t-ui-brandingWordmarkLabel-FxCKX:not(.headless){white-space:nowrap;letter-spacing:-.03em}.c15t-ui-branding-yf52E:not(.headless):focus-visible{box-shadow:0 0 0 2px var(--consent-dialog-branding-focus-color);outline:none}.c15t-dark .c15t-ui-branding-yf52E:not(.headless):focus-visible{box-shadow:0 0 0 2px var(--consent-dialog-branding-focus-color-dark)}.c15t-dark .c15t-ui-branding-yf52E:not(.headless){color:var(--consent-dialog-foreground-color-dark)}.c15t-ui-brandingC15T-GVCPl:not(.headless){flex:none;align-items:center;width:auto;max-width:100%;height:auto;display:inline-flex}.c15t-ui-brandingWordmark-yqSW2:not(.headless){white-space:nowrap;flex:none;align-items:center;gap:.25rem;min-width:0;max-width:100%;display:inline-flex}.c15t-ui-brandingC15TMark-VvBd_:not(.headless){width:auto;max-width:100%;height:var(--consent-dialog-branding-icon-height);flex:none;align-items:center;display:inline-flex}.c15t-ui-brandingC15TMark-VvBd_:not(.headless)>svg{aspect-ratio:446/445;flex:none;width:auto;max-width:100%;height:100%;display:block}.c15t-ui-brandingInth-bviD3:not(.headless){max-width:100%;width:var(--consent-dialog-branding-icon-width);height:var(--consent-dialog-branding-icon-height);flex:none;align-items:center;display:inline-flex}.c15t-ui-brandingInth-bviD3:not(.headless)>svg{aspect-ratio:88/90;flex:none;width:auto;max-width:100%;height:100%;display:block}.c15t-ui-brandingTag-V3N0M:not(.headless){border:1px solid color-mix(in srgb, var(--c15t-primary), black 14%);max-width:calc(100% - 1.5rem);min-height:1.75rem;color:var(--c15t-text-on-primary,#fff);background-color:var(--c15t-primary);z-index:2;border-radius:.75rem .75rem .1875rem .1875rem;align-items:center;gap:.375rem;padding:.28125rem .625rem;text-decoration:none;display:inline-flex;position:absolute;box-shadow:inset 0 1px #ffffff29,0 1px 2px #0f172a1f}.c15t-ui-brandingContent-Z9PVI:not(.headless){align-items:center;gap:.375rem;min-width:0;display:inline-flex}.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingCopy-ktA4u{font-size:var(--consent-dialog-branding-label-size);letter-spacing:.01em;color:var(--c15t-text-on-primary,#fff);text-decoration:none}.c15t-ui-brandingTag-V3N0M .c15t-ui-brandingText-ls0cn,.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingBy-CWN3T{line-height:1}.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingWordmarkLabel-FxCKX{font-size:var(--consent-dialog-branding-label-size);line-height:1}.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingWordmark-yqSW2{color:var(--c15t-text-on-primary,#fff);gap:.3125rem;text-decoration:none}.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingC15TMark-VvBd_,.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingInth-bviD3{height:.9375rem;color:var(--c15t-text-on-primary,#fff)}:is(.c15t-ui-brandingTag-V3N0M[data-context=banner]:not(.headless),.c15t-ui-brandingTag-V3N0M[data-context=iab-banner]:not(.headless)){border-bottom-width:0;border-radius:.75rem .75rem 0 0;align-self:flex-end;margin-block-end:-1px;margin-inline-end:.75rem;position:relative;top:auto;right:auto;transform:none}:is(.c15t-ui-brandingTag-V3N0M[data-context=dialog]:not(.headless),.c15t-ui-brandingTag-V3N0M[data-context=iab-dialog]:not(.headless)){right:var(--consent-dialog-card-padding-mobile);border-top-width:0;border-radius:0 0 .75rem .75rem;bottom:0;transform:translateY(calc(100% + 1px))}.c15t-ui-brandingTag-V3N0M[data-context=manager]:not(.headless){max-width:none;min-height:auto;color:var(--consent-manager-link-text-color);box-shadow:none;z-index:auto;text-align:center;background-color:#0000;border:none;border-radius:0;flex-direction:row;flex:1;justify-content:center;align-items:center;gap:.5rem;padding:0;text-decoration:none;display:flex;position:static}.c15t-dark .c15t-ui-brandingTag-V3N0M[data-context=manager]:not(.headless){color:var(--consent-manager-link-text-color-dark)}.c15t-ui-brandingTag-V3N0M[data-context=manager]:not(.headless) svg{height:1.2rem}@media (width>=640px){:is(.c15t-ui-brandingTag-V3N0M[data-context=dialog]:not(.headless),.c15t-ui-brandingTag-V3N0M[data-context=iab-dialog]:not(.headless)){right:var(--consent-dialog-card-padding)}}.c15t-ui-brandingTagBanner-zFtcX:not(.headless){border-bottom-width:0;border-radius:.75rem .75rem 0 0;align-self:flex-end;margin-block-end:-1px;margin-inline-end:.75rem;position:relative;top:auto;right:auto;transform:none}.c15t-ui-brandingTagDialog-Iv_a_:not(.headless){right:var(--consent-dialog-card-padding-mobile);border-top-width:0;border-radius:0 0 .75rem .75rem;bottom:0;transform:translateY(calc(100% + 1px))}@media (width>=640px){.c15t-ui-brandingTagDialog-Iv_a_:not(.headless){right:var(--consent-dialog-card-padding)}}@media (width<=480px){.c15t-ui-brandingTag-V3N0M:not(.headless){gap:.375rem;max-width:calc(100% - 1rem);padding:.3125rem .625rem}.c15t-ui-brandingTag-V3N0M .c15t-ui-brandingCopy-ktA4u,.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingWordmarkLabel-FxCKX{font-size:.625rem}.c15t-ui-brandingTag-V3N0M .c15t-ui-brandingC15TMark-VvBd_,.c15t-ui-brandingTag-V3N0M:not(.headless) .c15t-ui-brandingInth-bviD3{height:.8125rem}}.c15t-ui-brandingFooter-QIudR.c15t-ui-brandingFooter-QIudR:not(.headless){border-top:0;height:0;min-height:0;padding:0;position:relative;overflow:visible}.c15t-ui-brandingFooter-QIudR.c15t-ui-brandingFooter-QIudR:not(.headless):empty{display:none}
@@ -93,7 +93,7 @@
93
93
  .c15t-ui-manager-VznZW:not(.headless){width:100%;font-family:var(--consent-manager-font-family);line-height:var(--consent-manager-line-height);-webkit-font-smoothing:antialiased;position:relative}.c15t-ui-manager-VznZW:not(.headless)>:not([hidden])~:not([hidden]){--space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--space-y-reverse)));margin-bottom:calc(1.5rem * var(--space-y-reverse))}.c15t-ui-footer-fl3dz:not(.headless){padding:var(--consent-manager-footer-padding);background-color:var(--consent-manager-footer-background-color);justify-content:space-between;gap:1rem;display:flex}.c15t-dark .c15t-ui-footer-fl3dz:not(.headless){background-color:var(--consent-manager-footer-background-color-dark)}@media (width<=640px){.c15t-ui-footer-fl3dz:not(.headless){flex-direction:column}}@media (width>=640px){.c15t-ui-footer-fl3dz:not(.headless){flex-direction:row}}
94
94
 
95
95
  /* components/panel */
96
- .c15t-ui-root-I07nx:not(.headless){pointer-events:none;box-sizing:border-box;isolation:isolate;font-family:var(--consent-dialog-font-family);color:var(--c15t-text);line-height:var(--consent-dialog-line-height);-webkit-text-size-adjust:100%;tab-size:4;padding:var(--consent-dialog-card-padding-mobile);z-index:var(--consent-dialog-z-index);border-radius:var(--consent-dialog-card-radius);width:100%;height:var(--consent-dialog-height);background:0 0;border:0;justify-content:center;align-items:center;margin:0;display:flex;position:fixed;inset:0}.c15t-ui-root-I07nx:not(.headless)[data-blocking=true]{pointer-events:auto}.c15t-ui-root-I07nx:not(.headless)[dir=rtl]{direction:rtl}.c15t-ui-root-I07nx:not(.headless):focus{outline:none}@keyframes c15t-ui-consent-dialog-fade-in-I04Yp{0%{opacity:0}to{opacity:1}}@keyframes c15t-ui-consent-dialog-fade-out-t5_x2{0%{opacity:1}to{opacity:0}}.c15t-ui-overlay-c1WEk:not(.headless)[data-state=open]{animation:c15t-ui-consent-dialog-fade-in-I04Yp var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed]{animation:c15t-ui-consent-dialog-fade-out-t5_x2 var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx:not(.headless)[data-state=open]{animation:c15t-ui-consent-dialog-fade-in-I04Yp var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx:not(.headless)[data-state=closed]{animation:c15t-ui-consent-dialog-fade-out-t5_x2 var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-enter-vWVet var(--consent-dialog-animation-duration) cubic-bezier(.34, 1.56, .64, 1)}.c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-exit-ioDiW var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx:not(.headless)[data-mode=dialog]{justify-content:center;align-items:center}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left],.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right]){justify-content:flex-start;align-items:stretch;padding:0}.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right]{justify-content:flex-end}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right] .c15t-ui-container-KTZOT:not(.headless)){z-index:var(--consent-dialog-z-index);width:min(100%, var(--consent-dialog-max-width));height:100%;max-height:100%;position:relative}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left] .c15t-ui-card-ve6qQ:not(.headless),.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right] .c15t-ui-card-ve6qQ:not(.headless)){border-radius:0;width:100%;height:100%;max-height:100%;margin:0}@keyframes c15t-ui-consent-dialog-slide-in-left-N9bgJ{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes c15t-ui-consent-dialog-slide-out-left-hkcUP{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes c15t-ui-consent-dialog-slide-in-right-L40wh{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes c15t-ui-consent-dialog-slide-out-right-GjtEq{0%{transform:translate(0)}to{transform:translate(100%)}}.c15t-ui-root-I07nx[data-mode=sidebar-left][data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-in-left-N9bgJ var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx[data-mode=sidebar-left][data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-out-left-hkcUP var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx[data-mode=sidebar-right][data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-in-right-L40wh var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx[data-mode=sidebar-right][data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-out-right-GjtEq var(--consent-dialog-animation-duration) ease-in}.c15t-ui-dialogVisible-dkX4M:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-dialogHidden-uBU9W:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-contentVisible-KxAWb:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing), transform var(--consent-dialog-animation-duration) cubic-bezier(.34, 1.56, .64, 1);transform:scale(1)}.c15t-ui-contentHidden-LflgF:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing), transform var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing);transform:scale(.95)}@media (width>=640px){.c15t-ui-root-I07nx:not(.headless){padding:var(--consent-dialog-card-padding);width:auto}}.c15t-ui-container-KTZOT:not(.headless){pointer-events:auto;flex-direction:column;width:100%;max-height:100%;display:flex}.c15t-ui-container-KTZOT:not(.headless):focus-visible{outline:none}.c15t-ui-container-KTZOT:not(.headless):focus-visible>.c15t-ui-card-ve6qQ:not(.headless){outline:2px solid var(--c15t-primary);outline-offset:2px}.c15t-ui-headerWrapper-DQg3z:not(.headless){position:relative}.c15t-ui-closeButton-uPYIe:not(.headless){position:absolute;top:22px;right:22px}.c15t-ui-footer-PeM4f:not(.headless){border-top:solid 1px var(--consent-dialog-stroke-color);justify-content:center;padding-top:1rem;padding-bottom:1rem;font-size:14px}.c15t-ui-overlay-c1WEk:not(.headless){color:var(--consent-dialog-link-text-color);background-color:var(--consent-dialog-overlay-background-color);z-index:var(--consent-dialog-overlay-z-index);position:fixed;inset:0}.c15t-ui-overlayVisible-gG3jJ:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-overlayHidden-eY362:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-dark .c15t-ui-overlay-c1WEk:not(.headless){background-color:var(--consent-dialog-overlay-background-color-dark);color:var(--consent-dialog-link-text-color-dark)}.c15t-ui-card-ve6qQ:not(.headless){box-sizing:border-box;width:min(100%, var(--consent-dialog-max-width));border-radius:var(--consent-dialog-card-radius);border:var(--consent-dialog-border-width) var(--consent-dialog-border-style) var(--consent-dialog-border-color);background-color:var(--consent-dialog-background-color);max-height:100%;color:var(--consent-dialog-foreground-color);box-shadow:var(--consent-dialog-card-shadow);flex-direction:column;margin:0 auto;display:flex;position:relative;overflow:visible}.c15t-dark .c15t-ui-card-ve6qQ:not(.headless){background-color:var(--consent-dialog-background-color-dark);color:var(--consent-dialog-foreground-color-dark);border-color:var(--consent-dialog-border-color-dark)}.c15t-ui-header-VbAnL:not(.headless){padding:var(--consent-dialog-card-padding);gap:var(--consent-dialog-header-gap);flex-direction:column;flex-shrink:0;display:flex}.c15t-ui-header-VbAnL:not(.headless)>*+*{margin-top:var(--consent-dialog-card-gap)}.c15t-ui-title-ErzRZ:not(.headless){font-weight:var(--consent-dialog-title-font-weight);font-size:var(--consent-dialog-title-font-size);letter-spacing:var(--consent-dialog-title-letter-spacing);margin:0;line-height:1}.c15t-ui-description-OQyBx:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-OQyBx:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-description-OQyBx[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-OQyBx[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-content-Y_5Ie:not(.headless){padding:var(--consent-dialog-card-padding);gap:var(--consent-dialog-content-gap);flex:auto;min-height:0;padding-top:0;overflow-y:auto}.c15t-ui-footer-PeM4f:not(.headless){justify-content:center;align-items:center;gap:var(--consent-dialog-footer-gap);font-size:var(--consent-dialog-footer-font-size);padding-top:var(--consent-dialog-footer-padding-y);padding-bottom:var(--consent-dialog-footer-padding-y);border-top:var(--consent-dialog-border-width) var(--consent-dialog-border-style) var(--consent-dialog-stroke-color);flex-direction:column;flex-shrink:0;display:flex}.c15t-ui-footer-PeM4f:not(.headless):empty{border-top:none;display:none}.c15t-dark .c15t-ui-footer-PeM4f:not(.headless){border-color:var(--consent-dialog-stroke-color-dark)}@media (prefers-reduced-motion:reduce){.c15t-ui-dialogVisible-dkX4M,.c15t-ui-dialogHidden-uBU9W,.c15t-ui-contentVisible-KxAWb,.c15t-ui-contentHidden-LflgF,.c15t-ui-overlayVisible-gG3jJ,.c15t-ui-overlayHidden-eY362:not(.headless),.c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],.c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],.c15t-ui-root-I07nx:not(.headless)[data-state=open],.c15t-ui-root-I07nx:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){transition:none;animation:none}}.c15t-ui-overlay-c1WEk[data-disable-animation]:not(.headless)[data-state=open],.c15t-ui-overlay-c1WEk[data-disable-animation]:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-disable-animation]:not(.headless)[data-state=open],.c15t-ui-root-I07nx[data-disable-animation]:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-disable-animation][data-state=open] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx[data-disable-animation][data-state=closed] .c15t-ui-container-KTZOT:not(.headless),.disable-animation .c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],.disable-animation .c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],.disable-animation .c15t-ui-root-I07nx:not(.headless)[data-state=open],.disable-animation .c15t-ui-root-I07nx:not(.headless)[data-state=closed],.disable-animation .c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),.disable-animation .c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless),[data-disable-animation] .c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],[data-disable-animation] .c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],[data-disable-animation] .c15t-ui-root-I07nx:not(.headless)[data-state=open],[data-disable-animation] .c15t-ui-root-I07nx:not(.headless)[data-state=closed],[data-disable-animation] .c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),[data-disable-animation] .c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:none}
96
+ .c15t-ui-root-I07nx:not(.headless){pointer-events:none;box-sizing:border-box;isolation:isolate;font-family:var(--consent-dialog-font-family);color:var(--c15t-text);line-height:var(--consent-dialog-line-height);-webkit-text-size-adjust:100%;tab-size:4;padding:var(--consent-dialog-card-padding-mobile);z-index:var(--consent-dialog-z-index);border-radius:var(--consent-dialog-card-radius);width:100%;height:var(--consent-dialog-height);background:0 0;border:0;justify-content:center;align-items:center;margin:0;display:flex;position:fixed;inset:0}.c15t-ui-root-I07nx:not(.headless)[data-blocking=true]{pointer-events:auto}.c15t-ui-root-I07nx:not(.headless)[dir=rtl]{direction:rtl}.c15t-ui-root-I07nx:not(.headless):focus{outline:none}@keyframes c15t-ui-consent-dialog-fade-in-I04Yp{0%{opacity:0}to{opacity:1}}@keyframes c15t-ui-consent-dialog-fade-out-t5_x2{0%{opacity:1}to{opacity:0}}.c15t-ui-overlay-c1WEk:not(.headless)[data-state=open]{animation:c15t-ui-consent-dialog-fade-in-I04Yp var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed]{animation:c15t-ui-consent-dialog-fade-out-t5_x2 var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx:not(.headless)[data-state=open]{animation:c15t-ui-consent-dialog-fade-in-I04Yp var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx:not(.headless)[data-state=closed]{animation:c15t-ui-consent-dialog-fade-out-t5_x2 var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-enter-vWVet var(--consent-dialog-animation-duration) cubic-bezier(.34, 1.56, .64, 1)}.c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-exit-ioDiW var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx:not(.headless)[data-mode=dialog]{justify-content:center;align-items:center}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left],.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right]){justify-content:flex-start;align-items:stretch;padding:0}.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right]{justify-content:flex-end}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right] .c15t-ui-container-KTZOT:not(.headless)){z-index:var(--consent-dialog-z-index);width:min(100%, var(--consent-dialog-max-width));height:100%;max-height:100%;position:relative}:is(.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-left] .c15t-ui-card-ve6qQ:not(.headless),.c15t-ui-root-I07nx:not(.headless)[data-mode=sidebar-right] .c15t-ui-card-ve6qQ:not(.headless)){border-radius:0;width:100%;height:100%;max-height:100%;margin:0}@keyframes c15t-ui-consent-dialog-slide-in-left-N9bgJ{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes c15t-ui-consent-dialog-slide-out-left-hkcUP{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes c15t-ui-consent-dialog-slide-in-right-L40wh{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes c15t-ui-consent-dialog-slide-out-right-GjtEq{0%{transform:translate(0)}to{transform:translate(100%)}}.c15t-ui-root-I07nx[data-mode=sidebar-left][data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-in-left-N9bgJ var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx[data-mode=sidebar-left][data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-out-left-hkcUP var(--consent-dialog-animation-duration) ease-in}.c15t-ui-root-I07nx[data-mode=sidebar-right][data-state=open] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-in-right-L40wh var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-root-I07nx[data-mode=sidebar-right][data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:c15t-ui-consent-dialog-slide-out-right-GjtEq var(--consent-dialog-animation-duration) ease-in}.c15t-ui-dialogVisible-dkX4M:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-dialogHidden-uBU9W:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-contentVisible-KxAWb:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing), transform var(--consent-dialog-animation-duration) cubic-bezier(.34, 1.56, .64, 1);transform:scale(1)}.c15t-ui-contentHidden-LflgF:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing), transform var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing);transform:scale(.95)}@media (width>=640px){.c15t-ui-root-I07nx:not(.headless){padding:var(--consent-dialog-card-padding);width:auto}}.c15t-ui-container-KTZOT:not(.headless){pointer-events:auto;flex-direction:column;width:100%;max-height:100%;display:flex}.c15t-ui-container-KTZOT:not(.headless):focus-visible{outline:none}.c15t-ui-container-KTZOT:not(.headless):focus-visible>.c15t-ui-card-ve6qQ:not(.headless){outline:2px solid var(--c15t-primary);outline-offset:2px}.c15t-ui-headerWrapper-DQg3z:not(.headless){position:relative}.c15t-ui-closeButton-uPYIe:not(.headless){position:absolute;top:22px;right:22px}.c15t-ui-footer-PeM4f:not(.headless){border-top:solid 1px var(--consent-dialog-stroke-color);justify-content:center;padding-top:1rem;padding-bottom:1rem;font-size:14px}.c15t-ui-overlay-c1WEk:not(.headless){color:var(--consent-dialog-link-text-color);background-color:var(--consent-dialog-overlay-background-color);z-index:var(--consent-dialog-overlay-z-index);position:fixed;inset:0}.c15t-ui-overlayVisible-gG3jJ:not(.headless){opacity:1;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-ui-overlayHidden-eY362:not(.headless){opacity:0;transition:opacity var(--consent-dialog-animation-duration) var(--consent-dialog-animation-timing)}.c15t-dark .c15t-ui-overlay-c1WEk:not(.headless){background-color:var(--consent-dialog-overlay-background-color-dark);color:var(--consent-dialog-link-text-color-dark)}.c15t-ui-card-ve6qQ:not(.headless){box-sizing:border-box;width:min(100%, var(--consent-dialog-max-width));max-height:var(--consent-dialog-max-height);border-radius:var(--consent-dialog-card-radius);border:var(--consent-dialog-border-width) var(--consent-dialog-border-style) var(--consent-dialog-border-color);background-color:var(--consent-dialog-background-color);color:var(--consent-dialog-foreground-color);box-shadow:var(--consent-dialog-card-shadow);flex-direction:column;margin:0 auto;display:flex;position:relative;overflow:visible}.c15t-dark .c15t-ui-card-ve6qQ:not(.headless){background-color:var(--consent-dialog-background-color-dark);color:var(--consent-dialog-foreground-color-dark);border-color:var(--consent-dialog-border-color-dark)}.c15t-ui-header-VbAnL:not(.headless){padding:var(--consent-dialog-card-padding);gap:var(--consent-dialog-header-gap);flex-direction:column;flex-shrink:0;display:flex}.c15t-ui-header-VbAnL:not(.headless)>*+*{margin-top:var(--consent-dialog-card-gap)}.c15t-ui-title-ErzRZ:not(.headless){font-weight:var(--consent-dialog-title-font-weight);font-size:var(--consent-dialog-title-font-size);letter-spacing:var(--consent-dialog-title-letter-spacing);margin:0;line-height:1}.c15t-ui-description-OQyBx:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-OQyBx:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-description-OQyBx[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color);font-size:var(--consent-dialog-description-font-size);font-weight:var(--consent-dialog-description-font-weight);line-height:var(--consent-dialog-description-line-height)}.c15t-dark .c15t-ui-description-OQyBx[data-context=dialog]:not(.headless){color:var(--consent-dialog-muted-color-dark)}.c15t-ui-content-Y_5Ie:not(.headless){padding:var(--consent-dialog-card-padding);gap:var(--consent-dialog-content-gap);flex-direction:column;flex:auto;min-height:0;padding-top:0;display:flex;overflow-y:auto}.c15t-ui-content-Y_5Ie:not(.headless):has(>[data-testid=consent-widget-root]>[data-testid=consent-widget-accordion]){overflow-y:visible}.c15t-ui-content-Y_5Ie:not(.headless)>*{flex-shrink:0}.c15t-ui-content-Y_5Ie:not(.headless)>[data-testid=consent-widget-root]:not(.headless){flex-direction:column;flex:auto;min-height:0;display:flex}.c15t-ui-content-Y_5Ie:not(.headless)>[data-testid=consent-widget-root]:not(.headless)>[data-testid=consent-widget-accordion]{flex:auto;min-height:0;margin:-2px;padding:2px;overflow-y:auto}.c15t-ui-content-Y_5Ie:not(.headless)>[data-testid=consent-widget-root]:not(.headless)>[data-testid=consent-widget-footer]{flex-shrink:0}.c15t-ui-footer-PeM4f:not(.headless){justify-content:center;align-items:center;gap:var(--consent-dialog-footer-gap);font-size:var(--consent-dialog-footer-font-size);padding-top:var(--consent-dialog-footer-padding-y);padding-bottom:var(--consent-dialog-footer-padding-y);border-top:var(--consent-dialog-border-width) var(--consent-dialog-border-style) var(--consent-dialog-stroke-color);flex-direction:column;flex-shrink:0;display:flex}.c15t-ui-footer-PeM4f:not(.headless):empty{border-top:none;display:none}.c15t-dark .c15t-ui-footer-PeM4f:not(.headless){border-color:var(--consent-dialog-stroke-color-dark)}@media (prefers-reduced-motion:reduce){.c15t-ui-dialogVisible-dkX4M,.c15t-ui-dialogHidden-uBU9W,.c15t-ui-contentVisible-KxAWb,.c15t-ui-contentHidden-LflgF,.c15t-ui-overlayVisible-gG3jJ,.c15t-ui-overlayHidden-eY362:not(.headless),.c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],.c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],.c15t-ui-root-I07nx:not(.headless)[data-state=open],.c15t-ui-root-I07nx:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){transition:none;animation:none}}.c15t-ui-overlay-c1WEk[data-disable-animation]:not(.headless)[data-state=open],.c15t-ui-overlay-c1WEk[data-disable-animation]:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-disable-animation]:not(.headless)[data-state=open],.c15t-ui-root-I07nx[data-disable-animation]:not(.headless)[data-state=closed],.c15t-ui-root-I07nx[data-disable-animation][data-state=open] .c15t-ui-container-KTZOT:not(.headless),.c15t-ui-root-I07nx[data-disable-animation][data-state=closed] .c15t-ui-container-KTZOT:not(.headless),.disable-animation .c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],.disable-animation .c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],.disable-animation .c15t-ui-root-I07nx:not(.headless)[data-state=open],.disable-animation .c15t-ui-root-I07nx:not(.headless)[data-state=closed],.disable-animation .c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),.disable-animation .c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless),[data-disable-animation] .c15t-ui-overlay-c1WEk:not(.headless)[data-state=open],[data-disable-animation] .c15t-ui-overlay-c1WEk:not(.headless)[data-state=closed],[data-disable-animation] .c15t-ui-root-I07nx:not(.headless)[data-state=open],[data-disable-animation] .c15t-ui-root-I07nx:not(.headless)[data-state=closed],[data-disable-animation] .c15t-ui-root-I07nx[data-state=open] .c15t-ui-container-KTZOT:not(.headless),[data-disable-animation] .c15t-ui-root-I07nx[data-state=closed] .c15t-ui-container-KTZOT:not(.headless){animation:none}
97
97
 
98
98
  /* components/panel-trigger */
99
99
  .c15t-ui-trigger-Hjg5y{--cdt-size-sm:32px;--cdt-size-md:40px;--cdt-size-lg:48px;--cdt-bg:var(--c15t-surface,#fff);--cdt-bg-hover:var(--c15t-surface-hover,var(--cdt-bg));--cdt-border:var(--c15t-border,#e5e5e5);--cdt-shadow:var(--c15t-shadow-lg,0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a);--cdt-shadow-hover:var(--c15t-shadow-xl,0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a);--cdt-radius:var(--c15t-radius-full,9999px);--cdt-offset:var(--c15t-space-md,20px);--cdt-transition-duration:var(--c15t-motion-duration,.2s);--cdt-transition-easing:var(--c15t-motion-easing,ease-out);--cdt-snap-duration:var(--c15t-motion-duration-slow,.2s);--cdt-snap-easing:var(--c15t-motion-easing-smooth,cubic-bezier(.77, 0, .175, 1));--cdt-icon-color:var(--c15t-text,#171717);--cdt-focus-ring:var(--c15t-primary,#3b82f6);z-index:9999;width:var(--cdt-size-md);height:var(--cdt-size-md);border:1px solid var(--cdt-border);border-radius:var(--cdt-radius);background:var(--cdt-bg);box-shadow:var(--cdt-shadow);cursor:grab;transition:transform var(--cdt-transition-duration) var(--cdt-transition-easing), box-shadow var(--cdt-transition-duration) var(--cdt-transition-easing), background var(--cdt-transition-duration) var(--cdt-transition-easing);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;will-change:transform;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:fixed}@media (hover:hover) and (pointer:fine){.c15t-ui-trigger-Hjg5y:hover{background:var(--cdt-bg-hover);box-shadow:var(--cdt-shadow-hover)}}.c15t-ui-trigger-Hjg5y:active,.c15t-ui-trigger-Hjg5y.c15t-ui-dragging-R4Cm2,.c15t-ui-trigger-Hjg5y[data-dragging]{cursor:grabbing;transform:scale(1.02)}.c15t-ui-trigger-Hjg5y:focus{outline:none}.c15t-ui-trigger-Hjg5y:focus-visible{outline:2px solid var(--cdt-focus-ring);outline-offset:2px}.c15t-ui-trigger-Hjg5y[data-size=sm],.c15t-ui-sm-sud0y{width:var(--cdt-size-sm);height:var(--cdt-size-sm)}.c15t-ui-trigger-Hjg5y[data-size=md],.c15t-ui-md-CZrWA{width:var(--cdt-size-md);height:var(--cdt-size-md)}.c15t-ui-trigger-Hjg5y[data-size=lg],.c15t-ui-lg-fGzix{width:var(--cdt-size-lg);height:var(--cdt-size-lg)}.c15t-ui-icon-dD5R6{width:50%;height:50%;color:var(--cdt-icon-color);pointer-events:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.c15t-ui-icon-dD5R6 svg{width:100%;height:100%}.c15t-ui-text-Garil{margin-left:var(--c15t-space-xs,6px);font-family:var(--c15t-font-family,system-ui, sans-serif);font-size:var(--c15t-font-size-sm,14px);font-weight:var(--c15t-font-weight-medium,500);color:var(--cdt-icon-color);white-space:nowrap;pointer-events:none;line-height:1}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil){width:auto;height:auto;padding:var(--c15t-space-sm,8px) var(--c15t-space-md,16px);border-radius:var(--c15t-radius-lg,12px);gap:var(--c15t-space-xs,6px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil) .c15t-ui-icon-dD5R6{width:16px;height:16px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm],.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y{padding:var(--c15t-space-xs,6px) var(--c15t-space-sm,10px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm] .c15t-ui-icon-dD5R6,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y .c15t-ui-icon-dD5R6{width:14px;height:14px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=sm] .c15t-ui-text-Garil,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-sm-sud0y .c15t-ui-text-Garil{font-size:var(--c15t-font-size-xs,12px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg],.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix{padding:var(--c15t-space-md,12px) var(--c15t-space-lg,20px)}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg] .c15t-ui-icon-dD5R6,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix .c15t-ui-icon-dD5R6{width:20px;height:20px}.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil)[data-size=lg] .c15t-ui-text-Garil,.c15t-ui-trigger-Hjg5y:has(.c15t-ui-text-Garil).c15t-ui-lg-fGzix .c15t-ui-text-Garil{font-size:var(--c15t-font-size-md,16px)}.c15t-ui-bottomRight-RqjMF{right:var(--cdt-offset);bottom:var(--cdt-offset)}.c15t-ui-bottomLeft-J3DsX{bottom:var(--cdt-offset);left:var(--cdt-offset)}.c15t-ui-topRight-Ln04J{top:var(--cdt-offset);right:var(--cdt-offset)}.c15t-ui-topLeft-tpeaf{top:var(--cdt-offset);left:var(--cdt-offset)}.c15t-ui-snapping-YupfG{transition:top var(--cdt-snap-duration) var(--cdt-snap-easing), right var(--cdt-snap-duration) var(--cdt-snap-easing), bottom var(--cdt-snap-duration) var(--cdt-snap-easing), left var(--cdt-snap-duration) var(--cdt-snap-easing), transform var(--cdt-snap-duration) var(--cdt-snap-easing)}.c15t-ui-hidden-tV2GK{display:none}.c15t-dark .c15t-ui-trigger-Hjg5y{--cdt-bg:var(--c15t-surface,#262626);--cdt-bg-hover:var(--c15t-surface-hover,#404040);--cdt-border:var(--c15t-border,#404040);--cdt-icon-color:var(--c15t-text,#fafafa);--cdt-shadow:0 10px 15px -3px #0000004d, 0 4px 6px -4px #0000004d;--cdt-shadow-hover:0 20px 25px -5px #0006, 0 8px 10px -6px #0006}.c15t-ui-toolbar-gCKkL{--cdtt-size-sm:32px;--cdtt-size-md:40px;--cdtt-size-lg:48px;--cdtt-bg:var(--c15t-surface,#fff);--cdtt-bg-hover:var(--c15t-surface-hover,#f5f5f5);--cdtt-border:var(--c15t-border,#d4d4d4);--cdtt-primary:var(--c15t-primary,#16a779);--cdtt-primary-hover:var(--c15t-primary-hover,#128866);--cdtt-primary-text:var(--c15t-text-on-primary,#fff);--cdtt-icon-color:var(--c15t-text,#262626);--cdtt-focus-ring:var(--c15t-primary,#16a779);--cdtt-offset:var(--c15t-space-md,20px);--cdtt-transition-duration:var(--c15t-duration-fast,.16s);--cdtt-transition-easing:var(--c15t-easing-out,ease-out);--cdtt-shadow:var(--c15t-shadow-md,0 4px 10px #00000014, 0 1px 2px #0000000f);z-index:9999;width:max-content;color:var(--cdtt-icon-color);background:var(--cdtt-bg);border:1px solid var(--cdtt-border);border-radius:var(--c15t-radius-md,6px);box-shadow:var(--cdtt-shadow);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;will-change:transform;transition:transform var(--cdtt-transition-duration) var(--cdtt-transition-easing), box-shadow var(--cdtt-transition-duration) var(--cdtt-transition-easing), background var(--cdtt-transition-duration) var(--cdtt-transition-easing);align-items:stretch;margin:0;padding:0;display:inline-flex;position:fixed;overflow:hidden}.c15t-ui-toolbar-gCKkL.c15t-ui-bottomRight-RqjMF{right:max(var(--cdtt-offset), env(safe-area-inset-right,0px));bottom:max(var(--cdtt-offset), env(safe-area-inset-bottom,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-bottomLeft-J3DsX{bottom:max(var(--cdtt-offset), env(safe-area-inset-bottom,0px));left:max(var(--cdtt-offset), env(safe-area-inset-left,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-topRight-Ln04J{top:max(var(--cdtt-offset), env(safe-area-inset-top,0px));right:max(var(--cdtt-offset), env(safe-area-inset-right,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-topLeft-tpeaf{top:max(var(--cdtt-offset), env(safe-area-inset-top,0px));left:max(var(--cdtt-offset), env(safe-area-inset-left,0px))}.c15t-ui-toolbar-gCKkL.c15t-ui-dragging-R4Cm2{cursor:grabbing;box-shadow:var(--c15t-shadow-lg,0 10px 20px #00000024, 0 3px 6px #00000014)}.c15t-ui-toolbarVertical-MQ8bT{flex-direction:column}.c15t-ui-toolbarItem-OO8Dy{width:var(--cdtt-size-md);height:var(--cdtt-size-md);color:var(--cdtt-icon-color);border:0;border-inline-start:1px solid var(--cdtt-border);cursor:inherit;transition:color var(--cdtt-transition-duration) var(--cdtt-transition-easing), background var(--cdtt-transition-duration) var(--cdtt-transition-easing);background:0 0;border-radius:0;flex:none;justify-content:center;align-items:center;margin:0;padding:0;display:flex;position:relative}.c15t-ui-toolbarItem-OO8Dy:first-child{border-inline-start:0}.c15t-ui-toolbarVertical-MQ8bT .c15t-ui-toolbarItem-OO8Dy{border-top:1px solid var(--cdtt-border);border-inline-start:0}.c15t-ui-toolbarVertical-MQ8bT .c15t-ui-toolbarItem-OO8Dy:first-child{border-top:0}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-sm-sud0y{width:var(--cdtt-size-sm);height:var(--cdtt-size-sm)}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-md-CZrWA{width:var(--cdtt-size-md);height:var(--cdtt-size-md)}.c15t-ui-toolbar-gCKkL .c15t-ui-toolbarItem-OO8Dy.c15t-ui-lg-fGzix{width:var(--cdtt-size-lg);height:var(--cdtt-size-lg)}.c15t-ui-toolbarItem-OO8Dy[data-c15t-trigger-action=preferences]{color:var(--cdtt-primary-text);background:var(--cdtt-primary)}.c15t-ui-toolbarItem-OO8Dy:focus{outline:none}.c15t-ui-toolbarItem-OO8Dy:focus-visible{z-index:1;outline:2px solid var(--cdtt-focus-ring);outline-offset:-3px}.c15t-ui-toolbarItem-OO8Dy:disabled{cursor:not-allowed;opacity:.45}.c15t-ui-toolbarIcon-FpHKR{pointer-events:none;flex-shrink:0;justify-content:center;align-items:center;width:50%;height:50%;display:flex}.c15t-ui-toolbarIcon-FpHKR>span,.c15t-ui-toolbarIcon-FpHKR svg{width:100%;height:100%;display:flex}@media (hover:hover) and (pointer:fine){.c15t-ui-toolbarItem-OO8Dy:hover:not(:disabled){background:var(--cdtt-bg-hover)}.c15t-ui-toolbarItem-OO8Dy[data-c15t-trigger-action=preferences]:hover:not(:disabled){background:var(--cdtt-primary-hover)}}.c15t-ui-toolbarItem-OO8Dy:active:not(:disabled){box-shadow:inset 0 1px 3px #00000029}:is(.c15t-dark .c15t-ui-toolbar-gCKkL,.dark .c15t-ui-toolbar-gCKkL){--cdtt-bg:var(--c15t-surface,#262626);--cdtt-bg-hover:var(--c15t-surface-hover,#343434);--cdtt-border:var(--c15t-border,#525252);--cdtt-icon-color:var(--c15t-text,#fafafa);--cdtt-shadow:0 8px 18px #00000052, 0 2px 5px #00000038}@media (prefers-reduced-motion:reduce){.c15t-ui-trigger-Hjg5y,.c15t-ui-toolbar-gCKkL,.c15t-ui-toolbarItem-OO8Dy,.c15t-ui-snapping-YupfG{transition:none}}
@@ -109,3 +109,6 @@
109
109
 
110
110
  /* components/tabs */
111
111
  .c15t-ui-root-MkAzH{gap:1rem;width:100%;display:grid}.c15t-ui-list-InhoD{background:var(--tabs-list-background);border:1px solid var(--tabs-list-border);border-radius:var(--c15t-radius-md);grid-auto-flow:column;align-items:center;gap:.25rem;width:fit-content;padding:.25rem;display:inline-grid}.c15t-ui-list-InhoD[data-orientation=vertical]{grid-auto-flow:row}.c15t-ui-trigger-n8yxg{border-radius:calc(var(--c15t-radius-md) - .25rem);color:var(--tabs-trigger-color);cursor:pointer;font:inherit;transition:background-color var(--c15t-duration-fast) ease, color var(--c15t-duration-fast) ease;background:0 0;border:0;padding:.625rem .875rem;font-weight:500}.c15t-ui-trigger-n8yxg[data-state=active]{background:var(--tabs-trigger-active-background);color:var(--tabs-trigger-active-color)}.c15t-ui-trigger-n8yxg:focus-visible{outline:2px solid var(--tabs-focus-ring);outline-offset:2px}.c15t-ui-content-XEh1P{color:var(--c15t-text)}
112
+
113
+ /* components/vendor-list */
114
+ .c15t-ui-root-tC2KG:not(.headless){gap:var(--vendor-list-gap,var(--c15t-space-xs));min-inline-size:0;margin:var(--vendor-list-margin-top,var(--c15t-space-sm)) 0 0;color:var(--vendor-list-text-color,var(--c15t-text));padding:0;display:grid}.c15t-dark .c15t-ui-root-tC2KG:not(.headless){color:var(--vendor-list-text-color-dark,var(--c15t-text))}.c15t-ui-hint-mJePA:not(.headless){font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);color:var(--vendor-list-hint-color,var(--c15t-text-muted));margin:0}.c15t-ui-item-Jb5Ct:not(.headless){box-sizing:border-box;border:1px solid var(--vendor-list-border-color,var(--c15t-border));border-radius:var(--vendor-list-radius,var(--c15t-radius-md));background-color:var(--vendor-list-background-color,var(--c15t-surface));grid-template-columns:minmax(0,1fr);padding:0;display:grid;overflow:visible}.c15t-dark .c15t-ui-item-Jb5Ct:not(.headless){border-color:var(--vendor-list-border-color-dark,var(--c15t-border));background-color:var(--vendor-list-background-color-dark,var(--c15t-surface))}.c15t-ui-item-Jb5Ct:not(.headless):has(.c15t-ui-trigger-HN0JL:focus-visible){outline:2px solid var(--vendor-list-focus-ring,#476cff);outline-offset:-2px}.c15t-dark .c15t-ui-item-Jb5Ct:not(.headless):has(.c15t-ui-trigger-HN0JL:focus-visible){outline-color:var(--vendor-list-focus-ring-dark,#2547d0)}.c15t-ui-header-Vio14:not(.headless){align-items:center;gap:var(--vendor-list-header-gap,var(--c15t-space-xs));box-sizing:border-box;width:100%;padding:var(--vendor-list-padding,var(--c15t-space-sm));border-radius:var(--vendor-list-radius,var(--c15t-radius-md));color:var(--vendor-list-text-color,var(--c15t-text));transition:background-color var(--vendor-list-duration,var(--c15t-duration-normal)) var(--vendor-list-ease,var(--c15t-easing));grid-template-columns:minmax(0,1fr) auto;margin:0;display:grid}.c15t-ui-header-Vio14:not(.headless):hover{background-color:var(--vendor-list-background-hover,var(--c15t-surface-hover))}.c15t-dark .c15t-ui-header-Vio14:not(.headless){color:var(--vendor-list-text-color-dark,var(--c15t-text))}.c15t-dark .c15t-ui-header-Vio14:not(.headless):hover{background-color:var(--vendor-list-background-hover-dark,var(--c15t-surface-hover))}.c15t-ui-trigger-HN0JL:not(.headless){appearance:none;align-items:center;gap:var(--vendor-list-header-gap,var(--c15t-space-xs));min-width:0;min-height:calc(var(--vendor-list-icon-size,1.25rem) + .25rem);color:inherit;font:inherit;font-size:var(--vendor-list-name-size,var(--c15t-font-size-sm));line-height:var(--c15t-line-height-tight);text-align:left;cursor:pointer;background:0 0;border:0;flex:auto;margin:0;padding:0;display:flex}.c15t-ui-trigger-HN0JL:not(.headless):focus-visible{outline:none}.c15t-ui-trigger-HN0JL:not(.headless)[data-disabled]{cursor:default}.c15t-ui-trigger-HN0JL:not(.headless)[data-disabled] .c15t-ui-arrow-HpqoR{visibility:hidden}.c15t-ui-arrow-HpqoR:not(.headless){width:var(--vendor-list-icon-size,1.25rem);height:var(--vendor-list-icon-size,1.25rem);color:var(--vendor-list-arrow-color,#a3a3a3);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.c15t-ui-arrow-HpqoR:not(.headless) svg{width:100%;height:100%;display:block}.c15t-dark .c15t-ui-arrow-HpqoR:not(.headless){color:var(--vendor-list-arrow-color-dark,#ccc)}.c15t-ui-name-Kbv0c:not(.headless){min-width:0;font:inherit;font-weight:var(--c15t-font-weight-regular);color:inherit;margin:0}.c15t-ui-control-P3ju9:not(.headless){flex-shrink:0;align-self:center;position:relative;top:-1px}.c15t-ui-content-H0win:not(.headless){transition:grid-template-rows var(--vendor-list-duration,var(--c15t-duration-normal)) var(--vendor-list-ease,var(--c15t-easing));grid-template-rows:0fr;display:grid;overflow:hidden}.c15t-ui-content-H0win:not(.headless)[data-state=open]{grid-template-rows:1fr}.c15t-ui-content-H0win:not(.headless)[data-state=closed]{pointer-events:none}.c15t-ui-contentInner-yL4RA:not(.headless){padding:0 var(--vendor-list-padding,var(--c15t-space-sm)) var(--vendor-list-padding,var(--c15t-space-sm));gap:.25rem;padding-inline-start:calc(var(--vendor-list-padding,var(--c15t-space-sm)) + var(--vendor-list-icon-size,1.25rem) + var(--vendor-list-header-gap,var(--c15t-space-xs)));display:grid}.c15t-ui-description-TnQZJ:not(.headless){font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);color:var(--vendor-list-description-color,var(--c15t-text-muted));margin:0}.c15t-ui-link-OXzlg:not(.headless){font-size:var(--c15t-font-size-sm);line-height:var(--c15t-line-height-normal);color:var(--vendor-list-link-color,var(--c15t-primary));text-underline-offset:.15em;justify-self:start;text-decoration:underline}.c15t-ui-link-OXzlg:not(.headless):focus-visible{outline:2px solid var(--vendor-list-focus-ring,#476cff);outline-offset:2px;border-radius:var(--c15t-radius-sm)}@media (prefers-reduced-motion:reduce){:is(.c15t-ui-content-H0win:not(.headless),.c15t-ui-header-Vio14:not(.headless)){transition:none}}
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ import{jsx as t}from"react/jsx-runtime";import{Suspense as r,lazy as e,useSyncExternalStore as a}from"react";let n=n=>{let o,l={status:"pending"},u=l,c=new Set,s=()=>u,i=()=>l,d=()=>o??=(async()=>{try{let t=await n();return u={module:t,status:"ready"},t}catch(t){throw u={error:t,status:"error"},t}})(),f=!1,h=()=>{f||(f=!0,queueMicrotask(()=>{for(let t of(f=!1,u={...u},c))t()}))},m=t=>(c.add(t),()=>{c.delete(t)});return{component(n){let o=e(()=>{let t=(async()=>({default:n(await d())}))();return t.then(h,h),t});return function(e){let n=a(m,s,i);if("error"===n.status)throw n.error;return t(r,{fallback:null,children:t(o,{...e})})}},async preload(){try{await d()}catch{}}}};export{n as createDeferredModule};
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- let e="3.0.0-alpha.1";export{e as version};
1
+ let e="3.0.0-alpha.2";export{e as version};
@@ -1,4 +1,4 @@
1
- import type { ConsentDialogCompoundComponent } from './components/panel';
2
- import type { ConsentWidgetCompoundComponent } from './components/preferences';
1
+ import type { ConsentDialogCompoundComponent } from './components/panel/index.js';
2
+ import type { ConsentWidgetCompoundComponent } from './components/preferences/index.js';
3
3
  export declare const ConsentDialog: ConsentDialogCompoundComponent;
4
4
  export declare const ConsentWidget: ConsentWidgetCompoundComponent;
@@ -12,7 +12,7 @@ export declare const useHeadlessIABConsentUI: () => {
12
12
  isReady: boolean;
13
13
  scrollLock: boolean | undefined;
14
14
  };
15
- iab: import("../iab-context").ReactIABState | null;
15
+ iab: import("../iab-context.js").ReactIABState | null;
16
16
  openDialog: (options?: {
17
17
  tab?: 'purposes' | 'vendors';
18
18
  }) => void;
@@ -10,6 +10,7 @@ export declare const useConsentManager: () => {
10
10
  effectivePermissions: Readonly<ConsentState>;
11
11
  explicitChoice: Readonly<import("@c15t/core").ExplicitChoice> | null;
12
12
  getDisplayedConsents: () => ConsentType[];
13
+ getDisplayedVendors: (category: AllConsentNames) => import("@c15t/core").ResolvedVendor[];
13
14
  has: (condition: HasCondition<AllConsentNames>) => boolean;
14
15
  iab: Readonly<import("@c15t/core").KernelIABState> | null;
15
16
  manager: null;
@@ -31,10 +32,14 @@ export declare const useConsentManager: () => {
31
32
  }) => Promise<void>;
32
33
  selectedConsentTypes: Readonly<ConsentState>;
33
34
  selectedConsents: Readonly<ConsentState>;
35
+ selectedVendors: Readonly<Record<string, boolean>>;
34
36
  setActiveUI: (ui: ActiveUI) => void;
35
37
  setSelectedConsent: (name: AllConsentNames, value: boolean) => void;
38
+ setSelectedVendor: (vendorId: string, granted: boolean) => void;
36
39
  subscribeToConsentChanges: (listener: (state: ConsentState) => void) => () => void;
37
40
  translationConfig: TranslationConfig;
38
- updateConsentCategories: (_names: AllConsentNames[]) => void;
41
+ updateConsentCategories: (categories: readonly AllConsentNames[]) => void;
42
+ vendorChoice: Readonly<import("@c15t/core").VendorChoice> | null;
43
+ vendors: readonly import("@c15t/core").ResolvedVendor[];
39
44
  };
40
45
  export {};
@@ -0,0 +1,11 @@
1
+ import type { AllConsentNames } from '@c15t/core';
2
+ import type { BoxProps } from '../shared/primitives/box.js';
3
+ import type { ConsentButtonProps } from '../shared/primitives/button.types.js';
4
+ declare const ConsentGateRoot: import("react").ForwardRefExoticComponent<Omit<BoxProps, "slotKey"> & import("react").RefAttributes<HTMLDivElement>>;
5
+ declare const ConsentGateTitle: import("react").ForwardRefExoticComponent<Omit<BoxProps, "slotKey"> & {
6
+ category?: AllConsentNames;
7
+ } & import("react").RefAttributes<HTMLDivElement>>;
8
+ declare const ConsentGateButton: import("react").ForwardRefExoticComponent<Omit<ConsentButtonProps, "slotKey"> & {
9
+ category: AllConsentNames;
10
+ } & import("react").RefAttributes<HTMLButtonElement>>;
11
+ export { ConsentGateButton, ConsentGateRoot, ConsentGateTitle };
@@ -0,0 +1,2 @@
1
+ import type { ConsentGateProps } from './types.js';
2
+ export declare const ConsentGate: import("react").ForwardRefExoticComponent<Omit<ConsentGateProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,41 @@
1
+ import * as atoms from './atoms.js';
2
+ import type { ConsentGateCompoundComponent, ConsentGateProps } from './types.js';
3
+ /**
4
+ * Renders its children only while a consent category is allowed
5
+ *
6
+ * @remarks
7
+ * Acts as a consent boundary for embedded content (iframes, videos, third-party widgets).
8
+ * Conditionally renders children based on user consent, displaying a placeholder when
9
+ * permission is not granted.
10
+ * Supports custom styling via `theme` or complete style override with `noStyle` as well as a custom placeholder.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <ConsentGate category="marketing">
15
+ * <iframe src="https://www.youtube.com/embed/MtN1YnoL46Q?si=JYIFKdENwls43H-r" />
16
+ * </ConsentGate>
17
+ * ```
18
+ *
19
+ * @see {@link AllConsentNames} for consent categories
20
+ */
21
+ declare const ConsentGate: ConsentGateCompoundComponent;
22
+ /**
23
+ * @deprecated Renamed to {@link ConsentGate}. `Frame` will be removed in a
24
+ * future major release.
25
+ */
26
+ declare const Frame: ConsentGateCompoundComponent;
27
+ /** @deprecated Renamed to {@link ConsentGateProps}. */
28
+ type FrameProps = ConsentGateProps;
29
+ /** @deprecated Renamed to {@link ConsentGateCompoundComponent}. */
30
+ type FrameCompoundComponent = ConsentGateCompoundComponent;
31
+ /** @deprecated Renamed to `ConsentGateRoot`. */
32
+ declare const FrameRoot: typeof atoms.ConsentGateRoot;
33
+ /** @deprecated Renamed to `ConsentGateTitle`. */
34
+ declare const FrameTitle: typeof atoms.ConsentGateTitle;
35
+ /** @deprecated Renamed to `ConsentGateButton`. */
36
+ declare const FrameButton: typeof atoms.ConsentGateButton;
37
+ export { ConsentGateButton, ConsentGateRoot, ConsentGateTitle } from './atoms.js';
38
+ export type { ConsentGateCompoundComponent, ConsentGateProps } from './types.js';
39
+ export { ConsentGate };
40
+ export type { FrameCompoundComponent, FrameProps };
41
+ export { Frame, FrameButton, FrameRoot, FrameTitle };