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

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 (248) hide show
  1. package/AGENTS.md +91 -67
  2. package/README.md +21 -17
  3. package/SKILL.md +34 -0
  4. package/dist/aggregate-components.js +1 -1
  5. package/dist/chunk-warming.js +1 -1
  6. package/dist/component-hooks/use-headless-consent-ui.js +1 -1
  7. package/dist/component-hooks/use-headless-iab-consent-ui.js +1 -1
  8. package/dist/component-hooks/use-panel-trigger.js +1 -1
  9. package/dist/components/consent-gate/atoms.js +1 -1
  10. package/dist/components/consent-gate/consent-gate.js +1 -1
  11. package/dist/components/consent-preferences-link/consent-preferences-link.js +1 -1
  12. package/dist/components/iab-panel/atoms/card.js +1 -1
  13. package/dist/components/iab-panel/atoms/feature-item.js +2 -0
  14. package/dist/components/iab-panel/atoms/header.js +1 -1
  15. package/dist/components/iab-panel/atoms/purpose-item.js +1 -1
  16. package/dist/components/iab-panel/atoms/stack-item.js +1 -1
  17. package/dist/components/iab-panel/iab-panel.js +1 -1
  18. package/dist/components/iab-panel/index.js +1 -1
  19. package/dist/components/iab-prompt/atoms/overlay.js +1 -1
  20. package/dist/components/iab-prompt/atoms/root.js +1 -1
  21. package/dist/components/panel/atoms/card.js +1 -1
  22. package/dist/components/panel/atoms/overlay.js +1 -1
  23. package/dist/components/panel/atoms/root.js +1 -1
  24. package/dist/components/panel/index.js +1 -1
  25. package/dist/components/panel/panel.js +1 -1
  26. package/dist/components/panel-trigger/atoms/button.js +1 -1
  27. package/dist/components/panel-trigger/atoms/icon.js +1 -1
  28. package/dist/components/panel-trigger/atoms/root.js +1 -1
  29. package/dist/components/panel-trigger/atoms/toolbar.js +1 -1
  30. package/dist/components/panel-trigger/atoms/trigger-icons.js +1 -0
  31. package/dist/components/panel-trigger/panel-trigger-toolbar.js +1 -1
  32. package/dist/components/preferences/atoms/accordion.js +1 -1
  33. package/dist/components/preferences/atoms/root.js +1 -1
  34. package/dist/components/preferences/atoms/vendor-list.js +1 -1
  35. package/dist/components/preferences/index.js +1 -1
  36. package/dist/components/prompt/atoms/overlay.js +1 -1
  37. package/dist/components/prompt/atoms/root.js +1 -1
  38. package/dist/components/prompt/components.js +1 -1
  39. package/dist/components/prompt/policy-actions.js +1 -1
  40. package/dist/components/shared/libs/compose-refs.js +1 -0
  41. package/dist/components/shared/libs/slot.js +1 -1
  42. package/dist/components/shared/primitives/button.js +1 -1
  43. package/dist/components/shared/ui/accordion/accordion.js +1 -1
  44. package/dist/components/shared/ui/collapsible/collapsible.js +1 -1
  45. package/dist/components/shared/ui/dialog/dialog.js +1 -1
  46. package/dist/components/shared/ui/icon.js +1 -1
  47. package/dist/components/shared/ui/logo.js +1 -1
  48. package/dist/components/shared/ui/preference-item/preference-item.js +1 -1
  49. package/dist/components/shared/ui/switch/switch.js +1 -1
  50. package/dist/components/shared/ui/tabs/tabs.js +1 -1
  51. package/dist/consent-theme.js +1 -0
  52. package/dist/context/consent-tracking-context.js +1 -1
  53. package/dist/devtools.js +1 -1
  54. package/dist/draft.js +1 -1
  55. package/dist/external-iab-context.js +1 -1
  56. package/dist/headless.js +1 -1
  57. package/dist/hooks/use-committed-ref.js +2 -0
  58. package/dist/hooks/use-focus-trap.js +1 -1
  59. package/dist/hooks.js +1 -1
  60. package/dist/iab/styles.tw3.css +5 -45
  61. package/dist/iab-context.js +1 -1
  62. package/dist/index.js +1 -1
  63. package/dist/kernel-selector.js +1 -0
  64. package/dist/module-hooks/iframe-blocker.js +1 -1
  65. package/dist/module-hooks/network-blocker.js +1 -1
  66. package/dist/module-hooks/network-hold.js +2 -0
  67. package/dist/module-hooks/persistence.js +1 -1
  68. package/dist/panel.js +1 -1
  69. package/dist/postcss-tailwind3.js +1 -0
  70. package/dist/preferences.js +1 -2
  71. package/dist/provider.js +1 -1
  72. package/dist/server/fetch-ssr-data.js +1 -1
  73. package/dist/server/headers.js +1 -1
  74. package/dist/server/normalize-url.js +1 -1
  75. package/dist/styles.tw3.css +16 -61
  76. package/dist/transports/offline.js +1 -1
  77. package/dist/ui-save.js +1 -1
  78. package/dist/utils/deferred-module.js +1 -1
  79. package/dist/utils/merge-slot-props.js +1 -1
  80. package/dist/utils/theme-utils.js +1 -1
  81. package/dist/version.js +1 -1
  82. package/dist-types/chunk-warming.d.ts +41 -8
  83. package/dist-types/component-hooks/use-headless-consent-ui.d.ts +1 -1
  84. package/dist-types/component-hooks/use-headless-iab-consent-ui.d.ts +1 -1
  85. package/dist-types/components/iab-panel/atoms/feature-item.d.ts +28 -0
  86. package/dist-types/components/iab-panel/atoms/purpose-item.d.ts +4 -1
  87. package/dist-types/components/iab-panel/atoms/stack-item.d.ts +6 -1
  88. package/dist-types/components/iab-panel/iab-panel.d.ts +2 -2
  89. package/dist-types/components/iab-panel/index.d.ts +6 -2
  90. package/dist-types/components/iab-panel/use-iab-translations.d.ts +4 -0
  91. package/dist-types/components/iab-prompt/iab-prompt.d.ts +2 -2
  92. package/dist-types/components/iab-prompt/index.d.ts +2 -2
  93. package/dist-types/components/panel/atoms/card.d.ts +1 -0
  94. package/dist-types/components/panel/index.d.ts +1 -0
  95. package/dist-types/components/panel/panel.d.ts +1 -1
  96. package/dist-types/components/panel-trigger/atoms/trigger-icons.d.ts +20 -0
  97. package/dist-types/components/preferences/index.d.ts +1 -0
  98. package/dist-types/components/prompt/components.d.ts +6 -0
  99. package/dist-types/components/shared/libs/compose-refs.d.ts +20 -0
  100. package/dist-types/components/shared/ui/accordion/accordion.d.ts +1 -0
  101. package/dist-types/components/shared/ui/collapsible/collapsible.d.ts +1 -0
  102. package/dist-types/components/shared/ui/icon.d.ts +2 -1
  103. package/dist-types/components/shared/ui/logo.d.ts +0 -10
  104. package/dist-types/components/shared/ui/preference-item/preference-item.d.ts +14 -0
  105. package/dist-types/components/shared/ui/switch/switch.d.ts +1 -0
  106. package/dist-types/components/shared/ui/tabs/tabs.d.ts +1 -0
  107. package/dist-types/consent-theme.d.ts +38 -0
  108. package/dist-types/context/consent-tracking-context.d.ts +10 -0
  109. package/dist-types/context/theme-context.d.ts +2 -2
  110. package/dist-types/context.d.ts +6 -0
  111. package/dist-types/devtools.d.ts +13 -2
  112. package/dist-types/draft.d.ts +50 -7
  113. package/dist-types/headless.d.ts +0 -1
  114. package/dist-types/hooks/use-committed-ref.d.ts +24 -0
  115. package/dist-types/hooks/use-focus-trap.d.ts +3 -1
  116. package/dist-types/hooks.d.ts +56 -13
  117. package/dist-types/iab.d.ts +1 -1
  118. package/dist-types/index.d.ts +4 -3
  119. package/dist-types/kernel-selector.d.ts +66 -0
  120. package/dist-types/module-hooks/iframe-blocker.d.ts +27 -0
  121. package/dist-types/module-hooks/network-blocker.d.ts +23 -0
  122. package/dist-types/module-hooks/network-hold.d.ts +47 -0
  123. package/dist-types/panel.d.ts +13 -1
  124. package/dist-types/postcss-tailwind3.d.ts +21 -0
  125. package/dist-types/preferences.d.ts +12 -1
  126. package/dist-types/provider.d.ts +62 -12
  127. package/dist-types/server/headers.d.ts +14 -4
  128. package/dist-types/server/normalize-url.d.ts +14 -7
  129. package/dist-types/server/types.d.ts +12 -1
  130. package/dist-types/transports/offline.d.ts +7 -16
  131. package/dist-types/ui-config-context.d.ts +9 -1
  132. package/dist-types/ui-save.d.ts +21 -1
  133. package/dist-types/utils/deferred-module.d.ts +3 -1
  134. package/dist-types/utils/merge-slot-props.d.ts +15 -1
  135. package/dist-types/utils/theme-utils.d.ts +17 -2
  136. package/dist-types/version.d.ts +1 -1
  137. package/docs/README.md +91 -67
  138. package/docs/assets/v3/bottom-bar.png +0 -0
  139. package/docs/assets/v3/brand-card.png +0 -0
  140. package/docs/assets/v3/brand-preferences.png +0 -0
  141. package/docs/assets/v3/choice-wall.png +0 -0
  142. package/docs/assets/v3/headless-bar-html.png +0 -0
  143. package/docs/assets/v3/headless-bar-mobile.png +0 -0
  144. package/docs/assets/v3/headless-bar.png +0 -0
  145. package/docs/assets/v3/slim-bar.png +0 -0
  146. package/docs/concepts/choose-your-setup.md +87 -0
  147. package/docs/{frameworks/react/concepts → concepts}/consent-categories.md +30 -8
  148. package/docs/concepts/consent-state.md +357 -0
  149. package/docs/{guides → concepts}/data-fetching.md +31 -27
  150. package/docs/concepts/how-consent-works.md +123 -0
  151. package/docs/{frameworks/react/concepts/policy-presets.md → concepts/policies.md} +7 -59
  152. package/docs/customization/class-names.md +202 -0
  153. package/docs/customization/dark-mode.md +157 -0
  154. package/docs/customization/motion.md +119 -0
  155. package/docs/customization/overview.md +67 -33
  156. package/docs/customization/recipes.md +839 -47
  157. package/docs/customization/slots.md +216 -35
  158. package/docs/customization/stylesheets.md +147 -0
  159. package/docs/customization/tailwind.md +842 -0
  160. package/docs/customization/tokens.md +166 -36
  161. package/docs/customization/translations.md +61 -3
  162. package/docs/frameworks/react/callbacks.md +118 -0
  163. package/docs/frameworks/react/clear-on-revocation.md +106 -0
  164. package/docs/frameworks/react/components/consent-banner.md +42 -28
  165. package/docs/frameworks/react/components/consent-dialog-link.md +13 -11
  166. package/docs/frameworks/react/components/consent-dialog-trigger.md +81 -76
  167. package/docs/frameworks/react/components/consent-dialog.md +100 -55
  168. package/docs/frameworks/react/components/consent-gate.md +45 -24
  169. package/docs/frameworks/react/components/consent-provider.md +126 -0
  170. package/docs/frameworks/react/components/consent-widget.md +32 -20
  171. package/docs/frameworks/react/components/dev-tools.md +52 -84
  172. package/docs/frameworks/react/components.md +105 -0
  173. package/docs/frameworks/react/compose.md +354 -0
  174. package/docs/frameworks/react/content-security-policy.md +126 -0
  175. package/docs/frameworks/react/customize.md +250 -0
  176. package/docs/frameworks/react/embeds.md +89 -0
  177. package/docs/frameworks/react/hooks.md +65 -0
  178. package/docs/frameworks/react/iab.md +222 -0
  179. package/docs/frameworks/react/network-blocker.md +140 -0
  180. package/docs/frameworks/react/quickstart.md +139 -101
  181. package/docs/frameworks/react/rendering.md +128 -0
  182. package/docs/frameworks/react/scripts.md +115 -0
  183. package/docs/frameworks/react/translations.md +155 -0
  184. package/docs/frameworks/react/troubleshooting.md +92 -47
  185. package/docs/frameworks/react/vendor-consent.md +170 -0
  186. package/docs/guides/banner-experiments.md +654 -0
  187. package/docs/guides/troubleshooting.md +120 -47
  188. package/docs/guides/verify-consent.md +81 -49
  189. package/docs/integrations/adobe-analytics.md +168 -160
  190. package/docs/integrations/ahrefs-analytics.md +153 -155
  191. package/docs/integrations/amplitude.md +163 -157
  192. package/docs/integrations/building-integrations.md +136 -37
  193. package/docs/integrations/clearbit.md +155 -155
  194. package/docs/integrations/cloudflare-web-analytics.md +157 -157
  195. package/docs/integrations/cloudflare-zaraz.md +210 -262
  196. package/docs/integrations/crisp.md +165 -159
  197. package/docs/integrations/databuddy.md +158 -174
  198. package/docs/integrations/fathom-analytics.md +159 -157
  199. package/docs/integrations/front-chat.md +322 -0
  200. package/docs/integrations/google-maps.md +119 -84
  201. package/docs/integrations/google-tag-manager.md +179 -164
  202. package/docs/integrations/google-tag.md +164 -161
  203. package/docs/integrations/heap.md +164 -156
  204. package/docs/integrations/hightouch.md +162 -158
  205. package/docs/integrations/hotjar.md +160 -156
  206. package/docs/integrations/intercom.md +184 -154
  207. package/docs/integrations/klaviyo.md +486 -0
  208. package/docs/integrations/linkedin-insights.md +175 -151
  209. package/docs/integrations/logrocket.md +161 -157
  210. package/docs/integrations/matomo-analytics.md +189 -179
  211. package/docs/integrations/meta-pixel.md +189 -151
  212. package/docs/integrations/microsoft-clarity.md +164 -156
  213. package/docs/integrations/microsoft-uet.md +149 -155
  214. package/docs/integrations/mixpanel-analytics.md +156 -161
  215. package/docs/integrations/one-dollar-stats.md +306 -0
  216. package/docs/integrations/openai-pixel.md +205 -302
  217. package/docs/integrations/overview.md +143 -83
  218. package/docs/integrations/pinterest-tag.md +329 -0
  219. package/docs/integrations/pirsch.md +170 -160
  220. package/docs/integrations/plausible-analytics.md +173 -159
  221. package/docs/integrations/posthog.md +227 -242
  222. package/docs/integrations/promptwatch.md +155 -155
  223. package/docs/integrations/reddit-pixel.md +186 -158
  224. package/docs/integrations/rudderstack.md +202 -187
  225. package/docs/integrations/rybbit-analytics.md +172 -161
  226. package/docs/integrations/segment.md +183 -155
  227. package/docs/integrations/snapchat-pixel.md +187 -157
  228. package/docs/integrations/tiktok-pixel.md +172 -151
  229. package/docs/integrations/umami-analytics.md +164 -159
  230. package/docs/integrations/vercel-analytics.md +167 -158
  231. package/docs/integrations/x-pixel.md +177 -151
  232. package/docs/integrations/youtube.md +122 -87
  233. package/docs/upgrade-v3.md +490 -354
  234. package/package.json +15 -9
  235. package/dist/component-hooks/use-manager.js +0 -2
  236. package/dist-types/component-hooks/use-manager.d.ts +0 -45
  237. package/docs/assets/v3/brand-bar.png +0 -0
  238. package/docs/assets/v3/mobile-card.png +0 -0
  239. package/docs/assets/v3/preferences.png +0 -0
  240. package/docs/frameworks/react/components/consent-manager-provider.md +0 -75
  241. package/docs/frameworks/react/hooks/use-consent-manager/overview.md +0 -58
  242. package/docs/frameworks/react/iab/overview.md +0 -53
  243. package/docs/frameworks/react/script-loader.md +0 -63
  244. package/docs/frameworks/react/styling/overview.md +0 -217
  245. package/docs/guides/consent-state.md +0 -60
  246. package/docs/guides/deployment-modes.md +0 -75
  247. package/docs/integrations/clear-on-revocation.md +0 -167
  248. package/docs/integrations/granular-consent.md +0 -208
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as e,jsx as t,jsxs as o}from"react/jsx-runtime";import{isDialogDismissKey as n}from"@c15t/ui/primitives/dialog";import r from"@c15t/ui/styles/components/consent-actions";import i from"@c15t/ui/styles/components/iab-consent-dialog";import{useCallback as a,useEffect as s,useLayoutEffect as l,useMemo as d,useRef as c,useState as m}from"react";import{createPortal as p}from"react-dom";import{useHeadlessIABConsentUI as u}from"../../component-hooks/use-headless-iab-consent-ui.js";import{useTranslations as g}from"../../component-hooks/use-translations.js";import{ConsentDialogTrigger as h}from"../panel-trigger/index.js";import{Branding as b}from"../panel/atoms/card.js";import{ConsentTrackingContext as y}from"../../context/consent-tracking-context.js";import{LocalThemeContext as v}from"../../context/theme-context.js";import{useComponentConfig as f}from"../../hooks/use-component-config.js";import{useFocusTrap as C}from"../../hooks/use-focus-trap.js";import{useIABConsentManager as S}from"../../hooks/use-iab-manager.js";import{useScrollLock as k}from"../../hooks/use-scroll-lock.js";import{useTextDirection as I}from"../../hooks/use-text-direction.js";import{useUIConfig as N}from"../../ui-config-context.js";import{mergeSlotProps as x}from"../../utils/merge-slot-props.js";import{IABConsentDialogOverlay as L}from"./atoms/overlay.js";import{PurposeItem as j}from"./atoms/purpose-item.js";import{StackItem as T}from"./atoms/stack-item.js";import{VendorList as A}from"./atoms/vendor-list.js";import{useIABDisplayModel as V}from"./hooks/use-display-model.js";import{useIABTranslations as F}from"./use-iab-translations.js";import*as w from"../shared/ui/button/index.js";import*as P from"../shared/ui/tabs/index.js";let B=["iab"],R={tabIndex:-1},$=({open:$,noStyle:M,disableAnimation:q,scrollLock:z,trapFocus:E,hideBranding:H,initialTab:W,showTrigger:D=!1,models:G=B,uiSource:O})=>{let _=F(),{common:J}=g(),{components:K}=N(),{iab:Q,activeUI:U,policyDialog:X,translationConfig:Y,model:Z}=S({preferences:{scrollLock:z,trapFocus:E}}),{banner:ee,closeUI:et,openDialog:eo,performDialogAction:en}=u(),er=X.blocking,ei=I(Y.defaultLanguage),ea=c(null),es=c(null),el=c(null),[ed,ec]=m(W??Q?.preferenceCenterTab??"purposes"),[em,ep]=m(null),[eu,eg]=m(!1),[eh,eb]=m(!1),[ey,ev]=m(!1),ef=null!==Z&&G.includes(Z)&&($??"dialog"===U),eC=f({disableAnimation:q,noStyle:M,scrollLock:er,trapFocus:X.blocking}),{consentRows:eS,essentialRows:ek,essentialPartnerCount:eI,purposeTabCount:eN,vendorTabCount:ex,data:{purposes:eL}}=V(),ej=a((e,t)=>{Q?.setPurposeConsent(e,t)},[Q]),eT=a((e,t)=>{Q?.setSpecialFeatureOptIn(e,t)},[Q]),eA=a((e,t)=>{Q?.setVendorConsent(e,t)},[Q]),eV=a((e,t)=>{Q?.setVendorLegitimateInterest(e,t)},[Q]),eF=a((e,t)=>{Q?.setPurposeLegitimateInterest(e,t)},[Q]),ew=async()=>{try{await en("accept")}catch{}},eP=async()=>{try{await en("reject")}catch{}},eB=async()=>{try{await en("customize")}catch{}},eR=a(()=>{et()},[et]),e$=e=>{ep(e),ec("vendors"),eo({tab:"vendors"})};C(!!(eh&&ef&&eC.trapFocus),ea),k(!!(ef&&eC.scrollLock)),s(()=>{if(!ef)return;let e=e=>{n(e.key)&&(e.preventDefault(),eR())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[eR,ef]),s(()=>{let e=requestAnimationFrame(()=>eb(!0));return()=>cancelAnimationFrame(e)},[]),s(()=>{if(ef){let e=requestAnimationFrame(()=>ev(!0));return()=>cancelAnimationFrame(e)}if(eC.disableAnimation){let e=requestAnimationFrame(()=>ev(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{ev(!1)},150);return()=>clearTimeout(e)},[ef,eC.disableAnimation]);let eM=c(!!W);s(()=>{let e=Q?.preferenceCenterTab;if(!(ef&&e))return;if(eM.current){eM.current=!1;return}let t=requestAnimationFrame(()=>{ec(e)});return()=>cancelAnimationFrame(t)},[ef,Q?.preferenceCenterTab]),l(()=>{let e,t;if("purposes"!==ed&&"vendors"!==ed)return;let o=es.current;if(!o||null===el.current)return;let n=el.current;if(el.current=null,!window.matchMedia("(prefers-reduced-motion: reduce)").matches)return o.style.height=`${n}px`,o.style.overflow="hidden",o.style.transition="none",e=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>{if(!o)return;o.style.height="auto";let e=o.getBoundingClientRect().height;if(o.style.height=`${n}px`,1>Math.abs(n-e)){o.style.height="",o.style.overflow="",o.style.transition="";return}o.getBoundingClientRect(),o.style.transition="height 180ms cubic-bezier(0.33, 1, 0.68, 1)",o.style.height=`${e}px`,o.addEventListener("transitionend",e=>{"height"===e.propertyName&&(o.style.height="",o.style.overflow="",o.style.transition="")},{once:!0})})}),()=>{cancelAnimationFrame(e),cancelAnimationFrame(t)}},[ed]);let eq=a(e=>{es.current&&(el.current=es.current.offsetHeight),ec(e),eo({tab:e})},[eo]),ez=d(()=>({uiSource:O??"iab_dialog"}),[O]);if(!eh||!Q?.config.enabled)return null;let eE=Q.isLoadingGVL||!Q.gvl,eH=x(K?.["iab-dialog"]?.root,{baseClassName:`${i.root} ${ey?i.dialogVisible:i.dialogHidden}`,noStyle:eC.noStyle}),eW=x(K?.["iab-dialog"]?.card,{baseClassName:`${i.card} ${ey?i.contentVisible:i.contentHidden}`,noStyle:eC.noStyle}),eD=x(K?.["iab-dialog"]?.header,{baseClassName:i.header,noStyle:eC.noStyle}),eG=x(K?.["iab-dialog"]?.headerContent,{baseClassName:i.headerContent,noStyle:eC.noStyle}),eO=x(K?.["iab-dialog"]?.title,{baseClassName:i.title,noStyle:eC.noStyle}),e_=x(K?.["iab-dialog"]?.description,{baseClassName:i.description,noStyle:eC.noStyle}),eJ=x(K?.["iab-dialog"]?.closeButton,{baseClassName:i.closeButton,noStyle:eC.noStyle}),eK=x(K?.["iab-dialog"]?.body,{baseClassName:i.body,noStyle:eC.noStyle}),eQ=x(K?.["iab-dialog"]?.tabs,{baseClassName:i.tabsContainer,noStyle:eC.noStyle}),eU=x(K?.["iab-dialog"]?.tabsList,{baseClassName:i.tabsList,noStyle:eC.noStyle}),eX=x(K?.["iab-dialog"]?.tabTrigger,{baseClassName:i.tabButton,noStyle:eC.noStyle}),eY=x(K?.["iab-dialog"]?.tabIndicator,{baseClassName:i.tabIndicator,noStyle:eC.noStyle}),eZ=x(K?.["iab-dialog"]?.content,{baseClassName:i.content,noStyle:eC.noStyle}),e1=x(K?.["iab-dialog"]?.loading,{baseClassName:i.loadingContainer,noStyle:eC.noStyle}),e0=x(K?.["iab-dialog"]?.tabPanel,{baseClassName:i.tabPanel,noStyle:eC.noStyle}),e2=x(K?.["iab-dialog"]?.specialPurposes,{baseClassName:i.specialPurposesSection,noStyle:eC.noStyle}),e7=x(K?.["iab-dialog"]?.consentNotice,{baseClassName:i.consentNotice,noStyle:eC.noStyle}),e4=x(K?.["iab-dialog"]?.actions,{baseClassName:r.actionRoot,noStyle:eC.noStyle}),e8=x(K?.["iab-dialog"]?.footer,{baseClassName:i.footer,noStyle:eC.noStyle,...e4}),e5=x(K?.["iab-dialog"]?.actionGroup,{baseClassName:r.actionGroup,"data-direction":"row",noStyle:eC.noStyle}),e6=t(y.Provider,{value:ez,children:o(v.Provider,{value:eC,children:[t(L,{isOpen:ef}),t("div",{...eH,"data-testid":"iab-consent-dialog-root",dir:ei,children:o("div",{...eW,ref:ea,"aria-label":_.preferenceCenter.title,"aria-modal":eC.trapFocus?"true":void 0,role:"dialog",...R,"data-testid":"iab-consent-dialog-card",children:[o("div",{...eD,children:[o("div",{...eG,children:[t("h2",{...eO,children:_.preferenceCenter.title}),t("p",{...e_,children:_.preferenceCenter.description})]}),t("button",{...eJ,type:"button","data-testid":"iab-consent-dialog-close",onClick:eR,"aria-label":J.close,children:o("svg",{"aria-hidden":"true",style:{height:"1rem",width:"1rem"},viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),o(P.Root,{...eK,noStyle:!0,onValueChange:e=>eq(e),value:ed,children:[t("div",{...eQ,children:o(P.List,{...eU,noStyle:!0,children:[o(P.Trigger,{...eX,noStyle:!0,value:"purposes",children:[_.preferenceCenter.tabs.purposes,!eE&&` (${eN})`]}),o(P.Trigger,{...eX,noStyle:!0,value:"vendors",children:[_.preferenceCenter.tabs.vendors,!eE&&` (${ex})`]}),t("div",{...eY,"aria-hidden":"true","data-active-tab":ed})]})}),t("div",{...eZ,ref:es,children:eE?o("div",{...e1,children:[t("div",{className:i.loadingSpinner}),t("p",{className:i.loadingText,children:_.common.loading})]}):o(e,{children:[o(P.Content,{...e0,forceMount:!0,noStyle:!0,value:"purposes",children:[eS.map(e=>"stack"===e.kind?t(T,{stack:e,consents:Q.purposeConsents,onToggle:ej,vendorConsents:Q.vendorConsents,onVendorToggle:eA,onVendorClick:e$,vendorLegitimateInterests:Q.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eV,purposeLegitimateInterests:Q.purposeLegitimateInterests,onPurposeLegitimateInterestToggle:eF},e.testId):t(j,{purpose:e,testId:e.testId,isEnabled:"special-feature"===e.toggle?Q.specialFeatureOptIns[e.id]??!1:Q.purposeConsents[e.id]??!1,onToggle:t=>{"special-feature"===e.toggle?eT(e.id,t):ej(e.id,t)},vendorConsents:Q.vendorConsents,onVendorToggle:eA,onVendorClick:e$,vendorLegitimateInterests:Q.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eV,purposeLegitimateInterests:"purpose"===e.kind?Q.purposeLegitimateInterests:void 0,onPurposeLegitimateInterestToggle:"purpose"===e.kind?eF:void 0},e.testId)),ek.length>0&&o("div",{...e2,children:[o("div",{className:i.specialPurposesHeader,children:[o("button",{type:"button","aria-expanded":eu,onClick:()=>eg(!eu),className:i.purposeTrigger,children:[t("svg",{"aria-hidden":"true",className:i.purposeArrow,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:eu?t("path",{d:"M19 9l-7 7-7-7"}):t("path",{d:"M9 5l7 7-7 7"})}),o("div",{className:i.purposeInfo,children:[o("h3",{className:i.specialPurposesTitle,children:[_.preferenceCenter.specialPurposes.title,o("svg",{"aria-hidden":"true",className:i.lockIcon,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})]}),o("p",{className:i.purposeMeta,children:[eI," ",1===eI?_.preferenceCenter.vendorList.partnerSingular:_.preferenceCenter.vendorList.partnerPlural]})]})]}),t("div",{style:{position:"relative"},children:o("svg",{className:i.infoIcon,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-label":_.preferenceCenter.specialPurposes.tooltip,children:[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),t("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"})]})})]}),eu&&t("div",{style:{padding:"0.75rem"},children:ek.map(e=>t(j,{purpose:e,testId:e.testId,isEnabled:!0,onToggle:()=>{},vendorConsents:Q.vendorConsents,onVendorToggle:eA,onVendorClick:e$,isLocked:!0},e.testId))})]}),t("div",{...e7,children:t("p",{className:i.consentNoticeText,children:_.preferenceCenter.footer.consentStorage})})]}),t(P.Content,{...e0,forceMount:!0,noStyle:!0,value:"vendors",children:t(A,{vendorData:Q.gvl,purposes:eL,vendorConsents:Q.vendorConsents,onVendorToggle:eA,selectedVendorId:em,onClearSelection:()=>ep(null),customVendors:Q.nonIABVendors,vendorLegitimateInterests:Q.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eV})})]})})]}),o("div",{...e8,children:[o("div",{...e5,children:[t(w.Root,{variant:"neutral",mode:"stroke",size:"small",onClick:eP,disabled:!ee.isReady,"data-action":"reject",children:_.common.rejectAll}),t(w.Root,{variant:"neutral",mode:"stroke",size:"small",onClick:ew,disabled:!ee.isReady,"data-action":"accept",children:_.common.acceptAll})]}),t("div",{...e5,children:t(w.Root,{variant:"primary",mode:"filled",size:"small",onClick:eB,disabled:eE,"data-action":"customize",children:_.common.saveSettings})})]}),t(b,{hideBranding:H??!1,variant:"dialog-tag",slotContext:"iab-dialog","data-testid":"iab-consent-dialog-branding"})]})})]})}),e3=!0===D?{}:!1===D?null:D,e9=e3?t(h,{...e3}):null;return ef||ey?o(e,{children:[e9,p(e6,document.body)]}):e9};export{$ as IABConsentDialog};
2
+ import{Fragment as e,jsx as t,jsxs as o}from"react/jsx-runtime";import{applyPublisherRestrictionsToGVL as n}from"@c15t/iab/headless";import{isDialogDismissKey as i}from"@c15t/ui/primitives/dialog";import r from"@c15t/ui/styles/components/consent-actions";import a from"@c15t/ui/styles/components/iab-consent-dialog";import{useCallback as s,useEffect as l,useLayoutEffect as d,useMemo as c,useRef as m,useState as u}from"react";import{createPortal as p}from"react-dom";import{useHeadlessIABConsentUI as g}from"../../component-hooks/use-headless-iab-consent-ui.js";import{useTranslations as h}from"../../component-hooks/use-translations.js";import{ConsentDialogTrigger as b}from"../panel-trigger/index.js";import{Branding as y}from"../panel/atoms/card.js";import{ConsentTrackingContext as f}from"../../context/consent-tracking-context.js";import{LocalThemeContext as v}from"../../context/theme-context.js";import{useComponentConfig as C}from"../../hooks/use-component-config.js";import{useFocusTrap as S}from"../../hooks/use-focus-trap.js";import{useIABConsentManager as k}from"../../hooks/use-iab-manager.js";import{useScrollLock as N}from"../../hooks/use-scroll-lock.js";import{useTextDirection as I}from"../../hooks/use-text-direction.js";import{useUIConfig as x}from"../../ui-config-context.js";import{mergeSlotProps as L}from"../../utils/merge-slot-props.js";import{FeatureItem as j}from"./atoms/feature-item.js";import{IABConsentDialogOverlay as T}from"./atoms/overlay.js";import{PurposeItem as A}from"./atoms/purpose-item.js";import{StackItem as F}from"./atoms/stack-item.js";import{VendorList as V}from"./atoms/vendor-list.js";import{useIABDisplayModel as w}from"./hooks/use-display-model.js";import{useIABTranslations as P}from"./use-iab-translations.js";import*as B from"../shared/ui/button/index.js";import*as R from"../shared/ui/tabs/index.js";let $=["iab"],M={tabIndex:-1},q=({open:q,noStyle:z,disableAnimation:E,scrollLock:H,trapFocus:D,hideBranding:W,initialTab:G,showTrigger:O=!1,models:_=$,uiSource:J})=>{let K=P(),{common:Q}=h(),{components:U}=x(),{iab:X,activeUI:Y,policyDialog:Z,translationConfig:ee,model:et}=k({preferences:{scrollLock:H,trapFocus:D}}),{banner:eo,closeUI:en,openDialog:ei,performDialogAction:er}=g(),ea=Z.blocking,es=I(ee.defaultLanguage),el=m(null),ed=m(null),ec=m(null),[em,eu]=u(G??X?.preferenceCenterTab??"purposes"),[ep,eg]=u(null),[eh,eb]=u(!1),[ey,ef]=u(!1),[ev,eC]=u(!1),eS=null!==et&&_.includes(et)&&(q??"dialog"===Y),ek=C({disableAnimation:E,noStyle:z,scrollLock:ea,trapFocus:Z.blocking}),{consentRows:eN,essentialRows:eI,essentialPartnerCount:ex,featureRows:eL,featuresStandardText:ej,purposeTabCount:eT,vendorTabCount:eA,data:{purposes:eF}}=w(),eV=X?.gvl??null,ew=X?.publisherRestrictions,eP=c(()=>eV?n(eV,ew):null,[eV,ew]),eB=s((e,t)=>{X?.setPurposeConsent(e,t)},[X]),eR=s((e,t)=>{X?.setSpecialFeatureOptIn(e,t)},[X]),e$=s((e,t)=>{X?.setVendorConsent(e,t)},[X]),eM=s((e,t)=>{X?.setVendorLegitimateInterest(e,t)},[X]),eq=s((e,t)=>{X?.setPurposeLegitimateInterest(e,t)},[X]),ez=async()=>{try{await er("accept")}catch{}},eE=async()=>{try{await er("reject")}catch{}},eH=async()=>{try{await er("customize")}catch{}},eD=s(()=>{en()},[en]),eW=e=>{eg(e),eu("vendors"),ei({tab:"vendors"})};S(!!(ey&&eS&&ek.trapFocus),el,{initialFocus:"first-tabbable"}),N(!!(eS&&ek.scrollLock)),l(()=>{if(!eS)return;let e=e=>{i(e.key)&&(e.preventDefault(),eD())};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[eD,eS]),l(()=>{let e=requestAnimationFrame(()=>ef(!0));return()=>cancelAnimationFrame(e)},[]),l(()=>{if(eS){let e=requestAnimationFrame(()=>eC(!0));return()=>cancelAnimationFrame(e)}if(ek.disableAnimation){let e=requestAnimationFrame(()=>eC(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{eC(!1)},150);return()=>clearTimeout(e)},[eS,ek.disableAnimation]);let eG=m(!!G);l(()=>{let e=X?.preferenceCenterTab;if(!(eS&&e))return;if(eG.current){eG.current=!1;return}let t=requestAnimationFrame(()=>{eu(e)});return()=>cancelAnimationFrame(t)},[eS,X?.preferenceCenterTab]),d(()=>{let e,t;if("purposes"!==em&&"vendors"!==em)return;let o=ed.current;if(!o||null===ec.current)return;let n=ec.current;if(ec.current=null,!window.matchMedia("(prefers-reduced-motion: reduce)").matches)return o.style.height=`${n}px`,o.style.overflow="hidden",o.style.transition="none",e=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>{if(!o)return;o.style.height="auto";let e=o.getBoundingClientRect().height;if(o.style.height=`${n}px`,1>Math.abs(n-e)){o.style.height="",o.style.overflow="",o.style.transition="";return}o.getBoundingClientRect(),o.style.transition="height 180ms cubic-bezier(0.33, 1, 0.68, 1)",o.style.height=`${e}px`,o.addEventListener("transitionend",e=>{"height"===e.propertyName&&(o.style.height="",o.style.overflow="",o.style.transition="")},{once:!0})})}),()=>{cancelAnimationFrame(e),cancelAnimationFrame(t)}},[em]);let eO=s(e=>{ed.current&&(ec.current=ed.current.offsetHeight),eu(e),ei({tab:e})},[ei]),e_=c(()=>({uiSource:J??"iab_dialog"}),[J]);if(!ey||!X?.config.enabled)return null;let eJ=X.isLoadingGVL||!X.gvl,eK=L(U?.["iab-dialog"]?.root,{baseClassName:`${a.root} ${ev?a.dialogVisible:a.dialogHidden}`,noStyle:ek.noStyle}),eQ=L(U?.["iab-dialog"]?.card,{baseClassName:`${a.card} ${ev?a.contentVisible:a.contentHidden}`,noStyle:ek.noStyle}),eU=L(U?.["iab-dialog"]?.header,{baseClassName:a.header,noStyle:ek.noStyle}),eX=L(U?.["iab-dialog"]?.headerContent,{baseClassName:a.headerContent,noStyle:ek.noStyle}),eY=L(U?.["iab-dialog"]?.title,{baseClassName:a.title,noStyle:ek.noStyle}),eZ=L(U?.["iab-dialog"]?.description,{baseClassName:a.description,noStyle:ek.noStyle}),e1=L(U?.["iab-dialog"]?.closeButton,{baseClassName:a.closeButton,noStyle:ek.noStyle}),e0=L(U?.["iab-dialog"]?.body,{baseClassName:a.body,noStyle:ek.noStyle}),e2=L(U?.["iab-dialog"]?.tabs,{baseClassName:a.tabsContainer,noStyle:ek.noStyle}),e7=L(U?.["iab-dialog"]?.tabsList,{baseClassName:a.tabsList,noStyle:ek.noStyle}),e4=L(U?.["iab-dialog"]?.tabTrigger,{baseClassName:a.tabButton,noStyle:ek.noStyle}),e5=L(U?.["iab-dialog"]?.tabIndicator,{baseClassName:a.tabIndicator,noStyle:ek.noStyle}),e8=L(U?.["iab-dialog"]?.content,{baseClassName:a.content,noStyle:ek.noStyle}),e6=L(U?.["iab-dialog"]?.loading,{baseClassName:a.loadingContainer,noStyle:ek.noStyle}),e3=L(U?.["iab-dialog"]?.tabPanel,{baseClassName:a.tabPanel,noStyle:ek.noStyle}),e9=L(U?.["iab-dialog"]?.specialPurposes,{baseClassName:a.specialPurposesSection,noStyle:ek.noStyle}),te=L(U?.["iab-dialog"]?.consentNotice,{baseClassName:a.consentNotice,noStyle:ek.noStyle}),tt=L(U?.["iab-dialog"]?.actions,{baseClassName:r.actionRoot,noStyle:ek.noStyle}),to=L(U?.["iab-dialog"]?.footer,{baseClassName:a.footer,noStyle:ek.noStyle,...tt}),tn=L(U?.["iab-dialog"]?.actionGroup,{baseClassName:r.actionGroup,"data-direction":"row",noStyle:ek.noStyle}),ti=t(f.Provider,{value:e_,children:o(v.Provider,{value:ek,children:[t(T,{isOpen:eS}),t("div",{...eK,"data-testid":"iab-consent-dialog-root",dir:es,children:o("div",{"aria-describedby":"iab-consent-dialog-description",...eQ,ref:el,"aria-label":K.preferenceCenter.title,"aria-modal":ek.trapFocus?"true":void 0,role:"dialog",...M,"data-testid":"iab-consent-dialog-card",children:[o("div",{...eU,children:[o("div",{...eX,children:[t("h2",{...eY,children:K.preferenceCenter.title}),t("p",{...eZ,id:"iab-consent-dialog-description",children:K.preferenceCenter.description})]}),t("button",{...e1,type:"button","data-testid":"iab-consent-dialog-close",onClick:eD,"aria-label":Q.close,children:o("svg",{"aria-hidden":"true",style:{height:"1rem",width:"1rem"},viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),o(R.Root,{...e0,noStyle:!0,onValueChange:e=>eO(e),value:em,children:[t("div",{...e2,children:o(R.List,{...e7,noStyle:!0,children:[o(R.Trigger,{...e4,noStyle:!0,value:"purposes",children:[K.preferenceCenter.tabs.purposes,!eJ&&` (${eT})`]}),o(R.Trigger,{...e4,noStyle:!0,value:"vendors",children:[K.preferenceCenter.tabs.vendors,!eJ&&` (${eA})`]}),t("div",{...e5,"aria-hidden":"true","data-active-tab":em})]})}),t("div",{...e8,ref:ed,children:eJ?o("div",{...e6,children:[t("div",{className:a.loadingSpinner}),t("p",{className:a.loadingText,children:K.common.loading})]}):o(e,{children:[o(R.Content,{...e3,forceMount:!0,noStyle:!0,value:"purposes",children:[eN.map(e=>"stack"===e.kind?t(F,{stack:e,consents:X.purposeConsents,onToggle:eB,vendorConsents:X.vendorConsents,onVendorToggle:e$,onVendorClick:eW,vendorLegitimateInterests:X.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eM,purposeLegitimateInterests:X.purposeLegitimateInterests,onPurposeLegitimateInterestToggle:eq},e.testId):t(A,{purpose:e,testId:e.testId,isEnabled:"special-feature"===e.toggle?X.specialFeatureOptIns[e.id]??!1:X.purposeConsents[e.id]??!1,onToggle:t=>{"special-feature"===e.toggle?eR(e.id,t):eB(e.id,t)},vendorConsents:X.vendorConsents,onVendorToggle:e$,onVendorClick:eW,vendorLegitimateInterests:X.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eM,purposeLegitimateInterests:"purpose"===e.kind?X.purposeLegitimateInterests:void 0,onPurposeLegitimateInterestToggle:"purpose"===e.kind?eq:void 0},e.testId)),eI.length>0&&o("div",{...e9,children:[o("div",{className:a.specialPurposesHeader,children:[o("button",{type:"button","aria-expanded":eh,onClick:()=>eb(!eh),className:a.purposeTrigger,children:[t("svg",{"aria-hidden":"true",className:a.purposeArrow,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:eh?t("path",{d:"M19 9l-7 7-7-7"}):t("path",{d:"M9 5l7 7-7 7"})}),o("div",{className:a.purposeInfo,children:[o("h3",{className:a.specialPurposesTitle,children:[K.preferenceCenter.specialPurposes.title,o("svg",{"aria-hidden":"true",className:a.lockIcon,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[t("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),t("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})]}),o("p",{className:a.purposeMeta,children:[ex," ",1===ex?K.preferenceCenter.vendorList.partnerSingular:K.preferenceCenter.vendorList.partnerPlural]})]})]}),t("div",{style:{position:"relative"},children:o("svg",{className:a.infoIcon,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-label":K.preferenceCenter.specialPurposes.tooltip,children:[t("circle",{cx:"12",cy:"12",r:"10"}),t("line",{x1:"12",y1:"16",x2:"12",y2:"12"}),t("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"})]})})]}),eh&&t("div",{style:{padding:"0.75rem"},children:eI.map(e=>t(A,{purpose:e,testId:e.testId,isEnabled:!0,onToggle:()=>{},vendorConsents:X.vendorConsents,onVendorToggle:e$,onVendorClick:eW,isLocked:!0},e.testId))})]}),eL.length>0&&o("section",{"aria-label":K.preferenceCenter.features.title,className:ek.noStyle?void 0:a.featuresSection,"data-testid":"iab-consent-dialog-features",children:[o("div",{className:ek.noStyle?void 0:a.featuresHeader,children:[t("h3",{className:ek.noStyle?void 0:a.featuresTitle,children:K.preferenceCenter.features.title}),t("p",{className:ek.noStyle?void 0:a.featuresDescription,children:ej??K.preferenceCenter.features.description})]}),t("div",{className:ek.noStyle?void 0:a.featuresList,children:eL.map(e=>t(j,{feature:e,testId:e.testId},e.testId))})]}),t("div",{...te,children:t("p",{className:a.consentNoticeText,children:K.preferenceCenter.footer.consentStorage})})]}),t(R.Content,{...e3,forceMount:!0,noStyle:!0,value:"vendors",children:t(V,{vendorData:eP,purposes:eF,vendorConsents:X.vendorConsents,onVendorToggle:e$,selectedVendorId:ep,onClearSelection:()=>eg(null),customVendors:X.nonIABVendors,vendorLegitimateInterests:X.vendorLegitimateInterests,onVendorLegitimateInterestToggle:eM})})]})})]}),o("div",{...to,children:[o("div",{...tn,children:[t(B.Root,{variant:"neutral",mode:"stroke",size:"small",onClick:eE,disabled:!eo.isReady,"data-action":"reject",children:K.common.rejectAll}),t(B.Root,{variant:"neutral",mode:"stroke",size:"small",onClick:ez,disabled:!eo.isReady,"data-action":"accept",children:K.common.acceptAll})]}),t("div",{...tn,children:t(B.Root,{variant:"primary",mode:"filled",size:"small",onClick:eH,disabled:eJ,"data-action":"customize",children:K.common.saveSettings})})]}),t(y,{hideBranding:W??!1,variant:"dialog-tag",slotContext:"iab-dialog","data-testid":"iab-consent-dialog-branding"})]})})]})}),tr=!0===O?{}:!1===O?null:O,ta=tr?t(b,{...tr}):null;return eS||ev?o(e,{children:[ta,p(ti,document.body)]}):ta};export{q as IABConsentDialog};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{IABConsentDialogCard as o}from"./atoms/card.js";import{IABConsentDialogContent as t}from"./atoms/content.js";import{IABConsentDialogFooter as s}from"./atoms/footer.js";import{IABConsentDialogHeader as e}from"./atoms/header.js";import{IABConsentDialogOverlay as a}from"./atoms/overlay.js";import{PurposeItem as r}from"./atoms/purpose-item.js";import{IABConsentDialogRoot as m}from"./atoms/root.js";import{StackItem as n}from"./atoms/stack-item.js";import{IABConsentDialogTabButton as i,IABConsentDialogTabs as l}from"./atoms/tabs.js";import{VendorList as p}from"./atoms/vendor-list.js";import{IABConsentDialog as f}from"./iab-panel.js";let I=Object.assign(f,{Card:o,Content:t,Footer:s,Header:e,Overlay:a,PurposeItem:r,Root:m,StackItem:n,TabButton:i,Tabs:l,VendorList:p});export{useIABDisplayModel}from"./hooks/use-display-model.js";export{useGVLData}from"./hooks/use-gvl-data.js";export default I;export{o as IABConsentDialogCard,t as IABConsentDialogContent,s as IABConsentDialogFooter,e as IABConsentDialogHeader,a as IABConsentDialogOverlay,m as IABConsentDialogRoot,i as IABConsentDialogTabButton,l as IABConsentDialogTabs,r as PurposeItem,n as StackItem,p as VendorList,I as IABConsentDialog};
2
+ import"@c15t/ui/styles/dialog";import{IABConsentDialogCard as o}from"./atoms/card.js";import{IABConsentDialogContent as t}from"./atoms/content.js";import{FeatureItem as e}from"./atoms/feature-item.js";import{IABConsentDialogFooter as s}from"./atoms/footer.js";import{IABConsentDialogHeader as a}from"./atoms/header.js";import{IABConsentDialogOverlay as r}from"./atoms/overlay.js";import{PurposeItem as m}from"./atoms/purpose-item.js";import{IABConsentDialogRoot as i}from"./atoms/root.js";import{StackItem as n}from"./atoms/stack-item.js";import{IABConsentDialogTabButton as l,IABConsentDialogTabs as p}from"./atoms/tabs.js";import{VendorList as f}from"./atoms/vendor-list.js";import{IABConsentDialog as I}from"./iab-panel.js";let d=Object.assign(I,{Card:o,Content:t,FeatureItem:e,Footer:s,Header:a,Overlay:r,PurposeItem:m,Root:i,StackItem:n,TabButton:l,Tabs:p,VendorList:f});export{useIABDisplayModel}from"./hooks/use-display-model.js";export{useGVLData}from"./hooks/use-gvl-data.js";export default d;export{e as FeatureItem,o as IABConsentDialogCard,t as IABConsentDialogContent,s as IABConsentDialogFooter,a as IABConsentDialogHeader,r as IABConsentDialogOverlay,i as IABConsentDialogRoot,l as IABConsentDialogTabButton,p as IABConsentDialogTabs,m as PurposeItem,n as StackItem,f as VendorList,d as IABConsentDialog};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as r,useEffect as o,useState as n}from"react";import{useActiveUI as a}from"../../../hooks.js";import{useScrollLock as i}from"../../../hooks/use-scroll-lock.js";import{useTheme as m}from"../../../hooks/use-theme.js";import{useUIConfig as s}from"../../../ui-config-context.js";import{cnExt as l}from"../../../utils/cn.js";import{mergeSlotProps as u}from"../../../utils/merge-slot-props.js";let c=r(({className:r,style:c,noStyle:p,...f},y)=>{let b,d=a(),{disableAnimation:v,noStyle:j,scrollLock:A}=m(),{components:h}=s(),[N,g]=n(!1),k="banner"===d;o(()=>{if(k){let e=requestAnimationFrame(()=>g(!0));return()=>cancelAnimationFrame(e)}if(v){let e=requestAnimationFrame(()=>g(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{g(!1)},Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--iab-consent-banner-animation-duration")||"200",10));return()=>clearTimeout(e)},[k,v]);let B=u(h?.["iab-banner"]?.overlay,{baseClassName:t.overlay,className:r,noStyle:j||p,style:c,...f});j||p||v||(b=N?t.overlayVisible:t.overlayHidden);let C=l(B.className,b);return(i(!!(k&&A)),k&&A)?e("div",{ref:y,...B,"aria-hidden":"true",className:C,"data-testid":"iab-consent-banner-overlay"}):null});c.displayName="IABConsentBannerOverlay";export{c as IABConsentBannerOverlay};
2
+ import{jsx as e}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as r}from"react";import{useActiveUI as t}from"../../../hooks.js";import{useScrollLock as s}from"../../../hooks/use-scroll-lock.js";import{useTheme as n}from"../../../hooks/use-theme.js";import{useUIConfig as a}from"../../../ui-config-context.js";import{cnExt as i}from"../../../utils/cn.js";import{mergeSlotProps as m}from"../../../utils/merge-slot-props.js";let l=r(({className:r,style:l,noStyle:p,...c},f)=>{let y=t(),{disableAnimation:u,noStyle:b,scrollLock:v}=n(),{components:d}=a(),j="banner"===y,h=m(d?.["iab-banner"]?.overlay,{baseClassName:o.overlay,className:r,noStyle:b||p,style:l,...c}),k=b||p||u?void 0:`${o.overlayVisible} ${o.overlayEntering}`,B=i(h.className,k);return(s(!!(j&&v)),j&&v)?e("div",{ref:f,...h,"aria-hidden":"true",className:B,"data-testid":"iab-consent-banner-overlay"}):null});l.displayName="IABConsentBannerOverlay";export{l as IABConsentBannerOverlay};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as e,jsx as t,jsxs as n}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as o,useEffect as a,useMemo as i,useState as m}from"react";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as l}from"../../../context/theme-context.js";import{useActiveUI as c,useModel as u,useTranslations as d}from"../../../hooks.js";import{useIABConsentManager as b}from"../../../hooks/use-iab-manager.js";import{useTextDirection as p}from"../../../hooks/use-text-direction.js";import{useUIConfig as f}from"../../../ui-config-context.js";import{mergeSlotProps as h}from"../../../utils/merge-slot-props.js";import{IABConsentBannerOverlay as A}from"./overlay.js";let g=["iab"],j=o(({children:o,className:i,style:s,className:l,disableAnimation:b,noStyle:j,models:x=g,...F},N)=>{let y=c(),{components:k}=f(),v=u(),C=d(),q=p(C?.language??"en"),B=null!==v&&"banner"===y&&x.includes(v),[I,T]=m(B),[P,S]=m(B),[R,V]=m(200);a(()=>{let e=Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--iab-consent-banner-animation-duration")||"200",10),t=requestAnimationFrame(()=>{V(e)});return()=>cancelAnimationFrame(t)},[]),a(()=>{if(B){if(P){let e=requestAnimationFrame(()=>T(!0));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{T(!0),S(!0)},10);return()=>clearTimeout(e)}if(b){let e=requestAnimationFrame(()=>{S(!1),T(!1)});return()=>cancelAnimationFrame(e)}let e=requestAnimationFrame(()=>S(!1)),t=setTimeout(()=>{T(!1)},R);return()=>{cancelAnimationFrame(e),clearTimeout(t)}},[B,b,P,R]);let $=h(k?.["iab-banner"]?.root,{baseClassName:[r.root],className:i||l,noStyle:j,style:s,...F}),E=j?$.className||"":`${$.className||""} ${I?r.bannerVisible:r.bannerHidden}`;return B?n(e,{children:[t(A,{}),t("div",{ref:N,...$,className:E,"data-position":"ltr"===q?"bottom-left":"bottom-right","data-testid":"iab-consent-banner-root",dir:q,tabIndex:-1,children:o})]}):null}),x=({children:e,className:n,noStyle:r,disableAnimation:o,scrollLock:a,trapFocus:m,models:c,uiSource:u,...d})=>{let{policyBanner:p}=b({prompt:{scrollLock:a,trapFocus:m}}),f=p.blocking,h=i(()=>({disableAnimation:o,noStyle:r,scrollLock:f,trapFocus:f}),[o,r,f]),A=i(()=>({uiSource:u??"iab_banner"}),[u]);return t(s.Provider,{value:A,children:t(l.Provider,{value:h,children:t(j,{disableAnimation:o,className:n,noStyle:r,models:c,...d,children:e})})})};j.displayName="IABConsentBannerRootChildren";export{x as IABConsentBannerRoot};
2
+ import{Fragment as e,jsx as o,jsxs as t}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/iab-consent-banner";import{forwardRef as n,useMemo as a}from"react";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as i}from"../../../context/theme-context.js";import{useActiveUI as m,useModel as l,useTranslations as c}from"../../../hooks.js";import{useIABConsentManager as b}from"../../../hooks/use-iab-manager.js";import{useTextDirection as p}from"../../../hooks/use-text-direction.js";import{useUIConfig as d}from"../../../ui-config-context.js";import{mergeSlotProps as u}from"../../../utils/merge-slot-props.js";import{IABConsentBannerOverlay as f}from"./overlay.js";let h=["iab"],g=n(({children:n,className:a,style:s,className:i,disableAnimation:b,noStyle:g,models:j=h,...x},N)=>{let k=m(),{components:v}=d(),y=l(),B=c(),C=p(B?.language??"en"),$=null!==y&&"banner"===k&&j.includes(y),A=u(v?.["iab-banner"]?.root,{baseClassName:[r.root],className:a||i,noStyle:g,style:s,...x}),I=g?A.className||"":`${A.className||""} ${r.bannerVisible}${b?"":` ${r.bannerEntering}`}`;return $?t(e,{children:[o(f,{}),o("div",{ref:N,...A,className:I,"data-position":"ltr"===C?"bottom-left":"bottom-right","data-testid":"iab-consent-banner-root",dir:C,tabIndex:-1,children:n})]}):null}),j=({children:e,className:t,noStyle:r,disableAnimation:n,scrollLock:m,trapFocus:l,models:c,uiSource:p,...d})=>{let{policyBanner:u}=b({prompt:{scrollLock:m,trapFocus:l}}),f=u.blocking,h=a(()=>({disableAnimation:n,noStyle:r,scrollLock:f,trapFocus:f}),[n,r,f]),j=a(()=>({uiSource:p??"iab_banner"}),[p]);return o(s.Provider,{value:j,children:o(i.Provider,{value:h,children:o(g,{disableAnimation:n,className:t,noStyle:r,models:c,...d,children:e})})})};g.displayName="IABConsentBannerRootChildren";export{j as IABConsentBannerRoot};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/branding";import i from"@c15t/ui/styles/components/consent-dialog";import{forwardRef as a}from"react";import{useTranslations as n}from"../../../component-hooks/use-translations.js";import{ConsentWidget as s}from"../../preferences/preferences.js";import{Slot as r}from"../../shared/libs/slot.js";import{Box as d}from"../../shared/primitives/box.js";import{InlineLegalLinks as l}from"../../shared/primitives/legal-links/index.js";import{BrandingLink as g}from"../../shared/ui/branding.js";import{useTheme as c}from"../../../hooks/use-theme.js";import{useUIConfig as m}from"../../../ui-config-context.js";import{cnExt as p}from"../../../utils/cn.js";import{mergeSlotProps as C}from"../../../utils/merge-slot-props.js";let f=a(({children:t,...o},a)=>e(d,{ref:a,baseClassName:i.card,...o,slotKey:"dialog.card","data-testid":"consent-dialog-card",tabIndex:-1,children:t}));f.displayName="ConsentDialogCard";let h=a(({children:t,...o},a)=>e(d,{ref:a,baseClassName:i.header,...o,slotKey:"dialog.header","data-testid":"consent-dialog-header",children:t}));h.displayName="ConsentDialogHeader";let D=a(({children:t,...o},a)=>{let{consentManagerDialog:s}=n();return e(d,{ref:a,baseClassName:i.title,slotKey:"dialog.title",...o,id:"consent-dialog-title","data-testid":"consent-dialog-title",asChild:!0,children:e("h2",{children:t??s.title})})});D.displayName="ConsentDialogHeaderTitle";let y=a(({children:o,legalLinks:a,asChild:s,className:d,style:g,noStyle:p,...f},h)=>{let{consentManagerDialog:D}=n(),{components:y}=m(),{noStyle:b}=c(),u="dialog",N=C(y?.description?.[u],{baseClassName:i.description,className:d,"data-context":u,"data-testid":"consent-dialog-description",id:"consent-dialog-description",noStyle:p??b,style:g,...f});return s?e(r,{ref:h,...N,children:o??D.description}):t("div",{ref:h,...N,children:[o??D.description,e(l,{links:a,context:"dialog",testIdPrefix:"consent-dialog-legal-link"})]})});y.displayName="ConsentDialogHeaderDescription";let b=a(({children:t,...o},a)=>e(d,{ref:a,baseClassName:i.content,slotKey:"dialog.content","data-testid":"consent-dialog-content",...o,children:t}));b.displayName="ConsentDialogContent";let u=t=>e(g,{...t}),N=a(({children:t,hideBranding:a,"data-testid":n,...s},r)=>e(d,{ref:r,baseClassName:p(i.footer,null==t&&!a&&o.brandingFooter),"data-testid":n??"consent-dialog-footer",...s,slotKey:"manager.footer",children:t??e(u,{hideBranding:a??!1,variant:"dialog-tag",slotContext:"dialog","data-testid":"consent-dialog-branding"})}));N.displayName="ConsentDialogFooter";let j=({noStyle:o,legalLinks:i,hideBranding:a})=>t(f,{children:[t(h,{children:[e(D,{}),e(y,{legalLinks:i})]}),e(b,{children:e(s,{hideBranding:!0,noStyle:o,useProvider:!0})}),e(u,{hideBranding:a??!1,variant:"dialog-tag",slotContext:"dialog","data-testid":"consent-dialog-branding"})]}),x=f,H=h,k=D,v=y,K=b,B=N;export{u as Branding,x as Card,j as ConsentCustomizationCard,f as ConsentDialogCard,b as ConsentDialogContent,N as ConsentDialogFooter,h as ConsentDialogHeader,y as ConsentDialogHeaderDescription,D as ConsentDialogHeaderTitle,K as Content,B as Footer,H as Header,v as HeaderDescription,k as HeaderTitle};
2
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/branding";import i from"@c15t/ui/styles/components/consent-dialog";import{forwardRef as a,isValidElement as n}from"react";import{useTranslations as s}from"../../../component-hooks/use-translations.js";import{ConsentWidget as r}from"../../preferences/preferences.js";import{Slot as d}from"../../shared/libs/slot.js";import{Box as l}from"../../shared/primitives/box.js";import{InlineLegalLinks as g}from"../../shared/primitives/legal-links/index.js";import{BrandingLink as c}from"../../shared/ui/branding.js";import{useTheme as m}from"../../../hooks/use-theme.js";import{useUIConfig as p}from"../../../ui-config-context.js";import{cnExt as C}from"../../../utils/cn.js";import{mergeSlotProps as f}from"../../../utils/merge-slot-props.js";let h=a(({children:t,...o},a)=>e(l,{ref:a,baseClassName:i.card,...o,slotKey:"dialog.card","data-testid":"consent-dialog-card",tabIndex:-1,children:t}));h.displayName="ConsentDialogCard";let D=a(({children:t,...o},a)=>e(l,{ref:a,baseClassName:i.header,...o,slotKey:"dialog.header","data-testid":"consent-dialog-header",children:t}));D.displayName="ConsentDialogHeader";let y=a(({children:t,asChild:o,...a},r)=>{let{consentManagerDialog:d}=s();return e(l,{ref:r,baseClassName:i.title,slotKey:"dialog.title",...a,id:"consent-dialog-title","data-testid":"consent-dialog-title",asChild:!0,children:o&&n(t)?t:e("h2",{children:t??d.title})})});y.displayName="ConsentDialogHeaderTitle";let b=a(({children:o,legalLinks:a,asChild:r,className:l,style:c,noStyle:C,...h},D)=>{let{consentManagerDialog:y}=s(),{components:b}=p(),{noStyle:u}=m(),N="dialog",j=f(b?.description?.[N],{baseClassName:i.description,className:l,"data-context":N,"data-testid":"consent-dialog-description",id:"consent-dialog-description",noStyle:C??u,style:c,...h});return r&&n(o)?e(d,{ref:D,...j,children:o}):t("div",{ref:D,...j,children:[o??y.description,e(g,{links:a,context:"dialog",testIdPrefix:"consent-dialog-legal-link"})]})});b.displayName="ConsentDialogHeaderDescription";let u=a(({children:t,...o},a)=>e(l,{ref:a,baseClassName:i.content,slotKey:"dialog.content","data-testid":"consent-dialog-content",...o,children:t}));u.displayName="ConsentDialogContent";let N=t=>e(c,{...t}),j=a(({children:t,hideBranding:a,"data-testid":n,...s},r)=>e(l,{ref:r,baseClassName:C(i.footer,null==t&&!a&&o.brandingFooter),"data-testid":n??"consent-dialog-footer",...s,slotKey:"manager.footer",children:t??e(N,{hideBranding:a??!1,variant:"dialog-tag",slotContext:"dialog","data-testid":"consent-dialog-branding"})}));j.displayName="ConsentDialogFooter";let x=({noStyle:o,legalLinks:i,hideBranding:a})=>t(h,{children:[t(D,{children:[e(y,{}),e(b,{legalLinks:i})]}),e(u,{children:e(r,{hideBranding:!0,noStyle:o,useProvider:!0})}),e(N,{hideBranding:a??!1,variant:"dialog-tag",slotContext:"dialog","data-testid":"consent-dialog-branding"})]}),H=h,k=D,v=y,K=b,B=u,F=j;export{N as Branding,H as Card,x as ConsentCustomizationCard,h as ConsentDialogCard,u as ConsentDialogContent,j as ConsentDialogFooter,D as ConsentDialogHeader,b as ConsentDialogHeaderDescription,y as ConsentDialogHeaderTitle,B as Content,F as Footer,k as Header,K as HeaderDescription,v as HeaderTitle};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/consent-dialog";import{useEffect as o,useState as r}from"react";import{useConsentManager as a}from"../../../component-hooks/use-manager.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as n}from"../../../ui-config-context.js";import{cnExt as l}from"../../../utils/cn.js";import{mergeSlotProps as s}from"../../../utils/merge-slot-props.js";let m=({noStyle:m,style:c,open:u})=>{let p,{activeUI:d}=a(),{components:y}=n(),{disableAnimation:f,noStyle:g,scrollLock:v=!0}=i(),j=u??"dialog"===d,[N,b]=r(!1);o(()=>{if(j){let e=requestAnimationFrame(()=>b(!0));return()=>cancelAnimationFrame(e)}if(f){let e=requestAnimationFrame(()=>b(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{b(!1)},Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--consent-dialog-animation-duration")||"200",10));return()=>clearTimeout(e)},[j,f]);let h="string"==typeof c?c:c?.className,A=s(y?.dialog?.overlay,{baseClassName:t.overlay,className:h,noStyle:g||m,style:"object"==typeof c&&"style"in c?c.style:void 0});p=g||m||f?void 0:N?t.overlayVisible:t.overlayHidden;let F=l(A.className,p);return e("div",{...A,role:"presentation","aria-hidden":"true",className:F,"data-testid":"consent-dialog-overlay"})},c=m;export{m as ConsentDialogOverlay,c as Overlay};
1
+ import{jsx as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/consent-dialog";import{useEffect as o,useState as r}from"react";import{useActiveUI as a}from"../../../hooks.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as l}from"../../../ui-config-context.js";import{cnExt as n}from"../../../utils/cn.js";import{mergeSlotProps as s}from"../../../utils/merge-slot-props.js";let m=({noStyle:m,style:c,open:u})=>{let d,p=a(),{components:y}=l(),{disableAnimation:f,noStyle:g,scrollLock:v=!0}=i(),j=u??"dialog"===p,[N,b]=r(!1);o(()=>{if(j){let e=requestAnimationFrame(()=>b(!0));return()=>cancelAnimationFrame(e)}if(f){let e=requestAnimationFrame(()=>b(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{b(!1)},Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--consent-dialog-animation-duration")||"200",10));return()=>clearTimeout(e)},[j,f]);let h="string"==typeof c?c:c?.className,A=s(y?.dialog?.overlay,{baseClassName:t.overlay,className:h,noStyle:g||m,style:"object"==typeof c&&"style"in c?c.style:void 0});d=g||m||f?void 0:N?t.overlayVisible:t.overlayHidden;let F=n(A.className,d);return e("div",{...A,role:"presentation","aria-hidden":"true",className:F,"data-testid":"consent-dialog-overlay"})},c=m;export{m as ConsentDialogOverlay,c as Overlay};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as o,jsx as e,jsxs as t}from"react/jsx-runtime";import{isDialogDismissKey as r}from"@c15t/ui/primitives/dialog";import i from"@c15t/ui/styles/components/consent-dialog";import{useEffect as n,useMemo as s,useRef as a,useState as l}from"react";import{createPortal as m}from"react-dom";import{useHeadlessConsentUI as c}from"../../../component-hooks/use-headless-consent-ui.js";import{useConsentManager as d}from"../../../component-hooks/use-manager.js";import{ConsentTrackingContext as u}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as p}from"../../../context/theme-context.js";import{useHasConsentUI as f}from"../../../hooks.js";import{useFocusTrap as g}from"../../../hooks/use-focus-trap.js";import{useIsHydrated as h}from"../../../hooks/use-is-hydrated.js";import{useScrollLock as k}from"../../../hooks/use-scroll-lock.js";import{useTextDirection as b}from"../../../hooks/use-text-direction.js";import{useTheme as j}from"../../../hooks/use-theme.js";import{useUIConfig as v}from"../../../ui-config-context.js";import{cnExt as y}from"../../../utils/cn.js";import{mergeSlotProps as x}from"../../../utils/merge-slot-props.js";import{Overlay as A}from"./overlay.js";let F=["opt-in","opt-out","none"],L=({children:L,open:N,models:S=F,noStyle:C,disableAnimation:q,scrollLock:w,trapFocus:D,overlay:E,uiSource:H,className:I,style:P,...R})=>{var T;let V,z,B,G=j(),{components:J}=v(),{activeUI:K,translationConfig:M,model:O}=d(),{closeUI:Q,dialog:U}=c({preferences:{scrollLock:w,trapFocus:D}}),{disableAnimation:W,noStyle:X,scrollLock:Y,trapFocus:Z}=(V=G.disableAnimation,z=G.noStyle,{disableAnimation:q??V??!1,noStyle:C??z??!1,scrollLock:B=U.blocking,trapFocus:B}),$=b(M.defaultLanguage),_=(T=f(),!!T&&!!S.includes(O)&&(N??"dialog"===K)),[oo,oe]=l(!1),ot=a(null),or=a(null),oi=h(),on=G.theme?.motion?.duration?.normal;n(()=>{if(_){let o=requestAnimationFrame(()=>oe(!0));return()=>cancelAnimationFrame(o)}if(W){let o=requestAnimationFrame(()=>oe(!1));return()=>cancelAnimationFrame(o)}let o=setTimeout(()=>oe(!1),Number.parseInt((on||"200ms").replace("ms",""),10));return()=>clearTimeout(o)},[_,W,on]),g(_&&Z,or),n(()=>{if(!_)return;let o=o=>{r(o.key)&&(o.preventDefault(),Q())};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[Q,_]),k(_&&Y);let os=W?i.root:y(i.root,oo?i.dialogVisible:i.dialogHidden),oa=x(J?.dialog?.root,{baseClassName:os,className:I,noStyle:X,style:P,...R}),ol=x(J?.dialog?.container,{baseClassName:y(i.container,!W&&(oo?i.contentVisible:i.contentHidden)),noStyle:X}),om=s(()=>({disableAnimation:W,noStyle:X,scrollLock:Y,theme:G.theme,trapFocus:Z}),[W,G.theme,X,Y,Z]),oc=s(()=>({uiSource:H??"dialog"}),[H]),od=U.blocking?"true":void 0,ou=e(u.Provider,{value:oc,children:e(p.Provider,{value:om,children:_&&t(o,{children:[U.blocking&&!1!==E?E??e(A,{open:_}):null,e("div",{ref:ot,"data-slot":"dialog-positioner","data-blocking":od,...oa,className:oa.className,children:e("div",{ref:or,...ol,"aria-describedby":"consent-dialog-description","aria-labelledby":"consent-dialog-title","aria-modal":Z?"true":void 0,"data-blocking":od,"data-testid":"consent-dialog-root",dir:$,role:"dialog",tabIndex:-1,children:L})})]})})});return oi?m(ou,document.body):null},N=L;export{L as ConsentDialogRoot,N as Root};
2
+ import{Fragment as o,jsx as e,jsxs as t}from"react/jsx-runtime";import{isDialogDismissKey as r}from"@c15t/ui/primitives/dialog";import i from"@c15t/ui/styles/components/consent-dialog";import{useEffect as n,useMemo as s,useRef as l,useState as a}from"react";import{createPortal as m}from"react-dom";import{useHeadlessConsentUI as c}from"../../../component-hooks/use-headless-consent-ui.js";import{ConsentTrackingContext as d}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as u}from"../../../context/theme-context.js";import{useActiveUI as p,useHasConsentUI as f,useModel as b}from"../../../hooks.js";import{useFocusTrap as g}from"../../../hooks/use-focus-trap.js";import{useIsHydrated as k}from"../../../hooks/use-is-hydrated.js";import{useScrollLock as h}from"../../../hooks/use-scroll-lock.js";import{useTextDirection as j}from"../../../hooks/use-text-direction.js";import{useTheme as v}from"../../../hooks/use-theme.js";import{useTranslationLanguage as y}from"../../../kernel-selector.js";import{useUIConfig as x}from"../../../ui-config-context.js";import{cnExt as F}from"../../../utils/cn.js";import{mergeSlotProps as A}from"../../../utils/merge-slot-props.js";import{Overlay as L}from"./overlay.js";let N=["opt-in","opt-out","none"],S=({children:S,open:C,models:q=N,noStyle:w,disableAnimation:D,scrollLock:E,trapFocus:H,overlay:I,uiSource:P,className:R,style:T,...V})=>{var z;let B,G,J,K=v(),{components:M}=x(),O=p(),Q=b(),U=y(),{closeUI:W,dialog:X}=c({preferences:{scrollLock:E,trapFocus:H}}),{disableAnimation:Y,noStyle:Z,scrollLock:$,trapFocus:_}=(B=K.disableAnimation,G=K.noStyle,{disableAnimation:D??B??!1,noStyle:w??G??!1,scrollLock:J=X.blocking,trapFocus:J}),oo=j(U),oe=(z=f(),!!z&&!!q.includes(Q??"opt-in")&&(C??"dialog"===O)),[ot,or]=a(!1),oi=l(null),on=l(null),os=k(),ol=K.theme?.motion?.duration?.normal;n(()=>{if(oe){let o=requestAnimationFrame(()=>or(!0));return()=>cancelAnimationFrame(o)}if(Y){let o=requestAnimationFrame(()=>or(!1));return()=>cancelAnimationFrame(o)}let o=setTimeout(()=>or(!1),Number.parseInt((ol||"200ms").replace("ms",""),10));return()=>clearTimeout(o)},[oe,Y,ol]),g(oe&&_,on,{initialFocus:"first-tabbable"}),n(()=>{if(!oe)return;let o=o=>{r(o.key)&&(o.preventDefault(),W())};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[W,oe]),h(oe&&$);let oa=Y?i.root:F(i.root,ot?i.dialogVisible:i.dialogHidden),om=A(M?.dialog?.root,{baseClassName:oa,className:R,noStyle:Z,style:T,...V}),oc=A(M?.dialog?.container,{baseClassName:F(i.container,!Y&&(ot?i.contentVisible:i.contentHidden)),noStyle:Z}),od=s(()=>({disableAnimation:Y,noStyle:Z,scrollLock:$,theme:K.theme,trapFocus:_}),[Y,K.theme,Z,$,_]),ou=s(()=>({uiSource:P??"dialog"}),[P]),op=X.blocking?"true":void 0,of=e(d.Provider,{value:ou,children:e(u.Provider,{value:od,children:oe&&t(o,{children:[X.blocking&&!1!==I?I??e(L,{open:oe}):null,e("div",{ref:oi,"data-slot":"dialog-positioner","data-blocking":op,...om,className:om.className,children:e("div",{ref:on,...oc,"aria-describedby":"consent-dialog-description","aria-labelledby":"consent-dialog-title","aria-modal":_?"true":void 0,"data-blocking":op,"data-testid":"consent-dialog-root",dir:oo,role:"dialog",tabIndex:-1,children:S})})]})})});return os?m(of,document.body):null},C=S;export{S as ConsentDialogRoot,C as Root};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Card as o,ConsentCustomizationCard as e,ConsentDialogContent as t,ConsentDialogFooter as n,ConsentDialogHeader as a,ConsentDialogHeaderDescription as r,ConsentDialogHeaderTitle as i,Content as s,Footer as l,Header as C,HeaderDescription as d,HeaderTitle as D}from"./atoms/card.js";import{ConsentDialogOverlay as g,Overlay as m}from"./atoms/overlay.js";import{ConsentDialogRoot as p,Root as H}from"./atoms/root.js";import{ConsentDialog as c}from"./panel.js";let f=Object.assign(c,{Card:o,ConsentCustomizationCard:e,ConsentDialogContent:t,ConsentDialogFooter:n,ConsentDialogHeader:a,ConsentDialogHeaderDescription:r,ConsentDialogHeaderTitle:i,Content:s,Footer:l,Header:C,HeaderDescription:d,HeaderTitle:D,Overlay:m,Root:H});export default f;export{o as Card,e as ConsentCustomizationCard,t as ConsentDialogContent,n as ConsentDialogFooter,a as ConsentDialogHeader,r as ConsentDialogHeaderDescription,i as ConsentDialogHeaderTitle,g as ConsentDialogOverlay,p as ConsentDialogRoot,s as Content,l as Footer,C as Header,d as HeaderDescription,D as HeaderTitle,m as Overlay,H as Root,f as ConsentDialog};
2
+ import"@c15t/ui/styles/dialog";import{Card as o,ConsentCustomizationCard as e,ConsentDialogContent as t,ConsentDialogFooter as n,ConsentDialogHeader as a,ConsentDialogHeaderDescription as r,ConsentDialogHeaderTitle as i,Content as s,Footer as l,Header as C,HeaderDescription as d,HeaderTitle as D}from"./atoms/card.js";import{ConsentDialogOverlay as g,Overlay as m}from"./atoms/overlay.js";import{ConsentDialogRoot as p,Root as H}from"./atoms/root.js";import{ConsentDialog as c}from"./panel.js";let f=Object.assign(c,{Card:o,ConsentCustomizationCard:e,ConsentDialogContent:t,ConsentDialogFooter:n,ConsentDialogHeader:a,ConsentDialogHeaderDescription:r,ConsentDialogHeaderTitle:i,Content:s,Footer:l,Header:C,HeaderDescription:d,HeaderTitle:D,Overlay:m,Root:H});export default f;export{o as Card,e as ConsentCustomizationCard,t as ConsentDialogContent,n as ConsentDialogFooter,a as ConsentDialogHeader,r as ConsentDialogHeaderDescription,i as ConsentDialogHeaderTitle,g as ConsentDialogOverlay,p as ConsentDialogRoot,s as Content,l as Footer,C as Header,d as HeaderDescription,D as HeaderTitle,m as Overlay,H as Root,f as ConsentDialog};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as o,jsx as r,jsxs as n}from"react/jsx-runtime";import{useConsentManager as t}from"../../component-hooks/use-manager.js";import{ConsentDialogTrigger as e}from"../panel-trigger/index.js";import{useComponentConfig as i}from"../../hooks/use-component-config.js";import{ConsentCustomizationCard as l}from"./atoms/card.js";import{Root as m}from"./atoms/root.js";let s=({open:s,noStyle:a,disableAnimation:c,scrollLock:p,trapFocus:d,hideBranding:g,legalLinks:f,showTrigger:u=!1,models:j,uiSource:h})=>{let{activeUI:k}=t(),y={open:s??"dialog"===k,...i({disableAnimation:c,noStyle:a}),models:j,scrollLock:p,trapFocus:d,uiSource:h},S=!0===u?{}:!1===u?null:u;return n(o,{children:[S&&r(e,{...S}),r(m,{...y,children:r(l,{noStyle:y.noStyle,legalLinks:f,hideBranding:g})})]})};export{s as ConsentDialog};
2
+ import{Fragment as o,jsx as r,jsxs as t}from"react/jsx-runtime";import{ConsentDialogTrigger as n}from"../panel-trigger/index.js";import{useActiveUI as e}from"../../hooks.js";import{useComponentConfig as i}from"../../hooks/use-component-config.js";import{ConsentCustomizationCard as l}from"./atoms/card.js";import{Root as s}from"./atoms/root.js";let m=({open:m,noStyle:a,disableAnimation:c,scrollLock:p,trapFocus:d,hideBranding:f,legalLinks:g,showTrigger:j=!1,models:u,uiSource:h})=>{let k=e(),y={open:m??"dialog"===k,...i({disableAnimation:c,noStyle:a}),models:u,scrollLock:p,trapFocus:d,uiSource:h},S=!0===j?{}:!1===j?null:j;return t(o,{children:[S&&r(n,{...S}),r(s,{...y,children:r(l,{noStyle:y.noStyle,legalLinks:g,hideBranding:f})})]})};export{m as ConsentDialog};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/consent-dialog-trigger";import{forwardRef as r}from"react";import{usePolicyRule as e}from"../../../hooks.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as g}from"../../../ui-config-context.js";import{mergeSlotProps as s}from"../../../utils/merge-slot-props.js";import{useTriggerContext as m}from"./root.js";let n={"bottom-left":o.bottomLeft,"bottom-right":o.bottomRight,"top-left":o.topLeft,"top-right":o.topRight},a={lg:o.lg,md:o.md,sm:o.sm},l=r(({children:r,size:l="md",ariaLabel:p="Open privacy settings",className:d,"data-testid":f="consent-dialog-trigger",noStyle:c},u)=>{let h=e(),{components:b}=g(),{noStyle:j}=i(),{corner:y,isDragging:k,isSnapping:x,wasDragged:C,handlers:B,dragStyle:L,openDialog:N}=m(),R=s(b?.trigger?.root,{baseClassName:[o.trigger,n[y],a[l],k&&o.dragging,x&&o.snapping],className:d,"data-testid":f,noStyle:c??j,style:L,...B});return t("button",{...R,ref:u,type:"button","data-c15t-trigger":"true","data-c15t-rights":h.rights.join(" "),"aria-label":p,onClick:t=>{0!==t.detail&&C()||N()},children:r})});l.displayName="ConsentDialogTrigger.Button";export{l as TriggerButton};
2
+ import{jsx as t}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/consent-dialog-trigger";import{forwardRef as r}from"react";import{useIdleDialogWarming as e,warmDialogChunk as i}from"../../../chunk-warming.js";import{usePolicyRule as n}from"../../../hooks.js";import{useTheme as s}from"../../../hooks/use-theme.js";import{useUIConfig as m}from"../../../ui-config-context.js";import{mergeSlotProps as g}from"../../../utils/merge-slot-props.js";import{useTriggerContext as a}from"./root.js";let l={"bottom-left":o.bottomLeft,"bottom-right":o.bottomRight,"top-left":o.topLeft,"top-right":o.topRight},p={lg:o.lg,md:o.md,sm:o.sm},d=r(({children:r,size:d="md",ariaLabel:c="Open privacy settings",className:f,"data-testid":u="consent-dialog-trigger",noStyle:h},b)=>{let j=n(),{components:y}=m(),{disableAnimation:k,noStyle:x}=s(),{corner:C,isDragging:v,isSnapping:B,wasDragged:E,handlers:F,dragStyle:L,openDialog:N}=a();e(!0);let P=g(y?.trigger?.root,{baseClassName:[o.trigger,l[C],p[d],v&&o.dragging,B&&o.snapping],className:f,"data-testid":u,noStyle:h??x,style:L,...F});return t("button",{...P,ref:b,type:"button","data-c15t-trigger":"true","data-c15t-rights":j.rights.join(" "),"data-disable-animation":k?"":void 0,"aria-label":c,onClick:t=>{0!==t.detail&&E()||N()},onFocus:t=>{P.onFocus?.(t),i()},onPointerEnter:t=>{P.onPointerEnter?.(t),i()},children:r})});d.displayName="ConsentDialogTrigger.Button";export{d as TriggerButton};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as r}from"react/jsx-runtime";import e from"@c15t/ui/styles/components/consent-dialog-trigger";import{isValidElement as o}from"react";import{BrandingCompactLogo as i}from"../../shared/ui/branding.js";import{FingerprintIcon as t,SettingsIcon as n}from"../../shared/ui/logo.js";import{useTheme as s}from"../../../hooks/use-theme.js";import{useUIConfig as a}from"../../../ui-config-context.js";import{mergeSlotProps as m}from"../../../utils/merge-slot-props.js";import{useTriggerContext as g}from"./root.js";let p=({icon:p="branding",className:c,noStyle:l})=>{let d,{components:f}=a(),{noStyle:u}=s(),{branding:h}=g(),j=m(f?.trigger?.icon,{baseClassName:e.icon,className:c,noStyle:l??u});if(o(p))return r("span",{...j,"aria-hidden":"true",children:p});switch(p){case"fingerprint":d=r(t,{});break;case"settings":d=r(n,{});break;default:d=r(i,{branding:h})}return r("span",{...j,"aria-hidden":"true",children:d})};p.displayName="ConsentDialogTrigger.Icon";export{p as TriggerIcon};
2
+ import{jsx as r}from"react/jsx-runtime";import e from"@c15t/ui/styles/components/consent-dialog-trigger";import{isValidElement as i}from"react";import{BrandingCompactLogo as o}from"../../shared/ui/branding.js";import{useTheme as t}from"../../../hooks/use-theme.js";import{useUIConfig as n}from"../../../ui-config-context.js";import{mergeSlotProps as s}from"../../../utils/merge-slot-props.js";import{useTriggerContext as a}from"./root.js";import{FingerprintIcon as m,SettingsIcon as g}from"./trigger-icons.js";let c=({icon:c="branding",className:p,noStyle:l})=>{let d,{components:f}=n(),{noStyle:u}=t(),{branding:h}=a(),j=s(f?.trigger?.icon,{baseClassName:e.icon,className:p,noStyle:l??u});if(i(c))return r("span",{...j,"aria-hidden":"true",children:c});switch(c){case"fingerprint":d=r(m,{});break;case"settings":d=r(g,{});break;default:d=r(o,{branding:h})}return r("span",{...j,"aria-hidden":"true",children:d})};c.displayName="ConsentDialogTrigger.Icon";export{c as TriggerIcon};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as o}from"react/jsx-runtime";import{createContext as r,useContext as e,useMemo as t}from"react";import{createPortal as i}from"react-dom";import{useConsentManager as s}from"../../../component-hooks/use-manager.js";import{useConsentDialogTrigger as n}from"../../../component-hooks/use-panel-trigger.js";import{useIsHydrated as m}from"../../../hooks/use-is-hydrated.js";import{useDraggable as g}from"../use-draggable.js";let a=r(null),l=function(){let o=e(a);if(!o)throw Error("ConsentDialogTrigger components must be used within a ConsentDialogTrigger.Root");return o},u=({children:r,defaultPosition:e="bottom-right",persistPosition:l=!0,showWhen:u="always",visible:p,onPositionChange:d,onClick:c})=>{let{branding:f}=s(),{isVisible:h,openDialog:T}=n({onClick:c,showWhen:u}),C=p??h,{corner:b,isDragging:j,isSnapping:x,wasDragged:y,handlers:k,dragStyle:w}=g({defaultPosition:e,onPositionChange:d,persistPosition:l}),D=m(),P=t(()=>({branding:f,corner:b,dragStyle:w,handlers:k,isDragging:j,isSnapping:x,isVisible:C,openDialog:T,wasDragged:y}),[f,b,w,k,j,x,C,T,y]);return D&&C?i(o(a.Provider,{value:P,children:r}),document.body):null};u.displayName="ConsentDialogTrigger.Root";export{a as TriggerContext,u as TriggerRoot,l as useTriggerContext};
2
+ import{jsx as o}from"react/jsx-runtime";import{createContext as r,useContext as t,useMemo as e}from"react";import{createPortal as i}from"react-dom";import{useConsentDialogTrigger as s}from"../../../component-hooks/use-panel-trigger.js";import{useBranding as n}from"../../../hooks.js";import{useIsHydrated as g}from"../../../hooks/use-is-hydrated.js";import{useDraggable as m}from"../use-draggable.js";let a=r(null),l=function(){let o=t(a);if(!o)throw Error("ConsentDialogTrigger components must be used within a ConsentDialogTrigger.Root");return o},u=({children:r,defaultPosition:t="bottom-right",persistPosition:l=!0,showWhen:u="always",visible:p,onPositionChange:d,onClick:c})=>{let f=n()??"c15t",{isVisible:h,openDialog:T}=s({onClick:c,showWhen:u}),C=p??h,{corner:b,isDragging:j,isSnapping:x,wasDragged:y,handlers:k,dragStyle:w}=m({defaultPosition:t,onPositionChange:d,persistPosition:l}),D=g(),P=e(()=>({branding:f,corner:b,dragStyle:w,handlers:k,isDragging:j,isSnapping:x,isVisible:C,openDialog:T,wasDragged:y}),[f,b,w,k,j,x,C,T,y]);return D&&C?i(o(a.Provider,{value:P,children:r}),document.body):null};u.displayName="ConsentDialogTrigger.Root";export{a as TriggerContext,u as TriggerRoot,l as useTriggerContext};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import{createElement as t,useMemo as r,useRef as o,useState as i}from"react";import n from"@c15t/ui/styles/components/consent-dialog-trigger";import{useTranslations as s}from"../../../component-hooks/use-translations.js";import{usePolicyRule as a}from"../../../hooks.js";import{useTheme as l}from"../../../hooks/use-theme.js";import{useUIConfig as d}from"../../../ui-config-context.js";import{mergeSlotProps as c}from"../../../utils/merge-slot-props.js";import{TriggerIcon as g}from"./icon.js";import{useTriggerContext as m}from"./root.js";let f={"bottom-left":n.bottomLeft,"bottom-right":n.bottomRight,"top-left":n.topLeft,"top-right":n.topRight},p={lg:n.lg,md:n.md,sm:n.sm},u=function(){let e=a(),{rights:t}=s();return r(()=>{let r=e.rights.includes("opt-out")?"opt-out":"preferences";return{label:"opt-out"===r&&e.i18n?.messageProfile!=="preferences"?t?.optOut??"Do not sell or share my data":t?.preferences??"Manage preferences",right:r,rights:e.rights.join(" ")}},[e.rights,e.i18n?.messageProfile,t])},b=function(e,t,r,o,i){let n=e.map(e=>({...e,focusId:`custom:${e.id}`,kind:"custom"}));return i?[...n,{className:t.className,focusId:"preferences",icon:t.icon??"branding",id:"preferences",kind:"preferences",label:t.label??o,onSelect:t.onSelect,right:r,style:t.style}]:n},h=function(e,t,r){let o=e.find(e=>"preferences"===e.kind);if(!o)return e;let i=e.filter(e=>"custom"===e.kind);return("horizontal"===t?r.endsWith("left"):r.startsWith("top"))?[o,...i]:[...i,o]},y=({actions:s,preferences:a,size:y="md",orientation:k="horizontal",ariaLabel:I="Privacy controls",showPreferences:v=!0,className:j,style:N,noStyle:S=!1})=>{let{components:w}=d(),{noStyle:x}=l(),{label:C,right:D,rights:A}=u(),{corner:T,isDragging:L,isSnapping:P,wasDragged:R,handlers:z,dragStyle:E,openDialog:H}=m(),M=r(()=>h(b(s,a,D,C,v),k,T),[s,T,C,k,a,D,v]),W=M.find(e=>!e.disabled)?.focusId,[B,F]=i(W),K=o(new Map),O=S||x,U=c(w?.trigger?.toolbar,{baseClassName:[n.toolbar,"vertical"===k&&n.toolbarVertical,f[T],L&&n.dragging,P&&n.snapping],className:j,noStyle:O,style:N}),V=c(w?.trigger?.toolbarItem,{baseClassName:[n.toolbarItem,p[y]],noStyle:O}),$=c(w?.trigger?.toolbarIcon,{baseClassName:n.toolbarIcon,noStyle:O}),q=M.some(e=>e.focusId===B&&!e.disabled)?B:W;return e("div",{...U,"aria-label":I,"aria-orientation":k,"data-corner":T,"data-c15t-trigger-toolbar":"true","data-c15t-trigger":"true","data-dragging":L||void 0,"data-snapping":P||void 0,dir:"ltr",onKeyDown:e=>{let t,r="vertical"===k?"ArrowDown":"ArrowRight",o="vertical"===k?"ArrowUp":"ArrowLeft";if(e.key!==r&&e.key!==o&&"Home"!==e.key&&"End"!==e.key)return;let i=M.filter(e=>!e.disabled);if(0===i.length)return;e.preventDefault();let n=i.findIndex(e=>e.focusId===q);t="Home"===e.key?0:"End"===e.key?i.length-1:e.key===r?(n+1)%i.length:(n-1+i.length)%i.length;let s=i[t];s&&(F(s.focusId),K.current.get(s.focusId)?.focus())},role:"toolbar",style:{...U.style,...E},tabIndex:-1,...z,children:M.map(r=>t("button",{...V,key:r.focusId,ref:e=>{e?K.current.set(r.focusId,e):K.current.delete(r.focusId)},"aria-label":r.label,"aria-pressed":"custom"===r.kind?r.pressed:void 0,className:[V.className,r.className].filter(Boolean).join(" "),"data-c15t-rights":"preferences"===r.kind?A:void 0,"data-c15t-trigger-action":r.kind,"data-c15t-trigger-item":r.id,"data-right":"preferences"===r.kind?r.right:void 0,disabled:r.disabled,onClick:e=>{!(0!==e.detail&&R())&&(r.onSelect?.(),"preferences"===r.kind&&H())},onFocus:()=>F(r.focusId),style:{...V.style,...r.style},tabIndex:r.focusId===q?0:-1,type:"button"},e("span",{...$,"aria-hidden":"true",children:e(g,{icon:r.icon,noStyle:O})})))})};y.displayName="ConsentDialogTriggerToolbar";export{y as TriggerToolbar};
2
+ import{jsx as e}from"react/jsx-runtime";import{createElement as t,useMemo as r,useRef as o,useState as i}from"react";import n from"@c15t/ui/styles/components/consent-dialog-trigger";import{useTranslations as a}from"../../../component-hooks/use-translations.js";import{usePolicyRule as s}from"../../../hooks.js";import{useTheme as l}from"../../../hooks/use-theme.js";import{useUIConfig as d}from"../../../ui-config-context.js";import{mergeSlotProps as c}from"../../../utils/merge-slot-props.js";import{TriggerIcon as g}from"./icon.js";import{useTriggerContext as m}from"./root.js";let f={"bottom-left":n.bottomLeft,"bottom-right":n.bottomRight,"top-left":n.topLeft,"top-right":n.topRight},p={lg:n.lg,md:n.md,sm:n.sm},u=function(){let e=s(),{rights:t}=a();return r(()=>{let r=e.rights.includes("opt-out")?"opt-out":"preferences";return{label:"opt-out"===r&&e.i18n?.messageProfile!=="preferences"?t?.optOut??"Do not sell or share my data":t?.preferences??"Manage preferences",right:r,rights:e.rights.join(" ")}},[e.rights,e.i18n?.messageProfile,t])},b=function(e,t,r,o,i){let n=e.map(e=>({...e,focusId:`custom:${e.id}`,kind:"custom"}));return i?[...n,{className:t.className,focusId:"preferences",icon:t.icon??"branding",id:"preferences",kind:"preferences",label:t.label??o,onSelect:t.onSelect,right:r,style:t.style}]:n},h=function(e,t,r){let o=e.find(e=>"preferences"===e.kind);if(!o)return e;let i=e.filter(e=>"custom"===e.kind);return("horizontal"===t?r.endsWith("left"):r.startsWith("top"))?[o,...i]:[...i,o]},y=({actions:a,preferences:s,size:y="md",orientation:k="horizontal",ariaLabel:I="Privacy controls",showPreferences:v=!0,className:j,style:N,noStyle:S=!1})=>{let{components:w}=d(),{disableAnimation:x,noStyle:C}=l(),{label:D,right:A,rights:T}=u(),{corner:L,isDragging:P,isSnapping:R,wasDragged:z,handlers:E,dragStyle:H,openDialog:M}=m(),W=r(()=>h(b(a,s,A,D,v),k,L),[a,L,D,k,s,A,v]),B=W.find(e=>!e.disabled)?.focusId,[F,K]=i(B),O=o(new Map),U=S||C,V=c(w?.trigger?.toolbar,{baseClassName:[n.toolbar,"vertical"===k&&n.toolbarVertical,f[L],P&&n.dragging,R&&n.snapping],className:j,noStyle:U,style:N}),$=c(w?.trigger?.toolbarItem,{baseClassName:[n.toolbarItem,p[y]],noStyle:U}),q=c(w?.trigger?.toolbarIcon,{baseClassName:n.toolbarIcon,noStyle:U}),G=W.some(e=>e.focusId===F&&!e.disabled)?F:B;return e("div",{...V,"aria-label":I,"aria-orientation":k,"data-corner":L,"data-c15t-trigger-toolbar":"true","data-c15t-trigger":"true","data-disable-animation":x?"":void 0,"data-dragging":P||void 0,"data-snapping":R||void 0,dir:"ltr",onKeyDown:e=>{let t,r="vertical"===k?"ArrowDown":"ArrowRight",o="vertical"===k?"ArrowUp":"ArrowLeft";if(e.key!==r&&e.key!==o&&"Home"!==e.key&&"End"!==e.key)return;let i=W.filter(e=>!e.disabled);if(0===i.length)return;e.preventDefault();let n=i.findIndex(e=>e.focusId===G);t="Home"===e.key?0:"End"===e.key?i.length-1:e.key===r?(n+1)%i.length:(n-1+i.length)%i.length;let a=i[t];a&&(K(a.focusId),O.current.get(a.focusId)?.focus())},role:"toolbar",style:{...V.style,...H},tabIndex:-1,...E,children:W.map(r=>t("button",{...$,key:r.focusId,ref:e=>{e?O.current.set(r.focusId,e):O.current.delete(r.focusId)},"aria-label":r.label,"aria-pressed":"custom"===r.kind?r.pressed:void 0,className:[$.className,r.className].filter(Boolean).join(" "),"data-c15t-rights":"preferences"===r.kind?T:void 0,"data-c15t-trigger-action":r.kind,"data-c15t-trigger-item":r.id,"data-right":"preferences"===r.kind?r.right:void 0,disabled:r.disabled,onClick:e=>{!(0!==e.detail&&z())&&(r.onSelect?.(),"preferences"===r.kind&&M())},onFocus:()=>K(r.focusId),style:{...$.style,...r.style},tabIndex:r.focusId===G?0:-1,type:"button"},e("span",{...q,"aria-hidden":"true",children:e(g,{icon:r.icon,noStyle:U})})))})};y.displayName="ConsentDialogTriggerToolbar";export{y as TriggerToolbar};
@@ -0,0 +1 @@
1
+ import{jsx as a,jsxs as t}from"react/jsx-runtime";let e=({title:e="Privacy",titleId:l="fingerprint-icon",...r})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-labelledby":l,...r,children:[a("title",{id:l,children:e}),a("path",{d:"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"}),a("path",{d:"M14 13.12c0 2.38 0 6.38-1 8.88"}),a("path",{d:"M17.29 21.02c.12-.6.43-2.3.5-3.02"}),a("path",{d:"M2 12a10 10 0 0 1 18-6"}),a("path",{d:"M2 16h.01"}),a("path",{d:"M21.8 16c.2-2 .131-5.354 0-6"}),a("path",{d:"M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"}),a("path",{d:"M8.65 22c.21-.66.45-1.32.57-2"}),a("path",{d:"M9 6.8a6 6 0 0 1 9 5.2v2"})]}),l=({title:e="Settings",titleId:l="settings-icon",...r})=>t("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-labelledby":l,...r,children:[a("title",{id:l,children:e}),a("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),a("circle",{cx:"12",cy:"12",r:"3"})]});export{e as FingerprintIcon,l as SettingsIcon};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as o}from"react/jsx-runtime";import{useHasConsentUI as r,usePromptRequirement as e}from"../../hooks.js";import{TriggerRoot as t}from"./atoms/root.js";import{TriggerToolbar as i}from"./atoms/toolbar.js";let s=[],n={},a=({actions:a=s,preferences:l=n,orientation:m="horizontal",defaultPosition:p="bottom-right",persistPosition:g=!0,ariaLabel:c="Privacy controls",showWhen:f="always",size:h="md",className:b,style:d,noStyle:y=!1,onPositionChange:P})=>{let j=e(),T=r(),u="after-prompt"!==f||"none"===j.kind,v=T&&"never"!==f&&u;return o(t,{defaultPosition:p,onPositionChange:P,persistPosition:g,visible:a.length>0||v,children:o(i,{actions:a,ariaLabel:c,className:b,noStyle:y,orientation:m,preferences:l,showPreferences:v,size:h,style:d})})};a.displayName="ConsentDialogTriggerToolbar";export{a as ConsentDialogTriggerToolbar};
2
+ import{jsx as o}from"react/jsx-runtime";import{useHasConsentPreferences as r,usePromptRequirement as e}from"../../hooks.js";import{TriggerRoot as t}from"./atoms/root.js";import{TriggerToolbar as i}from"./atoms/toolbar.js";let s=[],n={},a=({actions:a=s,preferences:l=n,orientation:m="horizontal",defaultPosition:p="bottom-right",persistPosition:g=!0,ariaLabel:c="Privacy controls",showWhen:f="always",size:h="md",className:b,style:d,noStyle:y=!1,onPositionChange:P})=>{let j=e(),T=r(),u="after-prompt"!==f||"none"===j.kind,v=T&&"never"!==f&&u;return o(t,{defaultPosition:p,onPositionChange:P,persistPosition:g,visible:a.length>0||v,children:o(i,{actions:a,ariaLabel:c,className:b,noStyle:y,orientation:m,preferences:l,showPreferences:v,size:h,style:d})})};a.displayName="ConsentDialogTriggerToolbar";export{a as ConsentDialogTriggerToolbar};
@@ -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{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};
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 a,useMemo as c}from"react";import{useTranslations as d}from"../../../component-hooks/use-translations.js";import{Box as s}from"../../shared/primitives/box.js";import{LucideIcon as l}from"../../shared/ui/icon.js";import{useConsentDraftSlice as m,useConsentDraftStore as p}from"../../../draft.js";import{useExplicitChoice as g,useRestrictions as u}from"../../../hooks.js";import{useTheme as y}from"../../../hooks/use-theme.js";import{useDisplayedCategories as h}from"../../../kernel-selector.js";import{ConsentWidgetVendorList as f}from"./vendor-list.js";import*as w from"../../shared/ui/preference-item/index.js";import*as C from"../../shared/ui/switch/index.js";let v=[{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"}],A=n(null),S=function(){let e=a(A);if(!e)throw Error("ConsentWidgetAccordion components must be used within ConsentWidgetAccordion");return e},N=i(({children:t,...n},i)=>e(s,{ref:i,baseClassName:o.triggerRow,...n,children:t}));N.displayName="ConsentWidgetAccordionTrigger";let b=w.Trigger,T=w.Content,W=w.Leading,j=C.Root,I=({"data-testid":t,children:n,className:i,noStyle:a,onValueChange:d,style:l,type:m="multiple",value:p,...g})=>{let{noStyle:u}=y(),h=a??u,f=c(()=>Array.isArray(p)?p:p?[p]:[],[p]),w=r((e,t)=>{if("single"===m)return void d?.(t?e:"");let o=t?[...new Set([...f,e])]:f.filter(t=>t!==e);d?.(o)},[d,f,m]),C=c(()=>({noStyle:h,onToggleItem:w,openValues:f}),[h,w,f]);return e(A.Provider,{value:C,children:e(s,{className:i,"data-testid":t??"consent-widget-accordion",noStyle:a,style:l,slotKey:"accordion.root",baseClassName:o.list,...g,children:n})})},K=l({iconPath:e("path",{d:"M5 12h14M12 5v14"})}),V=l({iconPath:e("path",{d:"M5 12h14"})}),k=({consent:n,title:i,description:r,restricted:a,open:c,noStyle:d,onToggleItem:s})=>{let l=p(),g=m(l,e=>e.values[n.name]);return t(w.Root,{className:d?void 0:o.item,"data-testid":`consent-widget-accordion-item-${n.name}`,noStyle:!0,onOpenChange:e=>s(n.name,e),open:c,slotKey:"accordion-item.root",children:[t(N,{slotKey:"accordion.triggerRow",children:[t(b,{className:d?void 0:o.trigger,"data-testid":`consent-widget-accordion-trigger-${n.name}`,noStyle:!0,slotKey:"accordion-item.trigger",children:[e(W,{className:d?void 0:o.arrow,"data-testid":`consent-widget-accordion-arrow-${n.name}`,noStyle:!0,slotKey:"accordion.arrow",children:c?e(V,{"aria-hidden":"true"}):e(K,{"aria-hidden":"true"})}),e(w.Header,{noStyle:!0,slotKey:"accordion.header",children:e(w.Title,{className:d?void 0:o.title,noStyle:!0,slotKey:"accordion.title",children:i})})]}),e(w.Control,{className:d?void 0:o.control,noStyle:!0,slotKey:"accordion.control",children:e(j,{"aria-label":i,checked:g,"aria-describedby":a?`c15t-restriction-${n.name}`:void 0,onCheckedChange:e=>l.set(n.name,e),disabled:n.disabled,size:"small","data-testid":`consent-widget-switch-${n.name}`})})]}),a?e("output",{className:d?void 0:o.restriction,"data-testid":`consent-widget-restriction-${n.name}`,id:`c15t-restriction-${n.name}`,children:"Your saved choice is restricted by the current privacy settings."}):null,t(T,{className:d?void 0:o.content,"data-testid":`consent-widget-accordion-content-${n.name}`,innerClassName:d?void 0:o.contentInner,innerSlotKey:"accordion.contentInner",slotKey:"accordion-item.content",viewportClassName:d?void 0:o.contentViewport,viewportSlotKey:"accordion.contentViewport",children:[r,e(f,{category:n.name,noStyle:d})]})]})},$=()=>{let t=h(),o=g(),n=u(),i=function(e){if("necessary"===e)return!1;let t=o?.categories[e];return t?.value===!0&&(n[e]?.length??0)>0},{noStyle:r,onToggleItem:a,openValues:s}=S(),{consentTypes:l}=d();return c(()=>{let e=new Set(t);return v.filter(t=>e.has(t.name))},[t]).map(t=>e(k,{consent:t,description:l[t.name]?.description??t.description,noStyle:r,onToggleItem:a,open:s.includes(t.name),restricted:i(t.name),title:l[t.name]?.title??t.name.replace(/_/gu," ").replace(/\b\w/gu,e=>e.toUpperCase())},t.name))},x=i(({className:t,...n},i)=>e(w.Root,{ref:i,className:[o.item,t].filter(Boolean).join(" "),noStyle:!0,...n}));x.displayName="ConsentWidgetAccordionItem";let R=b,L=N,M=T,P=W,E=I,q=j,z=$,B=x,H=f;export{E as Accordion,P as AccordionArrow,M as AccordionContent,B as AccordionItem,z as AccordionItems,L as AccordionTrigger,R as AccordionTriggerInner,I as ConsentWidgetAccordion,W as ConsentWidgetAccordionArrow,T as ConsentWidgetAccordionContent,x as ConsentWidgetAccordionItem,$ as ConsentWidgetAccordionItems,N as ConsentWidgetAccordionTrigger,b as ConsentWidgetAccordionTriggerInner,j as ConsentWidgetSwitch,f as ConsentWidgetVendorList,q as Switch,H as VendorList};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as e}from"react/jsx-runtime";import o from"@c15t/ui/styles/components/consent-manager";import{useMemo as r}from"react";import{useConsentManager as t}from"../../../component-hooks/use-manager.js";import{Box as i}from"../../shared/primitives/box.js";import{ConsentTrackingContext as n,useConsentTracking as m}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as s}from"../../../context/theme-context.js";import{ConsentDraftProvider as a}from"../../../draft.js";import{useHasConsentUI as c}from"../../../hooks.js";import{useTextDirection as d}from"../../../hooks/use-text-direction.js";let l=({children:l,noStyle:u=!1,disableAnimation:p=!1,useProvider:f=!0,uiSource:h})=>{let{translationConfig:g}=t(),j=d(g.defaultLanguage),x=m(),v=r(()=>({disableAnimation:p,noStyle:u}),[p,u]),k=h??x.uiSource??"widget",P=r(()=>({uiSource:k}),[k]);if(!c())return null;let b=e(i,{baseClassName:o.manager,"data-testid":"consent-widget-root",slotKey:"manager.root",dir:j,children:l});return f?e(n.Provider,{value:P,children:e(s.Provider,{value:v,children:e(a,{children:b})})}):e(n.Provider,{value:P,children:e(a,{children:b})})},u=l;export{l as ConsentWidgetRoot,u as Root};
2
+ import{jsx as r}from"react/jsx-runtime";import e from"@c15t/ui/styles/components/consent-manager";import{useMemo as t}from"react";import{Box as o}from"../../shared/primitives/box.js";import{ConsentTrackingContext as i,useConsentTracking as n}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as m}from"../../../context/theme-context.js";import{ConsentDraftProvider as s}from"../../../draft.js";import{useHasConsentUI as c}from"../../../hooks.js";import{useTextDirection as a}from"../../../hooks/use-text-direction.js";import{useTranslationLanguage as l}from"../../../kernel-selector.js";let d=({children:d,noStyle:p=!1,disableAnimation:u=!1,useProvider:f=!0,uiSource:h})=>{let j=a(l()),x=n(),g=t(()=>({disableAnimation:u,noStyle:p}),[u,p]),v=h??x.uiSource??"widget",k=t(()=>({uiSource:v}),[v]);if(!c())return null;let P=r(o,{baseClassName:e.manager,"data-testid":"consent-widget-root",slotKey:"manager.root",dir:j,children:d});return f?r(i.Provider,{value:k,children:r(m.Provider,{value:g,children:r(s,{children:P})})}):r(i.Provider,{value:k,children:r(s,{children:P})})},p=d;export{d as ConsentWidgetRoot,p as Root};
@@ -1 +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
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{vendorsListedUnder as o}from"@c15t/core";import n from"@c15t/ui/styles/components/vendor-list";import{useId as r,useMemo as i,useState as s}from"react";import{useTranslations as l}from"../../../component-hooks/use-translations.js";import{Box as d}from"../../shared/primitives/box.js";import{useConsentDraftSlice as a,useConsentDraftStore as c}from"../../../draft.js";import{useDeclaredVendors as h}from"../../../hooks.js";import{useTheme as m}from"../../../hooks/use-theme.js";import*as y from"../../shared/ui/preference-item/index.js";import*as p from"../../shared/ui/switch/index.js";let v=({open:o})=>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:o?"Close":"Open"}),o?e("path",{d:"M5 12h14"}):e("path",{d:"M5 12h14M12 5v14"})]}),g={disabledByCategory:"Turn on this category to choose vendors.",privacyPolicy:"Privacy policy",switchLabel:"Allow {vendor}",title:"Vendors ({count})"},u=({category:o,categoryOn:n,checked:r,copy:i,labelId:l,noStyle:a,onCheckedChange:c,styles:h,vendor:m})=>{let[g,u]=s(!1),C=m.name??m.id,b=!0!==m.disabled,f=!!(m.description||m.privacyPolicyUrl);return t(y.Root,{className:h?.item,"data-testid":`consent-widget-vendor-item-${o}-${m.id}`,disabled:!f,noStyle:a,onOpenChange:u,open:g,slotKey:"vendor-list.item",children:[t(d,{noStyle:a,baseClassName:h?.header,slotKey:"vendor-list.header",children:[t(y.Trigger,{className:h?.trigger,"data-testid":`consent-widget-vendor-trigger-${o}-${m.id}`,noStyle:a,slotKey:"vendor-list.trigger",children:[e(y.Leading,{className:h?.arrow,noStyle:a,children:e(v,{open:g})}),e(d,{asChild:!0,noStyle:a,baseClassName:h?.name,slotKey:"vendor-list.name",children:e("span",{"data-testid":`consent-widget-vendor-name-${o}-${m.id}`,id:l,children:C})})]}),b?e(d,{noStyle:a,baseClassName:h?.control,slotKey:"vendor-list.control",children:e(p.Root,{"aria-label":i.switchLabel.replace("{vendor}",C),"aria-describedby":l,checked:r,"data-testid":`consent-widget-vendor-switch-${o}-${m.id}`,disabled:!n,onCheckedChange:c,size:"small"})}):null]}),f?t(y.Content,{className:h?.content,"data-testid":`consent-widget-vendor-content-${o}-${m.id}`,innerClassName:h?.contentInner,noStyle:a,slotKey:"vendor-list.content",children:[m.description?e(d,{asChild:!0,noStyle:a,baseClassName:h?.description,slotKey:"vendor-list.description",children:e("p",{children:m.description})}):null,m.privacyPolicyUrl?e(d,{asChild:!0,noStyle:a,baseClassName:h?.link,slotKey:"vendor-list.link",children:e("a",{href:m.privacyPolicyUrl,rel:"noopener noreferrer",target:"_blank",children:i.privacyPolicy})}):null]}):null]})},C=({category:s,className:y,noStyle:p,...v})=>{let C=h(),b=i(()=>o(C,s),[C,s]),f=c(),$=a(f,e=>!0===e.values[s]),k=a(f,e=>e.vendors),{consentManagerDialog:w}=l(),{noStyle:N}=m(),S=r(),j=p??N??!1;if(0===b.length)return null;let K={...g,...w.vendors},x=j?void 0:n,L=K.title.replace("{count}",String(b.length));return e(d,{asChild:!0,className:y,"data-testid":`consent-widget-vendor-list-${s}`,noStyle:j,baseClassName:x?.root,slotKey:"vendor-list.root",...v,children:t("section",{"aria-label":L,children:[$?null:e("p",{className:x?.hint,"data-testid":`consent-widget-vendor-hint-${s}`,children:K.disabledByCategory}),b.map(t=>e(u,{category:s,categoryOn:$,checked:k[t.id]??!0,copy:K,labelId:`${S}vendor-${s}-${t.id}`,noStyle:j,onCheckedChange:e=>f.setVendor(t.id,e),styles:x,vendor:t},t.id))]})})};export{C 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 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};
2
+ import"@c15t/ui/styles/dialog";import{Accordion as o,AccordionArrow as t,AccordionContent as e,AccordionItem as n,AccordionItems as r,AccordionTrigger as i,AccordionTriggerInner as c,ConsentWidgetAccordion as s,ConsentWidgetAccordionArrow as d,ConsentWidgetAccordionContent as g,ConsentWidgetAccordionItem as A,ConsentWidgetAccordionItems as m,ConsentWidgetAccordionTrigger as C,ConsentWidgetAccordionTriggerInner as u,ConsentWidgetSwitch as W,ConsentWidgetVendorList as p,Switch as l,VendorList as a}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:e,AccordionItem:n,AccordionItems:r,AccordionTrigger:i,AccordionTriggerInner:c,CustomizeButton:w,Footer:y,FooterSubGroup:h,PolicyActions:L,RejectButton:F,Root:z,SaveButton:R,Switch:l,VendorList:a});export default V;export{B as AcceptAllButton,o as Accordion,t as AccordionArrow,e as AccordionContent,n as AccordionItem,r as AccordionItems,i as AccordionTrigger,c as AccordionTriggerInner,f as ConsentWidgetAcceptAllButton,s as ConsentWidgetAccordion,d as ConsentWidgetAccordionArrow,g as ConsentWidgetAccordionContent,A 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,l as Switch,a as VendorList,V as ConsentWidget};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import t from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,useEffect as o,useState as n}from"react";import{useActiveUI as a}from"../../../hooks.js";import{useScrollLock as m}from"../../../hooks/use-scroll-lock.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as s}from"../../../ui-config-context.js";import{cnExt as l}from"../../../utils/cn.js";import{mergeSlotProps as u}from"../../../utils/merge-slot-props.js";let c=r(({className:r,style:c,noStyle:p,asChild:d,...y},f)=>{let v,b=a(),{disableAnimation:j,noStyle:h,scrollLock:C}=i(),{components:N}=s(),g="banner"===b,[k,A]=n(!1);o(()=>{if(g){let e=requestAnimationFrame(()=>A(!0));return()=>cancelAnimationFrame(e)}if(j){let e=requestAnimationFrame(()=>A(!1));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{A(!1)},Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--consent-banner-animation-duration")||"200",10));return()=>clearTimeout(e)},[g,j]);let F=u(N?.banner?.overlay,{baseClassName:t.overlay,className:r,noStyle:h||p,style:c,...y});v=h||p||j?void 0:k?t.overlayVisible:t.overlayHidden;let x=l(F.className,v);return m(!!(g&&C)),g&&C?e("div",{ref:f,...F,"aria-hidden":"true",className:x,"data-testid":"consent-banner-overlay"}):null});c.displayName="ConsentBannerOverlay";let p=c;export{c as ConsentBannerOverlay,p as Overlay};
1
+ import{jsx as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as o,isValidElement as t}from"react";import{Slot as s}from"../../shared/libs/slot.js";import{useActiveUI as n}from"../../../hooks.js";import{useScrollLock as l}from"../../../hooks/use-scroll-lock.js";import{useTheme as a}from"../../../hooks/use-theme.js";import{useUIConfig as i}from"../../../ui-config-context.js";import{cnExt as m}from"../../../utils/cn.js";import{mergeSlotProps as c}from"../../../utils/merge-slot-props.js";let p=o(({className:o,style:p,noStyle:f,asChild:y,children:d,...u},v)=>{let h=n(),{disableAnimation:j,noStyle:b,scrollLock:k}=a(),{components:N}=i(),g="banner"===h,x=c(N?.banner?.overlay,{baseClassName:r.overlay,className:o,noStyle:b||f,style:p,...u}),C=b||f||j?void 0:`${r.overlayVisible} ${r.overlayEntering}`,O=m(x.className,C);if(l(!!(g&&k)),!(g&&k))return null;let B={...x,"aria-hidden":!0,className:O,"data-testid":"consent-banner-overlay"};return y&&t(d)?e(s,{ref:v,...B,children:d}):e("div",{ref:v,...B,children:d})});p.displayName="ConsentBannerOverlay";let f=p;export{p as ConsentBannerOverlay,f as Overlay};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{Fragment as e,jsx as t,jsxs as o}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,useEffect as i,useMemo as a,useState as m}from"react";import{useHeadlessConsentUI as s}from"../../../component-hooks/use-headless-consent-ui.js";import{ConsentTrackingContext as l}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as c}from"../../../context/theme-context.js";import{useActiveUI as u,useHasConsentUI as p,useModel as d,usePolicyRule as f,useTranslations as b}from"../../../hooks.js";import{useTextDirection as g}from"../../../hooks/use-text-direction.js";import{useUIConfig as v}from"../../../ui-config-context.js";import{defaultTranslationConfig as F}from"../../../utils/default-translation-config.js";import{mergeSlotProps as h}from"../../../utils/merge-slot-props.js";import{ConsentBannerSurfaceContext as A,mirrorDefaultPosition as j,useConsentBannerSurface as k}from"../surface-context.js";import{Overlay as x}from"./overlay.js";let N=["opt-in","opt-out"],y=r(({asChild:r,children:a,className:s,style:l,className:c,disableAnimation:A,noStyle:y,models:S=N,...q},C)=>{let P=u(),{components:T}=v(),L=p(),R=d()??"opt-in",B=f(),V=k(),$=b(),E=g($?.language??F.defaultLanguage),H=j(V.position,V.positionSource,V.variant,E),I=L&&"banner"===P&&S.includes(R),[w,z]=m(I),[D,G]=m(I),[J,K]=m(200),[M,O]=m(!0);i(()=>{let e=Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue("--consent-banner-animation-duration")||"200",10),t=requestAnimationFrame(()=>{K(e)});return()=>cancelAnimationFrame(t)},[]),i(()=>{if(!M){let e=requestAnimationFrame(()=>{O(!0),z(I),I&&G(!0)});return()=>cancelAnimationFrame(e)}if(I){if(A){let e=requestAnimationFrame(()=>{z(!0),G(!0)});return()=>cancelAnimationFrame(e)}if(D){let e=requestAnimationFrame(()=>z(!0));return()=>cancelAnimationFrame(e)}let e=setTimeout(()=>{z(!0),G(!0)},10);return()=>clearTimeout(e)}if(A){let e=requestAnimationFrame(()=>{G(!1),z(!1)});return()=>cancelAnimationFrame(e)}let e=requestAnimationFrame(()=>G(!1)),t=setTimeout(()=>{z(!1)},J);return()=>{cancelAnimationFrame(e),clearTimeout(t)}},[I,A,D,J,M]);let Q=h(T?.banner?.root,{baseClassName:n.root,className:s||c,noStyle:y,style:l,...q}),U=y?Q.className||"":`${Q.className||""} ${A?"":w?n.bannerVisible:n.bannerHidden}`;return I?o(e,{children:[t(x,{}),t("div",{ref:C,...Q,className:U,"data-variant":V.variant,"data-position":H,"data-blocking":V.blocking?"true":void 0,"data-prompt":B.prompt,"data-model":B.model,"data-testid":"consent-banner-root",dir:E,children:a})]}):null}),S=({children:e,className:o,noStyle:n,disableAnimation:r,scrollLock:i,trapFocus:m,models:u,uiSource:p,variant:d,position:f,blocking:b,...g})=>{let{banner:v}=s({prompt:{blocking:b,position:f,scrollLock:i,trapFocus:m,variant:d}}),F=v.scrollLock,h=v.trapFocus,j=a(()=>({disableAnimation:r,noStyle:n,scrollLock:F,trapFocus:h}),[r,n,F,h]),k=a(()=>({blocking:v.blocking,position:v.position,positionSource:v.positionSource,variant:v.variant}),[v.blocking,v.position,v.positionSource,v.variant]),x=a(()=>({uiSource:p??"banner"}),[p]);return t(l.Provider,{value:x,children:t(c.Provider,{value:j,children:t(A.Provider,{value:k,children:t(y,{disableAnimation:r,className:o,noStyle:n,models:u,...g,children:e})})})})};y.displayName="ConsentBannerRootChildren";let q=S;export{S as ConsentBannerRoot,q as Root};
2
+ import{Fragment as o,jsx as t,jsxs as e}from"react/jsx-runtime";import r from"@c15t/ui/styles/components/consent-banner";import{forwardRef as n,useMemo as i}from"react";import{useHeadlessConsentUI as a}from"../../../component-hooks/use-headless-consent-ui.js";import{ConsentTrackingContext as s}from"../../../context/consent-tracking-context.js";import{LocalThemeContext as l}from"../../../context/theme-context.js";import{useActiveUI as c,useHasConsentUI as m,useModel as p,usePolicyRule as d,useTranslations as u}from"../../../hooks.js";import{useTextDirection as f}from"../../../hooks/use-text-direction.js";import{useUIConfig as b}from"../../../ui-config-context.js";import{defaultTranslationConfig as v}from"../../../utils/default-translation-config.js";import{mergeSlotProps as g}from"../../../utils/merge-slot-props.js";import{ConsentBannerSurfaceContext as h,mirrorDefaultPosition as j,useConsentBannerSurface as k}from"../surface-context.js";import{Overlay as x}from"./overlay.js";let N=["opt-in","opt-out"],S=n(({asChild:n,children:i,className:a,style:s,className:l,disableAnimation:h,noStyle:S,models:y=N,...C},$)=>{let L=c(),{components:P}=b(),R=m(),B=p()??"opt-in",F=d(),A=k(),E=u(),V=f(E?.language??v.defaultLanguage),q=j(A.position,A.positionSource,A.variant,V),w=R&&"banner"===L&&y.includes(B),z=g(P?.banner?.root,{baseClassName:r.root,className:a||l,noStyle:S,style:s,...C}),D=S?z.className||"":`${z.className||""} ${h?"":`${r.bannerVisible} ${r.bannerEntering}`}`;return w?e(o,{children:[t(x,{}),t("div",{ref:$,...z,className:D,"data-variant":A.variant,"data-position":q,"data-blocking":A.blocking?"true":void 0,"data-prompt":F.prompt,"data-model":F.model,"data-testid":"consent-banner-root",dir:V,children:i})]}):null}),y=({children:o,className:e,noStyle:r,disableAnimation:n,scrollLock:c,trapFocus:m,models:p,uiSource:d,variant:u,position:f,blocking:b,...v})=>{let{banner:g}=a({prompt:{blocking:b,position:f,scrollLock:c,trapFocus:m,variant:u}}),j=g.scrollLock,k=g.trapFocus,x=i(()=>({disableAnimation:n,noStyle:r,scrollLock:j,trapFocus:k}),[n,r,j,k]),N=i(()=>({blocking:g.blocking,position:g.position,positionSource:g.positionSource,variant:g.variant}),[g.blocking,g.position,g.positionSource,g.variant]),y=i(()=>({uiSource:d??"banner"}),[d]);return t(s.Provider,{value:y,children:t(l.Provider,{value:x,children:t(h.Provider,{value:N,children:t(S,{disableAnimation:n,className:e,noStyle:r,models:p,...v,children:o})})})})};S.displayName="ConsentBannerRootChildren";let C=y;export{y as ConsentBannerRoot,C as Root};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/consent-actions";import o from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,useRef as s}from"react";import{useHeadlessConsentUI as a}from"../../component-hooks/use-headless-consent-ui.js";import{useTranslations as i}from"../../component-hooks/use-translations.js";import{Slot as l}from"../shared/libs/slot.js";import{usePolicyRule as c,useSetActiveUI as d}from"../../hooks.js";import{useFocusTrap as m}from"../../hooks/use-focus-trap.js";import{useTheme as p}from"../../hooks/use-theme.js";import{useUIConfig as u}from"../../ui-config-context.js";import{getSlotProps as b,mergeSlotProps as h}from"../../utils/merge-slot-props.js";import{Box as f}from"../shared/primitives/box.js";import{ConsentButton as C}from"../shared/primitives/button.js";import{InlineLegalLinks as B}from"../shared/primitives/legal-links/index.js";import{useConsentBannerSurface as g}from"./surface-context.js";import{useBannerCopy as y}from"./use-banner-copy.js";let j={"opt-out":"Do not sell or share my data",preferences:"Manage preferences"},N=r(({children:t,...n},r)=>{let{title:s}=y();return e(f,{ref:r,baseClassName:o.title,"data-testid":"consent-banner-title",slotKey:"banner.title",...n,asChild:!0,children:e("h2",{children:t??s})})});N.displayName="ConsentBannerTitle";let k=r(({children:n,legalLinks:r,asChild:s,className:a,style:i,noStyle:c,...d},m)=>{let{description:b}=y(),{components:f}=u(),{noStyle:C}=p(),g="banner",j=h(f?.description?.[g],{baseClassName:o.description,className:a,"data-context":g,"data-testid":"consent-banner-description",noStyle:c??C,style:i,...d});return s?e(l,{ref:m,...j,children:n??b}):t("div",{ref:m,...j,children:[n??b,e(B,{links:r,context:"banner",testIdPrefix:"consent-banner-legal-link"})]})});k.displayName="ConsentBannerDescription";let x=r(({children:t,className:n,style:r,...s},a)=>{let{components:i}=u(),{noStyle:l}=p(),c=h(i?.banner?.actions,{baseClassName:n,noStyle:l,style:r,...s});return e(f,{ref:a,baseClassName:o.footer,"data-testid":"consent-banner-footer",slotKey:"banner.footer",...c,children:t})});x.displayName="ConsentBannerFooter";let R=r(({children:t,...n},r)=>{let{blocking:a}=g(),{title:i}=y(),l=s(null),c=r||l;return m(a,c),e(f,{ref:c,tabIndex:-1,baseClassName:o.card,"data-testid":"consent-banner-card",slotKey:"banner.card","aria-label":n["aria-label"]||i,"aria-modal":a?"true":void 0,role:a?"dialog":"region",...n,children:t})});R.displayName="ConsentBannerCard";let S=r(({children:t,...n},r)=>e(f,{ref:r,baseClassName:o.header,"data-testid":"consent-banner-header",slotKey:"banner.header",...n,children:t}));S.displayName="ConsentBannerHeader";let v=r(({children:t,...o},r)=>e(f,{ref:r,baseClassName:n.actionGroup,"data-testid":"consent-banner-footer-sub-group",slotKey:"banner.actionGroup",...o,children:t}));v.displayName="ConsentBannerFooterSubGroup";let D=r(({children:t,...n},o)=>{let{common:r}=i();return e(C,{ref:o,action:"reject-consent","data-testid":"consent-banner-reject-button",closeConsentBanner:!0,...n,children:t??r.rejectAll})});D.displayName="ConsentBannerRejectButton";let A=r(({children:t,...n},o)=>{let{common:r}=i();return e(C,{ref:o,action:"open-consent-dialog","data-testid":"consent-banner-customize-button",...n,children:t??r.customize})});A.displayName="ConsentBannerCustomizeButton";let F=r(({children:t,...n},o)=>{let{common:r}=i(),{noStyle:s}=p();return e(C,{ref:o,action:"accept-consent","data-testid":"consent-banner-accept-button",closeConsentBanner:!0,noStyle:s,...n,children:t??r.acceptAll})});F.displayName="ConsentBannerAcceptButton";let K=r(({children:t,...n},o)=>{let{common:r}=i(),{noStyle:s}=p();return e(C,{ref:o,action:"dismiss-notice",consentAction:"dismiss","data-action":"dismiss","data-testid":"consent-banner-dismiss-button",noStyle:s,...n,children:t??r.acknowledge??r.dismiss})});K.displayName="ConsentBannerDismissButton";let z=r(({right:t,children:n,asChild:r,className:s,style:a,noStyle:m,onClick:f,...C},B)=>{let{rights:g}=i(),y=c(),{components:N}=u(),{noStyle:k}=p(),x=d(),R=("opt-out"===t?g?.optOut:g?.preferences)??j[t];return e(r?l:"button",{ref:B,type:r?void 0:"button",...h(b(N,"banner.rightLink"),{baseClassName:o.rightLink,className:s,noStyle:m??k,style:a}),"data-action":"right","data-right":t,"data-c15t-rights":y.rights.join(" "),"data-testid":`consent-banner-right-link-${t}`,onClick:e=>{f?.(e),e.defaultPrevented||x("dialog")},...C,children:n??R})});z.displayName="ConsentBannerRightLink";let G=r(({rights:t,children:n,...r},s)=>{let{banner:i}=a(),l=(t??i.preferenceControls).filter(e=>"disclosure"!==e);return void 0===n&&0===l.length?null:e(f,{ref:s,baseClassName:o.rights,"data-testid":"consent-banner-rights",slotKey:"banner.rights",...r,children:n??l.map(t=>e(z,{right:t},t))})});G.displayName="ConsentBannerRights";let L=N,H=k,T=x,I=v,P=R,w=S,M=D,O=A,$=F,q=K,E=G,J=z;export{$ as AcceptButton,P as Card,F as ConsentBannerAcceptButton,R as ConsentBannerCard,A as ConsentBannerCustomizeButton,k as ConsentBannerDescription,K as ConsentBannerDismissButton,x as ConsentBannerFooter,v as ConsentBannerFooterSubGroup,S as ConsentBannerHeader,D as ConsentBannerRejectButton,z as ConsentBannerRightLink,G as ConsentBannerRights,N as ConsentBannerTitle,O as CustomizeButton,H as Description,q as DismissButton,T as Footer,I as FooterSubGroup,w as Header,M as RejectButton,J as RightLink,E as Rights,L as Title};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import n from"@c15t/ui/styles/components/consent-actions";import o from"@c15t/ui/styles/components/consent-banner";import{forwardRef as r,isValidElement as s,useRef as a}from"react";import{useHeadlessConsentUI as i}from"../../component-hooks/use-headless-consent-ui.js";import{useTranslations as l}from"../../component-hooks/use-translations.js";import{useComposedRefs as c}from"../shared/libs/compose-refs.js";import{Slot as d}from"../shared/libs/slot.js";import{usePolicyRule as m,useSetActiveUI as p}from"../../hooks.js";import{useFocusTrap as u}from"../../hooks/use-focus-trap.js";import{useTheme as b}from"../../hooks/use-theme.js";import{useUIConfig as h}from"../../ui-config-context.js";import{getSlotProps as f,mergeSlotProps as C}from"../../utils/merge-slot-props.js";import{Box as B}from"../shared/primitives/box.js";import{ConsentButton as g}from"../shared/primitives/button.js";import{InlineLegalLinks as y}from"../shared/primitives/legal-links/index.js";import{useConsentBannerSurface as j}from"./surface-context.js";import{useBannerCopy as N}from"./use-banner-copy.js";let k={"opt-out":"Do not sell or share my data",preferences:"Manage preferences"},x=r(({children:t,asChild:n,...r},a)=>{let{title:i}=N();return e(B,{ref:a,baseClassName:o.title,"data-testid":"consent-banner-title",slotKey:"banner.title",...r,asChild:!0,children:n&&s(t)?t:e("h2",{children:t??i})})});x.displayName="ConsentBannerTitle";let A=r(({children:n,legalLinks:r,asChild:a,className:i,style:l,noStyle:c,...m},p)=>{let{description:u}=N(),{components:f}=h(),{noStyle:B}=b(),g="banner",j=C(f?.description?.[g],{baseClassName:o.description,className:i,"data-context":g,"data-testid":"consent-banner-description",noStyle:c??B,style:l,...m});return a&&s(n)?e(d,{ref:p,...j,children:n}):t("div",{ref:p,...j,children:[n??u,e(y,{links:r,context:"banner",testIdPrefix:"consent-banner-legal-link"})]})});A.displayName="ConsentBannerDescription";let R=r(({children:t,className:n,style:r,...s},a)=>{let{components:i}=h(),{noStyle:l}=b(),c=C(i?.banner?.actions,{baseClassName:n,noStyle:l,style:r,...s});return e(B,{ref:a,baseClassName:o.footer,"data-testid":"consent-banner-footer",slotKey:"banner.footer",...c,children:t})});R.displayName="ConsentBannerFooter";let S=r(({children:t,...n},r)=>{let{blocking:s}=j(),{title:i}=N(),l=a(null),d=c(l,r);return u(s,l),e(B,{ref:d,tabIndex:-1,baseClassName:o.card,"data-testid":"consent-banner-card",slotKey:"banner.card","aria-label":n["aria-label"]||i,"aria-modal":s?"true":void 0,role:s?"dialog":"region",...n,children:t})});S.displayName="ConsentBannerCard";let v=r(({children:t,...n},r)=>e(B,{ref:r,baseClassName:o.header,"data-testid":"consent-banner-header",slotKey:"banner.header",...n,children:t}));v.displayName="ConsentBannerHeader";let D=r(({children:t,...o},r)=>e(B,{ref:r,baseClassName:n.actionGroup,"data-testid":"consent-banner-footer-sub-group",slotKey:"banner.actionGroup",...o,children:t}));D.displayName="ConsentBannerFooterSubGroup";let z=r(({children:t,...n},o)=>{let{common:r}=l();return e(g,{ref:o,action:"reject-consent",consentAction:"reject","data-testid":"consent-banner-reject-button",closeConsentBanner:!0,...n,children:t??r.rejectAll})});z.displayName="ConsentBannerRejectButton";let F=r(({children:t,...n},o)=>{let{common:r}=l();return e(g,{ref:o,action:"open-consent-dialog",consentAction:"customize","data-testid":"consent-banner-customize-button",...n,children:t??r.customize})});F.displayName="ConsentBannerCustomizeButton";let K=r(({children:t,...n},o)=>{let{common:r}=l(),{noStyle:s}=b();return e(g,{ref:o,action:"accept-consent",consentAction:"accept","data-testid":"consent-banner-accept-button",closeConsentBanner:!0,noStyle:s,...n,children:t??r.acceptAll})});K.displayName="ConsentBannerAcceptButton";let G=r(({children:t,...n},o)=>{let{common:r}=l(),{noStyle:s}=b();return e(g,{ref:o,action:"dismiss-notice",consentAction:"dismiss","data-action":"dismiss","data-testid":"consent-banner-dismiss-button",noStyle:s,...n,children:t??r.acknowledge??r.dismiss})});G.displayName="ConsentBannerDismissButton";let L=r(({right:t,children:n,asChild:r,className:s,style:a,noStyle:i,onClick:c,...u},B)=>{let{rights:g}=l(),y=m(),{components:j}=h(),{noStyle:N}=b(),x=p(),A=("opt-out"===t?g?.optOut:g?.preferences)??k[t];return e(r?d:"button",{ref:B,type:r?void 0:"button",...C(f(j,"banner.rightLink"),{baseClassName:o.rightLink,className:s,noStyle:i??N,style:a}),"data-action":"right","data-right":t,"data-c15t-rights":y.rights.join(" "),"data-testid":`consent-banner-right-link-${t}`,onClick:e=>{c?.(e),e.defaultPrevented||x("dialog")},...u,children:n??A})});L.displayName="ConsentBannerRightLink";let H=r(({rights:t,children:n,...r},s)=>{let{banner:a}=i(),l=(t??a.preferenceControls).filter(e=>"disclosure"!==e);return void 0===n&&0===l.length?null:e(B,{ref:s,baseClassName:o.rights,"data-testid":"consent-banner-rights",slotKey:"banner.rights",...r,children:n??l.map(t=>e(L,{right:t},t))})});H.displayName="ConsentBannerRights";let T=x,I=A,P=R,w=D,M=S,O=v,$=z,q=F,E=K,J=G,Q=H,U=L;export{E as AcceptButton,M as Card,K as ConsentBannerAcceptButton,S as ConsentBannerCard,F as ConsentBannerCustomizeButton,A as ConsentBannerDescription,G as ConsentBannerDismissButton,R as ConsentBannerFooter,D as ConsentBannerFooterSubGroup,v as ConsentBannerHeader,z as ConsentBannerRejectButton,L as ConsentBannerRightLink,H as ConsentBannerRights,x as ConsentBannerTitle,q as CustomizeButton,I as Description,J as DismissButton,P as Footer,w as FooterSubGroup,O as Header,$ as RejectButton,U as RightLink,Q as Rights,T as Title};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as t}from"react/jsx-runtime";import{useHeadlessConsentUI as n}from"../../component-hooks/use-headless-consent-ui.js";import{warmDialogChunk as e}from"../../chunk-warming.js";import{PolicyActionsRenderer as o}from"../shared/policy-actions.js";import{ConsentBannerAcceptButton as r,ConsentBannerCustomizeButton as s,ConsentBannerDismissButton as c,ConsentBannerFooter as i,ConsentBannerFooterSubGroup as a,ConsentBannerRejectButton as m,ConsentBannerRights as u}from"./components.js";import{resolveBannerPrimaryActions as d}from"./resolve-banner-primary-actions.js";let p=function(n,o){let{key:i,consentAction:a,...u}=o;switch(n){case"accept":return t(r,{consentAction:a,"data-testid":"consent-banner-accept-button",...u},i);case"reject":return t(m,{consentAction:a,"data-testid":"consent-banner-reject-button",...u},i);case"customize":return t(s,{consentAction:a,"data-testid":"consent-banner-customize-button",onPointerEnter:e,onFocus:e,...u},i);case"dismiss":return t(c,{consentAction:a,"data-testid":"consent-banner-dismiss-button",...u},i);case"save":return null;default:throw Error(`Unhandled consent banner action: ${n}`)}},l=({children:e,renderAction:r})=>{let{banner:s}=n();return t(o,{state:{...s,primaryActions:[...d(s.primaryActions,s.orderedActions)]},leading:void 0===e?t(u,{rights:s.preferenceControls}):e,Footer:i,FooterSubGroup:a,classNames:{},renderAction:r,renderDefaultAction:p})},b=l;export{l as ConsentBannerPolicyActions,b as PolicyActions};
2
+ import{jsx as t}from"react/jsx-runtime";import{useHeadlessConsentUI as n}from"../../component-hooks/use-headless-consent-ui.js";import{PolicyActionsRenderer as e}from"../shared/policy-actions.js";import{ConsentBannerAcceptButton as o,ConsentBannerCustomizeButton as r,ConsentBannerDismissButton as s,ConsentBannerFooter as c,ConsentBannerFooterSubGroup as i,ConsentBannerRejectButton as a,ConsentBannerRights as d}from"./components.js";import{resolveBannerPrimaryActions as m}from"./resolve-banner-primary-actions.js";let u=function(n,e){let{key:c,consentAction:i,...d}=e;switch(n){case"accept":return t(o,{consentAction:i,"data-testid":"consent-banner-accept-button",...d},c);case"reject":return t(a,{consentAction:i,"data-testid":"consent-banner-reject-button",...d},c);case"customize":return t(r,{consentAction:i,"data-testid":"consent-banner-customize-button",...d},c);case"dismiss":return t(s,{consentAction:i,"data-testid":"consent-banner-dismiss-button",...d},c);case"save":return null;default:throw Error(`Unhandled consent banner action: ${n}`)}},l=({children:o,renderAction:r})=>{let{banner:s}=n();return t(e,{state:{...s,primaryActions:[...m(s.primaryActions,s.orderedActions)]},leading:void 0===o?t(d,{rights:s.preferenceControls}):o,Footer:c,FooterSubGroup:i,classNames:{},renderAction:r,renderDefaultAction:u})},p=l;export{l as ConsentBannerPolicyActions,p as PolicyActions};
@@ -0,0 +1 @@
1
+ import{useMemo as e}from"react";let o=function(...e){return o=>{for(let s of e){if("function"==typeof s){s(o);continue}s&&"current"in s&&(s.current=o)}}},s=function(s,r){return e(()=>o(s,r),[s,r])};export{o as composeRefs,s as useComposedRefs};
@@ -1 +1 @@
1
- import{createElement as e,forwardRef as t,isValidElement as r}from"react";let n=function(e,t){return"function"!=typeof e?t:"function"!=typeof t?e:r=>{t(r),e(r)}},o=function(e,t){let r=Object.getOwnPropertyDescriptor(e,t)?.get;return"function"==typeof r&&!0===r.isReactWarning},f=t(({children:t,...f},i)=>{if(!r(t))return null;let c=t.props,l=o(t.props,"ref")?t.ref:o(t,"ref")?t.props.ref:t.props.ref??t.ref,p={...f,...c,className:[f.className,c.className].filter(Boolean).join(" "),ref:function(...e){return t=>{for(let r of e){if("function"==typeof r){r(t);continue}r&&"current"in r&&(r.current=t)}}}(i,l),style:{...f.style,...c.style}};for(let[e,t]of Object.entries(f))/^on[A-Z]/u.test(e)&&(p[e]=n(t,c[e]));return e(t.type,{key:t.key??void 0,...p})});f.displayName="Slot";export{f as Slot};
1
+ import{createElement as e,forwardRef as t,isValidElement as r}from"react";import{composeRefs as o}from"./compose-refs.js";let f=function(e,t){return"function"!=typeof e?t:"function"!=typeof t?e:r=>{t(r),e(r)}},n=function(e,t){let r=Object.getOwnPropertyDescriptor(e,t)?.get;return"function"==typeof r&&!0===r.isReactWarning},s=t(({children:t,...s},p)=>{if(!r(t))return null;let l=t.props,i=n(t.props,"ref")?t.ref:n(t,"ref")?t.props.ref:t.props.ref??t.ref,c={...s,...l,className:[s.className,l.className].filter(Boolean).join(" "),ref:o(p,i),style:{...s.style,...l.style}};for(let[e,t]of Object.entries(s))/^on[A-Z]/u.test(e)&&(c[e]=f(t,l[e]));return e(t.type,{key:t.key??void 0,...c})});s.displayName="Slot";export{s as Slot};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{forwardRef as e,useCallback as o}from"react";import{useConsentSaveAction as r}from"../../../draft.js";import{useDismissNotice as n,useSetActiveUI as a}from"../../../hooks.js";import{useTheme as i}from"../../../hooks/use-theme.js";import{useUIConfig as s}from"../../../ui-config-context.js";import{getSlotProps as c,mergeSlotProps as m}from"../../../utils/merge-slot-props.js";import{Slot as d}from"../libs/slot.js";import*as l from"../ui/button/index.js";let u=["primary","secondary","neutral","consentAction","isPrimary","performDefaultAction"],f=function(t){if(t.variant||t.mode)return{mode:t.mode??"stroke",variant:t.variant??"neutral"};let e=t.theme?.consentActions,o=[t.consentAction&&"save"!==t.consentAction?e?.[t.consentAction]:void 0,t.isPrimary?e?.primary:void 0,e?.default,{mode:"stroke",variant:t.isPrimary?"primary":"neutral"}];return{mode:o.find(t=>t?.mode)?.mode??"stroke",variant:o.find(t=>t?.variant)?.variant??"neutral"}},p=e(({asChild:e,className:p,style:v,noStyle:y,action:b,slotKey:j,baseClassName:k,variant:g,mode:h,size:C="small",consentAction:A,isPrimary:x,onClick:N,closeConsentBanner:P=!1,closeConsentDialog:w=!1,performDefaultAction:E=!0,category:q,...B},O)=>{let S=r(),z=a(),D=n(),{noStyle:V,theme:F}=i(),{components:G}=s(),H=f({consentAction:A,isPrimary:x,mode:h,theme:F,variant:g}),I="primary"===H.variant?"button.primary":"button.secondary",J=m(c(G,j??I),{baseClassName:[l.buttonVariants({mode:H.mode,size:C,variant:H.variant}).root(),k],className:p,noStyle:V||y,style:{...v}});if(!q&&"set-consent"===b)throw Error("Category is required for set-consent action");let K=o(t=>{if(N?.(t),t.defaultPrevented)return;let e="accept-consent"===b||"reject-consent"===b||"custom-consent"===b;if((P||w)&&!e&&z("none"),"open-consent-dialog"===b&&z("dialog"),E&&"open-consent-dialog"!==b)switch(b){case"accept-consent":S("all");break;case"reject-consent":S("none");break;case"custom-consent":S();break;case"dismiss-notice":D();break;case"set-consent":if(!q)throw Error("Category is required for set-consent action");S({[q]:!0})}},[P,w,N,S,z,b,q,D,E]),L=Object.fromEntries(Object.entries(B).filter(([t])=>!u.includes(t))),M=!(V||y);return t(e?d:"button",{ref:O,type:e?void 0:"button","data-variant":M?H.variant:void 0,"data-mode":M?H.mode:void 0,"data-size":M?C:void 0,"data-action":A,...J,onClick:K,...L})});p.displayName="ConsentButton";export{p as ConsentButton};
1
+ import{jsx as t}from"react/jsx-runtime";import{forwardRef as o,useCallback as e}from"react";import{useIdleDialogWarming as n,warmDialogChunk as r}from"../../../chunk-warming.js";import{toSaveUISource as i,useConsentTracking as a}from"../../../context/consent-tracking-context.js";import{useConsentSaveAction as s}from"../../../draft.js";import{useDismissNotice as c,useSetActiveUI as m}from"../../../hooks.js";import{useTheme as d}from"../../../hooks/use-theme.js";import{useUIConfig as l}from"../../../ui-config-context.js";import{getSlotProps as u,mergeSlotProps as f}from"../../../utils/merge-slot-props.js";import{Slot as p}from"../libs/slot.js";import*as v from"../ui/button/index.js";let y=["primary","secondary","neutral","consentAction","isPrimary","performDefaultAction"],b=function(t){if(t.variant||t.mode)return{mode:t.mode??"stroke",variant:t.variant??"neutral"};let o=t.theme?.consentActions,e=[t.consentAction&&"save"!==t.consentAction?o?.[t.consentAction]:void 0,t.isPrimary?o?.primary:void 0,o?.default,{mode:"stroke",variant:t.isPrimary?"primary":"neutral"}];return{mode:e.find(t=>t?.mode)?.mode??"stroke",variant:e.find(t=>t?.variant)?.variant??"neutral"}},j=o(({asChild:o,className:j,style:k,noStyle:g,action:h,slotKey:C,baseClassName:P,variant:x,mode:A,size:E="small",consentAction:w,isPrimary:N,onClick:F,onFocus:S,onPointerEnter:q,closeConsentBanner:B=!1,closeConsentDialog:O=!1,performDefaultAction:z=!0,category:D,...V},G)=>{let H=s(),{uiSource:I}=a(),J=e(t=>H(t,i(I)),[H,I]),K=m(),L=c(),{noStyle:M,theme:Q}=d(),{components:R}=l(),T=b({consentAction:w,isPrimary:N,mode:A,theme:Q,variant:x}),U="primary"===T.variant?"button.primary":"button.secondary",W=f(u(R,C??U),{baseClassName:[v.buttonVariants({mode:T.mode,size:E,variant:T.variant}).root(),P],className:j,noStyle:M||g,style:{...k}});if(!D&&"set-consent"===h)throw Error("Category is required for set-consent action");let X=e(t=>{if(F?.(t),t.defaultPrevented)return;let o="accept-consent"===h||"reject-consent"===h||"custom-consent"===h;if((B||O)&&!o&&K("none"),"open-consent-dialog"===h&&K("dialog"),z&&"open-consent-dialog"!==h)switch(h){case"accept-consent":J("all");break;case"reject-consent":J("none");break;case"custom-consent":J();break;case"dismiss-notice":L();break;case"set-consent":if(!D)throw Error("Category is required for set-consent action");J({[D]:!0})}},[B,O,F,J,K,h,D,L,z]),Y="open-consent-dialog"===h;n(Y);let Z=S??W.onFocus,$=q??W.onPointerEnter,_=e(t=>{Z?.(t),Y&&r()},[Z,Y]),tt=e(t=>{$?.(t),Y&&r()},[$,Y]),to=Object.fromEntries(Object.entries(V).filter(([t])=>!y.includes(t))),te=!(M||g);return t(o?p:"button",{ref:G,type:o?void 0:"button","data-variant":te?T.variant:void 0,"data-mode":te?T.mode:void 0,"data-size":te?E:void 0,"data-action":w,...W,onClick:X,onFocus:_,onPointerEnter:tt,...to})});j.displayName="ConsentButton";export{j as ConsentButton};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{jsx as o}from"react/jsx-runtime";import{isAccordionItemOpen as e,toggleAccordionValue as t}from"@c15t/ui/primitives/accordion";import{getDataDisabled as a}from"@c15t/ui/primitives/data-state";import r from"@c15t/ui/styles/components/accordion";import{createContext as n,forwardRef as i,useContext as c,useId as l,useMemo as d}from"react";import{useControllableState as s}from"../../libs/use-controllable-state.js";import{LucideIcon as m}from"../icon.js";import{useTheme as p}from"../../../../hooks/use-theme.js";let u=()=>({arrowClose:o=>[r.arrow,o?.class].filter(Boolean).join(" "),arrowOpen:o=>[r.arrow,o?.class].filter(Boolean).join(" "),content:o=>[r.content,o?.class].filter(Boolean).join(" "),contentInner:o=>[r.contentInner,o?.class].filter(Boolean).join(" "),contentViewport:o=>[r.contentViewport,o?.class].filter(Boolean).join(" "),icon:o=>[r.control,o?.class].filter(Boolean).join(" "),item:o=>[r.item,o?.class].filter(Boolean).join(" "),root:o=>[r.list,o?.class].filter(Boolean).join(" "),trigger:o=>[r.trigger,o?.class].filter(Boolean).join(" ")}),f=n(null),g=n(null),v=function(){let o=c(f);if(!o)throw Error("Accordion components must be used within AccordionRoot");return o},h=function(){let o=c(g);if(!o)throw Error("Accordion components must be used within AccordionItem");return o},A=i(({children:e,className:a,collapsible:r,defaultValue:n,noStyle:i,onValueChange:c,size:l="medium",type:m,value:g,variant:v="default",...h},A)=>{let{noStyle:y}=p(),w=u(),N=y||i,[I,b]=s({defaultValue:n??("multiple"===m?[]:void 0),onChange:o=>{void 0!==o&&c?.(o)},value:g}),j=N?a:w.root({class:a}),B=d(()=>({collapsible:r,noStyle:N,onItemToggle:o=>{b(t({collapsible:r,itemValue:o,type:m,value:I}))},type:m,value:I}),[r,I,N,b,m]);return o(f.Provider,{value:B,children:o("div",{ref:A,className:j,"data-size":N?void 0:l,"data-slot":"accordion-root","data-variant":N?void 0:v,...h,children:e})})});A.displayName="AccordionRoot";let y=i(({children:t,className:r,disabled:n,noStyle:i,value:c,...s},m)=>{let{noStyle:f}=p(),h=u(),A=v(),y=e(A.type,A.value,c),w=A.noStyle||f||i?r:h.item({class:r}),N=l().replace(/:/gu,""),I=`c15t-accordion-content-${N}`,b=`c15t-accordion-trigger-${N}`,j=d(()=>({contentId:I,disabled:n,open:y,triggerId:b,value:c}),[I,n,y,b,c]);return o(g.Provider,{value:j,children:o("div",{ref:m,className:w,"data-disabled":a(n),"data-slot":"accordion-item","data-state":y?"open":"closed",...s,children:t})})});y.displayName="AccordionItem";let w=i(({children:e,className:t,...a},r)=>o("div",{ref:r,className:t,"data-slot":"accordion-header",...a,children:e}));w.displayName="AccordionHeader";let N=i(({children:e,className:t,noStyle:n,onClick:i,...c},l)=>{let{noStyle:d}=p(),s=v(),m=h(),u=s.noStyle||d||n?t:[r.triggerRow,t].filter(Boolean).join(" ");return o("button",{ref:l,"aria-controls":m.contentId,"aria-disabled":m.disabled||void 0,"aria-expanded":m.open,className:u,"data-disabled":a(m.disabled),"data-slot":"accordion-trigger","data-state":m.open?"open":"closed",disabled:m.disabled,id:m.triggerId,onClick:o=>{s.onItemToggle(m.value),i?.(o)},type:"button",...c,children:e})});N.displayName="AccordionTrigger";let I=({className:e,noStyle:t,as:a,...r})=>{let n=u(),i="string"==typeof e?e:void 0;return o(a||"div",{className:t?i:n.icon({class:i}),"data-slot":"accordion-icon",...r})};I.displayName="AccordionIcon";let b=m({iconPath:o("path",{d:"M5 12h14M12 5v14"}),title:"Open"}),j=({children:e,closeIcon:t,className:a,noStyle:r,openIcon:n,...i})=>{let c=h(),l=u(),d=r?a:l.arrowOpen({class:a}),s=n??t,m=s?.Element??b;return o("span",{className:d,"data-slot":"accordion-arrow","data-state":c.open?"open":"closed",...i,children:e??o(m,{"aria-hidden":"true",className:s?.className,"data-slot":"accordion-arrow-icon"})})};j.displayName="AccordionArrow";let B=i(({children:e,className:t,innerClassName:a,noStyle:r,...n},i)=>{let{noStyle:c}=p(),l=u(),d=v(),s=h(),m=d.noStyle||c||r,f=m?t:l.content({class:t}),g=m?a:l.contentInner({class:a});return o("section",{ref:i,"aria-hidden":!s.open,"aria-labelledby":s.triggerId,className:f,"data-slot":"accordion-content","data-state":s.open?"open":"closed",id:s.contentId,...n,children:o("div",{className:m?void 0:l.contentViewport({class:void 0}),"data-slot":"accordion-content-viewport",children:o("div",{className:g,children:e})})})});B.displayName="AccordionContent";export{j as Arrow,B as Content,w as Header,I as Icon,y as Item,A as Root,N as Trigger,u as accordionVariants};
2
+ import{jsx as o}from"react/jsx-runtime";import{isAccordionItemOpen as e,toggleAccordionValue as t}from"@c15t/ui/primitives/accordion";import{getDataDisabled as a}from"@c15t/ui/primitives/data-state";import r from"@c15t/ui/styles/components/accordion";import"@c15t/ui/styles/dialog";import{createContext as n,forwardRef as i,useContext as c,useId as l,useMemo as d}from"react";import{useControllableState as s}from"../../libs/use-controllable-state.js";import{LucideIcon as m}from"../icon.js";import{useTheme as p}from"../../../../hooks/use-theme.js";let u=()=>({arrowClose:o=>[r.arrow,o?.class].filter(Boolean).join(" "),arrowOpen:o=>[r.arrow,o?.class].filter(Boolean).join(" "),content:o=>[r.content,o?.class].filter(Boolean).join(" "),contentInner:o=>[r.contentInner,o?.class].filter(Boolean).join(" "),contentViewport:o=>[r.contentViewport,o?.class].filter(Boolean).join(" "),icon:o=>[r.control,o?.class].filter(Boolean).join(" "),item:o=>[r.item,o?.class].filter(Boolean).join(" "),root:o=>[r.list,o?.class].filter(Boolean).join(" "),trigger:o=>[r.trigger,o?.class].filter(Boolean).join(" ")}),f=n(null),g=n(null),v=function(){let o=c(f);if(!o)throw Error("Accordion components must be used within AccordionRoot");return o},h=function(){let o=c(g);if(!o)throw Error("Accordion components must be used within AccordionItem");return o},y=i(({children:e,className:a,collapsible:r,defaultValue:n,noStyle:i,onValueChange:c,size:l="medium",type:m,value:g,variant:v="default",...h},y)=>{let{noStyle:A}=p(),w=u(),N=A||i,[I,b]=s({defaultValue:n??("multiple"===m?[]:void 0),onChange:o=>{void 0!==o&&c?.(o)},value:g}),j=N?a:w.root({class:a}),B=d(()=>({collapsible:r,noStyle:N,onItemToggle:o=>{b(t({collapsible:r,itemValue:o,type:m,value:I}))},type:m,value:I}),[r,I,N,b,m]);return o(f.Provider,{value:B,children:o("div",{ref:y,className:j,"data-size":N?void 0:l,"data-slot":"accordion-root","data-variant":N?void 0:v,...h,children:e})})});y.displayName="AccordionRoot";let A=i(({children:t,className:r,disabled:n,noStyle:i,value:c,...s},m)=>{let{noStyle:f}=p(),h=u(),y=v(),A=e(y.type,y.value,c),w=y.noStyle||f||i?r:h.item({class:r}),N=l().replace(/:/gu,""),I=`c15t-accordion-content-${N}`,b=`c15t-accordion-trigger-${N}`,j=d(()=>({contentId:I,disabled:n,open:A,triggerId:b,value:c}),[I,n,A,b,c]);return o(g.Provider,{value:j,children:o("div",{ref:m,className:w,"data-disabled":a(n),"data-slot":"accordion-item","data-state":A?"open":"closed",...s,children:t})})});A.displayName="AccordionItem";let w=i(({children:e,className:t,...a},r)=>o("div",{ref:r,className:t,"data-slot":"accordion-header",...a,children:e}));w.displayName="AccordionHeader";let N=i(({children:e,className:t,noStyle:n,onClick:i,...c},l)=>{let{noStyle:d}=p(),s=v(),m=h(),u=s.noStyle||d||n?t:[r.triggerRow,t].filter(Boolean).join(" ");return o("button",{ref:l,"aria-controls":m.contentId,"aria-disabled":m.disabled||void 0,"aria-expanded":m.open,className:u,"data-disabled":a(m.disabled),"data-slot":"accordion-trigger","data-state":m.open?"open":"closed",disabled:m.disabled,id:m.triggerId,onClick:o=>{s.onItemToggle(m.value),i?.(o)},type:"button",...c,children:e})});N.displayName="AccordionTrigger";let I=({className:e,noStyle:t,as:a,...r})=>{let n=u(),i="string"==typeof e?e:void 0;return o(a||"div",{className:t?i:n.icon({class:i}),"data-slot":"accordion-icon",...r})};I.displayName="AccordionIcon";let b=m({iconPath:o("path",{d:"M5 12h14M12 5v14"}),title:"Open"}),j=({children:e,closeIcon:t,className:a,noStyle:r,openIcon:n,...i})=>{let c=h(),l=u(),d=r?a:l.arrowOpen({class:a}),s=n??t,m=s?.Element??b;return o("span",{className:d,"data-slot":"accordion-arrow","data-state":c.open?"open":"closed",...i,children:e??o(m,{"aria-hidden":"true",className:s?.className,"data-slot":"accordion-arrow-icon"})})};j.displayName="AccordionArrow";let B=i(({children:e,className:t,innerClassName:a,noStyle:r,...n},i)=>{let{noStyle:c}=p(),l=u(),d=v(),s=h(),m=d.noStyle||c||r,f=m?t:l.content({class:t}),g=m?a:l.contentInner({class:a});return o("section",{ref:i,"aria-hidden":!s.open,"aria-labelledby":s.triggerId,className:f,"data-slot":"accordion-content","data-state":s.open?"open":"closed",id:s.contentId,...n,children:o("div",{className:m?void 0:l.contentViewport({class:void 0}),"data-slot":"accordion-content-viewport",children:o("div",{className:g,children:e})})})});B.displayName="AccordionContent";export{j as Arrow,B as Content,w as Header,I as Icon,A as Item,y as Root,N as Trigger,u as accordionVariants};